commit 7bf77f5282fc5b8d27397318ca7fe590a3b6bf83 Author: zhangkun9038@dingtalk.com <zhangkun9038@dingtalk.com> Date: Sat Mar 22 00:16:05 2025 +0800 first add diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..e247d40 Binary files /dev/null and b/.DS_Store differ diff --git a/.obsidian/app.json b/.obsidian/app.json new file mode 100644 index 0000000..970b310 --- /dev/null +++ b/.obsidian/app.json @@ -0,0 +1,14 @@ +{ + "promptDelete": false, + "pdfExportSettings": { + "pageSize": "Letter", + "landscape": false, + "margin": "0", + "downscalePercent": 100 + }, + "vimMode": true, + "attachmentFolderPath": "attachments", + "useMarkdownLinks": true, + "newLinkFormat": "relative", + "alwaysUpdateLinks": true +} \ No newline at end of file diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json new file mode 100644 index 0000000..9b6e4d3 --- /dev/null +++ b/.obsidian/appearance.json @@ -0,0 +1,4 @@ +{ + "showRibbon": true, + "translucency": true +} \ No newline at end of file diff --git a/.obsidian/backlink.json b/.obsidian/backlink.json new file mode 100644 index 0000000..48ee913 --- /dev/null +++ b/.obsidian/backlink.json @@ -0,0 +1,3 @@ +{ + "backlinkInDocument": true +} \ No newline at end of file diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json new file mode 100644 index 0000000..386221d --- /dev/null +++ b/.obsidian/community-plugins.json @@ -0,0 +1,7 @@ +[ + "dataview", + "obsidian-day-planner", + "obsidian-importer", + "obsidian-kanban", + "obsidian-git" +] \ No newline at end of file diff --git a/.obsidian/core-plugins.json b/.obsidian/core-plugins.json new file mode 100644 index 0000000..b39e979 --- /dev/null +++ b/.obsidian/core-plugins.json @@ -0,0 +1,31 @@ +{ + "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": true, + "zk-prefixer": false, + "random-note": false, + "outline": true, + "word-count": true, + "slides": false, + "audio-recorder": false, + "workspaces": false, + "file-recovery": true, + "publish": false, + "sync": true, + "webviewer": false +} \ No newline at end of file diff --git a/.obsidian/graph.json b/.obsidian/graph.json new file mode 100644 index 0000000..6c57e15 --- /dev/null +++ b/.obsidian/graph.json @@ -0,0 +1,22 @@ +{ + "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.3486109551319057, + "close": false +} \ No newline at end of file diff --git a/.obsidian/page-preview.json b/.obsidian/page-preview.json new file mode 100644 index 0000000..cd43461 --- /dev/null +++ b/.obsidian/page-preview.json @@ -0,0 +1,3 @@ +{ + "preview": true +} \ No newline at end of file diff --git a/.obsidian/plugins/dataview/main.js b/.obsidian/plugins/dataview/main.js new file mode 100644 index 0000000..898d702 --- /dev/null +++ b/.obsidian/plugins/dataview/main.js @@ -0,0 +1,20876 @@ +'use strict'; + +var obsidian = require('obsidian'); +var state = require('@codemirror/state'); +var view = require('@codemirror/view'); +var language = require('@codemirror/language'); + +// these aren't really private, but nor are they really useful to document + +/** + * @private + */ +class LuxonError extends Error {} + +/** + * @private + */ +class InvalidDateTimeError extends LuxonError { + constructor(reason) { + super(`Invalid DateTime: ${reason.toMessage()}`); + } +} + +/** + * @private + */ +class InvalidIntervalError extends LuxonError { + constructor(reason) { + super(`Invalid Interval: ${reason.toMessage()}`); + } +} + +/** + * @private + */ +class InvalidDurationError extends LuxonError { + constructor(reason) { + super(`Invalid Duration: ${reason.toMessage()}`); + } +} + +/** + * @private + */ +class ConflictingSpecificationError extends LuxonError {} + +/** + * @private + */ +class InvalidUnitError extends LuxonError { + constructor(unit) { + super(`Invalid unit ${unit}`); + } +} + +/** + * @private + */ +class InvalidArgumentError extends LuxonError {} + +/** + * @private + */ +class ZoneIsAbstractError extends LuxonError { + constructor() { + super("Zone is an abstract class"); + } +} + +/** + * @private + */ + +const n$1 = "numeric", + s$2 = "short", + l$2 = "long"; + +const DATE_SHORT = { + year: n$1, + month: n$1, + day: n$1, +}; + +const DATE_MED = { + year: n$1, + month: s$2, + day: n$1, +}; + +const DATE_MED_WITH_WEEKDAY = { + year: n$1, + month: s$2, + day: n$1, + weekday: s$2, +}; + +const DATE_FULL = { + year: n$1, + month: l$2, + day: n$1, +}; + +const DATE_HUGE = { + year: n$1, + month: l$2, + day: n$1, + weekday: l$2, +}; + +const TIME_SIMPLE = { + hour: n$1, + minute: n$1, +}; + +const TIME_WITH_SECONDS = { + hour: n$1, + minute: n$1, + second: n$1, +}; + +const TIME_WITH_SHORT_OFFSET = { + hour: n$1, + minute: n$1, + second: n$1, + timeZoneName: s$2, +}; + +const TIME_WITH_LONG_OFFSET = { + hour: n$1, + minute: n$1, + second: n$1, + timeZoneName: l$2, +}; + +const TIME_24_SIMPLE = { + hour: n$1, + minute: n$1, + hourCycle: "h23", +}; + +const TIME_24_WITH_SECONDS = { + hour: n$1, + minute: n$1, + second: n$1, + hourCycle: "h23", +}; + +const TIME_24_WITH_SHORT_OFFSET = { + hour: n$1, + minute: n$1, + second: n$1, + hourCycle: "h23", + timeZoneName: s$2, +}; + +const TIME_24_WITH_LONG_OFFSET = { + hour: n$1, + minute: n$1, + second: n$1, + hourCycle: "h23", + timeZoneName: l$2, +}; + +const DATETIME_SHORT = { + year: n$1, + month: n$1, + day: n$1, + hour: n$1, + minute: n$1, +}; + +const DATETIME_SHORT_WITH_SECONDS = { + year: n$1, + month: n$1, + day: n$1, + hour: n$1, + minute: n$1, + second: n$1, +}; + +const DATETIME_MED = { + year: n$1, + month: s$2, + day: n$1, + hour: n$1, + minute: n$1, +}; + +const DATETIME_MED_WITH_SECONDS = { + year: n$1, + month: s$2, + day: n$1, + hour: n$1, + minute: n$1, + second: n$1, +}; + +const DATETIME_MED_WITH_WEEKDAY = { + year: n$1, + month: s$2, + day: n$1, + weekday: s$2, + hour: n$1, + minute: n$1, +}; + +const DATETIME_FULL = { + year: n$1, + month: l$2, + day: n$1, + hour: n$1, + minute: n$1, + timeZoneName: s$2, +}; + +const DATETIME_FULL_WITH_SECONDS = { + year: n$1, + month: l$2, + day: n$1, + hour: n$1, + minute: n$1, + second: n$1, + timeZoneName: s$2, +}; + +const DATETIME_HUGE = { + year: n$1, + month: l$2, + day: n$1, + weekday: l$2, + hour: n$1, + minute: n$1, + timeZoneName: l$2, +}; + +const DATETIME_HUGE_WITH_SECONDS = { + year: n$1, + month: l$2, + day: n$1, + weekday: l$2, + hour: n$1, + minute: n$1, + second: n$1, + timeZoneName: l$2, +}; + +/** + * @interface + */ +class Zone { + /** + * The type of zone + * @abstract + * @type {string} + */ + get type() { + throw new ZoneIsAbstractError(); + } + + /** + * The name of this zone. + * @abstract + * @type {string} + */ + get name() { + throw new ZoneIsAbstractError(); + } + + get ianaName() { + return this.name; + } + + /** + * Returns whether the offset is known to be fixed for the whole year. + * @abstract + * @type {boolean} + */ + get isUniversal() { + throw new ZoneIsAbstractError(); + } + + /** + * Returns the offset's common name (such as EST) at the specified timestamp + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the name + * @param {Object} opts - Options to affect the format + * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'. + * @param {string} opts.locale - What locale to return the offset name in. + * @return {string} + */ + offsetName(ts, opts) { + throw new ZoneIsAbstractError(); + } + + /** + * Returns the offset's value as a string + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */ + formatOffset(ts, format) { + throw new ZoneIsAbstractError(); + } + + /** + * Return the offset in minutes for this zone at the specified timestamp. + * @abstract + * @param {number} ts - Epoch milliseconds for which to compute the offset + * @return {number} + */ + offset(ts) { + throw new ZoneIsAbstractError(); + } + + /** + * Return whether this Zone is equal to another zone + * @abstract + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */ + equals(otherZone) { + throw new ZoneIsAbstractError(); + } + + /** + * Return whether this Zone is valid. + * @abstract + * @type {boolean} + */ + get isValid() { + throw new ZoneIsAbstractError(); + } +} + +let singleton$1 = null; + +/** + * Represents the local zone for this JavaScript environment. + * @implements {Zone} + */ +class SystemZone extends Zone { + /** + * Get a singleton instance of the local zone + * @return {SystemZone} + */ + static get instance() { + if (singleton$1 === null) { + singleton$1 = new SystemZone(); + } + return singleton$1; + } + + /** @override **/ + get type() { + return "system"; + } + + /** @override **/ + get name() { + return new Intl.DateTimeFormat().resolvedOptions().timeZone; + } + + /** @override **/ + get isUniversal() { + return false; + } + + /** @override **/ + offsetName(ts, { format, locale }) { + return parseZoneInfo(ts, format, locale); + } + + /** @override **/ + formatOffset(ts, format) { + return formatOffset(this.offset(ts), format); + } + + /** @override **/ + offset(ts) { + return -new Date(ts).getTimezoneOffset(); + } + + /** @override **/ + equals(otherZone) { + return otherZone.type === "system"; + } + + /** @override **/ + get isValid() { + return true; + } +} + +let dtfCache = {}; +function makeDTF(zone) { + if (!dtfCache[zone]) { + dtfCache[zone] = new Intl.DateTimeFormat("en-US", { + hour12: false, + timeZone: zone, + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + era: "short", + }); + } + return dtfCache[zone]; +} + +const typeToPos = { + year: 0, + month: 1, + day: 2, + era: 3, + hour: 4, + minute: 5, + second: 6, +}; + +function hackyOffset(dtf, date) { + const formatted = dtf.format(date).replace(/\u200E/g, ""), + parsed = /(\d+)\/(\d+)\/(\d+) (AD|BC),? (\d+):(\d+):(\d+)/.exec(formatted), + [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed; + return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond]; +} + +function partsOffset(dtf, date) { + const formatted = dtf.formatToParts(date); + const filled = []; + for (let i = 0; i < formatted.length; i++) { + const { type, value } = formatted[i]; + const pos = typeToPos[type]; + + if (type === "era") { + filled[pos] = value; + } else if (!isUndefined(pos)) { + filled[pos] = parseInt(value, 10); + } + } + return filled; +} + +let ianaZoneCache = {}; +/** + * A zone identified by an IANA identifier, like America/New_York + * @implements {Zone} + */ +class IANAZone extends Zone { + /** + * @param {string} name - Zone name + * @return {IANAZone} + */ + static create(name) { + if (!ianaZoneCache[name]) { + ianaZoneCache[name] = new IANAZone(name); + } + return ianaZoneCache[name]; + } + + /** + * Reset local caches. Should only be necessary in testing scenarios. + * @return {void} + */ + static resetCache() { + ianaZoneCache = {}; + dtfCache = {}; + } + + /** + * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that. + * @param {string} s - The string to check validity on + * @example IANAZone.isValidSpecifier("America/New_York") //=> true + * @example IANAZone.isValidSpecifier("Sport~~blorp") //=> false + * @deprecated This method returns false for some valid IANA names. Use isValidZone instead. + * @return {boolean} + */ + static isValidSpecifier(s) { + return this.isValidZone(s); + } + + /** + * Returns whether the provided string identifies a real zone + * @param {string} zone - The string to check + * @example IANAZone.isValidZone("America/New_York") //=> true + * @example IANAZone.isValidZone("Fantasia/Castle") //=> false + * @example IANAZone.isValidZone("Sport~~blorp") //=> false + * @return {boolean} + */ + static isValidZone(zone) { + if (!zone) { + return false; + } + try { + new Intl.DateTimeFormat("en-US", { timeZone: zone }).format(); + return true; + } catch (e) { + return false; + } + } + + constructor(name) { + super(); + /** @private **/ + this.zoneName = name; + /** @private **/ + this.valid = IANAZone.isValidZone(name); + } + + /** @override **/ + get type() { + return "iana"; + } + + /** @override **/ + get name() { + return this.zoneName; + } + + /** @override **/ + get isUniversal() { + return false; + } + + /** @override **/ + offsetName(ts, { format, locale }) { + return parseZoneInfo(ts, format, locale, this.name); + } + + /** @override **/ + formatOffset(ts, format) { + return formatOffset(this.offset(ts), format); + } + + /** @override **/ + offset(ts) { + const date = new Date(ts); + + if (isNaN(date)) return NaN; + + const dtf = makeDTF(this.name); + let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts + ? partsOffset(dtf, date) + : hackyOffset(dtf, date); + + if (adOrBc === "BC") { + year = -Math.abs(year) + 1; + } + + // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat + const adjustedHour = hour === 24 ? 0 : hour; + + const asUTC = objToLocalTS({ + year, + month, + day, + hour: adjustedHour, + minute, + second, + millisecond: 0, + }); + + let asTS = +date; + const over = asTS % 1000; + asTS -= over >= 0 ? over : 1000 + over; + return (asUTC - asTS) / (60 * 1000); + } + + /** @override **/ + equals(otherZone) { + return otherZone.type === "iana" && otherZone.name === this.name; + } + + /** @override **/ + get isValid() { + return this.valid; + } +} + +// todo - remap caching + +let intlLFCache = {}; +function getCachedLF(locString, opts = {}) { + const key = JSON.stringify([locString, opts]); + let dtf = intlLFCache[key]; + if (!dtf) { + dtf = new Intl.ListFormat(locString, opts); + intlLFCache[key] = dtf; + } + return dtf; +} + +let intlDTCache = {}; +function getCachedDTF(locString, opts = {}) { + const key = JSON.stringify([locString, opts]); + let dtf = intlDTCache[key]; + if (!dtf) { + dtf = new Intl.DateTimeFormat(locString, opts); + intlDTCache[key] = dtf; + } + return dtf; +} + +let intlNumCache = {}; +function getCachedINF(locString, opts = {}) { + const key = JSON.stringify([locString, opts]); + let inf = intlNumCache[key]; + if (!inf) { + inf = new Intl.NumberFormat(locString, opts); + intlNumCache[key] = inf; + } + return inf; +} + +let intlRelCache = {}; +function getCachedRTF(locString, opts = {}) { + const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options + const key = JSON.stringify([locString, cacheKeyOpts]); + let inf = intlRelCache[key]; + if (!inf) { + inf = new Intl.RelativeTimeFormat(locString, opts); + intlRelCache[key] = inf; + } + return inf; +} + +let sysLocaleCache = null; +function systemLocale() { + if (sysLocaleCache) { + return sysLocaleCache; + } else { + sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale; + return sysLocaleCache; + } +} + +function parseLocaleString(localeStr) { + // I really want to avoid writing a BCP 47 parser + // see, e.g. https://github.com/wooorm/bcp-47 + // Instead, we'll do this: + + // a) if the string has no -u extensions, just leave it alone + // b) if it does, use Intl to resolve everything + // c) if Intl fails, try again without the -u + + // private subtags and unicode subtags have ordering requirements, + // and we're not properly parsing this, so just strip out the + // private ones if they exist. + const xIndex = localeStr.indexOf("-x-"); + if (xIndex !== -1) { + localeStr = localeStr.substring(0, xIndex); + } + + const uIndex = localeStr.indexOf("-u-"); + if (uIndex === -1) { + return [localeStr]; + } else { + let options; + let selectedStr; + try { + options = getCachedDTF(localeStr).resolvedOptions(); + selectedStr = localeStr; + } catch (e) { + const smaller = localeStr.substring(0, uIndex); + options = getCachedDTF(smaller).resolvedOptions(); + selectedStr = smaller; + } + + const { numberingSystem, calendar } = options; + return [selectedStr, numberingSystem, calendar]; + } +} + +function intlConfigString(localeStr, numberingSystem, outputCalendar) { + if (outputCalendar || numberingSystem) { + if (!localeStr.includes("-u-")) { + localeStr += "-u"; + } + + if (outputCalendar) { + localeStr += `-ca-${outputCalendar}`; + } + + if (numberingSystem) { + localeStr += `-nu-${numberingSystem}`; + } + return localeStr; + } else { + return localeStr; + } +} + +function mapMonths(f) { + const ms = []; + for (let i = 1; i <= 12; i++) { + const dt = DateTime.utc(2009, i, 1); + ms.push(f(dt)); + } + return ms; +} + +function mapWeekdays(f) { + const ms = []; + for (let i = 1; i <= 7; i++) { + const dt = DateTime.utc(2016, 11, 13 + i); + ms.push(f(dt)); + } + return ms; +} + +function listStuff(loc, length, englishFn, intlFn) { + const mode = loc.listingMode(); + + if (mode === "error") { + return null; + } else if (mode === "en") { + return englishFn(length); + } else { + return intlFn(length); + } +} + +function supportsFastNumbers(loc) { + if (loc.numberingSystem && loc.numberingSystem !== "latn") { + return false; + } else { + return ( + loc.numberingSystem === "latn" || + !loc.locale || + loc.locale.startsWith("en") || + new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === "latn" + ); + } +} + +/** + * @private + */ + +class PolyNumberFormatter { + constructor(intl, forceSimple, opts) { + this.padTo = opts.padTo || 0; + this.floor = opts.floor || false; + + const { padTo, floor, ...otherOpts } = opts; + + if (!forceSimple || Object.keys(otherOpts).length > 0) { + const intlOpts = { useGrouping: false, ...opts }; + if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo; + this.inf = getCachedINF(intl, intlOpts); + } + } + + format(i) { + if (this.inf) { + const fixed = this.floor ? Math.floor(i) : i; + return this.inf.format(fixed); + } else { + // to match the browser's numberformatter defaults + const fixed = this.floor ? Math.floor(i) : roundTo(i, 3); + return padStart(fixed, this.padTo); + } + } +} + +/** + * @private + */ + +class PolyDateFormatter { + constructor(dt, intl, opts) { + this.opts = opts; + this.originalZone = undefined; + + let z = undefined; + if (this.opts.timeZone) { + // Don't apply any workarounds if a timeZone is explicitly provided in opts + this.dt = dt; + } else if (dt.zone.type === "fixed") { + // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like. + // That is why fixed-offset TZ is set to that unless it is: + // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT. + // 2. Unsupported by the browser: + // - some do not support Etc/ + // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata + const gmtOffset = -1 * (dt.offset / 60); + const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`; + if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) { + z = offsetZ; + this.dt = dt; + } else { + // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so + // we manually apply the offset and substitute the zone as needed. + z = "UTC"; + this.dt = dt.offset === 0 ? dt : dt.setZone("UTC").plus({ minutes: dt.offset }); + this.originalZone = dt.zone; + } + } else if (dt.zone.type === "system") { + this.dt = dt; + } else if (dt.zone.type === "iana") { + this.dt = dt; + z = dt.zone.name; + } else { + // Custom zones can have any offset / offsetName so we just manually + // apply the offset and substitute the zone as needed. + z = "UTC"; + this.dt = dt.setZone("UTC").plus({ minutes: dt.offset }); + this.originalZone = dt.zone; + } + + const intlOpts = { ...this.opts }; + intlOpts.timeZone = intlOpts.timeZone || z; + this.dtf = getCachedDTF(intl, intlOpts); + } + + format() { + if (this.originalZone) { + // If we have to substitute in the actual zone name, we have to use + // formatToParts so that the timezone can be replaced. + return this.formatToParts() + .map(({ value }) => value) + .join(""); + } + return this.dtf.format(this.dt.toJSDate()); + } + + formatToParts() { + const parts = this.dtf.formatToParts(this.dt.toJSDate()); + if (this.originalZone) { + return parts.map((part) => { + if (part.type === "timeZoneName") { + const offsetName = this.originalZone.offsetName(this.dt.ts, { + locale: this.dt.locale, + format: this.opts.timeZoneName, + }); + return { + ...part, + value: offsetName, + }; + } else { + return part; + } + }); + } + return parts; + } + + resolvedOptions() { + return this.dtf.resolvedOptions(); + } +} + +/** + * @private + */ +class PolyRelFormatter { + constructor(intl, isEnglish, opts) { + this.opts = { style: "long", ...opts }; + if (!isEnglish && hasRelative()) { + this.rtf = getCachedRTF(intl, opts); + } + } + + format(count, unit) { + if (this.rtf) { + return this.rtf.format(count, unit); + } else { + return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== "long"); + } + } + + formatToParts(count, unit) { + if (this.rtf) { + return this.rtf.formatToParts(count, unit); + } else { + return []; + } + } +} + +/** + * @private + */ + +class Locale { + static fromOpts(opts) { + return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN); + } + + static create(locale, numberingSystem, outputCalendar, defaultToEN = false) { + const specifiedLocale = locale || Settings.defaultLocale; + // the system locale is useful for human readable strings but annoying for parsing/formatting known formats + const localeR = specifiedLocale || (defaultToEN ? "en-US" : systemLocale()); + const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem; + const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar; + return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale); + } + + static resetCache() { + sysLocaleCache = null; + intlDTCache = {}; + intlNumCache = {}; + intlRelCache = {}; + } + + static fromObject({ locale, numberingSystem, outputCalendar } = {}) { + return Locale.create(locale, numberingSystem, outputCalendar); + } + + constructor(locale, numbering, outputCalendar, specifiedLocale) { + const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale); + + this.locale = parsedLocale; + this.numberingSystem = numbering || parsedNumberingSystem || null; + this.outputCalendar = outputCalendar || parsedOutputCalendar || null; + this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar); + + this.weekdaysCache = { format: {}, standalone: {} }; + this.monthsCache = { format: {}, standalone: {} }; + this.meridiemCache = null; + this.eraCache = {}; + + this.specifiedLocale = specifiedLocale; + this.fastNumbersCached = null; + } + + get fastNumbers() { + if (this.fastNumbersCached == null) { + this.fastNumbersCached = supportsFastNumbers(this); + } + + return this.fastNumbersCached; + } + + listingMode() { + const isActuallyEn = this.isEnglish(); + const hasNoWeirdness = + (this.numberingSystem === null || this.numberingSystem === "latn") && + (this.outputCalendar === null || this.outputCalendar === "gregory"); + return isActuallyEn && hasNoWeirdness ? "en" : "intl"; + } + + clone(alts) { + if (!alts || Object.getOwnPropertyNames(alts).length === 0) { + return this; + } else { + return Locale.create( + alts.locale || this.specifiedLocale, + alts.numberingSystem || this.numberingSystem, + alts.outputCalendar || this.outputCalendar, + alts.defaultToEN || false + ); + } + } + + redefaultToEN(alts = {}) { + return this.clone({ ...alts, defaultToEN: true }); + } + + redefaultToSystem(alts = {}) { + return this.clone({ ...alts, defaultToEN: false }); + } + + months(length, format = false) { + return listStuff(this, length, months, () => { + const intl = format ? { month: length, day: "numeric" } : { month: length }, + formatStr = format ? "format" : "standalone"; + if (!this.monthsCache[formatStr][length]) { + this.monthsCache[formatStr][length] = mapMonths((dt) => this.extract(dt, intl, "month")); + } + return this.monthsCache[formatStr][length]; + }); + } + + weekdays(length, format = false) { + return listStuff(this, length, weekdays, () => { + const intl = format + ? { weekday: length, year: "numeric", month: "long", day: "numeric" } + : { weekday: length }, + formatStr = format ? "format" : "standalone"; + if (!this.weekdaysCache[formatStr][length]) { + this.weekdaysCache[formatStr][length] = mapWeekdays((dt) => + this.extract(dt, intl, "weekday") + ); + } + return this.weekdaysCache[formatStr][length]; + }); + } + + meridiems() { + return listStuff( + this, + undefined, + () => meridiems, + () => { + // In theory there could be aribitrary day periods. We're gonna assume there are exactly two + // for AM and PM. This is probably wrong, but it's makes parsing way easier. + if (!this.meridiemCache) { + const intl = { hour: "numeric", hourCycle: "h12" }; + this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map( + (dt) => this.extract(dt, intl, "dayperiod") + ); + } + + return this.meridiemCache; + } + ); + } + + eras(length) { + return listStuff(this, length, eras, () => { + const intl = { era: length }; + + // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates + // to definitely enumerate them. + if (!this.eraCache[length]) { + this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) => + this.extract(dt, intl, "era") + ); + } + + return this.eraCache[length]; + }); + } + + extract(dt, intlOpts, field) { + const df = this.dtFormatter(dt, intlOpts), + results = df.formatToParts(), + matching = results.find((m) => m.type.toLowerCase() === field); + return matching ? matching.value : null; + } + + numberFormatter(opts = {}) { + // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave) + // (in contrast, the rest of the condition is used heavily) + return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts); + } + + dtFormatter(dt, intlOpts = {}) { + return new PolyDateFormatter(dt, this.intl, intlOpts); + } + + relFormatter(opts = {}) { + return new PolyRelFormatter(this.intl, this.isEnglish(), opts); + } + + listFormatter(opts = {}) { + return getCachedLF(this.intl, opts); + } + + isEnglish() { + return ( + this.locale === "en" || + this.locale.toLowerCase() === "en-us" || + new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us") + ); + } + + equals(other) { + return ( + this.locale === other.locale && + this.numberingSystem === other.numberingSystem && + this.outputCalendar === other.outputCalendar + ); + } +} + +let singleton = null; + +/** + * A zone with a fixed offset (meaning no DST) + * @implements {Zone} + */ +class FixedOffsetZone extends Zone { + /** + * Get a singleton instance of UTC + * @return {FixedOffsetZone} + */ + static get utcInstance() { + if (singleton === null) { + singleton = new FixedOffsetZone(0); + } + return singleton; + } + + /** + * Get an instance with a specified offset + * @param {number} offset - The offset in minutes + * @return {FixedOffsetZone} + */ + static instance(offset) { + return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset); + } + + /** + * Get an instance of FixedOffsetZone from a UTC offset string, like "UTC+6" + * @param {string} s - The offset string to parse + * @example FixedOffsetZone.parseSpecifier("UTC+6") + * @example FixedOffsetZone.parseSpecifier("UTC+06") + * @example FixedOffsetZone.parseSpecifier("UTC-6:00") + * @return {FixedOffsetZone} + */ + static parseSpecifier(s) { + if (s) { + const r = s.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i); + if (r) { + return new FixedOffsetZone(signedOffset(r[1], r[2])); + } + } + return null; + } + + constructor(offset) { + super(); + /** @private **/ + this.fixed = offset; + } + + /** @override **/ + get type() { + return "fixed"; + } + + /** @override **/ + get name() { + return this.fixed === 0 ? "UTC" : `UTC${formatOffset(this.fixed, "narrow")}`; + } + + get ianaName() { + if (this.fixed === 0) { + return "Etc/UTC"; + } else { + return `Etc/GMT${formatOffset(-this.fixed, "narrow")}`; + } + } + + /** @override **/ + offsetName() { + return this.name; + } + + /** @override **/ + formatOffset(ts, format) { + return formatOffset(this.fixed, format); + } + + /** @override **/ + get isUniversal() { + return true; + } + + /** @override **/ + offset() { + return this.fixed; + } + + /** @override **/ + equals(otherZone) { + return otherZone.type === "fixed" && otherZone.fixed === this.fixed; + } + + /** @override **/ + get isValid() { + return true; + } +} + +/** + * A zone that failed to parse. You should never need to instantiate this. + * @implements {Zone} + */ +class InvalidZone extends Zone { + constructor(zoneName) { + super(); + /** @private */ + this.zoneName = zoneName; + } + + /** @override **/ + get type() { + return "invalid"; + } + + /** @override **/ + get name() { + return this.zoneName; + } + + /** @override **/ + get isUniversal() { + return false; + } + + /** @override **/ + offsetName() { + return null; + } + + /** @override **/ + formatOffset() { + return ""; + } + + /** @override **/ + offset() { + return NaN; + } + + /** @override **/ + equals() { + return false; + } + + /** @override **/ + get isValid() { + return false; + } +} + +/** + * @private + */ + +function normalizeZone(input, defaultZone) { + if (isUndefined(input) || input === null) { + return defaultZone; + } else if (input instanceof Zone) { + return input; + } else if (isString(input)) { + const lowered = input.toLowerCase(); + if (lowered === "default") return defaultZone; + else if (lowered === "local" || lowered === "system") return SystemZone.instance; + else if (lowered === "utc" || lowered === "gmt") return FixedOffsetZone.utcInstance; + else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input); + } else if (isNumber(input)) { + return FixedOffsetZone.instance(input); + } else if (typeof input === "object" && "offset" in input && typeof input.offset === "function") { + // This is dumb, but the instanceof check above doesn't seem to really work + // so we're duck checking it + return input; + } else { + return new InvalidZone(input); + } +} + +let now = () => Date.now(), + defaultZone = "system", + defaultLocale = null, + defaultNumberingSystem = null, + defaultOutputCalendar = null, + twoDigitCutoffYear = 60, + throwOnInvalid; + +/** + * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here. + */ +class Settings { + /** + * Get the callback for returning the current timestamp. + * @type {function} + */ + static get now() { + return now; + } + + /** + * Set the callback for returning the current timestamp. + * The function should return a number, which will be interpreted as an Epoch millisecond count + * @type {function} + * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future + * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time + */ + static set now(n) { + now = n; + } + + /** + * Set the default time zone to create DateTimes in. Does not affect existing instances. + * Use the value "system" to reset this value to the system's time zone. + * @type {string} + */ + static set defaultZone(zone) { + defaultZone = zone; + } + + /** + * Get the default time zone object currently used to create DateTimes. Does not affect existing instances. + * The default value is the system's time zone (the one set on the machine that runs this code). + * @type {Zone} + */ + static get defaultZone() { + return normalizeZone(defaultZone, SystemZone.instance); + } + + /** + * Get the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static get defaultLocale() { + return defaultLocale; + } + + /** + * Set the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static set defaultLocale(locale) { + defaultLocale = locale; + } + + /** + * Get the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static get defaultNumberingSystem() { + return defaultNumberingSystem; + } + + /** + * Set the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static set defaultNumberingSystem(numberingSystem) { + defaultNumberingSystem = numberingSystem; + } + + /** + * Get the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static get defaultOutputCalendar() { + return defaultOutputCalendar; + } + + /** + * Set the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + static set defaultOutputCalendar(outputCalendar) { + defaultOutputCalendar = outputCalendar; + } + + /** + * Get the cutoff year after which a string encoding a year as two digits is interpreted to occur in the current century. + * @type {number} + */ + static get twoDigitCutoffYear() { + return twoDigitCutoffYear; + } + + /** + * Set the cutoff year after which a string encoding a year as two digits is interpreted to occur in the current century. + * @type {number} + * @example Settings.twoDigitCutoffYear = 0 // cut-off year is 0, so all 'yy' are interpreted as current century + * @example Settings.twoDigitCutoffYear = 50 // '49' -> 1949; '50' -> 2050 + * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50 + * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50 + */ + static set twoDigitCutoffYear(cutoffYear) { + twoDigitCutoffYear = cutoffYear % 100; + } + + /** + * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + static get throwOnInvalid() { + return throwOnInvalid; + } + + /** + * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + static set throwOnInvalid(t) { + throwOnInvalid = t; + } + + /** + * Reset Luxon's global caches. Should only be necessary in testing scenarios. + * @return {void} + */ + static resetCaches() { + Locale.resetCache(); + IANAZone.resetCache(); + } +} + +/* + This is just a junk drawer, containing anything used across multiple classes. + Because Luxon is small(ish), this should stay small and we won't worry about splitting + it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area. +*/ + +/** + * @private + */ + +// TYPES + +function isUndefined(o) { + return typeof o === "undefined"; +} + +function isNumber(o) { + return typeof o === "number"; +} + +function isInteger(o) { + return typeof o === "number" && o % 1 === 0; +} + +function isString(o) { + return typeof o === "string"; +} + +function isDate(o) { + return Object.prototype.toString.call(o) === "[object Date]"; +} + +// CAPABILITIES + +function hasRelative() { + try { + return typeof Intl !== "undefined" && !!Intl.RelativeTimeFormat; + } catch (e) { + return false; + } +} + +// OBJECTS AND ARRAYS + +function maybeArray(thing) { + return Array.isArray(thing) ? thing : [thing]; +} + +function bestBy(arr, by, compare) { + if (arr.length === 0) { + return undefined; + } + return arr.reduce((best, next) => { + const pair = [by(next), next]; + if (!best) { + return pair; + } else if (compare(best[0], pair[0]) === best[0]) { + return best; + } else { + return pair; + } + }, null)[1]; +} + +function pick(obj, keys) { + return keys.reduce((a, k) => { + a[k] = obj[k]; + return a; + }, {}); +} + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +// NUMBERS AND STRINGS + +function integerBetween(thing, bottom, top) { + return isInteger(thing) && thing >= bottom && thing <= top; +} + +// x % n but takes the sign of n instead of x +function floorMod(x, n) { + return x - n * Math.floor(x / n); +} + +function padStart(input, n = 2) { + const isNeg = input < 0; + let padded; + if (isNeg) { + padded = "-" + ("" + -input).padStart(n, "0"); + } else { + padded = ("" + input).padStart(n, "0"); + } + return padded; +} + +function parseInteger(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseInt(string, 10); + } +} + +function parseFloating(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseFloat(string); + } +} + +function parseMillis(fraction) { + // Return undefined (instead of 0) in these cases, where fraction is not set + if (isUndefined(fraction) || fraction === null || fraction === "") { + return undefined; + } else { + const f = parseFloat("0." + fraction) * 1000; + return Math.floor(f); + } +} + +function roundTo(number, digits, towardZero = false) { + const factor = 10 ** digits, + rounder = towardZero ? Math.trunc : Math.round; + return rounder(number * factor) / factor; +} + +// DATE BASICS + +function isLeapYear(year) { + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); +} + +function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; +} + +function daysInMonth(year, month) { + const modMonth = floorMod(month - 1, 12) + 1, + modYear = year + (month - modMonth) / 12; + + if (modMonth === 2) { + return isLeapYear(modYear) ? 29 : 28; + } else { + return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1]; + } +} + +// convert a calendar object to a local timestamp (epoch, but with the offset baked in) +function objToLocalTS(obj) { + let d = Date.UTC( + obj.year, + obj.month - 1, + obj.day, + obj.hour, + obj.minute, + obj.second, + obj.millisecond + ); + + // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that + if (obj.year < 100 && obj.year >= 0) { + d = new Date(d); + // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not + // so if obj.year is in 99, but obj.day makes it roll over into year 100, + // the calculations done by Date.UTC are using year 2000 - which is incorrect + d.setUTCFullYear(obj.year, obj.month - 1, obj.day); + } + return +d; +} + +function weeksInWeekYear(weekYear) { + const p1 = + (weekYear + + Math.floor(weekYear / 4) - + Math.floor(weekYear / 100) + + Math.floor(weekYear / 400)) % + 7, + last = weekYear - 1, + p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7; + return p1 === 4 || p2 === 3 ? 53 : 52; +} + +function untruncateYear(year) { + if (year > 99) { + return year; + } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year; +} + +// PARSING + +function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) { + const date = new Date(ts), + intlOpts = { + hourCycle: "h23", + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + }; + + if (timeZone) { + intlOpts.timeZone = timeZone; + } + + const modified = { timeZoneName: offsetFormat, ...intlOpts }; + + const parsed = new Intl.DateTimeFormat(locale, modified) + .formatToParts(date) + .find((m) => m.type.toLowerCase() === "timezonename"); + return parsed ? parsed.value : null; +} + +// signedOffset('-5', '30') -> -330 +function signedOffset(offHourStr, offMinuteStr) { + let offHour = parseInt(offHourStr, 10); + + // don't || this because we want to preserve -0 + if (Number.isNaN(offHour)) { + offHour = 0; + } + + const offMin = parseInt(offMinuteStr, 10) || 0, + offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin; + return offHour * 60 + offMinSigned; +} + +// COERCION + +function asNumber(value) { + const numericValue = Number(value); + if (typeof value === "boolean" || value === "" || Number.isNaN(numericValue)) + throw new InvalidArgumentError(`Invalid unit value ${value}`); + return numericValue; +} + +function normalizeObject(obj, normalizer) { + const normalized = {}; + for (const u in obj) { + if (hasOwnProperty(obj, u)) { + const v = obj[u]; + if (v === undefined || v === null) continue; + normalized[normalizer(u)] = asNumber(v); + } + } + return normalized; +} + +function formatOffset(offset, format) { + const hours = Math.trunc(Math.abs(offset / 60)), + minutes = Math.trunc(Math.abs(offset % 60)), + sign = offset >= 0 ? "+" : "-"; + + switch (format) { + case "short": + return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`; + case "narrow": + return `${sign}${hours}${minutes > 0 ? `:${minutes}` : ""}`; + case "techie": + return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`; + default: + throw new RangeError(`Value format ${format} is out of range for property format`); + } +} + +function timeObject(obj) { + return pick(obj, ["hour", "minute", "second", "millisecond"]); +} + +/** + * @private + */ + +const monthsLong = [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December", +]; + +const monthsShort = [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", +]; + +const monthsNarrow = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]; + +function months(length) { + switch (length) { + case "narrow": + return [...monthsNarrow]; + case "short": + return [...monthsShort]; + case "long": + return [...monthsLong]; + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]; + case "2-digit": + return ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]; + default: + return null; + } +} + +const weekdaysLong = [ + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + "Sunday", +]; + +const weekdaysShort = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; + +const weekdaysNarrow = ["M", "T", "W", "T", "F", "S", "S"]; + +function weekdays(length) { + switch (length) { + case "narrow": + return [...weekdaysNarrow]; + case "short": + return [...weekdaysShort]; + case "long": + return [...weekdaysLong]; + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7"]; + default: + return null; + } +} + +const meridiems = ["AM", "PM"]; + +const erasLong = ["Before Christ", "Anno Domini"]; + +const erasShort = ["BC", "AD"]; + +const erasNarrow = ["B", "A"]; + +function eras(length) { + switch (length) { + case "narrow": + return [...erasNarrow]; + case "short": + return [...erasShort]; + case "long": + return [...erasLong]; + default: + return null; + } +} + +function meridiemForDateTime(dt) { + return meridiems[dt.hour < 12 ? 0 : 1]; +} + +function weekdayForDateTime(dt, length) { + return weekdays(length)[dt.weekday - 1]; +} + +function monthForDateTime(dt, length) { + return months(length)[dt.month - 1]; +} + +function eraForDateTime(dt, length) { + return eras(length)[dt.year < 0 ? 0 : 1]; +} + +function formatRelativeTime(unit, count, numeric = "always", narrow = false) { + const units = { + years: ["year", "yr."], + quarters: ["quarter", "qtr."], + months: ["month", "mo."], + weeks: ["week", "wk."], + days: ["day", "day", "days"], + hours: ["hour", "hr."], + minutes: ["minute", "min."], + seconds: ["second", "sec."], + }; + + const lastable = ["hours", "minutes", "seconds"].indexOf(unit) === -1; + + if (numeric === "auto" && lastable) { + const isDay = unit === "days"; + switch (count) { + case 1: + return isDay ? "tomorrow" : `next ${units[unit][0]}`; + case -1: + return isDay ? "yesterday" : `last ${units[unit][0]}`; + case 0: + return isDay ? "today" : `this ${units[unit][0]}`; + } + } + + const isInPast = Object.is(count, -0) || count < 0, + fmtValue = Math.abs(count), + singular = fmtValue === 1, + lilUnits = units[unit], + fmtUnit = narrow + ? singular + ? lilUnits[1] + : lilUnits[2] || lilUnits[1] + : singular + ? units[unit][0] + : unit; + return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`; +} + +function stringifyTokens(splits, tokenToString) { + let s = ""; + for (const token of splits) { + if (token.literal) { + s += token.val; + } else { + s += tokenToString(token.val); + } + } + return s; +} + +const macroTokenToFormatOpts = { + D: DATE_SHORT, + DD: DATE_MED, + DDD: DATE_FULL, + DDDD: DATE_HUGE, + t: TIME_SIMPLE, + tt: TIME_WITH_SECONDS, + ttt: TIME_WITH_SHORT_OFFSET, + tttt: TIME_WITH_LONG_OFFSET, + T: TIME_24_SIMPLE, + TT: TIME_24_WITH_SECONDS, + TTT: TIME_24_WITH_SHORT_OFFSET, + TTTT: TIME_24_WITH_LONG_OFFSET, + f: DATETIME_SHORT, + ff: DATETIME_MED, + fff: DATETIME_FULL, + ffff: DATETIME_HUGE, + F: DATETIME_SHORT_WITH_SECONDS, + FF: DATETIME_MED_WITH_SECONDS, + FFF: DATETIME_FULL_WITH_SECONDS, + FFFF: DATETIME_HUGE_WITH_SECONDS, +}; + +/** + * @private + */ + +class Formatter { + static create(locale, opts = {}) { + return new Formatter(locale, opts); + } + + static parseFormat(fmt) { + // white-space is always considered a literal in user-provided formats + // the " " token has a special meaning (see unitForToken) + + let current = null, + currentFull = "", + bracketed = false; + const splits = []; + for (let i = 0; i < fmt.length; i++) { + const c = fmt.charAt(i); + if (c === "'") { + if (currentFull.length > 0) { + splits.push({ literal: bracketed || /^\s+$/.test(currentFull), val: currentFull }); + } + current = null; + currentFull = ""; + bracketed = !bracketed; + } else if (bracketed) { + currentFull += c; + } else if (c === current) { + currentFull += c; + } else { + if (currentFull.length > 0) { + splits.push({ literal: /^\s+$/.test(currentFull), val: currentFull }); + } + currentFull = c; + current = c; + } + } + + if (currentFull.length > 0) { + splits.push({ literal: bracketed || /^\s+$/.test(currentFull), val: currentFull }); + } + + return splits; + } + + static macroTokenToFormatOpts(token) { + return macroTokenToFormatOpts[token]; + } + + constructor(locale, formatOpts) { + this.opts = formatOpts; + this.loc = locale; + this.systemLoc = null; + } + + formatWithSystemDefault(dt, opts) { + if (this.systemLoc === null) { + this.systemLoc = this.loc.redefaultToSystem(); + } + const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts }); + return df.format(); + } + + dtFormatter(dt, opts = {}) { + return this.loc.dtFormatter(dt, { ...this.opts, ...opts }); + } + + formatDateTime(dt, opts) { + return this.dtFormatter(dt, opts).format(); + } + + formatDateTimeParts(dt, opts) { + return this.dtFormatter(dt, opts).formatToParts(); + } + + formatInterval(interval, opts) { + const df = this.dtFormatter(interval.start, opts); + return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate()); + } + + resolvedOptions(dt, opts) { + return this.dtFormatter(dt, opts).resolvedOptions(); + } + + num(n, p = 0) { + // we get some perf out of doing this here, annoyingly + if (this.opts.forceSimple) { + return padStart(n, p); + } + + const opts = { ...this.opts }; + + if (p > 0) { + opts.padTo = p; + } + + return this.loc.numberFormatter(opts).format(n); + } + + formatDateTimeFromString(dt, fmt) { + const knownEnglish = this.loc.listingMode() === "en", + useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== "gregory", + string = (opts, extract) => this.loc.extract(dt, opts, extract), + formatOffset = (opts) => { + if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) { + return "Z"; + } + + return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : ""; + }, + meridiem = () => + knownEnglish + ? meridiemForDateTime(dt) + : string({ hour: "numeric", hourCycle: "h12" }, "dayperiod"), + month = (length, standalone) => + knownEnglish + ? monthForDateTime(dt, length) + : string(standalone ? { month: length } : { month: length, day: "numeric" }, "month"), + weekday = (length, standalone) => + knownEnglish + ? weekdayForDateTime(dt, length) + : string( + standalone ? { weekday: length } : { weekday: length, month: "long", day: "numeric" }, + "weekday" + ), + maybeMacro = (token) => { + const formatOpts = Formatter.macroTokenToFormatOpts(token); + if (formatOpts) { + return this.formatWithSystemDefault(dt, formatOpts); + } else { + return token; + } + }, + era = (length) => + knownEnglish ? eraForDateTime(dt, length) : string({ era: length }, "era"), + tokenToString = (token) => { + // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols + switch (token) { + // ms + case "S": + return this.num(dt.millisecond); + case "u": + // falls through + case "SSS": + return this.num(dt.millisecond, 3); + // seconds + case "s": + return this.num(dt.second); + case "ss": + return this.num(dt.second, 2); + // fractional seconds + case "uu": + return this.num(Math.floor(dt.millisecond / 10), 2); + case "uuu": + return this.num(Math.floor(dt.millisecond / 100)); + // minutes + case "m": + return this.num(dt.minute); + case "mm": + return this.num(dt.minute, 2); + // hours + case "h": + return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12); + case "hh": + return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2); + case "H": + return this.num(dt.hour); + case "HH": + return this.num(dt.hour, 2); + // offset + case "Z": + // like +6 + return formatOffset({ format: "narrow", allowZ: this.opts.allowZ }); + case "ZZ": + // like +06:00 + return formatOffset({ format: "short", allowZ: this.opts.allowZ }); + case "ZZZ": + // like +0600 + return formatOffset({ format: "techie", allowZ: this.opts.allowZ }); + case "ZZZZ": + // like EST + return dt.zone.offsetName(dt.ts, { format: "short", locale: this.loc.locale }); + case "ZZZZZ": + // like Eastern Standard Time + return dt.zone.offsetName(dt.ts, { format: "long", locale: this.loc.locale }); + // zone + case "z": + // like America/New_York + return dt.zoneName; + // meridiems + case "a": + return meridiem(); + // dates + case "d": + return useDateTimeFormatter ? string({ day: "numeric" }, "day") : this.num(dt.day); + case "dd": + return useDateTimeFormatter ? string({ day: "2-digit" }, "day") : this.num(dt.day, 2); + // weekdays - standalone + case "c": + // like 1 + return this.num(dt.weekday); + case "ccc": + // like 'Tues' + return weekday("short", true); + case "cccc": + // like 'Tuesday' + return weekday("long", true); + case "ccccc": + // like 'T' + return weekday("narrow", true); + // weekdays - format + case "E": + // like 1 + return this.num(dt.weekday); + case "EEE": + // like 'Tues' + return weekday("short", false); + case "EEEE": + // like 'Tuesday' + return weekday("long", false); + case "EEEEE": + // like 'T' + return weekday("narrow", false); + // months - standalone + case "L": + // like 1 + return useDateTimeFormatter + ? string({ month: "numeric", day: "numeric" }, "month") + : this.num(dt.month); + case "LL": + // like 01, doesn't seem to work + return useDateTimeFormatter + ? string({ month: "2-digit", day: "numeric" }, "month") + : this.num(dt.month, 2); + case "LLL": + // like Jan + return month("short", true); + case "LLLL": + // like January + return month("long", true); + case "LLLLL": + // like J + return month("narrow", true); + // months - format + case "M": + // like 1 + return useDateTimeFormatter + ? string({ month: "numeric" }, "month") + : this.num(dt.month); + case "MM": + // like 01 + return useDateTimeFormatter + ? string({ month: "2-digit" }, "month") + : this.num(dt.month, 2); + case "MMM": + // like Jan + return month("short", false); + case "MMMM": + // like January + return month("long", false); + case "MMMMM": + // like J + return month("narrow", false); + // years + case "y": + // like 2014 + return useDateTimeFormatter ? string({ year: "numeric" }, "year") : this.num(dt.year); + case "yy": + // like 14 + return useDateTimeFormatter + ? string({ year: "2-digit" }, "year") + : this.num(dt.year.toString().slice(-2), 2); + case "yyyy": + // like 0012 + return useDateTimeFormatter + ? string({ year: "numeric" }, "year") + : this.num(dt.year, 4); + case "yyyyyy": + // like 000012 + return useDateTimeFormatter + ? string({ year: "numeric" }, "year") + : this.num(dt.year, 6); + // eras + case "G": + // like AD + return era("short"); + case "GG": + // like Anno Domini + return era("long"); + case "GGGGG": + return era("narrow"); + case "kk": + return this.num(dt.weekYear.toString().slice(-2), 2); + case "kkkk": + return this.num(dt.weekYear, 4); + case "W": + return this.num(dt.weekNumber); + case "WW": + return this.num(dt.weekNumber, 2); + case "o": + return this.num(dt.ordinal); + case "ooo": + return this.num(dt.ordinal, 3); + case "q": + // like 1 + return this.num(dt.quarter); + case "qq": + // like 01 + return this.num(dt.quarter, 2); + case "X": + return this.num(Math.floor(dt.ts / 1000)); + case "x": + return this.num(dt.ts); + default: + return maybeMacro(token); + } + }; + + return stringifyTokens(Formatter.parseFormat(fmt), tokenToString); + } + + formatDurationFromString(dur, fmt) { + const tokenToField = (token) => { + switch (token[0]) { + case "S": + return "millisecond"; + case "s": + return "second"; + case "m": + return "minute"; + case "h": + return "hour"; + case "d": + return "day"; + case "w": + return "week"; + case "M": + return "month"; + case "y": + return "year"; + default: + return null; + } + }, + tokenToString = (lildur) => (token) => { + const mapped = tokenToField(token); + if (mapped) { + return this.num(lildur.get(mapped), token.length); + } else { + return token; + } + }, + tokens = Formatter.parseFormat(fmt), + realTokens = tokens.reduce( + (found, { literal, val }) => (literal ? found : found.concat(val)), + [] + ), + collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t)); + return stringifyTokens(tokens, tokenToString(collapsed)); + } +} + +class Invalid { + constructor(reason, explanation) { + this.reason = reason; + this.explanation = explanation; + } + + toMessage() { + if (this.explanation) { + return `${this.reason}: ${this.explanation}`; + } else { + return this.reason; + } + } +} + +/* + * This file handles parsing for well-specified formats. Here's how it works: + * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match. + * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object + * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence. + * Extractors can take a "cursor" representing the offset in the match to look at. This makes it easy to combine extractors. + * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions. + * Some extractions are super dumb and simpleParse and fromStrings help DRY them. + */ + +const ianaRegex = /[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/; + +function combineRegexes(...regexes) { + const full = regexes.reduce((f, r) => f + r.source, ""); + return RegExp(`^${full}$`); +} + +function combineExtractors(...extractors) { + return (m) => + extractors + .reduce( + ([mergedVals, mergedZone, cursor], ex) => { + const [val, zone, next] = ex(m, cursor); + return [{ ...mergedVals, ...val }, zone || mergedZone, next]; + }, + [{}, null, 1] + ) + .slice(0, 2); +} + +function parse(s, ...patterns) { + if (s == null) { + return [null, null]; + } + + for (const [regex, extractor] of patterns) { + const m = regex.exec(s); + if (m) { + return extractor(m); + } + } + return [null, null]; +} + +function simpleParse(...keys) { + return (match, cursor) => { + const ret = {}; + let i; + + for (i = 0; i < keys.length; i++) { + ret[keys[i]] = parseInteger(match[cursor + i]); + } + return [ret, null, cursor + i]; + }; +} + +// ISO and SQL parsing +const offsetRegex = /(?:(Z)|([+-]\d\d)(?::?(\d\d))?)/; +const isoExtendedZone = `(?:${offsetRegex.source}?(?:\\[(${ianaRegex.source})\\])?)?`; +const isoTimeBaseRegex = /(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/; +const isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`); +const isoTimeExtensionRegex = RegExp(`(?:T${isoTimeRegex.source})?`); +const isoYmdRegex = /([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/; +const isoWeekRegex = /(\d{4})-?W(\d\d)(?:-?(\d))?/; +const isoOrdinalRegex = /(\d{4})-?(\d{3})/; +const extractISOWeekData = simpleParse("weekYear", "weekNumber", "weekDay"); +const extractISOOrdinalData = simpleParse("year", "ordinal"); +const sqlYmdRegex = /(\d{4})-(\d\d)-(\d\d)/; // dumbed-down version of the ISO one +const sqlTimeRegex = RegExp( + `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?` +); +const sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`); + +function int(match, pos, fallback) { + const m = match[pos]; + return isUndefined(m) ? fallback : parseInteger(m); +} + +function extractISOYmd(match, cursor) { + const item = { + year: int(match, cursor), + month: int(match, cursor + 1, 1), + day: int(match, cursor + 2, 1), + }; + + return [item, null, cursor + 3]; +} + +function extractISOTime(match, cursor) { + const item = { + hours: int(match, cursor, 0), + minutes: int(match, cursor + 1, 0), + seconds: int(match, cursor + 2, 0), + milliseconds: parseMillis(match[cursor + 3]), + }; + + return [item, null, cursor + 4]; +} + +function extractISOOffset(match, cursor) { + const local = !match[cursor] && !match[cursor + 1], + fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]), + zone = local ? null : FixedOffsetZone.instance(fullOffset); + return [{}, zone, cursor + 3]; +} + +function extractIANAZone(match, cursor) { + const zone = match[cursor] ? IANAZone.create(match[cursor]) : null; + return [{}, zone, cursor + 1]; +} + +// ISO time parsing + +const isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`); + +// ISO duration parsing + +const isoDuration = + /^-?P(?:(?:(-?\d{1,20}(?:\.\d{1,20})?)Y)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20}(?:\.\d{1,20})?)W)?(?:(-?\d{1,20}(?:\.\d{1,20})?)D)?(?:T(?:(-?\d{1,20}(?:\.\d{1,20})?)H)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,20}))?S)?)?)$/; + +function extractISODuration(match) { + const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] = + match; + + const hasNegativePrefix = s[0] === "-"; + const negativeSeconds = secondStr && secondStr[0] === "-"; + + const maybeNegate = (num, force = false) => + num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num; + + return [ + { + years: maybeNegate(parseFloating(yearStr)), + months: maybeNegate(parseFloating(monthStr)), + weeks: maybeNegate(parseFloating(weekStr)), + days: maybeNegate(parseFloating(dayStr)), + hours: maybeNegate(parseFloating(hourStr)), + minutes: maybeNegate(parseFloating(minuteStr)), + seconds: maybeNegate(parseFloating(secondStr), secondStr === "-0"), + milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds), + }, + ]; +} + +// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York +// and not just that we're in -240 *right now*. But since I don't think these are used that often +// I'm just going to ignore that +const obsOffsets = { + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60, +}; + +function fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) { + const result = { + year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr), + month: monthsShort.indexOf(monthStr) + 1, + day: parseInteger(dayStr), + hour: parseInteger(hourStr), + minute: parseInteger(minuteStr), + }; + + if (secondStr) result.second = parseInteger(secondStr); + if (weekdayStr) { + result.weekday = + weekdayStr.length > 3 + ? weekdaysLong.indexOf(weekdayStr) + 1 + : weekdaysShort.indexOf(weekdayStr) + 1; + } + + return result; +} + +// RFC 2822/5322 +const rfc2822 = + /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/; + +function extractRFC2822(match) { + const [ + , + weekdayStr, + dayStr, + monthStr, + yearStr, + hourStr, + minuteStr, + secondStr, + obsOffset, + milOffset, + offHourStr, + offMinuteStr, + ] = match, + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + + let offset; + if (obsOffset) { + offset = obsOffsets[obsOffset]; + } else if (milOffset) { + offset = 0; + } else { + offset = signedOffset(offHourStr, offMinuteStr); + } + + return [result, new FixedOffsetZone(offset)]; +} + +function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s + .replace(/\([^()]*\)|[\n\t]/g, " ") + .replace(/(\s\s+)/g, " ") + .trim(); +} + +// http date + +const rfc1123 = + /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/, + rfc850 = + /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/, + ascii = + /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/; + +function extractRFC1123Or850(match) { + const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match, + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; +} + +function extractASCII(match) { + const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match, + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; +} + +const isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex); +const isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex); +const isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex); +const isoTimeCombinedRegex = combineRegexes(isoTimeRegex); + +const extractISOYmdTimeAndOffset = combineExtractors( + extractISOYmd, + extractISOTime, + extractISOOffset, + extractIANAZone +); +const extractISOWeekTimeAndOffset = combineExtractors( + extractISOWeekData, + extractISOTime, + extractISOOffset, + extractIANAZone +); +const extractISOOrdinalDateAndTime = combineExtractors( + extractISOOrdinalData, + extractISOTime, + extractISOOffset, + extractIANAZone +); +const extractISOTimeAndOffset = combineExtractors( + extractISOTime, + extractISOOffset, + extractIANAZone +); + +/* + * @private + */ + +function parseISODate(s) { + return parse( + s, + [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], + [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], + [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime], + [isoTimeCombinedRegex, extractISOTimeAndOffset] + ); +} + +function parseRFC2822Date(s) { + return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]); +} + +function parseHTTPDate(s) { + return parse( + s, + [rfc1123, extractRFC1123Or850], + [rfc850, extractRFC1123Or850], + [ascii, extractASCII] + ); +} + +function parseISODuration(s) { + return parse(s, [isoDuration, extractISODuration]); +} + +const extractISOTimeOnly = combineExtractors(extractISOTime); + +function parseISOTimeOnly(s) { + return parse(s, [isoTimeOnly, extractISOTimeOnly]); +} + +const sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex); +const sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex); + +const extractISOTimeOffsetAndIANAZone = combineExtractors( + extractISOTime, + extractISOOffset, + extractIANAZone +); + +function parseSQL(s) { + return parse( + s, + [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], + [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone] + ); +} + +const INVALID$2 = "Invalid Duration"; + +// unit conversion constants +const lowOrderMatrix = { + weeks: { + days: 7, + hours: 7 * 24, + minutes: 7 * 24 * 60, + seconds: 7 * 24 * 60 * 60, + milliseconds: 7 * 24 * 60 * 60 * 1000, + }, + days: { + hours: 24, + minutes: 24 * 60, + seconds: 24 * 60 * 60, + milliseconds: 24 * 60 * 60 * 1000, + }, + hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 }, + minutes: { seconds: 60, milliseconds: 60 * 1000 }, + seconds: { milliseconds: 1000 }, + }, + casualMatrix = { + years: { + quarters: 4, + months: 12, + weeks: 52, + days: 365, + hours: 365 * 24, + minutes: 365 * 24 * 60, + seconds: 365 * 24 * 60 * 60, + milliseconds: 365 * 24 * 60 * 60 * 1000, + }, + quarters: { + months: 3, + weeks: 13, + days: 91, + hours: 91 * 24, + minutes: 91 * 24 * 60, + seconds: 91 * 24 * 60 * 60, + milliseconds: 91 * 24 * 60 * 60 * 1000, + }, + months: { + weeks: 4, + days: 30, + hours: 30 * 24, + minutes: 30 * 24 * 60, + seconds: 30 * 24 * 60 * 60, + milliseconds: 30 * 24 * 60 * 60 * 1000, + }, + + ...lowOrderMatrix, + }, + daysInYearAccurate = 146097.0 / 400, + daysInMonthAccurate = 146097.0 / 4800, + accurateMatrix = { + years: { + quarters: 4, + months: 12, + weeks: daysInYearAccurate / 7, + days: daysInYearAccurate, + hours: daysInYearAccurate * 24, + minutes: daysInYearAccurate * 24 * 60, + seconds: daysInYearAccurate * 24 * 60 * 60, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000, + }, + quarters: { + months: 3, + weeks: daysInYearAccurate / 28, + days: daysInYearAccurate / 4, + hours: (daysInYearAccurate * 24) / 4, + minutes: (daysInYearAccurate * 24 * 60) / 4, + seconds: (daysInYearAccurate * 24 * 60 * 60) / 4, + milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4, + }, + months: { + weeks: daysInMonthAccurate / 7, + days: daysInMonthAccurate, + hours: daysInMonthAccurate * 24, + minutes: daysInMonthAccurate * 24 * 60, + seconds: daysInMonthAccurate * 24 * 60 * 60, + milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000, + }, + ...lowOrderMatrix, + }; + +// units ordered by size +const orderedUnits$1 = [ + "years", + "quarters", + "months", + "weeks", + "days", + "hours", + "minutes", + "seconds", + "milliseconds", +]; + +const reverseUnits = orderedUnits$1.slice(0).reverse(); + +// clone really means "create another instance just like this one, but with these changes" +function clone$1(dur, alts, clear = false) { + // deep merge for vals + const conf = { + values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) }, + loc: dur.loc.clone(alts.loc), + conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy, + matrix: alts.matrix || dur.matrix, + }; + return new Duration(conf); +} + +function durationToMillis(matrix, vals) { + let sum = vals.milliseconds ?? 0; + for (const unit of reverseUnits.slice(1)) { + if (vals[unit]) { + sum += vals[unit] * matrix[unit]["milliseconds"]; + } + } + return sum; +} + +// NB: mutates parameters +function normalizeValues(matrix, vals) { + // the logic below assumes the overall value of the duration is positive + // if this is not the case, factor is used to make it so + const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1; + + orderedUnits$1.reduceRight((previous, current) => { + if (!isUndefined(vals[current])) { + if (previous) { + const previousVal = vals[previous] * factor; + const conv = matrix[current][previous]; + + // if (previousVal < 0): + // lower order unit is negative (e.g. { years: 2, days: -2 }) + // normalize this by reducing the higher order unit by the appropriate amount + // and increasing the lower order unit + // this can never make the higher order unit negative, because this function only operates + // on positive durations, so the amount of time represented by the lower order unit cannot + // be larger than the higher order unit + // else: + // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 }) + // in this case we attempt to convert as much as possible from the lower order unit into + // the higher order one + // + // Math.floor takes care of both of these cases, rounding away from 0 + // if previousVal < 0 it makes the absolute value larger + // if previousVal >= it makes the absolute value smaller + const rollUp = Math.floor(previousVal / conv); + vals[current] += rollUp * factor; + vals[previous] -= rollUp * conv * factor; + } + return current; + } else { + return previous; + } + }, null); + + // try to convert any decimals into smaller units if possible + // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 } + orderedUnits$1.reduce((previous, current) => { + if (!isUndefined(vals[current])) { + if (previous) { + const fraction = vals[previous] % 1; + vals[previous] -= fraction; + vals[current] += fraction * matrix[previous][current]; + } + return current; + } else { + return previous; + } + }, null); +} + +// Remove all properties with a value of 0 from an object +function removeZeroes(vals) { + const newVals = {}; + for (const [key, value] of Object.entries(vals)) { + if (value !== 0) { + newVals[key] = value; + } + } + return newVals; +} + +/** + * A Duration object represents a period of time, like "2 months" or "1 day, 1 hour". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime. + * + * Here is a brief overview of commonly used methods and getters in Duration: + * + * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}. + * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors. + * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors. + * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}. + * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON} + * + * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation. + */ +class Duration { + /** + * @private + */ + constructor(config) { + const accurate = config.conversionAccuracy === "longterm" || false; + let matrix = accurate ? accurateMatrix : casualMatrix; + + if (config.matrix) { + matrix = config.matrix; + } + + /** + * @access private + */ + this.values = config.values; + /** + * @access private + */ + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + this.conversionAccuracy = accurate ? "longterm" : "casual"; + /** + * @access private + */ + this.invalid = config.invalid || null; + /** + * @access private + */ + this.matrix = matrix; + /** + * @access private + */ + this.isLuxonDuration = true; + } + + /** + * Create Duration from a number of milliseconds. + * @param {number} count of milliseconds + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + static fromMillis(count, opts) { + return Duration.fromObject({ milliseconds: count }, opts); + } + + /** + * Create a Duration from a JavaScript object with keys like 'years' and 'hours'. + * If this object is empty then a zero milliseconds duration is returned. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.years + * @param {number} obj.quarters + * @param {number} obj.months + * @param {number} obj.weeks + * @param {number} obj.days + * @param {number} obj.hours + * @param {number} obj.minutes + * @param {number} obj.seconds + * @param {number} obj.milliseconds + * @param {Object} [opts=[]] - options for creating this Duration + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the custom conversion system to use + * @return {Duration} + */ + static fromObject(obj, opts = {}) { + if (obj == null || typeof obj !== "object") { + throw new InvalidArgumentError( + `Duration.fromObject: argument expected to be an object, got ${ + obj === null ? "null" : typeof obj + }` + ); + } + + return new Duration({ + values: normalizeObject(obj, Duration.normalizeUnit), + loc: Locale.fromObject(opts), + conversionAccuracy: opts.conversionAccuracy, + matrix: opts.matrix, + }); + } + + /** + * Create a Duration from DurationLike. + * + * @param {Object | number | Duration} durationLike + * One of: + * - object with keys like 'years' and 'hours'. + * - number representing milliseconds + * - Duration instance + * @return {Duration} + */ + static fromDurationLike(durationLike) { + if (isNumber(durationLike)) { + return Duration.fromMillis(durationLike); + } else if (Duration.isDuration(durationLike)) { + return durationLike; + } else if (typeof durationLike === "object") { + return Duration.fromObject(durationLike); + } else { + throw new InvalidArgumentError( + `Unknown duration argument ${durationLike} of type ${typeof durationLike}` + ); + } + } + + /** + * Create a Duration from an ISO 8601 duration string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the preset conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 } + * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 } + * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 } + * @return {Duration} + */ + static fromISO(text, opts) { + const [parsed] = parseISODuration(text); + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`); + } + } + + /** + * Create a Duration from an ISO 8601 time string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use + * @param {string} [opts.matrix=Object] - the conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Times + * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 } + * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @return {Duration} + */ + static fromISOTime(text, opts) { + const [parsed] = parseISOTimeOnly(text); + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`); + } + } + + /** + * Create an invalid Duration. + * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Duration} + */ + static invalid(reason, explanation = null) { + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Duration is invalid"); + } + + const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidDurationError(invalid); + } else { + return new Duration({ invalid }); + } + } + + /** + * @private + */ + static normalizeUnit(unit) { + const normalized = { + year: "years", + years: "years", + quarter: "quarters", + quarters: "quarters", + month: "months", + months: "months", + week: "weeks", + weeks: "weeks", + day: "days", + days: "days", + hour: "hours", + hours: "hours", + minute: "minutes", + minutes: "minutes", + second: "seconds", + seconds: "seconds", + millisecond: "milliseconds", + milliseconds: "milliseconds", + }[unit ? unit.toLowerCase() : unit]; + + if (!normalized) throw new InvalidUnitError(unit); + + return normalized; + } + + /** + * Check if an object is a Duration. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + static isDuration(o) { + return (o && o.isLuxonDuration) || false; + } + + /** + * Get the locale of a Duration, such 'en-GB' + * @type {string} + */ + get locale() { + return this.isValid ? this.loc.locale : null; + } + + /** + * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration + * + * @type {string} + */ + get numberingSystem() { + return this.isValid ? this.loc.numberingSystem : null; + } + + /** + * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens: + * * `S` for milliseconds + * * `s` for seconds + * * `m` for minutes + * * `h` for hours + * * `d` for days + * * `w` for weeks + * * `M` for months + * * `y` for years + * Notes: + * * Add padding by repeating the token, e.g. "yy" pads the years to two digits, "hhhh" pads the hours out to four digits + * * Tokens can be escaped by wrapping with single quotes. + * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting. + * @param {string} fmt - the format string + * @param {Object} opts - options + * @param {boolean} [opts.floor=true] - floor numerical values + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("y d s") //=> "1 6 2" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("yy dd sss") //=> "01 06 002" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("M S") //=> "12 518402000" + * @return {string} + */ + toFormat(fmt, opts = {}) { + // reverse-compat since 1.2; we always round down now, never up, and we do it by default + const fmtOpts = { + ...opts, + floor: opts.round !== false && opts.floor !== false, + }; + return this.isValid + ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) + : INVALID$2; + } + + /** + * Returns a string representation of a Duration with all units included. + * To modify its behavior use the `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat + * @param opts - On option object to override the formatting. Accepts the same keys as the options parameter of the native `Int.NumberFormat` constructor, as well as `listStyle`. + * @example + * ```js + * var dur = Duration.fromObject({ days: 1, hours: 5, minutes: 6 }) + * dur.toHuman() //=> '1 day, 5 hours, 6 minutes' + * dur.toHuman({ listStyle: "long" }) //=> '1 day, 5 hours, and 6 minutes' + * dur.toHuman({ unitDisplay: "short" }) //=> '1 day, 5 hr, 6 min' + * ``` + */ + toHuman(opts = {}) { + if (!this.isValid) return INVALID$2; + + const l = orderedUnits$1 + .map((unit) => { + const val = this.values[unit]; + if (isUndefined(val)) { + return null; + } + return this.loc + .numberFormatter({ style: "unit", unitDisplay: "long", ...opts, unit: unit.slice(0, -1) }) + .format(val); + }) + .filter((n) => n); + + return this.loc + .listFormatter({ type: "conjunction", style: opts.listStyle || "narrow", ...opts }) + .format(l); + } + + /** + * Returns a JavaScript object with this Duration's values. + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 } + * @return {Object} + */ + toObject() { + if (!this.isValid) return {}; + return { ...this.values }; + } + + /** + * Returns an ISO 8601-compliant string representation of this Duration. + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S' + * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S' + * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M' + * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M' + * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S' + * @return {string} + */ + toISO() { + // we could use the formatter, but this is an easier way to get the minimum string + if (!this.isValid) return null; + + let s = "P"; + if (this.years !== 0) s += this.years + "Y"; + if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + "M"; + if (this.weeks !== 0) s += this.weeks + "W"; + if (this.days !== 0) s += this.days + "D"; + if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0) + s += "T"; + if (this.hours !== 0) s += this.hours + "H"; + if (this.minutes !== 0) s += this.minutes + "M"; + if (this.seconds !== 0 || this.milliseconds !== 0) + // this will handle "floating point madness" by removing extra decimal places + // https://stackoverflow.com/questions/588004/is-floating-point-math-broken + s += roundTo(this.seconds + this.milliseconds / 1000, 3) + "S"; + if (s === "P") s += "T0S"; + return s; + } + + /** + * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day. + * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours. + * @see https://en.wikipedia.org/wiki/ISO_8601#Times + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includePrefix=false] - include the `T` prefix + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000' + * @return {string} + */ + toISOTime(opts = {}) { + if (!this.isValid) return null; + + const millis = this.toMillis(); + if (millis < 0 || millis >= 86400000) return null; + + opts = { + suppressMilliseconds: false, + suppressSeconds: false, + includePrefix: false, + format: "extended", + ...opts, + includeOffset: false, + }; + + const dateTime = DateTime.fromMillis(millis, { zone: "UTC" }); + return dateTime.toISOTime(opts); + } + + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in JSON. + * @return {string} + */ + toJSON() { + return this.toISO(); + } + + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in debugging. + * @return {string} + */ + toString() { + return this.toISO(); + } + + /** + * Returns an milliseconds value of this Duration. + * @return {number} + */ + toMillis() { + if (!this.isValid) return NaN; + + return durationToMillis(this.matrix, this.values); + } + + /** + * Returns an milliseconds value of this Duration. Alias of {@link toMillis} + * @return {number} + */ + valueOf() { + return this.toMillis(); + } + + /** + * Make this Duration longer by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */ + plus(duration) { + if (!this.isValid) return this; + + const dur = Duration.fromDurationLike(duration), + result = {}; + + for (const k of orderedUnits$1) { + if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) { + result[k] = dur.get(k) + this.get(k); + } + } + + return clone$1(this, { values: result }, true); + } + + /** + * Make this Duration shorter by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */ + minus(duration) { + if (!this.isValid) return this; + + const dur = Duration.fromDurationLike(duration); + return this.plus(dur.negate()); + } + + /** + * Scale this Duration by the specified amount. Return a newly-constructed Duration. + * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number. + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 } + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === "hours" ? x * 2 : x) //=> { hours: 2, minutes: 30 } + * @return {Duration} + */ + mapUnits(fn) { + if (!this.isValid) return this; + const result = {}; + for (const k of Object.keys(this.values)) { + result[k] = asNumber(fn(this.values[k], k)); + } + return clone$1(this, { values: result }, true); + } + + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2 + * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0 + * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3 + * @return {number} + */ + get(unit) { + return this[Duration.normalizeUnit(unit)]; + } + + /** + * "Set" the values of specified units. Return a newly-constructed Duration. + * @param {Object} values - a mapping of units to numbers + * @example dur.set({ years: 2017 }) + * @example dur.set({ hours: 8, minutes: 30 }) + * @return {Duration} + */ + set(values) { + if (!this.isValid) return this; + + const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) }; + return clone$1(this, { values: mixed }); + } + + /** + * "Set" the locale and/or numberingSystem. Returns a newly-constructed Duration. + * @example dur.reconfigure({ locale: 'en-GB' }) + * @return {Duration} + */ + reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) { + const loc = this.loc.clone({ locale, numberingSystem }); + const opts = { loc, matrix, conversionAccuracy }; + return clone$1(this, opts); + } + + /** + * Return the length of the duration in the specified unit. + * @param {string} unit - a unit such as 'minutes' or 'days' + * @example Duration.fromObject({years: 1}).as('days') //=> 365 + * @example Duration.fromObject({years: 1}).as('months') //=> 12 + * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5 + * @return {number} + */ + as(unit) { + return this.isValid ? this.shiftTo(unit).get(unit) : NaN; + } + + /** + * Reduce this Duration to its canonical representation in its current units. + * Assuming the overall value of the Duration is positive, this means: + * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example) + * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise + * the overall value would be negative, see second example) + * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example) + * + * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`. + * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 } + * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 } + * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 } + * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 } + * @return {Duration} + */ + normalize() { + if (!this.isValid) return this; + const vals = this.toObject(); + normalizeValues(this.matrix, vals); + return clone$1(this, { values: vals }, true); + } + + /** + * Rescale units to its largest representation + * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 } + * @return {Duration} + */ + rescale() { + if (!this.isValid) return this; + const vals = removeZeroes(this.normalize().shiftToAll().toObject()); + return clone$1(this, { values: vals }, true); + } + + /** + * Convert this Duration into its representation in a different set of units. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 } + * @return {Duration} + */ + shiftTo(...units) { + if (!this.isValid) return this; + + if (units.length === 0) { + return this; + } + + units = units.map((u) => Duration.normalizeUnit(u)); + + const built = {}, + accumulated = {}, + vals = this.toObject(); + let lastUnit; + + for (const k of orderedUnits$1) { + if (units.indexOf(k) >= 0) { + lastUnit = k; + + let own = 0; + + // anything we haven't boiled down yet should get boiled to this unit + for (const ak in accumulated) { + own += this.matrix[ak][k] * accumulated[ak]; + accumulated[ak] = 0; + } + + // plus anything that's already in this unit + if (isNumber(vals[k])) { + own += vals[k]; + } + + // only keep the integer part for now in the hopes of putting any decimal part + // into a smaller unit later + const i = Math.trunc(own); + built[k] = i; + accumulated[k] = (own * 1000 - i * 1000) / 1000; + + // otherwise, keep it in the wings to boil it later + } else if (isNumber(vals[k])) { + accumulated[k] = vals[k]; + } + } + + // anything leftover becomes the decimal for the last unit + // lastUnit must be defined since units is not empty + for (const key in accumulated) { + if (accumulated[key] !== 0) { + built[lastUnit] += + key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key]; + } + } + + normalizeValues(this.matrix, built); + return clone$1(this, { values: built }, true); + } + + /** + * Shift this Duration to all available units. + * Same as shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds") + * @return {Duration} + */ + shiftToAll() { + if (!this.isValid) return this; + return this.shiftTo( + "years", + "months", + "weeks", + "days", + "hours", + "minutes", + "seconds", + "milliseconds" + ); + } + + /** + * Return the negative of this Duration. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 } + * @return {Duration} + */ + negate() { + if (!this.isValid) return this; + const negated = {}; + for (const k of Object.keys(this.values)) { + negated[k] = this.values[k] === 0 ? 0 : -this.values[k]; + } + return clone$1(this, { values: negated }, true); + } + + /** + * Get the years. + * @type {number} + */ + get years() { + return this.isValid ? this.values.years || 0 : NaN; + } + + /** + * Get the quarters. + * @type {number} + */ + get quarters() { + return this.isValid ? this.values.quarters || 0 : NaN; + } + + /** + * Get the months. + * @type {number} + */ + get months() { + return this.isValid ? this.values.months || 0 : NaN; + } + + /** + * Get the weeks + * @type {number} + */ + get weeks() { + return this.isValid ? this.values.weeks || 0 : NaN; + } + + /** + * Get the days. + * @type {number} + */ + get days() { + return this.isValid ? this.values.days || 0 : NaN; + } + + /** + * Get the hours. + * @type {number} + */ + get hours() { + return this.isValid ? this.values.hours || 0 : NaN; + } + + /** + * Get the minutes. + * @type {number} + */ + get minutes() { + return this.isValid ? this.values.minutes || 0 : NaN; + } + + /** + * Get the seconds. + * @return {number} + */ + get seconds() { + return this.isValid ? this.values.seconds || 0 : NaN; + } + + /** + * Get the milliseconds. + * @return {number} + */ + get milliseconds() { + return this.isValid ? this.values.milliseconds || 0 : NaN; + } + + /** + * Returns whether the Duration is invalid. Invalid durations are returned by diff operations + * on invalid DateTimes or Intervals. + * @return {boolean} + */ + get isValid() { + return this.invalid === null; + } + + /** + * Returns an error code if this Duration became invalid, or null if the Duration is valid + * @return {string} + */ + get invalidReason() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this Duration became invalid, or null if the Duration is valid + * @type {string} + */ + get invalidExplanation() { + return this.invalid ? this.invalid.explanation : null; + } + + /** + * Equality check + * Two Durations are equal iff they have the same units and the same values for each unit. + * @param {Duration} other + * @return {boolean} + */ + equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + + if (!this.loc.equals(other.loc)) { + return false; + } + + function eq(v1, v2) { + // Consider 0 and undefined as equal + if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0; + return v1 === v2; + } + + for (const u of orderedUnits$1) { + if (!eq(this.values[u], other.values[u])) { + return false; + } + } + return true; + } +} + +const INVALID$1 = "Invalid Interval"; + +// checks if the start is equal to or before the end +function validateStartEnd(start, end) { + if (!start || !start.isValid) { + return Interval.invalid("missing or invalid start"); + } else if (!end || !end.isValid) { + return Interval.invalid("missing or invalid end"); + } else if (end < start) { + return Interval.invalid( + "end before start", + `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}` + ); + } else { + return null; + } +} + +/** + * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them. + * + * Here is a brief overview of the most commonly used methods and getters in Interval: + * + * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}. + * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end. + * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}. + * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}. + * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs} + * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}. + */ +class Interval { + /** + * @private + */ + constructor(config) { + /** + * @access private + */ + this.s = config.start; + /** + * @access private + */ + this.e = config.end; + /** + * @access private + */ + this.invalid = config.invalid || null; + /** + * @access private + */ + this.isLuxonInterval = true; + } + + /** + * Create an invalid Interval. + * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Interval} + */ + static invalid(reason, explanation = null) { + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Interval is invalid"); + } + + const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidIntervalError(invalid); + } else { + return new Interval({ invalid }); + } + } + + /** + * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end. + * @param {DateTime|Date|Object} start + * @param {DateTime|Date|Object} end + * @return {Interval} + */ + static fromDateTimes(start, end) { + const builtStart = friendlyDateTime(start), + builtEnd = friendlyDateTime(end); + + const validateError = validateStartEnd(builtStart, builtEnd); + + if (validateError == null) { + return new Interval({ + start: builtStart, + end: builtEnd, + }); + } else { + return validateError; + } + } + + /** + * Create an Interval from a start DateTime and a Duration to extend to. + * @param {DateTime|Date|Object} start + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */ + static after(start, duration) { + const dur = Duration.fromDurationLike(duration), + dt = friendlyDateTime(start); + return Interval.fromDateTimes(dt, dt.plus(dur)); + } + + /** + * Create an Interval from an end DateTime and a Duration to extend backwards to. + * @param {DateTime|Date|Object} end + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */ + static before(end, duration) { + const dur = Duration.fromDurationLike(duration), + dt = friendlyDateTime(end); + return Interval.fromDateTimes(dt.minus(dur), dt); + } + + /** + * Create an Interval from an ISO 8601 string. + * Accepts `<start>/<end>`, `<start>/<duration>`, and `<duration>/<end>` formats. + * @param {string} text - the ISO string to parse + * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO} + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {Interval} + */ + static fromISO(text, opts) { + const [s, e] = (text || "").split("/", 2); + if (s && e) { + let start, startIsValid; + try { + start = DateTime.fromISO(s, opts); + startIsValid = start.isValid; + } catch (e) { + startIsValid = false; + } + + let end, endIsValid; + try { + end = DateTime.fromISO(e, opts); + endIsValid = end.isValid; + } catch (e) { + endIsValid = false; + } + + if (startIsValid && endIsValid) { + return Interval.fromDateTimes(start, end); + } + + if (startIsValid) { + const dur = Duration.fromISO(e, opts); + if (dur.isValid) { + return Interval.after(start, dur); + } + } else if (endIsValid) { + const dur = Duration.fromISO(s, opts); + if (dur.isValid) { + return Interval.before(end, dur); + } + } + } + return Interval.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`); + } + + /** + * Check if an object is an Interval. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + static isInterval(o) { + return (o && o.isLuxonInterval) || false; + } + + /** + * Returns the start of the Interval + * @type {DateTime} + */ + get start() { + return this.isValid ? this.s : null; + } + + /** + * Returns the end of the Interval + * @type {DateTime} + */ + get end() { + return this.isValid ? this.e : null; + } + + /** + * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'. + * @type {boolean} + */ + get isValid() { + return this.invalidReason === null; + } + + /** + * Returns an error code if this Interval is invalid, or null if the Interval is valid + * @type {string} + */ + get invalidReason() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this Interval became invalid, or null if the Interval is valid + * @type {string} + */ + get invalidExplanation() { + return this.invalid ? this.invalid.explanation : null; + } + + /** + * Returns the length of the Interval in the specified unit. + * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in. + * @return {number} + */ + length(unit = "milliseconds") { + return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN; + } + + /** + * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part. + * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day' + * asks 'what dates are included in this interval?', not 'how many days long is this interval?' + * @param {string} [unit='milliseconds'] - the unit of time to count. + * @return {number} + */ + count(unit = "milliseconds") { + if (!this.isValid) return NaN; + const start = this.start.startOf(unit), + end = this.end.startOf(unit); + return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf()); + } + + /** + * Returns whether this Interval's start and end are both in the same unit of time + * @param {string} unit - the unit of time to check sameness on + * @return {boolean} + */ + hasSame(unit) { + return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false; + } + + /** + * Return whether this Interval has the same start and end DateTimes. + * @return {boolean} + */ + isEmpty() { + return this.s.valueOf() === this.e.valueOf(); + } + + /** + * Return whether this Interval's start is after the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + isAfter(dateTime) { + if (!this.isValid) return false; + return this.s > dateTime; + } + + /** + * Return whether this Interval's end is before the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + isBefore(dateTime) { + if (!this.isValid) return false; + return this.e <= dateTime; + } + + /** + * Return whether this Interval contains the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + contains(dateTime) { + if (!this.isValid) return false; + return this.s <= dateTime && this.e > dateTime; + } + + /** + * "Sets" the start and/or end dates. Returns a newly-constructed Interval. + * @param {Object} values - the values to set + * @param {DateTime} values.start - the starting DateTime + * @param {DateTime} values.end - the ending DateTime + * @return {Interval} + */ + set({ start, end } = {}) { + if (!this.isValid) return this; + return Interval.fromDateTimes(start || this.s, end || this.e); + } + + /** + * Split this Interval at each of the specified DateTimes + * @param {...DateTime} dateTimes - the unit of time to count. + * @return {Array} + */ + splitAt(...dateTimes) { + if (!this.isValid) return []; + const sorted = dateTimes + .map(friendlyDateTime) + .filter((d) => this.contains(d)) + .sort(), + results = []; + let { s } = this, + i = 0; + + while (s < this.e) { + const added = sorted[i] || this.e, + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + i += 1; + } + + return results; + } + + /** + * Split this Interval into smaller Intervals, each of the specified length. + * Left over time is grouped into a smaller interval + * @param {Duration|Object|number} duration - The length of each resulting interval. + * @return {Array} + */ + splitBy(duration) { + const dur = Duration.fromDurationLike(duration); + + if (!this.isValid || !dur.isValid || dur.as("milliseconds") === 0) { + return []; + } + + let { s } = this, + idx = 1, + next; + + const results = []; + while (s < this.e) { + const added = this.start.plus(dur.mapUnits((x) => x * idx)); + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + idx += 1; + } + + return results; + } + + /** + * Split this Interval into the specified number of smaller intervals. + * @param {number} numberOfParts - The number of Intervals to divide the Interval into. + * @return {Array} + */ + divideEqually(numberOfParts) { + if (!this.isValid) return []; + return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts); + } + + /** + * Return whether this Interval overlaps with the specified Interval + * @param {Interval} other + * @return {boolean} + */ + overlaps(other) { + return this.e > other.s && this.s < other.e; + } + + /** + * Return whether this Interval's end is adjacent to the specified Interval's start. + * @param {Interval} other + * @return {boolean} + */ + abutsStart(other) { + if (!this.isValid) return false; + return +this.e === +other.s; + } + + /** + * Return whether this Interval's start is adjacent to the specified Interval's end. + * @param {Interval} other + * @return {boolean} + */ + abutsEnd(other) { + if (!this.isValid) return false; + return +other.e === +this.s; + } + + /** + * Return whether this Interval engulfs the start and end of the specified Interval. + * @param {Interval} other + * @return {boolean} + */ + engulfs(other) { + if (!this.isValid) return false; + return this.s <= other.s && this.e >= other.e; + } + + /** + * Return whether this Interval has the same start and end as the specified Interval. + * @param {Interval} other + * @return {boolean} + */ + equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + + return this.s.equals(other.s) && this.e.equals(other.e); + } + + /** + * Return an Interval representing the intersection of this Interval and the specified Interval. + * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals. + * Returns null if the intersection is empty, meaning, the intervals don't intersect. + * @param {Interval} other + * @return {Interval} + */ + intersection(other) { + if (!this.isValid) return this; + const s = this.s > other.s ? this.s : other.s, + e = this.e < other.e ? this.e : other.e; + + if (s >= e) { + return null; + } else { + return Interval.fromDateTimes(s, e); + } + } + + /** + * Return an Interval representing the union of this Interval and the specified Interval. + * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals. + * @param {Interval} other + * @return {Interval} + */ + union(other) { + if (!this.isValid) return this; + const s = this.s < other.s ? this.s : other.s, + e = this.e > other.e ? this.e : other.e; + return Interval.fromDateTimes(s, e); + } + + /** + * Merge an array of Intervals into a equivalent minimal set of Intervals. + * Combines overlapping and adjacent Intervals. + * @param {Array} intervals + * @return {Array} + */ + static merge(intervals) { + const [found, final] = intervals + .sort((a, b) => a.s - b.s) + .reduce( + ([sofar, current], item) => { + if (!current) { + return [sofar, item]; + } else if (current.overlaps(item) || current.abutsStart(item)) { + return [sofar, current.union(item)]; + } else { + return [sofar.concat([current]), item]; + } + }, + [[], null] + ); + if (final) { + found.push(final); + } + return found; + } + + /** + * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals. + * @param {Array} intervals + * @return {Array} + */ + static xor(intervals) { + let start = null, + currentCount = 0; + const results = [], + ends = intervals.map((i) => [ + { time: i.s, type: "s" }, + { time: i.e, type: "e" }, + ]), + flattened = Array.prototype.concat(...ends), + arr = flattened.sort((a, b) => a.time - b.time); + + for (const i of arr) { + currentCount += i.type === "s" ? 1 : -1; + + if (currentCount === 1) { + start = i.time; + } else { + if (start && +start !== +i.time) { + results.push(Interval.fromDateTimes(start, i.time)); + } + + start = null; + } + } + + return Interval.merge(results); + } + + /** + * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals. + * @param {...Interval} intervals + * @return {Array} + */ + difference(...intervals) { + return Interval.xor([this].concat(intervals)) + .map((i) => this.intersection(i)) + .filter((i) => i && !i.isEmpty()); + } + + /** + * Returns a string representation of this Interval appropriate for debugging. + * @return {string} + */ + toString() { + if (!this.isValid) return INVALID$1; + return `[${this.s.toISO()} – ${this.e.toISO()})`; + } + + /** + * Returns a localized string representing this Interval. Accepts the same options as the + * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as + * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method + * is browser-specific, but in general it will return an appropriate representation of the + * Interval in the assigned locale. Defaults to the system's locale if no locale has been + * specified. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or + * Intl.DateTimeFormat constructor options. + * @param {Object} opts - Options to override the configuration of the start DateTime. + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022 + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022 + * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022 + * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM + * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p + * @return {string} + */ + toLocaleString(formatOpts = DATE_SHORT, opts = {}) { + return this.isValid + ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this) + : INVALID$1; + } + + /** + * Returns an ISO 8601-compliant string representation of this Interval. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime#toISO} + * @return {string} + */ + toISO(opts) { + if (!this.isValid) return INVALID$1; + return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`; + } + + /** + * Returns an ISO 8601-compliant string representation of date of this Interval. + * The time components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {string} + */ + toISODate() { + if (!this.isValid) return INVALID$1; + return `${this.s.toISODate()}/${this.e.toISODate()}`; + } + + /** + * Returns an ISO 8601-compliant string representation of time of this Interval. + * The date components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime#toISO} + * @return {string} + */ + toISOTime(opts) { + if (!this.isValid) return INVALID$1; + return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`; + } + + /** + * Returns a string representation of this Interval formatted according to the specified format + * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible + * formatting tool. + * @param {string} dateFormat - The format string. This string formats the start and end time. + * See {@link DateTime#toFormat} for details. + * @param {Object} opts - Options. + * @param {string} [opts.separator = ' – '] - A separator to place between the start and end + * representations. + * @return {string} + */ + toFormat(dateFormat, { separator = " – " } = {}) { + if (!this.isValid) return INVALID$1; + return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`; + } + + /** + * Return a Duration representing the time spanned by this interval. + * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 } + * @return {Duration} + */ + toDuration(unit, opts) { + if (!this.isValid) { + return Duration.invalid(this.invalidReason); + } + return this.e.diff(this.s, unit, opts); + } + + /** + * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes + * @param {function} mapFn + * @return {Interval} + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC()) + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 })) + */ + mapEndpoints(mapFn) { + return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e)); + } +} + +/** + * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment. + */ +class Info { + /** + * Return whether the specified zone contains a DST. + * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone. + * @return {boolean} + */ + static hasDST(zone = Settings.defaultZone) { + const proto = DateTime.now().setZone(zone).set({ month: 12 }); + + return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset; + } + + /** + * Return whether the specified zone is a valid IANA specifier. + * @param {string} zone - Zone to check + * @return {boolean} + */ + static isValidIANAZone(zone) { + return IANAZone.isValidZone(zone); + } + + /** + * Converts the input into a {@link Zone} instance. + * + * * If `input` is already a Zone instance, it is returned unchanged. + * * If `input` is a string containing a valid time zone name, a Zone instance + * with that name is returned. + * * If `input` is a string that doesn't refer to a known time zone, a Zone + * instance with {@link Zone#isValid} == false is returned. + * * If `input is a number, a Zone instance with the specified fixed offset + * in minutes is returned. + * * If `input` is `null` or `undefined`, the default zone is returned. + * @param {string|Zone|number} [input] - the value to be converted + * @return {Zone} + */ + static normalizeZone(input) { + return normalizeZone(input, Settings.defaultZone); + } + + /** + * Return an array of standalone month names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @example Info.months()[0] //=> 'January' + * @example Info.months('short')[0] //=> 'Jan' + * @example Info.months('numeric')[0] //=> '1' + * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.' + * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١' + * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I' + * @return {Array} + */ + static months( + length = "long", + { locale = null, numberingSystem = null, locObj = null, outputCalendar = "gregory" } = {} + ) { + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length); + } + + /** + * Return an array of format month names. + * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that + * changes the string. + * See {@link Info#months} + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @return {Array} + */ + static monthsFormat( + length = "long", + { locale = null, numberingSystem = null, locObj = null, outputCalendar = "gregory" } = {} + ) { + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true); + } + + /** + * Return an array of standalone week names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the weekday representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @example Info.weekdays()[0] //=> 'Monday' + * @example Info.weekdays('short')[0] //=> 'Mon' + * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.' + * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين' + * @return {Array} + */ + static weekdays(length = "long", { locale = null, numberingSystem = null, locObj = null } = {}) { + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length); + } + + /** + * Return an array of format week names. + * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that + * changes the string. + * See {@link Info#weekdays} + * @param {string} [length='long'] - the length of the month representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale=null] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @return {Array} + */ + static weekdaysFormat( + length = "long", + { locale = null, numberingSystem = null, locObj = null } = {} + ) { + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true); + } + + /** + * Return an array of meridiems. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.meridiems() //=> [ 'AM', 'PM' ] + * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ] + * @return {Array} + */ + static meridiems({ locale = null } = {}) { + return Locale.create(locale).meridiems(); + } + + /** + * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian. + * @param {string} [length='short'] - the length of the era representation, such as "short" or "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.eras() //=> [ 'BC', 'AD' ] + * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ] + * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ] + * @return {Array} + */ + static eras(length = "short", { locale = null } = {}) { + return Locale.create(locale, null, "gregory").eras(length); + } + + /** + * Return the set of available features in this environment. + * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case. + * Keys: + * * `relative`: whether this environment supports relative time formatting + * @example Info.features() //=> { relative: false } + * @return {Object} + */ + static features() { + return { relative: hasRelative() }; + } +} + +function dayDiff(earlier, later) { + const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf("day").valueOf(), + ms = utcDayStart(later) - utcDayStart(earlier); + return Math.floor(Duration.fromMillis(ms).as("days")); +} + +function highOrderDiffs(cursor, later, units) { + const differs = [ + ["years", (a, b) => b.year - a.year], + ["quarters", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4], + ["months", (a, b) => b.month - a.month + (b.year - a.year) * 12], + [ + "weeks", + (a, b) => { + const days = dayDiff(a, b); + return (days - (days % 7)) / 7; + }, + ], + ["days", dayDiff], + ]; + + const results = {}; + const earlier = cursor; + let lowestOrder, highWater; + + /* This loop tries to diff using larger units first. + If we overshoot, we backtrack and try the next smaller unit. + "cursor" starts out at the earlier timestamp and moves closer and closer to "later" + as we use smaller and smaller units. + highWater keeps track of where we would be if we added one more of the smallest unit, + this is used later to potentially convert any difference smaller than the smallest higher order unit + into a fraction of that smallest higher order unit + */ + for (const [unit, differ] of differs) { + if (units.indexOf(unit) >= 0) { + lowestOrder = unit; + + results[unit] = differ(cursor, later); + highWater = earlier.plus(results); + + if (highWater > later) { + // we overshot the end point, backtrack cursor by 1 + results[unit]--; + cursor = earlier.plus(results); + + // if we are still overshooting now, we need to backtrack again + // this happens in certain situations when diffing times in different zones, + // because this calculation ignores time zones + if (cursor > later) { + // keep the "overshot by 1" around as highWater + highWater = cursor; + // backtrack cursor by 1 + results[unit]--; + cursor = earlier.plus(results); + } + } else { + cursor = highWater; + } + } + } + + return [cursor, results, highWater, lowestOrder]; +} + +function diff (earlier, later, units, opts) { + let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units); + + const remainingMillis = later - cursor; + + const lowerOrderUnits = units.filter( + (u) => ["hours", "minutes", "seconds", "milliseconds"].indexOf(u) >= 0 + ); + + if (lowerOrderUnits.length === 0) { + if (highWater < later) { + highWater = cursor.plus({ [lowestOrder]: 1 }); + } + + if (highWater !== cursor) { + results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor); + } + } + + const duration = Duration.fromObject(results, opts); + + if (lowerOrderUnits.length > 0) { + return Duration.fromMillis(remainingMillis, opts) + .shiftTo(...lowerOrderUnits) + .plus(duration); + } else { + return duration; + } +} + +const numberingSystems = { + arab: "[\u0660-\u0669]", + arabext: "[\u06F0-\u06F9]", + bali: "[\u1B50-\u1B59]", + beng: "[\u09E6-\u09EF]", + deva: "[\u0966-\u096F]", + fullwide: "[\uFF10-\uFF19]", + gujr: "[\u0AE6-\u0AEF]", + hanidec: "[〇|一|二|三|四|五|六|七|八|九]", + khmr: "[\u17E0-\u17E9]", + knda: "[\u0CE6-\u0CEF]", + laoo: "[\u0ED0-\u0ED9]", + limb: "[\u1946-\u194F]", + mlym: "[\u0D66-\u0D6F]", + mong: "[\u1810-\u1819]", + mymr: "[\u1040-\u1049]", + orya: "[\u0B66-\u0B6F]", + tamldec: "[\u0BE6-\u0BEF]", + telu: "[\u0C66-\u0C6F]", + thai: "[\u0E50-\u0E59]", + tibt: "[\u0F20-\u0F29]", + latn: "\\d", +}; + +const numberingSystemsUTF16 = { + arab: [1632, 1641], + arabext: [1776, 1785], + bali: [6992, 7001], + beng: [2534, 2543], + deva: [2406, 2415], + fullwide: [65296, 65303], + gujr: [2790, 2799], + khmr: [6112, 6121], + knda: [3302, 3311], + laoo: [3792, 3801], + limb: [6470, 6479], + mlym: [3430, 3439], + mong: [6160, 6169], + mymr: [4160, 4169], + orya: [2918, 2927], + tamldec: [3046, 3055], + telu: [3174, 3183], + thai: [3664, 3673], + tibt: [3872, 3881], +}; + +const hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split(""); + +function parseDigits(str) { + let value = parseInt(str, 10); + if (isNaN(value)) { + value = ""; + for (let i = 0; i < str.length; i++) { + const code = str.charCodeAt(i); + + if (str[i].search(numberingSystems.hanidec) !== -1) { + value += hanidecChars.indexOf(str[i]); + } else { + for (const key in numberingSystemsUTF16) { + const [min, max] = numberingSystemsUTF16[key]; + if (code >= min && code <= max) { + value += code - min; + } + } + } + } + return parseInt(value, 10); + } else { + return value; + } +} + +function digitRegex({ numberingSystem }, append = "") { + return new RegExp(`${numberingSystems[numberingSystem || "latn"]}${append}`); +} + +const MISSING_FTP = "missing Intl.DateTimeFormat.formatToParts support"; + +function intUnit(regex, post = (i) => i) { + return { regex, deser: ([s]) => post(parseDigits(s)) }; +} + +const NBSP = String.fromCharCode(160); +const spaceOrNBSP = `[ ${NBSP}]`; +const spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, "g"); + +function fixListRegex(s) { + // make dots optional and also make them literal + // make space and non breakable space characters interchangeable + return s.replace(/\./g, "\\.?").replace(spaceOrNBSPRegExp, spaceOrNBSP); +} + +function stripInsensitivities(s) { + return s + .replace(/\./g, "") // ignore dots that were made optional + .replace(spaceOrNBSPRegExp, " ") // interchange space and nbsp + .toLowerCase(); +} + +function oneOf(strings, startIndex) { + if (strings === null) { + return null; + } else { + return { + regex: RegExp(strings.map(fixListRegex).join("|")), + deser: ([s]) => + strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex, + }; + } +} + +function offset(regex, groups) { + return { regex, deser: ([, h, m]) => signedOffset(h, m), groups }; +} + +function simple(regex) { + return { regex, deser: ([s]) => s }; +} + +function escapeToken(value) { + return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); +} + +/** + * @param token + * @param {Locale} loc + */ +function unitForToken(token, loc) { + const one = digitRegex(loc), + two = digitRegex(loc, "{2}"), + three = digitRegex(loc, "{3}"), + four = digitRegex(loc, "{4}"), + six = digitRegex(loc, "{6}"), + oneOrTwo = digitRegex(loc, "{1,2}"), + oneToThree = digitRegex(loc, "{1,3}"), + oneToSix = digitRegex(loc, "{1,6}"), + oneToNine = digitRegex(loc, "{1,9}"), + twoToFour = digitRegex(loc, "{2,4}"), + fourToSix = digitRegex(loc, "{4,6}"), + literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }), + unitate = (t) => { + if (token.literal) { + return literal(t); + } + switch (t.val) { + // era + case "G": + return oneOf(loc.eras("short"), 0); + case "GG": + return oneOf(loc.eras("long"), 0); + // years + case "y": + return intUnit(oneToSix); + case "yy": + return intUnit(twoToFour, untruncateYear); + case "yyyy": + return intUnit(four); + case "yyyyy": + return intUnit(fourToSix); + case "yyyyyy": + return intUnit(six); + // months + case "M": + return intUnit(oneOrTwo); + case "MM": + return intUnit(two); + case "MMM": + return oneOf(loc.months("short", true), 1); + case "MMMM": + return oneOf(loc.months("long", true), 1); + case "L": + return intUnit(oneOrTwo); + case "LL": + return intUnit(two); + case "LLL": + return oneOf(loc.months("short", false), 1); + case "LLLL": + return oneOf(loc.months("long", false), 1); + // dates + case "d": + return intUnit(oneOrTwo); + case "dd": + return intUnit(two); + // ordinals + case "o": + return intUnit(oneToThree); + case "ooo": + return intUnit(three); + // time + case "HH": + return intUnit(two); + case "H": + return intUnit(oneOrTwo); + case "hh": + return intUnit(two); + case "h": + return intUnit(oneOrTwo); + case "mm": + return intUnit(two); + case "m": + return intUnit(oneOrTwo); + case "q": + return intUnit(oneOrTwo); + case "qq": + return intUnit(two); + case "s": + return intUnit(oneOrTwo); + case "ss": + return intUnit(two); + case "S": + return intUnit(oneToThree); + case "SSS": + return intUnit(three); + case "u": + return simple(oneToNine); + case "uu": + return simple(oneOrTwo); + case "uuu": + return intUnit(one); + // meridiem + case "a": + return oneOf(loc.meridiems(), 0); + // weekYear (k) + case "kkkk": + return intUnit(four); + case "kk": + return intUnit(twoToFour, untruncateYear); + // weekNumber (W) + case "W": + return intUnit(oneOrTwo); + case "WW": + return intUnit(two); + // weekdays + case "E": + case "c": + return intUnit(one); + case "EEE": + return oneOf(loc.weekdays("short", false), 1); + case "EEEE": + return oneOf(loc.weekdays("long", false), 1); + case "ccc": + return oneOf(loc.weekdays("short", true), 1); + case "cccc": + return oneOf(loc.weekdays("long", true), 1); + // offset/zone + case "Z": + case "ZZ": + return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2); + case "ZZZ": + return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2); + // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing + // because we don't have any way to figure out what they are + case "z": + return simple(/[a-z_+-/]{1,256}?/i); + // this special-case "token" represents a place where a macro-token expanded into a white-space literal + // in this case we accept any non-newline white-space + case " ": + return simple(/[^\S\n\r]/); + default: + return literal(t); + } + }; + + const unit = unitate(token) || { + invalidReason: MISSING_FTP, + }; + + unit.token = token; + + return unit; +} + +const partTypeStyleToTokenVal = { + year: { + "2-digit": "yy", + numeric: "yyyyy", + }, + month: { + numeric: "M", + "2-digit": "MM", + short: "MMM", + long: "MMMM", + }, + day: { + numeric: "d", + "2-digit": "dd", + }, + weekday: { + short: "EEE", + long: "EEEE", + }, + dayperiod: "a", + dayPeriod: "a", + hour12: { + numeric: "h", + "2-digit": "hh", + }, + hour24: { + numeric: "H", + "2-digit": "HH", + }, + minute: { + numeric: "m", + "2-digit": "mm", + }, + second: { + numeric: "s", + "2-digit": "ss", + }, + timeZoneName: { + long: "ZZZZZ", + short: "ZZZ", + }, +}; + +function tokenForPart(part, formatOpts, resolvedOpts) { + const { type, value } = part; + + if (type === "literal") { + const isSpace = /^\s+$/.test(value); + return { + literal: !isSpace, + val: isSpace ? " " : value, + }; + } + + const style = formatOpts[type]; + + // The user might have explicitly specified hour12 or hourCycle + // if so, respect their decision + // if not, refer back to the resolvedOpts, which are based on the locale + let actualType = type; + if (type === "hour") { + if (formatOpts.hour12 != null) { + actualType = formatOpts.hour12 ? "hour12" : "hour24"; + } else if (formatOpts.hourCycle != null) { + if (formatOpts.hourCycle === "h11" || formatOpts.hourCycle === "h12") { + actualType = "hour12"; + } else { + actualType = "hour24"; + } + } else { + // tokens only differentiate between 24 hours or not, + // so we do not need to check hourCycle here, which is less supported anyways + actualType = resolvedOpts.hour12 ? "hour12" : "hour24"; + } + } + let val = partTypeStyleToTokenVal[actualType]; + if (typeof val === "object") { + val = val[style]; + } + + if (val) { + return { + literal: false, + val, + }; + } + + return undefined; +} + +function buildRegex(units) { + const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, ""); + return [`^${re}$`, units]; +} + +function match(input, regex, handlers) { + const matches = input.match(regex); + + if (matches) { + const all = {}; + let matchIndex = 1; + for (const i in handlers) { + if (hasOwnProperty(handlers, i)) { + const h = handlers[i], + groups = h.groups ? h.groups + 1 : 1; + if (!h.literal && h.token) { + all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups)); + } + matchIndex += groups; + } + } + return [matches, all]; + } else { + return [matches, {}]; + } +} + +function dateTimeFromMatches(matches) { + const toField = (token) => { + switch (token) { + case "S": + return "millisecond"; + case "s": + return "second"; + case "m": + return "minute"; + case "h": + case "H": + return "hour"; + case "d": + return "day"; + case "o": + return "ordinal"; + case "L": + case "M": + return "month"; + case "y": + return "year"; + case "E": + case "c": + return "weekday"; + case "W": + return "weekNumber"; + case "k": + return "weekYear"; + case "q": + return "quarter"; + default: + return null; + } + }; + + let zone = null; + let specificOffset; + if (!isUndefined(matches.z)) { + zone = IANAZone.create(matches.z); + } + + if (!isUndefined(matches.Z)) { + if (!zone) { + zone = new FixedOffsetZone(matches.Z); + } + specificOffset = matches.Z; + } + + if (!isUndefined(matches.q)) { + matches.M = (matches.q - 1) * 3 + 1; + } + + if (!isUndefined(matches.h)) { + if (matches.h < 12 && matches.a === 1) { + matches.h += 12; + } else if (matches.h === 12 && matches.a === 0) { + matches.h = 0; + } + } + + if (matches.G === 0 && matches.y) { + matches.y = -matches.y; + } + + if (!isUndefined(matches.u)) { + matches.S = parseMillis(matches.u); + } + + const vals = Object.keys(matches).reduce((r, k) => { + const f = toField(k); + if (f) { + r[f] = matches[k]; + } + + return r; + }, {}); + + return [vals, zone, specificOffset]; +} + +let dummyDateTimeCache = null; + +function getDummyDateTime() { + if (!dummyDateTimeCache) { + dummyDateTimeCache = DateTime.fromMillis(1555555555555); + } + + return dummyDateTimeCache; +} + +function maybeExpandMacroToken(token, locale) { + if (token.literal) { + return token; + } + + const formatOpts = Formatter.macroTokenToFormatOpts(token.val); + const tokens = formatOptsToTokens(formatOpts, locale); + + if (tokens == null || tokens.includes(undefined)) { + return token; + } + + return tokens; +} + +function expandMacroTokens(tokens, locale) { + return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale))); +} + +/** + * @private + */ + +function explainFromTokens(locale, input, format) { + const tokens = expandMacroTokens(Formatter.parseFormat(format), locale), + units = tokens.map((t) => unitForToken(t, locale)), + disqualifyingUnit = units.find((t) => t.invalidReason); + + if (disqualifyingUnit) { + return { input, tokens, invalidReason: disqualifyingUnit.invalidReason }; + } else { + const [regexString, handlers] = buildRegex(units), + regex = RegExp(regexString, "i"), + [rawMatches, matches] = match(input, regex, handlers), + [result, zone, specificOffset] = matches + ? dateTimeFromMatches(matches) + : [null, null, undefined]; + if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) { + throw new ConflictingSpecificationError( + "Can't include meridiem when specifying 24-hour format" + ); + } + return { input, tokens, regex, rawMatches, matches, result, zone, specificOffset }; + } +} + +function parseFromTokens(locale, input, format) { + const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format); + return [result, zone, specificOffset, invalidReason]; +} + +function formatOptsToTokens(formatOpts, locale) { + if (!formatOpts) { + return null; + } + + const formatter = Formatter.create(locale, formatOpts); + const df = formatter.dtFormatter(getDummyDateTime()); + const parts = df.formatToParts(); + const resolvedOpts = df.resolvedOptions(); + return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts)); +} + +const nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], + leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]; + +function unitOutOfRange(unit, value) { + return new Invalid( + "unit out of range", + `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid` + ); +} + +function dayOfWeek(year, month, day) { + const d = new Date(Date.UTC(year, month - 1, day)); + + if (year < 100 && year >= 0) { + d.setUTCFullYear(d.getUTCFullYear() - 1900); + } + + const js = d.getUTCDay(); + + return js === 0 ? 7 : js; +} + +function computeOrdinal(year, month, day) { + return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1]; +} + +function uncomputeOrdinal(year, ordinal) { + const table = isLeapYear(year) ? leapLadder : nonLeapLadder, + month0 = table.findIndex((i) => i < ordinal), + day = ordinal - table[month0]; + return { month: month0 + 1, day }; +} + +/** + * @private + */ + +function gregorianToWeek(gregObj) { + const { year, month, day } = gregObj, + ordinal = computeOrdinal(year, month, day), + weekday = dayOfWeek(year, month, day); + + let weekNumber = Math.floor((ordinal - weekday + 10) / 7), + weekYear; + + if (weekNumber < 1) { + weekYear = year - 1; + weekNumber = weeksInWeekYear(weekYear); + } else if (weekNumber > weeksInWeekYear(year)) { + weekYear = year + 1; + weekNumber = 1; + } else { + weekYear = year; + } + + return { weekYear, weekNumber, weekday, ...timeObject(gregObj) }; +} + +function weekToGregorian(weekData) { + const { weekYear, weekNumber, weekday } = weekData, + weekdayOfJan4 = dayOfWeek(weekYear, 1, 4), + yearInDays = daysInYear(weekYear); + + let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3, + year; + + if (ordinal < 1) { + year = weekYear - 1; + ordinal += daysInYear(year); + } else if (ordinal > yearInDays) { + year = weekYear + 1; + ordinal -= daysInYear(weekYear); + } else { + year = weekYear; + } + + const { month, day } = uncomputeOrdinal(year, ordinal); + return { year, month, day, ...timeObject(weekData) }; +} + +function gregorianToOrdinal(gregData) { + const { year, month, day } = gregData; + const ordinal = computeOrdinal(year, month, day); + return { year, ordinal, ...timeObject(gregData) }; +} + +function ordinalToGregorian(ordinalData) { + const { year, ordinal } = ordinalData; + const { month, day } = uncomputeOrdinal(year, ordinal); + return { year, month, day, ...timeObject(ordinalData) }; +} + +function hasInvalidWeekData(obj) { + const validYear = isInteger(obj.weekYear), + validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)), + validWeekday = integerBetween(obj.weekday, 1, 7); + + if (!validYear) { + return unitOutOfRange("weekYear", obj.weekYear); + } else if (!validWeek) { + return unitOutOfRange("week", obj.week); + } else if (!validWeekday) { + return unitOutOfRange("weekday", obj.weekday); + } else return false; +} + +function hasInvalidOrdinalData(obj) { + const validYear = isInteger(obj.year), + validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year)); + + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validOrdinal) { + return unitOutOfRange("ordinal", obj.ordinal); + } else return false; +} + +function hasInvalidGregorianData(obj) { + const validYear = isInteger(obj.year), + validMonth = integerBetween(obj.month, 1, 12), + validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month)); + + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validMonth) { + return unitOutOfRange("month", obj.month); + } else if (!validDay) { + return unitOutOfRange("day", obj.day); + } else return false; +} + +function hasInvalidTimeData(obj) { + const { hour, minute, second, millisecond } = obj; + const validHour = + integerBetween(hour, 0, 23) || + (hour === 24 && minute === 0 && second === 0 && millisecond === 0), + validMinute = integerBetween(minute, 0, 59), + validSecond = integerBetween(second, 0, 59), + validMillisecond = integerBetween(millisecond, 0, 999); + + if (!validHour) { + return unitOutOfRange("hour", hour); + } else if (!validMinute) { + return unitOutOfRange("minute", minute); + } else if (!validSecond) { + return unitOutOfRange("second", second); + } else if (!validMillisecond) { + return unitOutOfRange("millisecond", millisecond); + } else return false; +} + +const INVALID = "Invalid DateTime"; +const MAX_DATE = 8.64e15; + +function unsupportedZone(zone) { + return new Invalid("unsupported zone", `the zone "${zone.name}" is not supported`); +} + +// we cache week data on the DT object and this intermediates the cache +function possiblyCachedWeekData(dt) { + if (dt.weekData === null) { + dt.weekData = gregorianToWeek(dt.c); + } + return dt.weekData; +} + +// clone really means, "make a new object with these modifications". all "setters" really use this +// to create a new object while only changing some of the properties +function clone(inst, alts) { + const current = { + ts: inst.ts, + zone: inst.zone, + c: inst.c, + o: inst.o, + loc: inst.loc, + invalid: inst.invalid, + }; + return new DateTime({ ...current, ...alts, old: current }); +} + +// find the right offset a given local time. The o input is our guess, which determines which +// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST) +function fixOffset(localTS, o, tz) { + // Our UTC time is just a guess because our offset is just a guess + let utcGuess = localTS - o * 60 * 1000; + + // Test whether the zone matches the offset for this ts + const o2 = tz.offset(utcGuess); + + // If so, offset didn't change and we're done + if (o === o2) { + return [utcGuess, o]; + } + + // If not, change the ts by the difference in the offset + utcGuess -= (o2 - o) * 60 * 1000; + + // If that gives us the local time we want, we're done + const o3 = tz.offset(utcGuess); + if (o2 === o3) { + return [utcGuess, o2]; + } + + // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time + return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)]; +} + +// convert an epoch timestamp into a calendar object with the given offset +function tsToObj(ts, offset) { + ts += offset * 60 * 1000; + + const d = new Date(ts); + + return { + year: d.getUTCFullYear(), + month: d.getUTCMonth() + 1, + day: d.getUTCDate(), + hour: d.getUTCHours(), + minute: d.getUTCMinutes(), + second: d.getUTCSeconds(), + millisecond: d.getUTCMilliseconds(), + }; +} + +// convert a calendar object to a epoch timestamp +function objToTS(obj, offset, zone) { + return fixOffset(objToLocalTS(obj), offset, zone); +} + +// create a new DT instance by adding a duration, adjusting for DSTs +function adjustTime(inst, dur) { + const oPre = inst.o, + year = inst.c.year + Math.trunc(dur.years), + month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3, + c = { + ...inst.c, + year, + month, + day: + Math.min(inst.c.day, daysInMonth(year, month)) + + Math.trunc(dur.days) + + Math.trunc(dur.weeks) * 7, + }, + millisToAdd = Duration.fromObject({ + years: dur.years - Math.trunc(dur.years), + quarters: dur.quarters - Math.trunc(dur.quarters), + months: dur.months - Math.trunc(dur.months), + weeks: dur.weeks - Math.trunc(dur.weeks), + days: dur.days - Math.trunc(dur.days), + hours: dur.hours, + minutes: dur.minutes, + seconds: dur.seconds, + milliseconds: dur.milliseconds, + }).as("milliseconds"), + localTS = objToLocalTS(c); + + let [ts, o] = fixOffset(localTS, oPre, inst.zone); + + if (millisToAdd !== 0) { + ts += millisToAdd; + // that could have changed the offset by going over a DST, but we want to keep the ts the same + o = inst.zone.offset(ts); + } + + return { ts, o }; +} + +// helper useful in turning the results of parsing into real dates +// by handling the zone options +function parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) { + const { setZone, zone } = opts; + if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) { + const interpretationZone = parsedZone || zone, + inst = DateTime.fromObject(parsed, { + ...opts, + zone: interpretationZone, + specificOffset, + }); + return setZone ? inst : inst.setZone(zone); + } else { + return DateTime.invalid( + new Invalid("unparsable", `the input "${text}" can't be parsed as ${format}`) + ); + } +} + +// if you want to output a technical format (e.g. RFC 2822), this helper +// helps handle the details +function toTechFormat(dt, format, allowZ = true) { + return dt.isValid + ? Formatter.create(Locale.create("en-US"), { + allowZ, + forceSimple: true, + }).formatDateTimeFromString(dt, format) + : null; +} + +function toISODate(o, extended) { + const longFormat = o.c.year > 9999 || o.c.year < 0; + let c = ""; + if (longFormat && o.c.year >= 0) c += "+"; + c += padStart(o.c.year, longFormat ? 6 : 4); + + if (extended) { + c += "-"; + c += padStart(o.c.month); + c += "-"; + c += padStart(o.c.day); + } else { + c += padStart(o.c.month); + c += padStart(o.c.day); + } + return c; +} + +function toISOTime( + o, + extended, + suppressSeconds, + suppressMilliseconds, + includeOffset, + extendedZone +) { + let c = padStart(o.c.hour); + if (extended) { + c += ":"; + c += padStart(o.c.minute); + if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) { + c += ":"; + } + } else { + c += padStart(o.c.minute); + } + + if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) { + c += padStart(o.c.second); + + if (o.c.millisecond !== 0 || !suppressMilliseconds) { + c += "."; + c += padStart(o.c.millisecond, 3); + } + } + + if (includeOffset) { + if (o.isOffsetFixed && o.offset === 0 && !extendedZone) { + c += "Z"; + } else if (o.o < 0) { + c += "-"; + c += padStart(Math.trunc(-o.o / 60)); + c += ":"; + c += padStart(Math.trunc(-o.o % 60)); + } else { + c += "+"; + c += padStart(Math.trunc(o.o / 60)); + c += ":"; + c += padStart(Math.trunc(o.o % 60)); + } + } + + if (extendedZone) { + c += "[" + o.zone.ianaName + "]"; + } + return c; +} + +// defaults for unspecified units in the supported calendars +const defaultUnitValues = { + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + }, + defaultWeekUnitValues = { + weekNumber: 1, + weekday: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + }, + defaultOrdinalUnitValues = { + ordinal: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + }; + +// Units in the supported calendars, sorted by bigness +const orderedUnits = ["year", "month", "day", "hour", "minute", "second", "millisecond"], + orderedWeekUnits = [ + "weekYear", + "weekNumber", + "weekday", + "hour", + "minute", + "second", + "millisecond", + ], + orderedOrdinalUnits = ["year", "ordinal", "hour", "minute", "second", "millisecond"]; + +// standardize case and plurality in units +function normalizeUnit(unit) { + const normalized = { + year: "year", + years: "year", + month: "month", + months: "month", + day: "day", + days: "day", + hour: "hour", + hours: "hour", + minute: "minute", + minutes: "minute", + quarter: "quarter", + quarters: "quarter", + second: "second", + seconds: "second", + millisecond: "millisecond", + milliseconds: "millisecond", + weekday: "weekday", + weekdays: "weekday", + weeknumber: "weekNumber", + weeksnumber: "weekNumber", + weeknumbers: "weekNumber", + weekyear: "weekYear", + weekyears: "weekYear", + ordinal: "ordinal", + }[unit.toLowerCase()]; + + if (!normalized) throw new InvalidUnitError(unit); + + return normalized; +} + +// this is a dumbed down version of fromObject() that runs about 60% faster +// but doesn't do any validation, makes a bunch of assumptions about what units +// are present, and so on. +function quickDT(obj, opts) { + const zone = normalizeZone(opts.zone, Settings.defaultZone), + loc = Locale.fromObject(opts), + tsNow = Settings.now(); + + let ts, o; + + // assume we have the higher-order units + if (!isUndefined(obj.year)) { + for (const u of orderedUnits) { + if (isUndefined(obj[u])) { + obj[u] = defaultUnitValues[u]; + } + } + + const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj); + if (invalid) { + return DateTime.invalid(invalid); + } + + const offsetProvis = zone.offset(tsNow); + [ts, o] = objToTS(obj, offsetProvis, zone); + } else { + ts = tsNow; + } + + return new DateTime({ ts, zone, loc, o }); +} + +function diffRelative(start, end, opts) { + const round = isUndefined(opts.round) ? true : opts.round, + format = (c, unit) => { + c = roundTo(c, round || opts.calendary ? 0 : 2, true); + const formatter = end.loc.clone(opts).relFormatter(opts); + return formatter.format(c, unit); + }, + differ = (unit) => { + if (opts.calendary) { + if (!end.hasSame(start, unit)) { + return end.startOf(unit).diff(start.startOf(unit), unit).get(unit); + } else return 0; + } else { + return end.diff(start, unit).get(unit); + } + }; + + if (opts.unit) { + return format(differ(opts.unit), opts.unit); + } + + for (const unit of opts.units) { + const count = differ(unit); + if (Math.abs(count) >= 1) { + return format(count, unit); + } + } + return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]); +} + +function lastOpts(argList) { + let opts = {}, + args; + if (argList.length > 0 && typeof argList[argList.length - 1] === "object") { + opts = argList[argList.length - 1]; + args = Array.from(argList).slice(0, argList.length - 1); + } else { + args = Array.from(argList); + } + return [opts, args]; +} + +/** + * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them. + * + * A DateTime comprises of: + * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch. + * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone). + * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`. + * + * Here is a brief overview of the most commonly used functionality it provides: + * + * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}. + * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month}, + * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors. + * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors. + * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors. + * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}. + * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}. + * + * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation. + */ +class DateTime { + /** + * @access private + */ + constructor(config) { + const zone = config.zone || Settings.defaultZone; + + let invalid = + config.invalid || + (Number.isNaN(config.ts) ? new Invalid("invalid input") : null) || + (!zone.isValid ? unsupportedZone(zone) : null); + /** + * @access private + */ + this.ts = isUndefined(config.ts) ? Settings.now() : config.ts; + + let c = null, + o = null; + if (!invalid) { + const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone); + + if (unchanged) { + [c, o] = [config.old.c, config.old.o]; + } else { + const ot = zone.offset(this.ts); + c = tsToObj(this.ts, ot); + invalid = Number.isNaN(c.year) ? new Invalid("invalid input") : null; + c = invalid ? null : c; + o = invalid ? null : ot; + } + } + + /** + * @access private + */ + this._zone = zone; + /** + * @access private + */ + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + this.invalid = invalid; + /** + * @access private + */ + this.weekData = null; + /** + * @access private + */ + this.c = c; + /** + * @access private + */ + this.o = o; + /** + * @access private + */ + this.isLuxonDateTime = true; + } + + // CONSTRUCT + + /** + * Create a DateTime for the current instant, in the system's time zone. + * + * Use Settings to override these default values if needed. + * @example DateTime.now().toISO() //~> now in the ISO format + * @return {DateTime} + */ + static now() { + return new DateTime({}); + } + + /** + * Create a local DateTime + * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month, 1-indexed + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @example DateTime.local() //~> now + * @example DateTime.local({ zone: "America/New_York" }) //~> now, in US east coast time + * @example DateTime.local(2017) //~> 2017-01-01T00:00:00 + * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00 + * @example DateTime.local(2017, 3, 12, { locale: "fr" }) //~> 2017-03-12T00:00:00, with a French locale + * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00 + * @example DateTime.local(2017, 3, 12, 5, { zone: "utc" }) //~> 2017-03-12T05:00:00, in UTC + * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00 + * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10 + * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765 + * @return {DateTime} + */ + static local() { + const [opts, args] = lastOpts(arguments), + [year, month, day, hour, minute, second, millisecond] = args; + return quickDT({ year, month, day, hour, minute, second, millisecond }, opts); + } + + /** + * Create a DateTime in UTC + * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @param {Object} options - configuration options for the DateTime + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance + * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance + * @example DateTime.utc() //~> now + * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z + * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z + * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z + * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: "fr" }) //~> 2017-03-12T05:45:00Z with a French locale + * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z + * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: "fr" }) //~> 2017-03-12T05:45:10.765Z with a French locale + * @return {DateTime} + */ + static utc() { + const [opts, args] = lastOpts(arguments), + [year, month, day, hour, minute, second, millisecond] = args; + + opts.zone = FixedOffsetZone.utcInstance; + return quickDT({ year, month, day, hour, minute, second, millisecond }, opts); + } + + /** + * Create a DateTime from a JavaScript Date object. Uses the default zone. + * @param {Date} date - a JavaScript Date object + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @return {DateTime} + */ + static fromJSDate(date, options = {}) { + const ts = isDate(date) ? date.valueOf() : NaN; + if (Number.isNaN(ts)) { + return DateTime.invalid("invalid input"); + } + + const zoneToUse = normalizeZone(options.zone, Settings.defaultZone); + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + + return new DateTime({ + ts: ts, + zone: zoneToUse, + loc: Locale.fromObject(options), + }); + } + + /** + * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} milliseconds - a number of milliseconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @return {DateTime} + */ + static fromMillis(milliseconds, options = {}) { + if (!isNumber(milliseconds)) { + throw new InvalidArgumentError( + `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}` + ); + } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) { + // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start + return DateTime.invalid("Timestamp out of range"); + } else { + return new DateTime({ + ts: milliseconds, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options), + }); + } + } + + /** + * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} seconds - a number of seconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @return {DateTime} + */ + static fromSeconds(seconds, options = {}) { + if (!isNumber(seconds)) { + throw new InvalidArgumentError("fromSeconds requires a numerical input"); + } else { + return new DateTime({ + ts: seconds * 1000, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options), + }); + } + } + + /** + * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.year - a year, such as 1987 + * @param {number} obj.month - a month, 1-12 + * @param {number} obj.day - a day of the month, 1-31, depending on the month + * @param {number} obj.ordinal - day of the year, 1-365 or 366 + * @param {number} obj.weekYear - an ISO week year + * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year + * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday + * @param {number} obj.hour - hour of the day, 0-23 + * @param {number} obj.minute - minute of the hour, 0-59 + * @param {number} obj.second - second of the minute, 0-59 + * @param {number} obj.millisecond - millisecond of the second, 0-999 + * @param {Object} opts - options for creating this DateTime + * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone() + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25' + * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01' + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06 + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }), + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' }) + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' }) + * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13' + * @return {DateTime} + */ + static fromObject(obj, opts = {}) { + obj = obj || {}; + const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone); + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + + const tsNow = Settings.now(), + offsetProvis = !isUndefined(opts.specificOffset) + ? opts.specificOffset + : zoneToUse.offset(tsNow), + normalized = normalizeObject(obj, normalizeUnit), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber, + loc = Locale.fromObject(opts); + + // cases: + // just a weekday -> this week's instance of that weekday, no worries + // (gregorian data or ordinal) + (weekYear or weekNumber) -> error + // (gregorian month or day) + ordinal -> error + // otherwise just use weeks or ordinals or gregorian, depending on what's specified + + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError( + "Can't mix weekYear/weekNumber units with year/month/day or ordinals" + ); + } + + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + + const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor); + + // configure ourselves to deal with gregorian dates or week stuff + let units, + defaultValues, + objNow = tsToObj(tsNow, offsetProvis); + if (useWeekData) { + units = orderedWeekUnits; + defaultValues = defaultWeekUnitValues; + objNow = gregorianToWeek(objNow); + } else if (containsOrdinal) { + units = orderedOrdinalUnits; + defaultValues = defaultOrdinalUnitValues; + objNow = gregorianToOrdinal(objNow); + } else { + units = orderedUnits; + defaultValues = defaultUnitValues; + } + + // set default values for missing stuff + let foundFirst = false; + for (const u of units) { + const v = normalized[u]; + if (!isUndefined(v)) { + foundFirst = true; + } else if (foundFirst) { + normalized[u] = defaultValues[u]; + } else { + normalized[u] = objNow[u]; + } + } + + // make sure the values we have are in range + const higherOrderInvalid = useWeekData + ? hasInvalidWeekData(normalized) + : containsOrdinal + ? hasInvalidOrdinalData(normalized) + : hasInvalidGregorianData(normalized), + invalid = higherOrderInvalid || hasInvalidTimeData(normalized); + + if (invalid) { + return DateTime.invalid(invalid); + } + + // compute the actual time + const gregorian = useWeekData + ? weekToGregorian(normalized) + : containsOrdinal + ? ordinalToGregorian(normalized) + : normalized, + [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse), + inst = new DateTime({ + ts: tsFinal, + zone: zoneToUse, + o: offsetFinal, + loc, + }); + + // gregorian data + weekday serves only to validate + if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) { + return DateTime.invalid( + "mismatched weekday", + `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}` + ); + } + + return inst; + } + + /** + * Create a DateTime from an ISO 8601 string + * @param {string} text - the ISO string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance + * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromISO('2016-05-25T09:08:34.123') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true}) + * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'}) + * @example DateTime.fromISO('2016-W05-4') + * @return {DateTime} + */ + static fromISO(text, opts = {}) { + const [vals, parsedZone] = parseISODate(text); + return parseDataToDateTime(vals, parsedZone, opts, "ISO 8601", text); + } + + /** + * Create a DateTime from an RFC 2822 string + * @param {string} text - the RFC 2822 string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT') + * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600') + * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z') + * @return {DateTime} + */ + static fromRFC2822(text, opts = {}) { + const [vals, parsedZone] = parseRFC2822Date(text); + return parseDataToDateTime(vals, parsedZone, opts, "RFC 2822", text); + } + + /** + * Create a DateTime from an HTTP header date + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @param {string} text - the HTTP header date + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods. + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT') + * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT') + * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994') + * @return {DateTime} + */ + static fromHTTP(text, opts = {}) { + const [vals, parsedZone] = parseHTTPDate(text); + return parseDataToDateTime(vals, parsedZone, opts, "HTTP", opts); + } + + /** + * Create a DateTime from an input string and format string. + * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens). + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see the link below for the formats) + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @return {DateTime} + */ + static fromFormat(text, fmt, opts = {}) { + if (isUndefined(text) || isUndefined(fmt)) { + throw new InvalidArgumentError("fromFormat requires an input string and a format"); + } + + const { locale = null, numberingSystem = null } = opts, + localeToUse = Locale.fromOpts({ + locale, + numberingSystem, + defaultToEN: true, + }), + [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt); + if (invalid) { + return DateTime.invalid(invalid); + } else { + return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset); + } + } + + /** + * @deprecated use fromFormat instead + */ + static fromString(text, fmt, opts = {}) { + return DateTime.fromFormat(text, fmt, opts); + } + + /** + * Create a DateTime from a SQL date, time, or datetime + * Defaults to en-US if no locale has been specified, regardless of the system's locale + * @param {string} text - the string to parse + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @example DateTime.fromSQL('2017-05-15') + * @example DateTime.fromSQL('2017-05-15 09:12:34') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true }) + * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' }) + * @example DateTime.fromSQL('09:12:34.342') + * @return {DateTime} + */ + static fromSQL(text, opts = {}) { + const [vals, parsedZone] = parseSQL(text); + return parseDataToDateTime(vals, parsedZone, opts, "SQL", text); + } + + /** + * Create an invalid DateTime. + * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent. + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {DateTime} + */ + static invalid(reason, explanation = null) { + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the DateTime is invalid"); + } + + const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidDateTimeError(invalid); + } else { + return new DateTime({ invalid }); + } + } + + /** + * Check if an object is an instance of DateTime. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + static isDateTime(o) { + return (o && o.isLuxonDateTime) || false; + } + + /** + * Produce the format string for a set of options + * @param formatOpts + * @param localeOpts + * @returns {string} + */ + static parseFormatForOpts(formatOpts, localeOpts = {}) { + const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts)); + return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(""); + } + + /** + * Produce the the fully expanded format token for the locale + * Does NOT quote characters, so quoted tokens will not round trip correctly + * @param fmt + * @param localeOpts + * @returns {string} + */ + static expandFormat(fmt, localeOpts = {}) { + const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts)); + return expanded.map((t) => t.val).join(""); + } + + // INFO + + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example DateTime.local(2017, 7, 4).get('month'); //=> 7 + * @example DateTime.local(2017, 7, 4).get('day'); //=> 4 + * @return {number} + */ + get(unit) { + return this[unit]; + } + + /** + * Returns whether the DateTime is valid. Invalid DateTimes occur when: + * * The DateTime was created from invalid calendar information, such as the 13th month or February 30 + * * The DateTime was created by an operation on another invalid date + * @type {boolean} + */ + get isValid() { + return this.invalid === null; + } + + /** + * Returns an error code if this DateTime is invalid, or null if the DateTime is valid + * @type {string} + */ + get invalidReason() { + return this.invalid ? this.invalid.reason : null; + } + + /** + * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid + * @type {string} + */ + get invalidExplanation() { + return this.invalid ? this.invalid.explanation : null; + } + + /** + * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime + * + * @type {string} + */ + get locale() { + return this.isValid ? this.loc.locale : null; + } + + /** + * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime + * + * @type {string} + */ + get numberingSystem() { + return this.isValid ? this.loc.numberingSystem : null; + } + + /** + * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime + * + * @type {string} + */ + get outputCalendar() { + return this.isValid ? this.loc.outputCalendar : null; + } + + /** + * Get the time zone associated with this DateTime. + * @type {Zone} + */ + get zone() { + return this._zone; + } + + /** + * Get the name of the time zone. + * @type {string} + */ + get zoneName() { + return this.isValid ? this.zone.name : null; + } + + /** + * Get the year + * @example DateTime.local(2017, 5, 25).year //=> 2017 + * @type {number} + */ + get year() { + return this.isValid ? this.c.year : NaN; + } + + /** + * Get the quarter + * @example DateTime.local(2017, 5, 25).quarter //=> 2 + * @type {number} + */ + get quarter() { + return this.isValid ? Math.ceil(this.c.month / 3) : NaN; + } + + /** + * Get the month (1-12). + * @example DateTime.local(2017, 5, 25).month //=> 5 + * @type {number} + */ + get month() { + return this.isValid ? this.c.month : NaN; + } + + /** + * Get the day of the month (1-30ish). + * @example DateTime.local(2017, 5, 25).day //=> 25 + * @type {number} + */ + get day() { + return this.isValid ? this.c.day : NaN; + } + + /** + * Get the hour of the day (0-23). + * @example DateTime.local(2017, 5, 25, 9).hour //=> 9 + * @type {number} + */ + get hour() { + return this.isValid ? this.c.hour : NaN; + } + + /** + * Get the minute of the hour (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30 + * @type {number} + */ + get minute() { + return this.isValid ? this.c.minute : NaN; + } + + /** + * Get the second of the minute (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52 + * @type {number} + */ + get second() { + return this.isValid ? this.c.second : NaN; + } + + /** + * Get the millisecond of the second (0-999). + * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654 + * @type {number} + */ + get millisecond() { + return this.isValid ? this.c.millisecond : NaN; + } + + /** + * Get the week year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 12, 31).weekYear //=> 2015 + * @type {number} + */ + get weekYear() { + return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN; + } + + /** + * Get the week number of the week year (1-52ish). + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2017, 5, 25).weekNumber //=> 21 + * @type {number} + */ + get weekNumber() { + return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN; + } + + /** + * Get the day of the week. + * 1 is Monday and 7 is Sunday + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 11, 31).weekday //=> 4 + * @type {number} + */ + get weekday() { + return this.isValid ? possiblyCachedWeekData(this).weekday : NaN; + } + + /** + * Get the ordinal (meaning the day of the year) + * @example DateTime.local(2017, 5, 25).ordinal //=> 145 + * @type {number|DateTime} + */ + get ordinal() { + return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN; + } + + /** + * Get the human readable short month name, such as 'Oct'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthShort //=> Oct + * @type {string} + */ + get monthShort() { + return this.isValid ? Info.months("short", { locObj: this.loc })[this.month - 1] : null; + } + + /** + * Get the human readable long month name, such as 'October'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthLong //=> October + * @type {string} + */ + get monthLong() { + return this.isValid ? Info.months("long", { locObj: this.loc })[this.month - 1] : null; + } + + /** + * Get the human readable short weekday, such as 'Mon'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon + * @type {string} + */ + get weekdayShort() { + return this.isValid ? Info.weekdays("short", { locObj: this.loc })[this.weekday - 1] : null; + } + + /** + * Get the human readable long weekday, such as 'Monday'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday + * @type {string} + */ + get weekdayLong() { + return this.isValid ? Info.weekdays("long", { locObj: this.loc })[this.weekday - 1] : null; + } + + /** + * Get the UTC offset of this DateTime in minutes + * @example DateTime.now().offset //=> -240 + * @example DateTime.utc().offset //=> 0 + * @type {number} + */ + get offset() { + return this.isValid ? +this.o : NaN; + } + + /** + * Get the short human name for the zone's current offset, for example "EST" or "EDT". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + get offsetNameShort() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "short", + locale: this.locale, + }); + } else { + return null; + } + } + + /** + * Get the long human name for the zone's current offset, for example "Eastern Standard Time" or "Eastern Daylight Time". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + get offsetNameLong() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "long", + locale: this.locale, + }); + } else { + return null; + } + } + + /** + * Get whether this zone's offset ever changes, as in a DST. + * @type {boolean} + */ + get isOffsetFixed() { + return this.isValid ? this.zone.isUniversal : null; + } + + /** + * Get whether the DateTime is in a DST. + * @type {boolean} + */ + get isInDST() { + if (this.isOffsetFixed) { + return false; + } else { + return ( + this.offset > this.set({ month: 1, day: 1 }).offset || + this.offset > this.set({ month: 5 }).offset + ); + } + } + + /** + * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC + * in this DateTime's zone. During DST changes local time can be ambiguous, for example + * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`. + * This method will return both possible DateTimes if this DateTime's local time is ambiguous. + * @returns {DateTime[]} + */ + getPossibleOffsets() { + if (!this.isValid || this.isOffsetFixed) { + return [this]; + } + const dayMs = 86400000; + const minuteMs = 60000; + const localTS = objToLocalTS(this.c); + const oEarlier = this.zone.offset(localTS - dayMs); + const oLater = this.zone.offset(localTS + dayMs); + + const o1 = this.zone.offset(localTS - oEarlier * minuteMs); + const o2 = this.zone.offset(localTS - oLater * minuteMs); + if (o1 === o2) { + return [this]; + } + const ts1 = localTS - o1 * minuteMs; + const ts2 = localTS - o2 * minuteMs; + const c1 = tsToObj(ts1, o1); + const c2 = tsToObj(ts2, o2); + if ( + c1.hour === c2.hour && + c1.minute === c2.minute && + c1.second === c2.second && + c1.millisecond === c2.millisecond + ) { + return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })]; + } + return [this]; + } + + /** + * Returns true if this DateTime is in a leap year, false otherwise + * @example DateTime.local(2016).isInLeapYear //=> true + * @example DateTime.local(2013).isInLeapYear //=> false + * @type {boolean} + */ + get isInLeapYear() { + return isLeapYear(this.year); + } + + /** + * Returns the number of days in this DateTime's month + * @example DateTime.local(2016, 2).daysInMonth //=> 29 + * @example DateTime.local(2016, 3).daysInMonth //=> 31 + * @type {number} + */ + get daysInMonth() { + return daysInMonth(this.year, this.month); + } + + /** + * Returns the number of days in this DateTime's year + * @example DateTime.local(2016).daysInYear //=> 366 + * @example DateTime.local(2013).daysInYear //=> 365 + * @type {number} + */ + get daysInYear() { + return this.isValid ? daysInYear(this.year) : NaN; + } + + /** + * Returns the number of weeks in this DateTime's year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2004).weeksInWeekYear //=> 53 + * @example DateTime.local(2013).weeksInWeekYear //=> 52 + * @type {number} + */ + get weeksInWeekYear() { + return this.isValid ? weeksInWeekYear(this.weekYear) : NaN; + } + + /** + * Returns the resolved Intl options for this DateTime. + * This is useful in understanding the behavior of formatting methods + * @param {Object} opts - the same options as toLocaleString + * @return {Object} + */ + resolvedLocaleOptions(opts = {}) { + const { locale, numberingSystem, calendar } = Formatter.create( + this.loc.clone(opts), + opts + ).resolvedOptions(this); + return { locale, numberingSystem, outputCalendar: calendar }; + } + + // TRANSFORM + + /** + * "Set" the DateTime's zone to UTC. Returns a newly-constructed DateTime. + * + * Equivalent to {@link DateTime#setZone}('utc') + * @param {number} [offset=0] - optionally, an offset from UTC in minutes + * @param {Object} [opts={}] - options to pass to `setZone()` + * @return {DateTime} + */ + toUTC(offset = 0, opts = {}) { + return this.setZone(FixedOffsetZone.instance(offset), opts); + } + + /** + * "Set" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime. + * + * Equivalent to `setZone('local')` + * @return {DateTime} + */ + toLocal() { + return this.setZone(Settings.defaultZone); + } + + /** + * "Set" the DateTime's zone to specified zone. Returns a newly-constructed DateTime. + * + * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones. + * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class. + * @param {Object} opts - options + * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this. + * @return {DateTime} + */ + setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) { + zone = normalizeZone(zone, Settings.defaultZone); + if (zone.equals(this.zone)) { + return this; + } else if (!zone.isValid) { + return DateTime.invalid(unsupportedZone(zone)); + } else { + let newTS = this.ts; + if (keepLocalTime || keepCalendarTime) { + const offsetGuess = zone.offset(this.ts); + const asObj = this.toObject(); + [newTS] = objToTS(asObj, offsetGuess, zone); + } + return clone(this, { ts: newTS, zone }); + } + } + + /** + * "Set" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime. + * @param {Object} properties - the properties to set + * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' }) + * @return {DateTime} + */ + reconfigure({ locale, numberingSystem, outputCalendar } = {}) { + const loc = this.loc.clone({ locale, numberingSystem, outputCalendar }); + return clone(this, { loc }); + } + + /** + * "Set" the locale. Returns a newly-constructed DateTime. + * Just a convenient alias for reconfigure({ locale }) + * @example DateTime.local(2017, 5, 25).setLocale('en-GB') + * @return {DateTime} + */ + setLocale(locale) { + return this.reconfigure({ locale }); + } + + /** + * "Set" the values of specified units. Returns a newly-constructed DateTime. + * You can only set units with this method; for "setting" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}. + * @param {Object} values - a mapping of units to numbers + * @example dt.set({ year: 2017 }) + * @example dt.set({ hour: 8, minute: 30 }) + * @example dt.set({ weekday: 5 }) + * @example dt.set({ year: 2005, ordinal: 234 }) + * @return {DateTime} + */ + set(values) { + if (!this.isValid) return this; + + const normalized = normalizeObject(values, normalizeUnit), + settingWeekStuff = + !isUndefined(normalized.weekYear) || + !isUndefined(normalized.weekNumber) || + !isUndefined(normalized.weekday), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber; + + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError( + "Can't mix weekYear/weekNumber units with year/month/day or ordinals" + ); + } + + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + + let mixed; + if (settingWeekStuff) { + mixed = weekToGregorian({ ...gregorianToWeek(this.c), ...normalized }); + } else if (!isUndefined(normalized.ordinal)) { + mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized }); + } else { + mixed = { ...this.toObject(), ...normalized }; + + // if we didn't set the day but we ended up on an overflow date, + // use the last day of the right month + if (isUndefined(normalized.day)) { + mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day); + } + } + + const [ts, o] = objToTS(mixed, this.o, this.zone); + return clone(this, { ts, o }); + } + + /** + * Add a period of time to this DateTime and return the resulting DateTime + * + * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @example DateTime.now().plus(123) //~> in 123 milliseconds + * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes + * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow + * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday + * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min + * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min + * @return {DateTime} + */ + plus(duration) { + if (!this.isValid) return this; + const dur = Duration.fromDurationLike(duration); + return clone(this, adjustTime(this, dur)); + } + + /** + * Subtract a period of time to this DateTime and return the resulting DateTime + * See {@link DateTime#plus} + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + @return {DateTime} + */ + minus(duration) { + if (!this.isValid) return this; + const dur = Duration.fromDurationLike(duration).negate(); + return clone(this, adjustTime(this, dur)); + } + + /** + * "Set" this DateTime to the beginning of a unit of time. + * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01' + * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01' + * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00' + * @return {DateTime} + */ + startOf(unit) { + if (!this.isValid) return this; + const o = {}, + normalizedUnit = Duration.normalizeUnit(unit); + switch (normalizedUnit) { + case "years": + o.month = 1; + // falls through + case "quarters": + case "months": + o.day = 1; + // falls through + case "weeks": + case "days": + o.hour = 0; + // falls through + case "hours": + o.minute = 0; + // falls through + case "minutes": + o.second = 0; + // falls through + case "seconds": + o.millisecond = 0; + break; + // no default, invalid units throw in normalizeUnit() + } + + if (normalizedUnit === "weeks") { + o.weekday = 1; + } + + if (normalizedUnit === "quarters") { + const q = Math.ceil(this.month / 3); + o.month = (q - 1) * 3 + 1; + } + + return this.set(o); + } + + /** + * "Set" this DateTime to the end (meaning the last millisecond) of a unit of time + * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00' + * @return {DateTime} + */ + endOf(unit) { + return this.isValid + ? this.plus({ [unit]: 1 }) + .startOf(unit) + .minus(1) + : this; + } + + // OUTPUT + + /** + * Returns a string representation of this DateTime formatted according to the specified format string. + * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens). + * Defaults to en-US if no locale has been specified, regardless of the system's locale. + * @param {string} fmt - the format string + * @param {Object} opts - opts to override the configuration options on this DateTime + * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22' + * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22' + * @example DateTime.now().toFormat('yyyy LLL dd', { locale: "fr" }) //=> '2017 avr. 22' + * @example DateTime.now().toFormat("HH 'hours and' mm 'minutes'") //=> '20 hours and 55 minutes' + * @return {string} + */ + toFormat(fmt, opts = {}) { + return this.isValid + ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) + : INVALID; + } + + /** + * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`. + * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation + * of the DateTime in the assigned locale. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options + * @param {Object} opts - opts to override the configuration options on this DateTime + * @example DateTime.now().toLocaleString(); //=> 4/20/2017 + * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017' + * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017' + * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022' + * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM' + * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM' + * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20' + * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM' + * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32' + * @return {string} + */ + toLocaleString(formatOpts = DATE_SHORT, opts = {}) { + return this.isValid + ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this) + : INVALID; + } + + /** + * Returns an array of format "parts", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts + * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`. + * @example DateTime.now().toLocaleParts(); //=> [ + * //=> { type: 'day', value: '25' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'month', value: '05' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'year', value: '1982' } + * //=> ] + */ + toLocaleParts(opts = {}) { + return this.isValid + ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) + : []; + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.extendedZone=false] - add the time zone format extension + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z' + * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00' + * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335' + * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400' + * @return {string} + */ + toISO({ + format = "extended", + suppressSeconds = false, + suppressMilliseconds = false, + includeOffset = true, + extendedZone = false, + } = {}) { + if (!this.isValid) { + return null; + } + + const ext = format === "extended"; + + let c = toISODate(this, ext); + c += "T"; + c += toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone); + return c; + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's date component + * @param {Object} opts - options + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25' + * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525' + * @return {string} + */ + toISODate({ format = "extended" } = {}) { + if (!this.isValid) { + return null; + } + + return toISODate(this, format === "extended"); + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's week date + * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2' + * @return {string} + */ + toISOWeekDate() { + return toTechFormat(this, "kkkk-'W'WW-c"); + } + + /** + * Returns an ISO 8601-compliant string representation of this DateTime's time component + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.extendedZone=true] - add the time zone format extension + * @param {boolean} [opts.includePrefix=false] - include the `T` prefix + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z' + * @return {string} + */ + toISOTime({ + suppressMilliseconds = false, + suppressSeconds = false, + includeOffset = true, + includePrefix = false, + extendedZone = false, + format = "extended", + } = {}) { + if (!this.isValid) { + return null; + } + + let c = includePrefix ? "T" : ""; + return ( + c + + toISOTime( + this, + format === "extended", + suppressSeconds, + suppressMilliseconds, + includeOffset, + extendedZone + ) + ); + } + + /** + * Returns an RFC 2822-compatible string representation of this DateTime + * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000' + * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400' + * @return {string} + */ + toRFC2822() { + return toTechFormat(this, "EEE, dd LLL yyyy HH:mm:ss ZZZ", false); + } + + /** + * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT. + * Specifically, the string conforms to RFC 1123. + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT' + * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT' + * @return {string} + */ + toHTTP() { + return toTechFormat(this.toUTC(), "EEE, dd LLL yyyy HH:mm:ss 'GMT'"); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL Date + * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13' + * @return {string} + */ + toSQLDate() { + if (!this.isValid) { + return null; + } + return toISODate(this, true); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL Time + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00' + * @example DateTime.utc().toSQL() //=> '05:15:16.345' + * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00' + * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345' + * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York' + * @return {string} + */ + toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) { + let fmt = "HH:mm:ss.SSS"; + + if (includeZone || includeOffset) { + if (includeOffsetSpace) { + fmt += " "; + } + if (includeZone) { + fmt += "z"; + } else if (includeOffset) { + fmt += "ZZ"; + } + } + + return toTechFormat(this, fmt, true); + } + + /** + * Returns a string representation of this DateTime appropriate for use in SQL DateTime + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00' + * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z' + * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00' + * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000' + * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York' + * @return {string} + */ + toSQL(opts = {}) { + if (!this.isValid) { + return null; + } + + return `${this.toSQLDate()} ${this.toSQLTime(opts)}`; + } + + /** + * Returns a string representation of this DateTime appropriate for debugging + * @return {string} + */ + toString() { + return this.isValid ? this.toISO() : INVALID; + } + + /** + * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis} + * @return {number} + */ + valueOf() { + return this.toMillis(); + } + + /** + * Returns the epoch milliseconds of this DateTime. + * @return {number} + */ + toMillis() { + return this.isValid ? this.ts : NaN; + } + + /** + * Returns the epoch seconds of this DateTime. + * @return {number} + */ + toSeconds() { + return this.isValid ? this.ts / 1000 : NaN; + } + + /** + * Returns the epoch seconds (as a whole number) of this DateTime. + * @return {number} + */ + toUnixInteger() { + return this.isValid ? Math.floor(this.ts / 1000) : NaN; + } + + /** + * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON. + * @return {string} + */ + toJSON() { + return this.toISO(); + } + + /** + * Returns a BSON serializable equivalent to this DateTime. + * @return {Date} + */ + toBSON() { + return this.toJSDate(); + } + + /** + * Returns a JavaScript object with this DateTime's year, month, day, and so on. + * @param opts - options for generating the object + * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output + * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 } + * @return {Object} + */ + toObject(opts = {}) { + if (!this.isValid) return {}; + + const base = { ...this.c }; + + if (opts.includeConfig) { + base.outputCalendar = this.outputCalendar; + base.numberingSystem = this.loc.numberingSystem; + base.locale = this.loc.locale; + } + return base; + } + + /** + * Returns a JavaScript Date equivalent to this DateTime. + * @return {Date} + */ + toJSDate() { + return new Date(this.isValid ? this.ts : NaN); + } + + // COMPARE + + /** + * Return the difference between two DateTimes as a Duration. + * @param {DateTime} otherDateTime - the DateTime to compare this one to + * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example + * var i1 = DateTime.fromISO('1982-05-25T09:45'), + * i2 = DateTime.fromISO('1983-10-14T10:30'); + * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 } + * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 } + * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 } + * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 } + * @return {Duration} + */ + diff(otherDateTime, unit = "milliseconds", opts = {}) { + if (!this.isValid || !otherDateTime.isValid) { + return Duration.invalid("created by diffing an invalid DateTime"); + } + + const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts }; + + const units = maybeArray(unit).map(Duration.normalizeUnit), + otherIsLater = otherDateTime.valueOf() > this.valueOf(), + earlier = otherIsLater ? this : otherDateTime, + later = otherIsLater ? otherDateTime : this, + diffed = diff(earlier, later, units, durOpts); + + return otherIsLater ? diffed.negate() : diffed; + } + + /** + * Return the difference between this DateTime and right now. + * See {@link DateTime#diff} + * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + diffNow(unit = "milliseconds", opts = {}) { + return this.diff(DateTime.now(), unit, opts); + } + + /** + * Return an Interval spanning between this DateTime and another DateTime + * @param {DateTime} otherDateTime - the other end point of the Interval + * @return {Interval} + */ + until(otherDateTime) { + return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this; + } + + /** + * Return whether this DateTime is in the same unit of time as another DateTime. + * Higher-order units must also be identical for this function to return `true`. + * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed. + * @param {DateTime} otherDateTime - the other DateTime + * @param {string} unit - the unit of time to check sameness on + * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day + * @return {boolean} + */ + hasSame(otherDateTime, unit) { + if (!this.isValid) return false; + + const inputMs = otherDateTime.valueOf(); + const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true }); + return adjustedToZone.startOf(unit) <= inputMs && inputMs <= adjustedToZone.endOf(unit); + } + + /** + * Equality check + * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid. + * To compare just the millisecond values, use `+dt1 === +dt2`. + * @param {DateTime} other - the other DateTime + * @return {boolean} + */ + equals(other) { + return ( + this.isValid && + other.isValid && + this.valueOf() === other.valueOf() && + this.zone.equals(other.zone) && + this.loc.equals(other.loc) + ); + } + + /** + * Returns a string representation of a this time relative to now, such as "in two days". Can only internationalize if your + * platform supports Intl.RelativeTimeFormat. Rounds down by default. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} [options.style="long"] - the style of units, must be "long", "short", or "narrow" + * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of "years", "quarters", "months", "weeks", "days", "hours", "minutes", or "seconds" + * @param {boolean} [options.round=true] - whether to round the numbers in the output. + * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.now().plus({ days: 1 }).toRelative() //=> "in 1 day" + * @example DateTime.now().setLocale("es").toRelative({ days: 1 }) //=> "dentro de 1 día" + * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: "fr" }) //=> "dans 23 heures" + * @example DateTime.now().minus({ days: 2 }).toRelative() //=> "2 days ago" + * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: "hours" }) //=> "48 hours ago" + * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> "1.5 days ago" + */ + toRelative(options = {}) { + if (!this.isValid) return null; + const base = options.base || DateTime.fromObject({}, { zone: this.zone }), + padding = options.padding ? (this < base ? -options.padding : options.padding) : 0; + let units = ["years", "months", "days", "hours", "minutes", "seconds"]; + let unit = options.unit; + if (Array.isArray(options.unit)) { + units = options.unit; + unit = undefined; + } + return diffRelative(base, this.plus(padding), { + ...options, + numeric: "always", + units, + unit, + }); + } + + /** + * Returns a string representation of this date relative to today, such as "yesterday" or "next month". + * Only internationalizes on platforms that supports Intl.RelativeTimeFormat. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of "years", "quarters", "months", "weeks", or "days" + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> "tomorrow" + * @example DateTime.now().setLocale("es").plus({ days: 1 }).toRelative() //=> ""mañana" + * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: "fr" }) //=> "demain" + * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> "2 days ago" + */ + toRelativeCalendar(options = {}) { + if (!this.isValid) return null; + + return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, { + ...options, + numeric: "auto", + units: ["years", "months", "days"], + calendary: true, + }); + } + + /** + * Return the min of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum + * @return {DateTime} the min DateTime, or undefined if called with no argument + */ + static min(...dateTimes) { + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("min requires all arguments be DateTimes"); + } + return bestBy(dateTimes, (i) => i.valueOf(), Math.min); + } + + /** + * Return the max of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum + * @return {DateTime} the max DateTime, or undefined if called with no argument + */ + static max(...dateTimes) { + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("max requires all arguments be DateTimes"); + } + return bestBy(dateTimes, (i) => i.valueOf(), Math.max); + } + + // MISC + + /** + * Explain how a string would be parsed by fromFormat() + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see description) + * @param {Object} options - options taken by fromFormat() + * @return {Object} + */ + static fromFormatExplain(text, fmt, options = {}) { + const { locale = null, numberingSystem = null } = options, + localeToUse = Locale.fromOpts({ + locale, + numberingSystem, + defaultToEN: true, + }); + return explainFromTokens(localeToUse, text, fmt); + } + + /** + * @deprecated use fromFormatExplain instead + */ + static fromStringExplain(text, fmt, options = {}) { + return DateTime.fromFormatExplain(text, fmt, options); + } + + // FORMAT PRESETS + + /** + * {@link DateTime#toLocaleString} format like 10/14/1983 + * @type {Object} + */ + static get DATE_SHORT() { + return DATE_SHORT; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983' + * @type {Object} + */ + static get DATE_MED() { + return DATE_MED; + } + + /** + * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983' + * @type {Object} + */ + static get DATE_MED_WITH_WEEKDAY() { + return DATE_MED_WITH_WEEKDAY; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983' + * @type {Object} + */ + static get DATE_FULL() { + return DATE_FULL; + } + + /** + * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983' + * @type {Object} + */ + static get DATE_HUGE() { + return DATE_HUGE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get TIME_SIMPLE() { + return TIME_SIMPLE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get TIME_WITH_SECONDS() { + return TIME_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + static get TIME_WITH_SHORT_OFFSET() { + return TIME_WITH_SHORT_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + static get TIME_WITH_LONG_OFFSET() { + return TIME_WITH_LONG_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30', always 24-hour. + * @type {Object} + */ + static get TIME_24_SIMPLE() { + return TIME_24_SIMPLE; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour. + * @type {Object} + */ + static get TIME_24_WITH_SECONDS() { + return TIME_24_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour. + * @type {Object} + */ + static get TIME_24_WITH_SHORT_OFFSET() { + return TIME_24_WITH_SHORT_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour. + * @type {Object} + */ + static get TIME_24_WITH_LONG_OFFSET() { + return TIME_24_WITH_LONG_OFFSET; + } + + /** + * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_SHORT() { + return DATETIME_SHORT; + } + + /** + * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_SHORT_WITH_SECONDS() { + return DATETIME_SHORT_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_MED() { + return DATETIME_MED; + } + + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_MED_WITH_SECONDS() { + return DATETIME_MED_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_MED_WITH_WEEKDAY() { + return DATETIME_MED_WITH_WEEKDAY; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_FULL() { + return DATETIME_FULL; + } + + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_FULL_WITH_SECONDS() { + return DATETIME_FULL_WITH_SECONDS; + } + + /** + * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_HUGE() { + return DATETIME_HUGE; + } + + /** + * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + static get DATETIME_HUGE_WITH_SECONDS() { + return DATETIME_HUGE_WITH_SECONDS; + } +} + +/** + * @private + */ +function friendlyDateTime(dateTimeish) { + if (DateTime.isDateTime(dateTimeish)) { + return dateTimeish; + } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) { + return DateTime.fromJSDate(dateTimeish); + } else if (dateTimeish && typeof dateTimeish === "object") { + return DateTime.fromObject(dateTimeish); + } else { + throw new InvalidArgumentError( + `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}` + ); + } +} + +const VERSION = "3.4.3"; + +var Luxon = /*#__PURE__*/Object.freeze({ + __proto__: null, + VERSION: VERSION, + DateTime: DateTime, + Duration: Duration, + Interval: Interval, + Info: Info, + Zone: Zone, + FixedOffsetZone: FixedOffsetZone, + IANAZone: IANAZone, + InvalidZone: InvalidZone, + SystemZone: SystemZone, + Settings: Settings +}); + +//////////////////// +// Query Settings // +//////////////////// +const DEFAULT_QUERY_SETTINGS = { + renderNullAs: "\\-", + taskCompletionTracking: false, + taskCompletionUseEmojiShorthand: false, + taskCompletionText: "completion", + taskCompletionDateFormat: "yyyy-MM-dd", + recursiveSubTaskCompletion: false, + warnOnEmptyResult: true, + refreshEnabled: true, + refreshInterval: 2500, + defaultDateFormat: "MMMM dd, yyyy", + defaultDateTimeFormat: "h:mm a - MMMM dd, yyyy", + maxRecursiveRenderDepth: 4, + tableIdColumnName: "File", + tableGroupColumnName: "Group", + showResultCount: true, +}; +const DEFAULT_EXPORT_SETTINGS = { + allowHtml: true, +}; +/** Default settings for dataview on install. */ +const DEFAULT_SETTINGS = { + ...DEFAULT_QUERY_SETTINGS, + ...DEFAULT_EXPORT_SETTINGS, + ...{ + inlineQueryPrefix: "=", + inlineJsQueryPrefix: "$=", + inlineQueriesInCodeblocks: true, + enableInlineDataview: true, + enableDataviewJs: false, + enableInlineDataviewJs: false, + prettyRenderInlineFields: true, + prettyRenderInlineFieldsInLivePreview: true, + dataviewJsKeyword: "dataviewjs", + }, +}; + +/** Functional return type for error handling. */ +class Success { + value; + successful; + constructor(value) { + this.value = value; + this.successful = true; + } + map(f) { + return new Success(f(this.value)); + } + flatMap(f) { + return f(this.value); + } + mapErr(f) { + return this; + } + bimap(succ, _fail) { + return this.map(succ); + } + orElse(_value) { + return this.value; + } + cast() { + return this; + } + orElseThrow(_message) { + return this.value; + } +} +/** Functional return type for error handling. */ +class Failure { + error; + successful; + constructor(error) { + this.error = error; + this.successful = false; + } + map(_f) { + return this; + } + flatMap(_f) { + return this; + } + mapErr(f) { + return new Failure(f(this.error)); + } + bimap(_succ, fail) { + return this.mapErr(fail); + } + orElse(value) { + return value; + } + cast() { + return this; + } + orElseThrow(message) { + if (message) + throw new Error(message(this.error)); + else + throw new Error("" + this.error); + } +} +/** Monadic 'Result' type which encapsulates whether a procedure succeeded or failed, as well as it's return value. */ +var Result; +(function (Result) { + /** Construct a new success result wrapping the given value. */ + function success(value) { + return new Success(value); + } + Result.success = success; + /** Construct a new failure value wrapping the given error. */ + function failure(error) { + return new Failure(error); + } + Result.failure = failure; + /** Join two results with a bi-function and return a new result. */ + function flatMap2(first, second, f) { + if (first.successful) { + if (second.successful) + return f(first.value, second.value); + else + return failure(second.error); + } + else { + return failure(first.error); + } + } + Result.flatMap2 = flatMap2; + /** Join two results with a bi-function and return a new result. */ + function map2(first, second, f) { + return flatMap2(first, second, (a, b) => success(f(a, b))); + } + Result.map2 = map2; +})(Result || (Result = {})); + +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; +} + +var parsimmon_umd_min = {exports: {}}; + +parsimmon_umd_min.exports; + +(function (module, exports) { + !function(n,t){module.exports=t();}("undefined"!=typeof self?self:commonjsGlobal,function(){return function(n){var t={};function r(e){if(t[e])return t[e].exports;var u=t[e]={i:e,l:!1,exports:{}};return n[e].call(u.exports,u,u.exports,r),u.l=!0,u.exports}return r.m=n,r.c=t,r.d=function(n,t,e){r.o(n,t)||Object.defineProperty(n,t,{configurable:!1,enumerable:!0,get:e});},r.r=function(n){Object.defineProperty(n,"__esModule",{value:!0});},r.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(t,"a",t),t},r.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},r.p="",r(r.s=0)}([function(n,t,r){function e(n){if(!(this instanceof e))return new e(n);this._=n;}var u=e.prototype;function o(n,t){for(var r=0;r<n;r++)t(r);}function i(n,t,r){return function(n,t){o(t.length,function(r){n(t[r],r,t);});}(function(r,e,u){t=n(t,r,e,u);},r),t}function a(n,t){return i(function(t,r,e,u){return t.concat([n(r,e,u)])},[],t)}function f(n,t){var r={v:0,buf:t};return o(n,function(){var n;r={v:r.v<<1|(n=r.buf,n[0]>>7),buf:function(n){var t=i(function(n,t,r,e){return n.concat(r===e.length-1?Buffer.from([t,0]).readUInt16BE(0):e.readUInt16BE(r))},[],n);return Buffer.from(a(function(n){return (n<<1&65535)>>8},t))}(r.buf)};}),r}function c(){return "undefined"!=typeof Buffer}function s(){if(!c())throw new Error("Buffer global does not exist; please use webpack if you need to parse Buffers in the browser.")}function l(n){s();var t=i(function(n,t){return n+t},0,n);if(t%8!=0)throw new Error("The bits ["+n.join(", ")+"] add up to "+t+" which is not an even number of bytes; the total should be divisible by 8");var r,u=t/8,o=(r=function(n){return n>48},i(function(n,t){return n||(r(t)?t:n)},null,n));if(o)throw new Error(o+" bit range requested exceeds 48 bit (6 byte) Number max.");return new e(function(t,r){var e=u+r;return e>t.length?x(r,u.toString()+" bytes"):b(e,i(function(n,t){var r=f(t,n.buf);return {coll:n.coll.concat(r.v),buf:r.buf}},{coll:[],buf:t.slice(r,e)},n).coll)})}function h(n,t){return new e(function(r,e){return s(),e+t>r.length?x(e,t+" bytes for "+n):b(e+t,r.slice(e,e+t))})}function p(n,t){if("number"!=typeof(r=t)||Math.floor(r)!==r||t<0||t>6)throw new Error(n+" requires integer length in range [0, 6].");var r;}function d(n){return p("uintBE",n),h("uintBE("+n+")",n).map(function(t){return t.readUIntBE(0,n)})}function v(n){return p("uintLE",n),h("uintLE("+n+")",n).map(function(t){return t.readUIntLE(0,n)})}function g(n){return p("intBE",n),h("intBE("+n+")",n).map(function(t){return t.readIntBE(0,n)})}function m(n){return p("intLE",n),h("intLE("+n+")",n).map(function(t){return t.readIntLE(0,n)})}function y(n){return n instanceof e}function E(n){return "[object Array]"==={}.toString.call(n)}function w(n){return c()&&Buffer.isBuffer(n)}function b(n,t){return {status:!0,index:n,value:t,furthest:-1,expected:[]}}function x(n,t){return E(t)||(t=[t]),{status:!1,index:-1,value:null,furthest:n,expected:t}}function B(n,t){if(!t)return n;if(n.furthest>t.furthest)return n;var r=n.furthest===t.furthest?function(n,t){if(function(){if(void 0!==e._supportsSet)return e._supportsSet;var n="undefined"!=typeof Set;return e._supportsSet=n,n}()&&Array.from){for(var r=new Set(n),u=0;u<t.length;u++)r.add(t[u]);var o=Array.from(r);return o.sort(),o}for(var i={},a=0;a<n.length;a++)i[n[a]]=!0;for(var f=0;f<t.length;f++)i[t[f]]=!0;var c=[];for(var s in i)({}).hasOwnProperty.call(i,s)&&c.push(s);return c.sort(),c}(n.expected,t.expected):t.expected;return {status:n.status,index:n.index,value:n.value,furthest:t.furthest,expected:r}}var j={};function S(n,t){if(w(n))return {offset:t,line:-1,column:-1};n in j||(j[n]={});for(var r=j[n],e=0,u=0,o=0,i=t;i>=0;){if(i in r){e=r[i].line,0===o&&(o=r[i].lineStart);break}("\n"===n.charAt(i)||"\r"===n.charAt(i)&&"\n"!==n.charAt(i+1))&&(u++,0===o&&(o=i+1)),i--;}var a=e+u,f=t-o;return r[t]={line:a,lineStart:o},{offset:t,line:a+1,column:f+1}}function _(n){if(!y(n))throw new Error("not a parser: "+n)}function L(n,t){return "string"==typeof n?n.charAt(t):n[t]}function O(n){if("number"!=typeof n)throw new Error("not a number: "+n)}function k(n){if("function"!=typeof n)throw new Error("not a function: "+n)}function P(n){if("string"!=typeof n)throw new Error("not a string: "+n)}var q=2,A=3,I=8,F=5*I,M=4*I,z=" ";function R(n,t){return new Array(t+1).join(n)}function U(n,t,r){var e=t-n.length;return e<=0?n:R(r,e)+n}function W(n,t,r,e){return {from:n-t>0?n-t:0,to:n+r>e?e:n+r}}function D(n,t){var r,e,u,o,f,c=t.index,s=c.offset,l=1;if(s===n.length)return "Got the end of the input";if(w(n)){var h=s-s%I,p=s-h,d=W(h,F,M+I,n.length),v=a(function(n){return a(function(n){return U(n.toString(16),2,"0")},n)},function(n,t){var r=n.length,e=[],u=0;if(r<=t)return [n.slice()];for(var o=0;o<r;o++)e[u]||e.push([]),e[u].push(n[o]),(o+1)%t==0&&u++;return e}(n.slice(d.from,d.to).toJSON().data,I));o=function(n){return 0===n.from&&1===n.to?{from:n.from,to:n.to}:{from:n.from/I,to:Math.floor(n.to/I)}}(d),e=h/I,r=3*p,p>=4&&(r+=1),l=2,u=a(function(n){return n.length<=4?n.join(" "):n.slice(0,4).join(" ")+" "+n.slice(4).join(" ")},v),(f=(8*(o.to>0?o.to-1:o.to)).toString(16).length)<2&&(f=2);}else {var g=n.split(/\r\n|[\n\r\u2028\u2029]/);r=c.column-1,e=c.line-1,o=W(e,q,A,g.length),u=g.slice(o.from,o.to),f=o.to.toString().length;}var m=e-o.from;return w(n)&&(f=(8*(o.to>0?o.to-1:o.to)).toString(16).length)<2&&(f=2),i(function(t,e,u){var i,a=u===m,c=a?"> ":z;return i=w(n)?U((8*(o.from+u)).toString(16),f,"0"):U((o.from+u+1).toString(),f," "),[].concat(t,[c+i+" | "+e],a?[z+R(" ",f)+" | "+U("",r," ")+R("^",l)]:[])},[],u).join("\n")}function N(n,t){return ["\n","-- PARSING FAILED "+R("-",50),"\n\n",D(n,t),"\n\n",(r=t.expected,1===r.length?"Expected:\n\n"+r[0]:"Expected one of the following: \n\n"+r.join(", ")),"\n"].join("");var r;}function G(n){return void 0!==n.flags?n.flags:[n.global?"g":"",n.ignoreCase?"i":"",n.multiline?"m":"",n.unicode?"u":"",n.sticky?"y":""].join("")}function C(){for(var n=[].slice.call(arguments),t=n.length,r=0;r<t;r+=1)_(n[r]);return e(function(r,e){for(var u,o=new Array(t),i=0;i<t;i+=1){if(!(u=B(n[i]._(r,e),u)).status)return u;o[i]=u.value,e=u.index;}return B(b(e,o),u)})}function J(){var n=[].slice.call(arguments);if(0===n.length)throw new Error("seqMap needs at least one argument");var t=n.pop();return k(t),C.apply(null,n).map(function(n){return t.apply(null,n)})}function T(){var n=[].slice.call(arguments),t=n.length;if(0===t)return Y("zero alternates");for(var r=0;r<t;r+=1)_(n[r]);return e(function(t,r){for(var e,u=0;u<n.length;u+=1)if((e=B(n[u]._(t,r),e)).status)return e;return e})}function V(n,t){return H(n,t).or(X([]))}function H(n,t){return _(n),_(t),J(n,t.then(n).many(),function(n,t){return [n].concat(t)})}function K(n){P(n);var t="'"+n+"'";return e(function(r,e){var u=e+n.length,o=r.slice(e,u);return o===n?b(u,o):x(e,t)})}function Q(n,t){!function(n){if(!(n instanceof RegExp))throw new Error("not a regexp: "+n);for(var t=G(n),r=0;r<t.length;r++){var e=t.charAt(r);if("i"!==e&&"m"!==e&&"u"!==e&&"s"!==e)throw new Error('unsupported regexp flag "'+e+'": '+n)}}(n),arguments.length>=2?O(t):t=0;var r=function(n){return RegExp("^(?:"+n.source+")",G(n))}(n),u=""+n;return e(function(n,e){var o=r.exec(n.slice(e));if(o){if(0<=t&&t<=o.length){var i=o[0],a=o[t];return b(e+i.length,a)}return x(e,"valid match group (0 to "+o.length+") in "+u)}return x(e,u)})}function X(n){return e(function(t,r){return b(r,n)})}function Y(n){return e(function(t,r){return x(r,n)})}function Z(n){if(y(n))return e(function(t,r){var e=n._(t,r);return e.index=r,e.value="",e});if("string"==typeof n)return Z(K(n));if(n instanceof RegExp)return Z(Q(n));throw new Error("not a string, regexp, or parser: "+n)}function $(n){return _(n),e(function(t,r){var e=n._(t,r),u=t.slice(r,e.index);return e.status?x(r,'not "'+u+'"'):b(r,null)})}function nn(n){return k(n),e(function(t,r){var e=L(t,r);return r<t.length&&n(e)?b(r+1,e):x(r,"a character/byte matching "+n)})}function tn(n,t){arguments.length<2&&(t=n,n=void 0);var r=e(function(n,e){return r._=t()._,r._(n,e)});return n?r.desc(n):r}function rn(){return Y("fantasy-land/empty")}u.parse=function(n){if("string"!=typeof n&&!w(n))throw new Error(".parse must be called with a string or Buffer as its argument");var t,r=this.skip(an)._(n,0);return t=r.status?{status:!0,value:r.value}:{status:!1,index:S(n,r.furthest),expected:r.expected},delete j[n],t},u.tryParse=function(n){var t=this.parse(n);if(t.status)return t.value;var r=N(n,t),e=new Error(r);throw e.type="ParsimmonError",e.result=t,e},u.assert=function(n,t){return this.chain(function(r){return n(r)?X(r):Y(t)})},u.or=function(n){return T(this,n)},u.trim=function(n){return this.wrap(n,n)},u.wrap=function(n,t){return J(n,this,t,function(n,t){return t})},u.thru=function(n){return n(this)},u.then=function(n){return _(n),C(this,n).map(function(n){return n[1]})},u.many=function(){var n=this;return e(function(t,r){for(var e=[],u=void 0;;){if(!(u=B(n._(t,r),u)).status)return B(b(r,e),u);if(r===u.index)throw new Error("infinite loop detected in .many() parser --- calling .many() on a parser which can accept zero characters is usually the cause");r=u.index,e.push(u.value);}})},u.tieWith=function(n){return P(n),this.map(function(t){if(function(n){if(!E(n))throw new Error("not an array: "+n)}(t),t.length){P(t[0]);for(var r=t[0],e=1;e<t.length;e++)P(t[e]),r+=n+t[e];return r}return ""})},u.tie=function(){return this.tieWith("")},u.times=function(n,t){var r=this;return arguments.length<2&&(t=n),O(n),O(t),e(function(e,u){for(var o=[],i=void 0,a=void 0,f=0;f<n;f+=1){if(a=B(i=r._(e,u),a),!i.status)return a;u=i.index,o.push(i.value);}for(;f<t&&(a=B(i=r._(e,u),a),i.status);f+=1)u=i.index,o.push(i.value);return B(b(u,o),a)})},u.result=function(n){return this.map(function(){return n})},u.atMost=function(n){return this.times(0,n)},u.atLeast=function(n){return J(this.times(n),this.many(),function(n,t){return n.concat(t)})},u.map=function(n){k(n);var t=this;return e(function(r,e){var u=t._(r,e);return u.status?B(b(u.index,n(u.value)),u):u})},u.contramap=function(n){k(n);var t=this;return e(function(r,e){var u=t.parse(n(r.slice(e)));return u.status?b(e+r.length,u.value):u})},u.promap=function(n,t){return k(n),k(t),this.contramap(n).map(t)},u.skip=function(n){return C(this,n).map(function(n){return n[0]})},u.mark=function(){return J(en,this,en,function(n,t,r){return {start:n,value:t,end:r}})},u.node=function(n){return J(en,this,en,function(t,r,e){return {name:n,value:r,start:t,end:e}})},u.sepBy=function(n){return V(this,n)},u.sepBy1=function(n){return H(this,n)},u.lookahead=function(n){return this.skip(Z(n))},u.notFollowedBy=function(n){return this.skip($(n))},u.desc=function(n){E(n)||(n=[n]);var t=this;return e(function(r,e){var u=t._(r,e);return u.status||(u.expected=n),u})},u.fallback=function(n){return this.or(X(n))},u.ap=function(n){return J(n,this,function(n,t){return n(t)})},u.chain=function(n){var t=this;return e(function(r,e){var u=t._(r,e);return u.status?B(n(u.value)._(r,u.index),u):u})},u.concat=u.or,u.empty=rn,u.of=X,u["fantasy-land/ap"]=u.ap,u["fantasy-land/chain"]=u.chain,u["fantasy-land/concat"]=u.concat,u["fantasy-land/empty"]=u.empty,u["fantasy-land/of"]=u.of,u["fantasy-land/map"]=u.map;var en=e(function(n,t){return b(t,S(n,t))}),un=e(function(n,t){return t>=n.length?x(t,"any character/byte"):b(t+1,L(n,t))}),on=e(function(n,t){return b(n.length,n.slice(t))}),an=e(function(n,t){return t<n.length?x(t,"EOF"):b(t,null)}),fn=Q(/[0-9]/).desc("a digit"),cn=Q(/[0-9]*/).desc("optional digits"),sn=Q(/[a-z]/i).desc("a letter"),ln=Q(/[a-z]*/i).desc("optional letters"),hn=Q(/\s*/).desc("optional whitespace"),pn=Q(/\s+/).desc("whitespace"),dn=K("\r"),vn=K("\n"),gn=K("\r\n"),mn=T(gn,vn,dn).desc("newline"),yn=T(mn,an);e.all=on,e.alt=T,e.any=un,e.cr=dn,e.createLanguage=function(n){var t={};for(var r in n)({}).hasOwnProperty.call(n,r)&&function(r){t[r]=tn(function(){return n[r](t)});}(r);return t},e.crlf=gn,e.custom=function(n){return e(n(b,x))},e.digit=fn,e.digits=cn,e.empty=rn,e.end=yn,e.eof=an,e.fail=Y,e.formatError=N,e.index=en,e.isParser=y,e.lazy=tn,e.letter=sn,e.letters=ln,e.lf=vn,e.lookahead=Z,e.makeFailure=x,e.makeSuccess=b,e.newline=mn,e.noneOf=function(n){return nn(function(t){return n.indexOf(t)<0}).desc("none of '"+n+"'")},e.notFollowedBy=$,e.of=X,e.oneOf=function(n){for(var t=n.split(""),r=0;r<t.length;r++)t[r]="'"+t[r]+"'";return nn(function(t){return n.indexOf(t)>=0}).desc(t)},e.optWhitespace=hn,e.Parser=e,e.range=function(n,t){return nn(function(r){return n<=r&&r<=t}).desc(n+"-"+t)},e.regex=Q,e.regexp=Q,e.sepBy=V,e.sepBy1=H,e.seq=C,e.seqMap=J,e.seqObj=function(){for(var n,t={},r=0,u=(n=arguments,Array.prototype.slice.call(n)),o=u.length,i=0;i<o;i+=1){var a=u[i];if(!y(a)){if(E(a)&&2===a.length&&"string"==typeof a[0]&&y(a[1])){var f=a[0];if(Object.prototype.hasOwnProperty.call(t,f))throw new Error("seqObj: duplicate key "+f);t[f]=!0,r++;continue}throw new Error("seqObj arguments must be parsers or [string, parser] array pairs.")}}if(0===r)throw new Error("seqObj expects at least one named parser, found zero");return e(function(n,t){for(var r,e={},i=0;i<o;i+=1){var a,f;if(E(u[i])?(a=u[i][0],f=u[i][1]):(a=null,f=u[i]),!(r=B(f._(n,t),r)).status)return r;a&&(e[a]=r.value),t=r.index;}return B(b(t,e),r)})},e.string=K,e.succeed=X,e.takeWhile=function(n){return k(n),e(function(t,r){for(var e=r;e<t.length&&n(L(t,e));)e++;return b(e,t.slice(r,e))})},e.test=nn,e.whitespace=pn,e["fantasy-land/empty"]=rn,e["fantasy-land/of"]=X,e.Binary={bitSeq:l,bitSeqObj:function(n){s();var t={},r=0,e=a(function(n){if(E(n)){var e=n;if(2!==e.length)throw new Error("["+e.join(", ")+"] should be length 2, got length "+e.length);if(P(e[0]),O(e[1]),Object.prototype.hasOwnProperty.call(t,e[0]))throw new Error("duplicate key in bitSeqObj: "+e[0]);return t[e[0]]=!0,r++,e}return O(n),[null,n]},n);if(r<1)throw new Error("bitSeqObj expects at least one named pair, got ["+n.join(", ")+"]");var u=a(function(n){return n[0]},e);return l(a(function(n){return n[1]},e)).map(function(n){return i(function(n,t){return null!==t[0]&&(n[t[0]]=t[1]),n},{},a(function(t,r){return [t,n[r]]},u))})},byte:function(n){if(s(),O(n),n>255)throw new Error("Value specified to byte constructor ("+n+"=0x"+n.toString(16)+") is larger in value than a single byte.");var t=(n>15?"0x":"0x0")+n.toString(16);return e(function(r,e){var u=L(r,e);return u===n?b(e+1,u):x(e,t)})},buffer:function(n){return h("buffer",n).map(function(n){return Buffer.from(n)})},encodedString:function(n,t){return h("string",t).map(function(t){return t.toString(n)})},uintBE:d,uint8BE:d(1),uint16BE:d(2),uint32BE:d(4),uintLE:v,uint8LE:v(1),uint16LE:v(2),uint32LE:v(4),intBE:g,int8BE:g(1),int16BE:g(2),int32BE:g(4),intLE:m,int8LE:m(1),int16LE:m(2),int32LE:m(4),floatBE:h("floatBE",4).map(function(n){return n.readFloatBE(0)}),floatLE:h("floatLE",4).map(function(n){return n.readFloatLE(0)}),doubleBE:h("doubleBE",8).map(function(n){return n.readDoubleBE(0)}),doubleLE:h("doubleLE",8).map(function(n){return n.readDoubleLE(0)})},n.exports=e;}])}); +} (parsimmon_umd_min, parsimmon_umd_min.exports)); + +var parsimmon_umd_minExports = parsimmon_umd_min.exports; + +var emojiRegex = () => { + // https://mths.be/emoji + return /[#*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\u26D3\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]|\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])?|[\uDFC3\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-\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]|\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(?:[\uDC08\uDC26](?:\u200D\u2B1B)?|[\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-\uDEB6](?:\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-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC15(?:\u200D\uD83E\uDDBA)?|\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-\uDDB3\uDDBC\uDDBD])|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD])|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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?)?)|\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])?|\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-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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; +}; + +var removeMarkdown = function(md, options) { + options = options || {}; + options.listUnicodeChar = options.hasOwnProperty('listUnicodeChar') ? options.listUnicodeChar : false; + options.stripListLeaders = options.hasOwnProperty('stripListLeaders') ? options.stripListLeaders : true; + options.gfm = options.hasOwnProperty('gfm') ? options.gfm : true; + options.useImgAltText = options.hasOwnProperty('useImgAltText') ? options.useImgAltText : true; + options.abbr = options.hasOwnProperty('abbr') ? options.abbr : false; + options.replaceLinksWithURL = options.hasOwnProperty('replaceLinksWithURL') ? options.replaceLinksWithURL : false; + options.htmlTagsToSkip = options.hasOwnProperty('htmlTagsToSkip') ? options.htmlTagsToSkip : []; + options.throwError = options.hasOwnProperty('throwError') ? options.throwError : false; + + var output = md || ''; + + // Remove horizontal rules (stripListHeaders conflict with this rule, which is why it has been moved to the top) + output = output.replace(/^(-\s*?|\*\s*?|_\s*?){3,}\s*/gm, ''); + + try { + if (options.stripListLeaders) { + if (options.listUnicodeChar) + output = output.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm, options.listUnicodeChar + ' $1'); + else + output = output.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm, '$1'); + } + if (options.gfm) { + output = output + // Header + .replace(/\n={2,}/g, '\n') + // Fenced codeblocks + .replace(/~{3}.*\n/g, '') + // Strikethrough + .replace(/~~/g, '') + // Fenced codeblocks + .replace(/`{3}.*\n/g, ''); + } + if (options.abbr) { + // Remove abbreviations + output = output.replace(/\*\[.*\]:.*\n/, ''); + } + output = output + // Remove HTML tags + .replace(/<[^>]*>/g, ''); + + var htmlReplaceRegex = new RegExp('<[^>]*>', 'g'); + if (options.htmlTagsToSkip.length > 0) { + // Using negative lookahead. Eg. (?!sup|sub) will not match 'sup' and 'sub' tags. + var joinedHtmlTagsToSkip = '(?!' + options.htmlTagsToSkip.join("|") + ')'; + + // Adding the lookahead literal with the default regex for html. Eg./<(?!sup|sub)[^>]*>/ig + htmlReplaceRegex = new RegExp( + '<' + + joinedHtmlTagsToSkip + + '[^>]*>', + 'ig' + ); + } + + output = output + // Remove HTML tags + .replace(htmlReplaceRegex, '') + // Remove setext-style headers + .replace(/^[=\-]{2,}\s*$/g, '') + // Remove footnotes? + .replace(/\[\^.+?\](\: .*?$)?/g, '') + .replace(/\s{0,2}\[.*?\]: .*?$/g, '') + // Remove images + .replace(/\!\[(.*?)\][\[\(].*?[\]\)]/g, options.useImgAltText ? '$1' : '') + // Remove inline links + .replace(/\[([^\]]*?)\][\[\(].*?[\]\)]/g, options.replaceLinksWithURL ? '$2' : '$1') + // Remove blockquotes + .replace(/^(\n)?\s{0,3}>\s?/gm, '$1') + // .replace(/(^|\n)\s{0,3}>\s?/g, '\n\n') + // Remove reference-style links? + .replace(/^\s{1,2}\[(.*?)\]: (\S+)( ".*?")?\s*$/g, '') + // Remove atx-style headers + .replace(/^(\n)?\s{0,}#{1,6}\s*( (.+))? +#+$|^(\n)?\s{0,}#{1,6}\s*( (.+))?$/gm, '$1$3$4$6') + // Remove * emphasis + .replace(/([\*]+)(\S)(.*?\S)??\1/g, '$2$3') + // Remove _ emphasis. Unlike *, _ emphasis gets rendered only if + // 1. Either there is a whitespace character before opening _ and after closing _. + // 2. Or _ is at the start/end of the string. + .replace(/(^|\W)([_]+)(\S)(.*?\S)??\2($|\W)/g, '$1$3$4$5') + // Remove code blocks + .replace(/(`{3,})(.*?)\1/gm, '$2') + // Remove inline code + .replace(/`(.+?)`/g, '$1') + // // Replace two or more newlines with exactly two? Not entirely sure this belongs here... + // .replace(/\n{2,}/g, '\n\n') + // // Remove newlines in a paragraph + // .replace(/(\S+)\n\s*(\S+)/g, '$1 $2') + // Replace strike through + .replace(/~(.*?)~/g, '$1'); + } catch(e) { + if (options.throwError) throw e; + + console.error("remove-markdown encountered error: %s", e); + return md; + } + return output; +}; + +var removeMd = /*@__PURE__*/getDefaultExportFromCjs(removeMarkdown); + +/** Normalize a duration to all of the proper units. */ +function normalizeDuration(dur) { + if (dur === undefined || dur === null) + return dur; + return dur.shiftToAll().normalize(); +} +/** Strip the time components of a date time object. */ +function stripTime(dt) { + if (dt === null || dt === undefined) + return dt; + return DateTime.fromObject({ + year: dt.year, + month: dt.month, + day: dt.day, + }); +} +/** Get the folder containing the given path (i.e., like computing 'path/..'). */ +function getParentFolder(path) { + return path.split("/").slice(0, -1).join("/"); +} +/** Get the "title" for a file, by stripping other parts of the path as well as the extension. */ +function getFileTitle(path) { + if (path.includes("/")) + path = path.substring(path.lastIndexOf("/") + 1); + if (path.endsWith(".md")) + path = path.substring(0, path.length - 3); + return path; +} +/** Get the extension of a file from the file path. */ +function getExtension(path) { + if (!path.includes(".")) + return ""; + return path.substring(path.lastIndexOf(".") + 1); +} +/** Parse all subtags out of the given tag. I.e., #hello/i/am would yield [#hello/i/am, #hello/i, #hello]. */ +function extractSubtags(tag) { + let result = [tag]; + while (tag.includes("/")) { + tag = tag.substring(0, tag.lastIndexOf("/")); + result.push(tag); + } + return result; +} +/** Try calling the given function; on failure, return the error message. */ +function tryOrPropagate(func) { + try { + return func(); + } + catch (error) { + return Result.failure("" + error + "\n\n" + error.stack); + } +} +/** Try asynchronously calling the given function; on failure, return the error message. */ +async function asyncTryOrPropagate(func) { + try { + return await func(); + } + catch (error) { + return Result.failure("" + error + "\n\n" + error.stack); + } +} +/** + * Escape regex characters in a string. + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions. + */ +function escapeRegex(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} +/** A parsimmon parser which canonicalizes variable names while properly respecting emoji. */ +const VAR_NAME_CANONICALIZER = parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regex(new RegExp(emojiRegex(), "")), parsimmon_umd_minExports.regex(/[0-9\p{Letter}_-]+/u).map(str => str.toLocaleLowerCase()), parsimmon_umd_minExports.whitespace.map(_ => "-"), parsimmon_umd_minExports.any.map(_ => "")) + .many() + .map(result => result.join("")); +/** Convert an arbitrary variable name into something JS/query friendly. */ +function canonicalizeVarName(name) { + return VAR_NAME_CANONICALIZER.tryParse(name); +} +const HEADER_CANONICALIZER = parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regex(new RegExp(emojiRegex(), "")), parsimmon_umd_minExports.regex(/[0-9\p{Letter}_-]+/u), parsimmon_umd_minExports.whitespace.map(_ => " "), parsimmon_umd_minExports.any.map(_ => " ")) + .many() + .map(result => { + return result.join("").split(/\s+/).join(" ").trim(); +}); +/** + * Normalizes the text in a header to be something that is actually linkable to. This mimics + * how Obsidian does it's normalization, collapsing repeated spaces and stripping out control characters. + */ +function normalizeHeaderForLink(header) { + return HEADER_CANONICALIZER.tryParse(header); +} +/** Render a DateTime in a minimal format to save space. */ +function renderMinimalDate(time, settings, locale) { + // If there is no relevant time specified, fall back to just rendering the date. + if (time.second == 0 && time.minute == 0 && time.hour == 0) { + return time.toLocal().toFormat(settings.defaultDateFormat, { locale }); + } + return time.toLocal().toFormat(settings.defaultDateTimeFormat, { locale }); +} +/** Render a duration in a minimal format to save space. */ +function renderMinimalDuration(dur) { + dur = normalizeDuration(dur); + // toHuman outputs zero quantities e.g. "0 seconds" + dur = Duration.fromObject(Object.fromEntries(Object.entries(dur.toObject()).filter(([, quantity]) => quantity != 0))); + return dur.toHuman(); +} +/** Determine if two sets are equal in contents. */ +function setsEqual(first, second) { + if (first.size != second.size) + return false; + for (let elem of first) + if (!second.has(elem)) + return false; + return true; +} +/** Normalize a markdown string. Removes all markdown tags and obsidian links. */ +function normalizeMarkdown(str) { + // [[test]] -> test + let interim = str.replace(/\[\[([^\|]*?)\]\]/g, "$1"); + // [[test|test]] -> test + interim = interim.replace(/\[\[.*?\|(.*?)\]\]/, "$1"); + // remove markdown tags + interim = removeMd(interim); + return interim; +} + +var Values; +(function (Values) { + /** Convert an arbitrary value into a reasonable, Markdown-friendly string if possible. */ + function toString(field, setting = DEFAULT_QUERY_SETTINGS, recursive = false) { + let wrapped = wrapValue(field); + if (!wrapped) + return setting.renderNullAs; + switch (wrapped.type) { + case "null": + return setting.renderNullAs; + case "string": + return wrapped.value; + case "number": + case "boolean": + return "" + wrapped.value; + case "html": + return wrapped.value.outerHTML; + case "widget": + return wrapped.value.markdown(); + case "link": + return wrapped.value.markdown(); + case "function": + return "<function>"; + case "array": + let result = ""; + if (recursive) + result += "["; + result += wrapped.value.map(f => toString(f, setting, true)).join(", "); + if (recursive) + result += "]"; + return result; + case "object": + return ("{ " + + Object.entries(wrapped.value) + .map(e => e[0] + ": " + toString(e[1], setting, true)) + .join(", ") + + " }"); + case "date": + if (wrapped.value.second == 0 && wrapped.value.hour == 0 && wrapped.value.minute == 0) { + return wrapped.value.toFormat(setting.defaultDateFormat); + } + return wrapped.value.toFormat(setting.defaultDateTimeFormat); + case "duration": + return renderMinimalDuration(wrapped.value); + } + } + Values.toString = toString; + /** Wrap a literal value so you can switch on it easily. */ + function wrapValue(val) { + if (isNull(val)) + return { type: "null", value: val }; + else if (isNumber(val)) + return { type: "number", value: val }; + else if (isString(val)) + return { type: "string", value: val }; + else if (isBoolean(val)) + return { type: "boolean", value: val }; + else if (isDuration(val)) + return { type: "duration", value: val }; + else if (isDate(val)) + return { type: "date", value: val }; + else if (isWidget(val)) + return { type: "widget", value: val }; + else if (isArray(val)) + return { type: "array", value: val }; + else if (isLink(val)) + return { type: "link", value: val }; + else if (isFunction(val)) + return { type: "function", value: val }; + else if (isHtml(val)) + return { type: "html", value: val }; + else if (isObject(val)) + return { type: "object", value: val }; + else + return undefined; + } + Values.wrapValue = wrapValue; + /** Recursively map complex objects at the leaves. */ + function mapLeaves(val, func) { + if (isObject(val)) { + let result = {}; + for (let [key, value] of Object.entries(val)) + result[key] = mapLeaves(value, func); + return result; + } + else if (isArray(val)) { + let result = []; + for (let value of val) + result.push(mapLeaves(value, func)); + return result; + } + else { + return func(val); + } + } + Values.mapLeaves = mapLeaves; + /** Compare two arbitrary JavaScript values. Produces a total ordering over ANY possible dataview value. */ + function compareValue(val1, val2, linkNormalizer) { + // Handle undefined/nulls first. + if (val1 === undefined) + val1 = null; + if (val2 === undefined) + val2 = null; + if (val1 === null && val2 === null) + return 0; + else if (val1 === null) + return -1; + else if (val2 === null) + return 1; + // A non-null value now which we can wrap & compare on. + let wrap1 = wrapValue(val1); + let wrap2 = wrapValue(val2); + if (wrap1 === undefined && wrap2 === undefined) + return 0; + else if (wrap1 === undefined) + return -1; + else if (wrap2 === undefined) + return 1; + // Short-circuit on different types or on reference equality. + if (wrap1.type != wrap2.type) + return wrap1.type.localeCompare(wrap2.type); + if (wrap1.value === wrap2.value) + return 0; + switch (wrap1.type) { + case "string": + return wrap1.value.localeCompare(wrap2.value); + case "number": + if (wrap1.value < wrap2.value) + return -1; + else if (wrap1.value == wrap2.value) + return 0; + return 1; + case "null": + return 0; + case "boolean": + if (wrap1.value == wrap2.value) + return 0; + else + return wrap1.value ? 1 : -1; + case "link": + let link1 = wrap1.value; + let link2 = wrap2.value; + let normalize = linkNormalizer ?? ((x) => x); + // We can't compare by file name or display, since that would break link equality. Compare by path. + let pathCompare = normalize(link1.path).localeCompare(normalize(link2.path)); + if (pathCompare != 0) + return pathCompare; + // Then compare by type. + let typeCompare = link1.type.localeCompare(link2.type); + if (typeCompare != 0) + return typeCompare; + // Then compare by subpath existence. + if (link1.subpath && !link2.subpath) + return 1; + if (!link1.subpath && link2.subpath) + return -1; + if (!link1.subpath && !link2.subpath) + return 0; + // Since both have a subpath, compare by subpath. + return (link1.subpath ?? "").localeCompare(link2.subpath ?? ""); + case "date": + return wrap1.value < wrap2.value + ? -1 + : wrap1.value.equals(wrap2.value) + ? 0 + : 1; + case "duration": + return wrap1.value < wrap2.value + ? -1 + : wrap1.value.equals(wrap2.value) + ? 0 + : 1; + case "array": + let f1 = wrap1.value; + let f2 = wrap2.value; + for (let index = 0; index < Math.min(f1.length, f2.length); index++) { + let comp = compareValue(f1[index], f2[index]); + if (comp != 0) + return comp; + } + return f1.length - f2.length; + case "object": + let o1 = wrap1.value; + let o2 = wrap2.value; + let k1 = Array.from(Object.keys(o1)); + let k2 = Array.from(Object.keys(o2)); + k1.sort(); + k2.sort(); + let keyCompare = compareValue(k1, k2); + if (keyCompare != 0) + return keyCompare; + for (let key of k1) { + let comp = compareValue(o1[key], o2[key]); + if (comp != 0) + return comp; + } + return 0; + case "widget": + case "html": + case "function": + return 0; + } + } + Values.compareValue = compareValue; + /** Find the corresponding Dataview type for an arbitrary value. */ + function typeOf(val) { + return wrapValue(val)?.type; + } + Values.typeOf = typeOf; + /** Determine if the given value is "truthy" (i.e., is non-null and has data in it). */ + function isTruthy(field) { + let wrapped = wrapValue(field); + if (!wrapped) + return false; + switch (wrapped.type) { + case "number": + return wrapped.value != 0; + case "string": + return wrapped.value.length > 0; + case "boolean": + return wrapped.value; + case "link": + return !!wrapped.value.path; + case "date": + return wrapped.value.toMillis() != 0; + case "duration": + return wrapped.value.as("seconds") != 0; + case "object": + return Object.keys(wrapped.value).length > 0; + case "array": + return wrapped.value.length > 0; + case "null": + return false; + case "html": + case "widget": + case "function": + return true; + } + } + Values.isTruthy = isTruthy; + /** Deep copy a field. */ + function deepCopy(field) { + if (field === null || field === undefined) + return field; + if (Values.isArray(field)) { + return [].concat(field.map(v => deepCopy(v))); + } + else if (Values.isObject(field)) { + let result = {}; + for (let [key, value] of Object.entries(field)) + result[key] = deepCopy(value); + return result; + } + else { + return field; + } + } + Values.deepCopy = deepCopy; + function isString(val) { + return typeof val == "string"; + } + Values.isString = isString; + function isNumber(val) { + return typeof val == "number"; + } + Values.isNumber = isNumber; + function isDate(val) { + return val instanceof DateTime; + } + Values.isDate = isDate; + function isDuration(val) { + return val instanceof Duration; + } + Values.isDuration = isDuration; + function isNull(val) { + return val === null || val === undefined; + } + Values.isNull = isNull; + function isArray(val) { + return Array.isArray(val); + } + Values.isArray = isArray; + function isBoolean(val) { + return typeof val === "boolean"; + } + Values.isBoolean = isBoolean; + function isLink(val) { + return val instanceof Link; + } + Values.isLink = isLink; + function isWidget(val) { + return val instanceof Widget; + } + Values.isWidget = isWidget; + function isHtml(val) { + if (typeof HTMLElement !== "undefined") { + return val instanceof HTMLElement; + } + else { + return false; + } + } + Values.isHtml = isHtml; + /** Checks if the given value is an object (and not any other dataview-recognized object-like type). */ + function isObject(val) { + return (typeof val == "object" && + !isHtml(val) && + !isWidget(val) && + !isArray(val) && + !isDuration(val) && + !isDate(val) && + !isLink(val) && + val !== undefined && + !isNull(val)); + } + Values.isObject = isObject; + function isFunction(val) { + return typeof val == "function"; + } + Values.isFunction = isFunction; +})(Values || (Values = {})); +/////////////// +// Groupings // +/////////////// +var Groupings; +(function (Groupings) { + /** Determines if the given group entry is a standalone value, or a grouping of sub-entries. */ + function isElementGroup(entry) { + return Values.isObject(entry) && Object.keys(entry).length == 2 && "key" in entry && "rows" in entry; + } + Groupings.isElementGroup = isElementGroup; + /** Determines if the given array is a grouping array. */ + function isGrouping(entry) { + for (let element of entry) + if (!isElementGroup(element)) + return false; + return true; + } + Groupings.isGrouping = isGrouping; + /** Count the total number of elements in a recursive grouping. */ + function count(elements) { + if (isGrouping(elements)) { + let result = 0; + for (let subgroup of elements) + result += count(subgroup.rows); + return result; + } + else { + return elements.length; + } + } + Groupings.count = count; +})(Groupings || (Groupings = {})); +////////// +// LINK // +////////// +/** The Obsidian 'link', used for uniquely describing a file, header, or block. */ +class Link { + /** The file path this link points to. */ + path; + /** The display name associated with the link. */ + display; + /** The block ID or header this link points to within a file, if relevant. */ + subpath; + /** Is this link an embedded link (!)? */ + embed; + /** The type of this link, which determines what 'subpath' refers to, if anything. */ + type; + /** Create a link to a specific file. */ + static file(path, embed = false, display) { + return new Link({ + path, + embed, + display, + subpath: undefined, + type: "file", + }); + } + static infer(linkpath, embed = false, display) { + if (linkpath.includes("#^")) { + let split = linkpath.split("#^"); + return Link.block(split[0], split[1], embed, display); + } + else if (linkpath.includes("#")) { + let split = linkpath.split("#"); + return Link.header(split[0], split[1], embed, display); + } + else + return Link.file(linkpath, embed, display); + } + /** Create a link to a specific file and header in that file. */ + static header(path, header, embed, display) { + // Headers need to be normalized to alpha-numeric & with extra spacing removed. + return new Link({ + path, + embed, + display, + subpath: normalizeHeaderForLink(header), + type: "header", + }); + } + /** Create a link to a specific file and block in that file. */ + static block(path, blockId, embed, display) { + return new Link({ + path, + embed, + display, + subpath: blockId, + type: "block", + }); + } + static fromObject(object) { + return new Link(object); + } + constructor(fields) { + Object.assign(this, fields); + } + /** Checks for link equality (i.e., that the links are pointing to the same exact location). */ + equals(other) { + if (other == undefined || other == null) + return false; + return this.path == other.path && this.type == other.type && this.subpath == other.subpath; + } + /** Convert this link to it's markdown representation. */ + toString() { + return this.markdown(); + } + /** Convert this link to a raw object which is serialization-friendly. */ + toObject() { + return { path: this.path, type: this.type, subpath: this.subpath, display: this.display, embed: this.embed }; + } + /** Update this link with a new path. */ + //@ts-ignore; error appeared after updating Obsidian to 0.15.4; it also updated other packages but didn't say which + withPath(path) { + return new Link(Object.assign({}, this, { path })); + } + /** Return a new link which points to the same location but with a new display value. */ + withDisplay(display) { + return new Link(Object.assign({}, this, { display })); + } + /** Convert a file link into a link to a specific header. */ + withHeader(header) { + return Link.header(this.path, header, this.embed, this.display); + } + /** Convert any link into a link to its file. */ + toFile() { + return Link.file(this.path, this.embed, this.display); + } + /** Convert this link into an embedded link. */ + toEmbed() { + if (this.embed) { + return this; + } + else { + let link = new Link(this); + link.embed = true; + return link; + } + } + /** Convert this link into a non-embedded link. */ + fromEmbed() { + if (!this.embed) { + return this; + } + else { + let link = new Link(this); + link.embed = false; + return link; + } + } + /** Convert this link to markdown so it can be rendered. */ + markdown() { + let result = (this.embed ? "!" : "") + "[[" + this.obsidianLink(); + if (this.display) { + result += "|" + this.display; + } + else { + result += "|" + getFileTitle(this.path); + if (this.type == "header" || this.type == "block") + result += " > " + this.subpath; + } + result += "]]"; + return result; + } + /** Convert the inner part of the link to something that Obsidian can open / understand. */ + obsidianLink() { + const escaped = this.path.replaceAll("|", "\\|"); + if (this.type == "header") + return escaped + "#" + this.subpath?.replaceAll("|", "\\|"); + if (this.type == "block") + return escaped + "#^" + this.subpath?.replaceAll("|", "\\|"); + else + return escaped; + } + /** The stripped name of the file this link points to. */ + fileName() { + return getFileTitle(this.path).replace(".md", ""); + } +} +///////////////// +// WIDGET BASE // +///////////////// +/** + * A trivial base class which just defines the '$widget' identifier type. Subtypes of + * widget are responsible for adding whatever metadata is relevant. If you want your widget + * to have rendering functionality (which you probably do), you should extend `RenderWidget`. + */ +class Widget { + $widget; + constructor($widget) { + this.$widget = $widget; + } +} +/** A trivial widget which renders a (key, value) pair, and allows accessing the key and value. */ +class ListPairWidget extends Widget { + key; + value; + constructor(key, value) { + super("dataview:list-pair"); + this.key = key; + this.value = value; + } + markdown() { + return `${Values.toString(this.key)}: ${Values.toString(this.value)}`; + } +} +/** A simple widget which renders an external link. */ +class ExternalLinkWidget extends Widget { + url; + display; + constructor(url, display) { + super("dataview:external-link"); + this.url = url; + this.display = display; + } + markdown() { + return `[${this.display ?? this.url}](${this.url})`; + } +} +var Widgets; +(function (Widgets) { + /** Create a list pair widget matching the given key and value. */ + function listPair(key, value) { + return new ListPairWidget(key, value); + } + Widgets.listPair = listPair; + /** Create an external link widget which renders an external Obsidian link. */ + function externalLink(url, display) { + return new ExternalLinkWidget(url, display); + } + Widgets.externalLink = externalLink; + /** Checks if the given widget is a list pair widget. */ + function isListPair(widget) { + return widget.$widget === "dataview:list-pair"; + } + Widgets.isListPair = isListPair; + function isExternalLink(widget) { + return widget.$widget === "dataview:external-link"; + } + Widgets.isExternalLink = isExternalLink; + /** Determines if the given widget is any kind of built-in widget with special rendering handling. */ + function isBuiltin(widget) { + return isListPair(widget) || isExternalLink(widget); + } + Widgets.isBuiltin = isBuiltin; +})(Widgets || (Widgets = {})); + +/** Implementation of DataArray, minus the dynamic variable access, which is implemented via proxy. */ +class DataArrayImpl { + values; + settings; + defaultComparator; + static ARRAY_FUNCTIONS = new Set([ + "where", + "filter", + "map", + "flatMap", + "mutate", + "slice", + "concat", + "indexOf", + "limit", + "find", + "findIndex", + "includes", + "join", + "sort", + "sortInPlace", + "groupBy", + "groupIn", + "distinct", + "every", + "some", + "none", + "first", + "last", + "to", + "into", + "lwrap", + "expand", + "forEach", + "length", + "values", + "array", + "defaultComparator", + "toString", + "settings", + "sum", + "avg", + "min", + "max", + ]); + static ARRAY_PROXY = { + get: function (target, prop, receiver) { + if (typeof prop === "symbol") + return target[prop]; + else if (typeof prop === "number") + return target.values[prop]; + else if (prop === "constructor") + return target.values.constructor; + else if (!isNaN(parseInt(prop))) + return target.values[parseInt(prop)]; + else if (DataArrayImpl.ARRAY_FUNCTIONS.has(prop.toString())) + return target[prop.toString()]; + return target.to(prop); + }, + }; + static wrap(arr, settings, defaultComparator = Values.compareValue) { + return new Proxy(new DataArrayImpl(arr, settings, defaultComparator), DataArrayImpl.ARRAY_PROXY); + } + length; + constructor(values, settings, defaultComparator = Values.compareValue) { + this.values = values; + this.settings = settings; + this.defaultComparator = defaultComparator; + this.length = values.length; + } + lwrap(values) { + return DataArrayImpl.wrap(values, this.settings, this.defaultComparator); + } + where(predicate) { + return this.lwrap(this.values.filter(predicate)); + } + filter(predicate) { + return this.where(predicate); + } + map(f) { + return this.lwrap(this.values.map(f)); + } + flatMap(f) { + let result = []; + for (let index = 0; index < this.length; index++) { + let value = f(this.values[index], index, this.values); + if (!value || value.length == 0) + continue; + for (let r of value) + result.push(r); + } + return this.lwrap(result); + } + mutate(f) { + for (let index = 0; index < this.values.length; index++) { + f(this.values[index], index, this.values); + } + return this; + } + limit(count) { + return this.lwrap(this.values.slice(0, count)); + } + slice(start, end) { + return this.lwrap(this.values.slice(start, end)); + } + concat(other) { + return this.lwrap(this.values.concat(other.values)); + } + /** Return the first index of the given (optionally starting the search) */ + indexOf(element, fromIndex) { + return this.findIndex(e => this.defaultComparator(e, element) == 0, fromIndex); + } + /** Return the first element that satisfies the given predicate. */ + find(pred) { + let index = this.findIndex(pred); + if (index == -1) + return undefined; + else + return this.values[index]; + } + findIndex(pred, fromIndex) { + for (let index = fromIndex ?? 0; index < this.length; index++) { + if (pred(this.values[index], index, this.values)) + return index; + } + return -1; + } + includes(element) { + return this.indexOf(element, 0) != -1; + } + join(sep) { + return this.map(s => Values.toString(s, this.settings)) + .array() + .join(sep ?? ", "); + } + sort(key, direction, comparator) { + if (this.values.length == 0) + return this; + let realComparator = comparator ?? this.defaultComparator; + let realKey = key ?? ((l) => l); + // Associate each entry with it's index for the key function, and then do a normal sort. + let copy = [].concat(this.array()).map((elem, index) => { + return { index: index, value: elem }; + }); + copy.sort((a, b) => { + let aKey = realKey(a.value, a.index, this.values); + let bKey = realKey(b.value, b.index, this.values); + return direction === "desc" ? -realComparator(aKey, bKey) : realComparator(aKey, bKey); + }); + return this.lwrap(copy.map(e => e.value)); + } + sortInPlace(key, direction, comparator) { + if (this.values.length == 0) + return this; + let realComparator = comparator ?? this.defaultComparator; + let realKey = key ?? ((l) => l); + this.values.sort((a, b) => { + let aKey = realKey(a); + let bKey = realKey(b); + return direction == "desc" ? -realComparator(aKey, bKey) : realComparator(aKey, bKey); + }); + return this; + } + groupBy(key, comparator) { + if (this.values.length == 0) + return this.lwrap([]); + // JavaScript sucks and we can't make hash maps over arbitrary types (only strings/ints), so + // we do a poor man algorithm where we SORT, followed by grouping. + let intermediate = this.sort(key, "asc", comparator); + comparator = comparator ?? this.defaultComparator; + let result = []; + let currentRow = [intermediate[0]]; + let current = key(intermediate[0], 0, intermediate.values); + for (let index = 1; index < intermediate.length; index++) { + let newKey = key(intermediate[index], index, intermediate.values); + if (comparator(current, newKey) != 0) { + result.push({ key: current, rows: this.lwrap(currentRow) }); + current = newKey; + currentRow = [intermediate[index]]; + } + else { + currentRow.push(intermediate[index]); + } + } + result.push({ key: current, rows: this.lwrap(currentRow) }); + return this.lwrap(result); + } + groupIn(key, comparator) { + if (Groupings.isGrouping(this.values)) { + return this.map(v => { + return { + key: v.key, + rows: DataArray.wrap(v.rows, this.settings).groupIn(key, comparator), + }; + }); + } + else { + return this.groupBy(key, comparator); + } + } + distinct(key, comparator) { + if (this.values.length == 0) + return this; + let realKey = key ?? (x => x); + // For similar reasons to groupBy, do a sort and take the first element of each block. + let intermediate = this.map((x, index) => { + return { key: realKey(x, index, this.values), value: x }; + }).sort(x => x.key, "asc", comparator); + comparator = comparator ?? this.defaultComparator; + let result = [intermediate[0].value]; + for (let index = 1; index < intermediate.length; index++) { + if (comparator(intermediate[index - 1].key, intermediate[index].key) != 0) { + result.push(intermediate[index].value); + } + } + return this.lwrap(result); + } + every(f) { + return this.values.every(f); + } + some(f) { + return this.values.some(f); + } + none(f) { + return this.values.every((v, i, a) => !f(v, i, a)); + } + first() { + return this.values.length > 0 ? this.values[0] : undefined; + } + last() { + return this.values.length > 0 ? this.values[this.values.length - 1] : undefined; + } + to(key) { + let result = []; + for (let child of this.values) { + let value = child[key]; + if (value === undefined || value === null) + continue; + if (Array.isArray(value) || DataArray.isDataArray(value)) + value.forEach(v => result.push(v)); + else + result.push(value); + } + return this.lwrap(result); + } + into(key) { + let result = []; + for (let child of this.values) { + let value = child[key]; + if (value === undefined || value === null) + continue; + result.push(value); + } + return this.lwrap(result); + } + expand(key) { + let result = []; + let queue = [].concat(this.values); + while (queue.length > 0) { + let next = queue.pop(); + let value = next[key]; + if (value === undefined || value === null) + continue; + if (Array.isArray(value)) + value.forEach(v => queue.push(v)); + else if (value instanceof DataArrayImpl) + value.forEach(v => queue.push(v)); + else + queue.push(value); + result.push(next); + } + return this.lwrap(result); + } + forEach(f) { + for (let index = 0; index < this.values.length; index++) { + f(this.values[index], index, this.values); + } + } + sum() { + return this.values.reduce((a, b) => a + b, 0); + } + avg() { + return this.sum() / this.values.length; + } + min() { + return Math.min(...this.values); + } + max() { + return Math.max(...this.values); + } + array() { + return [].concat(this.values); + } + [Symbol.iterator]() { + return this.values[Symbol.iterator](); + } + toString() { + return "[" + this.values.join(", ") + "]"; + } +} +/** Provides utility functions for generating data arrays. */ +var DataArray; +(function (DataArray) { + /** Create a new Dataview data array. */ + function wrap(raw, settings) { + if (isDataArray(raw)) + return raw; + return DataArrayImpl.wrap(raw, settings); + } + DataArray.wrap = wrap; + /** Create a new DataArray from an iterable object. */ + function from(raw, settings) { + if (isDataArray(raw)) + return raw; + let data = []; + for (let elem of raw) + data.push(elem); + return DataArrayImpl.wrap(data, settings); + } + DataArray.from = from; + /** Return true if the given object is a data array. */ + function isDataArray(obj) { + return obj instanceof DataArrayImpl; + } + DataArray.isDataArray = isDataArray; +})(DataArray || (DataArray = {})); +// A scary looking polyfill, sure, but it fixes up data array/array interop for us. +const oldArrayIsArray = Array.isArray; +Array.isArray = (arg) => { + return oldArrayIsArray(arg) || DataArray.isDataArray(arg); +}; + +/** Test-environment-friendly function which fetches the current system locale. */ +function currentLocale() { + if (typeof window === "undefined") + return "en-US"; + return window.navigator.language; +} + +/** Render simple fields compactly, removing wrapping content like paragraph and span. */ +async function renderCompactMarkdown(app, markdown, container, sourcePath, component, isInlineFieldLivePreview = false) { + // check if the call is from the CM6 view plugin defined in src/ui/views/inline-field-live-preview.ts + if (isInlineFieldLivePreview) { + await renderCompactMarkdownForInlineFieldLivePreview(app, markdown, container, sourcePath, component); + } + else { + let subcontainer = container.createSpan(); + await obsidian.MarkdownRenderer.render(app, markdown, subcontainer, sourcePath, component); + let paragraph = subcontainer.querySelector(":scope > p"); + if (subcontainer.children.length == 1 && paragraph) { + while (paragraph.firstChild) { + subcontainer.appendChild(paragraph.firstChild); + } + subcontainer.removeChild(paragraph); + } + } +} +async function renderCompactMarkdownForInlineFieldLivePreview(app, markdown, container, sourcePath, component) { + const tmpContainer = createSpan(); + await obsidian.MarkdownRenderer.render(app, markdown, tmpContainer, sourcePath, component); + let paragraph = tmpContainer.querySelector(":scope > p"); + if (tmpContainer.childNodes.length == 1 && paragraph) { + container.appendChild(paragraph.childNodes.item(paragraph.childNodes.length - 1)); + } + else { + container.replaceChildren(...tmpContainer.childNodes); + } + tmpContainer.remove(); +} +/** Render a pre block with an error in it; returns the element to allow for dynamic updating. */ +function renderErrorPre(container, error) { + let pre = container.createEl("pre", { cls: ["dataview", "dataview-error"] }); + pre.appendText(error); + return pre; +} +/** Render a static codeblock. */ +function renderCodeBlock(container, source, language) { + let code = container.createEl("code", { cls: ["dataview"] }); + if (language) + code.classList.add("language-" + language); + code.appendText(source); + return code; +} +/** Prettily render a value into a container with the given settings. */ +async function renderValue(app, field, container, originFile, component, settings, expandList = false, context = "root", depth = 0, isInlineFieldLivePreview = false) { + // Prevent infinite recursion. + if (depth > settings.maxRecursiveRenderDepth) { + container.appendText("..."); + return; + } + if (Values.isNull(field)) { + await renderCompactMarkdown(app, settings.renderNullAs, container, originFile, component, isInlineFieldLivePreview); + } + else if (Values.isDate(field)) { + container.appendText(renderMinimalDate(field, settings, currentLocale())); + } + else if (Values.isDuration(field)) { + container.appendText(renderMinimalDuration(field)); + } + else if (Values.isString(field) || Values.isBoolean(field) || Values.isNumber(field)) { + await renderCompactMarkdown(app, "" + field, container, originFile, component, isInlineFieldLivePreview); + } + else if (Values.isLink(field)) { + await renderCompactMarkdown(app, field.markdown(), container, originFile, component, isInlineFieldLivePreview); + } + else if (Values.isHtml(field)) { + container.appendChild(field); + } + else if (Values.isWidget(field)) { + if (Widgets.isListPair(field)) { + await renderValue(app, field.key, container, originFile, component, settings, expandList, context, depth, isInlineFieldLivePreview); + container.appendText(": "); + await renderValue(app, field.value, container, originFile, component, settings, expandList, context, depth, isInlineFieldLivePreview); + } + else if (Widgets.isExternalLink(field)) { + let elem = document.createElement("a"); + elem.textContent = field.display ?? field.url; + elem.rel = "noopener"; + elem.target = "_blank"; + elem.classList.add("external-link"); + elem.href = field.url; + container.appendChild(elem); + } + else { + container.appendText(`<unknown widget '${field.$widget}>`); + } + } + else if (Values.isFunction(field)) { + container.appendText("<function>"); + } + else if (Values.isArray(field) || DataArray.isDataArray(field)) { + if (expandList) { + let list = container.createEl("ul", { + cls: [ + "dataview", + "dataview-ul", + context == "list" ? "dataview-result-list-ul" : "dataview-result-list-root-ul", + ], + }); + for (let child of field) { + let li = list.createEl("li", { cls: "dataview-result-list-li" }); + await renderValue(app, child, li, originFile, component, settings, expandList, "list", depth + 1, isInlineFieldLivePreview); + } + } + else { + if (field.length == 0) { + container.appendText("<empty list>"); + return; + } + let span = container.createEl("span", { cls: ["dataview", "dataview-result-list-span"] }); + let first = true; + for (let val of field) { + if (first) + first = false; + else + span.appendText(", "); + await renderValue(app, val, span, originFile, component, settings, expandList, "list", depth + 1, isInlineFieldLivePreview); + } + } + } + else if (Values.isObject(field)) { + // Don't render classes in case they have recursive references; spoopy. + if (field?.constructor?.name && field?.constructor?.name != "Object") { + container.appendText(`<${field.constructor.name}>`); + return; + } + if (expandList) { + let list = container.createEl("ul", { cls: ["dataview", "dataview-ul", "dataview-result-object-ul"] }); + for (let [key, value] of Object.entries(field)) { + let li = list.createEl("li", { cls: ["dataview", "dataview-li", "dataview-result-object-li"] }); + li.appendText(key + ": "); + await renderValue(app, value, li, originFile, component, settings, expandList, "list", depth + 1, isInlineFieldLivePreview); + } + } + else { + if (Object.keys(field).length == 0) { + container.appendText("<empty object>"); + return; + } + let span = container.createEl("span", { cls: ["dataview", "dataview-result-object-span"] }); + let first = true; + for (let [key, value] of Object.entries(field)) { + if (first) + first = false; + else + span.appendText(", "); + span.appendText(key + ": "); + await renderValue(app, value, span, originFile, component, settings, expandList, "list", depth + 1, isInlineFieldLivePreview); + } + } + } + else { + container.appendText("Unrecognized: " + JSON.stringify(field)); + } +} + +var papaparse_min = {exports: {}}; + +/* @license +Papa Parse +v5.4.1 +https://github.com/mholt/PapaParse +License: MIT +*/ +papaparse_min.exports; + +(function (module, exports) { + !function(e,t){module.exports=t();}(commonjsGlobal,function s(){var f="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==f?f:{};var n=!f.document&&!!f.postMessage,o=f.IS_PAPA_WORKER||!1,a={},u=0,b={parse:function(e,t){var r=(t=t||{}).dynamicTyping||!1;J(r)&&(t.dynamicTypingFunction=r,r={});if(t.dynamicTyping=r,t.transform=!!J(t.transform)&&t.transform,t.worker&&b.WORKERS_SUPPORTED){var i=function(){if(!b.WORKERS_SUPPORTED)return !1;var e=(r=f.URL||f.webkitURL||null,i=s.toString(),b.BLOB_URL||(b.BLOB_URL=r.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",i,")();"],{type:"text/javascript"})))),t=new f.Worker(e);var r,i;return t.onmessage=_,t.id=u++,a[t.id]=t}();return i.userStep=t.step,i.userChunk=t.chunk,i.userComplete=t.complete,i.userError=t.error,t.step=J(t.step),t.chunk=J(t.chunk),t.complete=J(t.complete),t.error=J(t.error),delete t.worker,void i.postMessage({input:e,config:t,workerId:i.id})}var n=null;b.NODE_STREAM_INPUT,"string"==typeof e?(e=function(e){if(65279===e.charCodeAt(0))return e.slice(1);return e}(e),n=t.download?new l(t):new p(t)):!0===e.readable&&J(e.read)&&J(e.on)?n=new g(t):(f.File&&e instanceof File||e instanceof Object)&&(n=new c(t));return n.stream(e)},unparse:function(e,t){var n=!1,_=!0,m=",",y="\r\n",s='"',a=s+s,r=!1,i=null,o=!1;!function(){if("object"!=typeof t)return;"string"!=typeof t.delimiter||b.BAD_DELIMITERS.filter(function(e){return -1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter);("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes);"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(r=t.skipEmptyLines);"string"==typeof t.newline&&(y=t.newline);"string"==typeof t.quoteChar&&(s=t.quoteChar);"boolean"==typeof t.header&&(_=t.header);if(Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");i=t.columns;}void 0!==t.escapeChar&&(a=t.escapeChar+s);("boolean"==typeof t.escapeFormulae||t.escapeFormulae instanceof RegExp)&&(o=t.escapeFormulae instanceof RegExp?t.escapeFormulae:/^[=+\-@\t\r].*$/);}();var u=new RegExp(Q(s),"g");"string"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return h(null,e,r);if("object"==typeof e[0])return h(i||Object.keys(e[0]),e,r)}else if("object"==typeof e)return "string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||i),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),h(e.fields||[],e.data||[],r);throw new Error("Unable to serialize unrecognized input");function h(e,t,r){var i="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var n=Array.isArray(e)&&0<e.length,s=!Array.isArray(t[0]);if(n&&_){for(var a=0;a<e.length;a++)0<a&&(i+=m),i+=v(e[a],a);0<t.length&&(i+=y);}for(var o=0;o<t.length;o++){var u=n?e.length:t[o].length,h=!1,f=n?0===Object.keys(t[o]).length:0===t[o].length;if(r&&!n&&(h="greedy"===r?""===t[o].join("").trim():1===t[o].length&&0===t[o][0].length),"greedy"===r&&n){for(var d=[],l=0;l<u;l++){var c=s?e[l]:l;d.push(t[o][c]);}h=""===d.join("").trim();}if(!h){for(var p=0;p<u;p++){0<p&&!f&&(i+=m);var g=n&&s?e[p]:p;i+=v(t[o][g],p);}o<t.length-1&&(!r||0<u&&!f)&&(i+=y);}}return i}function v(e,t){if(null==e)return "";if(e.constructor===Date)return JSON.stringify(e).slice(1,25);var r=!1;o&&"string"==typeof e&&o.test(e)&&(e="'"+e,r=!0);var i=e.toString().replace(u,a);return (r=r||!0===n||"function"==typeof n&&n(e,t)||Array.isArray(n)&&n[t]||function(e,t){for(var r=0;r<t.length;r++)if(-1<e.indexOf(t[r]))return !0;return !1}(i,b.BAD_DELIMITERS)||-1<i.indexOf(m)||" "===i.charAt(0)||" "===i.charAt(i.length-1))?s+i+s:i}}};if(b.RECORD_SEP=String.fromCharCode(30),b.UNIT_SEP=String.fromCharCode(31),b.BYTE_ORDER_MARK="\ufeff",b.BAD_DELIMITERS=["\r","\n",'"',b.BYTE_ORDER_MARK],b.WORKERS_SUPPORTED=!n&&!!f.Worker,b.NODE_STREAM_INPUT=1,b.LocalChunkSize=10485760,b.RemoteChunkSize=5242880,b.DefaultDelimiter=",",b.Parser=E,b.ParserHandle=r,b.NetworkStreamer=l,b.FileStreamer=c,b.StringStreamer=p,b.ReadableStreamStreamer=g,f.jQuery){var d=f.jQuery;d.fn.parse=function(o){var r=o.config||{},u=[];return this.each(function(e){if(!("INPUT"===d(this).prop("tagName").toUpperCase()&&"file"===d(this).attr("type").toLowerCase()&&f.FileReader)||!this.files||0===this.files.length)return !0;for(var t=0;t<this.files.length;t++)u.push({file:this.files[t],inputElem:this,instanceConfig:d.extend({},r)});}),e(),this;function e(){if(0!==u.length){var e,t,r,i,n=u[0];if(J(o.before)){var s=o.before(n.file,n.inputElem);if("object"==typeof s){if("abort"===s.action)return e="AbortError",t=n.file,r=n.inputElem,i=s.reason,void(J(o.error)&&o.error({name:e},t,r,i));if("skip"===s.action)return void h();"object"==typeof s.config&&(n.instanceConfig=d.extend(n.instanceConfig,s.config));}else if("skip"===s)return void h()}var a=n.instanceConfig.complete;n.instanceConfig.complete=function(e){J(a)&&a(e,n.file,n.inputElem),h();},b.parse(n.file,n.instanceConfig);}else J(o.complete)&&o.complete();}function h(){u.splice(0,1),e();}};}function h(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine="",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=w(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new r(t),(this._handle.streamer=this)._config=t;}.call(this,e),this.parseChunk=function(e,t){if(this.isFirstChunk&&J(this._config.beforeFirstChunk)){var r=this._config.beforeFirstChunk(e);void 0!==r&&(e=r);}this.isFirstChunk=!1,this._halted=!1;var i=this._partialLine+e;this._partialLine="";var n=this._handle.parse(i,this._baseIndex,!this._finished);if(!this._handle.paused()&&!this._handle.aborted()){var s=n.meta.cursor;this._finished||(this._partialLine=i.substring(s-this._baseIndex),this._baseIndex=s),n&&n.data&&(this._rowCount+=n.data.length);var a=this._finished||this._config.preview&&this._rowCount>=this._config.preview;if(o)f.postMessage({results:n,workerId:b.WORKER_ID,finished:a});else if(J(this._config.chunk)&&!t){if(this._config.chunk(n,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);n=void 0,this._completeResults=void 0;}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(n.data),this._completeResults.errors=this._completeResults.errors.concat(n.errors),this._completeResults.meta=n.meta),this._completed||!a||!J(this._config.complete)||n&&n.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),a||n&&n.meta.paused||this._nextChunk(),n}this._halted=!0;},this._sendError=function(e){J(this._config.error)?this._config.error(e):o&&this._config.error&&f.postMessage({workerId:b.WORKER_ID,error:e,finished:!1});};}function l(e){var i;(e=e||{}).chunkSize||(e.chunkSize=b.RemoteChunkSize),h.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded();}:function(){this._readChunk();},this.stream=function(e){this._input=e,this._nextChunk();},this._readChunk=function(){if(this._finished)this._chunkLoaded();else {if(i=new XMLHttpRequest,this._config.withCredentials&&(i.withCredentials=this._config.withCredentials),n||(i.onload=v(this._chunkLoaded,this),i.onerror=v(this._chunkError,this)),i.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var t in e)i.setRequestHeader(t,e[t]);}if(this._config.chunkSize){var r=this._start+this._config.chunkSize-1;i.setRequestHeader("Range","bytes="+this._start+"-"+r);}try{i.send(this._config.downloadRequestBody);}catch(e){this._chunkError(e.message);}n&&0===i.status&&this._chunkError();}},this._chunkLoaded=function(){4===i.readyState&&(i.status<200||400<=i.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:i.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");if(null===t)return -1;return parseInt(t.substring(t.lastIndexOf("/")+1))}(i),this.parseChunk(i.responseText)));},this._chunkError=function(e){var t=i.statusText||e;this._sendError(new Error(t));};}function c(e){var i,n;(e=e||{}).chunkSize||(e.chunkSize=b.LocalChunkSize),h.call(this,e);var s="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,s?((i=new FileReader).onload=v(this._chunkLoaded,this),i.onerror=v(this._chunkError,this)):i=new FileReaderSync,this._nextChunk();},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk();},this._readChunk=function(){var e=this._input;if(this._config.chunkSize){var t=Math.min(this._start+this._config.chunkSize,this._input.size);e=n.call(e,this._start,t);}var r=i.readAsText(e,this._config.encoding);s||this._chunkLoaded({target:{result:r}});},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result);},this._chunkError=function(){this._sendError(i.error);};}function p(e){var r;h.call(this,e=e||{}),this.stream=function(e){return r=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,t=this._config.chunkSize;return t?(e=r.substring(0,t),r=r.substring(t)):(e=r,r=""),this._finished=!r,this.parseChunk(e)}};}function g(e){h.call(this,e=e||{});var t=[],r=!0,i=!1;this.pause=function(){h.prototype.pause.apply(this,arguments),this._input.pause();},this.resume=function(){h.prototype.resume.apply(this,arguments),this._input.resume();},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError);},this._checkIsFinished=function(){i&&1===t.length&&(this._finished=!0);},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):r=!0;},this._streamData=v(function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),r&&(r=!1,this._checkIsFinished(),this.parseChunk(t.shift()));}catch(e){this._streamError(e);}},this),this._streamError=v(function(e){this._streamCleanUp(),this._sendError(e);},this),this._streamEnd=v(function(){this._streamCleanUp(),i=!0,this._streamData("");},this),this._streamCleanUp=v(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError);},this);}function r(m){var a,o,u,i=Math.pow(2,53),n=-i,s=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,h=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,t=this,r=0,f=0,d=!1,e=!1,l=[],c={data:[],errors:[],meta:{}};if(J(m.step)){var p=m.step;m.step=function(e){if(c=e,_())g();else {if(g(),0===c.data.length)return;r+=e.data.length,m.preview&&r>m.preview?o.abort():(c.data=c.data[0],p(c,t));}};}function y(e){return "greedy"===m.skipEmptyLines?""===e.join("").trim():1===e.length&&0===e[0].length}function g(){return c&&u&&(k("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+b.DefaultDelimiter+"'"),u=!1),m.skipEmptyLines&&(c.data=c.data.filter(function(e){return !y(e)})),_()&&function(){if(!c)return;function e(e,t){J(m.transformHeader)&&(e=m.transformHeader(e,t)),l.push(e);}if(Array.isArray(c.data[0])){for(var t=0;_()&&t<c.data.length;t++)c.data[t].forEach(e);c.data.splice(0,1);}else c.data.forEach(e);}(),function(){if(!c||!m.header&&!m.dynamicTyping&&!m.transform)return c;function e(e,t){var r,i=m.header?{}:[];for(r=0;r<e.length;r++){var n=r,s=e[r];m.header&&(n=r>=l.length?"__parsed_extra":l[r]),m.transform&&(s=m.transform(s,n)),s=v(n,s),"__parsed_extra"===n?(i[n]=i[n]||[],i[n].push(s)):i[n]=s;}return m.header&&(r>l.length?k("FieldMismatch","TooManyFields","Too many fields: expected "+l.length+" fields but parsed "+r,f+t):r<l.length&&k("FieldMismatch","TooFewFields","Too few fields: expected "+l.length+" fields but parsed "+r,f+t)),i}var t=1;!c.data.length||Array.isArray(c.data[0])?(c.data=c.data.map(e),t=c.data.length):c.data=e(c.data,0);m.header&&c.meta&&(c.meta.fields=l);return f+=t,c}()}function _(){return m.header&&0===l.length}function v(e,t){return r=e,m.dynamicTypingFunction&&void 0===m.dynamicTyping[r]&&(m.dynamicTyping[r]=m.dynamicTypingFunction(r)),!0===(m.dynamicTyping[r]||m.dynamicTyping)?"true"===t||"TRUE"===t||"false"!==t&&"FALSE"!==t&&(function(e){if(s.test(e)){var t=parseFloat(e);if(n<t&&t<i)return !0}return !1}(t)?parseFloat(t):h.test(t)?new Date(t):""===t?null:t):t;var r;}function k(e,t,r,i){var n={type:e,code:t,message:r};void 0!==i&&(n.row=i),c.errors.push(n);}this.parse=function(e,t,r){var i=m.quoteChar||'"';if(m.newline||(m.newline=function(e,t){e=e.substring(0,1048576);var r=new RegExp(Q(t)+"([^]*?)"+Q(t),"gm"),i=(e=e.replace(r,"")).split("\r"),n=e.split("\n"),s=1<n.length&&n[0].length<i[0].length;if(1===i.length||s)return "\n";for(var a=0,o=0;o<i.length;o++)"\n"===i[o][0]&&a++;return a>=i.length/2?"\r\n":"\r"}(e,i)),u=!1,m.delimiter)J(m.delimiter)&&(m.delimiter=m.delimiter(e),c.meta.delimiter=m.delimiter);else {var n=function(e,t,r,i,n){var s,a,o,u;n=n||[",","\t","|",";",b.RECORD_SEP,b.UNIT_SEP];for(var h=0;h<n.length;h++){var f=n[h],d=0,l=0,c=0;o=void 0;for(var p=new E({comments:i,delimiter:f,newline:t,preview:10}).parse(e),g=0;g<p.data.length;g++)if(r&&y(p.data[g]))c++;else {var _=p.data[g].length;l+=_,void 0!==o?0<_&&(d+=Math.abs(_-o),o=_):o=_;}0<p.data.length&&(l/=p.data.length-c),(void 0===a||d<=a)&&(void 0===u||u<l)&&1.99<l&&(a=d,s=f,u=l);}return {successful:!!(m.delimiter=s),bestDelimiter:s}}(e,m.newline,m.skipEmptyLines,m.comments,m.delimitersToGuess);n.successful?m.delimiter=n.bestDelimiter:(u=!0,m.delimiter=b.DefaultDelimiter),c.meta.delimiter=m.delimiter;}var s=w(m);return m.preview&&m.header&&s.preview++,a=e,o=new E(s),c=o.parse(a,t,r),g(),d?{meta:{paused:!0}}:c||{meta:{paused:!1}}},this.paused=function(){return d},this.pause=function(){d=!0,o.abort(),a=J(m.chunk)?"":a.substring(o.getCharIndex());},this.resume=function(){t.streamer._halted?(d=!1,t.streamer.parseChunk(a,!0)):setTimeout(t.resume,3);},this.aborted=function(){return e},this.abort=function(){e=!0,o.abort(),c.meta.aborted=!0,J(m.complete)&&m.complete(c),a="";};}function Q(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function E(j){var z,M=(j=j||{}).delimiter,P=j.newline,U=j.comments,q=j.step,N=j.preview,B=j.fastMode,K=z=void 0===j.quoteChar||null===j.quoteChar?'"':j.quoteChar;if(void 0!==j.escapeChar&&(K=j.escapeChar),("string"!=typeof M||-1<b.BAD_DELIMITERS.indexOf(M))&&(M=","),U===M)throw new Error("Comment character same as delimiter");!0===U?U="#":("string"!=typeof U||-1<b.BAD_DELIMITERS.indexOf(U))&&(U=!1),"\n"!==P&&"\r"!==P&&"\r\n"!==P&&(P="\n");var W=0,H=!1;this.parse=function(i,t,r){if("string"!=typeof i)throw new Error("Input must be a string");var n=i.length,e=M.length,s=P.length,a=U.length,o=J(q),u=[],h=[],f=[],d=W=0;if(!i)return L();if(j.header&&!t){var l=i.split(P)[0].split(M),c=[],p={},g=!1;for(var _ in l){var m=l[_];J(j.transformHeader)&&(m=j.transformHeader(m,_));var y=m,v=p[m]||0;for(0<v&&(g=!0,y=m+"_"+v),p[m]=v+1;c.includes(y);)y=y+"_"+v;c.push(y);}if(g){var k=i.split(P);k[0]=c.join(M),i=k.join(P);}}if(B||!1!==B&&-1===i.indexOf(z)){for(var b=i.split(P),E=0;E<b.length;E++){if(f=b[E],W+=f.length,E!==b.length-1)W+=P.length;else if(r)return L();if(!U||f.substring(0,a)!==U){if(o){if(u=[],I(f.split(M)),F(),H)return L()}else I(f.split(M));if(N&&N<=E)return u=u.slice(0,N),L(!0)}}return L()}for(var w=i.indexOf(M,W),R=i.indexOf(P,W),C=new RegExp(Q(K)+Q(z),"g"),S=i.indexOf(z,W);;)if(i[W]!==z)if(U&&0===f.length&&i.substring(W,W+a)===U){if(-1===R)return L();W=R+s,R=i.indexOf(P,W),w=i.indexOf(M,W);}else if(-1!==w&&(w<R||-1===R))f.push(i.substring(W,w)),W=w+e,w=i.indexOf(M,W);else {if(-1===R)break;if(f.push(i.substring(W,R)),D(R+s),o&&(F(),H))return L();if(N&&u.length>=N)return L(!0)}else for(S=W,W++;;){if(-1===(S=i.indexOf(z,S+1)))return r||h.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:u.length,index:W}),T();if(S===n-1)return T(i.substring(W,S).replace(C,z));if(z!==K||i[S+1]!==K){if(z===K||0===S||i[S-1]!==K){-1!==w&&w<S+1&&(w=i.indexOf(M,S+1)),-1!==R&&R<S+1&&(R=i.indexOf(P,S+1));var O=A(-1===R?w:Math.min(w,R));if(i.substr(S+1+O,e)===M){f.push(i.substring(W,S).replace(C,z)),i[W=S+1+O+e]!==z&&(S=i.indexOf(z,W)),w=i.indexOf(M,W),R=i.indexOf(P,W);break}var x=A(R);if(i.substring(S+1+x,S+1+x+s)===P){if(f.push(i.substring(W,S).replace(C,z)),D(S+1+x+s),w=i.indexOf(M,W),S=i.indexOf(z,W),o&&(F(),H))return L();if(N&&u.length>=N)return L(!0);break}h.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:u.length,index:W}),S++;}}else S++;}return T();function I(e){u.push(e),d=W;}function A(e){var t=0;if(-1!==e){var r=i.substring(S+1,e);r&&""===r.trim()&&(t=r.length);}return t}function T(e){return r||(void 0===e&&(e=i.substring(W)),f.push(e),W=n,I(f),o&&F()),L()}function D(e){W=e,I(f),f=[],R=i.indexOf(P,W);}function L(e){return {data:u,errors:h,meta:{delimiter:M,linebreak:P,aborted:H,truncated:!!e,cursor:d+(t||0)}}}function F(){q(L()),u=[],h=[];}},this.abort=function(){H=!0;},this.getCharIndex=function(){return W};}function _(e){var t=e.data,r=a[t.workerId],i=!1;if(t.error)r.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){i=!0,m(t.workerId,{data:[],errors:[],meta:{aborted:!0}});},pause:y,resume:y};if(J(r.userStep)){for(var s=0;s<t.results.data.length&&(r.userStep({data:t.results.data[s],errors:t.results.errors,meta:t.results.meta},n),!i);s++);delete t.results;}else J(r.userChunk)&&(r.userChunk(t.results,n,t.file),delete t.results);}t.finished&&!i&&m(t.workerId,t.results);}function m(e,t){var r=a[e];J(r.userComplete)&&r.userComplete(t),r.terminate(),delete a[e];}function y(){throw new Error("Not implemented.")}function w(e){if("object"!=typeof e||null===e)return e;var t=Array.isArray(e)?[]:{};for(var r in e)t[r]=w(e[r]);return t}function v(e,t){return function(){e.apply(t,arguments);}}function J(e){return "function"==typeof e}return o&&(f.onmessage=function(e){var t=e.data;void 0===b.WORKER_ID&&t&&(b.WORKER_ID=t.workerId);if("string"==typeof t.input)f.postMessage({workerId:b.WORKER_ID,results:b.parse(t.input,t.config),finished:!0});else if(f.File&&t.input instanceof File||t.input instanceof Object){var r=b.parse(t.input,t.config);r&&f.postMessage({workerId:b.WORKER_ID,results:r,finished:!0});}}),(l.prototype=Object.create(h.prototype)).constructor=l,(c.prototype=Object.create(h.prototype)).constructor=c,(p.prototype=Object.create(p.prototype)).constructor=p,(g.prototype=Object.create(h.prototype)).constructor=g,b}); +} (papaparse_min, papaparse_min.exports)); + +var papaparse_minExports = papaparse_min.exports; + +/** Utility methods for creating & comparing fields. */ +var Fields; +(function (Fields) { + function variable(name) { + return { type: "variable", name }; + } + Fields.variable = variable; + function literal(value) { + return { type: "literal", value }; + } + Fields.literal = literal; + function binaryOp(left, op, right) { + return { type: "binaryop", left, op, right }; + } + Fields.binaryOp = binaryOp; + function index(obj, index) { + return { type: "index", object: obj, index }; + } + Fields.index = index; + /** Converts a string in dot-notation-format into a variable which indexes. */ + function indexVariable(name) { + let parts = name.split("."); + let result = Fields.variable(parts[0]); + for (let index = 1; index < parts.length; index++) { + result = Fields.index(result, Fields.literal(parts[index])); + } + return result; + } + Fields.indexVariable = indexVariable; + function lambda(args, value) { + return { type: "lambda", arguments: args, value }; + } + Fields.lambda = lambda; + function func(func, args) { + return { type: "function", func, arguments: args }; + } + Fields.func = func; + function list(values) { + return { type: "list", values }; + } + Fields.list = list; + function object(values) { + return { type: "object", values }; + } + Fields.object = object; + function negate(child) { + return { type: "negated", child }; + } + Fields.negate = negate; + function isCompareOp(op) { + return op == "<=" || op == "<" || op == ">" || op == ">=" || op == "!=" || op == "="; + } + Fields.isCompareOp = isCompareOp; + Fields.NULL = Fields.literal(null); +})(Fields || (Fields = {})); + +/** AST implementation for queries over data sources. */ +/** Utility functions for creating and manipulating sources. */ +var Sources; +(function (Sources) { + /** Create a source which searches from a tag. */ + function tag(tag) { + return { type: "tag", tag }; + } + Sources.tag = tag; + /** Create a source which fetches from a CSV file. */ + function csv(path) { + return { type: "csv", path }; + } + Sources.csv = csv; + /** Create a source which searches for files under a folder prefix. */ + function folder(prefix) { + return { type: "folder", folder: prefix }; + } + Sources.folder = folder; + /** Create a source which searches for files which link to/from a given file. */ + function link(file, incoming) { + return { type: "link", file, direction: incoming ? "incoming" : "outgoing" }; + } + Sources.link = link; + /** Create a source which joins two sources by a logical operator (and/or). */ + function binaryOp(left, op, right) { + return { type: "binaryop", left, op, right }; + } + Sources.binaryOp = binaryOp; + /** Create a source which takes the intersection of two sources. */ + function and(left, right) { + return { type: "binaryop", left, op: "&", right }; + } + Sources.and = and; + /** Create a source which takes the union of two sources. */ + function or(left, right) { + return { type: "binaryop", left, op: "|", right }; + } + Sources.or = or; + /** Create a source which negates the underlying source. */ + function negate(child) { + return { type: "negate", child }; + } + Sources.negate = negate; + function empty() { + return { type: "empty" }; + } + Sources.empty = empty; +})(Sources || (Sources = {})); + +/** Emoji regex without any additional flags. */ +const EMOJI_REGEX = new RegExp(emojiRegex(), ""); +/** Provides a lookup table for unit durations of the given type. */ +const DURATION_TYPES = { + year: Duration.fromObject({ years: 1 }), + years: Duration.fromObject({ years: 1 }), + yr: Duration.fromObject({ years: 1 }), + yrs: Duration.fromObject({ years: 1 }), + month: Duration.fromObject({ months: 1 }), + months: Duration.fromObject({ months: 1 }), + mo: Duration.fromObject({ months: 1 }), + mos: Duration.fromObject({ months: 1 }), + week: Duration.fromObject({ weeks: 1 }), + weeks: Duration.fromObject({ weeks: 1 }), + wk: Duration.fromObject({ weeks: 1 }), + wks: Duration.fromObject({ weeks: 1 }), + w: Duration.fromObject({ weeks: 1 }), + day: Duration.fromObject({ days: 1 }), + days: Duration.fromObject({ days: 1 }), + d: Duration.fromObject({ days: 1 }), + hour: Duration.fromObject({ hours: 1 }), + hours: Duration.fromObject({ hours: 1 }), + hr: Duration.fromObject({ hours: 1 }), + hrs: Duration.fromObject({ hours: 1 }), + h: Duration.fromObject({ hours: 1 }), + minute: Duration.fromObject({ minutes: 1 }), + minutes: Duration.fromObject({ minutes: 1 }), + min: Duration.fromObject({ minutes: 1 }), + mins: Duration.fromObject({ minutes: 1 }), + m: Duration.fromObject({ minutes: 1 }), + second: Duration.fromObject({ seconds: 1 }), + seconds: Duration.fromObject({ seconds: 1 }), + sec: Duration.fromObject({ seconds: 1 }), + secs: Duration.fromObject({ seconds: 1 }), + s: Duration.fromObject({ seconds: 1 }), +}; +/** Shorthand for common dates (relative to right now). */ +const DATE_SHORTHANDS = { + now: () => DateTime.local(), + today: () => DateTime.local().startOf("day"), + yesterday: () => DateTime.local() + .startOf("day") + .minus(Duration.fromObject({ days: 1 })), + tomorrow: () => DateTime.local() + .startOf("day") + .plus(Duration.fromObject({ days: 1 })), + sow: () => DateTime.local().startOf("week"), + "start-of-week": () => DateTime.local().startOf("week"), + eow: () => DateTime.local().endOf("week"), + "end-of-week": () => DateTime.local().endOf("week"), + soy: () => DateTime.local().startOf("year"), + "start-of-year": () => DateTime.local().startOf("year"), + eoy: () => DateTime.local().endOf("year"), + "end-of-year": () => DateTime.local().endOf("year"), + som: () => DateTime.local().startOf("month"), + "start-of-month": () => DateTime.local().startOf("month"), + eom: () => DateTime.local().endOf("month"), + "end-of-month": () => DateTime.local().endOf("month"), +}; +/** + * Keywords which cannot be used as variables directly. Use `row.<thing>` if it is a variable you have defined and want + * to access. + */ +const KEYWORDS = ["FROM", "WHERE", "LIMIT", "GROUP", "FLATTEN"]; +/////////////// +// Utilities // +/////////////// +/** Split on unescaped pipes in an inner link. */ +function splitOnUnescapedPipe(link) { + let pipe = -1; + while ((pipe = link.indexOf("|", pipe + 1)) >= 0) { + if (pipe > 0 && link[pipe - 1] == "\\") + continue; + return [link.substring(0, pipe).replace(/\\\|/g, "|"), link.substring(pipe + 1)]; + } + return [link.replace(/\\\|/g, "|"), undefined]; +} +/** Attempt to parse the inside of a link to pull out display name, subpath, etc. */ +function parseInnerLink(rawlink) { + let [link, display] = splitOnUnescapedPipe(rawlink); + return Link.infer(link, false, display); +} +/** Create a left-associative binary parser which parses the given sub-element and separator. Handles whitespace. */ +function createBinaryParser(child, sep, combine) { + return parsimmon_umd_minExports.seqMap(child, parsimmon_umd_minExports.seq(parsimmon_umd_minExports.optWhitespace, sep, parsimmon_umd_minExports.optWhitespace, child).many(), (first, rest) => { + if (rest.length == 0) + return first; + let node = combine(first, rest[0][1], rest[0][3]); + for (let index = 1; index < rest.length; index++) { + node = combine(node, rest[index][1], rest[index][3]); + } + return node; + }); +} +function chainOpt(base, ...funcs) { + return parsimmon_umd_minExports.custom((success, failure) => { + return (input, i) => { + let result = base._(input, i); + if (!result.status) + return result; + for (let func of funcs) { + let next = func(result.value)._(input, result.index); + if (!next.status) + return result; + result = next; + } + return result; + }; + }); +} +const EXPRESSION = parsimmon_umd_minExports.createLanguage({ + // A floating point number; the decimal point is optional. + number: q => parsimmon_umd_minExports.regexp(/-?[0-9]+(\.[0-9]+)?/) + .map(str => Number.parseFloat(str)) + .desc("number"), + // A quote-surrounded string which supports escape characters ('\'). + string: q => parsimmon_umd_minExports.string('"') + .then(parsimmon_umd_minExports.alt(q.escapeCharacter, parsimmon_umd_minExports.noneOf('"\\')) + .atLeast(0) + .map(chars => chars.join(""))) + .skip(parsimmon_umd_minExports.string('"')) + .desc("string"), + escapeCharacter: _ => parsimmon_umd_minExports.string("\\") + .then(parsimmon_umd_minExports.any) + .map(escaped => { + // If we are escaping a backslash or a quote, pass in on in escaped form + if (escaped === '"') + return '"'; + if (escaped === "\\") + return "\\"; + else + return "\\" + escaped; + }), + // A boolean true/false value. + bool: _ => parsimmon_umd_minExports.regexp(/true|false|True|False/) + .map(str => str.toLowerCase() == "true") + .desc("boolean ('true' or 'false')"), + // A tag of the form '#stuff/hello-there'. + tag: _ => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("#"), parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regexp(/[^\u2000-\u206F\u2E00-\u2E7F'!"#$%&()*+,.:;<=>?@^`{|}~\[\]\\\s]/).desc("text")).many(), (start, rest) => start + rest.join("")).desc("tag ('#hello/stuff')"), + // A variable identifier, which is alphanumeric and must start with a letter or... emoji. + identifier: _ => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regexp(/\p{Letter}/u), parsimmon_umd_minExports.regexp(EMOJI_REGEX).desc("text")), parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regexp(/[0-9\p{Letter}_-]/u), parsimmon_umd_minExports.regexp(EMOJI_REGEX).desc("text")).many(), (first, rest) => first + rest.join("")).desc("variable identifier"), + // An Obsidian link of the form [[<link>]]. + link: _ => parsimmon_umd_minExports.regexp(/\[\[([^\[\]]*?)\]\]/u, 1) + .map(linkInner => parseInnerLink(linkInner)) + .desc("file link"), + // An embeddable link which can start with '!'. This overlaps with the normal negation operator, so it is only + // provided for metadata parsing. + embedLink: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("!").atMost(1), q.link, (p, l) => { + if (p.length > 0) + l.embed = true; + return l; + }).desc("file link"), + // Binary plus or minus operator. + binaryPlusMinus: _ => parsimmon_umd_minExports.regexp(/\+|-/) + .map(str => str) + .desc("'+' or '-'"), + // Binary times or divide operator. + binaryMulDiv: _ => parsimmon_umd_minExports.regexp(/\*|\/|%/) + .map(str => str) + .desc("'*' or '/' or '%'"), + // Binary comparison operator. + binaryCompareOp: _ => parsimmon_umd_minExports.regexp(/>=|<=|!=|>|<|=/) + .map(str => str) + .desc("'>=' or '<=' or '!=' or '=' or '>' or '<'"), + // Binary boolean combination operator. + binaryBooleanOp: _ => parsimmon_umd_minExports.regexp(/and|or|&|\|/i) + .map(str => { + if (str.toLowerCase() == "and") + return "&"; + else if (str.toLowerCase() == "or") + return "|"; + else + return str; + }) + .desc("'and' or 'or'"), + // A date which can be YYYY-MM[-DDTHH:mm:ss]. + rootDate: _ => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/\d{4}/), parsimmon_umd_minExports.string("-"), parsimmon_umd_minExports.regexp(/\d{2}/), (year, _, month) => { + return DateTime.fromObject({ year: Number.parseInt(year), month: Number.parseInt(month) }); + }).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"), + dateShorthand: _ => parsimmon_umd_minExports.alt(...Object.keys(DATE_SHORTHANDS) + .sort((a, b) => b.length - a.length) + .map(parsimmon_umd_minExports.string)), + date: q => chainOpt(q.rootDate, (ym) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("-"), parsimmon_umd_minExports.regexp(/\d{2}/), (_, day) => ym.set({ day: Number.parseInt(day) })), (ymd) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("T"), parsimmon_umd_minExports.regexp(/\d{2}/), (_, hour) => ymd.set({ hour: Number.parseInt(hour) })), (ymdh) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string(":"), parsimmon_umd_minExports.regexp(/\d{2}/), (_, minute) => ymdh.set({ minute: Number.parseInt(minute) })), (ymdhm) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string(":"), parsimmon_umd_minExports.regexp(/\d{2}/), (_, second) => ymdhm.set({ second: Number.parseInt(second) })), (ymdhms) => parsimmon_umd_minExports.alt(parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("."), parsimmon_umd_minExports.regexp(/\d{3}/), (_, millisecond) => ymdhms.set({ millisecond: Number.parseInt(millisecond) })), parsimmon_umd_minExports.succeed(ymdhms) // pass + ), (dt) => parsimmon_umd_minExports.alt(parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("+").or(parsimmon_umd_minExports.string("-")), parsimmon_umd_minExports.regexp(/\d{1,2}(:\d{2})?/), (pm, hr) => dt.setZone("UTC" + pm + hr, { keepLocalTime: true })), parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("Z"), () => dt.setZone("utc", { keepLocalTime: true })), parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("["), parsimmon_umd_minExports.regexp(/[0-9A-Za-z+-\/]+/u), parsimmon_umd_minExports.string("]"), (_a, zone, _b) => dt.setZone(zone, { keepLocalTime: true })))) + .assert((dt) => dt.isValid, "valid date") + .desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"), + // A date, plus various shorthand times of day it could be. + datePlus: q => parsimmon_umd_minExports.alt(q.dateShorthand.map(d => DATE_SHORTHANDS[d]()), q.date).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS] or in shorthand"), + // A duration of time. + durationType: _ => parsimmon_umd_minExports.alt(...Object.keys(DURATION_TYPES) + .sort((a, b) => b.length - a.length) + .map(parsimmon_umd_minExports.string)), + duration: q => parsimmon_umd_minExports.seqMap(q.number, parsimmon_umd_minExports.optWhitespace, q.durationType, (count, _, t) => DURATION_TYPES[t].mapUnits(x => x * count)) + .sepBy1(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace).or(parsimmon_umd_minExports.optWhitespace)) + .map(durations => durations.reduce((p, c) => p.plus(c))) + .desc("duration like 4hr2min"), + // A raw null value. + rawNull: _ => parsimmon_umd_minExports.string("null"), + // Source parsing. + tagSource: q => q.tag.map(tag => Sources.tag(tag)), + csvSource: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("csv(").skip(parsimmon_umd_minExports.optWhitespace), q.string, parsimmon_umd_minExports.string(")"), (_1, path, _2) => Sources.csv(path)), + linkIncomingSource: q => q.link.map(link => Sources.link(link.path, true)), + linkOutgoingSource: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("outgoing(").skip(parsimmon_umd_minExports.optWhitespace), q.link, parsimmon_umd_minExports.string(")"), (_1, link, _2) => Sources.link(link.path, false)), + folderSource: q => q.string.map(str => Sources.folder(str)), + parensSource: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("("), parsimmon_umd_minExports.optWhitespace, q.source, parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string(")"), (_1, _2, field, _3, _4) => field), + negateSource: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.alt(parsimmon_umd_minExports.string("-"), parsimmon_umd_minExports.string("!")), q.atomSource, (_, source) => Sources.negate(source)), + atomSource: q => parsimmon_umd_minExports.alt(q.parensSource, q.negateSource, q.linkOutgoingSource, q.linkIncomingSource, q.folderSource, q.tagSource, q.csvSource), + binaryOpSource: q => createBinaryParser(q.atomSource, q.binaryBooleanOp.map(s => s), Sources.binaryOp), + source: q => q.binaryOpSource, + // Field parsing. + variableField: q => q.identifier + .chain(r => { + if (KEYWORDS.includes(r.toUpperCase())) { + return parsimmon_umd_minExports.fail("Variable fields cannot be a keyword (" + KEYWORDS.join(" or ") + ")"); + } + else { + return parsimmon_umd_minExports.succeed(Fields.variable(r)); + } + }) + .desc("variable"), + numberField: q => q.number.map(val => Fields.literal(val)).desc("number"), + stringField: q => q.string.map(val => Fields.literal(val)).desc("string"), + boolField: q => q.bool.map(val => Fields.literal(val)).desc("boolean"), + dateField: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("date("), parsimmon_umd_minExports.optWhitespace, q.datePlus, parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string(")"), (prefix, _1, date, _2, postfix) => Fields.literal(date)).desc("date"), + durationField: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("dur("), parsimmon_umd_minExports.optWhitespace, q.duration, parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string(")"), (prefix, _1, dur, _2, postfix) => Fields.literal(dur)).desc("duration"), + nullField: q => q.rawNull.map(_ => Fields.NULL), + linkField: q => q.link.map(f => Fields.literal(f)), + listField: q => q.field + .sepBy(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)) + .wrap(parsimmon_umd_minExports.string("[").skip(parsimmon_umd_minExports.optWhitespace), parsimmon_umd_minExports.optWhitespace.then(parsimmon_umd_minExports.string("]"))) + .map(l => Fields.list(l)) + .desc("list ('[1, 2, 3]')"), + objectField: q => parsimmon_umd_minExports.seqMap(q.identifier.or(q.string), parsimmon_umd_minExports.string(":").trim(parsimmon_umd_minExports.optWhitespace), q.field, (name, _sep, value) => { + return { name, value }; + }) + .sepBy(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)) + .wrap(parsimmon_umd_minExports.string("{").skip(parsimmon_umd_minExports.optWhitespace), parsimmon_umd_minExports.optWhitespace.then(parsimmon_umd_minExports.string("}"))) + .map(vals => { + let res = {}; + for (let entry of vals) + res[entry.name] = entry.value; + return Fields.object(res); + }) + .desc("object ('{ a: 1, b: 2 }')"), + atomInlineField: q => parsimmon_umd_minExports.alt(q.date, q.duration.map(d => normalizeDuration(d)), q.string, q.tag, q.embedLink, q.bool, q.number, q.rawNull), + inlineFieldList: q => q.atomInlineField.sepBy(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace).lookahead(q.atomInlineField)), + inlineField: q => parsimmon_umd_minExports.alt(parsimmon_umd_minExports.seqMap(q.atomInlineField, parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace), q.inlineFieldList, (f, _s, l) => [f].concat(l)), q.atomInlineField), + atomField: q => parsimmon_umd_minExports.alt( + // Place embed links above negated fields as they are the special parser case '![[thing]]' and are generally unambiguous. + q.embedLink.map(l => Fields.literal(l)), q.negatedField, q.linkField, q.listField, q.objectField, q.lambdaField, q.parensField, q.boolField, q.numberField, q.stringField, q.dateField, q.durationField, q.nullField, q.variableField), + indexField: q => parsimmon_umd_minExports.seqMap(q.atomField, parsimmon_umd_minExports.alt(q.dotPostfix, q.indexPostfix, q.functionPostfix).many(), (obj, postfixes) => { + let result = obj; + for (let post of postfixes) { + switch (post.type) { + case "dot": + result = Fields.index(result, Fields.literal(post.field)); + break; + case "index": + result = Fields.index(result, post.field); + break; + case "function": + result = Fields.func(result, post.fields); + break; + } + } + return result; + }), + negatedField: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("!"), q.indexField, (_, field) => Fields.negate(field)).desc("negated field"), + parensField: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("("), parsimmon_umd_minExports.optWhitespace, q.field, parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string(")"), (_1, _2, field, _3, _4) => field), + lambdaField: q => parsimmon_umd_minExports.seqMap(q.identifier + .sepBy(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)) + .wrap(parsimmon_umd_minExports.string("(").trim(parsimmon_umd_minExports.optWhitespace), parsimmon_umd_minExports.string(")").trim(parsimmon_umd_minExports.optWhitespace)), parsimmon_umd_minExports.string("=>").trim(parsimmon_umd_minExports.optWhitespace), q.field, (ident, _ignore, value) => { + return { type: "lambda", arguments: ident, value }; + }), + dotPostfix: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("."), q.identifier, (_, field) => { + return { type: "dot", field: field }; + }), + indexPostfix: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("["), parsimmon_umd_minExports.optWhitespace, q.field, parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string("]"), (_, _2, field, _3, _4) => { + return { type: "index", field }; + }), + functionPostfix: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("("), parsimmon_umd_minExports.optWhitespace, q.field.sepBy(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)), parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string(")"), (_, _1, fields, _2, _3) => { + return { type: "function", fields }; + }), + // The precedence hierarchy of operators - multiply/divide, add/subtract, compare, and then boolean operations. + binaryMulDivField: q => createBinaryParser(q.indexField, q.binaryMulDiv, Fields.binaryOp), + binaryPlusMinusField: q => createBinaryParser(q.binaryMulDivField, q.binaryPlusMinus, Fields.binaryOp), + binaryCompareField: q => createBinaryParser(q.binaryPlusMinusField, q.binaryCompareOp, Fields.binaryOp), + binaryBooleanField: q => createBinaryParser(q.binaryCompareField, q.binaryBooleanOp, Fields.binaryOp), + binaryOpField: q => q.binaryBooleanField, + field: q => q.binaryOpField, +}); +/** + * Attempt to parse a field from the given text, returning a string error if the + * parse failed. + */ +function parseField(text) { + try { + return Result.success(EXPRESSION.field.tryParse(text)); + } + catch (error) { + return Result.failure("" + error); + } +} + +/** Parse inline fields and other embedded metadata in a line. */ +/** The wrapper characters that can be used to define an inline field. */ +const INLINE_FIELD_WRAPPERS = Object.freeze({ + "[": "]", + "(": ")", +}); +/** + * Find a matching closing bracket that occurs at or after `start`, respecting nesting and escapes. If found, + * returns the value contained within and the string index after the end of the value. + */ +function findClosing(line, start, open, close) { + let nesting = 0; + let escaped = false; + for (let index = start; index < line.length; index++) { + let char = line.charAt(index); + // Allows for double escapes like '\\' to be rendered normally. + if (char == "\\") { + escaped = !escaped; + continue; + } + // If escaped, ignore the next character for computing nesting, regardless of what it is. + if (escaped) { + escaped = false; + continue; + } + if (char == open) + nesting++; + else if (char == close) + nesting--; + // Only occurs if we are on a close character and there is no more nesting. + if (nesting < 0) + return { value: line.substring(start, index).trim(), endIndex: index + 1 }; + escaped = false; + } + return undefined; +} +/** Find the '::' separator in an inline field. */ +function findSeparator(line, start) { + let sep = line.indexOf("::", start); + if (sep < 0) + return undefined; + return { key: line.substring(start, sep).trim(), valueIndex: sep + 2 }; +} +/** Try to completely parse an inline field starting at the given position. Assumes `start` is on a wrapping character. */ +function findSpecificInlineField(line, start) { + let open = line.charAt(start); + let key = findSeparator(line, start + 1); + if (key === undefined) + return undefined; + // Fail the match if we find any separator characters (not allowed in keys). + for (let sep of Object.keys(INLINE_FIELD_WRAPPERS).concat(Object.values(INLINE_FIELD_WRAPPERS))) { + if (key.key.includes(sep)) + return undefined; + } + let value = findClosing(line, key.valueIndex, open, INLINE_FIELD_WRAPPERS[open]); + if (value === undefined) + return undefined; + return { + key: key.key, + value: value.value, + start: start, + startValue: key.valueIndex, + end: value.endIndex, + wrapping: open, + }; +} +/** Parse a textual inline field value into something we can work with. */ +function parseInlineValue(value) { + // Empty inline values (i.e., no text) should map to null to match long-term Dataview semantics. + // Null is also a more universal type to deal with than strings, since all functions accept nulls. + if (value.trim() == "") + return null; + // The stripped literal field parser understands all of the non-array/non-object fields and can parse them for us. + // Inline field objects are not currently supported; inline array objects have to be handled by the parser + // separately. + let inline = EXPRESSION.inlineField.parse(value); + if (inline.status) + return inline.value; + else + return value; +} +/** Extracts inline fields of the form '[key:: value]' from a line of text. This is done in a relatively + * "robust" way to avoid failing due to bad nesting or other interfering Markdown symbols: + * + * - Look for any wrappers ('[' and '(') in the line, trying to parse whatever comes after it as an inline key::. + * - If successful, scan until you find a matching end bracket, and parse whatever remains as an inline value. + */ +function extractInlineFields(line, includeTaskFields = false) { + let fields = []; + for (let wrapper of Object.keys(INLINE_FIELD_WRAPPERS)) { + let foundIndex = line.indexOf(wrapper); + while (foundIndex >= 0) { + let parsedField = findSpecificInlineField(line, foundIndex); + if (!parsedField) { + foundIndex = line.indexOf(wrapper, foundIndex + 1); + continue; + } + fields.push(parsedField); + foundIndex = line.indexOf(wrapper, parsedField.end); + } + } + if (includeTaskFields) + fields = fields.concat(extractSpecialTaskFields(line)); + fields.sort((a, b) => a.start - b.start); + let filteredFields = []; + for (let i = 0; i < fields.length; i++) { + if (i == 0 || filteredFields[filteredFields.length - 1].end < fields[i].start) { + filteredFields.push(fields[i]); + } + } + return filteredFields; +} +/** Validates that a raw field name has a valid form. */ +const FULL_LINE_KEY_PART = parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regexp(new RegExp(emojiRegex(), "u")), parsimmon_umd_minExports.regexp(/[0-9\p{Letter}\w\s_/-]+/u)) + .many() + .map(parts => parts.join("")); +parsimmon_umd_minExports.regexp(/[^0-9\w\p{Letter}]*/u) + .then(FULL_LINE_KEY_PART) + .skip(parsimmon_umd_minExports.regexp(/[_\*~`]*/u)); +const CREATED_DATE_REGEX = /\u{2795}\s*(\d{4}-\d{2}-\d{2})/u; +const DUE_DATE_REGEX = /(?:\u{1F4C5}|\u{1F4C6}|\u{1F5D3}\u{FE0F}?)\s*(\d{4}-\d{2}-\d{2})/u; +const DONE_DATE_REGEX = /\u{2705}\s*(\d{4}-\d{2}-\d{2})/u; +const SCHEDULED_DATE_REGEX = /[\u{23F3}\u{231B}]\s*(\d{4}-\d{2}-\d{2})/u; +const START_DATE_REGEX = /\u{1F6EB}\s*(\d{4}-\d{2}-\d{2})/u; +const EMOJI_REGEXES = [ + { regex: CREATED_DATE_REGEX, key: "created" }, + { regex: START_DATE_REGEX, key: "start" }, + { regex: SCHEDULED_DATE_REGEX, key: "scheduled" }, + { regex: DUE_DATE_REGEX, key: "due" }, + { regex: DONE_DATE_REGEX, key: "completion" }, +]; +/** Parse special completed/due/done task fields which are marked via emoji. */ +function extractSpecialTaskFields(line) { + let results = []; + for (let { regex, key } of EMOJI_REGEXES) { + const match = regex.exec(line); + if (!match) + continue; + results.push({ + key, + value: match[1], + start: match.index, + startValue: match.index + 1, + end: match.index + match[0].length, + wrapping: "emoji-shorthand", + }); + } + return results; +} +/** Sets or replaces the value of an inline field; if the value is 'undefined', deletes the key. */ +function setInlineField(source, key, value) { + let existing = extractInlineFields(source); + let existingKeys = existing.filter(f => f.key == key); + // Don't do anything if there are duplicate keys OR the key already doesn't exist. + if (existingKeys.length > 2 || (existingKeys.length == 0 && !value)) + return source; + let existingKey = existingKeys[0]; + let annotation = value ? `[${key}:: ${value}]` : ""; + if (existingKey) { + let prefix = source.substring(0, existingKey.start); + let suffix = source.substring(existingKey.end); + if (annotation) + return `${prefix}${annotation}${suffix}`; + else + return `${prefix}${suffix.trimStart()}`; + } + else if (annotation) { + return `${source.trimEnd()} ${annotation}`; + } + return source; +} +function setEmojiShorthandCompletionField(source, value) { + const existing = extractInlineFields(source, true); + const existingKeys = existing.filter(f => f.key === "completion" && f.wrapping === "emoji-shorthand"); + // Don't do anything if there are duplicate keys OR the key already doesn't exist. + if (existingKeys.length > 2 || (existingKeys.length == 0 && !value)) + return source; + /* No wrapper, add own spacing at start */ + const annotation = value ? ` ✅ ${value}` : ""; + let existingKey = existingKeys[0]; + if (existingKey) { + const prefix = source.substring(0, existingKey.start); + const suffix = source.substring(existingKey.end); + return `${prefix.trimEnd()}${annotation}${suffix}`; + } + else { + return `${source.trimEnd()}${annotation}`; + } +} + +/** All extracted markdown file metadata obtained from a file. */ +class PageMetadata { + /** The path this file exists at. */ + path; + /** Obsidian-provided date this page was created. */ + ctime; + /** Obsidian-provided date this page was modified. */ + mtime; + /** Obsidian-provided size of this page in bytes. */ + size; + /** The day associated with this page, if relevant. */ + day; + /** The first H1/H2 header in the file. May not exist. */ + title; + /** All of the fields contained in this markdown file - both frontmatter AND in-file links. */ + fields; + /** All of the exact tags (prefixed with '#') in this file overall. */ + tags; + /** All of the aliases defined for this file. */ + aliases; + /** All OUTGOING links (including embeds, header + block links) in this file. */ + links; + /** All list items contained within this page. Filter for tasks to get just tasks. */ + lists; + /** The raw frontmatter for this document. */ + frontmatter; + constructor(path, init) { + this.path = path; + this.fields = new Map(); + this.frontmatter = {}; + this.tags = new Set(); + this.aliases = new Set(); + this.links = []; + Object.assign(this, init); + this.lists = (this.lists || []).map(l => new ListItem$1(l)); + } + /** Canonicalize raw links and other data in partial data with normalizers, returning a completed object. */ + static canonicalize(data, linkNormalizer) { + // Mutate the data for now, which is probably a bad idea but... all well. + if (data.frontmatter) { + data.frontmatter = Values.mapLeaves(data.frontmatter, t => Values.isLink(t) ? linkNormalizer(t) : t); + } + if (data.fields) { + for (let [key, value] of data.fields.entries()) { + data.fields.set(key, Values.mapLeaves(value, t => (Values.isLink(t) ? linkNormalizer(t) : t))); + } + } + if (data.lists) { + for (let item of data.lists) { + for (let [key, value] of item.fields.entries()) { + item.fields.set(key, value.map(x => Values.mapLeaves(x, t => (Values.isLink(t) ? linkNormalizer(t) : t)))); + } + } + } + if (data.links) { + data.links = data.links.map(l => linkNormalizer(l)); + } + // This is pretty ugly, but it's not possible to normalize on the worker thread that does parsing. + // The best way to improve this is to instead just canonicalize the entire data object; I can try to + // optimize `Values.mapLeaves` to only mutate if it actually changes things. + return new PageMetadata(data.path, data); + } + /** The name (based on path) of this file. */ + name() { + return getFileTitle(this.path); + } + /** The containing folder (based on path) of this file. */ + folder() { + return getParentFolder(this.path); + } + /** The extension of this file (likely 'md'). */ + extension() { + return getExtension(this.path); + } + /** Return a set of tags AND all of their parent tags (so #hello/yes would become #hello, #hello/yes). */ + fullTags() { + let result = new Set(); + for (let tag of this.tags) { + for (let subtag of extractSubtags(tag)) + result.add(subtag); + } + return result; + } + /** Convert all links in this file to file links. */ + fileLinks() { + // We want to make them distinct, but where links are not raw links we + // now keep the additional metadata. + let distinctLinks = new Set(this.links); + return Array.from(distinctLinks); + } + /** Map this metadata to a full object; uses the index for additional data lookups. */ + serialize(index, cache) { + // Convert list items via the canonicalization cache. + let realCache = cache ?? new ListSerializationCache(this.lists); + let result = { + file: { + path: this.path, + folder: this.folder(), + name: this.name(), + link: Link.file(this.path), + outlinks: this.fileLinks(), + inlinks: Array.from(index.links.getInverse(this.path)).map(l => Link.file(l)), + etags: Array.from(this.tags), + tags: Array.from(this.fullTags()), + aliases: Array.from(this.aliases), + lists: this.lists.map(l => realCache.get(l.line)), + tasks: this.lists.filter(l => !!l.task).map(l => realCache.get(l.line)), + ctime: this.ctime, + cday: stripTime(this.ctime), + mtime: this.mtime, + mday: stripTime(this.mtime), + size: this.size, + starred: index.starred.starred(this.path), + frontmatter: Values.deepCopy(this.frontmatter), + ext: this.extension(), + }, + }; + // Add the current day if present. + if (this.day) + result.file.day = this.day; + // Then append the computed fields. + for (let [key, value] of this.fields.entries()) { + if (key in result) + continue; // Don't allow fields to override existing keys. + result[key] = value; + } + return result; + } +} +/** A list item inside of a list. */ +class ListItem$1 { + /** The symbol ('*', '-', '1.') used to define this list item. */ + symbol; + /** A link which points to this task, or to the closest block that this task is contained in. */ + link; + /** A link to the section that contains this list element; could be a file if this is not in a section. */ + section; + /** The text of this list item. This may be multiple lines of markdown. */ + text; + /** The line that this list item starts on in the file. */ + line; + /** The number of lines that define this list item. */ + lineCount; + /** The line number for the first list item in the list this item belongs to. */ + list; + /** Any links contained within this list item. */ + links; + /** The tags contained within this list item. */ + tags; + /** The raw Obsidian-provided position for where this task is. */ + position; + /** The line number of the parent list item, if present; if this is undefined, this is a root item. */ + parent; + /** The line numbers of children of this list item. */ + children; + /** The block ID for this item, if one is present. */ + blockId; + /** Any fields defined in this list item. For tasks, this includes fields underneath the task. */ + fields; + task; + constructor(init) { + Object.assign(this, init); + this.fields = this.fields || new Map(); + this.tags = this.tags || new Set(); + this.children = this.children || []; + this.links = this.links || []; + } + id() { + return `${this.file().path}-${this.line}`; + } + file() { + return this.link.toFile(); + } + markdown() { + if (this.task) + return `${this.symbol} [${this.task.completed ? "x" : " "}] ${this.text}`; + else + return `${this.symbol} ${this.text}`; + } + created() { + return (this.fields.get("created") ?? this.fields.get("ctime") ?? this.fields.get("cday"))?.[0]; + } + due() { + return (this.fields.get("due") ?? this.fields.get("duetime") ?? this.fields.get("dueday"))?.[0]; + } + completed() { + return (this.fields.get("completed") ?? + this.fields.get("completion") ?? + this.fields.get("comptime") ?? + this.fields.get("compday"))?.[0]; + } + start() { + return this.fields.get("start")?.[0]; + } + scheduled() { + return this.fields.get("scheduled")?.[0]; + } + /** Create an API-friendly copy of this list item. De-duplication is done via the provided cache. */ + serialize(cache) { + // Map children to their serialized/de-duplicated equivalents right away. + let children = this.children.map(l => cache.get(l)).filter((l) => l !== undefined); + let result = { + symbol: this.symbol, + link: this.link, + section: this.section, + text: this.text, + tags: Array.from(this.tags), + line: this.line, + lineCount: this.lineCount, + list: this.list, + outlinks: Array.from(this.links), + path: this.link.path, + children: children, + task: !!this.task, + annotated: this.fields.size > 0, + position: Values.deepCopy(this.position), + subtasks: children, + real: !!this.task, + header: this.section, // @deprecated, use 'item.section' instead. + }; + if (this.parent || this.parent === 0) + result.parent = this.parent; + if (this.blockId) + result.blockId = this.blockId; + addFields(this.fields, result); + if (this.task) { + result.status = this.task.status; + result.checked = this.task.checked; + result.completed = this.task.completed; + result.fullyCompleted = this.task.fullyCompleted; + let created = this.created(), due = this.due(), completed = this.completed(), start = this.start(), scheduled = this.scheduled(); + if (created) + result.created = Values.deepCopy(created); + if (due) + result.due = Values.deepCopy(due); + if (completed) + result.completion = Values.deepCopy(completed); + if (start) + result.start = Values.deepCopy(start); + if (scheduled) + result.scheduled = Values.deepCopy(scheduled); + } + return result; + } +} +////////////////////////////////////////// +// Conversion / Serialization Utilities // +////////////////////////////////////////// +/** De-duplicates list items across section metadata and page metadata. */ +class ListSerializationCache { + listItems; + cache; + seen; + constructor(listItems) { + this.listItems = {}; + this.cache = {}; + this.seen = new Set(); + for (let item of listItems) + this.listItems[item.line] = item; + } + get(lineno) { + if (lineno in this.cache) + return this.cache[lineno]; + else if (this.seen.has(lineno)) { + console.log(`Dataview: Encountered a circular list (line number ${lineno}; children ${this.listItems[lineno].children.join(", ")})`); + return undefined; + } + this.seen.add(lineno); + let result = this.listItems[lineno].serialize(this); + this.cache[lineno] = result; + return result; + } +} +function addFields(fields, target) { + for (let [key, values] of fields.entries()) { + if (key in target) + continue; + target[key] = values.length == 1 ? values[0] : values; + } + return target; +} + +/** Importer for markdown documents. */ +// TODO: Consider using an actual parser in lieu of a more expensive regex. +const LIST_ITEM_REGEX = /^[\s>]*(\d+\.|\d+\)|\*|-|\+)\s*(\[.{0,1}\])?\s*(.*)$/mu; +/** Recursively convert frontmatter into fields. We have to dance around YAML structure. */ +function parseFrontmatter(value) { + if (value == null) { + return null; + } + else if (typeof value === "object") { + if (Array.isArray(value)) { + let result = []; + for (let child of value) { + result.push(parseFrontmatter(child)); + } + return result; + } + else if (value instanceof Date) { + let dateParse = DateTime.fromJSDate(value); + return dateParse; + } + else { + let object = value; + let result = {}; + for (let key in object) { + result[key] = parseFrontmatter(object[key]); + } + return result; + } + } + else if (typeof value === "number") { + return value; + } + else if (typeof value === "boolean") { + return value; + } + else if (typeof value === "string") { + let dateParse = EXPRESSION.date.parse(value); + if (dateParse.status) + return dateParse.value; + let durationParse = EXPRESSION.duration.parse(value); + if (durationParse.status) + return durationParse.value; + let linkParse = EXPRESSION.embedLink.parse(value); + if (linkParse.status) + return linkParse.value; + return value; + } + // Backup if we don't understand the type. + return null; +} + +/** Parse a CSV file into a collection of data rows. */ +function parseCsv(content) { + let parsed = papaparse_minExports.parse(content, { + header: true, + skipEmptyLines: true, + comments: "#", + dynamicTyping: true, + }); + let rows = []; + for (let parsedRow of parsed.data) { + let fields = parseFrontmatter(parsedRow); + let result = {}; + for (let [key, value] of Object.entries(fields)) { + result[key] = value; + result[canonicalizeVarName(key)] = value; + } + rows.push(result); + } + return rows; +} + +/** Simplifies passing dataview values across the JS web worker barrier. */ +var Transferable; +(function (Transferable) { + /** Convert a literal value to a serializer-friendly transferable value. */ + function transferable(value) { + // Handle simple universal types first. + if (value instanceof Map) { + let copied = new Map(); + for (let [key, val] of value.entries()) + copied.set(transferable(key), transferable(val)); + return copied; + } + else if (value instanceof Set) { + let copied = new Set(); + for (let val of value) + copied.add(transferable(val)); + return copied; + } + let wrapped = Values.wrapValue(value); + if (wrapped === undefined) + throw Error("Unrecognized transferable value: " + value); + switch (wrapped.type) { + case "null": + case "number": + case "string": + case "boolean": + return wrapped.value; + case "date": + return { + "___transfer-type": "date", + value: transferable(wrapped.value.toObject()), + options: { + zone: wrapped.value.zone.equals(SystemZone.instance) ? undefined : wrapped.value.zoneName, + }, + }; + case "duration": + return { "___transfer-type": "duration", value: transferable(wrapped.value.toObject()) }; + case "array": + return wrapped.value.map(v => transferable(v)); + case "link": + return { "___transfer-type": "link", value: transferable(wrapped.value.toObject()) }; + case "object": + let result = {}; + for (let [key, value] of Object.entries(wrapped.value)) + result[key] = transferable(value); + return result; + } + } + Transferable.transferable = transferable; + /** Convert a transferable value back to a literal value we can work with. */ + function value(transferable) { + if (transferable === null) { + return null; + } + else if (transferable === undefined) { + return undefined; + } + else if (transferable instanceof Map) { + let real = new Map(); + for (let [key, val] of transferable.entries()) + real.set(value(key), value(val)); + return real; + } + else if (transferable instanceof Set) { + let real = new Set(); + for (let val of transferable) + real.add(value(val)); + return real; + } + else if (Array.isArray(transferable)) { + return transferable.map(v => value(v)); + } + else if (typeof transferable === "object") { + if ("___transfer-type" in transferable) { + switch (transferable["___transfer-type"]) { + case "date": + let dateOpts = value(transferable.options); + let dateData = value(transferable.value); + return DateTime.fromObject(dateData, { zone: dateOpts.zone }); + case "duration": + return Duration.fromObject(value(transferable.value)); + case "link": + return Link.fromObject(value(transferable.value)); + default: + throw Error(`Unrecognized transfer type '${transferable["___transfer-type"]}'`); + } + } + let result = {}; + for (let [key, val] of Object.entries(transferable)) + result[key] = value(val); + return result; + } + return transferable; + } + Transferable.value = value; +})(Transferable || (Transferable = {})); + +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 localforage$1 = {exports: {}}; + +/*! + localForage -- Offline Storage, Improved + Version 1.10.0 + https://localforage.github.io/localForage + (c) 2013-2017 Mozilla, Apache License 2.0 +*/ +localforage$1.exports; + +(function (module, exports) { + (function(f){{module.exports=f();}})(function(){return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof commonjsRequire=="function"&&commonjsRequire;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw (f.code="MODULE_NOT_FOUND", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r);}return n[o].exports}var i=typeof commonjsRequire=="function"&&commonjsRequire;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){ + (function (global){ + var Mutation = global.MutationObserver || global.WebKitMutationObserver; + + var scheduleDrain; + + { + if (Mutation) { + var called = 0; + var observer = new Mutation(nextTick); + var element = global.document.createTextNode(''); + observer.observe(element, { + characterData: true + }); + scheduleDrain = function () { + element.data = (called = ++called % 2); + }; + } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') { + var channel = new global.MessageChannel(); + channel.port1.onmessage = nextTick; + scheduleDrain = function () { + channel.port2.postMessage(0); + }; + } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) { + scheduleDrain = function () { + + // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted + // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called. + var scriptEl = global.document.createElement('script'); + scriptEl.onreadystatechange = function () { + nextTick(); + + scriptEl.onreadystatechange = null; + scriptEl.parentNode.removeChild(scriptEl); + scriptEl = null; + }; + global.document.documentElement.appendChild(scriptEl); + }; + } else { + scheduleDrain = function () { + setTimeout(nextTick, 0); + }; + } + } + + var draining; + var queue = []; + //named nextTick for less confusing stack traces + function nextTick() { + draining = true; + var i, oldQueue; + var len = queue.length; + while (len) { + oldQueue = queue; + queue = []; + i = -1; + while (++i < len) { + oldQueue[i](); + } + len = queue.length; + } + draining = false; + } + + module.exports = immediate; + function immediate(task) { + if (queue.push(task) === 1 && !draining) { + scheduleDrain(); + } + } + + }).call(this,typeof commonjsGlobal !== "undefined" ? commonjsGlobal : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}); + },{}],2:[function(_dereq_,module,exports){ + var immediate = _dereq_(1); + + /* istanbul ignore next */ + function INTERNAL() {} + + var handlers = {}; + + var REJECTED = ['REJECTED']; + var FULFILLED = ['FULFILLED']; + var PENDING = ['PENDING']; + + module.exports = Promise; + + function Promise(resolver) { + if (typeof resolver !== 'function') { + throw new TypeError('resolver must be a function'); + } + this.state = PENDING; + this.queue = []; + this.outcome = void 0; + if (resolver !== INTERNAL) { + safelyResolveThenable(this, resolver); + } + } + + Promise.prototype["catch"] = function (onRejected) { + return this.then(null, onRejected); + }; + Promise.prototype.then = function (onFulfilled, onRejected) { + if (typeof onFulfilled !== 'function' && this.state === FULFILLED || + typeof onRejected !== 'function' && this.state === REJECTED) { + return this; + } + var promise = new this.constructor(INTERNAL); + if (this.state !== PENDING) { + var resolver = this.state === FULFILLED ? onFulfilled : onRejected; + unwrap(promise, resolver, this.outcome); + } else { + this.queue.push(new QueueItem(promise, onFulfilled, onRejected)); + } + + return promise; + }; + function QueueItem(promise, onFulfilled, onRejected) { + this.promise = promise; + if (typeof onFulfilled === 'function') { + this.onFulfilled = onFulfilled; + this.callFulfilled = this.otherCallFulfilled; + } + if (typeof onRejected === 'function') { + this.onRejected = onRejected; + this.callRejected = this.otherCallRejected; + } + } + QueueItem.prototype.callFulfilled = function (value) { + handlers.resolve(this.promise, value); + }; + QueueItem.prototype.otherCallFulfilled = function (value) { + unwrap(this.promise, this.onFulfilled, value); + }; + QueueItem.prototype.callRejected = function (value) { + handlers.reject(this.promise, value); + }; + QueueItem.prototype.otherCallRejected = function (value) { + unwrap(this.promise, this.onRejected, value); + }; + + function unwrap(promise, func, value) { + immediate(function () { + var returnValue; + try { + returnValue = func(value); + } catch (e) { + return handlers.reject(promise, e); + } + if (returnValue === promise) { + handlers.reject(promise, new TypeError('Cannot resolve promise with itself')); + } else { + handlers.resolve(promise, returnValue); + } + }); + } + + handlers.resolve = function (self, value) { + var result = tryCatch(getThen, value); + if (result.status === 'error') { + return handlers.reject(self, result.value); + } + var thenable = result.value; + + if (thenable) { + safelyResolveThenable(self, thenable); + } else { + self.state = FULFILLED; + self.outcome = value; + var i = -1; + var len = self.queue.length; + while (++i < len) { + self.queue[i].callFulfilled(value); + } + } + return self; + }; + handlers.reject = function (self, error) { + self.state = REJECTED; + self.outcome = error; + var i = -1; + var len = self.queue.length; + while (++i < len) { + self.queue[i].callRejected(error); + } + return self; + }; + + function getThen(obj) { + // Make sure we only access the accessor once as required by the spec + var then = obj && obj.then; + if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') { + return function appyThen() { + then.apply(obj, arguments); + }; + } + } + + function safelyResolveThenable(self, thenable) { + // Either fulfill, reject or reject with error + var called = false; + function onError(value) { + if (called) { + return; + } + called = true; + handlers.reject(self, value); + } + + function onSuccess(value) { + if (called) { + return; + } + called = true; + handlers.resolve(self, value); + } + + function tryToUnwrap() { + thenable(onSuccess, onError); + } + + var result = tryCatch(tryToUnwrap); + if (result.status === 'error') { + onError(result.value); + } + } + + function tryCatch(func, value) { + var out = {}; + try { + out.value = func(value); + out.status = 'success'; + } catch (e) { + out.status = 'error'; + out.value = e; + } + return out; + } + + Promise.resolve = resolve; + function resolve(value) { + if (value instanceof this) { + return value; + } + return handlers.resolve(new this(INTERNAL), value); + } + + Promise.reject = reject; + function reject(reason) { + var promise = new this(INTERNAL); + return handlers.reject(promise, reason); + } + + Promise.all = all; + function all(iterable) { + var self = this; + if (Object.prototype.toString.call(iterable) !== '[object Array]') { + return this.reject(new TypeError('must be an array')); + } + + var len = iterable.length; + var called = false; + if (!len) { + return this.resolve([]); + } + + var values = new Array(len); + var resolved = 0; + var i = -1; + var promise = new this(INTERNAL); + + while (++i < len) { + allResolver(iterable[i], i); + } + return promise; + function allResolver(value, i) { + self.resolve(value).then(resolveFromAll, function (error) { + if (!called) { + called = true; + handlers.reject(promise, error); + } + }); + function resolveFromAll(outValue) { + values[i] = outValue; + if (++resolved === len && !called) { + called = true; + handlers.resolve(promise, values); + } + } + } + } + + Promise.race = race; + function race(iterable) { + var self = this; + if (Object.prototype.toString.call(iterable) !== '[object Array]') { + return this.reject(new TypeError('must be an array')); + } + + var len = iterable.length; + var called = false; + if (!len) { + return this.resolve([]); + } + + var i = -1; + var promise = new this(INTERNAL); + + while (++i < len) { + resolver(iterable[i]); + } + return promise; + function resolver(value) { + self.resolve(value).then(function (response) { + if (!called) { + called = true; + handlers.resolve(promise, response); + } + }, function (error) { + if (!called) { + called = true; + handlers.reject(promise, error); + } + }); + } + } + + },{"1":1}],3:[function(_dereq_,module,exports){ + (function (global){ + if (typeof global.Promise !== 'function') { + global.Promise = _dereq_(2); + } + + }).call(this,typeof commonjsGlobal !== "undefined" ? commonjsGlobal : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}); + },{"2":2}],4:[function(_dereq_,module,exports){ + + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + + function getIDB() { + /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */ + try { + if (typeof indexedDB !== 'undefined') { + return indexedDB; + } + if (typeof webkitIndexedDB !== 'undefined') { + return webkitIndexedDB; + } + if (typeof mozIndexedDB !== 'undefined') { + return mozIndexedDB; + } + if (typeof OIndexedDB !== 'undefined') { + return OIndexedDB; + } + if (typeof msIndexedDB !== 'undefined') { + return msIndexedDB; + } + } catch (e) { + return; + } + } + + var idb = getIDB(); + + function isIndexedDBValid() { + try { + // Initialize IndexedDB; fall back to vendor-prefixed versions + // if needed. + if (!idb || !idb.open) { + return false; + } + // We mimic PouchDB here; + // + // We test for openDatabase because IE Mobile identifies itself + // as Safari. Oh the lulz... + var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform); + + var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1; + + // Safari <10.1 does not meet our requirements for IDB support + // (see: https://github.com/pouchdb/pouchdb/issues/5572). + // Safari 10.1 shipped with fetch, we can use that to detect it. + // Note: this creates issues with `window.fetch` polyfills and + // overrides; see: + // https://github.com/localForage/localForage/issues/856 + return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' && + // some outdated implementations of IDB that appear on Samsung + // and HTC Android devices <4.4 are missing IDBKeyRange + // See: https://github.com/mozilla/localForage/issues/128 + // See: https://github.com/mozilla/localForage/issues/272 + typeof IDBKeyRange !== 'undefined'; + } catch (e) { + return false; + } + } + + // Abstracts constructing a Blob object, so it also works in older + // browsers that don't support the native Blob constructor. (i.e. + // old QtWebKit versions, at least). + // Abstracts constructing a Blob object, so it also works in older + // browsers that don't support the native Blob constructor. (i.e. + // old QtWebKit versions, at least). + function createBlob(parts, properties) { + /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */ + parts = parts || []; + properties = properties || {}; + try { + return new Blob(parts, properties); + } catch (e) { + if (e.name !== 'TypeError') { + throw e; + } + var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder; + var builder = new Builder(); + for (var i = 0; i < parts.length; i += 1) { + builder.append(parts[i]); + } + return builder.getBlob(properties.type); + } + } + + // This is CommonJS because lie is an external dependency, so Rollup + // can just ignore it. + if (typeof Promise === 'undefined') { + // In the "nopromises" build this will just throw if you don't have + // a global promise object, but it would throw anyway later. + _dereq_(3); + } + var Promise$1 = Promise; + + function executeCallback(promise, callback) { + if (callback) { + promise.then(function (result) { + callback(null, result); + }, function (error) { + callback(error); + }); + } + } + + function executeTwoCallbacks(promise, callback, errorCallback) { + if (typeof callback === 'function') { + promise.then(callback); + } + + if (typeof errorCallback === 'function') { + promise["catch"](errorCallback); + } + } + + function normalizeKey(key) { + // Cast the key to a string, as that's all we can set as a key. + if (typeof key !== 'string') { + console.warn(key + ' used as a key, but it is not a string.'); + key = String(key); + } + + return key; + } + + function getCallback() { + if (arguments.length && typeof arguments[arguments.length - 1] === 'function') { + return arguments[arguments.length - 1]; + } + } + + // Some code originally from async_storage.js in + // [Gaia](https://github.com/mozilla-b2g/gaia). + + var DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support'; + var supportsBlobs = void 0; + var dbContexts = {}; + var toString = Object.prototype.toString; + + // Transaction Modes + var READ_ONLY = 'readonly'; + var READ_WRITE = 'readwrite'; + + // Transform a binary string to an array buffer, because otherwise + // weird stuff happens when you try to work with the binary string directly. + // It is known. + // From http://stackoverflow.com/questions/14967647/ (continues on next line) + // encode-decode-image-with-base64-breaks-image (2013-04-21) + function _binStringToArrayBuffer(bin) { + var length = bin.length; + var buf = new ArrayBuffer(length); + var arr = new Uint8Array(buf); + for (var i = 0; i < length; i++) { + arr[i] = bin.charCodeAt(i); + } + return buf; + } + + // + // Blobs are not supported in all versions of IndexedDB, notably + // Chrome <37 and Android <5. In those versions, storing a blob will throw. + // + // Various other blob bugs exist in Chrome v37-42 (inclusive). + // Detecting them is expensive and confusing to users, and Chrome 37-42 + // is at very low usage worldwide, so we do a hacky userAgent check instead. + // + // content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120 + // 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916 + // FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836 + // + // Code borrowed from PouchDB. See: + // https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js + // + function _checkBlobSupportWithoutCaching(idb) { + return new Promise$1(function (resolve) { + var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE); + var blob = createBlob(['']); + txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key'); + + txn.onabort = function (e) { + // If the transaction aborts now its due to not being able to + // write to the database, likely due to the disk being full + e.preventDefault(); + e.stopPropagation(); + resolve(false); + }; + + txn.oncomplete = function () { + var matchedChrome = navigator.userAgent.match(/Chrome\/(\d+)/); + var matchedEdge = navigator.userAgent.match(/Edge\//); + // MS Edge pretends to be Chrome 42: + // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx + resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43); + }; + })["catch"](function () { + return false; // error, so assume unsupported + }); + } + + function _checkBlobSupport(idb) { + if (typeof supportsBlobs === 'boolean') { + return Promise$1.resolve(supportsBlobs); + } + return _checkBlobSupportWithoutCaching(idb).then(function (value) { + supportsBlobs = value; + return supportsBlobs; + }); + } + + function _deferReadiness(dbInfo) { + var dbContext = dbContexts[dbInfo.name]; + + // Create a deferred object representing the current database operation. + var deferredOperation = {}; + + deferredOperation.promise = new Promise$1(function (resolve, reject) { + deferredOperation.resolve = resolve; + deferredOperation.reject = reject; + }); + + // Enqueue the deferred operation. + dbContext.deferredOperations.push(deferredOperation); + + // Chain its promise to the database readiness. + if (!dbContext.dbReady) { + dbContext.dbReady = deferredOperation.promise; + } else { + dbContext.dbReady = dbContext.dbReady.then(function () { + return deferredOperation.promise; + }); + } + } + + function _advanceReadiness(dbInfo) { + var dbContext = dbContexts[dbInfo.name]; + + // Dequeue a deferred operation. + var deferredOperation = dbContext.deferredOperations.pop(); + + // Resolve its promise (which is part of the database readiness + // chain of promises). + if (deferredOperation) { + deferredOperation.resolve(); + return deferredOperation.promise; + } + } + + function _rejectReadiness(dbInfo, err) { + var dbContext = dbContexts[dbInfo.name]; + + // Dequeue a deferred operation. + var deferredOperation = dbContext.deferredOperations.pop(); + + // Reject its promise (which is part of the database readiness + // chain of promises). + if (deferredOperation) { + deferredOperation.reject(err); + return deferredOperation.promise; + } + } + + function _getConnection(dbInfo, upgradeNeeded) { + return new Promise$1(function (resolve, reject) { + dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext(); + + if (dbInfo.db) { + if (upgradeNeeded) { + _deferReadiness(dbInfo); + dbInfo.db.close(); + } else { + return resolve(dbInfo.db); + } + } + + var dbArgs = [dbInfo.name]; + + if (upgradeNeeded) { + dbArgs.push(dbInfo.version); + } + + var openreq = idb.open.apply(idb, dbArgs); + + if (upgradeNeeded) { + openreq.onupgradeneeded = function (e) { + var db = openreq.result; + try { + db.createObjectStore(dbInfo.storeName); + if (e.oldVersion <= 1) { + // Added when support for blob shims was added + db.createObjectStore(DETECT_BLOB_SUPPORT_STORE); + } + } catch (ex) { + if (ex.name === 'ConstraintError') { + console.warn('The database "' + dbInfo.name + '"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage "' + dbInfo.storeName + '" already exists.'); + } else { + throw ex; + } + } + }; + } + + openreq.onerror = function (e) { + e.preventDefault(); + reject(openreq.error); + }; + + openreq.onsuccess = function () { + var db = openreq.result; + db.onversionchange = function (e) { + // Triggered when the database is modified (e.g. adding an objectStore) or + // deleted (even when initiated by other sessions in different tabs). + // Closing the connection here prevents those operations from being blocked. + // If the database is accessed again later by this instance, the connection + // will be reopened or the database recreated as needed. + e.target.close(); + }; + resolve(db); + _advanceReadiness(dbInfo); + }; + }); + } + + function _getOriginalConnection(dbInfo) { + return _getConnection(dbInfo, false); + } + + function _getUpgradedConnection(dbInfo) { + return _getConnection(dbInfo, true); + } + + function _isUpgradeNeeded(dbInfo, defaultVersion) { + if (!dbInfo.db) { + return true; + } + + var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName); + var isDowngrade = dbInfo.version < dbInfo.db.version; + var isUpgrade = dbInfo.version > dbInfo.db.version; + + if (isDowngrade) { + // If the version is not the default one + // then warn for impossible downgrade. + if (dbInfo.version !== defaultVersion) { + console.warn('The database "' + dbInfo.name + '"' + " can't be downgraded from version " + dbInfo.db.version + ' to version ' + dbInfo.version + '.'); + } + // Align the versions to prevent errors. + dbInfo.version = dbInfo.db.version; + } + + if (isUpgrade || isNewStore) { + // If the store is new then increment the version (if needed). + // This will trigger an "upgradeneeded" event which is required + // for creating a store. + if (isNewStore) { + var incVersion = dbInfo.db.version + 1; + if (incVersion > dbInfo.version) { + dbInfo.version = incVersion; + } + } + + return true; + } + + return false; + } + + // encode a blob for indexeddb engines that don't support blobs + function _encodeBlob(blob) { + return new Promise$1(function (resolve, reject) { + var reader = new FileReader(); + reader.onerror = reject; + reader.onloadend = function (e) { + var base64 = btoa(e.target.result || ''); + resolve({ + __local_forage_encoded_blob: true, + data: base64, + type: blob.type + }); + }; + reader.readAsBinaryString(blob); + }); + } + + // decode an encoded blob + function _decodeBlob(encodedBlob) { + var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data)); + return createBlob([arrayBuff], { type: encodedBlob.type }); + } + + // is this one of our fancy encoded blobs? + function _isEncodedBlob(value) { + return value && value.__local_forage_encoded_blob; + } + + // Specialize the default `ready()` function by making it dependent + // on the current database operations. Thus, the driver will be actually + // ready when it's been initialized (default) *and* there are no pending + // operations on the database (initiated by some other instances). + function _fullyReady(callback) { + var self = this; + + var promise = self._initReady().then(function () { + var dbContext = dbContexts[self._dbInfo.name]; + + if (dbContext && dbContext.dbReady) { + return dbContext.dbReady; + } + }); + + executeTwoCallbacks(promise, callback, callback); + return promise; + } + + // Try to establish a new db connection to replace the + // current one which is broken (i.e. experiencing + // InvalidStateError while creating a transaction). + function _tryReconnect(dbInfo) { + _deferReadiness(dbInfo); + + var dbContext = dbContexts[dbInfo.name]; + var forages = dbContext.forages; + + for (var i = 0; i < forages.length; i++) { + var forage = forages[i]; + if (forage._dbInfo.db) { + forage._dbInfo.db.close(); + forage._dbInfo.db = null; + } + } + dbInfo.db = null; + + return _getOriginalConnection(dbInfo).then(function (db) { + dbInfo.db = db; + if (_isUpgradeNeeded(dbInfo)) { + // Reopen the database for upgrading. + return _getUpgradedConnection(dbInfo); + } + return db; + }).then(function (db) { + // store the latest db reference + // in case the db was upgraded + dbInfo.db = dbContext.db = db; + for (var i = 0; i < forages.length; i++) { + forages[i]._dbInfo.db = db; + } + })["catch"](function (err) { + _rejectReadiness(dbInfo, err); + throw err; + }); + } + + // FF doesn't like Promises (micro-tasks) and IDDB store operations, + // so we have to do it with callbacks + function createTransaction(dbInfo, mode, callback, retries) { + if (retries === undefined) { + retries = 1; + } + + try { + var tx = dbInfo.db.transaction(dbInfo.storeName, mode); + callback(null, tx); + } catch (err) { + if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) { + return Promise$1.resolve().then(function () { + if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) { + // increase the db version, to create the new ObjectStore + if (dbInfo.db) { + dbInfo.version = dbInfo.db.version + 1; + } + // Reopen the database for upgrading. + return _getUpgradedConnection(dbInfo); + } + }).then(function () { + return _tryReconnect(dbInfo).then(function () { + createTransaction(dbInfo, mode, callback, retries - 1); + }); + })["catch"](callback); + } + + callback(err); + } + } + + function createDbContext() { + return { + // Running localForages sharing a database. + forages: [], + // Shared database. + db: null, + // Database readiness (promise). + dbReady: null, + // Deferred operations on the database. + deferredOperations: [] + }; + } + + // Open the IndexedDB database (automatically creates one if one didn't + // previously exist), using any options set in the config. + function _initStorage(options) { + var self = this; + var dbInfo = { + db: null + }; + + if (options) { + for (var i in options) { + dbInfo[i] = options[i]; + } + } + + // Get the current context of the database; + var dbContext = dbContexts[dbInfo.name]; + + // ...or create a new context. + if (!dbContext) { + dbContext = createDbContext(); + // Register the new context in the global container. + dbContexts[dbInfo.name] = dbContext; + } + + // Register itself as a running localForage in the current context. + dbContext.forages.push(self); + + // Replace the default `ready()` function with the specialized one. + if (!self._initReady) { + self._initReady = self.ready; + self.ready = _fullyReady; + } + + // Create an array of initialization states of the related localForages. + var initPromises = []; + + function ignoreErrors() { + // Don't handle errors here, + // just makes sure related localForages aren't pending. + return Promise$1.resolve(); + } + + for (var j = 0; j < dbContext.forages.length; j++) { + var forage = dbContext.forages[j]; + if (forage !== self) { + // Don't wait for itself... + initPromises.push(forage._initReady()["catch"](ignoreErrors)); + } + } + + // Take a snapshot of the related localForages. + var forages = dbContext.forages.slice(0); + + // Initialize the connection process only when + // all the related localForages aren't pending. + return Promise$1.all(initPromises).then(function () { + dbInfo.db = dbContext.db; + // Get the connection or open a new one without upgrade. + return _getOriginalConnection(dbInfo); + }).then(function (db) { + dbInfo.db = db; + if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) { + // Reopen the database for upgrading. + return _getUpgradedConnection(dbInfo); + } + return db; + }).then(function (db) { + dbInfo.db = dbContext.db = db; + self._dbInfo = dbInfo; + // Share the final connection amongst related localForages. + for (var k = 0; k < forages.length; k++) { + var forage = forages[k]; + if (forage !== self) { + // Self is already up-to-date. + forage._dbInfo.db = dbInfo.db; + forage._dbInfo.version = dbInfo.version; + } + } + }); + } + + function getItem(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.get(key); + + req.onsuccess = function () { + var value = req.result; + if (value === undefined) { + value = null; + } + if (_isEncodedBlob(value)) { + value = _decodeBlob(value); + } + resolve(value); + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + // Iterate over all items stored in database. + function iterate(iterator, callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.openCursor(); + var iterationNumber = 1; + + req.onsuccess = function () { + var cursor = req.result; + + if (cursor) { + var value = cursor.value; + if (_isEncodedBlob(value)) { + value = _decodeBlob(value); + } + var result = iterator(value, cursor.key, iterationNumber++); + + // when the iterator callback returns any + // (non-`undefined`) value, then we stop + // the iteration immediately + if (result !== void 0) { + resolve(result); + } else { + cursor["continue"](); + } + } else { + resolve(); + } + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + + return promise; + } + + function setItem(key, value, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + var dbInfo; + self.ready().then(function () { + dbInfo = self._dbInfo; + if (toString.call(value) === '[object Blob]') { + return _checkBlobSupport(dbInfo.db).then(function (blobSupport) { + if (blobSupport) { + return value; + } + return _encodeBlob(value); + }); + } + return value; + }).then(function (value) { + createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + + // The reason we don't _save_ null is because IE 10 does + // not support saving the `null` type in IndexedDB. How + // ironic, given the bug below! + // See: https://github.com/mozilla/localForage/issues/161 + if (value === null) { + value = undefined; + } + + var req = store.put(value, key); + + transaction.oncomplete = function () { + // Cast to undefined so the value passed to + // callback/promise is the same as what one would get out + // of `getItem()` later. This leads to some weirdness + // (setItem('foo', undefined) will return `null`), but + // it's not my fault localStorage is our baseline and that + // it's weird. + if (value === undefined) { + value = null; + } + + resolve(value); + }; + transaction.onabort = transaction.onerror = function () { + var err = req.error ? req.error : req.transaction.error; + reject(err); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function removeItem(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + // We use a Grunt task to make this safe for IE and some + // versions of Android (including those used by Cordova). + // Normally IE won't like `.delete()` and will insist on + // using `['delete']()`, but we have a build step that + // fixes this for us now. + var req = store["delete"](key); + transaction.oncomplete = function () { + resolve(); + }; + + transaction.onerror = function () { + reject(req.error); + }; + + // The request will be also be aborted if we've exceeded our storage + // space. + transaction.onabort = function () { + var err = req.error ? req.error : req.transaction.error; + reject(err); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function clear(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.clear(); + + transaction.oncomplete = function () { + resolve(); + }; + + transaction.onabort = transaction.onerror = function () { + var err = req.error ? req.error : req.transaction.error; + reject(err); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function length(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.count(); + + req.onsuccess = function () { + resolve(req.result); + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function key(n, callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + if (n < 0) { + resolve(null); + + return; + } + + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var advanced = false; + var req = store.openKeyCursor(); + + req.onsuccess = function () { + var cursor = req.result; + if (!cursor) { + // this means there weren't enough keys + resolve(null); + + return; + } + + if (n === 0) { + // We have the first key, return it if that's what they + // wanted. + resolve(cursor.key); + } else { + if (!advanced) { + // Otherwise, ask the cursor to skip ahead n + // records. + advanced = true; + cursor.advance(n); + } else { + // When we get here, we've got the nth key. + resolve(cursor.key); + } + } + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function keys(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.openKeyCursor(); + var keys = []; + + req.onsuccess = function () { + var cursor = req.result; + + if (!cursor) { + resolve(keys); + return; + } + + keys.push(cursor.key); + cursor["continue"](); + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function dropInstance(options, callback) { + callback = getCallback.apply(this, arguments); + + var currentConfig = this.config(); + options = typeof options !== 'function' && options || {}; + if (!options.name) { + options.name = options.name || currentConfig.name; + options.storeName = options.storeName || currentConfig.storeName; + } + + var self = this; + var promise; + if (!options.name) { + promise = Promise$1.reject('Invalid arguments'); + } else { + var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db; + + var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) { + var dbContext = dbContexts[options.name]; + var forages = dbContext.forages; + dbContext.db = db; + for (var i = 0; i < forages.length; i++) { + forages[i]._dbInfo.db = db; + } + return db; + }); + + if (!options.storeName) { + promise = dbPromise.then(function (db) { + _deferReadiness(options); + + var dbContext = dbContexts[options.name]; + var forages = dbContext.forages; + + db.close(); + for (var i = 0; i < forages.length; i++) { + var forage = forages[i]; + forage._dbInfo.db = null; + } + + var dropDBPromise = new Promise$1(function (resolve, reject) { + var req = idb.deleteDatabase(options.name); + + req.onerror = function () { + var db = req.result; + if (db) { + db.close(); + } + reject(req.error); + }; + + req.onblocked = function () { + // Closing all open connections in onversionchange handler should prevent this situation, but if + // we do get here, it just means the request remains pending - eventually it will succeed or error + console.warn('dropInstance blocked for database "' + options.name + '" until all open connections are closed'); + }; + + req.onsuccess = function () { + var db = req.result; + if (db) { + db.close(); + } + resolve(db); + }; + }); + + return dropDBPromise.then(function (db) { + dbContext.db = db; + for (var i = 0; i < forages.length; i++) { + var _forage = forages[i]; + _advanceReadiness(_forage._dbInfo); + } + })["catch"](function (err) { + (_rejectReadiness(options, err) || Promise$1.resolve())["catch"](function () {}); + throw err; + }); + }); + } else { + promise = dbPromise.then(function (db) { + if (!db.objectStoreNames.contains(options.storeName)) { + return; + } + + var newVersion = db.version + 1; + + _deferReadiness(options); + + var dbContext = dbContexts[options.name]; + var forages = dbContext.forages; + + db.close(); + for (var i = 0; i < forages.length; i++) { + var forage = forages[i]; + forage._dbInfo.db = null; + forage._dbInfo.version = newVersion; + } + + var dropObjectPromise = new Promise$1(function (resolve, reject) { + var req = idb.open(options.name, newVersion); + + req.onerror = function (err) { + var db = req.result; + db.close(); + reject(err); + }; + + req.onupgradeneeded = function () { + var db = req.result; + db.deleteObjectStore(options.storeName); + }; + + req.onsuccess = function () { + var db = req.result; + db.close(); + resolve(db); + }; + }); + + return dropObjectPromise.then(function (db) { + dbContext.db = db; + for (var j = 0; j < forages.length; j++) { + var _forage2 = forages[j]; + _forage2._dbInfo.db = db; + _advanceReadiness(_forage2._dbInfo); + } + })["catch"](function (err) { + (_rejectReadiness(options, err) || Promise$1.resolve())["catch"](function () {}); + throw err; + }); + }); + } + } + + executeCallback(promise, callback); + return promise; + } + + var asyncStorage = { + _driver: 'asyncStorage', + _initStorage: _initStorage, + _support: isIndexedDBValid(), + iterate: iterate, + getItem: getItem, + setItem: setItem, + removeItem: removeItem, + clear: clear, + length: length, + key: key, + keys: keys, + dropInstance: dropInstance + }; + + function isWebSQLValid() { + return typeof openDatabase === 'function'; + } + + // Sadly, the best way to save binary data in WebSQL/localStorage is serializing + // it to Base64, so this is how we store it to prevent very strange errors with less + // verbose ways of binary <-> string data storage. + var BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + + var BLOB_TYPE_PREFIX = '~~local_forage_type~'; + var BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/; + + var SERIALIZED_MARKER = '__lfsc__:'; + var SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length; + + // OMG the serializations! + var TYPE_ARRAYBUFFER = 'arbf'; + var TYPE_BLOB = 'blob'; + var TYPE_INT8ARRAY = 'si08'; + var TYPE_UINT8ARRAY = 'ui08'; + var TYPE_UINT8CLAMPEDARRAY = 'uic8'; + var TYPE_INT16ARRAY = 'si16'; + var TYPE_INT32ARRAY = 'si32'; + var TYPE_UINT16ARRAY = 'ur16'; + var TYPE_UINT32ARRAY = 'ui32'; + var TYPE_FLOAT32ARRAY = 'fl32'; + var TYPE_FLOAT64ARRAY = 'fl64'; + var TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length; + + var toString$1 = Object.prototype.toString; + + function stringToBuffer(serializedString) { + // Fill the string into a ArrayBuffer. + var bufferLength = serializedString.length * 0.75; + var len = serializedString.length; + var i; + var p = 0; + var encoded1, encoded2, encoded3, encoded4; + + if (serializedString[serializedString.length - 1] === '=') { + bufferLength--; + if (serializedString[serializedString.length - 2] === '=') { + bufferLength--; + } + } + + var buffer = new ArrayBuffer(bufferLength); + var bytes = new Uint8Array(buffer); + + for (i = 0; i < len; i += 4) { + encoded1 = BASE_CHARS.indexOf(serializedString[i]); + encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]); + encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]); + encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]); + + /*jslint bitwise: true */ + bytes[p++] = encoded1 << 2 | encoded2 >> 4; + bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; + bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; + } + return buffer; + } + + // Converts a buffer to a string to store, serialized, in the backend + // storage library. + function bufferToString(buffer) { + // base64-arraybuffer + var bytes = new Uint8Array(buffer); + var base64String = ''; + var i; + + for (i = 0; i < bytes.length; i += 3) { + /*jslint bitwise: true */ + base64String += BASE_CHARS[bytes[i] >> 2]; + base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4]; + base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6]; + base64String += BASE_CHARS[bytes[i + 2] & 63]; + } + + if (bytes.length % 3 === 2) { + base64String = base64String.substring(0, base64String.length - 1) + '='; + } else if (bytes.length % 3 === 1) { + base64String = base64String.substring(0, base64String.length - 2) + '=='; + } + + return base64String; + } + + // Serialize a value, afterwards executing a callback (which usually + // instructs the `setItem()` callback/promise to be executed). This is how + // we store binary data with localStorage. + function serialize(value, callback) { + var valueType = ''; + if (value) { + valueType = toString$1.call(value); + } + + // Cannot use `value instanceof ArrayBuffer` or such here, as these + // checks fail when running the tests using casper.js... + // + // TODO: See why those tests fail and use a better solution. + if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) { + // Convert binary arrays to a string and prefix the string with + // a special marker. + var buffer; + var marker = SERIALIZED_MARKER; + + if (value instanceof ArrayBuffer) { + buffer = value; + marker += TYPE_ARRAYBUFFER; + } else { + buffer = value.buffer; + + if (valueType === '[object Int8Array]') { + marker += TYPE_INT8ARRAY; + } else if (valueType === '[object Uint8Array]') { + marker += TYPE_UINT8ARRAY; + } else if (valueType === '[object Uint8ClampedArray]') { + marker += TYPE_UINT8CLAMPEDARRAY; + } else if (valueType === '[object Int16Array]') { + marker += TYPE_INT16ARRAY; + } else if (valueType === '[object Uint16Array]') { + marker += TYPE_UINT16ARRAY; + } else if (valueType === '[object Int32Array]') { + marker += TYPE_INT32ARRAY; + } else if (valueType === '[object Uint32Array]') { + marker += TYPE_UINT32ARRAY; + } else if (valueType === '[object Float32Array]') { + marker += TYPE_FLOAT32ARRAY; + } else if (valueType === '[object Float64Array]') { + marker += TYPE_FLOAT64ARRAY; + } else { + callback(new Error('Failed to get type for BinaryArray')); + } + } + + callback(marker + bufferToString(buffer)); + } else if (valueType === '[object Blob]') { + // Conver the blob to a binaryArray and then to a string. + var fileReader = new FileReader(); + + fileReader.onload = function () { + // Backwards-compatible prefix for the blob type. + var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result); + + callback(SERIALIZED_MARKER + TYPE_BLOB + str); + }; + + fileReader.readAsArrayBuffer(value); + } else { + try { + callback(JSON.stringify(value)); + } catch (e) { + console.error("Couldn't convert value into a JSON string: ", value); + + callback(null, e); + } + } + } + + // Deserialize data we've inserted into a value column/field. We place + // special markers into our strings to mark them as encoded; this isn't + // as nice as a meta field, but it's the only sane thing we can do whilst + // keeping localStorage support intact. + // + // Oftentimes this will just deserialize JSON content, but if we have a + // special marker (SERIALIZED_MARKER, defined above), we will extract + // some kind of arraybuffer/binary data/typed array out of the string. + function deserialize(value) { + // If we haven't marked this string as being specially serialized (i.e. + // something other than serialized JSON), we can just return it and be + // done with it. + if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) { + return JSON.parse(value); + } + + // The following code deals with deserializing some kind of Blob or + // TypedArray. First we separate out the type of data we're dealing + // with from the data itself. + var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH); + var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH); + + var blobType; + // Backwards-compatible blob type serialization strategy. + // DBs created with older versions of localForage will simply not have the blob type. + if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) { + var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX); + blobType = matcher[1]; + serializedString = serializedString.substring(matcher[0].length); + } + var buffer = stringToBuffer(serializedString); + + // Return the right type based on the code/type set during + // serialization. + switch (type) { + case TYPE_ARRAYBUFFER: + return buffer; + case TYPE_BLOB: + return createBlob([buffer], { type: blobType }); + case TYPE_INT8ARRAY: + return new Int8Array(buffer); + case TYPE_UINT8ARRAY: + return new Uint8Array(buffer); + case TYPE_UINT8CLAMPEDARRAY: + return new Uint8ClampedArray(buffer); + case TYPE_INT16ARRAY: + return new Int16Array(buffer); + case TYPE_UINT16ARRAY: + return new Uint16Array(buffer); + case TYPE_INT32ARRAY: + return new Int32Array(buffer); + case TYPE_UINT32ARRAY: + return new Uint32Array(buffer); + case TYPE_FLOAT32ARRAY: + return new Float32Array(buffer); + case TYPE_FLOAT64ARRAY: + return new Float64Array(buffer); + default: + throw new Error('Unkown type: ' + type); + } + } + + var localforageSerializer = { + serialize: serialize, + deserialize: deserialize, + stringToBuffer: stringToBuffer, + bufferToString: bufferToString + }; + + /* + * Includes code from: + * + * base64-arraybuffer + * https://github.com/niklasvh/base64-arraybuffer + * + * Copyright (c) 2012 Niklas von Hertzen + * Licensed under the MIT license. + */ + + function createDbTable(t, dbInfo, callback, errorCallback) { + t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback); + } + + // Open the WebSQL database (automatically creates one if one didn't + // previously exist), using any options set in the config. + function _initStorage$1(options) { + var self = this; + var dbInfo = { + db: null + }; + + if (options) { + for (var i in options) { + dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i]; + } + } + + var dbInfoPromise = new Promise$1(function (resolve, reject) { + // Open the database; the openDatabase API will automatically + // create it for us if it doesn't exist. + try { + dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size); + } catch (e) { + return reject(e); + } + + // Create our key/value table if it doesn't exist. + dbInfo.db.transaction(function (t) { + createDbTable(t, dbInfo, function () { + self._dbInfo = dbInfo; + resolve(); + }, function (t, error) { + reject(error); + }); + }, reject); + }); + + dbInfo.serializer = localforageSerializer; + return dbInfoPromise; + } + + function tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) { + t.executeSql(sqlStatement, args, callback, function (t, error) { + if (error.code === error.SYNTAX_ERR) { + t.executeSql('SELECT name FROM sqlite_master ' + "WHERE type='table' AND name = ?", [dbInfo.storeName], function (t, results) { + if (!results.rows.length) { + // if the table is missing (was deleted) + // re-create it table and retry + createDbTable(t, dbInfo, function () { + t.executeSql(sqlStatement, args, callback, errorCallback); + }, errorCallback); + } else { + errorCallback(t, error); + } + }, errorCallback); + } else { + errorCallback(t, error); + } + }, errorCallback); + } + + function getItem$1(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) { + var result = results.rows.length ? results.rows.item(0).value : null; + + // Check to see if this is serialized content we need to + // unpack. + if (result) { + result = dbInfo.serializer.deserialize(result); + } + + resolve(result); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function iterate$1(iterator, callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) { + var rows = results.rows; + var length = rows.length; + + for (var i = 0; i < length; i++) { + var item = rows.item(i); + var result = item.value; + + // Check to see if this is serialized content + // we need to unpack. + if (result) { + result = dbInfo.serializer.deserialize(result); + } + + result = iterator(result, item.key, i + 1); + + // void(0) prevents problems with redefinition + // of `undefined`. + if (result !== void 0) { + resolve(result); + return; + } + } + + resolve(); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function _setItem(key, value, callback, retriesLeft) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + // The localStorage API doesn't return undefined values in an + // "expected" way, so undefined is always cast to null in all + // drivers. See: https://github.com/mozilla/localForage/pull/42 + if (value === undefined) { + value = null; + } + + // Save the original value to pass to the callback. + var originalValue = value; + + var dbInfo = self._dbInfo; + dbInfo.serializer.serialize(value, function (value, error) { + if (error) { + reject(error); + } else { + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () { + resolve(originalValue); + }, function (t, error) { + reject(error); + }); + }, function (sqlError) { + // The transaction failed; check + // to see if it's a quota error. + if (sqlError.code === sqlError.QUOTA_ERR) { + // We reject the callback outright for now, but + // it's worth trying to re-run the transaction. + // Even if the user accepts the prompt to use + // more storage on Safari, this error will + // be called. + // + // Try to re-run the transaction. + if (retriesLeft > 0) { + resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1])); + return; + } + reject(sqlError); + } + }); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function setItem$1(key, value, callback) { + return _setItem.apply(this, [key, value, callback, 1]); + } + + function removeItem$1(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () { + resolve(); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + // Deletes every item in the table. + // TODO: Find out if this resets the AUTO_INCREMENT number. + function clear$1(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () { + resolve(); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + // Does a simple `COUNT(key)` to get the number of items stored in + // localForage. + function length$1(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + // Ahhh, SQL makes this one soooooo easy. + tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) { + var result = results.rows.item(0).c; + resolve(result); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + // Return the key located at key index X; essentially gets the key from a + // `WHERE id = ?`. This is the most efficient way I can think to implement + // this rarely-used (in my experience) part of the API, but it can seem + // inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so + // the ID of each key will change every time it's updated. Perhaps a stored + // procedure for the `setItem()` SQL would solve this problem? + // TODO: Don't change ID on `setItem()`. + function key$1(n, callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) { + var result = results.rows.length ? results.rows.item(0).key : null; + resolve(result); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + function keys$1(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) { + var keys = []; + + for (var i = 0; i < results.rows.length; i++) { + keys.push(results.rows.item(i).key); + } + + resolve(keys); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; + } + + // https://www.w3.org/TR/webdatabase/#databases + // > There is no way to enumerate or delete the databases available for an origin from this API. + function getAllStoreNames(db) { + return new Promise$1(function (resolve, reject) { + db.transaction(function (t) { + t.executeSql('SELECT name FROM sqlite_master ' + "WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'", [], function (t, results) { + var storeNames = []; + + for (var i = 0; i < results.rows.length; i++) { + storeNames.push(results.rows.item(i).name); + } + + resolve({ + db: db, + storeNames: storeNames + }); + }, function (t, error) { + reject(error); + }); + }, function (sqlError) { + reject(sqlError); + }); + }); + } + + function dropInstance$1(options, callback) { + callback = getCallback.apply(this, arguments); + + var currentConfig = this.config(); + options = typeof options !== 'function' && options || {}; + if (!options.name) { + options.name = options.name || currentConfig.name; + options.storeName = options.storeName || currentConfig.storeName; + } + + var self = this; + var promise; + if (!options.name) { + promise = Promise$1.reject('Invalid arguments'); + } else { + promise = new Promise$1(function (resolve) { + var db; + if (options.name === currentConfig.name) { + // use the db reference of the current instance + db = self._dbInfo.db; + } else { + db = openDatabase(options.name, '', '', 0); + } + + if (!options.storeName) { + // drop all database tables + resolve(getAllStoreNames(db)); + } else { + resolve({ + db: db, + storeNames: [options.storeName] + }); + } + }).then(function (operationInfo) { + return new Promise$1(function (resolve, reject) { + operationInfo.db.transaction(function (t) { + function dropTable(storeName) { + return new Promise$1(function (resolve, reject) { + t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () { + resolve(); + }, function (t, error) { + reject(error); + }); + }); + } + + var operations = []; + for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) { + operations.push(dropTable(operationInfo.storeNames[i])); + } + + Promise$1.all(operations).then(function () { + resolve(); + })["catch"](function (e) { + reject(e); + }); + }, function (sqlError) { + reject(sqlError); + }); + }); + }); + } + + executeCallback(promise, callback); + return promise; + } + + var webSQLStorage = { + _driver: 'webSQLStorage', + _initStorage: _initStorage$1, + _support: isWebSQLValid(), + iterate: iterate$1, + getItem: getItem$1, + setItem: setItem$1, + removeItem: removeItem$1, + clear: clear$1, + length: length$1, + key: key$1, + keys: keys$1, + dropInstance: dropInstance$1 + }; + + function isLocalStorageValid() { + try { + return typeof localStorage !== 'undefined' && 'setItem' in localStorage && + // in IE8 typeof localStorage.setItem === 'object' + !!localStorage.setItem; + } catch (e) { + return false; + } + } + + function _getKeyPrefix(options, defaultConfig) { + var keyPrefix = options.name + '/'; + + if (options.storeName !== defaultConfig.storeName) { + keyPrefix += options.storeName + '/'; + } + return keyPrefix; + } + + // Check if localStorage throws when saving an item + function checkIfLocalStorageThrows() { + var localStorageTestKey = '_localforage_support_test'; + + try { + localStorage.setItem(localStorageTestKey, true); + localStorage.removeItem(localStorageTestKey); + + return false; + } catch (e) { + return true; + } + } + + // Check if localStorage is usable and allows to save an item + // This method checks if localStorage is usable in Safari Private Browsing + // mode, or in any other case where the available quota for localStorage + // is 0 and there wasn't any saved items yet. + function _isLocalStorageUsable() { + return !checkIfLocalStorageThrows() || localStorage.length > 0; + } + + // Config the localStorage backend, using options set in the config. + function _initStorage$2(options) { + var self = this; + var dbInfo = {}; + if (options) { + for (var i in options) { + dbInfo[i] = options[i]; + } + } + + dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig); + + if (!_isLocalStorageUsable()) { + return Promise$1.reject(); + } + + self._dbInfo = dbInfo; + dbInfo.serializer = localforageSerializer; + + return Promise$1.resolve(); + } + + // Remove all keys from the datastore, effectively destroying all data in + // the app's key/value store! + function clear$2(callback) { + var self = this; + var promise = self.ready().then(function () { + var keyPrefix = self._dbInfo.keyPrefix; + + for (var i = localStorage.length - 1; i >= 0; i--) { + var key = localStorage.key(i); + + if (key.indexOf(keyPrefix) === 0) { + localStorage.removeItem(key); + } + } + }); + + executeCallback(promise, callback); + return promise; + } + + // Retrieve an item from the store. Unlike the original async_storage + // library in Gaia, we don't modify return values at all. If a key's value + // is `undefined`, we pass that value to the callback function. + function getItem$2(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + var result = localStorage.getItem(dbInfo.keyPrefix + key); + + // If a result was found, parse it from the serialized + // string into a JS object. If result isn't truthy, the key + // is likely undefined and we'll pass it straight to the + // callback. + if (result) { + result = dbInfo.serializer.deserialize(result); + } + + return result; + }); + + executeCallback(promise, callback); + return promise; + } + + // Iterate over all items in the store. + function iterate$2(iterator, callback) { + var self = this; + + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + var keyPrefix = dbInfo.keyPrefix; + var keyPrefixLength = keyPrefix.length; + var length = localStorage.length; + + // We use a dedicated iterator instead of the `i` variable below + // so other keys we fetch in localStorage aren't counted in + // the `iterationNumber` argument passed to the `iterate()` + // callback. + // + // See: github.com/mozilla/localForage/pull/435#discussion_r38061530 + var iterationNumber = 1; + + for (var i = 0; i < length; i++) { + var key = localStorage.key(i); + if (key.indexOf(keyPrefix) !== 0) { + continue; + } + var value = localStorage.getItem(key); + + // If a result was found, parse it from the serialized + // string into a JS object. If result isn't truthy, the + // key is likely undefined and we'll pass it straight + // to the iterator. + if (value) { + value = dbInfo.serializer.deserialize(value); + } + + value = iterator(value, key.substring(keyPrefixLength), iterationNumber++); + + if (value !== void 0) { + return value; + } + } + }); + + executeCallback(promise, callback); + return promise; + } + + // Same as localStorage's key() method, except takes a callback. + function key$2(n, callback) { + var self = this; + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + var result; + try { + result = localStorage.key(n); + } catch (error) { + result = null; + } + + // Remove the prefix from the key, if a key is found. + if (result) { + result = result.substring(dbInfo.keyPrefix.length); + } + + return result; + }); + + executeCallback(promise, callback); + return promise; + } + + function keys$2(callback) { + var self = this; + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + var length = localStorage.length; + var keys = []; + + for (var i = 0; i < length; i++) { + var itemKey = localStorage.key(i); + if (itemKey.indexOf(dbInfo.keyPrefix) === 0) { + keys.push(itemKey.substring(dbInfo.keyPrefix.length)); + } + } + + return keys; + }); + + executeCallback(promise, callback); + return promise; + } + + // Supply the number of keys in the datastore to the callback function. + function length$2(callback) { + var self = this; + var promise = self.keys().then(function (keys) { + return keys.length; + }); + + executeCallback(promise, callback); + return promise; + } + + // Remove an item from the store, nice and simple. + function removeItem$2(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + localStorage.removeItem(dbInfo.keyPrefix + key); + }); + + executeCallback(promise, callback); + return promise; + } + + // Set a key's value and run an optional callback once the value is set. + // Unlike Gaia's implementation, the callback function is passed the value, + // in case you want to operate on that value only after you're sure it + // saved, or something like that. + function setItem$2(key, value, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = self.ready().then(function () { + // Convert undefined values to null. + // https://github.com/mozilla/localForage/pull/42 + if (value === undefined) { + value = null; + } + + // Save the original value to pass to the callback. + var originalValue = value; + + return new Promise$1(function (resolve, reject) { + var dbInfo = self._dbInfo; + dbInfo.serializer.serialize(value, function (value, error) { + if (error) { + reject(error); + } else { + try { + localStorage.setItem(dbInfo.keyPrefix + key, value); + resolve(originalValue); + } catch (e) { + // localStorage capacity exceeded. + // TODO: Make this a specific error/event. + if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') { + reject(e); + } + reject(e); + } + } + }); + }); + }); + + executeCallback(promise, callback); + return promise; + } + + function dropInstance$2(options, callback) { + callback = getCallback.apply(this, arguments); + + options = typeof options !== 'function' && options || {}; + if (!options.name) { + var currentConfig = this.config(); + options.name = options.name || currentConfig.name; + options.storeName = options.storeName || currentConfig.storeName; + } + + var self = this; + var promise; + if (!options.name) { + promise = Promise$1.reject('Invalid arguments'); + } else { + promise = new Promise$1(function (resolve) { + if (!options.storeName) { + resolve(options.name + '/'); + } else { + resolve(_getKeyPrefix(options, self._defaultConfig)); + } + }).then(function (keyPrefix) { + for (var i = localStorage.length - 1; i >= 0; i--) { + var key = localStorage.key(i); + + if (key.indexOf(keyPrefix) === 0) { + localStorage.removeItem(key); + } + } + }); + } + + executeCallback(promise, callback); + return promise; + } + + var localStorageWrapper = { + _driver: 'localStorageWrapper', + _initStorage: _initStorage$2, + _support: isLocalStorageValid(), + iterate: iterate$2, + getItem: getItem$2, + setItem: setItem$2, + removeItem: removeItem$2, + clear: clear$2, + length: length$2, + key: key$2, + keys: keys$2, + dropInstance: dropInstance$2 + }; + + var sameValue = function sameValue(x, y) { + return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y); + }; + + var includes = function includes(array, searchElement) { + var len = array.length; + var i = 0; + while (i < len) { + if (sameValue(array[i], searchElement)) { + return true; + } + i++; + } + + return false; + }; + + var isArray = Array.isArray || function (arg) { + return Object.prototype.toString.call(arg) === '[object Array]'; + }; + + // Drivers are stored here when `defineDriver()` is called. + // They are shared across all instances of localForage. + var DefinedDrivers = {}; + + var DriverSupport = {}; + + var DefaultDrivers = { + INDEXEDDB: asyncStorage, + WEBSQL: webSQLStorage, + LOCALSTORAGE: localStorageWrapper + }; + + var DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver]; + + var OptionalDriverMethods = ['dropInstance']; + + var LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods); + + var DefaultConfig = { + description: '', + driver: DefaultDriverOrder.slice(), + name: 'localforage', + // Default DB size is _JUST UNDER_ 5MB, as it's the highest size + // we can use without a prompt. + size: 4980736, + storeName: 'keyvaluepairs', + version: 1.0 + }; + + function callWhenReady(localForageInstance, libraryMethod) { + localForageInstance[libraryMethod] = function () { + var _args = arguments; + return localForageInstance.ready().then(function () { + return localForageInstance[libraryMethod].apply(localForageInstance, _args); + }); + }; + } + + function extend() { + for (var i = 1; i < arguments.length; i++) { + var arg = arguments[i]; + + if (arg) { + for (var _key in arg) { + if (arg.hasOwnProperty(_key)) { + if (isArray(arg[_key])) { + arguments[0][_key] = arg[_key].slice(); + } else { + arguments[0][_key] = arg[_key]; + } + } + } + } + } + + return arguments[0]; + } + + var LocalForage = function () { + function LocalForage(options) { + _classCallCheck(this, LocalForage); + + for (var driverTypeKey in DefaultDrivers) { + if (DefaultDrivers.hasOwnProperty(driverTypeKey)) { + var driver = DefaultDrivers[driverTypeKey]; + var driverName = driver._driver; + this[driverTypeKey] = driverName; + + if (!DefinedDrivers[driverName]) { + // we don't need to wait for the promise, + // since the default drivers can be defined + // in a blocking manner + this.defineDriver(driver); + } + } + } + + this._defaultConfig = extend({}, DefaultConfig); + this._config = extend({}, this._defaultConfig, options); + this._driverSet = null; + this._initDriver = null; + this._ready = false; + this._dbInfo = null; + + this._wrapLibraryMethodsWithReady(); + this.setDriver(this._config.driver)["catch"](function () {}); + } + + // Set any config values for localForage; can be called anytime before + // the first API call (e.g. `getItem`, `setItem`). + // We loop through options so we don't overwrite existing config + // values. + + + LocalForage.prototype.config = function config(options) { + // If the options argument is an object, we use it to set values. + // Otherwise, we return either a specified config value or all + // config values. + if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') { + // If localforage is ready and fully initialized, we can't set + // any new configuration values. Instead, we return an error. + if (this._ready) { + return new Error("Can't call config() after localforage " + 'has been used.'); + } + + for (var i in options) { + if (i === 'storeName') { + options[i] = options[i].replace(/\W/g, '_'); + } + + if (i === 'version' && typeof options[i] !== 'number') { + return new Error('Database version must be a number.'); + } + + this._config[i] = options[i]; + } + + // after all config options are set and + // the driver option is used, try setting it + if ('driver' in options && options.driver) { + return this.setDriver(this._config.driver); + } + + return true; + } else if (typeof options === 'string') { + return this._config[options]; + } else { + return this._config; + } + }; + + // Used to define a custom driver, shared across all instances of + // localForage. + + + LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) { + var promise = new Promise$1(function (resolve, reject) { + try { + var driverName = driverObject._driver; + var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver'); + + // A driver name should be defined and not overlap with the + // library-defined, default drivers. + if (!driverObject._driver) { + reject(complianceError); + return; + } + + var driverMethods = LibraryMethods.concat('_initStorage'); + for (var i = 0, len = driverMethods.length; i < len; i++) { + var driverMethodName = driverMethods[i]; + + // when the property is there, + // it should be a method even when optional + var isRequired = !includes(OptionalDriverMethods, driverMethodName); + if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') { + reject(complianceError); + return; + } + } + + var configureMissingMethods = function configureMissingMethods() { + var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) { + return function () { + var error = new Error('Method ' + methodName + ' is not implemented by the current driver'); + var promise = Promise$1.reject(error); + executeCallback(promise, arguments[arguments.length - 1]); + return promise; + }; + }; + + for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) { + var optionalDriverMethod = OptionalDriverMethods[_i]; + if (!driverObject[optionalDriverMethod]) { + driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod); + } + } + }; + + configureMissingMethods(); + + var setDriverSupport = function setDriverSupport(support) { + if (DefinedDrivers[driverName]) { + console.info('Redefining LocalForage driver: ' + driverName); + } + DefinedDrivers[driverName] = driverObject; + DriverSupport[driverName] = support; + // don't use a then, so that we can define + // drivers that have simple _support methods + // in a blocking manner + resolve(); + }; + + if ('_support' in driverObject) { + if (driverObject._support && typeof driverObject._support === 'function') { + driverObject._support().then(setDriverSupport, reject); + } else { + setDriverSupport(!!driverObject._support); + } + } else { + setDriverSupport(true); + } + } catch (e) { + reject(e); + } + }); + + executeTwoCallbacks(promise, callback, errorCallback); + return promise; + }; + + LocalForage.prototype.driver = function driver() { + return this._driver || null; + }; + + LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) { + var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.')); + + executeTwoCallbacks(getDriverPromise, callback, errorCallback); + return getDriverPromise; + }; + + LocalForage.prototype.getSerializer = function getSerializer(callback) { + var serializerPromise = Promise$1.resolve(localforageSerializer); + executeTwoCallbacks(serializerPromise, callback); + return serializerPromise; + }; + + LocalForage.prototype.ready = function ready(callback) { + var self = this; + + var promise = self._driverSet.then(function () { + if (self._ready === null) { + self._ready = self._initDriver(); + } + + return self._ready; + }); + + executeTwoCallbacks(promise, callback, callback); + return promise; + }; + + LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) { + var self = this; + + if (!isArray(drivers)) { + drivers = [drivers]; + } + + var supportedDrivers = this._getSupportedDrivers(drivers); + + function setDriverToConfig() { + self._config.driver = self.driver(); + } + + function extendSelfWithDriver(driver) { + self._extend(driver); + setDriverToConfig(); + + self._ready = self._initStorage(self._config); + return self._ready; + } + + function initDriver(supportedDrivers) { + return function () { + var currentDriverIndex = 0; + + function driverPromiseLoop() { + while (currentDriverIndex < supportedDrivers.length) { + var driverName = supportedDrivers[currentDriverIndex]; + currentDriverIndex++; + + self._dbInfo = null; + self._ready = null; + + return self.getDriver(driverName).then(extendSelfWithDriver)["catch"](driverPromiseLoop); + } + + setDriverToConfig(); + var error = new Error('No available storage method found.'); + self._driverSet = Promise$1.reject(error); + return self._driverSet; + } + + return driverPromiseLoop(); + }; + } + + // There might be a driver initialization in progress + // so wait for it to finish in order to avoid a possible + // race condition to set _dbInfo + var oldDriverSetDone = this._driverSet !== null ? this._driverSet["catch"](function () { + return Promise$1.resolve(); + }) : Promise$1.resolve(); + + this._driverSet = oldDriverSetDone.then(function () { + var driverName = supportedDrivers[0]; + self._dbInfo = null; + self._ready = null; + + return self.getDriver(driverName).then(function (driver) { + self._driver = driver._driver; + setDriverToConfig(); + self._wrapLibraryMethodsWithReady(); + self._initDriver = initDriver(supportedDrivers); + }); + })["catch"](function () { + setDriverToConfig(); + var error = new Error('No available storage method found.'); + self._driverSet = Promise$1.reject(error); + return self._driverSet; + }); + + executeTwoCallbacks(this._driverSet, callback, errorCallback); + return this._driverSet; + }; + + LocalForage.prototype.supports = function supports(driverName) { + return !!DriverSupport[driverName]; + }; + + LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) { + extend(this, libraryMethodsAndProperties); + }; + + LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) { + var supportedDrivers = []; + for (var i = 0, len = drivers.length; i < len; i++) { + var driverName = drivers[i]; + if (this.supports(driverName)) { + supportedDrivers.push(driverName); + } + } + return supportedDrivers; + }; + + LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() { + // Add a stub for each driver API method that delays the call to the + // corresponding driver method until localForage is ready. These stubs + // will be replaced by the driver methods as soon as the driver is + // loaded, so there is no performance impact. + for (var i = 0, len = LibraryMethods.length; i < len; i++) { + callWhenReady(this, LibraryMethods[i]); + } + }; + + LocalForage.prototype.createInstance = function createInstance(options) { + return new LocalForage(options); + }; + + return LocalForage; + }(); + + // The actual localForage object that we expose as a module or via a + // global. It's extended by pulling in one of our other libraries. + + + var localforage_js = new LocalForage(); + + module.exports = localforage_js; + + },{"3":3}]},{},[4])(4) + }); +} (localforage$1, localforage$1.exports)); + +var localforageExports = localforage$1.exports; +var localforage = /*@__PURE__*/getDefaultExportFromCjs(localforageExports); + +/** Simpler wrapper for a file-backed cache for arbitrary metadata. */ +class LocalStorageCache { + appId; + version; + persister; + constructor(appId, version) { + this.appId = appId; + this.version = version; + this.persister = localforage.createInstance({ + name: "dataview/cache/" + appId, + driver: [localforage.INDEXEDDB], + description: "Cache metadata about files and sections in the dataview index.", + }); + } + /** Drop the entire cache instance and re-create a new fresh instance. */ + async recreate() { + await localforage.dropInstance({ name: "dataview/cache/" + this.appId }); + this.persister = localforage.createInstance({ + name: "dataview/cache/" + this.appId, + driver: [localforage.INDEXEDDB], + description: "Cache metadata about files and sections in the dataview index.", + }); + } + /** Load file metadata by path. */ + async loadFile(path) { + return this.persister.getItem(this.fileKey(path)).then(raw => { + let result = raw; + if (result) + result.data = Transferable.value(result.data); + return result; + }); + } + /** Store file metadata by path. */ + async storeFile(path, data) { + await this.persister.setItem(this.fileKey(path), { + version: this.version, + time: Date.now(), + data: Transferable.transferable(data), + }); + } + /** Drop old file keys that no longer exist. */ + async synchronize(existing) { + let keys = new Set(await this.allFiles()); + for (let exist of existing) + keys.delete(exist); + // Any keys remaining after deleting existing keys are non-existent keys that should be cleared from cache. + for (let key of keys) + await this.persister.removeItem(this.fileKey(key)); + return keys; + } + /** Obtain a list of all metadata keys. */ + async allKeys() { + return this.persister.keys(); + } + /** Obtain a list of all persisted files. */ + async allFiles() { + let keys = await this.allKeys(); + return keys.filter(k => k.startsWith("file:")).map(k => k.substring(5)); + } + fileKey(path) { + return "file:" + path; + } +} + +function decodeBase64(base64, enableUnicode) { + var binaryString = atob(base64); + if (enableUnicode) { + var binaryView = new Uint8Array(binaryString.length); + for (var i = 0, n = binaryString.length; i < n; ++i) { + binaryView[i] = binaryString.charCodeAt(i); + } + return String.fromCharCode.apply(null, new Uint16Array(binaryView.buffer)); + } + return binaryString; +} + +function createURL(base64, sourcemapArg, enableUnicodeArg) { + var sourcemap = sourcemapArg === undefined ? null : sourcemapArg; + var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg; + var source = decodeBase64(base64, enableUnicode); + var start = source.indexOf('\n', 10) + 1; + var body = source.substring(start) + (sourcemap ? '\/\/# sourceMappingURL=' + sourcemap : ''); + var blob = new Blob([body], { type: 'application/javascript' }); + return URL.createObjectURL(blob); +} + +function createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) { + var url; + return function WorkerFactory(options) { + url = url || createURL(base64, sourcemapArg, enableUnicodeArg); + return new Worker(url, options); + }; +} + +var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLy8gdGhlc2UgYXJlbid0IHJlYWxseSBwcml2YXRlLCBidXQgbm9yIGFyZSB0aGV5IHJlYWxseSB1c2VmdWwgdG8gZG9jdW1lbnQKCiAgLyoqCiAgICogQHByaXZhdGUKICAgKi8KICBjbGFzcyBMdXhvbkVycm9yIGV4dGVuZHMgRXJyb3Ige30KCiAgLyoqCiAgICogQHByaXZhdGUKICAgKi8KICBjbGFzcyBJbnZhbGlkRGF0ZVRpbWVFcnJvciBleHRlbmRzIEx1eG9uRXJyb3IgewogICAgY29uc3RydWN0b3IocmVhc29uKSB7CiAgICAgIHN1cGVyKGBJbnZhbGlkIERhdGVUaW1lOiAke3JlYXNvbi50b01lc3NhZ2UoKX1gKTsKICAgIH0KICB9CgogIC8qKgogICAqIEBwcml2YXRlCiAgICovCiAgY2xhc3MgSW52YWxpZEludGVydmFsRXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHsKICAgIGNvbnN0cnVjdG9yKHJlYXNvbikgewogICAgICBzdXBlcihgSW52YWxpZCBJbnRlcnZhbDogJHtyZWFzb24udG9NZXNzYWdlKCl9YCk7CiAgICB9CiAgfQoKICAvKioKICAgKiBAcHJpdmF0ZQogICAqLwogIGNsYXNzIEludmFsaWREdXJhdGlvbkVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7CiAgICBjb25zdHJ1Y3RvcihyZWFzb24pIHsKICAgICAgc3VwZXIoYEludmFsaWQgRHVyYXRpb246ICR7cmVhc29uLnRvTWVzc2FnZSgpfWApOwogICAgfQogIH0KCiAgLyoqCiAgICogQHByaXZhdGUKICAgKi8KICBjbGFzcyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige30KCiAgLyoqCiAgICogQHByaXZhdGUKICAgKi8KICBjbGFzcyBJbnZhbGlkVW5pdEVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7CiAgICBjb25zdHJ1Y3Rvcih1bml0KSB7CiAgICAgIHN1cGVyKGBJbnZhbGlkIHVuaXQgJHt1bml0fWApOwogICAgfQogIH0KCiAgLyoqCiAgICogQHByaXZhdGUKICAgKi8KICBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige30KCiAgLyoqCiAgICogQHByaXZhdGUKICAgKi8KICBjbGFzcyBab25lSXNBYnN0cmFjdEVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoIlpvbmUgaXMgYW4gYWJzdHJhY3QgY2xhc3MiKTsKICAgIH0KICB9CgogIC8qKgogICAqIEBwcml2YXRlCiAgICovCgogIGNvbnN0IG4gPSAibnVtZXJpYyIsCiAgICBzID0gInNob3J0IiwKICAgIGwgPSAibG9uZyI7CgogIGNvbnN0IERBVEVfU0hPUlQgPSB7CiAgICB5ZWFyOiBuLAogICAgbW9udGg6IG4sCiAgICBkYXk6IG4sCiAgfTsKCiAgY29uc3QgREFURV9NRUQgPSB7CiAgICB5ZWFyOiBuLAogICAgbW9udGg6IHMsCiAgICBkYXk6IG4sCiAgfTsKCiAgY29uc3QgREFURV9NRURfV0lUSF9XRUVLREFZID0gewogICAgeWVhcjogbiwKICAgIG1vbnRoOiBzLAogICAgZGF5OiBuLAogICAgd2Vla2RheTogcywKICB9OwoKICBjb25zdCBEQVRFX0ZVTEwgPSB7CiAgICB5ZWFyOiBuLAogICAgbW9udGg6IGwsCiAgICBkYXk6IG4sCiAgfTsKCiAgY29uc3QgREFURV9IVUdFID0gewogICAgeWVhcjogbiwKICAgIG1vbnRoOiBsLAogICAgZGF5OiBuLAogICAgd2Vla2RheTogbCwKICB9OwoKICBjb25zdCBUSU1FX1NJTVBMRSA9IHsKICAgIGhvdXI6IG4sCiAgICBtaW51dGU6IG4sCiAgfTsKCiAgY29uc3QgVElNRV9XSVRIX1NFQ09ORFMgPSB7CiAgICBob3VyOiBuLAogICAgbWludXRlOiBuLAogICAgc2Vjb25kOiBuLAogIH07CgogIGNvbnN0IFRJTUVfV0lUSF9TSE9SVF9PRkZTRVQgPSB7CiAgICBob3VyOiBuLAogICAgbWludXRlOiBuLAogICAgc2Vjb25kOiBuLAogICAgdGltZVpvbmVOYW1lOiBzLAogIH07CgogIGNvbnN0IFRJTUVfV0lUSF9MT05HX09GRlNFVCA9IHsKICAgIGhvdXI6IG4sCiAgICBtaW51dGU6IG4sCiAgICBzZWNvbmQ6IG4sCiAgICB0aW1lWm9uZU5hbWU6IGwsCiAgfTsKCiAgY29uc3QgVElNRV8yNF9TSU1QTEUgPSB7CiAgICBob3VyOiBuLAogICAgbWludXRlOiBuLAogICAgaG91ckN5Y2xlOiAiaDIzIiwKICB9OwoKICBjb25zdCBUSU1FXzI0X1dJVEhfU0VDT05EUyA9IHsKICAgIGhvdXI6IG4sCiAgICBtaW51dGU6IG4sCiAgICBzZWNvbmQ6IG4sCiAgICBob3VyQ3ljbGU6ICJoMjMiLAogIH07CgogIGNvbnN0IFRJTUVfMjRfV0lUSF9TSE9SVF9PRkZTRVQgPSB7CiAgICBob3VyOiBuLAogICAgbWludXRlOiBuLAogICAgc2Vjb25kOiBuLAogICAgaG91ckN5Y2xlOiAiaDIzIiwKICAgIHRpbWVab25lTmFtZTogcywKICB9OwoKICBjb25zdCBUSU1FXzI0X1dJVEhfTE9OR19PRkZTRVQgPSB7CiAgICBob3VyOiBuLAogICAgbWludXRlOiBuLAogICAgc2Vjb25kOiBuLAogICAgaG91ckN5Y2xlOiAiaDIzIiwKICAgIHRpbWVab25lTmFtZTogbCwKICB9OwoKICBjb25zdCBEQVRFVElNRV9TSE9SVCA9IHsKICAgIHllYXI6IG4sCiAgICBtb250aDogbiwKICAgIGRheTogbiwKICAgIGhvdXI6IG4sCiAgICBtaW51dGU6IG4sCiAgfTsKCiAgY29uc3QgREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTID0gewogICAgeWVhcjogbiwKICAgIG1vbnRoOiBuLAogICAgZGF5OiBuLAogICAgaG91cjogbiwKICAgIG1pbnV0ZTogbiwKICAgIHNlY29uZDogbiwKICB9OwoKICBjb25zdCBEQVRFVElNRV9NRUQgPSB7CiAgICB5ZWFyOiBuLAogICAgbW9udGg6IHMsCiAgICBkYXk6IG4sCiAgICBob3VyOiBuLAogICAgbWludXRlOiBuLAogIH07CgogIGNvbnN0IERBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFMgPSB7CiAgICB5ZWFyOiBuLAogICAgbW9udGg6IHMsCiAgICBkYXk6IG4sCiAgICBob3VyOiBuLAogICAgbWludXRlOiBuLAogICAgc2Vjb25kOiBuLAogIH07CgogIGNvbnN0IERBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkgPSB7CiAgICB5ZWFyOiBuLAogICAgbW9udGg6IHMsCiAgICBkYXk6IG4sCiAgICB3ZWVrZGF5OiBzLAogICAgaG91cjogbiwKICAgIG1pbnV0ZTogbiwKICB9OwoKICBjb25zdCBEQVRFVElNRV9GVUxMID0gewogICAgeWVhcjogbiwKICAgIG1vbnRoOiBsLAogICAgZGF5OiBuLAogICAgaG91cjogbiwKICAgIG1pbnV0ZTogbiwKICAgIHRpbWVab25lTmFtZTogcywKICB9OwoKICBjb25zdCBEQVRFVElNRV9GVUxMX1dJVEhfU0VDT05EUyA9IHsKICAgIHllYXI6IG4sCiAgICBtb250aDogbCwKICAgIGRheTogbiwKICAgIGhvdXI6IG4sCiAgICBtaW51dGU6IG4sCiAgICBzZWNvbmQ6IG4sCiAgICB0aW1lWm9uZU5hbWU6IHMsCiAgfTsKCiAgY29uc3QgREFURVRJTUVfSFVHRSA9IHsKICAgIHllYXI6IG4sCiAgICBtb250aDogbCwKICAgIGRheTogbiwKICAgIHdlZWtkYXk6IGwsCiAgICBob3VyOiBuLAogICAgbWludXRlOiBuLAogICAgdGltZVpvbmVOYW1lOiBsLAogIH07CgogIGNvbnN0IERBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTID0gewogICAgeWVhcjogbiwKICAgIG1vbnRoOiBsLAogICAgZGF5OiBuLAogICAgd2Vla2RheTogbCwKICAgIGhvdXI6IG4sCiAgICBtaW51dGU6IG4sCiAgICBzZWNvbmQ6IG4sCiAgICB0aW1lWm9uZU5hbWU6IGwsCiAgfTsKCiAgLyoqCiAgICogQGludGVyZmFjZQogICAqLwogIGNsYXNzIFpvbmUgewogICAgLyoqCiAgICAgKiBUaGUgdHlwZSBvZiB6b25lCiAgICAgKiBAYWJzdHJhY3QKICAgICAqIEB0eXBlIHtzdHJpbmd9CiAgICAgKi8KICAgIGdldCB0eXBlKCkgewogICAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIG5hbWUgb2YgdGhpcyB6b25lLgogICAgICogQGFic3RyYWN0CiAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICovCiAgICBnZXQgbmFtZSgpIHsKICAgICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTsKICAgIH0KCiAgICBnZXQgaWFuYU5hbWUoKSB7CiAgICAgIHJldHVybiB0aGlzLm5hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG9mZnNldCBpcyBrbm93biB0byBiZSBmaXhlZCBmb3IgdGhlIHdob2xlIHllYXIuCiAgICAgKiBAYWJzdHJhY3QKICAgICAqIEB0eXBlIHtib29sZWFufQogICAgICovCiAgICBnZXQgaXNVbml2ZXJzYWwoKSB7CiAgICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBvZmZzZXQncyBjb21tb24gbmFtZSAoc3VjaCBhcyBFU1QpIGF0IHRoZSBzcGVjaWZpZWQgdGltZXN0YW1wCiAgICAgKiBAYWJzdHJhY3QKICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBuYW1lCiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMgdG8gYWZmZWN0IHRoZSBmb3JtYXQKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLmZvcm1hdCAtIFdoYXQgc3R5bGUgb2Ygb2Zmc2V0IHRvIHJldHVybi4gQWNjZXB0cyAnbG9uZycgb3IgJ3Nob3J0Jy4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLmxvY2FsZSAtIFdoYXQgbG9jYWxlIHRvIHJldHVybiB0aGUgb2Zmc2V0IG5hbWUgaW4uCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgKi8KICAgIG9mZnNldE5hbWUodHMsIG9wdHMpIHsKICAgICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG9mZnNldCdzIHZhbHVlIGFzIGEgc3RyaW5nCiAgICAgKiBAYWJzdHJhY3QKICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBvZmZzZXQKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0cyAnbmFycm93JywgJ3Nob3J0Jywgb3IgJ3RlY2hpZScuIFJldHVybmluZyAnKzYnLCAnKzA2OjAwJywgb3IgJyswNjAwJyByZXNwZWN0aXZlbHkKICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAqLwogICAgZm9ybWF0T2Zmc2V0KHRzLCBmb3JtYXQpIHsKICAgICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgZm9yIHRoaXMgem9uZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWVzdGFtcC4KICAgICAqIEBhYnN0cmFjdAogICAgICogQHBhcmFtIHtudW1iZXJ9IHRzIC0gRXBvY2ggbWlsbGlzZWNvbmRzIGZvciB3aGljaCB0byBjb21wdXRlIHRoZSBvZmZzZXQKICAgICAqIEByZXR1cm4ge251bWJlcn0KICAgICAqLwogICAgb2Zmc2V0KHRzKSB7CiAgICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIFpvbmUgaXMgZXF1YWwgdG8gYW5vdGhlciB6b25lCiAgICAgKiBAYWJzdHJhY3QKICAgICAqIEBwYXJhbSB7Wm9uZX0gb3RoZXJab25lIC0gdGhlIHpvbmUgdG8gY29tcGFyZQogICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAqLwogICAgZXF1YWxzKG90aGVyWm9uZSkgewogICAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBab25lIGlzIHZhbGlkLgogICAgICogQGFic3RyYWN0CiAgICAgKiBAdHlwZSB7Ym9vbGVhbn0KICAgICAqLwogICAgZ2V0IGlzVmFsaWQoKSB7CiAgICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7CiAgICB9CiAgfQoKICBsZXQgc2luZ2xldG9uJDEgPSBudWxsOwoKICAvKioKICAgKiBSZXByZXNlbnRzIHRoZSBsb2NhbCB6b25lIGZvciB0aGlzIEphdmFTY3JpcHQgZW52aXJvbm1lbnQuCiAgICogQGltcGxlbWVudHMge1pvbmV9CiAgICovCiAgY2xhc3MgU3lzdGVtWm9uZSBleHRlbmRzIFpvbmUgewogICAgLyoqCiAgICAgKiBHZXQgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGxvY2FsIHpvbmUKICAgICAqIEByZXR1cm4ge1N5c3RlbVpvbmV9CiAgICAgKi8KICAgIHN0YXRpYyBnZXQgaW5zdGFuY2UoKSB7CiAgICAgIGlmIChzaW5nbGV0b24kMSA9PT0gbnVsbCkgewogICAgICAgIHNpbmdsZXRvbiQxID0gbmV3IFN5c3RlbVpvbmUoKTsKICAgICAgfQogICAgICByZXR1cm4gc2luZ2xldG9uJDE7CiAgICB9CgogICAgLyoqIEBvdmVycmlkZSAqKi8KICAgIGdldCB0eXBlKCkgewogICAgICByZXR1cm4gInN5c3RlbSI7CiAgICB9CgogICAgLyoqIEBvdmVycmlkZSAqKi8KICAgIGdldCBuYW1lKCkgewogICAgICByZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZTsKICAgIH0KCiAgICAvKiogQG92ZXJyaWRlICoqLwogICAgZ2V0IGlzVW5pdmVyc2FsKCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqIEBvdmVycmlkZSAqKi8KICAgIG9mZnNldE5hbWUodHMsIHsgZm9ybWF0LCBsb2NhbGUgfSkgewogICAgICByZXR1cm4gcGFyc2Vab25lSW5mbyh0cywgZm9ybWF0LCBsb2NhbGUpOwogICAgfQoKICAgIC8qKiBAb3ZlcnJpZGUgKiovCiAgICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkgewogICAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHRoaXMub2Zmc2V0KHRzKSwgZm9ybWF0KTsKICAgIH0KCiAgICAvKiogQG92ZXJyaWRlICoqLwogICAgb2Zmc2V0KHRzKSB7CiAgICAgIHJldHVybiAtbmV3IERhdGUodHMpLmdldFRpbWV6b25lT2Zmc2V0KCk7CiAgICB9CgogICAgLyoqIEBvdmVycmlkZSAqKi8KICAgIGVxdWFscyhvdGhlclpvbmUpIHsKICAgICAgcmV0dXJuIG90aGVyWm9uZS50eXBlID09PSAic3lzdGVtIjsKICAgIH0KCiAgICAvKiogQG92ZXJyaWRlICoqLwogICAgZ2V0IGlzVmFsaWQoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KCiAgbGV0IGR0ZkNhY2hlID0ge307CiAgZnVuY3Rpb24gbWFrZURURih6b25lKSB7CiAgICBpZiAoIWR0ZkNhY2hlW3pvbmVdKSB7CiAgICAgIGR0ZkNhY2hlW3pvbmVdID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImVuLVVTIiwgewogICAgICAgIGhvdXIxMjogZmFsc2UsCiAgICAgICAgdGltZVpvbmU6IHpvbmUsCiAgICAgICAgeWVhcjogIm51bWVyaWMiLAogICAgICAgIG1vbnRoOiAiMi1kaWdpdCIsCiAgICAgICAgZGF5OiAiMi1kaWdpdCIsCiAgICAgICAgaG91cjogIjItZGlnaXQiLAogICAgICAgIG1pbnV0ZTogIjItZGlnaXQiLAogICAgICAgIHNlY29uZDogIjItZGlnaXQiLAogICAgICAgIGVyYTogInNob3J0IiwKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gZHRmQ2FjaGVbem9uZV07CiAgfQoKICBjb25zdCB0eXBlVG9Qb3MgPSB7CiAgICB5ZWFyOiAwLAogICAgbW9udGg6IDEsCiAgICBkYXk6IDIsCiAgICBlcmE6IDMsCiAgICBob3VyOiA0LAogICAgbWludXRlOiA1LAogICAgc2Vjb25kOiA2LAogIH07CgogIGZ1bmN0aW9uIGhhY2t5T2Zmc2V0KGR0ZiwgZGF0ZSkgewogICAgY29uc3QgZm9ybWF0dGVkID0gZHRmLmZvcm1hdChkYXRlKS5yZXBsYWNlKC9cdTIwMEUvZywgIiIpLAogICAgICBwYXJzZWQgPSAvKFxkKylcLyhcZCspXC8oXGQrKSAoQUR8QkMpLD8gKFxkKyk6KFxkKyk6KFxkKykvLmV4ZWMoZm9ybWF0dGVkKSwKICAgICAgWywgZk1vbnRoLCBmRGF5LCBmWWVhciwgZmFkT3JCYywgZkhvdXIsIGZNaW51dGUsIGZTZWNvbmRdID0gcGFyc2VkOwogICAgcmV0dXJuIFtmWWVhciwgZk1vbnRoLCBmRGF5LCBmYWRPckJjLCBmSG91ciwgZk1pbnV0ZSwgZlNlY29uZF07CiAgfQoKICBmdW5jdGlvbiBwYXJ0c09mZnNldChkdGYsIGRhdGUpIHsKICAgIGNvbnN0IGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXRUb1BhcnRzKGRhdGUpOwogICAgY29uc3QgZmlsbGVkID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvcm1hdHRlZC5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB7IHR5cGUsIHZhbHVlIH0gPSBmb3JtYXR0ZWRbaV07CiAgICAgIGNvbnN0IHBvcyA9IHR5cGVUb1Bvc1t0eXBlXTsKCiAgICAgIGlmICh0eXBlID09PSAiZXJhIikgewogICAgICAgIGZpbGxlZFtwb3NdID0gdmFsdWU7CiAgICAgIH0gZWxzZSBpZiAoIWlzVW5kZWZpbmVkKHBvcykpIHsKICAgICAgICBmaWxsZWRbcG9zXSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmaWxsZWQ7CiAgfQoKICBsZXQgaWFuYVpvbmVDYWNoZSA9IHt9OwogIC8qKgogICAqIEEgem9uZSBpZGVudGlmaWVkIGJ5IGFuIElBTkEgaWRlbnRpZmllciwgbGlrZSBBbWVyaWNhL05ld19Zb3JrCiAgICogQGltcGxlbWVudHMge1pvbmV9CiAgICovCiAgY2xhc3MgSUFOQVpvbmUgZXh0ZW5kcyBab25lIHsKICAgIC8qKgogICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBab25lIG5hbWUKICAgICAqIEByZXR1cm4ge0lBTkFab25lfQogICAgICovCiAgICBzdGF0aWMgY3JlYXRlKG5hbWUpIHsKICAgICAgaWYgKCFpYW5hWm9uZUNhY2hlW25hbWVdKSB7CiAgICAgICAgaWFuYVpvbmVDYWNoZVtuYW1lXSA9IG5ldyBJQU5BWm9uZShuYW1lKTsKICAgICAgfQogICAgICByZXR1cm4gaWFuYVpvbmVDYWNoZVtuYW1lXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlc2V0IGxvY2FsIGNhY2hlcy4gU2hvdWxkIG9ubHkgYmUgbmVjZXNzYXJ5IGluIHRlc3Rpbmcgc2NlbmFyaW9zLgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgc3RhdGljIHJlc2V0Q2FjaGUoKSB7CiAgICAgIGlhbmFab25lQ2FjaGUgPSB7fTsKICAgICAgZHRmQ2FjaGUgPSB7fTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgc3RyaW5nIGlzIGEgdmFsaWQgc3BlY2lmaWVyLiBUaGlzIG9ubHkgY2hlY2tzIHRoZSBzdHJpbmcncyBmb3JtYXQsIG5vdCB0aGF0IHRoZSBzcGVjaWZpZXIgaWRlbnRpZmllcyBhIGtub3duIHpvbmU7IHNlZSBpc1ZhbGlkWm9uZSBmb3IgdGhhdC4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzIC0gVGhlIHN0cmluZyB0byBjaGVjayB2YWxpZGl0eSBvbgogICAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFNwZWNpZmllcigiQW1lcmljYS9OZXdfWW9yayIpIC8vPT4gdHJ1ZQogICAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFNwZWNpZmllcigiU3BvcnR+fmJsb3JwIikgLy89PiBmYWxzZQogICAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgcmV0dXJucyBmYWxzZSBmb3Igc29tZSB2YWxpZCBJQU5BIG5hbWVzLiBVc2UgaXNWYWxpZFpvbmUgaW5zdGVhZC4KICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgKi8KICAgIHN0YXRpYyBpc1ZhbGlkU3BlY2lmaWVyKHMpIHsKICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZFpvbmUocyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHN0cmluZyBpZGVudGlmaWVzIGEgcmVhbCB6b25lCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gem9uZSAtIFRoZSBzdHJpbmcgdG8gY2hlY2sKICAgICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRab25lKCJBbWVyaWNhL05ld19Zb3JrIikgLy89PiB0cnVlCiAgICAgKiBAZXhhbXBsZSBJQU5BWm9uZS5pc1ZhbGlkWm9uZSgiRmFudGFzaWEvQ2FzdGxlIikgLy89PiBmYWxzZQogICAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoIlNwb3J0fn5ibG9ycCIpIC8vPT4gZmFsc2UKICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgKi8KICAgIHN0YXRpYyBpc1ZhbGlkWm9uZSh6b25lKSB7CiAgICAgIGlmICghem9uZSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCJlbi1VUyIsIHsgdGltZVpvbmU6IHpvbmUgfSkuZm9ybWF0KCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KCiAgICBjb25zdHJ1Y3RvcihuYW1lKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIC8qKiBAcHJpdmF0ZSAqKi8KICAgICAgdGhpcy56b25lTmFtZSA9IG5hbWU7CiAgICAgIC8qKiBAcHJpdmF0ZSAqKi8KICAgICAgdGhpcy52YWxpZCA9IElBTkFab25lLmlzVmFsaWRab25lKG5hbWUpOwogICAgfQoKICAgIC8qKiBAb3ZlcnJpZGUgKiovCiAgICBnZXQgdHlwZSgpIHsKICAgICAgcmV0dXJuICJpYW5hIjsKICAgIH0KCiAgICAvKiogQG92ZXJyaWRlICoqLwogICAgZ2V0IG5hbWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnpvbmVOYW1lOwogICAgfQoKICAgIC8qKiBAb3ZlcnJpZGUgKiovCiAgICBnZXQgaXNVbml2ZXJzYWwoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKiogQG92ZXJyaWRlICoqLwogICAgb2Zmc2V0TmFtZSh0cywgeyBmb3JtYXQsIGxvY2FsZSB9KSB7CiAgICAgIHJldHVybiBwYXJzZVpvbmVJbmZvKHRzLCBmb3JtYXQsIGxvY2FsZSwgdGhpcy5uYW1lKTsKICAgIH0KCiAgICAvKiogQG92ZXJyaWRlICoqLwogICAgZm9ybWF0T2Zmc2V0KHRzLCBmb3JtYXQpIHsKICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh0aGlzLm9mZnNldCh0cyksIGZvcm1hdCk7CiAgICB9CgogICAgLyoqIEBvdmVycmlkZSAqKi8KICAgIG9mZnNldCh0cykgewogICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodHMpOwoKICAgICAgaWYgKGlzTmFOKGRhdGUpKSByZXR1cm4gTmFOOwoKICAgICAgY29uc3QgZHRmID0gbWFrZURURih0aGlzLm5hbWUpOwogICAgICBsZXQgW3llYXIsIG1vbnRoLCBkYXksIGFkT3JCYywgaG91ciwgbWludXRlLCBzZWNvbmRdID0gZHRmLmZvcm1hdFRvUGFydHMKICAgICAgICA/IHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkKICAgICAgICA6IGhhY2t5T2Zmc2V0KGR0ZiwgZGF0ZSk7CgogICAgICBpZiAoYWRPckJjID09PSAiQkMiKSB7CiAgICAgICAgeWVhciA9IC1NYXRoLmFicyh5ZWFyKSArIDE7CiAgICAgIH0KCiAgICAgIC8vIGJlY2F1c2Ugd2UncmUgdXNpbmcgaG91cjEyIGFuZCBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDI1NTY0JmNhbj0yJnE9JTIyMjQlM0EwMCUyMiUyMGRhdGV0aW1lZm9ybWF0CiAgICAgIGNvbnN0IGFkanVzdGVkSG91ciA9IGhvdXIgPT09IDI0ID8gMCA6IGhvdXI7CgogICAgICBjb25zdCBhc1VUQyA9IG9ialRvTG9jYWxUUyh7CiAgICAgICAgeWVhciwKICAgICAgICBtb250aCwKICAgICAgICBkYXksCiAgICAgICAgaG91cjogYWRqdXN0ZWRIb3VyLAogICAgICAgIG1pbnV0ZSwKICAgICAgICBzZWNvbmQsCiAgICAgICAgbWlsbGlzZWNvbmQ6IDAsCiAgICAgIH0pOwoKICAgICAgbGV0IGFzVFMgPSArZGF0ZTsKICAgICAgY29uc3Qgb3ZlciA9IGFzVFMgJSAxMDAwOwogICAgICBhc1RTIC09IG92ZXIgPj0gMCA/IG92ZXIgOiAxMDAwICsgb3ZlcjsKICAgICAgcmV0dXJuIChhc1VUQyAtIGFzVFMpIC8gKDYwICogMTAwMCk7CiAgICB9CgogICAgLyoqIEBvdmVycmlkZSAqKi8KICAgIGVxdWFscyhvdGhlclpvbmUpIHsKICAgICAgcmV0dXJuIG90aGVyWm9uZS50eXBlID09PSAiaWFuYSIgJiYgb3RoZXJab25lLm5hbWUgPT09IHRoaXMubmFtZTsKICAgIH0KCiAgICAvKiogQG92ZXJyaWRlICoqLwogICAgZ2V0IGlzVmFsaWQoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbGlkOwogICAgfQogIH0KCiAgLy8gdG9kbyAtIHJlbWFwIGNhY2hpbmcKCiAgbGV0IGludGxMRkNhY2hlID0ge307CiAgZnVuY3Rpb24gZ2V0Q2FjaGVkTEYobG9jU3RyaW5nLCBvcHRzID0ge30pIHsKICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTsKICAgIGxldCBkdGYgPSBpbnRsTEZDYWNoZVtrZXldOwogICAgaWYgKCFkdGYpIHsKICAgICAgZHRmID0gbmV3IEludGwuTGlzdEZvcm1hdChsb2NTdHJpbmcsIG9wdHMpOwogICAgICBpbnRsTEZDYWNoZVtrZXldID0gZHRmOwogICAgfQogICAgcmV0dXJuIGR0ZjsKICB9CgogIGxldCBpbnRsRFRDYWNoZSA9IHt9OwogIGZ1bmN0aW9uIGdldENhY2hlZERURihsb2NTdHJpbmcsIG9wdHMgPSB7fSkgewogICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW2xvY1N0cmluZywgb3B0c10pOwogICAgbGV0IGR0ZiA9IGludGxEVENhY2hlW2tleV07CiAgICBpZiAoIWR0ZikgewogICAgICBkdGYgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NTdHJpbmcsIG9wdHMpOwogICAgICBpbnRsRFRDYWNoZVtrZXldID0gZHRmOwogICAgfQogICAgcmV0dXJuIGR0ZjsKICB9CgogIGxldCBpbnRsTnVtQ2FjaGUgPSB7fTsKICBmdW5jdGlvbiBnZXRDYWNoZWRJTkYobG9jU3RyaW5nLCBvcHRzID0ge30pIHsKICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTsKICAgIGxldCBpbmYgPSBpbnRsTnVtQ2FjaGVba2V5XTsKICAgIGlmICghaW5mKSB7CiAgICAgIGluZiA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NTdHJpbmcsIG9wdHMpOwogICAgICBpbnRsTnVtQ2FjaGVba2V5XSA9IGluZjsKICAgIH0KICAgIHJldHVybiBpbmY7CiAgfQoKICBsZXQgaW50bFJlbENhY2hlID0ge307CiAgZnVuY3Rpb24gZ2V0Q2FjaGVkUlRGKGxvY1N0cmluZywgb3B0cyA9IHt9KSB7CiAgICBjb25zdCB7IGJhc2UsIC4uLmNhY2hlS2V5T3B0cyB9ID0gb3B0czsgLy8gZXhjbHVkZSBgYmFzZWAgZnJvbSB0aGUgb3B0aW9ucwogICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW2xvY1N0cmluZywgY2FjaGVLZXlPcHRzXSk7CiAgICBsZXQgaW5mID0gaW50bFJlbENhY2hlW2tleV07CiAgICBpZiAoIWluZikgewogICAgICBpbmYgPSBuZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQobG9jU3RyaW5nLCBvcHRzKTsKICAgICAgaW50bFJlbENhY2hlW2tleV0gPSBpbmY7CiAgICB9CiAgICByZXR1cm4gaW5mOwogIH0KCiAgbGV0IHN5c0xvY2FsZUNhY2hlID0gbnVsbDsKICBmdW5jdGlvbiBzeXN0ZW1Mb2NhbGUoKSB7CiAgICBpZiAoc3lzTG9jYWxlQ2FjaGUpIHsKICAgICAgcmV0dXJuIHN5c0xvY2FsZUNhY2hlOwogICAgfSBlbHNlIHsKICAgICAgc3lzTG9jYWxlQ2FjaGUgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTsKICAgICAgcmV0dXJuIHN5c0xvY2FsZUNhY2hlOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVTdHJpbmcobG9jYWxlU3RyKSB7CiAgICAvLyBJIHJlYWxseSB3YW50IHRvIGF2b2lkIHdyaXRpbmcgYSBCQ1AgNDcgcGFyc2VyCiAgICAvLyBzZWUsIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL3dvb29ybS9iY3AtNDcKICAgIC8vIEluc3RlYWQsIHdlJ2xsIGRvIHRoaXM6CgogICAgLy8gYSkgaWYgdGhlIHN0cmluZyBoYXMgbm8gLXUgZXh0ZW5zaW9ucywganVzdCBsZWF2ZSBpdCBhbG9uZQogICAgLy8gYikgaWYgaXQgZG9lcywgdXNlIEludGwgdG8gcmVzb2x2ZSBldmVyeXRoaW5nCiAgICAvLyBjKSBpZiBJbnRsIGZhaWxzLCB0cnkgYWdhaW4gd2l0aG91dCB0aGUgLXUKCiAgICAvLyBwcml2YXRlIHN1YnRhZ3MgYW5kIHVuaWNvZGUgc3VidGFncyBoYXZlIG9yZGVyaW5nIHJlcXVpcmVtZW50cywKICAgIC8vIGFuZCB3ZSdyZSBub3QgcHJvcGVybHkgcGFyc2luZyB0aGlzLCBzbyBqdXN0IHN0cmlwIG91dCB0aGUKICAgIC8vIHByaXZhdGUgb25lcyBpZiB0aGV5IGV4aXN0LgogICAgY29uc3QgeEluZGV4ID0gbG9jYWxlU3RyLmluZGV4T2YoIi14LSIpOwogICAgaWYgKHhJbmRleCAhPT0gLTEpIHsKICAgICAgbG9jYWxlU3RyID0gbG9jYWxlU3RyLnN1YnN0cmluZygwLCB4SW5kZXgpOwogICAgfQoKICAgIGNvbnN0IHVJbmRleCA9IGxvY2FsZVN0ci5pbmRleE9mKCItdS0iKTsKICAgIGlmICh1SW5kZXggPT09IC0xKSB7CiAgICAgIHJldHVybiBbbG9jYWxlU3RyXTsKICAgIH0gZWxzZSB7CiAgICAgIGxldCBvcHRpb25zOwogICAgICBsZXQgc2VsZWN0ZWRTdHI7CiAgICAgIHRyeSB7CiAgICAgICAgb3B0aW9ucyA9IGdldENhY2hlZERURihsb2NhbGVTdHIpLnJlc29sdmVkT3B0aW9ucygpOwogICAgICAgIHNlbGVjdGVkU3RyID0gbG9jYWxlU3RyOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgY29uc3Qgc21hbGxlciA9IGxvY2FsZVN0ci5zdWJzdHJpbmcoMCwgdUluZGV4KTsKICAgICAgICBvcHRpb25zID0gZ2V0Q2FjaGVkRFRGKHNtYWxsZXIpLnJlc29sdmVkT3B0aW9ucygpOwogICAgICAgIHNlbGVjdGVkU3RyID0gc21hbGxlcjsKICAgICAgfQoKICAgICAgY29uc3QgeyBudW1iZXJpbmdTeXN0ZW0sIGNhbGVuZGFyIH0gPSBvcHRpb25zOwogICAgICByZXR1cm4gW3NlbGVjdGVkU3RyLCBudW1iZXJpbmdTeXN0ZW0sIGNhbGVuZGFyXTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGludGxDb25maWdTdHJpbmcobG9jYWxlU3RyLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSB7CiAgICBpZiAob3V0cHV0Q2FsZW5kYXIgfHwgbnVtYmVyaW5nU3lzdGVtKSB7CiAgICAgIGlmICghbG9jYWxlU3RyLmluY2x1ZGVzKCItdS0iKSkgewogICAgICAgIGxvY2FsZVN0ciArPSAiLXUiOwogICAgICB9CgogICAgICBpZiAob3V0cHV0Q2FsZW5kYXIpIHsKICAgICAgICBsb2NhbGVTdHIgKz0gYC1jYS0ke291dHB1dENhbGVuZGFyfWA7CiAgICAgIH0KCiAgICAgIGlmIChudW1iZXJpbmdTeXN0ZW0pIHsKICAgICAgICBsb2NhbGVTdHIgKz0gYC1udS0ke251bWJlcmluZ1N5c3RlbX1gOwogICAgICB9CiAgICAgIHJldHVybiBsb2NhbGVTdHI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbG9jYWxlU3RyOwogICAgfQogIH0KCiAgZnVuY3Rpb24gbWFwTW9udGhzKGYpIHsKICAgIGNvbnN0IG1zID0gW107CiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMjsgaSsrKSB7CiAgICAgIGNvbnN0IGR0ID0gRGF0ZVRpbWUudXRjKDIwMDksIGksIDEpOwogICAgICBtcy5wdXNoKGYoZHQpKTsKICAgIH0KICAgIHJldHVybiBtczsKICB9CgogIGZ1bmN0aW9uIG1hcFdlZWtkYXlzKGYpIHsKICAgIGNvbnN0IG1zID0gW107CiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSA3OyBpKyspIHsKICAgICAgY29uc3QgZHQgPSBEYXRlVGltZS51dGMoMjAxNiwgMTEsIDEzICsgaSk7CiAgICAgIG1zLnB1c2goZihkdCkpOwogICAgfQogICAgcmV0dXJuIG1zOwogIH0KCiAgZnVuY3Rpb24gbGlzdFN0dWZmKGxvYywgbGVuZ3RoLCBlbmdsaXNoRm4sIGludGxGbikgewogICAgY29uc3QgbW9kZSA9IGxvYy5saXN0aW5nTW9kZSgpOwoKICAgIGlmIChtb2RlID09PSAiZXJyb3IiKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIGlmIChtb2RlID09PSAiZW4iKSB7CiAgICAgIHJldHVybiBlbmdsaXNoRm4obGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBpbnRsRm4obGVuZ3RoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHN1cHBvcnRzRmFzdE51bWJlcnMobG9jKSB7CiAgICBpZiAobG9jLm51bWJlcmluZ1N5c3RlbSAmJiBsb2MubnVtYmVyaW5nU3lzdGVtICE9PSAibGF0biIpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICgKICAgICAgICBsb2MubnVtYmVyaW5nU3lzdGVtID09PSAibGF0biIgfHwKICAgICAgICAhbG9jLmxvY2FsZSB8fAogICAgICAgIGxvYy5sb2NhbGUuc3RhcnRzV2l0aCgiZW4iKSB8fAogICAgICAgIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvYy5pbnRsKS5yZXNvbHZlZE9wdGlvbnMoKS5udW1iZXJpbmdTeXN0ZW0gPT09ICJsYXRuIgogICAgICApOwogICAgfQogIH0KCiAgLyoqCiAgICogQHByaXZhdGUKICAgKi8KCiAgY2xhc3MgUG9seU51bWJlckZvcm1hdHRlciB7CiAgICBjb25zdHJ1Y3RvcihpbnRsLCBmb3JjZVNpbXBsZSwgb3B0cykgewogICAgICB0aGlzLnBhZFRvID0gb3B0cy5wYWRUbyB8fCAwOwogICAgICB0aGlzLmZsb29yID0gb3B0cy5mbG9vciB8fCBmYWxzZTsKCiAgICAgIGNvbnN0IHsgcGFkVG8sIGZsb29yLCAuLi5vdGhlck9wdHMgfSA9IG9wdHM7CgogICAgICBpZiAoIWZvcmNlU2ltcGxlIHx8IE9iamVjdC5rZXlzKG90aGVyT3B0cykubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IGludGxPcHRzID0geyB1c2VHcm91cGluZzogZmFsc2UsIC4uLm9wdHMgfTsKICAgICAgICBpZiAob3B0cy5wYWRUbyA+IDApIGludGxPcHRzLm1pbmltdW1JbnRlZ2VyRGlnaXRzID0gb3B0cy5wYWRUbzsKICAgICAgICB0aGlzLmluZiA9IGdldENhY2hlZElORihpbnRsLCBpbnRsT3B0cyk7CiAgICAgIH0KICAgIH0KCiAgICBmb3JtYXQoaSkgewogICAgICBpZiAodGhpcy5pbmYpIHsKICAgICAgICBjb25zdCBmaXhlZCA9IHRoaXMuZmxvb3IgPyBNYXRoLmZsb29yKGkpIDogaTsKICAgICAgICByZXR1cm4gdGhpcy5pbmYuZm9ybWF0KGZpeGVkKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyB0byBtYXRjaCB0aGUgYnJvd3NlcidzIG51bWJlcmZvcm1hdHRlciBkZWZhdWx0cwogICAgICAgIGNvbnN0IGZpeGVkID0gdGhpcy5mbG9vciA/IE1hdGguZmxvb3IoaSkgOiByb3VuZFRvKGksIDMpOwogICAgICAgIHJldHVybiBwYWRTdGFydChmaXhlZCwgdGhpcy5wYWRUbyk7CiAgICAgIH0KICAgIH0KICB9CgogIC8qKgogICAqIEBwcml2YXRlCiAgICovCgogIGNsYXNzIFBvbHlEYXRlRm9ybWF0dGVyIHsKICAgIGNvbnN0cnVjdG9yKGR0LCBpbnRsLCBvcHRzKSB7CiAgICAgIHRoaXMub3B0cyA9IG9wdHM7CiAgICAgIHRoaXMub3JpZ2luYWxab25lID0gdW5kZWZpbmVkOwoKICAgICAgbGV0IHogPSB1bmRlZmluZWQ7CiAgICAgIGlmICh0aGlzLm9wdHMudGltZVpvbmUpIHsKICAgICAgICAvLyBEb24ndCBhcHBseSBhbnkgd29ya2Fyb3VuZHMgaWYgYSB0aW1lWm9uZSBpcyBleHBsaWNpdGx5IHByb3ZpZGVkIGluIG9wdHMKICAgICAgICB0aGlzLmR0ID0gZHQ7CiAgICAgIH0gZWxzZSBpZiAoZHQuem9uZS50eXBlID09PSAiZml4ZWQiKSB7CiAgICAgICAgLy8gVVRDLTggb3IgRXRjL1VUQy04IGFyZSBub3QgcGFydCBvZiB0emRhdGEsIG9ubHkgRXRjL0dNVCs4IGFuZCB0aGUgbGlrZS4KICAgICAgICAvLyBUaGF0IGlzIHdoeSBmaXhlZC1vZmZzZXQgVFogaXMgc2V0IHRvIHRoYXQgdW5sZXNzIGl0IGlzOgogICAgICAgIC8vIDEuIFJlcHJlc2VudGluZyBvZmZzZXQgMCB3aGVuIFVUQyBpcyB1c2VkIHRvIG1haW50YWluIHByZXZpb3VzIGJlaGF2aW9yIGFuZCBkb2VzIG5vdCBiZWNvbWUgR01ULgogICAgICAgIC8vIDIuIFVuc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyOgogICAgICAgIC8vICAgIC0gc29tZSBkbyBub3Qgc3VwcG9ydCBFdGMvCiAgICAgICAgLy8gICAgLSA8IEV0Yy9HTVQtMTQsID4gRXRjL0dNVCsxMiwgYW5kIDMwLW1pbnV0ZSBvciA0NS1taW51dGUgb2Zmc2V0cyBhcmUgbm90IHBhcnQgb2YgdHpkYXRhCiAgICAgICAgY29uc3QgZ210T2Zmc2V0ID0gLTEgKiAoZHQub2Zmc2V0IC8gNjApOwogICAgICAgIGNvbnN0IG9mZnNldFogPSBnbXRPZmZzZXQgPj0gMCA/IGBFdGMvR01UKyR7Z210T2Zmc2V0fWAgOiBgRXRjL0dNVCR7Z210T2Zmc2V0fWA7CiAgICAgICAgaWYgKGR0Lm9mZnNldCAhPT0gMCAmJiBJQU5BWm9uZS5jcmVhdGUob2Zmc2V0WikudmFsaWQpIHsKICAgICAgICAgIHogPSBvZmZzZXRaOwogICAgICAgICAgdGhpcy5kdCA9IGR0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBOb3QgYWxsIGZpeGVkLW9mZnNldCB6b25lcyBsaWtlIEV0Yy8rNDozMCBhcmUgcHJlc2VudCBpbiB0emRhdGEgc28KICAgICAgICAgIC8vIHdlIG1hbnVhbGx5IGFwcGx5IHRoZSBvZmZzZXQgYW5kIHN1YnN0aXR1dGUgdGhlIHpvbmUgYXMgbmVlZGVkLgogICAgICAgICAgeiA9ICJVVEMiOwogICAgICAgICAgdGhpcy5kdCA9IGR0Lm9mZnNldCA9PT0gMCA/IGR0IDogZHQuc2V0Wm9uZSgiVVRDIikucGx1cyh7IG1pbnV0ZXM6IGR0Lm9mZnNldCB9KTsKICAgICAgICAgIHRoaXMub3JpZ2luYWxab25lID0gZHQuem9uZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZHQuem9uZS50eXBlID09PSAic3lzdGVtIikgewogICAgICAgIHRoaXMuZHQgPSBkdDsKICAgICAgfSBlbHNlIGlmIChkdC56b25lLnR5cGUgPT09ICJpYW5hIikgewogICAgICAgIHRoaXMuZHQgPSBkdDsKICAgICAgICB6ID0gZHQuem9uZS5uYW1lOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEN1c3RvbSB6b25lcyBjYW4gaGF2ZSBhbnkgb2Zmc2V0IC8gb2Zmc2V0TmFtZSBzbyB3ZSBqdXN0IG1hbnVhbGx5CiAgICAgICAgLy8gYXBwbHkgdGhlIG9mZnNldCBhbmQgc3Vic3RpdHV0ZSB0aGUgem9uZSBhcyBuZWVkZWQuCiAgICAgICAgeiA9ICJVVEMiOwogICAgICAgIHRoaXMuZHQgPSBkdC5zZXRab25lKCJVVEMiKS5wbHVzKHsgbWludXRlczogZHQub2Zmc2V0IH0pOwogICAgICAgIHRoaXMub3JpZ2luYWxab25lID0gZHQuem9uZTsKICAgICAgfQoKICAgICAgY29uc3QgaW50bE9wdHMgPSB7IC4uLnRoaXMub3B0cyB9OwogICAgICBpbnRsT3B0cy50aW1lWm9uZSA9IGludGxPcHRzLnRpbWVab25lIHx8IHo7CiAgICAgIHRoaXMuZHRmID0gZ2V0Q2FjaGVkRFRGKGludGwsIGludGxPcHRzKTsKICAgIH0KCiAgICBmb3JtYXQoKSB7CiAgICAgIGlmICh0aGlzLm9yaWdpbmFsWm9uZSkgewogICAgICAgIC8vIElmIHdlIGhhdmUgdG8gc3Vic3RpdHV0ZSBpbiB0aGUgYWN0dWFsIHpvbmUgbmFtZSwgd2UgaGF2ZSB0byB1c2UKICAgICAgICAvLyBmb3JtYXRUb1BhcnRzIHNvIHRoYXQgdGhlIHRpbWV6b25lIGNhbiBiZSByZXBsYWNlZC4KICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRUb1BhcnRzKCkKICAgICAgICAgIC5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpCiAgICAgICAgICAuam9pbigiIik7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuZHRmLmZvcm1hdCh0aGlzLmR0LnRvSlNEYXRlKCkpOwogICAgfQoKICAgIGZvcm1hdFRvUGFydHMoKSB7CiAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5kdGYuZm9ybWF0VG9QYXJ0cyh0aGlzLmR0LnRvSlNEYXRlKCkpOwogICAgICBpZiAodGhpcy5vcmlnaW5hbFpvbmUpIHsKICAgICAgICByZXR1cm4gcGFydHMubWFwKChwYXJ0KSA9PiB7CiAgICAgICAgICBpZiAocGFydC50eXBlID09PSAidGltZVpvbmVOYW1lIikgewogICAgICAgICAgICBjb25zdCBvZmZzZXROYW1lID0gdGhpcy5vcmlnaW5hbFpvbmUub2Zmc2V0TmFtZSh0aGlzLmR0LnRzLCB7CiAgICAgICAgICAgICAgbG9jYWxlOiB0aGlzLmR0LmxvY2FsZSwKICAgICAgICAgICAgICBmb3JtYXQ6IHRoaXMub3B0cy50aW1lWm9uZU5hbWUsCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIC4uLnBhcnQsCiAgICAgICAgICAgICAgdmFsdWU6IG9mZnNldE5hbWUsCiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gcGFydDsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gcGFydHM7CiAgICB9CgogICAgcmVzb2x2ZWRPcHRpb25zKCkgewogICAgICByZXR1cm4gdGhpcy5kdGYucmVzb2x2ZWRPcHRpb25zKCk7CiAgICB9CiAgfQoKICAvKioKICAgKiBAcHJpdmF0ZQogICAqLwogIGNsYXNzIFBvbHlSZWxGb3JtYXR0ZXIgewogICAgY29uc3RydWN0b3IoaW50bCwgaXNFbmdsaXNoLCBvcHRzKSB7CiAgICAgIHRoaXMub3B0cyA9IHsgc3R5bGU6ICJsb25nIiwgLi4ub3B0cyB9OwogICAgICBpZiAoIWlzRW5nbGlzaCAmJiBoYXNSZWxhdGl2ZSgpKSB7CiAgICAgICAgdGhpcy5ydGYgPSBnZXRDYWNoZWRSVEYoaW50bCwgb3B0cyk7CiAgICAgIH0KICAgIH0KCiAgICBmb3JtYXQoY291bnQsIHVuaXQpIHsKICAgICAgaWYgKHRoaXMucnRmKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucnRmLmZvcm1hdChjb3VudCwgdW5pdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGZvcm1hdFJlbGF0aXZlVGltZSh1bml0LCBjb3VudCwgdGhpcy5vcHRzLm51bWVyaWMsIHRoaXMub3B0cy5zdHlsZSAhPT0gImxvbmciKTsKICAgICAgfQogICAgfQoKICAgIGZvcm1hdFRvUGFydHMoY291bnQsIHVuaXQpIHsKICAgICAgaWYgKHRoaXMucnRmKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucnRmLmZvcm1hdFRvUGFydHMoY291bnQsIHVuaXQpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgfQogIH0KCiAgLyoqCiAgICogQHByaXZhdGUKICAgKi8KCiAgY2xhc3MgTG9jYWxlIHsKICAgIHN0YXRpYyBmcm9tT3B0cyhvcHRzKSB7CiAgICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKG9wdHMubG9jYWxlLCBvcHRzLm51bWJlcmluZ1N5c3RlbSwgb3B0cy5vdXRwdXRDYWxlbmRhciwgb3B0cy5kZWZhdWx0VG9FTik7CiAgICB9CgogICAgc3RhdGljIGNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIsIGRlZmF1bHRUb0VOID0gZmFsc2UpIHsKICAgICAgY29uc3Qgc3BlY2lmaWVkTG9jYWxlID0gbG9jYWxlIHx8IFNldHRpbmdzLmRlZmF1bHRMb2NhbGU7CiAgICAgIC8vIHRoZSBzeXN0ZW0gbG9jYWxlIGlzIHVzZWZ1bCBmb3IgaHVtYW4gcmVhZGFibGUgc3RyaW5ncyBidXQgYW5ub3lpbmcgZm9yIHBhcnNpbmcvZm9ybWF0dGluZyBrbm93biBmb3JtYXRzCiAgICAgIGNvbnN0IGxvY2FsZVIgPSBzcGVjaWZpZWRMb2NhbGUgfHwgKGRlZmF1bHRUb0VOID8gImVuLVVTIiA6IHN5c3RlbUxvY2FsZSgpKTsKICAgICAgY29uc3QgbnVtYmVyaW5nU3lzdGVtUiA9IG51bWJlcmluZ1N5c3RlbSB8fCBTZXR0aW5ncy5kZWZhdWx0TnVtYmVyaW5nU3lzdGVtOwogICAgICBjb25zdCBvdXRwdXRDYWxlbmRhclIgPSBvdXRwdXRDYWxlbmRhciB8fCBTZXR0aW5ncy5kZWZhdWx0T3V0cHV0Q2FsZW5kYXI7CiAgICAgIHJldHVybiBuZXcgTG9jYWxlKGxvY2FsZVIsIG51bWJlcmluZ1N5c3RlbVIsIG91dHB1dENhbGVuZGFyUiwgc3BlY2lmaWVkTG9jYWxlKTsKICAgIH0KCiAgICBzdGF0aWMgcmVzZXRDYWNoZSgpIHsKICAgICAgc3lzTG9jYWxlQ2FjaGUgPSBudWxsOwogICAgICBpbnRsRFRDYWNoZSA9IHt9OwogICAgICBpbnRsTnVtQ2FjaGUgPSB7fTsKICAgICAgaW50bFJlbENhY2hlID0ge307CiAgICB9CgogICAgc3RhdGljIGZyb21PYmplY3QoeyBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIgfSA9IHt9KSB7CiAgICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcik7CiAgICB9CgogICAgY29uc3RydWN0b3IobG9jYWxlLCBudW1iZXJpbmcsIG91dHB1dENhbGVuZGFyLCBzcGVjaWZpZWRMb2NhbGUpIHsKICAgICAgY29uc3QgW3BhcnNlZExvY2FsZSwgcGFyc2VkTnVtYmVyaW5nU3lzdGVtLCBwYXJzZWRPdXRwdXRDYWxlbmRhcl0gPSBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGUpOwoKICAgICAgdGhpcy5sb2NhbGUgPSBwYXJzZWRMb2NhbGU7CiAgICAgIHRoaXMubnVtYmVyaW5nU3lzdGVtID0gbnVtYmVyaW5nIHx8IHBhcnNlZE51bWJlcmluZ1N5c3RlbSB8fCBudWxsOwogICAgICB0aGlzLm91dHB1dENhbGVuZGFyID0gb3V0cHV0Q2FsZW5kYXIgfHwgcGFyc2VkT3V0cHV0Q2FsZW5kYXIgfHwgbnVsbDsKICAgICAgdGhpcy5pbnRsID0gaW50bENvbmZpZ1N0cmluZyh0aGlzLmxvY2FsZSwgdGhpcy5udW1iZXJpbmdTeXN0ZW0sIHRoaXMub3V0cHV0Q2FsZW5kYXIpOwoKICAgICAgdGhpcy53ZWVrZGF5c0NhY2hlID0geyBmb3JtYXQ6IHt9LCBzdGFuZGFsb25lOiB7fSB9OwogICAgICB0aGlzLm1vbnRoc0NhY2hlID0geyBmb3JtYXQ6IHt9LCBzdGFuZGFsb25lOiB7fSB9OwogICAgICB0aGlzLm1lcmlkaWVtQ2FjaGUgPSBudWxsOwogICAgICB0aGlzLmVyYUNhY2hlID0ge307CgogICAgICB0aGlzLnNwZWNpZmllZExvY2FsZSA9IHNwZWNpZmllZExvY2FsZTsKICAgICAgdGhpcy5mYXN0TnVtYmVyc0NhY2hlZCA9IG51bGw7CiAgICB9CgogICAgZ2V0IGZhc3ROdW1iZXJzKCkgewogICAgICBpZiAodGhpcy5mYXN0TnVtYmVyc0NhY2hlZCA9PSBudWxsKSB7CiAgICAgICAgdGhpcy5mYXN0TnVtYmVyc0NhY2hlZCA9IHN1cHBvcnRzRmFzdE51bWJlcnModGhpcyk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkOwogICAgfQoKICAgIGxpc3RpbmdNb2RlKCkgewogICAgICBjb25zdCBpc0FjdHVhbGx5RW4gPSB0aGlzLmlzRW5nbGlzaCgpOwogICAgICBjb25zdCBoYXNOb1dlaXJkbmVzcyA9CiAgICAgICAgKHRoaXMubnVtYmVyaW5nU3lzdGVtID09PSBudWxsIHx8IHRoaXMubnVtYmVyaW5nU3lzdGVtID09PSAibGF0biIpICYmCiAgICAgICAgKHRoaXMub3V0cHV0Q2FsZW5kYXIgPT09IG51bGwgfHwgdGhpcy5vdXRwdXRDYWxlbmRhciA9PT0gImdyZWdvcnkiKTsKICAgICAgcmV0dXJuIGlzQWN0dWFsbHlFbiAmJiBoYXNOb1dlaXJkbmVzcyA/ICJlbiIgOiAiaW50bCI7CiAgICB9CgogICAgY2xvbmUoYWx0cykgewogICAgICBpZiAoIWFsdHMgfHwgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYWx0cykubGVuZ3RoID09PSAwKSB7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIExvY2FsZS5jcmVhdGUoCiAgICAgICAgICBhbHRzLmxvY2FsZSB8fCB0aGlzLnNwZWNpZmllZExvY2FsZSwKICAgICAgICAgIGFsdHMubnVtYmVyaW5nU3lzdGVtIHx8IHRoaXMubnVtYmVyaW5nU3lzdGVtLAogICAgICAgICAgYWx0cy5vdXRwdXRDYWxlbmRhciB8fCB0aGlzLm91dHB1dENhbGVuZGFyLAogICAgICAgICAgYWx0cy5kZWZhdWx0VG9FTiB8fCBmYWxzZQogICAgICAgICk7CiAgICAgIH0KICAgIH0KCiAgICByZWRlZmF1bHRUb0VOKGFsdHMgPSB7fSkgewogICAgICByZXR1cm4gdGhpcy5jbG9uZSh7IC4uLmFsdHMsIGRlZmF1bHRUb0VOOiB0cnVlIH0pOwogICAgfQoKICAgIHJlZGVmYXVsdFRvU3lzdGVtKGFsdHMgPSB7fSkgewogICAgICByZXR1cm4gdGhpcy5jbG9uZSh7IC4uLmFsdHMsIGRlZmF1bHRUb0VOOiBmYWxzZSB9KTsKICAgIH0KCiAgICBtb250aHMobGVuZ3RoLCBmb3JtYXQgPSBmYWxzZSkgewogICAgICByZXR1cm4gbGlzdFN0dWZmKHRoaXMsIGxlbmd0aCwgbW9udGhzLCAoKSA9PiB7CiAgICAgICAgY29uc3QgaW50bCA9IGZvcm1hdCA/IHsgbW9udGg6IGxlbmd0aCwgZGF5OiAibnVtZXJpYyIgfSA6IHsgbW9udGg6IGxlbmd0aCB9LAogICAgICAgICAgZm9ybWF0U3RyID0gZm9ybWF0ID8gImZvcm1hdCIgOiAic3RhbmRhbG9uZSI7CiAgICAgICAgaWYgKCF0aGlzLm1vbnRoc0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSkgewogICAgICAgICAgdGhpcy5tb250aHNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF0gPSBtYXBNb250aHMoKGR0KSA9PiB0aGlzLmV4dHJhY3QoZHQsIGludGwsICJtb250aCIpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMubW9udGhzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdOwogICAgICB9KTsKICAgIH0KCiAgICB3ZWVrZGF5cyhsZW5ndGgsIGZvcm1hdCA9IGZhbHNlKSB7CiAgICAgIHJldHVybiBsaXN0U3R1ZmYodGhpcywgbGVuZ3RoLCB3ZWVrZGF5cywgKCkgPT4gewogICAgICAgIGNvbnN0IGludGwgPSBmb3JtYXQKICAgICAgICAgICAgPyB7IHdlZWtkYXk6IGxlbmd0aCwgeWVhcjogIm51bWVyaWMiLCBtb250aDogImxvbmciLCBkYXk6ICJudW1lcmljIiB9CiAgICAgICAgICAgIDogeyB3ZWVrZGF5OiBsZW5ndGggfSwKICAgICAgICAgIGZvcm1hdFN0ciA9IGZvcm1hdCA/ICJmb3JtYXQiIDogInN0YW5kYWxvbmUiOwogICAgICAgIGlmICghdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSkgewogICAgICAgICAgdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSA9IG1hcFdlZWtkYXlzKChkdCkgPT4KICAgICAgICAgICAgdGhpcy5leHRyYWN0KGR0LCBpbnRsLCAid2Vla2RheSIpCiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXTsKICAgICAgfSk7CiAgICB9CgogICAgbWVyaWRpZW1zKCkgewogICAgICByZXR1cm4gbGlzdFN0dWZmKAogICAgICAgIHRoaXMsCiAgICAgICAgdW5kZWZpbmVkLAogICAgICAgICgpID0+IG1lcmlkaWVtcywKICAgICAgICAoKSA9PiB7CiAgICAgICAgICAvLyBJbiB0aGVvcnkgdGhlcmUgY291bGQgYmUgYXJpYml0cmFyeSBkYXkgcGVyaW9kcy4gV2UncmUgZ29ubmEgYXNzdW1lIHRoZXJlIGFyZSBleGFjdGx5IHR3bwogICAgICAgICAgLy8gZm9yIEFNIGFuZCBQTS4gVGhpcyBpcyBwcm9iYWJseSB3cm9uZywgYnV0IGl0J3MgbWFrZXMgcGFyc2luZyB3YXkgZWFzaWVyLgogICAgICAgICAgaWYgKCF0aGlzLm1lcmlkaWVtQ2FjaGUpIHsKICAgICAgICAgICAgY29uc3QgaW50bCA9IHsgaG91cjogIm51bWVyaWMiLCBob3VyQ3ljbGU6ICJoMTIiIH07CiAgICAgICAgICAgIHRoaXMubWVyaWRpZW1DYWNoZSA9IFtEYXRlVGltZS51dGMoMjAxNiwgMTEsIDEzLCA5KSwgRGF0ZVRpbWUudXRjKDIwMTYsIDExLCAxMywgMTkpXS5tYXAoCiAgICAgICAgICAgICAgKGR0KSA9PiB0aGlzLmV4dHJhY3QoZHQsIGludGwsICJkYXlwZXJpb2QiKQogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiB0aGlzLm1lcmlkaWVtQ2FjaGU7CiAgICAgICAgfQogICAgICApOwogICAgfQoKICAgIGVyYXMobGVuZ3RoKSB7CiAgICAgIHJldHVybiBsaXN0U3R1ZmYodGhpcywgbGVuZ3RoLCBlcmFzLCAoKSA9PiB7CiAgICAgICAgY29uc3QgaW50bCA9IHsgZXJhOiBsZW5ndGggfTsKCiAgICAgICAgLy8gVGhpcyBpcyBwcm9ibGVtYXRpYy4gRGlmZmVyZW50IGNhbGVuZGFycyBhcmUgZ29pbmcgdG8gZGVmaW5lIGVyYXMgdG90YWxseSBkaWZmZXJlbnRseS4gV2hhdCBJIG5lZWQgaXMgdGhlIG1pbmltdW0gc2V0IG9mIGRhdGVzCiAgICAgICAgLy8gdG8gZGVmaW5pdGVseSBlbnVtZXJhdGUgdGhlbS4KICAgICAgICBpZiAoIXRoaXMuZXJhQ2FjaGVbbGVuZ3RoXSkgewogICAgICAgICAgdGhpcy5lcmFDYWNoZVtsZW5ndGhdID0gW0RhdGVUaW1lLnV0YygtNDAsIDEsIDEpLCBEYXRlVGltZS51dGMoMjAxNywgMSwgMSldLm1hcCgoZHQpID0+CiAgICAgICAgICAgIHRoaXMuZXh0cmFjdChkdCwgaW50bCwgImVyYSIpCiAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRoaXMuZXJhQ2FjaGVbbGVuZ3RoXTsKICAgICAgfSk7CiAgICB9CgogICAgZXh0cmFjdChkdCwgaW50bE9wdHMsIGZpZWxkKSB7CiAgICAgIGNvbnN0IGRmID0gdGhpcy5kdEZvcm1hdHRlcihkdCwgaW50bE9wdHMpLAogICAgICAgIHJlc3VsdHMgPSBkZi5mb3JtYXRUb1BhcnRzKCksCiAgICAgICAgbWF0Y2hpbmcgPSByZXN1bHRzLmZpbmQoKG0pID0+IG0udHlwZS50b0xvd2VyQ2FzZSgpID09PSBmaWVsZCk7CiAgICAgIHJldHVybiBtYXRjaGluZyA/IG1hdGNoaW5nLnZhbHVlIDogbnVsbDsKICAgIH0KCiAgICBudW1iZXJGb3JtYXR0ZXIob3B0cyA9IHt9KSB7CiAgICAgIC8vIHRoaXMgZm9yY2VzaW1wbGUgb3B0aW9uIGlzIG5ldmVyIHVzZWQgKHRoZSBvbmx5IGNhbGxlciBzaG9ydC1jaXJjdWl0cyBvbiBpdCwgYnV0IGl0IHNlZW1zIHNhZmVyIHRvIGxlYXZlKQogICAgICAvLyAoaW4gY29udHJhc3QsIHRoZSByZXN0IG9mIHRoZSBjb25kaXRpb24gaXMgdXNlZCBoZWF2aWx5KQogICAgICByZXR1cm4gbmV3IFBvbHlOdW1iZXJGb3JtYXR0ZXIodGhpcy5pbnRsLCBvcHRzLmZvcmNlU2ltcGxlIHx8IHRoaXMuZmFzdE51bWJlcnMsIG9wdHMpOwogICAgfQoKICAgIGR0Rm9ybWF0dGVyKGR0LCBpbnRsT3B0cyA9IHt9KSB7CiAgICAgIHJldHVybiBuZXcgUG9seURhdGVGb3JtYXR0ZXIoZHQsIHRoaXMuaW50bCwgaW50bE9wdHMpOwogICAgfQoKICAgIHJlbEZvcm1hdHRlcihvcHRzID0ge30pIHsKICAgICAgcmV0dXJuIG5ldyBQb2x5UmVsRm9ybWF0dGVyKHRoaXMuaW50bCwgdGhpcy5pc0VuZ2xpc2goKSwgb3B0cyk7CiAgICB9CgogICAgbGlzdEZvcm1hdHRlcihvcHRzID0ge30pIHsKICAgICAgcmV0dXJuIGdldENhY2hlZExGKHRoaXMuaW50bCwgb3B0cyk7CiAgICB9CgogICAgaXNFbmdsaXNoKCkgewogICAgICByZXR1cm4gKAogICAgICAgIHRoaXMubG9jYWxlID09PSAiZW4iIHx8CiAgICAgICAgdGhpcy5sb2NhbGUudG9Mb3dlckNhc2UoKSA9PT0gImVuLXVzIiB8fAogICAgICAgIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMuaW50bCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlLnN0YXJ0c1dpdGgoImVuLXVzIikKICAgICAgKTsKICAgIH0KCiAgICBlcXVhbHMob3RoZXIpIHsKICAgICAgcmV0dXJuICgKICAgICAgICB0aGlzLmxvY2FsZSA9PT0gb3RoZXIubG9jYWxlICYmCiAgICAgICAgdGhpcy5udW1iZXJpbmdTeXN0ZW0gPT09IG90aGVyLm51bWJlcmluZ1N5c3RlbSAmJgogICAgICAgIHRoaXMub3V0cHV0Q2FsZW5kYXIgPT09IG90aGVyLm91dHB1dENhbGVuZGFyCiAgICAgICk7CiAgICB9CiAgfQoKICBsZXQgc2luZ2xldG9uID0gbnVsbDsKCiAgLyoqCiAgICogQSB6b25lIHdpdGggYSBmaXhlZCBvZmZzZXQgKG1lYW5pbmcgbm8gRFNUKQogICAqIEBpbXBsZW1lbnRzIHtab25lfQogICAqLwogIGNsYXNzIEZpeGVkT2Zmc2V0Wm9uZSBleHRlbmRzIFpvbmUgewogICAgLyoqCiAgICAgKiBHZXQgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgVVRDCiAgICAgKiBAcmV0dXJuIHtGaXhlZE9mZnNldFpvbmV9CiAgICAgKi8KICAgIHN0YXRpYyBnZXQgdXRjSW5zdGFuY2UoKSB7CiAgICAgIGlmIChzaW5nbGV0b24gPT09IG51bGwpIHsKICAgICAgICBzaW5nbGV0b24gPSBuZXcgRml4ZWRPZmZzZXRab25lKDApOwogICAgICB9CiAgICAgIHJldHVybiBzaW5nbGV0b247CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYW4gaW5zdGFuY2Ugd2l0aCBhIHNwZWNpZmllZCBvZmZzZXQKICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBUaGUgb2Zmc2V0IGluIG1pbnV0ZXMKICAgICAqIEByZXR1cm4ge0ZpeGVkT2Zmc2V0Wm9uZX0KICAgICAqLwogICAgc3RhdGljIGluc3RhbmNlKG9mZnNldCkgewogICAgICByZXR1cm4gb2Zmc2V0ID09PSAwID8gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlIDogbmV3IEZpeGVkT2Zmc2V0Wm9uZShvZmZzZXQpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGFuIGluc3RhbmNlIG9mIEZpeGVkT2Zmc2V0Wm9uZSBmcm9tIGEgVVRDIG9mZnNldCBzdHJpbmcsIGxpa2UgIlVUQys2IgogICAgICogQHBhcmFtIHtzdHJpbmd9IHMgLSBUaGUgb2Zmc2V0IHN0cmluZyB0byBwYXJzZQogICAgICogQGV4YW1wbGUgRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKCJVVEMrNiIpCiAgICAgKiBAZXhhbXBsZSBGaXhlZE9mZnNldFpvbmUucGFyc2VTcGVjaWZpZXIoIlVUQyswNiIpCiAgICAgKiBAZXhhbXBsZSBGaXhlZE9mZnNldFpvbmUucGFyc2VTcGVjaWZpZXIoIlVUQy02OjAwIikKICAgICAqIEByZXR1cm4ge0ZpeGVkT2Zmc2V0Wm9uZX0KICAgICAqLwogICAgc3RhdGljIHBhcnNlU3BlY2lmaWVyKHMpIHsKICAgICAgaWYgKHMpIHsKICAgICAgICBjb25zdCByID0gcy5tYXRjaCgvXnV0Yyg/OihbKy1dXGR7MSwyfSkoPzo6KFxkezJ9KSk/KT8kL2kpOwogICAgICAgIGlmIChyKSB7CiAgICAgICAgICByZXR1cm4gbmV3IEZpeGVkT2Zmc2V0Wm9uZShzaWduZWRPZmZzZXQoclsxXSwgclsyXSkpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBjb25zdHJ1Y3RvcihvZmZzZXQpIHsKICAgICAgc3VwZXIoKTsKICAgICAgLyoqIEBwcml2YXRlICoqLwogICAgICB0aGlzLmZpeGVkID0gb2Zmc2V0OwogICAgfQoKICAgIC8qKiBAb3ZlcnJpZGUgKiovCiAgICBnZXQgdHlwZSgpIHsKICAgICAgcmV0dXJuICJmaXhlZCI7CiAgICB9CgogICAgLyoqIEBvdmVycmlkZSAqKi8KICAgIGdldCBuYW1lKCkgewogICAgICByZXR1cm4gdGhpcy5maXhlZCA9PT0gMCA/ICJVVEMiIDogYFVUQyR7Zm9ybWF0T2Zmc2V0KHRoaXMuZml4ZWQsICJuYXJyb3ciKX1gOwogICAgfQoKICAgIGdldCBpYW5hTmFtZSgpIHsKICAgICAgaWYgKHRoaXMuZml4ZWQgPT09IDApIHsKICAgICAgICByZXR1cm4gIkV0Yy9VVEMiOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBgRXRjL0dNVCR7Zm9ybWF0T2Zmc2V0KC10aGlzLmZpeGVkLCAibmFycm93Iil9YDsKICAgICAgfQogICAgfQoKICAgIC8qKiBAb3ZlcnJpZGUgKiovCiAgICBvZmZzZXROYW1lKCkgewogICAgICByZXR1cm4gdGhpcy5uYW1lOwogICAgfQoKICAgIC8qKiBAb3ZlcnJpZGUgKiovCiAgICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkgewogICAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHRoaXMuZml4ZWQsIGZvcm1hdCk7CiAgICB9CgogICAgLyoqIEBvdmVycmlkZSAqKi8KICAgIGdldCBpc1VuaXZlcnNhbCgpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqIEBvdmVycmlkZSAqKi8KICAgIG9mZnNldCgpIHsKICAgICAgcmV0dXJuIHRoaXMuZml4ZWQ7CiAgICB9CgogICAgLyoqIEBvdmVycmlkZSAqKi8KICAgIGVxdWFscyhvdGhlclpvbmUpIHsKICAgICAgcmV0dXJuIG90aGVyWm9uZS50eXBlID09PSAiZml4ZWQiICYmIG90aGVyWm9uZS5maXhlZCA9PT0gdGhpcy5maXhlZDsKICAgIH0KCiAgICAvKiogQG92ZXJyaWRlICoqLwogICAgZ2V0IGlzVmFsaWQoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KCiAgLyoqCiAgICogQSB6b25lIHRoYXQgZmFpbGVkIHRvIHBhcnNlLiBZb3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcy4KICAgKiBAaW1wbGVtZW50cyB7Wm9uZX0KICAgKi8KICBjbGFzcyBJbnZhbGlkWm9uZSBleHRlbmRzIFpvbmUgewogICAgY29uc3RydWN0b3Ioem9uZU5hbWUpIHsKICAgICAgc3VwZXIoKTsKICAgICAgLyoqICBAcHJpdmF0ZSAqLwogICAgICB0aGlzLnpvbmVOYW1lID0gem9uZU5hbWU7CiAgICB9CgogICAgLyoqIEBvdmVycmlkZSAqKi8KICAgIGdldCB0eXBlKCkgewogICAgICByZXR1cm4gImludmFsaWQiOwogICAgfQoKICAgIC8qKiBAb3ZlcnJpZGUgKiovCiAgICBnZXQgbmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuem9uZU5hbWU7CiAgICB9CgogICAgLyoqIEBvdmVycmlkZSAqKi8KICAgIGdldCBpc1VuaXZlcnNhbCgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKiBAb3ZlcnJpZGUgKiovCiAgICBvZmZzZXROYW1lKCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKiogQG92ZXJyaWRlICoqLwogICAgZm9ybWF0T2Zmc2V0KCkgewogICAgICByZXR1cm4gIiI7CiAgICB9CgogICAgLyoqIEBvdmVycmlkZSAqKi8KICAgIG9mZnNldCgpIHsKICAgICAgcmV0dXJuIE5hTjsKICAgIH0KCiAgICAvKiogQG92ZXJyaWRlICoqLwogICAgZXF1YWxzKCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqIEBvdmVycmlkZSAqKi8KICAgIGdldCBpc1ZhbGlkKCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICAvKioKICAgKiBAcHJpdmF0ZQogICAqLwoKICBmdW5jdGlvbiBub3JtYWxpemVab25lKGlucHV0LCBkZWZhdWx0Wm9uZSkgewogICAgaWYgKGlzVW5kZWZpbmVkKGlucHV0KSB8fCBpbnB1dCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gZGVmYXVsdFpvbmU7CiAgICB9IGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgWm9uZSkgewogICAgICByZXR1cm4gaW5wdXQ7CiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGlucHV0KSkgewogICAgICBjb25zdCBsb3dlcmVkID0gaW5wdXQudG9Mb3dlckNhc2UoKTsKICAgICAgaWYgKGxvd2VyZWQgPT09ICJkZWZhdWx0IikgcmV0dXJuIGRlZmF1bHRab25lOwogICAgICBlbHNlIGlmIChsb3dlcmVkID09PSAibG9jYWwiIHx8IGxvd2VyZWQgPT09ICJzeXN0ZW0iKSByZXR1cm4gU3lzdGVtWm9uZS5pbnN0YW5jZTsKICAgICAgZWxzZSBpZiAobG93ZXJlZCA9PT0gInV0YyIgfHwgbG93ZXJlZCA9PT0gImdtdCIpIHJldHVybiBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2U7CiAgICAgIGVsc2UgcmV0dXJuIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihsb3dlcmVkKSB8fCBJQU5BWm9uZS5jcmVhdGUoaW5wdXQpOwogICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHsKICAgICAgcmV0dXJuIEZpeGVkT2Zmc2V0Wm9uZS5pbnN0YW5jZShpbnB1dCk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gIm9iamVjdCIgJiYgIm9mZnNldCIgaW4gaW5wdXQgJiYgdHlwZW9mIGlucHV0Lm9mZnNldCA9PT0gImZ1bmN0aW9uIikgewogICAgICAvLyBUaGlzIGlzIGR1bWIsIGJ1dCB0aGUgaW5zdGFuY2VvZiBjaGVjayBhYm92ZSBkb2Vzbid0IHNlZW0gdG8gcmVhbGx5IHdvcmsKICAgICAgLy8gc28gd2UncmUgZHVjayBjaGVja2luZyBpdAogICAgICByZXR1cm4gaW5wdXQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IEludmFsaWRab25lKGlucHV0KTsKICAgIH0KICB9CgogIGxldCBub3cgPSAoKSA9PiBEYXRlLm5vdygpLAogICAgZGVmYXVsdFpvbmUgPSAic3lzdGVtIiwKICAgIGRlZmF1bHRMb2NhbGUgPSBudWxsLAogICAgZGVmYXVsdE51bWJlcmluZ1N5c3RlbSA9IG51bGwsCiAgICBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIgPSBudWxsLAogICAgdHdvRGlnaXRDdXRvZmZZZWFyID0gNjAsCiAgICB0aHJvd09uSW52YWxpZDsKCiAgLyoqCiAgICogU2V0dGluZ3MgY29udGFpbnMgc3RhdGljIGdldHRlcnMgYW5kIHNldHRlcnMgdGhhdCBjb250cm9sIEx1eG9uJ3Mgb3ZlcmFsbCBiZWhhdmlvci4gTHV4b24gaXMgYSBzaW1wbGUgbGlicmFyeSB3aXRoIGZldyBvcHRpb25zLCBidXQgdGhlIG9uZXMgaXQgZG9lcyBoYXZlIGxpdmUgaGVyZS4KICAgKi8KICBjbGFzcyBTZXR0aW5ncyB7CiAgICAvKioKICAgICAqIEdldCB0aGUgY2FsbGJhY2sgZm9yIHJldHVybmluZyB0aGUgY3VycmVudCB0aW1lc3RhbXAuCiAgICAgKiBAdHlwZSB7ZnVuY3Rpb259CiAgICAgKi8KICAgIHN0YXRpYyBnZXQgbm93KCkgewogICAgICByZXR1cm4gbm93OwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBjYWxsYmFjayBmb3IgcmV0dXJuaW5nIHRoZSBjdXJyZW50IHRpbWVzdGFtcC4KICAgICAqIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgbnVtYmVyLCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIEVwb2NoIG1pbGxpc2Vjb25kIGNvdW50CiAgICAgKiBAdHlwZSB7ZnVuY3Rpb259CiAgICAgKiBAZXhhbXBsZSBTZXR0aW5ncy5ub3cgPSAoKSA9PiBEYXRlLm5vdygpICsgMzAwMCAvLyBwcmV0ZW5kIGl0IGlzIDMgc2Vjb25kcyBpbiB0aGUgZnV0dXJlCiAgICAgKiBAZXhhbXBsZSBTZXR0aW5ncy5ub3cgPSAoKSA9PiAwIC8vIGFsd2F5cyBwcmV0ZW5kIGl0J3MgSmFuIDEsIDE5NzAgYXQgbWlkbmlnaHQgaW4gVVRDIHRpbWUKICAgICAqLwogICAgc3RhdGljIHNldCBub3cobikgewogICAgICBub3cgPSBuOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBkZWZhdWx0IHRpbWUgem9uZSB0byBjcmVhdGUgRGF0ZVRpbWVzIGluLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLgogICAgICogVXNlIHRoZSB2YWx1ZSAic3lzdGVtIiB0byByZXNldCB0aGlzIHZhbHVlIHRvIHRoZSBzeXN0ZW0ncyB0aW1lIHpvbmUuCiAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICovCiAgICBzdGF0aWMgc2V0IGRlZmF1bHRab25lKHpvbmUpIHsKICAgICAgZGVmYXVsdFpvbmUgPSB6b25lOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBkZWZhdWx0IHRpbWUgem9uZSBvYmplY3QgY3VycmVudGx5IHVzZWQgdG8gY3JlYXRlIERhdGVUaW1lcy4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy4KICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBzeXN0ZW0ncyB0aW1lIHpvbmUgKHRoZSBvbmUgc2V0IG9uIHRoZSBtYWNoaW5lIHRoYXQgcnVucyB0aGlzIGNvZGUpLgogICAgICogQHR5cGUge1pvbmV9CiAgICAgKi8KICAgIHN0YXRpYyBnZXQgZGVmYXVsdFpvbmUoKSB7CiAgICAgIHJldHVybiBub3JtYWxpemVab25lKGRlZmF1bHRab25lLCBTeXN0ZW1ab25lLmluc3RhbmNlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgZGVmYXVsdCBsb2NhbGUgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLgogICAgICogQHR5cGUge3N0cmluZ30KICAgICAqLwogICAgc3RhdGljIGdldCBkZWZhdWx0TG9jYWxlKCkgewogICAgICByZXR1cm4gZGVmYXVsdExvY2FsZTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgZGVmYXVsdCBsb2NhbGUgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLgogICAgICogQHR5cGUge3N0cmluZ30KICAgICAqLwogICAgc3RhdGljIHNldCBkZWZhdWx0TG9jYWxlKGxvY2FsZSkgewogICAgICBkZWZhdWx0TG9jYWxlID0gbG9jYWxlOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBkZWZhdWx0IG51bWJlcmluZyBzeXN0ZW0gdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLgogICAgICogQHR5cGUge3N0cmluZ30KICAgICAqLwogICAgc3RhdGljIGdldCBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtKCkgewogICAgICByZXR1cm4gZGVmYXVsdE51bWJlcmluZ1N5c3RlbTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgZGVmYXVsdCBudW1iZXJpbmcgc3lzdGVtIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy4KICAgICAqIEB0eXBlIHtzdHJpbmd9CiAgICAgKi8KICAgIHN0YXRpYyBzZXQgZGVmYXVsdE51bWJlcmluZ1N5c3RlbShudW1iZXJpbmdTeXN0ZW0pIHsKICAgICAgZGVmYXVsdE51bWJlcmluZ1N5c3RlbSA9IG51bWJlcmluZ1N5c3RlbTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgZGVmYXVsdCBvdXRwdXQgY2FsZW5kYXIgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLgogICAgICogQHR5cGUge3N0cmluZ30KICAgICAqLwogICAgc3RhdGljIGdldCBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIoKSB7CiAgICAgIHJldHVybiBkZWZhdWx0T3V0cHV0Q2FsZW5kYXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGRlZmF1bHQgb3V0cHV0IGNhbGVuZGFyIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy4KICAgICAqIEB0eXBlIHtzdHJpbmd9CiAgICAgKi8KICAgIHN0YXRpYyBzZXQgZGVmYXVsdE91dHB1dENhbGVuZGFyKG91dHB1dENhbGVuZGFyKSB7CiAgICAgIGRlZmF1bHRPdXRwdXRDYWxlbmRhciA9IG91dHB1dENhbGVuZGFyOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjdXRvZmYgeWVhciBhZnRlciB3aGljaCBhIHN0cmluZyBlbmNvZGluZyBhIHllYXIgYXMgdHdvIGRpZ2l0cyBpcyBpbnRlcnByZXRlZCB0byBvY2N1ciBpbiB0aGUgY3VycmVudCBjZW50dXJ5LgogICAgICogQHR5cGUge251bWJlcn0KICAgICAqLwogICAgc3RhdGljIGdldCB0d29EaWdpdEN1dG9mZlllYXIoKSB7CiAgICAgIHJldHVybiB0d29EaWdpdEN1dG9mZlllYXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGN1dG9mZiB5ZWFyIGFmdGVyIHdoaWNoIGEgc3RyaW5nIGVuY29kaW5nIGEgeWVhciBhcyB0d28gZGlnaXRzIGlzIGludGVycHJldGVkIHRvIG9jY3VyIGluIHRoZSBjdXJyZW50IGNlbnR1cnkuCiAgICAgKiBAdHlwZSB7bnVtYmVyfQogICAgICogQGV4YW1wbGUgU2V0dGluZ3MudHdvRGlnaXRDdXRvZmZZZWFyID0gMCAvLyBjdXQtb2ZmIHllYXIgaXMgMCwgc28gYWxsICd5eScgYXJlIGludGVycHJldGVkIGFzIGN1cnJlbnQgY2VudHVyeQogICAgICogQGV4YW1wbGUgU2V0dGluZ3MudHdvRGlnaXRDdXRvZmZZZWFyID0gNTAgLy8gJzQ5JyAtPiAxOTQ5OyAnNTAnIC0+IDIwNTAKICAgICAqIEBleGFtcGxlIFNldHRpbmdzLnR3b0RpZ2l0Q3V0b2ZmWWVhciA9IDE5NTAgLy8gaW50ZXJwcmV0ZWQgYXMgNTAKICAgICAqIEBleGFtcGxlIFNldHRpbmdzLnR3b0RpZ2l0Q3V0b2ZmWWVhciA9IDIwNTAgLy8gQUxTTyBpbnRlcnByZXRlZCBhcyA1MAogICAgICovCiAgICBzdGF0aWMgc2V0IHR3b0RpZ2l0Q3V0b2ZmWWVhcihjdXRvZmZZZWFyKSB7CiAgICAgIHR3b0RpZ2l0Q3V0b2ZmWWVhciA9IGN1dG9mZlllYXIgJSAxMDA7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgd2hldGhlciBMdXhvbiB3aWxsIHRocm93IHdoZW4gaXQgZW5jb3VudGVycyBpbnZhbGlkIERhdGVUaW1lcywgRHVyYXRpb25zLCBvciBJbnRlcnZhbHMKICAgICAqIEB0eXBlIHtib29sZWFufQogICAgICovCiAgICBzdGF0aWMgZ2V0IHRocm93T25JbnZhbGlkKCkgewogICAgICByZXR1cm4gdGhyb3dPbkludmFsaWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgd2hldGhlciBMdXhvbiB3aWxsIHRocm93IHdoZW4gaXQgZW5jb3VudGVycyBpbnZhbGlkIERhdGVUaW1lcywgRHVyYXRpb25zLCBvciBJbnRlcnZhbHMKICAgICAqIEB0eXBlIHtib29sZWFufQogICAgICovCiAgICBzdGF0aWMgc2V0IHRocm93T25JbnZhbGlkKHQpIHsKICAgICAgdGhyb3dPbkludmFsaWQgPSB0OwogICAgfQoKICAgIC8qKgogICAgICogUmVzZXQgTHV4b24ncyBnbG9iYWwgY2FjaGVzLiBTaG91bGQgb25seSBiZSBuZWNlc3NhcnkgaW4gdGVzdGluZyBzY2VuYXJpb3MuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBzdGF0aWMgcmVzZXRDYWNoZXMoKSB7CiAgICAgIExvY2FsZS5yZXNldENhY2hlKCk7CiAgICAgIElBTkFab25lLnJlc2V0Q2FjaGUoKTsKICAgIH0KICB9CgogIC8qCiAgICBUaGlzIGlzIGp1c3QgYSBqdW5rIGRyYXdlciwgY29udGFpbmluZyBhbnl0aGluZyB1c2VkIGFjcm9zcyBtdWx0aXBsZSBjbGFzc2VzLgogICAgQmVjYXVzZSBMdXhvbiBpcyBzbWFsbChpc2gpLCB0aGlzIHNob3VsZCBzdGF5IHNtYWxsIGFuZCB3ZSB3b24ndCB3b3JyeSBhYm91dCBzcGxpdHRpbmcKICAgIGl0IHVwIGludG8sIHNheSwgcGFyc2luZ1V0aWwuanMgYW5kIGJhc2ljVXRpbC5qcyBhbmQgc28gb24uIEJ1dCB0aGV5IGFyZSBkaXZpZGVkIHVwIGJ5IGZlYXR1cmUgYXJlYS4KICAqLwoKICAvKioKICAgKiBAcHJpdmF0ZQogICAqLwoKICAvLyBUWVBFUwoKICBmdW5jdGlvbiBpc1VuZGVmaW5lZChvKSB7CiAgICByZXR1cm4gdHlwZW9mIG8gPT09ICJ1bmRlZmluZWQiOwogIH0KCiAgZnVuY3Rpb24gaXNOdW1iZXIobykgewogICAgcmV0dXJuIHR5cGVvZiBvID09PSAibnVtYmVyIjsKICB9CgogIGZ1bmN0aW9uIGlzSW50ZWdlcihvKSB7CiAgICByZXR1cm4gdHlwZW9mIG8gPT09ICJudW1iZXIiICYmIG8gJSAxID09PSAwOwogIH0KCiAgZnVuY3Rpb24gaXNTdHJpbmcobykgewogICAgcmV0dXJuIHR5cGVvZiBvID09PSAic3RyaW5nIjsKICB9CgogIGZ1bmN0aW9uIGlzRGF0ZShvKSB7CiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pID09PSAiW29iamVjdCBEYXRlXSI7CiAgfQoKICAvLyBDQVBBQklMSVRJRVMKCiAgZnVuY3Rpb24gaGFzUmVsYXRpdmUoKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gdHlwZW9mIEludGwgIT09ICJ1bmRlZmluZWQiICYmICEhSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQ7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIC8vIE9CSkVDVFMgQU5EIEFSUkFZUwoKICBmdW5jdGlvbiBtYXliZUFycmF5KHRoaW5nKSB7CiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGluZykgPyB0aGluZyA6IFt0aGluZ107CiAgfQoKICBmdW5jdGlvbiBiZXN0QnkoYXJyLCBieSwgY29tcGFyZSkgewogICAgaWYgKGFyci5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgIH0KICAgIHJldHVybiBhcnIucmVkdWNlKChiZXN0LCBuZXh0KSA9PiB7CiAgICAgIGNvbnN0IHBhaXIgPSBbYnkobmV4dCksIG5leHRdOwogICAgICBpZiAoIWJlc3QpIHsKICAgICAgICByZXR1cm4gcGFpcjsKICAgICAgfSBlbHNlIGlmIChjb21wYXJlKGJlc3RbMF0sIHBhaXJbMF0pID09PSBiZXN0WzBdKSB7CiAgICAgICAgcmV0dXJuIGJlc3Q7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHBhaXI7CiAgICAgIH0KICAgIH0sIG51bGwpWzFdOwogIH0KCiAgZnVuY3Rpb24gcGljayhvYmosIGtleXMpIHsKICAgIHJldHVybiBrZXlzLnJlZHVjZSgoYSwgaykgPT4gewogICAgICBhW2tdID0gb2JqW2tdOwogICAgICByZXR1cm4gYTsKICAgIH0sIHt9KTsKICB9CgogIGZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkgewogICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOwogIH0KCiAgLy8gTlVNQkVSUyBBTkQgU1RSSU5HUwoKICBmdW5jdGlvbiBpbnRlZ2VyQmV0d2Vlbih0aGluZywgYm90dG9tLCB0b3ApIHsKICAgIHJldHVybiBpc0ludGVnZXIodGhpbmcpICYmIHRoaW5nID49IGJvdHRvbSAmJiB0aGluZyA8PSB0b3A7CiAgfQoKICAvLyB4ICUgbiBidXQgdGFrZXMgdGhlIHNpZ24gb2YgbiBpbnN0ZWFkIG9mIHgKICBmdW5jdGlvbiBmbG9vck1vZCh4LCBuKSB7CiAgICByZXR1cm4geCAtIG4gKiBNYXRoLmZsb29yKHggLyBuKTsKICB9CgogIGZ1bmN0aW9uIHBhZFN0YXJ0KGlucHV0LCBuID0gMikgewogICAgY29uc3QgaXNOZWcgPSBpbnB1dCA8IDA7CiAgICBsZXQgcGFkZGVkOwogICAgaWYgKGlzTmVnKSB7CiAgICAgIHBhZGRlZCA9ICItIiArICgiIiArIC1pbnB1dCkucGFkU3RhcnQobiwgIjAiKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhZGRlZCA9ICgiIiArIGlucHV0KS5wYWRTdGFydChuLCAiMCIpOwogICAgfQogICAgcmV0dXJuIHBhZGRlZDsKICB9CgogIGZ1bmN0aW9uIHBhcnNlSW50ZWdlcihzdHJpbmcpIHsKICAgIGlmIChpc1VuZGVmaW5lZChzdHJpbmcpIHx8IHN0cmluZyA9PT0gbnVsbCB8fCBzdHJpbmcgPT09ICIiKSB7CiAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nLCAxMCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZUZsb2F0aW5nKHN0cmluZykgewogICAgaWYgKGlzVW5kZWZpbmVkKHN0cmluZykgfHwgc3RyaW5nID09PSBudWxsIHx8IHN0cmluZyA9PT0gIiIpIHsKICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBwYXJzZUZsb2F0KHN0cmluZyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZU1pbGxpcyhmcmFjdGlvbikgewogICAgLy8gUmV0dXJuIHVuZGVmaW5lZCAoaW5zdGVhZCBvZiAwKSBpbiB0aGVzZSBjYXNlcywgd2hlcmUgZnJhY3Rpb24gaXMgbm90IHNldAogICAgaWYgKGlzVW5kZWZpbmVkKGZyYWN0aW9uKSB8fCBmcmFjdGlvbiA9PT0gbnVsbCB8fCBmcmFjdGlvbiA9PT0gIiIpIHsKICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IGYgPSBwYXJzZUZsb2F0KCIwLiIgKyBmcmFjdGlvbikgKiAxMDAwOwogICAgICByZXR1cm4gTWF0aC5mbG9vcihmKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHJvdW5kVG8obnVtYmVyLCBkaWdpdHMsIHRvd2FyZFplcm8gPSBmYWxzZSkgewogICAgY29uc3QgZmFjdG9yID0gMTAgKiogZGlnaXRzLAogICAgICByb3VuZGVyID0gdG93YXJkWmVybyA/IE1hdGgudHJ1bmMgOiBNYXRoLnJvdW5kOwogICAgcmV0dXJuIHJvdW5kZXIobnVtYmVyICogZmFjdG9yKSAvIGZhY3RvcjsKICB9CgogIC8vIERBVEUgQkFTSUNTCgogIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikgewogICAgcmV0dXJuIHllYXIgJSA0ID09PSAwICYmICh5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDApOwogIH0KCiAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7CiAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTsKICB9CgogIGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7CiAgICBjb25zdCBtb2RNb250aCA9IGZsb29yTW9kKG1vbnRoIC0gMSwgMTIpICsgMSwKICAgICAgbW9kWWVhciA9IHllYXIgKyAobW9udGggLSBtb2RNb250aCkgLyAxMjsKCiAgICBpZiAobW9kTW9udGggPT09IDIpIHsKICAgICAgcmV0dXJuIGlzTGVhcFllYXIobW9kWWVhcikgPyAyOSA6IDI4OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIFszMSwgbnVsbCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdW21vZE1vbnRoIC0gMV07CiAgICB9CiAgfQoKICAvLyBjb252ZXJ0IGEgY2FsZW5kYXIgb2JqZWN0IHRvIGEgbG9jYWwgdGltZXN0YW1wIChlcG9jaCwgYnV0IHdpdGggdGhlIG9mZnNldCBiYWtlZCBpbikKICBmdW5jdGlvbiBvYmpUb0xvY2FsVFMob2JqKSB7CiAgICBsZXQgZCA9IERhdGUuVVRDKAogICAgICBvYmoueWVhciwKICAgICAgb2JqLm1vbnRoIC0gMSwKICAgICAgb2JqLmRheSwKICAgICAgb2JqLmhvdXIsCiAgICAgIG9iai5taW51dGUsCiAgICAgIG9iai5zZWNvbmQsCiAgICAgIG9iai5taWxsaXNlY29uZAogICAgKTsKCiAgICAvLyBmb3IgbGVnYWN5IHJlYXNvbnMsIHllYXJzIGJldHdlZW4gMCBhbmQgOTkgYXJlIGludGVycHJldGVkIGFzIDE5WFg7IHJldmVydCB0aGF0CiAgICBpZiAob2JqLnllYXIgPCAxMDAgJiYgb2JqLnllYXIgPj0gMCkgewogICAgICBkID0gbmV3IERhdGUoZCk7CiAgICAgIC8vIHNldCB0aGUgbW9udGggYW5kIGRheSBhZ2FpbiwgdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB5ZWFyIDIwMDAgaXMgYSBsZWFwIHllYXIsIGJ1dCB5ZWFyIDEwMCBpcyBub3QKICAgICAgLy8gc28gaWYgb2JqLnllYXIgaXMgaW4gOTksIGJ1dCBvYmouZGF5IG1ha2VzIGl0IHJvbGwgb3ZlciBpbnRvIHllYXIgMTAwLAogICAgICAvLyB0aGUgY2FsY3VsYXRpb25zIGRvbmUgYnkgRGF0ZS5VVEMgYXJlIHVzaW5nIHllYXIgMjAwMCAtIHdoaWNoIGlzIGluY29ycmVjdAogICAgICBkLnNldFVUQ0Z1bGxZZWFyKG9iai55ZWFyLCBvYmoubW9udGggLSAxLCBvYmouZGF5KTsKICAgIH0KICAgIHJldHVybiArZDsKICB9CgogIGZ1bmN0aW9uIHdlZWtzSW5XZWVrWWVhcih3ZWVrWWVhcikgewogICAgY29uc3QgcDEgPQogICAgICAgICh3ZWVrWWVhciArCiAgICAgICAgICBNYXRoLmZsb29yKHdlZWtZZWFyIC8gNCkgLQogICAgICAgICAgTWF0aC5mbG9vcih3ZWVrWWVhciAvIDEwMCkgKwogICAgICAgICAgTWF0aC5mbG9vcih3ZWVrWWVhciAvIDQwMCkpICUKICAgICAgICA3LAogICAgICBsYXN0ID0gd2Vla1llYXIgLSAxLAogICAgICBwMiA9IChsYXN0ICsgTWF0aC5mbG9vcihsYXN0IC8gNCkgLSBNYXRoLmZsb29yKGxhc3QgLyAxMDApICsgTWF0aC5mbG9vcihsYXN0IC8gNDAwKSkgJSA3OwogICAgcmV0dXJuIHAxID09PSA0IHx8IHAyID09PSAzID8gNTMgOiA1MjsKICB9CgogIGZ1bmN0aW9uIHVudHJ1bmNhdGVZZWFyKHllYXIpIHsKICAgIGlmICh5ZWFyID4gOTkpIHsKICAgICAgcmV0dXJuIHllYXI7CiAgICB9IGVsc2UgcmV0dXJuIHllYXIgPiBTZXR0aW5ncy50d29EaWdpdEN1dG9mZlllYXIgPyAxOTAwICsgeWVhciA6IDIwMDAgKyB5ZWFyOwogIH0KCiAgLy8gUEFSU0lORwoKICBmdW5jdGlvbiBwYXJzZVpvbmVJbmZvKHRzLCBvZmZzZXRGb3JtYXQsIGxvY2FsZSwgdGltZVpvbmUgPSBudWxsKSB7CiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodHMpLAogICAgICBpbnRsT3B0cyA9IHsKICAgICAgICBob3VyQ3ljbGU6ICJoMjMiLAogICAgICAgIHllYXI6ICJudW1lcmljIiwKICAgICAgICBtb250aDogIjItZGlnaXQiLAogICAgICAgIGRheTogIjItZGlnaXQiLAogICAgICAgIGhvdXI6ICIyLWRpZ2l0IiwKICAgICAgICBtaW51dGU6ICIyLWRpZ2l0IiwKICAgICAgfTsKCiAgICBpZiAodGltZVpvbmUpIHsKICAgICAgaW50bE9wdHMudGltZVpvbmUgPSB0aW1lWm9uZTsKICAgIH0KCiAgICBjb25zdCBtb2RpZmllZCA9IHsgdGltZVpvbmVOYW1lOiBvZmZzZXRGb3JtYXQsIC4uLmludGxPcHRzIH07CgogICAgY29uc3QgcGFyc2VkID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBtb2RpZmllZCkKICAgICAgLmZvcm1hdFRvUGFydHMoZGF0ZSkKICAgICAgLmZpbmQoKG0pID0+IG0udHlwZS50b0xvd2VyQ2FzZSgpID09PSAidGltZXpvbmVuYW1lIik7CiAgICByZXR1cm4gcGFyc2VkID8gcGFyc2VkLnZhbHVlIDogbnVsbDsKICB9CgogIC8vIHNpZ25lZE9mZnNldCgnLTUnLCAnMzAnKSAtPiAtMzMwCiAgZnVuY3Rpb24gc2lnbmVkT2Zmc2V0KG9mZkhvdXJTdHIsIG9mZk1pbnV0ZVN0cikgewogICAgbGV0IG9mZkhvdXIgPSBwYXJzZUludChvZmZIb3VyU3RyLCAxMCk7CgogICAgLy8gZG9uJ3QgfHwgdGhpcyBiZWNhdXNlIHdlIHdhbnQgdG8gcHJlc2VydmUgLTAKICAgIGlmIChOdW1iZXIuaXNOYU4ob2ZmSG91cikpIHsKICAgICAgb2ZmSG91ciA9IDA7CiAgICB9CgogICAgY29uc3Qgb2ZmTWluID0gcGFyc2VJbnQob2ZmTWludXRlU3RyLCAxMCkgfHwgMCwKICAgICAgb2ZmTWluU2lnbmVkID0gb2ZmSG91ciA8IDAgfHwgT2JqZWN0LmlzKG9mZkhvdXIsIC0wKSA/IC1vZmZNaW4gOiBvZmZNaW47CiAgICByZXR1cm4gb2ZmSG91ciAqIDYwICsgb2ZmTWluU2lnbmVkOwogIH0KCiAgLy8gQ09FUkNJT04KCiAgZnVuY3Rpb24gYXNOdW1iZXIodmFsdWUpIHsKICAgIGNvbnN0IG51bWVyaWNWYWx1ZSA9IE51bWJlcih2YWx1ZSk7CiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAiYm9vbGVhbiIgfHwgdmFsdWUgPT09ICIiIHx8IE51bWJlci5pc05hTihudW1lcmljVmFsdWUpKQogICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYEludmFsaWQgdW5pdCB2YWx1ZSAke3ZhbHVlfWApOwogICAgcmV0dXJuIG51bWVyaWNWYWx1ZTsKICB9CgogIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdChvYmosIG5vcm1hbGl6ZXIpIHsKICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB7fTsKICAgIGZvciAoY29uc3QgdSBpbiBvYmopIHsKICAgICAgaWYgKGhhc093blByb3BlcnR5KG9iaiwgdSkpIHsKICAgICAgICBjb25zdCB2ID0gb2JqW3VdOwogICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbCkgY29udGludWU7CiAgICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVyKHUpXSA9IGFzTnVtYmVyKHYpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm9ybWFsaXplZDsKICB9CgogIGZ1bmN0aW9uIGZvcm1hdE9mZnNldChvZmZzZXQsIGZvcm1hdCkgewogICAgY29uc3QgaG91cnMgPSBNYXRoLnRydW5jKE1hdGguYWJzKG9mZnNldCAvIDYwKSksCiAgICAgIG1pbnV0ZXMgPSBNYXRoLnRydW5jKE1hdGguYWJzKG9mZnNldCAlIDYwKSksCiAgICAgIHNpZ24gPSBvZmZzZXQgPj0gMCA/ICIrIiA6ICItIjsKCiAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgICBjYXNlICJzaG9ydCI6CiAgICAgICAgcmV0dXJuIGAke3NpZ259JHtwYWRTdGFydChob3VycywgMil9OiR7cGFkU3RhcnQobWludXRlcywgMil9YDsKICAgICAgY2FzZSAibmFycm93IjoKICAgICAgICByZXR1cm4gYCR7c2lnbn0ke2hvdXJzfSR7bWludXRlcyA+IDAgPyBgOiR7bWludXRlc31gIDogIiJ9YDsKICAgICAgY2FzZSAidGVjaGllIjoKICAgICAgICByZXR1cm4gYCR7c2lnbn0ke3BhZFN0YXJ0KGhvdXJzLCAyKX0ke3BhZFN0YXJ0KG1pbnV0ZXMsIDIpfWA7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFZhbHVlIGZvcm1hdCAke2Zvcm1hdH0gaXMgb3V0IG9mIHJhbmdlIGZvciBwcm9wZXJ0eSBmb3JtYXRgKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRpbWVPYmplY3Qob2JqKSB7CiAgICByZXR1cm4gcGljayhvYmosIFsiaG91ciIsICJtaW51dGUiLCAic2Vjb25kIiwgIm1pbGxpc2Vjb25kIl0pOwogIH0KCiAgLyoqCiAgICogQHByaXZhdGUKICAgKi8KCiAgY29uc3QgbW9udGhzTG9uZyA9IFsKICAgICJKYW51YXJ5IiwKICAgICJGZWJydWFyeSIsCiAgICAiTWFyY2giLAogICAgIkFwcmlsIiwKICAgICJNYXkiLAogICAgIkp1bmUiLAogICAgIkp1bHkiLAogICAgIkF1Z3VzdCIsCiAgICAiU2VwdGVtYmVyIiwKICAgICJPY3RvYmVyIiwKICAgICJOb3ZlbWJlciIsCiAgICAiRGVjZW1iZXIiLAogIF07CgogIGNvbnN0IG1vbnRoc1Nob3J0ID0gWwogICAgIkphbiIsCiAgICAiRmViIiwKICAgICJNYXIiLAogICAgIkFwciIsCiAgICAiTWF5IiwKICAgICJKdW4iLAogICAgIkp1bCIsCiAgICAiQXVnIiwKICAgICJTZXAiLAogICAgIk9jdCIsCiAgICAiTm92IiwKICAgICJEZWMiLAogIF07CgogIGNvbnN0IG1vbnRoc05hcnJvdyA9IFsiSiIsICJGIiwgIk0iLCAiQSIsICJNIiwgIkoiLCAiSiIsICJBIiwgIlMiLCAiTyIsICJOIiwgIkQiXTsKCiAgZnVuY3Rpb24gbW9udGhzKGxlbmd0aCkgewogICAgc3dpdGNoIChsZW5ndGgpIHsKICAgICAgY2FzZSAibmFycm93IjoKICAgICAgICByZXR1cm4gWy4uLm1vbnRoc05hcnJvd107CiAgICAgIGNhc2UgInNob3J0IjoKICAgICAgICByZXR1cm4gWy4uLm1vbnRoc1Nob3J0XTsKICAgICAgY2FzZSAibG9uZyI6CiAgICAgICAgcmV0dXJuIFsuLi5tb250aHNMb25nXTsKICAgICAgY2FzZSAibnVtZXJpYyI6CiAgICAgICAgcmV0dXJuIFsiMSIsICIyIiwgIjMiLCAiNCIsICI1IiwgIjYiLCAiNyIsICI4IiwgIjkiLCAiMTAiLCAiMTEiLCAiMTIiXTsKICAgICAgY2FzZSAiMi1kaWdpdCI6CiAgICAgICAgcmV0dXJuIFsiMDEiLCAiMDIiLCAiMDMiLCAiMDQiLCAiMDUiLCAiMDYiLCAiMDciLCAiMDgiLCAiMDkiLCAiMTAiLCAiMTEiLCAiMTIiXTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIGNvbnN0IHdlZWtkYXlzTG9uZyA9IFsKICAgICJNb25kYXkiLAogICAgIlR1ZXNkYXkiLAogICAgIldlZG5lc2RheSIsCiAgICAiVGh1cnNkYXkiLAogICAgIkZyaWRheSIsCiAgICAiU2F0dXJkYXkiLAogICAgIlN1bmRheSIsCiAgXTsKCiAgY29uc3Qgd2Vla2RheXNTaG9ydCA9IFsiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiLCAiU3VuIl07CgogIGNvbnN0IHdlZWtkYXlzTmFycm93ID0gWyJNIiwgIlQiLCAiVyIsICJUIiwgIkYiLCAiUyIsICJTIl07CgogIGZ1bmN0aW9uIHdlZWtkYXlzKGxlbmd0aCkgewogICAgc3dpdGNoIChsZW5ndGgpIHsKICAgICAgY2FzZSAibmFycm93IjoKICAgICAgICByZXR1cm4gWy4uLndlZWtkYXlzTmFycm93XTsKICAgICAgY2FzZSAic2hvcnQiOgogICAgICAgIHJldHVybiBbLi4ud2Vla2RheXNTaG9ydF07CiAgICAgIGNhc2UgImxvbmciOgogICAgICAgIHJldHVybiBbLi4ud2Vla2RheXNMb25nXTsKICAgICAgY2FzZSAibnVtZXJpYyI6CiAgICAgICAgcmV0dXJuIFsiMSIsICIyIiwgIjMiLCAiNCIsICI1IiwgIjYiLCAiNyJdOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgY29uc3QgbWVyaWRpZW1zID0gWyJBTSIsICJQTSJdOwoKICBjb25zdCBlcmFzTG9uZyA9IFsiQmVmb3JlIENocmlzdCIsICJBbm5vIERvbWluaSJdOwoKICBjb25zdCBlcmFzU2hvcnQgPSBbIkJDIiwgIkFEIl07CgogIGNvbnN0IGVyYXNOYXJyb3cgPSBbIkIiLCAiQSJdOwoKICBmdW5jdGlvbiBlcmFzKGxlbmd0aCkgewogICAgc3dpdGNoIChsZW5ndGgpIHsKICAgICAgY2FzZSAibmFycm93IjoKICAgICAgICByZXR1cm4gWy4uLmVyYXNOYXJyb3ddOwogICAgICBjYXNlICJzaG9ydCI6CiAgICAgICAgcmV0dXJuIFsuLi5lcmFzU2hvcnRdOwogICAgICBjYXNlICJsb25nIjoKICAgICAgICByZXR1cm4gWy4uLmVyYXNMb25nXTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIG1lcmlkaWVtRm9yRGF0ZVRpbWUoZHQpIHsKICAgIHJldHVybiBtZXJpZGllbXNbZHQuaG91ciA8IDEyID8gMCA6IDFdOwogIH0KCiAgZnVuY3Rpb24gd2Vla2RheUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIHsKICAgIHJldHVybiB3ZWVrZGF5cyhsZW5ndGgpW2R0LndlZWtkYXkgLSAxXTsKICB9CgogIGZ1bmN0aW9uIG1vbnRoRm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkgewogICAgcmV0dXJuIG1vbnRocyhsZW5ndGgpW2R0Lm1vbnRoIC0gMV07CiAgfQoKICBmdW5jdGlvbiBlcmFGb3JEYXRlVGltZShkdCwgbGVuZ3RoKSB7CiAgICByZXR1cm4gZXJhcyhsZW5ndGgpW2R0LnllYXIgPCAwID8gMCA6IDFdOwogIH0KCiAgZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmVUaW1lKHVuaXQsIGNvdW50LCBudW1lcmljID0gImFsd2F5cyIsIG5hcnJvdyA9IGZhbHNlKSB7CiAgICBjb25zdCB1bml0cyA9IHsKICAgICAgeWVhcnM6IFsieWVhciIsICJ5ci4iXSwKICAgICAgcXVhcnRlcnM6IFsicXVhcnRlciIsICJxdHIuIl0sCiAgICAgIG1vbnRoczogWyJtb250aCIsICJtby4iXSwKICAgICAgd2Vla3M6IFsid2VlayIsICJ3ay4iXSwKICAgICAgZGF5czogWyJkYXkiLCAiZGF5IiwgImRheXMiXSwKICAgICAgaG91cnM6IFsiaG91ciIsICJoci4iXSwKICAgICAgbWludXRlczogWyJtaW51dGUiLCAibWluLiJdLAogICAgICBzZWNvbmRzOiBbInNlY29uZCIsICJzZWMuIl0sCiAgICB9OwoKICAgIGNvbnN0IGxhc3RhYmxlID0gWyJob3VycyIsICJtaW51dGVzIiwgInNlY29uZHMiXS5pbmRleE9mKHVuaXQpID09PSAtMTsKCiAgICBpZiAobnVtZXJpYyA9PT0gImF1dG8iICYmIGxhc3RhYmxlKSB7CiAgICAgIGNvbnN0IGlzRGF5ID0gdW5pdCA9PT0gImRheXMiOwogICAgICBzd2l0Y2ggKGNvdW50KSB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgcmV0dXJuIGlzRGF5ID8gInRvbW9ycm93IiA6IGBuZXh0ICR7dW5pdHNbdW5pdF1bMF19YDsKICAgICAgICBjYXNlIC0xOgogICAgICAgICAgcmV0dXJuIGlzRGF5ID8gInllc3RlcmRheSIgOiBgbGFzdCAke3VuaXRzW3VuaXRdWzBdfWA7CiAgICAgICAgY2FzZSAwOgogICAgICAgICAgcmV0dXJuIGlzRGF5ID8gInRvZGF5IiA6IGB0aGlzICR7dW5pdHNbdW5pdF1bMF19YDsKICAgICAgfQogICAgfQoKICAgIGNvbnN0IGlzSW5QYXN0ID0gT2JqZWN0LmlzKGNvdW50LCAtMCkgfHwgY291bnQgPCAwLAogICAgICBmbXRWYWx1ZSA9IE1hdGguYWJzKGNvdW50KSwKICAgICAgc2luZ3VsYXIgPSBmbXRWYWx1ZSA9PT0gMSwKICAgICAgbGlsVW5pdHMgPSB1bml0c1t1bml0XSwKICAgICAgZm10VW5pdCA9IG5hcnJvdwogICAgICAgID8gc2luZ3VsYXIKICAgICAgICAgID8gbGlsVW5pdHNbMV0KICAgICAgICAgIDogbGlsVW5pdHNbMl0gfHwgbGlsVW5pdHNbMV0KICAgICAgICA6IHNpbmd1bGFyCiAgICAgICAgPyB1bml0c1t1bml0XVswXQogICAgICAgIDogdW5pdDsKICAgIHJldHVybiBpc0luUGFzdCA/IGAke2ZtdFZhbHVlfSAke2ZtdFVuaXR9IGFnb2AgOiBgaW4gJHtmbXRWYWx1ZX0gJHtmbXRVbml0fWA7CiAgfQoKICBmdW5jdGlvbiBzdHJpbmdpZnlUb2tlbnMoc3BsaXRzLCB0b2tlblRvU3RyaW5nKSB7CiAgICBsZXQgcyA9ICIiOwogICAgZm9yIChjb25zdCB0b2tlbiBvZiBzcGxpdHMpIHsKICAgICAgaWYgKHRva2VuLmxpdGVyYWwpIHsKICAgICAgICBzICs9IHRva2VuLnZhbDsKICAgICAgfSBlbHNlIHsKICAgICAgICBzICs9IHRva2VuVG9TdHJpbmcodG9rZW4udmFsKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHM7CiAgfQoKICBjb25zdCBtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzID0gewogICAgRDogREFURV9TSE9SVCwKICAgIEREOiBEQVRFX01FRCwKICAgIERERDogREFURV9GVUxMLAogICAgRERERDogREFURV9IVUdFLAogICAgdDogVElNRV9TSU1QTEUsCiAgICB0dDogVElNRV9XSVRIX1NFQ09ORFMsCiAgICB0dHQ6IFRJTUVfV0lUSF9TSE9SVF9PRkZTRVQsCiAgICB0dHR0OiBUSU1FX1dJVEhfTE9OR19PRkZTRVQsCiAgICBUOiBUSU1FXzI0X1NJTVBMRSwKICAgIFRUOiBUSU1FXzI0X1dJVEhfU0VDT05EUywKICAgIFRUVDogVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCwKICAgIFRUVFQ6IFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCwKICAgIGY6IERBVEVUSU1FX1NIT1JULAogICAgZmY6IERBVEVUSU1FX01FRCwKICAgIGZmZjogREFURVRJTUVfRlVMTCwKICAgIGZmZmY6IERBVEVUSU1FX0hVR0UsCiAgICBGOiBEQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFMsCiAgICBGRjogREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUywKICAgIEZGRjogREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMsCiAgICBGRkZGOiBEQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUywKICB9OwoKICAvKioKICAgKiBAcHJpdmF0ZQogICAqLwoKICBjbGFzcyBGb3JtYXR0ZXIgewogICAgc3RhdGljIGNyZWF0ZShsb2NhbGUsIG9wdHMgPSB7fSkgewogICAgICByZXR1cm4gbmV3IEZvcm1hdHRlcihsb2NhbGUsIG9wdHMpOwogICAgfQoKICAgIHN0YXRpYyBwYXJzZUZvcm1hdChmbXQpIHsKICAgICAgLy8gd2hpdGUtc3BhY2UgaXMgYWx3YXlzIGNvbnNpZGVyZWQgYSBsaXRlcmFsIGluIHVzZXItcHJvdmlkZWQgZm9ybWF0cwogICAgICAvLyB0aGUgIiAiIHRva2VuIGhhcyBhIHNwZWNpYWwgbWVhbmluZyAoc2VlIHVuaXRGb3JUb2tlbikKCiAgICAgIGxldCBjdXJyZW50ID0gbnVsbCwKICAgICAgICBjdXJyZW50RnVsbCA9ICIiLAogICAgICAgIGJyYWNrZXRlZCA9IGZhbHNlOwogICAgICBjb25zdCBzcGxpdHMgPSBbXTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbXQubGVuZ3RoOyBpKyspIHsKICAgICAgICBjb25zdCBjID0gZm10LmNoYXJBdChpKTsKICAgICAgICBpZiAoYyA9PT0gIiciKSB7CiAgICAgICAgICBpZiAoY3VycmVudEZ1bGwubGVuZ3RoID4gMCkgewogICAgICAgICAgICBzcGxpdHMucHVzaCh7IGxpdGVyYWw6IGJyYWNrZXRlZCB8fCAvXlxzKyQvLnRlc3QoY3VycmVudEZ1bGwpLCB2YWw6IGN1cnJlbnRGdWxsIH0pOwogICAgICAgICAgfQogICAgICAgICAgY3VycmVudCA9IG51bGw7CiAgICAgICAgICBjdXJyZW50RnVsbCA9ICIiOwogICAgICAgICAgYnJhY2tldGVkID0gIWJyYWNrZXRlZDsKICAgICAgICB9IGVsc2UgaWYgKGJyYWNrZXRlZCkgewogICAgICAgICAgY3VycmVudEZ1bGwgKz0gYzsKICAgICAgICB9IGVsc2UgaWYgKGMgPT09IGN1cnJlbnQpIHsKICAgICAgICAgIGN1cnJlbnRGdWxsICs9IGM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChjdXJyZW50RnVsbC5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHNwbGl0cy5wdXNoKHsgbGl0ZXJhbDogL15ccyskLy50ZXN0KGN1cnJlbnRGdWxsKSwgdmFsOiBjdXJyZW50RnVsbCB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGN1cnJlbnRGdWxsID0gYzsKICAgICAgICAgIGN1cnJlbnQgPSBjOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKGN1cnJlbnRGdWxsLmxlbmd0aCA+IDApIHsKICAgICAgICBzcGxpdHMucHVzaCh7IGxpdGVyYWw6IGJyYWNrZXRlZCB8fCAvXlxzKyQvLnRlc3QoY3VycmVudEZ1bGwpLCB2YWw6IGN1cnJlbnRGdWxsIH0pOwogICAgICB9CgogICAgICByZXR1cm4gc3BsaXRzOwogICAgfQoKICAgIHN0YXRpYyBtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKHRva2VuKSB7CiAgICAgIHJldHVybiBtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzW3Rva2VuXTsKICAgIH0KCiAgICBjb25zdHJ1Y3Rvcihsb2NhbGUsIGZvcm1hdE9wdHMpIHsKICAgICAgdGhpcy5vcHRzID0gZm9ybWF0T3B0czsKICAgICAgdGhpcy5sb2MgPSBsb2NhbGU7CiAgICAgIHRoaXMuc3lzdGVtTG9jID0gbnVsbDsKICAgIH0KCiAgICBmb3JtYXRXaXRoU3lzdGVtRGVmYXVsdChkdCwgb3B0cykgewogICAgICBpZiAodGhpcy5zeXN0ZW1Mb2MgPT09IG51bGwpIHsKICAgICAgICB0aGlzLnN5c3RlbUxvYyA9IHRoaXMubG9jLnJlZGVmYXVsdFRvU3lzdGVtKCk7CiAgICAgIH0KICAgICAgY29uc3QgZGYgPSB0aGlzLnN5c3RlbUxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7CiAgICAgIHJldHVybiBkZi5mb3JtYXQoKTsKICAgIH0KCiAgICBkdEZvcm1hdHRlcihkdCwgb3B0cyA9IHt9KSB7CiAgICAgIHJldHVybiB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsIC4uLm9wdHMgfSk7CiAgICB9CgogICAgZm9ybWF0RGF0ZVRpbWUoZHQsIG9wdHMpIHsKICAgICAgcmV0dXJuIHRoaXMuZHRGb3JtYXR0ZXIoZHQsIG9wdHMpLmZvcm1hdCgpOwogICAgfQoKICAgIGZvcm1hdERhdGVUaW1lUGFydHMoZHQsIG9wdHMpIHsKICAgICAgcmV0dXJuIHRoaXMuZHRGb3JtYXR0ZXIoZHQsIG9wdHMpLmZvcm1hdFRvUGFydHMoKTsKICAgIH0KCiAgICBmb3JtYXRJbnRlcnZhbChpbnRlcnZhbCwgb3B0cykgewogICAgICBjb25zdCBkZiA9IHRoaXMuZHRGb3JtYXR0ZXIoaW50ZXJ2YWwuc3RhcnQsIG9wdHMpOwogICAgICByZXR1cm4gZGYuZHRmLmZvcm1hdFJhbmdlKGludGVydmFsLnN0YXJ0LnRvSlNEYXRlKCksIGludGVydmFsLmVuZC50b0pTRGF0ZSgpKTsKICAgIH0KCiAgICByZXNvbHZlZE9wdGlvbnMoZHQsIG9wdHMpIHsKICAgICAgcmV0dXJuIHRoaXMuZHRGb3JtYXR0ZXIoZHQsIG9wdHMpLnJlc29sdmVkT3B0aW9ucygpOwogICAgfQoKICAgIG51bShuLCBwID0gMCkgewogICAgICAvLyB3ZSBnZXQgc29tZSBwZXJmIG91dCBvZiBkb2luZyB0aGlzIGhlcmUsIGFubm95aW5nbHkKICAgICAgaWYgKHRoaXMub3B0cy5mb3JjZVNpbXBsZSkgewogICAgICAgIHJldHVybiBwYWRTdGFydChuLCBwKTsKICAgICAgfQoKICAgICAgY29uc3Qgb3B0cyA9IHsgLi4udGhpcy5vcHRzIH07CgogICAgICBpZiAocCA+IDApIHsKICAgICAgICBvcHRzLnBhZFRvID0gcDsKICAgICAgfQoKICAgICAgcmV0dXJuIHRoaXMubG9jLm51bWJlckZvcm1hdHRlcihvcHRzKS5mb3JtYXQobik7CiAgICB9CgogICAgZm9ybWF0RGF0ZVRpbWVGcm9tU3RyaW5nKGR0LCBmbXQpIHsKICAgICAgY29uc3Qga25vd25FbmdsaXNoID0gdGhpcy5sb2MubGlzdGluZ01vZGUoKSA9PT0gImVuIiwKICAgICAgICB1c2VEYXRlVGltZUZvcm1hdHRlciA9IHRoaXMubG9jLm91dHB1dENhbGVuZGFyICYmIHRoaXMubG9jLm91dHB1dENhbGVuZGFyICE9PSAiZ3JlZ29yeSIsCiAgICAgICAgc3RyaW5nID0gKG9wdHMsIGV4dHJhY3QpID0+IHRoaXMubG9jLmV4dHJhY3QoZHQsIG9wdHMsIGV4dHJhY3QpLAogICAgICAgIGZvcm1hdE9mZnNldCA9IChvcHRzKSA9PiB7CiAgICAgICAgICBpZiAoZHQuaXNPZmZzZXRGaXhlZCAmJiBkdC5vZmZzZXQgPT09IDAgJiYgb3B0cy5hbGxvd1opIHsKICAgICAgICAgICAgcmV0dXJuICJaIjsKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gZHQuaXNWYWxpZCA/IGR0LnpvbmUuZm9ybWF0T2Zmc2V0KGR0LnRzLCBvcHRzLmZvcm1hdCkgOiAiIjsKICAgICAgICB9LAogICAgICAgIG1lcmlkaWVtID0gKCkgPT4KICAgICAgICAgIGtub3duRW5nbGlzaAogICAgICAgICAgICA/IG1lcmlkaWVtRm9yRGF0ZVRpbWUoZHQpCiAgICAgICAgICAgIDogc3RyaW5nKHsgaG91cjogIm51bWVyaWMiLCBob3VyQ3ljbGU6ICJoMTIiIH0sICJkYXlwZXJpb2QiKSwKICAgICAgICBtb250aCA9IChsZW5ndGgsIHN0YW5kYWxvbmUpID0+CiAgICAgICAgICBrbm93bkVuZ2xpc2gKICAgICAgICAgICAgPyBtb250aEZvckRhdGVUaW1lKGR0LCBsZW5ndGgpCiAgICAgICAgICAgIDogc3RyaW5nKHN0YW5kYWxvbmUgPyB7IG1vbnRoOiBsZW5ndGggfSA6IHsgbW9udGg6IGxlbmd0aCwgZGF5OiAibnVtZXJpYyIgfSwgIm1vbnRoIiksCiAgICAgICAgd2Vla2RheSA9IChsZW5ndGgsIHN0YW5kYWxvbmUpID0+CiAgICAgICAgICBrbm93bkVuZ2xpc2gKICAgICAgICAgICAgPyB3ZWVrZGF5Rm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkKICAgICAgICAgICAgOiBzdHJpbmcoCiAgICAgICAgICAgICAgICBzdGFuZGFsb25lID8geyB3ZWVrZGF5OiBsZW5ndGggfSA6IHsgd2Vla2RheTogbGVuZ3RoLCBtb250aDogImxvbmciLCBkYXk6ICJudW1lcmljIiB9LAogICAgICAgICAgICAgICAgIndlZWtkYXkiCiAgICAgICAgICAgICAgKSwKICAgICAgICBtYXliZU1hY3JvID0gKHRva2VuKSA9PiB7CiAgICAgICAgICBjb25zdCBmb3JtYXRPcHRzID0gRm9ybWF0dGVyLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4pOwogICAgICAgICAgaWYgKGZvcm1hdE9wdHMpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0V2l0aFN5c3RlbURlZmF1bHQoZHQsIGZvcm1hdE9wdHMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZXJhID0gKGxlbmd0aCkgPT4KICAgICAgICAgIGtub3duRW5nbGlzaCA/IGVyYUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIDogc3RyaW5nKHsgZXJhOiBsZW5ndGggfSwgImVyYSIpLAogICAgICAgIHRva2VuVG9TdHJpbmcgPSAodG9rZW4pID0+IHsKICAgICAgICAgIC8vIFdoZXJlIHBvc3NpYmxlOiBodHRwczovL2NsZHIudW5pY29kZS5vcmcvdHJhbnNsYXRpb24vZGF0ZS10aW1lL2RhdGUtdGltZS1zeW1ib2xzCiAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAgIC8vIG1zCiAgICAgICAgICAgIGNhc2UgIlMiOgogICAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5taWxsaXNlY29uZCk7CiAgICAgICAgICAgIGNhc2UgInUiOgogICAgICAgICAgICAvLyBmYWxscyB0aHJvdWdoCiAgICAgICAgICAgIGNhc2UgIlNTUyI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbGxpc2Vjb25kLCAzKTsKICAgICAgICAgICAgLy8gc2Vjb25kcwogICAgICAgICAgICBjYXNlICJzIjoKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuc2Vjb25kKTsKICAgICAgICAgICAgY2FzZSAic3MiOgogICAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5zZWNvbmQsIDIpOwogICAgICAgICAgICAvLyBmcmFjdGlvbmFsIHNlY29uZHMKICAgICAgICAgICAgY2FzZSAidXUiOgogICAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShNYXRoLmZsb29yKGR0Lm1pbGxpc2Vjb25kIC8gMTApLCAyKTsKICAgICAgICAgICAgY2FzZSAidXV1IjoKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihkdC5taWxsaXNlY29uZCAvIDEwMCkpOwogICAgICAgICAgICAvLyBtaW51dGVzCiAgICAgICAgICAgIGNhc2UgIm0iOgogICAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5taW51dGUpOwogICAgICAgICAgICBjYXNlICJtbSI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbnV0ZSwgMik7CiAgICAgICAgICAgIC8vIGhvdXJzCiAgICAgICAgICAgIGNhc2UgImgiOgogICAgICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5ob3VyICUgMTIgPT09IDAgPyAxMiA6IGR0LmhvdXIgJSAxMik7CiAgICAgICAgICAgIGNhc2UgImhoIjoKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuaG91ciAlIDEyID09PSAwID8gMTIgOiBkdC5ob3VyICUgMTIsIDIpOwogICAgICAgICAgICBjYXNlICJIIjoKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuaG91cik7CiAgICAgICAgICAgIGNhc2UgIkhIIjoKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuaG91ciwgMik7CiAgICAgICAgICAgIC8vIG9mZnNldAogICAgICAgICAgICBjYXNlICJaIjoKICAgICAgICAgICAgICAvLyBsaWtlICs2CiAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh7IGZvcm1hdDogIm5hcnJvdyIsIGFsbG93WjogdGhpcy5vcHRzLmFsbG93WiB9KTsKICAgICAgICAgICAgY2FzZSAiWloiOgogICAgICAgICAgICAgIC8vIGxpa2UgKzA2OjAwCiAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh7IGZvcm1hdDogInNob3J0IiwgYWxsb3daOiB0aGlzLm9wdHMuYWxsb3daIH0pOwogICAgICAgICAgICBjYXNlICJaWloiOgogICAgICAgICAgICAgIC8vIGxpa2UgKzA2MDAKICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHsgZm9ybWF0OiAidGVjaGllIiwgYWxsb3daOiB0aGlzLm9wdHMuYWxsb3daIH0pOwogICAgICAgICAgICBjYXNlICJaWlpaIjoKICAgICAgICAgICAgICAvLyBsaWtlIEVTVAogICAgICAgICAgICAgIHJldHVybiBkdC56b25lLm9mZnNldE5hbWUoZHQudHMsIHsgZm9ybWF0OiAic2hvcnQiLCBsb2NhbGU6IHRoaXMubG9jLmxvY2FsZSB9KTsKICAgICAgICAgICAgY2FzZSAiWlpaWloiOgogICAgICAgICAgICAgIC8vIGxpa2UgRWFzdGVybiBTdGFuZGFyZCBUaW1lCiAgICAgICAgICAgICAgcmV0dXJuIGR0LnpvbmUub2Zmc2V0TmFtZShkdC50cywgeyBmb3JtYXQ6ICJsb25nIiwgbG9jYWxlOiB0aGlzLmxvYy5sb2NhbGUgfSk7CiAgICAgICAgICAgIC8vIHpvbmUKICAgICAgICAgICAgY2FzZSAieiI6CiAgICAgICAgICAgICAgLy8gbGlrZSBBbWVyaWNhL05ld19Zb3JrCiAgICAgICAgICAgICAgcmV0dXJuIGR0LnpvbmVOYW1lOwogICAgICAgICAgICAvLyBtZXJpZGllbXMKICAgICAgICAgICAgY2FzZSAiYSI6CiAgICAgICAgICAgICAgcmV0dXJuIG1lcmlkaWVtKCk7CiAgICAgICAgICAgIC8vIGRhdGVzCiAgICAgICAgICAgIGNhc2UgImQiOgogICAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7IGRheTogIm51bWVyaWMiIH0sICJkYXkiKSA6IHRoaXMubnVtKGR0LmRheSk7CiAgICAgICAgICAgIGNhc2UgImRkIjoKICAgICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoeyBkYXk6ICIyLWRpZ2l0IiB9LCAiZGF5IikgOiB0aGlzLm51bShkdC5kYXksIDIpOwogICAgICAgICAgICAvLyB3ZWVrZGF5cyAtIHN0YW5kYWxvbmUKICAgICAgICAgICAgY2FzZSAiYyI6CiAgICAgICAgICAgICAgLy8gbGlrZSAxCiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtkYXkpOwogICAgICAgICAgICBjYXNlICJjY2MiOgogICAgICAgICAgICAgIC8vIGxpa2UgJ1R1ZXMnCiAgICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoInNob3J0IiwgdHJ1ZSk7CiAgICAgICAgICAgIGNhc2UgImNjY2MiOgogICAgICAgICAgICAgIC8vIGxpa2UgJ1R1ZXNkYXknCiAgICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoImxvbmciLCB0cnVlKTsKICAgICAgICAgICAgY2FzZSAiY2NjY2MiOgogICAgICAgICAgICAgIC8vIGxpa2UgJ1QnCiAgICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoIm5hcnJvdyIsIHRydWUpOwogICAgICAgICAgICAvLyB3ZWVrZGF5cyAtIGZvcm1hdAogICAgICAgICAgICBjYXNlICJFIjoKICAgICAgICAgICAgICAvLyBsaWtlIDEKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla2RheSk7CiAgICAgICAgICAgIGNhc2UgIkVFRSI6CiAgICAgICAgICAgICAgLy8gbGlrZSAnVHVlcycKICAgICAgICAgICAgICByZXR1cm4gd2Vla2RheSgic2hvcnQiLCBmYWxzZSk7CiAgICAgICAgICAgIGNhc2UgIkVFRUUiOgogICAgICAgICAgICAgIC8vIGxpa2UgJ1R1ZXNkYXknCiAgICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoImxvbmciLCBmYWxzZSk7CiAgICAgICAgICAgIGNhc2UgIkVFRUVFIjoKICAgICAgICAgICAgICAvLyBsaWtlICdUJwogICAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KCJuYXJyb3ciLCBmYWxzZSk7CiAgICAgICAgICAgIC8vIG1vbnRocyAtIHN0YW5kYWxvbmUKICAgICAgICAgICAgY2FzZSAiTCI6CiAgICAgICAgICAgICAgLy8gbGlrZSAxCiAgICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyCiAgICAgICAgICAgICAgICA/IHN0cmluZyh7IG1vbnRoOiAibnVtZXJpYyIsIGRheTogIm51bWVyaWMiIH0sICJtb250aCIpCiAgICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0Lm1vbnRoKTsKICAgICAgICAgICAgY2FzZSAiTEwiOgogICAgICAgICAgICAgIC8vIGxpa2UgMDEsIGRvZXNuJ3Qgc2VlbSB0byB3b3JrCiAgICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyCiAgICAgICAgICAgICAgICA/IHN0cmluZyh7IG1vbnRoOiAiMi1kaWdpdCIsIGRheTogIm51bWVyaWMiIH0sICJtb250aCIpCiAgICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0Lm1vbnRoLCAyKTsKICAgICAgICAgICAgY2FzZSAiTExMIjoKICAgICAgICAgICAgICAvLyBsaWtlIEphbgogICAgICAgICAgICAgIHJldHVybiBtb250aCgic2hvcnQiLCB0cnVlKTsKICAgICAgICAgICAgY2FzZSAiTExMTCI6CiAgICAgICAgICAgICAgLy8gbGlrZSBKYW51YXJ5CiAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoKCJsb25nIiwgdHJ1ZSk7CiAgICAgICAgICAgIGNhc2UgIkxMTExMIjoKICAgICAgICAgICAgICAvLyBsaWtlIEoKICAgICAgICAgICAgICByZXR1cm4gbW9udGgoIm5hcnJvdyIsIHRydWUpOwogICAgICAgICAgICAvLyBtb250aHMgLSBmb3JtYXQKICAgICAgICAgICAgY2FzZSAiTSI6CiAgICAgICAgICAgICAgLy8gbGlrZSAxCiAgICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyCiAgICAgICAgICAgICAgICA/IHN0cmluZyh7IG1vbnRoOiAibnVtZXJpYyIgfSwgIm1vbnRoIikKICAgICAgICAgICAgICAgIDogdGhpcy5udW0oZHQubW9udGgpOwogICAgICAgICAgICBjYXNlICJNTSI6CiAgICAgICAgICAgICAgLy8gbGlrZSAwMQogICAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlcgogICAgICAgICAgICAgICAgPyBzdHJpbmcoeyBtb250aDogIjItZGlnaXQiIH0sICJtb250aCIpCiAgICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0Lm1vbnRoLCAyKTsKICAgICAgICAgICAgY2FzZSAiTU1NIjoKICAgICAgICAgICAgICAvLyBsaWtlIEphbgogICAgICAgICAgICAgIHJldHVybiBtb250aCgic2hvcnQiLCBmYWxzZSk7CiAgICAgICAgICAgIGNhc2UgIk1NTU0iOgogICAgICAgICAgICAgIC8vIGxpa2UgSmFudWFyeQogICAgICAgICAgICAgIHJldHVybiBtb250aCgibG9uZyIsIGZhbHNlKTsKICAgICAgICAgICAgY2FzZSAiTU1NTU0iOgogICAgICAgICAgICAgIC8vIGxpa2UgSgogICAgICAgICAgICAgIHJldHVybiBtb250aCgibmFycm93IiwgZmFsc2UpOwogICAgICAgICAgICAvLyB5ZWFycwogICAgICAgICAgICBjYXNlICJ5IjoKICAgICAgICAgICAgICAvLyBsaWtlIDIwMTQKICAgICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoeyB5ZWFyOiAibnVtZXJpYyIgfSwgInllYXIiKSA6IHRoaXMubnVtKGR0LnllYXIpOwogICAgICAgICAgICBjYXNlICJ5eSI6CiAgICAgICAgICAgICAgLy8gbGlrZSAxNAogICAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlcgogICAgICAgICAgICAgICAgPyBzdHJpbmcoeyB5ZWFyOiAiMi1kaWdpdCIgfSwgInllYXIiKQogICAgICAgICAgICAgICAgOiB0aGlzLm51bShkdC55ZWFyLnRvU3RyaW5nKCkuc2xpY2UoLTIpLCAyKTsKICAgICAgICAgICAgY2FzZSAieXl5eSI6CiAgICAgICAgICAgICAgLy8gbGlrZSAwMDEyCiAgICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyCiAgICAgICAgICAgICAgICA/IHN0cmluZyh7IHllYXI6ICJudW1lcmljIiB9LCAieWVhciIpCiAgICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0LnllYXIsIDQpOwogICAgICAgICAgICBjYXNlICJ5eXl5eXkiOgogICAgICAgICAgICAgIC8vIGxpa2UgMDAwMDEyCiAgICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyCiAgICAgICAgICAgICAgICA/IHN0cmluZyh7IHllYXI6ICJudW1lcmljIiB9LCAieWVhciIpCiAgICAgICAgICAgICAgICA6IHRoaXMubnVtKGR0LnllYXIsIDYpOwogICAgICAgICAgICAvLyBlcmFzCiAgICAgICAgICAgIGNhc2UgIkciOgogICAgICAgICAgICAgIC8vIGxpa2UgQUQKICAgICAgICAgICAgICByZXR1cm4gZXJhKCJzaG9ydCIpOwogICAgICAgICAgICBjYXNlICJHRyI6CiAgICAgICAgICAgICAgLy8gbGlrZSBBbm5vIERvbWluaQogICAgICAgICAgICAgIHJldHVybiBlcmEoImxvbmciKTsKICAgICAgICAgICAgY2FzZSAiR0dHR0ciOgogICAgICAgICAgICAgIHJldHVybiBlcmEoIm5hcnJvdyIpOwogICAgICAgICAgICBjYXNlICJrayI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtZZWFyLnRvU3RyaW5nKCkuc2xpY2UoLTIpLCAyKTsKICAgICAgICAgICAgY2FzZSAia2trayI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtZZWFyLCA0KTsKICAgICAgICAgICAgY2FzZSAiVyI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtOdW1iZXIpOwogICAgICAgICAgICBjYXNlICJXVyI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtOdW1iZXIsIDIpOwogICAgICAgICAgICBjYXNlICJvIjoKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQub3JkaW5hbCk7CiAgICAgICAgICAgIGNhc2UgIm9vbyI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm9yZGluYWwsIDMpOwogICAgICAgICAgICBjYXNlICJxIjoKICAgICAgICAgICAgICAvLyBsaWtlIDEKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQucXVhcnRlcik7CiAgICAgICAgICAgIGNhc2UgInFxIjoKICAgICAgICAgICAgICAvLyBsaWtlIDAxCiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnF1YXJ0ZXIsIDIpOwogICAgICAgICAgICBjYXNlICJYIjoKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5udW0oTWF0aC5mbG9vcihkdC50cyAvIDEwMDApKTsKICAgICAgICAgICAgY2FzZSAieCI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnRzKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICByZXR1cm4gbWF5YmVNYWNybyh0b2tlbik7CiAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgIHJldHVybiBzdHJpbmdpZnlUb2tlbnMoRm9ybWF0dGVyLnBhcnNlRm9ybWF0KGZtdCksIHRva2VuVG9TdHJpbmcpOwogICAgfQoKICAgIGZvcm1hdER1cmF0aW9uRnJvbVN0cmluZyhkdXIsIGZtdCkgewogICAgICBjb25zdCB0b2tlblRvRmllbGQgPSAodG9rZW4pID0+IHsKICAgICAgICAgIHN3aXRjaCAodG9rZW5bMF0pIHsKICAgICAgICAgICAgY2FzZSAiUyI6CiAgICAgICAgICAgICAgcmV0dXJuICJtaWxsaXNlY29uZCI7CiAgICAgICAgICAgIGNhc2UgInMiOgogICAgICAgICAgICAgIHJldHVybiAic2Vjb25kIjsKICAgICAgICAgICAgY2FzZSAibSI6CiAgICAgICAgICAgICAgcmV0dXJuICJtaW51dGUiOwogICAgICAgICAgICBjYXNlICJoIjoKICAgICAgICAgICAgICByZXR1cm4gImhvdXIiOwogICAgICAgICAgICBjYXNlICJkIjoKICAgICAgICAgICAgICByZXR1cm4gImRheSI7CiAgICAgICAgICAgIGNhc2UgInciOgogICAgICAgICAgICAgIHJldHVybiAid2VlayI7CiAgICAgICAgICAgIGNhc2UgIk0iOgogICAgICAgICAgICAgIHJldHVybiAibW9udGgiOwogICAgICAgICAgICBjYXNlICJ5IjoKICAgICAgICAgICAgICByZXR1cm4gInllYXIiOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdG9rZW5Ub1N0cmluZyA9IChsaWxkdXIpID0+ICh0b2tlbikgPT4gewogICAgICAgICAgY29uc3QgbWFwcGVkID0gdG9rZW5Ub0ZpZWxkKHRva2VuKTsKICAgICAgICAgIGlmIChtYXBwZWQpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGxpbGR1ci5nZXQobWFwcGVkKSwgdG9rZW4ubGVuZ3RoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHRva2VucyA9IEZvcm1hdHRlci5wYXJzZUZvcm1hdChmbXQpLAogICAgICAgIHJlYWxUb2tlbnMgPSB0b2tlbnMucmVkdWNlKAogICAgICAgICAgKGZvdW5kLCB7IGxpdGVyYWwsIHZhbCB9KSA9PiAobGl0ZXJhbCA/IGZvdW5kIDogZm91bmQuY29uY2F0KHZhbCkpLAogICAgICAgICAgW10KICAgICAgICApLAogICAgICAgIGNvbGxhcHNlZCA9IGR1ci5zaGlmdFRvKC4uLnJlYWxUb2tlbnMubWFwKHRva2VuVG9GaWVsZCkuZmlsdGVyKCh0KSA9PiB0KSk7CiAgICAgIHJldHVybiBzdHJpbmdpZnlUb2tlbnModG9rZW5zLCB0b2tlblRvU3RyaW5nKGNvbGxhcHNlZCkpOwogICAgfQogIH0KCiAgY2xhc3MgSW52YWxpZCB7CiAgICBjb25zdHJ1Y3RvcihyZWFzb24sIGV4cGxhbmF0aW9uKSB7CiAgICAgIHRoaXMucmVhc29uID0gcmVhc29uOwogICAgICB0aGlzLmV4cGxhbmF0aW9uID0gZXhwbGFuYXRpb247CiAgICB9CgogICAgdG9NZXNzYWdlKCkgewogICAgICBpZiAodGhpcy5leHBsYW5hdGlvbikgewogICAgICAgIHJldHVybiBgJHt0aGlzLnJlYXNvbn06ICR7dGhpcy5leHBsYW5hdGlvbn1gOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB0aGlzLnJlYXNvbjsKICAgICAgfQogICAgfQogIH0KCiAgLyoKICAgKiBUaGlzIGZpbGUgaGFuZGxlcyBwYXJzaW5nIGZvciB3ZWxsLXNwZWNpZmllZCBmb3JtYXRzLiBIZXJlJ3MgaG93IGl0IHdvcmtzOgogICAqIFR3byB0aGluZ3MgZ28gaW50byBwYXJzaW5nOiBhIHJlZ2V4IHRvIG1hdGNoIHdpdGggYW5kIGFuIGV4dHJhY3RvciB0byB0YWtlIGFwYXJ0IHRoZSBncm91cHMgaW4gdGhlIG1hdGNoLgogICAqIEFuIGV4dHJhY3RvciBpcyBqdXN0IGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHJlZ2V4IG1hdGNoIGFycmF5IGFuZCByZXR1cm5zIGEgeyB5ZWFyOiAuLi4sIG1vbnRoOiAuLi4gfSBvYmplY3QKICAgKiBwYXJzZSgpIGRvZXMgdGhlIHdvcmsgb2YgZXhlY3V0aW5nIHRoZSByZWdleCBhbmQgYXBwbHlpbmcgdGhlIGV4dHJhY3Rvci4gSXQgdGFrZXMgbXVsdGlwbGUgcmVnZXgvZXh0cmFjdG9yIHBhaXJzIHRvIHRyeSBpbiBzZXF1ZW5jZS4KICAgKiBFeHRyYWN0b3JzIGNhbiB0YWtlIGEgImN1cnNvciIgcmVwcmVzZW50aW5nIHRoZSBvZmZzZXQgaW4gdGhlIG1hdGNoIHRvIGxvb2sgYXQuIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBjb21iaW5lIGV4dHJhY3RvcnMuCiAgICogY29tYmluZUV4dHJhY3RvcnMoKSBkb2VzIHRoZSB3b3JrIG9mIGNvbWJpbmluZyB0aGVtLCBrZWVwaW5nIHRyYWNrIG9mIHRoZSBjdXJzb3IgdGhyb3VnaCBtdWx0aXBsZSBleHRyYWN0aW9ucy4KICAgKiBTb21lIGV4dHJhY3Rpb25zIGFyZSBzdXBlciBkdW1iIGFuZCBzaW1wbGVQYXJzZSBhbmQgZnJvbVN0cmluZ3MgaGVscCBEUlkgdGhlbS4KICAgKi8KCiAgY29uc3QgaWFuYVJlZ2V4ID0gL1tBLVphLXpfKy1dezEsMjU2fSg/Ojo/XC9bQS1aYS16MC05XystXXsxLDI1Nn0oPzpcL1tBLVphLXowLTlfKy1dezEsMjU2fSk/KT8vOwoKICBmdW5jdGlvbiBjb21iaW5lUmVnZXhlcyguLi5yZWdleGVzKSB7CiAgICBjb25zdCBmdWxsID0gcmVnZXhlcy5yZWR1Y2UoKGYsIHIpID0+IGYgKyByLnNvdXJjZSwgIiIpOwogICAgcmV0dXJuIFJlZ0V4cChgXiR7ZnVsbH0kYCk7CiAgfQoKICBmdW5jdGlvbiBjb21iaW5lRXh0cmFjdG9ycyguLi5leHRyYWN0b3JzKSB7CiAgICByZXR1cm4gKG0pID0+CiAgICAgIGV4dHJhY3RvcnMKICAgICAgICAucmVkdWNlKAogICAgICAgICAgKFttZXJnZWRWYWxzLCBtZXJnZWRab25lLCBjdXJzb3JdLCBleCkgPT4gewogICAgICAgICAgICBjb25zdCBbdmFsLCB6b25lLCBuZXh0XSA9IGV4KG0sIGN1cnNvcik7CiAgICAgICAgICAgIHJldHVybiBbeyAuLi5tZXJnZWRWYWxzLCAuLi52YWwgfSwgem9uZSB8fCBtZXJnZWRab25lLCBuZXh0XTsKICAgICAgICAgIH0sCiAgICAgICAgICBbe30sIG51bGwsIDFdCiAgICAgICAgKQogICAgICAgIC5zbGljZSgwLCAyKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlKHMsIC4uLnBhdHRlcm5zKSB7CiAgICBpZiAocyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07CiAgICB9CgogICAgZm9yIChjb25zdCBbcmVnZXgsIGV4dHJhY3Rvcl0gb2YgcGF0dGVybnMpIHsKICAgICAgY29uc3QgbSA9IHJlZ2V4LmV4ZWMocyk7CiAgICAgIGlmIChtKSB7CiAgICAgICAgcmV0dXJuIGV4dHJhY3RvcihtKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIFtudWxsLCBudWxsXTsKICB9CgogIGZ1bmN0aW9uIHNpbXBsZVBhcnNlKC4uLmtleXMpIHsKICAgIHJldHVybiAobWF0Y2gsIGN1cnNvcikgPT4gewogICAgICBjb25zdCByZXQgPSB7fTsKICAgICAgbGV0IGk7CgogICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewogICAgICAgIHJldFtrZXlzW2ldXSA9IHBhcnNlSW50ZWdlcihtYXRjaFtjdXJzb3IgKyBpXSk7CiAgICAgIH0KICAgICAgcmV0dXJuIFtyZXQsIG51bGwsIGN1cnNvciArIGldOwogICAgfTsKICB9CgogIC8vIElTTyBhbmQgU1FMIHBhcnNpbmcKICBjb25zdCBvZmZzZXRSZWdleCA9IC8oPzooWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8pLzsKICBjb25zdCBpc29FeHRlbmRlZFpvbmUgPSBgKD86JHtvZmZzZXRSZWdleC5zb3VyY2V9Pyg/OlxcWygke2lhbmFSZWdleC5zb3VyY2V9KVxcXSk/KT9gOwogIGNvbnN0IGlzb1RpbWVCYXNlUmVnZXggPSAvKFxkXGQpKD86Oj8oXGRcZCkoPzo6PyhcZFxkKSg/OlsuLF0oXGR7MSwzMH0pKT8pPyk/LzsKICBjb25zdCBpc29UaW1lUmVnZXggPSBSZWdFeHAoYCR7aXNvVGltZUJhc2VSZWdleC5zb3VyY2V9JHtpc29FeHRlbmRlZFpvbmV9YCk7CiAgY29uc3QgaXNvVGltZUV4dGVuc2lvblJlZ2V4ID0gUmVnRXhwKGAoPzpUJHtpc29UaW1lUmVnZXguc291cmNlfSk/YCk7CiAgY29uc3QgaXNvWW1kUmVnZXggPSAvKFsrLV1cZHs2fXxcZHs0fSkoPzotPyhcZFxkKSg/Oi0/KFxkXGQpKT8pPy87CiAgY29uc3QgaXNvV2Vla1JlZ2V4ID0gLyhcZHs0fSktP1coXGRcZCkoPzotPyhcZCkpPy87CiAgY29uc3QgaXNvT3JkaW5hbFJlZ2V4ID0gLyhcZHs0fSktPyhcZHszfSkvOwogIGNvbnN0IGV4dHJhY3RJU09XZWVrRGF0YSA9IHNpbXBsZVBhcnNlKCJ3ZWVrWWVhciIsICJ3ZWVrTnVtYmVyIiwgIndlZWtEYXkiKTsKICBjb25zdCBleHRyYWN0SVNPT3JkaW5hbERhdGEgPSBzaW1wbGVQYXJzZSgieWVhciIsICJvcmRpbmFsIik7CiAgY29uc3Qgc3FsWW1kUmVnZXggPSAvKFxkezR9KS0oXGRcZCktKFxkXGQpLzsgLy8gZHVtYmVkLWRvd24gdmVyc2lvbiBvZiB0aGUgSVNPIG9uZQogIGNvbnN0IHNxbFRpbWVSZWdleCA9IFJlZ0V4cCgKICAgIGAke2lzb1RpbWVCYXNlUmVnZXguc291cmNlfSA/KD86JHtvZmZzZXRSZWdleC5zb3VyY2V9fCgke2lhbmFSZWdleC5zb3VyY2V9KSk/YAogICk7CiAgY29uc3Qgc3FsVGltZUV4dGVuc2lvblJlZ2V4ID0gUmVnRXhwKGAoPzogJHtzcWxUaW1lUmVnZXguc291cmNlfSk/YCk7CgogIGZ1bmN0aW9uIGludChtYXRjaCwgcG9zLCBmYWxsYmFjaykgewogICAgY29uc3QgbSA9IG1hdGNoW3Bvc107CiAgICByZXR1cm4gaXNVbmRlZmluZWQobSkgPyBmYWxsYmFjayA6IHBhcnNlSW50ZWdlcihtKTsKICB9CgogIGZ1bmN0aW9uIGV4dHJhY3RJU09ZbWQobWF0Y2gsIGN1cnNvcikgewogICAgY29uc3QgaXRlbSA9IHsKICAgICAgeWVhcjogaW50KG1hdGNoLCBjdXJzb3IpLAogICAgICBtb250aDogaW50KG1hdGNoLCBjdXJzb3IgKyAxLCAxKSwKICAgICAgZGF5OiBpbnQobWF0Y2gsIGN1cnNvciArIDIsIDEpLAogICAgfTsKCiAgICByZXR1cm4gW2l0ZW0sIG51bGwsIGN1cnNvciArIDNdOwogIH0KCiAgZnVuY3Rpb24gZXh0cmFjdElTT1RpbWUobWF0Y2gsIGN1cnNvcikgewogICAgY29uc3QgaXRlbSA9IHsKICAgICAgaG91cnM6IGludChtYXRjaCwgY3Vyc29yLCAwKSwKICAgICAgbWludXRlczogaW50KG1hdGNoLCBjdXJzb3IgKyAxLCAwKSwKICAgICAgc2Vjb25kczogaW50KG1hdGNoLCBjdXJzb3IgKyAyLCAwKSwKICAgICAgbWlsbGlzZWNvbmRzOiBwYXJzZU1pbGxpcyhtYXRjaFtjdXJzb3IgKyAzXSksCiAgICB9OwoKICAgIHJldHVybiBbaXRlbSwgbnVsbCwgY3Vyc29yICsgNF07CiAgfQoKICBmdW5jdGlvbiBleHRyYWN0SVNPT2Zmc2V0KG1hdGNoLCBjdXJzb3IpIHsKICAgIGNvbnN0IGxvY2FsID0gIW1hdGNoW2N1cnNvcl0gJiYgIW1hdGNoW2N1cnNvciArIDFdLAogICAgICBmdWxsT2Zmc2V0ID0gc2lnbmVkT2Zmc2V0KG1hdGNoW2N1cnNvciArIDFdLCBtYXRjaFtjdXJzb3IgKyAyXSksCiAgICAgIHpvbmUgPSBsb2NhbCA/IG51bGwgOiBGaXhlZE9mZnNldFpvbmUuaW5zdGFuY2UoZnVsbE9mZnNldCk7CiAgICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAzXTsKICB9CgogIGZ1bmN0aW9uIGV4dHJhY3RJQU5BWm9uZShtYXRjaCwgY3Vyc29yKSB7CiAgICBjb25zdCB6b25lID0gbWF0Y2hbY3Vyc29yXSA/IElBTkFab25lLmNyZWF0ZShtYXRjaFtjdXJzb3JdKSA6IG51bGw7CiAgICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAxXTsKICB9CgogIC8vIElTTyB0aW1lIHBhcnNpbmcKCiAgY29uc3QgaXNvVGltZU9ubHkgPSBSZWdFeHAoYF5UPyR7aXNvVGltZUJhc2VSZWdleC5zb3VyY2V9JGApOwoKICAvLyBJU08gZHVyYXRpb24gcGFyc2luZwoKICBjb25zdCBpc29EdXJhdGlvbiA9CiAgICAvXi0/UCg/Oig/OigtP1xkezEsMjB9KD86XC5cZHsxLDIwfSk/KVkpPyg/OigtP1xkezEsMjB9KD86XC5cZHsxLDIwfSk/KU0pPyg/OigtP1xkezEsMjB9KD86XC5cZHsxLDIwfSk/KVcpPyg/OigtP1xkezEsMjB9KD86XC5cZHsxLDIwfSk/KUQpPyg/OlQoPzooLT9cZHsxLDIwfSg/OlwuXGR7MSwyMH0pPylIKT8oPzooLT9cZHsxLDIwfSg/OlwuXGR7MSwyMH0pPylNKT8oPzooLT9cZHsxLDIwfSkoPzpbLixdKC0/XGR7MSwyMH0pKT9TKT8pPykkLzsKCiAgZnVuY3Rpb24gZXh0cmFjdElTT0R1cmF0aW9uKG1hdGNoKSB7CiAgICBjb25zdCBbcywgeWVhclN0ciwgbW9udGhTdHIsIHdlZWtTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIsIG1pbGxpc2Vjb25kc1N0cl0gPQogICAgICBtYXRjaDsKCiAgICBjb25zdCBoYXNOZWdhdGl2ZVByZWZpeCA9IHNbMF0gPT09ICItIjsKICAgIGNvbnN0IG5lZ2F0aXZlU2Vjb25kcyA9IHNlY29uZFN0ciAmJiBzZWNvbmRTdHJbMF0gPT09ICItIjsKCiAgICBjb25zdCBtYXliZU5lZ2F0ZSA9IChudW0sIGZvcmNlID0gZmFsc2UpID0+CiAgICAgIG51bSAhPT0gdW5kZWZpbmVkICYmIChmb3JjZSB8fCAobnVtICYmIGhhc05lZ2F0aXZlUHJlZml4KSkgPyAtbnVtIDogbnVtOwoKICAgIHJldHVybiBbCiAgICAgIHsKICAgICAgICB5ZWFyczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyh5ZWFyU3RyKSksCiAgICAgICAgbW9udGhzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKG1vbnRoU3RyKSksCiAgICAgICAgd2Vla3M6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcod2Vla1N0cikpLAogICAgICAgIGRheXM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoZGF5U3RyKSksCiAgICAgICAgaG91cnM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoaG91clN0cikpLAogICAgICAgIG1pbnV0ZXM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcobWludXRlU3RyKSksCiAgICAgICAgc2Vjb25kczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhzZWNvbmRTdHIpLCBzZWNvbmRTdHIgPT09ICItMCIpLAogICAgICAgIG1pbGxpc2Vjb25kczogbWF5YmVOZWdhdGUocGFyc2VNaWxsaXMobWlsbGlzZWNvbmRzU3RyKSwgbmVnYXRpdmVTZWNvbmRzKSwKICAgICAgfSwKICAgIF07CiAgfQoKICAvLyBUaGVzZSBhcmUgYSBsaXR0bGUgYnJhaW5kZWFkLiBFRFQgKnNob3VsZCogdGVsbCB1cyB0aGF0IHdlJ3JlIGluLCBzYXksIEFtZXJpY2EvTmV3X1lvcmsKICAvLyBhbmQgbm90IGp1c3QgdGhhdCB3ZSdyZSBpbiAtMjQwICpyaWdodCBub3cqLiBCdXQgc2luY2UgSSBkb24ndCB0aGluayB0aGVzZSBhcmUgdXNlZCB0aGF0IG9mdGVuCiAgLy8gSSdtIGp1c3QgZ29pbmcgdG8gaWdub3JlIHRoYXQKICBjb25zdCBvYnNPZmZzZXRzID0gewogICAgR01UOiAwLAogICAgRURUOiAtNCAqIDYwLAogICAgRVNUOiAtNSAqIDYwLAogICAgQ0RUOiAtNSAqIDYwLAogICAgQ1NUOiAtNiAqIDYwLAogICAgTURUOiAtNiAqIDYwLAogICAgTVNUOiAtNyAqIDYwLAogICAgUERUOiAtNyAqIDYwLAogICAgUFNUOiAtOCAqIDYwLAogIH07CgogIGZ1bmN0aW9uIGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKSB7CiAgICBjb25zdCByZXN1bHQgPSB7CiAgICAgIHllYXI6IHllYXJTdHIubGVuZ3RoID09PSAyID8gdW50cnVuY2F0ZVllYXIocGFyc2VJbnRlZ2VyKHllYXJTdHIpKSA6IHBhcnNlSW50ZWdlcih5ZWFyU3RyKSwKICAgICAgbW9udGg6IG1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpICsgMSwKICAgICAgZGF5OiBwYXJzZUludGVnZXIoZGF5U3RyKSwKICAgICAgaG91cjogcGFyc2VJbnRlZ2VyKGhvdXJTdHIpLAogICAgICBtaW51dGU6IHBhcnNlSW50ZWdlcihtaW51dGVTdHIpLAogICAgfTsKCiAgICBpZiAoc2Vjb25kU3RyKSByZXN1bHQuc2Vjb25kID0gcGFyc2VJbnRlZ2VyKHNlY29uZFN0cik7CiAgICBpZiAod2Vla2RheVN0cikgewogICAgICByZXN1bHQud2Vla2RheSA9CiAgICAgICAgd2Vla2RheVN0ci5sZW5ndGggPiAzCiAgICAgICAgICA/IHdlZWtkYXlzTG9uZy5pbmRleE9mKHdlZWtkYXlTdHIpICsgMQogICAgICAgICAgOiB3ZWVrZGF5c1Nob3J0LmluZGV4T2Yod2Vla2RheVN0cikgKyAxOwogICAgfQoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBSRkMgMjgyMi81MzIyCiAgY29uc3QgcmZjMjgyMiA9CiAgICAvXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLFxzKT8oXGR7MSwyfSlccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylccyhcZHsyLDR9KVxzKFxkXGQpOihcZFxkKSg/OjooXGRcZCkpP1xzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfCg/OihbKy1dXGRcZCkoXGRcZCkpKSQvOwoKICBmdW5jdGlvbiBleHRyYWN0UkZDMjgyMihtYXRjaCkgewogICAgY29uc3QgWwogICAgICAgICwKICAgICAgICB3ZWVrZGF5U3RyLAogICAgICAgIGRheVN0ciwKICAgICAgICBtb250aFN0ciwKICAgICAgICB5ZWFyU3RyLAogICAgICAgIGhvdXJTdHIsCiAgICAgICAgbWludXRlU3RyLAogICAgICAgIHNlY29uZFN0ciwKICAgICAgICBvYnNPZmZzZXQsCiAgICAgICAgbWlsT2Zmc2V0LAogICAgICAgIG9mZkhvdXJTdHIsCiAgICAgICAgb2ZmTWludXRlU3RyLAogICAgICBdID0gbWF0Y2gsCiAgICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTsKCiAgICBsZXQgb2Zmc2V0OwogICAgaWYgKG9ic09mZnNldCkgewogICAgICBvZmZzZXQgPSBvYnNPZmZzZXRzW29ic09mZnNldF07CiAgICB9IGVsc2UgaWYgKG1pbE9mZnNldCkgewogICAgICBvZmZzZXQgPSAwOwogICAgfSBlbHNlIHsKICAgICAgb2Zmc2V0ID0gc2lnbmVkT2Zmc2V0KG9mZkhvdXJTdHIsIG9mZk1pbnV0ZVN0cik7CiAgICB9CgogICAgcmV0dXJuIFtyZXN1bHQsIG5ldyBGaXhlZE9mZnNldFpvbmUob2Zmc2V0KV07CiAgfQoKICBmdW5jdGlvbiBwcmVwcm9jZXNzUkZDMjgyMihzKSB7CiAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZQogICAgcmV0dXJuIHMKICAgICAgLnJlcGxhY2UoL1woW14oKV0qXCl8W1xuXHRdL2csICIgIikKICAgICAgLnJlcGxhY2UoLyhcc1xzKykvZywgIiAiKQogICAgICAudHJpbSgpOwogIH0KCiAgLy8gaHR0cCBkYXRlCgogIGNvbnN0IHJmYzExMjMgPQogICAgICAvXihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLCAoXGRcZCkgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAoXGR7NH0pIChcZFxkKTooXGRcZCk6KFxkXGQpIEdNVCQvLAogICAgcmZjODUwID0KICAgICAgL14oTW9uZGF5fFR1ZXNkYXl8V2VkbmVzZGF5fFRodXJzZGF5fEZyaWRheXxTYXR1cmRheXxTdW5kYXkpLCAoXGRcZCktKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKS0oXGRcZCkgKFxkXGQpOihcZFxkKTooXGRcZCkgR01UJC8sCiAgICBhc2NpaSA9CiAgICAgIC9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1bikgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAoIFxkfFxkXGQpIChcZFxkKTooXGRcZCk6KFxkXGQpIChcZHs0fSkkLzsKCiAgZnVuY3Rpb24gZXh0cmFjdFJGQzExMjNPcjg1MChtYXRjaCkgewogICAgY29uc3QgWywgd2Vla2RheVN0ciwgZGF5U3RyLCBtb250aFN0ciwgeWVhclN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHJdID0gbWF0Y2gsCiAgICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTsKICAgIHJldHVybiBbcmVzdWx0LCBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2VdOwogIH0KCiAgZnVuY3Rpb24gZXh0cmFjdEFTQ0lJKG1hdGNoKSB7CiAgICBjb25zdCBbLCB3ZWVrZGF5U3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0ciwgeWVhclN0cl0gPSBtYXRjaCwKICAgICAgcmVzdWx0ID0gZnJvbVN0cmluZ3Mod2Vla2RheVN0ciwgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIpOwogICAgcmV0dXJuIFtyZXN1bHQsIEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZV07CiAgfQoKICBjb25zdCBpc29ZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvWW1kUmVnZXgsIGlzb1RpbWVFeHRlbnNpb25SZWdleCk7CiAgY29uc3QgaXNvV2Vla1dpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29XZWVrUmVnZXgsIGlzb1RpbWVFeHRlbnNpb25SZWdleCk7CiAgY29uc3QgaXNvT3JkaW5hbFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29PcmRpbmFsUmVnZXgsIGlzb1RpbWVFeHRlbnNpb25SZWdleCk7CiAgY29uc3QgaXNvVGltZUNvbWJpbmVkUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29UaW1lUmVnZXgpOwoKICBjb25zdCBleHRyYWN0SVNPWW1kVGltZUFuZE9mZnNldCA9IGNvbWJpbmVFeHRyYWN0b3JzKAogICAgZXh0cmFjdElTT1ltZCwKICAgIGV4dHJhY3RJU09UaW1lLAogICAgZXh0cmFjdElTT09mZnNldCwKICAgIGV4dHJhY3RJQU5BWm9uZQogICk7CiAgY29uc3QgZXh0cmFjdElTT1dlZWtUaW1lQW5kT2Zmc2V0ID0gY29tYmluZUV4dHJhY3RvcnMoCiAgICBleHRyYWN0SVNPV2Vla0RhdGEsCiAgICBleHRyYWN0SVNPVGltZSwKICAgIGV4dHJhY3RJU09PZmZzZXQsCiAgICBleHRyYWN0SUFOQVpvbmUKICApOwogIGNvbnN0IGV4dHJhY3RJU09PcmRpbmFsRGF0ZUFuZFRpbWUgPSBjb21iaW5lRXh0cmFjdG9ycygKICAgIGV4dHJhY3RJU09PcmRpbmFsRGF0YSwKICAgIGV4dHJhY3RJU09UaW1lLAogICAgZXh0cmFjdElTT09mZnNldCwKICAgIGV4dHJhY3RJQU5BWm9uZQogICk7CiAgY29uc3QgZXh0cmFjdElTT1RpbWVBbmRPZmZzZXQgPSBjb21iaW5lRXh0cmFjdG9ycygKICAgIGV4dHJhY3RJU09UaW1lLAogICAgZXh0cmFjdElTT09mZnNldCwKICAgIGV4dHJhY3RJQU5BWm9uZQogICk7CgogIC8qCiAgICogQHByaXZhdGUKICAgKi8KCiAgZnVuY3Rpb24gcGFyc2VJU09EYXRlKHMpIHsKICAgIHJldHVybiBwYXJzZSgKICAgICAgcywKICAgICAgW2lzb1ltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0XSwKICAgICAgW2lzb1dlZWtXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPV2Vla1RpbWVBbmRPZmZzZXRdLAogICAgICBbaXNvT3JkaW5hbFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09PcmRpbmFsRGF0ZUFuZFRpbWVdLAogICAgICBbaXNvVGltZUNvbWJpbmVkUmVnZXgsIGV4dHJhY3RJU09UaW1lQW5kT2Zmc2V0XQogICAgKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlUkZDMjgyMkRhdGUocykgewogICAgcmV0dXJuIHBhcnNlKHByZXByb2Nlc3NSRkMyODIyKHMpLCBbcmZjMjgyMiwgZXh0cmFjdFJGQzI4MjJdKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlSFRUUERhdGUocykgewogICAgcmV0dXJuIHBhcnNlKAogICAgICBzLAogICAgICBbcmZjMTEyMywgZXh0cmFjdFJGQzExMjNPcjg1MF0sCiAgICAgIFtyZmM4NTAsIGV4dHJhY3RSRkMxMTIzT3I4NTBdLAogICAgICBbYXNjaWksIGV4dHJhY3RBU0NJSV0KICAgICk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZUlTT0R1cmF0aW9uKHMpIHsKICAgIHJldHVybiBwYXJzZShzLCBbaXNvRHVyYXRpb24sIGV4dHJhY3RJU09EdXJhdGlvbl0pOwogIH0KCiAgY29uc3QgZXh0cmFjdElTT1RpbWVPbmx5ID0gY29tYmluZUV4dHJhY3RvcnMoZXh0cmFjdElTT1RpbWUpOwoKICBmdW5jdGlvbiBwYXJzZUlTT1RpbWVPbmx5KHMpIHsKICAgIHJldHVybiBwYXJzZShzLCBbaXNvVGltZU9ubHksIGV4dHJhY3RJU09UaW1lT25seV0pOwogIH0KCiAgY29uc3Qgc3FsWW1kV2l0aFRpbWVFeHRlbnNpb25SZWdleCA9IGNvbWJpbmVSZWdleGVzKHNxbFltZFJlZ2V4LCBzcWxUaW1lRXh0ZW5zaW9uUmVnZXgpOwogIGNvbnN0IHNxbFRpbWVDb21iaW5lZFJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoc3FsVGltZVJlZ2V4KTsKCiAgY29uc3QgZXh0cmFjdElTT1RpbWVPZmZzZXRBbmRJQU5BWm9uZSA9IGNvbWJpbmVFeHRyYWN0b3JzKAogICAgZXh0cmFjdElTT1RpbWUsCiAgICBleHRyYWN0SVNPT2Zmc2V0LAogICAgZXh0cmFjdElBTkFab25lCiAgKTsKCiAgZnVuY3Rpb24gcGFyc2VTUUwocykgewogICAgcmV0dXJuIHBhcnNlKAogICAgICBzLAogICAgICBbc3FsWW1kV2l0aFRpbWVFeHRlbnNpb25SZWdleCwgZXh0cmFjdElTT1ltZFRpbWVBbmRPZmZzZXRdLAogICAgICBbc3FsVGltZUNvbWJpbmVkUmVnZXgsIGV4dHJhY3RJU09UaW1lT2Zmc2V0QW5kSUFOQVpvbmVdCiAgICApOwogIH0KCiAgY29uc3QgSU5WQUxJRCQyID0gIkludmFsaWQgRHVyYXRpb24iOwoKICAvLyB1bml0IGNvbnZlcnNpb24gY29uc3RhbnRzCiAgY29uc3QgbG93T3JkZXJNYXRyaXggPSB7CiAgICAgIHdlZWtzOiB7CiAgICAgICAgZGF5czogNywKICAgICAgICBob3VyczogNyAqIDI0LAogICAgICAgIG1pbnV0ZXM6IDcgKiAyNCAqIDYwLAogICAgICAgIHNlY29uZHM6IDcgKiAyNCAqIDYwICogNjAsCiAgICAgICAgbWlsbGlzZWNvbmRzOiA3ICogMjQgKiA2MCAqIDYwICogMTAwMCwKICAgICAgfSwKICAgICAgZGF5czogewogICAgICAgIGhvdXJzOiAyNCwKICAgICAgICBtaW51dGVzOiAyNCAqIDYwLAogICAgICAgIHNlY29uZHM6IDI0ICogNjAgKiA2MCwKICAgICAgICBtaWxsaXNlY29uZHM6IDI0ICogNjAgKiA2MCAqIDEwMDAsCiAgICAgIH0sCiAgICAgIGhvdXJzOiB7IG1pbnV0ZXM6IDYwLCBzZWNvbmRzOiA2MCAqIDYwLCBtaWxsaXNlY29uZHM6IDYwICogNjAgKiAxMDAwIH0sCiAgICAgIG1pbnV0ZXM6IHsgc2Vjb25kczogNjAsIG1pbGxpc2Vjb25kczogNjAgKiAxMDAwIH0sCiAgICAgIHNlY29uZHM6IHsgbWlsbGlzZWNvbmRzOiAxMDAwIH0sCiAgICB9LAogICAgY2FzdWFsTWF0cml4ID0gewogICAgICB5ZWFyczogewogICAgICAgIHF1YXJ0ZXJzOiA0LAogICAgICAgIG1vbnRoczogMTIsCiAgICAgICAgd2Vla3M6IDUyLAogICAgICAgIGRheXM6IDM2NSwKICAgICAgICBob3VyczogMzY1ICogMjQsCiAgICAgICAgbWludXRlczogMzY1ICogMjQgKiA2MCwKICAgICAgICBzZWNvbmRzOiAzNjUgKiAyNCAqIDYwICogNjAsCiAgICAgICAgbWlsbGlzZWNvbmRzOiAzNjUgKiAyNCAqIDYwICogNjAgKiAxMDAwLAogICAgICB9LAogICAgICBxdWFydGVyczogewogICAgICAgIG1vbnRoczogMywKICAgICAgICB3ZWVrczogMTMsCiAgICAgICAgZGF5czogOTEsCiAgICAgICAgaG91cnM6IDkxICogMjQsCiAgICAgICAgbWludXRlczogOTEgKiAyNCAqIDYwLAogICAgICAgIHNlY29uZHM6IDkxICogMjQgKiA2MCAqIDYwLAogICAgICAgIG1pbGxpc2Vjb25kczogOTEgKiAyNCAqIDYwICogNjAgKiAxMDAwLAogICAgICB9LAogICAgICBtb250aHM6IHsKICAgICAgICB3ZWVrczogNCwKICAgICAgICBkYXlzOiAzMCwKICAgICAgICBob3VyczogMzAgKiAyNCwKICAgICAgICBtaW51dGVzOiAzMCAqIDI0ICogNjAsCiAgICAgICAgc2Vjb25kczogMzAgKiAyNCAqIDYwICogNjAsCiAgICAgICAgbWlsbGlzZWNvbmRzOiAzMCAqIDI0ICogNjAgKiA2MCAqIDEwMDAsCiAgICAgIH0sCgogICAgICAuLi5sb3dPcmRlck1hdHJpeCwKICAgIH0sCiAgICBkYXlzSW5ZZWFyQWNjdXJhdGUgPSAxNDYwOTcuMCAvIDQwMCwKICAgIGRheXNJbk1vbnRoQWNjdXJhdGUgPSAxNDYwOTcuMCAvIDQ4MDAsCiAgICBhY2N1cmF0ZU1hdHJpeCA9IHsKICAgICAgeWVhcnM6IHsKICAgICAgICBxdWFydGVyczogNCwKICAgICAgICBtb250aHM6IDEyLAogICAgICAgIHdlZWtzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyA3LAogICAgICAgIGRheXM6IGRheXNJblllYXJBY2N1cmF0ZSwKICAgICAgICBob3VyczogZGF5c0luWWVhckFjY3VyYXRlICogMjQsCiAgICAgICAgbWludXRlczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCwKICAgICAgICBzZWNvbmRzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwICogNjAsCiAgICAgICAgbWlsbGlzZWNvbmRzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwICogNjAgKiAxMDAwLAogICAgICB9LAogICAgICBxdWFydGVyczogewogICAgICAgIG1vbnRoczogMywKICAgICAgICB3ZWVrczogZGF5c0luWWVhckFjY3VyYXRlIC8gMjgsCiAgICAgICAgZGF5czogZGF5c0luWWVhckFjY3VyYXRlIC8gNCwKICAgICAgICBob3VyczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0KSAvIDQsCiAgICAgICAgbWludXRlczogKGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjApIC8gNCwKICAgICAgICBzZWNvbmRzOiAoZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwKSAvIDQsCiAgICAgICAgbWlsbGlzZWNvbmRzOiAoZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwICogMTAwMCkgLyA0LAogICAgICB9LAogICAgICBtb250aHM6IHsKICAgICAgICB3ZWVrczogZGF5c0luTW9udGhBY2N1cmF0ZSAvIDcsCiAgICAgICAgZGF5czogZGF5c0luTW9udGhBY2N1cmF0ZSwKICAgICAgICBob3VyczogZGF5c0luTW9udGhBY2N1cmF0ZSAqIDI0LAogICAgICAgIG1pbnV0ZXM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCAqIDYwLAogICAgICAgIHNlY29uZHM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCAqIDYwICogNjAsCiAgICAgICAgbWlsbGlzZWNvbmRzOiBkYXlzSW5Nb250aEFjY3VyYXRlICogMjQgKiA2MCAqIDYwICogMTAwMCwKICAgICAgfSwKICAgICAgLi4ubG93T3JkZXJNYXRyaXgsCiAgICB9OwoKICAvLyB1bml0cyBvcmRlcmVkIGJ5IHNpemUKICBjb25zdCBvcmRlcmVkVW5pdHMkMSA9IFsKICAgICJ5ZWFycyIsCiAgICAicXVhcnRlcnMiLAogICAgIm1vbnRocyIsCiAgICAid2Vla3MiLAogICAgImRheXMiLAogICAgImhvdXJzIiwKICAgICJtaW51dGVzIiwKICAgICJzZWNvbmRzIiwKICAgICJtaWxsaXNlY29uZHMiLAogIF07CgogIGNvbnN0IHJldmVyc2VVbml0cyA9IG9yZGVyZWRVbml0cyQxLnNsaWNlKDApLnJldmVyc2UoKTsKCiAgLy8gY2xvbmUgcmVhbGx5IG1lYW5zICJjcmVhdGUgYW5vdGhlciBpbnN0YW5jZSBqdXN0IGxpa2UgdGhpcyBvbmUsIGJ1dCB3aXRoIHRoZXNlIGNoYW5nZXMiCiAgZnVuY3Rpb24gY2xvbmUkMShkdXIsIGFsdHMsIGNsZWFyID0gZmFsc2UpIHsKICAgIC8vIGRlZXAgbWVyZ2UgZm9yIHZhbHMKICAgIGNvbnN0IGNvbmYgPSB7CiAgICAgIHZhbHVlczogY2xlYXIgPyBhbHRzLnZhbHVlcyA6IHsgLi4uZHVyLnZhbHVlcywgLi4uKGFsdHMudmFsdWVzIHx8IHt9KSB9LAogICAgICBsb2M6IGR1ci5sb2MuY2xvbmUoYWx0cy5sb2MpLAogICAgICBjb252ZXJzaW9uQWNjdXJhY3k6IGFsdHMuY29udmVyc2lvbkFjY3VyYWN5IHx8IGR1ci5jb252ZXJzaW9uQWNjdXJhY3ksCiAgICAgIG1hdHJpeDogYWx0cy5tYXRyaXggfHwgZHVyLm1hdHJpeCwKICAgIH07CiAgICByZXR1cm4gbmV3IER1cmF0aW9uKGNvbmYpOwogIH0KCiAgZnVuY3Rpb24gZHVyYXRpb25Ub01pbGxpcyhtYXRyaXgsIHZhbHMpIHsKICAgIGxldCBzdW0gPSB2YWxzLm1pbGxpc2Vjb25kcyA/PyAwOwogICAgZm9yIChjb25zdCB1bml0IG9mIHJldmVyc2VVbml0cy5zbGljZSgxKSkgewogICAgICBpZiAodmFsc1t1bml0XSkgewogICAgICAgIHN1bSArPSB2YWxzW3VuaXRdICogbWF0cml4W3VuaXRdWyJtaWxsaXNlY29uZHMiXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHN1bTsKICB9CgogIC8vIE5COiBtdXRhdGVzIHBhcmFtZXRlcnMKICBmdW5jdGlvbiBub3JtYWxpemVWYWx1ZXMobWF0cml4LCB2YWxzKSB7CiAgICAvLyB0aGUgbG9naWMgYmVsb3cgYXNzdW1lcyB0aGUgb3ZlcmFsbCB2YWx1ZSBvZiB0aGUgZHVyYXRpb24gaXMgcG9zaXRpdmUKICAgIC8vIGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBmYWN0b3IgaXMgdXNlZCB0byBtYWtlIGl0IHNvCiAgICBjb25zdCBmYWN0b3IgPSBkdXJhdGlvblRvTWlsbGlzKG1hdHJpeCwgdmFscykgPCAwID8gLTEgOiAxOwoKICAgIG9yZGVyZWRVbml0cyQxLnJlZHVjZVJpZ2h0KChwcmV2aW91cywgY3VycmVudCkgPT4gewogICAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbHNbY3VycmVudF0pKSB7CiAgICAgICAgaWYgKHByZXZpb3VzKSB7CiAgICAgICAgICBjb25zdCBwcmV2aW91c1ZhbCA9IHZhbHNbcHJldmlvdXNdICogZmFjdG9yOwogICAgICAgICAgY29uc3QgY29udiA9IG1hdHJpeFtjdXJyZW50XVtwcmV2aW91c107CgogICAgICAgICAgLy8gaWYgKHByZXZpb3VzVmFsIDwgMCk6CiAgICAgICAgICAvLyBsb3dlciBvcmRlciB1bml0IGlzIG5lZ2F0aXZlIChlLmcuIHsgeWVhcnM6IDIsIGRheXM6IC0yIH0pCiAgICAgICAgICAvLyBub3JtYWxpemUgdGhpcyBieSByZWR1Y2luZyB0aGUgaGlnaGVyIG9yZGVyIHVuaXQgYnkgdGhlIGFwcHJvcHJpYXRlIGFtb3VudAogICAgICAgICAgLy8gYW5kIGluY3JlYXNpbmcgdGhlIGxvd2VyIG9yZGVyIHVuaXQKICAgICAgICAgIC8vIHRoaXMgY2FuIG5ldmVyIG1ha2UgdGhlIGhpZ2hlciBvcmRlciB1bml0IG5lZ2F0aXZlLCBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gb25seSBvcGVyYXRlcwogICAgICAgICAgLy8gb24gcG9zaXRpdmUgZHVyYXRpb25zLCBzbyB0aGUgYW1vdW50IG9mIHRpbWUgcmVwcmVzZW50ZWQgYnkgdGhlIGxvd2VyIG9yZGVyIHVuaXQgY2Fubm90CiAgICAgICAgICAvLyBiZSBsYXJnZXIgdGhhbiB0aGUgaGlnaGVyIG9yZGVyIHVuaXQKICAgICAgICAgIC8vIGVsc2U6CiAgICAgICAgICAvLyBsb3dlciBvcmRlciB1bml0IGlzIHBvc2l0aXZlIChlLmcuIHsgeWVhcnM6IDIsIGRheXM6IDQ1MCB9IG9yIHsgeWVhcnM6IC0yLCBkYXlzOiA0NTAgfSkKICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSBhdHRlbXB0IHRvIGNvbnZlcnQgYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIHRoZSBsb3dlciBvcmRlciB1bml0IGludG8KICAgICAgICAgIC8vIHRoZSBoaWdoZXIgb3JkZXIgb25lCiAgICAgICAgICAvLwogICAgICAgICAgLy8gTWF0aC5mbG9vciB0YWtlcyBjYXJlIG9mIGJvdGggb2YgdGhlc2UgY2FzZXMsIHJvdW5kaW5nIGF3YXkgZnJvbSAwCiAgICAgICAgICAvLyBpZiBwcmV2aW91c1ZhbCA8IDAgaXQgbWFrZXMgdGhlIGFic29sdXRlIHZhbHVlIGxhcmdlcgogICAgICAgICAgLy8gaWYgcHJldmlvdXNWYWwgPj0gaXQgbWFrZXMgdGhlIGFic29sdXRlIHZhbHVlIHNtYWxsZXIKICAgICAgICAgIGNvbnN0IHJvbGxVcCA9IE1hdGguZmxvb3IocHJldmlvdXNWYWwgLyBjb252KTsKICAgICAgICAgIHZhbHNbY3VycmVudF0gKz0gcm9sbFVwICogZmFjdG9yOwogICAgICAgICAgdmFsc1twcmV2aW91c10gLT0gcm9sbFVwICogY29udiAqIGZhY3RvcjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHByZXZpb3VzOwogICAgICB9CiAgICB9LCBudWxsKTsKCiAgICAvLyB0cnkgdG8gY29udmVydCBhbnkgZGVjaW1hbHMgaW50byBzbWFsbGVyIHVuaXRzIGlmIHBvc3NpYmxlCiAgICAvLyBmb3IgZXhhbXBsZSBmb3IgeyB5ZWFyczogMi41LCBkYXlzOiAwLCBzZWNvbmRzOiAwIH0gd2Ugd2FudCB0byBnZXQgeyB5ZWFyczogMiwgZGF5czogMTgyLCBob3VyczogMTIgfQogICAgb3JkZXJlZFVuaXRzJDEucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4gewogICAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbHNbY3VycmVudF0pKSB7CiAgICAgICAgaWYgKHByZXZpb3VzKSB7CiAgICAgICAgICBjb25zdCBmcmFjdGlvbiA9IHZhbHNbcHJldmlvdXNdICUgMTsKICAgICAgICAgIHZhbHNbcHJldmlvdXNdIC09IGZyYWN0aW9uOwogICAgICAgICAgdmFsc1tjdXJyZW50XSArPSBmcmFjdGlvbiAqIG1hdHJpeFtwcmV2aW91c11bY3VycmVudF07CiAgICAgICAgfQogICAgICAgIHJldHVybiBjdXJyZW50OwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBwcmV2aW91czsKICAgICAgfQogICAgfSwgbnVsbCk7CiAgfQoKICAvLyBSZW1vdmUgYWxsIHByb3BlcnRpZXMgd2l0aCBhIHZhbHVlIG9mIDAgZnJvbSBhbiBvYmplY3QKICBmdW5jdGlvbiByZW1vdmVaZXJvZXModmFscykgewogICAgY29uc3QgbmV3VmFscyA9IHt9OwogICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFscykpIHsKICAgICAgaWYgKHZhbHVlICE9PSAwKSB7CiAgICAgICAgbmV3VmFsc1trZXldID0gdmFsdWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXdWYWxzOwogIH0KCiAgLyoqCiAgICogQSBEdXJhdGlvbiBvYmplY3QgcmVwcmVzZW50cyBhIHBlcmlvZCBvZiB0aW1lLCBsaWtlICIyIG1vbnRocyIgb3IgIjEgZGF5LCAxIGhvdXIiLiBDb25jZXB0dWFsbHksIGl0J3MganVzdCBhIG1hcCBvZiB1bml0cyB0byB0aGVpciBxdWFudGl0aWVzLCBhY2NvbXBhbmllZCBieSBzb21lIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBhbmQgbWV0aG9kcyBmb3IgY3JlYXRpbmcsIHBhcnNpbmcsIGludGVycm9nYXRpbmcsIHRyYW5zZm9ybWluZywgYW5kIGZvcm1hdHRpbmcgdGhlbS4gVGhleSBjYW4gYmUgdXNlZCBvbiB0aGVpciBvd24gb3IgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBMdXhvbiB0eXBlczsgZm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIHtAbGluayBEYXRlVGltZSNwbHVzfSB0byBhZGQgYSBEdXJhdGlvbiBvYmplY3QgdG8gYSBEYXRlVGltZSwgcHJvZHVjaW5nIGFub3RoZXIgRGF0ZVRpbWUuCiAgICoKICAgKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgY29tbW9ubHkgdXNlZCBtZXRob2RzIGFuZCBnZXR0ZXJzIGluIER1cmF0aW9uOgogICAqCiAgICogKiAqKkNyZWF0aW9uKiogVG8gY3JlYXRlIGEgRHVyYXRpb24sIHVzZSB7QGxpbmsgRHVyYXRpb24uZnJvbU1pbGxpc30sIHtAbGluayBEdXJhdGlvbi5mcm9tT2JqZWN0fSwgb3Ige0BsaW5rIER1cmF0aW9uLmZyb21JU099LgogICAqICogKipVbml0IHZhbHVlcyoqIFNlZSB0aGUge0BsaW5rIER1cmF0aW9uI3llYXJzfSwge0BsaW5rIER1cmF0aW9uI21vbnRoc30sIHtAbGluayBEdXJhdGlvbiN3ZWVrc30sIHtAbGluayBEdXJhdGlvbiNkYXlzfSwge0BsaW5rIER1cmF0aW9uI2hvdXJzfSwge0BsaW5rIER1cmF0aW9uI21pbnV0ZXN9LCB7QGxpbmsgRHVyYXRpb24jc2Vjb25kc30sIHtAbGluayBEdXJhdGlvbiNtaWxsaXNlY29uZHN9IGFjY2Vzc29ycy4KICAgKiAqICoqQ29uZmlndXJhdGlvbioqIFNlZSAge0BsaW5rIER1cmF0aW9uI2xvY2FsZX0gYW5kIHtAbGluayBEdXJhdGlvbiNudW1iZXJpbmdTeXN0ZW19IGFjY2Vzc29ycy4KICAgKiAqICoqVHJhbnNmb3JtYXRpb24qKiBUbyBjcmVhdGUgbmV3IER1cmF0aW9ucyBvdXQgb2Ygb2xkIG9uZXMgdXNlIHtAbGluayBEdXJhdGlvbiNwbHVzfSwge0BsaW5rIER1cmF0aW9uI21pbnVzfSwge0BsaW5rIER1cmF0aW9uI25vcm1hbGl6ZX0sIHtAbGluayBEdXJhdGlvbiNzZXR9LCB7QGxpbmsgRHVyYXRpb24jcmVjb25maWd1cmV9LCB7QGxpbmsgRHVyYXRpb24jc2hpZnRUb30sIGFuZCB7QGxpbmsgRHVyYXRpb24jbmVnYXRlfS4KICAgKiAqICoqT3V0cHV0KiogVG8gY29udmVydCB0aGUgRHVyYXRpb24gaW50byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHNlZSB7QGxpbmsgRHVyYXRpb24jYXN9LCB7QGxpbmsgRHVyYXRpb24jdG9JU099LCB7QGxpbmsgRHVyYXRpb24jdG9Gb3JtYXR9LCBhbmQge0BsaW5rIER1cmF0aW9uI3RvSlNPTn0KICAgKgogICAqIFRoZXJlJ3MgYXJlIG1vcmUgbWV0aG9kcyBkb2N1bWVudGVkIGJlbG93LiBJbiBhZGRpdGlvbiwgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3VidGxlciB0b3BpY3MgbGlrZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgdmFsaWRpdHksIHNlZSB0aGUgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbi4KICAgKi8KICBjbGFzcyBEdXJhdGlvbiB7CiAgICAvKioKICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGNvbnN0cnVjdG9yKGNvbmZpZykgewogICAgICBjb25zdCBhY2N1cmF0ZSA9IGNvbmZpZy5jb252ZXJzaW9uQWNjdXJhY3kgPT09ICJsb25ndGVybSIgfHwgZmFsc2U7CiAgICAgIGxldCBtYXRyaXggPSBhY2N1cmF0ZSA/IGFjY3VyYXRlTWF0cml4IDogY2FzdWFsTWF0cml4OwoKICAgICAgaWYgKGNvbmZpZy5tYXRyaXgpIHsKICAgICAgICBtYXRyaXggPSBjb25maWcubWF0cml4OwogICAgICB9CgogICAgICAvKioKICAgICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgICAqLwogICAgICB0aGlzLnZhbHVlcyA9IGNvbmZpZy52YWx1ZXM7CiAgICAgIC8qKgogICAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAgICovCiAgICAgIHRoaXMubG9jID0gY29uZmlnLmxvYyB8fCBMb2NhbGUuY3JlYXRlKCk7CiAgICAgIC8qKgogICAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAgICovCiAgICAgIHRoaXMuY29udmVyc2lvbkFjY3VyYWN5ID0gYWNjdXJhdGUgPyAibG9uZ3Rlcm0iIDogImNhc3VhbCI7CiAgICAgIC8qKgogICAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAgICovCiAgICAgIHRoaXMuaW52YWxpZCA9IGNvbmZpZy5pbnZhbGlkIHx8IG51bGw7CiAgICAgIC8qKgogICAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAgICovCiAgICAgIHRoaXMubWF0cml4ID0gbWF0cml4OwogICAgICAvKioKICAgICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgICAqLwogICAgICB0aGlzLmlzTHV4b25EdXJhdGlvbiA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgRHVyYXRpb24gZnJvbSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMuCiAgICAgKiBAcGFyYW0ge251bWJlcn0gY291bnQgb2YgbWlsbGlzZWNvbmRzCiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIHBhcnNpbmcKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSB0aGUgbG9jYWxlIHRvIHVzZQogICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2UKICAgICAqIEByZXR1cm4ge0R1cmF0aW9ufQogICAgICovCiAgICBzdGF0aWMgZnJvbU1pbGxpcyhjb3VudCwgb3B0cykgewogICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbGxpc2Vjb25kczogY291bnQgfSwgb3B0cyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBEdXJhdGlvbiBmcm9tIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCBrZXlzIGxpa2UgJ3llYXJzJyBhbmQgJ2hvdXJzJy4KICAgICAqIElmIHRoaXMgb2JqZWN0IGlzIGVtcHR5IHRoZW4gYSB6ZXJvIG1pbGxpc2Vjb25kcyBkdXJhdGlvbiBpcyByZXR1cm5lZC4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSB0aGUgb2JqZWN0IHRvIGNyZWF0ZSB0aGUgRGF0ZVRpbWUgZnJvbQogICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai55ZWFycwogICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5xdWFydGVycwogICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5tb250aHMKICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla3MKICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouZGF5cwogICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5ob3VycwogICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taW51dGVzCiAgICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnNlY29uZHMKICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubWlsbGlzZWNvbmRzCiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHM9W11dIC0gb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhpcyBEdXJhdGlvbgogICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2UKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIHByZXNldCBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2UKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5tYXRyaXg9T2JqZWN0XSAtIHRoZSBjdXN0b20gY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlCiAgICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KICAgICAqLwogICAgc3RhdGljIGZyb21PYmplY3Qob2JqLCBvcHRzID0ge30pIHsKICAgICAgaWYgKG9iaiA9PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICJvYmplY3QiKSB7CiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKAogICAgICAgICAgYER1cmF0aW9uLmZyb21PYmplY3Q6IGFyZ3VtZW50IGV4cGVjdGVkIHRvIGJlIGFuIG9iamVjdCwgZ290ICR7CiAgICAgICAgICBvYmogPT09IG51bGwgPyAibnVsbCIgOiB0eXBlb2Ygb2JqCiAgICAgICAgfWAKICAgICAgICApOwogICAgICB9CgogICAgICByZXR1cm4gbmV3IER1cmF0aW9uKHsKICAgICAgICB2YWx1ZXM6IG5vcm1hbGl6ZU9iamVjdChvYmosIER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQpLAogICAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0cyksCiAgICAgICAgY29udmVyc2lvbkFjY3VyYWN5OiBvcHRzLmNvbnZlcnNpb25BY2N1cmFjeSwKICAgICAgICBtYXRyaXg6IG9wdHMubWF0cml4LAogICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIER1cmF0aW9uIGZyb20gRHVyYXRpb25MaWtlLgogICAgICoKICAgICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRHVyYXRpb259IGR1cmF0aW9uTGlrZQogICAgICogT25lIG9mOgogICAgICogLSBvYmplY3Qgd2l0aCBrZXlzIGxpa2UgJ3llYXJzJyBhbmQgJ2hvdXJzJy4KICAgICAqIC0gbnVtYmVyIHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHMKICAgICAqIC0gRHVyYXRpb24gaW5zdGFuY2UKICAgICAqIEByZXR1cm4ge0R1cmF0aW9ufQogICAgICovCiAgICBzdGF0aWMgZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbkxpa2UpIHsKICAgICAgaWYgKGlzTnVtYmVyKGR1cmF0aW9uTGlrZSkpIHsKICAgICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU1pbGxpcyhkdXJhdGlvbkxpa2UpOwogICAgICB9IGVsc2UgaWYgKER1cmF0aW9uLmlzRHVyYXRpb24oZHVyYXRpb25MaWtlKSkgewogICAgICAgIHJldHVybiBkdXJhdGlvbkxpa2U7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGR1cmF0aW9uTGlrZSA9PT0gIm9iamVjdCIpIHsKICAgICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdChkdXJhdGlvbkxpa2UpOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigKICAgICAgICAgIGBVbmtub3duIGR1cmF0aW9uIGFyZ3VtZW50ICR7ZHVyYXRpb25MaWtlfSBvZiB0eXBlICR7dHlwZW9mIGR1cmF0aW9uTGlrZX1gCiAgICAgICAgKTsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBhbiBJU08gODYwMSBkdXJhdGlvbiBzdHJpbmcuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRleHQgdG8gcGFyc2UKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgcGFyc2luZwogICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2UKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIHByZXNldCBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2UKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5tYXRyaXg9T2JqZWN0XSAtIHRoZSBwcmVzZXQgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlCiAgICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI0R1cmF0aW9ucwogICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTTygnUDNZNk0xVzREVDEySDMwTTVTJykudG9PYmplY3QoKSAvLz0+IHsgeWVhcnM6IDMsIG1vbnRoczogNiwgd2Vla3M6IDEsIGRheXM6IDQsIGhvdXJzOiAxMiwgbWludXRlczogMzAsIHNlY29uZHM6IDUgfQogICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTTygnUFQyM0gnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjMgfQogICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTTygnUDVZM00nKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogNSwgbW9udGhzOiAzIH0KICAgICAqIEByZXR1cm4ge0R1cmF0aW9ufQogICAgICovCiAgICBzdGF0aWMgZnJvbUlTTyh0ZXh0LCBvcHRzKSB7CiAgICAgIGNvbnN0IFtwYXJzZWRdID0gcGFyc2VJU09EdXJhdGlvbih0ZXh0KTsKICAgICAgaWYgKHBhcnNlZCkgewogICAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tT2JqZWN0KHBhcnNlZCwgb3B0cyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQoInVucGFyc2FibGUiLCBgdGhlIGlucHV0ICIke3RleHR9IiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDFgKTsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBhbiBJU08gODYwMSB0aW1lIHN0cmluZy4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGV4dCB0byBwYXJzZQogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIGZvciBwYXJzaW5nCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2UKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZQogICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgcHJlc2V0IGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZQogICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm1hdHJpeD1PYmplY3RdIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZQogICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lcwogICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJzExOjIyOjMzLjQ0NCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMjIsIHNlY29uZHM6IDMzLCBtaWxsaXNlY29uZHM6IDQ0NCB9CiAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnMTE6MDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfQogICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJ1QxMTowMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9CiAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnMTEwMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9CiAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnVDExMDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfQogICAgICogQHJldHVybiB7RHVyYXRpb259CiAgICAgKi8KICAgIHN0YXRpYyBmcm9tSVNPVGltZSh0ZXh0LCBvcHRzKSB7CiAgICAgIGNvbnN0IFtwYXJzZWRdID0gcGFyc2VJU09UaW1lT25seSh0ZXh0KTsKICAgICAgaWYgKHBhcnNlZCkgewogICAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tT2JqZWN0KHBhcnNlZCwgb3B0cyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQoInVucGFyc2FibGUiLCBgdGhlIGlucHV0ICIke3RleHR9IiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDFgKTsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGFuIGludmFsaWQgRHVyYXRpb24uCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gc2ltcGxlIHN0cmluZyBvZiB3aHkgdGhpcyBkYXRldGltZSBpcyBpbnZhbGlkLiBTaG91bGQgbm90IGNvbnRhaW4gcGFyYW1ldGVycyBvciBhbnl0aGluZyBlbHNlIGRhdGEtZGVwZW5kZW50CiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4cGxhbmF0aW9uPW51bGxdIC0gbG9uZ2VyIGV4cGxhbmF0aW9uLCBtYXkgaW5jbHVkZSBwYXJhbWV0ZXJzIGFuZCBvdGhlciB1c2VmdWwgZGVidWdnaW5nIGluZm9ybWF0aW9uCiAgICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KICAgICAqLwogICAgc3RhdGljIGludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbiA9IG51bGwpIHsKICAgICAgaWYgKCFyZWFzb24pIHsKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgRHVyYXRpb24gaXMgaW52YWxpZCIpOwogICAgICB9CgogICAgICBjb25zdCBpbnZhbGlkID0gcmVhc29uIGluc3RhbmNlb2YgSW52YWxpZCA/IHJlYXNvbiA6IG5ldyBJbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pOwoKICAgICAgaWYgKFNldHRpbmdzLnRocm93T25JbnZhbGlkKSB7CiAgICAgICAgdGhyb3cgbmV3IEludmFsaWREdXJhdGlvbkVycm9yKGludmFsaWQpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBuZXcgRHVyYXRpb24oeyBpbnZhbGlkIH0pOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBzdGF0aWMgbm9ybWFsaXplVW5pdCh1bml0KSB7CiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB7CiAgICAgICAgeWVhcjogInllYXJzIiwKICAgICAgICB5ZWFyczogInllYXJzIiwKICAgICAgICBxdWFydGVyOiAicXVhcnRlcnMiLAogICAgICAgIHF1YXJ0ZXJzOiAicXVhcnRlcnMiLAogICAgICAgIG1vbnRoOiAibW9udGhzIiwKICAgICAgICBtb250aHM6ICJtb250aHMiLAogICAgICAgIHdlZWs6ICJ3ZWVrcyIsCiAgICAgICAgd2Vla3M6ICJ3ZWVrcyIsCiAgICAgICAgZGF5OiAiZGF5cyIsCiAgICAgICAgZGF5czogImRheXMiLAogICAgICAgIGhvdXI6ICJob3VycyIsCiAgICAgICAgaG91cnM6ICJob3VycyIsCiAgICAgICAgbWludXRlOiAibWludXRlcyIsCiAgICAgICAgbWludXRlczogIm1pbnV0ZXMiLAogICAgICAgIHNlY29uZDogInNlY29uZHMiLAogICAgICAgIHNlY29uZHM6ICJzZWNvbmRzIiwKICAgICAgICBtaWxsaXNlY29uZDogIm1pbGxpc2Vjb25kcyIsCiAgICAgICAgbWlsbGlzZWNvbmRzOiAibWlsbGlzZWNvbmRzIiwKICAgICAgfVt1bml0ID8gdW5pdC50b0xvd2VyQ2FzZSgpIDogdW5pdF07CgogICAgICBpZiAoIW5vcm1hbGl6ZWQpIHRocm93IG5ldyBJbnZhbGlkVW5pdEVycm9yKHVuaXQpOwoKICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgYSBEdXJhdGlvbi4gV29ya3MgYWNyb3NzIGNvbnRleHQgYm91bmRhcmllcwogICAgICogQHBhcmFtIHtvYmplY3R9IG8KICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgKi8KICAgIHN0YXRpYyBpc0R1cmF0aW9uKG8pIHsKICAgICAgcmV0dXJuIChvICYmIG8uaXNMdXhvbkR1cmF0aW9uKSB8fCBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCAgdGhlIGxvY2FsZSBvZiBhIER1cmF0aW9uLCBzdWNoICdlbi1HQicKICAgICAqIEB0eXBlIHtzdHJpbmd9CiAgICAgKi8KICAgIGdldCBsb2NhbGUoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5sb2NhbGUgOiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBudW1iZXJpbmcgc3lzdGVtIG9mIGEgRHVyYXRpb24sIHN1Y2ggJ2JlbmcnLiBUaGUgbnVtYmVyaW5nIHN5c3RlbSBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRHVyYXRpb24KICAgICAqCiAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICovCiAgICBnZXQgbnVtYmVyaW5nU3lzdGVtKCkgewogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2MubnVtYmVyaW5nU3lzdGVtIDogbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy4gWW91IG1heSB1c2UgdGhlc2UgdG9rZW5zOgogICAgICogKiBgU2AgZm9yIG1pbGxpc2Vjb25kcwogICAgICogKiBgc2AgZm9yIHNlY29uZHMKICAgICAqICogYG1gIGZvciBtaW51dGVzCiAgICAgKiAqIGBoYCBmb3IgaG91cnMKICAgICAqICogYGRgIGZvciBkYXlzCiAgICAgKiAqIGB3YCBmb3Igd2Vla3MKICAgICAqICogYE1gIGZvciBtb250aHMKICAgICAqICogYHlgIGZvciB5ZWFycwogICAgICogTm90ZXM6CiAgICAgKiAqIEFkZCBwYWRkaW5nIGJ5IHJlcGVhdGluZyB0aGUgdG9rZW4sIGUuZy4gInl5IiBwYWRzIHRoZSB5ZWFycyB0byB0d28gZGlnaXRzLCAiaGhoaCIgcGFkcyB0aGUgaG91cnMgb3V0IHRvIGZvdXIgZGlnaXRzCiAgICAgKiAqIFRva2VucyBjYW4gYmUgZXNjYXBlZCBieSB3cmFwcGluZyB3aXRoIHNpbmdsZSBxdW90ZXMuCiAgICAgKiAqIFRoZSBkdXJhdGlvbiB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgc2V0IG9mIHVuaXRzIGluIHRoZSBmb3JtYXQgc3RyaW5nIHVzaW5nIHtAbGluayBEdXJhdGlvbiNzaGlmdFRvfSBhbmQgdGhlIER1cmF0aW9ucydzIGNvbnZlcnNpb24gYWNjdXJhY3kgc2V0dGluZy4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmbXQgLSB0aGUgZm9ybWF0IHN0cmluZwogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsb29yPXRydWVdIC0gZmxvb3IgbnVtZXJpY2FsIHZhbHVlcwogICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvRm9ybWF0KCJ5IGQgcyIpIC8vPT4gIjEgNiAyIgogICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvRm9ybWF0KCJ5eSBkZCBzc3MiKSAvLz0+ICIwMSAwNiAwMDIiCiAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEsIGRheXM6IDYsIHNlY29uZHM6IDIgfSkudG9Gb3JtYXQoIk0gUyIpIC8vPT4gIjEyIDUxODQwMjAwMCIKICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAqLwogICAgdG9Gb3JtYXQoZm10LCBvcHRzID0ge30pIHsKICAgICAgLy8gcmV2ZXJzZS1jb21wYXQgc2luY2UgMS4yOyB3ZSBhbHdheXMgcm91bmQgZG93biBub3csIG5ldmVyIHVwLCBhbmQgd2UgZG8gaXQgYnkgZGVmYXVsdAogICAgICBjb25zdCBmbXRPcHRzID0gewogICAgICAgIC4uLm9wdHMsCiAgICAgICAgZmxvb3I6IG9wdHMucm91bmQgIT09IGZhbHNlICYmIG9wdHMuZmxvb3IgIT09IGZhbHNlLAogICAgICB9OwogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkCiAgICAgICAgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLCBmbXRPcHRzKS5mb3JtYXREdXJhdGlvbkZyb21TdHJpbmcodGhpcywgZm10KQogICAgICAgIDogSU5WQUxJRCQyOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIER1cmF0aW9uIHdpdGggYWxsIHVuaXRzIGluY2x1ZGVkLgogICAgICogVG8gbW9kaWZ5IGl0cyBiZWhhdmlvciB1c2UgdGhlIGBsaXN0U3R5bGVgIGFuZCBhbnkgSW50bC5OdW1iZXJGb3JtYXQgb3B0aW9uLCB0aG91Z2ggYHVuaXREaXNwbGF5YCBpcyBlc3BlY2lhbGx5IHJlbGV2YW50LgogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL051bWJlckZvcm1hdAogICAgICogQHBhcmFtIG9wdHMgLSBPbiBvcHRpb24gb2JqZWN0IHRvIG92ZXJyaWRlIHRoZSBmb3JtYXR0aW5nLiBBY2NlcHRzIHRoZSBzYW1lIGtleXMgYXMgdGhlIG9wdGlvbnMgcGFyYW1ldGVyIG9mIHRoZSBuYXRpdmUgYEludC5OdW1iZXJGb3JtYXRgIGNvbnN0cnVjdG9yLCBhcyB3ZWxsIGFzIGBsaXN0U3R5bGVgLgogICAgICogQGV4YW1wbGUKICAgICAqIGBgYGpzCiAgICAgKiB2YXIgZHVyID0gRHVyYXRpb24uZnJvbU9iamVjdCh7IGRheXM6IDEsIGhvdXJzOiA1LCBtaW51dGVzOiA2IH0pCiAgICAgKiBkdXIudG9IdW1hbigpIC8vPT4gJzEgZGF5LCA1IGhvdXJzLCA2IG1pbnV0ZXMnCiAgICAgKiBkdXIudG9IdW1hbih7IGxpc3RTdHlsZTogImxvbmciIH0pIC8vPT4gJzEgZGF5LCA1IGhvdXJzLCBhbmQgNiBtaW51dGVzJwogICAgICogZHVyLnRvSHVtYW4oeyB1bml0RGlzcGxheTogInNob3J0IiB9KSAvLz0+ICcxIGRheSwgNSBociwgNiBtaW4nCiAgICAgKiBgYGAKICAgICAqLwogICAgdG9IdW1hbihvcHRzID0ge30pIHsKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEJDI7CgogICAgICBjb25zdCBsID0gb3JkZXJlZFVuaXRzJDEKICAgICAgICAubWFwKCh1bml0KSA9PiB7CiAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnZhbHVlc1t1bml0XTsKICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWwpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMubG9jCiAgICAgICAgICAgIC5udW1iZXJGb3JtYXR0ZXIoeyBzdHlsZTogInVuaXQiLCB1bml0RGlzcGxheTogImxvbmciLCAuLi5vcHRzLCB1bml0OiB1bml0LnNsaWNlKDAsIC0xKSB9KQogICAgICAgICAgICAuZm9ybWF0KHZhbCk7CiAgICAgICAgfSkKICAgICAgICAuZmlsdGVyKChuKSA9PiBuKTsKCiAgICAgIHJldHVybiB0aGlzLmxvYwogICAgICAgIC5saXN0Rm9ybWF0dGVyKHsgdHlwZTogImNvbmp1bmN0aW9uIiwgc3R5bGU6IG9wdHMubGlzdFN0eWxlIHx8ICJuYXJyb3ciLCAuLi5vcHRzIH0pCiAgICAgICAgLmZvcm1hdChsKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIHRoaXMgRHVyYXRpb24ncyB2YWx1ZXMuCiAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEsIGRheXM6IDYsIHNlY29uZHM6IDIgfSkudG9PYmplY3QoKSAvLz0+IHsgeWVhcnM6IDEsIGRheXM6IDYsIHNlY29uZHM6IDIgfQogICAgICogQHJldHVybiB7T2JqZWN0fQogICAgICovCiAgICB0b09iamVjdCgpIHsKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTsKICAgICAgcmV0dXJuIHsgLi4udGhpcy52YWx1ZXMgfTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uLgogICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNEdXJhdGlvbnMKICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMywgc2Vjb25kczogNDUgfSkudG9JU08oKSAvLz0+ICdQM1lUNDVTJwogICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogNCwgc2Vjb25kczogNDUgfSkudG9JU08oKSAvLz0+ICdQNE1UNDVTJwogICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogNSB9KS50b0lTTygpIC8vPT4gJ1A1TScKICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaW51dGVzOiA1IH0pLnRvSVNPKCkgLy89PiAnUFQ1TScKICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaWxsaXNlY29uZHM6IDYgfSkudG9JU08oKSAvLz0+ICdQVDAuMDA2UycKICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAqLwogICAgdG9JU08oKSB7CiAgICAgIC8vIHdlIGNvdWxkIHVzZSB0aGUgZm9ybWF0dGVyLCBidXQgdGhpcyBpcyBhbiBlYXNpZXIgd2F5IHRvIGdldCB0aGUgbWluaW11bSBzdHJpbmcKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBudWxsOwoKICAgICAgbGV0IHMgPSAiUCI7CiAgICAgIGlmICh0aGlzLnllYXJzICE9PSAwKSBzICs9IHRoaXMueWVhcnMgKyAiWSI7CiAgICAgIGlmICh0aGlzLm1vbnRocyAhPT0gMCB8fCB0aGlzLnF1YXJ0ZXJzICE9PSAwKSBzICs9IHRoaXMubW9udGhzICsgdGhpcy5xdWFydGVycyAqIDMgKyAiTSI7CiAgICAgIGlmICh0aGlzLndlZWtzICE9PSAwKSBzICs9IHRoaXMud2Vla3MgKyAiVyI7CiAgICAgIGlmICh0aGlzLmRheXMgIT09IDApIHMgKz0gdGhpcy5kYXlzICsgIkQiOwogICAgICBpZiAodGhpcy5ob3VycyAhPT0gMCB8fCB0aGlzLm1pbnV0ZXMgIT09IDAgfHwgdGhpcy5zZWNvbmRzICE9PSAwIHx8IHRoaXMubWlsbGlzZWNvbmRzICE9PSAwKQogICAgICAgIHMgKz0gIlQiOwogICAgICBpZiAodGhpcy5ob3VycyAhPT0gMCkgcyArPSB0aGlzLmhvdXJzICsgIkgiOwogICAgICBpZiAodGhpcy5taW51dGVzICE9PSAwKSBzICs9IHRoaXMubWludXRlcyArICJNIjsKICAgICAgaWYgKHRoaXMuc2Vjb25kcyAhPT0gMCB8fCB0aGlzLm1pbGxpc2Vjb25kcyAhPT0gMCkKICAgICAgICAvLyB0aGlzIHdpbGwgaGFuZGxlICJmbG9hdGluZyBwb2ludCBtYWRuZXNzIiBieSByZW1vdmluZyBleHRyYSBkZWNpbWFsIHBsYWNlcwogICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU4ODAwNC9pcy1mbG9hdGluZy1wb2ludC1tYXRoLWJyb2tlbgogICAgICAgIHMgKz0gcm91bmRUbyh0aGlzLnNlY29uZHMgKyB0aGlzLm1pbGxpc2Vjb25kcyAvIDEwMDAsIDMpICsgIlMiOwogICAgICBpZiAocyA9PT0gIlAiKSBzICs9ICJUMFMiOwogICAgICByZXR1cm4gczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uLCBmb3JtYXR0ZWQgYXMgYSB0aW1lIG9mIGRheS4KICAgICAqIE5vdGUgdGhhdCB0aGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlIGR1cmF0aW9uIGlzIGludmFsaWQsIG5lZ2F0aXZlLCBvciBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gMjQgaG91cnMuCiAgICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVzCiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NNaWxsaXNlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMAogICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc1NlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDAKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVByZWZpeD1mYWxzZV0gLSBpbmNsdWRlIHRoZSBgVGAgcHJlZml4CiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuZm9ybWF0PSdleHRlbmRlZCddIC0gY2hvb3NlIGJldHdlZW4gdGhlIGJhc2ljIGFuZCBleHRlbmRlZCBmb3JtYXQKICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKCkgLy89PiAnMTE6MDA6MDAuMDAwJwogICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc01pbGxpc2Vjb25kczogdHJ1ZSB9KSAvLz0+ICcxMTowMDowMCcKICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgc3VwcHJlc3NTZWNvbmRzOiB0cnVlIH0pIC8vPT4gJzExOjAwJwogICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBpbmNsdWRlUHJlZml4OiB0cnVlIH0pIC8vPT4gJ1QxMTowMDowMC4wMDAnCiAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcxMTAwMDAuMDAwJwogICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICovCiAgICB0b0lTT1RpbWUob3B0cyA9IHt9KSB7CiAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDsKCiAgICAgIGNvbnN0IG1pbGxpcyA9IHRoaXMudG9NaWxsaXMoKTsKICAgICAgaWYgKG1pbGxpcyA8IDAgfHwgbWlsbGlzID49IDg2NDAwMDAwKSByZXR1cm4gbnVsbDsKCiAgICAgIG9wdHMgPSB7CiAgICAgICAgc3VwcHJlc3NNaWxsaXNlY29uZHM6IGZhbHNlLAogICAgICAgIHN1cHByZXNzU2Vjb25kczogZmFsc2UsCiAgICAgICAgaW5jbHVkZVByZWZpeDogZmFsc2UsCiAgICAgICAgZm9ybWF0OiAiZXh0ZW5kZWQiLAogICAgICAgIC4uLm9wdHMsCiAgICAgICAgaW5jbHVkZU9mZnNldDogZmFsc2UsCiAgICAgIH07CgogICAgICBjb25zdCBkYXRlVGltZSA9IERhdGVUaW1lLmZyb21NaWxsaXMobWlsbGlzLCB7IHpvbmU6ICJVVEMiIH0pOwogICAgICByZXR1cm4gZGF0ZVRpbWUudG9JU09UaW1lKG9wdHMpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBJU08gODYwMSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gSlNPTi4KICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAqLwogICAgdG9KU09OKCkgewogICAgICByZXR1cm4gdGhpcy50b0lTTygpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBJU08gODYwMSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gZGVidWdnaW5nLgogICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICovCiAgICB0b1N0cmluZygpIHsKICAgICAgcmV0dXJuIHRoaXMudG9JU08oKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gbWlsbGlzZWNvbmRzIHZhbHVlIG9mIHRoaXMgRHVyYXRpb24uCiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CiAgICAgKi8KICAgIHRvTWlsbGlzKCkgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIE5hTjsKCiAgICAgIHJldHVybiBkdXJhdGlvblRvTWlsbGlzKHRoaXMubWF0cml4LCB0aGlzLnZhbHVlcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIG1pbGxpc2Vjb25kcyB2YWx1ZSBvZiB0aGlzIER1cmF0aW9uLiBBbGlhcyBvZiB7QGxpbmsgdG9NaWxsaXN9CiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CiAgICAgKi8KICAgIHZhbHVlT2YoKSB7CiAgICAgIHJldHVybiB0aGlzLnRvTWlsbGlzKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBNYWtlIHRoaXMgRHVyYXRpb24gbG9uZ2VyIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi4KICAgICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIGFkZC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KCkKICAgICAqIEByZXR1cm4ge0R1cmF0aW9ufQogICAgICovCiAgICBwbHVzKGR1cmF0aW9uKSB7CiAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKCiAgICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLAogICAgICAgIHJlc3VsdCA9IHt9OwoKICAgICAgZm9yIChjb25zdCBrIG9mIG9yZGVyZWRVbml0cyQxKSB7CiAgICAgICAgaWYgKGhhc093blByb3BlcnR5KGR1ci52YWx1ZXMsIGspIHx8IGhhc093blByb3BlcnR5KHRoaXMudmFsdWVzLCBrKSkgewogICAgICAgICAgcmVzdWx0W2tdID0gZHVyLmdldChrKSArIHRoaXMuZ2V0KGspOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIGNsb25lJDEodGhpcywgeyB2YWx1ZXM6IHJlc3VsdCB9LCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIE1ha2UgdGhpcyBEdXJhdGlvbiBzaG9ydGVyIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi4KICAgICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIHN1YnRyYWN0LiBFaXRoZXIgYSBMdXhvbiBEdXJhdGlvbiwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCB0aGUgb2JqZWN0IGFyZ3VtZW50IHRvIER1cmF0aW9uLmZyb21PYmplY3QoKQogICAgICogQHJldHVybiB7RHVyYXRpb259CiAgICAgKi8KICAgIG1pbnVzKGR1cmF0aW9uKSB7CiAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKCiAgICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pOwogICAgICByZXR1cm4gdGhpcy5wbHVzKGR1ci5uZWdhdGUoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTY2FsZSB0aGlzIER1cmF0aW9uIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi4KICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdW5pdC4gQXJpdHkgaXMgMSBvciAyOiB0aGUgdmFsdWUgb2YgdGhlIHVuaXQgYW5kLCBvcHRpb25hbGx5LCB0aGUgdW5pdCBuYW1lLiBNdXN0IHJldHVybiBhIG51bWJlci4KICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSwgbWludXRlczogMzAgfSkubWFwVW5pdHMoeCA9PiB4ICogMikgLy89PiB7IGhvdXJzOiAyLCBtaW51dGVzOiA2MCB9CiAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEsIG1pbnV0ZXM6IDMwIH0pLm1hcFVuaXRzKCh4LCB1KSA9PiB1ID09PSAiaG91cnMiID8geCAqIDIgOiB4KSAvLz0+IHsgaG91cnM6IDIsIG1pbnV0ZXM6IDMwIH0KICAgICAqIEByZXR1cm4ge0R1cmF0aW9ufQogICAgICovCiAgICBtYXBVbml0cyhmbikgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CiAgICAgIGNvbnN0IHJlc3VsdCA9IHt9OwogICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModGhpcy52YWx1ZXMpKSB7CiAgICAgICAgcmVzdWx0W2tdID0gYXNOdW1iZXIoZm4odGhpcy52YWx1ZXNba10sIGspKTsKICAgICAgfQogICAgICByZXR1cm4gY2xvbmUkMSh0aGlzLCB7IHZhbHVlczogcmVzdWx0IH0sIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSB2YWx1ZSBvZiB1bml0LgogICAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBhIHVuaXQgc3VjaCBhcyAnbWludXRlJyBvciAnZGF5JwogICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDIsIGRheXM6IDN9KS5nZXQoJ3llYXJzJykgLy89PiAyCiAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgnbW9udGhzJykgLy89PiAwCiAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgnZGF5cycpIC8vPT4gMwogICAgICogQHJldHVybiB7bnVtYmVyfQogICAgICovCiAgICBnZXQodW5pdCkgewogICAgICByZXR1cm4gdGhpc1tEdXJhdGlvbi5ub3JtYWxpemVVbml0KHVuaXQpXTsKICAgIH0KCiAgICAvKioKICAgICAqICJTZXQiIHRoZSB2YWx1ZXMgb2Ygc3BlY2lmaWVkIHVuaXRzLiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgLSBhIG1hcHBpbmcgb2YgdW5pdHMgdG8gbnVtYmVycwogICAgICogQGV4YW1wbGUgZHVyLnNldCh7IHllYXJzOiAyMDE3IH0pCiAgICAgKiBAZXhhbXBsZSBkdXIuc2V0KHsgaG91cnM6IDgsIG1pbnV0ZXM6IDMwIH0pCiAgICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KICAgICAqLwogICAgc2V0KHZhbHVlcykgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CgogICAgICBjb25zdCBtaXhlZCA9IHsgLi4udGhpcy52YWx1ZXMsIC4uLm5vcm1hbGl6ZU9iamVjdCh2YWx1ZXMsIER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQpIH07CiAgICAgIHJldHVybiBjbG9uZSQxKHRoaXMsIHsgdmFsdWVzOiBtaXhlZCB9KTsKICAgIH0KCiAgICAvKioKICAgICAqICJTZXQiIHRoZSBsb2NhbGUgYW5kL29yIG51bWJlcmluZ1N5c3RlbS4gIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi4KICAgICAqIEBleGFtcGxlIGR1ci5yZWNvbmZpZ3VyZSh7IGxvY2FsZTogJ2VuLUdCJyB9KQogICAgICogQHJldHVybiB7RHVyYXRpb259CiAgICAgKi8KICAgIHJlY29uZmlndXJlKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIGNvbnZlcnNpb25BY2N1cmFjeSwgbWF0cml4IH0gPSB7fSkgewogICAgICBjb25zdCBsb2MgPSB0aGlzLmxvYy5jbG9uZSh7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtIH0pOwogICAgICBjb25zdCBvcHRzID0geyBsb2MsIG1hdHJpeCwgY29udmVyc2lvbkFjY3VyYWN5IH07CiAgICAgIHJldHVybiBjbG9uZSQxKHRoaXMsIG9wdHMpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGR1cmF0aW9uIGluIHRoZSBzcGVjaWZpZWQgdW5pdC4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gYSB1bml0IHN1Y2ggYXMgJ21pbnV0ZXMnIG9yICdkYXlzJwogICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDF9KS5hcygnZGF5cycpIC8vPT4gMzY1CiAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMX0pLmFzKCdtb250aHMnKSAvLz0+IDEyCiAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHtob3VyczogNjB9KS5hcygnZGF5cycpIC8vPT4gMi41CiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CiAgICAgKi8KICAgIGFzKHVuaXQpIHsKICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuc2hpZnRUbyh1bml0KS5nZXQodW5pdCkgOiBOYU47CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWR1Y2UgdGhpcyBEdXJhdGlvbiB0byBpdHMgY2Fub25pY2FsIHJlcHJlc2VudGF0aW9uIGluIGl0cyBjdXJyZW50IHVuaXRzLgogICAgICogQXNzdW1pbmcgdGhlIG92ZXJhbGwgdmFsdWUgb2YgdGhlIER1cmF0aW9uIGlzIHBvc2l0aXZlLCB0aGlzIG1lYW5zOgogICAgICogLSBleGNlc3NpdmUgdmFsdWVzIGZvciBsb3dlci1vcmRlciB1bml0cyBhcmUgY29udmVydGVkIHRvIGhpZ2hlci1vcmRlciB1bml0cyAoaWYgcG9zc2libGUsIHNlZSBmaXJzdCBhbmQgc2Vjb25kIGV4YW1wbGUpCiAgICAgKiAtIG5lZ2F0aXZlIGxvd2VyLW9yZGVyIHVuaXRzIGFyZSBjb252ZXJ0ZWQgdG8gaGlnaGVyIG9yZGVyIHVuaXRzICh0aGVyZSBtdXN0IGJlIHN1Y2ggYSBoaWdoZXIgb3JkZXIgdW5pdCwgb3RoZXJ3aXNlCiAgICAgKiAgIHRoZSBvdmVyYWxsIHZhbHVlIHdvdWxkIGJlIG5lZ2F0aXZlLCBzZWUgc2Vjb25kIGV4YW1wbGUpCiAgICAgKiAtIGZyYWN0aW9uYWwgdmFsdWVzIGZvciBoaWdoZXItb3JkZXIgdW5pdHMgYXJlIGNvbnZlcnRlZCB0byBsb3dlci1vcmRlciB1bml0cyAoaWYgcG9zc2libGUsIHNlZSBmb3VydGggZXhhbXBsZSkKICAgICAqCiAgICAgKiBJZiB0aGUgb3ZlcmFsbCB2YWx1ZSBpcyBuZWdhdGl2ZSwgdGhlIHJlc3VsdCBvZiB0aGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGB0aGlzLm5lZ2F0ZSgpLm5vcm1hbGl6ZSgpLm5lZ2F0ZSgpYC4KICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMiwgZGF5czogNTAwMCB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMTUsIGRheXM6IDI1NSB9CiAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgZGF5czogNTAwMCB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyBkYXlzOiA1MDAwIH0KICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTIsIG1pbnV0ZXM6IC00NSB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDE1IH0KICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMi41LCBkYXlzOiAwLCBob3VyczogMCB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMiwgZGF5czogMTgyLCBob3VyczogMTIgfQogICAgICogQHJldHVybiB7RHVyYXRpb259CiAgICAgKi8KICAgIG5vcm1hbGl6ZSgpIHsKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwogICAgICBjb25zdCB2YWxzID0gdGhpcy50b09iamVjdCgpOwogICAgICBub3JtYWxpemVWYWx1ZXModGhpcy5tYXRyaXgsIHZhbHMpOwogICAgICByZXR1cm4gY2xvbmUkMSh0aGlzLCB7IHZhbHVlczogdmFscyB9LCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlc2NhbGUgdW5pdHMgdG8gaXRzIGxhcmdlc3QgcmVwcmVzZW50YXRpb24KICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaWxsaXNlY29uZHM6IDkwMDAwIH0pLnJlc2NhbGUoKS50b09iamVjdCgpIC8vPT4geyBtaW51dGVzOiAxLCBzZWNvbmRzOiAzMCB9CiAgICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KICAgICAqLwogICAgcmVzY2FsZSgpIHsKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwogICAgICBjb25zdCB2YWxzID0gcmVtb3ZlWmVyb2VzKHRoaXMubm9ybWFsaXplKCkuc2hpZnRUb0FsbCgpLnRvT2JqZWN0KCkpOwogICAgICByZXR1cm4gY2xvbmUkMSh0aGlzLCB7IHZhbHVlczogdmFscyB9LCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnQgdGhpcyBEdXJhdGlvbiBpbnRvIGl0cyByZXByZXNlbnRhdGlvbiBpbiBhIGRpZmZlcmVudCBzZXQgb2YgdW5pdHMuCiAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEsIHNlY29uZHM6IDMwIH0pLnNoaWZ0VG8oJ21pbnV0ZXMnLCAnbWlsbGlzZWNvbmRzJykudG9PYmplY3QoKSAvLz0+IHsgbWludXRlczogNjAsIG1pbGxpc2Vjb25kczogMzAwMDAgfQogICAgICogQHJldHVybiB7RHVyYXRpb259CiAgICAgKi8KICAgIHNoaWZ0VG8oLi4udW5pdHMpIHsKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwoKICAgICAgaWYgKHVuaXRzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CgogICAgICB1bml0cyA9IHVuaXRzLm1hcCgodSkgPT4gRHVyYXRpb24ubm9ybWFsaXplVW5pdCh1KSk7CgogICAgICBjb25zdCBidWlsdCA9IHt9LAogICAgICAgIGFjY3VtdWxhdGVkID0ge30sCiAgICAgICAgdmFscyA9IHRoaXMudG9PYmplY3QoKTsKICAgICAgbGV0IGxhc3RVbml0OwoKICAgICAgZm9yIChjb25zdCBrIG9mIG9yZGVyZWRVbml0cyQxKSB7CiAgICAgICAgaWYgKHVuaXRzLmluZGV4T2YoaykgPj0gMCkgewogICAgICAgICAgbGFzdFVuaXQgPSBrOwoKICAgICAgICAgIGxldCBvd24gPSAwOwoKICAgICAgICAgIC8vIGFueXRoaW5nIHdlIGhhdmVuJ3QgYm9pbGVkIGRvd24geWV0IHNob3VsZCBnZXQgYm9pbGVkIHRvIHRoaXMgdW5pdAogICAgICAgICAgZm9yIChjb25zdCBhayBpbiBhY2N1bXVsYXRlZCkgewogICAgICAgICAgICBvd24gKz0gdGhpcy5tYXRyaXhbYWtdW2tdICogYWNjdW11bGF0ZWRbYWtdOwogICAgICAgICAgICBhY2N1bXVsYXRlZFtha10gPSAwOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIHBsdXMgYW55dGhpbmcgdGhhdCdzIGFscmVhZHkgaW4gdGhpcyB1bml0CiAgICAgICAgICBpZiAoaXNOdW1iZXIodmFsc1trXSkpIHsKICAgICAgICAgICAgb3duICs9IHZhbHNba107CiAgICAgICAgICB9CgogICAgICAgICAgLy8gb25seSBrZWVwIHRoZSBpbnRlZ2VyIHBhcnQgZm9yIG5vdyBpbiB0aGUgaG9wZXMgb2YgcHV0dGluZyBhbnkgZGVjaW1hbCBwYXJ0CiAgICAgICAgICAvLyBpbnRvIGEgc21hbGxlciB1bml0IGxhdGVyCiAgICAgICAgICBjb25zdCBpID0gTWF0aC50cnVuYyhvd24pOwogICAgICAgICAgYnVpbHRba10gPSBpOwogICAgICAgICAgYWNjdW11bGF0ZWRba10gPSAob3duICogMTAwMCAtIGkgKiAxMDAwKSAvIDEwMDA7CgogICAgICAgICAgLy8gb3RoZXJ3aXNlLCBrZWVwIGl0IGluIHRoZSB3aW5ncyB0byBib2lsIGl0IGxhdGVyCiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcih2YWxzW2tdKSkgewogICAgICAgICAgYWNjdW11bGF0ZWRba10gPSB2YWxzW2tdOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gYW55dGhpbmcgbGVmdG92ZXIgYmVjb21lcyB0aGUgZGVjaW1hbCBmb3IgdGhlIGxhc3QgdW5pdAogICAgICAvLyBsYXN0VW5pdCBtdXN0IGJlIGRlZmluZWQgc2luY2UgdW5pdHMgaXMgbm90IGVtcHR5CiAgICAgIGZvciAoY29uc3Qga2V5IGluIGFjY3VtdWxhdGVkKSB7CiAgICAgICAgaWYgKGFjY3VtdWxhdGVkW2tleV0gIT09IDApIHsKICAgICAgICAgIGJ1aWx0W2xhc3RVbml0XSArPQogICAgICAgICAgICBrZXkgPT09IGxhc3RVbml0ID8gYWNjdW11bGF0ZWRba2V5XSA6IGFjY3VtdWxhdGVkW2tleV0gLyB0aGlzLm1hdHJpeFtsYXN0VW5pdF1ba2V5XTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIG5vcm1hbGl6ZVZhbHVlcyh0aGlzLm1hdHJpeCwgYnVpbHQpOwogICAgICByZXR1cm4gY2xvbmUkMSh0aGlzLCB7IHZhbHVlczogYnVpbHQgfSwgdHJ1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTaGlmdCB0aGlzIER1cmF0aW9uIHRvIGFsbCBhdmFpbGFibGUgdW5pdHMuCiAgICAgKiBTYW1lIGFzIHNoaWZ0VG8oInllYXJzIiwgIm1vbnRocyIsICJ3ZWVrcyIsICJkYXlzIiwgImhvdXJzIiwgIm1pbnV0ZXMiLCAic2Vjb25kcyIsICJtaWxsaXNlY29uZHMiKQogICAgICogQHJldHVybiB7RHVyYXRpb259CiAgICAgKi8KICAgIHNoaWZ0VG9BbGwoKSB7CiAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKICAgICAgcmV0dXJuIHRoaXMuc2hpZnRUbygKICAgICAgICAieWVhcnMiLAogICAgICAgICJtb250aHMiLAogICAgICAgICJ3ZWVrcyIsCiAgICAgICAgImRheXMiLAogICAgICAgICJob3VycyIsCiAgICAgICAgIm1pbnV0ZXMiLAogICAgICAgICJzZWNvbmRzIiwKICAgICAgICAibWlsbGlzZWNvbmRzIgogICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBuZWdhdGl2ZSBvZiB0aGlzIER1cmF0aW9uLgogICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBzZWNvbmRzOiAzMCB9KS5uZWdhdGUoKS50b09iamVjdCgpIC8vPT4geyBob3VyczogLTEsIHNlY29uZHM6IC0zMCB9CiAgICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KICAgICAqLwogICAgbmVnYXRlKCkgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CiAgICAgIGNvbnN0IG5lZ2F0ZWQgPSB7fTsKICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKSkgewogICAgICAgIG5lZ2F0ZWRba10gPSB0aGlzLnZhbHVlc1trXSA9PT0gMCA/IDAgOiAtdGhpcy52YWx1ZXNba107CiAgICAgIH0KICAgICAgcmV0dXJuIGNsb25lJDEodGhpcywgeyB2YWx1ZXM6IG5lZ2F0ZWQgfSwgdHJ1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHllYXJzLgogICAgICogQHR5cGUge251bWJlcn0KICAgICAqLwogICAgZ2V0IHllYXJzKCkgewogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMueWVhcnMgfHwgMCA6IE5hTjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgcXVhcnRlcnMuCiAgICAgKiBAdHlwZSB7bnVtYmVyfQogICAgICovCiAgICBnZXQgcXVhcnRlcnMoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5xdWFydGVycyB8fCAwIDogTmFOOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBtb250aHMuCiAgICAgKiBAdHlwZSB7bnVtYmVyfQogICAgICovCiAgICBnZXQgbW9udGhzKCkgewogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMubW9udGhzIHx8IDAgOiBOYU47CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHdlZWtzCiAgICAgKiBAdHlwZSB7bnVtYmVyfQogICAgICovCiAgICBnZXQgd2Vla3MoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy53ZWVrcyB8fCAwIDogTmFOOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBkYXlzLgogICAgICogQHR5cGUge251bWJlcn0KICAgICAqLwogICAgZ2V0IGRheXMoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5kYXlzIHx8IDAgOiBOYU47CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGhvdXJzLgogICAgICogQHR5cGUge251bWJlcn0KICAgICAqLwogICAgZ2V0IGhvdXJzKCkgewogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMuaG91cnMgfHwgMCA6IE5hTjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgbWludXRlcy4KICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgKi8KICAgIGdldCBtaW51dGVzKCkgewogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMubWludXRlcyB8fCAwIDogTmFOOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBzZWNvbmRzLgogICAgICogQHJldHVybiB7bnVtYmVyfQogICAgICovCiAgICBnZXQgc2Vjb25kcygpIHsKICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLnNlY29uZHMgfHwgMCA6IE5hTjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgbWlsbGlzZWNvbmRzLgogICAgICogQHJldHVybiB7bnVtYmVyfQogICAgICovCiAgICBnZXQgbWlsbGlzZWNvbmRzKCkgewogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMubWlsbGlzZWNvbmRzIHx8IDAgOiBOYU47CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIER1cmF0aW9uIGlzIGludmFsaWQuIEludmFsaWQgZHVyYXRpb25zIGFyZSByZXR1cm5lZCBieSBkaWZmIG9wZXJhdGlvbnMKICAgICAqIG9uIGludmFsaWQgRGF0ZVRpbWVzIG9yIEludGVydmFscy4KICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgKi8KICAgIGdldCBpc1ZhbGlkKCkgewogICAgICByZXR1cm4gdGhpcy5pbnZhbGlkID09PSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBlcnJvciBjb2RlIGlmIHRoaXMgRHVyYXRpb24gYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIER1cmF0aW9uIGlzIHZhbGlkCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgKi8KICAgIGdldCBpbnZhbGlkUmVhc29uKCkgewogICAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLnJlYXNvbiA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGlzIER1cmF0aW9uIGJlY2FtZSBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEdXJhdGlvbiBpcyB2YWxpZAogICAgICogQHR5cGUge3N0cmluZ30KICAgICAqLwogICAgZ2V0IGludmFsaWRFeHBsYW5hdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5leHBsYW5hdGlvbiA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBFcXVhbGl0eSBjaGVjawogICAgICogVHdvIER1cmF0aW9ucyBhcmUgZXF1YWwgaWZmIHRoZXkgaGF2ZSB0aGUgc2FtZSB1bml0cyBhbmQgdGhlIHNhbWUgdmFsdWVzIGZvciBlYWNoIHVuaXQuCiAgICAgKiBAcGFyYW0ge0R1cmF0aW9ufSBvdGhlcgogICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAqLwogICAgZXF1YWxzKG90aGVyKSB7CiAgICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFvdGhlci5pc1ZhbGlkKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICBpZiAoIXRoaXMubG9jLmVxdWFscyhvdGhlci5sb2MpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICBmdW5jdGlvbiBlcSh2MSwgdjIpIHsKICAgICAgICAvLyBDb25zaWRlciAwIGFuZCB1bmRlZmluZWQgYXMgZXF1YWwKICAgICAgICBpZiAodjEgPT09IHVuZGVmaW5lZCB8fCB2MSA9PT0gMCkgcmV0dXJuIHYyID09PSB1bmRlZmluZWQgfHwgdjIgPT09IDA7CiAgICAgICAgcmV0dXJuIHYxID09PSB2MjsKICAgICAgfQoKICAgICAgZm9yIChjb25zdCB1IG9mIG9yZGVyZWRVbml0cyQxKSB7CiAgICAgICAgaWYgKCFlcSh0aGlzLnZhbHVlc1t1XSwgb3RoZXIudmFsdWVzW3VdKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CgogIGNvbnN0IElOVkFMSUQkMSA9ICJJbnZhbGlkIEludGVydmFsIjsKCiAgLy8gY2hlY2tzIGlmIHRoZSBzdGFydCBpcyBlcXVhbCB0byBvciBiZWZvcmUgdGhlIGVuZAogIGZ1bmN0aW9uIHZhbGlkYXRlU3RhcnRFbmQoc3RhcnQsIGVuZCkgewogICAgaWYgKCFzdGFydCB8fCAhc3RhcnQuaXNWYWxpZCkgewogICAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZCgibWlzc2luZyBvciBpbnZhbGlkIHN0YXJ0Iik7CiAgICB9IGVsc2UgaWYgKCFlbmQgfHwgIWVuZC5pc1ZhbGlkKSB7CiAgICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKCJtaXNzaW5nIG9yIGludmFsaWQgZW5kIik7CiAgICB9IGVsc2UgaWYgKGVuZCA8IHN0YXJ0KSB7CiAgICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKAogICAgICAgICJlbmQgYmVmb3JlIHN0YXJ0IiwKICAgICAgICBgVGhlIGVuZCBvZiBhbiBpbnRlcnZhbCBtdXN0IGJlIGFmdGVyIGl0cyBzdGFydCwgYnV0IHlvdSBoYWQgc3RhcnQ9JHtzdGFydC50b0lTTygpfSBhbmQgZW5kPSR7ZW5kLnRvSVNPKCl9YAogICAgICApOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICAvKioKICAgKiBBbiBJbnRlcnZhbCBvYmplY3QgcmVwcmVzZW50cyBhIGhhbGYtb3BlbiBpbnRlcnZhbCBvZiB0aW1lLCB3aGVyZSBlYWNoIGVuZHBvaW50IGlzIGEge0BsaW5rIERhdGVUaW1lfS4gQ29uY2VwdHVhbGx5LCBpdCdzIGEgY29udGFpbmVyIGZvciB0aG9zZSB0d28gZW5kcG9pbnRzLCBhY2NvbXBhbmllZCBieSBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgY29tcGFyaW5nLCB0cmFuc2Zvcm1pbmcsIGFuZCBmb3JtYXR0aW5nIHRoZW0uCiAgICoKICAgKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBtZXRob2RzIGFuZCBnZXR0ZXJzIGluIEludGVydmFsOgogICAqCiAgICogKiAqKkNyZWF0aW9uKiogVG8gY3JlYXRlIGFuIEludGVydmFsLCB1c2Uge0BsaW5rIEludGVydmFsLmZyb21EYXRlVGltZXN9LCB7QGxpbmsgSW50ZXJ2YWwuYWZ0ZXJ9LCB7QGxpbmsgSW50ZXJ2YWwuYmVmb3JlfSwgb3Ige0BsaW5rIEludGVydmFsLmZyb21JU099LgogICAqICogKipBY2Nlc3NvcnMqKiBVc2Uge0BsaW5rIEludGVydmFsI3N0YXJ0fSBhbmQge0BsaW5rIEludGVydmFsI2VuZH0gdG8gZ2V0IHRoZSBzdGFydCBhbmQgZW5kLgogICAqICogKipJbnRlcnJvZ2F0aW9uKiogVG8gYW5hbHl6ZSB0aGUgSW50ZXJ2YWwsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjY291bnR9LCB7QGxpbmsgSW50ZXJ2YWwjbGVuZ3RofSwge0BsaW5rIEludGVydmFsI2hhc1NhbWV9LCB7QGxpbmsgSW50ZXJ2YWwjY29udGFpbnN9LCB7QGxpbmsgSW50ZXJ2YWwjaXNBZnRlcn0sIG9yIHtAbGluayBJbnRlcnZhbCNpc0JlZm9yZX0uCiAgICogKiAqKlRyYW5zZm9ybWF0aW9uKiogVG8gY3JlYXRlIG90aGVyIEludGVydmFscyBvdXQgb2YgdGhpcyBvbmUsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjc2V0fSwge0BsaW5rIEludGVydmFsI3NwbGl0QXR9LCB7QGxpbmsgSW50ZXJ2YWwjc3BsaXRCeX0sIHtAbGluayBJbnRlcnZhbCNkaXZpZGVFcXVhbGx5fSwge0BsaW5rIEludGVydmFsLm1lcmdlfSwge0BsaW5rIEludGVydmFsLnhvcn0sIHtAbGluayBJbnRlcnZhbCN1bmlvbn0sIHtAbGluayBJbnRlcnZhbCNpbnRlcnNlY3Rpb259LCBvciB7QGxpbmsgSW50ZXJ2YWwjZGlmZmVyZW5jZX0uCiAgICogKiAqKkNvbXBhcmlzb24qKiBUbyBjb21wYXJlIHRoaXMgSW50ZXJ2YWwgdG8gYW5vdGhlciBvbmUsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjZXF1YWxzfSwge0BsaW5rIEludGVydmFsI292ZXJsYXBzfSwge0BsaW5rIEludGVydmFsI2FidXRzU3RhcnR9LCB7QGxpbmsgSW50ZXJ2YWwjYWJ1dHNFbmR9LCB7QGxpbmsgSW50ZXJ2YWwjZW5ndWxmc30KICAgKiAqICoqT3V0cHV0KiogVG8gY29udmVydCB0aGUgSW50ZXJ2YWwgaW50byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHNlZSB7QGxpbmsgSW50ZXJ2YWwjdG9TdHJpbmd9LCB7QGxpbmsgSW50ZXJ2YWwjdG9Mb2NhbGVTdHJpbmd9LCB7QGxpbmsgSW50ZXJ2YWwjdG9JU099LCB7QGxpbmsgSW50ZXJ2YWwjdG9JU09EYXRlfSwge0BsaW5rIEludGVydmFsI3RvSVNPVGltZX0sIHtAbGluayBJbnRlcnZhbCN0b0Zvcm1hdH0sIGFuZCB7QGxpbmsgSW50ZXJ2YWwjdG9EdXJhdGlvbn0uCiAgICovCiAgY2xhc3MgSW50ZXJ2YWwgewogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHsKICAgICAgLyoqCiAgICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICAgKi8KICAgICAgdGhpcy5zID0gY29uZmlnLnN0YXJ0OwogICAgICAvKioKICAgICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgICAqLwogICAgICB0aGlzLmUgPSBjb25maWcuZW5kOwogICAgICAvKioKICAgICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgICAqLwogICAgICB0aGlzLmludmFsaWQgPSBjb25maWcuaW52YWxpZCB8fCBudWxsOwogICAgICAvKioKICAgICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgICAqLwogICAgICB0aGlzLmlzTHV4b25JbnRlcnZhbCA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW4gaW52YWxpZCBJbnRlcnZhbC4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gLSBzaW1wbGUgc3RyaW5nIG9mIHdoeSB0aGlzIEludGVydmFsIGlzIGludmFsaWQuIFNob3VsZCBub3QgY29udGFpbiBwYXJhbWV0ZXJzIG9yIGFueXRoaW5nIGVsc2UgZGF0YS1kZXBlbmRlbnQKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXhwbGFuYXRpb249bnVsbF0gLSBsb25nZXIgZXhwbGFuYXRpb24sIG1heSBpbmNsdWRlIHBhcmFtZXRlcnMgYW5kIG90aGVyIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KICAgICAqIEByZXR1cm4ge0ludGVydmFsfQogICAgICovCiAgICBzdGF0aWMgaW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uID0gbnVsbCkgewogICAgICBpZiAoIXJlYXNvbikgewogICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBJbnRlcnZhbCBpcyBpbnZhbGlkIik7CiAgICAgIH0KCiAgICAgIGNvbnN0IGludmFsaWQgPSByZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkID8gcmVhc29uIDogbmV3IEludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbik7CgogICAgICBpZiAoU2V0dGluZ3MudGhyb3dPbkludmFsaWQpIHsKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEludGVydmFsRXJyb3IoaW52YWxpZCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcnZhbCh7IGludmFsaWQgfSk7CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGEgc3RhcnQgRGF0ZVRpbWUgYW5kIGFuIGVuZCBEYXRlVGltZS4gSW5jbHVzaXZlIG9mIHRoZSBzdGFydCBidXQgbm90IHRoZSBlbmQuCiAgICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBzdGFydAogICAgICogQHBhcmFtIHtEYXRlVGltZXxEYXRlfE9iamVjdH0gZW5kCiAgICAgKiBAcmV0dXJuIHtJbnRlcnZhbH0KICAgICAqLwogICAgc3RhdGljIGZyb21EYXRlVGltZXMoc3RhcnQsIGVuZCkgewogICAgICBjb25zdCBidWlsdFN0YXJ0ID0gZnJpZW5kbHlEYXRlVGltZShzdGFydCksCiAgICAgICAgYnVpbHRFbmQgPSBmcmllbmRseURhdGVUaW1lKGVuZCk7CgogICAgICBjb25zdCB2YWxpZGF0ZUVycm9yID0gdmFsaWRhdGVTdGFydEVuZChidWlsdFN0YXJ0LCBidWlsdEVuZCk7CgogICAgICBpZiAodmFsaWRhdGVFcnJvciA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcnZhbCh7CiAgICAgICAgICBzdGFydDogYnVpbHRTdGFydCwKICAgICAgICAgIGVuZDogYnVpbHRFbmQsCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRXJyb3I7CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGEgc3RhcnQgRGF0ZVRpbWUgYW5kIGEgRHVyYXRpb24gdG8gZXh0ZW5kIHRvLgogICAgICogQHBhcmFtIHtEYXRlVGltZXxEYXRlfE9iamVjdH0gc3RhcnQKICAgICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSB0aGUgbGVuZ3RoIG9mIHRoZSBJbnRlcnZhbC4KICAgICAqIEByZXR1cm4ge0ludGVydmFsfQogICAgICovCiAgICBzdGF0aWMgYWZ0ZXIoc3RhcnQsIGR1cmF0aW9uKSB7CiAgICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLAogICAgICAgIGR0ID0gZnJpZW5kbHlEYXRlVGltZShzdGFydCk7CiAgICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0LCBkdC5wbHVzKGR1cikpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGFuIEludGVydmFsIGZyb20gYW4gZW5kIERhdGVUaW1lIGFuZCBhIER1cmF0aW9uIHRvIGV4dGVuZCBiYWNrd2FyZHMgdG8uCiAgICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBlbmQKICAgICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSB0aGUgbGVuZ3RoIG9mIHRoZSBJbnRlcnZhbC4KICAgICAqIEByZXR1cm4ge0ludGVydmFsfQogICAgICovCiAgICBzdGF0aWMgYmVmb3JlKGVuZCwgZHVyYXRpb24pIHsKICAgICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbiksCiAgICAgICAgZHQgPSBmcmllbmRseURhdGVUaW1lKGVuZCk7CiAgICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0Lm1pbnVzKGR1ciksIGR0KTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGFuIElTTyA4NjAxIHN0cmluZy4KICAgICAqIEFjY2VwdHMgYDxzdGFydD4vPGVuZD5gLCBgPHN0YXJ0Pi88ZHVyYXRpb24+YCwgYW5kIGA8ZHVyYXRpb24+LzxlbmQ+YCBmb3JtYXRzLgogICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgSVNPIHN0cmluZyB0byBwYXJzZQogICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIG9wdGlvbnMgdG8gcGFzcyB7QGxpbmsgRGF0ZVRpbWUjZnJvbUlTT30gYW5kIG9wdGlvbmFsbHkge0BsaW5rIER1cmF0aW9uI2Zyb21JU099CiAgICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzCiAgICAgKiBAcmV0dXJuIHtJbnRlcnZhbH0KICAgICAqLwogICAgc3RhdGljIGZyb21JU08odGV4dCwgb3B0cykgewogICAgICBjb25zdCBbcywgZV0gPSAodGV4dCB8fCAiIikuc3BsaXQoIi8iLCAyKTsKICAgICAgaWYgKHMgJiYgZSkgewogICAgICAgIGxldCBzdGFydCwgc3RhcnRJc1ZhbGlkOwogICAgICAgIHRyeSB7CiAgICAgICAgICBzdGFydCA9IERhdGVUaW1lLmZyb21JU08ocywgb3B0cyk7CiAgICAgICAgICBzdGFydElzVmFsaWQgPSBzdGFydC5pc1ZhbGlkOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIHN0YXJ0SXNWYWxpZCA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgbGV0IGVuZCwgZW5kSXNWYWxpZDsKICAgICAgICB0cnkgewogICAgICAgICAgZW5kID0gRGF0ZVRpbWUuZnJvbUlTTyhlLCBvcHRzKTsKICAgICAgICAgIGVuZElzVmFsaWQgPSBlbmQuaXNWYWxpZDsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICBlbmRJc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhcnRJc1ZhbGlkICYmIGVuZElzVmFsaWQpIHsKICAgICAgICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHN0YXJ0LCBlbmQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXJ0SXNWYWxpZCkgewogICAgICAgICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUlTTyhlLCBvcHRzKTsKICAgICAgICAgIGlmIChkdXIuaXNWYWxpZCkgewogICAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwuYWZ0ZXIoc3RhcnQsIGR1cik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChlbmRJc1ZhbGlkKSB7CiAgICAgICAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tSVNPKHMsIG9wdHMpOwogICAgICAgICAgaWYgKGR1ci5pc1ZhbGlkKSB7CiAgICAgICAgICAgIHJldHVybiBJbnRlcnZhbC5iZWZvcmUoZW5kLCBkdXIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZCgidW5wYXJzYWJsZSIsIGB0aGUgaW5wdXQgIiR7dGV4dH0iIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMWApOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIEludGVydmFsLiBXb3JrcyBhY3Jvc3MgY29udGV4dCBib3VuZGFyaWVzCiAgICAgKiBAcGFyYW0ge29iamVjdH0gbwogICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAqLwogICAgc3RhdGljIGlzSW50ZXJ2YWwobykgewogICAgICByZXR1cm4gKG8gJiYgby5pc0x1eG9uSW50ZXJ2YWwpIHx8IGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3RhcnQgb2YgdGhlIEludGVydmFsCiAgICAgKiBAdHlwZSB7RGF0ZVRpbWV9CiAgICAgKi8KICAgIGdldCBzdGFydCgpIHsKICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMucyA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBlbmQgb2YgdGhlIEludGVydmFsCiAgICAgKiBAdHlwZSB7RGF0ZVRpbWV9CiAgICAgKi8KICAgIGdldCBlbmQoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmUgOiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBlbmQgaXMgYXQgbGVhc3QgaXRzIHN0YXJ0LCBtZWFuaW5nIHRoYXQgdGhlIEludGVydmFsIGlzbid0ICdiYWNrd2FyZHMnLgogICAgICogQHR5cGUge2Jvb2xlYW59CiAgICAgKi8KICAgIGdldCBpc1ZhbGlkKCkgewogICAgICByZXR1cm4gdGhpcy5pbnZhbGlkUmVhc29uID09PSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBlcnJvciBjb2RlIGlmIHRoaXMgSW50ZXJ2YWwgaXMgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgSW50ZXJ2YWwgaXMgdmFsaWQKICAgICAqIEB0eXBlIHtzdHJpbmd9CiAgICAgKi8KICAgIGdldCBpbnZhbGlkUmVhc29uKCkgewogICAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLnJlYXNvbiA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGlzIEludGVydmFsIGJlY2FtZSBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBJbnRlcnZhbCBpcyB2YWxpZAogICAgICogQHR5cGUge3N0cmluZ30KICAgICAqLwogICAgZ2V0IGludmFsaWRFeHBsYW5hdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5leHBsYW5hdGlvbiA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIEludGVydmFsIGluIHRoZSBzcGVjaWZpZWQgdW5pdC4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gdGhlIHVuaXQgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIHJldHVybiB0aGUgbGVuZ3RoIGluLgogICAgICogQHJldHVybiB7bnVtYmVyfQogICAgICovCiAgICBsZW5ndGgodW5pdCA9ICJtaWxsaXNlY29uZHMiKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnRvRHVyYXRpb24oLi4uW3VuaXRdKS5nZXQodW5pdCkgOiBOYU47CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjb3VudCBvZiBtaW51dGVzLCBob3VycywgZGF5cywgbW9udGhzLCBvciB5ZWFycyBpbmNsdWRlZCBpbiB0aGUgSW50ZXJ2YWwsIGV2ZW4gaW4gcGFydC4KICAgICAqIFVubGlrZSB7QGxpbmsgSW50ZXJ2YWwjbGVuZ3RofSB0aGlzIGNvdW50cyBzZWN0aW9ucyBvZiB0aGUgY2FsZW5kYXIsIG5vdCBwZXJpb2RzIG9mIHRpbWUsIGUuZy4gc3BlY2lmeWluZyAnZGF5JwogICAgICogYXNrcyAnd2hhdCBkYXRlcyBhcmUgaW5jbHVkZWQgaW4gdGhpcyBpbnRlcnZhbD8nLCBub3QgJ2hvdyBtYW55IGRheXMgbG9uZyBpcyB0aGlzIGludGVydmFsPycKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdD0nbWlsbGlzZWNvbmRzJ10gLSB0aGUgdW5pdCBvZiB0aW1lIHRvIGNvdW50LgogICAgICogQHJldHVybiB7bnVtYmVyfQogICAgICovCiAgICBjb3VudCh1bml0ID0gIm1pbGxpc2Vjb25kcyIpIHsKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBOYU47CiAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5zdGFydC5zdGFydE9mKHVuaXQpLAogICAgICAgIGVuZCA9IHRoaXMuZW5kLnN0YXJ0T2YodW5pdCk7CiAgICAgIHJldHVybiBNYXRoLmZsb29yKGVuZC5kaWZmKHN0YXJ0LCB1bml0KS5nZXQodW5pdCkpICsgKGVuZC52YWx1ZU9mKCkgIT09IHRoaXMuZW5kLnZhbHVlT2YoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIHN0YXJ0IGFuZCBlbmQgYXJlIGJvdGggaW4gdGhlIHNhbWUgdW5pdCBvZiB0aW1lCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY2hlY2sgc2FtZW5lc3Mgb24KICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgKi8KICAgIGhhc1NhbWUodW5pdCkgewogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5pc0VtcHR5KCkgfHwgdGhpcy5lLm1pbnVzKDEpLmhhc1NhbWUodGhpcy5zLCB1bml0KSA6IGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBoYXMgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBEYXRlVGltZXMuCiAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICovCiAgICBpc0VtcHR5KCkgewogICAgICByZXR1cm4gdGhpcy5zLnZhbHVlT2YoKSA9PT0gdGhpcy5lLnZhbHVlT2YoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBpcyBhZnRlciB0aGUgc3BlY2lmaWVkIERhdGVUaW1lLgogICAgICogQHBhcmFtIHtEYXRlVGltZX0gZGF0ZVRpbWUKICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgKi8KICAgIGlzQWZ0ZXIoZGF0ZVRpbWUpIHsKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRoaXMucyA+IGRhdGVUaW1lOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIGVuZCBpcyBiZWZvcmUgdGhlIHNwZWNpZmllZCBEYXRlVGltZS4KICAgICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lCiAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICovCiAgICBpc0JlZm9yZShkYXRlVGltZSkgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdGhpcy5lIDw9IGRhdGVUaW1lOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBjb250YWlucyB0aGUgc3BlY2lmaWVkIERhdGVUaW1lLgogICAgICogQHBhcmFtIHtEYXRlVGltZX0gZGF0ZVRpbWUKICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgKi8KICAgIGNvbnRhaW5zKGRhdGVUaW1lKSB7CiAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0aGlzLnMgPD0gZGF0ZVRpbWUgJiYgdGhpcy5lID4gZGF0ZVRpbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiAiU2V0cyIgdGhlIHN0YXJ0IGFuZC9vciBlbmQgZGF0ZXMuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBJbnRlcnZhbC4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgLSB0aGUgdmFsdWVzIHRvIHNldAogICAgICogQHBhcmFtIHtEYXRlVGltZX0gdmFsdWVzLnN0YXJ0IC0gdGhlIHN0YXJ0aW5nIERhdGVUaW1lCiAgICAgKiBAcGFyYW0ge0RhdGVUaW1lfSB2YWx1ZXMuZW5kIC0gdGhlIGVuZGluZyBEYXRlVGltZQogICAgICogQHJldHVybiB7SW50ZXJ2YWx9CiAgICAgKi8KICAgIHNldCh7IHN0YXJ0LCBlbmQgfSA9IHt9KSB7CiAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKICAgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQgfHwgdGhpcy5zLCBlbmQgfHwgdGhpcy5lKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNwbGl0IHRoaXMgSW50ZXJ2YWwgYXQgZWFjaCBvZiB0aGUgc3BlY2lmaWVkIERhdGVUaW1lcwogICAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIHVuaXQgb2YgdGltZSB0byBjb3VudC4KICAgICAqIEByZXR1cm4ge0FycmF5fQogICAgICovCiAgICBzcGxpdEF0KC4uLmRhdGVUaW1lcykgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIFtdOwogICAgICBjb25zdCBzb3J0ZWQgPSBkYXRlVGltZXMKICAgICAgICAgIC5tYXAoZnJpZW5kbHlEYXRlVGltZSkKICAgICAgICAgIC5maWx0ZXIoKGQpID0+IHRoaXMuY29udGFpbnMoZCkpCiAgICAgICAgICAuc29ydCgpLAogICAgICAgIHJlc3VsdHMgPSBbXTsKICAgICAgbGV0IHsgcyB9ID0gdGhpcywKICAgICAgICBpID0gMDsKCiAgICAgIHdoaWxlIChzIDwgdGhpcy5lKSB7CiAgICAgICAgY29uc3QgYWRkZWQgPSBzb3J0ZWRbaV0gfHwgdGhpcy5lLAogICAgICAgICAgbmV4dCA9ICthZGRlZCA+ICt0aGlzLmUgPyB0aGlzLmUgOiBhZGRlZDsKICAgICAgICByZXN1bHRzLnB1c2goSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzLCBuZXh0KSk7CiAgICAgICAgcyA9IG5leHQ7CiAgICAgICAgaSArPSAxOwogICAgICB9CgogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KCiAgICAvKioKICAgICAqIFNwbGl0IHRoaXMgSW50ZXJ2YWwgaW50byBzbWFsbGVyIEludGVydmFscywgZWFjaCBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aC4KICAgICAqIExlZnQgb3ZlciB0aW1lIGlzIGdyb3VwZWQgaW50byBhIHNtYWxsZXIgaW50ZXJ2YWwKICAgICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgbGVuZ3RoIG9mIGVhY2ggcmVzdWx0aW5nIGludGVydmFsLgogICAgICogQHJldHVybiB7QXJyYXl9CiAgICAgKi8KICAgIHNwbGl0QnkoZHVyYXRpb24pIHsKICAgICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbik7CgogICAgICBpZiAoIXRoaXMuaXNWYWxpZCB8fCAhZHVyLmlzVmFsaWQgfHwgZHVyLmFzKCJtaWxsaXNlY29uZHMiKSA9PT0gMCkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQoKICAgICAgbGV0IHsgcyB9ID0gdGhpcywKICAgICAgICBpZHggPSAxLAogICAgICAgIG5leHQ7CgogICAgICBjb25zdCByZXN1bHRzID0gW107CiAgICAgIHdoaWxlIChzIDwgdGhpcy5lKSB7CiAgICAgICAgY29uc3QgYWRkZWQgPSB0aGlzLnN0YXJ0LnBsdXMoZHVyLm1hcFVuaXRzKCh4KSA9PiB4ICogaWR4KSk7CiAgICAgICAgbmV4dCA9ICthZGRlZCA+ICt0aGlzLmUgPyB0aGlzLmUgOiBhZGRlZDsKICAgICAgICByZXN1bHRzLnB1c2goSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzLCBuZXh0KSk7CiAgICAgICAgcyA9IG5leHQ7CiAgICAgICAgaWR4ICs9IDE7CiAgICAgIH0KCiAgICAgIHJldHVybiByZXN1bHRzOwogICAgfQoKICAgIC8qKgogICAgICogU3BsaXQgdGhpcyBJbnRlcnZhbCBpbnRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHNtYWxsZXIgaW50ZXJ2YWxzLgogICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlck9mUGFydHMgLSBUaGUgbnVtYmVyIG9mIEludGVydmFscyB0byBkaXZpZGUgdGhlIEludGVydmFsIGludG8uCiAgICAgKiBAcmV0dXJuIHtBcnJheX0KICAgICAqLwogICAgZGl2aWRlRXF1YWxseShudW1iZXJPZlBhcnRzKSB7CiAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gW107CiAgICAgIHJldHVybiB0aGlzLnNwbGl0QnkodGhpcy5sZW5ndGgoKSAvIG51bWJlck9mUGFydHMpLnNsaWNlKDAsIG51bWJlck9mUGFydHMpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBvdmVybGFwcyB3aXRoIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwKICAgICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyCiAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICovCiAgICBvdmVybGFwcyhvdGhlcikgewogICAgICByZXR1cm4gdGhpcy5lID4gb3RoZXIucyAmJiB0aGlzLnMgPCBvdGhlci5lOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIGVuZCBpcyBhZGphY2VudCB0byB0aGUgc3BlY2lmaWVkIEludGVydmFsJ3Mgc3RhcnQuCiAgICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlcgogICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAqLwogICAgYWJ1dHNTdGFydChvdGhlcikgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gK3RoaXMuZSA9PT0gK290aGVyLnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsJ3Mgc3RhcnQgaXMgYWRqYWNlbnQgdG8gdGhlIHNwZWNpZmllZCBJbnRlcnZhbCdzIGVuZC4KICAgICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyCiAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICovCiAgICBhYnV0c0VuZChvdGhlcikgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gK290aGVyLmUgPT09ICt0aGlzLnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGVuZ3VsZnMgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC4KICAgICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyCiAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICovCiAgICBlbmd1bGZzKG90aGVyKSB7CiAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0aGlzLnMgPD0gb3RoZXIucyAmJiB0aGlzLmUgPj0gb3RoZXIuZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgaGFzIHRoZSBzYW1lIHN0YXJ0IGFuZCBlbmQgYXMgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC4KICAgICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyCiAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICovCiAgICBlcXVhbHMob3RoZXIpIHsKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgIW90aGVyLmlzVmFsaWQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzLnMuZXF1YWxzKG90aGVyLnMpICYmIHRoaXMuZS5lcXVhbHMob3RoZXIuZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gSW50ZXJ2YWwgcmVwcmVzZW50aW5nIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBJbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC4KICAgICAqIFNwZWNpZmljYWxseSwgdGhlIHJlc3VsdGluZyBJbnRlcnZhbCBoYXMgdGhlIG1heGltdW0gc3RhcnQgdGltZSBhbmQgdGhlIG1pbmltdW0gZW5kIHRpbWUgb2YgdGhlIHR3byBJbnRlcnZhbHMuCiAgICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlIGludGVyc2VjdGlvbiBpcyBlbXB0eSwgbWVhbmluZywgdGhlIGludGVydmFscyBkb24ndCBpbnRlcnNlY3QuCiAgICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlcgogICAgICogQHJldHVybiB7SW50ZXJ2YWx9CiAgICAgKi8KICAgIGludGVyc2VjdGlvbihvdGhlcikgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CiAgICAgIGNvbnN0IHMgPSB0aGlzLnMgPiBvdGhlci5zID8gdGhpcy5zIDogb3RoZXIucywKICAgICAgICBlID0gdGhpcy5lIDwgb3RoZXIuZSA/IHRoaXMuZSA6IG90aGVyLmU7CgogICAgICBpZiAocyA+PSBlKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMocywgZSk7CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiBhbiBJbnRlcnZhbCByZXByZXNlbnRpbmcgdGhlIHVuaW9uIG9mIHRoaXMgSW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuCiAgICAgKiBTcGVjaWZpY2FsbHksIHRoZSByZXN1bHRpbmcgSW50ZXJ2YWwgaGFzIHRoZSBtaW5pbXVtIHN0YXJ0IHRpbWUgYW5kIHRoZSBtYXhpbXVtIGVuZCB0aW1lIG9mIHRoZSB0d28gSW50ZXJ2YWxzLgogICAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXIKICAgICAqIEByZXR1cm4ge0ludGVydmFsfQogICAgICovCiAgICB1bmlvbihvdGhlcikgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CiAgICAgIGNvbnN0IHMgPSB0aGlzLnMgPCBvdGhlci5zID8gdGhpcy5zIDogb3RoZXIucywKICAgICAgICBlID0gdGhpcy5lID4gb3RoZXIuZSA/IHRoaXMuZSA6IG90aGVyLmU7CiAgICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIGUpOwogICAgfQoKICAgIC8qKgogICAgICogTWVyZ2UgYW4gYXJyYXkgb2YgSW50ZXJ2YWxzIGludG8gYSBlcXVpdmFsZW50IG1pbmltYWwgc2V0IG9mIEludGVydmFscy4KICAgICAqIENvbWJpbmVzIG92ZXJsYXBwaW5nIGFuZCBhZGphY2VudCBJbnRlcnZhbHMuCiAgICAgKiBAcGFyYW0ge0FycmF5fSBpbnRlcnZhbHMKICAgICAqIEByZXR1cm4ge0FycmF5fQogICAgICovCiAgICBzdGF0aWMgbWVyZ2UoaW50ZXJ2YWxzKSB7CiAgICAgIGNvbnN0IFtmb3VuZCwgZmluYWxdID0gaW50ZXJ2YWxzCiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucyAtIGIucykKICAgICAgICAucmVkdWNlKAogICAgICAgICAgKFtzb2ZhciwgY3VycmVudF0sIGl0ZW0pID0+IHsKICAgICAgICAgICAgaWYgKCFjdXJyZW50KSB7CiAgICAgICAgICAgICAgcmV0dXJuIFtzb2ZhciwgaXRlbV07CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5vdmVybGFwcyhpdGVtKSB8fCBjdXJyZW50LmFidXRzU3RhcnQoaXRlbSkpIHsKICAgICAgICAgICAgICByZXR1cm4gW3NvZmFyLCBjdXJyZW50LnVuaW9uKGl0ZW0pXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByZXR1cm4gW3NvZmFyLmNvbmNhdChbY3VycmVudF0pLCBpdGVtXTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIFtbXSwgbnVsbF0KICAgICAgICApOwogICAgICBpZiAoZmluYWwpIHsKICAgICAgICBmb3VuZC5wdXNoKGZpbmFsKTsKICAgICAgfQogICAgICByZXR1cm4gZm91bmQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgSW50ZXJ2YWxzIHJlcHJlc2VudGluZyB0aGUgc3BhbnMgb2YgdGltZSB0aGF0IG9ubHkgYXBwZWFyIGluIG9uZSBvZiB0aGUgc3BlY2lmaWVkIEludGVydmFscy4KICAgICAqIEBwYXJhbSB7QXJyYXl9IGludGVydmFscwogICAgICogQHJldHVybiB7QXJyYXl9CiAgICAgKi8KICAgIHN0YXRpYyB4b3IoaW50ZXJ2YWxzKSB7CiAgICAgIGxldCBzdGFydCA9IG51bGwsCiAgICAgICAgY3VycmVudENvdW50ID0gMDsKICAgICAgY29uc3QgcmVzdWx0cyA9IFtdLAogICAgICAgIGVuZHMgPSBpbnRlcnZhbHMubWFwKChpKSA9PiBbCiAgICAgICAgICB7IHRpbWU6IGkucywgdHlwZTogInMiIH0sCiAgICAgICAgICB7IHRpbWU6IGkuZSwgdHlwZTogImUiIH0sCiAgICAgICAgXSksCiAgICAgICAgZmxhdHRlbmVkID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi5lbmRzKSwKICAgICAgICBhcnIgPSBmbGF0dGVuZWQuc29ydCgoYSwgYikgPT4gYS50aW1lIC0gYi50aW1lKTsKCiAgICAgIGZvciAoY29uc3QgaSBvZiBhcnIpIHsKICAgICAgICBjdXJyZW50Q291bnQgKz0gaS50eXBlID09PSAicyIgPyAxIDogLTE7CgogICAgICAgIGlmIChjdXJyZW50Q291bnQgPT09IDEpIHsKICAgICAgICAgIHN0YXJ0ID0gaS50aW1lOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoc3RhcnQgJiYgK3N0YXJ0ICE9PSAraS50aW1lKSB7CiAgICAgICAgICAgIHJlc3VsdHMucHVzaChJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHN0YXJ0LCBpLnRpbWUpKTsKICAgICAgICAgIH0KCiAgICAgICAgICBzdGFydCA9IG51bGw7CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gSW50ZXJ2YWwubWVyZ2UocmVzdWx0cyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gSW50ZXJ2YWwgcmVwcmVzZW50aW5nIHRoZSBzcGFuIG9mIHRpbWUgaW4gdGhpcyBJbnRlcnZhbCB0aGF0IGRvZXNuJ3Qgb3ZlcmxhcCB3aXRoIGFueSBvZiB0aGUgc3BlY2lmaWVkIEludGVydmFscy4KICAgICAqIEBwYXJhbSB7Li4uSW50ZXJ2YWx9IGludGVydmFscwogICAgICogQHJldHVybiB7QXJyYXl9CiAgICAgKi8KICAgIGRpZmZlcmVuY2UoLi4uaW50ZXJ2YWxzKSB7CiAgICAgIHJldHVybiBJbnRlcnZhbC54b3IoW3RoaXNdLmNvbmNhdChpbnRlcnZhbHMpKQogICAgICAgIC5tYXAoKGkpID0+IHRoaXMuaW50ZXJzZWN0aW9uKGkpKQogICAgICAgIC5maWx0ZXIoKGkpID0+IGkgJiYgIWkuaXNFbXB0eSgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBJbnRlcnZhbCBhcHByb3ByaWF0ZSBmb3IgZGVidWdnaW5nLgogICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICovCiAgICB0b1N0cmluZygpIHsKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEJDE7CiAgICAgIHJldHVybiBgWyR7dGhpcy5zLnRvSVNPKCl9IOKAkyAke3RoaXMuZS50b0lTTygpfSlgOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGxvY2FsaXplZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoaXMgSW50ZXJ2YWwuIEFjY2VwdHMgdGhlIHNhbWUgb3B0aW9ucyBhcyB0aGUKICAgICAqIEludGwuRGF0ZVRpbWVGb3JtYXQgY29uc3RydWN0b3IgYW5kIGFueSBwcmVzZXRzIGRlZmluZWQgYnkgTHV4b24sIHN1Y2ggYXMKICAgICAqIHtAbGluayBEYXRlVGltZS5EQVRFX0ZVTEx9IG9yIHtAbGluayBEYXRlVGltZS5USU1FX1NJTVBMRX0uIFRoZSBleGFjdCBiZWhhdmlvciBvZiB0aGlzIG1ldGhvZAogICAgICogaXMgYnJvd3Nlci1zcGVjaWZpYywgYnV0IGluIGdlbmVyYWwgaXQgd2lsbCByZXR1cm4gYW4gYXBwcm9wcmlhdGUgcmVwcmVzZW50YXRpb24gb2YgdGhlCiAgICAgKiBJbnRlcnZhbCBpbiB0aGUgYXNzaWduZWQgbG9jYWxlLiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbgogICAgICogc3BlY2lmaWVkLgogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlVGltZUZvcm1hdAogICAgICogQHBhcmFtIHtPYmplY3R9IFtmb3JtYXRPcHRzPURhdGVUaW1lLkRBVEVfU0hPUlRdIC0gRWl0aGVyIGEgRGF0ZVRpbWUgcHJlc2V0IG9yCiAgICAgKiBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIG9wdGlvbnMuCiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN0YXJ0IERhdGVUaW1lLgogICAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbUlTTygnMjAyMi0xMS0wN1QwOTowMFovMjAyMi0xMS0wOFQwOTowMFonKS50b0xvY2FsZVN0cmluZygpOyAvLz0+IDExLzcvMjAyMiDigJMgMTEvOC8yMDIyCiAgICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tSVNPKCcyMDIyLTExLTA3VDA5OjAwWi8yMDIyLTExLTA4VDA5OjAwWicpLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfRlVMTCk7IC8vPT4gTm92ZW1iZXIgNyDigJMgOCwgMjAyMgogICAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbUlTTygnMjAyMi0xMS0wN1QwOTowMFovMjAyMi0xMS0wOFQwOTowMFonKS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFX0ZVTEwsIHsgbG9jYWxlOiAnZnItRlInIH0pOyAvLz0+IDfigJM4IG5vdmVtYnJlIDIwMjIKICAgICAqIEBleGFtcGxlIEludGVydmFsLmZyb21JU08oJzIwMjItMTEtMDdUMTc6MDBaLzIwMjItMTEtMDdUMTk6MDBaJykudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuVElNRV9TSU1QTEUpOyAvLz0+IDY6MDAg4oCTIDg6MDAgUE0KICAgICAqIEBleGFtcGxlIEludGVydmFsLmZyb21JU08oJzIwMjItMTEtMDdUMTc6MDBaLzIwMjItMTEtMDdUMTk6MDBaJykudG9Mb2NhbGVTdHJpbmcoeyB3ZWVrZGF5OiAnc2hvcnQnLCBtb250aDogJ3Nob3J0JywgZGF5OiAnMi1kaWdpdCcsIGhvdXI6ICcyLWRpZ2l0JywgbWludXRlOiAnMi1kaWdpdCcgfSk7IC8vPT4gTW9uLCBOb3YgMDcsIDY6MDAg4oCTIDg6MDAgcAogICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICovCiAgICB0b0xvY2FsZVN0cmluZyhmb3JtYXRPcHRzID0gREFURV9TSE9SVCwgb3B0cyA9IHt9KSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQKICAgICAgICA/IEZvcm1hdHRlci5jcmVhdGUodGhpcy5zLmxvYy5jbG9uZShvcHRzKSwgZm9ybWF0T3B0cykuZm9ybWF0SW50ZXJ2YWwodGhpcykKICAgICAgICA6IElOVkFMSUQkMTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEludGVydmFsLgogICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lX2ludGVydmFscwogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBUaGUgc2FtZSBvcHRpb25zIGFzIHtAbGluayBEYXRlVGltZSN0b0lTT30KICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAqLwogICAgdG9JU08ob3B0cykgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQkMTsKICAgICAgcmV0dXJuIGAke3RoaXMucy50b0lTTyhvcHRzKX0vJHt0aGlzLmUudG9JU08ob3B0cyl9YDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBkYXRlIG9mIHRoaXMgSW50ZXJ2YWwuCiAgICAgKiBUaGUgdGltZSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLgogICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lX2ludGVydmFscwogICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICovCiAgICB0b0lTT0RhdGUoKSB7CiAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRCQxOwogICAgICByZXR1cm4gYCR7dGhpcy5zLnRvSVNPRGF0ZSgpfS8ke3RoaXMuZS50b0lTT0RhdGUoKX1gOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRpbWUgb2YgdGhpcyBJbnRlcnZhbC4KICAgICAqIFRoZSBkYXRlIGNvbXBvbmVudHMgYXJlIGlnbm9yZWQuCiAgICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzCiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFRoZSBzYW1lIG9wdGlvbnMgYXMge0BsaW5rIERhdGVUaW1lI3RvSVNPfQogICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICovCiAgICB0b0lTT1RpbWUob3B0cykgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQkMTsKICAgICAgcmV0dXJuIGAke3RoaXMucy50b0lTT1RpbWUob3B0cyl9LyR7dGhpcy5lLnRvSVNPVGltZShvcHRzKX1gOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEludGVydmFsIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQKICAgICAqIHN0cmluZy4gKipZb3UgbWF5IG5vdCB3YW50IHRoaXMuKiogU2VlIHtAbGluayBJbnRlcnZhbCN0b0xvY2FsZVN0cmluZ30gZm9yIGEgbW9yZSBmbGV4aWJsZQogICAgICogZm9ybWF0dGluZyB0b29sLgogICAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGVGb3JtYXQgLSBUaGUgZm9ybWF0IHN0cmluZy4gVGhpcyBzdHJpbmcgZm9ybWF0cyB0aGUgc3RhcnQgYW5kIGVuZCB0aW1lLgogICAgICogU2VlIHtAbGluayBEYXRlVGltZSN0b0Zvcm1hdH0gZm9yIGRldGFpbHMuCiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuc2VwYXJhdG9yID0gICcg4oCTICddIC0gQSBzZXBhcmF0b3IgdG8gcGxhY2UgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZAogICAgICogcmVwcmVzZW50YXRpb25zLgogICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICovCiAgICB0b0Zvcm1hdChkYXRlRm9ybWF0LCB7IHNlcGFyYXRvciA9ICIg4oCTICIgfSA9IHt9KSB7CiAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRCQxOwogICAgICByZXR1cm4gYCR7dGhpcy5zLnRvRm9ybWF0KGRhdGVGb3JtYXQpfSR7c2VwYXJhdG9yfSR7dGhpcy5lLnRvRm9ybWF0KGRhdGVGb3JtYXQpfWA7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYSBEdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIHRpbWUgc3Bhbm5lZCBieSB0aGlzIGludGVydmFsLgogICAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uLgogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiB0aGUgRHVyYXRpb24KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZQogICAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbigpLnRvT2JqZWN0KCkgLy89PiB7IG1pbGxpc2Vjb25kczogODg0ODkyNTcgfQogICAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbignZGF5cycpLnRvT2JqZWN0KCkgLy89PiB7IGRheXM6IDEuMDI0MTgxMjE1Mjc3Nzc3OCB9CiAgICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKFsnaG91cnMnLCAnbWludXRlcyddKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjQsIG1pbnV0ZXM6IDM0LjgyMDk1IH0KICAgICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oWydob3VycycsICdtaW51dGVzJywgJ3NlY29uZHMnXSkudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDI0LCBtaW51dGVzOiAzNCwgc2Vjb25kczogNDkuMjU3IH0KICAgICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oJ3NlY29uZHMnKS50b09iamVjdCgpIC8vPT4geyBzZWNvbmRzOiA4ODQ4OS4yNTcgfQogICAgICogQHJldHVybiB7RHVyYXRpb259CiAgICAgKi8KICAgIHRvRHVyYXRpb24odW5pdCwgb3B0cykgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgewogICAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKHRoaXMuaW52YWxpZFJlYXNvbik7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuZS5kaWZmKHRoaXMucywgdW5pdCwgb3B0cyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSdW4gbWFwRm4gb24gdGhlIGludGVydmFsIHN0YXJ0IGFuZCBlbmQsIHJldHVybmluZyBhIG5ldyBJbnRlcnZhbCBmcm9tIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWVzCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtYXBGbgogICAgICogQHJldHVybiB7SW50ZXJ2YWx9CiAgICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS5tYXBFbmRwb2ludHMoZW5kcG9pbnQgPT4gZW5kcG9pbnQudG9VVEMoKSkKICAgICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLm1hcEVuZHBvaW50cyhlbmRwb2ludCA9PiBlbmRwb2ludC5wbHVzKHsgaG91cnM6IDIgfSkpCiAgICAgKi8KICAgIG1hcEVuZHBvaW50cyhtYXBGbikgewogICAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhtYXBGbih0aGlzLnMpLCBtYXBGbih0aGlzLmUpKTsKICAgIH0KICB9CgogIC8qKgogICAqIFRoZSBJbmZvIGNsYXNzIGNvbnRhaW5zIHN0YXRpYyBtZXRob2RzIGZvciByZXRyaWV2aW5nIGdlbmVyYWwgdGltZSBhbmQgZGF0ZSByZWxhdGVkIGRhdGEuIEZvciBleGFtcGxlLCBpdCBoYXMgbWV0aG9kcyBmb3IgZmluZGluZyBvdXQgaWYgYSB0aW1lIHpvbmUgaGFzIGEgRFNULCBmb3IgbGlzdGluZyB0aGUgbW9udGhzIGluIGFueSBzdXBwb3J0ZWQgbG9jYWxlLCBhbmQgZm9yIGRpc2NvdmVyaW5nIHdoaWNoIG9mIEx1eG9uIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICovCiAgY2xhc3MgSW5mbyB7CiAgICAvKioKICAgICAqIFJldHVybiB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgem9uZSBjb250YWlucyBhIERTVC4KICAgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFt6b25lPSdsb2NhbCddIC0gWm9uZSB0byBjaGVjay4gRGVmYXVsdHMgdG8gdGhlIGVudmlyb25tZW50J3MgbG9jYWwgem9uZS4KICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgKi8KICAgIHN0YXRpYyBoYXNEU1Qoem9uZSA9IFNldHRpbmdzLmRlZmF1bHRab25lKSB7CiAgICAgIGNvbnN0IHByb3RvID0gRGF0ZVRpbWUubm93KCkuc2V0Wm9uZSh6b25lKS5zZXQoeyBtb250aDogMTIgfSk7CgogICAgICByZXR1cm4gIXpvbmUuaXNVbml2ZXJzYWwgJiYgcHJvdG8ub2Zmc2V0ICE9PSBwcm90by5zZXQoeyBtb250aDogNiB9KS5vZmZzZXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gd2hldGhlciB0aGUgc3BlY2lmaWVkIHpvbmUgaXMgYSB2YWxpZCBJQU5BIHNwZWNpZmllci4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSB6b25lIC0gWm9uZSB0byBjaGVjawogICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAqLwogICAgc3RhdGljIGlzVmFsaWRJQU5BWm9uZSh6b25lKSB7CiAgICAgIHJldHVybiBJQU5BWm9uZS5pc1ZhbGlkWm9uZSh6b25lKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnRzIHRoZSBpbnB1dCBpbnRvIGEge0BsaW5rIFpvbmV9IGluc3RhbmNlLgogICAgICoKICAgICAqICogSWYgYGlucHV0YCBpcyBhbHJlYWR5IGEgWm9uZSBpbnN0YW5jZSwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLgogICAgICogKiBJZiBgaW5wdXRgIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSB2YWxpZCB0aW1lIHpvbmUgbmFtZSwgYSBab25lIGluc3RhbmNlCiAgICAgKiAgIHdpdGggdGhhdCBuYW1lIGlzIHJldHVybmVkLgogICAgICogKiBJZiBgaW5wdXRgIGlzIGEgc3RyaW5nIHRoYXQgZG9lc24ndCByZWZlciB0byBhIGtub3duIHRpbWUgem9uZSwgYSBab25lCiAgICAgKiAgIGluc3RhbmNlIHdpdGgge0BsaW5rIFpvbmUjaXNWYWxpZH0gPT0gZmFsc2UgaXMgcmV0dXJuZWQuCiAgICAgKiAqIElmIGBpbnB1dCBpcyBhIG51bWJlciwgYSBab25lIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBmaXhlZCBvZmZzZXQKICAgICAqICAgaW4gbWludXRlcyBpcyByZXR1cm5lZC4KICAgICAqICogSWYgYGlucHV0YCBpcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAsIHRoZSBkZWZhdWx0IHpvbmUgaXMgcmV0dXJuZWQuCiAgICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfG51bWJlcn0gW2lucHV0XSAtIHRoZSB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQKICAgICAqIEByZXR1cm4ge1pvbmV9CiAgICAgKi8KICAgIHN0YXRpYyBub3JtYWxpemVab25lKGlucHV0KSB7CiAgICAgIHJldHVybiBub3JtYWxpemVab25lKGlucHV0LCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2Ygc3RhbmRhbG9uZSBtb250aCBuYW1lcy4KICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXQKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbbGVuZ3RoPSdsb25nJ10gLSB0aGUgbGVuZ3RoIG9mIHRoZSBtb250aCByZXByZXNlbnRhdGlvbiwgc3VjaCBhcyAibnVtZXJpYyIsICIyLWRpZ2l0IiwgIm5hcnJvdyIsICJzaG9ydCIsICJsb25nIgogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZQogICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2UKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5vdXRwdXRDYWxlbmRhcj0nZ3JlZ29yeSddIC0gdGhlIGNhbGVuZGFyCiAgICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygpWzBdIC8vPT4gJ0phbnVhcnknCiAgICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnc2hvcnQnKVswXSAvLz0+ICdKYW4nCiAgICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnbnVtZXJpYycpWzBdIC8vPT4gJzEnCiAgICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnc2hvcnQnLCB7IGxvY2FsZTogJ2ZyLUNBJyB9IClbMF0gLy89PiAnamFudi4nCiAgICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnbnVtZXJpYycsIHsgbG9jYWxlOiAnYXInIH0pWzBdIC8vPT4gJ9mhJwogICAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ2xvbmcnLCB7IG91dHB1dENhbGVuZGFyOiAnaXNsYW1pYycgfSlbMF0gLy89PiAnUmFiacq7IEknCiAgICAgKiBAcmV0dXJuIHtBcnJheX0KICAgICAqLwogICAgc3RhdGljIG1vbnRocygKICAgICAgbGVuZ3RoID0gImxvbmciLAogICAgICB7IGxvY2FsZSA9IG51bGwsIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsIGxvY09iaiA9IG51bGwsIG91dHB1dENhbGVuZGFyID0gImdyZWdvcnkiIH0gPSB7fQogICAgKSB7CiAgICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSkubW9udGhzKGxlbmd0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgZm9ybWF0IG1vbnRoIG5hbWVzLgogICAgICogRm9ybWF0IG1vbnRocyBkaWZmZXIgZnJvbSBzdGFuZGFsb25lIG1vbnRocyBpbiB0aGF0IHRoZXkncmUgbWVhbnQgdG8gYXBwZWFyIG5leHQgdG8gdGhlIGRheSBvZiB0aGUgbW9udGguIEluIHNvbWUgbGFuZ3VhZ2VzLCB0aGF0CiAgICAgKiBjaGFuZ2VzIHRoZSBzdHJpbmcuCiAgICAgKiBTZWUge0BsaW5rIEluZm8jbW9udGhzfQogICAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzICJudW1lcmljIiwgIjItZGlnaXQiLCAibmFycm93IiwgInNob3J0IiwgImxvbmciCiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtPW51bGxdIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZQogICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm91dHB1dENhbGVuZGFyPSdncmVnb3J5J10gLSB0aGUgY2FsZW5kYXIKICAgICAqIEByZXR1cm4ge0FycmF5fQogICAgICovCiAgICBzdGF0aWMgbW9udGhzRm9ybWF0KAogICAgICBsZW5ndGggPSAibG9uZyIsCiAgICAgIHsgbG9jYWxlID0gbnVsbCwgbnVtYmVyaW5nU3lzdGVtID0gbnVsbCwgbG9jT2JqID0gbnVsbCwgb3V0cHV0Q2FsZW5kYXIgPSAiZ3JlZ29yeSIgfSA9IHt9CiAgICApIHsKICAgICAgcmV0dXJuIChsb2NPYmogfHwgTG9jYWxlLmNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIpKS5tb250aHMobGVuZ3RoLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiBhbiBhcnJheSBvZiBzdGFuZGFsb25lIHdlZWsgbmFtZXMuCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGVUaW1lRm9ybWF0CiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgd2Vla2RheSByZXByZXNlbnRhdGlvbiwgc3VjaCBhcyAibmFycm93IiwgInNob3J0IiwgImxvbmciLgogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZQogICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2UKICAgICAqIEBleGFtcGxlIEluZm8ud2Vla2RheXMoKVswXSAvLz0+ICdNb25kYXknCiAgICAgKiBAZXhhbXBsZSBJbmZvLndlZWtkYXlzKCdzaG9ydCcpWzBdIC8vPT4gJ01vbicKICAgICAqIEBleGFtcGxlIEluZm8ud2Vla2RheXMoJ3Nob3J0JywgeyBsb2NhbGU6ICdmci1DQScgfSlbMF0gLy89PiAnbHVuLicKICAgICAqIEBleGFtcGxlIEluZm8ud2Vla2RheXMoJ3Nob3J0JywgeyBsb2NhbGU6ICdhcicgfSlbMF0gLy89PiAn2KfZhNin2KvZhtmK2YYnCiAgICAgKiBAcmV0dXJuIHtBcnJheX0KICAgICAqLwogICAgc3RhdGljIHdlZWtkYXlzKGxlbmd0aCA9ICJsb25nIiwgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsLCBsb2NPYmogPSBudWxsIH0gPSB7fSkgewogICAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBudWxsKSkud2Vla2RheXMobGVuZ3RoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiBhbiBhcnJheSBvZiBmb3JtYXQgd2VlayBuYW1lcy4KICAgICAqIEZvcm1hdCB3ZWVrZGF5cyBkaWZmZXIgZnJvbSBzdGFuZGFsb25lIHdlZWtkYXlzIGluIHRoYXQgdGhleSdyZSBtZWFudCB0byBhcHBlYXIgbmV4dCB0byBtb3JlIGRhdGUgaW5mb3JtYXRpb24uIEluIHNvbWUgbGFuZ3VhZ2VzLCB0aGF0CiAgICAgKiBjaGFuZ2VzIHRoZSBzdHJpbmcuCiAgICAgKiBTZWUge0BsaW5rIEluZm8jd2Vla2RheXN9CiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgbW9udGggcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgIm5hcnJvdyIsICJzaG9ydCIsICJsb25nIi4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwogICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT1udWxsXSAtIHRoZSBsb2NhbGUgY29kZQogICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2UKICAgICAqIEByZXR1cm4ge0FycmF5fQogICAgICovCiAgICBzdGF0aWMgd2Vla2RheXNGb3JtYXQoCiAgICAgIGxlbmd0aCA9ICJsb25nIiwKICAgICAgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsLCBsb2NPYmogPSBudWxsIH0gPSB7fQogICAgKSB7CiAgICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG51bGwpKS53ZWVrZGF5cyhsZW5ndGgsIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGFycmF5IG9mIG1lcmlkaWVtcy4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwogICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGUKICAgICAqIEBleGFtcGxlIEluZm8ubWVyaWRpZW1zKCkgLy89PiBbICdBTScsICdQTScgXQogICAgICogQGV4YW1wbGUgSW5mby5tZXJpZGllbXMoeyBsb2NhbGU6ICdteScgfSkgLy89PiBbICfhgJThgLbhgJThgIDhgLonLCAn4YCK4YCU4YCxJyBdCiAgICAgKiBAcmV0dXJuIHtBcnJheX0KICAgICAqLwogICAgc3RhdGljIG1lcmlkaWVtcyh7IGxvY2FsZSA9IG51bGwgfSA9IHt9KSB7CiAgICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKGxvY2FsZSkubWVyaWRpZW1zKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgZXJhcywgc3VjaCBhcyBbJ0JDJywgJ0FEJ10uIFRoZSBsb2NhbGUgY2FuIGJlIHNwZWNpZmllZCwgYnV0IHRoZSBjYWxlbmRhciBzeXN0ZW0gaXMgYWx3YXlzIEdyZWdvcmlhbi4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbbGVuZ3RoPSdzaG9ydCddIC0gdGhlIGxlbmd0aCBvZiB0aGUgZXJhIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzICJzaG9ydCIgb3IgImxvbmciLgogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZQogICAgICogQGV4YW1wbGUgSW5mby5lcmFzKCkgLy89PiBbICdCQycsICdBRCcgXQogICAgICogQGV4YW1wbGUgSW5mby5lcmFzKCdsb25nJykgLy89PiBbICdCZWZvcmUgQ2hyaXN0JywgJ0Fubm8gRG9taW5pJyBdCiAgICAgKiBAZXhhbXBsZSBJbmZvLmVyYXMoJ2xvbmcnLCB7IGxvY2FsZTogJ2ZyJyB9KSAvLz0+IFsgJ2F2YW50IErDqXN1cy1DaHJpc3QnLCAnYXByw6hzIErDqXN1cy1DaHJpc3QnIF0KICAgICAqIEByZXR1cm4ge0FycmF5fQogICAgICovCiAgICBzdGF0aWMgZXJhcyhsZW5ndGggPSAic2hvcnQiLCB7IGxvY2FsZSA9IG51bGwgfSA9IHt9KSB7CiAgICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVsbCwgImdyZWdvcnkiKS5lcmFzKGxlbmd0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHNldCBvZiBhdmFpbGFibGUgZmVhdHVyZXMgaW4gdGhpcyBlbnZpcm9ubWVudC4KICAgICAqIFNvbWUgZmVhdHVyZXMgb2YgTHV4b24gYXJlIG5vdCBhdmFpbGFibGUgaW4gYWxsIGVudmlyb25tZW50cy4gRm9yIGV4YW1wbGUsIG9uIG9sZGVyIGJyb3dzZXJzLCByZWxhdGl2ZSB0aW1lIGZvcm1hdHRpbmcgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLiBVc2UgdGhpcyBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IGlmIHRoYXQncyB0aGUgY2FzZS4KICAgICAqIEtleXM6CiAgICAgKiAqIGByZWxhdGl2ZWA6IHdoZXRoZXIgdGhpcyBlbnZpcm9ubWVudCBzdXBwb3J0cyByZWxhdGl2ZSB0aW1lIGZvcm1hdHRpbmcKICAgICAqIEBleGFtcGxlIEluZm8uZmVhdHVyZXMoKSAvLz0+IHsgcmVsYXRpdmU6IGZhbHNlIH0KICAgICAqIEByZXR1cm4ge09iamVjdH0KICAgICAqLwogICAgc3RhdGljIGZlYXR1cmVzKCkgewogICAgICByZXR1cm4geyByZWxhdGl2ZTogaGFzUmVsYXRpdmUoKSB9OwogICAgfQogIH0KCiAgZnVuY3Rpb24gZGF5RGlmZihlYXJsaWVyLCBsYXRlcikgewogICAgY29uc3QgdXRjRGF5U3RhcnQgPSAoZHQpID0+IGR0LnRvVVRDKDAsIHsga2VlcExvY2FsVGltZTogdHJ1ZSB9KS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksCiAgICAgIG1zID0gdXRjRGF5U3RhcnQobGF0ZXIpIC0gdXRjRGF5U3RhcnQoZWFybGllcik7CiAgICByZXR1cm4gTWF0aC5mbG9vcihEdXJhdGlvbi5mcm9tTWlsbGlzKG1zKS5hcygiZGF5cyIpKTsKICB9CgogIGZ1bmN0aW9uIGhpZ2hPcmRlckRpZmZzKGN1cnNvciwgbGF0ZXIsIHVuaXRzKSB7CiAgICBjb25zdCBkaWZmZXJzID0gWwogICAgICBbInllYXJzIiwgKGEsIGIpID0+IGIueWVhciAtIGEueWVhcl0sCiAgICAgIFsicXVhcnRlcnMiLCAoYSwgYikgPT4gYi5xdWFydGVyIC0gYS5xdWFydGVyICsgKGIueWVhciAtIGEueWVhcikgKiA0XSwKICAgICAgWyJtb250aHMiLCAoYSwgYikgPT4gYi5tb250aCAtIGEubW9udGggKyAoYi55ZWFyIC0gYS55ZWFyKSAqIDEyXSwKICAgICAgWwogICAgICAgICJ3ZWVrcyIsCiAgICAgICAgKGEsIGIpID0+IHsKICAgICAgICAgIGNvbnN0IGRheXMgPSBkYXlEaWZmKGEsIGIpOwogICAgICAgICAgcmV0dXJuIChkYXlzIC0gKGRheXMgJSA3KSkgLyA3OwogICAgICAgIH0sCiAgICAgIF0sCiAgICAgIFsiZGF5cyIsIGRheURpZmZdLAogICAgXTsKCiAgICBjb25zdCByZXN1bHRzID0ge307CiAgICBjb25zdCBlYXJsaWVyID0gY3Vyc29yOwogICAgbGV0IGxvd2VzdE9yZGVyLCBoaWdoV2F0ZXI7CgogICAgLyogVGhpcyBsb29wIHRyaWVzIHRvIGRpZmYgdXNpbmcgbGFyZ2VyIHVuaXRzIGZpcnN0LgogICAgICAgSWYgd2Ugb3ZlcnNob290LCB3ZSBiYWNrdHJhY2sgYW5kIHRyeSB0aGUgbmV4dCBzbWFsbGVyIHVuaXQuCiAgICAgICAiY3Vyc29yIiBzdGFydHMgb3V0IGF0IHRoZSBlYXJsaWVyIHRpbWVzdGFtcCBhbmQgbW92ZXMgY2xvc2VyIGFuZCBjbG9zZXIgdG8gImxhdGVyIgogICAgICAgYXMgd2UgdXNlIHNtYWxsZXIgYW5kIHNtYWxsZXIgdW5pdHMuCiAgICAgICBoaWdoV2F0ZXIga2VlcHMgdHJhY2sgb2Ygd2hlcmUgd2Ugd291bGQgYmUgaWYgd2UgYWRkZWQgb25lIG1vcmUgb2YgdGhlIHNtYWxsZXN0IHVuaXQsCiAgICAgICB0aGlzIGlzIHVzZWQgbGF0ZXIgdG8gcG90ZW50aWFsbHkgY29udmVydCBhbnkgZGlmZmVyZW5jZSBzbWFsbGVyIHRoYW4gdGhlIHNtYWxsZXN0IGhpZ2hlciBvcmRlciB1bml0CiAgICAgICBpbnRvIGEgZnJhY3Rpb24gb2YgdGhhdCBzbWFsbGVzdCBoaWdoZXIgb3JkZXIgdW5pdAogICAgKi8KICAgIGZvciAoY29uc3QgW3VuaXQsIGRpZmZlcl0gb2YgZGlmZmVycykgewogICAgICBpZiAodW5pdHMuaW5kZXhPZih1bml0KSA+PSAwKSB7CiAgICAgICAgbG93ZXN0T3JkZXIgPSB1bml0OwoKICAgICAgICByZXN1bHRzW3VuaXRdID0gZGlmZmVyKGN1cnNvciwgbGF0ZXIpOwogICAgICAgIGhpZ2hXYXRlciA9IGVhcmxpZXIucGx1cyhyZXN1bHRzKTsKCiAgICAgICAgaWYgKGhpZ2hXYXRlciA+IGxhdGVyKSB7CiAgICAgICAgICAvLyB3ZSBvdmVyc2hvdCB0aGUgZW5kIHBvaW50LCBiYWNrdHJhY2sgY3Vyc29yIGJ5IDEKICAgICAgICAgIHJlc3VsdHNbdW5pdF0tLTsKICAgICAgICAgIGN1cnNvciA9IGVhcmxpZXIucGx1cyhyZXN1bHRzKTsKCiAgICAgICAgICAvLyBpZiB3ZSBhcmUgc3RpbGwgb3ZlcnNob290aW5nIG5vdywgd2UgbmVlZCB0byBiYWNrdHJhY2sgYWdhaW4KICAgICAgICAgIC8vIHRoaXMgaGFwcGVucyBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgd2hlbiBkaWZmaW5nIHRpbWVzIGluIGRpZmZlcmVudCB6b25lcywKICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBjYWxjdWxhdGlvbiBpZ25vcmVzIHRpbWUgem9uZXMKICAgICAgICAgIGlmIChjdXJzb3IgPiBsYXRlcikgewogICAgICAgICAgICAvLyBrZWVwIHRoZSAib3ZlcnNob3QgYnkgMSIgYXJvdW5kIGFzIGhpZ2hXYXRlcgogICAgICAgICAgICBoaWdoV2F0ZXIgPSBjdXJzb3I7CiAgICAgICAgICAgIC8vIGJhY2t0cmFjayBjdXJzb3IgYnkgMQogICAgICAgICAgICByZXN1bHRzW3VuaXRdLS07CiAgICAgICAgICAgIGN1cnNvciA9IGVhcmxpZXIucGx1cyhyZXN1bHRzKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgY3Vyc29yID0gaGlnaFdhdGVyOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiBbY3Vyc29yLCByZXN1bHRzLCBoaWdoV2F0ZXIsIGxvd2VzdE9yZGVyXTsKICB9CgogIGZ1bmN0aW9uIGRpZmYgKGVhcmxpZXIsIGxhdGVyLCB1bml0cywgb3B0cykgewogICAgbGV0IFtjdXJzb3IsIHJlc3VsdHMsIGhpZ2hXYXRlciwgbG93ZXN0T3JkZXJdID0gaGlnaE9yZGVyRGlmZnMoZWFybGllciwgbGF0ZXIsIHVuaXRzKTsKCiAgICBjb25zdCByZW1haW5pbmdNaWxsaXMgPSBsYXRlciAtIGN1cnNvcjsKCiAgICBjb25zdCBsb3dlck9yZGVyVW5pdHMgPSB1bml0cy5maWx0ZXIoCiAgICAgICh1KSA9PiBbImhvdXJzIiwgIm1pbnV0ZXMiLCAic2Vjb25kcyIsICJtaWxsaXNlY29uZHMiXS5pbmRleE9mKHUpID49IDAKICAgICk7CgogICAgaWYgKGxvd2VyT3JkZXJVbml0cy5sZW5ndGggPT09IDApIHsKICAgICAgaWYgKGhpZ2hXYXRlciA8IGxhdGVyKSB7CiAgICAgICAgaGlnaFdhdGVyID0gY3Vyc29yLnBsdXMoeyBbbG93ZXN0T3JkZXJdOiAxIH0pOwogICAgICB9CgogICAgICBpZiAoaGlnaFdhdGVyICE9PSBjdXJzb3IpIHsKICAgICAgICByZXN1bHRzW2xvd2VzdE9yZGVyXSA9IChyZXN1bHRzW2xvd2VzdE9yZGVyXSB8fCAwKSArIHJlbWFpbmluZ01pbGxpcyAvIChoaWdoV2F0ZXIgLSBjdXJzb3IpOwogICAgICB9CiAgICB9CgogICAgY29uc3QgZHVyYXRpb24gPSBEdXJhdGlvbi5mcm9tT2JqZWN0KHJlc3VsdHMsIG9wdHMpOwoKICAgIGlmIChsb3dlck9yZGVyVW5pdHMubGVuZ3RoID4gMCkgewogICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU1pbGxpcyhyZW1haW5pbmdNaWxsaXMsIG9wdHMpCiAgICAgICAgLnNoaWZ0VG8oLi4ubG93ZXJPcmRlclVuaXRzKQogICAgICAgIC5wbHVzKGR1cmF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBkdXJhdGlvbjsKICAgIH0KICB9CgogIGNvbnN0IG51bWJlcmluZ1N5c3RlbXMgPSB7CiAgICBhcmFiOiAiW1x1MDY2MC1cdTA2NjldIiwKICAgIGFyYWJleHQ6ICJbXHUwNkYwLVx1MDZGOV0iLAogICAgYmFsaTogIltcdTFCNTAtXHUxQjU5XSIsCiAgICBiZW5nOiAiW1x1MDlFNi1cdTA5RUZdIiwKICAgIGRldmE6ICJbXHUwOTY2LVx1MDk2Rl0iLAogICAgZnVsbHdpZGU6ICJbXHVGRjEwLVx1RkYxOV0iLAogICAgZ3VqcjogIltcdTBBRTYtXHUwQUVGXSIsCiAgICBoYW5pZGVjOiAiW+OAh3zkuIB85LqMfOS4iXzlm5t85LqUfOWFrXzkuIN85YWrfOS5nV0iLAogICAga2htcjogIltcdTE3RTAtXHUxN0U5XSIsCiAgICBrbmRhOiAiW1x1MENFNi1cdTBDRUZdIiwKICAgIGxhb286ICJbXHUwRUQwLVx1MEVEOV0iLAogICAgbGltYjogIltcdTE5NDYtXHUxOTRGXSIsCiAgICBtbHltOiAiW1x1MEQ2Ni1cdTBENkZdIiwKICAgIG1vbmc6ICJbXHUxODEwLVx1MTgxOV0iLAogICAgbXltcjogIltcdTEwNDAtXHUxMDQ5XSIsCiAgICBvcnlhOiAiW1x1MEI2Ni1cdTBCNkZdIiwKICAgIHRhbWxkZWM6ICJbXHUwQkU2LVx1MEJFRl0iLAogICAgdGVsdTogIltcdTBDNjYtXHUwQzZGXSIsCiAgICB0aGFpOiAiW1x1MEU1MC1cdTBFNTldIiwKICAgIHRpYnQ6ICJbXHUwRjIwLVx1MEYyOV0iLAogICAgbGF0bjogIlxcZCIsCiAgfTsKCiAgY29uc3QgbnVtYmVyaW5nU3lzdGVtc1VURjE2ID0gewogICAgYXJhYjogWzE2MzIsIDE2NDFdLAogICAgYXJhYmV4dDogWzE3NzYsIDE3ODVdLAogICAgYmFsaTogWzY5OTIsIDcwMDFdLAogICAgYmVuZzogWzI1MzQsIDI1NDNdLAogICAgZGV2YTogWzI0MDYsIDI0MTVdLAogICAgZnVsbHdpZGU6IFs2NTI5NiwgNjUzMDNdLAogICAgZ3VqcjogWzI3OTAsIDI3OTldLAogICAga2htcjogWzYxMTIsIDYxMjFdLAogICAga25kYTogWzMzMDIsIDMzMTFdLAogICAgbGFvbzogWzM3OTIsIDM4MDFdLAogICAgbGltYjogWzY0NzAsIDY0NzldLAogICAgbWx5bTogWzM0MzAsIDM0MzldLAogICAgbW9uZzogWzYxNjAsIDYxNjldLAogICAgbXltcjogWzQxNjAsIDQxNjldLAogICAgb3J5YTogWzI5MTgsIDI5MjddLAogICAgdGFtbGRlYzogWzMwNDYsIDMwNTVdLAogICAgdGVsdTogWzMxNzQsIDMxODNdLAogICAgdGhhaTogWzM2NjQsIDM2NzNdLAogICAgdGlidDogWzM4NzIsIDM4ODFdLAogIH07CgogIGNvbnN0IGhhbmlkZWNDaGFycyA9IG51bWJlcmluZ1N5c3RlbXMuaGFuaWRlYy5yZXBsYWNlKC9bXFt8XF1dL2csICIiKS5zcGxpdCgiIik7CgogIGZ1bmN0aW9uIHBhcnNlRGlnaXRzKHN0cikgewogICAgbGV0IHZhbHVlID0gcGFyc2VJbnQoc3RyLCAxMCk7CiAgICBpZiAoaXNOYU4odmFsdWUpKSB7CiAgICAgIHZhbHVlID0gIiI7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29uc3QgY29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpOwoKICAgICAgICBpZiAoc3RyW2ldLnNlYXJjaChudW1iZXJpbmdTeXN0ZW1zLmhhbmlkZWMpICE9PSAtMSkgewogICAgICAgICAgdmFsdWUgKz0gaGFuaWRlY0NoYXJzLmluZGV4T2Yoc3RyW2ldKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbnVtYmVyaW5nU3lzdGVtc1VURjE2KSB7CiAgICAgICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSBudW1iZXJpbmdTeXN0ZW1zVVRGMTZba2V5XTsKICAgICAgICAgICAgaWYgKGNvZGUgPj0gbWluICYmIGNvZGUgPD0gbWF4KSB7CiAgICAgICAgICAgICAgdmFsdWUgKz0gY29kZSAtIG1pbjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGRpZ2l0UmVnZXgoeyBudW1iZXJpbmdTeXN0ZW0gfSwgYXBwZW5kID0gIiIpIHsKICAgIHJldHVybiBuZXcgUmVnRXhwKGAke251bWJlcmluZ1N5c3RlbXNbbnVtYmVyaW5nU3lzdGVtIHx8ICJsYXRuIl19JHthcHBlbmR9YCk7CiAgfQoKICBjb25zdCBNSVNTSU5HX0ZUUCA9ICJtaXNzaW5nIEludGwuRGF0ZVRpbWVGb3JtYXQuZm9ybWF0VG9QYXJ0cyBzdXBwb3J0IjsKCiAgZnVuY3Rpb24gaW50VW5pdChyZWdleCwgcG9zdCA9IChpKSA9PiBpKSB7CiAgICByZXR1cm4geyByZWdleCwgZGVzZXI6IChbc10pID0+IHBvc3QocGFyc2VEaWdpdHMocykpIH07CiAgfQoKICBjb25zdCBOQlNQID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApOwogIGNvbnN0IHNwYWNlT3JOQlNQID0gYFsgJHtOQlNQfV1gOwogIGNvbnN0IHNwYWNlT3JOQlNQUmVnRXhwID0gbmV3IFJlZ0V4cChzcGFjZU9yTkJTUCwgImciKTsKCiAgZnVuY3Rpb24gZml4TGlzdFJlZ2V4KHMpIHsKICAgIC8vIG1ha2UgZG90cyBvcHRpb25hbCBhbmQgYWxzbyBtYWtlIHRoZW0gbGl0ZXJhbAogICAgLy8gbWFrZSBzcGFjZSBhbmQgbm9uIGJyZWFrYWJsZSBzcGFjZSBjaGFyYWN0ZXJzIGludGVyY2hhbmdlYWJsZQogICAgcmV0dXJuIHMucmVwbGFjZSgvXC4vZywgIlxcLj8iKS5yZXBsYWNlKHNwYWNlT3JOQlNQUmVnRXhwLCBzcGFjZU9yTkJTUCk7CiAgfQoKICBmdW5jdGlvbiBzdHJpcEluc2Vuc2l0aXZpdGllcyhzKSB7CiAgICByZXR1cm4gcwogICAgICAucmVwbGFjZSgvXC4vZywgIiIpIC8vIGlnbm9yZSBkb3RzIHRoYXQgd2VyZSBtYWRlIG9wdGlvbmFsCiAgICAgIC5yZXBsYWNlKHNwYWNlT3JOQlNQUmVnRXhwLCAiICIpIC8vIGludGVyY2hhbmdlIHNwYWNlIGFuZCBuYnNwCiAgICAgIC50b0xvd2VyQ2FzZSgpOwogIH0KCiAgZnVuY3Rpb24gb25lT2Yoc3RyaW5ncywgc3RhcnRJbmRleCkgewogICAgaWYgKHN0cmluZ3MgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gewogICAgICAgIHJlZ2V4OiBSZWdFeHAoc3RyaW5ncy5tYXAoZml4TGlzdFJlZ2V4KS5qb2luKCJ8IikpLAogICAgICAgIGRlc2VyOiAoW3NdKSA9PgogICAgICAgICAgc3RyaW5ncy5maW5kSW5kZXgoKGkpID0+IHN0cmlwSW5zZW5zaXRpdml0aWVzKHMpID09PSBzdHJpcEluc2Vuc2l0aXZpdGllcyhpKSkgKyBzdGFydEluZGV4LAogICAgICB9OwogICAgfQogIH0KCiAgZnVuY3Rpb24gb2Zmc2V0KHJlZ2V4LCBncm91cHMpIHsKICAgIHJldHVybiB7IHJlZ2V4LCBkZXNlcjogKFssIGgsIG1dKSA9PiBzaWduZWRPZmZzZXQoaCwgbSksIGdyb3VwcyB9OwogIH0KCiAgZnVuY3Rpb24gc2ltcGxlKHJlZ2V4KSB7CiAgICByZXR1cm4geyByZWdleCwgZGVzZXI6IChbc10pID0+IHMgfTsKICB9CgogIGZ1bmN0aW9uIGVzY2FwZVRva2VuKHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywgIlxcJCYiKTsKICB9CgogIC8qKgogICAqIEBwYXJhbSB0b2tlbgogICAqIEBwYXJhbSB7TG9jYWxlfSBsb2MKICAgKi8KICBmdW5jdGlvbiB1bml0Rm9yVG9rZW4odG9rZW4sIGxvYykgewogICAgY29uc3Qgb25lID0gZGlnaXRSZWdleChsb2MpLAogICAgICB0d28gPSBkaWdpdFJlZ2V4KGxvYywgInsyfSIpLAogICAgICB0aHJlZSA9IGRpZ2l0UmVnZXgobG9jLCAiezN9IiksCiAgICAgIGZvdXIgPSBkaWdpdFJlZ2V4KGxvYywgIns0fSIpLAogICAgICBzaXggPSBkaWdpdFJlZ2V4KGxvYywgIns2fSIpLAogICAgICBvbmVPclR3byA9IGRpZ2l0UmVnZXgobG9jLCAiezEsMn0iKSwKICAgICAgb25lVG9UaHJlZSA9IGRpZ2l0UmVnZXgobG9jLCAiezEsM30iKSwKICAgICAgb25lVG9TaXggPSBkaWdpdFJlZ2V4KGxvYywgInsxLDZ9IiksCiAgICAgIG9uZVRvTmluZSA9IGRpZ2l0UmVnZXgobG9jLCAiezEsOX0iKSwKICAgICAgdHdvVG9Gb3VyID0gZGlnaXRSZWdleChsb2MsICJ7Miw0fSIpLAogICAgICBmb3VyVG9TaXggPSBkaWdpdFJlZ2V4KGxvYywgIns0LDZ9IiksCiAgICAgIGxpdGVyYWwgPSAodCkgPT4gKHsgcmVnZXg6IFJlZ0V4cChlc2NhcGVUb2tlbih0LnZhbCkpLCBkZXNlcjogKFtzXSkgPT4gcywgbGl0ZXJhbDogdHJ1ZSB9KSwKICAgICAgdW5pdGF0ZSA9ICh0KSA9PiB7CiAgICAgICAgaWYgKHRva2VuLmxpdGVyYWwpIHsKICAgICAgICAgIHJldHVybiBsaXRlcmFsKHQpOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKHQudmFsKSB7CiAgICAgICAgICAvLyBlcmEKICAgICAgICAgIGNhc2UgIkciOgogICAgICAgICAgICByZXR1cm4gb25lT2YobG9jLmVyYXMoInNob3J0IiksIDApOwogICAgICAgICAgY2FzZSAiR0ciOgogICAgICAgICAgICByZXR1cm4gb25lT2YobG9jLmVyYXMoImxvbmciKSwgMCk7CiAgICAgICAgICAvLyB5ZWFycwogICAgICAgICAgY2FzZSAieSI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZVRvU2l4KTsKICAgICAgICAgIGNhc2UgInl5IjoKICAgICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvVG9Gb3VyLCB1bnRydW5jYXRlWWVhcik7CiAgICAgICAgICBjYXNlICJ5eXl5IjoKICAgICAgICAgICAgcmV0dXJuIGludFVuaXQoZm91cik7CiAgICAgICAgICBjYXNlICJ5eXl5eSI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KGZvdXJUb1NpeCk7CiAgICAgICAgICBjYXNlICJ5eXl5eXkiOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdChzaXgpOwogICAgICAgICAgLy8gbW9udGhzCiAgICAgICAgICBjYXNlICJNIjoKICAgICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pOwogICAgICAgICAgY2FzZSAiTU0iOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pOwogICAgICAgICAgY2FzZSAiTU1NIjoKICAgICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tb250aHMoInNob3J0IiwgdHJ1ZSksIDEpOwogICAgICAgICAgY2FzZSAiTU1NTSI6CiAgICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKCJsb25nIiwgdHJ1ZSksIDEpOwogICAgICAgICAgY2FzZSAiTCI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTsKICAgICAgICAgIGNhc2UgIkxMIjoKICAgICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTsKICAgICAgICAgIGNhc2UgIkxMTCI6CiAgICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKCJzaG9ydCIsIGZhbHNlKSwgMSk7CiAgICAgICAgICBjYXNlICJMTExMIjoKICAgICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tb250aHMoImxvbmciLCBmYWxzZSksIDEpOwogICAgICAgICAgLy8gZGF0ZXMKICAgICAgICAgIGNhc2UgImQiOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CiAgICAgICAgICBjYXNlICJkZCI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7CiAgICAgICAgICAvLyBvcmRpbmFscwogICAgICAgICAgY2FzZSAibyI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZVRvVGhyZWUpOwogICAgICAgICAgY2FzZSAib29vIjoKICAgICAgICAgICAgcmV0dXJuIGludFVuaXQodGhyZWUpOwogICAgICAgICAgLy8gdGltZQogICAgICAgICAgY2FzZSAiSEgiOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pOwogICAgICAgICAgY2FzZSAiSCI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTsKICAgICAgICAgIGNhc2UgImhoIjoKICAgICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTsKICAgICAgICAgIGNhc2UgImgiOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CiAgICAgICAgICBjYXNlICJtbSI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7CiAgICAgICAgICBjYXNlICJtIjoKICAgICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pOwogICAgICAgICAgY2FzZSAicSI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTsKICAgICAgICAgIGNhc2UgInFxIjoKICAgICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTsKICAgICAgICAgIGNhc2UgInMiOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CiAgICAgICAgICBjYXNlICJzcyI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7CiAgICAgICAgICBjYXNlICJTIjoKICAgICAgICAgICAgcmV0dXJuIGludFVuaXQob25lVG9UaHJlZSk7CiAgICAgICAgICBjYXNlICJTU1MiOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdCh0aHJlZSk7CiAgICAgICAgICBjYXNlICJ1IjoKICAgICAgICAgICAgcmV0dXJuIHNpbXBsZShvbmVUb05pbmUpOwogICAgICAgICAgY2FzZSAidXUiOgogICAgICAgICAgICByZXR1cm4gc2ltcGxlKG9uZU9yVHdvKTsKICAgICAgICAgIGNhc2UgInV1dSI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZSk7CiAgICAgICAgICAvLyBtZXJpZGllbQogICAgICAgICAgY2FzZSAiYSI6CiAgICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubWVyaWRpZW1zKCksIDApOwogICAgICAgICAgLy8gd2Vla1llYXIgKGspCiAgICAgICAgICBjYXNlICJra2trIjoKICAgICAgICAgICAgcmV0dXJuIGludFVuaXQoZm91cik7CiAgICAgICAgICBjYXNlICJrayI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3b1RvRm91ciwgdW50cnVuY2F0ZVllYXIpOwogICAgICAgICAgLy8gd2Vla051bWJlciAoVykKICAgICAgICAgIGNhc2UgIlciOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CiAgICAgICAgICBjYXNlICJXVyI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7CiAgICAgICAgICAvLyB3ZWVrZGF5cwogICAgICAgICAgY2FzZSAiRSI6CiAgICAgICAgICBjYXNlICJjIjoKICAgICAgICAgICAgcmV0dXJuIGludFVuaXQob25lKTsKICAgICAgICAgIGNhc2UgIkVFRSI6CiAgICAgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoInNob3J0IiwgZmFsc2UpLCAxKTsKICAgICAgICAgIGNhc2UgIkVFRUUiOgogICAgICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKCJsb25nIiwgZmFsc2UpLCAxKTsKICAgICAgICAgIGNhc2UgImNjYyI6CiAgICAgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoInNob3J0IiwgdHJ1ZSksIDEpOwogICAgICAgICAgY2FzZSAiY2NjYyI6CiAgICAgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoImxvbmciLCB0cnVlKSwgMSk7CiAgICAgICAgICAvLyBvZmZzZXQvem9uZQogICAgICAgICAgY2FzZSAiWiI6CiAgICAgICAgICBjYXNlICJaWiI6CiAgICAgICAgICAgIHJldHVybiBvZmZzZXQobmV3IFJlZ0V4cChgKFsrLV0ke29uZU9yVHdvLnNvdXJjZX0pKD86Oigke3R3by5zb3VyY2V9KSk/YCksIDIpOwogICAgICAgICAgY2FzZSAiWlpaIjoKICAgICAgICAgICAgcmV0dXJuIG9mZnNldChuZXcgUmVnRXhwKGAoWystXSR7b25lT3JUd28uc291cmNlfSkoJHt0d28uc291cmNlfSk/YCksIDIpOwogICAgICAgICAgLy8gd2UgZG9uJ3Qgc3VwcG9ydCBaWlpaIChQU1QpIG9yIFpaWlpaIChQYWNpZmljIFN0YW5kYXJkIFRpbWUpIGluIHBhcnNpbmcKICAgICAgICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgd2F5IHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGV5IGFyZQogICAgICAgICAgY2FzZSAieiI6CiAgICAgICAgICAgIHJldHVybiBzaW1wbGUoL1thLXpfKy0vXXsxLDI1Nn0/L2kpOwogICAgICAgICAgLy8gdGhpcyBzcGVjaWFsLWNhc2UgInRva2VuIiByZXByZXNlbnRzIGEgcGxhY2Ugd2hlcmUgYSBtYWNyby10b2tlbiBleHBhbmRlZCBpbnRvIGEgd2hpdGUtc3BhY2UgbGl0ZXJhbAogICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlIGFjY2VwdCBhbnkgbm9uLW5ld2xpbmUgd2hpdGUtc3BhY2UKICAgICAgICAgIGNhc2UgIiAiOgogICAgICAgICAgICByZXR1cm4gc2ltcGxlKC9bXlxTXG5ccl0vKTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsaXRlcmFsKHQpOwogICAgICAgIH0KICAgICAgfTsKCiAgICBjb25zdCB1bml0ID0gdW5pdGF0ZSh0b2tlbikgfHwgewogICAgICBpbnZhbGlkUmVhc29uOiBNSVNTSU5HX0ZUUCwKICAgIH07CgogICAgdW5pdC50b2tlbiA9IHRva2VuOwoKICAgIHJldHVybiB1bml0OwogIH0KCiAgY29uc3QgcGFydFR5cGVTdHlsZVRvVG9rZW5WYWwgPSB7CiAgICB5ZWFyOiB7CiAgICAgICIyLWRpZ2l0IjogInl5IiwKICAgICAgbnVtZXJpYzogInl5eXl5IiwKICAgIH0sCiAgICBtb250aDogewogICAgICBudW1lcmljOiAiTSIsCiAgICAgICIyLWRpZ2l0IjogIk1NIiwKICAgICAgc2hvcnQ6ICJNTU0iLAogICAgICBsb25nOiAiTU1NTSIsCiAgICB9LAogICAgZGF5OiB7CiAgICAgIG51bWVyaWM6ICJkIiwKICAgICAgIjItZGlnaXQiOiAiZGQiLAogICAgfSwKICAgIHdlZWtkYXk6IHsKICAgICAgc2hvcnQ6ICJFRUUiLAogICAgICBsb25nOiAiRUVFRSIsCiAgICB9LAogICAgZGF5cGVyaW9kOiAiYSIsCiAgICBkYXlQZXJpb2Q6ICJhIiwKICAgIGhvdXIxMjogewogICAgICBudW1lcmljOiAiaCIsCiAgICAgICIyLWRpZ2l0IjogImhoIiwKICAgIH0sCiAgICBob3VyMjQ6IHsKICAgICAgbnVtZXJpYzogIkgiLAogICAgICAiMi1kaWdpdCI6ICJISCIsCiAgICB9LAogICAgbWludXRlOiB7CiAgICAgIG51bWVyaWM6ICJtIiwKICAgICAgIjItZGlnaXQiOiAibW0iLAogICAgfSwKICAgIHNlY29uZDogewogICAgICBudW1lcmljOiAicyIsCiAgICAgICIyLWRpZ2l0IjogInNzIiwKICAgIH0sCiAgICB0aW1lWm9uZU5hbWU6IHsKICAgICAgbG9uZzogIlpaWlpaIiwKICAgICAgc2hvcnQ6ICJaWloiLAogICAgfSwKICB9OwoKICBmdW5jdGlvbiB0b2tlbkZvclBhcnQocGFydCwgZm9ybWF0T3B0cywgcmVzb2x2ZWRPcHRzKSB7CiAgICBjb25zdCB7IHR5cGUsIHZhbHVlIH0gPSBwYXJ0OwoKICAgIGlmICh0eXBlID09PSAibGl0ZXJhbCIpIHsKICAgICAgY29uc3QgaXNTcGFjZSA9IC9eXHMrJC8udGVzdCh2YWx1ZSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgbGl0ZXJhbDogIWlzU3BhY2UsCiAgICAgICAgdmFsOiBpc1NwYWNlID8gIiAiIDogdmFsdWUsCiAgICAgIH07CiAgICB9CgogICAgY29uc3Qgc3R5bGUgPSBmb3JtYXRPcHRzW3R5cGVdOwoKICAgIC8vIFRoZSB1c2VyIG1pZ2h0IGhhdmUgZXhwbGljaXRseSBzcGVjaWZpZWQgaG91cjEyIG9yIGhvdXJDeWNsZQogICAgLy8gaWYgc28sIHJlc3BlY3QgdGhlaXIgZGVjaXNpb24KICAgIC8vIGlmIG5vdCwgcmVmZXIgYmFjayB0byB0aGUgcmVzb2x2ZWRPcHRzLCB3aGljaCBhcmUgYmFzZWQgb24gdGhlIGxvY2FsZQogICAgbGV0IGFjdHVhbFR5cGUgPSB0eXBlOwogICAgaWYgKHR5cGUgPT09ICJob3VyIikgewogICAgICBpZiAoZm9ybWF0T3B0cy5ob3VyMTIgIT0gbnVsbCkgewogICAgICAgIGFjdHVhbFR5cGUgPSBmb3JtYXRPcHRzLmhvdXIxMiA/ICJob3VyMTIiIDogImhvdXIyNCI7CiAgICAgIH0gZWxzZSBpZiAoZm9ybWF0T3B0cy5ob3VyQ3ljbGUgIT0gbnVsbCkgewogICAgICAgIGlmIChmb3JtYXRPcHRzLmhvdXJDeWNsZSA9PT0gImgxMSIgfHwgZm9ybWF0T3B0cy5ob3VyQ3ljbGUgPT09ICJoMTIiKSB7CiAgICAgICAgICBhY3R1YWxUeXBlID0gImhvdXIxMiI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFjdHVhbFR5cGUgPSAiaG91cjI0IjsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gdG9rZW5zIG9ubHkgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIDI0IGhvdXJzIG9yIG5vdCwKICAgICAgICAvLyBzbyB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBob3VyQ3ljbGUgaGVyZSwgd2hpY2ggaXMgbGVzcyBzdXBwb3J0ZWQgYW55d2F5cwogICAgICAgIGFjdHVhbFR5cGUgPSByZXNvbHZlZE9wdHMuaG91cjEyID8gImhvdXIxMiIgOiAiaG91cjI0IjsKICAgICAgfQogICAgfQogICAgbGV0IHZhbCA9IHBhcnRUeXBlU3R5bGVUb1Rva2VuVmFsW2FjdHVhbFR5cGVdOwogICAgaWYgKHR5cGVvZiB2YWwgPT09ICJvYmplY3QiKSB7CiAgICAgIHZhbCA9IHZhbFtzdHlsZV07CiAgICB9CgogICAgaWYgKHZhbCkgewogICAgICByZXR1cm4gewogICAgICAgIGxpdGVyYWw6IGZhbHNlLAogICAgICAgIHZhbCwKICAgICAgfTsKICAgIH0KCiAgICByZXR1cm4gdW5kZWZpbmVkOwogIH0KCiAgZnVuY3Rpb24gYnVpbGRSZWdleCh1bml0cykgewogICAgY29uc3QgcmUgPSB1bml0cy5tYXAoKHUpID0+IHUucmVnZXgpLnJlZHVjZSgoZiwgcikgPT4gYCR7Zn0oJHtyLnNvdXJjZX0pYCwgIiIpOwogICAgcmV0dXJuIFtgXiR7cmV9JGAsIHVuaXRzXTsKICB9CgogIGZ1bmN0aW9uIG1hdGNoKGlucHV0LCByZWdleCwgaGFuZGxlcnMpIHsKICAgIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaChyZWdleCk7CgogICAgaWYgKG1hdGNoZXMpIHsKICAgICAgY29uc3QgYWxsID0ge307CiAgICAgIGxldCBtYXRjaEluZGV4ID0gMTsKICAgICAgZm9yIChjb25zdCBpIGluIGhhbmRsZXJzKSB7CiAgICAgICAgaWYgKGhhc093blByb3BlcnR5KGhhbmRsZXJzLCBpKSkgewogICAgICAgICAgY29uc3QgaCA9IGhhbmRsZXJzW2ldLAogICAgICAgICAgICBncm91cHMgPSBoLmdyb3VwcyA/IGguZ3JvdXBzICsgMSA6IDE7CiAgICAgICAgICBpZiAoIWgubGl0ZXJhbCAmJiBoLnRva2VuKSB7CiAgICAgICAgICAgIGFsbFtoLnRva2VuLnZhbFswXV0gPSBoLmRlc2VyKG1hdGNoZXMuc2xpY2UobWF0Y2hJbmRleCwgbWF0Y2hJbmRleCArIGdyb3VwcykpOwogICAgICAgICAgfQogICAgICAgICAgbWF0Y2hJbmRleCArPSBncm91cHM7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBbbWF0Y2hlcywgYWxsXTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBbbWF0Y2hlcywge31dOwogICAgfQogIH0KCiAgZnVuY3Rpb24gZGF0ZVRpbWVGcm9tTWF0Y2hlcyhtYXRjaGVzKSB7CiAgICBjb25zdCB0b0ZpZWxkID0gKHRva2VuKSA9PiB7CiAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICBjYXNlICJTIjoKICAgICAgICAgIHJldHVybiAibWlsbGlzZWNvbmQiOwogICAgICAgIGNhc2UgInMiOgogICAgICAgICAgcmV0dXJuICJzZWNvbmQiOwogICAgICAgIGNhc2UgIm0iOgogICAgICAgICAgcmV0dXJuICJtaW51dGUiOwogICAgICAgIGNhc2UgImgiOgogICAgICAgIGNhc2UgIkgiOgogICAgICAgICAgcmV0dXJuICJob3VyIjsKICAgICAgICBjYXNlICJkIjoKICAgICAgICAgIHJldHVybiAiZGF5IjsKICAgICAgICBjYXNlICJvIjoKICAgICAgICAgIHJldHVybiAib3JkaW5hbCI7CiAgICAgICAgY2FzZSAiTCI6CiAgICAgICAgY2FzZSAiTSI6CiAgICAgICAgICByZXR1cm4gIm1vbnRoIjsKICAgICAgICBjYXNlICJ5IjoKICAgICAgICAgIHJldHVybiAieWVhciI7CiAgICAgICAgY2FzZSAiRSI6CiAgICAgICAgY2FzZSAiYyI6CiAgICAgICAgICByZXR1cm4gIndlZWtkYXkiOwogICAgICAgIGNhc2UgIlciOgogICAgICAgICAgcmV0dXJuICJ3ZWVrTnVtYmVyIjsKICAgICAgICBjYXNlICJrIjoKICAgICAgICAgIHJldHVybiAid2Vla1llYXIiOwogICAgICAgIGNhc2UgInEiOgogICAgICAgICAgcmV0dXJuICJxdWFydGVyIjsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH07CgogICAgbGV0IHpvbmUgPSBudWxsOwogICAgbGV0IHNwZWNpZmljT2Zmc2V0OwogICAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnopKSB7CiAgICAgIHpvbmUgPSBJQU5BWm9uZS5jcmVhdGUobWF0Y2hlcy56KTsKICAgIH0KCiAgICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMuWikpIHsKICAgICAgaWYgKCF6b25lKSB7CiAgICAgICAgem9uZSA9IG5ldyBGaXhlZE9mZnNldFpvbmUobWF0Y2hlcy5aKTsKICAgICAgfQogICAgICBzcGVjaWZpY09mZnNldCA9IG1hdGNoZXMuWjsKICAgIH0KCiAgICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMucSkpIHsKICAgICAgbWF0Y2hlcy5NID0gKG1hdGNoZXMucSAtIDEpICogMyArIDE7CiAgICB9CgogICAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLmgpKSB7CiAgICAgIGlmIChtYXRjaGVzLmggPCAxMiAmJiBtYXRjaGVzLmEgPT09IDEpIHsKICAgICAgICBtYXRjaGVzLmggKz0gMTI7CiAgICAgIH0gZWxzZSBpZiAobWF0Y2hlcy5oID09PSAxMiAmJiBtYXRjaGVzLmEgPT09IDApIHsKICAgICAgICBtYXRjaGVzLmggPSAwOwogICAgICB9CiAgICB9CgogICAgaWYgKG1hdGNoZXMuRyA9PT0gMCAmJiBtYXRjaGVzLnkpIHsKICAgICAgbWF0Y2hlcy55ID0gLW1hdGNoZXMueTsKICAgIH0KCiAgICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMudSkpIHsKICAgICAgbWF0Y2hlcy5TID0gcGFyc2VNaWxsaXMobWF0Y2hlcy51KTsKICAgIH0KCiAgICBjb25zdCB2YWxzID0gT2JqZWN0LmtleXMobWF0Y2hlcykucmVkdWNlKChyLCBrKSA9PiB7CiAgICAgIGNvbnN0IGYgPSB0b0ZpZWxkKGspOwogICAgICBpZiAoZikgewogICAgICAgIHJbZl0gPSBtYXRjaGVzW2tdOwogICAgICB9CgogICAgICByZXR1cm4gcjsKICAgIH0sIHt9KTsKCiAgICByZXR1cm4gW3ZhbHMsIHpvbmUsIHNwZWNpZmljT2Zmc2V0XTsKICB9CgogIGxldCBkdW1teURhdGVUaW1lQ2FjaGUgPSBudWxsOwoKICBmdW5jdGlvbiBnZXREdW1teURhdGVUaW1lKCkgewogICAgaWYgKCFkdW1teURhdGVUaW1lQ2FjaGUpIHsKICAgICAgZHVtbXlEYXRlVGltZUNhY2hlID0gRGF0ZVRpbWUuZnJvbU1pbGxpcygxNTU1NTU1NTU1NTU1KTsKICAgIH0KCiAgICByZXR1cm4gZHVtbXlEYXRlVGltZUNhY2hlOwogIH0KCiAgZnVuY3Rpb24gbWF5YmVFeHBhbmRNYWNyb1Rva2VuKHRva2VuLCBsb2NhbGUpIHsKICAgIGlmICh0b2tlbi5saXRlcmFsKSB7CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KCiAgICBjb25zdCBmb3JtYXRPcHRzID0gRm9ybWF0dGVyLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4udmFsKTsKICAgIGNvbnN0IHRva2VucyA9IGZvcm1hdE9wdHNUb1Rva2Vucyhmb3JtYXRPcHRzLCBsb2NhbGUpOwoKICAgIGlmICh0b2tlbnMgPT0gbnVsbCB8fCB0b2tlbnMuaW5jbHVkZXModW5kZWZpbmVkKSkgewogICAgICByZXR1cm4gdG9rZW47CiAgICB9CgogICAgcmV0dXJuIHRva2VuczsKICB9CgogIGZ1bmN0aW9uIGV4cGFuZE1hY3JvVG9rZW5zKHRva2VucywgbG9jYWxlKSB7CiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi50b2tlbnMubWFwKCh0KSA9PiBtYXliZUV4cGFuZE1hY3JvVG9rZW4odCwgbG9jYWxlKSkpOwogIH0KCiAgLyoqCiAgICogQHByaXZhdGUKICAgKi8KCiAgZnVuY3Rpb24gZXhwbGFpbkZyb21Ub2tlbnMobG9jYWxlLCBpbnB1dCwgZm9ybWF0KSB7CiAgICBjb25zdCB0b2tlbnMgPSBleHBhbmRNYWNyb1Rva2VucyhGb3JtYXR0ZXIucGFyc2VGb3JtYXQoZm9ybWF0KSwgbG9jYWxlKSwKICAgICAgdW5pdHMgPSB0b2tlbnMubWFwKCh0KSA9PiB1bml0Rm9yVG9rZW4odCwgbG9jYWxlKSksCiAgICAgIGRpc3F1YWxpZnlpbmdVbml0ID0gdW5pdHMuZmluZCgodCkgPT4gdC5pbnZhbGlkUmVhc29uKTsKCiAgICBpZiAoZGlzcXVhbGlmeWluZ1VuaXQpIHsKICAgICAgcmV0dXJuIHsgaW5wdXQsIHRva2VucywgaW52YWxpZFJlYXNvbjogZGlzcXVhbGlmeWluZ1VuaXQuaW52YWxpZFJlYXNvbiB9OwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgW3JlZ2V4U3RyaW5nLCBoYW5kbGVyc10gPSBidWlsZFJlZ2V4KHVuaXRzKSwKICAgICAgICByZWdleCA9IFJlZ0V4cChyZWdleFN0cmluZywgImkiKSwKICAgICAgICBbcmF3TWF0Y2hlcywgbWF0Y2hlc10gPSBtYXRjaChpbnB1dCwgcmVnZXgsIGhhbmRsZXJzKSwKICAgICAgICBbcmVzdWx0LCB6b25lLCBzcGVjaWZpY09mZnNldF0gPSBtYXRjaGVzCiAgICAgICAgICA/IGRhdGVUaW1lRnJvbU1hdGNoZXMobWF0Y2hlcykKICAgICAgICAgIDogW251bGwsIG51bGwsIHVuZGVmaW5lZF07CiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShtYXRjaGVzLCAiYSIpICYmIGhhc093blByb3BlcnR5KG1hdGNoZXMsICJIIikpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoCiAgICAgICAgICAiQ2FuJ3QgaW5jbHVkZSBtZXJpZGllbSB3aGVuIHNwZWNpZnlpbmcgMjQtaG91ciBmb3JtYXQiCiAgICAgICAgKTsKICAgICAgfQogICAgICByZXR1cm4geyBpbnB1dCwgdG9rZW5zLCByZWdleCwgcmF3TWF0Y2hlcywgbWF0Y2hlcywgcmVzdWx0LCB6b25lLCBzcGVjaWZpY09mZnNldCB9OwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VGcm9tVG9rZW5zKGxvY2FsZSwgaW5wdXQsIGZvcm1hdCkgewogICAgY29uc3QgeyByZXN1bHQsIHpvbmUsIHNwZWNpZmljT2Zmc2V0LCBpbnZhbGlkUmVhc29uIH0gPSBleHBsYWluRnJvbVRva2Vucyhsb2NhbGUsIGlucHV0LCBmb3JtYXQpOwogICAgcmV0dXJuIFtyZXN1bHQsIHpvbmUsIHNwZWNpZmljT2Zmc2V0LCBpbnZhbGlkUmVhc29uXTsKICB9CgogIGZ1bmN0aW9uIGZvcm1hdE9wdHNUb1Rva2Vucyhmb3JtYXRPcHRzLCBsb2NhbGUpIHsKICAgIGlmICghZm9ybWF0T3B0cykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBjb25zdCBmb3JtYXR0ZXIgPSBGb3JtYXR0ZXIuY3JlYXRlKGxvY2FsZSwgZm9ybWF0T3B0cyk7CiAgICBjb25zdCBkZiA9IGZvcm1hdHRlci5kdEZvcm1hdHRlcihnZXREdW1teURhdGVUaW1lKCkpOwogICAgY29uc3QgcGFydHMgPSBkZi5mb3JtYXRUb1BhcnRzKCk7CiAgICBjb25zdCByZXNvbHZlZE9wdHMgPSBkZi5yZXNvbHZlZE9wdGlvbnMoKTsKICAgIHJldHVybiBwYXJ0cy5tYXAoKHApID0+IHRva2VuRm9yUGFydChwLCBmb3JtYXRPcHRzLCByZXNvbHZlZE9wdHMpKTsKICB9CgogIGNvbnN0IG5vbkxlYXBMYWRkZXIgPSBbMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzRdLAogICAgbGVhcExhZGRlciA9IFswLCAzMSwgNjAsIDkxLCAxMjEsIDE1MiwgMTgyLCAyMTMsIDI0NCwgMjc0LCAzMDUsIDMzNV07CgogIGZ1bmN0aW9uIHVuaXRPdXRPZlJhbmdlKHVuaXQsIHZhbHVlKSB7CiAgICByZXR1cm4gbmV3IEludmFsaWQoCiAgICAgICJ1bml0IG91dCBvZiByYW5nZSIsCiAgICAgIGB5b3Ugc3BlY2lmaWVkICR7dmFsdWV9IChvZiB0eXBlICR7dHlwZW9mIHZhbHVlfSkgYXMgYSAke3VuaXR9LCB3aGljaCBpcyBpbnZhbGlkYAogICAgKTsKICB9CgogIGZ1bmN0aW9uIGRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KSB7CiAgICBjb25zdCBkID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGggLSAxLCBkYXkpKTsKCiAgICBpZiAoeWVhciA8IDEwMCAmJiB5ZWFyID49IDApIHsKICAgICAgZC5zZXRVVENGdWxsWWVhcihkLmdldFVUQ0Z1bGxZZWFyKCkgLSAxOTAwKTsKICAgIH0KCiAgICBjb25zdCBqcyA9IGQuZ2V0VVRDRGF5KCk7CgogICAgcmV0dXJuIGpzID09PSAwID8gNyA6IGpzOwogIH0KCiAgZnVuY3Rpb24gY29tcHV0ZU9yZGluYWwoeWVhciwgbW9udGgsIGRheSkgewogICAgcmV0dXJuIGRheSArIChpc0xlYXBZZWFyKHllYXIpID8gbGVhcExhZGRlciA6IG5vbkxlYXBMYWRkZXIpW21vbnRoIC0gMV07CiAgfQoKICBmdW5jdGlvbiB1bmNvbXB1dGVPcmRpbmFsKHllYXIsIG9yZGluYWwpIHsKICAgIGNvbnN0IHRhYmxlID0gaXNMZWFwWWVhcih5ZWFyKSA/IGxlYXBMYWRkZXIgOiBub25MZWFwTGFkZGVyLAogICAgICBtb250aDAgPSB0YWJsZS5maW5kSW5kZXgoKGkpID0+IGkgPCBvcmRpbmFsKSwKICAgICAgZGF5ID0gb3JkaW5hbCAtIHRhYmxlW21vbnRoMF07CiAgICByZXR1cm4geyBtb250aDogbW9udGgwICsgMSwgZGF5IH07CiAgfQoKICAvKioKICAgKiBAcHJpdmF0ZQogICAqLwoKICBmdW5jdGlvbiBncmVnb3JpYW5Ub1dlZWsoZ3JlZ09iaikgewogICAgY29uc3QgeyB5ZWFyLCBtb250aCwgZGF5IH0gPSBncmVnT2JqLAogICAgICBvcmRpbmFsID0gY29tcHV0ZU9yZGluYWwoeWVhciwgbW9udGgsIGRheSksCiAgICAgIHdlZWtkYXkgPSBkYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSk7CgogICAgbGV0IHdlZWtOdW1iZXIgPSBNYXRoLmZsb29yKChvcmRpbmFsIC0gd2Vla2RheSArIDEwKSAvIDcpLAogICAgICB3ZWVrWWVhcjsKCiAgICBpZiAod2Vla051bWJlciA8IDEpIHsKICAgICAgd2Vla1llYXIgPSB5ZWFyIC0gMTsKICAgICAgd2Vla051bWJlciA9IHdlZWtzSW5XZWVrWWVhcih3ZWVrWWVhcik7CiAgICB9IGVsc2UgaWYgKHdlZWtOdW1iZXIgPiB3ZWVrc0luV2Vla1llYXIoeWVhcikpIHsKICAgICAgd2Vla1llYXIgPSB5ZWFyICsgMTsKICAgICAgd2Vla051bWJlciA9IDE7CiAgICB9IGVsc2UgewogICAgICB3ZWVrWWVhciA9IHllYXI7CiAgICB9CgogICAgcmV0dXJuIHsgd2Vla1llYXIsIHdlZWtOdW1iZXIsIHdlZWtkYXksIC4uLnRpbWVPYmplY3QoZ3JlZ09iaikgfTsKICB9CgogIGZ1bmN0aW9uIHdlZWtUb0dyZWdvcmlhbih3ZWVrRGF0YSkgewogICAgY29uc3QgeyB3ZWVrWWVhciwgd2Vla051bWJlciwgd2Vla2RheSB9ID0gd2Vla0RhdGEsCiAgICAgIHdlZWtkYXlPZkphbjQgPSBkYXlPZldlZWsod2Vla1llYXIsIDEsIDQpLAogICAgICB5ZWFySW5EYXlzID0gZGF5c0luWWVhcih3ZWVrWWVhcik7CgogICAgbGV0IG9yZGluYWwgPSB3ZWVrTnVtYmVyICogNyArIHdlZWtkYXkgLSB3ZWVrZGF5T2ZKYW40IC0gMywKICAgICAgeWVhcjsKCiAgICBpZiAob3JkaW5hbCA8IDEpIHsKICAgICAgeWVhciA9IHdlZWtZZWFyIC0gMTsKICAgICAgb3JkaW5hbCArPSBkYXlzSW5ZZWFyKHllYXIpOwogICAgfSBlbHNlIGlmIChvcmRpbmFsID4geWVhckluRGF5cykgewogICAgICB5ZWFyID0gd2Vla1llYXIgKyAxOwogICAgICBvcmRpbmFsIC09IGRheXNJblllYXIod2Vla1llYXIpOwogICAgfSBlbHNlIHsKICAgICAgeWVhciA9IHdlZWtZZWFyOwogICAgfQoKICAgIGNvbnN0IHsgbW9udGgsIGRheSB9ID0gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKTsKICAgIHJldHVybiB7IHllYXIsIG1vbnRoLCBkYXksIC4uLnRpbWVPYmplY3Qod2Vla0RhdGEpIH07CiAgfQoKICBmdW5jdGlvbiBncmVnb3JpYW5Ub09yZGluYWwoZ3JlZ0RhdGEpIHsKICAgIGNvbnN0IHsgeWVhciwgbW9udGgsIGRheSB9ID0gZ3JlZ0RhdGE7CiAgICBjb25zdCBvcmRpbmFsID0gY29tcHV0ZU9yZGluYWwoeWVhciwgbW9udGgsIGRheSk7CiAgICByZXR1cm4geyB5ZWFyLCBvcmRpbmFsLCAuLi50aW1lT2JqZWN0KGdyZWdEYXRhKSB9OwogIH0KCiAgZnVuY3Rpb24gb3JkaW5hbFRvR3JlZ29yaWFuKG9yZGluYWxEYXRhKSB7CiAgICBjb25zdCB7IHllYXIsIG9yZGluYWwgfSA9IG9yZGluYWxEYXRhOwogICAgY29uc3QgeyBtb250aCwgZGF5IH0gPSB1bmNvbXB1dGVPcmRpbmFsKHllYXIsIG9yZGluYWwpOwogICAgcmV0dXJuIHsgeWVhciwgbW9udGgsIGRheSwgLi4udGltZU9iamVjdChvcmRpbmFsRGF0YSkgfTsKICB9CgogIGZ1bmN0aW9uIGhhc0ludmFsaWRXZWVrRGF0YShvYmopIHsKICAgIGNvbnN0IHZhbGlkWWVhciA9IGlzSW50ZWdlcihvYmoud2Vla1llYXIpLAogICAgICB2YWxpZFdlZWsgPSBpbnRlZ2VyQmV0d2VlbihvYmoud2Vla051bWJlciwgMSwgd2Vla3NJbldlZWtZZWFyKG9iai53ZWVrWWVhcikpLAogICAgICB2YWxpZFdlZWtkYXkgPSBpbnRlZ2VyQmV0d2VlbihvYmoud2Vla2RheSwgMSwgNyk7CgogICAgaWYgKCF2YWxpZFllYXIpIHsKICAgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJ3ZWVrWWVhciIsIG9iai53ZWVrWWVhcik7CiAgICB9IGVsc2UgaWYgKCF2YWxpZFdlZWspIHsKICAgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJ3ZWVrIiwgb2JqLndlZWspOwogICAgfSBlbHNlIGlmICghdmFsaWRXZWVrZGF5KSB7CiAgICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZSgid2Vla2RheSIsIG9iai53ZWVrZGF5KTsKICAgIH0gZWxzZSByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiBoYXNJbnZhbGlkT3JkaW5hbERhdGEob2JqKSB7CiAgICBjb25zdCB2YWxpZFllYXIgPSBpc0ludGVnZXIob2JqLnllYXIpLAogICAgICB2YWxpZE9yZGluYWwgPSBpbnRlZ2VyQmV0d2VlbihvYmoub3JkaW5hbCwgMSwgZGF5c0luWWVhcihvYmoueWVhcikpOwoKICAgIGlmICghdmFsaWRZZWFyKSB7CiAgICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZSgieWVhciIsIG9iai55ZWFyKTsKICAgIH0gZWxzZSBpZiAoIXZhbGlkT3JkaW5hbCkgewogICAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoIm9yZGluYWwiLCBvYmoub3JkaW5hbCk7CiAgICB9IGVsc2UgcmV0dXJuIGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gaGFzSW52YWxpZEdyZWdvcmlhbkRhdGEob2JqKSB7CiAgICBjb25zdCB2YWxpZFllYXIgPSBpc0ludGVnZXIob2JqLnllYXIpLAogICAgICB2YWxpZE1vbnRoID0gaW50ZWdlckJldHdlZW4ob2JqLm1vbnRoLCAxLCAxMiksCiAgICAgIHZhbGlkRGF5ID0gaW50ZWdlckJldHdlZW4ob2JqLmRheSwgMSwgZGF5c0luTW9udGgob2JqLnllYXIsIG9iai5tb250aCkpOwoKICAgIGlmICghdmFsaWRZZWFyKSB7CiAgICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZSgieWVhciIsIG9iai55ZWFyKTsKICAgIH0gZWxzZSBpZiAoIXZhbGlkTW9udGgpIHsKICAgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJtb250aCIsIG9iai5tb250aCk7CiAgICB9IGVsc2UgaWYgKCF2YWxpZERheSkgewogICAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoImRheSIsIG9iai5kYXkpOwogICAgfSBlbHNlIHJldHVybiBmYWxzZTsKICB9CgogIGZ1bmN0aW9uIGhhc0ludmFsaWRUaW1lRGF0YShvYmopIHsKICAgIGNvbnN0IHsgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kIH0gPSBvYmo7CiAgICBjb25zdCB2YWxpZEhvdXIgPQogICAgICAgIGludGVnZXJCZXR3ZWVuKGhvdXIsIDAsIDIzKSB8fAogICAgICAgIChob3VyID09PSAyNCAmJiBtaW51dGUgPT09IDAgJiYgc2Vjb25kID09PSAwICYmIG1pbGxpc2Vjb25kID09PSAwKSwKICAgICAgdmFsaWRNaW51dGUgPSBpbnRlZ2VyQmV0d2VlbihtaW51dGUsIDAsIDU5KSwKICAgICAgdmFsaWRTZWNvbmQgPSBpbnRlZ2VyQmV0d2VlbihzZWNvbmQsIDAsIDU5KSwKICAgICAgdmFsaWRNaWxsaXNlY29uZCA9IGludGVnZXJCZXR3ZWVuKG1pbGxpc2Vjb25kLCAwLCA5OTkpOwoKICAgIGlmICghdmFsaWRIb3VyKSB7CiAgICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZSgiaG91ciIsIGhvdXIpOwogICAgfSBlbHNlIGlmICghdmFsaWRNaW51dGUpIHsKICAgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJtaW51dGUiLCBtaW51dGUpOwogICAgfSBlbHNlIGlmICghdmFsaWRTZWNvbmQpIHsKICAgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJzZWNvbmQiLCBzZWNvbmQpOwogICAgfSBlbHNlIGlmICghdmFsaWRNaWxsaXNlY29uZCkgewogICAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoIm1pbGxpc2Vjb25kIiwgbWlsbGlzZWNvbmQpOwogICAgfSBlbHNlIHJldHVybiBmYWxzZTsKICB9CgogIGNvbnN0IElOVkFMSUQgPSAiSW52YWxpZCBEYXRlVGltZSI7CiAgY29uc3QgTUFYX0RBVEUgPSA4LjY0ZTE1OwoKICBmdW5jdGlvbiB1bnN1cHBvcnRlZFpvbmUoem9uZSkgewogICAgcmV0dXJuIG5ldyBJbnZhbGlkKCJ1bnN1cHBvcnRlZCB6b25lIiwgYHRoZSB6b25lICIke3pvbmUubmFtZX0iIGlzIG5vdCBzdXBwb3J0ZWRgKTsKICB9CgogIC8vIHdlIGNhY2hlIHdlZWsgZGF0YSBvbiB0aGUgRFQgb2JqZWN0IGFuZCB0aGlzIGludGVybWVkaWF0ZXMgdGhlIGNhY2hlCiAgZnVuY3Rpb24gcG9zc2libHlDYWNoZWRXZWVrRGF0YShkdCkgewogICAgaWYgKGR0LndlZWtEYXRhID09PSBudWxsKSB7CiAgICAgIGR0LndlZWtEYXRhID0gZ3JlZ29yaWFuVG9XZWVrKGR0LmMpOwogICAgfQogICAgcmV0dXJuIGR0LndlZWtEYXRhOwogIH0KCiAgLy8gY2xvbmUgcmVhbGx5IG1lYW5zLCAibWFrZSBhIG5ldyBvYmplY3Qgd2l0aCB0aGVzZSBtb2RpZmljYXRpb25zIi4gYWxsICJzZXR0ZXJzIiByZWFsbHkgdXNlIHRoaXMKICAvLyB0byBjcmVhdGUgYSBuZXcgb2JqZWN0IHdoaWxlIG9ubHkgY2hhbmdpbmcgc29tZSBvZiB0aGUgcHJvcGVydGllcwogIGZ1bmN0aW9uIGNsb25lKGluc3QsIGFsdHMpIHsKICAgIGNvbnN0IGN1cnJlbnQgPSB7CiAgICAgIHRzOiBpbnN0LnRzLAogICAgICB6b25lOiBpbnN0LnpvbmUsCiAgICAgIGM6IGluc3QuYywKICAgICAgbzogaW5zdC5vLAogICAgICBsb2M6IGluc3QubG9jLAogICAgICBpbnZhbGlkOiBpbnN0LmludmFsaWQsCiAgICB9OwogICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7IC4uLmN1cnJlbnQsIC4uLmFsdHMsIG9sZDogY3VycmVudCB9KTsKICB9CgogIC8vIGZpbmQgdGhlIHJpZ2h0IG9mZnNldCBhIGdpdmVuIGxvY2FsIHRpbWUuIFRoZSBvIGlucHV0IGlzIG91ciBndWVzcywgd2hpY2ggZGV0ZXJtaW5lcyB3aGljaAogIC8vIG9mZnNldCB3ZSdsbCBwaWNrIGluIGFtYmlndW91cyBjYXNlcyAoZS5nLiB0aGVyZSBhcmUgdHdvIDMgQU1zIGIvYyBGYWxsYmFjayBEU1QpCiAgZnVuY3Rpb24gZml4T2Zmc2V0KGxvY2FsVFMsIG8sIHR6KSB7CiAgICAvLyBPdXIgVVRDIHRpbWUgaXMganVzdCBhIGd1ZXNzIGJlY2F1c2Ugb3VyIG9mZnNldCBpcyBqdXN0IGEgZ3Vlc3MKICAgIGxldCB1dGNHdWVzcyA9IGxvY2FsVFMgLSBvICogNjAgKiAxMDAwOwoKICAgIC8vIFRlc3Qgd2hldGhlciB0aGUgem9uZSBtYXRjaGVzIHRoZSBvZmZzZXQgZm9yIHRoaXMgdHMKICAgIGNvbnN0IG8yID0gdHoub2Zmc2V0KHV0Y0d1ZXNzKTsKCiAgICAvLyBJZiBzbywgb2Zmc2V0IGRpZG4ndCBjaGFuZ2UgYW5kIHdlJ3JlIGRvbmUKICAgIGlmIChvID09PSBvMikgewogICAgICByZXR1cm4gW3V0Y0d1ZXNzLCBvXTsKICAgIH0KCiAgICAvLyBJZiBub3QsIGNoYW5nZSB0aGUgdHMgYnkgdGhlIGRpZmZlcmVuY2UgaW4gdGhlIG9mZnNldAogICAgdXRjR3Vlc3MgLT0gKG8yIC0gbykgKiA2MCAqIDEwMDA7CgogICAgLy8gSWYgdGhhdCBnaXZlcyB1cyB0aGUgbG9jYWwgdGltZSB3ZSB3YW50LCB3ZSdyZSBkb25lCiAgICBjb25zdCBvMyA9IHR6Lm9mZnNldCh1dGNHdWVzcyk7CiAgICBpZiAobzIgPT09IG8zKSB7CiAgICAgIHJldHVybiBbdXRjR3Vlc3MsIG8yXTsKICAgIH0KCiAgICAvLyBJZiBpdCdzIGRpZmZlcmVudCwgd2UncmUgaW4gYSBob2xlIHRpbWUuIFRoZSBvZmZzZXQgaGFzIGNoYW5nZWQsIGJ1dCB0aGUgd2UgZG9uJ3QgYWRqdXN0IHRoZSB0aW1lCiAgICByZXR1cm4gW2xvY2FsVFMgLSBNYXRoLm1pbihvMiwgbzMpICogNjAgKiAxMDAwLCBNYXRoLm1heChvMiwgbzMpXTsKICB9CgogIC8vIGNvbnZlcnQgYW4gZXBvY2ggdGltZXN0YW1wIGludG8gYSBjYWxlbmRhciBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gb2Zmc2V0CiAgZnVuY3Rpb24gdHNUb09iaih0cywgb2Zmc2V0KSB7CiAgICB0cyArPSBvZmZzZXQgKiA2MCAqIDEwMDA7CgogICAgY29uc3QgZCA9IG5ldyBEYXRlKHRzKTsKCiAgICByZXR1cm4gewogICAgICB5ZWFyOiBkLmdldFVUQ0Z1bGxZZWFyKCksCiAgICAgIG1vbnRoOiBkLmdldFVUQ01vbnRoKCkgKyAxLAogICAgICBkYXk6IGQuZ2V0VVRDRGF0ZSgpLAogICAgICBob3VyOiBkLmdldFVUQ0hvdXJzKCksCiAgICAgIG1pbnV0ZTogZC5nZXRVVENNaW51dGVzKCksCiAgICAgIHNlY29uZDogZC5nZXRVVENTZWNvbmRzKCksCiAgICAgIG1pbGxpc2Vjb25kOiBkLmdldFVUQ01pbGxpc2Vjb25kcygpLAogICAgfTsKICB9CgogIC8vIGNvbnZlcnQgYSBjYWxlbmRhciBvYmplY3QgdG8gYSBlcG9jaCB0aW1lc3RhbXAKICBmdW5jdGlvbiBvYmpUb1RTKG9iaiwgb2Zmc2V0LCB6b25lKSB7CiAgICByZXR1cm4gZml4T2Zmc2V0KG9ialRvTG9jYWxUUyhvYmopLCBvZmZzZXQsIHpvbmUpOwogIH0KCiAgLy8gY3JlYXRlIGEgbmV3IERUIGluc3RhbmNlIGJ5IGFkZGluZyBhIGR1cmF0aW9uLCBhZGp1c3RpbmcgZm9yIERTVHMKICBmdW5jdGlvbiBhZGp1c3RUaW1lKGluc3QsIGR1cikgewogICAgY29uc3Qgb1ByZSA9IGluc3QubywKICAgICAgeWVhciA9IGluc3QuYy55ZWFyICsgTWF0aC50cnVuYyhkdXIueWVhcnMpLAogICAgICBtb250aCA9IGluc3QuYy5tb250aCArIE1hdGgudHJ1bmMoZHVyLm1vbnRocykgKyBNYXRoLnRydW5jKGR1ci5xdWFydGVycykgKiAzLAogICAgICBjID0gewogICAgICAgIC4uLmluc3QuYywKICAgICAgICB5ZWFyLAogICAgICAgIG1vbnRoLAogICAgICAgIGRheToKICAgICAgICAgIE1hdGgubWluKGluc3QuYy5kYXksIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSkgKwogICAgICAgICAgTWF0aC50cnVuYyhkdXIuZGF5cykgKwogICAgICAgICAgTWF0aC50cnVuYyhkdXIud2Vla3MpICogNywKICAgICAgfSwKICAgICAgbWlsbGlzVG9BZGQgPSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsKICAgICAgICB5ZWFyczogZHVyLnllYXJzIC0gTWF0aC50cnVuYyhkdXIueWVhcnMpLAogICAgICAgIHF1YXJ0ZXJzOiBkdXIucXVhcnRlcnMgLSBNYXRoLnRydW5jKGR1ci5xdWFydGVycyksCiAgICAgICAgbW9udGhzOiBkdXIubW9udGhzIC0gTWF0aC50cnVuYyhkdXIubW9udGhzKSwKICAgICAgICB3ZWVrczogZHVyLndlZWtzIC0gTWF0aC50cnVuYyhkdXIud2Vla3MpLAogICAgICAgIGRheXM6IGR1ci5kYXlzIC0gTWF0aC50cnVuYyhkdXIuZGF5cyksCiAgICAgICAgaG91cnM6IGR1ci5ob3VycywKICAgICAgICBtaW51dGVzOiBkdXIubWludXRlcywKICAgICAgICBzZWNvbmRzOiBkdXIuc2Vjb25kcywKICAgICAgICBtaWxsaXNlY29uZHM6IGR1ci5taWxsaXNlY29uZHMsCiAgICAgIH0pLmFzKCJtaWxsaXNlY29uZHMiKSwKICAgICAgbG9jYWxUUyA9IG9ialRvTG9jYWxUUyhjKTsKCiAgICBsZXQgW3RzLCBvXSA9IGZpeE9mZnNldChsb2NhbFRTLCBvUHJlLCBpbnN0LnpvbmUpOwoKICAgIGlmIChtaWxsaXNUb0FkZCAhPT0gMCkgewogICAgICB0cyArPSBtaWxsaXNUb0FkZDsKICAgICAgLy8gdGhhdCBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIG9mZnNldCBieSBnb2luZyBvdmVyIGEgRFNULCBidXQgd2Ugd2FudCB0byBrZWVwIHRoZSB0cyB0aGUgc2FtZQogICAgICBvID0gaW5zdC56b25lLm9mZnNldCh0cyk7CiAgICB9CgogICAgcmV0dXJuIHsgdHMsIG8gfTsKICB9CgogIC8vIGhlbHBlciB1c2VmdWwgaW4gdHVybmluZyB0aGUgcmVzdWx0cyBvZiBwYXJzaW5nIGludG8gcmVhbCBkYXRlcwogIC8vIGJ5IGhhbmRsaW5nIHRoZSB6b25lIG9wdGlvbnMKICBmdW5jdGlvbiBwYXJzZURhdGFUb0RhdGVUaW1lKHBhcnNlZCwgcGFyc2VkWm9uZSwgb3B0cywgZm9ybWF0LCB0ZXh0LCBzcGVjaWZpY09mZnNldCkgewogICAgY29uc3QgeyBzZXRab25lLCB6b25lIH0gPSBvcHRzOwogICAgaWYgKChwYXJzZWQgJiYgT2JqZWN0LmtleXMocGFyc2VkKS5sZW5ndGggIT09IDApIHx8IHBhcnNlZFpvbmUpIHsKICAgICAgY29uc3QgaW50ZXJwcmV0YXRpb25ab25lID0gcGFyc2VkWm9uZSB8fCB6b25lLAogICAgICAgIGluc3QgPSBEYXRlVGltZS5mcm9tT2JqZWN0KHBhcnNlZCwgewogICAgICAgICAgLi4ub3B0cywKICAgICAgICAgIHpvbmU6IGludGVycHJldGF0aW9uWm9uZSwKICAgICAgICAgIHNwZWNpZmljT2Zmc2V0LAogICAgICAgIH0pOwogICAgICByZXR1cm4gc2V0Wm9uZSA/IGluc3QgOiBpbnN0LnNldFpvbmUoem9uZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCgKICAgICAgICBuZXcgSW52YWxpZCgidW5wYXJzYWJsZSIsIGB0aGUgaW5wdXQgIiR7dGV4dH0iIGNhbid0IGJlIHBhcnNlZCBhcyAke2Zvcm1hdH1gKQogICAgICApOwogICAgfQogIH0KCiAgLy8gaWYgeW91IHdhbnQgdG8gb3V0cHV0IGEgdGVjaG5pY2FsIGZvcm1hdCAoZS5nLiBSRkMgMjgyMiksIHRoaXMgaGVscGVyCiAgLy8gaGVscHMgaGFuZGxlIHRoZSBkZXRhaWxzCiAgZnVuY3Rpb24gdG9UZWNoRm9ybWF0KGR0LCBmb3JtYXQsIGFsbG93WiA9IHRydWUpIHsKICAgIHJldHVybiBkdC5pc1ZhbGlkCiAgICAgID8gRm9ybWF0dGVyLmNyZWF0ZShMb2NhbGUuY3JlYXRlKCJlbi1VUyIpLCB7CiAgICAgICAgICBhbGxvd1osCiAgICAgICAgICBmb3JjZVNpbXBsZTogdHJ1ZSwKICAgICAgICB9KS5mb3JtYXREYXRlVGltZUZyb21TdHJpbmcoZHQsIGZvcm1hdCkKICAgICAgOiBudWxsOwogIH0KCiAgZnVuY3Rpb24gdG9JU09EYXRlKG8sIGV4dGVuZGVkKSB7CiAgICBjb25zdCBsb25nRm9ybWF0ID0gby5jLnllYXIgPiA5OTk5IHx8IG8uYy55ZWFyIDwgMDsKICAgIGxldCBjID0gIiI7CiAgICBpZiAobG9uZ0Zvcm1hdCAmJiBvLmMueWVhciA+PSAwKSBjICs9ICIrIjsKICAgIGMgKz0gcGFkU3RhcnQoby5jLnllYXIsIGxvbmdGb3JtYXQgPyA2IDogNCk7CgogICAgaWYgKGV4dGVuZGVkKSB7CiAgICAgIGMgKz0gIi0iOwogICAgICBjICs9IHBhZFN0YXJ0KG8uYy5tb250aCk7CiAgICAgIGMgKz0gIi0iOwogICAgICBjICs9IHBhZFN0YXJ0KG8uYy5kYXkpOwogICAgfSBlbHNlIHsKICAgICAgYyArPSBwYWRTdGFydChvLmMubW9udGgpOwogICAgICBjICs9IHBhZFN0YXJ0KG8uYy5kYXkpOwogICAgfQogICAgcmV0dXJuIGM7CiAgfQoKICBmdW5jdGlvbiB0b0lTT1RpbWUoCiAgICBvLAogICAgZXh0ZW5kZWQsCiAgICBzdXBwcmVzc1NlY29uZHMsCiAgICBzdXBwcmVzc01pbGxpc2Vjb25kcywKICAgIGluY2x1ZGVPZmZzZXQsCiAgICBleHRlbmRlZFpvbmUKICApIHsKICAgIGxldCBjID0gcGFkU3RhcnQoby5jLmhvdXIpOwogICAgaWYgKGV4dGVuZGVkKSB7CiAgICAgIGMgKz0gIjoiOwogICAgICBjICs9IHBhZFN0YXJ0KG8uYy5taW51dGUpOwogICAgICBpZiAoby5jLm1pbGxpc2Vjb25kICE9PSAwIHx8IG8uYy5zZWNvbmQgIT09IDAgfHwgIXN1cHByZXNzU2Vjb25kcykgewogICAgICAgIGMgKz0gIjoiOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjICs9IHBhZFN0YXJ0KG8uYy5taW51dGUpOwogICAgfQoKICAgIGlmIChvLmMubWlsbGlzZWNvbmQgIT09IDAgfHwgby5jLnNlY29uZCAhPT0gMCB8fCAhc3VwcHJlc3NTZWNvbmRzKSB7CiAgICAgIGMgKz0gcGFkU3RhcnQoby5jLnNlY29uZCk7CgogICAgICBpZiAoby5jLm1pbGxpc2Vjb25kICE9PSAwIHx8ICFzdXBwcmVzc01pbGxpc2Vjb25kcykgewogICAgICAgIGMgKz0gIi4iOwogICAgICAgIGMgKz0gcGFkU3RhcnQoby5jLm1pbGxpc2Vjb25kLCAzKTsKICAgICAgfQogICAgfQoKICAgIGlmIChpbmNsdWRlT2Zmc2V0KSB7CiAgICAgIGlmIChvLmlzT2Zmc2V0Rml4ZWQgJiYgby5vZmZzZXQgPT09IDAgJiYgIWV4dGVuZGVkWm9uZSkgewogICAgICAgIGMgKz0gIloiOwogICAgICB9IGVsc2UgaWYgKG8ubyA8IDApIHsKICAgICAgICBjICs9ICItIjsKICAgICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoLW8ubyAvIDYwKSk7CiAgICAgICAgYyArPSAiOiI7CiAgICAgICAgYyArPSBwYWRTdGFydChNYXRoLnRydW5jKC1vLm8gJSA2MCkpOwogICAgICB9IGVsc2UgewogICAgICAgIGMgKz0gIisiOwogICAgICAgIGMgKz0gcGFkU3RhcnQoTWF0aC50cnVuYyhvLm8gLyA2MCkpOwogICAgICAgIGMgKz0gIjoiOwogICAgICAgIGMgKz0gcGFkU3RhcnQoTWF0aC50cnVuYyhvLm8gJSA2MCkpOwogICAgICB9CiAgICB9CgogICAgaWYgKGV4dGVuZGVkWm9uZSkgewogICAgICBjICs9ICJbIiArIG8uem9uZS5pYW5hTmFtZSArICJdIjsKICAgIH0KICAgIHJldHVybiBjOwogIH0KCiAgLy8gZGVmYXVsdHMgZm9yIHVuc3BlY2lmaWVkIHVuaXRzIGluIHRoZSBzdXBwb3J0ZWQgY2FsZW5kYXJzCiAgY29uc3QgZGVmYXVsdFVuaXRWYWx1ZXMgPSB7CiAgICAgIG1vbnRoOiAxLAogICAgICBkYXk6IDEsCiAgICAgIGhvdXI6IDAsCiAgICAgIG1pbnV0ZTogMCwKICAgICAgc2Vjb25kOiAwLAogICAgICBtaWxsaXNlY29uZDogMCwKICAgIH0sCiAgICBkZWZhdWx0V2Vla1VuaXRWYWx1ZXMgPSB7CiAgICAgIHdlZWtOdW1iZXI6IDEsCiAgICAgIHdlZWtkYXk6IDEsCiAgICAgIGhvdXI6IDAsCiAgICAgIG1pbnV0ZTogMCwKICAgICAgc2Vjb25kOiAwLAogICAgICBtaWxsaXNlY29uZDogMCwKICAgIH0sCiAgICBkZWZhdWx0T3JkaW5hbFVuaXRWYWx1ZXMgPSB7CiAgICAgIG9yZGluYWw6IDEsCiAgICAgIGhvdXI6IDAsCiAgICAgIG1pbnV0ZTogMCwKICAgICAgc2Vjb25kOiAwLAogICAgICBtaWxsaXNlY29uZDogMCwKICAgIH07CgogIC8vIFVuaXRzIGluIHRoZSBzdXBwb3J0ZWQgY2FsZW5kYXJzLCBzb3J0ZWQgYnkgYmlnbmVzcwogIGNvbnN0IG9yZGVyZWRVbml0cyA9IFsieWVhciIsICJtb250aCIsICJkYXkiLCAiaG91ciIsICJtaW51dGUiLCAic2Vjb25kIiwgIm1pbGxpc2Vjb25kIl0sCiAgICBvcmRlcmVkV2Vla1VuaXRzID0gWwogICAgICAid2Vla1llYXIiLAogICAgICAid2Vla051bWJlciIsCiAgICAgICJ3ZWVrZGF5IiwKICAgICAgImhvdXIiLAogICAgICAibWludXRlIiwKICAgICAgInNlY29uZCIsCiAgICAgICJtaWxsaXNlY29uZCIsCiAgICBdLAogICAgb3JkZXJlZE9yZGluYWxVbml0cyA9IFsieWVhciIsICJvcmRpbmFsIiwgImhvdXIiLCAibWludXRlIiwgInNlY29uZCIsICJtaWxsaXNlY29uZCJdOwoKICAvLyBzdGFuZGFyZGl6ZSBjYXNlIGFuZCBwbHVyYWxpdHkgaW4gdW5pdHMKICBmdW5jdGlvbiBub3JtYWxpemVVbml0KHVuaXQpIHsKICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB7CiAgICAgIHllYXI6ICJ5ZWFyIiwKICAgICAgeWVhcnM6ICJ5ZWFyIiwKICAgICAgbW9udGg6ICJtb250aCIsCiAgICAgIG1vbnRoczogIm1vbnRoIiwKICAgICAgZGF5OiAiZGF5IiwKICAgICAgZGF5czogImRheSIsCiAgICAgIGhvdXI6ICJob3VyIiwKICAgICAgaG91cnM6ICJob3VyIiwKICAgICAgbWludXRlOiAibWludXRlIiwKICAgICAgbWludXRlczogIm1pbnV0ZSIsCiAgICAgIHF1YXJ0ZXI6ICJxdWFydGVyIiwKICAgICAgcXVhcnRlcnM6ICJxdWFydGVyIiwKICAgICAgc2Vjb25kOiAic2Vjb25kIiwKICAgICAgc2Vjb25kczogInNlY29uZCIsCiAgICAgIG1pbGxpc2Vjb25kOiAibWlsbGlzZWNvbmQiLAogICAgICBtaWxsaXNlY29uZHM6ICJtaWxsaXNlY29uZCIsCiAgICAgIHdlZWtkYXk6ICJ3ZWVrZGF5IiwKICAgICAgd2Vla2RheXM6ICJ3ZWVrZGF5IiwKICAgICAgd2Vla251bWJlcjogIndlZWtOdW1iZXIiLAogICAgICB3ZWVrc251bWJlcjogIndlZWtOdW1iZXIiLAogICAgICB3ZWVrbnVtYmVyczogIndlZWtOdW1iZXIiLAogICAgICB3ZWVreWVhcjogIndlZWtZZWFyIiwKICAgICAgd2Vla3llYXJzOiAid2Vla1llYXIiLAogICAgICBvcmRpbmFsOiAib3JkaW5hbCIsCiAgICB9W3VuaXQudG9Mb3dlckNhc2UoKV07CgogICAgaWYgKCFub3JtYWxpemVkKSB0aHJvdyBuZXcgSW52YWxpZFVuaXRFcnJvcih1bml0KTsKCiAgICByZXR1cm4gbm9ybWFsaXplZDsKICB9CgogIC8vIHRoaXMgaXMgYSBkdW1iZWQgZG93biB2ZXJzaW9uIG9mIGZyb21PYmplY3QoKSB0aGF0IHJ1bnMgYWJvdXQgNjAlIGZhc3RlcgogIC8vIGJ1dCBkb2Vzbid0IGRvIGFueSB2YWxpZGF0aW9uLCBtYWtlcyBhIGJ1bmNoIG9mIGFzc3VtcHRpb25zIGFib3V0IHdoYXQgdW5pdHMKICAvLyBhcmUgcHJlc2VudCwgYW5kIHNvIG9uLgogIGZ1bmN0aW9uIHF1aWNrRFQob2JqLCBvcHRzKSB7CiAgICBjb25zdCB6b25lID0gbm9ybWFsaXplWm9uZShvcHRzLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKSwKICAgICAgbG9jID0gTG9jYWxlLmZyb21PYmplY3Qob3B0cyksCiAgICAgIHRzTm93ID0gU2V0dGluZ3Mubm93KCk7CgogICAgbGV0IHRzLCBvOwoKICAgIC8vIGFzc3VtZSB3ZSBoYXZlIHRoZSBoaWdoZXItb3JkZXIgdW5pdHMKICAgIGlmICghaXNVbmRlZmluZWQob2JqLnllYXIpKSB7CiAgICAgIGZvciAoY29uc3QgdSBvZiBvcmRlcmVkVW5pdHMpIHsKICAgICAgICBpZiAoaXNVbmRlZmluZWQob2JqW3VdKSkgewogICAgICAgICAgb2JqW3VdID0gZGVmYXVsdFVuaXRWYWx1ZXNbdV07CiAgICAgICAgfQogICAgICB9CgogICAgICBjb25zdCBpbnZhbGlkID0gaGFzSW52YWxpZEdyZWdvcmlhbkRhdGEob2JqKSB8fCBoYXNJbnZhbGlkVGltZURhdGEob2JqKTsKICAgICAgaWYgKGludmFsaWQpIHsKICAgICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChpbnZhbGlkKTsKICAgICAgfQoKICAgICAgY29uc3Qgb2Zmc2V0UHJvdmlzID0gem9uZS5vZmZzZXQodHNOb3cpOwogICAgICBbdHMsIG9dID0gb2JqVG9UUyhvYmosIG9mZnNldFByb3Zpcywgem9uZSk7CiAgICB9IGVsc2UgewogICAgICB0cyA9IHRzTm93OwogICAgfQoKICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoeyB0cywgem9uZSwgbG9jLCBvIH0pOwogIH0KCiAgZnVuY3Rpb24gZGlmZlJlbGF0aXZlKHN0YXJ0LCBlbmQsIG9wdHMpIHsKICAgIGNvbnN0IHJvdW5kID0gaXNVbmRlZmluZWQob3B0cy5yb3VuZCkgPyB0cnVlIDogb3B0cy5yb3VuZCwKICAgICAgZm9ybWF0ID0gKGMsIHVuaXQpID0+IHsKICAgICAgICBjID0gcm91bmRUbyhjLCByb3VuZCB8fCBvcHRzLmNhbGVuZGFyeSA/IDAgOiAyLCB0cnVlKTsKICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBlbmQubG9jLmNsb25lKG9wdHMpLnJlbEZvcm1hdHRlcihvcHRzKTsKICAgICAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdChjLCB1bml0KTsKICAgICAgfSwKICAgICAgZGlmZmVyID0gKHVuaXQpID0+IHsKICAgICAgICBpZiAob3B0cy5jYWxlbmRhcnkpIHsKICAgICAgICAgIGlmICghZW5kLmhhc1NhbWUoc3RhcnQsIHVuaXQpKSB7CiAgICAgICAgICAgIHJldHVybiBlbmQuc3RhcnRPZih1bml0KS5kaWZmKHN0YXJ0LnN0YXJ0T2YodW5pdCksIHVuaXQpLmdldCh1bml0KTsKICAgICAgICAgIH0gZWxzZSByZXR1cm4gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGVuZC5kaWZmKHN0YXJ0LCB1bml0KS5nZXQodW5pdCk7CiAgICAgICAgfQogICAgICB9OwoKICAgIGlmIChvcHRzLnVuaXQpIHsKICAgICAgcmV0dXJuIGZvcm1hdChkaWZmZXIob3B0cy51bml0KSwgb3B0cy51bml0KTsKICAgIH0KCiAgICBmb3IgKGNvbnN0IHVuaXQgb2Ygb3B0cy51bml0cykgewogICAgICBjb25zdCBjb3VudCA9IGRpZmZlcih1bml0KTsKICAgICAgaWYgKE1hdGguYWJzKGNvdW50KSA+PSAxKSB7CiAgICAgICAgcmV0dXJuIGZvcm1hdChjb3VudCwgdW5pdCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmb3JtYXQoc3RhcnQgPiBlbmQgPyAtMCA6IDAsIG9wdHMudW5pdHNbb3B0cy51bml0cy5sZW5ndGggLSAxXSk7CiAgfQoKICBmdW5jdGlvbiBsYXN0T3B0cyhhcmdMaXN0KSB7CiAgICBsZXQgb3B0cyA9IHt9LAogICAgICBhcmdzOwogICAgaWYgKGFyZ0xpc3QubGVuZ3RoID4gMCAmJiB0eXBlb2YgYXJnTGlzdFthcmdMaXN0Lmxlbmd0aCAtIDFdID09PSAib2JqZWN0IikgewogICAgICBvcHRzID0gYXJnTGlzdFthcmdMaXN0Lmxlbmd0aCAtIDFdOwogICAgICBhcmdzID0gQXJyYXkuZnJvbShhcmdMaXN0KS5zbGljZSgwLCBhcmdMaXN0Lmxlbmd0aCAtIDEpOwogICAgfSBlbHNlIHsKICAgICAgYXJncyA9IEFycmF5LmZyb20oYXJnTGlzdCk7CiAgICB9CiAgICByZXR1cm4gW29wdHMsIGFyZ3NdOwogIH0KCiAgLyoqCiAgICogQSBEYXRlVGltZSBpcyBhbiBpbW11dGFibGUgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgc3BlY2lmaWMgZGF0ZSBhbmQgdGltZSBhbmQgYWNjb21wYW55aW5nIG1ldGhvZHMuIEl0IGNvbnRhaW5zIGNsYXNzIGFuZCBpbnN0YW5jZSBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLgogICAqCiAgICogQSBEYXRlVGltZSBjb21wcmlzZXMgb2Y6CiAgICogKiBBIHRpbWVzdGFtcC4gRWFjaCBEYXRlVGltZSBpbnN0YW5jZSByZWZlcnMgdG8gYSBzcGVjaWZpYyBtaWxsaXNlY29uZCBvZiB0aGUgVW5peCBlcG9jaC4KICAgKiAqIEEgdGltZSB6b25lLiBFYWNoIGluc3RhbmNlIGlzIGNvbnNpZGVyZWQgaW4gdGhlIGNvbnRleHQgb2YgYSBzcGVjaWZpYyB6b25lIChieSBkZWZhdWx0IHRoZSBsb2NhbCBzeXN0ZW0ncyB6b25lKS4KICAgKiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyB0aGF0IGVmZmVjdCBob3cgb3V0cHV0IHN0cmluZ3MgYXJlIGZvcm1hdHRlZCwgc3VjaCBhcyBgbG9jYWxlYCwgYG51bWJlcmluZ1N5c3RlbWAsIGFuZCBgb3V0cHV0Q2FsZW5kYXJgLgogICAqCiAgICogSGVyZSBpcyBhIGJyaWVmIG92ZXJ2aWV3IG9mIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgZnVuY3Rpb25hbGl0eSBpdCBwcm92aWRlczoKICAgKgogICAqICogKipDcmVhdGlvbioqOiBUbyBjcmVhdGUgYSBEYXRlVGltZSBmcm9tIGl0cyBjb21wb25lbnRzLCB1c2Ugb25lIG9mIGl0cyBmYWN0b3J5IGNsYXNzIG1ldGhvZHM6IHtAbGluayBEYXRlVGltZS5sb2NhbH0sIHtAbGluayBEYXRlVGltZS51dGN9LCBhbmQgKG1vc3QgZmxleGlibHkpIHtAbGluayBEYXRlVGltZS5mcm9tT2JqZWN0fS4gVG8gY3JlYXRlIG9uZSBmcm9tIGEgc3RhbmRhcmQgc3RyaW5nIGZvcm1hdCwgdXNlIHtAbGluayBEYXRlVGltZS5mcm9tSVNPfSwge0BsaW5rIERhdGVUaW1lLmZyb21IVFRQfSwgYW5kIHtAbGluayBEYXRlVGltZS5mcm9tUkZDMjgyMn0uIFRvIGNyZWF0ZSBvbmUgZnJvbSBhIGN1c3RvbSBzdHJpbmcgZm9ybWF0LCB1c2Uge0BsaW5rIERhdGVUaW1lLmZyb21Gb3JtYXR9LiBUbyBjcmVhdGUgb25lIGZyb20gYSBuYXRpdmUgSlMgZGF0ZSwgdXNlIHtAbGluayBEYXRlVGltZS5mcm9tSlNEYXRlfS4KICAgKiAqICoqR3JlZ29yaWFuIGNhbGVuZGFyIGFuZCB0aW1lKio6IFRvIGV4YW1pbmUgdGhlIEdyZWdvcmlhbiBwcm9wZXJ0aWVzIG9mIGEgRGF0ZVRpbWUgaW5kaXZpZHVhbGx5IChpLmUgYXMgb3Bwb3NlZCB0byBjb2xsZWN0aXZlbHkgdGhyb3VnaCB7QGxpbmsgRGF0ZVRpbWUjdG9PYmplY3R9KSwgdXNlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjeWVhcn0sIHtAbGluayBEYXRlVGltZSNtb250aH0sCiAgICoge0BsaW5rIERhdGVUaW1lI2RheX0sIHtAbGluayBEYXRlVGltZSNob3VyfSwge0BsaW5rIERhdGVUaW1lI21pbnV0ZX0sIHtAbGluayBEYXRlVGltZSNzZWNvbmR9LCB7QGxpbmsgRGF0ZVRpbWUjbWlsbGlzZWNvbmR9IGFjY2Vzc29ycy4KICAgKiAqICoqV2VlayBjYWxlbmRhcioqOiBGb3IgSVNPIHdlZWsgY2FsZW5kYXIgYXR0cmlidXRlcywgc2VlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjd2Vla1llYXJ9LCB7QGxpbmsgRGF0ZVRpbWUjd2Vla051bWJlcn0sIGFuZCB7QGxpbmsgRGF0ZVRpbWUjd2Vla2RheX0gYWNjZXNzb3JzLgogICAqICogKipDb25maWd1cmF0aW9uKiogU2VlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjbG9jYWxlfSBhbmQge0BsaW5rIERhdGVUaW1lI251bWJlcmluZ1N5c3RlbX0gYWNjZXNzb3JzLgogICAqICogKipUcmFuc2Zvcm1hdGlvbioqOiBUbyB0cmFuc2Zvcm0gdGhlIERhdGVUaW1lIGludG8gb3RoZXIgRGF0ZVRpbWVzLCB1c2Uge0BsaW5rIERhdGVUaW1lI3NldH0sIHtAbGluayBEYXRlVGltZSNyZWNvbmZpZ3VyZX0sIHtAbGluayBEYXRlVGltZSNzZXRab25lfSwge0BsaW5rIERhdGVUaW1lI3NldExvY2FsZX0sIHtAbGluayBEYXRlVGltZS5wbHVzfSwge0BsaW5rIERhdGVUaW1lI21pbnVzfSwge0BsaW5rIERhdGVUaW1lI2VuZE9mfSwge0BsaW5rIERhdGVUaW1lI3N0YXJ0T2Z9LCB7QGxpbmsgRGF0ZVRpbWUjdG9VVEN9LCBhbmQge0BsaW5rIERhdGVUaW1lI3RvTG9jYWx9LgogICAqICogKipPdXRwdXQqKjogVG8gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gb3RoZXIgcmVwcmVzZW50YXRpb25zLCB1c2UgdGhlIHtAbGluayBEYXRlVGltZSN0b1JlbGF0aXZlfSwge0BsaW5rIERhdGVUaW1lI3RvUmVsYXRpdmVDYWxlbmRhcn0sIHtAbGluayBEYXRlVGltZSN0b0pTT059LCB7QGxpbmsgRGF0ZVRpbWUjdG9JU099LCB7QGxpbmsgRGF0ZVRpbWUjdG9IVFRQfSwge0BsaW5rIERhdGVUaW1lI3RvT2JqZWN0fSwge0BsaW5rIERhdGVUaW1lI3RvUkZDMjgyMn0sIHtAbGluayBEYXRlVGltZSN0b1N0cmluZ30sIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30sIHtAbGluayBEYXRlVGltZSN0b0Zvcm1hdH0sIHtAbGluayBEYXRlVGltZSN0b01pbGxpc30gYW5kIHtAbGluayBEYXRlVGltZSN0b0pTRGF0ZX0uCiAgICoKICAgKiBUaGVyZSdzIHBsZW50eSBvdGhlcnMgZG9jdW1lbnRlZCBiZWxvdy4gSW4gYWRkaXRpb24sIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHN1YnRsZXIgdG9waWNzIGxpa2UgaW50ZXJuYXRpb25hbGl6YXRpb24sIHRpbWUgem9uZXMsIGFsdGVybmF0aXZlIGNhbGVuZGFycywgdmFsaWRpdHksIGFuZCBzbyBvbiwgc2VlIHRoZSBleHRlcm5hbCBkb2N1bWVudGF0aW9uLgogICAqLwogIGNsYXNzIERhdGVUaW1lIHsKICAgIC8qKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGNvbnN0cnVjdG9yKGNvbmZpZykgewogICAgICBjb25zdCB6b25lID0gY29uZmlnLnpvbmUgfHwgU2V0dGluZ3MuZGVmYXVsdFpvbmU7CgogICAgICBsZXQgaW52YWxpZCA9CiAgICAgICAgY29uZmlnLmludmFsaWQgfHwKICAgICAgICAoTnVtYmVyLmlzTmFOKGNvbmZpZy50cykgPyBuZXcgSW52YWxpZCgiaW52YWxpZCBpbnB1dCIpIDogbnVsbCkgfHwKICAgICAgICAoIXpvbmUuaXNWYWxpZCA/IHVuc3VwcG9ydGVkWm9uZSh6b25lKSA6IG51bGwpOwogICAgICAvKioKICAgICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgICAqLwogICAgICB0aGlzLnRzID0gaXNVbmRlZmluZWQoY29uZmlnLnRzKSA/IFNldHRpbmdzLm5vdygpIDogY29uZmlnLnRzOwoKICAgICAgbGV0IGMgPSBudWxsLAogICAgICAgIG8gPSBudWxsOwogICAgICBpZiAoIWludmFsaWQpIHsKICAgICAgICBjb25zdCB1bmNoYW5nZWQgPSBjb25maWcub2xkICYmIGNvbmZpZy5vbGQudHMgPT09IHRoaXMudHMgJiYgY29uZmlnLm9sZC56b25lLmVxdWFscyh6b25lKTsKCiAgICAgICAgaWYgKHVuY2hhbmdlZCkgewogICAgICAgICAgW2MsIG9dID0gW2NvbmZpZy5vbGQuYywgY29uZmlnLm9sZC5vXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3Qgb3QgPSB6b25lLm9mZnNldCh0aGlzLnRzKTsKICAgICAgICAgIGMgPSB0c1RvT2JqKHRoaXMudHMsIG90KTsKICAgICAgICAgIGludmFsaWQgPSBOdW1iZXIuaXNOYU4oYy55ZWFyKSA/IG5ldyBJbnZhbGlkKCJpbnZhbGlkIGlucHV0IikgOiBudWxsOwogICAgICAgICAgYyA9IGludmFsaWQgPyBudWxsIDogYzsKICAgICAgICAgIG8gPSBpbnZhbGlkID8gbnVsbCA6IG90OwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICAgKi8KICAgICAgdGhpcy5fem9uZSA9IHpvbmU7CiAgICAgIC8qKgogICAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAgICovCiAgICAgIHRoaXMubG9jID0gY29uZmlnLmxvYyB8fCBMb2NhbGUuY3JlYXRlKCk7CiAgICAgIC8qKgogICAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAgICovCiAgICAgIHRoaXMuaW52YWxpZCA9IGludmFsaWQ7CiAgICAgIC8qKgogICAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAgICovCiAgICAgIHRoaXMud2Vla0RhdGEgPSBudWxsOwogICAgICAvKioKICAgICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgICAqLwogICAgICB0aGlzLmMgPSBjOwogICAgICAvKioKICAgICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgICAqLwogICAgICB0aGlzLm8gPSBvOwogICAgICAvKioKICAgICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgICAqLwogICAgICB0aGlzLmlzTHV4b25EYXRlVGltZSA9IHRydWU7CiAgICB9CgogICAgLy8gQ09OU1RSVUNUCgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmb3IgdGhlIGN1cnJlbnQgaW5zdGFudCwgaW4gdGhlIHN5c3RlbSdzIHRpbWUgem9uZS4KICAgICAqCiAgICAgKiBVc2UgU2V0dGluZ3MgdG8gb3ZlcnJpZGUgdGhlc2UgZGVmYXVsdCB2YWx1ZXMgaWYgbmVlZGVkLgogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9JU08oKSAvL34+IG5vdyBpbiB0aGUgSVNPIGZvcm1hdAogICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgKi8KICAgIHN0YXRpYyBub3coKSB7CiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe30pOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbG9jYWwgRGF0ZVRpbWUKICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeWVhcl0gLSBUaGUgY2FsZW5kYXIgeWVhci4gSWYgb21pdHRlZCAoYXMgaW4sIGNhbGwgYGxvY2FsKClgIHdpdGggbm8gYXJndW1lbnRzKSwgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWQKICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbW9udGg9MV0gLSBUaGUgbW9udGgsIDEtaW5kZXhlZAogICAgICogQHBhcmFtIHtudW1iZXJ9IFtkYXk9MV0gLSBUaGUgZGF5IG9mIHRoZSBtb250aCwgMS1pbmRleGVkCiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hvdXI9MF0gLSBUaGUgaG91ciBvZiB0aGUgZGF5LCBpbiAyNC1ob3VyIHRpbWUKICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbWludXRlPTBdIC0gVGhlIG1pbnV0ZSBvZiB0aGUgaG91ciwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5CiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZD0wXSAtIFRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5CiAgICAgKiBAcGFyYW0ge251bWJlcn0gW21pbGxpc2Vjb25kPTBdIC0gVGhlIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA5OTkKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiBub3cKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKHsgem9uZTogIkFtZXJpY2EvTmV3X1lvcmsiIH0pICAgICAgLy9+PiBub3csIGluIFVTIGVhc3QgY29hc3QgdGltZQogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDEtMDFUMDA6MDA6MDAKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTAxVDAwOjAwOjAwCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgeyBsb2NhbGU6ICJmciIgfSkgICAgIC8vfj4gMjAxNy0wMy0xMlQwMDowMDowMCwgd2l0aCBhIEZyZW5jaCBsb2NhbGUKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCA1KSAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjAwOjAwCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgeyB6b25lOiAidXRjIiB9KSAgIC8vfj4gMjAxNy0wMy0xMlQwNTowMDowMCwgaW4gVVRDCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgNDUpICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NTowMAogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCkgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTAKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCA1LCA0NSwgMTAsIDc2NSkgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjEwLjc2NQogICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgKi8KICAgIHN0YXRpYyBsb2NhbCgpIHsKICAgICAgY29uc3QgW29wdHMsIGFyZ3NdID0gbGFzdE9wdHMoYXJndW1lbnRzKSwKICAgICAgICBbeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kXSA9IGFyZ3M7CiAgICAgIHJldHVybiBxdWlja0RUKHsgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kIH0sIG9wdHMpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgaW4gVVRDCiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3llYXJdIC0gVGhlIGNhbGVuZGFyIHllYXIuIElmIG9taXR0ZWQgKGFzIGluLCBjYWxsIGB1dGMoKWAgd2l0aCBubyBhcmd1bWVudHMpLCB0aGUgY3VycmVudCB0aW1lIHdpbGwgYmUgdXNlZAogICAgICogQHBhcmFtIHtudW1iZXJ9IFttb250aD0xXSAtIFRoZSBtb250aCwgMS1pbmRleGVkCiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2RheT0xXSAtIFRoZSBkYXkgb2YgdGhlIG1vbnRoCiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hvdXI9MF0gLSBUaGUgaG91ciBvZiB0aGUgZGF5LCBpbiAyNC1ob3VyIHRpbWUKICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbWludXRlPTBdIC0gVGhlIG1pbnV0ZSBvZiB0aGUgaG91ciwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5CiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZD0wXSAtIFRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5CiAgICAgKiBAcGFyYW0ge251bWJlcn0gW21pbGxpc2Vjb25kPTBdIC0gVGhlIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA5OTkKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgRGF0ZVRpbWUKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sb2NhbGVdIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5vdXRwdXRDYWxlbmRhcl0gLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubnVtYmVyaW5nU3lzdGVtXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IG5vdwogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAxLTAxVDAwOjAwOjAwWgogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTAxVDAwOjAwOjAwWgogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDAwOjAwOjAwWgogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjAwOjAwWgogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjAwWgogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgeyBsb2NhbGU6ICJmciIgfSkgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjAwWiB3aXRoIGEgRnJlbmNoIGxvY2FsZQogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgMTApICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjEwWgogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgMTAsIDc2NSwgeyBsb2NhbGU6ICJmciIgfSkgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjEwLjc2NVogd2l0aCBhIEZyZW5jaCBsb2NhbGUKICAgICAqIEByZXR1cm4ge0RhdGVUaW1lfQogICAgICovCiAgICBzdGF0aWMgdXRjKCkgewogICAgICBjb25zdCBbb3B0cywgYXJnc10gPSBsYXN0T3B0cyhhcmd1bWVudHMpLAogICAgICAgIFt5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdID0gYXJnczsKCiAgICAgIG9wdHMuem9uZSA9IEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZTsKICAgICAgcmV0dXJuIHF1aWNrRFQoeyB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQgfSwgb3B0cyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGEgSmF2YVNjcmlwdCBEYXRlIG9iamVjdC4gVXNlcyB0aGUgZGVmYXVsdCB6b25lLgogICAgICogQHBhcmFtIHtEYXRlfSBkYXRlIC0gYSBKYXZhU2NyaXB0IERhdGUgb2JqZWN0CiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lCiAgICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG8KICAgICAqIEByZXR1cm4ge0RhdGVUaW1lfQogICAgICovCiAgICBzdGF0aWMgZnJvbUpTRGF0ZShkYXRlLCBvcHRpb25zID0ge30pIHsKICAgICAgY29uc3QgdHMgPSBpc0RhdGUoZGF0ZSkgPyBkYXRlLnZhbHVlT2YoKSA6IE5hTjsKICAgICAgaWYgKE51bWJlci5pc05hTih0cykpIHsKICAgICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCgiaW52YWxpZCBpbnB1dCIpOwogICAgICB9CgogICAgICBjb25zdCB6b25lVG9Vc2UgPSBub3JtYWxpemVab25lKG9wdGlvbnMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpOwogICAgICBpZiAoIXpvbmVUb1VzZS5pc1ZhbGlkKSB7CiAgICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQodW5zdXBwb3J0ZWRab25lKHpvbmVUb1VzZSkpOwogICAgICB9CgogICAgICByZXR1cm4gbmV3IERhdGVUaW1lKHsKICAgICAgICB0czogdHMsCiAgICAgICAgem9uZTogem9uZVRvVXNlLAogICAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucyksCiAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGVwb2NoIChtZWFuaW5nIHNpbmNlIDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuIFVzZXMgdGhlIGRlZmF1bHQgem9uZS4KICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaWxsaXNlY29uZHMgLSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgMTk3MCBVVEMKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgRGF0ZVRpbWUKICAgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRpb25zLnpvbmU9J2xvY2FsJ10gLSB0aGUgem9uZSB0byBwbGFjZSB0aGUgRGF0ZVRpbWUgaW50bwogICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQogICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQogICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgKi8KICAgIHN0YXRpYyBmcm9tTWlsbGlzKG1pbGxpc2Vjb25kcywgb3B0aW9ucyA9IHt9KSB7CiAgICAgIGlmICghaXNOdW1iZXIobWlsbGlzZWNvbmRzKSkgewogICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigKICAgICAgICAgIGBmcm9tTWlsbGlzIHJlcXVpcmVzIGEgbnVtZXJpY2FsIGlucHV0LCBidXQgcmVjZWl2ZWQgYSAke3R5cGVvZiBtaWxsaXNlY29uZHN9IHdpdGggdmFsdWUgJHttaWxsaXNlY29uZHN9YAogICAgICAgICk7CiAgICAgIH0gZWxzZSBpZiAobWlsbGlzZWNvbmRzIDwgLU1BWF9EQVRFIHx8IG1pbGxpc2Vjb25kcyA+IE1BWF9EQVRFKSB7CiAgICAgICAgLy8gdGhpcyBpc24ndCBwZXJmZWN0IGJlY2F1c2UgYmVjYXVzZSB3ZSBjYW4gc3RpbGwgZW5kIHVwIG91dCBvZiByYW5nZSBiZWNhdXNlIG9mIGFkZGl0aW9uYWwgc2hpZnRpbmcsIGJ1dCBpdCdzIGEgc3RhcnQKICAgICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCgiVGltZXN0YW1wIG91dCBvZiByYW5nZSIpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoewogICAgICAgICAgdHM6IG1pbGxpc2Vjb25kcywKICAgICAgICAgIHpvbmU6IG5vcm1hbGl6ZVpvbmUob3B0aW9ucy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksCiAgICAgICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdGlvbnMpLAogICAgICAgIH0pOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGEgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIGVwb2NoIChtZWFuaW5nIHNpbmNlIDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuIFVzZXMgdGhlIGRlZmF1bHQgem9uZS4KICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzZWNvbmRzIC0gYSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSAxOTcwIFVUQwogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZQogICAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdGlvbnMuem9uZT0nbG9jYWwnXSAtIHRoZSB6b25lIHRvIHBsYWNlIHRoZSBEYXRlVGltZSBpbnRvCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9jYWxlXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KICAgICAqLwogICAgc3RhdGljIGZyb21TZWNvbmRzKHNlY29uZHMsIG9wdGlvbnMgPSB7fSkgewogICAgICBpZiAoIWlzTnVtYmVyKHNlY29uZHMpKSB7CiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCJmcm9tU2Vjb25kcyByZXF1aXJlcyBhIG51bWVyaWNhbCBpbnB1dCIpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoewogICAgICAgICAgdHM6IHNlY29uZHMgKiAxMDAwLAogICAgICAgICAgem9uZTogbm9ybWFsaXplWm9uZShvcHRpb25zLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKSwKICAgICAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucyksCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIGtleXMgbGlrZSAneWVhcicgYW5kICdob3VyJyB3aXRoIHJlYXNvbmFibGUgZGVmYXVsdHMuCiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gdGhlIG9iamVjdCB0byBjcmVhdGUgdGhlIERhdGVUaW1lIGZyb20KICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoueWVhciAtIGEgeWVhciwgc3VjaCBhcyAxOTg3CiAgICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1vbnRoIC0gYSBtb250aCwgMS0xMgogICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5kYXkgLSBhIGRheSBvZiB0aGUgbW9udGgsIDEtMzEsIGRlcGVuZGluZyBvbiB0aGUgbW9udGgKICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoub3JkaW5hbCAtIGRheSBvZiB0aGUgeWVhciwgMS0zNjUgb3IgMzY2CiAgICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLndlZWtZZWFyIC0gYW4gSVNPIHdlZWsgeWVhcgogICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai53ZWVrTnVtYmVyIC0gYW4gSVNPIHdlZWsgbnVtYmVyLCBiZXR3ZWVuIDEgYW5kIDUyIG9yIDUzLCBkZXBlbmRpbmcgb24gdGhlIHllYXIKICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla2RheSAtIGFuIElTTyB3ZWVrZGF5LCAxLTcsIHdoZXJlIDEgaXMgTW9uZGF5IGFuZCA3IGlzIFN1bmRheQogICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5ob3VyIC0gaG91ciBvZiB0aGUgZGF5LCAwLTIzCiAgICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbnV0ZSAtIG1pbnV0ZSBvZiB0aGUgaG91ciwgMC01OQogICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5zZWNvbmQgLSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgMC01OQogICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taWxsaXNlY29uZCAtIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQsIDAtOTk5CiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoaXMgRGF0ZVRpbWUKICAgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSBpbnRlcnByZXQgdGhlIG51bWJlcnMgaW4gdGhlIGNvbnRleHQgb2YgYSBwYXJ0aWN1bGFyIHpvbmUuIENhbiB0YWtlIGFueSB2YWx1ZSB0YWtlbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gc2V0Wm9uZSgpCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdzeXN0ZW0ncyBsb2NhbGUnXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgeWVhcjogMTk4MiwgbW9udGg6IDUsIGRheTogMjV9KS50b0lTT0RhdGUoKSAvLz0+ICcxOTgyLTA1LTI1JwogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IHllYXI6IDE5ODIgfSkudG9JU09EYXRlKCkgLy89PiAnMTk4Mi0wMS0wMScKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0pIC8vfj4gdG9kYXkgYXQgMTA6MjY6MDYKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0sIHsgem9uZTogJ3V0YycgfSksCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgaG91cjogMTAsIG1pbnV0ZTogMjYsIHNlY29uZDogNiB9LCB7IHpvbmU6ICdsb2NhbCcgfSkKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0sIHsgem9uZTogJ0FtZXJpY2EvTmV3X1lvcmsnIH0pCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgd2Vla1llYXI6IDIwMTYsIHdlZWtOdW1iZXI6IDIsIHdlZWtkYXk6IDMgfSkudG9JU09EYXRlKCkgLy89PiAnMjAxNi0wMS0xMycKICAgICAqIEByZXR1cm4ge0RhdGVUaW1lfQogICAgICovCiAgICBzdGF0aWMgZnJvbU9iamVjdChvYmosIG9wdHMgPSB7fSkgewogICAgICBvYmogPSBvYmogfHwge307CiAgICAgIGNvbnN0IHpvbmVUb1VzZSA9IG5vcm1hbGl6ZVpvbmUob3B0cy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7CiAgICAgIGlmICghem9uZVRvVXNlLmlzVmFsaWQpIHsKICAgICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZVRvVXNlKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0IHRzTm93ID0gU2V0dGluZ3Mubm93KCksCiAgICAgICAgb2Zmc2V0UHJvdmlzID0gIWlzVW5kZWZpbmVkKG9wdHMuc3BlY2lmaWNPZmZzZXQpCiAgICAgICAgICA/IG9wdHMuc3BlY2lmaWNPZmZzZXQKICAgICAgICAgIDogem9uZVRvVXNlLm9mZnNldCh0c05vdyksCiAgICAgICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZU9iamVjdChvYmosIG5vcm1hbGl6ZVVuaXQpLAogICAgICAgIGNvbnRhaW5zT3JkaW5hbCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm9yZGluYWwpLAogICAgICAgIGNvbnRhaW5zR3JlZ29yWWVhciA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLnllYXIpLAogICAgICAgIGNvbnRhaW5zR3JlZ29yTUQgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5tb250aCkgfHwgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSwKICAgICAgICBjb250YWluc0dyZWdvciA9IGNvbnRhaW5zR3JlZ29yWWVhciB8fCBjb250YWluc0dyZWdvck1ELAogICAgICAgIGRlZmluaXRlV2Vla0RlZiA9IG5vcm1hbGl6ZWQud2Vla1llYXIgfHwgbm9ybWFsaXplZC53ZWVrTnVtYmVyLAogICAgICAgIGxvYyA9IExvY2FsZS5mcm9tT2JqZWN0KG9wdHMpOwoKICAgICAgLy8gY2FzZXM6CiAgICAgIC8vIGp1c3QgYSB3ZWVrZGF5IC0+IHRoaXMgd2VlaydzIGluc3RhbmNlIG9mIHRoYXQgd2Vla2RheSwgbm8gd29ycmllcwogICAgICAvLyAoZ3JlZ29yaWFuIGRhdGEgb3Igb3JkaW5hbCkgKyAod2Vla1llYXIgb3Igd2Vla051bWJlcikgLT4gZXJyb3IKICAgICAgLy8gKGdyZWdvcmlhbiBtb250aCBvciBkYXkpICsgb3JkaW5hbCAtPiBlcnJvcgogICAgICAvLyBvdGhlcndpc2UganVzdCB1c2Ugd2Vla3Mgb3Igb3JkaW5hbHMgb3IgZ3JlZ29yaWFuLCBkZXBlbmRpbmcgb24gd2hhdCdzIHNwZWNpZmllZAoKICAgICAgaWYgKChjb250YWluc0dyZWdvciB8fCBjb250YWluc09yZGluYWwpICYmIGRlZmluaXRlV2Vla0RlZikgewogICAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcigKICAgICAgICAgICJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzIgogICAgICAgICk7CiAgICAgIH0KCiAgICAgIGlmIChjb250YWluc0dyZWdvck1EICYmIGNvbnRhaW5zT3JkaW5hbCkgewogICAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcigiQ2FuJ3QgbWl4IG9yZGluYWwgZGF0ZXMgd2l0aCBtb250aC9kYXkiKTsKICAgICAgfQoKICAgICAgY29uc3QgdXNlV2Vla0RhdGEgPSBkZWZpbml0ZVdlZWtEZWYgfHwgKG5vcm1hbGl6ZWQud2Vla2RheSAmJiAhY29udGFpbnNHcmVnb3IpOwoKICAgICAgLy8gY29uZmlndXJlIG91cnNlbHZlcyB0byBkZWFsIHdpdGggZ3JlZ29yaWFuIGRhdGVzIG9yIHdlZWsgc3R1ZmYKICAgICAgbGV0IHVuaXRzLAogICAgICAgIGRlZmF1bHRWYWx1ZXMsCiAgICAgICAgb2JqTm93ID0gdHNUb09iaih0c05vdywgb2Zmc2V0UHJvdmlzKTsKICAgICAgaWYgKHVzZVdlZWtEYXRhKSB7CiAgICAgICAgdW5pdHMgPSBvcmRlcmVkV2Vla1VuaXRzOwogICAgICAgIGRlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0V2Vla1VuaXRWYWx1ZXM7CiAgICAgICAgb2JqTm93ID0gZ3JlZ29yaWFuVG9XZWVrKG9iak5vdyk7CiAgICAgIH0gZWxzZSBpZiAoY29udGFpbnNPcmRpbmFsKSB7CiAgICAgICAgdW5pdHMgPSBvcmRlcmVkT3JkaW5hbFVuaXRzOwogICAgICAgIGRlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0T3JkaW5hbFVuaXRWYWx1ZXM7CiAgICAgICAgb2JqTm93ID0gZ3JlZ29yaWFuVG9PcmRpbmFsKG9iak5vdyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdW5pdHMgPSBvcmRlcmVkVW5pdHM7CiAgICAgICAgZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRVbml0VmFsdWVzOwogICAgICB9CgogICAgICAvLyBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIG1pc3Npbmcgc3R1ZmYKICAgICAgbGV0IGZvdW5kRmlyc3QgPSBmYWxzZTsKICAgICAgZm9yIChjb25zdCB1IG9mIHVuaXRzKSB7CiAgICAgICAgY29uc3QgdiA9IG5vcm1hbGl6ZWRbdV07CiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh2KSkgewogICAgICAgICAgZm91bmRGaXJzdCA9IHRydWU7CiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEZpcnN0KSB7CiAgICAgICAgICBub3JtYWxpemVkW3VdID0gZGVmYXVsdFZhbHVlc1t1XTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbm9ybWFsaXplZFt1XSA9IG9iak5vd1t1XTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgdmFsdWVzIHdlIGhhdmUgYXJlIGluIHJhbmdlCiAgICAgIGNvbnN0IGhpZ2hlck9yZGVySW52YWxpZCA9IHVzZVdlZWtEYXRhCiAgICAgICAgICA/IGhhc0ludmFsaWRXZWVrRGF0YShub3JtYWxpemVkKQogICAgICAgICAgOiBjb250YWluc09yZGluYWwKICAgICAgICAgID8gaGFzSW52YWxpZE9yZGluYWxEYXRhKG5vcm1hbGl6ZWQpCiAgICAgICAgICA6IGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhKG5vcm1hbGl6ZWQpLAogICAgICAgIGludmFsaWQgPSBoaWdoZXJPcmRlckludmFsaWQgfHwgaGFzSW52YWxpZFRpbWVEYXRhKG5vcm1hbGl6ZWQpOwoKICAgICAgaWYgKGludmFsaWQpIHsKICAgICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChpbnZhbGlkKTsKICAgICAgfQoKICAgICAgLy8gY29tcHV0ZSB0aGUgYWN0dWFsIHRpbWUKICAgICAgY29uc3QgZ3JlZ29yaWFuID0gdXNlV2Vla0RhdGEKICAgICAgICAgID8gd2Vla1RvR3JlZ29yaWFuKG5vcm1hbGl6ZWQpCiAgICAgICAgICA6IGNvbnRhaW5zT3JkaW5hbAogICAgICAgICAgPyBvcmRpbmFsVG9HcmVnb3JpYW4obm9ybWFsaXplZCkKICAgICAgICAgIDogbm9ybWFsaXplZCwKICAgICAgICBbdHNGaW5hbCwgb2Zmc2V0RmluYWxdID0gb2JqVG9UUyhncmVnb3JpYW4sIG9mZnNldFByb3Zpcywgem9uZVRvVXNlKSwKICAgICAgICBpbnN0ID0gbmV3IERhdGVUaW1lKHsKICAgICAgICAgIHRzOiB0c0ZpbmFsLAogICAgICAgICAgem9uZTogem9uZVRvVXNlLAogICAgICAgICAgbzogb2Zmc2V0RmluYWwsCiAgICAgICAgICBsb2MsCiAgICAgICAgfSk7CgogICAgICAvLyBncmVnb3JpYW4gZGF0YSArIHdlZWtkYXkgc2VydmVzIG9ubHkgdG8gdmFsaWRhdGUKICAgICAgaWYgKG5vcm1hbGl6ZWQud2Vla2RheSAmJiBjb250YWluc0dyZWdvciAmJiBvYmoud2Vla2RheSAhPT0gaW5zdC53ZWVrZGF5KSB7CiAgICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoCiAgICAgICAgICAibWlzbWF0Y2hlZCB3ZWVrZGF5IiwKICAgICAgICAgIGB5b3UgY2FuJ3Qgc3BlY2lmeSBib3RoIGEgd2Vla2RheSBvZiAke25vcm1hbGl6ZWQud2Vla2RheX0gYW5kIGEgZGF0ZSBvZiAke2luc3QudG9JU08oKX1gCiAgICAgICAgKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGluc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIElTTyA4NjAxIHN0cmluZwogICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgSVNPIHN0cmluZwogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb24KICAgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSB1c2UgdGhpcyB6b25lIGlmIG5vIG9mZnNldCBpcyBzcGVjaWZpZWQgaW4gdGhlIGlucHV0IHN0cmluZyBpdHNlbGYuIFdpbGwgYWxzbyBjb252ZXJ0IHRoZSB0aW1lIHRvIHRoaXMgem9uZQogICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSBmaXhlZC1vZmZzZXQgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmUKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5vdXRwdXRDYWxlbmRhcl0gLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMycpCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMyswNjowMCcpCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMyswNjowMCcsIHtzZXRab25lOiB0cnVlfSkKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtMDUtMjVUMDk6MDg6MzQuMTIzJywge3pvbmU6ICd1dGMnfSkKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtVzA1LTQnKQogICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgKi8KICAgIHN0YXRpYyBmcm9tSVNPKHRleHQsIG9wdHMgPSB7fSkgewogICAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZUlTT0RhdGUodGV4dCk7CiAgICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsICJJU08gODYwMSIsIHRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBSRkMgMjgyMiBzdHJpbmcKICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIFJGQyAyODIyIHN0cmluZwogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb24KICAgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSBjb252ZXJ0IHRoZSB0aW1lIHRvIHRoaXMgem9uZS4gU2luY2UgdGhlIG9mZnNldCBpcyBhbHdheXMgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcgaXRzZWxmLCB0aGlzIGhhcyBubyBlZmZlY3Qgb24gdGhlIGludGVycHJldGF0aW9uIG9mIHN0cmluZywgbWVyZWx5IHRoZSB6b25lIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaXMgZXhwcmVzc2VkIGluLgogICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSBmaXhlZC1vZmZzZXQgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmUKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQogICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCcyNSBOb3YgMjAxNiAxMzoyMzoxMiBHTVQnKQogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVJGQzI4MjIoJ0ZyaSwgMjUgTm92IDIwMTYgMTM6MjM6MTIgKzA2MDAnKQogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVJGQzI4MjIoJzI1IE5vdiAyMDE2IDEzOjIzIFonKQogICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgKi8KICAgIHN0YXRpYyBmcm9tUkZDMjgyMih0ZXh0LCBvcHRzID0ge30pIHsKICAgICAgY29uc3QgW3ZhbHMsIHBhcnNlZFpvbmVdID0gcGFyc2VSRkMyODIyRGF0ZSh0ZXh0KTsKICAgICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgIlJGQyAyODIyIiwgdGV4dCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIEhUVFAgaGVhZGVyIGRhdGUKICAgICAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMy5odG1sI3NlYzMuMy4xCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBIVFRQIGhlYWRlciBkYXRlCiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvbgogICAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIGNvbnZlcnQgdGhlIHRpbWUgdG8gdGhpcyB6b25lLiBTaW5jZSBIVFRQIGRhdGVzIGFyZSBhbHdheXMgaW4gVVRDLCB0aGlzIGhhcyBubyBlZmZlY3Qgb24gdGhlIGludGVycHJldGF0aW9uIG9mIHN0cmluZywgbWVyZWx5IHRoZSB6b25lIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaXMgZXhwcmVzc2VkIGluLgogICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggdGhlIGZpeGVkLW9mZnNldCB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nLiBGb3IgSFRUUCBkYXRlcywgdGhpcyBpcyBhbHdheXMgVVRDLCBzbyB0aGlzIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgdGhlIGB6b25lYCBvcHRpb24gdG8gJ3V0YycsIGJ1dCB0aGlzIG9wdGlvbiBpcyBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCBzaW1pbGFyIG1ldGhvZHMuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdzeXN0ZW0ncyBsb2NhbGUnXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSFRUUCgnU3VuLCAwNiBOb3YgMTk5NCAwODo0OTozNyBHTVQnKQogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUhUVFAoJ1N1bmRheSwgMDYtTm92LTk0IDA4OjQ5OjM3IEdNVCcpCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSFRUUCgnU3VuIE5vdiAgNiAwODo0OTozNyAxOTk0JykKICAgICAqIEByZXR1cm4ge0RhdGVUaW1lfQogICAgICovCiAgICBzdGF0aWMgZnJvbUhUVFAodGV4dCwgb3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IFt2YWxzLCBwYXJzZWRab25lXSA9IHBhcnNlSFRUUERhdGUodGV4dCk7CiAgICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsICJIVFRQIiwgb3B0cyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIGlucHV0IHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZy4KICAgICAqIERlZmF1bHRzIHRvIGVuLVVTIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN5c3RlbSdzIGxvY2FsZS4gRm9yIGEgdGFibGUgb2YgdG9rZW5zIGFuZCB0aGVpciBpbnRlcnByZXRhdGlvbnMsIHNlZSBbaGVyZV0oaHR0cHM6Ly9tb21lbnQuZ2l0aHViLmlvL2x1eG9uLyMvcGFyc2luZz9pZD10YWJsZS1vZi10b2tlbnMpLgogICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgc3RyaW5nIHRvIHBhcnNlCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCB0aGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGluIChzZWUgdGhlIGxpbmsgYmVsb3cgZm9yIHRoZSBmb3JtYXRzKQogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb24KICAgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSB1c2UgdGhpcyB6b25lIGlmIG5vIG9mZnNldCBpcyBzcGVjaWZpZWQgaW4gdGhlIGlucHV0IHN0cmluZyBpdHNlbGYuIFdpbGwgYWxzbyBjb252ZXJ0IHRoZSBEYXRlVGltZSB0byB0aGlzIHpvbmUKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmUKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSBhIGxvY2FsZSBzdHJpbmcgdG8gdXNlIHdoZW4gcGFyc2luZy4gV2lsbCBhbHNvIHNldCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyBsb2NhbGUKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZSB3aGVuIHBhcnNpbmcuIFdpbGwgYWxzbyBzZXQgdGhlIHJlc3VsdGluZyBEYXRlVGltZSB0byB0aGlzIG51bWJlcmluZyBzeXN0ZW0KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQogICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgKi8KICAgIHN0YXRpYyBmcm9tRm9ybWF0KHRleHQsIGZtdCwgb3B0cyA9IHt9KSB7CiAgICAgIGlmIChpc1VuZGVmaW5lZCh0ZXh0KSB8fCBpc1VuZGVmaW5lZChmbXQpKSB7CiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCJmcm9tRm9ybWF0IHJlcXVpcmVzIGFuIGlucHV0IHN0cmluZyBhbmQgYSBmb3JtYXQiKTsKICAgICAgfQoKICAgICAgY29uc3QgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsIH0gPSBvcHRzLAogICAgICAgIGxvY2FsZVRvVXNlID0gTG9jYWxlLmZyb21PcHRzKHsKICAgICAgICAgIGxvY2FsZSwKICAgICAgICAgIG51bWJlcmluZ1N5c3RlbSwKICAgICAgICAgIGRlZmF1bHRUb0VOOiB0cnVlLAogICAgICAgIH0pLAogICAgICAgIFt2YWxzLCBwYXJzZWRab25lLCBzcGVjaWZpY09mZnNldCwgaW52YWxpZF0gPSBwYXJzZUZyb21Ub2tlbnMobG9jYWxlVG9Vc2UsIHRleHQsIGZtdCk7CiAgICAgIGlmIChpbnZhbGlkKSB7CiAgICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoaW52YWxpZCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgYGZvcm1hdCAke2ZtdH1gLCB0ZXh0LCBzcGVjaWZpY09mZnNldCk7CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIHVzZSBmcm9tRm9ybWF0IGluc3RlYWQKICAgICAqLwogICAgc3RhdGljIGZyb21TdHJpbmcodGV4dCwgZm10LCBvcHRzID0ge30pIHsKICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21Gb3JtYXQodGV4dCwgZm10LCBvcHRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBTUUwgZGF0ZSwgdGltZSwgb3IgZGF0ZXRpbWUKICAgICAqIERlZmF1bHRzIHRvIGVuLVVTIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN5c3RlbSdzIGxvY2FsZQogICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgc3RyaW5nIHRvIHBhcnNlCiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvbgogICAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIHVzZSB0aGlzIHpvbmUgaWYgbm8gb2Zmc2V0IGlzIHNwZWNpZmllZCBpbiB0aGUgaW5wdXQgc3RyaW5nIGl0c2VsZi4gV2lsbCBhbHNvIGNvbnZlcnQgdGhlIERhdGVUaW1lIHRvIHRoaXMgem9uZQogICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgaWYgaXQgc3BlY2lmaWVzIG9uZQogICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIGEgbG9jYWxlIHN0cmluZyB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSBEYXRlVGltZSB0byB0aGlzIGxvY2FsZQogICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlIHdoZW4gcGFyc2luZy4gV2lsbCBhbHNvIHNldCB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIHRvIHRoaXMgbnVtYmVyaW5nIHN5c3RlbQogICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1JykKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQnKQogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDInKQogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDIrMDY6MDAnKQogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDIgQW1lcmljYS9Mb3NfQW5nZWxlcycpCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiBBbWVyaWNhL0xvc19BbmdlbGVzJywgeyBzZXRab25lOiB0cnVlIH0pCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MicsIHsgem9uZTogJ0FtZXJpY2EvTG9zX0FuZ2VsZXMnIH0pCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcwOToxMjozNC4zNDInKQogICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgKi8KICAgIHN0YXRpYyBmcm9tU1FMKHRleHQsIG9wdHMgPSB7fSkgewogICAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZVNRTCh0ZXh0KTsKICAgICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgIlNRTCIsIHRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGFuIGludmFsaWQgRGF0ZVRpbWUuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gc2ltcGxlIHN0cmluZyBvZiB3aHkgdGhpcyBEYXRlVGltZSBpcyBpbnZhbGlkLiBTaG91bGQgbm90IGNvbnRhaW4gcGFyYW1ldGVycyBvciBhbnl0aGluZyBlbHNlIGRhdGEtZGVwZW5kZW50LgogICAgICogQHBhcmFtIHtzdHJpbmd9IFtleHBsYW5hdGlvbj1udWxsXSAtIGxvbmdlciBleHBsYW5hdGlvbiwgbWF5IGluY2x1ZGUgcGFyYW1ldGVycyBhbmQgb3RoZXIgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgogICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgKi8KICAgIHN0YXRpYyBpbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24gPSBudWxsKSB7CiAgICAgIGlmICghcmVhc29uKSB7CiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCJuZWVkIHRvIHNwZWNpZnkgYSByZWFzb24gdGhlIERhdGVUaW1lIGlzIGludmFsaWQiKTsKICAgICAgfQoKICAgICAgY29uc3QgaW52YWxpZCA9IHJlYXNvbiBpbnN0YW5jZW9mIEludmFsaWQgPyByZWFzb24gOiBuZXcgSW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uKTsKCiAgICAgIGlmIChTZXR0aW5ncy50aHJvd09uSW52YWxpZCkgewogICAgICAgIHRocm93IG5ldyBJbnZhbGlkRGF0ZVRpbWVFcnJvcihpbnZhbGlkKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IERhdGVUaW1lKHsgaW52YWxpZCB9KTsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIERhdGVUaW1lLiBXb3JrcyBhY3Jvc3MgY29udGV4dCBib3VuZGFyaWVzCiAgICAgKiBAcGFyYW0ge29iamVjdH0gbwogICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAqLwogICAgc3RhdGljIGlzRGF0ZVRpbWUobykgewogICAgICByZXR1cm4gKG8gJiYgby5pc0x1eG9uRGF0ZVRpbWUpIHx8IGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogUHJvZHVjZSB0aGUgZm9ybWF0IHN0cmluZyBmb3IgYSBzZXQgb2Ygb3B0aW9ucwogICAgICogQHBhcmFtIGZvcm1hdE9wdHMKICAgICAqIEBwYXJhbSBsb2NhbGVPcHRzCiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfQogICAgICovCiAgICBzdGF0aWMgcGFyc2VGb3JtYXRGb3JPcHRzKGZvcm1hdE9wdHMsIGxvY2FsZU9wdHMgPSB7fSkgewogICAgICBjb25zdCB0b2tlbkxpc3QgPSBmb3JtYXRPcHRzVG9Ub2tlbnMoZm9ybWF0T3B0cywgTG9jYWxlLmZyb21PYmplY3QobG9jYWxlT3B0cykpOwogICAgICByZXR1cm4gIXRva2VuTGlzdCA/IG51bGwgOiB0b2tlbkxpc3QubWFwKCh0KSA9PiAodCA/IHQudmFsIDogbnVsbCkpLmpvaW4oIiIpOwogICAgfQoKICAgIC8qKgogICAgICogUHJvZHVjZSB0aGUgdGhlIGZ1bGx5IGV4cGFuZGVkIGZvcm1hdCB0b2tlbiBmb3IgdGhlIGxvY2FsZQogICAgICogRG9lcyBOT1QgcXVvdGUgY2hhcmFjdGVycywgc28gcXVvdGVkIHRva2VucyB3aWxsIG5vdCByb3VuZCB0cmlwIGNvcnJlY3RseQogICAgICogQHBhcmFtIGZtdAogICAgICogQHBhcmFtIGxvY2FsZU9wdHMKICAgICAqIEByZXR1cm5zIHtzdHJpbmd9CiAgICAgKi8KICAgIHN0YXRpYyBleHBhbmRGb3JtYXQoZm10LCBsb2NhbGVPcHRzID0ge30pIHsKICAgICAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmRNYWNyb1Rva2VucyhGb3JtYXR0ZXIucGFyc2VGb3JtYXQoZm10KSwgTG9jYWxlLmZyb21PYmplY3QobG9jYWxlT3B0cykpOwogICAgICByZXR1cm4gZXhwYW5kZWQubWFwKCh0KSA9PiB0LnZhbCkuam9pbigiIik7CiAgICB9CgogICAgLy8gSU5GTwoKICAgIC8qKgogICAgICogR2V0IHRoZSB2YWx1ZSBvZiB1bml0LgogICAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBhIHVuaXQgc3VjaCBhcyAnbWludXRlJyBvciAnZGF5JwogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNywgNCkuZ2V0KCdtb250aCcpOyAvLz0+IDcKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDcsIDQpLmdldCgnZGF5Jyk7IC8vPT4gNAogICAgICogQHJldHVybiB7bnVtYmVyfQogICAgICovCiAgICBnZXQodW5pdCkgewogICAgICByZXR1cm4gdGhpc1t1bml0XTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgRGF0ZVRpbWUgaXMgdmFsaWQuIEludmFsaWQgRGF0ZVRpbWVzIG9jY3VyIHdoZW46CiAgICAgKiAqIFRoZSBEYXRlVGltZSB3YXMgY3JlYXRlZCBmcm9tIGludmFsaWQgY2FsZW5kYXIgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIDEzdGggbW9udGggb3IgRmVicnVhcnkgMzAKICAgICAqICogVGhlIERhdGVUaW1lIHdhcyBjcmVhdGVkIGJ5IGFuIG9wZXJhdGlvbiBvbiBhbm90aGVyIGludmFsaWQgZGF0ZQogICAgICogQHR5cGUge2Jvb2xlYW59CiAgICAgKi8KICAgIGdldCBpc1ZhbGlkKCkgewogICAgICByZXR1cm4gdGhpcy5pbnZhbGlkID09PSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBlcnJvciBjb2RlIGlmIHRoaXMgRGF0ZVRpbWUgaXMgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRGF0ZVRpbWUgaXMgdmFsaWQKICAgICAqIEB0eXBlIHtzdHJpbmd9CiAgICAgKi8KICAgIGdldCBpbnZhbGlkUmVhc29uKCkgewogICAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLnJlYXNvbiA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGlzIERhdGVUaW1lIGJlY2FtZSBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEYXRlVGltZSBpcyB2YWxpZAogICAgICogQHR5cGUge3N0cmluZ30KICAgICAqLwogICAgZ2V0IGludmFsaWRFeHBsYW5hdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5leHBsYW5hdGlvbiA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGxvY2FsZSBvZiBhIERhdGVUaW1lLCBzdWNoICdlbi1HQicuIFRoZSBsb2NhbGUgaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIERhdGVUaW1lCiAgICAgKgogICAgICogQHR5cGUge3N0cmluZ30KICAgICAqLwogICAgZ2V0IGxvY2FsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLmxvY2FsZSA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG51bWJlcmluZyBzeXN0ZW0gb2YgYSBEYXRlVGltZSwgc3VjaCAnYmVuZycuIFRoZSBudW1iZXJpbmcgc3lzdGVtIGlzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSBEYXRlVGltZQogICAgICoKICAgICAqIEB0eXBlIHtzdHJpbmd9CiAgICAgKi8KICAgIGdldCBudW1iZXJpbmdTeXN0ZW0oKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5udW1iZXJpbmdTeXN0ZW0gOiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBvdXRwdXQgY2FsZW5kYXIgb2YgYSBEYXRlVGltZSwgc3VjaCAnaXNsYW1pYycuIFRoZSBvdXRwdXQgY2FsZW5kYXIgaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIERhdGVUaW1lCiAgICAgKgogICAgICogQHR5cGUge3N0cmluZ30KICAgICAqLwogICAgZ2V0IG91dHB1dENhbGVuZGFyKCkgewogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2Mub3V0cHV0Q2FsZW5kYXIgOiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSB0aW1lIHpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgRGF0ZVRpbWUuCiAgICAgKiBAdHlwZSB7Wm9uZX0KICAgICAqLwogICAgZ2V0IHpvbmUoKSB7CiAgICAgIHJldHVybiB0aGlzLl96b25lOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSB0aW1lIHpvbmUuCiAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICovCiAgICBnZXQgem9uZU5hbWUoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnpvbmUubmFtZSA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHllYXIKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS55ZWFyIC8vPT4gMjAxNwogICAgICogQHR5cGUge251bWJlcn0KICAgICAqLwogICAgZ2V0IHllYXIoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMueWVhciA6IE5hTjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgcXVhcnRlcgogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLnF1YXJ0ZXIgLy89PiAyCiAgICAgKiBAdHlwZSB7bnVtYmVyfQogICAgICovCiAgICBnZXQgcXVhcnRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IE1hdGguY2VpbCh0aGlzLmMubW9udGggLyAzKSA6IE5hTjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgbW9udGggKDEtMTIpLgogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLm1vbnRoIC8vPT4gNQogICAgICogQHR5cGUge251bWJlcn0KICAgICAqLwogICAgZ2V0IG1vbnRoKCkgewogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLm1vbnRoIDogTmFOOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBkYXkgb2YgdGhlIG1vbnRoICgxLTMwaXNoKS4KICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5kYXkgLy89PiAyNQogICAgICogQHR5cGUge251bWJlcn0KICAgICAqLwogICAgZ2V0IGRheSgpIHsKICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5kYXkgOiBOYU47CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGhvdXIgb2YgdGhlIGRheSAoMC0yMykuCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSkuaG91ciAvLz0+IDkKICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgKi8KICAgIGdldCBob3VyKCkgewogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLmhvdXIgOiBOYU47CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1pbnV0ZSBvZiB0aGUgaG91ciAoMC01OSkuCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSwgMzApLm1pbnV0ZSAvLz0+IDMwCiAgICAgKiBAdHlwZSB7bnVtYmVyfQogICAgICovCiAgICBnZXQgbWludXRlKCkgewogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLm1pbnV0ZSA6IE5hTjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgc2Vjb25kIG9mIHRoZSBtaW51dGUgKDAtNTkpLgogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDksIDMwLCA1Mikuc2Vjb25kIC8vPT4gNTIKICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgKi8KICAgIGdldCBzZWNvbmQoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMuc2Vjb25kIDogTmFOOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBtaWxsaXNlY29uZCBvZiB0aGUgc2Vjb25kICgwLTk5OSkuCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSwgMzAsIDUyLCA2NTQpLm1pbGxpc2Vjb25kIC8vPT4gNjU0CiAgICAgKiBAdHlwZSB7bnVtYmVyfQogICAgICovCiAgICBnZXQgbWlsbGlzZWNvbmQoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubWlsbGlzZWNvbmQgOiBOYU47CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHdlZWsgeWVhcgogICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAxMiwgMzEpLndlZWtZZWFyIC8vPT4gMjAxNQogICAgICogQHR5cGUge251bWJlcn0KICAgICAqLwogICAgZ2V0IHdlZWtZZWFyKCkgewogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gcG9zc2libHlDYWNoZWRXZWVrRGF0YSh0aGlzKS53ZWVrWWVhciA6IE5hTjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgd2VlayBudW1iZXIgb2YgdGhlIHdlZWsgeWVhciAoMS01MmlzaCkuCiAgICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS53ZWVrTnVtYmVyIC8vPT4gMjEKICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgKi8KICAgIGdldCB3ZWVrTnVtYmVyKCkgewogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gcG9zc2libHlDYWNoZWRXZWVrRGF0YSh0aGlzKS53ZWVrTnVtYmVyIDogTmFOOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBkYXkgb2YgdGhlIHdlZWsuCiAgICAgKiAxIGlzIE1vbmRheSBhbmQgNyBpcyBTdW5kYXkKICAgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZQogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMTEsIDMxKS53ZWVrZGF5IC8vPT4gNAogICAgICogQHR5cGUge251bWJlcn0KICAgICAqLwogICAgZ2V0IHdlZWtkYXkoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKHRoaXMpLndlZWtkYXkgOiBOYU47CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG9yZGluYWwgKG1lYW5pbmcgdGhlIGRheSBvZiB0aGUgeWVhcikKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5vcmRpbmFsIC8vPT4gMTQ1CiAgICAgKiBAdHlwZSB7bnVtYmVyfERhdGVUaW1lfQogICAgICovCiAgICBnZXQgb3JkaW5hbCgpIHsKICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IGdyZWdvcmlhblRvT3JkaW5hbCh0aGlzLmMpLm9yZGluYWwgOiBOYU47CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIHNob3J0IG1vbnRoIG5hbWUsIHN1Y2ggYXMgJ09jdCcuCiAgICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDEwLCAzMCkubW9udGhTaG9ydCAvLz0+IE9jdAogICAgICogQHR5cGUge3N0cmluZ30KICAgICAqLwogICAgZ2V0IG1vbnRoU2hvcnQoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbmZvLm1vbnRocygic2hvcnQiLCB7IGxvY09iajogdGhpcy5sb2MgfSlbdGhpcy5tb250aCAtIDFdIDogbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgaHVtYW4gcmVhZGFibGUgbG9uZyBtb250aCBuYW1lLCBzdWNoIGFzICdPY3RvYmVyJy4KICAgICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZAogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS5tb250aExvbmcgLy89PiBPY3RvYmVyCiAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICovCiAgICBnZXQgbW9udGhMb25nKCkgewogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby5tb250aHMoImxvbmciLCB7IGxvY09iajogdGhpcy5sb2MgfSlbdGhpcy5tb250aCAtIDFdIDogbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgaHVtYW4gcmVhZGFibGUgc2hvcnQgd2Vla2RheSwgc3VjaCBhcyAnTW9uJy4KICAgICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZAogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS53ZWVrZGF5U2hvcnQgLy89PiBNb24KICAgICAqIEB0eXBlIHtzdHJpbmd9CiAgICAgKi8KICAgIGdldCB3ZWVrZGF5U2hvcnQoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbmZvLndlZWtkYXlzKCJzaG9ydCIsIHsgbG9jT2JqOiB0aGlzLmxvYyB9KVt0aGlzLndlZWtkYXkgLSAxXSA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIGxvbmcgd2Vla2RheSwgc3VjaCBhcyAnTW9uZGF5Jy4KICAgICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZAogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS53ZWVrZGF5TG9uZyAvLz0+IE1vbmRheQogICAgICogQHR5cGUge3N0cmluZ30KICAgICAqLwogICAgZ2V0IHdlZWtkYXlMb25nKCkgewogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby53ZWVrZGF5cygibG9uZyIsIHsgbG9jT2JqOiB0aGlzLmxvYyB9KVt0aGlzLndlZWtkYXkgLSAxXSA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIFVUQyBvZmZzZXQgb2YgdGhpcyBEYXRlVGltZSBpbiBtaW51dGVzCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5vZmZzZXQgLy89PiAtMjQwCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5vZmZzZXQgLy89PiAwCiAgICAgKiBAdHlwZSB7bnVtYmVyfQogICAgICovCiAgICBnZXQgb2Zmc2V0KCkgewogICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gK3RoaXMubyA6IE5hTjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgc2hvcnQgaHVtYW4gbmFtZSBmb3IgdGhlIHpvbmUncyBjdXJyZW50IG9mZnNldCwgZm9yIGV4YW1wbGUgIkVTVCIgb3IgIkVEVCIuCiAgICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQKICAgICAqIEB0eXBlIHtzdHJpbmd9CiAgICAgKi8KICAgIGdldCBvZmZzZXROYW1lU2hvcnQoKSB7CiAgICAgIGlmICh0aGlzLmlzVmFsaWQpIHsKICAgICAgICByZXR1cm4gdGhpcy56b25lLm9mZnNldE5hbWUodGhpcy50cywgewogICAgICAgICAgZm9ybWF0OiAic2hvcnQiLAogICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSwKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBsb25nIGh1bWFuIG5hbWUgZm9yIHRoZSB6b25lJ3MgY3VycmVudCBvZmZzZXQsIGZvciBleGFtcGxlICJFYXN0ZXJuIFN0YW5kYXJkIFRpbWUiIG9yICJFYXN0ZXJuIERheWxpZ2h0IFRpbWUiLgogICAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkCiAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICovCiAgICBnZXQgb2Zmc2V0TmFtZUxvbmcoKSB7CiAgICAgIGlmICh0aGlzLmlzVmFsaWQpIHsKICAgICAgICByZXR1cm4gdGhpcy56b25lLm9mZnNldE5hbWUodGhpcy50cywgewogICAgICAgICAgZm9ybWF0OiAibG9uZyIsCiAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLAogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgd2hldGhlciB0aGlzIHpvbmUncyBvZmZzZXQgZXZlciBjaGFuZ2VzLCBhcyBpbiBhIERTVC4KICAgICAqIEB0eXBlIHtib29sZWFufQogICAgICovCiAgICBnZXQgaXNPZmZzZXRGaXhlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuem9uZS5pc1VuaXZlcnNhbCA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgd2hldGhlciB0aGUgRGF0ZVRpbWUgaXMgaW4gYSBEU1QuCiAgICAgKiBAdHlwZSB7Ym9vbGVhbn0KICAgICAqLwogICAgZ2V0IGlzSW5EU1QoKSB7CiAgICAgIGlmICh0aGlzLmlzT2Zmc2V0Rml4ZWQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgIHRoaXMub2Zmc2V0ID4gdGhpcy5zZXQoeyBtb250aDogMSwgZGF5OiAxIH0pLm9mZnNldCB8fAogICAgICAgICAgdGhpcy5vZmZzZXQgPiB0aGlzLnNldCh7IG1vbnRoOiA1IH0pLm9mZnNldAogICAgICAgICk7CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aG9zZSBEYXRlVGltZXMgd2hpY2ggaGF2ZSB0aGUgc2FtZSBsb2NhbCB0aW1lIGFzIHRoaXMgRGF0ZVRpbWUsIGJ1dCBhIGRpZmZlcmVudCBvZmZzZXQgZnJvbSBVVEMKICAgICAqIGluIHRoaXMgRGF0ZVRpbWUncyB6b25lLiBEdXJpbmcgRFNUIGNoYW5nZXMgbG9jYWwgdGltZSBjYW4gYmUgYW1iaWd1b3VzLCBmb3IgZXhhbXBsZQogICAgICogYDIwMjMtMTAtMjlUMDI6MzA6MDBgIGluIGBFdXJvcGUvQmVybGluYCBjYW4gaGF2ZSBvZmZzZXQgYCswMTowMGAgb3IgYCswMjowMGAuCiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBib3RoIHBvc3NpYmxlIERhdGVUaW1lcyBpZiB0aGlzIERhdGVUaW1lJ3MgbG9jYWwgdGltZSBpcyBhbWJpZ3VvdXMuCiAgICAgKiBAcmV0dXJucyB7RGF0ZVRpbWVbXX0KICAgICAqLwogICAgZ2V0UG9zc2libGVPZmZzZXRzKCkgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCB8fCB0aGlzLmlzT2Zmc2V0Rml4ZWQpIHsKICAgICAgICByZXR1cm4gW3RoaXNdOwogICAgICB9CiAgICAgIGNvbnN0IGRheU1zID0gODY0MDAwMDA7CiAgICAgIGNvbnN0IG1pbnV0ZU1zID0gNjAwMDA7CiAgICAgIGNvbnN0IGxvY2FsVFMgPSBvYmpUb0xvY2FsVFModGhpcy5jKTsKICAgICAgY29uc3Qgb0VhcmxpZXIgPSB0aGlzLnpvbmUub2Zmc2V0KGxvY2FsVFMgLSBkYXlNcyk7CiAgICAgIGNvbnN0IG9MYXRlciA9IHRoaXMuem9uZS5vZmZzZXQobG9jYWxUUyArIGRheU1zKTsKCiAgICAgIGNvbnN0IG8xID0gdGhpcy56b25lLm9mZnNldChsb2NhbFRTIC0gb0VhcmxpZXIgKiBtaW51dGVNcyk7CiAgICAgIGNvbnN0IG8yID0gdGhpcy56b25lLm9mZnNldChsb2NhbFRTIC0gb0xhdGVyICogbWludXRlTXMpOwogICAgICBpZiAobzEgPT09IG8yKSB7CiAgICAgICAgcmV0dXJuIFt0aGlzXTsKICAgICAgfQogICAgICBjb25zdCB0czEgPSBsb2NhbFRTIC0gbzEgKiBtaW51dGVNczsKICAgICAgY29uc3QgdHMyID0gbG9jYWxUUyAtIG8yICogbWludXRlTXM7CiAgICAgIGNvbnN0IGMxID0gdHNUb09iaih0czEsIG8xKTsKICAgICAgY29uc3QgYzIgPSB0c1RvT2JqKHRzMiwgbzIpOwogICAgICBpZiAoCiAgICAgICAgYzEuaG91ciA9PT0gYzIuaG91ciAmJgogICAgICAgIGMxLm1pbnV0ZSA9PT0gYzIubWludXRlICYmCiAgICAgICAgYzEuc2Vjb25kID09PSBjMi5zZWNvbmQgJiYKICAgICAgICBjMS5taWxsaXNlY29uZCA9PT0gYzIubWlsbGlzZWNvbmQKICAgICAgKSB7CiAgICAgICAgcmV0dXJuIFtjbG9uZSh0aGlzLCB7IHRzOiB0czEgfSksIGNsb25lKHRoaXMsIHsgdHM6IHRzMiB9KV07CiAgICAgIH0KICAgICAgcmV0dXJuIFt0aGlzXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIERhdGVUaW1lIGlzIGluIGEgbGVhcCB5ZWFyLCBmYWxzZSBvdGhlcndpc2UKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYpLmlzSW5MZWFwWWVhciAvLz0+IHRydWUKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTMpLmlzSW5MZWFwWWVhciAvLz0+IGZhbHNlCiAgICAgKiBAdHlwZSB7Ym9vbGVhbn0KICAgICAqLwogICAgZ2V0IGlzSW5MZWFwWWVhcigpIHsKICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgRGF0ZVRpbWUncyBtb250aAogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNiwgMikuZGF5c0luTW9udGggLy89PiAyOQogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNiwgMykuZGF5c0luTW9udGggLy89PiAzMQogICAgICogQHR5cGUge251bWJlcn0KICAgICAqLwogICAgZ2V0IGRheXNJbk1vbnRoKCkgewogICAgICByZXR1cm4gZGF5c0luTW9udGgodGhpcy55ZWFyLCB0aGlzLm1vbnRoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgRGF0ZVRpbWUncyB5ZWFyCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE2KS5kYXlzSW5ZZWFyIC8vPT4gMzY2CiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDEzKS5kYXlzSW5ZZWFyIC8vPT4gMzY1CiAgICAgKiBAdHlwZSB7bnVtYmVyfQogICAgICovCiAgICBnZXQgZGF5c0luWWVhcigpIHsKICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IGRheXNJblllYXIodGhpcy55ZWFyKSA6IE5hTjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3ZWVrcyBpbiB0aGlzIERhdGVUaW1lJ3MgeWVhcgogICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDA0KS53ZWVrc0luV2Vla1llYXIgLy89PiA1MwogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxMykud2Vla3NJbldlZWtZZWFyIC8vPT4gNTIKICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgKi8KICAgIGdldCB3ZWVrc0luV2Vla1llYXIoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB3ZWVrc0luV2Vla1llYXIodGhpcy53ZWVrWWVhcikgOiBOYU47CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZXNvbHZlZCBJbnRsIG9wdGlvbnMgZm9yIHRoaXMgRGF0ZVRpbWUuCiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBiZWhhdmlvciBvZiBmb3JtYXR0aW5nIG1ldGhvZHMKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gdGhlIHNhbWUgb3B0aW9ucyBhcyB0b0xvY2FsZVN0cmluZwogICAgICogQHJldHVybiB7T2JqZWN0fQogICAgICovCiAgICByZXNvbHZlZExvY2FsZU9wdGlvbnMob3B0cyA9IHt9KSB7CiAgICAgIGNvbnN0IHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIGNhbGVuZGFyIH0gPSBGb3JtYXR0ZXIuY3JlYXRlKAogICAgICAgIHRoaXMubG9jLmNsb25lKG9wdHMpLAogICAgICAgIG9wdHMKICAgICAgKS5yZXNvbHZlZE9wdGlvbnModGhpcyk7CiAgICAgIHJldHVybiB7IGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcjogY2FsZW5kYXIgfTsKICAgIH0KCiAgICAvLyBUUkFOU0ZPUk0KCiAgICAvKioKICAgICAqICJTZXQiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gVVRDLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuCiAgICAgKgogICAgICogRXF1aXZhbGVudCB0byB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0oJ3V0YycpCiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29mZnNldD0wXSAtIG9wdGlvbmFsbHksIGFuIG9mZnNldCBmcm9tIFVUQyBpbiBtaW51dGVzCiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHM9e31dIC0gb3B0aW9ucyB0byBwYXNzIHRvIGBzZXRab25lKClgCiAgICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KICAgICAqLwogICAgdG9VVEMob2Zmc2V0ID0gMCwgb3B0cyA9IHt9KSB7CiAgICAgIHJldHVybiB0aGlzLnNldFpvbmUoRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKG9mZnNldCksIG9wdHMpOwogICAgfQoKICAgIC8qKgogICAgICogIlNldCIgdGhlIERhdGVUaW1lJ3Mgem9uZSB0byB0aGUgaG9zdCdzIGxvY2FsIHpvbmUuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS4KICAgICAqCiAgICAgKiBFcXVpdmFsZW50IHRvIGBzZXRab25lKCdsb2NhbCcpYAogICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgKi8KICAgIHRvTG9jYWwoKSB7CiAgICAgIHJldHVybiB0aGlzLnNldFpvbmUoU2V0dGluZ3MuZGVmYXVsdFpvbmUpOwogICAgfQoKICAgIC8qKgogICAgICogIlNldCIgdGhlIERhdGVUaW1lJ3Mgem9uZSB0byBzcGVjaWZpZWQgem9uZS4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLgogICAgICoKICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBzZXR0ZXIga2VlcHMgdGhlIHVuZGVybHlpbmcgdGltZSB0aGUgc2FtZSAoYXMgaW4sIHRoZSBzYW1lIHRpbWVzdGFtcCksIGJ1dCB0aGUgbmV3IGluc3RhbmNlIHdpbGwgcmVwb3J0IGRpZmZlcmVudCBsb2NhbCB0aW1lcyBhbmQgY29uc2lkZXIgRFNUcyB3aGVuIG1ha2luZyBjb21wdXRhdGlvbnMsIGFzIHdpdGgge0BsaW5rIERhdGVUaW1lI3BsdXN9LiBZb3UgbWF5IHdpc2ggdG8gdXNlIHtAbGluayBEYXRlVGltZSN0b0xvY2FsfSBhbmQge0BsaW5rIERhdGVUaW1lI3RvVVRDfSB3aGljaCBwcm92aWRlIHNpbXBsZSBjb252ZW5pZW5jZSB3cmFwcGVycyBmb3IgY29tbW9ubHkgdXNlZCB6b25lcy4KICAgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFt6b25lPSdsb2NhbCddIC0gYSB6b25lIGlkZW50aWZpZXIuIEFzIGEgc3RyaW5nLCB0aGF0IGNhbiBiZSBhbnkgSUFOQSB6b25lIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBlbnZpcm9ubWVudCwgb3IgYSBmaXhlZC1vZmZzZXQgbmFtZSBvZiB0aGUgZm9ybSAnVVRDKzMnLCBvciB0aGUgc3RyaW5ncyAnbG9jYWwnIG9yICd1dGMnLiBZb3UgbWF5IGFsc28gc3VwcGx5IGFuIGluc3RhbmNlIG9mIGEge0BsaW5rIERhdGVUaW1lI1pvbmV9IGNsYXNzLgogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmtlZXBMb2NhbFRpbWU9ZmFsc2VdIC0gSWYgdHJ1ZSwgYWRqdXN0IHRoZSB1bmRlcmx5aW5nIHRpbWUgc28gdGhhdCB0aGUgbG9jYWwgdGltZSBzdGF5cyB0aGUgc2FtZSwgYnV0IGluIHRoZSB0YXJnZXQgem9uZS4gWW91IHNob3VsZCByYXJlbHkgbmVlZCB0aGlzLgogICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgKi8KICAgIHNldFpvbmUoem9uZSwgeyBrZWVwTG9jYWxUaW1lID0gZmFsc2UsIGtlZXBDYWxlbmRhclRpbWUgPSBmYWxzZSB9ID0ge30pIHsKICAgICAgem9uZSA9IG5vcm1hbGl6ZVpvbmUoem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpOwogICAgICBpZiAoem9uZS5lcXVhbHModGhpcy56b25lKSkgewogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9IGVsc2UgaWYgKCF6b25lLmlzVmFsaWQpIHsKICAgICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZSkpOwogICAgICB9IGVsc2UgewogICAgICAgIGxldCBuZXdUUyA9IHRoaXMudHM7CiAgICAgICAgaWYgKGtlZXBMb2NhbFRpbWUgfHwga2VlcENhbGVuZGFyVGltZSkgewogICAgICAgICAgY29uc3Qgb2Zmc2V0R3Vlc3MgPSB6b25lLm9mZnNldCh0aGlzLnRzKTsKICAgICAgICAgIGNvbnN0IGFzT2JqID0gdGhpcy50b09iamVjdCgpOwogICAgICAgICAgW25ld1RTXSA9IG9ialRvVFMoYXNPYmosIG9mZnNldEd1ZXNzLCB6b25lKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNsb25lKHRoaXMsIHsgdHM6IG5ld1RTLCB6b25lIH0pOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiAiU2V0IiB0aGUgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG9yIG91dHB1dENhbGVuZGFyLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuCiAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyAtIHRoZSBwcm9wZXJ0aWVzIHRvIHNldAogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLnJlY29uZmlndXJlKHsgbG9jYWxlOiAnZW4tR0InIH0pCiAgICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KICAgICAqLwogICAgcmVjb25maWd1cmUoeyBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIgfSA9IHt9KSB7CiAgICAgIGNvbnN0IGxvYyA9IHRoaXMubG9jLmNsb25lKHsgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyIH0pOwogICAgICByZXR1cm4gY2xvbmUodGhpcywgeyBsb2MgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiAiU2V0IiB0aGUgbG9jYWxlLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuCiAgICAgKiBKdXN0IGEgY29udmVuaWVudCBhbGlhcyBmb3IgcmVjb25maWd1cmUoeyBsb2NhbGUgfSkKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5zZXRMb2NhbGUoJ2VuLUdCJykKICAgICAqIEByZXR1cm4ge0RhdGVUaW1lfQogICAgICovCiAgICBzZXRMb2NhbGUobG9jYWxlKSB7CiAgICAgIHJldHVybiB0aGlzLnJlY29uZmlndXJlKHsgbG9jYWxlIH0pOwogICAgfQoKICAgIC8qKgogICAgICogIlNldCIgdGhlIHZhbHVlcyBvZiBzcGVjaWZpZWQgdW5pdHMuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS4KICAgICAqIFlvdSBjYW4gb25seSBzZXQgdW5pdHMgd2l0aCB0aGlzIG1ldGhvZDsgZm9yICJzZXR0aW5nIiBtZXRhZGF0YSwgc2VlIHtAbGluayBEYXRlVGltZSNyZWNvbmZpZ3VyZX0gYW5kIHtAbGluayBEYXRlVGltZSNzZXRab25lfS4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgLSBhIG1hcHBpbmcgb2YgdW5pdHMgdG8gbnVtYmVycwogICAgICogQGV4YW1wbGUgZHQuc2V0KHsgeWVhcjogMjAxNyB9KQogICAgICogQGV4YW1wbGUgZHQuc2V0KHsgaG91cjogOCwgbWludXRlOiAzMCB9KQogICAgICogQGV4YW1wbGUgZHQuc2V0KHsgd2Vla2RheTogNSB9KQogICAgICogQGV4YW1wbGUgZHQuc2V0KHsgeWVhcjogMjAwNSwgb3JkaW5hbDogMjM0IH0pCiAgICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KICAgICAqLwogICAgc2V0KHZhbHVlcykgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CgogICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplT2JqZWN0KHZhbHVlcywgbm9ybWFsaXplVW5pdCksCiAgICAgICAgc2V0dGluZ1dlZWtTdHVmZiA9CiAgICAgICAgICAhaXNVbmRlZmluZWQobm9ybWFsaXplZC53ZWVrWWVhcikgfHwKICAgICAgICAgICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtOdW1iZXIpIHx8CiAgICAgICAgICAhaXNVbmRlZmluZWQobm9ybWFsaXplZC53ZWVrZGF5KSwKICAgICAgICBjb250YWluc09yZGluYWwgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5vcmRpbmFsKSwKICAgICAgICBjb250YWluc0dyZWdvclllYXIgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC55ZWFyKSwKICAgICAgICBjb250YWluc0dyZWdvck1EID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQubW9udGgpIHx8ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLmRheSksCiAgICAgICAgY29udGFpbnNHcmVnb3IgPSBjb250YWluc0dyZWdvclllYXIgfHwgY29udGFpbnNHcmVnb3JNRCwKICAgICAgICBkZWZpbml0ZVdlZWtEZWYgPSBub3JtYWxpemVkLndlZWtZZWFyIHx8IG5vcm1hbGl6ZWQud2Vla051bWJlcjsKCiAgICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoCiAgICAgICAgICAiQ2FuJ3QgbWl4IHdlZWtZZWFyL3dlZWtOdW1iZXIgdW5pdHMgd2l0aCB5ZWFyL21vbnRoL2RheSBvciBvcmRpbmFscyIKICAgICAgICApOwogICAgICB9CgogICAgICBpZiAoY29udGFpbnNHcmVnb3JNRCAmJiBjb250YWluc09yZGluYWwpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoIkNhbid0IG1peCBvcmRpbmFsIGRhdGVzIHdpdGggbW9udGgvZGF5Iik7CiAgICAgIH0KCiAgICAgIGxldCBtaXhlZDsKICAgICAgaWYgKHNldHRpbmdXZWVrU3R1ZmYpIHsKICAgICAgICBtaXhlZCA9IHdlZWtUb0dyZWdvcmlhbih7IC4uLmdyZWdvcmlhblRvV2Vlayh0aGlzLmMpLCAuLi5ub3JtYWxpemVkIH0pOwogICAgICB9IGVsc2UgaWYgKCFpc1VuZGVmaW5lZChub3JtYWxpemVkLm9yZGluYWwpKSB7CiAgICAgICAgbWl4ZWQgPSBvcmRpbmFsVG9HcmVnb3JpYW4oeyAuLi5ncmVnb3JpYW5Ub09yZGluYWwodGhpcy5jKSwgLi4ubm9ybWFsaXplZCB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtaXhlZCA9IHsgLi4udGhpcy50b09iamVjdCgpLCAuLi5ub3JtYWxpemVkIH07CgogICAgICAgIC8vIGlmIHdlIGRpZG4ndCBzZXQgdGhlIGRheSBidXQgd2UgZW5kZWQgdXAgb24gYW4gb3ZlcmZsb3cgZGF0ZSwKICAgICAgICAvLyB1c2UgdGhlIGxhc3QgZGF5IG9mIHRoZSByaWdodCBtb250aAogICAgICAgIGlmIChpc1VuZGVmaW5lZChub3JtYWxpemVkLmRheSkpIHsKICAgICAgICAgIG1peGVkLmRheSA9IE1hdGgubWluKGRheXNJbk1vbnRoKG1peGVkLnllYXIsIG1peGVkLm1vbnRoKSwgbWl4ZWQuZGF5KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGNvbnN0IFt0cywgb10gPSBvYmpUb1RTKG1peGVkLCB0aGlzLm8sIHRoaXMuem9uZSk7CiAgICAgIHJldHVybiBjbG9uZSh0aGlzLCB7IHRzLCBvIH0pOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGEgcGVyaW9kIG9mIHRpbWUgdG8gdGhpcyBEYXRlVGltZSBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUKICAgICAqCiAgICAgKiBBZGRpbmcgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG9yIG1pbGxpc2Vjb25kcyBpbmNyZWFzZXMgdGhlIHRpbWVzdGFtcCBieSB0aGUgcmlnaHQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gQWRkaW5nIGRheXMsIG1vbnRocywgb3IgeWVhcnMgc2hpZnRzIHRoZSBjYWxlbmRhciwgYWNjb3VudGluZyBmb3IgRFNUcyBhbmQgbGVhcCB5ZWFycyBhbG9uZyB0aGUgd2F5LiBUaHVzLCBgZHQucGx1cyh7IGhvdXJzOiAyNCB9KWAgbWF5IHJlc3VsdCBpbiBhIGRpZmZlcmVudCB0aW1lIHRoYW4gYGR0LnBsdXMoeyBkYXlzOiAxIH0pYCBpZiB0aGVyZSdzIGEgRFNUIHNoaWZ0IGluIGJldHdlZW4uCiAgICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGFtb3VudCB0byBhZGQuIEVpdGhlciBhIEx1eG9uIER1cmF0aW9uLCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHRoZSBvYmplY3QgYXJndW1lbnQgdG8gRHVyYXRpb24uZnJvbU9iamVjdCgpCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKDEyMykgLy9+PiBpbiAxMjMgbWlsbGlzZWNvbmRzCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgbWludXRlczogMTUgfSkgLy9+PiBpbiAxNSBtaW51dGVzCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KSAvL34+IHRoaXMgdGltZSB0b21vcnJvdwogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IC0xIH0pIC8vfj4gdGhpcyB0aW1lIHllc3RlcmRheQogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGhvdXJzOiAzLCBtaW51dGVzOiAxMyB9KSAvL34+IGluIDMgaHIsIDEzIG1pbgogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyhEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDMsIG1pbnV0ZXM6IDEzIH0pKSAvL34+IGluIDMgaHIsIDEzIG1pbgogICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgKi8KICAgIHBsdXMoZHVyYXRpb24pIHsKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwogICAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTsKICAgICAgcmV0dXJuIGNsb25lKHRoaXMsIGFkanVzdFRpbWUodGhpcywgZHVyKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTdWJ0cmFjdCBhIHBlcmlvZCBvZiB0aW1lIHRvIHRoaXMgRGF0ZVRpbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lCiAgICAgKiBTZWUge0BsaW5rIERhdGVUaW1lI3BsdXN9CiAgICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGFtb3VudCB0byBzdWJ0cmFjdC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KCkKICAgICBAcmV0dXJuIHtEYXRlVGltZX0KICAgICAqLwogICAgbWludXMoZHVyYXRpb24pIHsKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwogICAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKS5uZWdhdGUoKTsKICAgICAgcmV0dXJuIGNsb25lKHRoaXMsIGFkanVzdFRpbWUodGhpcywgZHVyKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiAiU2V0IiB0aGlzIERhdGVUaW1lIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSB1bml0IG9mIHRpbWUuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIFRoZSB1bml0IHRvIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YuIENhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsIG9yICdtaWxsaXNlY29uZCcuCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5zdGFydE9mKCdtb250aCcpLnRvSVNPRGF0ZSgpOyAvLz0+ICcyMDE0LTAzLTAxJwogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuc3RhcnRPZigneWVhcicpLnRvSVNPRGF0ZSgpOyAvLz0+ICcyMDE0LTAxLTAxJwogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuc3RhcnRPZignd2VlaycpLnRvSVNPRGF0ZSgpOyAvLz0+ICcyMDE0LTAzLTAzJywgd2Vla3MgYWx3YXlzIHN0YXJ0IG9uIE1vbmRheXMKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5zdGFydE9mKCdkYXknKS50b0lTT1RpbWUoKTsgLy89PiAnMDA6MDAuMDAwLTA1OjAwJwogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMywgNSwgMzApLnN0YXJ0T2YoJ2hvdXInKS50b0lTT1RpbWUoKTsgLy89PiAnMDU6MDA6MDAuMDAwLTA1OjAwJwogICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgKi8KICAgIHN0YXJ0T2YodW5pdCkgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CiAgICAgIGNvbnN0IG8gPSB7fSwKICAgICAgICBub3JtYWxpemVkVW5pdCA9IER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodW5pdCk7CiAgICAgIHN3aXRjaCAobm9ybWFsaXplZFVuaXQpIHsKICAgICAgICBjYXNlICJ5ZWFycyI6CiAgICAgICAgICBvLm1vbnRoID0gMTsKICAgICAgICAvLyBmYWxscyB0aHJvdWdoCiAgICAgICAgY2FzZSAicXVhcnRlcnMiOgogICAgICAgIGNhc2UgIm1vbnRocyI6CiAgICAgICAgICBvLmRheSA9IDE7CiAgICAgICAgLy8gZmFsbHMgdGhyb3VnaAogICAgICAgIGNhc2UgIndlZWtzIjoKICAgICAgICBjYXNlICJkYXlzIjoKICAgICAgICAgIG8uaG91ciA9IDA7CiAgICAgICAgLy8gZmFsbHMgdGhyb3VnaAogICAgICAgIGNhc2UgImhvdXJzIjoKICAgICAgICAgIG8ubWludXRlID0gMDsKICAgICAgICAvLyBmYWxscyB0aHJvdWdoCiAgICAgICAgY2FzZSAibWludXRlcyI6CiAgICAgICAgICBvLnNlY29uZCA9IDA7CiAgICAgICAgLy8gZmFsbHMgdGhyb3VnaAogICAgICAgIGNhc2UgInNlY29uZHMiOgogICAgICAgICAgby5taWxsaXNlY29uZCA9IDA7CiAgICAgICAgICBicmVhazsKICAgICAgICAvLyBubyBkZWZhdWx0LCBpbnZhbGlkIHVuaXRzIHRocm93IGluIG5vcm1hbGl6ZVVuaXQoKQogICAgICB9CgogICAgICBpZiAobm9ybWFsaXplZFVuaXQgPT09ICJ3ZWVrcyIpIHsKICAgICAgICBvLndlZWtkYXkgPSAxOwogICAgICB9CgogICAgICBpZiAobm9ybWFsaXplZFVuaXQgPT09ICJxdWFydGVycyIpIHsKICAgICAgICBjb25zdCBxID0gTWF0aC5jZWlsKHRoaXMubW9udGggLyAzKTsKICAgICAgICBvLm1vbnRoID0gKHEgLSAxKSAqIDMgKyAxOwogICAgICB9CgogICAgICByZXR1cm4gdGhpcy5zZXQobyk7CiAgICB9CgogICAgLyoqCiAgICAgKiAiU2V0IiB0aGlzIERhdGVUaW1lIHRvIHRoZSBlbmQgKG1lYW5pbmcgdGhlIGxhc3QgbWlsbGlzZWNvbmQpIG9mIGEgdW5pdCBvZiB0aW1lCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIFRoZSB1bml0IHRvIGdvIHRvIHRoZSBlbmQgb2YuIENhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsIG9yICdtaWxsaXNlY29uZCcuCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5lbmRPZignbW9udGgnKS50b0lTTygpOyAvLz0+ICcyMDE0LTAzLTMxVDIzOjU5OjU5Ljk5OS0wNTowMCcKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLmVuZE9mKCd5ZWFyJykudG9JU08oKTsgLy89PiAnMjAxNC0xMi0zMVQyMzo1OTo1OS45OTktMDU6MDAnCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5lbmRPZignd2VlaycpLnRvSVNPKCk7IC8vID0+ICcyMDE0LTAzLTA5VDIzOjU5OjU5Ljk5OS0wNTowMCcsIHdlZWtzIHN0YXJ0IG9uIE1vbmRheXMKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5lbmRPZignZGF5JykudG9JU08oKTsgLy89PiAnMjAxNC0wMy0wM1QyMzo1OTo1OS45OTktMDU6MDAnCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuZW5kT2YoJ2hvdXInKS50b0lTTygpOyAvLz0+ICcyMDE0LTAzLTAzVDA1OjU5OjU5Ljk5OS0wNTowMCcKICAgICAqIEByZXR1cm4ge0RhdGVUaW1lfQogICAgICovCiAgICBlbmRPZih1bml0KSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQKICAgICAgICA/IHRoaXMucGx1cyh7IFt1bml0XTogMSB9KQogICAgICAgICAgICAuc3RhcnRPZih1bml0KQogICAgICAgICAgICAubWludXMoMSkKICAgICAgICA6IHRoaXM7CiAgICB9CgogICAgLy8gT1VUUFVUCgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdCBzdHJpbmcuCiAgICAgKiAqKllvdSBtYXkgbm90IHdhbnQgdGhpcy4qKiBTZWUge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3IgYSBtb3JlIGZsZXhpYmxlIGZvcm1hdHRpbmcgdG9vbC4gRm9yIGEgdGFibGUgb2YgdG9rZW5zIGFuZCB0aGVpciBpbnRlcnByZXRhdGlvbnMsIHNlZSBbaGVyZV0oaHR0cHM6Ly9tb21lbnQuZ2l0aHViLmlvL2x1eG9uLyMvZm9ybWF0dGluZz9pZD10YWJsZS1vZi10b2tlbnMpLgogICAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlLgogICAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgc3RyaW5nCiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdHMgdG8gb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbiB0aGlzIERhdGVUaW1lCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0Zvcm1hdCgneXl5eSBMTEwgZGQnKSAvLz0+ICcyMDE3IEFwciAyMicKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZSgnZnInKS50b0Zvcm1hdCgneXl5eSBMTEwgZGQnKSAvLz0+ICcyMDE3IGF2ci4gMjInCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0Zvcm1hdCgneXl5eSBMTEwgZGQnLCB7IGxvY2FsZTogImZyIiB9KSAvLz0+ICcyMDE3IGF2ci4gMjInCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0Zvcm1hdCgiSEggJ2hvdXJzIGFuZCcgbW0gJ21pbnV0ZXMnIikgLy89PiAnMjAgaG91cnMgYW5kIDU1IG1pbnV0ZXMnCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgKi8KICAgIHRvRm9ybWF0KGZtdCwgb3B0cyA9IHt9KSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQKICAgICAgICA/IEZvcm1hdHRlci5jcmVhdGUodGhpcy5sb2MucmVkZWZhdWx0VG9FTihvcHRzKSkuZm9ybWF0RGF0ZVRpbWVGcm9tU3RyaW5nKHRoaXMsIGZtdCkKICAgICAgICA6IElOVkFMSUQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbG9jYWxpemVkIHN0cmluZyByZXByZXNlbnRpbmcgdGhpcyBkYXRlLiBBY2NlcHRzIHRoZSBzYW1lIG9wdGlvbnMgYXMgdGhlIEludGwuRGF0ZVRpbWVGb3JtYXQgY29uc3RydWN0b3IgYW5kIGFueSBwcmVzZXRzIGRlZmluZWQgYnkgTHV4b24sIHN1Y2ggYXMgYERhdGVUaW1lLkRBVEVfRlVMTGAgb3IgYERhdGVUaW1lLlRJTUVfU0lNUExFYC4KICAgICAqIFRoZSBleGFjdCBiZWhhdmlvciBvZiB0aGlzIG1ldGhvZCBpcyBicm93c2VyLXNwZWNpZmljLCBidXQgaW4gZ2VuZXJhbCBpdCB3aWxsIHJldHVybiBhbiBhcHByb3ByaWF0ZSByZXByZXNlbnRhdGlvbgogICAgICogb2YgdGhlIERhdGVUaW1lIGluIHRoZSBhc3NpZ25lZCBsb2NhbGUuCiAgICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXQKICAgICAqIEBwYXJhbSBmb3JtYXRPcHRzIHtPYmplY3R9IC0gSW50bC5EYXRlVGltZUZvcm1hdCBjb25zdHJ1Y3RvciBvcHRpb25zIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0cyB0byBvdmVycmlkZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9uIHRoaXMgRGF0ZVRpbWUKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKCk7IC8vPT4gNC8yMC8yMDE3CiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoJ2VuLWdiJykudG9Mb2NhbGVTdHJpbmcoKTsgLy89PiAnMjAvMDQvMjAxNycKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfRlVMTCk7IC8vPT4gJ0FwcmlsIDIwLCAyMDE3JwogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9GVUxMLCB7IGxvY2FsZTogJ2ZyJyB9KTsgLy89PiAnMjggYW/Du3QgMjAyMicKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLlRJTUVfU0lNUExFKTsgLy89PiAnMTE6MzIgQU0nCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFVElNRV9TSE9SVCk7IC8vPT4gJzQvMjAvMjAxNywgMTE6MzIgQU0nCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IHdlZWtkYXk6ICdsb25nJywgbW9udGg6ICdsb25nJywgZGF5OiAnMi1kaWdpdCcgfSk7IC8vPT4gJ1RodXJzZGF5LCBBcHJpbCAyMCcKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKHsgd2Vla2RheTogJ3Nob3J0JywgbW9udGg6ICdzaG9ydCcsIGRheTogJzItZGlnaXQnLCBob3VyOiAnMi1kaWdpdCcsIG1pbnV0ZTogJzItZGlnaXQnIH0pOyAvLz0+ICdUaHUsIEFwciAyMCwgMTE6MjcgQU0nCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IGhvdXI6ICcyLWRpZ2l0JywgbWludXRlOiAnMi1kaWdpdCcsIGhvdXJDeWNsZTogJ2gyMycgfSk7IC8vPT4gJzExOjMyJwogICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICovCiAgICB0b0xvY2FsZVN0cmluZyhmb3JtYXRPcHRzID0gREFURV9TSE9SVCwgb3B0cyA9IHt9KSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQKICAgICAgICA/IEZvcm1hdHRlci5jcmVhdGUodGhpcy5sb2MuY2xvbmUob3B0cyksIGZvcm1hdE9wdHMpLmZvcm1hdERhdGVUaW1lKHRoaXMpCiAgICAgICAgOiBJTlZBTElEOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBmb3JtYXQgInBhcnRzIiwgbWVhbmluZyBpbmRpdmlkdWFsIHRva2VucyBhbG9uZyB3aXRoIG1ldGFkYXRhLiBUaGlzIGlzIGFsbG93cyBjYWxsZXJzIHRvIHBvc3QtcHJvY2VzcyBpbmRpdmlkdWFsIHNlY3Rpb25zIG9mIHRoZSBmb3JtYXR0ZWQgb3V0cHV0LgogICAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGVUaW1lRm9ybWF0L2Zvcm1hdFRvUGFydHMKICAgICAqIEBwYXJhbSBvcHRzIHtPYmplY3R9IC0gSW50bC5EYXRlVGltZUZvcm1hdCBjb25zdHJ1Y3RvciBvcHRpb25zLCBzYW1lIGFzIGB0b0xvY2FsZVN0cmluZ2AuCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVBhcnRzKCk7IC8vPT4gWwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdkYXknLCB2YWx1ZTogJzI1JyB9LAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdsaXRlcmFsJywgdmFsdWU6ICcvJyB9LAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdtb250aCcsIHZhbHVlOiAnMDUnIH0sCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ2xpdGVyYWwnLCB2YWx1ZTogJy8nIH0sCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ3llYXInLCB2YWx1ZTogJzE5ODInIH0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+IF0KICAgICAqLwogICAgdG9Mb2NhbGVQYXJ0cyhvcHRzID0ge30pIHsKICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZAogICAgICAgID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYy5jbG9uZShvcHRzKSwgb3B0cykuZm9ybWF0RGF0ZVRpbWVQYXJ0cyh0aGlzKQogICAgICAgIDogW107CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZQogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzTWlsbGlzZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDAKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwCiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXQ9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJ1onIG9yICctMDQ6MDAnCiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmV4dGVuZGVkWm9uZT1mYWxzZV0gLSBhZGQgdGhlIHRpbWUgem9uZSBmb3JtYXQgZXh0ZW5zaW9uCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuZm9ybWF0PSdleHRlbmRlZCddIC0gY2hvb3NlIGJldHdlZW4gdGhlIGJhc2ljIGFuZCBleHRlbmRlZCBmb3JtYXQKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgzLCA1LCAyNSkudG9JU08oKSAvLz0+ICcxOTgyLTA1LTI1VDAwOjAwOjAwLjAwMFonCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTygpIC8vPT4gJzIwMTctMDQtMjJUMjA6NDc6MDUuMzM1LTA0OjAwJwogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9JU08oeyBpbmNsdWRlT2Zmc2V0OiBmYWxzZSB9KSAvLz0+ICcyMDE3LTA0LTIyVDIwOjQ3OjA1LjMzNScKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzIwMTcwNDIyVDIwNDcwNS4zMzUtMDQwMCcKICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAqLwogICAgdG9JU08oewogICAgICBmb3JtYXQgPSAiZXh0ZW5kZWQiLAogICAgICBzdXBwcmVzc1NlY29uZHMgPSBmYWxzZSwKICAgICAgc3VwcHJlc3NNaWxsaXNlY29uZHMgPSBmYWxzZSwKICAgICAgaW5jbHVkZU9mZnNldCA9IHRydWUsCiAgICAgIGV4dGVuZGVkWm9uZSA9IGZhbHNlLAogICAgfSA9IHt9KSB7CiAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KCiAgICAgIGNvbnN0IGV4dCA9IGZvcm1hdCA9PT0gImV4dGVuZGVkIjsKCiAgICAgIGxldCBjID0gdG9JU09EYXRlKHRoaXMsIGV4dCk7CiAgICAgIGMgKz0gIlQiOwogICAgICBjICs9IHRvSVNPVGltZSh0aGlzLCBleHQsIHN1cHByZXNzU2Vjb25kcywgc3VwcHJlc3NNaWxsaXNlY29uZHMsIGluY2x1ZGVPZmZzZXQsIGV4dGVuZGVkWm9uZSk7CiAgICAgIHJldHVybiBjOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUncyBkYXRlIGNvbXBvbmVudAogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuZm9ybWF0PSdleHRlbmRlZCddIC0gY2hvb3NlIGJldHdlZW4gdGhlIGJhc2ljIGFuZCBleHRlbmRlZCBmb3JtYXQKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgyLCA1LCAyNSkudG9JU09EYXRlKCkgLy89PiAnMTk4Mi0wNS0yNScKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgyLCA1LCAyNSkudG9JU09EYXRlKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzE5ODIwNTI1JwogICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICovCiAgICB0b0lTT0RhdGUoeyBmb3JtYXQgPSAiZXh0ZW5kZWQiIH0gPSB7fSkgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CgogICAgICByZXR1cm4gdG9JU09EYXRlKHRoaXMsIGZvcm1hdCA9PT0gImV4dGVuZGVkIik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIHdlZWsgZGF0ZQogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDE5ODIsIDUsIDI1KS50b0lTT1dlZWtEYXRlKCkgLy89PiAnMTk4Mi1XMjEtMicKICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAqLwogICAgdG9JU09XZWVrRGF0ZSgpIHsKICAgICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCAia2tray0nVydXVy1jIik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIHRpbWUgY29tcG9uZW50CiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NNaWxsaXNlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMAogICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc1NlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDAKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCcKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZXh0ZW5kZWRab25lPXRydWVdIC0gYWRkIHRoZSB0aW1lIHpvbmUgZm9ybWF0IGV4dGVuc2lvbgogICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlUHJlZml4PWZhbHNlXSAtIGluY2x1ZGUgdGhlIGBUYCBwcmVmaXgKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdAogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkuc2V0KHsgaG91cjogNywgbWludXRlOiAzNCB9KS50b0lTT1RpbWUoKSAvLz0+ICcwNzozNDoxOS4zNjFaJwogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkuc2V0KHsgaG91cjogNywgbWludXRlOiAzNCwgc2Vjb25kczogMCwgbWlsbGlzZWNvbmRzOiAwIH0pLnRvSVNPVGltZSh7IHN1cHByZXNzU2Vjb25kczogdHJ1ZSB9KSAvLz0+ICcwNzozNFonCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcwNzM0MTkuMzYxWicKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQgfSkudG9JU09UaW1lKHsgaW5jbHVkZVByZWZpeDogdHJ1ZSB9KSAvLz0+ICdUMDc6MzQ6MTkuMzYxWicKICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAqLwogICAgdG9JU09UaW1lKHsKICAgICAgc3VwcHJlc3NNaWxsaXNlY29uZHMgPSBmYWxzZSwKICAgICAgc3VwcHJlc3NTZWNvbmRzID0gZmFsc2UsCiAgICAgIGluY2x1ZGVPZmZzZXQgPSB0cnVlLAogICAgICBpbmNsdWRlUHJlZml4ID0gZmFsc2UsCiAgICAgIGV4dGVuZGVkWm9uZSA9IGZhbHNlLAogICAgICBmb3JtYXQgPSAiZXh0ZW5kZWQiLAogICAgfSA9IHt9KSB7CiAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KCiAgICAgIGxldCBjID0gaW5jbHVkZVByZWZpeCA/ICJUIiA6ICIiOwogICAgICByZXR1cm4gKAogICAgICAgIGMgKwogICAgICAgIHRvSVNPVGltZSgKICAgICAgICAgIHRoaXMsCiAgICAgICAgICBmb3JtYXQgPT09ICJleHRlbmRlZCIsCiAgICAgICAgICBzdXBwcmVzc1NlY29uZHMsCiAgICAgICAgICBzdXBwcmVzc01pbGxpc2Vjb25kcywKICAgICAgICAgIGluY2x1ZGVPZmZzZXQsCiAgICAgICAgICBleHRlbmRlZFpvbmUKICAgICAgICApCiAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIFJGQyAyODIyLWNvbXBhdGlibGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE0LCA3LCAxMykudG9SRkMyODIyKCkgLy89PiAnU3VuLCAxMyBKdWwgMjAxNCAwMDowMDowMCArMDAwMCcKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1JGQzI4MjIoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDAwOjAwOjAwIC0wNDAwJwogICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICovCiAgICB0b1JGQzI4MjIoKSB7CiAgICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcywgIkVFRSwgZGQgTExMIHl5eXkgSEg6bW06c3MgWlpaIiwgZmFsc2UpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gSFRUUCBoZWFkZXJzLiBUaGUgb3V0cHV0IGlzIGFsd2F5cyBleHByZXNzZWQgaW4gR01ULgogICAgICogU3BlY2lmaWNhbGx5LCB0aGUgc3RyaW5nIGNvbmZvcm1zIHRvIFJGQyAxMTIzLgogICAgICogQHNlZSBodHRwczovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMzLmh0bWwjc2VjMy4zLjEKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE0LCA3LCAxMykudG9IVFRQKCkgLy89PiAnU3VuLCAxMyBKdWwgMjAxNCAwMDowMDowMCBHTVQnCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMsIDE5KS50b0hUVFAoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDE5OjAwOjAwIEdNVCcKICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAqLwogICAgdG9IVFRQKCkgewogICAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMudG9VVEMoKSwgIkVFRSwgZGQgTExMIHl5eXkgSEg6bW06c3MgJ0dNVCciKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIFNRTCBEYXRlCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvU1FMRGF0ZSgpIC8vPT4gJzIwMTQtMDctMTMnCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgKi8KICAgIHRvU1FMRGF0ZSgpIHsKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICByZXR1cm4gdG9JU09EYXRlKHRoaXMsIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gU1FMIFRpbWUKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwogICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlWm9uZT1mYWxzZV0gLSBpbmNsdWRlIHRoZSB6b25lLCBzdWNoIGFzICdBbWVyaWNhL05ld19Zb3JrJy4gT3ZlcnJpZGVzIGluY2x1ZGVPZmZzZXQuCiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXQ9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJ1onIG9yICctMDQ6MDAnCiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXRTcGFjZT10cnVlXSAtIGluY2x1ZGUgdGhlIHNwYWNlIGJldHdlZW4gdGhlIHRpbWUgYW5kIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJzA1OjE1OjE2LjM0NSAtMDQ6MDAnCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS50b1NRTCgpIC8vPT4gJzA1OjE1OjE2LjM0NScKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvU1FMKCkgLy89PiAnMDU6MTU6MTYuMzQ1IC0wNDowMCcKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvU1FMKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMDU6MTU6MTYuMzQ1JwogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9TUUwoeyBpbmNsdWRlWm9uZTogZmFsc2UgfSkgLy89PiAnMDU6MTU6MTYuMzQ1IEFtZXJpY2EvTmV3X1lvcmsnCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgKi8KICAgIHRvU1FMVGltZSh7IGluY2x1ZGVPZmZzZXQgPSB0cnVlLCBpbmNsdWRlWm9uZSA9IGZhbHNlLCBpbmNsdWRlT2Zmc2V0U3BhY2UgPSB0cnVlIH0gPSB7fSkgewogICAgICBsZXQgZm10ID0gIkhIOm1tOnNzLlNTUyI7CgogICAgICBpZiAoaW5jbHVkZVpvbmUgfHwgaW5jbHVkZU9mZnNldCkgewogICAgICAgIGlmIChpbmNsdWRlT2Zmc2V0U3BhY2UpIHsKICAgICAgICAgIGZtdCArPSAiICI7CiAgICAgICAgfQogICAgICAgIGlmIChpbmNsdWRlWm9uZSkgewogICAgICAgICAgZm10ICs9ICJ6IjsKICAgICAgICB9IGVsc2UgaWYgKGluY2x1ZGVPZmZzZXQpIHsKICAgICAgICAgIGZtdCArPSAiWloiOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCBmbXQsIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gU1FMIERhdGVUaW1lCiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVpvbmU9ZmFsc2VdIC0gaW5jbHVkZSB0aGUgem9uZSwgc3VjaCBhcyAnQW1lcmljYS9OZXdfWW9yaycuIE92ZXJyaWRlcyBpbmNsdWRlT2Zmc2V0LgogICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0PXRydWVdIC0gaW5jbHVkZSB0aGUgb2Zmc2V0LCBzdWNoIGFzICdaJyBvciAnLTA0OjAwJwogICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0U3BhY2U9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSB0aW1lIGFuZCB0aGUgb2Zmc2V0LCBzdWNoIGFzICcwNToxNToxNi4zNDUgLTA0OjAwJwogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b1NRTCgpIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIFonCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCA3LCAxMykudG9TUUwoKSAvLz0+ICcyMDE0LTA3LTEzIDAwOjAwOjAwLjAwMCAtMDQ6MDAnCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCA3LCAxMykudG9TUUwoeyBpbmNsdWRlT2Zmc2V0OiBmYWxzZSB9KSAvLz0+ICcyMDE0LTA3LTEzIDAwOjAwOjAwLjAwMCcKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1NRTCh7IGluY2x1ZGVab25lOiB0cnVlIH0pIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIEFtZXJpY2EvTmV3X1lvcmsnCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgKi8KICAgIHRvU1FMKG9wdHMgPSB7fSkgewogICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CgogICAgICByZXR1cm4gYCR7dGhpcy50b1NRTERhdGUoKX0gJHt0aGlzLnRvU1FMVGltZShvcHRzKX1gOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciBkZWJ1Z2dpbmcKICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAqLwogICAgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnRvSVNPKCkgOiBJTlZBTElEOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZXBvY2ggbWlsbGlzZWNvbmRzIG9mIHRoaXMgRGF0ZVRpbWUuIEFsaWFzIG9mIHtAbGluayBEYXRlVGltZSN0b01pbGxpc30KICAgICAqIEByZXR1cm4ge251bWJlcn0KICAgICAqLwogICAgdmFsdWVPZigpIHsKICAgICAgcmV0dXJuIHRoaXMudG9NaWxsaXMoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGVwb2NoIG1pbGxpc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLgogICAgICogQHJldHVybiB7bnVtYmVyfQogICAgICovCiAgICB0b01pbGxpcygpIHsKICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgOiBOYU47CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBlcG9jaCBzZWNvbmRzIG9mIHRoaXMgRGF0ZVRpbWUuCiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CiAgICAgKi8KICAgIHRvU2Vjb25kcygpIHsKICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgLyAxMDAwIDogTmFOOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZXBvY2ggc2Vjb25kcyAoYXMgYSB3aG9sZSBudW1iZXIpIG9mIHRoaXMgRGF0ZVRpbWUuCiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CiAgICAgKi8KICAgIHRvVW5peEludGVnZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBNYXRoLmZsb29yKHRoaXMudHMgLyAxMDAwKSA6IE5hTjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gSVNPIDg2MDEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIEpTT04uCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgKi8KICAgIHRvSlNPTigpIHsKICAgICAgcmV0dXJuIHRoaXMudG9JU08oKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBCU09OIHNlcmlhbGl6YWJsZSBlcXVpdmFsZW50IHRvIHRoaXMgRGF0ZVRpbWUuCiAgICAgKiBAcmV0dXJuIHtEYXRlfQogICAgICovCiAgICB0b0JTT04oKSB7CiAgICAgIHJldHVybiB0aGlzLnRvSlNEYXRlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCB0aGlzIERhdGVUaW1lJ3MgeWVhciwgbW9udGgsIGRheSwgYW5kIHNvIG9uLgogICAgICogQHBhcmFtIG9wdHMgLSBvcHRpb25zIGZvciBnZW5lcmF0aW5nIHRoZSBvYmplY3QKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZUNvbmZpZz1mYWxzZV0gLSBpbmNsdWRlIGNvbmZpZ3VyYXRpb24gYXR0cmlidXRlcyBpbiB0aGUgb3V0cHV0CiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b09iamVjdCgpIC8vPT4geyB5ZWFyOiAyMDE3LCBtb250aDogNCwgZGF5OiAyMiwgaG91cjogMjAsIG1pbnV0ZTogNDksIHNlY29uZDogNDIsIG1pbGxpc2Vjb25kOiAyNjggfQogICAgICogQHJldHVybiB7T2JqZWN0fQogICAgICovCiAgICB0b09iamVjdChvcHRzID0ge30pIHsKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTsKCiAgICAgIGNvbnN0IGJhc2UgPSB7IC4uLnRoaXMuYyB9OwoKICAgICAgaWYgKG9wdHMuaW5jbHVkZUNvbmZpZykgewogICAgICAgIGJhc2Uub3V0cHV0Q2FsZW5kYXIgPSB0aGlzLm91dHB1dENhbGVuZGFyOwogICAgICAgIGJhc2UubnVtYmVyaW5nU3lzdGVtID0gdGhpcy5sb2MubnVtYmVyaW5nU3lzdGVtOwogICAgICAgIGJhc2UubG9jYWxlID0gdGhpcy5sb2MubG9jYWxlOwogICAgICB9CiAgICAgIHJldHVybiBiYXNlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIEphdmFTY3JpcHQgRGF0ZSBlcXVpdmFsZW50IHRvIHRoaXMgRGF0ZVRpbWUuCiAgICAgKiBAcmV0dXJuIHtEYXRlfQogICAgICovCiAgICB0b0pTRGF0ZSgpIHsKICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgOiBOYU4pOwogICAgfQoKICAgIC8vIENPTVBBUkUKCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBEYXRlVGltZXMgYXMgYSBEdXJhdGlvbi4KICAgICAqIEBwYXJhbSB7RGF0ZVRpbWV9IG90aGVyRGF0ZVRpbWUgLSB0aGUgRGF0ZVRpbWUgdG8gY29tcGFyZSB0aGlzIG9uZSB0bwogICAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgYXJyYXkgb2YgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uLgogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiB0aGUgRHVyYXRpb24KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZQogICAgICogQGV4YW1wbGUKICAgICAqIHZhciBpMSA9IERhdGVUaW1lLmZyb21JU08oJzE5ODItMDUtMjVUMDk6NDUnKSwKICAgICAqICAgICBpMiA9IERhdGVUaW1lLmZyb21JU08oJzE5ODMtMTAtMTRUMTA6MzAnKTsKICAgICAqIGkyLmRpZmYoaTEpLnRvT2JqZWN0KCkgLy89PiB7IG1pbGxpc2Vjb25kczogNDM4MDc1MDAwMDAgfQogICAgICogaTIuZGlmZihpMSwgJ2hvdXJzJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDEyMTY4Ljc1IH0KICAgICAqIGkyLmRpZmYoaTEsIFsnbW9udGhzJywgJ2RheXMnXSkudG9PYmplY3QoKSAvLz0+IHsgbW9udGhzOiAxNiwgZGF5czogMTkuMDMxMjUgfQogICAgICogaTIuZGlmZihpMSwgWydtb250aHMnLCAnZGF5cycsICdob3VycyddKS50b09iamVjdCgpIC8vPT4geyBtb250aHM6IDE2LCBkYXlzOiAxOSwgaG91cnM6IDAuNzUgfQogICAgICogQHJldHVybiB7RHVyYXRpb259CiAgICAgKi8KICAgIGRpZmYob3RoZXJEYXRlVGltZSwgdW5pdCA9ICJtaWxsaXNlY29uZHMiLCBvcHRzID0ge30pIHsKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgIW90aGVyRGF0ZVRpbWUuaXNWYWxpZCkgewogICAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKCJjcmVhdGVkIGJ5IGRpZmZpbmcgYW4gaW52YWxpZCBEYXRlVGltZSIpOwogICAgICB9CgogICAgICBjb25zdCBkdXJPcHRzID0geyBsb2NhbGU6IHRoaXMubG9jYWxlLCBudW1iZXJpbmdTeXN0ZW06IHRoaXMubnVtYmVyaW5nU3lzdGVtLCAuLi5vcHRzIH07CgogICAgICBjb25zdCB1bml0cyA9IG1heWJlQXJyYXkodW5pdCkubWFwKER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQpLAogICAgICAgIG90aGVySXNMYXRlciA9IG90aGVyRGF0ZVRpbWUudmFsdWVPZigpID4gdGhpcy52YWx1ZU9mKCksCiAgICAgICAgZWFybGllciA9IG90aGVySXNMYXRlciA/IHRoaXMgOiBvdGhlckRhdGVUaW1lLAogICAgICAgIGxhdGVyID0gb3RoZXJJc0xhdGVyID8gb3RoZXJEYXRlVGltZSA6IHRoaXMsCiAgICAgICAgZGlmZmVkID0gZGlmZihlYXJsaWVyLCBsYXRlciwgdW5pdHMsIGR1ck9wdHMpOwoKICAgICAgcmV0dXJuIG90aGVySXNMYXRlciA/IGRpZmZlZC5uZWdhdGUoKSA6IGRpZmZlZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgRGF0ZVRpbWUgYW5kIHJpZ2h0IG5vdy4KICAgICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjZGlmZn0KICAgICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbdW5pdD1bJ21pbGxpc2Vjb25kcyddXSAtIHRoZSB1bml0IG9yIHVuaXRzIHVuaXRzIChzdWNoIGFzICdob3Vycycgb3IgJ2RheXMnKSB0byBpbmNsdWRlIGluIHRoZSBkdXJhdGlvbgogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiB0aGUgRHVyYXRpb24KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZQogICAgICogQHJldHVybiB7RHVyYXRpb259CiAgICAgKi8KICAgIGRpZmZOb3codW5pdCA9ICJtaWxsaXNlY29uZHMiLCBvcHRzID0ge30pIHsKICAgICAgcmV0dXJuIHRoaXMuZGlmZihEYXRlVGltZS5ub3coKSwgdW5pdCwgb3B0cyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gSW50ZXJ2YWwgc3Bhbm5pbmcgYmV0d2VlbiB0aGlzIERhdGVUaW1lIGFuZCBhbm90aGVyIERhdGVUaW1lCiAgICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlckRhdGVUaW1lIC0gdGhlIG90aGVyIGVuZCBwb2ludCBvZiB0aGUgSW50ZXJ2YWwKICAgICAqIEByZXR1cm4ge0ludGVydmFsfQogICAgICovCiAgICB1bnRpbChvdGhlckRhdGVUaW1lKSB7CiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHRoaXMsIG90aGVyRGF0ZVRpbWUpIDogdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgRGF0ZVRpbWUgaXMgaW4gdGhlIHNhbWUgdW5pdCBvZiB0aW1lIGFzIGFub3RoZXIgRGF0ZVRpbWUuCiAgICAgKiBIaWdoZXItb3JkZXIgdW5pdHMgbXVzdCBhbHNvIGJlIGlkZW50aWNhbCBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gYHRydWVgLgogICAgICogTm90ZSB0aGF0IHRpbWUgem9uZXMgYXJlICoqaWdub3JlZCoqIGluIHRoaXMgY29tcGFyaXNvbiwgd2hpY2ggY29tcGFyZXMgdGhlICoqbG9jYWwqKiBjYWxlbmRhciB0aW1lLiBVc2Uge0BsaW5rIERhdGVUaW1lI3NldFpvbmV9IHRvIGNvbnZlcnQgb25lIG9mIHRoZSBkYXRlcyBpZiBuZWVkZWQuCiAgICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlckRhdGVUaW1lIC0gdGhlIG90aGVyIERhdGVUaW1lCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY2hlY2sgc2FtZW5lc3Mgb24KICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLmhhc1NhbWUob3RoZXJEVCwgJ2RheScpOyAvL34+IHRydWUgaWYgb3RoZXJEVCBpcyBpbiB0aGUgc2FtZSBjdXJyZW50IGNhbGVuZGFyIGRheQogICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAqLwogICAgaGFzU2FtZShvdGhlckRhdGVUaW1lLCB1bml0KSB7CiAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7CgogICAgICBjb25zdCBpbnB1dE1zID0gb3RoZXJEYXRlVGltZS52YWx1ZU9mKCk7CiAgICAgIGNvbnN0IGFkanVzdGVkVG9ab25lID0gdGhpcy5zZXRab25lKG90aGVyRGF0ZVRpbWUuem9uZSwgeyBrZWVwTG9jYWxUaW1lOiB0cnVlIH0pOwogICAgICByZXR1cm4gYWRqdXN0ZWRUb1pvbmUuc3RhcnRPZih1bml0KSA8PSBpbnB1dE1zICYmIGlucHV0TXMgPD0gYWRqdXN0ZWRUb1pvbmUuZW5kT2YodW5pdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFcXVhbGl0eSBjaGVjawogICAgICogVHdvIERhdGVUaW1lcyBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhleSByZXByZXNlbnQgdGhlIHNhbWUgbWlsbGlzZWNvbmQsIGhhdmUgdGhlIHNhbWUgem9uZSBhbmQgbG9jYXRpb24sIGFuZCBhcmUgYm90aCB2YWxpZC4KICAgICAqIFRvIGNvbXBhcmUganVzdCB0aGUgbWlsbGlzZWNvbmQgdmFsdWVzLCB1c2UgYCtkdDEgPT09ICtkdDJgLgogICAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXIgLSB0aGUgb3RoZXIgRGF0ZVRpbWUKICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgKi8KICAgIGVxdWFscyhvdGhlcikgewogICAgICByZXR1cm4gKAogICAgICAgIHRoaXMuaXNWYWxpZCAmJgogICAgICAgIG90aGVyLmlzVmFsaWQgJiYKICAgICAgICB0aGlzLnZhbHVlT2YoKSA9PT0gb3RoZXIudmFsdWVPZigpICYmCiAgICAgICAgdGhpcy56b25lLmVxdWFscyhvdGhlci56b25lKSAmJgogICAgICAgIHRoaXMubG9jLmVxdWFscyhvdGhlci5sb2MpCiAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdGhpcyB0aW1lIHJlbGF0aXZlIHRvIG5vdywgc3VjaCBhcyAiaW4gdHdvIGRheXMiLiBDYW4gb25seSBpbnRlcm5hdGlvbmFsaXplIGlmIHlvdXIKICAgICAqIHBsYXRmb3JtIHN1cHBvcnRzIEludGwuUmVsYXRpdmVUaW1lRm9ybWF0LiBSb3VuZHMgZG93biBieSBkZWZhdWx0LgogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBvdXRwdXQKICAgICAqIEBwYXJhbSB7RGF0ZVRpbWV9IFtvcHRpb25zLmJhc2U9RGF0ZVRpbWUubm93KCldIC0gdGhlIERhdGVUaW1lIHRvIHVzZSBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggdGhpcyB0aW1lIGlzIGNvbXBhcmVkLiBEZWZhdWx0cyB0byBub3cuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc3R5bGU9ImxvbmciXSAtIHRoZSBzdHlsZSBvZiB1bml0cywgbXVzdCBiZSAibG9uZyIsICJzaG9ydCIsIG9yICJuYXJyb3ciCiAgICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gb3B0aW9ucy51bml0IC0gdXNlIGEgc3BlY2lmaWMgdW5pdCBvciBhcnJheSBvZiB1bml0czsgaWYgb21pdHRlZCwgb3IgYW4gYXJyYXksIHRoZSBtZXRob2Qgd2lsbCBwaWNrIHRoZSBiZXN0IHVuaXQuIFVzZSBhbiBhcnJheSBvciBvbmUgb2YgInllYXJzIiwgInF1YXJ0ZXJzIiwgIm1vbnRocyIsICJ3ZWVrcyIsICJkYXlzIiwgImhvdXJzIiwgIm1pbnV0ZXMiLCBvciAic2Vjb25kcyIKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucm91bmQ9dHJ1ZV0gLSB3aGV0aGVyIHRvIHJvdW5kIHRoZSBudW1iZXJzIGluIHRoZSBvdXRwdXQuCiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucGFkZGluZz0wXSAtIHBhZGRpbmcgaW4gbWlsbGlzZWNvbmRzLiBUaGlzIGFsbG93cyB5b3UgdG8gcm91bmQgdXAgdGhlIHJlc3VsdCBpZiBpdCBmaXRzIGluc2lkZSB0aGUgdGhyZXNob2xkLiBEb24ndCB1c2UgaW4gY29tYmluYXRpb24gd2l0aCB7cm91bmQ6IGZhbHNlfSBiZWNhdXNlIHRoZSBkZWNpbWFsIG91dHB1dCB3aWxsIGluY2x1ZGUgdGhlIHBhZGRpbmcuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5sb2NhbGUgLSBvdmVycmlkZSB0aGUgbG9jYWxlIG9mIHRoaXMgRGF0ZVRpbWUKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm51bWJlcmluZ1N5c3RlbSAtIG92ZXJyaWRlIHRoZSBudW1iZXJpbmdTeXN0ZW0gb2YgdGhpcyBEYXRlVGltZS4gVGhlIEludGwgc3lzdGVtIG1heSBjaG9vc2Ugbm90IHRvIGhvbm9yIHRoaXMKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmUoKSAvLz0+ICJpbiAxIGRheSIKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZSgiZXMiKS50b1JlbGF0aXZlKHsgZGF5czogMSB9KSAvLz0+ICJkZW50cm8gZGUgMSBkw61hIgogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkudG9SZWxhdGl2ZSh7IGxvY2FsZTogImZyIiB9KSAvLz0+ICJkYW5zIDIzIGhldXJlcyIKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm1pbnVzKHsgZGF5czogMiB9KS50b1JlbGF0aXZlKCkgLy89PiAiMiBkYXlzIGFnbyIKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm1pbnVzKHsgZGF5czogMiB9KS50b1JlbGF0aXZlKHsgdW5pdDogImhvdXJzIiB9KSAvLz0+ICI0OCBob3VycyBhZ28iCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGhvdXJzOiAzNiB9KS50b1JlbGF0aXZlKHsgcm91bmQ6IGZhbHNlIH0pIC8vPT4gIjEuNSBkYXlzIGFnbyIKICAgICAqLwogICAgdG9SZWxhdGl2ZShvcHRpb25zID0ge30pIHsKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBudWxsOwogICAgICBjb25zdCBiYXNlID0gb3B0aW9ucy5iYXNlIHx8IERhdGVUaW1lLmZyb21PYmplY3Qoe30sIHsgem9uZTogdGhpcy56b25lIH0pLAogICAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcgPyAodGhpcyA8IGJhc2UgPyAtb3B0aW9ucy5wYWRkaW5nIDogb3B0aW9ucy5wYWRkaW5nKSA6IDA7CiAgICAgIGxldCB1bml0cyA9IFsieWVhcnMiLCAibW9udGhzIiwgImRheXMiLCAiaG91cnMiLCAibWludXRlcyIsICJzZWNvbmRzIl07CiAgICAgIGxldCB1bml0ID0gb3B0aW9ucy51bml0OwogICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLnVuaXQpKSB7CiAgICAgICAgdW5pdHMgPSBvcHRpb25zLnVuaXQ7CiAgICAgICAgdW5pdCA9IHVuZGVmaW5lZDsKICAgICAgfQogICAgICByZXR1cm4gZGlmZlJlbGF0aXZlKGJhc2UsIHRoaXMucGx1cyhwYWRkaW5nKSwgewogICAgICAgIC4uLm9wdGlvbnMsCiAgICAgICAgbnVtZXJpYzogImFsd2F5cyIsCiAgICAgICAgdW5pdHMsCiAgICAgICAgdW5pdCwKICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgZGF0ZSByZWxhdGl2ZSB0byB0b2RheSwgc3VjaCBhcyAieWVzdGVyZGF5IiBvciAibmV4dCBtb250aCIuCiAgICAgKiBPbmx5IGludGVybmF0aW9uYWxpemVzIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnRzIEludGwuUmVsYXRpdmVUaW1lRm9ybWF0LgogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBvdXRwdXQKICAgICAqIEBwYXJhbSB7RGF0ZVRpbWV9IFtvcHRpb25zLmJhc2U9RGF0ZVRpbWUubm93KCldIC0gdGhlIERhdGVUaW1lIHRvIHVzZSBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggdGhpcyB0aW1lIGlzIGNvbXBhcmVkLiBEZWZhdWx0cyB0byBub3cuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5sb2NhbGUgLSBvdmVycmlkZSB0aGUgbG9jYWxlIG9mIHRoaXMgRGF0ZVRpbWUKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnVuaXQgLSB1c2UgYSBzcGVjaWZpYyB1bml0OyBpZiBvbWl0dGVkLCB0aGUgbWV0aG9kIHdpbGwgcGljayB0aGUgdW5pdC4gVXNlIG9uZSBvZiAieWVhcnMiLCAicXVhcnRlcnMiLCAibW9udGhzIiwgIndlZWtzIiwgb3IgImRheXMiCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSBvdmVycmlkZSB0aGUgbnVtYmVyaW5nU3lzdGVtIG9mIHRoaXMgRGF0ZVRpbWUuIFRoZSBJbnRsIHN5c3RlbSBtYXkgY2hvb3NlIG5vdCB0byBob25vciB0aGlzCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlQ2FsZW5kYXIoKSAvLz0+ICJ0b21vcnJvdyIKICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZSgiZXMiKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlKCkgLy89PiAiIm1hw7FhbmEiCiAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlQ2FsZW5kYXIoeyBsb2NhbGU6ICJmciIgfSkgLy89PiAiZGVtYWluIgogICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBkYXlzOiAyIH0pLnRvUmVsYXRpdmVDYWxlbmRhcigpIC8vPT4gIjIgZGF5cyBhZ28iCiAgICAgKi8KICAgIHRvUmVsYXRpdmVDYWxlbmRhcihvcHRpb25zID0ge30pIHsKICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBudWxsOwoKICAgICAgcmV0dXJuIGRpZmZSZWxhdGl2ZShvcHRpb25zLmJhc2UgfHwgRGF0ZVRpbWUuZnJvbU9iamVjdCh7fSwgeyB6b25lOiB0aGlzLnpvbmUgfSksIHRoaXMsIHsKICAgICAgICAuLi5vcHRpb25zLAogICAgICAgIG51bWVyaWM6ICJhdXRvIiwKICAgICAgICB1bml0czogWyJ5ZWFycyIsICJtb250aHMiLCAiZGF5cyJdLAogICAgICAgIGNhbGVuZGFyeTogdHJ1ZSwKICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIG1pbiBvZiBzZXZlcmFsIGRhdGUgdGltZXMKICAgICAqIEBwYXJhbSB7Li4uRGF0ZVRpbWV9IGRhdGVUaW1lcyAtIHRoZSBEYXRlVGltZXMgZnJvbSB3aGljaCB0byBjaG9vc2UgdGhlIG1pbmltdW0KICAgICAqIEByZXR1cm4ge0RhdGVUaW1lfSB0aGUgbWluIERhdGVUaW1lLCBvciB1bmRlZmluZWQgaWYgY2FsbGVkIHdpdGggbm8gYXJndW1lbnQKICAgICAqLwogICAgc3RhdGljIG1pbiguLi5kYXRlVGltZXMpIHsKICAgICAgaWYgKCFkYXRlVGltZXMuZXZlcnkoRGF0ZVRpbWUuaXNEYXRlVGltZSkpIHsKICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoIm1pbiByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGJlIERhdGVUaW1lcyIpOwogICAgICB9CiAgICAgIHJldHVybiBiZXN0QnkoZGF0ZVRpbWVzLCAoaSkgPT4gaS52YWx1ZU9mKCksIE1hdGgubWluKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgbWF4IG9mIHNldmVyYWwgZGF0ZSB0aW1lcwogICAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIERhdGVUaW1lcyBmcm9tIHdoaWNoIHRvIGNob29zZSB0aGUgbWF4aW11bQogICAgICogQHJldHVybiB7RGF0ZVRpbWV9IHRoZSBtYXggRGF0ZVRpbWUsIG9yIHVuZGVmaW5lZCBpZiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudAogICAgICovCiAgICBzdGF0aWMgbWF4KC4uLmRhdGVUaW1lcykgewogICAgICBpZiAoIWRhdGVUaW1lcy5ldmVyeShEYXRlVGltZS5pc0RhdGVUaW1lKSkgewogICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigibWF4IHJlcXVpcmVzIGFsbCBhcmd1bWVudHMgYmUgRGF0ZVRpbWVzIik7CiAgICAgIH0KICAgICAgcmV0dXJuIGJlc3RCeShkYXRlVGltZXMsIChpKSA9PiBpLnZhbHVlT2YoKSwgTWF0aC5tYXgpOwogICAgfQoKICAgIC8vIE1JU0MKCiAgICAvKioKICAgICAqIEV4cGxhaW4gaG93IGEgc3RyaW5nIHdvdWxkIGJlIHBhcnNlZCBieSBmcm9tRm9ybWF0KCkKICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZQogICAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgdGhlIHN0cmluZyBpcyBleHBlY3RlZCB0byBiZSBpbiAoc2VlIGRlc2NyaXB0aW9uKQogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIHRha2VuIGJ5IGZyb21Gb3JtYXQoKQogICAgICogQHJldHVybiB7T2JqZWN0fQogICAgICovCiAgICBzdGF0aWMgZnJvbUZvcm1hdEV4cGxhaW4odGV4dCwgZm10LCBvcHRpb25zID0ge30pIHsKICAgICAgY29uc3QgeyBsb2NhbGUgPSBudWxsLCBudW1iZXJpbmdTeXN0ZW0gPSBudWxsIH0gPSBvcHRpb25zLAogICAgICAgIGxvY2FsZVRvVXNlID0gTG9jYWxlLmZyb21PcHRzKHsKICAgICAgICAgIGxvY2FsZSwKICAgICAgICAgIG51bWJlcmluZ1N5c3RlbSwKICAgICAgICAgIGRlZmF1bHRUb0VOOiB0cnVlLAogICAgICAgIH0pOwogICAgICByZXR1cm4gZXhwbGFpbkZyb21Ub2tlbnMobG9jYWxlVG9Vc2UsIHRleHQsIGZtdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgZnJvbUZvcm1hdEV4cGxhaW4gaW5zdGVhZAogICAgICovCiAgICBzdGF0aWMgZnJvbVN0cmluZ0V4cGxhaW4odGV4dCwgZm10LCBvcHRpb25zID0ge30pIHsKICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21Gb3JtYXRFeHBsYWluKHRleHQsIGZtdCwgb3B0aW9ucyk7CiAgICB9CgogICAgLy8gRk9STUFUIFBSRVNFVFMKCiAgICAvKioKICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgMTAvMTQvMTk4MwogICAgICogQHR5cGUge09iamVjdH0KICAgICAqLwogICAgc3RhdGljIGdldCBEQVRFX1NIT1JUKCkgewogICAgICByZXR1cm4gREFURV9TSE9SVDsKICAgIH0KCiAgICAvKioKICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdCAxNCwgMTk4MycKICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgKi8KICAgIHN0YXRpYyBnZXQgREFURV9NRUQoKSB7CiAgICAgIHJldHVybiBEQVRFX01FRDsKICAgIH0KCiAgICAvKioKICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaSwgT2N0IDE0LCAxOTgzJwogICAgICogQHR5cGUge09iamVjdH0KICAgICAqLwogICAgc3RhdGljIGdldCBEQVRFX01FRF9XSVRIX1dFRUtEQVkoKSB7CiAgICAgIHJldHVybiBEQVRFX01FRF9XSVRIX1dFRUtEQVk7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3RvYmVyIDE0LCAxOTgzJwogICAgICogQHR5cGUge09iamVjdH0KICAgICAqLwogICAgc3RhdGljIGdldCBEQVRFX0ZVTEwoKSB7CiAgICAgIHJldHVybiBEQVRFX0ZVTEw7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdUdWVzZGF5LCBPY3RvYmVyIDE0LCAxOTgzJwogICAgICogQHR5cGUge09iamVjdH0KICAgICAqLwogICAgc3RhdGljIGdldCBEQVRFX0hVR0UoKSB7CiAgICAgIHJldHVybiBEQVRFX0hVR0U7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgogICAgICogQHR5cGUge09iamVjdH0KICAgICAqLwogICAgc3RhdGljIGdldCBUSU1FX1NJTVBMRSgpIHsKICAgICAgcmV0dXJuIFRJTUVfU0lNUExFOwogICAgfQoKICAgIC8qKgogICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgKi8KICAgIHN0YXRpYyBnZXQgVElNRV9XSVRIX1NFQ09ORFMoKSB7CiAgICAgIHJldHVybiBUSU1FX1dJVEhfU0VDT05EUzsKICAgIH0KCiAgICAvKioKICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEFNIEVEVCcuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgogICAgICogQHR5cGUge09iamVjdH0KICAgICAqLwogICAgc3RhdGljIGdldCBUSU1FX1dJVEhfU0hPUlRfT0ZGU0VUKCkgewogICAgICByZXR1cm4gVElNRV9XSVRIX1NIT1JUX09GRlNFVDsKICAgIH0KCiAgICAvKioKICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgogICAgICogQHR5cGUge09iamVjdH0KICAgICAqLwogICAgc3RhdGljIGdldCBUSU1FX1dJVEhfTE9OR19PRkZTRVQoKSB7CiAgICAgIHJldHVybiBUSU1FX1dJVEhfTE9OR19PRkZTRVQ7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMCcsIGFsd2F5cyAyNC1ob3VyLgogICAgICogQHR5cGUge09iamVjdH0KICAgICAqLwogICAgc3RhdGljIGdldCBUSU1FXzI0X1NJTVBMRSgpIHsKICAgICAgcmV0dXJuIFRJTUVfMjRfU0lNUExFOwogICAgfQoKICAgIC8qKgogICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMnLCBhbHdheXMgMjQtaG91ci4KICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgKi8KICAgIHN0YXRpYyBnZXQgVElNRV8yNF9XSVRIX1NFQ09ORFMoKSB7CiAgICAgIHJldHVybiBUSU1FXzI0X1dJVEhfU0VDT05EUzsKICAgIH0KCiAgICAvKioKICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEVEVCcsIGFsd2F5cyAyNC1ob3VyLgogICAgICogQHR5cGUge09iamVjdH0KICAgICAqLwogICAgc3RhdGljIGdldCBUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUKCkgewogICAgICByZXR1cm4gVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVDsKICAgIH0KCiAgICAvKioKICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScsIGFsd2F5cyAyNC1ob3VyLgogICAgICogQHR5cGUge09iamVjdH0KICAgICAqLwogICAgc3RhdGljIGdldCBUSU1FXzI0X1dJVEhfTE9OR19PRkZTRVQoKSB7CiAgICAgIHJldHVybiBUSU1FXzI0X1dJVEhfTE9OR19PRkZTRVQ7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcxMC8xNC8xOTgzLCA5OjMwIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuCiAgICAgKiBAdHlwZSB7T2JqZWN0fQogICAgICovCiAgICBzdGF0aWMgZ2V0IERBVEVUSU1FX1NIT1JUKCkgewogICAgICByZXR1cm4gREFURVRJTUVfU0hPUlQ7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcxMC8xNC8xOTgzLCA5OjMwOjMzIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuCiAgICAgKiBAdHlwZSB7T2JqZWN0fQogICAgICovCiAgICBzdGF0aWMgZ2V0IERBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUygpIHsKICAgICAgcmV0dXJuIERBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUzsKICAgIH0KCiAgICAvKioKICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdCAxNCwgMTk4MywgOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgogICAgICogQHR5cGUge09iamVjdH0KICAgICAqLwogICAgc3RhdGljIGdldCBEQVRFVElNRV9NRUQoKSB7CiAgICAgIHJldHVybiBEQVRFVElNRV9NRUQ7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3QgMTQsIDE5ODMsIDk6MzA6MzMgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgKi8KICAgIHN0YXRpYyBnZXQgREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUygpIHsKICAgICAgcmV0dXJuIERBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFM7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdGcmksIDE0IE9jdCAxOTgzLCA5OjMwIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuCiAgICAgKiBAdHlwZSB7T2JqZWN0fQogICAgICovCiAgICBzdGF0aWMgZ2V0IERBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkoKSB7CiAgICAgIHJldHVybiBEQVRFVElNRV9NRURfV0lUSF9XRUVLREFZOwogICAgfQoKICAgIC8qKgogICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0b2JlciAxNCwgMTk4MywgOTozMCBBTSBFRFQnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgKi8KICAgIHN0YXRpYyBnZXQgREFURVRJTUVfRlVMTCgpIHsKICAgICAgcmV0dXJuIERBVEVUSU1FX0ZVTEw7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3RvYmVyIDE0LCAxOTgzLCA5OjMwOjMzIEFNIEVEVCcuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgogICAgICogQHR5cGUge09iamVjdH0KICAgICAqLwogICAgc3RhdGljIGdldCBEQVRFVElNRV9GVUxMX1dJVEhfU0VDT05EUygpIHsKICAgICAgcmV0dXJuIERBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTOwogICAgfQoKICAgIC8qKgogICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpZGF5LCBPY3RvYmVyIDE0LCAxOTgzLCA5OjMwIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgogICAgICogQHR5cGUge09iamVjdH0KICAgICAqLwogICAgc3RhdGljIGdldCBEQVRFVElNRV9IVUdFKCkgewogICAgICByZXR1cm4gREFURVRJTUVfSFVHRTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaWRheSwgT2N0b2JlciAxNCwgMTk4MywgOTozMDozMyBBTSBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgKi8KICAgIHN0YXRpYyBnZXQgREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMoKSB7CiAgICAgIHJldHVybiBEQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUzsKICAgIH0KICB9CgogIC8qKgogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gZnJpZW5kbHlEYXRlVGltZShkYXRlVGltZWlzaCkgewogICAgaWYgKERhdGVUaW1lLmlzRGF0ZVRpbWUoZGF0ZVRpbWVpc2gpKSB7CiAgICAgIHJldHVybiBkYXRlVGltZWlzaDsKICAgIH0gZWxzZSBpZiAoZGF0ZVRpbWVpc2ggJiYgZGF0ZVRpbWVpc2gudmFsdWVPZiAmJiBpc051bWJlcihkYXRlVGltZWlzaC52YWx1ZU9mKCkpKSB7CiAgICAgIHJldHVybiBEYXRlVGltZS5mcm9tSlNEYXRlKGRhdGVUaW1laXNoKTsKICAgIH0gZWxzZSBpZiAoZGF0ZVRpbWVpc2ggJiYgdHlwZW9mIGRhdGVUaW1laXNoID09PSAib2JqZWN0IikgewogICAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbU9iamVjdChkYXRlVGltZWlzaCk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoCiAgICAgICAgYFVua25vd24gZGF0ZXRpbWUgYXJndW1lbnQ6ICR7ZGF0ZVRpbWVpc2h9LCBvZiB0eXBlICR7dHlwZW9mIGRhdGVUaW1laXNofWAKICAgICAgKTsKICAgIH0KICB9CgogIC8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgLy8gUXVlcnkgU2V0dGluZ3MgLy8KICAvLy8vLy8vLy8vLy8vLy8vLy8vLwogIGNvbnN0IERFRkFVTFRfUVVFUllfU0VUVElOR1MgPSB7CiAgICAgIHJlbmRlck51bGxBczogIlxcLSIsCiAgICAgIHRhc2tDb21wbGV0aW9uVHJhY2tpbmc6IGZhbHNlLAogICAgICB0YXNrQ29tcGxldGlvblVzZUVtb2ppU2hvcnRoYW5kOiBmYWxzZSwKICAgICAgdGFza0NvbXBsZXRpb25UZXh0OiAiY29tcGxldGlvbiIsCiAgICAgIHRhc2tDb21wbGV0aW9uRGF0ZUZvcm1hdDogInl5eXktTU0tZGQiLAogICAgICByZWN1cnNpdmVTdWJUYXNrQ29tcGxldGlvbjogZmFsc2UsCiAgICAgIHdhcm5PbkVtcHR5UmVzdWx0OiB0cnVlLAogICAgICByZWZyZXNoRW5hYmxlZDogdHJ1ZSwKICAgICAgcmVmcmVzaEludGVydmFsOiAyNTAwLAogICAgICBkZWZhdWx0RGF0ZUZvcm1hdDogIk1NTU0gZGQsIHl5eXkiLAogICAgICBkZWZhdWx0RGF0ZVRpbWVGb3JtYXQ6ICJoOm1tIGEgLSBNTU1NIGRkLCB5eXl5IiwKICAgICAgbWF4UmVjdXJzaXZlUmVuZGVyRGVwdGg6IDQsCiAgICAgIHRhYmxlSWRDb2x1bW5OYW1lOiAiRmlsZSIsCiAgICAgIHRhYmxlR3JvdXBDb2x1bW5OYW1lOiAiR3JvdXAiLAogICAgICBzaG93UmVzdWx0Q291bnQ6IHRydWUsCiAgfTsKICBjb25zdCBERUZBVUxUX0VYUE9SVF9TRVRUSU5HUyA9IHsKICAgICAgYWxsb3dIdG1sOiB0cnVlLAogIH07CiAgLyoqIERlZmF1bHQgc2V0dGluZ3MgZm9yIGRhdGF2aWV3IG9uIGluc3RhbGwuICovCiAgKHsKICAgICAgLi4uREVGQVVMVF9RVUVSWV9TRVRUSU5HUywKICAgICAgLi4uREVGQVVMVF9FWFBPUlRfU0VUVElOR1MsCiAgICAgIC4uLnsKICAgICAgICAgIGlubGluZVF1ZXJ5UHJlZml4OiAiPSIsCiAgICAgICAgICBpbmxpbmVKc1F1ZXJ5UHJlZml4OiAiJD0iLAogICAgICAgICAgaW5saW5lUXVlcmllc0luQ29kZWJsb2NrczogdHJ1ZSwKICAgICAgICAgIGVuYWJsZUlubGluZURhdGF2aWV3OiB0cnVlLAogICAgICAgICAgZW5hYmxlRGF0YXZpZXdKczogZmFsc2UsCiAgICAgICAgICBlbmFibGVJbmxpbmVEYXRhdmlld0pzOiBmYWxzZSwKICAgICAgICAgIHByZXR0eVJlbmRlcklubGluZUZpZWxkczogdHJ1ZSwKICAgICAgICAgIHByZXR0eVJlbmRlcklubGluZUZpZWxkc0luTGl2ZVByZXZpZXc6IHRydWUsCiAgICAgICAgICBkYXRhdmlld0pzS2V5d29yZDogImRhdGF2aWV3anMiLAogICAgICB9LAogIH0pOwoKICAvKiogRnVuY3Rpb25hbCByZXR1cm4gdHlwZSBmb3IgZXJyb3IgaGFuZGxpbmcuICovCiAgY2xhc3MgU3VjY2VzcyB7CiAgICAgIHZhbHVlOwogICAgICBzdWNjZXNzZnVsOwogICAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkgewogICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogICAgICAgICAgdGhpcy5zdWNjZXNzZnVsID0gdHJ1ZTsKICAgICAgfQogICAgICBtYXAoZikgewogICAgICAgICAgcmV0dXJuIG5ldyBTdWNjZXNzKGYodGhpcy52YWx1ZSkpOwogICAgICB9CiAgICAgIGZsYXRNYXAoZikgewogICAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSk7CiAgICAgIH0KICAgICAgbWFwRXJyKGYpIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICAgIGJpbWFwKHN1Y2MsIF9mYWlsKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5tYXAoc3VjYyk7CiAgICAgIH0KICAgICAgb3JFbHNlKF92YWx1ZSkgewogICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICAgIH0KICAgICAgY2FzdCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICAgIG9yRWxzZVRocm93KF9tZXNzYWdlKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgICAgfQogIH0KICAvKiogRnVuY3Rpb25hbCByZXR1cm4gdHlwZSBmb3IgZXJyb3IgaGFuZGxpbmcuICovCiAgY2xhc3MgRmFpbHVyZSB7CiAgICAgIGVycm9yOwogICAgICBzdWNjZXNzZnVsOwogICAgICBjb25zdHJ1Y3RvcihlcnJvcikgewogICAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yOwogICAgICAgICAgdGhpcy5zdWNjZXNzZnVsID0gZmFsc2U7CiAgICAgIH0KICAgICAgbWFwKF9mKSB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgICBmbGF0TWFwKF9mKSB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgICBtYXBFcnIoZikgewogICAgICAgICAgcmV0dXJuIG5ldyBGYWlsdXJlKGYodGhpcy5lcnJvcikpOwogICAgICB9CiAgICAgIGJpbWFwKF9zdWNjLCBmYWlsKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5tYXBFcnIoZmFpbCk7CiAgICAgIH0KICAgICAgb3JFbHNlKHZhbHVlKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0KICAgICAgY2FzdCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICAgIG9yRWxzZVRocm93KG1lc3NhZ2UpIHsKICAgICAgICAgIGlmIChtZXNzYWdlKQogICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKHRoaXMuZXJyb3IpKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIiIgKyB0aGlzLmVycm9yKTsKICAgICAgfQogIH0KICAvKiogTW9uYWRpYyAnUmVzdWx0JyB0eXBlIHdoaWNoIGVuY2Fwc3VsYXRlcyB3aGV0aGVyIGEgcHJvY2VkdXJlIHN1Y2NlZWRlZCBvciBmYWlsZWQsIGFzIHdlbGwgYXMgaXQncyByZXR1cm4gdmFsdWUuICovCiAgdmFyIFJlc3VsdDsKICAoZnVuY3Rpb24gKFJlc3VsdCkgewogICAgICAvKiogQ29uc3RydWN0IGEgbmV3IHN1Y2Nlc3MgcmVzdWx0IHdyYXBwaW5nIHRoZSBnaXZlbiB2YWx1ZS4gKi8KICAgICAgZnVuY3Rpb24gc3VjY2Vzcyh2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIG5ldyBTdWNjZXNzKHZhbHVlKTsKICAgICAgfQogICAgICBSZXN1bHQuc3VjY2VzcyA9IHN1Y2Nlc3M7CiAgICAgIC8qKiBDb25zdHJ1Y3QgYSBuZXcgZmFpbHVyZSB2YWx1ZSB3cmFwcGluZyB0aGUgZ2l2ZW4gZXJyb3IuICovCiAgICAgIGZ1bmN0aW9uIGZhaWx1cmUoZXJyb3IpIHsKICAgICAgICAgIHJldHVybiBuZXcgRmFpbHVyZShlcnJvcik7CiAgICAgIH0KICAgICAgUmVzdWx0LmZhaWx1cmUgPSBmYWlsdXJlOwogICAgICAvKiogSm9pbiB0d28gcmVzdWx0cyB3aXRoIGEgYmktZnVuY3Rpb24gYW5kIHJldHVybiBhIG5ldyByZXN1bHQuICovCiAgICAgIGZ1bmN0aW9uIGZsYXRNYXAyKGZpcnN0LCBzZWNvbmQsIGYpIHsKICAgICAgICAgIGlmIChmaXJzdC5zdWNjZXNzZnVsKSB7CiAgICAgICAgICAgICAgaWYgKHNlY29uZC5zdWNjZXNzZnVsKQogICAgICAgICAgICAgICAgICByZXR1cm4gZihmaXJzdC52YWx1ZSwgc2Vjb25kLnZhbHVlKTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKHNlY29uZC5lcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShmaXJzdC5lcnJvcik7CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgUmVzdWx0LmZsYXRNYXAyID0gZmxhdE1hcDI7CiAgICAgIC8qKiBKb2luIHR3byByZXN1bHRzIHdpdGggYSBiaS1mdW5jdGlvbiBhbmQgcmV0dXJuIGEgbmV3IHJlc3VsdC4gKi8KICAgICAgZnVuY3Rpb24gbWFwMihmaXJzdCwgc2Vjb25kLCBmKSB7CiAgICAgICAgICByZXR1cm4gZmxhdE1hcDIoZmlyc3QsIHNlY29uZCwgKGEsIGIpID0+IHN1Y2Nlc3MoZihhLCBiKSkpOwogICAgICB9CiAgICAgIFJlc3VsdC5tYXAyID0gbWFwMjsKICB9KShSZXN1bHQgfHwgKFJlc3VsdCA9IHt9KSk7CgogIHZhciBjb21tb25qc0dsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9OwoKICB2YXIgcGFyc2ltbW9uX3VtZF9taW4gPSB7ZXhwb3J0czoge319OwoKICBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzOwoKICAoZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykgewogIAkhZnVuY3Rpb24obix0KXttb2R1bGUuZXhwb3J0cz10KCk7fSgidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjpjb21tb25qc0dsb2JhbCxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgdD17fTtmdW5jdGlvbiByKGUpe2lmKHRbZV0pcmV0dXJuIHRbZV0uZXhwb3J0czt2YXIgdT10W2VdPXtpOmUsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gbltlXS5jYWxsKHUuZXhwb3J0cyx1LHUuZXhwb3J0cyxyKSx1Lmw9ITAsdS5leHBvcnRzfXJldHVybiByLm09bixyLmM9dCxyLmQ9ZnVuY3Rpb24obix0LGUpe3IubyhuLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6ZX0pO30sci5yPWZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt9LHIubj1mdW5jdGlvbihuKXt2YXIgdD1uJiZuLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBufTtyZXR1cm4gci5kKHQsImEiLHQpLHR9LHIubz1mdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobix0KX0sci5wPSIiLHIoci5zPTApfShbZnVuY3Rpb24obix0LHIpe2Z1bmN0aW9uIGUobil7aWYoISh0aGlzIGluc3RhbmNlb2YgZSkpcmV0dXJuIG5ldyBlKG4pO3RoaXMuXz1uO312YXIgdT1lLnByb3RvdHlwZTtmdW5jdGlvbiBvKG4sdCl7Zm9yKHZhciByPTA7cjxuO3IrKyl0KHIpO31mdW5jdGlvbiBpKG4sdCxyKXtyZXR1cm4gZnVuY3Rpb24obix0KXtvKHQubGVuZ3RoLGZ1bmN0aW9uKHIpe24odFtyXSxyLHQpO30pO30oZnVuY3Rpb24ocixlLHUpe3Q9bih0LHIsZSx1KTt9LHIpLHR9ZnVuY3Rpb24gYShuLHQpe3JldHVybiBpKGZ1bmN0aW9uKHQscixlLHUpe3JldHVybiB0LmNvbmNhdChbbihyLGUsdSldKX0sW10sdCl9ZnVuY3Rpb24gZihuLHQpe3ZhciByPXt2OjAsYnVmOnR9O3JldHVybiBvKG4sZnVuY3Rpb24oKXt2YXIgbjtyPXt2OnIudjw8MXwobj1yLmJ1ZixuWzBdPj43KSxidWY6ZnVuY3Rpb24obil7dmFyIHQ9aShmdW5jdGlvbihuLHQscixlKXtyZXR1cm4gbi5jb25jYXQocj09PWUubGVuZ3RoLTE/QnVmZmVyLmZyb20oW3QsMF0pLnJlYWRVSW50MTZCRSgwKTplLnJlYWRVSW50MTZCRShyKSl9LFtdLG4pO3JldHVybiBCdWZmZXIuZnJvbShhKGZ1bmN0aW9uKG4pe3JldHVybiAobjw8MSY2NTUzNSk+Pjh9LHQpKX0oci5idWYpfTt9KSxyfWZ1bmN0aW9uIGMoKXtyZXR1cm4gInVuZGVmaW5lZCIhPXR5cGVvZiBCdWZmZXJ9ZnVuY3Rpb24gcygpe2lmKCFjKCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIgZ2xvYmFsIGRvZXMgbm90IGV4aXN0OyBwbGVhc2UgdXNlIHdlYnBhY2sgaWYgeW91IG5lZWQgdG8gcGFyc2UgQnVmZmVycyBpbiB0aGUgYnJvd3Nlci4iKX1mdW5jdGlvbiBsKG4pe3MoKTt2YXIgdD1pKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4rdH0sMCxuKTtpZih0JTghPTApdGhyb3cgbmV3IEVycm9yKCJUaGUgYml0cyBbIituLmpvaW4oIiwgIikrIl0gYWRkIHVwIHRvICIrdCsiIHdoaWNoIGlzIG5vdCBhbiBldmVuIG51bWJlciBvZiBieXRlczsgdGhlIHRvdGFsIHNob3VsZCBiZSBkaXZpc2libGUgYnkgOCIpO3ZhciByLHU9dC84LG89KHI9ZnVuY3Rpb24obil7cmV0dXJuIG4+NDh9LGkoZnVuY3Rpb24obix0KXtyZXR1cm4gbnx8KHIodCk/dDpuKX0sbnVsbCxuKSk7aWYobyl0aHJvdyBuZXcgRXJyb3IobysiIGJpdCByYW5nZSByZXF1ZXN0ZWQgZXhjZWVkcyA0OCBiaXQgKDYgYnl0ZSkgTnVtYmVyIG1heC4iKTtyZXR1cm4gbmV3IGUoZnVuY3Rpb24odCxyKXt2YXIgZT11K3I7cmV0dXJuIGU+dC5sZW5ndGg/eChyLHUudG9TdHJpbmcoKSsiIGJ5dGVzIik6YihlLGkoZnVuY3Rpb24obix0KXt2YXIgcj1mKHQsbi5idWYpO3JldHVybiB7Y29sbDpuLmNvbGwuY29uY2F0KHIudiksYnVmOnIuYnVmfX0se2NvbGw6W10sYnVmOnQuc2xpY2UocixlKX0sbikuY29sbCl9KX1mdW5jdGlvbiBoKG4sdCl7cmV0dXJuIG5ldyBlKGZ1bmN0aW9uKHIsZSl7cmV0dXJuIHMoKSxlK3Q+ci5sZW5ndGg/eChlLHQrIiBieXRlcyBmb3IgIituKTpiKGUrdCxyLnNsaWNlKGUsZSt0KSl9KX1mdW5jdGlvbiBwKG4sdCl7aWYoIm51bWJlciIhPXR5cGVvZihyPXQpfHxNYXRoLmZsb29yKHIpIT09cnx8dDwwfHx0PjYpdGhyb3cgbmV3IEVycm9yKG4rIiByZXF1aXJlcyBpbnRlZ2VyIGxlbmd0aCBpbiByYW5nZSBbMCwgNl0uIik7dmFyIHI7fWZ1bmN0aW9uIGQobil7cmV0dXJuIHAoInVpbnRCRSIsbiksaCgidWludEJFKCIrbisiKSIsbikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlYWRVSW50QkUoMCxuKX0pfWZ1bmN0aW9uIHYobil7cmV0dXJuIHAoInVpbnRMRSIsbiksaCgidWludExFKCIrbisiKSIsbikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlYWRVSW50TEUoMCxuKX0pfWZ1bmN0aW9uIGcobil7cmV0dXJuIHAoImludEJFIixuKSxoKCJpbnRCRSgiK24rIikiLG4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWFkSW50QkUoMCxuKX0pfWZ1bmN0aW9uIG0obil7cmV0dXJuIHAoImludExFIixuKSxoKCJpbnRMRSgiK24rIikiLG4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWFkSW50TEUoMCxuKX0pfWZ1bmN0aW9uIHkobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBlfWZ1bmN0aW9uIEUobil7cmV0dXJuICJbb2JqZWN0IEFycmF5XSI9PT17fS50b1N0cmluZy5jYWxsKG4pfWZ1bmN0aW9uIHcobil7cmV0dXJuIGMoKSYmQnVmZmVyLmlzQnVmZmVyKG4pfWZ1bmN0aW9uIGIobix0KXtyZXR1cm4ge3N0YXR1czohMCxpbmRleDpuLHZhbHVlOnQsZnVydGhlc3Q6LTEsZXhwZWN0ZWQ6W119fWZ1bmN0aW9uIHgobix0KXtyZXR1cm4gRSh0KXx8KHQ9W3RdKSx7c3RhdHVzOiExLGluZGV4Oi0xLHZhbHVlOm51bGwsZnVydGhlc3Q6bixleHBlY3RlZDp0fX1mdW5jdGlvbiBCKG4sdCl7aWYoIXQpcmV0dXJuIG47aWYobi5mdXJ0aGVzdD50LmZ1cnRoZXN0KXJldHVybiBuO3ZhciByPW4uZnVydGhlc3Q9PT10LmZ1cnRoZXN0P2Z1bmN0aW9uKG4sdCl7aWYoZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1lLl9zdXBwb3J0c1NldClyZXR1cm4gZS5fc3VwcG9ydHNTZXQ7dmFyIG49InVuZGVmaW5lZCIhPXR5cGVvZiBTZXQ7cmV0dXJuIGUuX3N1cHBvcnRzU2V0PW4sbn0oKSYmQXJyYXkuZnJvbSl7Zm9yKHZhciByPW5ldyBTZXQobiksdT0wO3U8dC5sZW5ndGg7dSsrKXIuYWRkKHRbdV0pO3ZhciBvPUFycmF5LmZyb20ocik7cmV0dXJuIG8uc29ydCgpLG99Zm9yKHZhciBpPXt9LGE9MDthPG4ubGVuZ3RoO2ErKylpW25bYV1dPSEwO2Zvcih2YXIgZj0wO2Y8dC5sZW5ndGg7ZisrKWlbdFtmXV09ITA7dmFyIGM9W107Zm9yKHZhciBzIGluIGkpKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGkscykmJmMucHVzaChzKTtyZXR1cm4gYy5zb3J0KCksY30obi5leHBlY3RlZCx0LmV4cGVjdGVkKTp0LmV4cGVjdGVkO3JldHVybiB7c3RhdHVzOm4uc3RhdHVzLGluZGV4Om4uaW5kZXgsdmFsdWU6bi52YWx1ZSxmdXJ0aGVzdDp0LmZ1cnRoZXN0LGV4cGVjdGVkOnJ9fXZhciBqPXt9O2Z1bmN0aW9uIFMobix0KXtpZih3KG4pKXJldHVybiB7b2Zmc2V0OnQsbGluZTotMSxjb2x1bW46LTF9O24gaW4ganx8KGpbbl09e30pO2Zvcih2YXIgcj1qW25dLGU9MCx1PTAsbz0wLGk9dDtpPj0wOyl7aWYoaSBpbiByKXtlPXJbaV0ubGluZSwwPT09byYmKG89cltpXS5saW5lU3RhcnQpO2JyZWFrfSgiXG4iPT09bi5jaGFyQXQoaSl8fCJcciI9PT1uLmNoYXJBdChpKSYmIlxuIiE9PW4uY2hhckF0KGkrMSkpJiYodSsrLDA9PT1vJiYobz1pKzEpKSxpLS07fXZhciBhPWUrdSxmPXQtbztyZXR1cm4gclt0XT17bGluZTphLGxpbmVTdGFydDpvfSx7b2Zmc2V0OnQsbGluZTphKzEsY29sdW1uOmYrMX19ZnVuY3Rpb24gXyhuKXtpZigheShuKSl0aHJvdyBuZXcgRXJyb3IoIm5vdCBhIHBhcnNlcjogIituKX1mdW5jdGlvbiBMKG4sdCl7cmV0dXJuICJzdHJpbmciPT10eXBlb2Ygbj9uLmNoYXJBdCh0KTpuW3RdfWZ1bmN0aW9uIE8obil7aWYoIm51bWJlciIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcigibm90IGEgbnVtYmVyOiAiK24pfWZ1bmN0aW9uIGsobil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKCJub3QgYSBmdW5jdGlvbjogIituKX1mdW5jdGlvbiBQKG4pe2lmKCJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoIm5vdCBhIHN0cmluZzogIituKX12YXIgcT0yLEE9MyxJPTgsRj01KkksTT00Kkksej0iICAiO2Z1bmN0aW9uIFIobix0KXtyZXR1cm4gbmV3IEFycmF5KHQrMSkuam9pbihuKX1mdW5jdGlvbiBVKG4sdCxyKXt2YXIgZT10LW4ubGVuZ3RoO3JldHVybiBlPD0wP246UihyLGUpK259ZnVuY3Rpb24gVyhuLHQscixlKXtyZXR1cm4ge2Zyb206bi10PjA/bi10OjAsdG86bityPmU/ZTpuK3J9fWZ1bmN0aW9uIEQobix0KXt2YXIgcixlLHUsbyxmLGM9dC5pbmRleCxzPWMub2Zmc2V0LGw9MTtpZihzPT09bi5sZW5ndGgpcmV0dXJuICJHb3QgdGhlIGVuZCBvZiB0aGUgaW5wdXQiO2lmKHcobikpe3ZhciBoPXMtcyVJLHA9cy1oLGQ9VyhoLEYsTStJLG4ubGVuZ3RoKSx2PWEoZnVuY3Rpb24obil7cmV0dXJuIGEoZnVuY3Rpb24obil7cmV0dXJuIFUobi50b1N0cmluZygxNiksMiwiMCIpfSxuKX0sZnVuY3Rpb24obix0KXt2YXIgcj1uLmxlbmd0aCxlPVtdLHU9MDtpZihyPD10KXJldHVybiBbbi5zbGljZSgpXTtmb3IodmFyIG89MDtvPHI7bysrKWVbdV18fGUucHVzaChbXSksZVt1XS5wdXNoKG5bb10pLChvKzEpJXQ9PTAmJnUrKztyZXR1cm4gZX0obi5zbGljZShkLmZyb20sZC50bykudG9KU09OKCkuZGF0YSxJKSk7bz1mdW5jdGlvbihuKXtyZXR1cm4gMD09PW4uZnJvbSYmMT09PW4udG8/e2Zyb206bi5mcm9tLHRvOm4udG99Ontmcm9tOm4uZnJvbS9JLHRvOk1hdGguZmxvb3Iobi50by9JKX19KGQpLGU9aC9JLHI9MypwLHA+PTQmJihyKz0xKSxsPTIsdT1hKGZ1bmN0aW9uKG4pe3JldHVybiBuLmxlbmd0aDw9ND9uLmpvaW4oIiAiKTpuLnNsaWNlKDAsNCkuam9pbigiICIpKyIgICIrbi5zbGljZSg0KS5qb2luKCIgIil9LHYpLChmPSg4KihvLnRvPjA/by50by0xOm8udG8pKS50b1N0cmluZygxNikubGVuZ3RoKTwyJiYoZj0yKTt9ZWxzZSB7dmFyIGc9bi5zcGxpdCgvXHJcbnxbXG5cclx1MjAyOFx1MjAyOV0vKTtyPWMuY29sdW1uLTEsZT1jLmxpbmUtMSxvPVcoZSxxLEEsZy5sZW5ndGgpLHU9Zy5zbGljZShvLmZyb20sby50byksZj1vLnRvLnRvU3RyaW5nKCkubGVuZ3RoO312YXIgbT1lLW8uZnJvbTtyZXR1cm4gdyhuKSYmKGY9KDgqKG8udG8+MD9vLnRvLTE6by50bykpLnRvU3RyaW5nKDE2KS5sZW5ndGgpPDImJihmPTIpLGkoZnVuY3Rpb24odCxlLHUpe3ZhciBpLGE9dT09PW0sYz1hPyI+ICI6ejtyZXR1cm4gaT13KG4pP1UoKDgqKG8uZnJvbSt1KSkudG9TdHJpbmcoMTYpLGYsIjAiKTpVKChvLmZyb20rdSsxKS50b1N0cmluZygpLGYsIiAiKSxbXS5jb25jYXQodCxbYytpKyIgfCAiK2VdLGE/W3orUigiICIsZikrIiB8ICIrVSgiIixyLCIgIikrUigiXiIsbCldOltdKX0sW10sdSkuam9pbigiXG4iKX1mdW5jdGlvbiBOKG4sdCl7cmV0dXJuIFsiXG4iLCItLSBQQVJTSU5HIEZBSUxFRCAiK1IoIi0iLDUwKSwiXG5cbiIsRChuLHQpLCJcblxuIiwocj10LmV4cGVjdGVkLDE9PT1yLmxlbmd0aD8iRXhwZWN0ZWQ6XG5cbiIrclswXToiRXhwZWN0ZWQgb25lIG9mIHRoZSBmb2xsb3dpbmc6IFxuXG4iK3Iuam9pbigiLCAiKSksIlxuIl0uam9pbigiIik7dmFyIHI7fWZ1bmN0aW9uIEcobil7cmV0dXJuIHZvaWQgMCE9PW4uZmxhZ3M/bi5mbGFnczpbbi5nbG9iYWw/ImciOiIiLG4uaWdub3JlQ2FzZT8iaSI6IiIsbi5tdWx0aWxpbmU/Im0iOiIiLG4udW5pY29kZT8idSI6IiIsbi5zdGlja3k/InkiOiIiXS5qb2luKCIiKX1mdW5jdGlvbiBDKCl7Zm9yKHZhciBuPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSx0PW4ubGVuZ3RoLHI9MDtyPHQ7cis9MSlfKG5bcl0pO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7Zm9yKHZhciB1LG89bmV3IEFycmF5KHQpLGk9MDtpPHQ7aSs9MSl7aWYoISh1PUIobltpXS5fKHIsZSksdSkpLnN0YXR1cylyZXR1cm4gdTtvW2ldPXUudmFsdWUsZT11LmluZGV4O31yZXR1cm4gQihiKGUsbyksdSl9KX1mdW5jdGlvbiBKKCl7dmFyIG49W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2lmKDA9PT1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoInNlcU1hcCBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiKTt2YXIgdD1uLnBvcCgpO3JldHVybiBrKHQpLEMuYXBwbHkobnVsbCxuKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHQuYXBwbHkobnVsbCxuKX0pfWZ1bmN0aW9uIFQoKXt2YXIgbj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyksdD1uLmxlbmd0aDtpZigwPT09dClyZXR1cm4gWSgiemVybyBhbHRlcm5hdGVzIik7Zm9yKHZhciByPTA7cjx0O3IrPTEpXyhuW3JdKTtyZXR1cm4gZShmdW5jdGlvbih0LHIpe2Zvcih2YXIgZSx1PTA7dTxuLmxlbmd0aDt1Kz0xKWlmKChlPUIoblt1XS5fKHQsciksZSkpLnN0YXR1cylyZXR1cm4gZTtyZXR1cm4gZX0pfWZ1bmN0aW9uIFYobix0KXtyZXR1cm4gSChuLHQpLm9yKFgoW10pKX1mdW5jdGlvbiBIKG4sdCl7cmV0dXJuIF8obiksXyh0KSxKKG4sdC50aGVuKG4pLm1hbnkoKSxmdW5jdGlvbihuLHQpe3JldHVybiBbbl0uY29uY2F0KHQpfSl9ZnVuY3Rpb24gSyhuKXtQKG4pO3ZhciB0PSInIituKyInIjtyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PWUrbi5sZW5ndGgsbz1yLnNsaWNlKGUsdSk7cmV0dXJuIG89PT1uP2IodSxvKTp4KGUsdCl9KX1mdW5jdGlvbiBRKG4sdCl7IWZ1bmN0aW9uKG4pe2lmKCEobiBpbnN0YW5jZW9mIFJlZ0V4cCkpdGhyb3cgbmV3IEVycm9yKCJub3QgYSByZWdleHA6ICIrbik7Zm9yKHZhciB0PUcobikscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgZT10LmNoYXJBdChyKTtpZigiaSIhPT1lJiYibSIhPT1lJiYidSIhPT1lJiYicyIhPT1lKXRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgcmVnZXhwIGZsYWcgIicrZSsnIjogJytuKX19KG4pLGFyZ3VtZW50cy5sZW5ndGg+PTI/Tyh0KTp0PTA7dmFyIHI9ZnVuY3Rpb24obil7cmV0dXJuIFJlZ0V4cCgiXig/OiIrbi5zb3VyY2UrIikiLEcobikpfShuKSx1PSIiK247cmV0dXJuIGUoZnVuY3Rpb24obixlKXt2YXIgbz1yLmV4ZWMobi5zbGljZShlKSk7aWYobyl7aWYoMDw9dCYmdDw9by5sZW5ndGgpe3ZhciBpPW9bMF0sYT1vW3RdO3JldHVybiBiKGUraS5sZW5ndGgsYSl9cmV0dXJuIHgoZSwidmFsaWQgbWF0Y2ggZ3JvdXAgKDAgdG8gIitvLmxlbmd0aCsiKSBpbiAiK3UpfXJldHVybiB4KGUsdSl9KX1mdW5jdGlvbiBYKG4pe3JldHVybiBlKGZ1bmN0aW9uKHQscil7cmV0dXJuIGIocixuKX0pfWZ1bmN0aW9uIFkobil7cmV0dXJuIGUoZnVuY3Rpb24odCxyKXtyZXR1cm4geChyLG4pfSl9ZnVuY3Rpb24gWihuKXtpZih5KG4pKXJldHVybiBlKGZ1bmN0aW9uKHQscil7dmFyIGU9bi5fKHQscik7cmV0dXJuIGUuaW5kZXg9cixlLnZhbHVlPSIiLGV9KTtpZigic3RyaW5nIj09dHlwZW9mIG4pcmV0dXJuIFooSyhuKSk7aWYobiBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4gWihRKG4pKTt0aHJvdyBuZXcgRXJyb3IoIm5vdCBhIHN0cmluZywgcmVnZXhwLCBvciBwYXJzZXI6ICIrbil9ZnVuY3Rpb24gJChuKXtyZXR1cm4gXyhuKSxlKGZ1bmN0aW9uKHQscil7dmFyIGU9bi5fKHQsciksdT10LnNsaWNlKHIsZS5pbmRleCk7cmV0dXJuIGUuc3RhdHVzP3gociwnbm90ICInK3UrJyInKTpiKHIsbnVsbCl9KX1mdW5jdGlvbiBubihuKXtyZXR1cm4gayhuKSxlKGZ1bmN0aW9uKHQscil7dmFyIGU9TCh0LHIpO3JldHVybiByPHQubGVuZ3RoJiZuKGUpP2IocisxLGUpOngociwiYSBjaGFyYWN0ZXIvYnl0ZSBtYXRjaGluZyAiK24pfSl9ZnVuY3Rpb24gdG4obix0KXthcmd1bWVudHMubGVuZ3RoPDImJih0PW4sbj12b2lkIDApO3ZhciByPWUoZnVuY3Rpb24obixlKXtyZXR1cm4gci5fPXQoKS5fLHIuXyhuLGUpfSk7cmV0dXJuIG4/ci5kZXNjKG4pOnJ9ZnVuY3Rpb24gcm4oKXtyZXR1cm4gWSgiZmFudGFzeS1sYW5kL2VtcHR5Iil9dS5wYXJzZT1mdW5jdGlvbihuKXtpZigic3RyaW5nIiE9dHlwZW9mIG4mJiF3KG4pKXRocm93IG5ldyBFcnJvcigiLnBhcnNlIG11c3QgYmUgY2FsbGVkIHdpdGggYSBzdHJpbmcgb3IgQnVmZmVyIGFzIGl0cyBhcmd1bWVudCIpO3ZhciB0LHI9dGhpcy5za2lwKGFuKS5fKG4sMCk7cmV0dXJuIHQ9ci5zdGF0dXM/e3N0YXR1czohMCx2YWx1ZTpyLnZhbHVlfTp7c3RhdHVzOiExLGluZGV4OlMobixyLmZ1cnRoZXN0KSxleHBlY3RlZDpyLmV4cGVjdGVkfSxkZWxldGUgaltuXSx0fSx1LnRyeVBhcnNlPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMucGFyc2Uobik7aWYodC5zdGF0dXMpcmV0dXJuIHQudmFsdWU7dmFyIHI9TihuLHQpLGU9bmV3IEVycm9yKHIpO3Rocm93IGUudHlwZT0iUGFyc2ltbW9uRXJyb3IiLGUucmVzdWx0PXQsZX0sdS5hc3NlcnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gdGhpcy5jaGFpbihmdW5jdGlvbihyKXtyZXR1cm4gbihyKT9YKHIpOlkodCl9KX0sdS5vcj1mdW5jdGlvbihuKXtyZXR1cm4gVCh0aGlzLG4pfSx1LnRyaW09ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMud3JhcChuLG4pfSx1LndyYXA9ZnVuY3Rpb24obix0KXtyZXR1cm4gSihuLHRoaXMsdCxmdW5jdGlvbihuLHQpe3JldHVybiB0fSl9LHUudGhydT1mdW5jdGlvbihuKXtyZXR1cm4gbih0aGlzKX0sdS50aGVuPWZ1bmN0aW9uKG4pe3JldHVybiBfKG4pLEModGhpcyxuKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG5bMV19KX0sdS5tYW55PWZ1bmN0aW9uKCl7dmFyIG49dGhpcztyZXR1cm4gZShmdW5jdGlvbih0LHIpe2Zvcih2YXIgZT1bXSx1PXZvaWQgMDs7KXtpZighKHU9QihuLl8odCxyKSx1KSkuc3RhdHVzKXJldHVybiBCKGIocixlKSx1KTtpZihyPT09dS5pbmRleCl0aHJvdyBuZXcgRXJyb3IoImluZmluaXRlIGxvb3AgZGV0ZWN0ZWQgaW4gLm1hbnkoKSBwYXJzZXIgLS0tIGNhbGxpbmcgLm1hbnkoKSBvbiBhIHBhcnNlciB3aGljaCBjYW4gYWNjZXB0IHplcm8gY2hhcmFjdGVycyBpcyB1c3VhbGx5IHRoZSBjYXVzZSIpO3I9dS5pbmRleCxlLnB1c2godS52YWx1ZSk7fX0pfSx1LnRpZVdpdGg9ZnVuY3Rpb24obil7cmV0dXJuIFAobiksdGhpcy5tYXAoZnVuY3Rpb24odCl7aWYoZnVuY3Rpb24obil7aWYoIUUobikpdGhyb3cgbmV3IEVycm9yKCJub3QgYW4gYXJyYXk6ICIrbil9KHQpLHQubGVuZ3RoKXtQKHRbMF0pO2Zvcih2YXIgcj10WzBdLGU9MTtlPHQubGVuZ3RoO2UrKylQKHRbZV0pLHIrPW4rdFtlXTtyZXR1cm4gcn1yZXR1cm4gIiJ9KX0sdS50aWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aWVXaXRoKCIiKX0sdS50aW1lcz1mdW5jdGlvbihuLHQpe3ZhciByPXRoaXM7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9biksTyhuKSxPKHQpLGUoZnVuY3Rpb24oZSx1KXtmb3IodmFyIG89W10saT12b2lkIDAsYT12b2lkIDAsZj0wO2Y8bjtmKz0xKXtpZihhPUIoaT1yLl8oZSx1KSxhKSwhaS5zdGF0dXMpcmV0dXJuIGE7dT1pLmluZGV4LG8ucHVzaChpLnZhbHVlKTt9Zm9yKDtmPHQmJihhPUIoaT1yLl8oZSx1KSxhKSxpLnN0YXR1cyk7Zis9MSl1PWkuaW5kZXgsby5wdXNoKGkudmFsdWUpO3JldHVybiBCKGIodSxvKSxhKX0pfSx1LnJlc3VsdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSx1LmF0TW9zdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy50aW1lcygwLG4pfSx1LmF0TGVhc3Q9ZnVuY3Rpb24obil7cmV0dXJuIEoodGhpcy50aW1lcyhuKSx0aGlzLm1hbnkoKSxmdW5jdGlvbihuLHQpe3JldHVybiBuLmNvbmNhdCh0KX0pfSx1Lm1hcD1mdW5jdGlvbihuKXtrKG4pO3ZhciB0PXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXt2YXIgdT10Ll8ocixlKTtyZXR1cm4gdS5zdGF0dXM/QihiKHUuaW5kZXgsbih1LnZhbHVlKSksdSk6dX0pfSx1LmNvbnRyYW1hcD1mdW5jdGlvbihuKXtrKG4pO3ZhciB0PXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXt2YXIgdT10LnBhcnNlKG4oci5zbGljZShlKSkpO3JldHVybiB1LnN0YXR1cz9iKGUrci5sZW5ndGgsdS52YWx1ZSk6dX0pfSx1LnByb21hcD1mdW5jdGlvbihuLHQpe3JldHVybiBrKG4pLGsodCksdGhpcy5jb250cmFtYXAobikubWFwKHQpfSx1LnNraXA9ZnVuY3Rpb24obil7cmV0dXJuIEModGhpcyxuKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG5bMF19KX0sdS5tYXJrPWZ1bmN0aW9uKCl7cmV0dXJuIEooZW4sdGhpcyxlbixmdW5jdGlvbihuLHQscil7cmV0dXJuIHtzdGFydDpuLHZhbHVlOnQsZW5kOnJ9fSl9LHUubm9kZT1mdW5jdGlvbihuKXtyZXR1cm4gSihlbix0aGlzLGVuLGZ1bmN0aW9uKHQscixlKXtyZXR1cm4ge25hbWU6bix2YWx1ZTpyLHN0YXJ0OnQsZW5kOmV9fSl9LHUuc2VwQnk9ZnVuY3Rpb24obil7cmV0dXJuIFYodGhpcyxuKX0sdS5zZXBCeTE9ZnVuY3Rpb24obil7cmV0dXJuIEgodGhpcyxuKX0sdS5sb29rYWhlYWQ9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuc2tpcChaKG4pKX0sdS5ub3RGb2xsb3dlZEJ5PWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLnNraXAoJChuKSl9LHUuZGVzYz1mdW5jdGlvbihuKXtFKG4pfHwobj1bbl0pO3ZhciB0PXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXt2YXIgdT10Ll8ocixlKTtyZXR1cm4gdS5zdGF0dXN8fCh1LmV4cGVjdGVkPW4pLHV9KX0sdS5mYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5vcihYKG4pKX0sdS5hcD1mdW5jdGlvbihuKXtyZXR1cm4gSihuLHRoaXMsZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0pfSx1LmNoYWluPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXt2YXIgdT10Ll8ocixlKTtyZXR1cm4gdS5zdGF0dXM/QihuKHUudmFsdWUpLl8ocix1LmluZGV4KSx1KTp1fSl9LHUuY29uY2F0PXUub3IsdS5lbXB0eT1ybix1Lm9mPVgsdVsiZmFudGFzeS1sYW5kL2FwIl09dS5hcCx1WyJmYW50YXN5LWxhbmQvY2hhaW4iXT11LmNoYWluLHVbImZhbnRhc3ktbGFuZC9jb25jYXQiXT11LmNvbmNhdCx1WyJmYW50YXN5LWxhbmQvZW1wdHkiXT11LmVtcHR5LHVbImZhbnRhc3ktbGFuZC9vZiJdPXUub2YsdVsiZmFudGFzeS1sYW5kL21hcCJdPXUubWFwO3ZhciBlbj1lKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGIodCxTKG4sdCkpfSksdW49ZShmdW5jdGlvbihuLHQpe3JldHVybiB0Pj1uLmxlbmd0aD94KHQsImFueSBjaGFyYWN0ZXIvYnl0ZSIpOmIodCsxLEwobix0KSl9KSxvbj1lKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGIobi5sZW5ndGgsbi5zbGljZSh0KSl9KSxhbj1lKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQ8bi5sZW5ndGg/eCh0LCJFT0YiKTpiKHQsbnVsbCl9KSxmbj1RKC9bMC05XS8pLmRlc2MoImEgZGlnaXQiKSxjbj1RKC9bMC05XSovKS5kZXNjKCJvcHRpb25hbCBkaWdpdHMiKSxzbj1RKC9bYS16XS9pKS5kZXNjKCJhIGxldHRlciIpLGxuPVEoL1thLXpdKi9pKS5kZXNjKCJvcHRpb25hbCBsZXR0ZXJzIiksaG49USgvXHMqLykuZGVzYygib3B0aW9uYWwgd2hpdGVzcGFjZSIpLHBuPVEoL1xzKy8pLmRlc2MoIndoaXRlc3BhY2UiKSxkbj1LKCJcciIpLHZuPUsoIlxuIiksZ249SygiXHJcbiIpLG1uPVQoZ24sdm4sZG4pLmRlc2MoIm5ld2xpbmUiKSx5bj1UKG1uLGFuKTtlLmFsbD1vbixlLmFsdD1ULGUuYW55PXVuLGUuY3I9ZG4sZS5jcmVhdGVMYW5ndWFnZT1mdW5jdGlvbihuKXt2YXIgdD17fTtmb3IodmFyIHIgaW4gbikoe30pLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmZnVuY3Rpb24ocil7dFtyXT10bihmdW5jdGlvbigpe3JldHVybiBuW3JdKHQpfSk7fShyKTtyZXR1cm4gdH0sZS5jcmxmPWduLGUuY3VzdG9tPWZ1bmN0aW9uKG4pe3JldHVybiBlKG4oYix4KSl9LGUuZGlnaXQ9Zm4sZS5kaWdpdHM9Y24sZS5lbXB0eT1ybixlLmVuZD15bixlLmVvZj1hbixlLmZhaWw9WSxlLmZvcm1hdEVycm9yPU4sZS5pbmRleD1lbixlLmlzUGFyc2VyPXksZS5sYXp5PXRuLGUubGV0dGVyPXNuLGUubGV0dGVycz1sbixlLmxmPXZuLGUubG9va2FoZWFkPVosZS5tYWtlRmFpbHVyZT14LGUubWFrZVN1Y2Nlc3M9YixlLm5ld2xpbmU9bW4sZS5ub25lT2Y9ZnVuY3Rpb24obil7cmV0dXJuIG5uKGZ1bmN0aW9uKHQpe3JldHVybiBuLmluZGV4T2YodCk8MH0pLmRlc2MoIm5vbmUgb2YgJyIrbisiJyIpfSxlLm5vdEZvbGxvd2VkQnk9JCxlLm9mPVgsZS5vbmVPZj1mdW5jdGlvbihuKXtmb3IodmFyIHQ9bi5zcGxpdCgiIikscj0wO3I8dC5sZW5ndGg7cisrKXRbcl09IiciK3Rbcl0rIiciO3JldHVybiBubihmdW5jdGlvbih0KXtyZXR1cm4gbi5pbmRleE9mKHQpPj0wfSkuZGVzYyh0KX0sZS5vcHRXaGl0ZXNwYWNlPWhuLGUuUGFyc2VyPWUsZS5yYW5nZT1mdW5jdGlvbihuLHQpe3JldHVybiBubihmdW5jdGlvbihyKXtyZXR1cm4gbjw9ciYmcjw9dH0pLmRlc2MobisiLSIrdCl9LGUucmVnZXg9USxlLnJlZ2V4cD1RLGUuc2VwQnk9VixlLnNlcEJ5MT1ILGUuc2VxPUMsZS5zZXFNYXA9SixlLnNlcU9iaj1mdW5jdGlvbigpe2Zvcih2YXIgbix0PXt9LHI9MCx1PShuPWFyZ3VtZW50cyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKSksbz11Lmxlbmd0aCxpPTA7aTxvO2krPTEpe3ZhciBhPXVbaV07aWYoIXkoYSkpe2lmKEUoYSkmJjI9PT1hLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBhWzBdJiZ5KGFbMV0pKXt2YXIgZj1hWzBdO2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGYpKXRocm93IG5ldyBFcnJvcigic2VxT2JqOiBkdXBsaWNhdGUga2V5ICIrZik7dFtmXT0hMCxyKys7Y29udGludWV9dGhyb3cgbmV3IEVycm9yKCJzZXFPYmogYXJndW1lbnRzIG11c3QgYmUgcGFyc2VycyBvciBbc3RyaW5nLCBwYXJzZXJdIGFycmF5IHBhaXJzLiIpfX1pZigwPT09cil0aHJvdyBuZXcgRXJyb3IoInNlcU9iaiBleHBlY3RzIGF0IGxlYXN0IG9uZSBuYW1lZCBwYXJzZXIsIGZvdW5kIHplcm8iKTtyZXR1cm4gZShmdW5jdGlvbihuLHQpe2Zvcih2YXIgcixlPXt9LGk9MDtpPG87aSs9MSl7dmFyIGEsZjtpZihFKHVbaV0pPyhhPXVbaV1bMF0sZj11W2ldWzFdKTooYT1udWxsLGY9dVtpXSksIShyPUIoZi5fKG4sdCkscikpLnN0YXR1cylyZXR1cm4gcjthJiYoZVthXT1yLnZhbHVlKSx0PXIuaW5kZXg7fXJldHVybiBCKGIodCxlKSxyKX0pfSxlLnN0cmluZz1LLGUuc3VjY2VlZD1YLGUudGFrZVdoaWxlPWZ1bmN0aW9uKG4pe3JldHVybiBrKG4pLGUoZnVuY3Rpb24odCxyKXtmb3IodmFyIGU9cjtlPHQubGVuZ3RoJiZuKEwodCxlKSk7KWUrKztyZXR1cm4gYihlLHQuc2xpY2UocixlKSl9KX0sZS50ZXN0PW5uLGUud2hpdGVzcGFjZT1wbixlWyJmYW50YXN5LWxhbmQvZW1wdHkiXT1ybixlWyJmYW50YXN5LWxhbmQvb2YiXT1YLGUuQmluYXJ5PXtiaXRTZXE6bCxiaXRTZXFPYmo6ZnVuY3Rpb24obil7cygpO3ZhciB0PXt9LHI9MCxlPWEoZnVuY3Rpb24obil7aWYoRShuKSl7dmFyIGU9bjtpZigyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJbIitlLmpvaW4oIiwgIikrIl0gc2hvdWxkIGJlIGxlbmd0aCAyLCBnb3QgbGVuZ3RoICIrZS5sZW5ndGgpO2lmKFAoZVswXSksTyhlWzFdKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlWzBdKSl0aHJvdyBuZXcgRXJyb3IoImR1cGxpY2F0ZSBrZXkgaW4gYml0U2VxT2JqOiAiK2VbMF0pO3JldHVybiB0W2VbMF1dPSEwLHIrKyxlfXJldHVybiBPKG4pLFtudWxsLG5dfSxuKTtpZihyPDEpdGhyb3cgbmV3IEVycm9yKCJiaXRTZXFPYmogZXhwZWN0cyBhdCBsZWFzdCBvbmUgbmFtZWQgcGFpciwgZ290IFsiK24uam9pbigiLCAiKSsiXSIpO3ZhciB1PWEoZnVuY3Rpb24obil7cmV0dXJuIG5bMF19LGUpO3JldHVybiBsKGEoZnVuY3Rpb24obil7cmV0dXJuIG5bMV19LGUpKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGkoZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbCE9PXRbMF0mJihuW3RbMF1dPXRbMV0pLG59LHt9LGEoZnVuY3Rpb24odCxyKXtyZXR1cm4gW3QsbltyXV19LHUpKX0pfSxieXRlOmZ1bmN0aW9uKG4pe2lmKHMoKSxPKG4pLG4+MjU1KXRocm93IG5ldyBFcnJvcigiVmFsdWUgc3BlY2lmaWVkIHRvIGJ5dGUgY29uc3RydWN0b3IgKCIrbisiPTB4IituLnRvU3RyaW5nKDE2KSsiKSBpcyBsYXJnZXIgaW4gdmFsdWUgdGhhbiBhIHNpbmdsZSBieXRlLiIpO3ZhciB0PShuPjE1PyIweCI6IjB4MCIpK24udG9TdHJpbmcoMTYpO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7dmFyIHU9TChyLGUpO3JldHVybiB1PT09bj9iKGUrMSx1KTp4KGUsdCl9KX0sYnVmZmVyOmZ1bmN0aW9uKG4pe3JldHVybiBoKCJidWZmZXIiLG4pLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gQnVmZmVyLmZyb20obil9KX0sZW5jb2RlZFN0cmluZzpmdW5jdGlvbihuLHQpe3JldHVybiBoKCJzdHJpbmciLHQpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZyhuKX0pfSx1aW50QkU6ZCx1aW50OEJFOmQoMSksdWludDE2QkU6ZCgyKSx1aW50MzJCRTpkKDQpLHVpbnRMRTp2LHVpbnQ4TEU6digxKSx1aW50MTZMRTp2KDIpLHVpbnQzMkxFOnYoNCksaW50QkU6ZyxpbnQ4QkU6ZygxKSxpbnQxNkJFOmcoMiksaW50MzJCRTpnKDQpLGludExFOm0saW50OExFOm0oMSksaW50MTZMRTptKDIpLGludDMyTEU6bSg0KSxmbG9hdEJFOmgoImZsb2F0QkUiLDQpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZWFkRmxvYXRCRSgwKX0pLGZsb2F0TEU6aCgiZmxvYXRMRSIsNCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlYWRGbG9hdExFKDApfSksZG91YmxlQkU6aCgiZG91YmxlQkUiLDgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZWFkRG91YmxlQkUoMCl9KSxkb3VibGVMRTpoKCJkb3VibGVMRSIsOCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlYWREb3VibGVMRSgwKX0pfSxuLmV4cG9ydHM9ZTt9XSl9KTsgCiAgfSAocGFyc2ltbW9uX3VtZF9taW4sIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMpKTsKCiAgdmFyIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cyA9IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHM7CgogIHZhciBlbW9qaVJlZ2V4ID0gKCkgPT4gewogIAkvLyBodHRwczovL210aHMuYmUvZW1vamkKICAJcmV0dXJuIC9bIyowLTldXHVGRTBGP1x1MjBFM3xbXHhBOVx4QUVcdTIwM0NcdTIwNDlcdTIxMjJcdTIxMzlcdTIxOTQtXHUyMTk5XHUyMUE5XHUyMUFBXHUyMzFBXHUyMzFCXHUyMzI4XHUyM0NGXHUyM0VELVx1MjNFRlx1MjNGMVx1MjNGMlx1MjNGOC1cdTIzRkFcdTI0QzJcdTI1QUFcdTI1QUJcdTI1QjZcdTI1QzBcdTI1RkJcdTI1RkNcdTI1RkVcdTI2MDAtXHUyNjA0XHUyNjBFXHUyNjExXHUyNjE0XHUyNjE1XHUyNjE4XHUyNjIwXHUyNjIyXHUyNjIzXHUyNjI2XHUyNjJBXHUyNjJFXHUyNjJGXHUyNjM4LVx1MjYzQVx1MjY0MFx1MjY0Mlx1MjY0OC1cdTI2NTNcdTI2NUZcdTI2NjBcdTI2NjNcdTI2NjVcdTI2NjZcdTI2NjhcdTI2N0JcdTI2N0VcdTI2N0ZcdTI2OTJcdTI2OTQtXHUyNjk3XHUyNjk5XHUyNjlCXHUyNjlDXHUyNkEwXHUyNkE3XHUyNkFBXHUyNkIwXHUyNkIxXHUyNkJEXHUyNkJFXHUyNkM0XHUyNkM4XHUyNkNGXHUyNkQxXHUyNkQzXHUyNkU5XHUyNkYwLVx1MjZGNVx1MjZGN1x1MjZGOFx1MjZGQVx1MjcwMlx1MjcwOFx1MjcwOVx1MjcwRlx1MjcxMlx1MjcxNFx1MjcxNlx1MjcxRFx1MjcyMVx1MjczM1x1MjczNFx1Mjc0NFx1Mjc0N1x1Mjc1N1x1Mjc2M1x1MjdBMVx1MjkzNFx1MjkzNVx1MkIwNS1cdTJCMDdcdTJCMUJcdTJCMUNcdTJCNTVcdTMwMzBcdTMwM0RcdTMyOTdcdTMyOTldXHVGRTBGP3xbXHUyNjFEXHUyNzBDXHUyNzBEXSg/Olx1RkUwRnxcdUQ4M0NbXHVERkZCLVx1REZGRl0pP3xbXHUyNzBBXHUyNzBCXSg/Olx1RDgzQ1tcdURGRkItXHVERkZGXSk/fFtcdTIzRTktXHUyM0VDXHUyM0YwXHUyM0YzXHUyNUZEXHUyNjkzXHUyNkExXHUyNkFCXHUyNkM1XHUyNkNFXHUyNkQ0XHUyNkVBXHUyNkZEXHUyNzA1XHUyNzI4XHUyNzRDXHUyNzRFXHUyNzUzLVx1Mjc1NVx1Mjc5NS1cdTI3OTdcdTI3QjBcdTI3QkZcdTJCNTBdfFx1MjZGOSg/Olx1RkUwRnxcdUQ4M0NbXHVERkZCLVx1REZGRl0pPyg/Olx1MjAwRFtcdTI2NDBcdTI2NDJdXHVGRTBGPyk/fFx1Mjc2NFx1RkUwRj8oPzpcdTIwMEQoPzpcdUQ4M0RcdUREMjV8XHVEODNFXHVERTc5KSk/fFx1RDgzQyg/OltcdURDMDRcdURENzBcdURENzFcdUREN0VcdUREN0ZcdURFMDJcdURFMzdcdURGMjFcdURGMjQtXHVERjJDXHVERjM2XHVERjdEXHVERjk2XHVERjk3XHVERjk5LVx1REY5Qlx1REY5RVx1REY5Rlx1REZDRFx1REZDRVx1REZENC1cdURGREZcdURGRjVcdURGRjddXHVGRTBGP3xbXHVERjg1XHVERkMyXHVERkM3XSg/Olx1RDgzQ1tcdURGRkItXHVERkZGXSk/fFtcdURGQzNcdURGQzRcdURGQ0FdKD86XHVEODNDW1x1REZGQi1cdURGRkZdKT8oPzpcdTIwMERbXHUyNjQwXHUyNjQyXVx1RkUwRj8pP3xbXHVERkNCXHVERkNDXSg/Olx1RkUwRnxcdUQ4M0NbXHVERkZCLVx1REZGRl0pPyg/Olx1MjAwRFtcdTI2NDBcdTI2NDJdXHVGRTBGPyk/fFtcdURDQ0ZcdUREOEVcdUREOTEtXHVERDlBXHVERTAxXHVERTFBXHVERTJGXHVERTMyLVx1REUzNlx1REUzOC1cdURFM0FcdURFNTBcdURFNTFcdURGMDAtXHVERjIwXHVERjJELVx1REYzNVx1REYzNy1cdURGN0NcdURGN0UtXHVERjg0XHVERjg2LVx1REY5M1x1REZBMC1cdURGQzFcdURGQzVcdURGQzZcdURGQzhcdURGQzlcdURGQ0YtXHVERkQzXHVERkUwLVx1REZGMFx1REZGOC1cdURGRkZdfFx1RERFNlx1RDgzQ1tcdURERTgtXHVEREVDXHVEREVFXHVEREYxXHVEREYyXHVEREY0XHVEREY2LVx1RERGQVx1RERGQ1x1RERGRFx1RERGRl18XHVEREU3XHVEODNDW1x1RERFNlx1RERFN1x1RERFOS1cdURERUZcdURERjEtXHVEREY0XHVEREY2LVx1RERGOVx1RERGQlx1RERGQ1x1RERGRVx1RERGRl18XHVEREU4XHVEODNDW1x1RERFNlx1RERFOFx1RERFOVx1RERFQi1cdURERUVcdURERjAtXHVEREY1XHVEREY3XHVEREZBLVx1RERGRl18XHVEREU5XHVEODNDW1x1RERFQVx1RERFQ1x1RERFRlx1RERGMFx1RERGMlx1RERGNFx1RERGRl18XHVEREVBXHVEODNDW1x1RERFNlx1RERFOFx1RERFQVx1RERFQ1x1RERFRFx1RERGNy1cdURERkFdfFx1RERFQlx1RDgzQ1tcdURERUUtXHVEREYwXHVEREYyXHVEREY0XHVEREY3XXxcdURERUNcdUQ4M0NbXHVEREU2XHVEREU3XHVEREU5LVx1RERFRVx1RERGMS1cdURERjNcdURERjUtXHVEREZBXHVEREZDXHVEREZFXXxcdURERURcdUQ4M0NbXHVEREYwXHVEREYyXHVEREYzXHVEREY3XHVEREY5XHVEREZBXXxcdURERUVcdUQ4M0NbXHVEREU4LVx1RERFQVx1RERGMS1cdURERjRcdURERjYtXHVEREY5XXxcdURERUZcdUQ4M0NbXHVEREVBXHVEREYyXHVEREY0XHVEREY1XXxcdURERjBcdUQ4M0NbXHVEREVBXHVEREVDLVx1RERFRVx1RERGMlx1RERGM1x1RERGNVx1RERGN1x1RERGQ1x1RERGRVx1RERGRl18XHVEREYxXHVEODNDW1x1RERFNi1cdURERThcdURERUVcdURERjBcdURERjctXHVEREZCXHVEREZFXXxcdURERjJcdUQ4M0NbXHVEREU2XHVEREU4LVx1RERFRFx1RERGMC1cdURERkZdfFx1RERGM1x1RDgzQ1tcdURERTZcdURERThcdURERUEtXHVEREVDXHVEREVFXHVEREYxXHVEREY0XHVEREY1XHVEREY3XHVEREZBXHVEREZGXXxcdURERjRcdUQ4M0NcdURERjJ8XHVEREY1XHVEODNDW1x1RERFNlx1RERFQS1cdURERURcdURERjAtXHVEREYzXHVEREY3LVx1RERGOVx1RERGQ1x1RERGRV18XHVEREY2XHVEODNDXHVEREU2fFx1RERGN1x1RDgzQ1tcdURERUFcdURERjRcdURERjhcdURERkFcdURERkNdfFx1RERGOFx1RDgzQ1tcdURERTYtXHVEREVBXHVEREVDLVx1RERGNFx1RERGNy1cdURERjlcdURERkJcdURERkQtXHVEREZGXXxcdURERjlcdUQ4M0NbXHVEREU2XHVEREU4XHVEREU5XHVEREVCLVx1RERFRFx1RERFRi1cdURERjRcdURERjdcdURERjlcdURERkJcdURERkNcdURERkZdfFx1RERGQVx1RDgzQ1tcdURERTZcdURERUNcdURERjJcdURERjNcdURERjhcdURERkVcdURERkZdfFx1RERGQlx1RDgzQ1tcdURERTZcdURERThcdURERUFcdURERUNcdURERUVcdURERjNcdURERkFdfFx1RERGQ1x1RDgzQ1tcdURERUJcdURERjhdfFx1RERGRFx1RDgzQ1x1RERGMHxcdURERkVcdUQ4M0NbXHVEREVBXHVEREY5XXxcdURERkZcdUQ4M0NbXHVEREU2XHVEREYyXHVEREZDXXxcdURGRjNcdUZFMEY/KD86XHUyMDBEKD86XHUyNkE3XHVGRTBGP3xcdUQ4M0NcdURGMDgpKT98XHVERkY0KD86XHUyMDBEXHUyNjIwXHVGRTBGP3xcdURCNDBcdURDNjdcdURCNDBcdURDNjJcdURCNDAoPzpcdURDNjVcdURCNDBcdURDNkVcdURCNDBcdURDNjd8XHVEQzczXHVEQjQwXHVEQzYzXHVEQjQwXHVEQzc0fFx1REM3N1x1REI0MFx1REM2Q1x1REI0MFx1REM3MylcdURCNDBcdURDN0YpPyl8XHVEODNEKD86W1x1REMwOFx1REMyNl0oPzpcdTIwMERcdTJCMUIpP3xbXHVEQzNGXHVEQ0ZEXHVERDQ5XHVERDRBXHVERDZGXHVERDcwXHVERDczXHVERDc2LVx1REQ3OVx1REQ4N1x1REQ4QS1cdUREOERcdUREQTVcdUREQThcdUREQjFcdUREQjJcdUREQkNcdUREQzItXHVEREM0XHVEREQxLVx1REREM1x1REREQy1cdUREREVcdURERTFcdURERTNcdURERThcdURERUZcdURERjNcdURERkFcdURFQ0JcdURFQ0QtXHVERUNGXHVERUUwLVx1REVFNVx1REVFOVx1REVGMFx1REVGM11cdUZFMEY/fFtcdURDNDJcdURDNDNcdURDNDYtXHVEQzUwXHVEQzY2XHVEQzY3XHVEQzZCLVx1REM2RFx1REM3Mlx1REM3NC1cdURDNzZcdURDNzhcdURDN0NcdURDODNcdURDODVcdURDOEZcdURDOTFcdURDQUFcdUREN0FcdUREOTVcdUREOTZcdURFNENcdURFNEZcdURFQzBcdURFQ0NdKD86XHVEODNDW1x1REZGQi1cdURGRkZdKT98W1x1REM2RVx1REM3MFx1REM3MVx1REM3M1x1REM3N1x1REM4MVx1REM4Mlx1REM4Nlx1REM4N1x1REU0NS1cdURFNDdcdURFNEJcdURFNERcdURFNEVcdURFQTNcdURFQjQtXHVERUI2XSg/Olx1RDgzQ1tcdURGRkItXHVERkZGXSk/KD86XHUyMDBEW1x1MjY0MFx1MjY0Ml1cdUZFMEY/KT98W1x1REQ3NFx1REQ5MF0oPzpcdUZFMEZ8XHVEODNDW1x1REZGQi1cdURGRkZdKT98W1x1REMwMC1cdURDMDdcdURDMDktXHVEQzE0XHVEQzE2LVx1REMyNVx1REMyNy1cdURDM0FcdURDM0MtXHVEQzNFXHVEQzQwXHVEQzQ0XHVEQzQ1XHVEQzUxLVx1REM2NVx1REM2QVx1REM3OS1cdURDN0JcdURDN0QtXHVEQzgwXHVEQzg0XHVEQzg4LVx1REM4RVx1REM5MFx1REM5Mi1cdURDQTlcdURDQUItXHVEQ0ZDXHVEQ0ZGLVx1REQzRFx1REQ0Qi1cdURENEVcdURENTAtXHVERDY3XHVEREE0XHVEREZCLVx1REUyRFx1REUyRi1cdURFMzRcdURFMzctXHVERTQ0XHVERTQ4LVx1REU0QVx1REU4MC1cdURFQTJcdURFQTQtXHVERUIzXHVERUI3LVx1REVCRlx1REVDMS1cdURFQzVcdURFRDAtXHVERUQyXHVERUQ1LVx1REVEN1x1REVEQy1cdURFREZcdURFRUJcdURFRUNcdURFRjQtXHVERUZDXHVERkUwLVx1REZFQlx1REZGMF18XHVEQzE1KD86XHUyMDBEXHVEODNFXHVEREJBKT98XHVEQzNCKD86XHUyMDBEXHUyNzQ0XHVGRTBGPyk/fFx1REM0MVx1RkUwRj8oPzpcdTIwMERcdUQ4M0RcdURERThcdUZFMEY/KT98XHVEQzY4KD86XHUyMDBEKD86W1x1MjY5NVx1MjY5Nlx1MjcwOF1cdUZFMEY/fFx1Mjc2NFx1RkUwRj9cdTIwMERcdUQ4M0QoPzpcdURDOEJcdTIwMERcdUQ4M0QpP1x1REM2OHxcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0QoPzpbXHVEQzY4XHVEQzY5XVx1MjAwRFx1RDgzRCg/Olx1REM2Nig/Olx1MjAwRFx1RDgzRFx1REM2Nik/fFx1REM2Nyg/Olx1MjAwRFx1RDgzRFtcdURDNjZcdURDNjddKT8pfFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1REM2Nig/Olx1MjAwRFx1RDgzRFx1REM2Nik/fFx1REM2Nyg/Olx1MjAwRFx1RDgzRFtcdURDNjZcdURDNjddKT8pfFx1RDgzRVtcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXSl8XHVEODNDKD86XHVERkZCKD86XHUyMDBEKD86W1x1MjY5NVx1MjY5Nlx1MjcwOF1cdUZFMEY/fFx1Mjc2NFx1RkUwRj9cdTIwMERcdUQ4M0QoPzpcdURDOEJcdTIwMERcdUQ4M0QpP1x1REM2OFx1RDgzQ1tcdURGRkItXHVERkZGXXxcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0UoPzpbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF18XHVERDFEXHUyMDBEXHVEODNEXHVEQzY4XHVEODNDW1x1REZGQy1cdURGRkZdKSkpP3xcdURGRkMoPzpcdTIwMEQoPzpbXHUyNjk1XHUyNjk2XHUyNzA4XVx1RkUwRj98XHUyNzY0XHVGRTBGP1x1MjAwRFx1RDgzRCg/Olx1REM4Qlx1MjAwRFx1RDgzRCk/XHVEQzY4XHVEODNDW1x1REZGQi1cdURGRkZdfFx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1RDgzRSg/OltcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXXxcdUREMURcdTIwMERcdUQ4M0RcdURDNjhcdUQ4M0NbXHVERkZCXHVERkZELVx1REZGRl0pKSk/fFx1REZGRCg/Olx1MjAwRCg/OltcdTI2OTVcdTI2OTZcdTI3MDhdXHVGRTBGP3xcdTI3NjRcdUZFMEY/XHUyMDBEXHVEODNEKD86XHVEQzhCXHUyMDBEXHVEODNEKT9cdURDNjhcdUQ4M0NbXHVERkZCLVx1REZGRl18XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFKD86W1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdfFx1REQxRFx1MjAwRFx1RDgzRFx1REM2OFx1RDgzQ1tcdURGRkJcdURGRkNcdURGRkVcdURGRkZdKSkpP3xcdURGRkUoPzpcdTIwMEQoPzpbXHUyNjk1XHUyNjk2XHUyNzA4XVx1RkUwRj98XHUyNzY0XHVGRTBGP1x1MjAwRFx1RDgzRCg/Olx1REM4Qlx1MjAwRFx1RDgzRCk/XHVEQzY4XHVEODNDW1x1REZGQi1cdURGRkZdfFx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1RDgzRSg/OltcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXXxcdUREMURcdTIwMERcdUQ4M0RcdURDNjhcdUQ4M0NbXHVERkZCLVx1REZGRFx1REZGRl0pKSk/fFx1REZGRig/Olx1MjAwRCg/OltcdTI2OTVcdTI2OTZcdTI3MDhdXHVGRTBGP3xcdTI3NjRcdUZFMEY/XHUyMDBEXHVEODNEKD86XHVEQzhCXHUyMDBEXHVEODNEKT9cdURDNjhcdUQ4M0NbXHVERkZCLVx1REZGRl18XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFKD86W1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdfFx1REQxRFx1MjAwRFx1RDgzRFx1REM2OFx1RDgzQ1tcdURGRkItXHVERkZFXSkpKT8pKT98XHVEQzY5KD86XHUyMDBEKD86W1x1MjY5NVx1MjY5Nlx1MjcwOF1cdUZFMEY/fFx1Mjc2NFx1RkUwRj9cdTIwMERcdUQ4M0QoPzpcdURDOEJcdTIwMERcdUQ4M0QpP1tcdURDNjhcdURDNjldfFx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRCg/OltcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1REM2Nig/Olx1MjAwRFx1RDgzRFx1REM2Nik/fFx1REM2Nyg/Olx1MjAwRFx1RDgzRFtcdURDNjZcdURDNjddKT98XHVEQzY5XHUyMDBEXHVEODNEKD86XHVEQzY2KD86XHUyMDBEXHVEODNEXHVEQzY2KT98XHVEQzY3KD86XHUyMDBEXHVEODNEW1x1REM2Nlx1REM2N10pPykpfFx1RDgzRVtcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXSl8XHVEODNDKD86XHVERkZCKD86XHUyMDBEKD86W1x1MjY5NVx1MjY5Nlx1MjcwOF1cdUZFMEY/fFx1Mjc2NFx1RkUwRj9cdTIwMERcdUQ4M0QoPzpbXHVEQzY4XHVEQzY5XXxcdURDOEJcdTIwMERcdUQ4M0RbXHVEQzY4XHVEQzY5XSlcdUQ4M0NbXHVERkZCLVx1REZGRl18XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFKD86W1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdfFx1REQxRFx1MjAwRFx1RDgzRFtcdURDNjhcdURDNjldXHVEODNDW1x1REZGQy1cdURGRkZdKSkpP3xcdURGRkMoPzpcdTIwMEQoPzpbXHUyNjk1XHUyNjk2XHUyNzA4XVx1RkUwRj98XHUyNzY0XHVGRTBGP1x1MjAwRFx1RDgzRCg/OltcdURDNjhcdURDNjldfFx1REM4Qlx1MjAwRFx1RDgzRFtcdURDNjhcdURDNjldKVx1RDgzQ1tcdURGRkItXHVERkZGXXxcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0UoPzpbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF18XHVERDFEXHUyMDBEXHVEODNEW1x1REM2OFx1REM2OV1cdUQ4M0NbXHVERkZCXHVERkZELVx1REZGRl0pKSk/fFx1REZGRCg/Olx1MjAwRCg/OltcdTI2OTVcdTI2OTZcdTI3MDhdXHVGRTBGP3xcdTI3NjRcdUZFMEY/XHUyMDBEXHVEODNEKD86W1x1REM2OFx1REM2OV18XHVEQzhCXHUyMDBEXHVEODNEW1x1REM2OFx1REM2OV0pXHVEODNDW1x1REZGQi1cdURGRkZdfFx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1RDgzRSg/OltcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXXxcdUREMURcdTIwMERcdUQ4M0RbXHVEQzY4XHVEQzY5XVx1RDgzQ1tcdURGRkJcdURGRkNcdURGRkVcdURGRkZdKSkpP3xcdURGRkUoPzpcdTIwMEQoPzpbXHUyNjk1XHUyNjk2XHUyNzA4XVx1RkUwRj98XHUyNzY0XHVGRTBGP1x1MjAwRFx1RDgzRCg/OltcdURDNjhcdURDNjldfFx1REM4Qlx1MjAwRFx1RDgzRFtcdURDNjhcdURDNjldKVx1RDgzQ1tcdURGRkItXHVERkZGXXxcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0UoPzpbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF18XHVERDFEXHUyMDBEXHVEODNEW1x1REM2OFx1REM2OV1cdUQ4M0NbXHVERkZCLVx1REZGRFx1REZGRl0pKSk/fFx1REZGRig/Olx1MjAwRCg/OltcdTI2OTVcdTI2OTZcdTI3MDhdXHVGRTBGP3xcdTI3NjRcdUZFMEY/XHUyMDBEXHVEODNEKD86W1x1REM2OFx1REM2OV18XHVEQzhCXHUyMDBEXHVEODNEW1x1REM2OFx1REM2OV0pXHVEODNDW1x1REZGQi1cdURGRkZdfFx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1RDgzRSg/OltcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXXxcdUREMURcdTIwMERcdUQ4M0RbXHVEQzY4XHVEQzY5XVx1RDgzQ1tcdURGRkItXHVERkZFXSkpKT8pKT98XHVEQzZGKD86XHUyMDBEW1x1MjY0MFx1MjY0Ml1cdUZFMEY/KT98XHVERDc1KD86XHVGRTBGfFx1RDgzQ1tcdURGRkItXHVERkZGXSk/KD86XHUyMDBEW1x1MjY0MFx1MjY0Ml1cdUZFMEY/KT98XHVERTJFKD86XHUyMDBEXHVEODNEXHVEQ0E4KT98XHVERTM1KD86XHUyMDBEXHVEODNEXHVEQ0FCKT98XHVERTM2KD86XHUyMDBEXHVEODNDXHVERjJCXHVGRTBGPyk/KXxcdUQ4M0UoPzpbXHVERDBDXHVERDBGXHVERDE4LVx1REQxRlx1REQzMC1cdUREMzRcdUREMzZcdURENzdcdUREQjVcdUREQjZcdUREQkJcdURERDJcdURERDNcdURERDVcdURFQzMtXHVERUM1XHVERUYwXHVERUYyLVx1REVGOF0oPzpcdUQ4M0NbXHVERkZCLVx1REZGRl0pP3xbXHVERDI2XHVERDM1XHVERDM3LVx1REQzOVx1REQzRFx1REQzRVx1RERCOFx1RERCOVx1RERDRC1cdUREQ0ZcdURERDRcdURERDYtXHVEREREXSg/Olx1RDgzQ1tcdURGRkItXHVERkZGXSk/KD86XHUyMDBEW1x1MjY0MFx1MjY0Ml1cdUZFMEY/KT98W1x1RERERVx1RERERl0oPzpcdTIwMERbXHUyNjQwXHUyNjQyXVx1RkUwRj8pP3xbXHVERDBEXHVERDBFXHVERDEwLVx1REQxN1x1REQyMC1cdUREMjVcdUREMjctXHVERDJGXHVERDNBXHVERDNGLVx1REQ0NVx1REQ0Ny1cdURENzZcdURENzgtXHVEREI0XHVEREI3XHVEREJBXHVEREJDLVx1RERDQ1x1REREMFx1RERFMC1cdURERkZcdURFNzAtXHVERTdDXHVERTgwLVx1REU4OFx1REU5MC1cdURFQkRcdURFQkYtXHVERUMyXHVERUNFLVx1REVEQlx1REVFMC1cdURFRThdfFx1REQzQyg/Olx1MjAwRFtcdTI2NDBcdTI2NDJdXHVGRTBGP3xcdUQ4M0NbXHVERkZCLVx1REZGRl0pP3xcdURERDEoPzpcdTIwMEQoPzpbXHUyNjk1XHUyNjk2XHUyNzA4XVx1RkUwRj98XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY4NFx1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFKD86W1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdfFx1REQxRFx1MjAwRFx1RDgzRVx1REREMSkpfFx1RDgzQyg/Olx1REZGQig/Olx1MjAwRCg/OltcdTI2OTVcdTI2OTZcdTI3MDhdXHVGRTBGP3xcdTI3NjRcdUZFMEY/XHUyMDBEKD86XHVEODNEXHVEQzhCXHUyMDBEKT9cdUQ4M0VcdURERDFcdUQ4M0NbXHVERkZDLVx1REZGRl18XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY4NFx1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFKD86W1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdfFx1REQxRFx1MjAwRFx1RDgzRVx1REREMVx1RDgzQ1tcdURGRkItXHVERkZGXSkpKT98XHVERkZDKD86XHUyMDBEKD86W1x1MjY5NVx1MjY5Nlx1MjcwOF1cdUZFMEY/fFx1Mjc2NFx1RkUwRj9cdTIwMEQoPzpcdUQ4M0RcdURDOEJcdTIwMEQpP1x1RDgzRVx1REREMVx1RDgzQ1tcdURGRkJcdURGRkQtXHVERkZGXXxcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjg0XHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0UoPzpbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF18XHVERDFEXHUyMDBEXHVEODNFXHVEREQxXHVEODNDW1x1REZGQi1cdURGRkZdKSkpP3xcdURGRkQoPzpcdTIwMEQoPzpbXHUyNjk1XHUyNjk2XHUyNzA4XVx1RkUwRj98XHUyNzY0XHVGRTBGP1x1MjAwRCg/Olx1RDgzRFx1REM4Qlx1MjAwRCk/XHVEODNFXHVEREQxXHVEODNDW1x1REZGQlx1REZGQ1x1REZGRVx1REZGRl18XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY4NFx1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFKD86W1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdfFx1REQxRFx1MjAwRFx1RDgzRVx1REREMVx1RDgzQ1tcdURGRkItXHVERkZGXSkpKT98XHVERkZFKD86XHUyMDBEKD86W1x1MjY5NVx1MjY5Nlx1MjcwOF1cdUZFMEY/fFx1Mjc2NFx1RkUwRj9cdTIwMEQoPzpcdUQ4M0RcdURDOEJcdTIwMEQpP1x1RDgzRVx1REREMVx1RDgzQ1tcdURGRkItXHVERkZEXHVERkZGXXxcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjg0XHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0UoPzpbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF18XHVERDFEXHUyMDBEXHVEODNFXHVEREQxXHVEODNDW1x1REZGQi1cdURGRkZdKSkpP3xcdURGRkYoPzpcdTIwMEQoPzpbXHUyNjk1XHUyNjk2XHUyNzA4XVx1RkUwRj98XHUyNzY0XHVGRTBGP1x1MjAwRCg/Olx1RDgzRFx1REM4Qlx1MjAwRCk/XHVEODNFXHVEREQxXHVEODNDW1x1REZGQi1cdURGRkVdfFx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGODRcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1RDgzRSg/OltcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXXxcdUREMURcdTIwMERcdUQ4M0VcdURERDFcdUQ4M0NbXHVERkZCLVx1REZGRl0pKSk/KSk/fFx1REVGMSg/Olx1RDgzQyg/Olx1REZGQig/Olx1MjAwRFx1RDgzRVx1REVGMlx1RDgzQ1tcdURGRkMtXHVERkZGXSk/fFx1REZGQyg/Olx1MjAwRFx1RDgzRVx1REVGMlx1RDgzQ1tcdURGRkJcdURGRkQtXHVERkZGXSk/fFx1REZGRCg/Olx1MjAwRFx1RDgzRVx1REVGMlx1RDgzQ1tcdURGRkJcdURGRkNcdURGRkVcdURGRkZdKT98XHVERkZFKD86XHUyMDBEXHVEODNFXHVERUYyXHVEODNDW1x1REZGQi1cdURGRkRcdURGRkZdKT98XHVERkZGKD86XHUyMDBEXHVEODNFXHVERUYyXHVEODNDW1x1REZGQi1cdURGRkVdKT8pKT8pL2c7CiAgfTsKCiAgLyoqIE5vcm1hbGl6ZSBhIGR1cmF0aW9uIHRvIGFsbCBvZiB0aGUgcHJvcGVyIHVuaXRzLiAqLwogIGZ1bmN0aW9uIG5vcm1hbGl6ZUR1cmF0aW9uKGR1cikgewogICAgICBpZiAoZHVyID09PSB1bmRlZmluZWQgfHwgZHVyID09PSBudWxsKQogICAgICAgICAgcmV0dXJuIGR1cjsKICAgICAgcmV0dXJuIGR1ci5zaGlmdFRvQWxsKCkubm9ybWFsaXplKCk7CiAgfQogIC8qKiBTdHJpcCB0aGUgdGltZSBjb21wb25lbnRzIG9mIGEgZGF0ZSB0aW1lIG9iamVjdC4gKi8KICBmdW5jdGlvbiBzdHJpcFRpbWUoZHQpIHsKICAgICAgaWYgKGR0ID09PSBudWxsIHx8IGR0ID09PSB1bmRlZmluZWQpCiAgICAgICAgICByZXR1cm4gZHQ7CiAgICAgIHJldHVybiBEYXRlVGltZS5mcm9tT2JqZWN0KHsKICAgICAgICAgIHllYXI6IGR0LnllYXIsCiAgICAgICAgICBtb250aDogZHQubW9udGgsCiAgICAgICAgICBkYXk6IGR0LmRheSwKICAgICAgfSk7CiAgfQogIC8qKiBUcnkgdG8gZXh0cmFjdCBhIFlZWVlNTUREIGRhdGUgZnJvbSBhIHN0cmluZy4gKi8KICBmdW5jdGlvbiBleHRyYWN0RGF0ZShzdHIpIHsKICAgICAgbGV0IGRhdGVNYXRjaCA9IC8oXGR7NH0pLShcZHsyfSktKFxkezJ9KS8uZXhlYyhzdHIpOwogICAgICBpZiAoIWRhdGVNYXRjaCkKICAgICAgICAgIGRhdGVNYXRjaCA9IC8oXGR7NH0pKFxkezJ9KShcZHsyfSkvLmV4ZWMoc3RyKTsKICAgICAgaWYgKGRhdGVNYXRjaCkgewogICAgICAgICAgbGV0IHllYXIgPSBOdW1iZXIucGFyc2VJbnQoZGF0ZU1hdGNoWzFdKTsKICAgICAgICAgIGxldCBtb250aCA9IE51bWJlci5wYXJzZUludChkYXRlTWF0Y2hbMl0pOwogICAgICAgICAgbGV0IGRheSA9IE51bWJlci5wYXJzZUludChkYXRlTWF0Y2hbM10pOwogICAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyLCBtb250aCwgZGF5IH0pOwogICAgICB9CiAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgfQogIC8qKiBHZXQgdGhlIGZvbGRlciBjb250YWluaW5nIHRoZSBnaXZlbiBwYXRoIChpLmUuLCBsaWtlIGNvbXB1dGluZyAncGF0aC8uLicpLiAqLwogIGZ1bmN0aW9uIGdldFBhcmVudEZvbGRlcihwYXRoKSB7CiAgICAgIHJldHVybiBwYXRoLnNwbGl0KCIvIikuc2xpY2UoMCwgLTEpLmpvaW4oIi8iKTsKICB9CiAgLyoqIEdldCB0aGUgInRpdGxlIiBmb3IgYSBmaWxlLCBieSBzdHJpcHBpbmcgb3RoZXIgcGFydHMgb2YgdGhlIHBhdGggYXMgd2VsbCBhcyB0aGUgZXh0ZW5zaW9uLiAqLwogIGZ1bmN0aW9uIGdldEZpbGVUaXRsZShwYXRoKSB7CiAgICAgIGlmIChwYXRoLmluY2x1ZGVzKCIvIikpCiAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZigiLyIpICsgMSk7CiAgICAgIGlmIChwYXRoLmVuZHNXaXRoKCIubWQiKSkKICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxlbmd0aCAtIDMpOwogICAgICByZXR1cm4gcGF0aDsKICB9CiAgLyoqIEdldCB0aGUgZXh0ZW5zaW9uIG9mIGEgZmlsZSBmcm9tIHRoZSBmaWxlIHBhdGguICovCiAgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uKHBhdGgpIHsKICAgICAgaWYgKCFwYXRoLmluY2x1ZGVzKCIuIikpCiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgIHJldHVybiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCIuIikgKyAxKTsKICB9CiAgLyoqIFBhcnNlIGFsbCBzdWJ0YWdzIG91dCBvZiB0aGUgZ2l2ZW4gdGFnLiBJLmUuLCAjaGVsbG8vaS9hbSB3b3VsZCB5aWVsZCBbI2hlbGxvL2kvYW0sICNoZWxsby9pLCAjaGVsbG9dLiAqLwogIGZ1bmN0aW9uIGV4dHJhY3RTdWJ0YWdzKHRhZykgewogICAgICBsZXQgcmVzdWx0ID0gW3RhZ107CiAgICAgIHdoaWxlICh0YWcuaW5jbHVkZXMoIi8iKSkgewogICAgICAgICAgdGFnID0gdGFnLnN1YnN0cmluZygwLCB0YWcubGFzdEluZGV4T2YoIi8iKSk7CiAgICAgICAgICByZXN1bHQucHVzaCh0YWcpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgfQogIC8qKiBBIHBhcnNpbW1vbiBwYXJzZXIgd2hpY2ggY2Fub25pY2FsaXplcyB2YXJpYWJsZSBuYW1lcyB3aGlsZSBwcm9wZXJseSByZXNwZWN0aW5nIGVtb2ppLiAqLwogIGNvbnN0IFZBUl9OQU1FX0NBTk9OSUNBTElaRVIgPSBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuYWx0KHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5yZWdleChuZXcgUmVnRXhwKGVtb2ppUmVnZXgoKSwgIiIpKSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnJlZ2V4KC9bMC05XHB7TGV0dGVyfV8tXSsvdSkubWFwKHN0ciA9PiBzdHIudG9Mb2NhbGVMb3dlckNhc2UoKSksIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy53aGl0ZXNwYWNlLm1hcChfID0+ICItIiksIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5hbnkubWFwKF8gPT4gIiIpKQogICAgICAubWFueSgpCiAgICAgIC5tYXAocmVzdWx0ID0+IHJlc3VsdC5qb2luKCIiKSk7CiAgLyoqIENvbnZlcnQgYW4gYXJiaXRyYXJ5IHZhcmlhYmxlIG5hbWUgaW50byBzb21ldGhpbmcgSlMvcXVlcnkgZnJpZW5kbHkuICovCiAgZnVuY3Rpb24gY2Fub25pY2FsaXplVmFyTmFtZShuYW1lKSB7CiAgICAgIHJldHVybiBWQVJfTkFNRV9DQU5PTklDQUxJWkVSLnRyeVBhcnNlKG5hbWUpOwogIH0KICBjb25zdCBIRUFERVJfQ0FOT05JQ0FMSVpFUiA9IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5hbHQocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnJlZ2V4KG5ldyBSZWdFeHAoZW1vamlSZWdleCgpLCAiIikpLCBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMucmVnZXgoL1swLTlccHtMZXR0ZXJ9Xy1dKy91KSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLndoaXRlc3BhY2UubWFwKF8gPT4gIiAiKSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLmFueS5tYXAoXyA9PiAiICIpKQogICAgICAubWFueSgpCiAgICAgIC5tYXAocmVzdWx0ID0+IHsKICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCIiKS5zcGxpdCgvXHMrLykuam9pbigiICIpLnRyaW0oKTsKICB9KTsKICAvKioKICAgKiBOb3JtYWxpemVzIHRoZSB0ZXh0IGluIGEgaGVhZGVyIHRvIGJlIHNvbWV0aGluZyB0aGF0IGlzIGFjdHVhbGx5IGxpbmthYmxlIHRvLiBUaGlzIG1pbWljcwogICAqIGhvdyBPYnNpZGlhbiBkb2VzIGl0J3Mgbm9ybWFsaXphdGlvbiwgY29sbGFwc2luZyByZXBlYXRlZCBzcGFjZXMgYW5kIHN0cmlwcGluZyBvdXQgY29udHJvbCBjaGFyYWN0ZXJzLgogICAqLwogIGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlckZvckxpbmsoaGVhZGVyKSB7CiAgICAgIHJldHVybiBIRUFERVJfQ0FOT05JQ0FMSVpFUi50cnlQYXJzZShoZWFkZXIpOwogIH0KICAvKiogUmVuZGVyIGEgZHVyYXRpb24gaW4gYSBtaW5pbWFsIGZvcm1hdCB0byBzYXZlIHNwYWNlLiAqLwogIGZ1bmN0aW9uIHJlbmRlck1pbmltYWxEdXJhdGlvbihkdXIpIHsKICAgICAgZHVyID0gbm9ybWFsaXplRHVyYXRpb24oZHVyKTsKICAgICAgLy8gdG9IdW1hbiBvdXRwdXRzIHplcm8gcXVhbnRpdGllcyBlLmcuICIwIHNlY29uZHMiCiAgICAgIGR1ciA9IER1cmF0aW9uLmZyb21PYmplY3QoT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGR1ci50b09iamVjdCgpKS5maWx0ZXIoKFssIHF1YW50aXR5XSkgPT4gcXVhbnRpdHkgIT0gMCkpKTsKICAgICAgcmV0dXJuIGR1ci50b0h1bWFuKCk7CiAgfQoKICB2YXIgVmFsdWVzOwogIChmdW5jdGlvbiAoVmFsdWVzKSB7CiAgICAgIC8qKiBDb252ZXJ0IGFuIGFyYml0cmFyeSB2YWx1ZSBpbnRvIGEgcmVhc29uYWJsZSwgTWFya2Rvd24tZnJpZW5kbHkgc3RyaW5nIGlmIHBvc3NpYmxlLiAqLwogICAgICBmdW5jdGlvbiB0b1N0cmluZyhmaWVsZCwgc2V0dGluZyA9IERFRkFVTFRfUVVFUllfU0VUVElOR1MsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7CiAgICAgICAgICBsZXQgd3JhcHBlZCA9IHdyYXBWYWx1ZShmaWVsZCk7CiAgICAgICAgICBpZiAoIXdyYXBwZWQpCiAgICAgICAgICAgICAgcmV0dXJuIHNldHRpbmcucmVuZGVyTnVsbEFzOwogICAgICAgICAgc3dpdGNoICh3cmFwcGVkLnR5cGUpIHsKICAgICAgICAgICAgICBjYXNlICJudWxsIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldHRpbmcucmVuZGVyTnVsbEFzOwogICAgICAgICAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlOwogICAgICAgICAgICAgIGNhc2UgIm51bWJlciI6CiAgICAgICAgICAgICAgY2FzZSAiYm9vbGVhbiI6CiAgICAgICAgICAgICAgICAgIHJldHVybiAiIiArIHdyYXBwZWQudmFsdWU7CiAgICAgICAgICAgICAgY2FzZSAiaHRtbCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLm91dGVySFRNTDsKICAgICAgICAgICAgICBjYXNlICJ3aWRnZXQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5tYXJrZG93bigpOwogICAgICAgICAgICAgIGNhc2UgImxpbmsiOgogICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5tYXJrZG93bigpOwogICAgICAgICAgICAgIGNhc2UgImZ1bmN0aW9uIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuICI8ZnVuY3Rpb24+IjsKICAgICAgICAgICAgICBjYXNlICJhcnJheSI6CiAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSAiIjsKICAgICAgICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZSkKICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiWyI7CiAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3cmFwcGVkLnZhbHVlLm1hcChmID0+IHRvU3RyaW5nKGYsIHNldHRpbmcsIHRydWUpKS5qb2luKCIsICIpOwogICAgICAgICAgICAgICAgICBpZiAocmVjdXJzaXZlKQogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICJdIjsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICBjYXNlICJvYmplY3QiOgogICAgICAgICAgICAgICAgICByZXR1cm4gKCJ7ICIgKwogICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMod3JhcHBlZC52YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGUgPT4gZVswXSArICI6ICIgKyB0b1N0cmluZyhlWzFdLCBzZXR0aW5nLCB0cnVlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbigiLCAiKSArCiAgICAgICAgICAgICAgICAgICAgICAiIH0iKTsKICAgICAgICAgICAgICBjYXNlICJkYXRlIjoKICAgICAgICAgICAgICAgICAgaWYgKHdyYXBwZWQudmFsdWUuc2Vjb25kID09IDAgJiYgd3JhcHBlZC52YWx1ZS5ob3VyID09IDAgJiYgd3JhcHBlZC52YWx1ZS5taW51dGUgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUudG9Gb3JtYXQoc2V0dGluZy5kZWZhdWx0RGF0ZUZvcm1hdCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUudG9Gb3JtYXQoc2V0dGluZy5kZWZhdWx0RGF0ZVRpbWVGb3JtYXQpOwogICAgICAgICAgICAgIGNhc2UgImR1cmF0aW9uIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlck1pbmltYWxEdXJhdGlvbih3cmFwcGVkLnZhbHVlKTsKICAgICAgICAgIH0KICAgICAgfQogICAgICBWYWx1ZXMudG9TdHJpbmcgPSB0b1N0cmluZzsKICAgICAgLyoqIFdyYXAgYSBsaXRlcmFsIHZhbHVlIHNvIHlvdSBjYW4gc3dpdGNoIG9uIGl0IGVhc2lseS4gKi8KICAgICAgZnVuY3Rpb24gd3JhcFZhbHVlKHZhbCkgewogICAgICAgICAgaWYgKGlzTnVsbCh2YWwpKQogICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJudWxsIiwgdmFsdWU6IHZhbCB9OwogICAgICAgICAgZWxzZSBpZiAoaXNOdW1iZXIodmFsKSkKICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAibnVtYmVyIiwgdmFsdWU6IHZhbCB9OwogICAgICAgICAgZWxzZSBpZiAoaXNTdHJpbmcodmFsKSkKICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAic3RyaW5nIiwgdmFsdWU6IHZhbCB9OwogICAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuKHZhbCkpCiAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImJvb2xlYW4iLCB2YWx1ZTogdmFsIH07CiAgICAgICAgICBlbHNlIGlmIChpc0R1cmF0aW9uKHZhbCkpCiAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImR1cmF0aW9uIiwgdmFsdWU6IHZhbCB9OwogICAgICAgICAgZWxzZSBpZiAoaXNEYXRlKHZhbCkpCiAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImRhdGUiLCB2YWx1ZTogdmFsIH07CiAgICAgICAgICBlbHNlIGlmIChpc1dpZGdldCh2YWwpKQogICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJ3aWRnZXQiLCB2YWx1ZTogdmFsIH07CiAgICAgICAgICBlbHNlIGlmIChpc0FycmF5KHZhbCkpCiAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImFycmF5IiwgdmFsdWU6IHZhbCB9OwogICAgICAgICAgZWxzZSBpZiAoaXNMaW5rKHZhbCkpCiAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImxpbmsiLCB2YWx1ZTogdmFsIH07CiAgICAgICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHZhbCkpCiAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImZ1bmN0aW9uIiwgdmFsdWU6IHZhbCB9OwogICAgICAgICAgZWxzZSBpZiAoaXNIdG1sKHZhbCkpCiAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImh0bWwiLCB2YWx1ZTogdmFsIH07CiAgICAgICAgICBlbHNlIGlmIChpc09iamVjdCh2YWwpKQogICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJvYmplY3QiLCB2YWx1ZTogdmFsIH07CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgfQogICAgICBWYWx1ZXMud3JhcFZhbHVlID0gd3JhcFZhbHVlOwogICAgICAvKiogUmVjdXJzaXZlbHkgbWFwIGNvbXBsZXggb2JqZWN0cyBhdCB0aGUgbGVhdmVzLiAqLwogICAgICBmdW5jdGlvbiBtYXBMZWF2ZXModmFsLCBmdW5jKSB7CiAgICAgICAgICBpZiAoaXNPYmplY3QodmFsKSkgewogICAgICAgICAgICAgIGxldCByZXN1bHQgPSB7fTsKICAgICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsKSkKICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBtYXBMZWF2ZXModmFsdWUsIGZ1bmMpOwogICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHsKICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107CiAgICAgICAgICAgICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsKQogICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChtYXBMZWF2ZXModmFsdWUsIGZ1bmMpKTsKICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmModmFsKTsKICAgICAgICAgIH0KICAgICAgfQogICAgICBWYWx1ZXMubWFwTGVhdmVzID0gbWFwTGVhdmVzOwogICAgICAvKiogQ29tcGFyZSB0d28gYXJiaXRyYXJ5IEphdmFTY3JpcHQgdmFsdWVzLiBQcm9kdWNlcyBhIHRvdGFsIG9yZGVyaW5nIG92ZXIgQU5ZIHBvc3NpYmxlIGRhdGF2aWV3IHZhbHVlLiAqLwogICAgICBmdW5jdGlvbiBjb21wYXJlVmFsdWUodmFsMSwgdmFsMiwgbGlua05vcm1hbGl6ZXIpIHsKICAgICAgICAgIC8vIEhhbmRsZSB1bmRlZmluZWQvbnVsbHMgZmlyc3QuCiAgICAgICAgICBpZiAodmFsMSA9PT0gdW5kZWZpbmVkKQogICAgICAgICAgICAgIHZhbDEgPSBudWxsOwogICAgICAgICAgaWYgKHZhbDIgPT09IHVuZGVmaW5lZCkKICAgICAgICAgICAgICB2YWwyID0gbnVsbDsKICAgICAgICAgIGlmICh2YWwxID09PSBudWxsICYmIHZhbDIgPT09IG51bGwpCiAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICBlbHNlIGlmICh2YWwxID09PSBudWxsKQogICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgIGVsc2UgaWYgKHZhbDIgPT09IG51bGwpCiAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAvLyBBIG5vbi1udWxsIHZhbHVlIG5vdyB3aGljaCB3ZSBjYW4gd3JhcCAmIGNvbXBhcmUgb24uCiAgICAgICAgICBsZXQgd3JhcDEgPSB3cmFwVmFsdWUodmFsMSk7CiAgICAgICAgICBsZXQgd3JhcDIgPSB3cmFwVmFsdWUodmFsMik7CiAgICAgICAgICBpZiAod3JhcDEgPT09IHVuZGVmaW5lZCAmJiB3cmFwMiA9PT0gdW5kZWZpbmVkKQogICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgZWxzZSBpZiAod3JhcDEgPT09IHVuZGVmaW5lZCkKICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICBlbHNlIGlmICh3cmFwMiA9PT0gdW5kZWZpbmVkKQogICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgLy8gU2hvcnQtY2lyY3VpdCBvbiBkaWZmZXJlbnQgdHlwZXMgb3Igb24gcmVmZXJlbmNlIGVxdWFsaXR5LgogICAgICAgICAgaWYgKHdyYXAxLnR5cGUgIT0gd3JhcDIudHlwZSkKICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudHlwZS5sb2NhbGVDb21wYXJlKHdyYXAyLnR5cGUpOwogICAgICAgICAgaWYgKHdyYXAxLnZhbHVlID09PSB3cmFwMi52YWx1ZSkKICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgIHN3aXRjaCAod3JhcDEudHlwZSkgewogICAgICAgICAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwMS52YWx1ZS5sb2NhbGVDb21wYXJlKHdyYXAyLnZhbHVlKTsKICAgICAgICAgICAgICBjYXNlICJudW1iZXIiOgogICAgICAgICAgICAgICAgICBpZiAod3JhcDEudmFsdWUgPCB3cmFwMi52YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod3JhcDEudmFsdWUgPT0gd3JhcDIudmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgY2FzZSAibnVsbCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgIGNhc2UgImJvb2xlYW4iOgogICAgICAgICAgICAgICAgICBpZiAod3JhcDEudmFsdWUgPT0gd3JhcDIudmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXAxLnZhbHVlID8gMSA6IC0xOwogICAgICAgICAgICAgIGNhc2UgImxpbmsiOgogICAgICAgICAgICAgICAgICBsZXQgbGluazEgPSB3cmFwMS52YWx1ZTsKICAgICAgICAgICAgICAgICAgbGV0IGxpbmsyID0gd3JhcDIudmFsdWU7CiAgICAgICAgICAgICAgICAgIGxldCBub3JtYWxpemUgPSBsaW5rTm9ybWFsaXplciA/PyAoKHgpID0+IHgpOwogICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBjb21wYXJlIGJ5IGZpbGUgbmFtZSBvciBkaXNwbGF5LCBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrIGxpbmsgZXF1YWxpdHkuIENvbXBhcmUgYnkgcGF0aC4KICAgICAgICAgICAgICAgICAgbGV0IHBhdGhDb21wYXJlID0gbm9ybWFsaXplKGxpbmsxLnBhdGgpLmxvY2FsZUNvbXBhcmUobm9ybWFsaXplKGxpbmsyLnBhdGgpKTsKICAgICAgICAgICAgICAgICAgaWYgKHBhdGhDb21wYXJlICE9IDApCiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0aENvbXBhcmU7CiAgICAgICAgICAgICAgICAgIC8vIFRoZW4gY29tcGFyZSBieSB0eXBlLgogICAgICAgICAgICAgICAgICBsZXQgdHlwZUNvbXBhcmUgPSBsaW5rMS50eXBlLmxvY2FsZUNvbXBhcmUobGluazIudHlwZSk7CiAgICAgICAgICAgICAgICAgIGlmICh0eXBlQ29tcGFyZSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVDb21wYXJlOwogICAgICAgICAgICAgICAgICAvLyBUaGVuIGNvbXBhcmUgYnkgc3VicGF0aCBleGlzdGVuY2UuCiAgICAgICAgICAgICAgICAgIGlmIChsaW5rMS5zdWJwYXRoICYmICFsaW5rMi5zdWJwYXRoKQogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgIGlmICghbGluazEuc3VicGF0aCAmJiBsaW5rMi5zdWJwYXRoKQogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgICBpZiAoIWxpbmsxLnN1YnBhdGggJiYgIWxpbmsyLnN1YnBhdGgpCiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAgLy8gU2luY2UgYm90aCBoYXZlIGEgc3VicGF0aCwgY29tcGFyZSBieSBzdWJwYXRoLgogICAgICAgICAgICAgICAgICByZXR1cm4gKGxpbmsxLnN1YnBhdGggPz8gIiIpLmxvY2FsZUNvbXBhcmUobGluazIuc3VicGF0aCA/PyAiIik7CiAgICAgICAgICAgICAgY2FzZSAiZGF0ZSI6CiAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwMS52YWx1ZSA8IHdyYXAyLnZhbHVlCiAgICAgICAgICAgICAgICAgICAgICA/IC0xCiAgICAgICAgICAgICAgICAgICAgICA6IHdyYXAxLnZhbHVlLmVxdWFscyh3cmFwMi52YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICA/IDAKICAgICAgICAgICAgICAgICAgICAgICAgICA6IDE7CiAgICAgICAgICAgICAgY2FzZSAiZHVyYXRpb24iOgogICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUgPCB3cmFwMi52YWx1ZQogICAgICAgICAgICAgICAgICAgICAgPyAtMQogICAgICAgICAgICAgICAgICAgICAgOiB3cmFwMS52YWx1ZS5lcXVhbHMod3JhcDIudmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxOwogICAgICAgICAgICAgIGNhc2UgImFycmF5IjoKICAgICAgICAgICAgICAgICAgbGV0IGYxID0gd3JhcDEudmFsdWU7CiAgICAgICAgICAgICAgICAgIGxldCBmMiA9IHdyYXAyLnZhbHVlOwogICAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgTWF0aC5taW4oZjEubGVuZ3RoLCBmMi5sZW5ndGgpOyBpbmRleCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICBsZXQgY29tcCA9IGNvbXBhcmVWYWx1ZShmMVtpbmRleF0sIGYyW2luZGV4XSk7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcCAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHJldHVybiBmMS5sZW5ndGggLSBmMi5sZW5ndGg7CiAgICAgICAgICAgICAgY2FzZSAib2JqZWN0IjoKICAgICAgICAgICAgICAgICAgbGV0IG8xID0gd3JhcDEudmFsdWU7CiAgICAgICAgICAgICAgICAgIGxldCBvMiA9IHdyYXAyLnZhbHVlOwogICAgICAgICAgICAgICAgICBsZXQgazEgPSBBcnJheS5mcm9tKE9iamVjdC5rZXlzKG8xKSk7CiAgICAgICAgICAgICAgICAgIGxldCBrMiA9IEFycmF5LmZyb20oT2JqZWN0LmtleXMobzIpKTsKICAgICAgICAgICAgICAgICAgazEuc29ydCgpOwogICAgICAgICAgICAgICAgICBrMi5zb3J0KCk7CiAgICAgICAgICAgICAgICAgIGxldCBrZXlDb21wYXJlID0gY29tcGFyZVZhbHVlKGsxLCBrMik7CiAgICAgICAgICAgICAgICAgIGlmIChrZXlDb21wYXJlICE9IDApCiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5Q29tcGFyZTsKICAgICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IG9mIGsxKSB7CiAgICAgICAgICAgICAgICAgICAgICBsZXQgY29tcCA9IGNvbXBhcmVWYWx1ZShvMVtrZXldLCBvMltrZXldKTsKICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXA7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgY2FzZSAid2lkZ2V0IjoKICAgICAgICAgICAgICBjYXNlICJodG1sIjoKICAgICAgICAgICAgICBjYXNlICJmdW5jdGlvbiI6CiAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgfQogICAgICB9CiAgICAgIFZhbHVlcy5jb21wYXJlVmFsdWUgPSBjb21wYXJlVmFsdWU7CiAgICAgIC8qKiBGaW5kIHRoZSBjb3JyZXNwb25kaW5nIERhdGF2aWV3IHR5cGUgZm9yIGFuIGFyYml0cmFyeSB2YWx1ZS4gKi8KICAgICAgZnVuY3Rpb24gdHlwZU9mKHZhbCkgewogICAgICAgICAgcmV0dXJuIHdyYXBWYWx1ZSh2YWwpPy50eXBlOwogICAgICB9CiAgICAgIFZhbHVlcy50eXBlT2YgPSB0eXBlT2Y7CiAgICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzICJ0cnV0aHkiIChpLmUuLCBpcyBub24tbnVsbCBhbmQgaGFzIGRhdGEgaW4gaXQpLiAqLwogICAgICBmdW5jdGlvbiBpc1RydXRoeShmaWVsZCkgewogICAgICAgICAgbGV0IHdyYXBwZWQgPSB3cmFwVmFsdWUoZmllbGQpOwogICAgICAgICAgaWYgKCF3cmFwcGVkKQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIHN3aXRjaCAod3JhcHBlZC50eXBlKSB7CiAgICAgICAgICAgICAgY2FzZSAibnVtYmVyIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUgIT0gMDsKICAgICAgICAgICAgICBjYXNlICJzdHJpbmciOgogICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5sZW5ndGggPiAwOwogICAgICAgICAgICAgIGNhc2UgImJvb2xlYW4iOgogICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZTsKICAgICAgICAgICAgICBjYXNlICJsaW5rIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuICEhd3JhcHBlZC52YWx1ZS5wYXRoOwogICAgICAgICAgICAgIGNhc2UgImRhdGUiOgogICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS50b01pbGxpcygpICE9IDA7CiAgICAgICAgICAgICAgY2FzZSAiZHVyYXRpb24iOgogICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5hcygic2Vjb25kcyIpICE9IDA7CiAgICAgICAgICAgICAgY2FzZSAib2JqZWN0IjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHdyYXBwZWQudmFsdWUpLmxlbmd0aCA+IDA7CiAgICAgICAgICAgICAgY2FzZSAiYXJyYXkiOgogICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5sZW5ndGggPiAwOwogICAgICAgICAgICAgIGNhc2UgIm51bGwiOgogICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgY2FzZSAiaHRtbCI6CiAgICAgICAgICAgICAgY2FzZSAid2lkZ2V0IjoKICAgICAgICAgICAgICBjYXNlICJmdW5jdGlvbiI6CiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICB9CiAgICAgIFZhbHVlcy5pc1RydXRoeSA9IGlzVHJ1dGh5OwogICAgICAvKiogRGVlcCBjb3B5IGEgZmllbGQuICovCiAgICAgIGZ1bmN0aW9uIGRlZXBDb3B5KGZpZWxkKSB7CiAgICAgICAgICBpZiAoZmllbGQgPT09IG51bGwgfHwgZmllbGQgPT09IHVuZGVmaW5lZCkKICAgICAgICAgICAgICByZXR1cm4gZmllbGQ7CiAgICAgICAgICBpZiAoVmFsdWVzLmlzQXJyYXkoZmllbGQpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIFtdLmNvbmNhdChmaWVsZC5tYXAodiA9PiBkZWVwQ29weSh2KSkpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoVmFsdWVzLmlzT2JqZWN0KGZpZWxkKSkgewogICAgICAgICAgICAgIGxldCByZXN1bHQgPSB7fTsKICAgICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGQpKQogICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IGRlZXBDb3B5KHZhbHVlKTsKICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkOwogICAgICAgICAgfQogICAgICB9CiAgICAgIFZhbHVlcy5kZWVwQ29weSA9IGRlZXBDb3B5OwogICAgICBmdW5jdGlvbiBpc1N0cmluZyh2YWwpIHsKICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09ICJzdHJpbmciOwogICAgICB9CiAgICAgIFZhbHVlcy5pc1N0cmluZyA9IGlzU3RyaW5nOwogICAgICBmdW5jdGlvbiBpc051bWJlcih2YWwpIHsKICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09ICJudW1iZXIiOwogICAgICB9CiAgICAgIFZhbHVlcy5pc051bWJlciA9IGlzTnVtYmVyOwogICAgICBmdW5jdGlvbiBpc0RhdGUodmFsKSB7CiAgICAgICAgICByZXR1cm4gdmFsIGluc3RhbmNlb2YgRGF0ZVRpbWU7CiAgICAgIH0KICAgICAgVmFsdWVzLmlzRGF0ZSA9IGlzRGF0ZTsKICAgICAgZnVuY3Rpb24gaXNEdXJhdGlvbih2YWwpIHsKICAgICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBEdXJhdGlvbjsKICAgICAgfQogICAgICBWYWx1ZXMuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247CiAgICAgIGZ1bmN0aW9uIGlzTnVsbCh2YWwpIHsKICAgICAgICAgIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQ7CiAgICAgIH0KICAgICAgVmFsdWVzLmlzTnVsbCA9IGlzTnVsbDsKICAgICAgZnVuY3Rpb24gaXNBcnJheSh2YWwpIHsKICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbCk7CiAgICAgIH0KICAgICAgVmFsdWVzLmlzQXJyYXkgPSBpc0FycmF5OwogICAgICBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsKSB7CiAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gImJvb2xlYW4iOwogICAgICB9CiAgICAgIFZhbHVlcy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47CiAgICAgIGZ1bmN0aW9uIGlzTGluayh2YWwpIHsKICAgICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBMaW5rOwogICAgICB9CiAgICAgIFZhbHVlcy5pc0xpbmsgPSBpc0xpbms7CiAgICAgIGZ1bmN0aW9uIGlzV2lkZ2V0KHZhbCkgewogICAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIFdpZGdldDsKICAgICAgfQogICAgICBWYWx1ZXMuaXNXaWRnZXQgPSBpc1dpZGdldDsKICAgICAgZnVuY3Rpb24gaXNIdG1sKHZhbCkgewogICAgICAgICAgaWYgKHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgICByZXR1cm4gdmFsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgVmFsdWVzLmlzSHRtbCA9IGlzSHRtbDsKICAgICAgLyoqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gb2JqZWN0IChhbmQgbm90IGFueSBvdGhlciBkYXRhdmlldy1yZWNvZ25pemVkIG9iamVjdC1saWtlIHR5cGUpLiAqLwogICAgICBmdW5jdGlvbiBpc09iamVjdCh2YWwpIHsKICAgICAgICAgIHJldHVybiAodHlwZW9mIHZhbCA9PSAib2JqZWN0IiAmJgogICAgICAgICAgICAgICFpc0h0bWwodmFsKSAmJgogICAgICAgICAgICAgICFpc1dpZGdldCh2YWwpICYmCiAgICAgICAgICAgICAgIWlzQXJyYXkodmFsKSAmJgogICAgICAgICAgICAgICFpc0R1cmF0aW9uKHZhbCkgJiYKICAgICAgICAgICAgICAhaXNEYXRlKHZhbCkgJiYKICAgICAgICAgICAgICAhaXNMaW5rKHZhbCkgJiYKICAgICAgICAgICAgICB2YWwgIT09IHVuZGVmaW5lZCAmJgogICAgICAgICAgICAgICFpc051bGwodmFsKSk7CiAgICAgIH0KICAgICAgVmFsdWVzLmlzT2JqZWN0ID0gaXNPYmplY3Q7CiAgICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7CiAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PSAiZnVuY3Rpb24iOwogICAgICB9CiAgICAgIFZhbHVlcy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjsKICB9KShWYWx1ZXMgfHwgKFZhbHVlcyA9IHt9KSk7CiAgLy8vLy8vLy8vLy8vLy8vCiAgLy8gR3JvdXBpbmdzIC8vCiAgLy8vLy8vLy8vLy8vLy8vCiAgdmFyIEdyb3VwaW5nczsKICAoZnVuY3Rpb24gKEdyb3VwaW5ncykgewogICAgICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gZ3JvdXAgZW50cnkgaXMgYSBzdGFuZGFsb25lIHZhbHVlLCBvciBhIGdyb3VwaW5nIG9mIHN1Yi1lbnRyaWVzLiAqLwogICAgICBmdW5jdGlvbiBpc0VsZW1lbnRHcm91cChlbnRyeSkgewogICAgICAgICAgcmV0dXJuIFZhbHVlcy5pc09iamVjdChlbnRyeSkgJiYgT2JqZWN0LmtleXMoZW50cnkpLmxlbmd0aCA9PSAyICYmICJrZXkiIGluIGVudHJ5ICYmICJyb3dzIiBpbiBlbnRyeTsKICAgICAgfQogICAgICBHcm91cGluZ3MuaXNFbGVtZW50R3JvdXAgPSBpc0VsZW1lbnRHcm91cDsKICAgICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGFycmF5IGlzIGEgZ3JvdXBpbmcgYXJyYXkuICovCiAgICAgIGZ1bmN0aW9uIGlzR3JvdXBpbmcoZW50cnkpIHsKICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgZW50cnkpCiAgICAgICAgICAgICAgaWYgKCFpc0VsZW1lbnRHcm91cChlbGVtZW50KSkKICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgR3JvdXBpbmdzLmlzR3JvdXBpbmcgPSBpc0dyb3VwaW5nOwogICAgICAvKiogQ291bnQgdGhlIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIHJlY3Vyc2l2ZSBncm91cGluZy4gKi8KICAgICAgZnVuY3Rpb24gY291bnQoZWxlbWVudHMpIHsKICAgICAgICAgIGlmIChpc0dyb3VwaW5nKGVsZW1lbnRzKSkgewogICAgICAgICAgICAgIGxldCByZXN1bHQgPSAwOwogICAgICAgICAgICAgIGZvciAobGV0IHN1Ymdyb3VwIG9mIGVsZW1lbnRzKQogICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY291bnQoc3ViZ3JvdXAucm93cyk7CiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBlbGVtZW50cy5sZW5ndGg7CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgR3JvdXBpbmdzLmNvdW50ID0gY291bnQ7CiAgfSkoR3JvdXBpbmdzIHx8IChHcm91cGluZ3MgPSB7fSkpOwogIC8vLy8vLy8vLy8KICAvLyBMSU5LIC8vCiAgLy8vLy8vLy8vLwogIC8qKiBUaGUgT2JzaWRpYW4gJ2xpbmsnLCB1c2VkIGZvciB1bmlxdWVseSBkZXNjcmliaW5nIGEgZmlsZSwgaGVhZGVyLCBvciBibG9jay4gKi8KICBjbGFzcyBMaW5rIHsKICAgICAgLyoqIFRoZSBmaWxlIHBhdGggdGhpcyBsaW5rIHBvaW50cyB0by4gKi8KICAgICAgcGF0aDsKICAgICAgLyoqIFRoZSBkaXNwbGF5IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBsaW5rLiAqLwogICAgICBkaXNwbGF5OwogICAgICAvKiogVGhlIGJsb2NrIElEIG9yIGhlYWRlciB0aGlzIGxpbmsgcG9pbnRzIHRvIHdpdGhpbiBhIGZpbGUsIGlmIHJlbGV2YW50LiAqLwogICAgICBzdWJwYXRoOwogICAgICAvKiogSXMgdGhpcyBsaW5rIGFuIGVtYmVkZGVkIGxpbmsgKCEpPyAqLwogICAgICBlbWJlZDsKICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoaXMgbGluaywgd2hpY2ggZGV0ZXJtaW5lcyB3aGF0ICdzdWJwYXRoJyByZWZlcnMgdG8sIGlmIGFueXRoaW5nLiAqLwogICAgICB0eXBlOwogICAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUuICovCiAgICAgIHN0YXRpYyBmaWxlKHBhdGgsIGVtYmVkID0gZmFsc2UsIGRpc3BsYXkpIHsKICAgICAgICAgIHJldHVybiBuZXcgTGluayh7CiAgICAgICAgICAgICAgcGF0aCwKICAgICAgICAgICAgICBlbWJlZCwKICAgICAgICAgICAgICBkaXNwbGF5LAogICAgICAgICAgICAgIHN1YnBhdGg6IHVuZGVmaW5lZCwKICAgICAgICAgICAgICB0eXBlOiAiZmlsZSIsCiAgICAgICAgICB9KTsKICAgICAgfQogICAgICBzdGF0aWMgaW5mZXIobGlua3BhdGgsIGVtYmVkID0gZmFsc2UsIGRpc3BsYXkpIHsKICAgICAgICAgIGlmIChsaW5rcGF0aC5pbmNsdWRlcygiI14iKSkgewogICAgICAgICAgICAgIGxldCBzcGxpdCA9IGxpbmtwYXRoLnNwbGl0KCIjXiIpOwogICAgICAgICAgICAgIHJldHVybiBMaW5rLmJsb2NrKHNwbGl0WzBdLCBzcGxpdFsxXSwgZW1iZWQsIGRpc3BsYXkpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAobGlua3BhdGguaW5jbHVkZXMoIiMiKSkgewogICAgICAgICAgICAgIGxldCBzcGxpdCA9IGxpbmtwYXRoLnNwbGl0KCIjIik7CiAgICAgICAgICAgICAgcmV0dXJuIExpbmsuaGVhZGVyKHNwbGl0WzBdLCBzcGxpdFsxXSwgZW1iZWQsIGRpc3BsYXkpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHJldHVybiBMaW5rLmZpbGUobGlua3BhdGgsIGVtYmVkLCBkaXNwbGF5KTsKICAgICAgfQogICAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUgYW5kIGhlYWRlciBpbiB0aGF0IGZpbGUuICovCiAgICAgIHN0YXRpYyBoZWFkZXIocGF0aCwgaGVhZGVyLCBlbWJlZCwgZGlzcGxheSkgewogICAgICAgICAgLy8gSGVhZGVycyBuZWVkIHRvIGJlIG5vcm1hbGl6ZWQgdG8gYWxwaGEtbnVtZXJpYyAmIHdpdGggZXh0cmEgc3BhY2luZyByZW1vdmVkLgogICAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHsKICAgICAgICAgICAgICBwYXRoLAogICAgICAgICAgICAgIGVtYmVkLAogICAgICAgICAgICAgIGRpc3BsYXksCiAgICAgICAgICAgICAgc3VicGF0aDogbm9ybWFsaXplSGVhZGVyRm9yTGluayhoZWFkZXIpLAogICAgICAgICAgICAgIHR5cGU6ICJoZWFkZXIiLAogICAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqIENyZWF0ZSBhIGxpbmsgdG8gYSBzcGVjaWZpYyBmaWxlIGFuZCBibG9jayBpbiB0aGF0IGZpbGUuICovCiAgICAgIHN0YXRpYyBibG9jayhwYXRoLCBibG9ja0lkLCBlbWJlZCwgZGlzcGxheSkgewogICAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHsKICAgICAgICAgICAgICBwYXRoLAogICAgICAgICAgICAgIGVtYmVkLAogICAgICAgICAgICAgIGRpc3BsYXksCiAgICAgICAgICAgICAgc3VicGF0aDogYmxvY2tJZCwKICAgICAgICAgICAgICB0eXBlOiAiYmxvY2siLAogICAgICAgICAgfSk7CiAgICAgIH0KICAgICAgc3RhdGljIGZyb21PYmplY3Qob2JqZWN0KSB7CiAgICAgICAgICByZXR1cm4gbmV3IExpbmsob2JqZWN0KTsKICAgICAgfQogICAgICBjb25zdHJ1Y3RvcihmaWVsZHMpIHsKICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgZmllbGRzKTsKICAgICAgfQogICAgICAvKiogQ2hlY2tzIGZvciBsaW5rIGVxdWFsaXR5IChpLmUuLCB0aGF0IHRoZSBsaW5rcyBhcmUgcG9pbnRpbmcgdG8gdGhlIHNhbWUgZXhhY3QgbG9jYXRpb24pLiAqLwogICAgICBlcXVhbHMob3RoZXIpIHsKICAgICAgICAgIGlmIChvdGhlciA9PSB1bmRlZmluZWQgfHwgb3RoZXIgPT0gbnVsbCkKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICByZXR1cm4gdGhpcy5wYXRoID09IG90aGVyLnBhdGggJiYgdGhpcy50eXBlID09IG90aGVyLnR5cGUgJiYgdGhpcy5zdWJwYXRoID09IG90aGVyLnN1YnBhdGg7CiAgICAgIH0KICAgICAgLyoqIENvbnZlcnQgdGhpcyBsaW5rIHRvIGl0J3MgbWFya2Rvd24gcmVwcmVzZW50YXRpb24uICovCiAgICAgIHRvU3RyaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMubWFya2Rvd24oKTsKICAgICAgfQogICAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gYSByYXcgb2JqZWN0IHdoaWNoIGlzIHNlcmlhbGl6YXRpb24tZnJpZW5kbHkuICovCiAgICAgIHRvT2JqZWN0KCkgewogICAgICAgICAgcmV0dXJuIHsgcGF0aDogdGhpcy5wYXRoLCB0eXBlOiB0aGlzLnR5cGUsIHN1YnBhdGg6IHRoaXMuc3VicGF0aCwgZGlzcGxheTogdGhpcy5kaXNwbGF5LCBlbWJlZDogdGhpcy5lbWJlZCB9OwogICAgICB9CiAgICAgIC8qKiBVcGRhdGUgdGhpcyBsaW5rIHdpdGggYSBuZXcgcGF0aC4gKi8KICAgICAgLy9AdHMtaWdub3JlOyBlcnJvciBhcHBlYXJlZCBhZnRlciB1cGRhdGluZyBPYnNpZGlhbiB0byAwLjE1LjQ7IGl0IGFsc28gdXBkYXRlZCBvdGhlciBwYWNrYWdlcyBidXQgZGlkbid0IHNheSB3aGljaAogICAgICB3aXRoUGF0aChwYXRoKSB7CiAgICAgICAgICByZXR1cm4gbmV3IExpbmsoT2JqZWN0LmFzc2lnbih7fSwgdGhpcywgeyBwYXRoIH0pKTsKICAgICAgfQogICAgICAvKiogUmV0dXJuIGEgbmV3IGxpbmsgd2hpY2ggcG9pbnRzIHRvIHRoZSBzYW1lIGxvY2F0aW9uIGJ1dCB3aXRoIGEgbmV3IGRpc3BsYXkgdmFsdWUuICovCiAgICAgIHdpdGhEaXNwbGF5KGRpc3BsYXkpIHsKICAgICAgICAgIHJldHVybiBuZXcgTGluayhPYmplY3QuYXNzaWduKHt9LCB0aGlzLCB7IGRpc3BsYXkgfSkpOwogICAgICB9CiAgICAgIC8qKiBDb252ZXJ0IGEgZmlsZSBsaW5rIGludG8gYSBsaW5rIHRvIGEgc3BlY2lmaWMgaGVhZGVyLiAqLwogICAgICB3aXRoSGVhZGVyKGhlYWRlcikgewogICAgICAgICAgcmV0dXJuIExpbmsuaGVhZGVyKHRoaXMucGF0aCwgaGVhZGVyLCB0aGlzLmVtYmVkLCB0aGlzLmRpc3BsYXkpOwogICAgICB9CiAgICAgIC8qKiBDb252ZXJ0IGFueSBsaW5rIGludG8gYSBsaW5rIHRvIGl0cyBmaWxlLiAqLwogICAgICB0b0ZpbGUoKSB7CiAgICAgICAgICByZXR1cm4gTGluay5maWxlKHRoaXMucGF0aCwgdGhpcy5lbWJlZCwgdGhpcy5kaXNwbGF5KTsKICAgICAgfQogICAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgaW50byBhbiBlbWJlZGRlZCBsaW5rLiAqLwogICAgICB0b0VtYmVkKCkgewogICAgICAgICAgaWYgKHRoaXMuZW1iZWQpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIGxldCBsaW5rID0gbmV3IExpbmsodGhpcyk7CiAgICAgICAgICAgICAgbGluay5lbWJlZCA9IHRydWU7CiAgICAgICAgICAgICAgcmV0dXJuIGxpbms7CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqIENvbnZlcnQgdGhpcyBsaW5rIGludG8gYSBub24tZW1iZWRkZWQgbGluay4gKi8KICAgICAgZnJvbUVtYmVkKCkgewogICAgICAgICAgaWYgKCF0aGlzLmVtYmVkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICBsZXQgbGluayA9IG5ldyBMaW5rKHRoaXMpOwogICAgICAgICAgICAgIGxpbmsuZW1iZWQgPSBmYWxzZTsKICAgICAgICAgICAgICByZXR1cm4gbGluazsKICAgICAgICAgIH0KICAgICAgfQogICAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gbWFya2Rvd24gc28gaXQgY2FuIGJlIHJlbmRlcmVkLiAqLwogICAgICBtYXJrZG93bigpIHsKICAgICAgICAgIGxldCByZXN1bHQgPSAodGhpcy5lbWJlZCA/ICIhIiA6ICIiKSArICJbWyIgKyB0aGlzLm9ic2lkaWFuTGluaygpOwogICAgICAgICAgaWYgKHRoaXMuZGlzcGxheSkgewogICAgICAgICAgICAgIHJlc3VsdCArPSAifCIgKyB0aGlzLmRpc3BsYXk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICByZXN1bHQgKz0gInwiICsgZ2V0RmlsZVRpdGxlKHRoaXMucGF0aCk7CiAgICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAiaGVhZGVyIiB8fCB0aGlzLnR5cGUgPT0gImJsb2NrIikKICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICIgPiAiICsgdGhpcy5zdWJwYXRoOwogICAgICAgICAgfQogICAgICAgICAgcmVzdWx0ICs9ICJdXSI7CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIC8qKiBDb252ZXJ0IHRoZSBpbm5lciBwYXJ0IG9mIHRoZSBsaW5rIHRvIHNvbWV0aGluZyB0aGF0IE9ic2lkaWFuIGNhbiBvcGVuIC8gdW5kZXJzdGFuZC4gKi8KICAgICAgb2JzaWRpYW5MaW5rKCkgewogICAgICAgICAgY29uc3QgZXNjYXBlZCA9IHRoaXMucGF0aC5yZXBsYWNlQWxsKCJ8IiwgIlxcfCIpOwogICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAiaGVhZGVyIikKICAgICAgICAgICAgICByZXR1cm4gZXNjYXBlZCArICIjIiArIHRoaXMuc3VicGF0aD8ucmVwbGFjZUFsbCgifCIsICJcXHwiKTsKICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gImJsb2NrIikKICAgICAgICAgICAgICByZXR1cm4gZXNjYXBlZCArICIjXiIgKyB0aGlzLnN1YnBhdGg/LnJlcGxhY2VBbGwoInwiLCAiXFx8Iik7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgcmV0dXJuIGVzY2FwZWQ7CiAgICAgIH0KICAgICAgLyoqIFRoZSBzdHJpcHBlZCBuYW1lIG9mIHRoZSBmaWxlIHRoaXMgbGluayBwb2ludHMgdG8uICovCiAgICAgIGZpbGVOYW1lKCkgewogICAgICAgICAgcmV0dXJuIGdldEZpbGVUaXRsZSh0aGlzLnBhdGgpLnJlcGxhY2UoIi5tZCIsICIiKTsKICAgICAgfQogIH0KICAvLy8vLy8vLy8vLy8vLy8vLwogIC8vIFdJREdFVCBCQVNFIC8vCiAgLy8vLy8vLy8vLy8vLy8vLy8KICAvKioKICAgKiBBIHRyaXZpYWwgYmFzZSBjbGFzcyB3aGljaCBqdXN0IGRlZmluZXMgdGhlICckd2lkZ2V0JyBpZGVudGlmaWVyIHR5cGUuIFN1YnR5cGVzIG9mCiAgICogd2lkZ2V0IGFyZSByZXNwb25zaWJsZSBmb3IgYWRkaW5nIHdoYXRldmVyIG1ldGFkYXRhIGlzIHJlbGV2YW50LiBJZiB5b3Ugd2FudCB5b3VyIHdpZGdldAogICAqIHRvIGhhdmUgcmVuZGVyaW5nIGZ1bmN0aW9uYWxpdHkgKHdoaWNoIHlvdSBwcm9iYWJseSBkbyksIHlvdSBzaG91bGQgZXh0ZW5kIGBSZW5kZXJXaWRnZXRgLgogICAqLwogIGNsYXNzIFdpZGdldCB7CiAgICAgICR3aWRnZXQ7CiAgICAgIGNvbnN0cnVjdG9yKCR3aWRnZXQpIHsKICAgICAgICAgIHRoaXMuJHdpZGdldCA9ICR3aWRnZXQ7CiAgICAgIH0KICB9CiAgLyoqIEEgdHJpdmlhbCB3aWRnZXQgd2hpY2ggcmVuZGVycyBhIChrZXksIHZhbHVlKSBwYWlyLCBhbmQgYWxsb3dzIGFjY2Vzc2luZyB0aGUga2V5IGFuZCB2YWx1ZS4gKi8KICBjbGFzcyBMaXN0UGFpcldpZGdldCBleHRlbmRzIFdpZGdldCB7CiAgICAgIGtleTsKICAgICAgdmFsdWU7CiAgICAgIGNvbnN0cnVjdG9yKGtleSwgdmFsdWUpIHsKICAgICAgICAgIHN1cGVyKCJkYXRhdmlldzpsaXN0LXBhaXIiKTsKICAgICAgICAgIHRoaXMua2V5ID0ga2V5OwogICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogICAgICB9CiAgICAgIG1hcmtkb3duKCkgewogICAgICAgICAgcmV0dXJuIGAke1ZhbHVlcy50b1N0cmluZyh0aGlzLmtleSl9OiAke1ZhbHVlcy50b1N0cmluZyh0aGlzLnZhbHVlKX1gOwogICAgICB9CiAgfQogIC8qKiBBIHNpbXBsZSB3aWRnZXQgd2hpY2ggcmVuZGVycyBhbiBleHRlcm5hbCBsaW5rLiAqLwogIGNsYXNzIEV4dGVybmFsTGlua1dpZGdldCBleHRlbmRzIFdpZGdldCB7CiAgICAgIHVybDsKICAgICAgZGlzcGxheTsKICAgICAgY29uc3RydWN0b3IodXJsLCBkaXNwbGF5KSB7CiAgICAgICAgICBzdXBlcigiZGF0YXZpZXc6ZXh0ZXJuYWwtbGluayIpOwogICAgICAgICAgdGhpcy51cmwgPSB1cmw7CiAgICAgICAgICB0aGlzLmRpc3BsYXkgPSBkaXNwbGF5OwogICAgICB9CiAgICAgIG1hcmtkb3duKCkgewogICAgICAgICAgcmV0dXJuIGBbJHt0aGlzLmRpc3BsYXkgPz8gdGhpcy51cmx9XSgke3RoaXMudXJsfSlgOwogICAgICB9CiAgfQogIHZhciBXaWRnZXRzOwogIChmdW5jdGlvbiAoV2lkZ2V0cykgewogICAgICAvKiogQ3JlYXRlIGEgbGlzdCBwYWlyIHdpZGdldCBtYXRjaGluZyB0aGUgZ2l2ZW4ga2V5IGFuZCB2YWx1ZS4gKi8KICAgICAgZnVuY3Rpb24gbGlzdFBhaXIoa2V5LCB2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIG5ldyBMaXN0UGFpcldpZGdldChrZXksIHZhbHVlKTsKICAgICAgfQogICAgICBXaWRnZXRzLmxpc3RQYWlyID0gbGlzdFBhaXI7CiAgICAgIC8qKiBDcmVhdGUgYW4gZXh0ZXJuYWwgbGluayB3aWRnZXQgd2hpY2ggcmVuZGVycyBhbiBleHRlcm5hbCBPYnNpZGlhbiBsaW5rLiAqLwogICAgICBmdW5jdGlvbiBleHRlcm5hbExpbmsodXJsLCBkaXNwbGF5KSB7CiAgICAgICAgICByZXR1cm4gbmV3IEV4dGVybmFsTGlua1dpZGdldCh1cmwsIGRpc3BsYXkpOwogICAgICB9CiAgICAgIFdpZGdldHMuZXh0ZXJuYWxMaW5rID0gZXh0ZXJuYWxMaW5rOwogICAgICAvKiogQ2hlY2tzIGlmIHRoZSBnaXZlbiB3aWRnZXQgaXMgYSBsaXN0IHBhaXIgd2lkZ2V0LiAqLwogICAgICBmdW5jdGlvbiBpc0xpc3RQYWlyKHdpZGdldCkgewogICAgICAgICAgcmV0dXJuIHdpZGdldC4kd2lkZ2V0ID09PSAiZGF0YXZpZXc6bGlzdC1wYWlyIjsKICAgICAgfQogICAgICBXaWRnZXRzLmlzTGlzdFBhaXIgPSBpc0xpc3RQYWlyOwogICAgICBmdW5jdGlvbiBpc0V4dGVybmFsTGluayh3aWRnZXQpIHsKICAgICAgICAgIHJldHVybiB3aWRnZXQuJHdpZGdldCA9PT0gImRhdGF2aWV3OmV4dGVybmFsLWxpbmsiOwogICAgICB9CiAgICAgIFdpZGdldHMuaXNFeHRlcm5hbExpbmsgPSBpc0V4dGVybmFsTGluazsKICAgICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHdpZGdldCBpcyBhbnkga2luZCBvZiBidWlsdC1pbiB3aWRnZXQgd2l0aCBzcGVjaWFsIHJlbmRlcmluZyBoYW5kbGluZy4gKi8KICAgICAgZnVuY3Rpb24gaXNCdWlsdGluKHdpZGdldCkgewogICAgICAgICAgcmV0dXJuIGlzTGlzdFBhaXIod2lkZ2V0KSB8fCBpc0V4dGVybmFsTGluayh3aWRnZXQpOwogICAgICB9CiAgICAgIFdpZGdldHMuaXNCdWlsdGluID0gaXNCdWlsdGluOwogIH0pKFdpZGdldHMgfHwgKFdpZGdldHMgPSB7fSkpOwoKICAvKiogVXRpbGl0eSBtZXRob2RzIGZvciBjcmVhdGluZyAmIGNvbXBhcmluZyBmaWVsZHMuICovCiAgdmFyIEZpZWxkczsKICAoZnVuY3Rpb24gKEZpZWxkcykgewogICAgICBmdW5jdGlvbiB2YXJpYWJsZShuYW1lKSB7CiAgICAgICAgICByZXR1cm4geyB0eXBlOiAidmFyaWFibGUiLCBuYW1lIH07CiAgICAgIH0KICAgICAgRmllbGRzLnZhcmlhYmxlID0gdmFyaWFibGU7CiAgICAgIGZ1bmN0aW9uIGxpdGVyYWwodmFsdWUpIHsKICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJsaXRlcmFsIiwgdmFsdWUgfTsKICAgICAgfQogICAgICBGaWVsZHMubGl0ZXJhbCA9IGxpdGVyYWw7CiAgICAgIGZ1bmN0aW9uIGJpbmFyeU9wKGxlZnQsIG9wLCByaWdodCkgewogICAgICAgICAgcmV0dXJuIHsgdHlwZTogImJpbmFyeW9wIiwgbGVmdCwgb3AsIHJpZ2h0IH07CiAgICAgIH0KICAgICAgRmllbGRzLmJpbmFyeU9wID0gYmluYXJ5T3A7CiAgICAgIGZ1bmN0aW9uIGluZGV4KG9iaiwgaW5kZXgpIHsKICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJpbmRleCIsIG9iamVjdDogb2JqLCBpbmRleCB9OwogICAgICB9CiAgICAgIEZpZWxkcy5pbmRleCA9IGluZGV4OwogICAgICAvKiogQ29udmVydHMgYSBzdHJpbmcgaW4gZG90LW5vdGF0aW9uLWZvcm1hdCBpbnRvIGEgdmFyaWFibGUgd2hpY2ggaW5kZXhlcy4gKi8KICAgICAgZnVuY3Rpb24gaW5kZXhWYXJpYWJsZShuYW1lKSB7CiAgICAgICAgICBsZXQgcGFydHMgPSBuYW1lLnNwbGl0KCIuIik7CiAgICAgICAgICBsZXQgcmVzdWx0ID0gRmllbGRzLnZhcmlhYmxlKHBhcnRzWzBdKTsKICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBwYXJ0cy5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgICAgICAgICByZXN1bHQgPSBGaWVsZHMuaW5kZXgocmVzdWx0LCBGaWVsZHMubGl0ZXJhbChwYXJ0c1tpbmRleF0pKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgRmllbGRzLmluZGV4VmFyaWFibGUgPSBpbmRleFZhcmlhYmxlOwogICAgICBmdW5jdGlvbiBsYW1iZGEoYXJncywgdmFsdWUpIHsKICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJsYW1iZGEiLCBhcmd1bWVudHM6IGFyZ3MsIHZhbHVlIH07CiAgICAgIH0KICAgICAgRmllbGRzLmxhbWJkYSA9IGxhbWJkYTsKICAgICAgZnVuY3Rpb24gZnVuYyhmdW5jLCBhcmdzKSB7CiAgICAgICAgICByZXR1cm4geyB0eXBlOiAiZnVuY3Rpb24iLCBmdW5jLCBhcmd1bWVudHM6IGFyZ3MgfTsKICAgICAgfQogICAgICBGaWVsZHMuZnVuYyA9IGZ1bmM7CiAgICAgIGZ1bmN0aW9uIGxpc3QodmFsdWVzKSB7CiAgICAgICAgICByZXR1cm4geyB0eXBlOiAibGlzdCIsIHZhbHVlcyB9OwogICAgICB9CiAgICAgIEZpZWxkcy5saXN0ID0gbGlzdDsKICAgICAgZnVuY3Rpb24gb2JqZWN0KHZhbHVlcykgewogICAgICAgICAgcmV0dXJuIHsgdHlwZTogIm9iamVjdCIsIHZhbHVlcyB9OwogICAgICB9CiAgICAgIEZpZWxkcy5vYmplY3QgPSBvYmplY3Q7CiAgICAgIGZ1bmN0aW9uIG5lZ2F0ZShjaGlsZCkgewogICAgICAgICAgcmV0dXJuIHsgdHlwZTogIm5lZ2F0ZWQiLCBjaGlsZCB9OwogICAgICB9CiAgICAgIEZpZWxkcy5uZWdhdGUgPSBuZWdhdGU7CiAgICAgIGZ1bmN0aW9uIGlzQ29tcGFyZU9wKG9wKSB7CiAgICAgICAgICByZXR1cm4gb3AgPT0gIjw9IiB8fCBvcCA9PSAiPCIgfHwgb3AgPT0gIj4iIHx8IG9wID09ICI+PSIgfHwgb3AgPT0gIiE9IiB8fCBvcCA9PSAiPSI7CiAgICAgIH0KICAgICAgRmllbGRzLmlzQ29tcGFyZU9wID0gaXNDb21wYXJlT3A7CiAgICAgIEZpZWxkcy5OVUxMID0gRmllbGRzLmxpdGVyYWwobnVsbCk7CiAgfSkoRmllbGRzIHx8IChGaWVsZHMgPSB7fSkpOwoKICAvKiogQVNUIGltcGxlbWVudGF0aW9uIGZvciBxdWVyaWVzIG92ZXIgZGF0YSBzb3VyY2VzLiAqLwogIC8qKiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyBzb3VyY2VzLiAqLwogIHZhciBTb3VyY2VzOwogIChmdW5jdGlvbiAoU291cmNlcykgewogICAgICAvKiogQ3JlYXRlIGEgc291cmNlIHdoaWNoIHNlYXJjaGVzIGZyb20gYSB0YWcuICovCiAgICAgIGZ1bmN0aW9uIHRhZyh0YWcpIHsKICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJ0YWciLCB0YWcgfTsKICAgICAgfQogICAgICBTb3VyY2VzLnRhZyA9IHRhZzsKICAgICAgLyoqIENyZWF0ZSBhIHNvdXJjZSB3aGljaCBmZXRjaGVzIGZyb20gYSBDU1YgZmlsZS4gKi8KICAgICAgZnVuY3Rpb24gY3N2KHBhdGgpIHsKICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJjc3YiLCBwYXRoIH07CiAgICAgIH0KICAgICAgU291cmNlcy5jc3YgPSBjc3Y7CiAgICAgIC8qKiBDcmVhdGUgYSBzb3VyY2Ugd2hpY2ggc2VhcmNoZXMgZm9yIGZpbGVzIHVuZGVyIGEgZm9sZGVyIHByZWZpeC4gKi8KICAgICAgZnVuY3Rpb24gZm9sZGVyKHByZWZpeCkgewogICAgICAgICAgcmV0dXJuIHsgdHlwZTogImZvbGRlciIsIGZvbGRlcjogcHJlZml4IH07CiAgICAgIH0KICAgICAgU291cmNlcy5mb2xkZXIgPSBmb2xkZXI7CiAgICAgIC8qKiBDcmVhdGUgYSBzb3VyY2Ugd2hpY2ggc2VhcmNoZXMgZm9yIGZpbGVzIHdoaWNoIGxpbmsgdG8vZnJvbSBhIGdpdmVuIGZpbGUuICovCiAgICAgIGZ1bmN0aW9uIGxpbmsoZmlsZSwgaW5jb21pbmcpIHsKICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJsaW5rIiwgZmlsZSwgZGlyZWN0aW9uOiBpbmNvbWluZyA/ICJpbmNvbWluZyIgOiAib3V0Z29pbmciIH07CiAgICAgIH0KICAgICAgU291cmNlcy5saW5rID0gbGluazsKICAgICAgLyoqIENyZWF0ZSBhIHNvdXJjZSB3aGljaCBqb2lucyB0d28gc291cmNlcyBieSBhIGxvZ2ljYWwgb3BlcmF0b3IgKGFuZC9vcikuICovCiAgICAgIGZ1bmN0aW9uIGJpbmFyeU9wKGxlZnQsIG9wLCByaWdodCkgewogICAgICAgICAgcmV0dXJuIHsgdHlwZTogImJpbmFyeW9wIiwgbGVmdCwgb3AsIHJpZ2h0IH07CiAgICAgIH0KICAgICAgU291cmNlcy5iaW5hcnlPcCA9IGJpbmFyeU9wOwogICAgICAvKiogQ3JlYXRlIGEgc291cmNlIHdoaWNoIHRha2VzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdHdvIHNvdXJjZXMuICovCiAgICAgIGZ1bmN0aW9uIGFuZChsZWZ0LCByaWdodCkgewogICAgICAgICAgcmV0dXJuIHsgdHlwZTogImJpbmFyeW9wIiwgbGVmdCwgb3A6ICImIiwgcmlnaHQgfTsKICAgICAgfQogICAgICBTb3VyY2VzLmFuZCA9IGFuZDsKICAgICAgLyoqIENyZWF0ZSBhIHNvdXJjZSB3aGljaCB0YWtlcyB0aGUgdW5pb24gb2YgdHdvIHNvdXJjZXMuICovCiAgICAgIGZ1bmN0aW9uIG9yKGxlZnQsIHJpZ2h0KSB7CiAgICAgICAgICByZXR1cm4geyB0eXBlOiAiYmluYXJ5b3AiLCBsZWZ0LCBvcDogInwiLCByaWdodCB9OwogICAgICB9CiAgICAgIFNvdXJjZXMub3IgPSBvcjsKICAgICAgLyoqIENyZWF0ZSBhIHNvdXJjZSB3aGljaCBuZWdhdGVzIHRoZSB1bmRlcmx5aW5nIHNvdXJjZS4gKi8KICAgICAgZnVuY3Rpb24gbmVnYXRlKGNoaWxkKSB7CiAgICAgICAgICByZXR1cm4geyB0eXBlOiAibmVnYXRlIiwgY2hpbGQgfTsKICAgICAgfQogICAgICBTb3VyY2VzLm5lZ2F0ZSA9IG5lZ2F0ZTsKICAgICAgZnVuY3Rpb24gZW1wdHkoKSB7CiAgICAgICAgICByZXR1cm4geyB0eXBlOiAiZW1wdHkiIH07CiAgICAgIH0KICAgICAgU291cmNlcy5lbXB0eSA9IGVtcHR5OwogIH0pKFNvdXJjZXMgfHwgKFNvdXJjZXMgPSB7fSkpOwoKICAvKiogRW1vamkgcmVnZXggd2l0aG91dCBhbnkgYWRkaXRpb25hbCBmbGFncy4gKi8KICBjb25zdCBFTU9KSV9SRUdFWCA9IG5ldyBSZWdFeHAoZW1vamlSZWdleCgpLCAiIik7CiAgLyoqIFByb3ZpZGVzIGEgbG9va3VwIHRhYmxlIGZvciB1bml0IGR1cmF0aW9ucyBvZiB0aGUgZ2l2ZW4gdHlwZS4gKi8KICBjb25zdCBEVVJBVElPTl9UWVBFUyA9IHsKICAgICAgeWVhcjogRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxIH0pLAogICAgICB5ZWFyczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxIH0pLAogICAgICB5cjogRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxIH0pLAogICAgICB5cnM6IER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSB9KSwKICAgICAgbW9udGg6IER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDEgfSksCiAgICAgIG1vbnRoczogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogMSB9KSwKICAgICAgbW86IER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDEgfSksCiAgICAgIG1vczogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogMSB9KSwKICAgICAgd2VlazogRHVyYXRpb24uZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLAogICAgICB3ZWVrczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLAogICAgICB3azogRHVyYXRpb24uZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLAogICAgICB3a3M6IER1cmF0aW9uLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSwKICAgICAgdzogRHVyYXRpb24uZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLAogICAgICBkYXk6IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLAogICAgICBkYXlzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgZGF5czogMSB9KSwKICAgICAgZDogRHVyYXRpb24uZnJvbU9iamVjdCh7IGRheXM6IDEgfSksCiAgICAgIGhvdXI6IER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSB9KSwKICAgICAgaG91cnM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSB9KSwKICAgICAgaHI6IER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSB9KSwKICAgICAgaHJzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEgfSksCiAgICAgIGg6IER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSB9KSwKICAgICAgbWludXRlOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWludXRlczogMSB9KSwKICAgICAgbWludXRlczogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksCiAgICAgIG1pbjogRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksCiAgICAgIG1pbnM6IER1cmF0aW9uLmZyb21PYmplY3QoeyBtaW51dGVzOiAxIH0pLAogICAgICBtOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWludXRlczogMSB9KSwKICAgICAgc2Vjb25kOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgc2Vjb25kczogMSB9KSwKICAgICAgc2Vjb25kczogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksCiAgICAgIHNlYzogRHVyYXRpb24uZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksCiAgICAgIHNlY3M6IER1cmF0aW9uLmZyb21PYmplY3QoeyBzZWNvbmRzOiAxIH0pLAogICAgICBzOiBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgc2Vjb25kczogMSB9KSwKICB9OwogIC8qKiBTaG9ydGhhbmQgZm9yIGNvbW1vbiBkYXRlcyAocmVsYXRpdmUgdG8gcmlnaHQgbm93KS4gKi8KICBjb25zdCBEQVRFX1NIT1JUSEFORFMgPSB7CiAgICAgIG5vdzogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKSwKICAgICAgdG9kYXk6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuc3RhcnRPZigiZGF5IiksCiAgICAgIHllc3RlcmRheTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKQogICAgICAgICAgLnN0YXJ0T2YoImRheSIpCiAgICAgICAgICAubWludXMoRHVyYXRpb24uZnJvbU9iamVjdCh7IGRheXM6IDEgfSkpLAogICAgICB0b21vcnJvdzogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKQogICAgICAgICAgLnN0YXJ0T2YoImRheSIpCiAgICAgICAgICAucGx1cyhEdXJhdGlvbi5mcm9tT2JqZWN0KHsgZGF5czogMSB9KSksCiAgICAgIHNvdzogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKCJ3ZWVrIiksCiAgICAgICJzdGFydC1vZi13ZWVrIjogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKCJ3ZWVrIiksCiAgICAgIGVvdzogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5lbmRPZigid2VlayIpLAogICAgICAiZW5kLW9mLXdlZWsiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLmVuZE9mKCJ3ZWVrIiksCiAgICAgIHNveTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKCJ5ZWFyIiksCiAgICAgICJzdGFydC1vZi15ZWFyIjogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKCJ5ZWFyIiksCiAgICAgIGVveTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5lbmRPZigieWVhciIpLAogICAgICAiZW5kLW9mLXllYXIiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLmVuZE9mKCJ5ZWFyIiksCiAgICAgIHNvbTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5zdGFydE9mKCJtb250aCIpLAogICAgICAic3RhcnQtb2YtbW9udGgiOiAoKSA9PiBEYXRlVGltZS5sb2NhbCgpLnN0YXJ0T2YoIm1vbnRoIiksCiAgICAgIGVvbTogKCkgPT4gRGF0ZVRpbWUubG9jYWwoKS5lbmRPZigibW9udGgiKSwKICAgICAgImVuZC1vZi1tb250aCI6ICgpID0+IERhdGVUaW1lLmxvY2FsKCkuZW5kT2YoIm1vbnRoIiksCiAgfTsKICAvKioKICAgKiBLZXl3b3JkcyB3aGljaCBjYW5ub3QgYmUgdXNlZCBhcyB2YXJpYWJsZXMgZGlyZWN0bHkuIFVzZSBgcm93Ljx0aGluZz5gIGlmIGl0IGlzIGEgdmFyaWFibGUgeW91IGhhdmUgZGVmaW5lZCBhbmQgd2FudAogICAqIHRvIGFjY2Vzcy4KICAgKi8KICBjb25zdCBLRVlXT1JEUyA9IFsiRlJPTSIsICJXSEVSRSIsICJMSU1JVCIsICJHUk9VUCIsICJGTEFUVEVOIl07CiAgLy8vLy8vLy8vLy8vLy8vCiAgLy8gVXRpbGl0aWVzIC8vCiAgLy8vLy8vLy8vLy8vLy8vCiAgLyoqIFNwbGl0IG9uIHVuZXNjYXBlZCBwaXBlcyBpbiBhbiBpbm5lciBsaW5rLiAqLwogIGZ1bmN0aW9uIHNwbGl0T25VbmVzY2FwZWRQaXBlKGxpbmspIHsKICAgICAgbGV0IHBpcGUgPSAtMTsKICAgICAgd2hpbGUgKChwaXBlID0gbGluay5pbmRleE9mKCJ8IiwgcGlwZSArIDEpKSA+PSAwKSB7CiAgICAgICAgICBpZiAocGlwZSA+IDAgJiYgbGlua1twaXBlIC0gMV0gPT0gIlxcIikKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIHJldHVybiBbbGluay5zdWJzdHJpbmcoMCwgcGlwZSkucmVwbGFjZSgvXFxcfC9nLCAifCIpLCBsaW5rLnN1YnN0cmluZyhwaXBlICsgMSldOwogICAgICB9CiAgICAgIHJldHVybiBbbGluay5yZXBsYWNlKC9cXFx8L2csICJ8IiksIHVuZGVmaW5lZF07CiAgfQogIC8qKiBBdHRlbXB0IHRvIHBhcnNlIHRoZSBpbnNpZGUgb2YgYSBsaW5rIHRvIHB1bGwgb3V0IGRpc3BsYXkgbmFtZSwgc3VicGF0aCwgZXRjLiAqLwogIGZ1bmN0aW9uIHBhcnNlSW5uZXJMaW5rKHJhd2xpbmspIHsKICAgICAgbGV0IFtsaW5rLCBkaXNwbGF5XSA9IHNwbGl0T25VbmVzY2FwZWRQaXBlKHJhd2xpbmspOwogICAgICByZXR1cm4gTGluay5pbmZlcihsaW5rLCBmYWxzZSwgZGlzcGxheSk7CiAgfQogIC8qKiBDcmVhdGUgYSBsZWZ0LWFzc29jaWF0aXZlIGJpbmFyeSBwYXJzZXIgd2hpY2ggcGFyc2VzIHRoZSBnaXZlbiBzdWItZWxlbWVudCBhbmQgc2VwYXJhdG9yLiBIYW5kbGVzIHdoaXRlc3BhY2UuICovCiAgZnVuY3Rpb24gY3JlYXRlQmluYXJ5UGFyc2VyKGNoaWxkLCBzZXAsIGNvbWJpbmUpIHsKICAgICAgcmV0dXJuIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zZXFNYXAoY2hpbGQsIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zZXEocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLm9wdFdoaXRlc3BhY2UsIHNlcCwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLm9wdFdoaXRlc3BhY2UsIGNoaWxkKS5tYW55KCksIChmaXJzdCwgcmVzdCkgPT4gewogICAgICAgICAgaWYgKHJlc3QubGVuZ3RoID09IDApCiAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0OwogICAgICAgICAgbGV0IG5vZGUgPSBjb21iaW5lKGZpcnN0LCByZXN0WzBdWzFdLCByZXN0WzBdWzNdKTsKICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCByZXN0Lmxlbmd0aDsgaW5kZXgrKykgewogICAgICAgICAgICAgIG5vZGUgPSBjb21iaW5lKG5vZGUsIHJlc3RbaW5kZXhdWzFdLCByZXN0W2luZGV4XVszXSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgfSk7CiAgfQogIGZ1bmN0aW9uIGNoYWluT3B0KGJhc2UsIC4uLmZ1bmNzKSB7CiAgICAgIHJldHVybiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuY3VzdG9tKChzdWNjZXNzLCBmYWlsdXJlKSA9PiB7CiAgICAgICAgICByZXR1cm4gKGlucHV0LCBpKSA9PiB7CiAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGJhc2UuXyhpbnB1dCwgaSk7CiAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3RhdHVzKQogICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpIHsKICAgICAgICAgICAgICAgICAgbGV0IG5leHQgPSBmdW5jKHJlc3VsdC52YWx1ZSkuXyhpbnB1dCwgcmVzdWx0LmluZGV4KTsKICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0LnN0YXR1cykKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5leHQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9OwogICAgICB9KTsKICB9CiAgY29uc3QgRVhQUkVTU0lPTiA9IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5jcmVhdGVMYW5ndWFnZSh7CiAgICAgIC8vIEEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyOyB0aGUgZGVjaW1hbCBwb2ludCBpcyBvcHRpb25hbC4KICAgICAgbnVtYmVyOiBxID0+IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5yZWdleHAoLy0/WzAtOV0rKFwuWzAtOV0rKT8vKQogICAgICAgICAgLm1hcChzdHIgPT4gTnVtYmVyLnBhcnNlRmxvYXQoc3RyKSkKICAgICAgICAgIC5kZXNjKCJudW1iZXIiKSwKICAgICAgLy8gQSBxdW90ZS1zdXJyb3VuZGVkIHN0cmluZyB3aGljaCBzdXBwb3J0cyBlc2NhcGUgY2hhcmFjdGVycyAoJ1wnKS4KICAgICAgc3RyaW5nOiBxID0+IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoJyInKQogICAgICAgICAgLnRoZW4ocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLmFsdChxLmVzY2FwZUNoYXJhY3RlciwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLm5vbmVPZignIlxcJykpCiAgICAgICAgICAuYXRMZWFzdCgwKQogICAgICAgICAgLm1hcChjaGFycyA9PiBjaGFycy5qb2luKCIiKSkpCiAgICAgICAgICAuc2tpcChwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc3RyaW5nKCciJykpCiAgICAgICAgICAuZGVzYygic3RyaW5nIiksCiAgICAgIGVzY2FwZUNoYXJhY3RlcjogXyA9PiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc3RyaW5nKCJcXCIpCiAgICAgICAgICAudGhlbihwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuYW55KQogICAgICAgICAgLm1hcChlc2NhcGVkID0+IHsKICAgICAgICAgIC8vIElmIHdlIGFyZSBlc2NhcGluZyBhIGJhY2tzbGFzaCBvciBhIHF1b3RlLCBwYXNzIGluIG9uIGluIGVzY2FwZWQgZm9ybQogICAgICAgICAgaWYgKGVzY2FwZWQgPT09ICciJykKICAgICAgICAgICAgICByZXR1cm4gJyInOwogICAgICAgICAgaWYgKGVzY2FwZWQgPT09ICJcXCIpCiAgICAgICAgICAgICAgcmV0dXJuICJcXCI7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgcmV0dXJuICJcXCIgKyBlc2NhcGVkOwogICAgICB9KSwKICAgICAgLy8gQSBib29sZWFuIHRydWUvZmFsc2UgdmFsdWUuCiAgICAgIGJvb2w6IF8gPT4gcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnJlZ2V4cCgvdHJ1ZXxmYWxzZXxUcnVlfEZhbHNlLykKICAgICAgICAgIC5tYXAoc3RyID0+IHN0ci50b0xvd2VyQ2FzZSgpID09ICJ0cnVlIikKICAgICAgICAgIC5kZXNjKCJib29sZWFuICgndHJ1ZScgb3IgJ2ZhbHNlJykiKSwKICAgICAgLy8gQSB0YWcgb2YgdGhlIGZvcm0gJyNzdHVmZi9oZWxsby10aGVyZScuCiAgICAgIHRhZzogXyA9PiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIiMiKSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLmFsdChwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMucmVnZXhwKC9bXlx1MjAwMC1cdTIwNkZcdTJFMDAtXHUyRTdGJyEiIyQlJigpKissLjo7PD0+P0BeYHt8fX5cW1xdXFxcc10vKS5kZXNjKCJ0ZXh0IikpLm1hbnkoKSwgKHN0YXJ0LCByZXN0KSA9PiBzdGFydCArIHJlc3Quam9pbigiIikpLmRlc2MoInRhZyAoJyNoZWxsby9zdHVmZicpIiksCiAgICAgIC8vIEEgdmFyaWFibGUgaWRlbnRpZmllciwgd2hpY2ggaXMgYWxwaGFudW1lcmljIGFuZCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgb3IuLi4gZW1vamkuCiAgICAgIGlkZW50aWZpZXI6IF8gPT4gcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuYWx0KHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5yZWdleHAoL1xwe0xldHRlcn0vdSksIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5yZWdleHAoRU1PSklfUkVHRVgpLmRlc2MoInRleHQiKSksIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5hbHQocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnJlZ2V4cCgvWzAtOVxwe0xldHRlcn1fLV0vdSksIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5yZWdleHAoRU1PSklfUkVHRVgpLmRlc2MoInRleHQiKSkubWFueSgpLCAoZmlyc3QsIHJlc3QpID0+IGZpcnN0ICsgcmVzdC5qb2luKCIiKSkuZGVzYygidmFyaWFibGUgaWRlbnRpZmllciIpLAogICAgICAvLyBBbiBPYnNpZGlhbiBsaW5rIG9mIHRoZSBmb3JtIFtbPGxpbms+XV0uCiAgICAgIGxpbms6IF8gPT4gcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnJlZ2V4cCgvXFtcWyhbXlxbXF1dKj8pXF1cXS91LCAxKQogICAgICAgICAgLm1hcChsaW5rSW5uZXIgPT4gcGFyc2VJbm5lckxpbmsobGlua0lubmVyKSkKICAgICAgICAgIC5kZXNjKCJmaWxlIGxpbmsiKSwKICAgICAgLy8gQW4gZW1iZWRkYWJsZSBsaW5rIHdoaWNoIGNhbiBzdGFydCB3aXRoICchJy4gVGhpcyBvdmVybGFwcyB3aXRoIHRoZSBub3JtYWwgbmVnYXRpb24gb3BlcmF0b3IsIHNvIGl0IGlzIG9ubHkKICAgICAgLy8gcHJvdmlkZWQgZm9yIG1ldGFkYXRhIHBhcnNpbmcuCiAgICAgIGVtYmVkTGluazogcSA9PiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIiEiKS5hdE1vc3QoMSksIHEubGluaywgKHAsIGwpID0+IHsKICAgICAgICAgIGlmIChwLmxlbmd0aCA+IDApCiAgICAgICAgICAgICAgbC5lbWJlZCA9IHRydWU7CiAgICAgICAgICByZXR1cm4gbDsKICAgICAgfSkuZGVzYygiZmlsZSBsaW5rIiksCiAgICAgIC8vIEJpbmFyeSBwbHVzIG9yIG1pbnVzIG9wZXJhdG9yLgogICAgICBiaW5hcnlQbHVzTWludXM6IF8gPT4gcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnJlZ2V4cCgvXCt8LS8pCiAgICAgICAgICAubWFwKHN0ciA9PiBzdHIpCiAgICAgICAgICAuZGVzYygiJysnIG9yICctJyIpLAogICAgICAvLyBCaW5hcnkgdGltZXMgb3IgZGl2aWRlIG9wZXJhdG9yLgogICAgICBiaW5hcnlNdWxEaXY6IF8gPT4gcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnJlZ2V4cCgvXCp8XC98JS8pCiAgICAgICAgICAubWFwKHN0ciA9PiBzdHIpCiAgICAgICAgICAuZGVzYygiJyonIG9yICcvJyBvciAnJSciKSwKICAgICAgLy8gQmluYXJ5IGNvbXBhcmlzb24gb3BlcmF0b3IuCiAgICAgIGJpbmFyeUNvbXBhcmVPcDogXyA9PiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMucmVnZXhwKC8+PXw8PXwhPXw+fDx8PS8pCiAgICAgICAgICAubWFwKHN0ciA9PiBzdHIpCiAgICAgICAgICAuZGVzYygiJz49JyBvciAnPD0nIG9yICchPScgb3IgJz0nIG9yICc+JyBvciAnPCciKSwKICAgICAgLy8gQmluYXJ5IGJvb2xlYW4gY29tYmluYXRpb24gb3BlcmF0b3IuCiAgICAgIGJpbmFyeUJvb2xlYW5PcDogXyA9PiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMucmVnZXhwKC9hbmR8b3J8JnxcfC9pKQogICAgICAgICAgLm1hcChzdHIgPT4gewogICAgICAgICAgaWYgKHN0ci50b0xvd2VyQ2FzZSgpID09ICJhbmQiKQogICAgICAgICAgICAgIHJldHVybiAiJiI7CiAgICAgICAgICBlbHNlIGlmIChzdHIudG9Mb3dlckNhc2UoKSA9PSAib3IiKQogICAgICAgICAgICAgIHJldHVybiAifCI7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgcmV0dXJuIHN0cjsKICAgICAgfSkKICAgICAgICAgIC5kZXNjKCInYW5kJyBvciAnb3InIiksCiAgICAgIC8vIEEgZGF0ZSB3aGljaCBjYW4gYmUgWVlZWS1NTVstRERUSEg6bW06c3NdLgogICAgICByb290RGF0ZTogXyA9PiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5yZWdleHAoL1xkezR9LyksIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIi0iKSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnJlZ2V4cCgvXGR7Mn0vKSwgKHllYXIsIF8sIG1vbnRoKSA9PiB7CiAgICAgICAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbU9iamVjdCh7IHllYXI6IE51bWJlci5wYXJzZUludCh5ZWFyKSwgbW9udGg6IE51bWJlci5wYXJzZUludChtb250aCkgfSk7CiAgICAgIH0pLmRlc2MoImRhdGUgaW4gZm9ybWF0IFlZWVktTU1bLUREVEhILU1NLVNTLk1TXSIpLAogICAgICBkYXRlU2hvcnRoYW5kOiBfID0+IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5hbHQoLi4uT2JqZWN0LmtleXMoREFURV9TSE9SVEhBTkRTKQogICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpCiAgICAgICAgICAubWFwKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcpKSwKICAgICAgZGF0ZTogcSA9PiBjaGFpbk9wdChxLnJvb3REYXRlLCAoeW0pID0+IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiLSIpLCBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMucmVnZXhwKC9cZHsyfS8pLCAoXywgZGF5KSA9PiB5bS5zZXQoeyBkYXk6IE51bWJlci5wYXJzZUludChkYXkpIH0pKSwgKHltZCkgPT4gcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc3RyaW5nKCJUIiksIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5yZWdleHAoL1xkezJ9LyksIChfLCBob3VyKSA9PiB5bWQuc2V0KHsgaG91cjogTnVtYmVyLnBhcnNlSW50KGhvdXIpIH0pKSwgKHltZGgpID0+IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiOiIpLCBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMucmVnZXhwKC9cZHsyfS8pLCAoXywgbWludXRlKSA9PiB5bWRoLnNldCh7IG1pbnV0ZTogTnVtYmVyLnBhcnNlSW50KG1pbnV0ZSkgfSkpLCAoeW1kaG0pID0+IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiOiIpLCBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMucmVnZXhwKC9cZHsyfS8pLCAoXywgc2Vjb25kKSA9PiB5bWRobS5zZXQoeyBzZWNvbmQ6IE51bWJlci5wYXJzZUludChzZWNvbmQpIH0pKSwgKHltZGhtcykgPT4gcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLmFsdChwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIi4iKSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnJlZ2V4cCgvXGR7M30vKSwgKF8sIG1pbGxpc2Vjb25kKSA9PiB5bWRobXMuc2V0KHsgbWlsbGlzZWNvbmQ6IE51bWJlci5wYXJzZUludChtaWxsaXNlY29uZCkgfSkpLCBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc3VjY2VlZCh5bWRobXMpIC8vIHBhc3MKICAgICAgKSwgKGR0KSA9PiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuYWx0KHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiKyIpLm9yKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIi0iKSksIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5yZWdleHAoL1xkezEsMn0oOlxkezJ9KT8vKSwgKHBtLCBocikgPT4gZHQuc2V0Wm9uZSgiVVRDIiArIHBtICsgaHIsIHsga2VlcExvY2FsVGltZTogdHJ1ZSB9KSksIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiWiIpLCAoKSA9PiBkdC5zZXRab25lKCJ1dGMiLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSkpLCBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIlsiKSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnJlZ2V4cCgvWzAtOUEtWmEteistXC9dKy91KSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiXSIpLCAoX2EsIHpvbmUsIF9iKSA9PiBkdC5zZXRab25lKHpvbmUsIHsga2VlcExvY2FsVGltZTogdHJ1ZSB9KSkpKQogICAgICAgICAgLmFzc2VydCgoZHQpID0+IGR0LmlzVmFsaWQsICJ2YWxpZCBkYXRlIikKICAgICAgICAgIC5kZXNjKCJkYXRlIGluIGZvcm1hdCBZWVlZLU1NWy1ERFRISC1NTS1TUy5NU10iKSwKICAgICAgLy8gQSBkYXRlLCBwbHVzIHZhcmlvdXMgc2hvcnRoYW5kIHRpbWVzIG9mIGRheSBpdCBjb3VsZCBiZS4KICAgICAgZGF0ZVBsdXM6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLmFsdChxLmRhdGVTaG9ydGhhbmQubWFwKGQgPT4gREFURV9TSE9SVEhBTkRTW2RdKCkpLCBxLmRhdGUpLmRlc2MoImRhdGUgaW4gZm9ybWF0IFlZWVktTU1bLUREVEhILU1NLVNTLk1TXSBvciBpbiBzaG9ydGhhbmQiKSwKICAgICAgLy8gQSBkdXJhdGlvbiBvZiB0aW1lLgogICAgICBkdXJhdGlvblR5cGU6IF8gPT4gcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLmFsdCguLi5PYmplY3Qua2V5cyhEVVJBVElPTl9UWVBFUykKICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKQogICAgICAgICAgLm1hcChwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc3RyaW5nKSksCiAgICAgIGR1cmF0aW9uOiBxID0+IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zZXFNYXAocS5udW1iZXIsIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5vcHRXaGl0ZXNwYWNlLCBxLmR1cmF0aW9uVHlwZSwgKGNvdW50LCBfLCB0KSA9PiBEVVJBVElPTl9UWVBFU1t0XS5tYXBVbml0cyh4ID0+IHggKiBjb3VudCkpCiAgICAgICAgICAuc2VwQnkxKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIiwiKS50cmltKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5vcHRXaGl0ZXNwYWNlKS5vcihwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMub3B0V2hpdGVzcGFjZSkpCiAgICAgICAgICAubWFwKGR1cmF0aW9ucyA9PiBkdXJhdGlvbnMucmVkdWNlKChwLCBjKSA9PiBwLnBsdXMoYykpKQogICAgICAgICAgLmRlc2MoImR1cmF0aW9uIGxpa2UgNGhyMm1pbiIpLAogICAgICAvLyBBIHJhdyBudWxsIHZhbHVlLgogICAgICByYXdOdWxsOiBfID0+IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIm51bGwiKSwKICAgICAgLy8gU291cmNlIHBhcnNpbmcuCiAgICAgIHRhZ1NvdXJjZTogcSA9PiBxLnRhZy5tYXAodGFnID0+IFNvdXJjZXMudGFnKHRhZykpLAogICAgICBjc3ZTb3VyY2U6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc3RyaW5nKCJjc3YoIikuc2tpcChwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMub3B0V2hpdGVzcGFjZSksIHEuc3RyaW5nLCBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc3RyaW5nKCIpIiksIChfMSwgcGF0aCwgXzIpID0+IFNvdXJjZXMuY3N2KHBhdGgpKSwKICAgICAgbGlua0luY29taW5nU291cmNlOiBxID0+IHEubGluay5tYXAobGluayA9PiBTb3VyY2VzLmxpbmsobGluay5wYXRoLCB0cnVlKSksCiAgICAgIGxpbmtPdXRnb2luZ1NvdXJjZTogcSA9PiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIm91dGdvaW5nKCIpLnNraXAocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLm9wdFdoaXRlc3BhY2UpLCBxLmxpbmssIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIikiKSwgKF8xLCBsaW5rLCBfMikgPT4gU291cmNlcy5saW5rKGxpbmsucGF0aCwgZmFsc2UpKSwKICAgICAgZm9sZGVyU291cmNlOiBxID0+IHEuc3RyaW5nLm1hcChzdHIgPT4gU291cmNlcy5mb2xkZXIoc3RyKSksCiAgICAgIHBhcmVuc1NvdXJjZTogcSA9PiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIigiKSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLm9wdFdoaXRlc3BhY2UsIHEuc291cmNlLCBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiKSIpLCAoXzEsIF8yLCBmaWVsZCwgXzMsIF80KSA9PiBmaWVsZCksCiAgICAgIG5lZ2F0ZVNvdXJjZTogcSA9PiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5hbHQocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiLSIpLCBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc3RyaW5nKCIhIikpLCBxLmF0b21Tb3VyY2UsIChfLCBzb3VyY2UpID0+IFNvdXJjZXMubmVnYXRlKHNvdXJjZSkpLAogICAgICBhdG9tU291cmNlOiBxID0+IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5hbHQocS5wYXJlbnNTb3VyY2UsIHEubmVnYXRlU291cmNlLCBxLmxpbmtPdXRnb2luZ1NvdXJjZSwgcS5saW5rSW5jb21pbmdTb3VyY2UsIHEuZm9sZGVyU291cmNlLCBxLnRhZ1NvdXJjZSwgcS5jc3ZTb3VyY2UpLAogICAgICBiaW5hcnlPcFNvdXJjZTogcSA9PiBjcmVhdGVCaW5hcnlQYXJzZXIocS5hdG9tU291cmNlLCBxLmJpbmFyeUJvb2xlYW5PcC5tYXAocyA9PiBzKSwgU291cmNlcy5iaW5hcnlPcCksCiAgICAgIHNvdXJjZTogcSA9PiBxLmJpbmFyeU9wU291cmNlLAogICAgICAvLyBGaWVsZCBwYXJzaW5nLgogICAgICB2YXJpYWJsZUZpZWxkOiBxID0+IHEuaWRlbnRpZmllcgogICAgICAgICAgLmNoYWluKHIgPT4gewogICAgICAgICAgaWYgKEtFWVdPUkRTLmluY2x1ZGVzKHIudG9VcHBlckNhc2UoKSkpIHsKICAgICAgICAgICAgICByZXR1cm4gcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLmZhaWwoIlZhcmlhYmxlIGZpZWxkcyBjYW5ub3QgYmUgYSBrZXl3b3JkICgiICsgS0VZV09SRFMuam9pbigiIG9yICIpICsgIikiKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc3VjY2VlZChGaWVsZHMudmFyaWFibGUocikpOwogICAgICAgICAgfQogICAgICB9KQogICAgICAgICAgLmRlc2MoInZhcmlhYmxlIiksCiAgICAgIG51bWJlckZpZWxkOiBxID0+IHEubnVtYmVyLm1hcCh2YWwgPT4gRmllbGRzLmxpdGVyYWwodmFsKSkuZGVzYygibnVtYmVyIiksCiAgICAgIHN0cmluZ0ZpZWxkOiBxID0+IHEuc3RyaW5nLm1hcCh2YWwgPT4gRmllbGRzLmxpdGVyYWwodmFsKSkuZGVzYygic3RyaW5nIiksCiAgICAgIGJvb2xGaWVsZDogcSA9PiBxLmJvb2wubWFwKHZhbCA9PiBGaWVsZHMubGl0ZXJhbCh2YWwpKS5kZXNjKCJib29sZWFuIiksCiAgICAgIGRhdGVGaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoImRhdGUoIiksIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5vcHRXaGl0ZXNwYWNlLCBxLmRhdGVQbHVzLCBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiKSIpLCAocHJlZml4LCBfMSwgZGF0ZSwgXzIsIHBvc3RmaXgpID0+IEZpZWxkcy5saXRlcmFsKGRhdGUpKS5kZXNjKCJkYXRlIiksCiAgICAgIGR1cmF0aW9uRmllbGQ6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc3RyaW5nKCJkdXIoIiksIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5vcHRXaGl0ZXNwYWNlLCBxLmR1cmF0aW9uLCBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiKSIpLCAocHJlZml4LCBfMSwgZHVyLCBfMiwgcG9zdGZpeCkgPT4gRmllbGRzLmxpdGVyYWwoZHVyKSkuZGVzYygiZHVyYXRpb24iKSwKICAgICAgbnVsbEZpZWxkOiBxID0+IHEucmF3TnVsbC5tYXAoXyA9PiBGaWVsZHMuTlVMTCksCiAgICAgIGxpbmtGaWVsZDogcSA9PiBxLmxpbmsubWFwKGYgPT4gRmllbGRzLmxpdGVyYWwoZikpLAogICAgICBsaXN0RmllbGQ6IHEgPT4gcS5maWVsZAogICAgICAgICAgLnNlcEJ5KHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIiwiKS50cmltKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSkKICAgICAgICAgIC53cmFwKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIlsiKS5za2lwKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLm9wdFdoaXRlc3BhY2UudGhlbihwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc3RyaW5nKCJdIikpKQogICAgICAgICAgLm1hcChsID0+IEZpZWxkcy5saXN0KGwpKQogICAgICAgICAgLmRlc2MoImxpc3QgKCdbMSwgMiwgM10nKSIpLAogICAgICBvYmplY3RGaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc2VxTWFwKHEuaWRlbnRpZmllci5vcihxLnN0cmluZyksIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIjoiKS50cmltKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSwgcS5maWVsZCwgKG5hbWUsIF9zZXAsIHZhbHVlKSA9PiB7CiAgICAgICAgICByZXR1cm4geyBuYW1lLCB2YWx1ZSB9OwogICAgICB9KQogICAgICAgICAgLnNlcEJ5KHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIiwiKS50cmltKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSkKICAgICAgICAgIC53cmFwKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoInsiKS5za2lwKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLm9wdFdoaXRlc3BhY2UudGhlbihwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc3RyaW5nKCJ9IikpKQogICAgICAgICAgLm1hcCh2YWxzID0+IHsKICAgICAgICAgIGxldCByZXMgPSB7fTsKICAgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIHZhbHMpCiAgICAgICAgICAgICAgcmVzW2VudHJ5Lm5hbWVdID0gZW50cnkudmFsdWU7CiAgICAgICAgICByZXR1cm4gRmllbGRzLm9iamVjdChyZXMpOwogICAgICB9KQogICAgICAgICAgLmRlc2MoIm9iamVjdCAoJ3sgYTogMSwgYjogMiB9JykiKSwKICAgICAgYXRvbUlubGluZUZpZWxkOiBxID0+IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5hbHQocS5kYXRlLCBxLmR1cmF0aW9uLm1hcChkID0+IG5vcm1hbGl6ZUR1cmF0aW9uKGQpKSwgcS5zdHJpbmcsIHEudGFnLCBxLmVtYmVkTGluaywgcS5ib29sLCBxLm51bWJlciwgcS5yYXdOdWxsKSwKICAgICAgaW5saW5lRmllbGRMaXN0OiBxID0+IHEuYXRvbUlubGluZUZpZWxkLnNlcEJ5KHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIiwiKS50cmltKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5vcHRXaGl0ZXNwYWNlKS5sb29rYWhlYWQocS5hdG9tSW5saW5lRmllbGQpKSwKICAgICAgaW5saW5lRmllbGQ6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLmFsdChwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc2VxTWFwKHEuYXRvbUlubGluZUZpZWxkLCBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc3RyaW5nKCIsIikudHJpbShwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMub3B0V2hpdGVzcGFjZSksIHEuaW5saW5lRmllbGRMaXN0LCAoZiwgX3MsIGwpID0+IFtmXS5jb25jYXQobCkpLCBxLmF0b21JbmxpbmVGaWVsZCksCiAgICAgIGF0b21GaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuYWx0KAogICAgICAvLyBQbGFjZSBlbWJlZCBsaW5rcyBhYm92ZSBuZWdhdGVkIGZpZWxkcyBhcyB0aGV5IGFyZSB0aGUgc3BlY2lhbCBwYXJzZXIgY2FzZSAnIVtbdGhpbmddXScgYW5kIGFyZSBnZW5lcmFsbHkgdW5hbWJpZ3VvdXMuCiAgICAgIHEuZW1iZWRMaW5rLm1hcChsID0+IEZpZWxkcy5saXRlcmFsKGwpKSwgcS5uZWdhdGVkRmllbGQsIHEubGlua0ZpZWxkLCBxLmxpc3RGaWVsZCwgcS5vYmplY3RGaWVsZCwgcS5sYW1iZGFGaWVsZCwgcS5wYXJlbnNGaWVsZCwgcS5ib29sRmllbGQsIHEubnVtYmVyRmllbGQsIHEuc3RyaW5nRmllbGQsIHEuZGF0ZUZpZWxkLCBxLmR1cmF0aW9uRmllbGQsIHEubnVsbEZpZWxkLCBxLnZhcmlhYmxlRmllbGQpLAogICAgICBpbmRleEZpZWxkOiBxID0+IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zZXFNYXAocS5hdG9tRmllbGQsIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5hbHQocS5kb3RQb3N0Zml4LCBxLmluZGV4UG9zdGZpeCwgcS5mdW5jdGlvblBvc3RmaXgpLm1hbnkoKSwgKG9iaiwgcG9zdGZpeGVzKSA9PiB7CiAgICAgICAgICBsZXQgcmVzdWx0ID0gb2JqOwogICAgICAgICAgZm9yIChsZXQgcG9zdCBvZiBwb3N0Zml4ZXMpIHsKICAgICAgICAgICAgICBzd2l0Y2ggKHBvc3QudHlwZSkgewogICAgICAgICAgICAgICAgICBjYXNlICJkb3QiOgogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmllbGRzLmluZGV4KHJlc3VsdCwgRmllbGRzLmxpdGVyYWwocG9zdC5maWVsZCkpOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIGNhc2UgImluZGV4IjoKICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZpZWxkcy5pbmRleChyZXN1bHQsIHBvc3QuZmllbGQpOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIGNhc2UgImZ1bmN0aW9uIjoKICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZpZWxkcy5mdW5jKHJlc3VsdCwgcG9zdC5maWVsZHMpOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfSksCiAgICAgIG5lZ2F0ZWRGaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIiEiKSwgcS5pbmRleEZpZWxkLCAoXywgZmllbGQpID0+IEZpZWxkcy5uZWdhdGUoZmllbGQpKS5kZXNjKCJuZWdhdGVkIGZpZWxkIiksCiAgICAgIHBhcmVuc0ZpZWxkOiBxID0+IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiKCIpLCBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcS5maWVsZCwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLm9wdFdoaXRlc3BhY2UsIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIikiKSwgKF8xLCBfMiwgZmllbGQsIF8zLCBfNCkgPT4gZmllbGQpLAogICAgICBsYW1iZGFGaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc2VxTWFwKHEuaWRlbnRpZmllcgogICAgICAgICAgLnNlcEJ5KHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIiwiKS50cmltKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSkKICAgICAgICAgIC53cmFwKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIigiKS50cmltKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiKSIpLnRyaW0ocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLm9wdFdoaXRlc3BhY2UpKSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiPT4iKS50cmltKHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSwgcS5maWVsZCwgKGlkZW50LCBfaWdub3JlLCB2YWx1ZSkgPT4gewogICAgICAgICAgcmV0dXJuIHsgdHlwZTogImxhbWJkYSIsIGFyZ3VtZW50czogaWRlbnQsIHZhbHVlIH07CiAgICAgIH0pLAogICAgICBkb3RQb3N0Zml4OiBxID0+IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiLiIpLCBxLmlkZW50aWZpZXIsIChfLCBmaWVsZCkgPT4gewogICAgICAgICAgcmV0dXJuIHsgdHlwZTogImRvdCIsIGZpZWxkOiBmaWVsZCB9OwogICAgICB9KSwKICAgICAgaW5kZXhQb3N0Zml4OiBxID0+IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiWyIpLCBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcS5maWVsZCwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLm9wdFdoaXRlc3BhY2UsIHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zdHJpbmcoIl0iKSwgKF8sIF8yLCBmaWVsZCwgXzMsIF80KSA9PiB7CiAgICAgICAgICByZXR1cm4geyB0eXBlOiAiaW5kZXgiLCBmaWVsZCB9OwogICAgICB9KSwKICAgICAgZnVuY3Rpb25Qb3N0Zml4OiBxID0+IHBhcnNpbW1vbl91bWRfbWluRXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiKCIpLCBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcS5maWVsZC5zZXBCeShwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMuc3RyaW5nKCIsIikudHJpbShwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMub3B0V2hpdGVzcGFjZSkpLCBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnN0cmluZygiKSIpLCAoXywgXzEsIGZpZWxkcywgXzIsIF8zKSA9PiB7CiAgICAgICAgICByZXR1cm4geyB0eXBlOiAiZnVuY3Rpb24iLCBmaWVsZHMgfTsKICAgICAgfSksCiAgICAgIC8vIFRoZSBwcmVjZWRlbmNlIGhpZXJhcmNoeSBvZiBvcGVyYXRvcnMgLSBtdWx0aXBseS9kaXZpZGUsIGFkZC9zdWJ0cmFjdCwgY29tcGFyZSwgYW5kIHRoZW4gYm9vbGVhbiBvcGVyYXRpb25zLgogICAgICBiaW5hcnlNdWxEaXZGaWVsZDogcSA9PiBjcmVhdGVCaW5hcnlQYXJzZXIocS5pbmRleEZpZWxkLCBxLmJpbmFyeU11bERpdiwgRmllbGRzLmJpbmFyeU9wKSwKICAgICAgYmluYXJ5UGx1c01pbnVzRmllbGQ6IHEgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuYmluYXJ5TXVsRGl2RmllbGQsIHEuYmluYXJ5UGx1c01pbnVzLCBGaWVsZHMuYmluYXJ5T3ApLAogICAgICBiaW5hcnlDb21wYXJlRmllbGQ6IHEgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuYmluYXJ5UGx1c01pbnVzRmllbGQsIHEuYmluYXJ5Q29tcGFyZU9wLCBGaWVsZHMuYmluYXJ5T3ApLAogICAgICBiaW5hcnlCb29sZWFuRmllbGQ6IHEgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuYmluYXJ5Q29tcGFyZUZpZWxkLCBxLmJpbmFyeUJvb2xlYW5PcCwgRmllbGRzLmJpbmFyeU9wKSwKICAgICAgYmluYXJ5T3BGaWVsZDogcSA9PiBxLmJpbmFyeUJvb2xlYW5GaWVsZCwKICAgICAgZmllbGQ6IHEgPT4gcS5iaW5hcnlPcEZpZWxkLAogIH0pOwoKICAvKiogUGFyc2UgaW5saW5lIGZpZWxkcyBhbmQgb3RoZXIgZW1iZWRkZWQgbWV0YWRhdGEgaW4gYSBsaW5lLiAqLwogIC8qKiBUaGUgd3JhcHBlciBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGFuIGlubGluZSBmaWVsZC4gKi8KICBjb25zdCBJTkxJTkVfRklFTERfV1JBUFBFUlMgPSBPYmplY3QuZnJlZXplKHsKICAgICAgIlsiOiAiXSIsCiAgICAgICIoIjogIikiLAogIH0pOwogIC8qKgogICAqIEZpbmQgYSBtYXRjaGluZyBjbG9zaW5nIGJyYWNrZXQgdGhhdCBvY2N1cnMgYXQgb3IgYWZ0ZXIgYHN0YXJ0YCwgcmVzcGVjdGluZyBuZXN0aW5nIGFuZCBlc2NhcGVzLiBJZiBmb3VuZCwKICAgKiByZXR1cm5zIHRoZSB2YWx1ZSBjb250YWluZWQgd2l0aGluIGFuZCB0aGUgc3RyaW5nIGluZGV4IGFmdGVyIHRoZSBlbmQgb2YgdGhlIHZhbHVlLgogICAqLwogIGZ1bmN0aW9uIGZpbmRDbG9zaW5nKGxpbmUsIHN0YXJ0LCBvcGVuLCBjbG9zZSkgewogICAgICBsZXQgbmVzdGluZyA9IDA7CiAgICAgIGxldCBlc2NhcGVkID0gZmFsc2U7CiAgICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnQ7IGluZGV4IDwgbGluZS5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgICAgIGxldCBjaGFyID0gbGluZS5jaGFyQXQoaW5kZXgpOwogICAgICAgICAgLy8gQWxsb3dzIGZvciBkb3VibGUgZXNjYXBlcyBsaWtlICdcXCcgdG8gYmUgcmVuZGVyZWQgbm9ybWFsbHkuCiAgICAgICAgICBpZiAoY2hhciA9PSAiXFwiKSB7CiAgICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgLy8gSWYgZXNjYXBlZCwgaWdub3JlIHRoZSBuZXh0IGNoYXJhY3RlciBmb3IgY29tcHV0aW5nIG5lc3RpbmcsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBpdCBpcy4KICAgICAgICAgIGlmIChlc2NhcGVkKSB7CiAgICAgICAgICAgICAgZXNjYXBlZCA9IGZhbHNlOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNoYXIgPT0gb3BlbikKICAgICAgICAgICAgICBuZXN0aW5nKys7CiAgICAgICAgICBlbHNlIGlmIChjaGFyID09IGNsb3NlKQogICAgICAgICAgICAgIG5lc3RpbmctLTsKICAgICAgICAgIC8vIE9ubHkgb2NjdXJzIGlmIHdlIGFyZSBvbiBhIGNsb3NlIGNoYXJhY3RlciBhbmQgdGhlcmUgaXMgbm8gbW9yZSBuZXN0aW5nLgogICAgICAgICAgaWYgKG5lc3RpbmcgPCAwKQogICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBsaW5lLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpLnRyaW0oKSwgZW5kSW5kZXg6IGluZGV4ICsgMSB9OwogICAgICAgICAgZXNjYXBlZCA9IGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgfQogIC8qKiBGaW5kIHRoZSAnOjonIHNlcGFyYXRvciBpbiBhbiBpbmxpbmUgZmllbGQuICovCiAgZnVuY3Rpb24gZmluZFNlcGFyYXRvcihsaW5lLCBzdGFydCkgewogICAgICBsZXQgc2VwID0gbGluZS5pbmRleE9mKCI6OiIsIHN0YXJ0KTsKICAgICAgaWYgKHNlcCA8IDApCiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICByZXR1cm4geyBrZXk6IGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBzZXApLnRyaW0oKSwgdmFsdWVJbmRleDogc2VwICsgMiB9OwogIH0KICAvKiogVHJ5IHRvIGNvbXBsZXRlbHkgcGFyc2UgYW4gaW5saW5lIGZpZWxkIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBwb3NpdGlvbi4gQXNzdW1lcyBgc3RhcnRgIGlzIG9uIGEgd3JhcHBpbmcgY2hhcmFjdGVyLiAqLwogIGZ1bmN0aW9uIGZpbmRTcGVjaWZpY0lubGluZUZpZWxkKGxpbmUsIHN0YXJ0KSB7CiAgICAgIGxldCBvcGVuID0gbGluZS5jaGFyQXQoc3RhcnQpOwogICAgICBsZXQga2V5ID0gZmluZFNlcGFyYXRvcihsaW5lLCBzdGFydCArIDEpOwogICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpCiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAvLyBGYWlsIHRoZSBtYXRjaCBpZiB3ZSBmaW5kIGFueSBzZXBhcmF0b3IgY2hhcmFjdGVycyAobm90IGFsbG93ZWQgaW4ga2V5cykuCiAgICAgIGZvciAobGV0IHNlcCBvZiBPYmplY3Qua2V5cyhJTkxJTkVfRklFTERfV1JBUFBFUlMpLmNvbmNhdChPYmplY3QudmFsdWVzKElOTElORV9GSUVMRF9XUkFQUEVSUykpKSB7CiAgICAgICAgICBpZiAoa2V5LmtleS5pbmNsdWRlcyhzZXApKQogICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgIH0KICAgICAgbGV0IHZhbHVlID0gZmluZENsb3NpbmcobGluZSwga2V5LnZhbHVlSW5kZXgsIG9wZW4sIElOTElORV9GSUVMRF9XUkFQUEVSU1tvcGVuXSk7CiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKQogICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgcmV0dXJuIHsKICAgICAgICAgIGtleToga2V5LmtleSwKICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSwKICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgIHN0YXJ0VmFsdWU6IGtleS52YWx1ZUluZGV4LAogICAgICAgICAgZW5kOiB2YWx1ZS5lbmRJbmRleCwKICAgICAgICAgIHdyYXBwaW5nOiBvcGVuLAogICAgICB9OwogIH0KICAvKiogUGFyc2UgYSB0ZXh0dWFsIGlubGluZSBmaWVsZCB2YWx1ZSBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gd29yayB3aXRoLiAqLwogIGZ1bmN0aW9uIHBhcnNlSW5saW5lVmFsdWUodmFsdWUpIHsKICAgICAgLy8gRW1wdHkgaW5saW5lIHZhbHVlcyAoaS5lLiwgbm8gdGV4dCkgc2hvdWxkIG1hcCB0byBudWxsIHRvIG1hdGNoIGxvbmctdGVybSBEYXRhdmlldyBzZW1hbnRpY3MuCiAgICAgIC8vIE51bGwgaXMgYWxzbyBhIG1vcmUgdW5pdmVyc2FsIHR5cGUgdG8gZGVhbCB3aXRoIHRoYW4gc3RyaW5ncywgc2luY2UgYWxsIGZ1bmN0aW9ucyBhY2NlcHQgbnVsbHMuCiAgICAgIGlmICh2YWx1ZS50cmltKCkgPT0gIiIpCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgLy8gVGhlIHN0cmlwcGVkIGxpdGVyYWwgZmllbGQgcGFyc2VyIHVuZGVyc3RhbmRzIGFsbCBvZiB0aGUgbm9uLWFycmF5L25vbi1vYmplY3QgZmllbGRzIGFuZCBjYW4gcGFyc2UgdGhlbSBmb3IgdXMuCiAgICAgIC8vIElubGluZSBmaWVsZCBvYmplY3RzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZDsgaW5saW5lIGFycmF5IG9iamVjdHMgaGF2ZSB0byBiZSBoYW5kbGVkIGJ5IHRoZSBwYXJzZXIKICAgICAgLy8gc2VwYXJhdGVseS4KICAgICAgbGV0IGlubGluZSA9IEVYUFJFU1NJT04uaW5saW5lRmllbGQucGFyc2UodmFsdWUpOwogICAgICBpZiAoaW5saW5lLnN0YXR1cykKICAgICAgICAgIHJldHVybiBpbmxpbmUudmFsdWU7CiAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiB2YWx1ZTsKICB9CiAgLyoqIEV4dHJhY3RzIGlubGluZSBmaWVsZHMgb2YgdGhlIGZvcm0gJ1trZXk6OiB2YWx1ZV0nIGZyb20gYSBsaW5lIG9mIHRleHQuIFRoaXMgaXMgZG9uZSBpbiBhIHJlbGF0aXZlbHkKICAgKiAicm9idXN0IiB3YXkgdG8gYXZvaWQgZmFpbGluZyBkdWUgdG8gYmFkIG5lc3Rpbmcgb3Igb3RoZXIgaW50ZXJmZXJpbmcgTWFya2Rvd24gc3ltYm9sczoKICAgKgogICAqIC0gTG9vayBmb3IgYW55IHdyYXBwZXJzICgnWycgYW5kICcoJykgaW4gdGhlIGxpbmUsIHRyeWluZyB0byBwYXJzZSB3aGF0ZXZlciBjb21lcyBhZnRlciBpdCBhcyBhbiBpbmxpbmUga2V5OjouCiAgICogLSBJZiBzdWNjZXNzZnVsLCBzY2FuIHVudGlsIHlvdSBmaW5kIGEgbWF0Y2hpbmcgZW5kIGJyYWNrZXQsIGFuZCBwYXJzZSB3aGF0ZXZlciByZW1haW5zIGFzIGFuIGlubGluZSB2YWx1ZS4KICAgKi8KICBmdW5jdGlvbiBleHRyYWN0SW5saW5lRmllbGRzKGxpbmUsIGluY2x1ZGVUYXNrRmllbGRzID0gZmFsc2UpIHsKICAgICAgbGV0IGZpZWxkcyA9IFtdOwogICAgICBmb3IgKGxldCB3cmFwcGVyIG9mIE9iamVjdC5rZXlzKElOTElORV9GSUVMRF9XUkFQUEVSUykpIHsKICAgICAgICAgIGxldCBmb3VuZEluZGV4ID0gbGluZS5pbmRleE9mKHdyYXBwZXIpOwogICAgICAgICAgd2hpbGUgKGZvdW5kSW5kZXggPj0gMCkgewogICAgICAgICAgICAgIGxldCBwYXJzZWRGaWVsZCA9IGZpbmRTcGVjaWZpY0lubGluZUZpZWxkKGxpbmUsIGZvdW5kSW5kZXgpOwogICAgICAgICAgICAgIGlmICghcGFyc2VkRmllbGQpIHsKICAgICAgICAgICAgICAgICAgZm91bmRJbmRleCA9IGxpbmUuaW5kZXhPZih3cmFwcGVyLCBmb3VuZEluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBmaWVsZHMucHVzaChwYXJzZWRGaWVsZCk7CiAgICAgICAgICAgICAgZm91bmRJbmRleCA9IGxpbmUuaW5kZXhPZih3cmFwcGVyLCBwYXJzZWRGaWVsZC5lbmQpOwogICAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpbmNsdWRlVGFza0ZpZWxkcykKICAgICAgICAgIGZpZWxkcyA9IGZpZWxkcy5jb25jYXQoZXh0cmFjdFNwZWNpYWxUYXNrRmllbGRzKGxpbmUpKTsKICAgICAgZmllbGRzLnNvcnQoKGEsIGIpID0+IGEuc3RhcnQgLSBiLnN0YXJ0KTsKICAgICAgbGV0IGZpbHRlcmVkRmllbGRzID0gW107CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBpZiAoaSA9PSAwIHx8IGZpbHRlcmVkRmllbGRzW2ZpbHRlcmVkRmllbGRzLmxlbmd0aCAtIDFdLmVuZCA8IGZpZWxkc1tpXS5zdGFydCkgewogICAgICAgICAgICAgIGZpbHRlcmVkRmllbGRzLnB1c2goZmllbGRzW2ldKTsKICAgICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmlsdGVyZWRGaWVsZHM7CiAgfQogIC8qKiBWYWxpZGF0ZXMgdGhhdCBhIHJhdyBmaWVsZCBuYW1lIGhhcyBhIHZhbGlkIGZvcm0uICovCiAgY29uc3QgRlVMTF9MSU5FX0tFWV9QQVJUID0gcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLmFsdChwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMucmVnZXhwKG5ldyBSZWdFeHAoZW1vamlSZWdleCgpLCAidSIpKSwgcGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnJlZ2V4cCgvWzAtOVxwe0xldHRlcn1cd1xzXy8tXSsvdSkpCiAgICAgIC5tYW55KCkKICAgICAgLm1hcChwYXJ0cyA9PiBwYXJ0cy5qb2luKCIiKSk7CiAgY29uc3QgRlVMTF9MSU5FX0tFWV9QQVJTRVIgPSBwYXJzaW1tb25fdW1kX21pbkV4cG9ydHMucmVnZXhwKC9bXjAtOVx3XHB7TGV0dGVyfV0qL3UpCiAgICAgIC50aGVuKEZVTExfTElORV9LRVlfUEFSVCkKICAgICAgLnNraXAocGFyc2ltbW9uX3VtZF9taW5FeHBvcnRzLnJlZ2V4cCgvW19cKn5gXSovdSkpOwogIC8qKiBBdHRlbXB0IHRvIGV4dHJhY3QgYSBmdWxsLWxpbmUgZmllbGQgKEtleTo6IFZhbHVlIGNvbnN1bWluZyB0aGUgZW50aXJlIGNvbnRlbnQgbGluZSkuICovCiAgZnVuY3Rpb24gZXh0cmFjdEZ1bGxMaW5lRmllbGQodGV4dCkgewogICAgICBsZXQgc2VwID0gZmluZFNlcGFyYXRvcih0ZXh0LCAwKTsKICAgICAgaWYgKCFzZXApCiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAvLyBXZSBuZWVkIHRvIHBvc3QtcHJvY2VzcyB0aGUga2V5IHRvIGRyb3AgdW5uZWNlc3Nhcnkgb3BlbmluZyBhbm5vdGF0aW9ucyBhcyB3ZWxsIGFzCiAgICAgIC8vIGRyb3Agc3Vycm91bmRpbmcgTWFya2Rvd24uCiAgICAgIGxldCByZWFsS2V5ID0gRlVMTF9MSU5FX0tFWV9QQVJTRVIucGFyc2Uoc2VwLmtleSk7CiAgICAgIGlmICghcmVhbEtleS5zdGF0dXMpCiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICByZXR1cm4gewogICAgICAgICAga2V5OiByZWFsS2V5LnZhbHVlLAogICAgICAgICAgdmFsdWU6IHRleHQuc3Vic3RyaW5nKHNlcC52YWx1ZUluZGV4KS50cmltKCksCiAgICAgICAgICBzdGFydDogMCwKICAgICAgICAgIHN0YXJ0VmFsdWU6IHNlcC52YWx1ZUluZGV4LAogICAgICAgICAgZW5kOiB0ZXh0Lmxlbmd0aCwKICAgICAgfTsKICB9CiAgY29uc3QgQ1JFQVRFRF9EQVRFX1JFR0VYID0gL1x1ezI3OTV9XHMqKFxkezR9LVxkezJ9LVxkezJ9KS91OwogIGNvbnN0IERVRV9EQVRFX1JFR0VYID0gLyg/Olx1ezFGNEM1fXxcdXsxRjRDNn18XHV7MUY1RDN9XHV7RkUwRn0/KVxzKihcZHs0fS1cZHsyfS1cZHsyfSkvdTsKICBjb25zdCBET05FX0RBVEVfUkVHRVggPSAvXHV7MjcwNX1ccyooXGR7NH0tXGR7Mn0tXGR7Mn0pL3U7CiAgY29uc3QgU0NIRURVTEVEX0RBVEVfUkVHRVggPSAvW1x1ezIzRjN9XHV7MjMxQn1dXHMqKFxkezR9LVxkezJ9LVxkezJ9KS91OwogIGNvbnN0IFNUQVJUX0RBVEVfUkVHRVggPSAvXHV7MUY2RUJ9XHMqKFxkezR9LVxkezJ9LVxkezJ9KS91OwogIGNvbnN0IEVNT0pJX1JFR0VYRVMgPSBbCiAgICAgIHsgcmVnZXg6IENSRUFURURfREFURV9SRUdFWCwga2V5OiAiY3JlYXRlZCIgfSwKICAgICAgeyByZWdleDogU1RBUlRfREFURV9SRUdFWCwga2V5OiAic3RhcnQiIH0sCiAgICAgIHsgcmVnZXg6IFNDSEVEVUxFRF9EQVRFX1JFR0VYLCBrZXk6ICJzY2hlZHVsZWQiIH0sCiAgICAgIHsgcmVnZXg6IERVRV9EQVRFX1JFR0VYLCBrZXk6ICJkdWUiIH0sCiAgICAgIHsgcmVnZXg6IERPTkVfREFURV9SRUdFWCwga2V5OiAiY29tcGxldGlvbiIgfSwKICBdOwogIC8qKiBQYXJzZSBzcGVjaWFsIGNvbXBsZXRlZC9kdWUvZG9uZSB0YXNrIGZpZWxkcyB3aGljaCBhcmUgbWFya2VkIHZpYSBlbW9qaS4gKi8KICBmdW5jdGlvbiBleHRyYWN0U3BlY2lhbFRhc2tGaWVsZHMobGluZSkgewogICAgICBsZXQgcmVzdWx0cyA9IFtdOwogICAgICBmb3IgKGxldCB7IHJlZ2V4LCBrZXkgfSBvZiBFTU9KSV9SRUdFWEVTKSB7CiAgICAgICAgICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWMobGluZSk7CiAgICAgICAgICBpZiAoIW1hdGNoKQogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgcmVzdWx0cy5wdXNoKHsKICAgICAgICAgICAgICBrZXksCiAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLAogICAgICAgICAgICAgIHN0YXJ0OiBtYXRjaC5pbmRleCwKICAgICAgICAgICAgICBzdGFydFZhbHVlOiBtYXRjaC5pbmRleCArIDEsCiAgICAgICAgICAgICAgZW5kOiBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCwKICAgICAgICAgICAgICB3cmFwcGluZzogImVtb2ppLXNob3J0aGFuZCIsCiAgICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0czsKICB9CgogIC8qKiBBbGwgZXh0cmFjdGVkIG1hcmtkb3duIGZpbGUgbWV0YWRhdGEgb2J0YWluZWQgZnJvbSBhIGZpbGUuICovCiAgY2xhc3MgUGFnZU1ldGFkYXRhIHsKICAgICAgLyoqIFRoZSBwYXRoIHRoaXMgZmlsZSBleGlzdHMgYXQuICovCiAgICAgIHBhdGg7CiAgICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBkYXRlIHRoaXMgcGFnZSB3YXMgY3JlYXRlZC4gKi8KICAgICAgY3RpbWU7CiAgICAgIC8qKiBPYnNpZGlhbi1wcm92aWRlZCBkYXRlIHRoaXMgcGFnZSB3YXMgbW9kaWZpZWQuICovCiAgICAgIG10aW1lOwogICAgICAvKiogT2JzaWRpYW4tcHJvdmlkZWQgc2l6ZSBvZiB0aGlzIHBhZ2UgaW4gYnl0ZXMuICovCiAgICAgIHNpemU7CiAgICAgIC8qKiBUaGUgZGF5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhZ2UsIGlmIHJlbGV2YW50LiAqLwogICAgICBkYXk7CiAgICAgIC8qKiBUaGUgZmlyc3QgSDEvSDIgaGVhZGVyIGluIHRoZSBmaWxlLiBNYXkgbm90IGV4aXN0LiAqLwogICAgICB0aXRsZTsKICAgICAgLyoqIEFsbCBvZiB0aGUgZmllbGRzIGNvbnRhaW5lZCBpbiB0aGlzIG1hcmtkb3duIGZpbGUgLSBib3RoIGZyb250bWF0dGVyIEFORCBpbi1maWxlIGxpbmtzLiAqLwogICAgICBmaWVsZHM7CiAgICAgIC8qKiBBbGwgb2YgdGhlIGV4YWN0IHRhZ3MgKHByZWZpeGVkIHdpdGggJyMnKSBpbiB0aGlzIGZpbGUgb3ZlcmFsbC4gKi8KICAgICAgdGFnczsKICAgICAgLyoqIEFsbCBvZiB0aGUgYWxpYXNlcyBkZWZpbmVkIGZvciB0aGlzIGZpbGUuICovCiAgICAgIGFsaWFzZXM7CiAgICAgIC8qKiBBbGwgT1VUR09JTkcgbGlua3MgKGluY2x1ZGluZyBlbWJlZHMsIGhlYWRlciArIGJsb2NrIGxpbmtzKSBpbiB0aGlzIGZpbGUuICovCiAgICAgIGxpbmtzOwogICAgICAvKiogQWxsIGxpc3QgaXRlbXMgY29udGFpbmVkIHdpdGhpbiB0aGlzIHBhZ2UuIEZpbHRlciBmb3IgdGFza3MgdG8gZ2V0IGp1c3QgdGFza3MuICovCiAgICAgIGxpc3RzOwogICAgICAvKiogVGhlIHJhdyBmcm9udG1hdHRlciBmb3IgdGhpcyBkb2N1bWVudC4gKi8KICAgICAgZnJvbnRtYXR0ZXI7CiAgICAgIGNvbnN0cnVjdG9yKHBhdGgsIGluaXQpIHsKICAgICAgICAgIHRoaXMucGF0aCA9IHBhdGg7CiAgICAgICAgICB0aGlzLmZpZWxkcyA9IG5ldyBNYXAoKTsKICAgICAgICAgIHRoaXMuZnJvbnRtYXR0ZXIgPSB7fTsKICAgICAgICAgIHRoaXMudGFncyA9IG5ldyBTZXQoKTsKICAgICAgICAgIHRoaXMuYWxpYXNlcyA9IG5ldyBTZXQoKTsKICAgICAgICAgIHRoaXMubGlua3MgPSBbXTsKICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7CiAgICAgICAgICB0aGlzLmxpc3RzID0gKHRoaXMubGlzdHMgfHwgW10pLm1hcChsID0+IG5ldyBMaXN0SXRlbShsKSk7CiAgICAgIH0KICAgICAgLyoqIENhbm9uaWNhbGl6ZSByYXcgbGlua3MgYW5kIG90aGVyIGRhdGEgaW4gcGFydGlhbCBkYXRhIHdpdGggbm9ybWFsaXplcnMsIHJldHVybmluZyBhIGNvbXBsZXRlZCBvYmplY3QuICovCiAgICAgIHN0YXRpYyBjYW5vbmljYWxpemUoZGF0YSwgbGlua05vcm1hbGl6ZXIpIHsKICAgICAgICAgIC8vIE11dGF0ZSB0aGUgZGF0YSBmb3Igbm93LCB3aGljaCBpcyBwcm9iYWJseSBhIGJhZCBpZGVhIGJ1dC4uLiBhbGwgd2VsbC4KICAgICAgICAgIGlmIChkYXRhLmZyb250bWF0dGVyKSB7CiAgICAgICAgICAgICAgZGF0YS5mcm9udG1hdHRlciA9IFZhbHVlcy5tYXBMZWF2ZXMoZGF0YS5mcm9udG1hdHRlciwgdCA9PiBWYWx1ZXMuaXNMaW5rKHQpID8gbGlua05vcm1hbGl6ZXIodCkgOiB0KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChkYXRhLmZpZWxkcykgewogICAgICAgICAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBkYXRhLmZpZWxkcy5lbnRyaWVzKCkpIHsKICAgICAgICAgICAgICAgICAgZGF0YS5maWVsZHMuc2V0KGtleSwgVmFsdWVzLm1hcExlYXZlcyh2YWx1ZSwgdCA9PiAoVmFsdWVzLmlzTGluayh0KSA/IGxpbmtOb3JtYWxpemVyKHQpIDogdCkpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZGF0YS5saXN0cykgewogICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgZGF0YS5saXN0cykgewogICAgICAgICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgaXRlbS5maWVsZHMuZW50cmllcygpKSB7CiAgICAgICAgICAgICAgICAgICAgICBpdGVtLmZpZWxkcy5zZXQoa2V5LCB2YWx1ZS5tYXAoeCA9PiBWYWx1ZXMubWFwTGVhdmVzKHgsIHQgPT4gKFZhbHVlcy5pc0xpbmsodCkgPyBsaW5rTm9ybWFsaXplcih0KSA6IHQpKSkpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGRhdGEubGlua3MpIHsKICAgICAgICAgICAgICBkYXRhLmxpbmtzID0gZGF0YS5saW5rcy5tYXAobCA9PiBsaW5rTm9ybWFsaXplcihsKSk7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSB1Z2x5LCBidXQgaXQncyBub3QgcG9zc2libGUgdG8gbm9ybWFsaXplIG9uIHRoZSB3b3JrZXIgdGhyZWFkIHRoYXQgZG9lcyBwYXJzaW5nLgogICAgICAgICAgLy8gVGhlIGJlc3Qgd2F5IHRvIGltcHJvdmUgdGhpcyBpcyB0byBpbnN0ZWFkIGp1c3QgY2Fub25pY2FsaXplIHRoZSBlbnRpcmUgZGF0YSBvYmplY3Q7IEkgY2FuIHRyeSB0bwogICAgICAgICAgLy8gb3B0aW1pemUgYFZhbHVlcy5tYXBMZWF2ZXNgIHRvIG9ubHkgbXV0YXRlIGlmIGl0IGFjdHVhbGx5IGNoYW5nZXMgdGhpbmdzLgogICAgICAgICAgcmV0dXJuIG5ldyBQYWdlTWV0YWRhdGEoZGF0YS5wYXRoLCBkYXRhKTsKICAgICAgfQogICAgICAvKiogVGhlIG5hbWUgKGJhc2VkIG9uIHBhdGgpIG9mIHRoaXMgZmlsZS4gKi8KICAgICAgbmFtZSgpIHsKICAgICAgICAgIHJldHVybiBnZXRGaWxlVGl0bGUodGhpcy5wYXRoKTsKICAgICAgfQogICAgICAvKiogVGhlIGNvbnRhaW5pbmcgZm9sZGVyIChiYXNlZCBvbiBwYXRoKSBvZiB0aGlzIGZpbGUuICovCiAgICAgIGZvbGRlcigpIHsKICAgICAgICAgIHJldHVybiBnZXRQYXJlbnRGb2xkZXIodGhpcy5wYXRoKTsKICAgICAgfQogICAgICAvKiogVGhlIGV4dGVuc2lvbiBvZiB0aGlzIGZpbGUgKGxpa2VseSAnbWQnKS4gKi8KICAgICAgZXh0ZW5zaW9uKCkgewogICAgICAgICAgcmV0dXJuIGdldEV4dGVuc2lvbih0aGlzLnBhdGgpOwogICAgICB9CiAgICAgIC8qKiBSZXR1cm4gYSBzZXQgb2YgdGFncyBBTkQgYWxsIG9mIHRoZWlyIHBhcmVudCB0YWdzIChzbyAjaGVsbG8veWVzIHdvdWxkIGJlY29tZSAjaGVsbG8sICNoZWxsby95ZXMpLiAqLwogICAgICBmdWxsVGFncygpIHsKICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgU2V0KCk7CiAgICAgICAgICBmb3IgKGxldCB0YWcgb2YgdGhpcy50YWdzKSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgc3VidGFnIG9mIGV4dHJhY3RTdWJ0YWdzKHRhZykpCiAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoc3VidGFnKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgLyoqIENvbnZlcnQgYWxsIGxpbmtzIGluIHRoaXMgZmlsZSB0byBmaWxlIGxpbmtzLiAqLwogICAgICBmaWxlTGlua3MoKSB7CiAgICAgICAgICAvLyBXZSB3YW50IHRvIG1ha2UgdGhlbSBkaXN0aW5jdCwgYnV0IHdoZXJlIGxpbmtzIGFyZSBub3QgcmF3IGxpbmtzIHdlCiAgICAgICAgICAvLyBub3cga2VlcCB0aGUgYWRkaXRpb25hbCBtZXRhZGF0YS4KICAgICAgICAgIGxldCBkaXN0aW5jdExpbmtzID0gbmV3IFNldCh0aGlzLmxpbmtzKTsKICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKGRpc3RpbmN0TGlua3MpOwogICAgICB9CiAgICAgIC8qKiBNYXAgdGhpcyBtZXRhZGF0YSB0byBhIGZ1bGwgb2JqZWN0OyB1c2VzIHRoZSBpbmRleCBmb3IgYWRkaXRpb25hbCBkYXRhIGxvb2t1cHMuICAqLwogICAgICBzZXJpYWxpemUoaW5kZXgsIGNhY2hlKSB7CiAgICAgICAgICAvLyBDb252ZXJ0IGxpc3QgaXRlbXMgdmlhIHRoZSBjYW5vbmljYWxpemF0aW9uIGNhY2hlLgogICAgICAgICAgbGV0IHJlYWxDYWNoZSA9IGNhY2hlID8/IG5ldyBMaXN0U2VyaWFsaXphdGlvbkNhY2hlKHRoaXMubGlzdHMpOwogICAgICAgICAgbGV0IHJlc3VsdCA9IHsKICAgICAgICAgICAgICBmaWxlOiB7CiAgICAgICAgICAgICAgICAgIHBhdGg6IHRoaXMucGF0aCwKICAgICAgICAgICAgICAgICAgZm9sZGVyOiB0aGlzLmZvbGRlcigpLAogICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUoKSwKICAgICAgICAgICAgICAgICAgbGluazogTGluay5maWxlKHRoaXMucGF0aCksCiAgICAgICAgICAgICAgICAgIG91dGxpbmtzOiB0aGlzLmZpbGVMaW5rcygpLAogICAgICAgICAgICAgICAgICBpbmxpbmtzOiBBcnJheS5mcm9tKGluZGV4LmxpbmtzLmdldEludmVyc2UodGhpcy5wYXRoKSkubWFwKGwgPT4gTGluay5maWxlKGwpKSwKICAgICAgICAgICAgICAgICAgZXRhZ3M6IEFycmF5LmZyb20odGhpcy50YWdzKSwKICAgICAgICAgICAgICAgICAgdGFnczogQXJyYXkuZnJvbSh0aGlzLmZ1bGxUYWdzKCkpLAogICAgICAgICAgICAgICAgICBhbGlhc2VzOiBBcnJheS5mcm9tKHRoaXMuYWxpYXNlcyksCiAgICAgICAgICAgICAgICAgIGxpc3RzOiB0aGlzLmxpc3RzLm1hcChsID0+IHJlYWxDYWNoZS5nZXQobC5saW5lKSksCiAgICAgICAgICAgICAgICAgIHRhc2tzOiB0aGlzLmxpc3RzLmZpbHRlcihsID0+ICEhbC50YXNrKS5tYXAobCA9PiByZWFsQ2FjaGUuZ2V0KGwubGluZSkpLAogICAgICAgICAgICAgICAgICBjdGltZTogdGhpcy5jdGltZSwKICAgICAgICAgICAgICAgICAgY2RheTogc3RyaXBUaW1lKHRoaXMuY3RpbWUpLAogICAgICAgICAgICAgICAgICBtdGltZTogdGhpcy5tdGltZSwKICAgICAgICAgICAgICAgICAgbWRheTogc3RyaXBUaW1lKHRoaXMubXRpbWUpLAogICAgICAgICAgICAgICAgICBzaXplOiB0aGlzLnNpemUsCiAgICAgICAgICAgICAgICAgIHN0YXJyZWQ6IGluZGV4LnN0YXJyZWQuc3RhcnJlZCh0aGlzLnBhdGgpLAogICAgICAgICAgICAgICAgICBmcm9udG1hdHRlcjogVmFsdWVzLmRlZXBDb3B5KHRoaXMuZnJvbnRtYXR0ZXIpLAogICAgICAgICAgICAgICAgICBleHQ6IHRoaXMuZXh0ZW5zaW9uKCksCiAgICAgICAgICAgICAgfSwKICAgICAgICAgIH07CiAgICAgICAgICAvLyBBZGQgdGhlIGN1cnJlbnQgZGF5IGlmIHByZXNlbnQuCiAgICAgICAgICBpZiAodGhpcy5kYXkpCiAgICAgICAgICAgICAgcmVzdWx0LmZpbGUuZGF5ID0gdGhpcy5kYXk7CiAgICAgICAgICAvLyBUaGVuIGFwcGVuZCB0aGUgY29tcHV0ZWQgZmllbGRzLgogICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIHRoaXMuZmllbGRzLmVudHJpZXMoKSkgewogICAgICAgICAgICAgIGlmIChrZXkgaW4gcmVzdWx0KQogICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gRG9uJ3QgYWxsb3cgZmllbGRzIHRvIG92ZXJyaWRlIGV4aXN0aW5nIGtleXMuCiAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICB9CiAgLyoqIEEgbGlzdCBpdGVtIGluc2lkZSBvZiBhIGxpc3QuICovCiAgY2xhc3MgTGlzdEl0ZW0gewogICAgICAvKiogVGhlIHN5bWJvbCAoJyonLCAnLScsICcxLicpIHVzZWQgdG8gZGVmaW5lIHRoaXMgbGlzdCBpdGVtLiAqLwogICAgICBzeW1ib2w7CiAgICAgIC8qKiBBIGxpbmsgd2hpY2ggcG9pbnRzIHRvIHRoaXMgdGFzaywgb3IgdG8gdGhlIGNsb3Nlc3QgYmxvY2sgdGhhdCB0aGlzIHRhc2sgaXMgY29udGFpbmVkIGluLiAqLwogICAgICBsaW5rOwogICAgICAvKiogQSBsaW5rIHRvIHRoZSBzZWN0aW9uIHRoYXQgY29udGFpbnMgdGhpcyBsaXN0IGVsZW1lbnQ7IGNvdWxkIGJlIGEgZmlsZSBpZiB0aGlzIGlzIG5vdCBpbiBhIHNlY3Rpb24uICovCiAgICAgIHNlY3Rpb247CiAgICAgIC8qKiBUaGUgdGV4dCBvZiB0aGlzIGxpc3QgaXRlbS4gVGhpcyBtYXkgYmUgbXVsdGlwbGUgbGluZXMgb2YgbWFya2Rvd24uICovCiAgICAgIHRleHQ7CiAgICAgIC8qKiBUaGUgbGluZSB0aGF0IHRoaXMgbGlzdCBpdGVtIHN0YXJ0cyBvbiBpbiB0aGUgZmlsZS4gKi8KICAgICAgbGluZTsKICAgICAgLyoqIFRoZSBudW1iZXIgb2YgbGluZXMgdGhhdCBkZWZpbmUgdGhpcyBsaXN0IGl0ZW0uICovCiAgICAgIGxpbmVDb3VudDsKICAgICAgLyoqIFRoZSBsaW5lIG51bWJlciBmb3IgdGhlIGZpcnN0IGxpc3QgaXRlbSBpbiB0aGUgbGlzdCB0aGlzIGl0ZW0gYmVsb25ncyB0by4gKi8KICAgICAgbGlzdDsKICAgICAgLyoqIEFueSBsaW5rcyBjb250YWluZWQgd2l0aGluIHRoaXMgbGlzdCBpdGVtLiAqLwogICAgICBsaW5rczsKICAgICAgLyoqIFRoZSB0YWdzIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBsaXN0IGl0ZW0uICovCiAgICAgIHRhZ3M7CiAgICAgIC8qKiBUaGUgcmF3IE9ic2lkaWFuLXByb3ZpZGVkIHBvc2l0aW9uIGZvciB3aGVyZSB0aGlzIHRhc2sgaXMuICovCiAgICAgIHBvc2l0aW9uOwogICAgICAvKiogVGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBwYXJlbnQgbGlzdCBpdGVtLCBpZiBwcmVzZW50OyBpZiB0aGlzIGlzIHVuZGVmaW5lZCwgdGhpcyBpcyBhIHJvb3QgaXRlbS4gKi8KICAgICAgcGFyZW50OwogICAgICAvKiogVGhlIGxpbmUgbnVtYmVycyBvZiBjaGlsZHJlbiBvZiB0aGlzIGxpc3QgaXRlbS4gKi8KICAgICAgY2hpbGRyZW47CiAgICAgIC8qKiBUaGUgYmxvY2sgSUQgZm9yIHRoaXMgaXRlbSwgaWYgb25lIGlzIHByZXNlbnQuICovCiAgICAgIGJsb2NrSWQ7CiAgICAgIC8qKiBBbnkgZmllbGRzIGRlZmluZWQgaW4gdGhpcyBsaXN0IGl0ZW0uIEZvciB0YXNrcywgdGhpcyBpbmNsdWRlcyBmaWVsZHMgdW5kZXJuZWF0aCB0aGUgdGFzay4gKi8KICAgICAgZmllbGRzOwogICAgICB0YXNrOwogICAgICBjb25zdHJ1Y3Rvcihpbml0KSB7CiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGluaXQpOwogICAgICAgICAgdGhpcy5maWVsZHMgPSB0aGlzLmZpZWxkcyB8fCBuZXcgTWFwKCk7CiAgICAgICAgICB0aGlzLnRhZ3MgPSB0aGlzLnRhZ3MgfHwgbmV3IFNldCgpOwogICAgICAgICAgdGhpcy5jaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4gfHwgW107CiAgICAgICAgICB0aGlzLmxpbmtzID0gdGhpcy5saW5rcyB8fCBbXTsKICAgICAgfQogICAgICBpZCgpIHsKICAgICAgICAgIHJldHVybiBgJHt0aGlzLmZpbGUoKS5wYXRofS0ke3RoaXMubGluZX1gOwogICAgICB9CiAgICAgIGZpbGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5saW5rLnRvRmlsZSgpOwogICAgICB9CiAgICAgIG1hcmtkb3duKCkgewogICAgICAgICAgaWYgKHRoaXMudGFzaykKICAgICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5zeW1ib2x9IFske3RoaXMudGFzay5jb21wbGV0ZWQgPyAieCIgOiAiICJ9XSAke3RoaXMudGV4dH1gOwogICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLnN5bWJvbH0gJHt0aGlzLnRleHR9YDsKICAgICAgfQogICAgICBjcmVhdGVkKCkgewogICAgICAgICAgcmV0dXJuICh0aGlzLmZpZWxkcy5nZXQoImNyZWF0ZWQiKSA/PyB0aGlzLmZpZWxkcy5nZXQoImN0aW1lIikgPz8gdGhpcy5maWVsZHMuZ2V0KCJjZGF5IikpPy5bMF07CiAgICAgIH0KICAgICAgZHVlKCkgewogICAgICAgICAgcmV0dXJuICh0aGlzLmZpZWxkcy5nZXQoImR1ZSIpID8/IHRoaXMuZmllbGRzLmdldCgiZHVldGltZSIpID8/IHRoaXMuZmllbGRzLmdldCgiZHVlZGF5IikpPy5bMF07CiAgICAgIH0KICAgICAgY29tcGxldGVkKCkgewogICAgICAgICAgcmV0dXJuICh0aGlzLmZpZWxkcy5nZXQoImNvbXBsZXRlZCIpID8/CiAgICAgICAgICAgICAgdGhpcy5maWVsZHMuZ2V0KCJjb21wbGV0aW9uIikgPz8KICAgICAgICAgICAgICB0aGlzLmZpZWxkcy5nZXQoImNvbXB0aW1lIikgPz8KICAgICAgICAgICAgICB0aGlzLmZpZWxkcy5nZXQoImNvbXBkYXkiKSk/LlswXTsKICAgICAgfQogICAgICBzdGFydCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmZpZWxkcy5nZXQoInN0YXJ0Iik/LlswXTsKICAgICAgfQogICAgICBzY2hlZHVsZWQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5maWVsZHMuZ2V0KCJzY2hlZHVsZWQiKT8uWzBdOwogICAgICB9CiAgICAgIC8qKiBDcmVhdGUgYW4gQVBJLWZyaWVuZGx5IGNvcHkgb2YgdGhpcyBsaXN0IGl0ZW0uIERlLWR1cGxpY2F0aW9uIGlzIGRvbmUgdmlhIHRoZSBwcm92aWRlZCBjYWNoZS4gKi8KICAgICAgc2VyaWFsaXplKGNhY2hlKSB7CiAgICAgICAgICAvLyBNYXAgY2hpbGRyZW4gdG8gdGhlaXIgc2VyaWFsaXplZC9kZS1kdXBsaWNhdGVkIGVxdWl2YWxlbnRzIHJpZ2h0IGF3YXkuCiAgICAgICAgICBsZXQgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuLm1hcChsID0+IGNhY2hlLmdldChsKSkuZmlsdGVyKChsKSA9PiBsICE9PSB1bmRlZmluZWQpOwogICAgICAgICAgbGV0IHJlc3VsdCA9IHsKICAgICAgICAgICAgICBzeW1ib2w6IHRoaXMuc3ltYm9sLAogICAgICAgICAgICAgIGxpbms6IHRoaXMubGluaywKICAgICAgICAgICAgICBzZWN0aW9uOiB0aGlzLnNlY3Rpb24sCiAgICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0LAogICAgICAgICAgICAgIHRhZ3M6IEFycmF5LmZyb20odGhpcy50YWdzKSwKICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsCiAgICAgICAgICAgICAgbGluZUNvdW50OiB0aGlzLmxpbmVDb3VudCwKICAgICAgICAgICAgICBsaXN0OiB0aGlzLmxpc3QsCiAgICAgICAgICAgICAgb3V0bGlua3M6IEFycmF5LmZyb20odGhpcy5saW5rcyksCiAgICAgICAgICAgICAgcGF0aDogdGhpcy5saW5rLnBhdGgsCiAgICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLAogICAgICAgICAgICAgIHRhc2s6ICEhdGhpcy50YXNrLAogICAgICAgICAgICAgIGFubm90YXRlZDogdGhpcy5maWVsZHMuc2l6ZSA+IDAsCiAgICAgICAgICAgICAgcG9zaXRpb246IFZhbHVlcy5kZWVwQ29weSh0aGlzLnBvc2l0aW9uKSwKICAgICAgICAgICAgICBzdWJ0YXNrczogY2hpbGRyZW4sCiAgICAgICAgICAgICAgcmVhbDogISF0aGlzLnRhc2ssCiAgICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnNlY3Rpb24sIC8vIEBkZXByZWNhdGVkLCB1c2UgJ2l0ZW0uc2VjdGlvbicgaW5zdGVhZC4KICAgICAgICAgIH07CiAgICAgICAgICBpZiAodGhpcy5wYXJlbnQgfHwgdGhpcy5wYXJlbnQgPT09IDApCiAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHRoaXMucGFyZW50OwogICAgICAgICAgaWYgKHRoaXMuYmxvY2tJZCkKICAgICAgICAgICAgICByZXN1bHQuYmxvY2tJZCA9IHRoaXMuYmxvY2tJZDsKICAgICAgICAgIGFkZEZpZWxkcyh0aGlzLmZpZWxkcywgcmVzdWx0KTsKICAgICAgICAgIGlmICh0aGlzLnRhc2spIHsKICAgICAgICAgICAgICByZXN1bHQuc3RhdHVzID0gdGhpcy50YXNrLnN0YXR1czsKICAgICAgICAgICAgICByZXN1bHQuY2hlY2tlZCA9IHRoaXMudGFzay5jaGVja2VkOwogICAgICAgICAgICAgIHJlc3VsdC5jb21wbGV0ZWQgPSB0aGlzLnRhc2suY29tcGxldGVkOwogICAgICAgICAgICAgIHJlc3VsdC5mdWxseUNvbXBsZXRlZCA9IHRoaXMudGFzay5mdWxseUNvbXBsZXRlZDsKICAgICAgICAgICAgICBsZXQgY3JlYXRlZCA9IHRoaXMuY3JlYXRlZCgpLCBkdWUgPSB0aGlzLmR1ZSgpLCBjb21wbGV0ZWQgPSB0aGlzLmNvbXBsZXRlZCgpLCBzdGFydCA9IHRoaXMuc3RhcnQoKSwgc2NoZWR1bGVkID0gdGhpcy5zY2hlZHVsZWQoKTsKICAgICAgICAgICAgICBpZiAoY3JlYXRlZCkKICAgICAgICAgICAgICAgICAgcmVzdWx0LmNyZWF0ZWQgPSBWYWx1ZXMuZGVlcENvcHkoY3JlYXRlZCk7CiAgICAgICAgICAgICAgaWYgKGR1ZSkKICAgICAgICAgICAgICAgICAgcmVzdWx0LmR1ZSA9IFZhbHVlcy5kZWVwQ29weShkdWUpOwogICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQpCiAgICAgICAgICAgICAgICAgIHJlc3VsdC5jb21wbGV0aW9uID0gVmFsdWVzLmRlZXBDb3B5KGNvbXBsZXRlZCk7CiAgICAgICAgICAgICAgaWYgKHN0YXJ0KQogICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQgPSBWYWx1ZXMuZGVlcENvcHkoc3RhcnQpOwogICAgICAgICAgICAgIGlmIChzY2hlZHVsZWQpCiAgICAgICAgICAgICAgICAgIHJlc3VsdC5zY2hlZHVsZWQgPSBWYWx1ZXMuZGVlcENvcHkoc2NoZWR1bGVkKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICB9CiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgLy8gQ29udmVyc2lvbiAvIFNlcmlhbGl6YXRpb24gVXRpbGl0aWVzIC8vCiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgLyoqIERlLWR1cGxpY2F0ZXMgbGlzdCBpdGVtcyBhY3Jvc3Mgc2VjdGlvbiBtZXRhZGF0YSBhbmQgcGFnZSBtZXRhZGF0YS4gKi8KICBjbGFzcyBMaXN0U2VyaWFsaXphdGlvbkNhY2hlIHsKICAgICAgbGlzdEl0ZW1zOwogICAgICBjYWNoZTsKICAgICAgc2VlbjsKICAgICAgY29uc3RydWN0b3IobGlzdEl0ZW1zKSB7CiAgICAgICAgICB0aGlzLmxpc3RJdGVtcyA9IHt9OwogICAgICAgICAgdGhpcy5jYWNoZSA9IHt9OwogICAgICAgICAgdGhpcy5zZWVuID0gbmV3IFNldCgpOwogICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBsaXN0SXRlbXMpCiAgICAgICAgICAgICAgdGhpcy5saXN0SXRlbXNbaXRlbS5saW5lXSA9IGl0ZW07CiAgICAgIH0KICAgICAgZ2V0KGxpbmVubykgewogICAgICAgICAgaWYgKGxpbmVubyBpbiB0aGlzLmNhY2hlKQogICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlW2xpbmVub107CiAgICAgICAgICBlbHNlIGlmICh0aGlzLnNlZW4uaGFzKGxpbmVubykpIHsKICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRGF0YXZpZXc6IEVuY291bnRlcmVkIGEgY2lyY3VsYXIgbGlzdCAobGluZSBudW1iZXIgJHtsaW5lbm99OyBjaGlsZHJlbiAke3RoaXMubGlzdEl0ZW1zW2xpbmVub10uY2hpbGRyZW4uam9pbigiLCAiKX0pYCk7CiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuc2Vlbi5hZGQobGluZW5vKTsKICAgICAgICAgIGxldCByZXN1bHQgPSB0aGlzLmxpc3RJdGVtc1tsaW5lbm9dLnNlcmlhbGl6ZSh0aGlzKTsKICAgICAgICAgIHRoaXMuY2FjaGVbbGluZW5vXSA9IHJlc3VsdDsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICB9CiAgZnVuY3Rpb24gYWRkRmllbGRzKGZpZWxkcywgdGFyZ2V0KSB7CiAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlc10gb2YgZmllbGRzLmVudHJpZXMoKSkgewogICAgICAgICAgaWYgKGtleSBpbiB0YXJnZXQpCiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlcy5sZW5ndGggPT0gMSA/IHZhbHVlc1swXSA6IHZhbHVlczsKICAgICAgfQogICAgICByZXR1cm4gdGFyZ2V0OwogIH0KCiAgLyoqIENvbW1vbiB1dGlsaXRpZXMgZm9yIGV4dHJhY3RpbmcgdGFncywgbGlua3MsIGFuZCBvdGhlciBidXNpbmVzcyBmcm9tIG1ldGFkYXRhLiAqLwogIGNvbnN0IFBPVEVOVElBTF9UQUdfTUFUQ0hFUiA9IC8jW15ccyw7XC46IVw/JyJgKClcW1xdXHtcfV0rL2dpdTsKICAvKiogRXh0cmFjdCBhbGwgdGFncyBmcm9tIHRoZSBnaXZlbiBzb3VyY2Ugc3RyaW5nLiAqLwogIGZ1bmN0aW9uIGV4dHJhY3RUYWdzJDEoc291cmNlKSB7CiAgICAgIGxldCByZXN1bHQgPSBuZXcgU2V0KCk7CiAgICAgIGxldCBtYXRjaGVzID0gc291cmNlLm1hdGNoQWxsKFBPVEVOVElBTF9UQUdfTUFUQ0hFUik7CiAgICAgIGZvciAobGV0IG1hdGNoIG9mIG1hdGNoZXMpIHsKICAgICAgICAgIGxldCBwYXJzZWQgPSBFWFBSRVNTSU9OLnRhZy5wYXJzZShtYXRjaFswXSk7CiAgICAgICAgICBpZiAocGFyc2VkLnN0YXR1cykKICAgICAgICAgICAgICByZXN1bHQuYWRkKHBhcnNlZC52YWx1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKiBJbXBvcnRlciBmb3IgbWFya2Rvd24gZG9jdW1lbnRzLiAqLwogIC8qKiBFeHRyYWN0IG1hcmtkb3duIG1ldGFkYXRhIGZyb20gdGhlIGdpdmVuIE9ic2lkaWFuIG1hcmtkb3duIGZpbGUuICovCiAgZnVuY3Rpb24gcGFyc2VQYWdlKHBhdGgsIGNvbnRlbnRzLCBzdGF0LCBtZXRhZGF0YSkgewogICAgICBsZXQgdGFncyA9IG5ldyBTZXQoKTsKICAgICAgbGV0IGFsaWFzZXMgPSBuZXcgU2V0KCk7CiAgICAgIGxldCBmaWVsZHMgPSBuZXcgTWFwKCk7CiAgICAgIGxldCBsaW5rcyA9IFtdOwogICAgICAvLyBGaWxlIHRhZ3MsIGluY2x1ZGluZyBmcm9udC1tYXR0ZXIgYW5kIGluLWZpbGUgdGFncy4KICAgICAgKG1ldGFkYXRhLnRhZ3MgfHwgW10pLmZvckVhY2godCA9PiB0YWdzLmFkZCh0LnRhZy5zdGFydHNXaXRoKCIjIikgPyB0LnRhZyA6ICIjIiArIHQudGFnKSk7CiAgICAgIC8vIEZyb250LW1hdHRlciBmaWxlIHRhZ3MsIGFsaWFzZXMsIEFORCBmcm9udG1hdHRlciBwcm9wZXJ0aWVzLgogICAgICBpZiAobWV0YWRhdGEuZnJvbnRtYXR0ZXIpIHsKICAgICAgICAgIGZvciAobGV0IHRhZyBvZiBleHRyYWN0VGFncyhtZXRhZGF0YS5mcm9udG1hdHRlcikpIHsKICAgICAgICAgICAgICBpZiAoIXRhZy5zdGFydHNXaXRoKCIjIikpCiAgICAgICAgICAgICAgICAgIHRhZyA9ICIjIiArIHRhZzsKICAgICAgICAgICAgICB0YWdzLmFkZCh0YWcpOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChsZXQgYWxpYXMgb2YgZXh0cmFjdEFsaWFzZXMobWV0YWRhdGEuZnJvbnRtYXR0ZXIpIHx8IFtdKQogICAgICAgICAgICAgIGFsaWFzZXMuYWRkKGFsaWFzKTsKICAgICAgICAgIGxldCBmcm9udEZpZWxkcyA9IHBhcnNlRnJvbnRtYXR0ZXIobWV0YWRhdGEuZnJvbnRtYXR0ZXIpOwogICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZyb250RmllbGRzKSkgewogICAgICAgICAgICAgIGlmIChrZXkgPT0gInBvc2l0aW9uIikKICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgYWRkSW5saW5lRmllbGQoa2V5LCB2YWx1ZSwgZmllbGRzKTsKICAgICAgICAgIH0KICAgICAgfQogICAgICAvLyBBZGQgZnJvbnRtYXR0ZXIgbGlua3MgdG8gbGlua3MuCiAgICAgIGlmIChtZXRhZGF0YS5mcm9udG1hdHRlckxpbmtzKSB7CiAgICAgICAgICBmb3IgKGxldCByYXdMaW5rIG9mIG1ldGFkYXRhLmZyb250bWF0dGVyTGlua3MgfHwgW10pIHsKICAgICAgICAgICAgICBjb25zdCBsaW5rID0gTGluay5pbmZlcihyYXdMaW5rLmxpbmssIGZhbHNlLCByYXdMaW5rLmRpc3BsYXlUZXh0KTsKICAgICAgICAgICAgICBsaW5rcy5wdXNoKGxpbmspOwogICAgICAgICAgfQogICAgICB9CiAgICAgIC8vIExpbmtzIGluIG1ldGFkYXRhLgogICAgICBjb25zdCBsaW5rc0J5TGluZSA9IHt9OwogICAgICBmb3IgKGxldCByYXdMaW5rIG9mIG1ldGFkYXRhLmxpbmtzIHx8IFtdKSB7CiAgICAgICAgICBjb25zdCBsaW5rID0gTGluay5pbmZlcihyYXdMaW5rLmxpbmssIGZhbHNlLCByYXdMaW5rLmRpc3BsYXlUZXh0KTsKICAgICAgICAgIGNvbnN0IGxpbmUgPSByYXdMaW5rLnBvc2l0aW9uLnN0YXJ0LmxpbmU7CiAgICAgICAgICBsaW5rcy5wdXNoKGxpbmspOwogICAgICAgICAgaWYgKCEobGluZSBpbiBsaW5rc0J5TGluZSkpCiAgICAgICAgICAgICAgbGlua3NCeUxpbmVbbGluZV0gPSBbbGlua107CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgbGlua3NCeUxpbmVbbGluZV0ucHVzaChsaW5rKTsKICAgICAgfQogICAgICAvLyBFbWJlZCBMaW5rcyBpbiBtZXRhZGF0YS4KICAgICAgZm9yIChsZXQgcmF3RW1iZWQgb2YgbWV0YWRhdGEuZW1iZWRzIHx8IFtdKSB7CiAgICAgICAgICBjb25zdCBsaW5rID0gTGluay5pbmZlcihyYXdFbWJlZC5saW5rLCB0cnVlLCByYXdFbWJlZC5kaXNwbGF5VGV4dCk7CiAgICAgICAgICBjb25zdCBsaW5lID0gcmF3RW1iZWQucG9zaXRpb24uc3RhcnQubGluZTsKICAgICAgICAgIGxpbmtzLnB1c2gobGluayk7CiAgICAgICAgICBpZiAoIShsaW5lIGluIGxpbmtzQnlMaW5lKSkKICAgICAgICAgICAgICBsaW5rc0J5TGluZVtsaW5lXSA9IFtsaW5rXTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBsaW5rc0J5TGluZVtsaW5lXS5wdXNoKGxpbmspOwogICAgICB9CiAgICAgIC8vIE1lcmdlIGZyb250bWF0dGVyIGZpZWxkcyB3aXRoIHBhcnNlZCBmaWVsZHMuCiAgICAgIGxldCBtYXJrZG93bkRhdGEgPSBwYXJzZU1hcmtkb3duKHBhdGgsIGNvbnRlbnRzLnNwbGl0KCJcbiIpLCBtZXRhZGF0YSwgbGlua3NCeUxpbmUpOwogICAgICBtZXJnZUZpZWxkR3JvdXBzKGZpZWxkcywgbWFya2Rvd25EYXRhLmZpZWxkcyk7CiAgICAgIC8vIFN0cmlwICJwb3NpdGlvbiIgZnJvbSBmcm9udG1hdHRlciBzaW5jZSBpdCBpcyBPYnNpZGlhbiBkZXRlcm1pbmVkLgogICAgICBjb25zdCBmcm9udG1hdHRlciA9IG1ldGFkYXRhLmZyb250bWF0dGVyIHx8IHt9OwogICAgICBpZiAoZnJvbnRtYXR0ZXIgJiYgInBvc2l0aW9uIiBpbiBmcm9udG1hdHRlcikKICAgICAgICAgIGRlbGV0ZSBmcm9udG1hdHRlclsicG9zaXRpb24iXTsKICAgICAgcmV0dXJuIG5ldyBQYWdlTWV0YWRhdGEocGF0aCwgewogICAgICAgICAgdGFncywKICAgICAgICAgIGFsaWFzZXMsCiAgICAgICAgICBsaW5rcywKICAgICAgICAgIGxpc3RzOiBtYXJrZG93bkRhdGEubGlzdHMsCiAgICAgICAgICBmaWVsZHM6IGZpbmFsaXplSW5saW5lRmllbGRzKGZpZWxkcyksCiAgICAgICAgICBmcm9udG1hdHRlcjogZnJvbnRtYXR0ZXIsCiAgICAgICAgICBjdGltZTogRGF0ZVRpbWUuZnJvbU1pbGxpcyhzdGF0LmN0aW1lKSwKICAgICAgICAgIG10aW1lOiBEYXRlVGltZS5mcm9tTWlsbGlzKHN0YXQubXRpbWUpLAogICAgICAgICAgc2l6ZTogc3RhdC5zaXplLAogICAgICAgICAgZGF5OiBmaW5kRGF0ZShwYXRoLCBmaWVsZHMpLAogICAgICB9KTsKICB9CiAgLyoqIEV4dHJhY3QgdGFncyBpbnRlbGxpZ2VudGx5IGZyb20gZnJvbnRtYXR0ZXIuIEhhbmRsZXMgYXJyYXlzLCBudW1iZXJzLCBhbmQgc3RyaW5ncy4gKi8KICBmdW5jdGlvbiBleHRyYWN0VGFncyhtZXRhZGF0YSkgewogICAgICBsZXQgdGFnS2V5cyA9IE9iamVjdC5rZXlzKG1ldGFkYXRhKS5maWx0ZXIodCA9PiB0LnRvTG93ZXJDYXNlKCkgPT0gInRhZ3MiIHx8IHQudG9Mb3dlckNhc2UoKSA9PSAidGFnIik7CiAgICAgIHJldHVybiB0YWdLZXlzCiAgICAgICAgICAubWFwKGsgPT4gc3BsaXRGcm9udG1hdHRlclRhZ09yQWxpYXMobWV0YWRhdGFba10sIC9bLFxzXSsvKSkKICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IHAuY29uY2F0KGMpLCBbXSkKICAgICAgICAgIC5tYXAoc3RyID0+IChzdHIuc3RhcnRzV2l0aCgiIyIpID8gc3RyIDogIiMiICsgc3RyKSk7CiAgfQogIC8qKiBFeHRyYWN0IGFsaWFzZXMgaW50ZWxsaWdlbnRseSBmcm9tIGZyb250bWF0dGVyLiBIYW5kbGVzIGFycmF5cywgbnVtYmVycywgYW5kIHN0cmluZ3MuICAqLwogIGZ1bmN0aW9uIGV4dHJhY3RBbGlhc2VzKG1ldGFkYXRhKSB7CiAgICAgIGxldCBhbGlhc0tleXMgPSBPYmplY3Qua2V5cyhtZXRhZGF0YSkuZmlsdGVyKHQgPT4gdC50b0xvd2VyQ2FzZSgpID09ICJhbGlhcyIgfHwgdC50b0xvd2VyQ2FzZSgpID09ICJhbGlhc2VzIik7CiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdOwogICAgICBmb3IgKGxldCBrZXkgb2YgYWxpYXNLZXlzKSB7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1ldGFkYXRhW2tleV07CiAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKQogICAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnZhbHVlLm1hcCh2ID0+ICgiIiArIHYpLnRyaW0oKSkpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnNwbGl0RnJvbnRtYXR0ZXJUYWdPckFsaWFzKHZhbHVlLCAvLC8pKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogIH0KICAvKiogU3BsaXQgYSBmcm9udG1hdHRlciBsaXN0IGludG8gc2VwYXJhdGUgZWxlbWVudHM7IGhhbmRsZXMgYWN0dWFsIGxpc3RzLCBjb21tYSBzZXBhcmF0ZWQgbGlzdHMsIGFuZCBzaW5nbGUgZWxlbWVudHMuICovCiAgZnVuY3Rpb24gc3BsaXRGcm9udG1hdHRlclRhZ09yQWxpYXMoZGF0YSwgb24pIHsKICAgICAgaWYgKGRhdGEgPT0gbnVsbCB8fCBkYXRhID09IHVuZGVmaW5lZCkKICAgICAgICAgIHJldHVybiBbXTsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHsKICAgICAgICAgIHJldHVybiBkYXRhCiAgICAgICAgICAgICAgLmZpbHRlcihzID0+ICEhcykKICAgICAgICAgICAgICAubWFwKHMgPT4gc3BsaXRGcm9udG1hdHRlclRhZ09yQWxpYXMocywgb24pKQogICAgICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IHAuY29uY2F0KGMpLCBbXSk7CiAgICAgIH0KICAgICAgLy8gRm9yY2UgdG8gYSBzdHJpbmcgdG8gaGFuZGxlIG51bWJlcnMgYW5kIHNvIG9uLgogICAgICByZXR1cm4gKCIiICsgZGF0YSkKICAgICAgICAgIC5zcGxpdChvbikKICAgICAgICAgIC5maWx0ZXIodCA9PiAhIXQpCiAgICAgICAgICAubWFwKHQgPT4gdC50cmltKCkpCiAgICAgICAgICAuZmlsdGVyKHQgPT4gdC5sZW5ndGggPiAwKTsKICB9CiAgLyoqIFBhcnNlIHJhdyAobmV3bGluZS1kZWxpbWl0ZWQpIG1hcmtkb3duLCByZXR1cm5pbmcgaW5saW5lIGZpZWxkcywgbGlzdCBpdGVtcywgYW5kIG90aGVyIG1ldGFkYXRhLiAqLwogIGZ1bmN0aW9uIHBhcnNlTWFya2Rvd24ocGF0aCwgY29udGVudHMsIG1ldGFkYXRhLCBsaW5rc0J5TGluZSkgewogICAgICBsZXQgZmllbGRzID0gbmV3IE1hcCgpOwogICAgICAvLyBFeHRyYWN0IHRhc2sgZGF0YSBhbmQgYXBwZW5kIHRoZSBnbG9iYWwgZGF0YSBleHRyYWN0ZWQgZnJvbSB0aGVtIHRvIG91ciBmaWVsZHMuCiAgICAgIGxldCBbbGlzdHMsIGV4dHJhRGF0YV0gPSBwYXJzZUxpc3RzKHBhdGgsIGNvbnRlbnRzLCBtZXRhZGF0YSwgbGlua3NCeUxpbmUpOwogICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZXNdIG9mIGV4dHJhRGF0YS5lbnRyaWVzKCkpIHsKICAgICAgICAgIGlmICghZmllbGRzLmhhcyhrZXkpKQogICAgICAgICAgICAgIGZpZWxkcy5zZXQoa2V5LCB2YWx1ZXMpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICAgIGZpZWxkcy5zZXQoa2V5LCBmaWVsZHMuZ2V0KGtleSkuY29uY2F0KHZhbHVlcykpOwogICAgICB9CiAgICAgIC8vIFRoZSBPYnNpZGlhbiBtZXRhZGF0YSBjYWNoZSB3aWxsIHRyYWNrIGxpc3QgZWxlbWVudHMgaW5zaWRlIG9mIG90aGVyIGVsZW1lbnQgZ3JvdXBzIChsaWtlIGFubm90YXRpb25zIGFuZAogICAgICAvLyBjYWxsb3V0cykuLi4gdGhpcyBtZWFucyB3ZSBtaWdodCBzZWUgbWV0YWRhdGEgdHdpY2UsIHNvIHNraXAgdGhlbSBub3cuIFZlcnkgYW5ub3lpbmcuCiAgICAgIGNvbnN0IGxpc3RMaW5lc1RvU2tpcCA9IG5ldyBTZXQoKTsKICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpc3RzKSB7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGluZUNvdW50OyBpKyspCiAgICAgICAgICAgICAgbGlzdExpbmVzVG9Ta2lwLmFkZChsaW5lLmxpbmUgKyBpKTsKICAgICAgfQogICAgICAvLyBPbmx5IHBhcnNlIGhlYWRpbmcgYW5kIHBhcmFncmFwaCBlbGVtZW50cyBmb3IgaW5saW5lIGZpZWxkczsgd2Ugd2lsbCBwYXJzZSBsaXN0IG1ldGFkYXRhIHNlcGFyYXRlbHkuCiAgICAgIGZvciAobGV0IHNlY3Rpb24gb2YgbWV0YWRhdGEuc2VjdGlvbnMgfHwgW10pIHsKICAgICAgICAgIGlmIChzZWN0aW9uLnR5cGUgPT0gImxpc3QiIHx8IHNlY3Rpb24udHlwZSA9PSAicnVsaW5nIikKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIGZvciAobGV0IGxpbmVubyA9IHNlY3Rpb24ucG9zaXRpb24uc3RhcnQubGluZTsgbGluZW5vIDw9IHNlY3Rpb24ucG9zaXRpb24uZW5kLmxpbmU7IGxpbmVubysrKSB7CiAgICAgICAgICAgICAgbGV0IGxpbmUgPSBjb250ZW50c1tsaW5lbm9dOwogICAgICAgICAgICAgIGlmIChsaW5lID09IHVuZGVmaW5lZCB8fCBsaW5lID09IG51bGwpCiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIGlmIChsaXN0TGluZXNUb1NraXAuaGFzKGxpbmVubykpCiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIC8vIEZhc3QgYmFpbC1vdXQgZm9yIGxpbmVzIHRoYXQgYXJlIHRvbyBsb25nIG9yIGRvIG5vdCBjb250YWluICc6OicuCiAgICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID4gMzI3NjggfHwgIWxpbmUuaW5jbHVkZXMoIjo6IikpCiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnRyaW0oKTsKICAgICAgICAgICAgICBsZXQgaW5saW5lRmllbGRzID0gZXh0cmFjdElubGluZUZpZWxkcyhsaW5lKTsKICAgICAgICAgICAgICBpZiAoaW5saW5lRmllbGRzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaWZpZWxkIG9mIGlubGluZUZpZWxkcykKICAgICAgICAgICAgICAgICAgICAgIGFkZFJhd0lubGluZUZpZWxkKGlmaWVsZCwgZmllbGRzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIGxldCBmdWxsTGluZSA9IGV4dHJhY3RGdWxsTGluZUZpZWxkKGxpbmUpOwogICAgICAgICAgICAgICAgICBpZiAoZnVsbExpbmUpCiAgICAgICAgICAgICAgICAgICAgICBhZGRSYXdJbmxpbmVGaWVsZChmdWxsTGluZSwgZmllbGRzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsgZmllbGRzLCBsaXN0cyB9OwogIH0KICAvLyBUT0RPOiBDb25zaWRlciB1c2luZyBhbiBhY3R1YWwgcGFyc2VyIGluIGxpZXUgb2YgYSBtb3JlIGV4cGVuc2l2ZSByZWdleC4KICBjb25zdCBMSVNUX0lURU1fUkVHRVggPSAvXltccz5dKihcZCtcLnxcZCtcKXxcKnwtfFwrKVxzKihcWy57MCwxfVxdKT9ccyooLiopJC9tdTsKICAvKioKICAgKiBQYXJzZSBsaXN0IGl0ZW1zIGZyb20gdGhlIHBhZ2UgKyBtZXRhZGF0YS4gVGhpcyByZXF1aXJlcyBzb21lIGFkZGl0aW9uYWwgcGFyc2luZyBhYm92ZSB3aGF0ZXZlciBPYnNpZGlhbiBwcm92aWRlcywKICAgKiBzaW5jZSBPYnNpZGlhbiBvbmx5IGdpdmVzIGxpbmUgbnVtYmVycy4KICAgKi8KICBmdW5jdGlvbiBwYXJzZUxpc3RzKHBhdGgsIGNvbnRlbnQsIG1ldGFkYXRhLCBsaW5rc0J5TGluZSkgewogICAgICBsZXQgY2FjaGUgPSB7fTsKICAgICAgLy8gUGxhY2UgYWxsIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGNhY2hlIGJlZm9yZSByZXNvbHZpbmcgY2hpbGRyZW4gJiBtZXRhZGF0YSByZWxhdGlvbnNoaXBzLgogICAgICBmb3IgKGxldCByYXdFbGVtZW50IG9mIG1ldGFkYXRhLmxpc3RJdGVtcyB8fCBbXSkgewogICAgICAgICAgLy8gTWF0Y2ggb24gdGhlIGZpcnN0IGxpbmUgdG8gZ2V0IHRoZSBzeW1ib2wgYW5kIGZpcnN0IGxpbmUgb2YgdGV4dC4KICAgICAgICAgIGxldCByYXdNYXRjaCA9IExJU1RfSVRFTV9SRUdFWC5leGVjKGNvbnRlbnRbcmF3RWxlbWVudC5wb3NpdGlvbi5zdGFydC5saW5lXSk7CiAgICAgICAgICBpZiAoIXJhd01hdGNoKQogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgLy8gQW5kIHRoZW4gc3RyaXAgdW5uZWNlc3Nhcnkgc3BhY2luZyBmcm9tIHRoZSByZW1haW5pbmcgbGluZXMuCiAgICAgICAgICBsZXQgdGV4dFBhcnRzID0gW3Jhd01hdGNoWzNdXQogICAgICAgICAgICAgIC5jb25jYXQoY29udGVudC5zbGljZShyYXdFbGVtZW50LnBvc2l0aW9uLnN0YXJ0LmxpbmUgKyAxLCByYXdFbGVtZW50LnBvc2l0aW9uLmVuZC5saW5lICsgMSkpCiAgICAgICAgICAgICAgLm1hcCh0ID0+IHQudHJpbSgpKTsKICAgICAgICAgIGxldCB0ZXh0V2l0aE5ld2xpbmUgPSB0ZXh0UGFydHMuam9pbigiXG4iKTsKICAgICAgICAgIGxldCB0ZXh0Tm9OZXdsaW5lID0gdGV4dFBhcnRzLmpvaW4oIiAiKTsKICAgICAgICAgIC8vIEZpbmQgdGhlIGxpc3QgdGhhdCB3ZSBhcmUgYSBwYXJ0IG9mIGJ5IGxpbmUuCiAgICAgICAgICBsZXQgY29udGFpbmluZ0xpc3RJZCA9IChtZXRhZGF0YS5zZWN0aW9ucyB8fCBbXSkuZmluZEluZGV4KHMgPT4gcy50eXBlID09ICJsaXN0IiAmJgogICAgICAgICAgICAgIHMucG9zaXRpb24uc3RhcnQubGluZSA8PSByYXdFbGVtZW50LnBvc2l0aW9uLnN0YXJ0LmxpbmUgJiYKICAgICAgICAgICAgICBzLnBvc2l0aW9uLmVuZC5saW5lID49IHJhd0VsZW1lbnQucG9zaXRpb24uc3RhcnQubGluZSk7CiAgICAgICAgICAvLyBGaW5kIHRoZSBzZWN0aW9uIHdlIGJlbG9uZyB0byBhcyB3ZWxsLgogICAgICAgICAgbGV0IHNlY3Rpb25OYW1lID0gZmluZFByZXZpb3VzSGVhZGVyKHJhd0VsZW1lbnQucG9zaXRpb24uc3RhcnQubGluZSwgbWV0YWRhdGEuaGVhZGluZ3MgfHwgW10pOwogICAgICAgICAgbGV0IHNlY3Rpb25MaW5rID0gc2VjdGlvbk5hbWUgPT09IHVuZGVmaW5lZCA/IExpbmsuZmlsZShwYXRoKSA6IExpbmsuaGVhZGVyKHBhdGgsIHNlY3Rpb25OYW1lKTsKICAgICAgICAgIGxldCBjbG9zZXN0TGluayA9IHJhd0VsZW1lbnQuaWQgPT09IHVuZGVmaW5lZCA/IHNlY3Rpb25MaW5rIDogTGluay5ibG9jayhwYXRoLCByYXdFbGVtZW50LmlkKTsKICAgICAgICAgIC8vIEdhdGhlciBhbnkgbGlua3MgdGhhdCBvY2N1ciBvbiB0aGUgc2FtZSBsaW5lcyBhcyB0aGUgdGFzay4KICAgICAgICAgIGNvbnN0IGxpbmtzID0gW107CiAgICAgICAgICBmb3IgKGxldCBsaW5lID0gcmF3RWxlbWVudC5wb3NpdGlvbi5zdGFydC5saW5lOyBsaW5lIDw9IHJhd0VsZW1lbnQucG9zaXRpb24uZW5kLmxpbmU7IGxpbmUrKykgewogICAgICAgICAgICAgIGlmIChsaW5rc0J5TGluZVtsaW5lXSkKICAgICAgICAgICAgICAgICAgbGlua3MucHVzaCguLi5saW5rc0J5TGluZVtsaW5lXSk7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBDb25zdHJ1Y3QgdW5pdmVyc2FsIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZWxlbWVudCAoYmVmb3JlIHRhc2tzKS4KICAgICAgICAgIGxldCBpdGVtID0gbmV3IExpc3RJdGVtKHsKICAgICAgICAgICAgICBzeW1ib2w6IHJhd01hdGNoWzFdLAogICAgICAgICAgICAgIGxpbms6IGNsb3Nlc3RMaW5rLAogICAgICAgICAgICAgIGxpbmtzOiBsaW5rcywKICAgICAgICAgICAgICBzZWN0aW9uOiBzZWN0aW9uTGluaywKICAgICAgICAgICAgICB0ZXh0OiB0ZXh0V2l0aE5ld2xpbmUsCiAgICAgICAgICAgICAgdGFnczogZXh0cmFjdFRhZ3MkMSh0ZXh0Tm9OZXdsaW5lKSwKICAgICAgICAgICAgICBsaW5lOiByYXdFbGVtZW50LnBvc2l0aW9uLnN0YXJ0LmxpbmUsCiAgICAgICAgICAgICAgbGluZUNvdW50OiByYXdFbGVtZW50LnBvc2l0aW9uLmVuZC5saW5lIC0gcmF3RWxlbWVudC5wb3NpdGlvbi5zdGFydC5saW5lICsgMSwKICAgICAgICAgICAgICBsaXN0OiBjb250YWluaW5nTGlzdElkID09IC0xID8gLTEgOiAobWV0YWRhdGEuc2VjdGlvbnMgfHwgW10pW2NvbnRhaW5pbmdMaXN0SWRdLnBvc2l0aW9uLnN0YXJ0LmxpbmUsCiAgICAgICAgICAgICAgcG9zaXRpb246IHJhd0VsZW1lbnQucG9zaXRpb24sCiAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLAogICAgICAgICAgICAgIGJsb2NrSWQ6IHJhd0VsZW1lbnQuaWQsCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmIChyYXdFbGVtZW50LnBhcmVudCA+PSAwICYmIHJhd0VsZW1lbnQucGFyZW50ICE9IGl0ZW0ubGluZSkKICAgICAgICAgICAgICBpdGVtLnBhcmVudCA9IHJhd0VsZW1lbnQucGFyZW50OwogICAgICAgICAgLy8gU2V0IHVwIHRoZSBiYXNpYyB0YXNrIGluZm9ybWF0aW9uIGZvciBub3csIHRob3VnaCB3ZSBoYXZlIHRvIHJlY29tcHV0ZSBgZnVsbHlDb21wdXRlZGAgbGF0ZXIuCiAgICAgICAgICBpZiAocmF3RWxlbWVudC50YXNrKSB7CiAgICAgICAgICAgICAgaXRlbS50YXNrID0gewogICAgICAgICAgICAgICAgICBzdGF0dXM6IHJhd0VsZW1lbnQudGFzaywKICAgICAgICAgICAgICAgICAgY2hlY2tlZDogcmF3RWxlbWVudC50YXNrICE9ICIiICYmIHJhd0VsZW1lbnQudGFzayAhPSAiICIsCiAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogcmF3RWxlbWVudC50YXNrID09ICJYIiB8fCByYXdFbGVtZW50LnRhc2sgPT0gIngiLAogICAgICAgICAgICAgICAgICBmdWxseUNvbXBsZXRlZDogcmF3RWxlbWVudC50YXNrID09ICJYIiB8fCByYXdFbGVtZW50LnRhc2sgPT0gIngiLAogICAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgICAvLyBFeHRyYWN0IGlubGluZSBmaWVsZHM7IGV4dHJhY3QgZnVsbC1saW5lIGZpZWxkcyBvbmx5IGlmIHdlIGFyZSBOT1QgYSB0YXNrLgogICAgICAgICAgaXRlbS5maWVsZHMgPSBuZXcgTWFwKCk7CiAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGV4dHJhY3RJbmxpbmVGaWVsZHModGV4dE5vTmV3bGluZSwgdHJ1ZSkpCiAgICAgICAgICAgICAgYWRkUmF3SW5saW5lRmllbGQoZWxlbWVudCwgaXRlbS5maWVsZHMpOwogICAgICAgICAgaWYgKCFyYXdFbGVtZW50LnRhc2sgJiYgaXRlbS5maWVsZHMuc2l6ZSA9PSAwKSB7CiAgICAgICAgICAgICAgbGV0IGZ1bGxMaW5lID0gZXh0cmFjdEZ1bGxMaW5lRmllbGQodGV4dE5vTmV3bGluZSk7CiAgICAgICAgICAgICAgaWYgKGZ1bGxMaW5lKQogICAgICAgICAgICAgICAgICBhZGRSYXdJbmxpbmVGaWVsZChmdWxsTGluZSwgaXRlbS5maWVsZHMpOwogICAgICAgICAgfQogICAgICAgICAgY2FjaGVbaXRlbS5saW5lXSA9IGl0ZW07CiAgICAgIH0KICAgICAgLy8gVHJlZSB1cGRhdGluZyBwYXNzZXMuIFVwZGF0ZSBjaGlsZCBsaXN0cy4gUHJvcGFnYXRlIG1ldGFkYXRhIHVwIHRvIHBhcmVudCB0YXNrcy4gVXBkYXRlIHRhc2sgYGZ1bGx5Q29tcGxldGVkYC4KICAgICAgbGV0IGxpdGVyYWxzID0gbmV3IE1hcCgpOwogICAgICBmb3IgKGxldCBsaXN0SXRlbSBvZiBPYmplY3QudmFsdWVzKGNhY2hlKSkgewogICAgICAgICAgLy8gUGFzcyAxOiBVcGRhdGUgY2hpbGQgbGlzdHMuCiAgICAgICAgICBpZiAobGlzdEl0ZW0ucGFyZW50ICE9PSB1bmRlZmluZWQgJiYgbGlzdEl0ZW0ucGFyZW50IGluIGNhY2hlKSB7CiAgICAgICAgICAgICAgbGV0IHBhcmVudCA9IGNhY2hlW2xpc3RJdGVtLnBhcmVudF07CiAgICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2gobGlzdEl0ZW0ubGluZSk7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBQYXNzIDI6IFByb3BhZ2F0ZSBtZXRhZGF0YSB1cCB0byB0aGUgcGFyZW50IHRhc2sgb3Igcm9vdCBlbGVtZW50LgogICAgICAgICAgaWYgKCFsaXN0SXRlbS50YXNrKSB7CiAgICAgICAgICAgICAgbWVyZ2VGaWVsZEdyb3VwcyhsaXRlcmFscywgbGlzdEl0ZW0uZmllbGRzKTsKICAgICAgICAgICAgICAvLyBUT0RPIChibGFja3NtaXRoZ3UpOiBUaGUgYmVsb3cgY29kZSBwcm9wZXJseSBQcm9wYWdhdGVzIG1ldGFkYXRhIHVwIHRvIHRoZSBuZWFyZXN0IHRhc2ssIHdoaWNoIGlzIHRoZQogICAgICAgICAgICAgIC8vIG1vcmUgaW50dWl0aXZlIGJlaGF2aW9yLiBGb3Igbm93LCB0aG91Z2gsIHdlIHdpbGwga2VlcCB0aGUgZXhpc3RpbmcgbG9naWMuCiAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICBsZXQgcm9vdDogTGlzdEl0ZW0gfCB1bmRlZmluZWQgPSBsaXN0SXRlbTsKICAgICAgICAgICAgICB3aGlsZSAoISFyb290ICYmICFyb290LnRhc2spIHJvb3QgPSBjYWNoZVtyb290LnBhcmVudCA/PyAtMV07CgogICAgICAgICAgICAgIC8vIElmIHRoZSByb290IGlzIG51bGwsIGFwcGVuZCB0aGlzIG1ldGFkYXRhIHRvIHRoZSByb290OyBvdGhlcndpc2UsIGFwcGVuZCB0byB0aGUgdGFzay4KICAgICAgICAgICAgICBtZXJnZUZpZWxkR3JvdXBzKHJvb3QgPT09IHVuZGVmaW5lZCB8fCByb290ID09IG51bGwgPyBsaXRlcmFscyA6IHJvb3QuZmllbGRzLCBsaXN0SXRlbS5maWVsZHMpOwogICAgICAgICAgICAgICovCiAgICAgICAgICB9CiAgICAgICAgICAvLyBQYXNzIDM6IFByb3BhZ2F0ZSBgZnVsbHlDb21wbGV0ZWRgIHVwIHRoZSB0YXNrIHRyZWUuIFRoaXMgaXMgYSBsaXR0bGUgbGVzcyBlZmZpY2llbnQgdGhhbiBqdXN0IGRvaW5nIGEgc2ltcGxlCiAgICAgICAgICAvLyBERlMgdXNpbmcgdGhlIGNoaWxkcmVuIElEcywgYnV0IGl0J3MgcHJvYmFibHkgZmluZS4KICAgICAgICAgIGlmIChsaXN0SXRlbS50YXNrKSB7CiAgICAgICAgICAgICAgbGV0IGN1cnIgPSBsaXN0SXRlbTsKICAgICAgICAgICAgICB3aGlsZSAoISFjdXJyKSB7CiAgICAgICAgICAgICAgICAgIGlmIChjdXJyLnRhc2spCiAgICAgICAgICAgICAgICAgICAgICBjdXJyLnRhc2suZnVsbHlDb21wbGV0ZWQgPSBjdXJyLnRhc2suZnVsbHlDb21wbGV0ZWQgJiYgbGlzdEl0ZW0udGFzay5jb21wbGV0ZWQ7CiAgICAgICAgICAgICAgICAgIGN1cnIgPSBjYWNoZVtjdXJyLnBhcmVudCA/PyAtMV07CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBbT2JqZWN0LnZhbHVlcyhjYWNoZSksIGxpdGVyYWxzXTsKICB9CiAgLyoqIEF0dGVtcHQgdG8gZmluZCBhIGRhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBwYWdlIGZyb20gbWV0YWRhdGEgb3IgZmlsZW5hbWVzLiAqLwogIGZ1bmN0aW9uIGZpbmREYXRlKGZpbGUsIGZpZWxkcykgewogICAgICBmb3IgKGxldCBrZXkgb2YgZmllbGRzLmtleXMoKSkgewogICAgICAgICAgaWYgKCEoa2V5LnRvTG9jYWxlTG93ZXJDYXNlKCkgPT0gImRhdGUiIHx8IGtleS50b0xvY2FsZUxvd2VyQ2FzZSgpID09ICJkYXkiKSkKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIGxldCB2YWx1ZSA9IGZpZWxkcy5nZXQoa2V5KTsKICAgICAgICAgIGlmIChWYWx1ZXMuaXNEYXRlKHZhbHVlKSkgewogICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKFZhbHVlcy5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwICYmIFZhbHVlcy5pc0RhdGUodmFsdWVbMF0pKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzBdOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoVmFsdWVzLmlzTGluayh2YWx1ZSkpIHsKICAgICAgICAgICAgICBsZXQgZGF0ZSA9IGV4dHJhY3REYXRlKHZhbHVlLnBhdGgpID8/IGV4dHJhY3REYXRlKHZhbHVlLnN1YnBhdGggPz8gIiIpID8/IGV4dHJhY3REYXRlKHZhbHVlLmRpc3BsYXkgPz8gIiIpOwogICAgICAgICAgICAgIGlmIChkYXRlKQogICAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZXh0cmFjdERhdGUoZ2V0RmlsZVRpdGxlKGZpbGUpKTsKICB9CiAgLyoqIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgZnJvbnRtYXR0ZXIgaW50byBmaWVsZHMuIFdlIGhhdmUgdG8gZGFuY2UgYXJvdW5kIFlBTUwgc3RydWN0dXJlLiAqLwogIGZ1bmN0aW9uIHBhcnNlRnJvbnRtYXR0ZXIodmFsdWUpIHsKICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgewogICAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTsKICAgICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiB2YWx1ZSkgewogICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXJzZUZyb250bWF0dGVyKGNoaWxkKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHsKICAgICAgICAgICAgICBsZXQgZGF0ZVBhcnNlID0gRGF0ZVRpbWUuZnJvbUpTRGF0ZSh2YWx1ZSk7CiAgICAgICAgICAgICAgcmV0dXJuIGRhdGVQYXJzZTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIGxldCBvYmplY3QgPSB2YWx1ZTsKICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0ge307CiAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIG9iamVjdCkgewogICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHBhcnNlRnJvbnRtYXR0ZXIob2JqZWN0W2tleV0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgfQogICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICJib29sZWFuIikgewogICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIGxldCBkYXRlUGFyc2UgPSBFWFBSRVNTSU9OLmRhdGUucGFyc2UodmFsdWUpOwogICAgICAgICAgaWYgKGRhdGVQYXJzZS5zdGF0dXMpCiAgICAgICAgICAgICAgcmV0dXJuIGRhdGVQYXJzZS52YWx1ZTsKICAgICAgICAgIGxldCBkdXJhdGlvblBhcnNlID0gRVhQUkVTU0lPTi5kdXJhdGlvbi5wYXJzZSh2YWx1ZSk7CiAgICAgICAgICBpZiAoZHVyYXRpb25QYXJzZS5zdGF0dXMpCiAgICAgICAgICAgICAgcmV0dXJuIGR1cmF0aW9uUGFyc2UudmFsdWU7CiAgICAgICAgICBsZXQgbGlua1BhcnNlID0gRVhQUkVTU0lPTi5lbWJlZExpbmsucGFyc2UodmFsdWUpOwogICAgICAgICAgaWYgKGxpbmtQYXJzZS5zdGF0dXMpCiAgICAgICAgICAgICAgcmV0dXJuIGxpbmtQYXJzZS52YWx1ZTsKICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgfQogICAgICAvLyBCYWNrdXAgaWYgd2UgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgdHlwZS4KICAgICAgcmV0dXJuIG51bGw7CiAgfQogIC8qKiBBZGQgYSBwYXJzZWQgaW5saW5lIGZpZWxkIHRvIHRoZSBvdXRwdXQgbWFwLiAqLwogIGZ1bmN0aW9uIGFkZFJhd0lubGluZUZpZWxkKGZpZWxkLCBvdXRwdXQpIHsKICAgICAgYWRkSW5saW5lRmllbGQoZmllbGQua2V5LCBwYXJzZUlubGluZVZhbHVlKGZpZWxkLnZhbHVlKSwgb3V0cHV0KTsKICB9CiAgLyoqIEFkZCBhIHJhdyBpbmxpbmUgZmllbGQgdG8gYW4gb3V0cHV0IG1hcCwgY2Fub25pY2FsaXppbmcgYXMgbmVlZGVkLiAqLwogIGZ1bmN0aW9uIGFkZElubGluZUZpZWxkKGtleSwgdmFsdWUsIG91dHB1dCkgewogICAgICBpZiAoIW91dHB1dC5oYXMoa2V5KSkKICAgICAgICAgIG91dHB1dC5zZXQoa2V5LCBbdmFsdWVdKTsKICAgICAgZWxzZQogICAgICAgICAgb3V0cHV0LmdldChrZXkpPy5wdXNoKHZhbHVlKTsKICB9CiAgLyoqIEdpdmVuIGEgcmF3IGxpc3Qgb2YgaW5saW5lIGZpZWxkIHZhbHVlcywgYWRkIG5vcm1hbGl6ZWQga2V5cyBhbmQgc3F1YXNoIHRoZW0uICovCiAgZnVuY3Rpb24gZmluYWxpemVJbmxpbmVGaWVsZHMoZmllbGRzKSB7CiAgICAgIC8vIENvbXB1dGUgdW5pcXVlIG5vcm1hbGl6ZWQga2V5cyAodGhhdCBkbyBub3Qgb3ZlcmxhcCB3LyB0aGUgZmllbGRzKS4KICAgICAgbGV0IG5vcm1hbGl6ZWQgPSBuZXcgTWFwKCk7CiAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlc10gb2YgZmllbGRzLmVudHJpZXMoKSkgewogICAgICAgICAgbGV0IG5vcm1LZXkgPSBjYW5vbmljYWxpemVWYXJOYW1lKGtleSk7CiAgICAgICAgICBpZiAobm9ybUtleSA9PSAiIiB8fCBmaWVsZHMuaGFzKG5vcm1LZXkpKQogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgaWYgKCFub3JtYWxpemVkLmhhcyhub3JtS2V5KSkKICAgICAgICAgICAgICBub3JtYWxpemVkLnNldChub3JtS2V5LCB2YWx1ZXMpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICAgIG5vcm1hbGl6ZWQuc2V0KG5vcm1LZXksIG5vcm1hbGl6ZWQuZ2V0KG5vcm1LZXkpLmNvbmNhdCh2YWx1ZXMpKTsKICAgICAgfQogICAgICAvLyBDb21iaW5lIG5vcm1hbGl6ZWQgKyBub3JtYWwga2V5cy4KICAgICAgbGV0IGludGVyaW0gPSBuZXcgTWFwKCk7CiAgICAgIG1lcmdlRmllbGRHcm91cHMoaW50ZXJpbSwgZmllbGRzKTsKICAgICAgbWVyZ2VGaWVsZEdyb3VwcyhpbnRlcmltLCBub3JtYWxpemVkKTsKICAgICAgLy8gQW5kIHRoZW4gZmxhdHRlbiB0aGVtLgogICAgICBsZXQgcmVzdWx0ID0gbmV3IE1hcCgpOwogICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgaW50ZXJpbS5lbnRyaWVzKCkpIHsKICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMSkKICAgICAgICAgICAgICByZXN1bHQuc2V0KGtleSwgdmFsdWVbMF0pOwogICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHJlc3VsdC5zZXQoa2V5LCB2YWx1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgLyoqIENvcHkgYWxsIGZpZWxkcyBvZiAnc291cmNlJyBpbnRvICd0YXJnZXQnLiAqLwogIGZ1bmN0aW9uIG1lcmdlRmllbGRHcm91cHModGFyZ2V0LCBzb3VyY2UpIHsKICAgICAgZm9yIChsZXQga2V5IG9mIHNvdXJjZS5rZXlzKCkpIHsKICAgICAgICAgIGlmICghdGFyZ2V0LmhhcyhrZXkpKQogICAgICAgICAgICAgIHRhcmdldC5zZXQoa2V5LCBzb3VyY2UuZ2V0KGtleSkpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHRhcmdldC5zZXQoa2V5LCB0YXJnZXQuZ2V0KGtleSkuY29uY2F0KHNvdXJjZS5nZXQoa2V5KSkpOwogICAgICB9CiAgfQogIC8qKiBGaW5kIHRoZSBoZWFkZXIgdGhhdCBpcyBtb3N0IGltbWVkaWF0ZWx5IGFib3ZlIHRoZSBnaXZlbiBsaW5lIG51bWJlci4gKi8KICBmdW5jdGlvbiBmaW5kUHJldmlvdXNIZWFkZXIobGluZSwgaGVhZGVycykgewogICAgICBpZiAoaGVhZGVycy5sZW5ndGggPT0gMCkKICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgIGlmIChoZWFkZXJzWzBdLnBvc2l0aW9uLnN0YXJ0LmxpbmUgPiBsaW5lKQogICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgbGV0IGluZGV4ID0gaGVhZGVycy5sZW5ndGggLSAxOwogICAgICB3aGlsZSAoaW5kZXggPj0gMCAmJiBoZWFkZXJzW2luZGV4XS5wb3NpdGlvbi5zdGFydC5saW5lID4gbGluZSkKICAgICAgICAgIGluZGV4LS07CiAgICAgIHJldHVybiBoZWFkZXJzW2luZGV4XS5oZWFkaW5nOwogIH0KCiAgLyoqIEFjdHVhbCBpbXBvcnQgaW1wbGVtZW50YXRpb24gYmFja2VuZC4gVGhpcyBtdXN0IHJlbWFpbiBzZXBhcmF0ZSBmcm9tIGBpbXBvcnQtZW50cnlgIHNpbmNlIGl0IGlzIHVzZWQgd2l0aG91dCB3ZWIgd29ya2Vycy4gKi8KICBmdW5jdGlvbiBydW5JbXBvcnQocGF0aCwgY29udGVudHMsIHN0YXRzLCBtZXRhZGF0YSkgewogICAgICByZXR1cm4gcGFyc2VQYWdlKHBhdGgsIGNvbnRlbnRzLCBzdGF0cywgbWV0YWRhdGEpOwogIH0KCiAgLyoqIFNpbXBsaWZpZXMgcGFzc2luZyBkYXRhdmlldyB2YWx1ZXMgYWNyb3NzIHRoZSBKUyB3ZWIgd29ya2VyIGJhcnJpZXIuICovCiAgdmFyIFRyYW5zZmVyYWJsZTsKICAoZnVuY3Rpb24gKFRyYW5zZmVyYWJsZSkgewogICAgICAvKiogQ29udmVydCBhIGxpdGVyYWwgdmFsdWUgdG8gYSBzZXJpYWxpemVyLWZyaWVuZGx5IHRyYW5zZmVyYWJsZSB2YWx1ZS4gKi8KICAgICAgZnVuY3Rpb24gdHJhbnNmZXJhYmxlKHZhbHVlKSB7CiAgICAgICAgICAvLyBIYW5kbGUgc2ltcGxlIHVuaXZlcnNhbCB0eXBlcyBmaXJzdC4KICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCkgewogICAgICAgICAgICAgIGxldCBjb3BpZWQgPSBuZXcgTWFwKCk7CiAgICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsXSBvZiB2YWx1ZS5lbnRyaWVzKCkpCiAgICAgICAgICAgICAgICAgIGNvcGllZC5zZXQodHJhbnNmZXJhYmxlKGtleSksIHRyYW5zZmVyYWJsZSh2YWwpKTsKICAgICAgICAgICAgICByZXR1cm4gY29waWVkOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpIHsKICAgICAgICAgICAgICBsZXQgY29waWVkID0gbmV3IFNldCgpOwogICAgICAgICAgICAgIGZvciAobGV0IHZhbCBvZiB2YWx1ZSkKICAgICAgICAgICAgICAgICAgY29waWVkLmFkZCh0cmFuc2ZlcmFibGUodmFsKSk7CiAgICAgICAgICAgICAgcmV0dXJuIGNvcGllZDsKICAgICAgICAgIH0KICAgICAgICAgIGxldCB3cmFwcGVkID0gVmFsdWVzLndyYXBWYWx1ZSh2YWx1ZSk7CiAgICAgICAgICBpZiAod3JhcHBlZCA9PT0gdW5kZWZpbmVkKQogICAgICAgICAgICAgIHRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgdHJhbnNmZXJhYmxlIHZhbHVlOiAiICsgdmFsdWUpOwogICAgICAgICAgc3dpdGNoICh3cmFwcGVkLnR5cGUpIHsKICAgICAgICAgICAgICBjYXNlICJudWxsIjoKICAgICAgICAgICAgICBjYXNlICJudW1iZXIiOgogICAgICAgICAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgICAgICAgY2FzZSAiYm9vbGVhbiI6CiAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlOwogICAgICAgICAgICAgIGNhc2UgImRhdGUiOgogICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgIl9fX3RyYW5zZmVyLXR5cGUiOiAiZGF0ZSIsCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJhbnNmZXJhYmxlKHdyYXBwZWQudmFsdWUudG9PYmplY3QoKSksCiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgem9uZTogd3JhcHBlZC52YWx1ZS56b25lLmVxdWFscyhTeXN0ZW1ab25lLmluc3RhbmNlKSA/IHVuZGVmaW5lZCA6IHdyYXBwZWQudmFsdWUuem9uZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIGNhc2UgImR1cmF0aW9uIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgIl9fX3RyYW5zZmVyLXR5cGUiOiAiZHVyYXRpb24iLCB2YWx1ZTogdHJhbnNmZXJhYmxlKHdyYXBwZWQudmFsdWUudG9PYmplY3QoKSkgfTsKICAgICAgICAgICAgICBjYXNlICJhcnJheSI6CiAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLm1hcCh2ID0+IHRyYW5zZmVyYWJsZSh2KSk7CiAgICAgICAgICAgICAgY2FzZSAibGluayI6CiAgICAgICAgICAgICAgICAgIHJldHVybiB7ICJfX190cmFuc2Zlci10eXBlIjogImxpbmsiLCB2YWx1ZTogdHJhbnNmZXJhYmxlKHdyYXBwZWQudmFsdWUudG9PYmplY3QoKSkgfTsKICAgICAgICAgICAgICBjYXNlICJvYmplY3QiOgogICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0ge307CiAgICAgICAgICAgICAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh3cmFwcGVkLnZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdHJhbnNmZXJhYmxlKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgIH0KICAgICAgfQogICAgICBUcmFuc2ZlcmFibGUudHJhbnNmZXJhYmxlID0gdHJhbnNmZXJhYmxlOwogICAgICAvKiogQ29udmVydCBhIHRyYW5zZmVyYWJsZSB2YWx1ZSBiYWNrIHRvIGEgbGl0ZXJhbCB2YWx1ZSB3ZSBjYW4gd29yayB3aXRoLiAqLwogICAgICBmdW5jdGlvbiB2YWx1ZSh0cmFuc2ZlcmFibGUpIHsKICAgICAgICAgIGlmICh0cmFuc2ZlcmFibGUgPT09IG51bGwpIHsKICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZmVyYWJsZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZmVyYWJsZSBpbnN0YW5jZW9mIE1hcCkgewogICAgICAgICAgICAgIGxldCByZWFsID0gbmV3IE1hcCgpOwogICAgICAgICAgICAgIGZvciAobGV0IFtrZXksIHZhbF0gb2YgdHJhbnNmZXJhYmxlLmVudHJpZXMoKSkKICAgICAgICAgICAgICAgICAgcmVhbC5zZXQodmFsdWUoa2V5KSwgdmFsdWUodmFsKSk7CiAgICAgICAgICAgICAgcmV0dXJuIHJlYWw7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmICh0cmFuc2ZlcmFibGUgaW5zdGFuY2VvZiBTZXQpIHsKICAgICAgICAgICAgICBsZXQgcmVhbCA9IG5ldyBTZXQoKTsKICAgICAgICAgICAgICBmb3IgKGxldCB2YWwgb2YgdHJhbnNmZXJhYmxlKQogICAgICAgICAgICAgICAgICByZWFsLmFkZCh2YWx1ZSh2YWwpKTsKICAgICAgICAgICAgICByZXR1cm4gcmVhbDsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodHJhbnNmZXJhYmxlKSkgewogICAgICAgICAgICAgIHJldHVybiB0cmFuc2ZlcmFibGUubWFwKHYgPT4gdmFsdWUodikpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHRyYW5zZmVyYWJsZSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgICBpZiAoIl9fX3RyYW5zZmVyLXR5cGUiIGluIHRyYW5zZmVyYWJsZSkgewogICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRyYW5zZmVyYWJsZVsiX19fdHJhbnNmZXItdHlwZSJdKSB7CiAgICAgICAgICAgICAgICAgICAgICBjYXNlICJkYXRlIjoKICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0ZU9wdHMgPSB2YWx1ZSh0cmFuc2ZlcmFibGUub3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGVEYXRhID0gdmFsdWUodHJhbnNmZXJhYmxlLnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbU9iamVjdChkYXRlRGF0YSwgeyB6b25lOiBkYXRlT3B0cy56b25lIH0pOwogICAgICAgICAgICAgICAgICAgICAgY2FzZSAiZHVyYXRpb24iOgogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tT2JqZWN0KHZhbHVlKHRyYW5zZmVyYWJsZS52YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgY2FzZSAibGluayI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExpbmsuZnJvbU9iamVjdCh2YWx1ZSh0cmFuc2ZlcmFibGUudmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFVucmVjb2duaXplZCB0cmFuc2ZlciB0eXBlICcke3RyYW5zZmVyYWJsZVsiX19fdHJhbnNmZXItdHlwZSJdfSdgKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0ge307CiAgICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyh0cmFuc2ZlcmFibGUpKQogICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlKHZhbCk7CiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0cmFuc2ZlcmFibGU7CiAgICAgIH0KICAgICAgVHJhbnNmZXJhYmxlLnZhbHVlID0gdmFsdWU7CiAgfSkoVHJhbnNmZXJhYmxlIHx8IChUcmFuc2ZlcmFibGUgPSB7fSkpOwoKICAvKiogRW50cnktcG9pbnQgc2NyaXB0IHVzZWQgYnkgdGhlIGluZGV4IGFzIGEgd2ViIHdvcmtlci4gKi8KICAvKiogQW4gaW1wb3J0IHdoaWNoIGNhbiBmYWlsIGFuZCByYWlzZSBhbiBleGNlcHRpb24sIHdoaWNoIHdpbGwgYmUgY2F1Z2h0IGJ5IHRoZSBoYW5kbGVyLiAqLwogIGZ1bmN0aW9uIGZhaWxhYmxlSW1wb3J0KHBhdGgsIGNvbnRlbnRzLCBzdGF0LCBtZXRhZGF0YSkgewogICAgICBpZiAobWV0YWRhdGEgPT09IHVuZGVmaW5lZCB8fCBtZXRhZGF0YSA9PT0gbnVsbCkgewogICAgICAgICAgdGhyb3cgRXJyb3IoYENhbm5vdCBpbmRleCBmaWxlLCBzaW5jZSBpdCBoYXMgbm8gT2JzaWRpYW4gZmlsZSBtZXRhZGF0YS5gKTsKICAgICAgfQogICAgICByZXR1cm4gcnVuSW1wb3J0KHBhdGgsIGNvbnRlbnRzLCBzdGF0LCBtZXRhZGF0YSk7CiAgfQogIG9ubWVzc2FnZSA9IGFzeW5jIChldnQpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICAgIGxldCB7IHBhdGgsIGNvbnRlbnRzLCBzdGF0LCBtZXRhZGF0YSB9ID0gZXZ0LmRhdGE7CiAgICAgICAgICBsZXQgcmVzdWx0ID0gZmFpbGFibGVJbXBvcnQocGF0aCwgY29udGVudHMsIHN0YXQsIG1ldGFkYXRhKTsKICAgICAgICAgIHBvc3RNZXNzYWdlKHsgcGF0aDogZXZ0LmRhdGEucGF0aCwgcmVzdWx0OiBUcmFuc2ZlcmFibGUudHJhbnNmZXJhYmxlKHJlc3VsdCkgfSk7CiAgICAgIH0KICAgICAgY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7CiAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgcGF0aDogZXZ0LmRhdGEucGF0aCwKICAgICAgICAgICAgICByZXN1bHQ6IHsKICAgICAgICAgICAgICAgICAgJGVycm9yOiBgRmFpbGVkIHRvIGluZGV4IGZpbGU6ICR7ZXZ0LmRhdGEucGF0aH06ICR7ZXJyb3J9YCwKICAgICAgICAgICAgICB9LAogICAgICAgICAgfSk7CiAgICAgIH0KICB9OwoKfSkoKTsKCg==', null, false); +/* eslint-enable */ + +/** Controls and creates Dataview file importers, allowing for asynchronous loading and parsing of files. */ +/** Multi-threaded file parser which debounces rapid file requests automatically. */ +class FileImporter extends obsidian.Component { + numWorkers; + vault; + metadataCache; + /* Background workers which do the actual file parsing. */ + workers; + /** Tracks which workers are actively parsing a file, to make sure we properly delegate results. */ + busy; + /** List of files which have been queued for a reload. */ + reloadQueue; + /** Fast-access set which holds the list of files queued to be reloaded; used for debouncing. */ + reloadSet; + /** Paths -> promises for file reloads which have not yet been queued. */ + callbacks; + constructor(numWorkers, vault, metadataCache) { + super(); + this.numWorkers = numWorkers; + this.vault = vault; + this.metadataCache = metadataCache; + this.workers = []; + this.busy = []; + this.reloadQueue = []; + this.reloadSet = new Set(); + this.callbacks = new Map(); + for (let index = 0; index < numWorkers; index++) { + let worker = new WorkerFactory({ name: "Dataview Indexer " + (index + 1) }); + worker.onmessage = evt => this.finish(evt.data.path, Transferable.value(evt.data.result), index); + this.workers.push(worker); + this.register(() => worker.terminate()); + this.busy.push(false); + } + } + /** + * Queue the given file for reloading. Multiple reload requests for the same file in a short time period will be de-bounced + * and all be resolved by a single actual file reload. + */ + reload(file) { + let promise = new Promise((resolve, reject) => { + if (this.callbacks.has(file.path)) + this.callbacks.get(file.path)?.push([resolve, reject]); + else + this.callbacks.set(file.path, [[resolve, reject]]); + }); + // De-bounce repeated requests for the same file. + if (this.reloadSet.has(file.path)) + return promise; + this.reloadSet.add(file.path); + // Immediately run this task if there are available workers; otherwise, add it to the queue. + let workerId = this.nextAvailableWorker(); + if (workerId !== undefined) { + this.send(file, workerId); + } + else { + this.reloadQueue.push(file); + } + return promise; + } + /** Finish the parsing of a file, potentially queueing a new file. */ + finish(path, data, index) { + // Cache the callbacks before we do book-keeping. + let calls = [].concat(this.callbacks.get(path) ?? []); + // Book-keeping to clear metadata & allow the file to be re-loaded again. + this.reloadSet.delete(path); + this.callbacks.delete(path); + // Notify the queue this file is available for new work. + this.busy[index] = false; + // Queue a new job onto this worker. + let job = this.reloadQueue.shift(); + if (job !== undefined) + this.send(job, index); + // Resolve promises to let users know this file has finished. + if ("$error" in data) { + for (let [_, reject] of calls) + reject(data["$error"]); + } + else { + for (let [callback, _] of calls) + callback(data); + } + } + /** Send a new task to the given worker ID. */ + send(file, workerId) { + this.busy[workerId] = true; + this.vault.cachedRead(file).then(c => this.workers[workerId].postMessage({ + path: file.path, + contents: c, + stat: file.stat, + metadata: this.metadataCache.getFileCache(file), + })); + } + /** Find the next available, non-busy worker; return undefined if all workers are busy. */ + nextAvailableWorker() { + let index = this.busy.indexOf(false); + return index == -1 ? undefined : index; + } +} + +/** Stores various indices on all files in the vault to make dataview generation fast. */ +/** Aggregate index which has several sub-indices and will initialize all of them. */ +class FullIndex extends obsidian.Component { + app; + indexVersion; + onChange; + /** Generate a full index from the given vault. */ + static create(app, indexVersion, onChange) { + return new FullIndex(app, indexVersion, onChange); + } + /** Whether all files in the vault have been indexed at least once. */ + initialized; + /** I/O access to the Obsidian vault contents. */ + vault; + /** Access to in-memory metadata, useful for parsing and metadata lookups. */ + metadataCache; + /** Persistent IndexedDB backing store, used for faster startup. */ + persister; + /* Maps path -> markdown metadata for all markdown pages. */ + pages; + /** Map files -> tags in that file, and tags -> files. This version includes subtags. */ + tags; + /** Map files -> exact tags in that file, and tags -> files. This version does not automatically add subtags. */ + etags; + /** Map files -> linked files in that file, and linked file -> files that link to it. */ + links; + /** Search files by path prefix. */ + prefix; + /** Allows for efficient lookups of whether a file is starred or not. */ + starred; + /** Caches data in CSV files. */ + // TODO: CSV parsing should be done by a worker thread asynchronously to avoid frontend stalls. + csv; + /** + * The current "revision" of the index, which monotonically increases for every index change. Use this to determine + * if you are up to date. + */ + revision; + /** Asynchronously parses files in the background using web workers. */ + importer; + /** Construct a new index using the app data and a current data version. */ + constructor(app, indexVersion, onChange) { + super(); + this.app = app; + this.indexVersion = indexVersion; + this.onChange = onChange; + this.initialized = false; + this.vault = app.vault; + this.metadataCache = app.metadataCache; + this.pages = new Map(); + this.tags = new ValueCaseInsensitiveIndexMap(); + this.etags = new ValueCaseInsensitiveIndexMap(); + this.links = new IndexMap(); + this.revision = 0; + // Caches metadata via durable storage to speed up cache initialization when Obsidian restarts. + this.persister = new LocalStorageCache(app.appId || "shared", indexVersion); + // Handles asynchronous reloading of files on web workers. + this.addChild((this.importer = new FileImporter(2, this.vault, this.metadataCache))); + // Prefix listens to file creation/deletion/rename, and not modifies, so we let it set up it's own listeners. + this.addChild((this.prefix = PrefixIndex.create(this.vault, () => this.touch()))); + // The CSV cache also needs to listen to filesystem events for cache invalidation. + this.addChild((this.csv = new CsvCache(this.vault))); + // The starred cache fetches starred entries semi-regularly via an interval. + this.addChild((this.starred = new StarredCache(this.app, () => this.touch()))); + } + /** Trigger a metadata event on the metadata cache. */ + trigger(...args) { + this.metadataCache.trigger("dataview:metadata-change", ...args); + } + /** "Touch" the index, incrementing the revision number and causing downstream views to reload. */ + touch() { + this.revision += 1; + this.onChange(); + } + /** Runs through the whole vault to set up initial file metadata. */ + initialize() { + // The metadata cache is updated on initial file index and file loads. + this.registerEvent(this.metadataCache.on("resolve", file => this.reload(file))); + // Renames do not set off the metadata cache; catch these explicitly. + this.registerEvent(this.vault.on("rename", this.rename, this)); + // File creation does cause a metadata change, but deletes do not. Clear the caches for this. + this.registerEvent(this.vault.on("delete", af => { + if (!(af instanceof obsidian.TFile) || !PathFilters.markdown(af.path)) + return; + let file = af; + this.pages.delete(file.path); + this.tags.delete(file.path); + this.etags.delete(file.path); + this.links.delete(file.path); + this.touch(); + this.trigger("delete", file); + })); + // Asynchronously initialize actual content in the background. + this._initialize(this.vault.getMarkdownFiles()); + } + /** Drops the local storage cache and re-indexes all files; this should generally be used if you expect cache issues. */ + async reinitialize() { + await this.persister.recreate(); + const files = this.vault.getMarkdownFiles(); + const start = Date.now(); + let promises = files.map(file => this.reload(file)); + await Promise.all(promises); + console.log(`Dataview: re-initialized index with ${files.length} files (${(Date.now() - start) / 1000.0}s)`); + } + /** Internal asynchronous initializer. */ + async _initialize(files) { + let reloadStart = Date.now(); + let promises = files.map(l => this.reload(l)); + let results = await Promise.all(promises); + let cached = 0, skipped = 0; + for (let item of results) { + if (item.skipped) { + skipped += 1; + continue; + } + if (item.cached) + cached += 1; + } + this.initialized = true; + this.metadataCache.trigger("dataview:index-ready"); + console.log(`Dataview: all ${files.length} files have been indexed in ${(Date.now() - reloadStart) / 1000.0}s (${cached} cached, ${skipped} skipped).`); + // Drop keys for files which do not exist anymore. + let remaining = await this.persister.synchronize(files.map(l => l.path)); + if (remaining.size > 0) { + console.log(`Dataview: Dropped cache entries for ${remaining.size} deleted files.`); + } + } + rename(file, oldPath) { + if (!(file instanceof obsidian.TFile) || !PathFilters.markdown(file.path)) + return; + if (this.pages.has(oldPath)) { + const oldMeta = this.pages.get(oldPath); + this.pages.delete(oldPath); + if (oldMeta) { + oldMeta.path = file.path; + this.pages.set(file.path, oldMeta); + } + } + this.tags.rename(oldPath, file.path); + this.links.rename(oldPath, file.path); + this.etags.rename(oldPath, file.path); + this.touch(); + this.trigger("rename", file, oldPath); + } + /** Queue a file for reloading; this is done asynchronously in the background and may take a few seconds. */ + async reload(file) { + if (!PathFilters.markdown(file.path)) + return { cached: false, skipped: true }; + // The first load of a file is attempted from persisted cache; subsequent loads just use the importer. + if (this.pages.has(file.path) || this.initialized) { + await this.import(file); + return { cached: false, skipped: false }; + } + else { + // Check the cache for the latest data; if it is out of date or non-existent, then reload. + return this.persister.loadFile(file.path).then(async (cached) => { + if (!cached || cached.time < file.stat.mtime || cached.version != this.indexVersion) { + // This cache value is out of data, reload via the importer and update the cache. + // We will skip files with no active file metadata - they will be caught by a later reload + // via the 'resolve' metadata event. + let fileCache = this.metadataCache.getFileCache(file); + if (fileCache === undefined || fileCache === null) + return { cached: false, skipped: true }; + await this.import(file); + return { cached: false, skipped: false }; + } + else { + // Use the cached data since it is up to date and on the same version. + this.finish(file, cached.data); + return { cached: true, skipped: false }; + } + }); + } + } + /** Import a file directly from disk, skipping the cache. */ + async import(file) { + return this.importer.reload(file).then(r => { + this.finish(file, r); + this.persister.storeFile(file.path, r); + }); + } + /** Finish the reloading of file metadata by adding it to in memory indexes. */ + finish(file, parsed) { + let meta = PageMetadata.canonicalize(parsed, link => { + let realPath = this.metadataCache.getFirstLinkpathDest(link.path, file.path); + if (realPath) + return link.withPath(realPath.path); + else + return link; + }); + this.pages.set(file.path, meta); + this.tags.set(file.path, meta.fullTags()); + this.etags.set(file.path, meta.tags); + this.links.set(file.path, new Set(meta.links.map(l => l.path))); + this.touch(); + this.trigger("update", file); + } +} +/** Indexes files by their full prefix - essentially a simple prefix tree. */ +class PrefixIndex extends obsidian.Component { + vault; + updateRevision; + static create(vault, updateRevision) { + return new PrefixIndex(vault, updateRevision); + } + constructor(vault, updateRevision) { + super(); + this.vault = vault; + this.updateRevision = updateRevision; + } + *walk(folder, filter) { + for (const file of folder.children) { + if (file instanceof obsidian.TFolder) { + yield* this.walk(file, filter); + } + else if (filter ? filter(file.path) : true) { + yield file.path; + } + } + } + /** Get the list of all files under the given path. */ + get(prefix, filter) { + let folder = this.vault.getAbstractFileByPath(prefix || "/"); + return new Set(folder instanceof obsidian.TFolder ? this.walk(folder, filter) : []); + } + /** Determines if the given path exists in the prefix index. */ + pathExists(path) { + return this.vault.getAbstractFileByPath(path || "/") != null; + } + /** Determines if the given prefix exists in the prefix index. */ + nodeExists(prefix) { + return this.vault.getAbstractFileByPath(prefix || "/") instanceof obsidian.TFolder; + } + /** + * Use the in-memory prefix index to convert a relative path to an absolute one. + */ + resolveRelative(path, origin) { + if (!origin) + return path; + else if (path.startsWith("/")) + return path.substring(1); + let relativePath = getParentFolder(origin) + "/" + path; + if (this.pathExists(relativePath)) + return relativePath; + else + return path; + } +} +/** Simple path filters which filter file types. */ +var PathFilters; +(function (PathFilters) { + function csv(path) { + return path.toLowerCase().endsWith(".csv"); + } + PathFilters.csv = csv; + function markdown(path) { + let lcPath = path.toLowerCase(); + return lcPath.endsWith(".md") || lcPath.endsWith(".markdown"); + } + PathFilters.markdown = markdown; +})(PathFilters || (PathFilters = {})); +/** + * Caches in-use CSVs to make high-frequency reloads (such as actively looking at a document + * that uses CSV) fast. + */ +class CsvCache extends obsidian.Component { + vault; + static CACHE_EXPIRY_SECONDS = 5 * 60; + // Cache of loaded CSVs; old entries will periodically be removed + cache; + // Periodic job which clears out the cache based on time. + cacheClearInterval; + constructor(vault) { + super(); + this.vault = vault; + this.cache = new Map(); + // Force-flush the cache on CSV file deletions or modifications. + this.registerEvent(this.vault.on("modify", file => { + if (file instanceof obsidian.TFile && PathFilters.csv(file.path)) + this.cache.delete(file.path); + })); + this.registerEvent(this.vault.on("delete", file => { + if (file instanceof obsidian.TFile && PathFilters.csv(file.path)) + this.cache.delete(file.path); + })); + } + /** Load a CSV file from the cache, doing a fresh load if it has not been loaded. */ + async get(path) { + // Clear old entries on every fresh load, since the path being loaded may be stale. + this.clearOldEntries(); + let existing = this.cache.get(path); + if (existing) + return Result.success(existing.data); + else { + let value = await this.loadInternal(path); + if (value.successful) + this.cache.set(path, { data: value.value, loadTime: DateTime.now() }); + return value; + } + } + /** Do the actual raw loading of a CSV path (which is either local or an HTTP request). */ + async loadInternal(path) { + // Allow http://, https://, and file:// prefixes which use AJAX. + if (path.startsWith("http://") || path.startsWith("https://") || path.startsWith("file://")) { + try { + let result = await fetch(path, { + method: "GET", + mode: "no-cors", + redirect: "follow", + }); + return Result.success(parseCsv(await result.text())); + } + catch (ex) { + return Result.failure("" + ex + "\n\n" + ex.stack); + } + } + // Otherwise, assume it is a fully-qualified file path. + try { + let fileData = await this.vault.adapter.read(path); + return Result.success(parseCsv(fileData)); + } + catch (ex) { + return Result.failure(`Failed to load data from path '${path}'.`); + } + } + /** Clear old entries in the cache (as measured by insertion time). */ + clearOldEntries() { + let currentTime = DateTime.now(); + let keysToRemove = new Set(); + for (let [key, value] of this.cache.entries()) { + let entryAge = Math.abs(currentTime.diff(value.loadTime, "seconds").seconds); + if (entryAge > CsvCache.CACHE_EXPIRY_SECONDS) + keysToRemove.add(key); + } + keysToRemove.forEach(key => this.cache.delete(key)); + } +} +/** Optional connector to the Obsidian 'Starred' plugin which allows for efficiently querying if a file is starred or not. */ +class StarredCache extends obsidian.Component { + app; + onUpdate; + /** Initial delay before checking the cache; we need to wait for it to asynchronously load the initial stars. */ + static INITIAL_DELAY = 4 * 1000; + /** How frequently to check for star updates. */ + static REFRESH_INTERVAL = 30 * 1000; + /** Set of all starred file paths. */ + stars; + constructor(app, onUpdate) { + super(); + this.app = app; + this.onUpdate = onUpdate; + this.stars = StarredCache.fetch(this.app); + this.registerInterval(window.setInterval(() => this.reload(), StarredCache.REFRESH_INTERVAL)); + const initialHandler = window.setTimeout(() => this.reload(), StarredCache.INITIAL_DELAY); + this.register(() => window.clearTimeout(initialHandler)); + } + /** Determines if the given path is starred. */ + starred(path) { + return this.stars.has(path); + } + reload() { + let newStars = StarredCache.fetch(this.app); + if (!setsEqual(this.stars, newStars)) { + this.stars = newStars; + this.onUpdate(); + } + } + /** Fetch all starred files from the stars plugin, if present. */ + static fetch(app) { + let items = app?.internalPlugins?.plugins?.bookmarks?.instance?.items; + if (items == undefined) + return new Set(); + // Retrieve all grouped (nested) items, returning a flat array + const flattenItems = (items) => { + let children = []; + return items + .map(i => { + if (i.type == "group" && i.items && i.items.length) { + children = [...children, ...i.items]; + } + return i; + }) + .concat(children.length ? flattenItems(children) : children); + }; + items = flattenItems(items); + return new Set(items.filter((l) => l.type === "file").map(l => l.path)); + } +} +/** A generic index which indexes variables of the form key -> value[], allowing both forward and reverse lookups. */ +class IndexMap { + /** Maps key -> values for that key. */ + map; + /** Cached inverse map; maps value -> keys that reference that value. */ + invMap; + /** Create a new, empty index map. */ + constructor() { + this.map = new Map(); + this.invMap = new Map(); + } + /** Returns all values for the given key. */ + get(key) { + let result = this.map.get(key); + if (result) { + return new Set(result); + } + else { + return new Set(); + } + } + /** Returns all keys that reference the given key. Mutating the returned set is not allowed. */ + getInverse(value) { + return this.invMap.get(value) || IndexMap.EMPTY_SET; + } + /** Sets the key to the given values; this will delete the old mapping for the key if one was present. */ + set(key, values) { + if (!values.size) { + // no need to store if no values + this.delete(key); + return this; + } + let oldValues = this.map.get(key); + if (oldValues) { + for (let value of oldValues) { + // Only delete the ones we're not adding back + if (!values.has(key)) + this.invMap.get(value)?.delete(key); + } + } + this.map.set(key, values); + for (let value of values) { + if (!this.invMap.has(value)) + this.invMap.set(value, new Set([key])); + else + this.invMap.get(value)?.add(key); + } + return this; + } + /** Clears all values for the given key so they can be re-added. */ + delete(key) { + let oldValues = this.map.get(key); + if (!oldValues) + return false; + this.map.delete(key); + for (let value of oldValues) { + this.invMap.get(value)?.delete(key); + } + return true; + } + /** Rename all references to the given key to a new value. */ + rename(oldKey, newKey) { + let oldValues = this.map.get(oldKey); + if (!oldValues) + return false; + this.delete(oldKey); + this.set(newKey, oldValues); + return true; + } + /** Clear the entire index. */ + clear() { + this.map.clear(); + this.invMap.clear(); + } + static EMPTY_SET = Object.freeze(new Set()); +} +/** Index map wrapper which is case-insensitive in the key. */ +class ValueCaseInsensitiveIndexMap { + delegate; + /** Create a new, empty case insensitive index map. */ + constructor(delegate = new IndexMap()) { + this.delegate = delegate; + } + /** Returns all values for the given key. */ + get(key) { + return this.delegate.get(key); + } + /** Returns all keys that reference the given value. Mutating the returned set is not allowed. */ + getInverse(value) { + return this.delegate.getInverse(value.toLocaleLowerCase()); + } + /** Sets the key to the given values; this will delete the old mapping for the key if one was present. */ + set(key, values) { + this.delegate.set(key, new Set(Array.from(values).map(v => v.toLocaleLowerCase()))); + return this; + } + /** Clears all values for the given key so they can be re-added. */ + delete(key) { + return this.delegate.delete(key); + } + /** Rename all references to the given key to a new value. */ + rename(oldKey, newKey) { + return this.delegate.rename(oldKey, newKey); + } + /** Clear the entire index. */ + clear() { + this.delegate.clear(); + } +} + +/** Collect data matching a source query. */ +/** Find source paths which match the given source. */ +function matchingSourcePaths(source, index, originFile = "") { + switch (source.type) { + case "empty": + return Result.success(new Set()); + case "tag": + return Result.success(index.tags.getInverse(source.tag)); + case "csv": + return Result.success(new Set([index.prefix.resolveRelative(source.path, originFile)])); + case "folder": + // Prefer loading from the folder at the given path. + if (index.prefix.nodeExists(source.folder)) + return Result.success(index.prefix.get(source.folder, PathFilters.markdown)); + // But allow for loading individual files if they exist. + if (index.prefix.pathExists(source.folder)) + return Result.success(new Set([source.folder])); + else if (index.prefix.pathExists(source.folder + ".md")) + return Result.success(new Set([source.folder + ".md"])); + // For backwards-compat, return an empty result even if the folder does not exist. + return Result.success(new Set()); + case "link": + let fullPath = index.metadataCache.getFirstLinkpathDest(source.file, originFile)?.path; + if (!fullPath) { + // Look in links which includes unresolved links + return Result.success(index.links.getInverse(source.file)); + } + if (source.direction === "incoming") { + // To find all incoming links (i.e., things that link to this), use the index that Obsidian provides. + // TODO: Use an actual index so this isn't a fullscan. + let resolved = index.metadataCache.resolvedLinks; + let incoming = new Set(); + for (let [key, value] of Object.entries(resolved)) { + if (fullPath in value) + incoming.add(key); + } + return Result.success(incoming); + } + else { + let resolved = index.metadataCache.resolvedLinks; + if (!(fullPath in resolved)) + return Result.failure(`Could not find file "${source.file}" during link lookup - does it exist?`); + return Result.success(new Set(Object.keys(index.metadataCache.resolvedLinks[fullPath]))); + } + case "binaryop": + return Result.flatMap2(matchingSourcePaths(source.left, index, originFile), matchingSourcePaths(source.right, index, originFile), (left, right) => { + if (source.op == "&") { + let result = new Set(); + for (let elem of right) { + if (left.has(elem)) + result.add(elem); + } + return Result.success(result); + } + else if (source.op == "|") { + let result = new Set(left); + for (let elem of right) + result.add(elem); + return Result.success(result); + } + else { + return Result.failure(`Unrecognized operator '${source.op}'.`); + } + }); + case "negate": + return matchingSourcePaths(source.child, index, originFile).map(child => { + // TODO: This is obviously very inefficient. Can be improved by complicating the + // return type of this function & optimizing 'and' / 'or'. + let allFiles = new Set(index.vault.getMarkdownFiles().map(f => f.path)); + child.forEach(f => allFiles.delete(f)); + return allFiles; + }); + } +} +/** Convert a path to the data for that path; usually markdown pages, but could also be other file types (like CSV). */ +async function resolvePathData(path, index) { + if (PathFilters.csv(path)) + return resolveCsvData(path, index); + else + return resolveMarkdownData(path, index); +} +// TODO: We shouldn't be doing path normalization here relative to an origin file, +/** Convert a CSV path to the data in the CSV (in dataview format). */ +async function resolveCsvData(path, index) { + let rawData = await index.csv.get(path); + return rawData.map(rows => { + return rows.map((row, index) => { + return { + id: `${path}#${index}`, + data: row, + }; + }); + }); +} +/** Convert a path pointing to a markdown page, into the associated metadata. */ +function resolveMarkdownData(path, index) { + let page = index.pages.get(path); + if (!page) + return Result.success([]); + return Result.success([ + { + id: Link.file(path), + data: page.serialize(index), + }, + ]); +} +/** Resolve a source to the collection of data rows that it matches. */ +async function resolveSource(source, index, originFile = "") { + let paths = matchingSourcePaths(source, index, originFile); + if (!paths.successful) + return Result.failure(paths.error); + let result = []; + for (let path of paths.value) { + let resolved = await resolvePathData(path, index); + if (!resolved.successful) + return resolved; + for (let val of resolved.value) + result.push(val); + } + return Result.success(result); +} + +// cyrb53 (c) 2018 bryc (github.com/bryc). License: Public domain. Attribution appreciated. +// A fast and simple 64-bit (or 53-bit) string hash function with decent collision resistance. +// Largely inspired by MurmurHash2/3, but with a focus on speed/simplicity. +// See https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript/52171480#52171480 +// https://github.com/bryc/code/blob/master/jshash/experimental/cyrb53.js +function cyrb53(str, seed = 0) { + let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed; + for (let i = 0, ch; i < str.length; i++) { + ch = str.charCodeAt(i); + h1 = Math.imul(h1 ^ ch, 2654435761); + h2 = Math.imul(h2 ^ ch, 1597334677); + } + h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507); + h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909); + h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507); + h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909); + // For a full 64-bit value we could return + // [h2>>>0, h1>>>0] + return 4294967296 * (2097151 & h2) + (h1 >>> 0); // ; +} + +/** Default function implementations for the expression evaluator. */ +/** + * Allows for the creation of functions that check the number and type of their arguments, and dispatch + * to different implementations based on the types of the inputs. + */ +class FunctionBuilder { + name; + variants; + vectorized; + constructor(name) { + this.name = name; + this.variants = []; + this.vectorized = {}; + } + /** Add a general function variant which accepts any number of arguments of any type. */ + vararg(impl) { + this.variants.push({ args: [], varargs: true, impl }); + return this; + } + /** Add a function variant which takes in a single argument. */ + add1(argType, impl) { + this.variants.push({ + args: [argType], + varargs: false, + impl: (c, ...rest) => impl(rest[0], c), + }); + return this; + } + /** Add a function variant which takes in two typed arguments. */ + add2(arg1, arg2, impl) { + this.variants.push({ + args: [arg1, arg2], + varargs: false, + impl: (c, ...rest) => impl(rest[0], rest[1], c), + }); + return this; + } + /** Add a function variant which takes in three typed arguments. */ + add3(arg1, arg2, arg3, impl) { + this.variants.push({ + args: [arg1, arg2, arg3], + varargs: false, + impl: (c, ...rest) => impl(rest[0], rest[1], rest[2], c), + }); + return this; + } + /** Add vectorized variants which accept the given number of arguments and delegate. */ + vectorize(numArgs, positions) { + this.vectorized[numArgs] = positions; + return this; + } + /** Return a function which checks the number and type of arguments, passing them on to the first matching variant. */ + build() { + let self = (context, ...args) => { + let types = []; + for (let arg of args) { + let argType = Values.typeOf(arg); + if (!argType) + throw Error(`Unrecognized argument type for argument '${arg}'`); + types.push(argType); + } + // Handle vectorization, possibly in multiple fields. + if (this.vectorized[types.length]) { + let vectorizedPositions = this.vectorized[types.length].filter(k => types[k] == "array"); + if (vectorizedPositions.length > 0) { + let minLength = vectorizedPositions + .map(p => args[p].length) + .reduce((p, c) => Math.min(p, c)); + // Call the subfunction for each element in the longest array. + // If you call a vectorized function with different-length arrays, + // the output is limited by the length of the shortest array. + let result = []; + for (let vpos = 0; vpos < minLength; vpos++) { + let subargs = []; + for (let index = 0; index < args.length; index++) { + if (vectorizedPositions.includes(index)) { + let arr = args[index]; + subargs.push(arr[vpos]); + } + else { + subargs.push(args[index]); + } + } + result.push(self(context, ...subargs)); + } + return result; + } + } + outer: for (let variant of this.variants) { + if (variant.varargs) + return variant.impl(context, ...args); + if (variant.args.length != types.length) + continue; + for (let index = 0; index < variant.args.length; index++) { + if (variant.args[index] != "*" && variant.args[index] != types[index]) + continue outer; + } + return variant.impl(context, ...args); + } + throw Error(`No implementation of '${this.name}' found for arguments: ${types.join(", ")}`); + }; + return self; + } +} +/** Utilities for managing function implementations. */ +var Functions; +(function (Functions) { + /** Bind a context to a function implementation, yielding a function which does not need the context argument. */ + function bind(func, context) { + return (...args) => func(context, ...args); + } + Functions.bind = bind; + /** Bind a context to all functions in the given map, yielding a new map of bound functions. */ + function bindAll(funcs, context) { + let result = {}; + for (let [key, func] of Object.entries(funcs)) { + result[key] = Functions.bind(func, context); + } + return result; + } + Functions.bindAll = bindAll; +})(Functions || (Functions = {})); +/** + * Collection of all defined functions; defined here so that they can be called from within dataview, + * and test code. + */ +var DefaultFunctions; +(function (DefaultFunctions) { + DefaultFunctions.typeOf = new FunctionBuilder("type") + .add1("array", _ => "array") + .add1("boolean", _ => "boolean") + .add1("date", _ => "date") + .add1("duration", _ => "duration") + .add1("function", _ => "function") + .add1("widget", _ => "widget") + .add1("link", _ => "link") + .add1("null", _ => "null") + .add1("number", _ => "number") + .add1("object", _ => "object") + .add1("string", _ => "string") + .add1("*", _ => "unknown") + .build(); + /** Compute the length of a data type. */ + DefaultFunctions.length = new FunctionBuilder("length") + .add1("array", a => a.length) + .add1("object", a => Object.keys(a).length) + .add1("string", a => a.length) + .add1("null", _a => 0) + .build(); + /** List constructor function. */ + DefaultFunctions.list = (_context, ...args) => args; + /** Object constructor function. */ + DefaultFunctions.object = (_context, ...args) => { + if (args.length % 2 != 0) + throw Error("object() requires an even number of arguments"); + let result = {}; + for (let index = 0; index < args.length; index += 2) { + let key = args[index]; + if (!Values.isString(key)) + throw Error("keys should be of type string for object(key1, value1, ...)"); + result[key] = args[index + 1]; + } + return result; + }; + /** Internal link constructor function. */ + DefaultFunctions.link = new FunctionBuilder("link") + .add1("string", (a, c) => Link.file(c.linkHandler.normalize(a), false)) + .add1("link", a => a) + .add1("null", _a => null) + .vectorize(1, [0]) + .add2("string", "string", (t, d, c) => Link.file(c.linkHandler.normalize(t), false, d)) + .add3("string", "string", "boolean", (t, d, e, c) => Link.file(c.linkHandler.normalize(t), e, d)) + .add2("link", "string", (t, d) => t.withDisplay(d)) + .add2("null", "*", () => null) + .add2("*", "null", (t, _n, c) => DefaultFunctions.link(c, t)) + .vectorize(2, [0, 1]) + .build(); + /** Embed and un-embed a link. */ + DefaultFunctions.embed = new FunctionBuilder("embed") + .add1("link", l => l.toEmbed()) + .vectorize(1, [0]) + .add2("link", "boolean", (l, e, c) => (e ? l.toEmbed() : l.fromEmbed())) + .add1("null", () => null) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .vectorize(2, [0, 1]) + .build(); + /** External link constructor function. */ + DefaultFunctions.elink = new FunctionBuilder("elink") + .add2("string", "string", (a, d) => Widgets.externalLink(a, d)) + .add2("string", "null", (s, _n, c) => DefaultFunctions.elink(c, s, s)) + .add2("null", "*", () => null) + .vectorize(2, [0]) + .add1("string", (a, c) => DefaultFunctions.elink(c, a, a)) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + /** Date constructor function. */ + DefaultFunctions.date = new FunctionBuilder("date") + .add1("string", str => { + let parsedDate = EXPRESSION.datePlus.parse(str); + if (parsedDate.status) + return parsedDate.value; + else + return null; + }) + .add1("date", d => d) + .add1("link", (link, c) => { + // Try to parse from the display... + if (link.display) { + let parsedDate = EXPRESSION.date.parse(link.display); + if (parsedDate.status) + return parsedDate.value; + } + // Then try to parse from the path... + let parsedDate = EXPRESSION.date.parse(link.path); + if (parsedDate.status) + return parsedDate.value; + // Then pull it from the file. + let resolved = c.linkHandler.resolve(link.path); + if (resolved && resolved?.file?.day) { + return resolved?.file?.day; + } + return null; + }) + .add2("string", "string", (d, f) => { + if (f === "x" || f === "X") { + let match = NUMBER_REGEX.exec(d); + if (match) + return DateTime.fromMillis(Number.parseInt(match[0]) * (f === "X" ? 1000 : 1)); + else { + throw Error("Not a number for format( (${ f }): ${ d }"); + } + } + else { + let parsedDate = DateTime.fromFormat(d, f); + if (parsedDate.isValid) + return parsedDate; + else { + throw Error(`Can't handle format (${f}) on date string (${d})`); + } + } + }) + .add2("null", "string", () => null) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + /** Duration constructor function. */ + DefaultFunctions.dur = new FunctionBuilder("dur") + .add1("string", str => { + let parsedDur = EXPRESSION.duration.parse(str.trim()); + if (parsedDur.status) + return parsedDur.value; + else + return null; + }) + .add1("duration", d => d) + .add1("null", d => d) + .vectorize(1, [0]) + .build(); + /** Format a date using a luxon/moment-style date format. */ + DefaultFunctions.dateformat = new FunctionBuilder("dateformat") + .add2("date", "string", (date, format) => date.toFormat(format, { locale: currentLocale() })) + .add2("null", "string", (_nul, _format) => null) + .vectorize(2, [0]) + .build(); + DefaultFunctions.durationformat = new FunctionBuilder("durationformat") + .add2("duration", "string", (dur, format) => dur.toFormat(format)) + .add2("null", "string", (_nul, _format) => null) + .vectorize(2, [0]) + .build(); + DefaultFunctions.localtime = new FunctionBuilder("localtime") + .add1("date", d => d.toLocal()) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + const NUMBER_REGEX = /-?[0-9]+(\.[0-9]+)?/; + /** Number constructor function. */ + DefaultFunctions.number = new FunctionBuilder("number") + .add1("number", a => a) + .add1("string", str => { + let match = NUMBER_REGEX.exec(str); + if (match) + return Number.parseFloat(match[0]); + else + return null; + }) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + /** Format a number using a standard currency format. */ + DefaultFunctions.currencyformat = new FunctionBuilder("currencyformat") + .add2("number", "string", (num, format) => Intl.NumberFormat(currentLocale(), { style: "currency", currency: format }).format(num)) + .add2("null", "string", (_nul, _format) => null) + .add1("number", num => Intl.NumberFormat(currentLocale(), { style: "currency", currency: "USD" }).format(num)) + .add1("null", () => null) + .vectorize(2, [0]) + .build(); + /** + * Convert any value to a reasonable internal string representation. Most useful for dates, strings, numbers, and + * so on. + */ + DefaultFunctions.string = new FunctionBuilder("string").add1("*", (a, ctx) => Values.toString(a, ctx.settings)).build(); + DefaultFunctions.round = new FunctionBuilder("round") + .add1("number", n => Math.round(n)) + .add1("null", () => null) + .vectorize(1, [0]) + .add2("number", "number", (n, p) => { + if (p <= 0) + return Math.round(n); + return parseFloat(n.toFixed(p)); + }) + .add2("number", "null", n => Math.round(n)) + .add2("null", "*", () => null) + .vectorize(2, [0]) + .build(); + DefaultFunctions.trunc = new FunctionBuilder("trunc") + .add1("number", n => Math.trunc(n)) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + DefaultFunctions.floor = new FunctionBuilder("floor") + .add1("number", n => Math.floor(n)) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + DefaultFunctions.ceil = new FunctionBuilder("ceil") + .add1("number", n => Math.ceil(n)) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + DefaultFunctions.min = new FunctionBuilder("min") + .add2("*", "null", (a, _n) => a) + .add2("null", "*", (_n, a) => a) + .add2("*", "*", (a, b, ctx) => (Values.compareValue(a, b, ctx.linkHandler.normalize) <= 0 ? a : b)) + .add1("array", (a, ctx) => DefaultFunctions.min(ctx, ...a)) + .vararg((ctx, ...args) => (args.length == 0 ? null : args.reduce((p, c) => DefaultFunctions.min(ctx, p, c)))) + .build(); + DefaultFunctions.max = new FunctionBuilder("max") + .add2("*", "null", (a, _n) => a) + .add2("null", "*", (_n, a) => a) + .add2("*", "*", (a, b, ctx) => (Values.compareValue(a, b, ctx.linkHandler.normalize) > 0 ? a : b)) + .add1("array", (a, ctx) => DefaultFunctions.max(ctx, ...a)) + .vararg((ctx, ...args) => (args.length == 0 ? null : args.reduce((p, c) => DefaultFunctions.max(ctx, p, c)))) + .build(); + DefaultFunctions.minby = new FunctionBuilder("minby") + .add2("array", "function", (arr, func, ctx) => { + if (arr.length == 0) + return null; + let values = arr.map(v => { + return { value: v, mapped: func(ctx, v) }; + }); + let filtered = values.filter(v => !Values.isNull(v.mapped)); + if (filtered.length == 0) + return arr[0]; + return filtered.reduce((p, c) => { + if (Values.compareValue(p.mapped, c.mapped, ctx.linkHandler.normalize) <= 0) + return p; + else + return c; + }).value; + }) + .add2("null", "function", (_arr, _func, _ctx) => null) + .build(); + DefaultFunctions.maxby = new FunctionBuilder("maxby") + .add2("array", "function", (arr, func, ctx) => { + if (arr.length == 0) + return null; + let values = arr.map(v => { + return { value: v, mapped: func(ctx, v) }; + }); + let filtered = values.filter(v => !Values.isNull(v.mapped)); + if (filtered.length == 0) + return arr[0]; + return filtered.reduce((p, c) => { + if (Values.compareValue(p.mapped, c.mapped, ctx.linkHandler.normalize) > 0) + return p; + else + return c; + }).value; + }) + .add2("null", "function", (_arr, _func, _ctx) => null) + .build(); + DefaultFunctions.striptime = new FunctionBuilder("striptime") + .add1("date", d => DateTime.fromObject({ year: d.year, month: d.month, day: d.day })) + .add1("null", _n => null) + .vectorize(1, [0]) + .build(); + // Default contains, which looks through data structures recursively. + DefaultFunctions.contains = new FunctionBuilder("contains") + .add2("array", "*", (l, elem, context) => l.some(e => DefaultFunctions.contains(context, e, elem))) + .add2("string", "string", (haystack, needle) => haystack.includes(needle)) + .add2("object", "string", (obj, key) => key in obj) + .add2("*", "*", (elem1, elem2, context) => context.evaluate(Fields.binaryOp(Fields.literal(elem1), "=", Fields.literal(elem2))).orElseThrow()) + .vectorize(2, [1]) + .build(); + // Case insensitive version of contains. + DefaultFunctions.icontains = new FunctionBuilder("icontains") + .add2("array", "*", (l, elem, context) => l.some(e => DefaultFunctions.icontains(context, e, elem))) + .add2("string", "string", (haystack, needle) => haystack.toLocaleLowerCase().includes(needle.toLocaleLowerCase())) + .add2("object", "string", (obj, key) => key in obj) + .add2("*", "*", (elem1, elem2, context) => context.evaluate(Fields.binaryOp(Fields.literal(elem1), "=", Fields.literal(elem2))).orElseThrow()) + .vectorize(2, [1]) + .build(); + // "exact" contains, does not look recursively. + DefaultFunctions.econtains = new FunctionBuilder("econtains") + .add2("array", "*", (l, elem, context) => l.some(e => context.evaluate(Fields.binaryOp(Fields.literal(elem), "=", Fields.literal(e))).orElseThrow())) + .add2("string", "string", (haystack, needle) => haystack.includes(needle)) + .add2("object", "string", (obj, key) => key in obj) + .add2("*", "*", (elem1, elem2, context) => context.evaluate(Fields.binaryOp(Fields.literal(elem1), "=", Fields.literal(elem2))).orElseThrow()) + .vectorize(2, [1]) + .build(); + // Case insensitive contains which looks for exact word matches (i.e., boundary-to-boundary match). + DefaultFunctions.containsword = new FunctionBuilder("containsword") + .add2("string", "string", (hay, needle) => !!hay.match(new RegExp(".*\\b" + escapeRegex(needle) + "\\b.*", "i"))) + .add2("null", "*", (_a, _b) => null) + .add2("*", "null", (_a, _b) => null) + .vectorize(2, [0, 1]) + .build(); + /** Extract 0 or more keys from a given object via indexing. */ + DefaultFunctions.extract = (context, ...args) => { + if (args.length == 0) + return "extract(object, key1, ...) requires at least 1 argument"; + // Manually handle vectorization in the first argument. + let object = args[0]; + if (Values.isArray(object)) + return object.map(v => DefaultFunctions.extract(context, v, ...args.slice(1))); + let result = {}; + for (let index = 1; index < args.length; index++) { + let key = args[index]; + if (!Values.isString(key)) + throw Error("extract(object, key1, ...) must be called with string keys"); + result[key] = context.evaluate(Fields.index(Fields.literal(object), Fields.literal(key))).orElseThrow(); + } + return result; + }; + // Reverse an array or string. + DefaultFunctions.reverse = new FunctionBuilder("reverse") + .add1("array", l => { + let result = []; + for (let index = l.length - 1; index >= 0; index--) + result.push(l[index]); + return result; + }) + .add1("string", l => { + let result = ""; + for (let c = 0; c < l.length; c++) + result += l[l.length - c - 1]; + return result; + }) + .add1("*", e => e) + .build(); + // Sort an array; if given two arguments, sorts by the key returned. + DefaultFunctions.sort = new FunctionBuilder("sort") + .add1("array", (list, context) => DefaultFunctions.sort(context, list, (_ctx, a) => a)) + .add2("array", "function", (list, key, context) => { + let result = [].concat(list); + result.sort((a, b) => { + let akey = key(context, a); + let bkey = key(context, b); + let le = context + .evaluate(Fields.binaryOp(Fields.literal(akey), "<", Fields.literal(bkey))) + .orElseThrow(); + if (Values.isTruthy(le)) + return -1; + let eq = context + .evaluate(Fields.binaryOp(Fields.literal(akey), "=", Fields.literal(bkey))) + .orElseThrow(); + if (Values.isTruthy(eq)) + return 0; + return 1; + }); + return result; + }) + .add1("*", e => e) + .build(); + DefaultFunctions.regextest = new FunctionBuilder("regextest") + .add2("string", "string", (pattern, field) => RegExp(pattern).test(field)) + .add2("null", "*", (_n, _a) => false) + .add2("*", "null", (_a, _n) => false) + .vectorize(2, [0, 1]) + .build(); + DefaultFunctions.regexmatch = new FunctionBuilder("regexmatch") + .add2("string", "string", (pattern, field) => { + if (!pattern.startsWith("^") && !pattern.endsWith("$")) + pattern = "^" + pattern + "$"; + return !!field.match(pattern); + }) + .add2("null", "*", (_n, _a) => false) + .add2("*", "null", (_a, _n) => false) + .vectorize(2, [0, 1]) + .build(); + DefaultFunctions.regexreplace = new FunctionBuilder("regexreplace") + .add3("string", "string", "string", (field, pat, rep) => { + try { + let reg = new RegExp(pat, "g"); + return field.replace(reg, rep); + } + catch (ex) { + throw Error(`Invalid regexp '${pat}' in regexreplace`); + } + }) + .add3("null", "*", "*", () => null) + .add3("*", "null", "*", () => null) + .add3("*", "*", "null", () => null) + .vectorize(3, [0, 1, 2]) + .build(); + DefaultFunctions.lower = new FunctionBuilder("lower") + .add1("string", s => s.toLocaleLowerCase()) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + DefaultFunctions.upper = new FunctionBuilder("upper") + .add1("string", s => s.toLocaleUpperCase()) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + DefaultFunctions.replace = new FunctionBuilder("replace") + .add3("string", "string", "string", (str, pat, repr) => str.split(pat).join(repr)) + .add3("null", "*", "*", () => null) + .add3("*", "null", "*", () => null) + .add3("*", "*", "null", () => null) + .vectorize(3, [0, 1, 2]) + .build(); + // Ensure undefined matches turn into empty strings for split/2 and split/3. + const splitImpl = (str, delim, limit) => str.split(new RegExp(delim), limit).map(str => str || ""); + /** Split a string on a given string. */ + DefaultFunctions.split = new FunctionBuilder("split") + .add2("string", "string", (string, splitter) => splitImpl(string, splitter)) + .add3("string", "string", "number", (string, splitter, limit) => splitImpl(string, splitter, limit)) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .add3("*", "*", "null", () => null) + .add3("*", "null", "*", () => null) + .add3("null", "*", "*", () => null) + .build(); + DefaultFunctions.startswith = new FunctionBuilder("startswith") + .add2("string", "string", (str, starting) => str.startsWith(starting)) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .vectorize(2, [0, 1]) + .build(); + DefaultFunctions.endswith = new FunctionBuilder("endswith") + .add2("string", "string", (str, ending) => str.endsWith(ending)) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .vectorize(2, [0, 1]) + .build(); + DefaultFunctions.padleft = new FunctionBuilder("padleft") + .add2("string", "number", (str, len) => str.padStart(len, " ")) + .add3("string", "number", "string", (str, len, padding) => str.padStart(len, padding)) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .add3("null", "*", "*", () => null) + .add3("*", "null", "*", () => null) + .add3("*", "*", "null", () => null) + .vectorize(2, [0, 1]) + .vectorize(3, [0, 1, 2]) + .build(); + DefaultFunctions.padright = new FunctionBuilder("padright") + .add2("string", "number", (str, len) => str.padEnd(len, " ")) + .add3("string", "number", "string", (str, len, padding) => str.padEnd(len, padding)) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .add3("null", "*", "*", () => null) + .add3("*", "null", "*", () => null) + .add3("*", "*", "null", () => null) + .vectorize(2, [0, 1]) + .vectorize(3, [0, 1, 2]) + .build(); + DefaultFunctions.substring = new FunctionBuilder("substring") + .add2("string", "number", (str, start) => str.substring(start)) + .add3("string", "number", "number", (str, start, end) => str.substring(start, end)) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .add3("null", "*", "*", () => null) + .add3("*", "null", "*", () => null) + .add3("*", "*", "null", () => null) + .vectorize(2, [0, 1]) + .vectorize(3, [0, 1, 2]) + .build(); + DefaultFunctions.truncate = new FunctionBuilder("truncate") + .add3("string", "number", "string", (str, length, suffix) => { + if (str.length > length - suffix.length) { + return str.substring(0, Math.max(0, length - suffix.length)) + suffix; + } + else { + return str; + } + }) + .add2("string", "number", (str, length, ctx) => DefaultFunctions.truncate(ctx, str, length, "...")) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .add3("null", "*", "*", () => null) + .add3("*", "null", "*", () => null) + .add3("*", "*", "null", () => null) + .vectorize(2, [0, 1]) + .vectorize(3, [0, 1, 2]) + .build(); + DefaultFunctions.fdefault = new FunctionBuilder("default") + .add2("*", "*", (v, bk) => (Values.isNull(v) ? bk : v)) + .vectorize(2, [0, 1]) + .build(); + DefaultFunctions.ldefault = new FunctionBuilder("ldefault") + .add2("*", "*", (v, bk) => (Values.isNull(v) ? bk : v)) + .build(); + // Returns the display name of the element. + DefaultFunctions.display = new FunctionBuilder("display") + .add1("null", () => "") + .add1("array", (a, ctx) => { + return a.map(e => DefaultFunctions.display(ctx, e)).join(", "); + }) + .add1("string", (str) => normalizeMarkdown(str)) + .add1("link", (a, ctx) => { + if (a.display) { + return DefaultFunctions.display(ctx, a.display); + } + else { + return Values.toString(a, ctx.settings).replace(/\[\[.*\|(.*)\]\]/, "$1"); + } + }) + .add1("*", (a, ctx) => { + return Values.toString(a, ctx.settings); + }) + .build(); + DefaultFunctions.choice = new FunctionBuilder("choice") + .add3("*", "*", "*", (b, left, right) => (Values.isTruthy(b) ? left : right)) + .vectorize(3, [0]) + .build(); + DefaultFunctions.hash = new FunctionBuilder("hash") + .add2("string", "number", (seed, variant) => { + return cyrb53(seed, variant); + }) + .add2("string", "string", (seed, text) => { + return cyrb53(seed + text); + }) + .add3("string", "string", "number", (seed, text, variant) => { + return cyrb53(seed + text, variant); + }) + .build(); + DefaultFunctions.reduce = new FunctionBuilder("reduce") + .add2("array", "string", (lis, op, context) => { + if (lis.length == 0) + return null; + if (op != "+" && op != "-" && op != "*" && op != "/" && op != "&" && op != "|") + throw Error("reduce(array, op) supports '+', '-', '/', '*', '&', and '|'"); + let value = lis[0]; + for (let index = 1; index < lis.length; index++) { + value = context + .evaluate(Fields.binaryOp(Fields.literal(value), op, Fields.literal(lis[index]))) + .orElseThrow(); + } + return value; + }) + .add2("array", "function", (lis, op, context) => { + if (lis.length == 0) + return null; + let value = lis[0]; + for (let index = 1; index < lis.length; index++) { + // Skip null values to reduce the pain of summing over fields that may or may not exist. + if (Values.isNull(lis[index])) + continue; + value = op(context, value, lis[index]); + } + return value; + }) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .vectorize(2, [1]) + .build(); + DefaultFunctions.sum = new FunctionBuilder("sum") + .add1("array", (arr, c) => DefaultFunctions.reduce(c, arr, "+")) + .add1("*", e => e) + .build(); + DefaultFunctions.average = new FunctionBuilder("average") + .add1("array", (array, context) => { + if (array.length == 0) + return null; + const add = DefaultFunctions.sum(context, array); + if (add == null || add == undefined) + return null; + return context + .evaluate(Fields.binaryOp(Fields.literal(add), "/", Fields.literal(array.length))) + .orElseThrow(); + }) + .add1("*", e => e) + .build(); + DefaultFunctions.product = new FunctionBuilder("product") + .add1("array", (arr, c) => DefaultFunctions.reduce(c, arr, "*")) + .add1("*", e => e) + .build(); + DefaultFunctions.join = new FunctionBuilder("join") + .add2("array", "string", (arr, sep, ctx) => arr.map(e => Values.toString(e, ctx.settings)).join(sep)) + .add2("array", "null", (arr, _s, context) => DefaultFunctions.join(context, arr, ", ")) + .add2("*", "string", (elem, sep, ctx) => Values.toString(elem, ctx.settings)) + .add1("array", (arr, context) => DefaultFunctions.join(context, arr, ", ")) + .add1("*", (e, ctx) => Values.toString(e, ctx.settings)) + .vectorize(2, [1]) + .build(); + DefaultFunctions.any = new FunctionBuilder("any") + .add1("array", arr => arr.some(v => Values.isTruthy(v))) + .add2("array", "function", (arr, f, ctx) => arr.some(v => Values.isTruthy(f(ctx, v)))) + .vararg((_ctx, ...args) => args.some(v => Values.isTruthy(v))) + .build(); + DefaultFunctions.all = new FunctionBuilder("all") + .add1("array", arr => arr.every(v => Values.isTruthy(v))) + .add2("array", "function", (arr, f, ctx) => arr.every(v => Values.isTruthy(f(ctx, v)))) + .vararg((_ctx, ...args) => args.every(v => Values.isTruthy(v))) + .build(); + DefaultFunctions.none = new FunctionBuilder("all") + .add1("array", arr => !arr.some(v => Values.isTruthy(v))) + .add2("array", "function", (arr, f, ctx) => !arr.some(v => Values.isTruthy(f(ctx, v)))) + .vararg((_ctx, ...args) => !args.some(v => Values.isTruthy(v))) + .build(); + DefaultFunctions.filter = new FunctionBuilder("filter") + .add2("array", "function", (arr, f, ctx) => arr.filter(v => Values.isTruthy(f(ctx, v)))) + .add2("null", "*", () => null) + .build(); + DefaultFunctions.unique = new FunctionBuilder("unique") + .add1("array", (arr, ctx) => DataArray.wrap(arr, ctx.settings).distinct().array()) + .add1("null", () => null) + .build(); + DefaultFunctions.map = new FunctionBuilder("map") + .add2("array", "function", (arr, f, ctx) => arr.map(v => f(ctx, v))) + .add2("null", "*", () => null) + .build(); + DefaultFunctions.nonnull = new FunctionBuilder("nonnull") + .add1("array", arr => arr.filter(v => Values.typeOf(v) != "null")) + .vararg((_ctx, ...args) => args.filter(v => Values.typeOf(v) != "null")) + .build(); + /** Gets an object containing a link's own properties */ + DefaultFunctions.meta = new FunctionBuilder("meta") + .add1("link", link => ({ + display: link.display ?? null, + embed: link.embed, + path: link.path, + subpath: link.subpath ?? null, + type: link.type, + })) + .build(); + // Concatenates sub-array elements into a new array + DefaultFunctions.flat = new FunctionBuilder("flat") + .add1("array", a => { + return a.flat(); + }) + .add2("array", "number", (a, n) => { + // @ts-ignore + return a.flat(n); + }) + .add1("null", () => null) + .build(); + // Slices the array into a new array + DefaultFunctions.slice = new FunctionBuilder("slice") + .add1("array", a => { + return a.slice(); + }) + .add2("array", "number", (a, start) => { + return a.slice(start); + }) + .add3("array", "number", "number", (a, start, end) => { + return a.slice(start, end); + }) + .add1("null", () => null) + .build(); + // Returns the first non-null value from the array as a single element + DefaultFunctions.firstvalue = new FunctionBuilder("firstvalue") + .add1("array", a => { + let nonnull = a.filter(v => Values.typeOf(v) != "null"); + let res = nonnull.length != 0 ? nonnull[0] : null; + return res; + }) + .add1("null", () => null) + .build(); +})(DefaultFunctions || (DefaultFunctions = {})); +/** Default function implementations for the expression evaluator. */ +// Keep functions in same order as they're documented !! +const DEFAULT_FUNCTIONS = { + // Constructors + object: DefaultFunctions.object, + list: DefaultFunctions.list, + array: DefaultFunctions.list, + date: DefaultFunctions.date, + dur: DefaultFunctions.dur, + number: DefaultFunctions.number, + string: DefaultFunctions.string, + link: DefaultFunctions.link, + embed: DefaultFunctions.embed, + elink: DefaultFunctions.elink, + typeof: DefaultFunctions.typeOf, + // Numeric Operations + round: DefaultFunctions.round, + trunc: DefaultFunctions.trunc, + floor: DefaultFunctions.floor, + ceil: DefaultFunctions.ceil, + min: DefaultFunctions.min, + max: DefaultFunctions.max, + sum: DefaultFunctions.sum, + product: DefaultFunctions.product, + average: DefaultFunctions.average, + minby: DefaultFunctions.minby, + maxby: DefaultFunctions.maxby, + // Object, Arrays, and String operations + contains: DefaultFunctions.contains, + icontains: DefaultFunctions.icontains, + econtains: DefaultFunctions.econtains, + containsword: DefaultFunctions.containsword, + extract: DefaultFunctions.extract, + sort: DefaultFunctions.sort, + reverse: DefaultFunctions.reverse, + length: DefaultFunctions.length, + nonnull: DefaultFunctions.nonnull, + firstvalue: DefaultFunctions.firstvalue, + all: DefaultFunctions.all, + any: DefaultFunctions.any, + none: DefaultFunctions.none, + join: DefaultFunctions.join, + filter: DefaultFunctions.filter, + map: DefaultFunctions.map, + flat: DefaultFunctions.flat, + slice: DefaultFunctions.slice, + unique: DefaultFunctions.unique, + reduce: DefaultFunctions.reduce, + // String Operations + regextest: DefaultFunctions.regextest, + regexmatch: DefaultFunctions.regexmatch, + regexreplace: DefaultFunctions.regexreplace, + replace: DefaultFunctions.replace, + lower: DefaultFunctions.lower, + upper: DefaultFunctions.upper, + split: DefaultFunctions.split, + startswith: DefaultFunctions.startswith, + endswith: DefaultFunctions.endswith, + padleft: DefaultFunctions.padleft, + padright: DefaultFunctions.padright, + substring: DefaultFunctions.substring, + truncate: DefaultFunctions.truncate, + // Utility Operations + default: DefaultFunctions.fdefault, + ldefault: DefaultFunctions.ldefault, + display: DefaultFunctions.display, + choice: DefaultFunctions.choice, + striptime: DefaultFunctions.striptime, + dateformat: DefaultFunctions.dateformat, + durationformat: DefaultFunctions.durationformat, + currencyformat: DefaultFunctions.currencyformat, + localtime: DefaultFunctions.localtime, + hash: DefaultFunctions.hash, + meta: DefaultFunctions.meta, +}; + +/** Provides a global dispatch table for evaluating binary operators, including comparison. */ +/** Provides implementations for binary operators on two types using a registry. */ +class BinaryOpHandler { + map; + static create() { + return new BinaryOpHandler(); + } + constructor() { + this.map = new Map(); + } + register(left, op, right, func) { + this.map.set(BinaryOpHandler.repr(op, left, right), func); + return this; + } + registerComm(left, op, right, func) { + return this.register(left, op, right, func).register(right, op, left, (a, b, ctx) => func(b, a, ctx)); + } + /** Implement a comparison function. */ + compare(type, compare) { + return this.register(type, "<", type, (a, b, ctx) => compare(a, b, ctx) < 0) + .register(type, "<=", type, (a, b, ctx) => compare(a, b, ctx) <= 0) + .register(type, ">", type, (a, b, ctx) => compare(a, b, ctx) > 0) + .register(type, ">=", type, (a, b, ctx) => compare(a, b, ctx) >= 0) + .register(type, "=", type, (a, b, ctx) => compare(a, b, ctx) == 0) + .register(type, "!=", type, (a, b, ctx) => compare(a, b, ctx) != 0); + } + /** Attempt to evaluate the given binary operator on the two literal fields. */ + evaluate(op, left, right, ctx) { + let leftType = Values.typeOf(left); + let rightType = Values.typeOf(right); + if (!leftType) + return Result.failure(`Unrecognized value '${left}'`); + else if (!rightType) + return Result.failure(`Unrecognized value '${right}'`); + let handler = this.map.get(BinaryOpHandler.repr(op, leftType, rightType)); + if (handler) + return Result.success(handler(left, right, ctx)); + // Right-'*' fallback: + let handler2 = this.map.get(BinaryOpHandler.repr(op, leftType, "*")); + if (handler2) + return Result.success(handler2(left, right, ctx)); + // Left-'*' fallback: + let handler3 = this.map.get(BinaryOpHandler.repr(op, "*", rightType)); + if (handler3) + return Result.success(handler3(left, right, ctx)); + // Double '*' fallback. + let handler4 = this.map.get(BinaryOpHandler.repr(op, "*", "*")); + if (handler4) + return Result.success(handler4(left, right, ctx)); + return Result.failure(`No implementation found for '${leftType} ${op} ${rightType}'`); + } + /** Create a string representation of the given triplet for unique lookup in the map. */ + static repr(op, left, right) { + return `${left},${op},${right}`; + } +} +/** Configure and create a binary OP handler with the given parameters. */ +function createBinaryOps(linkNormalizer) { + return (BinaryOpHandler.create() + // TODO: Consider not using a universal comparison function. + .compare("*", (a, b) => Values.compareValue(a, b, linkNormalizer)) + // Global boolean operations. + .register("*", "&", "*", (a, b) => Values.isTruthy(a) && Values.isTruthy(b)) + .register("*", "|", "*", (a, b) => Values.isTruthy(a) || Values.isTruthy(b)) + // Number implementations. + .register("number", "+", "number", (a, b) => a + b) + .register("number", "-", "number", (a, b) => a - b) + .register("number", "*", "number", (a, b) => a * b) + .register("number", "/", "number", (a, b) => a / b) + .register("number", "%", "number", (a, b) => a % b) + // String implementations. + .register("string", "+", "*", (a, b, ctx) => a + Values.toString(b, ctx.settings)) + .register("*", "+", "string", (a, b, ctx) => Values.toString(a, ctx.settings) + b) + .registerComm("string", "*", "number", (a, b) => (b < 0 ? "" : a.repeat(b))) + // Date Operations. + .register("date", "-", "date", (a, b) => { + return normalizeDuration(a.diff(b, ["years", "months", "days", "hours", "minutes", "seconds", "milliseconds"])); + }) + .register("date", "-", "duration", (a, b) => a.minus(b)) + .registerComm("date", "+", "duration", (a, b) => a.plus(b)) + // Duration Operations. + .register("duration", "+", "duration", (a, b) => normalizeDuration(a.plus(b))) + .register("duration", "-", "duration", (a, b) => normalizeDuration(a.minus(b))) + .register("duration", "/", "number", (a, b) => normalizeDuration(a.mapUnits(x => x / b))) + .registerComm("duration", "*", "number", (a, b) => normalizeDuration(a.mapUnits(x => x * b))) + // Array operations. + .register("array", "+", "array", (a, b) => [].concat(a).concat(b)) + // Object operations. + .register("object", "+", "object", (a, b) => Object.assign({}, a, b)) + // Null handling operators. + .register("null", "+", "null", (_a, _b) => null) + .register("null", "-", "null", (_a, _b) => null) + .register("null", "*", "null", (_a, _b) => null) + .register("null", "/", "null", (_a, _b) => null) + .register("null", "%", "null", (_a, _b) => null) + .register("date", "+", "null", (_a, _b) => null) + .register("null", "+", "date", (_a, _b) => null) + .register("date", "-", "null", (_a, _b) => null) + .register("null", "-", "date", (_a, _b) => null)); +} + +/** Core implementation of the query language evaluation engine. */ +/** + * Evaluation context that expressions can be evaluated in. Includes global state, as well as available functions and a handler + * for binary operators. + */ +class Context { + linkHandler; + settings; + globals; + binaryOps; + functions; + /** + * Create a new context with the given namespace of globals, as well as optionally with custom binary operator, function, + * and link handlers. + */ + constructor(linkHandler, settings, globals = {}, binaryOps = createBinaryOps(linkHandler.normalize), functions = DEFAULT_FUNCTIONS) { + this.linkHandler = linkHandler; + this.settings = settings; + this.globals = globals; + this.binaryOps = binaryOps; + this.functions = functions; + } + /** Set a global value in this context. */ + set(name, value) { + this.globals[name] = value; + return this; + } + /** Get the value of a global variable by name. Returns null if not present. */ + get(name) { + return this.globals[name] ?? null; + } + /** Try to evaluate an arbitrary field in this context, raising an exception on failure. */ + tryEvaluate(field, data = {}) { + return this.evaluate(field, data).orElseThrow(); + } + /** Evaluate an arbitrary field in this context. */ + evaluate(field, data = {}) { + switch (field.type) { + case "literal": + return Result.success(field.value); + case "variable": + if (field.name in data) + return Result.success(data[field.name]); + else if (field.name in this.globals) + return Result.success(this.globals[field.name]); + else + return Result.success(null); + case "negated": + return this.evaluate(field.child, data).map(s => !Values.isTruthy(s)); + case "binaryop": + return Result.flatMap2(this.evaluate(field.left, data), this.evaluate(field.right, data), (a, b) => this.binaryOps.evaluate(field.op, a, b, this)); + case "list": + let result = []; + for (let child of field.values) { + let subeval = this.evaluate(child, data); + if (!subeval.successful) + return subeval; + result.push(subeval.value); + } + return Result.success(result); + case "object": + let objResult = {}; + for (let [key, child] of Object.entries(field.values)) { + let subeval = this.evaluate(child, data); + if (!subeval.successful) + return subeval; + objResult[key] = subeval.value; + } + return Result.success(objResult); + case "lambda": + // Just relying on JS to capture 'data' for us implicitly; unsure + // if this is correct thing to do. Could cause weird behaviors. + return Result.success((ctx, ...args) => { + let copy = Object.assign({}, data); + for (let arg = 0; arg < Math.min(args.length, field.arguments.length); arg++) { + copy[field.arguments[arg]] = args[arg]; + } + return ctx.evaluate(field.value, copy).orElseThrow(); + }); + case "function": + let rawFunc = field.func.type == "variable" + ? Result.success(field.func.name) + : this.evaluate(field.func, data); + if (!rawFunc.successful) + return rawFunc; + let func = rawFunc.value; + let args = []; + for (let arg of field.arguments) { + let resolved = this.evaluate(arg, data); + if (!resolved.successful) + return resolved; + args.push(resolved.value); + } + let call; + if (Values.isFunction(func)) + call = func; + else if (Values.isString(func) && func in this.functions) + call = this.functions[func]; + else if (Values.isString(func)) + return Result.failure(`Unrecognized function name '${func}'`); + else + return Result.failure(`Cannot call type '${Values.typeOf(func)}' as a function`); + try { + return Result.success(call(this, ...args)); + } + catch (e) { + return Result.failure(e.message); + } + case "index": + // TODO: Will move this out to an 'primitives' module and add more content to it. + let literalIndex = this.evaluate(field.index, data); + let checkedIndex = literalIndex.flatMap(s => Values.isString(s) || Values.isNumber(s) || Values.isNull(s) + ? Result.success(s) + : Result.failure("Can only index with a string or number")); + if (!checkedIndex.successful) + return checkedIndex; + let index = checkedIndex.value; + if (Values.isNull(index)) + return Result.success(null); + let checkedObject = field.object.type == "variable" && field.object.name == "row" + ? Result.success(Object.assign({}, this.globals, data)) + : this.evaluate(field.object, data); + if (!checkedObject.successful) + return checkedObject; + let object = Values.wrapValue(checkedObject.value); + if (!object) + return Result.failure("Unrecognized object to index into: " + object); + switch (object.type) { + case "object": + if (!Values.isString(index)) + return Result.failure('can only index into objects with strings (a.b or a["b"])'); + return Result.success(object.value[index] ?? null); + case "link": + if (!Values.isString(index)) + return Result.failure('can only index into links with strings (a.b or a["b"])'); + let linkValue = this.linkHandler.resolve(object.value.path); + if (Values.isNull(linkValue)) + return Result.success(null); + return Result.success(linkValue[index] ?? null); + case "array": + if (Values.isNumber(index)) { + if (index >= object.value.length || index < 0) + return Result.success(null); + else + return Result.success(object.value[index]); + } + else if (Values.isString(index)) { + let result = []; + for (let value of object.value) { + let next = this.evaluate(Fields.index(Fields.literal(value), Fields.literal(index))); + if (!next.successful) + continue; + result.push(next.value); + } + return Result.success(result); + } + else { + return Result.failure("Array indexing requires either a number (to get a specific element), or a string (to map all elements inside the array)"); + } + case "string": + if (!Values.isNumber(index)) + return Result.failure("string indexing requires a numeric index (string[index])"); + if (index >= object.value.length || index < 0) + return Result.success(null); + return Result.success(object.value[index]); + case "date": + if (!Values.isString(index)) + return Result.failure("date indexing requires a string representing the unit"); + switch (index) { + case "year": + return Result.success(object.value.year); + case "month": + return Result.success(object.value.month); + case "weekyear": + return Result.success(object.value.weekNumber); + case "week": + return Result.success(Math.floor(object.value.day / 7) + 1); + case "weekday": + return Result.success(object.value.weekday); + case "day": + return Result.success(object.value.day); + case "hour": + return Result.success(object.value.hour); + case "minute": + return Result.success(object.value.minute); + case "second": + return Result.success(object.value.second); + case "millisecond": + return Result.success(object.value.millisecond); + default: + return Result.success(null); + } + case "duration": + if (!Values.isString(index)) + return Result.failure("duration indexing requires a string representing the unit"); + switch (index) { + case "year": + case "years": + return Result.success(object.value.shiftTo("years").years); + case "month": + case "months": + return Result.success(object.value.shiftTo("months").months); + case "weeks": + return Result.success(object.value.shiftTo("weeks").weeks); + case "day": + case "days": + return Result.success(object.value.shiftTo("days").days); + case "hour": + case "hours": + return Result.success(object.value.shiftTo("hours").hours); + case "minute": + case "minutes": + return Result.success(object.value.shiftTo("minutes").minutes); + case "second": + case "seconds": + return Result.success(object.value.shiftTo("seconds").seconds); + case "millisecond": + case "milliseconds": + return Result.success(object.value.shiftTo("milliseconds").milliseconds); + default: + return Result.success(null); + } + default: + return Result.success(null); + } + } + } +} + +function iden(x) { + return x; +} +/** Shared execution code which just takes in arbitrary data, runs operations over it, and returns it + per-row errors. */ +function executeCore(rows, context, ops) { + let diagnostics = []; + let identMeaning = { type: "path" }; + let startTime = Date.now(); + for (let op of ops) { + let opStartTime = Date.now(); + let incomingRows = rows.length; + let errors = []; + switch (op.type) { + case "where": + let whereResult = []; + for (let index = 0; index < rows.length; index++) { + let row = rows[index]; + let value = context.evaluate(op.clause, row.data); + if (!value.successful) + errors.push({ index, message: value.error }); + else if (Values.isTruthy(value.value)) + whereResult.push(row); + } + rows = whereResult; + break; + case "sort": + let sortFields = op.fields; + let taggedData = []; + outer: for (let index = 0; index < rows.length; index++) { + let row = rows[index]; + let rowSorts = []; + for (let sIndex = 0; sIndex < sortFields.length; sIndex++) { + let value = context.evaluate(sortFields[sIndex].field, row.data); + if (!value.successful) { + errors.push({ index, message: value.error }); + continue outer; + } + rowSorts.push(value.value); + } + taggedData.push({ data: row, fields: rowSorts }); + } + // Sort rows by the sort fields, and then return the finished result. + taggedData.sort((a, b) => { + for (let index = 0; index < sortFields.length; index++) { + let factor = sortFields[index].direction === "ascending" ? 1 : -1; + let le = context.binaryOps + .evaluate("<", a.fields[index], b.fields[index], context) + .orElse(false); + if (Values.isTruthy(le)) + return factor * -1; + let ge = context.binaryOps + .evaluate(">", a.fields[index], b.fields[index], context) + .orElse(false); + if (Values.isTruthy(ge)) + return factor * 1; + } + return 0; + }); + rows = taggedData.map(v => v.data); + break; + case "limit": + let limiting = context.evaluate(op.amount); + if (!limiting.successful) + return Result.failure("Failed to execute 'limit' statement: " + limiting.error); + if (!Values.isNumber(limiting.value)) + return Result.failure(`Failed to execute 'limit' statement: limit should be a number, but got '${Values.typeOf(limiting.value)}' (${limiting.value})`); + rows = rows.slice(0, limiting.value); + break; + case "group": + let groupData = []; + for (let index = 0; index < rows.length; index++) { + let value = context.evaluate(op.field.field, rows[index].data); + if (!value.successful) { + errors.push({ index, message: value.error }); + continue; + } + groupData.push({ data: rows[index], key: value.value }); + } + // Sort by the key, which we will group on shortly. + groupData.sort((a, b) => { + let le = context.binaryOps.evaluate("<", a.key, b.key, context).orElse(false); + if (Values.isTruthy(le)) + return -1; + let ge = context.binaryOps.evaluate(">", a.key, b.key, context).orElse(false); + if (Values.isTruthy(ge)) + return 1; + return 0; + }); + // Then walk through and find fields that are equal. + let finalGroupData = []; + if (groupData.length > 0) + finalGroupData.push({ + key: groupData[0].key, + rows: [groupData[0].data.data], + [op.field.name]: groupData[0].key, + }); + for (let index = 1; index < groupData.length; index++) { + let curr = groupData[index], prev = groupData[index - 1]; + if (context.binaryOps.evaluate("=", curr.key, prev.key, context).orElse(false)) { + finalGroupData[finalGroupData.length - 1].rows.push(curr.data.data); + } + else { + finalGroupData.push({ + key: curr.key, + rows: [curr.data.data], + [op.field.name]: curr.key, + }); + } + } + rows = finalGroupData.map(d => { + return { id: d.key, data: d }; + }); + identMeaning = { type: "group", name: op.field.name, on: identMeaning }; + break; + case "flatten": + let flattenResult = []; + for (let index = 0; index < rows.length; index++) { + let row = rows[index]; + let value = context.evaluate(op.field.field, row.data); + if (!value.successful) { + errors.push({ index, message: value.error }); + continue; + } + let datapoints = Values.isArray(value.value) ? value.value : [value.value]; + for (let v of datapoints) { + let copy = Values.deepCopy(row); + copy.data[op.field.name] = v; + flattenResult.push(copy); + } + } + rows = flattenResult; + if (identMeaning.type == "group" && identMeaning.name == op.field.name) + identMeaning = identMeaning.on; + break; + default: + return Result.failure("Unrecognized query operation '" + op.type + "'"); + } + if (errors.length >= incomingRows && incomingRows > 0) { + return Result.failure(`Every row during operation '${op.type}' failed with an error; first ${Math.min(3, errors.length)}:\n + ${errors + .slice(0, 3) + .map(d => "- " + d.message) + .join("\n")}`); + } + diagnostics.push({ + incomingRows, + errors, + outgoingRows: rows.length, + timeMs: Date.now() - opStartTime, + }); + } + return Result.success({ + data: rows, + idMeaning: identMeaning, + ops, + diagnostics, + timeMs: Date.now() - startTime, + }); +} +/** Expanded version of executeCore which adds an additional "extraction" step to the pipeline. */ +function executeCoreExtract(rows, context, ops, fields) { + let internal = executeCore(rows, context, ops); + if (!internal.successful) + return internal; + let core = internal.value; + let startTime = Date.now(); + let errors = []; + let res = []; + outer: for (let index = 0; index < core.data.length; index++) { + let page = { id: core.data[index].id, data: {} }; + for (let [name, field] of Object.entries(fields)) { + let value = context.evaluate(field, core.data[index].data); + if (!value.successful) { + errors.push({ index: index, message: value.error }); + continue outer; + } + page.data[name] = value.value; + } + res.push(page); + } + if (errors.length >= core.data.length && core.data.length > 0) { + return Result.failure(`Every row during final data extraction failed with an error; first ${Math.max(errors.length, 3)}:\n + ${errors + .slice(0, 3) + .map(d => "- " + d.message) + .join("\n")}`); + } + let execTime = Date.now() - startTime; + return Result.success({ + data: res, + idMeaning: core.idMeaning, + diagnostics: core.diagnostics.concat([ + { + timeMs: execTime, + incomingRows: core.data.length, + outgoingRows: res.length, + errors, + }, + ]), + ops: core.ops.concat([{ type: "extract", fields }]), + timeMs: core.timeMs + execTime, + }); +} +/** Execute a list-based query, returning the final results. */ +async function executeList(query, index, origin, settings) { + // Start by collecting all of the files that match the 'from' queries. + let fileset = await resolveSource(query.source, index, origin); + if (!fileset.successful) + return Result.failure(fileset.error); + // Extract information about the origin page to add to the root context. + let rootContext = new Context(defaultLinkHandler(index, origin), settings, { + this: index.pages.get(origin)?.serialize(index) ?? {}, + }); + let targetField = query.header.format; + let showId = query.header.showId; + let fields = targetField ? { target: targetField } : {}; + return executeCoreExtract(fileset.value, rootContext, query.operations, fields).map(core => { + let data; + if (showId && targetField) { + data = core.data.map(p => Widgets.listPair(p.id, p.data["target"] ?? null)); + } + else if (targetField) { + data = core.data.map(p => p.data["target"] ?? null); + } + else { + data = core.data.map(p => p.id); + } + return { primaryMeaning: core.idMeaning, core, data }; + }); +} +/** Execute a table query. */ +async function executeTable(query, index, origin, settings) { + // Start by collecting all of the files that match the 'from' queries. + let fileset = await resolveSource(query.source, index, origin); + if (!fileset.successful) + return Result.failure(fileset.error); + // Extract information about the origin page to add to the root context. + let rootContext = new Context(defaultLinkHandler(index, origin), settings, { + this: index.pages.get(origin)?.serialize(index) ?? {}, + }); + let targetFields = query.header.fields; + let showId = query.header.showId; + let fields = {}; + for (let field of targetFields) + fields[field.name] = field.field; + return executeCoreExtract(fileset.value, rootContext, query.operations, fields).map(core => { + if (showId) { + const idName = core.idMeaning.type === "group" ? core.idMeaning.name : settings.tableIdColumnName; + let names = [idName].concat(targetFields.map(f => f.name)); + let data = core.data.map(p => [p.id].concat(targetFields.map(f => p.data[f.name]))); + return { core, names, data, idMeaning: core.idMeaning }; + } + else { + let names = targetFields.map(f => f.name); + let data = core.data.map(p => targetFields.map(f => p.data[f.name])); + return { core, names, data, idMeaning: core.idMeaning }; + } + }); +} +/** Maps a raw core execution result to a task grouping which is much easier to render. */ +function extractTaskGroupings(id, rows) { + switch (id.type) { + case "path": + return rows; + case "group": + let key = id.name; + return rows.map(r => iden({ + key: r[key], + rows: extractTaskGroupings(id.on, r.rows), + })); + } +} +/** Execute a task query, returning all matching tasks. */ +async function executeTask(query, origin, index, settings) { + let fileset = matchingSourcePaths(query.source, index, origin); + if (!fileset.successful) + return Result.failure(fileset.error); + // Collect tasks from pages which match. + let incomingTasks = []; + for (let path of fileset.value) { + let page = index.pages.get(path); + if (!page) + continue; + let pageData = page.serialize(index); + let pageTasks = pageData.file.tasks.map(t => { + const tcopy = Values.deepCopy(t); + // Add page data to this copy. + for (let [key, value] of Object.entries(pageData)) { + if (key in tcopy) + continue; + tcopy[key] = value; + } + return { id: `${pageData.path}#${t.line}`, data: tcopy }; + }); + for (let task of pageTasks) + incomingTasks.push(task); + } + // Extract information about the origin page to add to the root context. + let rootContext = new Context(defaultLinkHandler(index, origin), settings, { + this: index.pages.get(origin)?.serialize(index) ?? {}, + }); + return executeCore(incomingTasks, rootContext, query.operations).map(core => { + return { + core, + tasks: extractTaskGroupings(core.idMeaning, core.data.map(r => r.data)), + }; + }); +} +/** Execute a single field inline a file, returning the evaluated result. */ +function executeInline(field, origin, index, settings) { + return new Context(defaultLinkHandler(index, origin), settings, { + this: index.pages.get(origin)?.serialize(index) ?? {}, + }).evaluate(field); +} +/** The default link resolver used when creating contexts. */ +function defaultLinkHandler(index, origin) { + return { + resolve: link => { + let realFile = index.metadataCache.getFirstLinkpathDest(link, origin); + if (!realFile) + return null; + let realPage = index.pages.get(realFile.path); + if (!realPage) + return null; + return realPage.serialize(index); + }, + normalize: link => { + let realFile = index.metadataCache.getFirstLinkpathDest(link, origin); + return realFile?.path ?? link; + }, + exists: link => { + let realFile = index.metadataCache.getFirstLinkpathDest(link, origin); + return !!realFile; + }, + }; +} +/** Execute a calendar-based query, returning the final results. */ +async function executeCalendar(query, index, origin, settings) { + // Start by collecting all of the files that match the 'from' queries. + let fileset = await resolveSource(query.source, index, origin); + if (!fileset.successful) + return Result.failure(fileset.error); + // Extract information about the origin page to add to the root context. + let rootContext = new Context(defaultLinkHandler(index, origin), settings, { + this: index.pages.get(origin)?.serialize(index) ?? {}, + }); + let targetField = query.header.field.field; + let fields = { + target: targetField, + link: Fields.indexVariable("file.link"), + }; + return executeCoreExtract(fileset.value, rootContext, query.operations, fields).map(core => { + let data = core.data.map(p => iden({ + date: p.data["target"], + link: p.data["link"], + })); + return { core, data }; + }); +} + +function compareVersions(v1, v2) { + // validate input and split into segments + const n1 = validateAndParse(v1); + const n2 = validateAndParse(v2); + + // pop off the patch + const p1 = n1.pop(); + const p2 = n2.pop(); + + // validate numbers + const r = compareSegments(n1, n2); + if (r !== 0) return r; + + // validate pre-release + if (p1 && p2) { + return compareSegments(p1.split('.'), p2.split('.')); + } else if (p1 || p2) { + return p1 ? -1 : 1; + } + + return 0; +} + +const validate = (v) => + typeof v === 'string' && /^[v\d]/.test(v) && semver.test(v); + +const compare = (v1, v2, operator) => { + // validate input operator + assertValidOperator(operator); + + // since result of compareVersions can only be -1 or 0 or 1 + // a simple map can be used to replace switch + const res = compareVersions(v1, v2); + + return operatorResMap[operator].includes(res); +}; + +const satisfies = (v, r) => { + // if no range operator then "=" + const m = r.match(/^([<>=~^]+)/); + const op = m ? m[1] : '='; + + // if gt/lt/eq then operator compare + if (op !== '^' && op !== '~') return compare(v, r, op); + + // else range of either "~" or "^" is assumed + const [v1, v2, v3] = validateAndParse(v); + const [r1, r2, r3] = validateAndParse(r); + if (compareStrings(v1, r1) !== 0) return false; + if (op === '^') { + return compareSegments([v2, v3], [r2, r3]) >= 0; + } + if (compareStrings(v2, r2) !== 0) return false; + return compareStrings(v3, r3) >= 0; +}; + +// export CJS style for parity +compareVersions.validate = validate; +compareVersions.compare = compare; +compareVersions.satisfies = satisfies; + +const semver = + /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i; + +const validateAndParse = (v) => { + if (typeof v !== 'string') { + throw new TypeError('Invalid argument expected string'); + } + const match = v.match(semver); + if (!match) { + throw new Error(`Invalid argument not valid semver ('${v}' received)`); + } + match.shift(); + return match; +}; + +const isWildcard = (s) => s === '*' || s === 'x' || s === 'X'; + +const tryParse = (v) => { + const n = parseInt(v, 10); + return isNaN(n) ? v : n; +}; + +const forceType = (a, b) => + typeof a !== typeof b ? [String(a), String(b)] : [a, b]; + +const compareStrings = (a, b) => { + if (isWildcard(a) || isWildcard(b)) return 0; + const [ap, bp] = forceType(tryParse(a), tryParse(b)); + if (ap > bp) return 1; + if (ap < bp) return -1; + return 0; +}; + +const compareSegments = (a, b) => { + for (let i = 0; i < Math.max(a.length, b.length); i++) { + const r = compareStrings(a[i] || 0, b[i] || 0); + if (r !== 0) return r; + } + return 0; +}; + +const operatorResMap = { + '>': [1], + '>=': [0, 1], + '=': [0], + '<=': [-1, 0], + '<': [-1], +}; + +const allowedOperators = Object.keys(operatorResMap); + +const assertValidOperator = (op) => { + if (typeof op !== 'string') { + throw new TypeError( + `Invalid operator type, expected string but got ${typeof op}` + ); + } + if (allowedOperators.indexOf(op) === -1) { + throw new Error( + `Invalid operator, expected one of ${allowedOperators.join('|')}` + ); + } +}; + +var n,l$1,u$1,i$1,o$1,r$1,f$1,e$1,c$1={},s$1=[],a$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,h$1=Array.isArray;function v$1(n,l){for(var u in l)n[u]=l[u];return n}function p$1(n){var l=n.parentNode;l&&l.removeChild(n);}function y$1(l,u,t){var i,o,r,f={};for(r in u)"key"==r?i=u[r]:"ref"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),"function"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return d$1(l,f,i,o,null)}function d$1(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==r?++u$1:r};return null==r&&null!=l$1.vnode&&l$1.vnode(f),f}function _$1(){return {current:null}}function k$2(n){return n.children}function b$1(n,l){this.props=n,this.context=l;}function g$2(n,l){if(null==l)return n.__?g$2(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return "function"==typeof n.type?g$2(n):null}function m$1(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return m$1(n)}}function w$2(n){(!n.__d&&(n.__d=!0)&&i$1.push(n)&&!x$2.__r++||o$1!==l$1.debounceRendering)&&((o$1=l$1.debounceRendering)||r$1)(x$2);}function x$2(){var n,l,u,t,o,r,e,c,s;for(i$1.sort(f$1);n=i$1.shift();)n.__d&&(l=i$1.length,t=void 0,o=void 0,r=void 0,c=(e=(u=n).__v).__e,(s=u.__P)&&(t=[],o=[],(r=v$1({},e)).__v=e.__v+1,L$1(s,e,r,u.__n,void 0!==s.ownerSVGElement,null!=e.__h?[c]:null,t,null==c?g$2(e):c,e.__h,o),M$1(t,e,o),e.__e!=c&&m$1(e)),i$1.length>l&&i$1.sort(f$1));x$2.__r=0;}function P$1(n,l,u,t,i,o,r,f,e,a,v){var p,y,_,b,m,w,x,P,C,H=0,I=t&&t.__k||s$1,T=I.length,j=T,z=l.length;for(u.__k=[],p=0;p<z;p++)null!=(b=u.__k[p]=null==(b=l[p])||"boolean"==typeof b||"function"==typeof b?null:"string"==typeof b||"number"==typeof b||"bigint"==typeof b?d$1(null,b,null,null,b):h$1(b)?d$1(k$2,{children:b},null,null,null):b.__b>0?d$1(b.type,b.props,b.key,b.ref?b.ref:null,b.__v):b)?(b.__=u,b.__b=u.__b+1,-1===(P=A$2(b,I,x=p+H,j))?_=c$1:(_=I[P]||c$1,I[P]=void 0,j--),L$1(n,b,_,i,o,r,f,e,a,v),m=b.__e,(y=b.ref)&&_.ref!=y&&(_.ref&&O$1(_.ref,null,b),v.push(y,b.__c||m,b)),null!=m&&(null==w&&(w=m),(C=_===c$1||null===_.__v)?-1==P&&H--:P!==x&&(P===x+1?H++:P>x?j>z-x?H+=P-x:H--:H=P<x&&P==x-1?P-x:0),x=p+H,"function"!=typeof b.type||P===x&&_.__k!==b.__k?"function"==typeof b.type||P===x&&!C?void 0!==b.__d?(e=b.__d,b.__d=void 0):e=m.nextSibling:e=S(n,m,e):e=$$1(b,e,n),"function"==typeof u.type&&(u.__d=e))):(_=I[p])&&null==_.key&&_.__e&&(_.__e==e&&(e=g$2(_)),q$2(_,_,!1),I[p]=null);for(u.__e=w,p=T;p--;)null!=I[p]&&("function"==typeof u.type&&null!=I[p].__e&&I[p].__e==u.__d&&(u.__d=I[p].__e.nextSibling),q$2(I[p],I[p]));}function $$1(n,l,u){for(var t,i=n.__k,o=0;i&&o<i.length;o++)(t=i[o])&&(t.__=n,l="function"==typeof t.type?$$1(t,l,u):S(u,t.__e,l));return l}function C$1(n,l){return l=l||[],null==n||"boolean"==typeof n||(h$1(n)?n.some(function(n){C$1(n,l);}):l.push(n)),l}function S(n,l,u){return null==u||u.parentNode!==n?n.insertBefore(l,null):l==u&&null!=l.parentNode||n.insertBefore(l,u),l.nextSibling}function A$2(n,l,u,t){var i=n.key,o=n.type,r=u-1,f=u+1,e=l[u];if(null===e||e&&i==e.key&&o===e.type)return u;if(t>(null!=e?1:0))for(;r>=0||f<l.length;){if(r>=0){if((e=l[r])&&i==e.key&&o===e.type)return r;r--;}if(f<l.length){if((e=l[f])&&i==e.key&&o===e.type)return f;f++;}}return -1}function H$1(n,l,u,t,i){var o;for(o in u)"children"===o||"key"===o||o in l||T$2(n,o,null,u[o],t);for(o in l)i&&"function"!=typeof l[o]||"children"===o||"key"===o||"value"===o||"checked"===o||u[o]===l[o]||T$2(n,o,l[o],u[o],t);}function I$1(n,l,u){"-"===l[0]?n.setProperty(l,null==u?"":u):n[l]=null==u?"":"number"!=typeof u||a$1.test(l)?u:u+"px";}function T$2(n,l,u,t,i){var o;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else {if("string"==typeof t&&(n.style.cssText=t=""),t)for(l in t)u&&l in u||I$1(n.style,l,"");if(u)for(l in u)t&&u[l]===t[l]||I$1(n.style,l,u[l]);}else if("o"===l[0]&&"n"===l[1])o=l!==(l=l.replace(/(PointerCapture)$|Capture$/,"$1")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t||n.addEventListener(l,o?z$2:j$2,o):n.removeEventListener(l,o?z$2:j$2,o);else if("dangerouslySetInnerHTML"!==l){if(i)l=l.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==l&&"height"!==l&&"href"!==l&&"list"!==l&&"form"!==l&&"tabIndex"!==l&&"download"!==l&&"rowSpan"!==l&&"colSpan"!==l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null==u||!1===u&&"-"!==l[4]?n.removeAttribute(l):n.setAttribute(l,u));}}function j$2(n){return this.l[n.type+!1](l$1.event?l$1.event(n):n)}function z$2(n){return this.l[n.type+!0](l$1.event?l$1.event(n):n)}function L$1(n,u,t,i,o,r,f,e,c,s){var a,p,y,d,_,g,m,w,x,$,C,S,A,H,I,T=u.type;if(void 0!==u.constructor)return null;null!=t.__h&&(c=t.__h,e=u.__e=t.__e,u.__h=null,r=[e]),(a=l$1.__b)&&a(u);n:if("function"==typeof T)try{if(w=u.props,x=(a=T.contextType)&&i[a.__c],$=a?x?x.props.value:a.__:i,t.__c?m=(p=u.__c=t.__c).__=p.__E:("prototype"in T&&T.prototype.render?u.__c=p=new T(w,$):(u.__c=p=new b$1(w,$),p.constructor=T,p.render=B$2),x&&x.sub(p),p.props=w,p.state||(p.state={}),p.context=$,p.__n=i,y=p.__d=!0,p.__h=[],p._sb=[]),null==p.__s&&(p.__s=p.state),null!=T.getDerivedStateFromProps&&(p.__s==p.state&&(p.__s=v$1({},p.__s)),v$1(p.__s,T.getDerivedStateFromProps(w,p.__s))),d=p.props,_=p.state,p.__v=u,y)null==T.getDerivedStateFromProps&&null!=p.componentWillMount&&p.componentWillMount(),null!=p.componentDidMount&&p.__h.push(p.componentDidMount);else {if(null==T.getDerivedStateFromProps&&w!==d&&null!=p.componentWillReceiveProps&&p.componentWillReceiveProps(w,$),!p.__e&&(null!=p.shouldComponentUpdate&&!1===p.shouldComponentUpdate(w,p.__s,$)||u.__v===t.__v)){for(u.__v!==t.__v&&(p.props=w,p.state=p.__s,p.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.forEach(function(n){n&&(n.__=u);}),C=0;C<p._sb.length;C++)p.__h.push(p._sb[C]);p._sb=[],p.__h.length&&f.push(p);break n}null!=p.componentWillUpdate&&p.componentWillUpdate(w,p.__s,$),null!=p.componentDidUpdate&&p.__h.push(function(){p.componentDidUpdate(d,_,g);});}if(p.context=$,p.props=w,p.__P=n,p.__e=!1,S=l$1.__r,A=0,"prototype"in T&&T.prototype.render){for(p.state=p.__s,p.__d=!1,S&&S(u),a=p.render(p.props,p.state,p.context),H=0;H<p._sb.length;H++)p.__h.push(p._sb[H]);p._sb=[];}else do{p.__d=!1,S&&S(u),a=p.render(p.props,p.state,p.context),p.state=p.__s;}while(p.__d&&++A<25);p.state=p.__s,null!=p.getChildContext&&(i=v$1(v$1({},i),p.getChildContext())),y||null==p.getSnapshotBeforeUpdate||(g=p.getSnapshotBeforeUpdate(d,_)),P$1(n,h$1(I=null!=a&&a.type===k$2&&null==a.key?a.props.children:a)?I:[I],u,t,i,o,r,f,e,c,s),p.base=u.__e,u.__h=null,p.__h.length&&f.push(p),m&&(p.__E=p.__=null);}catch(n){u.__v=null,(c||null!=r)&&(u.__e=e,u.__h=!!c,r[r.indexOf(e)]=null),l$1.__e(n,u,t);}else null==r&&u.__v===t.__v?(u.__k=t.__k,u.__e=t.__e):u.__e=N$1(t.__e,u,t,i,o,r,f,c,s);(a=l$1.diffed)&&a(u);}function M$1(n,u,t){for(var i=0;i<t.length;i++)O$1(t[i],t[++i],t[++i]);l$1.__c&&l$1.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u);});}catch(n){l$1.__e(n,u.__v);}});}function N$1(l,u,t,i,o,r,f,e,s){var a,v,y,d=t.props,_=u.props,k=u.type,b=0;if("svg"===k&&(o=!0),null!=r)for(;b<r.length;b++)if((a=r[b])&&"setAttribute"in a==!!k&&(k?a.localName===k:3===a.nodeType)){l=a,r[b]=null;break}if(null==l){if(null===k)return document.createTextNode(_);l=o?document.createElementNS("http://www.w3.org/2000/svg",k):document.createElement(k,_.is&&_),r=null,e=!1;}if(null===k)d===_||e&&l.data===_||(l.data=_);else {if(r=r&&n.call(l.childNodes),v=(d=t.props||c$1).dangerouslySetInnerHTML,y=_.dangerouslySetInnerHTML,!e){if(null!=r)for(d={},b=0;b<l.attributes.length;b++)d[l.attributes[b].name]=l.attributes[b].value;(y||v)&&(y&&(v&&y.__html==v.__html||y.__html===l.innerHTML)||(l.innerHTML=y&&y.__html||""));}if(H$1(l,_,d,o,e),y)u.__k=[];else if(P$1(l,h$1(b=u.props.children)?b:[b],u,t,i,o&&"foreignObject"!==k,r,f,r?r[0]:t.__k&&g$2(t,0),e,s),null!=r)for(b=r.length;b--;)null!=r[b]&&p$1(r[b]);e||("value"in _&&void 0!==(b=_.value)&&(b!==l.value||"progress"===k&&!b||"option"===k&&b!==d.value)&&T$2(l,"value",b,d.value,!1),"checked"in _&&void 0!==(b=_.checked)&&b!==l.checked&&T$2(l,"checked",b,d.checked,!1));}return l}function O$1(n,u,t){try{"function"==typeof n?n(u):n.current=u;}catch(n){l$1.__e(n,t);}}function q$2(n,u,t){var i,o;if(l$1.unmount&&l$1.unmount(n),(i=n.ref)&&(i.current&&i.current!==n.__e||O$1(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount();}catch(n){l$1.__e(n,u);}i.base=i.__P=null,n.__c=void 0;}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&q$2(i[o],u,t||"function"!=typeof n.type);t||null==n.__e||p$1(n.__e),n.__=n.__e=n.__d=void 0;}function B$2(n,l,u){return this.constructor(n,u)}function D$1(u,t,i){var o,r,f,e;l$1.__&&l$1.__(u,t),r=(o="function"==typeof i)?null:i&&i.__k||t.__k,f=[],e=[],L$1(t,u=(!o&&i||t).__k=y$1(k$2,null,[u]),r||c$1,c$1,void 0!==t.ownerSVGElement,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,f,!o&&i?i:r?r.__e:t.firstChild,o,e),M$1(f,u,e);}function E$1(n,l){D$1(n,l,E$1);}function F$2(l,u,t){var i,o,r,f,e=v$1({},l.props);for(r in l.type&&l.type.defaultProps&&(f=l.type.defaultProps),u)"key"==r?i=u[r]:"ref"==r?o=u[r]:e[r]=void 0===u[r]&&void 0!==f?f[r]:u[r];return arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),d$1(l.type,e,i||l.key,o||l.ref,null)}function G$1(n,l){var u={__c:l="__cC"+e$1++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=[],(t={})[l]=this,this.getChildContext=function(){return t},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,w$2(n);});},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n);};}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=s$1.slice,l$1={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l;}throw n}},u$1=0,b$1.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=v$1({},this.state),"function"==typeof n&&(n=n(v$1({},u),this.props)),n&&v$1(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),w$2(this));},b$1.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),w$2(this));},b$1.prototype.render=k$2,i$1=[],r$1="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f$1=function(n,l){return n.__v.__b-l.__v.__b},x$2.__r=0,e$1=0; + +var t,r,u,i,o=0,f=[],c=[],e=l$1.__b,a=l$1.__r,v=l$1.diffed,l=l$1.__c,m=l$1.unmount;function d(t,u){l$1.__h&&l$1.__h(r,t,o||u),o=0;var i=r.__H||(r.__H={__:[],__h:[]});return t>=i.__.length&&i.__.push({__V:c}),i.__[t]}function h(n){return o=1,s(B$1,n)}function s(n,u,i){var o=d(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):B$1(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}));}],o.__c=r,!r.u)){var f=function(n,t,r){if(!o.__c.__H)return !0;var u=o.__c.__H.__.filter(function(n){return n.__c});if(u.every(function(n){return !n.__N}))return !c||c.call(this,n,t,r);var i=!1;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0);}}),!(!i&&o.__c.props===n)&&(!c||c.call(this,n,t,r))};r.u=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u;}e&&e.call(this,n,t,r);},r.shouldComponentUpdate=f;}return o.__N||o.__}function p(u,i){var o=d(t++,3);!l$1.__s&&z$1(o.__H,i)&&(o.__=u,o.i=i,r.__H.__h.push(o));}function y(u,i){var o=d(t++,4);!l$1.__s&&z$1(o.__H,i)&&(o.__=u,o.i=i,r.__h.push(o));}function _(n){return o=5,F$1(function(){return {current:n}},[])}function A$1(n,t,r){o=6,y(function(){return "function"==typeof n?(n(t()),function(){return n(null)}):n?(n.current=t(),function(){return n.current=null}):void 0},null==r?r:r.concat(n));}function F$1(n,r){var u=d(t++,7);return z$1(u.__H,r)?(u.__V=n(),u.i=r,u.__h=n,u.__V):u.__}function T$1(n,t){return o=8,F$1(function(){return n},t)}function q$1(n){var u=r.context[n.__c],i=d(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function x$1(t,r){l$1.useDebugValue&&l$1.useDebugValue(r?r(t):t);}function V$1(){var n=d(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__="P"+i[0]+"-"+i[1]++;}return n.__}function b(){for(var t;t=f.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(k$1),t.__H.__h.forEach(w$1),t.__H.__h=[];}catch(r){t.__H.__h=[],l$1.__e(r,t.__v);}}l$1.__b=function(n){r=null,e&&e(n);},l$1.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c,n.__N=n.i=void 0;})):(i.__h.forEach(k$1),i.__h.forEach(w$1),i.__h=[],t=0)),u=r;},l$1.diffed=function(t){v&&v(t);var o=t.__c;o&&o.__H&&(o.__H.__h.length&&(1!==f.push(o)&&i===l$1.requestAnimationFrame||((i=l$1.requestAnimationFrame)||j$1)(b)),o.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c&&(n.__=n.__V),n.i=void 0,n.__V=c;})),u=r=null;},l$1.__c=function(t,r){r.some(function(t){try{t.__h.forEach(k$1),t.__h=t.__h.filter(function(n){return !n.__||w$1(n)});}catch(u){r.some(function(n){n.__h&&(n.__h=[]);}),r=[],l$1.__e(u,t.__v);}}),l&&l(t,r);},l$1.unmount=function(t){m&&m(t);var r,u=t.__c;u&&u.__H&&(u.__H.__.forEach(function(n){try{k$1(n);}catch(n){r=n;}}),u.__H=void 0,r&&l$1.__e(r,u.__v));};var g$1="function"==typeof requestAnimationFrame;function j$1(n){var t,r=function(){clearTimeout(u),g$1&&cancelAnimationFrame(t),setTimeout(n);},u=setTimeout(r,100);g$1&&(t=requestAnimationFrame(r));}function k$1(n){var t=r,u=n.__c;"function"==typeof u&&(n.__c=void 0,u()),r=t;}function w$1(n){var t=r;n.__c=n.__(),r=t;}function z$1(n,t){return !n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function B$1(n,t){return "function"==typeof t?t(n):t} + +function g(n,t){for(var e in t)n[e]=t[e];return n}function C(n,t){for(var e in n)if("__source"!==e&&!(e in t))return !0;for(var r in t)if("__source"!==r&&n[r]!==t[r])return !0;return !1}function E(n,t){return n===t&&(0!==n||1/n==1/t)||n!=n&&t!=t}function w(n){this.props=n;}function x(n,e){function r(n){var t=this.props.ref,r=t==n.ref;return !r&&t&&(t.call?t(null):t.current=null),e?!e(this.props,n)||!r:C(this.props,n)}function u(e){return this.shouldComponentUpdate=r,y$1(n,e)}return u.displayName="Memo("+(n.displayName||n.name)+")",u.prototype.isReactComponent=!0,u.__f=!0,u}(w.prototype=new b$1).isPureReactComponent=!0,w.prototype.shouldComponentUpdate=function(n,t){return C(this.props,n)||C(this.state,t)};var R=l$1.__b;l$1.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),R&&R(n);};var N="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function k(n){function t(t){var e=g({},t);return delete e.ref,n(e,t.ref||null)}return t.$$typeof=N,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(n.displayName||n.name)+")",t}var A=function(n,t){return null==n?null:C$1(C$1(n).map(t))},O={map:A,forEach:A,count:function(n){return n?C$1(n).length:0},only:function(n){var t=C$1(n);if(1!==t.length)throw "Children.only";return t[0]},toArray:C$1},T=l$1.__e;l$1.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);T(n,t,e,r);};var F=l$1.unmount;function I(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){"function"==typeof n.__c&&n.__c();}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return I(n,t,e)})),n}function L(n,t,e){return n&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return L(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.insertBefore(n.__e,n.__d),n.__c.__e=!0,n.__c.__P=e)),n}function U(){this.__u=0,this.t=null,this.__b=null;}function D(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function M(n){var e,r,u;function o(o){if(e||(e=n()).then(function(n){r=n.default||n;},function(n){u=n;}),u)throw u;if(!r)throw e;return y$1(r,o)}return o.displayName="Lazy",o.__f=!0,o}function V(){this.u=null,this.o=null;}l$1.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&!0===n.__h&&(n.type=null),F&&F(n);},(U.prototype=new b$1).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=D(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l());};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=L(n,n.__c.__P,n.__c.__O);}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate();}},c=!0===t.__h;r.__u++||c||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i);},U.prototype.componentWillUnmount=function(){this.t=[];},U.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),o=this.__v.__k[0].__c;this.__v.__k[0]=I(this.__b,r,o.__O=o.__P);}this.__b=null;}var i=e.__a&&y$1(k$2,null,n.fallback);return i&&(i.__h=null),[y$1(k$2,null,e.__a?null:n.children),i]};var W=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&("t"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2];}};function P(n){return this.getChildContext=function(){return n.context},n.children}function j(n){var e=this,r=n.i;e.componentWillUnmount=function(){D$1(null,e.l),e.l=null,e.i=null;},e.i&&e.i!==r&&e.componentWillUnmount(),e.l||(e.i=r,e.l={nodeType:1,parentNode:r,childNodes:[],appendChild:function(n){this.childNodes.push(n),e.i.appendChild(n);},insertBefore:function(n,t){this.childNodes.push(n),e.i.appendChild(n);},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.i.removeChild(n);}}),D$1(y$1(P,{context:e.context},n.__v),e.l);}function z(n,e){var r=y$1(j,{__v:n,i:e});return r.containerInfo=e,r}(V.prototype=new b$1).__a=function(n){var t=this,e=D(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),W(t,n,r)):u();};e?e(o):o();}},V.prototype.render=function(n){this.u=null,this.o=new Map;var t=C$1(n.children);n.revealOrder&&"b"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},V.prototype.componentDidUpdate=V.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){W(n,e,t);});};var B="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,H=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Z=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Y=/[A-Z0-9]/g,$="undefined"!=typeof document,q=function(n){return ("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};function G(n,t,e){return null==t.__k&&(t.textContent=""),D$1(n,t),"function"==typeof e&&e(),n?n.__c:null}function J(n,t,e){return E$1(n,t),"function"==typeof e&&e(),n?n.__c:null}b$1.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(b$1.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n});}});});var K=l$1.event;function Q(){}function X(){return this.cancelBubble}function nn(){return this.defaultPrevented}l$1.event=function(n){return K&&(n=K(n)),n.persist=Q,n.isPropagationStopped=X,n.isDefaultPrevented=nn,n.nativeEvent=n};var tn,en={enumerable:!1,configurable:!0,get:function(){return this.class}},rn=l$1.vnode;l$1.vnode=function(n){"string"==typeof n.type&&function(n){var t=n.props,e=n.type,u={};for(var o in t){var i=t[o];if(!("value"===o&&"defaultValue"in t&&null==i||$&&"children"===o&&"noscript"===e||"class"===o||"className"===o)){var l=o.toLowerCase();"defaultValue"===o&&"value"in t&&null==t.value?o="value":"download"===o&&!0===i?i="":"ondoubleclick"===l?o="ondblclick":"onchange"!==l||"input"!==e&&"textarea"!==e||q(t.type)?"onfocus"===l?o="onfocusin":"onblur"===l?o="onfocusout":Z.test(o)?o=l:-1===e.indexOf("-")&&H.test(o)?o=o.replace(Y,"-$&").toLowerCase():null===i&&(i=void 0):l=o="oninput","oninput"===l&&u[o=l]&&(o="oninputCapture"),u[o]=i;}}"select"==e&&u.multiple&&Array.isArray(u.value)&&(u.value=C$1(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value);})),"select"==e&&null!=u.defaultValue&&(u.value=C$1(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value;})),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,"className",en)):(t.className&&!t.class||t.class&&t.className)&&(u.class=u.className=t.className),n.props=u;}(n),n.$$typeof=B,rn&&rn(n);};var un=l$1.__r;l$1.__r=function(n){un&&un(n),tn=n.__c;};var on=l$1.diffed;l$1.diffed=function(n){on&&on(n);var t=n.props,e=n.__e;null!=e&&"textarea"===n.type&&"value"in t&&t.value!==e.value&&(e.value=null==t.value?"":t.value),tn=null;};var ln={ReactCurrentDispatcher:{current:{readContext:function(n){return tn.__n[n.__c].props.value}}}};function fn(n){return y$1.bind(null,n)}function an(n){return !!n&&n.$$typeof===B}function sn(n){return an(n)&&n.type===k$2}function hn(n){return an(n)?F$2.apply(null,arguments):n}function vn(n){return !!n.__k&&(D$1(null,n),!0)}function dn(n){return n&&(n.base||1===n.nodeType&&n)||null}var pn=function(n,t){return n(t)},mn=function(n,t){return n(t)},yn=k$2;function _n(n){n();}function bn(n){return n}function Sn(){return [!1,_n]}var gn=y,Cn=an;function En(n,t){var e=t(),r=h({h:{__:e,v:t}}),u=r[0].h,o=r[1];return y(function(){u.__=e,u.v=t,E(u.__,t())||o({h:u});},[n,e,t]),p(function(){return E(u.__,u.v())||o({h:u}),n(function(){E(u.__,u.v())||o({h:u});})},[n]),e}var wn={useState:h,useId:V$1,useReducer:s,useEffect:p,useLayoutEffect:y,useInsertionEffect:gn,useTransition:Sn,useDeferredValue:bn,useSyncExternalStore:En,startTransition:_n,useRef:_,useImperativeHandle:A$1,useMemo:F$1,useCallback:T$1,useContext:q$1,useDebugValue:x$1,version:"17.0.2",Children:O,render:G,hydrate:J,unmountComponentAtNode:vn,createPortal:z,createElement:y$1,createContext:G$1,createFactory:fn,cloneElement:hn,createRef:_$1,Fragment:k$2,isValidElement:an,isElement:Cn,isFragment:sn,findDOMNode:dn,Component:b$1,PureComponent:w,memo:x,forwardRef:k,flushSync:mn,unstable_batchedUpdates:pn,StrictMode:yn,Suspense:U,SuspenseList:V,lazy:M,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:ln}; + +const IMAGE_EXTENSIONS = Object.freeze(new Set([ + ".tif", + ".tiff", + ".gif", + ".png", + ".apng", + ".avif", + ".jpg", + ".jpeg", + ".jfif", + ".pjepg", + ".pjp", + ".svg", + ".webp", + ".bmp", + ".ico", + ".cur", +])); +/** Determines if the given link points to an embedded image. */ +function isImageEmbed(link) { + if (!link.path.contains(".")) + return false; + let extension = link.path.substring(link.path.lastIndexOf(".")); + return link.type == "file" && link.embed && IMAGE_EXTENSIONS.has(extension); +} +/** Extract text of the form 'WxH' or 'W' from the display of a link. */ +function extractImageDimensions(link) { + if (!link.display) + return undefined; + let match = /^(\d+)x(\d+)$/iu.exec(link.display); + if (match) + return [parseInt(match[1]), parseInt(match[2])]; + let match2 = /^(\d+)/.exec(link.display); + if (match2) + return [parseInt(match2[1])]; + // No match. + return undefined; +} + +/** Provides core preact / rendering utilities for all view types. */ +const DataviewContext = G$1(undefined); +/** Hacky preact component which wraps Obsidian's markdown renderer into a neat component. */ +function RawMarkdown({ content, sourcePath, inline = true, style, cls, onClick, }) { + const container = _(null); + const component = q$1(DataviewContext).component; + p(() => { + if (!container.current) + return; + container.current.innerHTML = ""; + obsidian.MarkdownRenderer.renderMarkdown(content, container.current, sourcePath, component).then(() => { + if (!container.current || !inline) + return; + // Unwrap any created paragraph elements if we are inline. + let paragraph = container.current.querySelector("p"); + while (paragraph) { + let children = paragraph.childNodes; + paragraph.replaceWith(...Array.from(children)); + paragraph = container.current.querySelector("p"); + } + }); + }, [content, sourcePath, container.current]); + return y$1("span", { ref: container, style: style, class: cls, onClick: onClick }); +} +/** Hacky preact component which wraps Obsidian's markdown renderer into a neat component. */ +const Markdown = wn.memo(RawMarkdown); +/** Embeds an HTML element in the react DOM. */ +function RawEmbedHtml({ element }) { + const container = _(null); + p(() => { + if (!container.current) + return; + container.current.innerHTML = ""; + container.current.appendChild(element); + }, [container.current, element]); + return y$1("span", { ref: container }); +} +/** Embeds an HTML element in the react DOM. */ +const EmbedHtml = wn.memo(RawEmbedHtml); +/** Intelligently render an arbitrary literal value. */ +function RawLit({ value, sourcePath, inline = false, depth = 0, }) { + const context = q$1(DataviewContext); + // Short-circuit if beyond the maximum render depth. + if (depth >= context.settings.maxRecursiveRenderDepth) + return y$1(k$2, null, "..."); + if (Values.isNull(value) || value === undefined) { + return y$1(Markdown, { content: context.settings.renderNullAs, sourcePath: sourcePath }); + } + else if (Values.isString(value)) { + return y$1(Markdown, { content: value, sourcePath: sourcePath }); + } + else if (Values.isNumber(value)) { + return y$1(k$2, null, "" + value); + } + else if (Values.isBoolean(value)) { + return y$1(k$2, null, "" + value); + } + else if (Values.isDate(value)) { + return y$1(k$2, null, renderMinimalDate(value, context.settings, currentLocale())); + } + else if (Values.isDuration(value)) { + return y$1(k$2, null, renderMinimalDuration(value)); + } + else if (Values.isLink(value)) { + // Special case handling of image/video/etc embeddings to bypass the Obsidian API not working. + if (isImageEmbed(value)) { + let realFile = context.app.metadataCache.getFirstLinkpathDest(value.path, sourcePath); + if (!realFile) + return y$1(Markdown, { content: value.markdown(), sourcePath: sourcePath }); + let dimensions = extractImageDimensions(value); + let resourcePath = context.app.vault.getResourcePath(realFile); + if (dimensions && dimensions.length == 2) + return y$1("img", { alt: value.path, src: resourcePath, width: dimensions[0], height: dimensions[1] }); + else if (dimensions && dimensions.length == 1) + return y$1("img", { alt: value.path, src: resourcePath, width: dimensions[0] }); + else + return y$1("img", { alt: value.path, src: resourcePath }); + } + return y$1(Markdown, { content: value.markdown(), sourcePath: sourcePath }); + } + else if (Values.isHtml(value)) { + return y$1(EmbedHtml, { element: value }); + } + else if (Values.isWidget(value)) { + if (Widgets.isListPair(value)) { + return (y$1(k$2, null, + y$1(Lit, { value: value.key, sourcePath: sourcePath }), + ":", + " ", + y$1(Lit, { value: value.value, sourcePath: sourcePath }))); + } + else if (Widgets.isExternalLink(value)) { + return (y$1("a", { href: value.url, rel: "noopener", target: "_blank", class: "external-link" }, value.display ?? value.url)); + } + else { + return y$1("b", null, + "<unknown widget '", + value.$widget, + "'>"); + } + } + else if (Values.isFunction(value)) { + return y$1(k$2, null, "<function>"); + } + else if (Values.isArray(value) || DataArray.isDataArray(value)) { + if (!inline) { + return (y$1("ul", { class: "dataview dataview-ul dataview-result-list-ul" }, value.map(subvalue => (y$1("li", { class: "dataview-result-list-li" }, + y$1(Lit, { value: subvalue, sourcePath: sourcePath, inline: inline, depth: depth + 1 })))))); + } + else { + if (value.length == 0) + return y$1(k$2, null, "<Empty List>"); + return (y$1("span", { class: "dataview dataview-result-list-span" }, value.map((subvalue, index) => (y$1(k$2, null, + index == 0 ? "" : ", ", + y$1(Lit, { value: subvalue, sourcePath: sourcePath, inline: inline, depth: depth + 1 })))))); + } + } + else if (Values.isObject(value)) { + // Don't render classes in case they have recursive references; spoopy. + if (value?.constructor?.name && value?.constructor?.name != "Object") { + return y$1(k$2, null, + "<", + value.constructor.name, + ">"); + } + if (!inline) { + return (y$1("ul", { class: "dataview dataview-ul dataview-result-object-ul" }, Object.entries(value).map(([key, value]) => (y$1("li", { class: "dataview dataview-li dataview-result-object-li" }, + key, + ": ", + y$1(Lit, { value: value, sourcePath: sourcePath, inline: inline, depth: depth + 1 })))))); + } + else { + if (Object.keys(value).length == 0) + return y$1(k$2, null, "<Empty Object>"); + return (y$1("span", { class: "dataview dataview-result-object-span" }, Object.entries(value).map(([key, value], index) => (y$1(k$2, null, + index == 0 ? "" : ", ", + key, + ": ", + y$1(Lit, { value: value, sourcePath: sourcePath, inline: inline, depth: depth + 1 })))))); + } + } + return y$1(k$2, null, + "<Unrecognized: ", + JSON.stringify(value), + ">"); +} +/** Intelligently render an arbitrary literal value. */ +const Lit = wn.memo(RawLit); +/** Render a simple nice looking error box in a code style. */ +function ErrorPre(props, {}) { + return y$1("pre", { class: "dataview dataview-error" }, props.children); +} +/** Render a pretty centered error message in a box. */ +function ErrorMessage({ message }) { + return (y$1("div", { class: "dataview dataview-error-box" }, + y$1("p", { class: "dataview dataview-error-message" }, message))); +} +/** + * Complex convenience hook which calls `compute` every time the index updates, updating the current state. + */ +function useIndexBackedState(container, app, settings, index, initial, compute) { + let [initialized, setInitialized] = h(false); + let [state, updateState] = h(initial); + let [lastReload, setLastReload] = h(index.revision); + // Initial setup to queue fetching the correct state. + if (!initialized) { + setLastReload(index.revision); + setInitialized(true); + compute().then(updateState); + } + // Updated on every container re-create; automatically updates state. + p(() => { + const refreshOperation = () => { + if (lastReload != index.revision && container.isShown() && settings.refreshEnabled) { + compute().then(updateState); + setLastReload(index.revision); + } + }; + // Refresh after index changes stop. + let workEvent = app.workspace.on("dataview:refresh-views", refreshOperation); + // ...or when the DOM is shown (sidebar expands, tab selected, nodes scrolled into view). + let nodeEvent = container.onNodeInserted(refreshOperation); + return () => { + app.workspace.offref(workEvent); + nodeEvent(); + }; + }, [container, lastReload]); + return state; +} +/** A trivial wrapper which allows a react component to live for the duration of a `MarkdownRenderChild`. */ +class ReactRenderer extends obsidian.MarkdownRenderChild { + init; + element; + constructor(init, element) { + super(init.container); + this.init = init; + this.element = element; + } + onload() { + const context = Object.assign({}, { component: this }, this.init); + D$1(y$1(DataviewContext.Provider, { value: context }, this.element), this.containerEl); + } + onunload() { + vn(this.containerEl); + } +} + +/** Function used to test if a given event correspond to a pressed link */ +function wasLinkPressed(evt) { + return evt.target != null && evt.target != undefined && evt.target.tagName == "A"; +} +/** JSX component which renders a task element recursively. */ +function TaskItem({ item }) { + let context = q$1(DataviewContext); + // Navigate to the given task on click. + const onClicked = (evt) => { + if (wasLinkPressed(evt)) { + return; + } + evt.stopPropagation(); + const selectionState = { + eState: { + cursor: { + from: { line: item.line, ch: item.position.start.col }, + to: { line: item.line + item.lineCount - 1, ch: item.position.end.col }, + }, + line: item.line, + }, + }; + // MacOS interprets the Command key as Meta. + context.app.workspace.openLinkText(item.link.toFile().obsidianLink(), item.path, evt.ctrlKey || (evt.metaKey && obsidian.Platform.isMacOS), selectionState); + }; + // Check/uncheck the task in the original file. + const onChecked = (evt) => { + evt.stopPropagation(); + const completed = evt.currentTarget.checked; + const status = completed ? "x" : " "; + // Update data-task on the parent element (css style) + const parent = evt.currentTarget.parentElement; + parent?.setAttribute("data-task", status); + let flatted = [item]; + if (context.settings.recursiveSubTaskCompletion) { + function flatter(iitem) { + flatted.push(iitem); + iitem.children.forEach(flatter); + } + item.children.forEach(flatter); + flatted = flatted.flat(Infinity); + } + async function effectFn() { + for (let i = 0; i < flatted.length; i++) { + const _item = flatted[i]; + let updatedText = _item.text; + if (context.settings.taskCompletionTracking) { + updatedText = setTaskCompletion(_item.text, context.settings.taskCompletionUseEmojiShorthand, context.settings.taskCompletionText, context.settings.taskCompletionDateFormat, completed); + } + await rewriteTask(context.app.vault, _item, status, updatedText); + } + context.app.workspace.trigger("dataview:refresh-views"); + } + effectFn(); + }; + const checked = item.status !== " "; + return (y$1("li", { class: "dataview task-list-item" + (checked ? " is-checked" : ""), onClick: onClicked, "data-task": item.status }, + y$1("input", { class: "dataview task-list-item-checkbox", type: "checkbox", checked: checked, onClick: onChecked }), + y$1(Markdown, { inline: true, content: item.visual ?? item.text, sourcePath: item.path }), + item.children.length > 0 && y$1(TaskList, { items: item.children }))); +} +/** JSX component which renders a plain list item recursively. */ +function ListItem({ item }) { + let context = q$1(DataviewContext); + // Navigate to the given task on click. + const onClicked = (evt) => { + if (wasLinkPressed(evt)) { + return; + } + evt.stopPropagation(); + const selectionState = { + eState: { + cursor: { + from: { line: item.line, ch: item.position.start.col }, + to: { line: item.line + item.lineCount - 1, ch: item.position.end.col }, + }, + line: item.line, + }, + }; + // MacOS interprets the Command key as Meta. + context.app.workspace.openLinkText(item.link.toFile().obsidianLink(), item.path, evt.ctrlKey || (evt.metaKey && obsidian.Platform.isMacOS), selectionState); + }; + return (y$1("li", { class: "dataview task-list-basic-item", onClick: onClicked }, + y$1(Markdown, { inline: true, content: item.visual ?? item.text, sourcePath: item.path }), + item.children.length > 0 && y$1(TaskList, { items: item.children }))); +} +/** JSX component which renders a list of task items recursively. */ +function TaskList({ items }) { + const settings = q$1(DataviewContext).settings; + if (items.length == 0 && settings.warnOnEmptyResult) + return y$1(ErrorMessage, { message: "Dataview: No results to show for task query." }); + let [nest, _mask] = nestItems(items); + return (y$1("ul", { class: "contains-task-list" }, nest.map(item => item.task ? y$1(TaskItem, { key: listId(item), item: item }) : y$1(ListItem, { key: listId(item), item: item })))); +} +/** JSX component which returns the result count. */ +function ResultCount$1(props) { + const { settings } = q$1(DataviewContext); + return settings.showResultCount ? (y$1("span", { class: "dataview small-text" }, Groupings.count(props.item.rows))) : (y$1(k$2, null)); +} +/** JSX component which recursively renders grouped tasks. */ +function TaskGrouping({ items, sourcePath }) { + const isGrouping = items.length > 0 && Groupings.isGrouping(items); + return (y$1(k$2, null, + isGrouping && + items.map(item => (y$1(k$2, { key: item.key }, + y$1("h4", null, + y$1(Lit, { value: item.key, sourcePath: sourcePath }), + y$1(ResultCount$1, { item: item })), + y$1("div", { class: "dataview result-group" }, + y$1(TaskGrouping, { items: item.rows, sourcePath: sourcePath }))))), + !isGrouping && y$1(TaskList, { items: items }))); +} +/** + * Pure view over (potentially grouped) tasks and list items which allows for checking/unchecking tasks and manipulating + * the task view. + */ +function TaskView({ query, sourcePath }) { + let context = q$1(DataviewContext); + let items = useIndexBackedState(context.container, context.app, context.settings, context.index, { state: "loading" }, async () => { + let result = await asyncTryOrPropagate(() => executeTask(query, sourcePath, context.index, context.settings)); + if (!result.successful) + return { state: "error", error: result.error, sourcePath }; + else + return { state: "ready", items: result.value.tasks }; + }); + if (items.state == "loading") + return (y$1(k$2, null, + y$1(ErrorPre, null, "Loading"))); + else if (items.state == "error") + return (y$1(k$2, null, + y$1(ErrorPre, null, + "Dataview: ", + items.error))); + return (y$1("div", { class: "dataview dataview-container" }, + y$1(TaskGrouping, { items: items.items, sourcePath: sourcePath }))); +} +function createTaskView(init, query, sourcePath) { + return new ReactRenderer(init, y$1(TaskView, { query: query, sourcePath: sourcePath })); +} +function createFixedTaskView(init, items, sourcePath) { + return new ReactRenderer(init, y$1(TaskGrouping, { items: items, sourcePath: sourcePath })); +} +///////////////////////// +// Task De-Duplication // +///////////////////////// +function listId(item) { + return item.path + ":" + item.line; +} +function parentListId(item) { + return item.path + ":" + item.parent; +} +/** Compute a map of all task IDs -> tasks. */ +function enumerateChildren(item, output) { + if (!output.has(listId(item))) + output.set(listId(item), item); + for (let child of item.children) + enumerateChildren(child, output); + return output; +} +/** Replace basic tasks with tasks from a lookup map. Retains the original order of the list. */ +function replaceChildren(elements, lookup) { + return elements.map(element => { + element.children = replaceChildren(element.children, lookup); + const id = listId(element); + const map = lookup.get(id); + if (map) + return map; + else + return element; + }); +} +/** + * Removes tasks from a list if they are already present by being a child of another task. Fixes child pointers. + * Retains original order of input list. + */ +function nestItems(raw) { + let elements = new Map(); + let mask = new Set(); + for (let elem of raw) { + let id = listId(elem); + elements.set(id, elem); + mask.add(id); + } + // List all elements & their children in the lookup map. + for (let elem of raw) + enumerateChildren(elem, elements); + let roots = raw.filter(elem => elem.parent == undefined || elem.parent == null || !elements.has(parentListId(elem))); + return [replaceChildren(roots, elements), mask]; +} +/** + * Recursively removes tasks from each subgroup if they are already present by being a child of another task. + * Fixes child pointers. Retains original order of input list. + */ +function nestGroups(raw) { + if (Groupings.isGrouping(raw)) { + return raw.map(g => { + return { key: g.key, rows: nestGroups(g.rows) }; + }); + } + else { + return nestItems(raw)[0]; + } +} +/////////////////////// +// Task Manipulation // +/////////////////////// +/** Trim empty ending lines. */ +function trimEndingLines(text) { + let parts = text.split(/\r?\n/u); + let trim = parts.length - 1; + while (trim > 0 && parts[trim].trim() == "") + trim--; + return parts.join("\n"); +} +/** Set the task completion key on check. */ +function setTaskCompletion(originalText, useEmojiShorthand, completionKey, completionDateFormat, complete) { + const blockIdRegex = /\^[a-z0-9\-]+/i; + if (!complete && !useEmojiShorthand) + return trimEndingLines(setInlineField(originalText.trimEnd(), completionKey)).trimEnd(); + let parts = originalText.split(/\r?\n/u); + const matches = blockIdRegex.exec(parts[parts.length - 1]); + console.debug("matchreg", matches); + let processedPart = parts[parts.length - 1].split(blockIdRegex).join(""); // last part without block id + if (useEmojiShorthand) { + processedPart = setEmojiShorthandCompletionField(processedPart, complete ? DateTime.now().toFormat("yyyy-MM-dd") : ""); + } + else { + processedPart = setInlineField(processedPart, completionKey, DateTime.now().toFormat(completionDateFormat)); + } + processedPart = `${processedPart.trimEnd()}${matches?.length ? " " + matches[0].trim() : ""}`.trimEnd(); // add back block id + parts[parts.length - 1] = processedPart; + return parts.join("\n"); +} +/** Rewrite a task with the given completion status and new text. */ +async function rewriteTask(vault, task, desiredStatus, desiredText) { + if (desiredStatus == task.status && (desiredText == undefined || desiredText == task.text)) + return; + desiredStatus = desiredStatus == "" ? " " : desiredStatus; + let rawFiletext = await vault.adapter.read(task.path); + let hasRN = rawFiletext.contains("\r"); + let filetext = rawFiletext.split(/\r?\n/u); + if (filetext.length < task.line) + return; + let match = LIST_ITEM_REGEX.exec(filetext[task.line]); + if (!match || match[2].length == 0) + return; + let taskTextParts = task.text.split("\n"); + if (taskTextParts[0].trim() != match[3].trim()) + return; + // We have a positive match here at this point, so go ahead and do the rewrite of the status. + let initialSpacing = /^[\s>]*/u.exec(filetext[task.line])[0]; + if (desiredText) { + let desiredParts = desiredText.split("\n"); + let newTextLines = [`${initialSpacing}${task.symbol} [${desiredStatus}] ${desiredParts[0]}`].concat(desiredParts.slice(1).map(l => initialSpacing + "\t" + l)); + filetext.splice(task.line, task.lineCount, ...newTextLines); + } + else { + filetext[task.line] = `${initialSpacing}${task.symbol} [${desiredStatus}] ${taskTextParts[0].trim()}`; + } + let newText = filetext.join(hasRN ? "\r\n" : "\n"); + await vault.adapter.write(task.path, newText); +} + +function ListGrouping({ items, sourcePath }) { + return (y$1("ul", { class: "dataview list-view-ul" }, items.map(item => (y$1("li", null, + y$1(Lit, { value: item, sourcePath: sourcePath })))))); +} +/** Pure view over list elements. */ +function ListView({ query, sourcePath }) { + let context = q$1(DataviewContext); + let items = useIndexBackedState(context.container, context.app, context.settings, context.index, { state: "loading" }, async () => { + let result = await asyncTryOrPropagate(() => executeList(query, context.index, sourcePath, context.settings)); + if (!result.successful) + return { state: "error", error: result.error, sourcePath }; + return { state: "ready", items: result.value.data }; + }); + if (items.state == "loading") + return (y$1(k$2, null, + y$1(ErrorPre, null, "Loading..."))); + else if (items.state == "error") + return (y$1(k$2, null, + " ", + y$1(ErrorPre, null, + "Dataview: ", + items.error), + " ")); + if (items.items.length == 0 && context.settings.warnOnEmptyResult) + return y$1(ErrorMessage, { message: "Dataview: No results to show for list query." }); + return y$1(ListGrouping, { items: items.items, sourcePath: sourcePath }); +} +function createListView(init, query, sourcePath) { + return new ReactRenderer(init, y$1(ListView, { query: query, sourcePath: sourcePath })); +} +function createFixedListView(init, elements, sourcePath) { + return new ReactRenderer(init, y$1(ListGrouping, { items: elements, sourcePath: sourcePath })); +} + +/** JSX component which returns the result count. */ +function ResultCount(props) { + const { settings } = q$1(DataviewContext); + return settings.showResultCount ? y$1("span", { class: "dataview small-text" }, props.length) : y$1(k$2, null); +} +/** Simple table over headings and corresponding values. */ +function TableGrouping({ headings, values, sourcePath, }) { + let settings = q$1(DataviewContext).settings; + return (y$1(k$2, null, + y$1("table", { class: "dataview table-view-table" }, + y$1("thead", { class: "table-view-thead" }, + y$1("tr", { class: "table-view-tr-header" }, headings.map((heading, index) => (y$1("th", { class: "table-view-th" }, + y$1(Markdown, { sourcePath: sourcePath, content: heading }), + index == 0 && y$1(ResultCount, { length: values.length })))))), + y$1("tbody", { class: "table-view-tbody" }, values.map(row => (y$1("tr", null, row.map(element => (y$1("td", null, + y$1(Lit, { value: element, sourcePath: sourcePath }))))))))), + settings.warnOnEmptyResult && values.length == 0 && (y$1(ErrorMessage, { message: "Dataview: No results to show for table query." })))); +} +/** Pure view over list elements. */ +function TableView({ query, sourcePath }) { + let context = q$1(DataviewContext); + let items = useIndexBackedState(context.container, context.app, context.settings, context.index, { state: "loading" }, async () => { + let result = await asyncTryOrPropagate(() => executeTable(query, context.index, sourcePath, context.settings)); + if (!result.successful) + return { state: "error", error: result.error }; + return { state: "ready", headings: result.value.names, values: result.value.data }; + }); + if (items.state == "loading") + return (y$1(k$2, null, + y$1(ErrorPre, null, "Loading..."))); + else if (items.state == "error") + return (y$1(k$2, null, + " ", + y$1(ErrorPre, null, + "Dataview: ", + items.error), + " ")); + return y$1(TableGrouping, { headings: items.headings, values: items.values, sourcePath: sourcePath }); +} +function createTableView(init, query, sourcePath) { + return new ReactRenderer(init, y$1(TableView, { query: query, sourcePath: sourcePath })); +} +function createFixedTableView(init, headings, values, sourcePath) { + return new ReactRenderer(init, y$1(TableGrouping, { values: values, headings: headings, sourcePath: sourcePath })); +} + +/** Utility functions for quickly creating fields. */ +var QueryFields; +(function (QueryFields) { + function named(name, field) { + return { name, field }; + } + QueryFields.named = named; + function sortBy(field, dir) { + return { field, direction: dir }; + } + QueryFields.sortBy = sortBy; +})(QueryFields || (QueryFields = {})); + +/** Return a new parser which executes the underlying parser and returns it's raw string representation. */ +function captureRaw(base) { + return parsimmon_umd_minExports.custom((success, failure) => { + return (input, i) => { + let result = base._(input, i); + if (!result.status) + return result; + return Object.assign({}, result, { value: [result.value, input.substring(i, result.index)] }); + }; + }); +} +/** Strip newlines and excess whitespace out of text. */ +function stripNewlines(text) { + return text + .split(/[\r\n]+/) + .map(t => t.trim()) + .join(""); +} +/** Given `parser`, return the parser that returns `if_eof()` if EOF is found, + * otherwise `parser` preceded by (non-optional) whitespace */ +function precededByWhitespaceIfNotEof(if_eof, parser) { + return parsimmon_umd_minExports.eof.map(if_eof).or(parsimmon_umd_minExports.whitespace.then(parser)); +} +/** A parsimmon-powered parser-combinator implementation of the query language. */ +const QUERY_LANGUAGE = parsimmon_umd_minExports.createLanguage({ + // Simple atom parsing, like words, identifiers, numbers. + queryType: q => parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regexp(/TABLE|LIST|TASK|CALENDAR/i)) + .map(str => str.toLowerCase()) + .desc("query type ('TABLE', 'LIST', 'TASK', or 'CALENDAR')"), + explicitNamedField: q => parsimmon_umd_minExports.seqMap(EXPRESSION.field.skip(parsimmon_umd_minExports.whitespace), parsimmon_umd_minExports.regexp(/AS/i).skip(parsimmon_umd_minExports.whitespace), EXPRESSION.identifier.or(EXPRESSION.string), (field, _as, ident) => QueryFields.named(ident, field)), + comment: () => parsimmon_umd_minExports.Parser((input, i) => { + // Parse a comment, which is a line starting with //. + let line = input.substring(i); + if (!line.startsWith("//")) + return parsimmon_umd_minExports.makeFailure(i, "Not a comment"); + // The comment ends at the end of the line. + line = line.split("\n")[0]; + let comment = line.substring(2).trim(); + return parsimmon_umd_minExports.makeSuccess(i + line.length, comment); + }), + namedField: q => parsimmon_umd_minExports.alt(q.explicitNamedField, captureRaw(EXPRESSION.field).map(([value, text]) => QueryFields.named(stripNewlines(text), value))), + sortField: q => parsimmon_umd_minExports.seqMap(EXPRESSION.field.skip(parsimmon_umd_minExports.optWhitespace), parsimmon_umd_minExports.regexp(/ASCENDING|DESCENDING|ASC|DESC/i).atMost(1), (field, dir) => { + let direction = dir.length == 0 ? "ascending" : dir[0].toLowerCase(); + if (direction == "desc") + direction = "descending"; + if (direction == "asc") + direction = "ascending"; + return { + field: field, + direction: direction, + }; + }), + headerClause: q => q.queryType + .chain(type => { + switch (type) { + case "table": { + return precededByWhitespaceIfNotEof(() => ({ type, fields: [], showId: true }), parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/WITHOUT\s+ID/i) + .skip(parsimmon_umd_minExports.optWhitespace) + .atMost(1), parsimmon_umd_minExports.sepBy(q.namedField, parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)), (withoutId, fields) => { + return { type, fields, showId: withoutId.length == 0 }; + })); + } + case "list": + return precededByWhitespaceIfNotEof(() => ({ type, format: undefined, showId: true }), parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/WITHOUT\s+ID/i) + .skip(parsimmon_umd_minExports.optWhitespace) + .atMost(1), EXPRESSION.field.atMost(1), (withoutId, format) => { + return { + type, + format: format.length == 1 ? format[0] : undefined, + showId: withoutId.length == 0, + }; + })); + case "task": + return parsimmon_umd_minExports.succeed({ type }); + case "calendar": + return parsimmon_umd_minExports.whitespace.then(parsimmon_umd_minExports.seqMap(q.namedField, field => { + return { + type, + showId: true, + field, + }; + })); + default: + return parsimmon_umd_minExports.fail(`Unrecognized query type '${type}'`); + } + }) + .desc("TABLE or LIST or TASK or CALENDAR"), + fromClause: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/FROM/i), parsimmon_umd_minExports.whitespace, EXPRESSION.source, (_1, _2, source) => source), + whereClause: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/WHERE/i), parsimmon_umd_minExports.whitespace, EXPRESSION.field, (where, _, field) => { + return { type: "where", clause: field }; + }).desc("WHERE <expression>"), + sortByClause: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/SORT/i), parsimmon_umd_minExports.whitespace, q.sortField.sepBy1(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)), (sort, _1, fields) => { + return { type: "sort", fields }; + }).desc("SORT field [ASC/DESC]"), + limitClause: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/LIMIT/i), parsimmon_umd_minExports.whitespace, EXPRESSION.field, (limit, _1, field) => { + return { type: "limit", amount: field }; + }).desc("LIMIT <value>"), + flattenClause: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/FLATTEN/i).skip(parsimmon_umd_minExports.whitespace), q.namedField, (_, field) => { + return { type: "flatten", field }; + }).desc("FLATTEN <value> [AS <name>]"), + groupByClause: q => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/GROUP BY/i).skip(parsimmon_umd_minExports.whitespace), q.namedField, (_, field) => { + return { type: "group", field }; + }).desc("GROUP BY <value> [AS <name>]"), + // Full query parsing. + clause: q => parsimmon_umd_minExports.alt(q.fromClause, q.whereClause, q.sortByClause, q.limitClause, q.groupByClause, q.flattenClause), + query: q => parsimmon_umd_minExports.seqMap(q.headerClause.trim(optionalWhitespaceOrComment), q.fromClause.trim(optionalWhitespaceOrComment).atMost(1), q.clause.trim(optionalWhitespaceOrComment).many(), (header, from, clauses) => { + return { + header, + source: from.length == 0 ? Sources.folder("") : from[0], + operations: clauses, + settings: DEFAULT_QUERY_SETTINGS, + }; + }), +}); +/** + * A parser for optional whitespace or comments. This is used to exclude whitespace and comments from other parsers. + */ +const optionalWhitespaceOrComment = parsimmon_umd_minExports.alt(parsimmon_umd_minExports.whitespace, QUERY_LANGUAGE.comment) + .many() // Use many() since there may be zero whitespaces or comments. + // Transform the many to a single result. + .map(arr => arr.join("")); +/** + * Attempt to parse a query from the given query text, returning a string error + * if the parse failed. + */ +function parseQuery(text) { + try { + let query = QUERY_LANGUAGE.query.tryParse(text); + return Result.success(query); + } + catch (error) { + return Result.failure("" + error); + } +} + +function noop() { } +function assign(tar, src) { + // @ts-ignore + for (const k in src) + tar[k] = src[k]; + return tar; +} +function is_promise(value) { + return value && typeof value === 'object' && typeof value.then === 'function'; +} +function run(fn) { + return fn(); +} +function blank_object() { + return 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 not_equal(a, b) { + return a != a ? b == b : a !== b; +} +function is_empty(obj) { + return Object.keys(obj).length === 0; +} +function create_slot(definition, ctx, $$scope, fn) { + if (definition) { + const slot_ctx = get_slot_context(definition, ctx, $$scope, fn); + return definition[0](slot_ctx); + } +} +function get_slot_context(definition, ctx, $$scope, fn) { + return definition[1] && fn + ? assign($$scope.ctx.slice(), definition[1](fn(ctx))) + : $$scope.ctx; +} +function get_slot_changes(definition, $$scope, dirty, fn) { + if (definition[2] && fn) { + const lets = definition[2](fn(dirty)); + if ($$scope.dirty === undefined) { + return lets; + } + if (typeof lets === 'object') { + const merged = []; + const len = Math.max($$scope.dirty.length, lets.length); + for (let i = 0; i < len; i += 1) { + merged[i] = $$scope.dirty[i] | lets[i]; + } + return merged; + } + return $$scope.dirty | lets; + } + return $$scope.dirty; +} +function update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) { + const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn); + if (slot_changes) { + const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn); + slot.p(slot_context, slot_changes); + } +} +function null_to_empty(value) { + return value == null ? '' : value; +} + +function append(target, node) { + target.appendChild(node); +} +function insert(target, node, anchor) { + target.insertBefore(node, anchor || null); +} +function detach(node) { + 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 svg_element(name) { + return document.createElementNS('http://www.w3.org/2000/svg', 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 attr(node, attribute, value) { + if (value == null) + node.removeAttribute(attribute); + else if (node.getAttribute(attribute) !== value) + node.setAttribute(attribute, value); +} +function set_attributes(node, attributes) { + // @ts-ignore + const descriptors = Object.getOwnPropertyDescriptors(node.__proto__); + for (const key in attributes) { + if (attributes[key] == null) { + node.removeAttribute(key); + } + else if (key === 'style') { + node.style.cssText = attributes[key]; + } + else if (key === '__value') { + node.value = node[key] = attributes[key]; + } + else if (descriptors[key] && descriptors[key].set) { + node[key] = attributes[key]; + } + else { + attr(node, key, attributes[key]); + } + } +} +function children(element) { + return Array.from(element.childNodes); +} +function set_data(text, data) { + data = '' + data; + if (text.wholeText !== data) + text.data = data; +} +function toggle_class(element, name, toggle) { + element.classList[toggle ? 'add' : 'remove'](name); +} + +let 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; +} + +const dirty_components = []; +const binding_callbacks = []; +const render_callbacks = []; +const flush_callbacks = []; +const resolved_promise = Promise.resolve(); +let 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); +} +let flushing = false; +const seen_callbacks = new Set(); +function flush() { + if (flushing) + return; + flushing = true; + do { + // first, call beforeUpdate functions + // and update components + for (let i = 0; i < dirty_components.length; i += 1) { + const component = dirty_components[i]; + set_current_component(component); + update(component.$$); + } + set_current_component(null); + dirty_components.length = 0; + while (binding_callbacks.length) + binding_callbacks.pop()(); + // then, once components are updated, call + // afterUpdate functions. This may cause + // subsequent updates... + for (let i = 0; i < render_callbacks.length; i += 1) { + const callback = render_callbacks[i]; + if (!seen_callbacks.has(callback)) { + // ...so guard against infinite loops + seen_callbacks.add(callback); + callback(); + } + } + render_callbacks.length = 0; + } while (dirty_components.length); + while (flush_callbacks.length) { + flush_callbacks.pop()(); + } + update_scheduled = false; + flushing = false; + seen_callbacks.clear(); +} +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); + } +} +const outroing = new Set(); +let 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, detach, callback) { + if (block && block.o) { + if (outroing.has(block)) + return; + outroing.add(block); + outros.c.push(() => { + outroing.delete(block); + if (callback) { + if (detach) + block.d(1); + callback(); + } + }); + block.o(local); + } +} + +function handle_promise(promise, info) { + const token = info.token = {}; + function update(type, index, key, value) { + if (info.token !== token) + return; + info.resolved = value; + let child_ctx = info.ctx; + if (key !== undefined) { + child_ctx = child_ctx.slice(); + child_ctx[key] = value; + } + const block = type && (info.current = type)(child_ctx); + let needs_flush = false; + if (info.block) { + if (info.blocks) { + info.blocks.forEach((block, i) => { + if (i !== index && block) { + group_outros(); + transition_out(block, 1, 1, () => { + if (info.blocks[i] === block) { + info.blocks[i] = null; + } + }); + check_outros(); + } + }); + } + else { + info.block.d(1); + } + block.c(); + transition_in(block, 1); + block.m(info.mount(), info.anchor); + needs_flush = true; + } + info.block = block; + if (info.blocks) + info.blocks[index] = block; + if (needs_flush) { + flush(); + } + } + if (is_promise(promise)) { + const current_component = get_current_component(); + promise.then(value => { + set_current_component(current_component); + update(info.then, 1, info.value, value); + set_current_component(null); + }, error => { + set_current_component(current_component); + update(info.catch, 2, info.error, error); + set_current_component(null); + if (!info.hasCatch) { + throw error; + } + }); + // if we previously had a then/catch block, destroy it + if (info.current !== info.pending) { + update(info.pending, 0); + return true; + } + } + else { + if (info.current !== info.then) { + update(info.then, 1, info.value, promise); + return true; + } + info.resolved = promise; + } +} +function outro_and_destroy_block(block, lookup) { + transition_out(block, 1, 1, () => { + lookup.delete(block.key); + }); +} +function update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) { + let o = old_blocks.length; + let n = list.length; + let i = o; + const old_indexes = {}; + while (i--) + old_indexes[old_blocks[i].key] = i; + const new_blocks = []; + const new_lookup = new Map(); + const deltas = new Map(); + i = n; + while (i--) { + const child_ctx = get_context(ctx, list, i); + const key = get_key(child_ctx); + let block = lookup.get(key); + if (!block) { + block = create_each_block(key, child_ctx); + block.c(); + } + else if (dynamic) { + block.p(child_ctx, dirty); + } + new_lookup.set(key, new_blocks[i] = block); + if (key in old_indexes) + deltas.set(key, Math.abs(i - old_indexes[key])); + } + const will_move = new Set(); + const did_move = new Set(); + function insert(block) { + transition_in(block, 1); + block.m(node, next); + lookup.set(block.key, block); + next = block.first; + n--; + } + while (o && n) { + const new_block = new_blocks[n - 1]; + const old_block = old_blocks[o - 1]; + const new_key = new_block.key; + const old_key = old_block.key; + if (new_block === old_block) { + // do nothing + next = new_block.first; + o--; + n--; + } + else if (!new_lookup.has(old_key)) { + // remove old block + destroy(old_block, lookup); + o--; + } + else if (!lookup.has(new_key) || will_move.has(new_key)) { + insert(new_block); + } + else if (did_move.has(old_key)) { + o--; + } + else if (deltas.get(new_key) > deltas.get(old_key)) { + did_move.add(new_key); + insert(new_block); + } + else { + will_move.add(old_key); + o--; + } + } + while (o--) { + const old_block = old_blocks[o]; + if (!new_lookup.has(old_block.key)) + destroy(old_block, lookup); + } + while (n) + insert(new_blocks[n - 1]); + return new_blocks; +} + +function get_spread_update(levels, updates) { + const update = {}; + const to_null_out = {}; + const accounted_for = { $$scope: 1 }; + let i = levels.length; + while (i--) { + const o = levels[i]; + const n = updates[i]; + if (n) { + for (const key in o) { + if (!(key in n)) + to_null_out[key] = 1; + } + for (const key in n) { + if (!accounted_for[key]) { + update[key] = n[key]; + accounted_for[key] = 1; + } + } + levels[i] = n; + } + else { + for (const key in o) { + accounted_for[key] = 1; + } + } + } + for (const key in to_null_out) { + if (!(key in update)) + update[key] = undefined; + } + return update; +} +function get_spread_object(spread_props) { + return typeof spread_props === 'object' && spread_props !== null ? spread_props : {}; +} +function create_component(block) { + block && block.c(); +} +function mount_component(component, target, anchor, customElement) { + const { fragment, on_mount, on_destroy, after_update } = component.$$; + fragment && fragment.m(target, anchor); + if (!customElement) { + // onMount happens before the initial afterUpdate + add_render_callback(() => { + const new_on_destroy = on_mount.map(run).filter(is_function); + if (on_destroy) { + on_destroy.push(...new_on_destroy); + } + else { + // Edge case - component was destroyed immediately, + // most likely as a result of a binding initialising + run_all(new_on_destroy); + } + component.$$.on_mount = []; + }); + } + after_update.forEach(add_render_callback); +} +function destroy_component(component, detaching) { + const $$ = component.$$; + if ($$.fragment !== null) { + run_all($$.on_destroy); + $$.fragment && $$.fragment.d(detaching); + // TODO null out other refs, including component.$$ (but need to + // preserve final state?) + $$.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 init(component, options, instance, create_fragment, not_equal, props, dirty = [-1]) { + const parent_component = current_component; + set_current_component(component); + const $$ = component.$$ = { + fragment: null, + ctx: null, + // state + props, + update: noop, + not_equal, + bound: blank_object(), + // lifecycle + on_mount: [], + on_destroy: [], + on_disconnect: [], + before_update: [], + after_update: [], + context: new Map(parent_component ? parent_component.$$.context : []), + // everything else + callbacks: blank_object(), + dirty, + skip_bound: false + }; + let ready = false; + $$.ctx = instance + ? instance(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); + // `false` as a special case of no DOM component + $$.fragment = create_fragment ? create_fragment($$.ctx) : false; + if (options.target) { + if (options.hydrate) { + const nodes = children(options.target); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + $$.fragment && $$.fragment.l(nodes); + nodes.forEach(detach); + } + else { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + $$.fragment && $$.fragment.c(); + } + if (options.intro) + transition_in(component.$$.fragment); + mount_component(component, options.target, options.anchor, options.customElement); + flush(); + } + set_current_component(parent_component); +} +/** + * Base class for Svelte components. Used when dev=false. + */ +class SvelteComponent { + $destroy() { + destroy_component(this, 1); + this.$destroy = noop; + } + $on(type, callback) { + const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = [])); + callbacks.push(callback); + return () => { + const index = callbacks.indexOf(callback); + if (index !== -1) + callbacks.splice(index, 1); + }; + } + $set($$props) { + if (this.$$set && !is_empty($$props)) { + this.$$.skip_bound = true; + this.$$set($$props); + this.$$.skip_bound = false; + } + } +} + +/** + * dateUID is a way of weekly identifying daily/weekly/monthly notes. + * They are prefixed with the granularity to avoid ambiguity. + */ +function getDateUID(date, granularity = "day") { + const ts = date.clone().startOf(granularity).format(); + return `${granularity}-${ts}`; +} +var getDateUID_1 = getDateUID; + +/* src/components/Dot.svelte generated by Svelte v3.35.0 */ + +function add_css$5() { + var style = element("style"); + style.id = "svelte-1widvzq-style"; + style.textContent = ".dot.svelte-1widvzq,.hollow.svelte-1widvzq{display:inline-block;height:6px;width:6px;margin:0 1px}.filled.svelte-1widvzq{fill:var(--color-dot)}.active.filled.svelte-1widvzq{fill:var(--text-on-accent)}.hollow.svelte-1widvzq{fill:none;stroke:var(--color-dot)}.active.hollow.svelte-1widvzq{fill:none;stroke:var(--text-on-accent)}"; + append(document.head, style); +} + +// (14:0) {:else} +function create_else_block$1(ctx) { + let svg; + let circle; + let svg_class_value; + + return { + c() { + svg = svg_element("svg"); + circle = svg_element("circle"); + attr(circle, "cx", "3"); + attr(circle, "cy", "3"); + attr(circle, "r", "2"); + attr(svg, "class", svg_class_value = "" + (null_to_empty(`hollow ${/*className*/ ctx[0]}`) + " svelte-1widvzq")); + attr(svg, "viewBox", "0 0 6 6"); + attr(svg, "xmlns", "http://www.w3.org/2000/svg"); + toggle_class(svg, "active", /*isActive*/ ctx[2]); + }, + m(target, anchor) { + insert(target, svg, anchor); + append(svg, circle); + }, + p(ctx, dirty) { + if (dirty & /*className*/ 1 && svg_class_value !== (svg_class_value = "" + (null_to_empty(`hollow ${/*className*/ ctx[0]}`) + " svelte-1widvzq"))) { + attr(svg, "class", svg_class_value); + } + + if (dirty & /*className, isActive*/ 5) { + toggle_class(svg, "active", /*isActive*/ ctx[2]); + } + }, + d(detaching) { + if (detaching) detach(svg); + } + }; +} + +// (6:0) {#if isFilled} +function create_if_block$2(ctx) { + let svg; + let circle; + let svg_class_value; + + return { + c() { + svg = svg_element("svg"); + circle = svg_element("circle"); + attr(circle, "cx", "3"); + attr(circle, "cy", "3"); + attr(circle, "r", "2"); + attr(svg, "class", svg_class_value = "" + (null_to_empty(`dot filled ${/*className*/ ctx[0]}`) + " svelte-1widvzq")); + attr(svg, "viewBox", "0 0 6 6"); + attr(svg, "xmlns", "http://www.w3.org/2000/svg"); + toggle_class(svg, "active", /*isActive*/ ctx[2]); + }, + m(target, anchor) { + insert(target, svg, anchor); + append(svg, circle); + }, + p(ctx, dirty) { + if (dirty & /*className*/ 1 && svg_class_value !== (svg_class_value = "" + (null_to_empty(`dot filled ${/*className*/ ctx[0]}`) + " svelte-1widvzq"))) { + attr(svg, "class", svg_class_value); + } + + if (dirty & /*className, isActive*/ 5) { + toggle_class(svg, "active", /*isActive*/ ctx[2]); + } + }, + d(detaching) { + if (detaching) detach(svg); + } + }; +} + +function create_fragment$6(ctx) { + let if_block_anchor; + + function select_block_type(ctx, dirty) { + if (/*isFilled*/ ctx[1]) return create_if_block$2; + return create_else_block$1; + } + + let current_block_type = select_block_type(ctx); + let if_block = current_block_type(ctx); + + return { + c() { + if_block.c(); + if_block_anchor = empty(); + }, + m(target, anchor) { + if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + }, + p(ctx, [dirty]) { + if (current_block_type === (current_block_type = select_block_type(ctx)) && if_block) { + if_block.p(ctx, dirty); + } else { + if_block.d(1); + if_block = current_block_type(ctx); + + if (if_block) { + if_block.c(); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + } + }, + i: noop, + o: noop, + d(detaching) { + if_block.d(detaching); + if (detaching) detach(if_block_anchor); + } + }; +} + +function instance$6($$self, $$props, $$invalidate) { + let { className = "" } = $$props; + let { isFilled } = $$props; + let { isActive } = $$props; + + $$self.$$set = $$props => { + if ("className" in $$props) $$invalidate(0, className = $$props.className); + if ("isFilled" in $$props) $$invalidate(1, isFilled = $$props.isFilled); + if ("isActive" in $$props) $$invalidate(2, isActive = $$props.isActive); + }; + + return [className, isFilled, isActive]; +} + +class Dot extends SvelteComponent { + constructor(options) { + super(); + if (!document.getElementById("svelte-1widvzq-style")) add_css$5(); + init(this, options, instance$6, create_fragment$6, safe_not_equal, { className: 0, isFilled: 1, isActive: 2 }); + } +} + +/* src/components/MetadataResolver.svelte generated by Svelte v3.35.0 */ + +const get_default_slot_changes_1 = dirty => ({}); +const get_default_slot_context_1 = ctx => ({ metadata: null }); +const get_default_slot_changes = dirty => ({ metadata: dirty & /*metadata*/ 1 }); +const get_default_slot_context = ctx => ({ metadata: /*resolvedMeta*/ ctx[3] }); + +// (11:0) {:else} +function create_else_block(ctx) { + let current; + const default_slot_template = /*#slots*/ ctx[2].default; + const default_slot = create_slot(default_slot_template, ctx, /*$$scope*/ ctx[1], get_default_slot_context_1); + + return { + c() { + if (default_slot) default_slot.c(); + }, + m(target, anchor) { + if (default_slot) { + default_slot.m(target, anchor); + } + + current = true; + }, + p(ctx, dirty) { + if (default_slot) { + if (default_slot.p && dirty & /*$$scope*/ 2) { + update_slot(default_slot, default_slot_template, ctx, /*$$scope*/ ctx[1], dirty, get_default_slot_changes_1, get_default_slot_context_1); + } + } + }, + i(local) { + if (current) return; + transition_in(default_slot, local); + current = true; + }, + o(local) { + transition_out(default_slot, local); + current = false; + }, + d(detaching) { + if (default_slot) default_slot.d(detaching); + } + }; +} + +// (7:0) {#if metadata} +function create_if_block$1(ctx) { + let await_block_anchor; + let promise; + let current; + + let info = { + ctx, + current: null, + token: null, + hasCatch: false, + pending: create_pending_block, + then: create_then_block, + catch: create_catch_block, + value: 3, + blocks: [,,,] + }; + + handle_promise(promise = /*metadata*/ ctx[0], info); + + return { + c() { + await_block_anchor = empty(); + info.block.c(); + }, + m(target, anchor) { + insert(target, await_block_anchor, anchor); + info.block.m(target, info.anchor = anchor); + info.mount = () => await_block_anchor.parentNode; + info.anchor = await_block_anchor; + current = true; + }, + p(new_ctx, dirty) { + ctx = new_ctx; + info.ctx = ctx; + + if (dirty & /*metadata*/ 1 && promise !== (promise = /*metadata*/ ctx[0]) && handle_promise(promise, info)) ; else { + const child_ctx = ctx.slice(); + child_ctx[3] = info.resolved; + info.block.p(child_ctx, dirty); + } + }, + i(local) { + if (current) return; + transition_in(info.block); + current = true; + }, + o(local) { + for (let i = 0; i < 3; i += 1) { + const block = info.blocks[i]; + transition_out(block); + } + + current = false; + }, + d(detaching) { + if (detaching) detach(await_block_anchor); + info.block.d(detaching); + info.token = null; + info = null; + } + }; +} + +// (1:0) <svelte:options immutable /> <script lang="ts">; export let metadata; </script> {#if metadata} +function create_catch_block(ctx) { + return { + c: noop, + m: noop, + p: noop, + i: noop, + o: noop, + d: noop + }; +} + +// (8:37) <slot metadata="{resolvedMeta} +function create_then_block(ctx) { + let current; + const default_slot_template = /*#slots*/ ctx[2].default; + const default_slot = create_slot(default_slot_template, ctx, /*$$scope*/ ctx[1], get_default_slot_context); + + return { + c() { + if (default_slot) default_slot.c(); + }, + m(target, anchor) { + if (default_slot) { + default_slot.m(target, anchor); + } + + current = true; + }, + p(ctx, dirty) { + if (default_slot) { + if (default_slot.p && dirty & /*$$scope, metadata*/ 3) { + update_slot(default_slot, default_slot_template, ctx, /*$$scope*/ ctx[1], dirty, get_default_slot_changes, get_default_slot_context); + } + } + }, + i(local) { + if (current) return; + transition_in(default_slot, local); + current = true; + }, + o(local) { + transition_out(default_slot, local); + current = false; + }, + d(detaching) { + if (default_slot) default_slot.d(detaching); + } + }; +} + +// (1:0) <svelte:options immutable /> <script lang="ts">; export let metadata; </script> {#if metadata} +function create_pending_block(ctx) { + return { + c: noop, + m: noop, + p: noop, + i: noop, + o: noop, + d: noop + }; +} + +function create_fragment$5(ctx) { + let current_block_type_index; + let if_block; + let if_block_anchor; + let current; + const if_block_creators = [create_if_block$1, create_else_block]; + const if_blocks = []; + + function select_block_type(ctx, dirty) { + if (/*metadata*/ ctx[0]) return 0; + return 1; + } + + current_block_type_index = select_block_type(ctx); + 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(ctx, [dirty]) { + let previous_block_index = current_block_type_index; + current_block_type_index = select_block_type(ctx); + + if (current_block_type_index === previous_block_index) { + if_blocks[current_block_type_index].p(ctx, 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](ctx); + if_block.c(); + } else { + if_block.p(ctx, 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_blocks[current_block_type_index].d(detaching); + if (detaching) detach(if_block_anchor); + } + }; +} + +function instance$5($$self, $$props, $$invalidate) { + let { $$slots: slots = {}, $$scope } = $$props; + + let { metadata } = $$props; + + $$self.$$set = $$props => { + if ("metadata" in $$props) $$invalidate(0, metadata = $$props.metadata); + if ("$$scope" in $$props) $$invalidate(1, $$scope = $$props.$$scope); + }; + + return [metadata, $$scope, slots]; +} + +class MetadataResolver extends SvelteComponent { + constructor(options) { + super(); + init(this, options, instance$5, create_fragment$5, not_equal, { metadata: 0 }); + } +} + +function isMacOS() { + return navigator.appVersion.indexOf("Mac") !== -1; +} +function isMetaPressed(e) { + return isMacOS() ? e.metaKey : e.ctrlKey; +} +function getDaysOfWeek(..._args) { + return window.moment.weekdaysShort(true); +} +function isWeekend(date) { + return date.isoWeekday() === 6 || date.isoWeekday() === 7; +} +function getStartOfWeek(days) { + return days[0].weekday(0); +} +/** + * Generate a 2D array of daily information to power + * the calendar view. + */ +function getMonth(displayedMonth, ..._args) { + const locale = window.moment().locale(); + const month = []; + let week; + const startOfMonth = displayedMonth.clone().locale(locale).date(1); + const startOffset = startOfMonth.weekday(); + let date = startOfMonth.clone().subtract(startOffset, "days"); + for (let _day = 0; _day < 42; _day++) { + if (_day % 7 === 0) { + week = { + days: [], + weekNum: date.week(), + }; + month.push(week); + } + week.days.push(date); + date = date.clone().add(1, "days"); + } + return month; +} + +/* src/components/Day.svelte generated by Svelte v3.35.0 */ + +function add_css$4() { + var style = element("style"); + style.id = "svelte-q3wqg9-style"; + style.textContent = ".day.svelte-q3wqg9{background-color:var(--color-background-day);border-radius:4px;color:var(--color-text-day);cursor:pointer;font-size:0.8em;height:100%;padding:4px;position:relative;text-align:center;transition:background-color 0.1s ease-in, color 0.1s ease-in;vertical-align:baseline}.day.svelte-q3wqg9:hover{background-color:var(--interactive-hover)}.day.active.svelte-q3wqg9:hover{background-color:var(--interactive-accent-hover)}.adjacent-month.svelte-q3wqg9{opacity:0.25}.today.svelte-q3wqg9{color:var(--color-text-today)}.day.svelte-q3wqg9:active,.active.svelte-q3wqg9,.active.today.svelte-q3wqg9{color:var(--text-on-accent);background-color:var(--interactive-accent)}.dot-container.svelte-q3wqg9{display:flex;flex-wrap:wrap;justify-content:center;line-height:6px;min-height:6px}"; + append(document.head, style); +} + +function get_each_context$2(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[11] = list[i]; + return child_ctx; +} + +// (36:8) {#each metadata.dots as dot} +function create_each_block$2(ctx) { + let dot; + let current; + const dot_spread_levels = [/*dot*/ ctx[11]]; + let dot_props = {}; + + for (let i = 0; i < dot_spread_levels.length; i += 1) { + dot_props = assign(dot_props, dot_spread_levels[i]); + } + + dot = new Dot({ props: dot_props }); + + return { + c() { + create_component(dot.$$.fragment); + }, + m(target, anchor) { + mount_component(dot, target, anchor); + current = true; + }, + p(ctx, dirty) { + const dot_changes = (dirty & /*metadata*/ 128) + ? get_spread_update(dot_spread_levels, [get_spread_object(/*dot*/ ctx[11])]) + : {}; + + dot.$set(dot_changes); + }, + i(local) { + if (current) return; + transition_in(dot.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(dot.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component(dot, detaching); + } + }; +} + +// (22:2) <MetadataResolver metadata="{metadata}" let:metadata> +function create_default_slot$1(ctx) { + let div1; + let t0_value = /*date*/ ctx[0].format("D") + ""; + let t0; + let t1; + let div0; + let div1_class_value; + let current; + let mounted; + let dispose; + let each_value = /*metadata*/ ctx[7].dots; + let each_blocks = []; + + for (let i = 0; i < each_value.length; i += 1) { + each_blocks[i] = create_each_block$2(get_each_context$2(ctx, each_value, i)); + } + + const out = i => transition_out(each_blocks[i], 1, 1, () => { + each_blocks[i] = null; + }); + + let div1_levels = [ + { + class: div1_class_value = `day ${/*metadata*/ ctx[7].classes.join(" ")}` + }, + /*metadata*/ ctx[7].dataAttributes || {} + ]; + + let div1_data = {}; + + for (let i = 0; i < div1_levels.length; i += 1) { + div1_data = assign(div1_data, div1_levels[i]); + } + + return { + c() { + div1 = element("div"); + t0 = text(t0_value); + t1 = space(); + div0 = element("div"); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + attr(div0, "class", "dot-container svelte-q3wqg9"); + set_attributes(div1, div1_data); + toggle_class(div1, "active", /*selectedId*/ ctx[6] === getDateUID_1(/*date*/ ctx[0], "day")); + toggle_class(div1, "adjacent-month", !/*date*/ ctx[0].isSame(/*displayedMonth*/ ctx[5], "month")); + toggle_class(div1, "today", /*date*/ ctx[0].isSame(/*today*/ ctx[4], "day")); + toggle_class(div1, "svelte-q3wqg9", true); + }, + m(target, anchor) { + insert(target, div1, anchor); + append(div1, t0); + append(div1, t1); + append(div1, div0); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(div0, null); + } + + current = true; + + if (!mounted) { + dispose = [ + listen(div1, "click", function () { + if (is_function(/*onClick*/ ctx[2] && /*click_handler*/ ctx[8])) (/*onClick*/ ctx[2] && /*click_handler*/ ctx[8]).apply(this, arguments); + }), + listen(div1, "contextmenu", function () { + if (is_function(/*onContextMenu*/ ctx[3] && /*contextmenu_handler*/ ctx[9])) (/*onContextMenu*/ ctx[3] && /*contextmenu_handler*/ ctx[9]).apply(this, arguments); + }), + listen(div1, "pointerover", function () { + if (is_function(/*onHover*/ ctx[1] && /*pointerover_handler*/ ctx[10])) (/*onHover*/ ctx[1] && /*pointerover_handler*/ ctx[10]).apply(this, arguments); + }) + ]; + + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + if ((!current || dirty & /*date*/ 1) && t0_value !== (t0_value = /*date*/ ctx[0].format("D") + "")) set_data(t0, t0_value); + + if (dirty & /*metadata*/ 128) { + each_value = /*metadata*/ ctx[7].dots; + let i; + + for (i = 0; i < each_value.length; i += 1) { + const child_ctx = get_each_context$2(ctx, 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$2(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(); + } + + set_attributes(div1, div1_data = get_spread_update(div1_levels, [ + (!current || dirty & /*metadata*/ 128 && div1_class_value !== (div1_class_value = `day ${/*metadata*/ ctx[7].classes.join(" ")}`)) && { class: div1_class_value }, + dirty & /*metadata*/ 128 && (/*metadata*/ ctx[7].dataAttributes || {}) + ])); + + toggle_class(div1, "active", /*selectedId*/ ctx[6] === getDateUID_1(/*date*/ ctx[0], "day")); + toggle_class(div1, "adjacent-month", !/*date*/ ctx[0].isSame(/*displayedMonth*/ ctx[5], "month")); + toggle_class(div1, "today", /*date*/ ctx[0].isSame(/*today*/ ctx[4], "day")); + toggle_class(div1, "svelte-q3wqg9", true); + }, + 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); + mounted = false; + run_all(dispose); + } + }; +} + +function create_fragment$4(ctx) { + let td; + let metadataresolver; + let current; + + metadataresolver = new MetadataResolver({ + props: { + metadata: /*metadata*/ ctx[7], + $$slots: { + default: [ + create_default_slot$1, + ({ metadata }) => ({ 7: metadata }), + ({ metadata }) => metadata ? 128 : 0 + ] + }, + $$scope: { ctx } + } + }); + + return { + c() { + td = element("td"); + create_component(metadataresolver.$$.fragment); + }, + m(target, anchor) { + insert(target, td, anchor); + mount_component(metadataresolver, td, null); + current = true; + }, + p(ctx, [dirty]) { + const metadataresolver_changes = {}; + if (dirty & /*metadata*/ 128) metadataresolver_changes.metadata = /*metadata*/ ctx[7]; + + if (dirty & /*$$scope, metadata, selectedId, date, displayedMonth, today, onClick, onContextMenu, onHover*/ 16639) { + metadataresolver_changes.$$scope = { dirty, ctx }; + } + + metadataresolver.$set(metadataresolver_changes); + }, + i(local) { + if (current) return; + transition_in(metadataresolver.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(metadataresolver.$$.fragment, local); + current = false; + }, + d(detaching) { + if (detaching) detach(td); + destroy_component(metadataresolver); + } + }; +} + +function instance$4($$self, $$props, $$invalidate) { + + + let { date } = $$props; + let { metadata } = $$props; + let { onHover } = $$props; + let { onClick } = $$props; + let { onContextMenu } = $$props; + let { today } = $$props; + let { displayedMonth = null } = $$props; + let { selectedId = null } = $$props; + const click_handler = e => onClick(date, isMetaPressed(e)); + const contextmenu_handler = e => onContextMenu(date, e); + const pointerover_handler = e => onHover(date, e.target, isMetaPressed(e)); + + $$self.$$set = $$props => { + if ("date" in $$props) $$invalidate(0, date = $$props.date); + if ("metadata" in $$props) $$invalidate(7, metadata = $$props.metadata); + if ("onHover" in $$props) $$invalidate(1, onHover = $$props.onHover); + if ("onClick" in $$props) $$invalidate(2, onClick = $$props.onClick); + if ("onContextMenu" in $$props) $$invalidate(3, onContextMenu = $$props.onContextMenu); + if ("today" in $$props) $$invalidate(4, today = $$props.today); + if ("displayedMonth" in $$props) $$invalidate(5, displayedMonth = $$props.displayedMonth); + if ("selectedId" in $$props) $$invalidate(6, selectedId = $$props.selectedId); + }; + + return [ + date, + onHover, + onClick, + onContextMenu, + today, + displayedMonth, + selectedId, + metadata, + click_handler, + contextmenu_handler, + pointerover_handler + ]; +} + +class Day extends SvelteComponent { + constructor(options) { + super(); + if (!document.getElementById("svelte-q3wqg9-style")) add_css$4(); + + init(this, options, instance$4, create_fragment$4, not_equal, { + date: 0, + metadata: 7, + onHover: 1, + onClick: 2, + onContextMenu: 3, + today: 4, + displayedMonth: 5, + selectedId: 6 + }); + } +} + +/* src/components/Arrow.svelte generated by Svelte v3.35.0 */ + +function add_css$3() { + var style = element("style"); + style.id = "svelte-156w7na-style"; + style.textContent = ".arrow.svelte-156w7na.svelte-156w7na{align-items:center;cursor:pointer;display:flex;justify-content:center;width:24px}.arrow.is-mobile.svelte-156w7na.svelte-156w7na{width:32px}.right.svelte-156w7na.svelte-156w7na{transform:rotate(180deg)}.arrow.svelte-156w7na svg.svelte-156w7na{color:var(--color-arrow);height:16px;width:16px}"; + append(document.head, style); +} + +function create_fragment$3(ctx) { + let div; + let svg; + let path; + let mounted; + let dispose; + + return { + c() { + div = element("div"); + svg = svg_element("svg"); + path = svg_element("path"); + attr(path, "fill", "currentColor"); + attr(path, "d", "M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z"); + attr(svg, "focusable", "false"); + attr(svg, "role", "img"); + attr(svg, "xmlns", "http://www.w3.org/2000/svg"); + attr(svg, "viewBox", "0 0 320 512"); + attr(svg, "class", "svelte-156w7na"); + attr(div, "class", "arrow svelte-156w7na"); + attr(div, "aria-label", /*tooltip*/ ctx[1]); + toggle_class(div, "is-mobile", /*isMobile*/ ctx[3]); + toggle_class(div, "right", /*direction*/ ctx[2] === "right"); + }, + m(target, anchor) { + insert(target, div, anchor); + append(div, svg); + append(svg, path); + + if (!mounted) { + dispose = listen(div, "click", function () { + if (is_function(/*onClick*/ ctx[0])) /*onClick*/ ctx[0].apply(this, arguments); + }); + + mounted = true; + } + }, + p(new_ctx, [dirty]) { + ctx = new_ctx; + + if (dirty & /*tooltip*/ 2) { + attr(div, "aria-label", /*tooltip*/ ctx[1]); + } + + if (dirty & /*direction*/ 4) { + toggle_class(div, "right", /*direction*/ ctx[2] === "right"); + } + }, + i: noop, + o: noop, + d(detaching) { + if (detaching) detach(div); + mounted = false; + dispose(); + } + }; +} + +function instance$3($$self, $$props, $$invalidate) { + let { onClick } = $$props; + let { tooltip } = $$props; + let { direction } = $$props; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let isMobile = window.app.isMobile; + + $$self.$$set = $$props => { + if ("onClick" in $$props) $$invalidate(0, onClick = $$props.onClick); + if ("tooltip" in $$props) $$invalidate(1, tooltip = $$props.tooltip); + if ("direction" in $$props) $$invalidate(2, direction = $$props.direction); + }; + + return [onClick, tooltip, direction, isMobile]; +} + +class Arrow extends SvelteComponent { + constructor(options) { + super(); + if (!document.getElementById("svelte-156w7na-style")) add_css$3(); + init(this, options, instance$3, create_fragment$3, safe_not_equal, { onClick: 0, tooltip: 1, direction: 2 }); + } +} + +/* src/components/Nav.svelte generated by Svelte v3.35.0 */ + +function add_css$2() { + var style = element("style"); + style.id = "svelte-1vwr9dd-style"; + style.textContent = ".nav.svelte-1vwr9dd.svelte-1vwr9dd{align-items:center;display:flex;margin:0.6em 0 1em;padding:0 8px;width:100%}.nav.is-mobile.svelte-1vwr9dd.svelte-1vwr9dd{padding:0}.title.svelte-1vwr9dd.svelte-1vwr9dd{color:var(--color-text-title);font-size:1.5em;margin:0}.is-mobile.svelte-1vwr9dd .title.svelte-1vwr9dd{font-size:1.3em}.month.svelte-1vwr9dd.svelte-1vwr9dd{font-weight:500;text-transform:capitalize}.year.svelte-1vwr9dd.svelte-1vwr9dd{color:var(--interactive-accent)}.right-nav.svelte-1vwr9dd.svelte-1vwr9dd{display:flex;justify-content:center;margin-left:auto}.reset-button.svelte-1vwr9dd.svelte-1vwr9dd{cursor:pointer;border-radius:4px;color:var(--text-muted);font-size:0.7em;font-weight:600;letter-spacing:1px;margin:0 4px;padding:0px 4px;text-transform:uppercase}.is-mobile.svelte-1vwr9dd .reset-button.svelte-1vwr9dd{display:none}"; + append(document.head, style); +} + +function create_fragment$2(ctx) { + let div2; + let h3; + let span0; + let t0_value = /*displayedMonth*/ ctx[0].format("MMM") + ""; + let t0; + let t1; + let span1; + let t2_value = /*displayedMonth*/ ctx[0].format("YYYY") + ""; + let t2; + let t3; + let div1; + let arrow0; + let t4; + let div0; + let t6; + let arrow1; + let current; + let mounted; + let dispose; + + arrow0 = new Arrow({ + props: { + direction: "left", + onClick: /*decrementDisplayedMonth*/ ctx[3], + tooltip: "Previous Month" + } + }); + + arrow1 = new Arrow({ + props: { + direction: "right", + onClick: /*incrementDisplayedMonth*/ ctx[2], + tooltip: "Next Month" + } + }); + + return { + c() { + div2 = element("div"); + h3 = element("h3"); + span0 = element("span"); + t0 = text(t0_value); + t1 = space(); + span1 = element("span"); + t2 = text(t2_value); + t3 = space(); + div1 = element("div"); + create_component(arrow0.$$.fragment); + t4 = space(); + div0 = element("div"); + div0.textContent = `${/*todayDisplayStr*/ ctx[4]}`; + t6 = space(); + create_component(arrow1.$$.fragment); + attr(span0, "class", "month svelte-1vwr9dd"); + attr(span1, "class", "year svelte-1vwr9dd"); + attr(h3, "class", "title svelte-1vwr9dd"); + attr(div0, "class", "reset-button svelte-1vwr9dd"); + attr(div1, "class", "right-nav svelte-1vwr9dd"); + attr(div2, "class", "nav svelte-1vwr9dd"); + toggle_class(div2, "is-mobile", /*isMobile*/ ctx[5]); + }, + m(target, anchor) { + insert(target, div2, anchor); + append(div2, h3); + append(h3, span0); + append(span0, t0); + append(h3, t1); + append(h3, span1); + append(span1, t2); + append(div2, t3); + append(div2, div1); + mount_component(arrow0, div1, null); + append(div1, t4); + append(div1, div0); + append(div1, t6); + mount_component(arrow1, div1, null); + current = true; + + if (!mounted) { + dispose = [ + listen(h3, "click", function () { + if (is_function(/*resetDisplayedMonth*/ ctx[1])) /*resetDisplayedMonth*/ ctx[1].apply(this, arguments); + }), + listen(div0, "click", function () { + if (is_function(/*resetDisplayedMonth*/ ctx[1])) /*resetDisplayedMonth*/ ctx[1].apply(this, arguments); + }) + ]; + + mounted = true; + } + }, + p(new_ctx, [dirty]) { + ctx = new_ctx; + if ((!current || dirty & /*displayedMonth*/ 1) && t0_value !== (t0_value = /*displayedMonth*/ ctx[0].format("MMM") + "")) set_data(t0, t0_value); + if ((!current || dirty & /*displayedMonth*/ 1) && t2_value !== (t2_value = /*displayedMonth*/ ctx[0].format("YYYY") + "")) set_data(t2, t2_value); + const arrow0_changes = {}; + if (dirty & /*decrementDisplayedMonth*/ 8) arrow0_changes.onClick = /*decrementDisplayedMonth*/ ctx[3]; + arrow0.$set(arrow0_changes); + const arrow1_changes = {}; + if (dirty & /*incrementDisplayedMonth*/ 4) arrow1_changes.onClick = /*incrementDisplayedMonth*/ ctx[2]; + arrow1.$set(arrow1_changes); + }, + i(local) { + if (current) return; + transition_in(arrow0.$$.fragment, local); + transition_in(arrow1.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(arrow0.$$.fragment, local); + transition_out(arrow1.$$.fragment, local); + current = false; + }, + d(detaching) { + if (detaching) detach(div2); + destroy_component(arrow0); + destroy_component(arrow1); + mounted = false; + run_all(dispose); + } + }; +} + +function instance$2($$self, $$props, $$invalidate) { + + let { displayedMonth } = $$props; + let { today } = $$props; + let { resetDisplayedMonth } = $$props; + let { incrementDisplayedMonth } = $$props; + let { decrementDisplayedMonth } = $$props; + + // Get the word 'Today' but localized to the current language + const todayDisplayStr = today.calendar().split(/\d|\s/)[0]; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let isMobile = window.app.isMobile; + + $$self.$$set = $$props => { + if ("displayedMonth" in $$props) $$invalidate(0, displayedMonth = $$props.displayedMonth); + if ("today" in $$props) $$invalidate(6, today = $$props.today); + if ("resetDisplayedMonth" in $$props) $$invalidate(1, resetDisplayedMonth = $$props.resetDisplayedMonth); + if ("incrementDisplayedMonth" in $$props) $$invalidate(2, incrementDisplayedMonth = $$props.incrementDisplayedMonth); + if ("decrementDisplayedMonth" in $$props) $$invalidate(3, decrementDisplayedMonth = $$props.decrementDisplayedMonth); + }; + + return [ + displayedMonth, + resetDisplayedMonth, + incrementDisplayedMonth, + decrementDisplayedMonth, + todayDisplayStr, + isMobile, + today + ]; +} + +class Nav extends SvelteComponent { + constructor(options) { + super(); + if (!document.getElementById("svelte-1vwr9dd-style")) add_css$2(); + + init(this, options, instance$2, create_fragment$2, safe_not_equal, { + displayedMonth: 0, + today: 6, + resetDisplayedMonth: 1, + incrementDisplayedMonth: 2, + decrementDisplayedMonth: 3 + }); + } +} + +/* src/components/WeekNum.svelte generated by Svelte v3.35.0 */ + +function add_css$1() { + var style = element("style"); + style.id = "svelte-egt0yd-style"; + style.textContent = "td.svelte-egt0yd{border-right:1px solid var(--background-modifier-border)}.week-num.svelte-egt0yd{background-color:var(--color-background-weeknum);border-radius:4px;color:var(--color-text-weeknum);cursor:pointer;font-size:0.65em;height:100%;padding:4px;text-align:center;transition:background-color 0.1s ease-in, color 0.1s ease-in;vertical-align:baseline}.week-num.svelte-egt0yd:hover{background-color:var(--interactive-hover)}.week-num.active.svelte-egt0yd:hover{background-color:var(--interactive-accent-hover)}.active.svelte-egt0yd{color:var(--text-on-accent);background-color:var(--interactive-accent)}.dot-container.svelte-egt0yd{display:flex;flex-wrap:wrap;justify-content:center;line-height:6px;min-height:6px}"; + append(document.head, style); +} + +function get_each_context$1(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[11] = list[i]; + return child_ctx; +} + +// (35:8) {#each metadata.dots as dot} +function create_each_block$1(ctx) { + let dot; + let current; + const dot_spread_levels = [/*dot*/ ctx[11]]; + let dot_props = {}; + + for (let i = 0; i < dot_spread_levels.length; i += 1) { + dot_props = assign(dot_props, dot_spread_levels[i]); + } + + dot = new Dot({ props: dot_props }); + + return { + c() { + create_component(dot.$$.fragment); + }, + m(target, anchor) { + mount_component(dot, target, anchor); + current = true; + }, + p(ctx, dirty) { + const dot_changes = (dirty & /*metadata*/ 64) + ? get_spread_update(dot_spread_levels, [get_spread_object(/*dot*/ ctx[11])]) + : {}; + + dot.$set(dot_changes); + }, + i(local) { + if (current) return; + transition_in(dot.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(dot.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component(dot, detaching); + } + }; +} + +// (24:2) <MetadataResolver metadata="{metadata}" let:metadata> +function create_default_slot(ctx) { + let div1; + let t0; + let t1; + let div0; + let div1_class_value; + let current; + let mounted; + let dispose; + let each_value = /*metadata*/ ctx[6].dots; + let each_blocks = []; + + for (let i = 0; i < each_value.length; i += 1) { + each_blocks[i] = create_each_block$1(get_each_context$1(ctx, each_value, i)); + } + + const out = i => transition_out(each_blocks[i], 1, 1, () => { + each_blocks[i] = null; + }); + + return { + c() { + div1 = element("div"); + t0 = text(/*weekNum*/ ctx[0]); + t1 = space(); + div0 = element("div"); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + attr(div0, "class", "dot-container svelte-egt0yd"); + attr(div1, "class", div1_class_value = "" + (null_to_empty(`week-num ${/*metadata*/ ctx[6].classes.join(" ")}`) + " svelte-egt0yd")); + toggle_class(div1, "active", /*selectedId*/ ctx[5] === getDateUID_1(/*days*/ ctx[1][0], "week")); + }, + m(target, anchor) { + insert(target, div1, anchor); + append(div1, t0); + append(div1, t1); + append(div1, div0); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(div0, null); + } + + current = true; + + if (!mounted) { + dispose = [ + listen(div1, "click", function () { + if (is_function(/*onClick*/ ctx[3] && /*click_handler*/ ctx[8])) (/*onClick*/ ctx[3] && /*click_handler*/ ctx[8]).apply(this, arguments); + }), + listen(div1, "contextmenu", function () { + if (is_function(/*onContextMenu*/ ctx[4] && /*contextmenu_handler*/ ctx[9])) (/*onContextMenu*/ ctx[4] && /*contextmenu_handler*/ ctx[9]).apply(this, arguments); + }), + listen(div1, "pointerover", function () { + if (is_function(/*onHover*/ ctx[2] && /*pointerover_handler*/ ctx[10])) (/*onHover*/ ctx[2] && /*pointerover_handler*/ ctx[10]).apply(this, arguments); + }) + ]; + + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + if (!current || dirty & /*weekNum*/ 1) set_data(t0, /*weekNum*/ ctx[0]); + + if (dirty & /*metadata*/ 64) { + each_value = /*metadata*/ ctx[6].dots; + let i; + + for (i = 0; i < each_value.length; i += 1) { + const child_ctx = get_each_context$1(ctx, 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$1(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(); + } + + if (!current || dirty & /*metadata*/ 64 && div1_class_value !== (div1_class_value = "" + (null_to_empty(`week-num ${/*metadata*/ ctx[6].classes.join(" ")}`) + " svelte-egt0yd"))) { + attr(div1, "class", div1_class_value); + } + + if (dirty & /*metadata, selectedId, getDateUID, days*/ 98) { + toggle_class(div1, "active", /*selectedId*/ ctx[5] === getDateUID_1(/*days*/ ctx[1][0], "week")); + } + }, + 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); + mounted = false; + run_all(dispose); + } + }; +} + +function create_fragment$1(ctx) { + let td; + let metadataresolver; + let current; + + metadataresolver = new MetadataResolver({ + props: { + metadata: /*metadata*/ ctx[6], + $$slots: { + default: [ + create_default_slot, + ({ metadata }) => ({ 6: metadata }), + ({ metadata }) => metadata ? 64 : 0 + ] + }, + $$scope: { ctx } + } + }); + + return { + c() { + td = element("td"); + create_component(metadataresolver.$$.fragment); + attr(td, "class", "svelte-egt0yd"); + }, + m(target, anchor) { + insert(target, td, anchor); + mount_component(metadataresolver, td, null); + current = true; + }, + p(ctx, [dirty]) { + const metadataresolver_changes = {}; + if (dirty & /*metadata*/ 64) metadataresolver_changes.metadata = /*metadata*/ ctx[6]; + + if (dirty & /*$$scope, metadata, selectedId, days, onClick, startOfWeek, onContextMenu, onHover, weekNum*/ 16639) { + metadataresolver_changes.$$scope = { dirty, ctx }; + } + + metadataresolver.$set(metadataresolver_changes); + }, + i(local) { + if (current) return; + transition_in(metadataresolver.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(metadataresolver.$$.fragment, local); + current = false; + }, + d(detaching) { + if (detaching) detach(td); + destroy_component(metadataresolver); + } + }; +} + +function instance$1($$self, $$props, $$invalidate) { + + + let { weekNum } = $$props; + let { days } = $$props; + let { metadata } = $$props; + let { onHover } = $$props; + let { onClick } = $$props; + let { onContextMenu } = $$props; + let { selectedId = null } = $$props; + let startOfWeek; + const click_handler = e => onClick(startOfWeek, isMetaPressed(e)); + const contextmenu_handler = e => onContextMenu(days[0], e); + const pointerover_handler = e => onHover(startOfWeek, e.target, isMetaPressed(e)); + + $$self.$$set = $$props => { + if ("weekNum" in $$props) $$invalidate(0, weekNum = $$props.weekNum); + if ("days" in $$props) $$invalidate(1, days = $$props.days); + if ("metadata" in $$props) $$invalidate(6, metadata = $$props.metadata); + if ("onHover" in $$props) $$invalidate(2, onHover = $$props.onHover); + if ("onClick" in $$props) $$invalidate(3, onClick = $$props.onClick); + if ("onContextMenu" in $$props) $$invalidate(4, onContextMenu = $$props.onContextMenu); + if ("selectedId" in $$props) $$invalidate(5, selectedId = $$props.selectedId); + }; + + $$self.$$.update = () => { + if ($$self.$$.dirty & /*days*/ 2) { + $$invalidate(7, startOfWeek = getStartOfWeek(days)); + } + }; + + return [ + weekNum, + days, + onHover, + onClick, + onContextMenu, + selectedId, + metadata, + startOfWeek, + click_handler, + contextmenu_handler, + pointerover_handler + ]; +} + +class WeekNum extends SvelteComponent { + constructor(options) { + super(); + if (!document.getElementById("svelte-egt0yd-style")) add_css$1(); + + init(this, options, instance$1, create_fragment$1, not_equal, { + weekNum: 0, + days: 1, + metadata: 6, + onHover: 2, + onClick: 3, + onContextMenu: 4, + selectedId: 5 + }); + } +} + +async function metadataReducer(promisedMetadata) { + const meta = { + dots: [], + classes: [], + dataAttributes: {}, + }; + const metas = await Promise.all(promisedMetadata); + return metas.reduce((acc, meta) => ({ + classes: [...acc.classes, ...(meta.classes || [])], + dataAttributes: Object.assign(acc.dataAttributes, meta.dataAttributes), + dots: [...acc.dots, ...(meta.dots || [])], + }), meta); +} +function getDailyMetadata(sources, date, ..._args) { + return metadataReducer(sources.map((source) => source.getDailyMetadata(date))); +} +function getWeeklyMetadata(sources, date, ..._args) { + return metadataReducer(sources.map((source) => source.getWeeklyMetadata(date))); +} + +/* src/components/Calendar.svelte generated by Svelte v3.35.0 */ + +function add_css() { + var style = element("style"); + style.id = "svelte-pcimu8-style"; + style.textContent = ".container.svelte-pcimu8{--color-background-heading:transparent;--color-background-day:transparent;--color-background-weeknum:transparent;--color-background-weekend:transparent;--color-dot:var(--text-muted);--color-arrow:var(--text-muted);--color-button:var(--text-muted);--color-text-title:var(--text-normal);--color-text-heading:var(--text-muted);--color-text-day:var(--text-normal);--color-text-today:var(--interactive-accent);--color-text-weeknum:var(--text-muted)}.container.svelte-pcimu8{padding:0 8px}.container.is-mobile.svelte-pcimu8{padding:0}th.svelte-pcimu8{text-align:center}.weekend.svelte-pcimu8{background-color:var(--color-background-weekend)}.calendar.svelte-pcimu8{border-collapse:collapse;width:100%}th.svelte-pcimu8{background-color:var(--color-background-heading);color:var(--color-text-heading);font-size:0.6em;letter-spacing:1px;padding:4px;text-transform:uppercase}"; + append(document.head, style); +} + +function get_each_context(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[18] = list[i]; + return child_ctx; +} + +function get_each_context_1(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[21] = list[i]; + return child_ctx; +} + +function get_each_context_2(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[24] = list[i]; + return child_ctx; +} + +function get_each_context_3(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[27] = list[i]; + return child_ctx; +} + +// (55:6) {#if showWeekNums} +function create_if_block_2(ctx) { + let col; + + return { + c() { + col = element("col"); + }, + m(target, anchor) { + insert(target, col, anchor); + }, + d(detaching) { + if (detaching) detach(col); + } + }; +} + +// (58:6) {#each month[1].days as date} +function create_each_block_3(ctx) { + let col; + + return { + c() { + col = element("col"); + attr(col, "class", "svelte-pcimu8"); + toggle_class(col, "weekend", isWeekend(/*date*/ ctx[27])); + }, + m(target, anchor) { + insert(target, col, anchor); + }, + p(ctx, dirty) { + if (dirty & /*isWeekend, month*/ 16384) { + toggle_class(col, "weekend", isWeekend(/*date*/ ctx[27])); + } + }, + d(detaching) { + if (detaching) detach(col); + } + }; +} + +// (64:8) {#if showWeekNums} +function create_if_block_1(ctx) { + let th; + + return { + c() { + th = element("th"); + th.textContent = "W"; + attr(th, "class", "svelte-pcimu8"); + }, + m(target, anchor) { + insert(target, th, anchor); + }, + d(detaching) { + if (detaching) detach(th); + } + }; +} + +// (67:8) {#each daysOfWeek as dayOfWeek} +function create_each_block_2(ctx) { + let th; + let t_value = /*dayOfWeek*/ ctx[24] + ""; + let t; + + return { + c() { + th = element("th"); + t = text(t_value); + attr(th, "class", "svelte-pcimu8"); + }, + m(target, anchor) { + insert(target, th, anchor); + append(th, t); + }, + p(ctx, dirty) { + if (dirty & /*daysOfWeek*/ 32768 && t_value !== (t_value = /*dayOfWeek*/ ctx[24] + "")) set_data(t, t_value); + }, + d(detaching) { + if (detaching) detach(th); + } + }; +} + +// (75:10) {#if showWeekNums} +function create_if_block(ctx) { + let weeknum; + let current; + + const weeknum_spread_levels = [ + /*week*/ ctx[18], + { + metadata: getWeeklyMetadata(/*sources*/ ctx[8], /*week*/ ctx[18].days[0], /*today*/ ctx[10]) + }, + { onClick: /*onClickWeek*/ ctx[7] }, + { + onContextMenu: /*onContextMenuWeek*/ ctx[5] + }, + { onHover: /*onHoverWeek*/ ctx[3] }, + { selectedId: /*selectedId*/ ctx[9] } + ]; + + let weeknum_props = {}; + + for (let i = 0; i < weeknum_spread_levels.length; i += 1) { + weeknum_props = assign(weeknum_props, weeknum_spread_levels[i]); + } + + weeknum = new WeekNum({ props: weeknum_props }); + + return { + c() { + create_component(weeknum.$$.fragment); + }, + m(target, anchor) { + mount_component(weeknum, target, anchor); + current = true; + }, + p(ctx, dirty) { + const weeknum_changes = (dirty & /*month, getWeeklyMetadata, sources, today, onClickWeek, onContextMenuWeek, onHoverWeek, selectedId*/ 18344) + ? get_spread_update(weeknum_spread_levels, [ + dirty & /*month*/ 16384 && get_spread_object(/*week*/ ctx[18]), + dirty & /*getWeeklyMetadata, sources, month, today*/ 17664 && { + metadata: getWeeklyMetadata(/*sources*/ ctx[8], /*week*/ ctx[18].days[0], /*today*/ ctx[10]) + }, + dirty & /*onClickWeek*/ 128 && { onClick: /*onClickWeek*/ ctx[7] }, + dirty & /*onContextMenuWeek*/ 32 && { + onContextMenu: /*onContextMenuWeek*/ ctx[5] + }, + dirty & /*onHoverWeek*/ 8 && { onHover: /*onHoverWeek*/ ctx[3] }, + dirty & /*selectedId*/ 512 && { selectedId: /*selectedId*/ ctx[9] } + ]) + : {}; + + weeknum.$set(weeknum_changes); + }, + i(local) { + if (current) return; + transition_in(weeknum.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(weeknum.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component(weeknum, detaching); + } + }; +} + +// (85:10) {#each week.days as day (day.format())} +function create_each_block_1(key_1, ctx) { + let first; + let day; + let current; + + day = new Day({ + props: { + date: /*day*/ ctx[21], + today: /*today*/ ctx[10], + displayedMonth: /*displayedMonth*/ ctx[0], + onClick: /*onClickDay*/ ctx[6], + onContextMenu: /*onContextMenuDay*/ ctx[4], + onHover: /*onHoverDay*/ ctx[2], + metadata: getDailyMetadata(/*sources*/ ctx[8], /*day*/ ctx[21], /*today*/ ctx[10]), + selectedId: /*selectedId*/ ctx[9] + } + }); + + return { + key: key_1, + first: null, + c() { + first = empty(); + create_component(day.$$.fragment); + this.first = first; + }, + m(target, anchor) { + insert(target, first, anchor); + mount_component(day, target, anchor); + current = true; + }, + p(new_ctx, dirty) { + ctx = new_ctx; + const day_changes = {}; + if (dirty & /*month*/ 16384) day_changes.date = /*day*/ ctx[21]; + if (dirty & /*today*/ 1024) day_changes.today = /*today*/ ctx[10]; + if (dirty & /*displayedMonth*/ 1) day_changes.displayedMonth = /*displayedMonth*/ ctx[0]; + if (dirty & /*onClickDay*/ 64) day_changes.onClick = /*onClickDay*/ ctx[6]; + if (dirty & /*onContextMenuDay*/ 16) day_changes.onContextMenu = /*onContextMenuDay*/ ctx[4]; + if (dirty & /*onHoverDay*/ 4) day_changes.onHover = /*onHoverDay*/ ctx[2]; + if (dirty & /*sources, month, today*/ 17664) day_changes.metadata = getDailyMetadata(/*sources*/ ctx[8], /*day*/ ctx[21], /*today*/ ctx[10]); + if (dirty & /*selectedId*/ 512) day_changes.selectedId = /*selectedId*/ ctx[9]; + day.$set(day_changes); + }, + i(local) { + if (current) return; + transition_in(day.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(day.$$.fragment, local); + current = false; + }, + d(detaching) { + if (detaching) detach(first); + destroy_component(day, detaching); + } + }; +} + +// (73:6) {#each month as week (week.weekNum)} +function create_each_block(key_1, ctx) { + let tr; + let t0; + let each_blocks = []; + let each_1_lookup = new Map(); + let t1; + let current; + let if_block = /*showWeekNums*/ ctx[1] && create_if_block(ctx); + let each_value_1 = /*week*/ ctx[18].days; + const get_key = ctx => /*day*/ ctx[21].format(); + + for (let i = 0; i < each_value_1.length; i += 1) { + let child_ctx = get_each_context_1(ctx, each_value_1, i); + let key = get_key(child_ctx); + each_1_lookup.set(key, each_blocks[i] = create_each_block_1(key, child_ctx)); + } + + return { + key: key_1, + first: null, + c() { + tr = element("tr"); + if (if_block) if_block.c(); + t0 = space(); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + t1 = space(); + this.first = tr; + }, + m(target, anchor) { + insert(target, tr, anchor); + if (if_block) if_block.m(tr, null); + append(tr, t0); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(tr, null); + } + + append(tr, t1); + current = true; + }, + p(new_ctx, dirty) { + ctx = new_ctx; + + if (/*showWeekNums*/ ctx[1]) { + if (if_block) { + if_block.p(ctx, dirty); + + if (dirty & /*showWeekNums*/ 2) { + transition_in(if_block, 1); + } + } else { + if_block = create_if_block(ctx); + if_block.c(); + transition_in(if_block, 1); + if_block.m(tr, t0); + } + } else if (if_block) { + group_outros(); + + transition_out(if_block, 1, 1, () => { + if_block = null; + }); + + check_outros(); + } + + if (dirty & /*month, today, displayedMonth, onClickDay, onContextMenuDay, onHoverDay, getDailyMetadata, sources, selectedId*/ 18261) { + each_value_1 = /*week*/ ctx[18].days; + group_outros(); + each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx, each_value_1, each_1_lookup, tr, outro_and_destroy_block, create_each_block_1, t1, get_each_context_1); + check_outros(); + } + }, + i(local) { + if (current) return; + transition_in(if_block); + + for (let i = 0; i < each_value_1.length; i += 1) { + transition_in(each_blocks[i]); + } + + current = true; + }, + o(local) { + transition_out(if_block); + + for (let i = 0; i < each_blocks.length; i += 1) { + transition_out(each_blocks[i]); + } + + current = false; + }, + d(detaching) { + if (detaching) detach(tr); + if (if_block) if_block.d(); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].d(); + } + } + }; +} + +function create_fragment(ctx) { + let div; + let nav; + let t0; + let table; + let colgroup; + let t1; + let t2; + let thead; + let tr; + let t3; + let t4; + let tbody; + let each_blocks = []; + let each2_lookup = new Map(); + let current; + + nav = new Nav({ + props: { + today: /*today*/ ctx[10], + displayedMonth: /*displayedMonth*/ ctx[0], + incrementDisplayedMonth: /*incrementDisplayedMonth*/ ctx[11], + decrementDisplayedMonth: /*decrementDisplayedMonth*/ ctx[12], + resetDisplayedMonth: /*resetDisplayedMonth*/ ctx[13] + } + }); + + let if_block0 = /*showWeekNums*/ ctx[1] && create_if_block_2(); + let each_value_3 = /*month*/ ctx[14][1].days; + let each_blocks_2 = []; + + for (let i = 0; i < each_value_3.length; i += 1) { + each_blocks_2[i] = create_each_block_3(get_each_context_3(ctx, each_value_3, i)); + } + + let if_block1 = /*showWeekNums*/ ctx[1] && create_if_block_1(); + let each_value_2 = /*daysOfWeek*/ ctx[15]; + let each_blocks_1 = []; + + for (let i = 0; i < each_value_2.length; i += 1) { + each_blocks_1[i] = create_each_block_2(get_each_context_2(ctx, each_value_2, i)); + } + + let each_value = /*month*/ ctx[14]; + const get_key = ctx => /*week*/ ctx[18].weekNum; + + for (let i = 0; i < each_value.length; i += 1) { + let child_ctx = get_each_context(ctx, each_value, i); + let key = get_key(child_ctx); + each2_lookup.set(key, each_blocks[i] = create_each_block(key, child_ctx)); + } + + return { + c() { + div = element("div"); + create_component(nav.$$.fragment); + t0 = space(); + table = element("table"); + colgroup = element("colgroup"); + if (if_block0) if_block0.c(); + t1 = space(); + + for (let i = 0; i < each_blocks_2.length; i += 1) { + each_blocks_2[i].c(); + } + + t2 = space(); + thead = element("thead"); + tr = element("tr"); + if (if_block1) if_block1.c(); + t3 = space(); + + for (let i = 0; i < each_blocks_1.length; i += 1) { + each_blocks_1[i].c(); + } + + t4 = space(); + tbody = element("tbody"); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + attr(table, "class", "calendar svelte-pcimu8"); + attr(div, "id", "calendar-container"); + attr(div, "class", "container svelte-pcimu8"); + toggle_class(div, "is-mobile", /*isMobile*/ ctx[16]); + }, + m(target, anchor) { + insert(target, div, anchor); + mount_component(nav, div, null); + append(div, t0); + append(div, table); + append(table, colgroup); + if (if_block0) if_block0.m(colgroup, null); + append(colgroup, t1); + + for (let i = 0; i < each_blocks_2.length; i += 1) { + each_blocks_2[i].m(colgroup, null); + } + + append(table, t2); + append(table, thead); + append(thead, tr); + if (if_block1) if_block1.m(tr, null); + append(tr, t3); + + for (let i = 0; i < each_blocks_1.length; i += 1) { + each_blocks_1[i].m(tr, null); + } + + append(table, t4); + append(table, tbody); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(tbody, null); + } + + current = true; + }, + p(ctx, [dirty]) { + const nav_changes = {}; + if (dirty & /*today*/ 1024) nav_changes.today = /*today*/ ctx[10]; + if (dirty & /*displayedMonth*/ 1) nav_changes.displayedMonth = /*displayedMonth*/ ctx[0]; + nav.$set(nav_changes); + + if (/*showWeekNums*/ ctx[1]) { + if (if_block0) ; else { + if_block0 = create_if_block_2(); + if_block0.c(); + if_block0.m(colgroup, t1); + } + } else if (if_block0) { + if_block0.d(1); + if_block0 = null; + } + + if (dirty & /*isWeekend, month*/ 16384) { + each_value_3 = /*month*/ ctx[14][1].days; + let i; + + for (i = 0; i < each_value_3.length; i += 1) { + const child_ctx = get_each_context_3(ctx, each_value_3, i); + + if (each_blocks_2[i]) { + each_blocks_2[i].p(child_ctx, dirty); + } else { + each_blocks_2[i] = create_each_block_3(child_ctx); + each_blocks_2[i].c(); + each_blocks_2[i].m(colgroup, null); + } + } + + for (; i < each_blocks_2.length; i += 1) { + each_blocks_2[i].d(1); + } + + each_blocks_2.length = each_value_3.length; + } + + if (/*showWeekNums*/ ctx[1]) { + if (if_block1) ; else { + if_block1 = create_if_block_1(); + if_block1.c(); + if_block1.m(tr, t3); + } + } else if (if_block1) { + if_block1.d(1); + if_block1 = null; + } + + if (dirty & /*daysOfWeek*/ 32768) { + each_value_2 = /*daysOfWeek*/ ctx[15]; + let i; + + for (i = 0; i < each_value_2.length; i += 1) { + const child_ctx = get_each_context_2(ctx, each_value_2, i); + + if (each_blocks_1[i]) { + each_blocks_1[i].p(child_ctx, dirty); + } else { + each_blocks_1[i] = create_each_block_2(child_ctx); + each_blocks_1[i].c(); + each_blocks_1[i].m(tr, null); + } + } + + for (; i < each_blocks_1.length; i += 1) { + each_blocks_1[i].d(1); + } + + each_blocks_1.length = each_value_2.length; + } + + if (dirty & /*month, today, displayedMonth, onClickDay, onContextMenuDay, onHoverDay, getDailyMetadata, sources, selectedId, getWeeklyMetadata, onClickWeek, onContextMenuWeek, onHoverWeek, showWeekNums*/ 18431) { + each_value = /*month*/ ctx[14]; + group_outros(); + each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx, each_value, each2_lookup, tbody, outro_and_destroy_block, create_each_block, null, get_each_context); + check_outros(); + } + }, + i(local) { + if (current) return; + transition_in(nav.$$.fragment, local); + + for (let i = 0; i < each_value.length; i += 1) { + transition_in(each_blocks[i]); + } + + current = true; + }, + o(local) { + transition_out(nav.$$.fragment, local); + + for (let i = 0; i < each_blocks.length; i += 1) { + transition_out(each_blocks[i]); + } + + current = false; + }, + d(detaching) { + if (detaching) detach(div); + destroy_component(nav); + if (if_block0) if_block0.d(); + destroy_each(each_blocks_2, detaching); + if (if_block1) if_block1.d(); + destroy_each(each_blocks_1, detaching); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].d(); + } + } + }; +} + +function instance($$self, $$props, $$invalidate) { + + + let { localeData } = $$props; + let { showWeekNums = false } = $$props; + let { onHoverDay } = $$props; + let { onHoverWeek } = $$props; + let { onContextMenuDay } = $$props; + let { onContextMenuWeek } = $$props; + let { onClickDay } = $$props; + let { onClickWeek } = $$props; + let { sources = [] } = $$props; + let { selectedId } = $$props; + let { today = window.moment() } = $$props; + let { displayedMonth = today } = $$props; + let month; + let daysOfWeek; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let isMobile = window.app.isMobile; + + function incrementDisplayedMonth() { + $$invalidate(0, displayedMonth = displayedMonth.clone().add(1, "month")); + } + + function decrementDisplayedMonth() { + $$invalidate(0, displayedMonth = displayedMonth.clone().subtract(1, "month")); + } + + function resetDisplayedMonth() { + $$invalidate(0, displayedMonth = today.clone()); + } + + $$self.$$set = $$props => { + if ("localeData" in $$props) $$invalidate(17, localeData = $$props.localeData); + if ("showWeekNums" in $$props) $$invalidate(1, showWeekNums = $$props.showWeekNums); + if ("onHoverDay" in $$props) $$invalidate(2, onHoverDay = $$props.onHoverDay); + if ("onHoverWeek" in $$props) $$invalidate(3, onHoverWeek = $$props.onHoverWeek); + if ("onContextMenuDay" in $$props) $$invalidate(4, onContextMenuDay = $$props.onContextMenuDay); + if ("onContextMenuWeek" in $$props) $$invalidate(5, onContextMenuWeek = $$props.onContextMenuWeek); + if ("onClickDay" in $$props) $$invalidate(6, onClickDay = $$props.onClickDay); + if ("onClickWeek" in $$props) $$invalidate(7, onClickWeek = $$props.onClickWeek); + if ("sources" in $$props) $$invalidate(8, sources = $$props.sources); + if ("selectedId" in $$props) $$invalidate(9, selectedId = $$props.selectedId); + if ("today" in $$props) $$invalidate(10, today = $$props.today); + if ("displayedMonth" in $$props) $$invalidate(0, displayedMonth = $$props.displayedMonth); + }; + + $$self.$$.update = () => { + if ($$self.$$.dirty & /*displayedMonth, localeData*/ 131073) { + $$invalidate(14, month = getMonth(displayedMonth, localeData)); + } + + if ($$self.$$.dirty & /*today, localeData*/ 132096) { + $$invalidate(15, daysOfWeek = getDaysOfWeek(today, localeData)); + } + }; + + return [ + displayedMonth, + showWeekNums, + onHoverDay, + onHoverWeek, + onContextMenuDay, + onContextMenuWeek, + onClickDay, + onClickWeek, + sources, + selectedId, + today, + incrementDisplayedMonth, + decrementDisplayedMonth, + resetDisplayedMonth, + month, + daysOfWeek, + isMobile, + localeData + ]; +} + +class Calendar extends SvelteComponent { + constructor(options) { + super(); + if (!document.getElementById("svelte-pcimu8-style")) add_css(); + + init(this, options, instance, create_fragment, not_equal, { + localeData: 17, + showWeekNums: 1, + onHoverDay: 2, + onHoverWeek: 3, + onContextMenuDay: 4, + onContextMenuWeek: 5, + onClickDay: 6, + onClickWeek: 7, + sources: 8, + selectedId: 9, + today: 10, + displayedMonth: 0, + incrementDisplayedMonth: 11, + decrementDisplayedMonth: 12, + resetDisplayedMonth: 13 + }); + } + + get incrementDisplayedMonth() { + return this.$$.ctx[11]; + } + + get decrementDisplayedMonth() { + return this.$$.ctx[12]; + } + + get resetDisplayedMonth() { + return this.$$.ctx[13]; + } +} + +/** Generic code for embedded Dataviews. */ +class DataviewRefreshableRenderer extends obsidian.MarkdownRenderChild { + container; + index; + app; + settings; + lastReload; + constructor(container, index, app, settings) { + super(container); + this.container = container; + this.index = index; + this.app = app; + this.settings = settings; + this.lastReload = 0; + } + onload() { + this.render(); + this.lastReload = this.index.revision; + // Refresh after index changes stop. + this.registerEvent(this.app.workspace.on("dataview:refresh-views", this.maybeRefresh)); + // ...or when the DOM is shown (sidebar expands, tab selected, nodes scrolled into view). + this.register(this.container.onNodeInserted(this.maybeRefresh)); + } + maybeRefresh = () => { + // If the index revision has changed recently, then queue a reload. + // But only if we're mounted in the DOM and auto-refreshing is active. + if (this.lastReload != this.index.revision && this.container.isShown() && this.settings.refreshEnabled) { + this.lastReload = this.index.revision; + this.render(); + } + }; +} + +class DataviewCalendarRenderer extends DataviewRefreshableRenderer { + query; + container; + index; + origin; + settings; + app; + calendar; + constructor(query, container, index, origin, settings, app) { + super(container, index, app, settings); + this.query = query; + this.container = container; + this.index = index; + this.origin = origin; + this.settings = settings; + this.app = app; + } + async render() { + this.container.innerHTML = ""; + let maybeResult = await asyncTryOrPropagate(() => executeCalendar(this.query, this.index, this.origin, this.settings)); + if (!maybeResult.successful) { + renderErrorPre(this.container, "Dataview: " + maybeResult.error); + return; + } + else if (maybeResult.value.data.length == 0 && this.settings.warnOnEmptyResult) { + renderErrorPre(this.container, "Dataview: Query returned 0 results."); + return; + } + let dateMap = new Map(); + for (let data of maybeResult.value.data) { + const dot = { + color: "default", + className: "note", + isFilled: true, + link: data.link, + }; + const d = data.date.toFormat("yyyyLLdd"); + if (!dateMap.has(d)) { + dateMap.set(d, [dot]); + } + else { + dateMap.get(d)?.push(dot); + } + } + const querySource = { + getDailyMetadata: async (date) => { + return { + dots: dateMap.get(date.format("YYYYMMDD")) || [], + }; + }, + }; + const sources = [querySource]; + const renderer = this; + this.calendar = new Calendar({ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + target: this.container, + props: { + onHoverDay(date, targetEl) { + const vals = dateMap.get(date.format("YYYYMMDD")); + if (!vals || vals.length == 0) { + return; + } + if (vals?.length == 0) { + return; + } + renderer.app.workspace.trigger("link-hover", {}, targetEl, vals[0].link.path, vals[0].link.path); + }, + onClickDay: async (date) => { + const vals = dateMap.get(date.format("YYYYMMDD")); + if (!vals || vals.length == 0) { + return; + } + if (vals?.length == 0) { + return; + } + const file = renderer.app.metadataCache.getFirstLinkpathDest(vals[0].link.path, ""); + if (file == null) { + return; + } + const leaf = renderer.app.workspace.getUnpinnedLeaf(); + await leaf.openFile(file, { active: true }); + }, + showWeekNums: false, + sources, + }, + }); + } + onClose() { + if (this.calendar) { + this.calendar.$destroy(); + } + return Promise.resolve(); + } +} + +/** Fancy wrappers for the JavaScript API, used both by external plugins AND by the dataview javascript view. */ +/** Asynchronous API calls related to file / system IO. */ +class DataviewInlineIOApi { + api; + currentFile; + constructor(api, currentFile) { + this.api = api; + this.currentFile = currentFile; + } + /** Load the contents of a CSV asynchronously, returning a data array of rows (or undefined if it does not exist). */ + async csv(path, originFile) { + return this.api.csv(path, originFile || this.currentFile); + } + /** Asynchronously load the contents of any link or path in an Obsidian vault. */ + async load(path, originFile) { + return this.api.load(path, originFile || this.currentFile); + } + /** Normalize a link or path relative to an optional origin file. Returns a textual fully-qualified-path. */ + normalize(path, originFile) { + return this.api.normalize(path, originFile || this.currentFile); + } +} +class DataviewInlineApi { + /** + * The raw dataview indices, which track file <-> metadata relations. Use these if the intuitive API does not support + * your use case. + */ + index; + /** The component that handles the lifetime of this view. Use it if you are adding custom event handlers/components. */ + component; + /** The path to the current file this script is running in. */ + currentFilePath; + /** + * The container which holds the output of this view. You can directly append fields to this, if you wish, though + * the rendering API is likely to be easier for straight-forward purposes. + */ + container; + /** Directly access the Obsidian app object, such as for reaching out to other plugins. */ + app; + /** The general plugin API which much of this inline API delegates to. */ + api; + /** Settings which determine defaults, incl. many rendering options. */ + settings; + /** Evaluation context which expressions can be evaluated in. */ + evaluationContext; + /** Value utilities which allow for type-checking and comparisons. */ + value = Values; + /** Widget utility functions for creating built-in widgets. */ + widget = Widgets; + /** IO utilities which are largely asynchronous. */ + io; + /** Re-exporting of luxon for people who can't easily require it. Sorry! */ + luxon = Luxon; + /** Dataview functions which can be called from DataviewJS. */ + func; + constructor(api, component, container, currentFilePath) { + this.index = api.index; + this.app = api.app; + this.settings = api.settings; + this.component = component; + this.container = container; + this.currentFilePath = currentFilePath; + this.api = api; + this.io = new DataviewInlineIOApi(this.api.io, this.currentFilePath); + // Set up the evaluation context with variables from the current file. + let fileMeta = this.index.pages.get(this.currentFilePath)?.serialize(this.index) ?? {}; + this.evaluationContext = new Context(defaultLinkHandler(this.index, this.currentFilePath), this.settings, { + this: fileMeta, + }); + this.func = Functions.bindAll(DEFAULT_FUNCTIONS, this.evaluationContext); + } + ///////////////////////////// + // Index + Data Collection // + ///////////////////////////// + /** Return an array of paths (as strings) corresponding to pages which match the query. */ + pagePaths(query) { + return this.api.pagePaths(query, this.currentFilePath); + } + /** Map a page path to the actual data contained within that page. */ + page(path) { + return this.api.page(path, this.currentFilePath); + } + /** Return an array of page objects corresponding to pages which match the query. */ + pages(query) { + return this.api.pages(query, this.currentFilePath); + } + /** Return the information about the current page. */ + current() { + return this.page(this.currentFilePath); + } + /////////////////////////////// + // Dataview Query Evaluation // + /////////////////////////////// + /** Execute a Dataview query, returning the results in programmatic form. */ + async query(source, originFile, settings) { + return this.api.query(source, originFile ?? this.currentFilePath, settings); + } + /** Error-throwing version of {@link query}. */ + async tryQuery(source, originFile, settings) { + return this.api.tryQuery(source, originFile ?? this.currentFilePath, settings); + } + /** Execute a Dataview query, returning the results in Markdown. */ + async queryMarkdown(source, originFile, settings) { + return this.api.queryMarkdown(source, originFile ?? this.currentFilePath, settings); + } + /** Error-throwing version of {@link queryMarkdown}. */ + async tryQueryMarkdown(source, originFile, settings) { + return this.api.tryQueryMarkdown(source, originFile ?? this.currentFilePath, settings); + } + /** + * Evaluate a dataview expression (like '2 + 2' or 'link("hello")'), returning the evaluated result. + * This takes an optional second argument which provides definitions for variables, such as: + * + * ``` + * dv.evaluate("x + 6", { x: 2 }) = 8 + * dv.evaluate('link(target)', { target: "Okay" }) = [[Okay]] + * ``` + * + * Note that `this` is implicitly available and refers to the current file. + * + * This method returns a Result type instead of throwing an error; you can check the result of the + * execution via `result.successful` and obtain `result.value` or `result.error` accordingly. If + * you'd rather this method throw on an error, use `dv.tryEvaluate`. + */ + evaluate(expression, context) { + let field = EXPRESSION.field.parse(expression); + if (!field.status) + return Result.failure(`Failed to parse expression "${expression}"`); + return this.evaluationContext.evaluate(field.value, context); + } + /** Error-throwing version of `dv.evaluate`. */ + tryEvaluate(expression, context) { + return this.evaluate(expression, context).orElseThrow(); + } + /** Execute a Dataview query and embed it into the current view. */ + async execute(source) { + this.api.execute(source, this.container, this.component, this.currentFilePath); + } + /** Execute a DataviewJS query and embed it into the current view. */ + async executeJs(code) { + this.api.executeJs(code, this.container, this.component, this.currentFilePath); + } + ///////////// + // Utility // + ///////////// + /** + * Convert an input element or array into a Dataview data-array. If the input is already a data array, + * it is returned unchanged. + */ + array(raw) { + return this.api.array(raw); + } + /** Return true if the given value is a javascript array OR a dataview data array. */ + isArray(raw) { + return this.api.isArray(raw); + } + /** Return true if the given value is a dataview data array; this returns FALSE for plain JS arrays. */ + isDataArray(raw) { + return DataArray.isDataArray(raw); + } + /** Create a dataview file link to the given path. */ + fileLink(path, embed = false, display) { + return Link.file(path, embed, display); + } + /** Create a dataview section link to the given path. */ + sectionLink(path, section, embed = false, display) { + return Link.header(path, section, embed, display); + } + /** Create a dataview block link to the given path. */ + blockLink(path, blockId, embed = false, display) { + return Link.block(path, blockId, embed, display); + } + /** Attempt to extract a date from a string, link or date. */ + date(pathlike) { + return this.api.date(pathlike); + } + /** Attempt to extract a duration from a string or duration. */ + duration(dur) { + return this.api.duration(dur); + } + /** Parse a raw textual value into a complex Dataview type, if possible. */ + parse(value) { + return this.api.parse(value); + } + /** Convert a basic JS type into a Dataview type by parsing dates, links, durations, and so on. */ + literal(value) { + return this.api.literal(value); + } + /** Deep clone the given literal, returning a new literal which is independent of the original. */ + clone(value) { + return Values.deepCopy(value); + } + /** + * Compare two arbitrary JavaScript values using Dataview's default comparison rules. Returns a negative value if + * a < b, 0 if a = b, and a positive value if a > b. + */ + compare(a, b) { + return Values.compareValue(a, b); + } + /** Return true if the two given JavaScript values are equal using Dataview's default comparison rules. */ + equal(a, b) { + return this.compare(a, b) == 0; + } + ///////////////////////// + // Rendering Functions // + ///////////////////////// + /** Render an HTML element, containing arbitrary text. */ + el(el, text, { container = this.container, ...options } = {}) { + let wrapped = Values.wrapValue(text); + if (wrapped === null || wrapped === undefined) { + return container.createEl(el, Object.assign({ text }, options)); + } + let _el = container.createEl(el, options); + renderValue(this.app, wrapped.value, _el, this.currentFilePath, this.component, this.settings, true); + return _el; + } + /** Render an HTML header; the level can be anything from 1 - 6. */ + header(level, text, options) { + let header = { 1: "h1", 2: "h2", 3: "h3", 4: "h4", 5: "h5", 6: "h6" }[level]; + if (!header) + throw Error(`Unrecognized level '${level}' (expected 1, 2, 3, 4, 5, or 6)`); + return this.el(header, text, options); + } + /** Render an HTML paragraph, containing arbitrary text. */ + paragraph(text, options) { + return this.el("p", text, options); + } + /** Render an inline span, containing arbitrary text. */ + span(text, options) { + return this.el("span", text, options); + } + /** + * Render HTML from the output of a template "view" saved as a file in the vault. + * Takes a filename and arbitrary input data. + */ + async view(viewName, input) { + // Look for `${viewName}.js` first, then for `${viewName}/view.js`. + const simpleViewPath = `${viewName}.js`; + const complexViewPath = `${viewName}/view.js`; + let checkForCss = false; + let cssElement = undefined; + let viewFile = this.app.metadataCache.getFirstLinkpathDest(simpleViewPath, this.currentFilePath); + if (!viewFile) { + viewFile = this.app.metadataCache.getFirstLinkpathDest(complexViewPath, this.currentFilePath); + checkForCss = true; + } + if (!viewFile) { + renderErrorPre(this.container, `Dataview: custom view not found for '${simpleViewPath}' or '${complexViewPath}'.`); + return; + } + if (checkForCss) { + // Check for optional CSS. + let cssFile = this.app.metadataCache.getFirstLinkpathDest(`${viewName}/view.css`, this.currentFilePath); + if (cssFile) { + let cssContents = await this.app.vault.read(cssFile); + cssContents += `\n/*# sourceURL=${location.origin}/${cssFile.path} */`; + cssElement = this.container.createEl("style", { text: cssContents, attr: { scope: " " } }); + } + } + let contents = await this.app.vault.read(viewFile); + if (contents.contains("await")) + contents = "(async () => { " + contents + " })()"; + contents += `\n//# sourceURL=${viewFile.path}`; + let func = new Function("dv", "input", contents); + try { + // This may directly render, in which case it will likely return undefined or null. + let result = await Promise.resolve(func(this, input)); + if (result) + await renderValue(this.app, result, this.container, this.currentFilePath, this.component, this.settings, true); + } + catch (ex) { + if (cssElement) + this.container.removeChild(cssElement); + renderErrorPre(this.container, `Dataview: Failed to execute view '${viewFile.path}'.\n\n${ex}`); + } + } + /** Render a dataview list of the given values. */ + list(values) { + return this.api.list(values, this.container, this.component, this.currentFilePath); + } + /** Render a dataview table with the given headers, and the 2D array of values. */ + table(headers, values) { + return this.api.table(headers, values, this.container, this.component, this.currentFilePath); + } + /** Render a dataview task view with the given tasks. */ + taskList(tasks, groupByFile = true) { + return this.api.taskList(tasks, groupByFile, this.container, this.component, this.currentFilePath); + } + //////////////////////// + // Markdown Rendering // + //////////////////////// + /** Render a table directly to markdown, returning the markdown. */ + markdownTable(headers, values, settings) { + return this.api.markdownTable(headers, values, settings); + } + /** Render a list directly to markdown, returning the markdown. */ + markdownList(values, settings) { + return this.api.markdownList(values, settings); + } + /** Render at ask list directly to markdown, returning the markdown. */ + markdownTaskList(values, settings) { + return this.api.markdownTaskList(values, settings); + } +} +/** + * Evaluate a script where 'this' for the script is set to the given context. Allows you to define global variables. + */ +function evalInContext(script, context) { + return function () { + return eval(script); + }.call(context); +} +/** + * Evaluate a script possibly asynchronously, if the script contains `async/await` blocks. + */ +async function asyncEvalInContext(script, context) { + if (script.includes("await")) { + return evalInContext("(async () => { " + script + " })()", context); + } + else { + return Promise.resolve(evalInContext(script, context)); + } +} + +class DataviewJSRenderer extends DataviewRefreshableRenderer { + api; + script; + container; + origin; + static PREAMBLE = "const dataview = this;const dv = this;"; + constructor(api, script, container, origin) { + super(container, api.index, api.app, api.settings); + this.api = api; + this.script = script; + this.container = container; + this.origin = origin; + } + async render() { + this.container.innerHTML = ""; + if (!this.settings.enableDataviewJs) { + this.containerEl.innerHTML = ""; + renderErrorPre(this.container, "Dataview JS queries are disabled. You can enable them in the Dataview settings."); + return; + } + // Assume that the code is javascript, and try to eval it. + try { + await asyncEvalInContext(DataviewJSRenderer.PREAMBLE + this.script, new DataviewInlineApi(this.api, this, this.container, this.origin)); + } + catch (e) { + this.containerEl.innerHTML = ""; + renderErrorPre(this.container, "Evaluation Error: " + e.stack); + } + } +} +/** Inline JS renderer accessible using '=$' by default. */ +class DataviewInlineJSRenderer extends DataviewRefreshableRenderer { + api; + script; + container; + target; + origin; + static PREAMBLE = "const dataview = this;const dv=this;"; + // The box that the error is rendered in, if relevant. + errorbox; + constructor(api, script, container, target, origin) { + super(container, api.index, api.app, api.settings); + this.api = api; + this.script = script; + this.container = container; + this.target = target; + this.origin = origin; + } + async render() { + this.errorbox?.remove(); + if (!this.settings.enableDataviewJs || !this.settings.enableInlineDataviewJs) { + let temp = document.createElement("span"); + temp.innerText = "(disabled; enable in settings)"; + this.target.replaceWith(temp); + this.target = temp; + return; + } + // Assume that the code is javascript, and try to eval it. + try { + let temp = document.createElement("span"); + let result = await asyncEvalInContext(DataviewInlineJSRenderer.PREAMBLE + this.script, new DataviewInlineApi(this.api, this, temp, this.origin)); + this.target.replaceWith(temp); + this.target = temp; + if (result === undefined) + return; + renderValue(this.api.app, result, temp, this.origin, this, this.settings, false); + } + catch (e) { + this.errorbox = this.container.createEl("div"); + renderErrorPre(this.errorbox, "Dataview (for inline JS query '" + this.script + "'): " + e); + } + } +} + +//////////// +// Tables // +//////////// +/** Render a table of literals to Markdown. */ +function markdownTable(headers, values, settings) { + if (values.length > 0 && headers.length != values[0].length) + throw new Error(`The number of headers (${headers.length}) must match the number of columns (${values[0].length})`); + settings = settings ?? DEFAULT_SETTINGS; + const mvalues = []; + const maxLengths = Array.from(headers, v => escapeTable(v).length); + // Pre-construct the table in memory so we can size columns. + for (let row = 0; row < values.length; row++) { + const current = []; + for (let col = 0; col < values[row].length; col++) { + const text = tableLiteral(values[row][col], settings.allowHtml, settings); + current.push(text); + maxLengths[col] = Math.max(maxLengths[col], text.length); + } + mvalues.push(current); + } + // Then construct the actual table... + // Append the header fields first. + let table = `| ${headers.map((v, i) => padright(escapeTable(v), " ", maxLengths[i])).join(" | ")} |\n`; + // Then the separating column. + table += `| ${maxLengths.map(i => padright("", "-", i)).join(" | ")} |\n`; + // Then the data columns. + for (let row = 0; row < values.length; row++) { + table += `| ${mvalues[row].map((v, i) => padright(v, " ", maxLengths[i])).join(" | ")} |\n`; + } + return table; +} +/** Convert a value to a Markdown-friendly string. */ +function tableLiteral(value, allowHtml = true, settings) { + return escapeTable(rawTableLiteral(value, allowHtml, settings)); +} +/** Convert a value to a Markdown-friendly string; does not do escaping. */ +function rawTableLiteral(value, allowHtml = true, settings) { + if (!allowHtml) + return Values.toString(value, settings); + if (Values.isArray(value)) { + return `<ul>${value.map(v => "<li>" + tableLiteral(v, allowHtml, settings) + "</li>").join("")}</ul>`; + } + else if (Values.isObject(value)) { + const inner = Object.entries(value) + .map(([k, v]) => { + return `<li><b>${tableLiteral(k, allowHtml, settings)}</b>: ${tableLiteral(v, allowHtml, settings)}</li>`; + }) + .join(""); + return `<ul>${inner}</ul>`; + } + else { + return Values.toString(value, settings); + } +} +/** Don't need to import a library for this one... */ +function padright(text, padding, length) { + if (text.length >= length) + return text; + return text + padding.repeat(length - text.length); +} +/** Escape bars inside table content to prevent it from messing up table rows. */ +function escapeTable(text) { + return text.split(/(?!\\)\|/i).join("\\|"); +} +/////////// +// Lists // +/////////// +/** Render a list of literal elements to a markdown list. */ +function markdownList(values, settings) { + return markdownListRec(values, settings, 0); +} +/** Internal recursive function which renders markdown lists. */ +function markdownListRec(input, settings, depth = 0) { + if (Values.isArray(input)) { + let result = depth == 0 ? "" : "\n"; + for (let value of input) { + result += " ".repeat(depth) + "- "; + result += markdownListRec(value, settings, depth); + result += "\n"; + } + return result; + } + else if (Values.isObject(input)) { + let result = depth == 0 ? "" : "\n"; + for (let [key, value] of Object.entries(input)) { + result += " ".repeat(depth) + "- "; + result += Values.toString(key) + ": "; + result += markdownListRec(value, settings, depth); + result += "\n"; + } + return result; + } + else if (Values.isWidget(input) && Widgets.isListPair(input)) { + return `${Values.toString(input.key)}: ${markdownListRec(input.value, settings, depth + 1)}`; + } + return Values.toString(input); +} +/////////// +// Tasks // +/////////// +/** Render the result of a task query to markdown. */ +function markdownTaskList(tasks, settings, depth = 0) { + if (Groupings.isGrouping(tasks)) { + let result = ""; + for (let element of tasks) { + result += "#".repeat(depth + 1) + " " + Values.toString(element.key) + "\n\n"; + result += markdownTaskList(element.rows, settings, depth + 1); + } + return result; + } + else { + // Remove task line duplicates if present to match `taskList()` behavior. + const [dedupTasks, _] = nestItems(tasks); + let result = ""; + for (let element of dedupTasks) { + result += " ".repeat(depth) + "- "; + if (element.task) { + result += `[${element.status}] ${(element.visual ?? element.text).split("\n").join(" ")}\n`; + } + else { + result += `${(element.visual ?? element.text).split("\n").join(" ")}\n`; + } + result += markdownTaskList(element.children, settings, depth + 1); + } + return result; + } +} + +/** The general, externally accessible plugin API (available at `app.plugins.plugins.dataview.api` or as global `DataviewAPI`). */ +/** Asynchronous API calls related to file / system IO. */ +class DataviewIOApi { + api; + constructor(api) { + this.api = api; + } + /** Load the contents of a CSV asynchronously, returning a data array of rows (or undefined if it does not exist). */ + async csv(path, originFile) { + if (!Values.isLink(path) && !Values.isString(path)) { + throw Error(`dv.io.csv only handles string or link paths; was provided type '${typeof path}'.`); + } + let data = await this.api.index.csv.get(this.normalize(path, originFile)); + if (data.successful) + return DataArray.from(data.value, this.api.settings); + else + throw Error(`Could not find CSV for path '${path}' (relative to origin '${originFile ?? "/"}')`); + } + /** Asynchronously load the contents of any link or path in an Obsidian vault. */ + async load(path, originFile) { + if (!Values.isLink(path) && !Values.isString(path)) { + throw Error(`dv.io.load only handles string or link paths; was provided type '${typeof path}'.`); + } + let existingFile = this.api.index.vault.getAbstractFileByPath(this.normalize(path, originFile)); + if (!existingFile || !(existingFile instanceof obsidian.TFile)) + return undefined; + return this.api.index.vault.cachedRead(existingFile); + } + /** Normalize a link or path relative to an optional origin file. Returns a textual fully-qualified-path. */ + normalize(path, originFile) { + let realPath; + if (Values.isLink(path)) + realPath = path.path; + else + realPath = path; + return this.api.index.prefix.resolveRelative(realPath, originFile); + } +} +/** Global API for accessing the Dataview API, executing dataview queries, and */ +class DataviewApi { + app; + index; + settings; + verNum; + /** Evaluation context which expressions can be evaluated in. */ + evaluationContext; + /** IO API which supports asynchronous loading of data directly. */ + io; + /** Dataview functions which can be called from DataviewJS. */ + func; + /** Value utility functions for comparisons and type-checking. */ + value = Values; + /** Widget utility functions for creating built-in widgets. */ + widget = Widgets; + /** Re-exporting of luxon for people who can't easily require it. Sorry! */ + luxon = Luxon; + constructor(app, index, settings, verNum) { + this.app = app; + this.index = index; + this.settings = settings; + this.verNum = verNum; + this.evaluationContext = new Context(defaultLinkHandler(index, ""), settings); + this.func = Functions.bindAll(DEFAULT_FUNCTIONS, this.evaluationContext); + this.io = new DataviewIOApi(this); + } + /** Utilities to check the current Dataview version and compare it to SemVer version ranges. */ + version = (() => { + const self = this; + return { + get current() { + return self.verNum; + }, + compare: (op, ver) => compare(this.verNum, ver, op), + satisfies: (range) => satisfies(this.verNum, range), + }; + })(); + ///////////////////////////// + // Index + Data Collection // + ///////////////////////////// + /** Return an array of paths (as strings) corresponding to pages which match the query. */ + pagePaths(query, originFile) { + let source; + try { + if (!query || query.trim() === "") + source = Sources.folder(""); + else + source = EXPRESSION.source.tryParse(query); + } + catch (ex) { + throw new Error(`Failed to parse query in 'pagePaths': ${ex}`); + } + return matchingSourcePaths(source, this.index, originFile) + .map(s => DataArray.from(s, this.settings)) + .orElseThrow(); + } + /** Map a page path to the actual data contained within that page. */ + page(path, originFile) { + if (!(typeof path === "string") && !Values.isLink(path)) { + throw Error("dv.page only handles string and link paths; was provided type '" + typeof path + "'"); + } + let rawPath = path instanceof Link ? path.path : path; + let normPath = this.app.metadataCache.getFirstLinkpathDest(rawPath, originFile ?? ""); + if (!normPath) + return undefined; + let pageObject = this.index.pages.get(normPath.path); + if (!pageObject) + return undefined; + return this._addDataArrays(pageObject.serialize(this.index)); + } + /** Return an array of page objects corresponding to pages which match the source query. */ + pages(query, originFile) { + return this.pagePaths(query, originFile).flatMap(p => { + let res = this.page(p, originFile); + return res ? [res] : []; + }); + } + /** Remaps important metadata to add data arrays. */ + _addDataArrays(pageObject) { + // Remap the "file" metadata entries to be data arrays. + for (let [key, value] of Object.entries(pageObject.file)) { + if (Array.isArray(value)) + pageObject.file[key] = DataArray.wrap(value, this.settings); + } + return pageObject; + } + ///////////// + // Utility // + ///////////// + /** + * Convert an input element or array into a Dataview data-array. If the input is already a data array, + * it is returned unchanged. + */ + array(raw) { + if (DataArray.isDataArray(raw)) + return raw; + if (Array.isArray(raw)) + return DataArray.wrap(raw, this.settings); + return DataArray.wrap([raw], this.settings); + } + /** Return true if the given value is a javascript array OR a dataview data array. */ + isArray(raw) { + return DataArray.isDataArray(raw) || Array.isArray(raw); + } + /** Return true if the given value is a dataview data array; this returns FALSE for plain JS arrays. */ + isDataArray(raw) { + return DataArray.isDataArray(raw); + } + /** Create a dataview file link to the given path. */ + fileLink(path, embed = false, display) { + return Link.file(path, embed, display); + } + /** Create a dataview section link to the given path. */ + sectionLink(path, section, embed = false, display) { + return Link.header(path, section, embed, display); + } + /** Create a dataview block link to the given path. */ + blockLink(path, blockId, embed = false, display) { + return Link.block(path, blockId, embed, display); + } + /** Attempt to extract a date from a string, link or date. */ + date(pathlike) { + return this.func.date(pathlike); + } + /** Attempt to extract a duration from a string or duration. */ + duration(str) { + return this.func.dur(str); + } + /** Parse a raw textual value into a complex Dataview type, if possible. */ + parse(value) { + let raw = EXPRESSION.inlineField.parse(value); + if (raw.status) + return raw.value; + else + return value; + } + /** Convert a basic JS type into a Dataview type by parsing dates, links, durations, and so on. */ + literal(value) { + return parseFrontmatter(value); + } + /** Deep clone the given literal, returning a new literal which is independent of the original. */ + clone(value) { + return Values.deepCopy(value); + } + /** + * Compare two arbitrary JavaScript values using Dataview's default comparison rules. Returns a negative value if + * a < b, 0 if a = b, and a positive value if a > b. + */ + compare(a, b) { + return Values.compareValue(a, b, this.evaluationContext.linkHandler.normalize); + } + /** Return true if the two given JavaScript values are equal using Dataview's default comparison rules. */ + equal(a, b) { + return this.compare(a, b) == 0; + } + /////////////////////////////// + // Dataview Query Evaluation // + /////////////////////////////// + /** + * Execute an arbitrary Dataview query, returning a query result which: + * + * 1. Indicates the type of query, + * 2. Includes the raw AST of the parsed query. + * 3. Includes the output in the form relevant to that query type. + * + * List queries will return a list of objects ({ id, value }); table queries return a header array + * and a 2D array of values; and task arrays return a Grouping<Task> type which allows for recursive + * task nesting. + */ + async query(source, originFile, settings) { + const query = typeof source === "string" ? parseQuery(source) : Result.success(source); + if (!query.successful) + return query.cast(); + const header = query.value.header; + switch (header.type) { + case "calendar": + const cres = await executeCalendar(query.value, this.index, originFile ?? "", this.settings); + if (!cres.successful) + return cres.cast(); + return Result.success({ type: "calendar", values: cres.value.data }); + case "task": + const tasks = await executeTask(query.value, originFile ?? "", this.index, this.settings); + if (!tasks.successful) + return tasks.cast(); + return Result.success({ type: "task", values: tasks.value.tasks }); + case "list": + if (settings?.forceId !== undefined) + header.showId = settings.forceId; + const lres = await executeList(query.value, this.index, originFile ?? "", this.settings); + if (!lres.successful) + return lres.cast(); + // TODO: WITHOUT ID probably shouldn't exist, or should be moved to the engine itself. + // For now, until I fix it up in an upcoming refactor, we re-implement the behavior here. + return Result.success({ + type: "list", + values: lres.value.data, + primaryMeaning: lres.value.primaryMeaning, + }); + case "table": + if (settings?.forceId !== undefined) + header.showId = settings.forceId; + const tres = await executeTable(query.value, this.index, originFile ?? "", this.settings); + if (!tres.successful) + return tres.cast(); + return Result.success({ + type: "table", + values: tres.value.data, + headers: tres.value.names, + idMeaning: tres.value.idMeaning, + }); + } + } + /** Error-throwing version of {@link query}. */ + async tryQuery(source, originFile, settings) { + return (await this.query(source, originFile, settings)).orElseThrow(); + } + /** Execute an arbitrary dataview query, returning the results in well-formatted markdown. */ + async queryMarkdown(source, originFile, settings) { + const result = await this.query(source, originFile, settings); + if (!result.successful) + return result.cast(); + switch (result.value.type) { + case "list": + return Result.success(this.markdownList(result.value.values, settings)); + case "table": + return Result.success(this.markdownTable(result.value.headers, result.value.values, settings)); + case "task": + return Result.success(this.markdownTaskList(result.value.values, settings)); + case "calendar": + return Result.failure("Cannot render calendar queries to markdown."); + } + } + /** Error-throwing version of {@link queryMarkdown}. */ + async tryQueryMarkdown(source, originFile, settings) { + return (await this.queryMarkdown(source, originFile, settings)).orElseThrow(); + } + /** + * Evaluate a dataview expression (like '2 + 2' or 'link("hello")'), returning the evaluated result. + * This takes an optional second argument which provides definitions for variables, such as: + * + * ``` + * dv.evaluate("x + 6", { x: 2 }) = 8 + * dv.evaluate('link(target)', { target: "Okay" }) = [[Okay]] + * ``` + * + * This method returns a Result type instead of throwing an error; you can check the result of the + * execution via `result.successful` and obtain `result.value` or `result.error` accordingly. If + * you'd rather this method throw on an error, use `dv.tryEvaluate`. + */ + evaluate(expression, context, originFile) { + let field = EXPRESSION.field.parse(expression); + if (!field.status) + return Result.failure(`Failed to parse expression "${expression}"`); + let evaluationContext = originFile + ? new Context(defaultLinkHandler(this.index, originFile), this.settings) + : this.evaluationContext; + return evaluationContext.evaluate(field.value, context); + } + /** Error-throwing version of `dv.evaluate`. */ + tryEvaluate(expression, context, originFile) { + return this.evaluate(expression, context, originFile).orElseThrow(); + } + /** Evaluate an expression in the context of the given file. */ + evaluateInline(expression, origin) { + let field = EXPRESSION.field.parse(expression); + if (!field.status) + return Result.failure(`Failed to parse expression "${expression}"`); + return executeInline(field.value, origin, this.index, this.settings); + } + /////////////// + // Rendering // + /////////////// + /** + * Execute the given query, rendering results into the given container using the components lifecycle. + * Your component should be a *real* component which calls onload() on it's child components at some point, + * or a MarkdownPostProcessorContext! + * + * Note that views made in this way are live updating and will automatically clean themselves up when + * the component is unloaded or the container is removed. + */ + async execute(source, container, component, filePath) { + if (isDataviewDisabled(filePath)) { + renderCodeBlock(container, source); + return; + } + let maybeQuery = tryOrPropagate(() => parseQuery(source)); + // In case of parse error, just render the error. + if (!maybeQuery.successful) { + renderErrorPre(container, "Dataview: " + maybeQuery.error); + return; + } + let query = maybeQuery.value; + let init = { app: this.app, settings: this.settings, index: this.index, container }; + let childComponent; + switch (query.header.type) { + case "task": + childComponent = createTaskView(init, query, filePath); + component.addChild(childComponent); + break; + case "list": + childComponent = createListView(init, query, filePath); + component.addChild(childComponent); + break; + case "table": + childComponent = createTableView(init, query, filePath); + component.addChild(childComponent); + break; + case "calendar": + childComponent = new DataviewCalendarRenderer(query, container, this.index, filePath, this.settings, this.app); + component.addChild(childComponent); + break; + } + childComponent.load(); + } + /** + * Execute the given DataviewJS query, rendering results into the given container using the components lifecycle. + * See {@link execute} for general rendering semantics. + */ + async executeJs(code, container, component, filePath) { + if (isDataviewDisabled(filePath)) { + renderCodeBlock(container, code, "javascript"); + return; + } + const renderer = new DataviewJSRenderer(this, code, container, filePath); + renderer.load(); + component.addChild(renderer); + } + /** Render a dataview list of the given values. */ + async list(values, container, component, filePath) { + if (!values) + return; + if (values !== undefined && values !== null && !Array.isArray(values) && !DataArray.isDataArray(values)) + values = Array.from(values); + // Append a child div, since React will keep re-rendering otherwise. + let subcontainer = container.createEl("div"); + component.addChild(createFixedListView({ app: this.app, settings: this.settings, index: this.index, container: subcontainer }, values, filePath)); + } + /** Render a dataview table with the given headers, and the 2D array of values. */ + async table(headers, values, container, component, filePath) { + if (!headers) + headers = []; + if (!values) + values = []; + if (!Array.isArray(headers) && !DataArray.isDataArray(headers)) + headers = Array.from(headers); + // Append a child div, since React will keep re-rendering otherwise. + let subcontainer = container.createEl("div"); + component.addChild(createFixedTableView({ app: this.app, settings: this.settings, index: this.index, container: subcontainer }, headers, values, filePath)); + } + /** Render a dataview task view with the given tasks. */ + async taskList(tasks, groupByFile = true, container, component, filePath = "") { + let groupedTasks = !Groupings.isGrouping(tasks) && groupByFile ? this.array(tasks).groupBy(t => Link.file(t.path)) : tasks; + // Append a child div, since React will override several task lists otherwise. + let taskContainer = container.createEl("div"); + component.addChild(createFixedTaskView({ app: this.app, settings: this.settings, index: this.index, container: taskContainer }, groupedTasks, filePath)); + } + /** Render an arbitrary value into a container. */ + async renderValue(value, container, component, filePath, inline = false) { + return renderValue(this.app, value, container, filePath, component, this.settings, inline); + } + ///////////////// + // Data Export // + ///////////////// + /** Render data to a markdown table. */ + markdownTable(headers, values, settings) { + if (!headers) + headers = []; + if (!values) + values = []; + const combined = Object.assign({}, this.settings, settings); + return markdownTable(headers, values, combined); + } + /** Render data to a markdown list. */ + markdownList(values, settings) { + if (!values) + values = []; + const combined = Object.assign({}, this.settings, settings); + return markdownList(values, combined); + } + /** Render tasks or list items to a markdown task list. */ + markdownTaskList(values, settings) { + if (!values) + values = []; + const sparse = nestGroups(values); + const combined = Object.assign({}, this.settings, settings); + return markdownTaskList(sparse, combined); + } +} +/** Determines if source-path has a `?no-dataview` annotation that disables dataview. */ +function isDataviewDisabled(sourcePath) { + if (!sourcePath) + return false; + let questionLocation = sourcePath.lastIndexOf("?"); + if (questionLocation == -1) + return false; + return sourcePath.substring(questionLocation).contains("no-dataview"); +} + +/** Refreshable renderer which renders inline instead of in a div. */ +class DataviewInlineRenderer extends DataviewRefreshableRenderer { + field; + fieldText; + container; + target; + index; + origin; + settings; + app; + // The box that the error is rendered in, if relevant. + errorbox; + constructor(field, fieldText, container, target, index, origin, settings, app) { + super(container, index, app, settings); + this.field = field; + this.fieldText = fieldText; + this.container = container; + this.target = target; + this.index = index; + this.origin = origin; + this.settings = settings; + this.app = app; + } + async render() { + this.errorbox?.remove(); + let result = tryOrPropagate(() => executeInline(this.field, this.origin, this.index, this.settings)); + if (!result.successful) { + this.errorbox = this.container.createEl("div"); + renderErrorPre(this.errorbox, "Dataview (for inline query '" + this.fieldText + "'): " + result.error); + } + else { + let temp = document.createElement("span"); + temp.addClasses(["dataview", "dataview-inline-query"]); + await renderValue(this.app, result.value, temp, this.origin, this, this.settings, false); + this.target.replaceWith(temp); + } + } +} + +/** Replaces raw textual inline fields in text containers with pretty HTML equivalents. */ +async function replaceInlineFields(ctx, init) { + const inlineFields = extractInlineFields(init.container.innerHTML); + if (inlineFields.length == 0) + return; + const component = new obsidian.MarkdownRenderChild(init.container); + ctx.addChild(component); + // Iterate through the raw HTML and replace inline field matches with corresponding rendered values. + let result = init.container.innerHTML; + for (let x = inlineFields.length - 1; x >= 0; x--) { + let field = inlineFields[x]; + let renderContainer = document.createElement("span"); + renderContainer.addClasses(["dataview", "inline-field"]); + // Block inline fields render the key, parenthesis ones do not. + if (field.wrapping == "[") { + const key = renderContainer.createSpan({ + cls: ["dataview", "inline-field-key"], + attr: { + "data-dv-key": field.key, + "data-dv-norm-key": canonicalizeVarName(field.key), + }, + }); + // Explicitly set the inner HTML to respect any key formatting that we should carry over. + key.innerHTML = field.key; + renderContainer.createSpan({ + cls: ["dataview", "inline-field-value"], + attr: { id: "dataview-inline-field-" + x }, + }); + } + else { + renderContainer.createSpan({ + cls: ["dataview", "inline-field-standalone-value"], + attr: { + id: "dataview-inline-field-" + x, + "data-dv-key": field.key, + "data-dv-norm-key": canonicalizeVarName(field.key), + }, + }); + } + result = result.slice(0, field.start) + renderContainer.outerHTML + result.slice(field.end); + } + // Use a <template> block to render this HTML properly to nodes. + const template = document.createElement("template"); + template.innerHTML = result; + // Replace the container children with the new rendered children. + // TODO: Replace this with a dom-to-dom diff to reduce the actual amount of updates. + init.container.replaceChildren(...template.content.childNodes); + let inlineFieldsFromText; + let hasRetrievedText = false; + for (let index = 0; index < inlineFields.length; index++) { + const box = init.container.querySelector("#dataview-inline-field-" + index); + if (!box) + continue; + const context = Object.assign({}, init, { container: box, component: component }); + const parseInlineValueWrapper = (fieldVal) => { + if (fieldVal.startsWith('<span class="math"')) { + // allows math symbols to be rendered in reading view + if (!hasRetrievedText) { + hasRetrievedText = true; + let text = ctx.getSectionInfo(init.container)?.text; + if (text) { + inlineFieldsFromText = extractInlineFields(text); + } + } + if (!inlineFieldsFromText) + return parseInlineValue(fieldVal); + return parseInlineValue(inlineFieldsFromText[index].value); + } + else { + return parseInlineValue(fieldVal); + } + }; + D$1(y$1(DataviewContext.Provider, { value: context }, + y$1(Lit, { value: parseInlineValueWrapper(inlineFields[index].value), inline: true, sourcePath: ctx.sourcePath })), box); + } +} + +/* + * inspired and adapted from https://github.com/artisticat1/obsidian-latex-suite/blob/main/src/conceal.ts + * + * The original work is MIT-licensed. + * + * MIT License + * + * Copyright (c) 2022 artisticat1 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * */ +function selectionAndRangeOverlap(selection, rangeFrom, rangeTo) { + for (const range of selection.ranges) { + if (range.from <= rangeTo && range.to >= rangeFrom) { + return true; + } + } + return false; +} +class InlineWidget extends view.WidgetType { + cssClasses; + rawQuery; + el; + view; + constructor(cssClasses, rawQuery, el, view) { + super(); + this.cssClasses = cssClasses; + this.rawQuery = rawQuery; + this.el = el; + this.view = view; + } + // Widgets only get updated when the raw query changes/the element gets focus and loses it + // to prevent redraws when the editor updates. + eq(other) { + if (other.rawQuery === this.rawQuery) { + // change CSS classes without redrawing the element + for (let value of other.cssClasses) { + if (!this.cssClasses.includes(value)) { + this.el.removeClass(value); + } + else { + this.el.addClass(value); + } + } + return true; + } + return false; + } + // Add CSS classes and return HTML element. + // In "complex" cases it will get filled with the correct text/child elements later. + toDOM(view) { + this.el.addClasses(this.cssClasses); + return this.el; + } + /* Make queries only editable when shift is pressed (or navigated inside with the keyboard + * or the mouse is placed at the end, but that is always possible regardless of this method). + * Mostly useful for links, and makes results selectable. + * If the widgets should always be expandable, make this always return false. + */ + ignoreEvent(event) { + // instanceof check does not work in pop-out windows, so check it like this + if (event.type === "mousedown") { + const currentPos = this.view.posAtCoords({ x: event.x, y: event.y }); + if (event.shiftKey) { + // Set the cursor after the element so that it doesn't select starting from the last cursor position. + if (currentPos) { + const { editor } = this.view.state.field(obsidian.editorInfoField); + if (editor) { + editor.setCursor(editor.offsetToPos(currentPos)); + } + } + return false; + } + } + return true; + } +} +function getCssClasses(props) { + const classes = []; + if (props.has("strong")) { + classes.push("cm-strong"); + } + if (props.has("em")) { + classes.push("cm-em"); + } + if (props.has("highlight")) { + classes.push("cm-highlight"); + } + if (props.has("strikethrough")) { + classes.push("cm-strikethrough"); + } + if (props.has("comment")) { + classes.push("cm-comment"); + } + return classes; +} +function inlinePlugin(app, index, settings, api) { + return view.ViewPlugin.fromClass(class { + decorations; + component; + constructor(view$1) { + this.component = new obsidian.Component(); + this.component.load(); + this.decorations = this.inlineRender(view$1) ?? view.Decoration.none; + } + update(update) { + // only activate in LP and not source mode + if (!update.state.field(obsidian.editorLivePreviewField)) { + this.decorations = view.Decoration.none; + return; + } + if (update.docChanged) { + this.decorations = this.decorations.map(update.changes); + this.updateTree(update.view); + } + else if (update.selectionSet) { + this.updateTree(update.view); + } + else if (update.viewportChanged /*|| update.selectionSet*/) { + this.decorations = this.inlineRender(update.view) ?? view.Decoration.none; + } + } + updateTree(view) { + for (const { from, to } of view.visibleRanges) { + language.syntaxTree(view.state).iterate({ + from, + to, + enter: ({ node }) => { + const { render, isQuery } = this.renderNode(view, node); + if (!render && isQuery) { + this.removeDeco(node); + return; + } + else if (!render) { + return; + } + else if (render) { + this.addDeco(node, view); + } + }, + }); + } + } + removeDeco(node) { + this.decorations.between(node.from - 1, node.to + 1, (from, to, value) => { + this.decorations = this.decorations.update({ + filterFrom: from, + filterTo: to, + filter: (from, to, value) => false, + }); + }); + } + addDeco(node, view) { + const from = node.from - 1; + const to = node.to + 1; + let exists = false; + this.decorations.between(from, to, (from, to, value) => { + exists = true; + }); + if (!exists) { + /** + * In a note embedded in a Canvas, app.workspace.getActiveFile() returns + * the canvas file, not the note file. On the other hand, + * view.state.field(editorInfoField).file returns the note file itself, + * which is more suitable here. + */ + const currentFile = view.state.field(obsidian.editorInfoField).file; + if (!currentFile) + return; + const newDeco = this.renderWidget(node, view, currentFile)?.value; + if (newDeco) { + this.decorations = this.decorations.update({ + add: [{ from: from, to: to, value: newDeco }], + }); + } + } + } + // checks whether a node should get rendered/unrendered + renderNode(view, node) { + const type = node.type; + // current node is inline code + const tokenProps = type.prop(language.tokenClassNodeProp); + const props = new Set(tokenProps?.split(" ")); + if (props.has("inline-code") && !props.has("formatting")) { + // contains the position of inline code + const start = node.from; + const end = node.to; + // don't continue if current cursor position and inline code node (including formatting + // symbols) overlap + const selection = view.state.selection; + if (selectionAndRangeOverlap(selection, start - 1, end + 1)) { + if (this.isInlineQuery(view, start, end)) { + return { render: false, isQuery: true }; + } + else { + return { render: false, isQuery: false }; + } + } + else if (this.isInlineQuery(view, start, end)) { + return { render: true, isQuery: true }; + } + } + return { render: false, isQuery: false }; + } + isInlineQuery(view, start, end) { + const text = view.state.doc.sliceString(start, end); + const isInlineQuery = text.startsWith(settings.inlineQueryPrefix) || text.startsWith(settings.inlineJsQueryPrefix); + return isInlineQuery; + } + inlineRender(view$1) { + // still doesn't work as expected for tables and callouts + if (!index.initialized) + return; + const currentFile = view$1.state.field(obsidian.editorInfoField).file; + if (!currentFile) + return; + const widgets = []; + /* before: + * em for italics + * highlight for highlight + * after: + * strong for bold + * strikethrough for strikethrough + */ + for (const { from, to } of view$1.visibleRanges) { + language.syntaxTree(view$1.state).iterate({ + from, + to, + enter: ({ node }) => { + if (!this.renderNode(view$1, node).render) + return; + const widget = this.renderWidget(node, view$1, currentFile); + if (widget) { + widgets.push(widget); + } + }, + }); + } + return view.Decoration.set(widgets, true); + } + renderWidget(node, view$1, currentFile) { + const type = node.type; + // contains the position of inline code + const start = node.from; + const end = node.to; + // safety net against unclosed inline code + if (view$1.state.doc.sliceString(end, end + 1) === "\n") { + return; + } + const text = view$1.state.doc.sliceString(start, end); + let code = ""; + let result = ""; + const PREAMBLE = "const dataview=this;const dv=this;"; + const el = createSpan({ + cls: ["dataview", "dataview-inline"], + }); + /* If the query result is predefined text (e.g. in the case of errors), set innerText to it. + * Otherwise, pass on an empty element and fill it in later. + * This is necessary because {@link InlineWidget.toDOM} is synchronous but some rendering + * asynchronous. + */ + if (text.startsWith(settings.inlineQueryPrefix)) { + if (settings.enableInlineDataview) { + code = text.substring(settings.inlineQueryPrefix.length).trim(); + const field = tryOrPropagate(() => parseField(code)); + if (!field.successful) { + result = `Dataview (inline field '${code}'): ${field.error}`; + el.innerText = result; + } + else { + const fieldValue = field.value; + const intermediateResult = tryOrPropagate(() => executeInline(fieldValue, currentFile.path, index, settings)); + if (!intermediateResult.successful) { + result = `Dataview (for inline query '${fieldValue}'): ${intermediateResult.error}`; + el.innerText = result; + } + else { + const { value } = intermediateResult; + result = value; + renderValue(app, result, el, currentFile.path, this.component, settings); + } + } + } + else { + result = "(disabled; enable in settings)"; + el.innerText = result; + } + } + else if (text.startsWith(settings.inlineJsQueryPrefix)) { + if (settings.enableInlineDataviewJs) { + code = text.substring(settings.inlineJsQueryPrefix.length).trim(); + try { + // for setting the correct context for dv/dataview + const myEl = createDiv(); + const dvInlineApi = new DataviewInlineApi(api, this.component, myEl, currentFile.path); + if (code.includes("await")) { + evalInContext("(async () => { " + PREAMBLE + code + " })()").then((result) => { + renderValue(app, result, el, currentFile.path, this.component, settings); + }); + } + else { + result = evalInContext(PREAMBLE + code); + renderValue(app, result, el, currentFile.path, this.component, settings); + } + function evalInContext(script) { + return function () { + return eval(script); + }.call(dvInlineApi); + } + } + catch (e) { + result = `Dataview (for inline JS query '${code}'): ${e}`; + el.innerText = result; + } + } + else { + result = "(disabled; enable in settings)"; + el.innerText = result; + } + } + else { + return; + } + const tokenProps = type.prop(language.tokenClassNodeProp); + const props = new Set(tokenProps?.split(" ")); + const classes = getCssClasses(props); + return view.Decoration.replace({ + widget: new InlineWidget(classes, code, el, view$1), + inclusive: false, + block: false, + }).range(start - 1, end + 1); + } + destroy() { + this.component.unload(); + } + }, { decorations: v => v.decorations }); +} + +class InlineFieldValue extends state.RangeValue { + field; + constructor(field) { + super(); + this.field = field; + } + eq(other) { + return this.field.key == other.field.key && this.field.value == other.field.value; + } +} +function buildInlineFields(state$1) { + const builder = new state.RangeSetBuilder(); + const tree = language.syntaxTree(state$1); + for (let lineNumber = 1; lineNumber <= state$1.doc.lines; lineNumber++) { + const line = state$1.doc.line(lineNumber); + let isInsideCodeBlock = false; + tree.iterate({ + from: line.from, + to: line.to, + enter: node => { + // ignore code blocks + if (node.name.startsWith("HyperMD-codeblock")) { + isInsideCodeBlock = true; + } + return node.name == "Document"; + }, + }); + if (!isInsideCodeBlock) { + const inlineFields = extractInlineFields(line.text); + for (const field of inlineFields) { + builder.add(line.from + field.start, line.from + field.end, new InlineFieldValue(field)); + } + } + } + return builder.finish(); +} +/** A state field that stores the inline fields and their positions as a range set. */ +const inlineFieldsField = state.StateField.define({ + create: buildInlineFields, + update(oldFields, tr) { + return buildInlineFields(tr.state); + }, +}); +/** Create a view plugin that renders inline fields in live preview just as in the reading view. */ +const replaceInlineFieldsInLivePreview = (app, settings) => view.ViewPlugin.fromClass(class { + decorations; + component; + constructor(view) { + this.component = new obsidian.Component(); + this.component.load(); + this.decorations = this.buildDecorations(view); + } + destroy() { + this.component.unload(); + } + buildDecorations(view$1) { + // Disable in the source mode + if (!view$1.state.field(obsidian.editorLivePreviewField)) + return view.Decoration.none; + const file = view$1.state.field(obsidian.editorInfoField).file; + if (!file) + return view.Decoration.none; + const info = view$1.state.field(inlineFieldsField); + const builder = new state.RangeSetBuilder(); + const selection = view$1.state.selection; + for (const { from, to } of view$1.visibleRanges) { + info.between(from, to, (start, end, { field }) => { + // If the inline field is not overlapping with the cursor, we replace it with a widget. + if (!selectionAndRangeOverlap(selection, start, end)) { + builder.add(start, end, view.Decoration.replace({ + widget: new InlineFieldWidget(app, field, file.path, this.component, settings, view$1), + })); + } + }); + } + return builder.finish(); + } + update(update) { + // only activate in LP and not source mode + if (!update.state.field(obsidian.editorLivePreviewField)) { + this.decorations = view.Decoration.none; + return; + } + const layoutChanged = update.transactions.some(transaction => transaction.effects.some(effect => effect.is(workspaceLayoutChangeEffect))); + if (update.docChanged) { + this.decorations = this.decorations.map(update.changes); + this.updateDecorations(update.view); + } + else if (update.selectionSet || update.viewportChanged || layoutChanged) { + this.decorations = this.buildDecorations(update.view); + } + } + updateDecorations(view$1) { + const file = view$1.state.field(obsidian.editorInfoField).file; + if (!file) { + this.decorations = view.Decoration.none; + return; + } + const inlineFields = view$1.state.field(inlineFieldsField); + const selection = view$1.state.selection; + for (const { from, to } of view$1.visibleRanges) { + inlineFields.between(from, to, (start, end, { field }) => { + const overlap = selectionAndRangeOverlap(selection, start, end); + if (overlap) { + this.removeDeco(start, end); + return; + } + else { + this.addDeco(start, end, field, file, view$1); + } + }); + } + } + removeDeco(start, end) { + this.decorations.between(start, end, (from, to) => { + this.decorations = this.decorations.update({ + filterFrom: from, + filterTo: to, + filter: () => false, + }); + }); + } + addDeco(start, end, field, file, view$1) { + let exists = false; + this.decorations.between(start, end, () => { + exists = true; + }); + if (!exists) { + this.decorations = this.decorations.update({ + add: [ + { + from: start, + to: end, + value: view.Decoration.replace({ + widget: new InlineFieldWidget(app, field, file.path, this.component, settings, view$1), + }), + }, + ], + }); + } + } +}, { + decorations: instance => instance.decorations, +}); +/** A widget which inline fields are replaced with. */ +class InlineFieldWidget extends view.WidgetType { + app; + field; + sourcePath; + component; + settings; + view; + constructor(app, field, sourcePath, component, settings, view) { + super(); + this.app = app; + this.field = field; + this.sourcePath = sourcePath; + this.component = component; + this.settings = settings; + this.view = view; + } + eq(other) { + return this.field.key == other.field.key && this.field.value == other.field.value; + } + toDOM() { + // A large part of this method was taken from replaceInlineFields() in src/ui/views/inline-field.tsx. + // It will be better to extract the common part as a function... + const renderContainer = createSpan({ + cls: ["dataview", "inline-field"], + }); + // Block inline fields render the key, parenthesis ones do not. + if (this.field.wrapping == "[") { + const key = renderContainer.createSpan({ + cls: ["dataview", "inline-field-key"], + attr: { + "data-dv-key": this.field.key, + "data-dv-norm-key": canonicalizeVarName(this.field.key), + }, + }); + renderCompactMarkdown(this.app, this.field.key, key, this.sourcePath, this.component, true); + const value = renderContainer.createSpan({ + cls: ["dataview", "inline-field-value"], + attr: { + "data-dv-key": this.field.key, + "data-dv-norm-key": canonicalizeVarName(this.field.key), + }, + }); + renderValue(this.app, parseInlineValue(this.field.value), value, this.sourcePath, this.component, this.settings, false, undefined, undefined, true); + this.addKeyClickHandler(key, renderContainer); + this.addValueClickHandler(value, renderContainer); + } + else { + const value = renderContainer.createSpan({ + cls: ["dataview", "inline-field-standalone-value"], + attr: { + "data-dv-key": this.field.key, + "data-dv-norm-key": canonicalizeVarName(this.field.key), + }, + }); + renderValue(this.app, parseInlineValue(this.field.value), value, this.sourcePath, this.component, this.settings, false, undefined, undefined, true); + this.addValueClickHandler(value, renderContainer); + } + return renderContainer; + } + // https://github.com/blacksmithgu/obsidian-dataview/issues/2101 + // When the user clicks on a rendered inline field, move the cursor to the clicked position. + addKeyClickHandler(key, renderContainer) { + key.addEventListener("click", event => { + if (event instanceof MouseEvent) { + const rect = key.getBoundingClientRect(); + const relativePos = (event.x - rect.x) / rect.width; + const startPos = this.view.posAtCoords(renderContainer.getBoundingClientRect(), false); + const clickedPos = Math.round(startPos + (this.field.startValue - 2 - this.field.start) * relativePos); // 2 is the length of "::" + this.view.dispatch({ selection: { anchor: clickedPos } }); + } + }); + } + addValueClickHandler(value, renderContainer) { + value.addEventListener("click", event => { + if (event instanceof MouseEvent) { + const rect = value.getBoundingClientRect(); + const relativePos = (event.x - rect.x) / rect.width; + const startPos = this.view.posAtCoords(renderContainer.getBoundingClientRect(), false); + const clickedPos = Math.round(startPos + + (this.field.startValue - this.field.start) + + (this.field.end - this.field.startValue) * relativePos); + this.view.dispatch({ selection: { anchor: clickedPos } }); + } + }); + } +} +/** + * A state effect that represents the workspace's layout change. + * Mainly intended to detect when the user switches between live preview and source mode. + */ +const workspaceLayoutChangeEffect = state.StateEffect.define(); + +class DataviewPlugin extends obsidian.Plugin { + /** Plugin-wide default settings. */ + settings; + /** The index that stores all dataview data. */ + index; + /** External-facing plugin API. */ + api; + /** CodeMirror 6 extensions that dataview installs. Tracked via array to allow for dynamic updates. */ + cmExtension; + async onload() { + // Settings initialization; write defaults first time around. + this.settings = Object.assign(DEFAULT_SETTINGS, (await this.loadData()) ?? {}); + this.addSettingTab(new GeneralSettingsTab(this.app, this)); + this.index = this.addChild(FullIndex.create(this.app, this.manifest.version, () => { + if (this.settings.refreshEnabled) + this.debouncedRefresh(); + })); + // Set up automatic (intelligent) view refreshing that debounces. + this.updateRefreshSettings(); + // From this point onwards the dataview API is fully functional (even if the index needs to do some background indexing). + this.api = new DataviewApi(this.app, this.index, this.settings, this.manifest.version); + // Register API to global window object. + (window["DataviewAPI"] = this.api) && this.register(() => delete window["DataviewAPI"]); + // Dataview query language code blocks. + this.registerPriorityCodeblockPostProcessor("dataview", -100, async (source, el, ctx) => this.dataview(source, el, ctx, ctx.sourcePath)); + // DataviewJS codeblocks. + this.registerPriorityCodeblockPostProcessor(this.settings.dataviewJsKeyword, -100, async (source, el, ctx) => this.dataviewjs(source, el, ctx, ctx.sourcePath)); + // Dataview inline queries. + this.registerPriorityMarkdownPostProcessor(-100, async (el, ctx) => { + // Allow for turning off inline queries. + if (!this.settings.enableInlineDataview || isDataviewDisabled(ctx.sourcePath)) + return; + this.dataviewInline(el, ctx, ctx.sourcePath); + }); + // Dataview inline-inline query fancy rendering. Runs at a low priority; should apply to Dataview views. + this.registerPriorityMarkdownPostProcessor(100, async (el, ctx) => { + // Allow for lame people to disable the pretty rendering. + if (!this.settings.prettyRenderInlineFields || isDataviewDisabled(ctx.sourcePath)) + return; + // Handle p, header elements explicitly (opt-in rather than opt-out for now). + for (let p of el.findAllSelf("p,h1,h2,h3,h4,h5,h6,li,span,th,td")) { + const init = { + app: this.app, + index: this.index, + settings: this.settings, + container: p, + }; + await replaceInlineFields(ctx, init); + } + }); + // editor extensions + this.cmExtension = []; + this.registerEditorExtension(this.cmExtension); + this.updateEditorExtensions(); + // Dataview "force refresh" operation. + this.addCommand({ + id: "dataview-force-refresh-views", + name: "Force refresh all views and blocks", + callback: () => { + this.index.revision += 1; + this.app.workspace.trigger("dataview:refresh-views"); + }, + }); + this.addCommand({ + id: "dataview-drop-cache", + name: "Drop all cached file metadata", + callback: () => { + this.index.reinitialize(); + }, + }); + this.addCommand({ + id: "dataview-rebuild-current-view", + name: "Rebuild current view", + callback: () => { + const activeView = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (activeView) { + activeView.leaf.rebuildView(); + } + }, + }); + // Run index initialization, which actually traverses the vault to index files. + if (!this.app.workspace.layoutReady) { + this.app.workspace.onLayoutReady(async () => this.index.initialize()); + } + else { + this.index.initialize(); + } + // Not required anymore, though holding onto it for backwards-compatibility. + this.app.metadataCache.trigger("dataview:api-ready", this.api); + console.log(`Dataview: version ${this.manifest.version} (requires obsidian ${this.manifest.minAppVersion})`); + // Mainly intended to detect when the user switches between live preview and source mode. + this.registerEvent(this.app.workspace.on("layout-change", () => { + this.app.workspace.iterateAllLeaves(leaf => { + if (leaf.view instanceof obsidian.MarkdownView && leaf.view.editor.cm) { + leaf.view.editor.cm.dispatch({ + effects: workspaceLayoutChangeEffect.of(null), + }); + } + }); + })); + this.registerDataviewjsCodeHighlighting(); + this.register(() => this.unregisterDataviewjsCodeHighlighting()); + } + registerDataviewjsCodeHighlighting() { + window.CodeMirror.defineMode(this.settings.dataviewJsKeyword, config => window.CodeMirror.getMode(config, "javascript")); + } + unregisterDataviewjsCodeHighlighting() { + window.CodeMirror.defineMode(this.settings.dataviewJsKeyword, config => window.CodeMirror.getMode(config, "null")); + } + debouncedRefresh = () => null; + updateRefreshSettings() { + this.debouncedRefresh = obsidian.debounce(() => this.app.workspace.trigger("dataview:refresh-views"), this.settings.refreshInterval, true); + } + onunload() { + console.log(`Dataview: version ${this.manifest.version} unloaded.`); + } + /** Register a markdown post processor with the given priority. */ + registerPriorityMarkdownPostProcessor(priority, processor) { + let registered = this.registerMarkdownPostProcessor(processor); + registered.sortOrder = priority; + } + /** Register a markdown codeblock post processor with the given priority. */ + registerPriorityCodeblockPostProcessor(language, priority, processor) { + let registered = this.registerMarkdownCodeBlockProcessor(language, processor); + registered.sortOrder = priority; + } + updateEditorExtensions() { + // Don't create a new array, keep the same reference + this.cmExtension.length = 0; + // editor extension for inline queries: enabled regardless of settings (enableInlineDataview/enableInlineDataviewJS) + this.cmExtension.push(inlinePlugin(this.app, this.index, this.settings, this.api)); + // editor extension for rendering inline fields in live preview + if (this.settings.prettyRenderInlineFieldsInLivePreview) { + this.cmExtension.push(inlineFieldsField, replaceInlineFieldsInLivePreview(this.app, this.settings)); + } + this.app.workspace.updateOptions(); + } + /** + * Based on the source, generate a dataview view. This works by doing an initial parsing pass, and then adding + * a long-lived view object to the given component for life-cycle management. + */ + async dataview(source, el, component, sourcePath) { + el.style.overflowX = "auto"; + this.api.execute(source, el, component, sourcePath); + } + /** Generate a DataviewJS view running the given source in the given element. */ + async dataviewjs(source, el, component, sourcePath) { + el.style.overflowX = "auto"; + this.api.executeJs(source, el, component, sourcePath); + } + /** Render all dataview inline expressions in the given element. */ + async dataviewInline(el, component, sourcePath) { + if (isDataviewDisabled(sourcePath)) + return; + // Search for <code> blocks inside this element; for each one, look for things of the form `= ...`. + let codeblocks = el.querySelectorAll("code"); + for (let index = 0; index < codeblocks.length; index++) { + let codeblock = codeblocks.item(index); + // Skip code inside of pre elements if not explicitly enabled. + if (codeblock.parentElement && + codeblock.parentElement.nodeName.toLowerCase() == "pre" && + !this.settings.inlineQueriesInCodeblocks) + continue; + let text = codeblock.innerText.trim(); + if (this.settings.inlineJsQueryPrefix.length > 0 && text.startsWith(this.settings.inlineJsQueryPrefix)) { + let code = text.substring(this.settings.inlineJsQueryPrefix.length).trim(); + if (code.length == 0) + continue; + component.addChild(new DataviewInlineJSRenderer(this.api, code, el, codeblock, sourcePath)); + } + else if (this.settings.inlineQueryPrefix.length > 0 && text.startsWith(this.settings.inlineQueryPrefix)) { + let potentialField = text.substring(this.settings.inlineQueryPrefix.length).trim(); + if (potentialField.length == 0) + continue; + let field = tryOrPropagate(() => parseField(potentialField)); + if (!field.successful) { + let errorBlock = el.createEl("div"); + renderErrorPre(errorBlock, `Dataview (inline field '${potentialField}'): ${field.error}`); + } + else { + let fieldValue = field.value; + component.addChild(new DataviewInlineRenderer(fieldValue, text, el, codeblock, this.index, sourcePath, this.settings, this.app)); + } + } + } + } + /** Update plugin settings. */ + async updateSettings(settings) { + Object.assign(this.settings, settings); + this.updateRefreshSettings(); + await this.saveData(this.settings); + } + /** @deprecated Call the given callback when the dataview API has initialized. */ + withApi(callback) { + callback(this.api); + } + /** + * Create an API element localized to the given path, with lifecycle management managed by the given component. + * The API will output results to the given HTML element. + */ + localApi(path, component, el) { + return new DataviewInlineApi(this.api, component, el, path); + } +} +/** All of the dataview settings in a single, nice tab. */ +class GeneralSettingsTab extends obsidian.PluginSettingTab { + plugin; + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + this.containerEl.empty(); + new obsidian.Setting(this.containerEl) + .setName("Enable inline queries") + .setDesc("Enable or disable executing regular inline Dataview queries.") + .addToggle(toggle => toggle + .setValue(this.plugin.settings.enableInlineDataview) + .onChange(async (value) => await this.plugin.updateSettings({ enableInlineDataview: value }))); + new obsidian.Setting(this.containerEl) + .setName("Enable JavaScript queries") + .setDesc("Enable or disable executing DataviewJS queries.") + .addToggle(toggle => toggle + .setValue(this.plugin.settings.enableDataviewJs) + .onChange(async (value) => await this.plugin.updateSettings({ enableDataviewJs: value }))); + new obsidian.Setting(this.containerEl) + .setName("Enable inline JavaScript queries") + .setDesc("Enable or disable executing inline DataviewJS queries. Requires that DataviewJS queries are enabled.") + .addToggle(toggle => toggle + .setValue(this.plugin.settings.enableInlineDataviewJs) + .onChange(async (value) => await this.plugin.updateSettings({ enableInlineDataviewJs: value }))); + new obsidian.Setting(this.containerEl) + .setName("Enable inline field highlighting in reading view") + .setDesc("Enables or disables visual highlighting / pretty rendering for inline fields in reading view.") + .addToggle(toggle => toggle + .setValue(this.plugin.settings.prettyRenderInlineFields) + .onChange(async (value) => await this.plugin.updateSettings({ prettyRenderInlineFields: value }))); + new obsidian.Setting(this.containerEl) + .setName("Enable inline field highlighting in Live Preview") + .setDesc("Enables or disables visual highlighting / pretty rendering for inline fields in Live Preview.") + .addToggle(toggle => toggle.setValue(this.plugin.settings.prettyRenderInlineFieldsInLivePreview).onChange(async (value) => { + await this.plugin.updateSettings({ prettyRenderInlineFieldsInLivePreview: value }); + this.plugin.updateEditorExtensions(); + })); + new obsidian.Setting(this.containerEl).setName("Codeblocks").setHeading(); + new obsidian.Setting(this.containerEl) + .setName("DataviewJS keyword") + .setDesc("Keyword for DataviewJS blocks. Defaults to 'dataviewjs'. Reload required for changes to take effect.") + .addText(text => text + .setPlaceholder("dataviewjs") + .setValue(this.plugin.settings.dataviewJsKeyword) + .onChange(async (value) => { + if (value.length == 0) + return; + this.plugin.unregisterDataviewjsCodeHighlighting(); + await this.plugin.updateSettings({ dataviewJsKeyword: value }); + this.plugin.registerDataviewjsCodeHighlighting(); + })); + new obsidian.Setting(this.containerEl) + .setName("Inline query prefix") + .setDesc("The prefix to inline queries (to mark them as Dataview queries). Defaults to '='.") + .addText(text => text + .setPlaceholder("=") + .setValue(this.plugin.settings.inlineQueryPrefix) + .onChange(async (value) => { + if (value.length == 0) + return; + await this.plugin.updateSettings({ inlineQueryPrefix: value }); + })); + new obsidian.Setting(this.containerEl) + .setName("JavaScript inline query prefix") + .setDesc("The prefix to JavaScript inline queries (to mark them as DataviewJS queries). Defaults to '$='.") + .addText(text => text + .setPlaceholder("$=") + .setValue(this.plugin.settings.inlineJsQueryPrefix) + .onChange(async (value) => { + if (value.length == 0) + return; + await this.plugin.updateSettings({ inlineJsQueryPrefix: value }); + })); + new obsidian.Setting(this.containerEl) + .setName("Code block inline queries") + .setDesc("If enabled, inline queries will also be evaluated inside full code blocks.") + .addToggle(toggle => toggle + .setValue(this.plugin.settings.inlineQueriesInCodeblocks) + .onChange(async (value) => await this.plugin.updateSettings({ inlineQueriesInCodeblocks: value }))); + new obsidian.Setting(this.containerEl).setName("View").setHeading(); + new obsidian.Setting(this.containerEl) + .setName("Display result count") + .setDesc("If toggled off, the small number in the result header of TASK and TABLE queries will be hidden.") + .addToggle(toggle => toggle.setValue(this.plugin.settings.showResultCount).onChange(async (value) => { + await this.plugin.updateSettings({ showResultCount: value }); + this.plugin.index.touch(); + })); + new obsidian.Setting(this.containerEl) + .setName("Warn on empty result") + .setDesc("If set, queries which return 0 results will render a warning message.") + .addToggle(toggle => toggle.setValue(this.plugin.settings.warnOnEmptyResult).onChange(async (value) => { + await this.plugin.updateSettings({ warnOnEmptyResult: value }); + this.plugin.index.touch(); + })); + new obsidian.Setting(this.containerEl) + .setName("Render null as") + .setDesc("What null/non-existent should show up as in tables, by default. This supports Markdown notation.") + .addText(text => text + .setPlaceholder("-") + .setValue(this.plugin.settings.renderNullAs) + .onChange(async (value) => { + await this.plugin.updateSettings({ renderNullAs: value }); + this.plugin.index.touch(); + })); + new obsidian.Setting(this.containerEl) + .setName("Automatic view refreshing") + .setDesc("If enabled, views will automatically refresh when files in your vault change; this can negatively affect" + + " some functionality like embeds in views, so turn it off if such functionality is not working.") + .addToggle(toggle => toggle.setValue(this.plugin.settings.refreshEnabled).onChange(async (value) => { + await this.plugin.updateSettings({ refreshEnabled: value }); + this.plugin.index.touch(); + })); + new obsidian.Setting(this.containerEl) + .setName("Refresh interval") + .setDesc("How long to wait (in milliseconds) for files to stop changing before updating views.") + .addText(text => text + .setPlaceholder("500") + .setValue("" + this.plugin.settings.refreshInterval) + .onChange(async (value) => { + let parsed = parseInt(value); + if (isNaN(parsed)) + return; + parsed = parsed < 100 ? 100 : parsed; + await this.plugin.updateSettings({ refreshInterval: parsed }); + })); + let dformat = new obsidian.Setting(this.containerEl) + .setName("Date format") + .setDesc("The default date format (see Luxon date format options)." + + " Currently: " + + DateTime.now().toFormat(this.plugin.settings.defaultDateFormat, { locale: currentLocale() })) + .addText(text => text + .setPlaceholder(DEFAULT_QUERY_SETTINGS.defaultDateFormat) + .setValue(this.plugin.settings.defaultDateFormat) + .onChange(async (value) => { + dformat.setDesc("The default date format (see Luxon date format options)." + + " Currently: " + + DateTime.now().toFormat(value, { locale: currentLocale() })); + await this.plugin.updateSettings({ defaultDateFormat: value }); + this.plugin.index.touch(); + })); + let dtformat = new obsidian.Setting(this.containerEl) + .setName("Date + time format") + .setDesc("The default date and time format (see Luxon date format options)." + + " Currently: " + + DateTime.now().toFormat(this.plugin.settings.defaultDateTimeFormat, { locale: currentLocale() })) + .addText(text => text + .setPlaceholder(DEFAULT_QUERY_SETTINGS.defaultDateTimeFormat) + .setValue(this.plugin.settings.defaultDateTimeFormat) + .onChange(async (value) => { + dtformat.setDesc("The default date and time format (see Luxon date format options)." + + " Currently: " + + DateTime.now().toFormat(value, { locale: currentLocale() })); + await this.plugin.updateSettings({ defaultDateTimeFormat: value }); + this.plugin.index.touch(); + })); + new obsidian.Setting(this.containerEl).setName("Tables").setHeading(); + new obsidian.Setting(this.containerEl) + .setName("Primary column name") + .setDesc("The name of the default ID column in tables; this is the auto-generated first column that links to the source file.") + .addText(text => text + .setPlaceholder("File") + .setValue(this.plugin.settings.tableIdColumnName) + .onChange(async (value) => { + await this.plugin.updateSettings({ tableIdColumnName: value }); + this.plugin.index.touch(); + })); + new obsidian.Setting(this.containerEl) + .setName("Grouped column name") + .setDesc("The name of the default ID column in tables, when the table is on grouped data; this is the auto-generated first column" + + "that links to the source file/group.") + .addText(text => text + .setPlaceholder("Group") + .setValue(this.plugin.settings.tableGroupColumnName) + .onChange(async (value) => { + await this.plugin.updateSettings({ tableGroupColumnName: value }); + this.plugin.index.touch(); + })); + new obsidian.Setting(this.containerEl).setName("Tasks").setHeading(); + let taskCompletionSubsettingsEnabled = this.plugin.settings.taskCompletionTracking; + let taskCompletionInlineSubsettingsEnabled = taskCompletionSubsettingsEnabled && !this.plugin.settings.taskCompletionUseEmojiShorthand; + new obsidian.Setting(this.containerEl) + .setName("Automatic task completion tracking") + .setDesc(createFragment(el => { + el.appendText("If enabled, Dataview will automatically append tasks with their completion date when they are checked in Dataview views."); + el.createEl("br"); + el.appendText("Example with default field name and date format: - [x] my task [completion:: 2022-01-01]"); + })) + .addToggle(toggle => toggle.setValue(this.plugin.settings.taskCompletionTracking).onChange(async (value) => { + await this.plugin.updateSettings({ taskCompletionTracking: value }); + taskCompletionSubsettingsEnabled = value; + this.display(); + })); + let taskEmojiShorthand = new obsidian.Setting(this.containerEl) + .setName("Use emoji shorthand for completion") + .setDisabled(!taskCompletionSubsettingsEnabled); + if (taskCompletionSubsettingsEnabled) + taskEmojiShorthand + .setDesc(createFragment(el => { + el.appendText('If enabled, will use emoji shorthand instead of inline field formatting to fill out implicit task field "completion".'); + el.createEl("br"); + el.appendText("Example: - [x] my task ✅ 2022-01-01"); + el.createEl("br"); + el.appendText("Disable this to customize the completion date format or field name, or to use Dataview inline field formatting."); + el.createEl("br"); + el.appendText('Only available when "automatic task completion tracking" is enabled.'); + })) + .addToggle(toggle => toggle.setValue(this.plugin.settings.taskCompletionUseEmojiShorthand).onChange(async (value) => { + await this.plugin.updateSettings({ taskCompletionUseEmojiShorthand: value }); + taskCompletionInlineSubsettingsEnabled = taskCompletionSubsettingsEnabled && !value; + this.display(); + })); + else + taskEmojiShorthand.setDesc('Only available when "automatic task completion tracking" is enabled.'); + let taskFieldName = new obsidian.Setting(this.containerEl) + .setName("Completion field name") + .setDisabled(!taskCompletionInlineSubsettingsEnabled); + if (taskCompletionInlineSubsettingsEnabled) + taskFieldName + .setDesc(createFragment(el => { + el.appendText("Text used as inline field key for task completion date when toggling a task's checkbox in a Dataview view."); + el.createEl("br"); + el.appendText('Only available when "automatic task completion tracking" is enabled and "use emoji shorthand for completion" is disabled.'); + })) + .addText(text => text.setValue(this.plugin.settings.taskCompletionText).onChange(async (value) => { + await this.plugin.updateSettings({ taskCompletionText: value.trim() }); + })); + else + taskFieldName.setDesc('Only available when "automatic task completion tracking" is enabled and "use emoji shorthand for completion" is disabled.'); + let taskDtFormat = new obsidian.Setting(this.containerEl) + .setName("Completion date format") + .setDisabled(!taskCompletionInlineSubsettingsEnabled); + if (taskCompletionInlineSubsettingsEnabled) { + let descTextLines = [ + "Date-time format for task completion date when toggling a task's checkbox in a Dataview view (see Luxon date format options).", + 'Only available when "automatic task completion tracking" is enabled and "use emoji shorthand for completion" is disabled.', + "Currently: ", + ]; + taskDtFormat + .setDesc(createFragment(el => { + el.appendText(descTextLines[0]); + el.createEl("br"); + el.appendText(descTextLines[1]); + el.createEl("br"); + el.appendText(descTextLines[2] + + DateTime.now().toFormat(this.plugin.settings.taskCompletionDateFormat, { + locale: currentLocale(), + })); + })) + .addText(text => text + .setPlaceholder(DEFAULT_SETTINGS.taskCompletionDateFormat) + .setValue(this.plugin.settings.taskCompletionDateFormat) + .onChange(async (value) => { + taskDtFormat.setDesc(createFragment(el => { + el.appendText(descTextLines[0]); + el.createEl("br"); + el.appendText(descTextLines[1]); + el.createEl("br"); + el.appendText(descTextLines[2] + + DateTime.now().toFormat(value.trim(), { locale: currentLocale() })); + })); + await this.plugin.updateSettings({ taskCompletionDateFormat: value.trim() }); + this.plugin.index.touch(); + })); + } + else { + taskDtFormat.setDesc('Only available when "automatic task completion tracking" is enabled and "use emoji shorthand for completion" is disabled.'); + } + new obsidian.Setting(this.containerEl) + .setName("Recursive sub-task completion") + // I gotta word this better :/ + .setDesc("If enabled, completing a task in a Dataview will automatically complete its subtasks too.") + .addToggle(toggle => toggle + .setValue(this.plugin.settings.recursiveSubTaskCompletion) + .onChange(async (value) => await this.plugin.updateSettings({ recursiveSubTaskCompletion: value }))); + } +} + +module.exports = DataviewPlugin; + + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/dataview/manifest.json b/.obsidian/plugins/dataview/manifest.json new file mode 100644 index 0000000..926b2a6 --- /dev/null +++ b/.obsidian/plugins/dataview/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "dataview", + "name": "Dataview", + "version": "0.5.68", + "minAppVersion": "0.13.11", + "description": "Complex data views for the data-obsessed.", + "author": "Michael Brenan <blacksmithgu@gmail.com>", + "authorUrl": "https://github.com/blacksmithgu", + "helpUrl": "https://blacksmithgu.github.io/obsidian-dataview/", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/dataview/styles.css b/.obsidian/plugins/dataview/styles.css new file mode 100644 index 0000000..618821a --- /dev/null +++ b/.obsidian/plugins/dataview/styles.css @@ -0,0 +1,141 @@ +.block-language-dataview { + overflow-y: auto; +} + +/*****************/ +/** Table Views **/ +/*****************/ + +/* List View Default Styling; rendered internally as a table. */ +.table-view-table { + width: 100%; +} + +.table-view-table > thead > tr, .table-view-table > tbody > tr { + margin-top: 1em; + margin-bottom: 1em; + text-align: left; +} + +.table-view-table > tbody > tr:hover { + background-color: var(--table-row-background-hover); +} + +.table-view-table > thead > tr > th { + font-weight: 700; + font-size: larger; + border-top: none; + border-left: none; + border-right: none; + border-bottom: solid; + + max-width: 100%; +} + +.table-view-table > tbody > tr > td { + text-align: left; + border: none; + font-weight: 400; + max-width: 100%; +} + +.table-view-table ul, .table-view-table ol { + margin-block-start: 0.2em !important; + margin-block-end: 0.2em !important; +} + +/** Rendered value styling for any view. */ +.dataview-result-list-root-ul { + padding: 0em !important; + margin: 0em !important; +} + +.dataview-result-list-ul { + margin-block-start: 0.2em !important; + margin-block-end: 0.2em !important; +} + +/** Generic grouping styling. */ +.dataview.result-group { + padding-left: 8px; +} + +/*******************/ +/** Inline Fields **/ +/*******************/ + +.dataview.inline-field-key { + padding-left: 8px; + padding-right: 8px; + font-family: var(--font-monospace); + background-color: var(--background-primary-alt); + color: var(--nav-item-color-selected); +} + +.dataview.inline-field-value { + padding-left: 8px; + padding-right: 8px; + font-family: var(--font-monospace); + background-color: var(--background-secondary-alt); + color: var(--nav-item-color-selected); +} + +.dataview.inline-field-standalone-value { + padding-left: 8px; + padding-right: 8px; + font-family: var(--font-monospace); + background-color: var(--background-secondary-alt); + color: var(--nav-item-color-selected); +} + +/***************/ +/** Task View **/ +/***************/ + +.dataview.task-list-item, .dataview.task-list-basic-item { + margin-top: 3px; + margin-bottom: 3px; + transition: 0.4s; +} + +.dataview.task-list-item:hover, .dataview.task-list-basic-item:hover { + background-color: var(--text-selection); + box-shadow: -40px 0 0 var(--text-selection); + cursor: pointer; +} + +/*****************/ +/** Error Views **/ +/*****************/ + +div.dataview-error-box { + width: 100%; + min-height: 150px; + display: flex; + align-items: center; + justify-content: center; + border: 4px dashed var(--background-secondary); +} + +.dataview-error-message { + color: var(--text-muted); + text-align: center; +} + +/*************************/ +/** Additional Metadata **/ +/*************************/ + +.dataview.small-text { + font-size: smaller; + color: var(--text-muted); + margin-left: 3px; +} + +.dataview.small-text::before { + content: "("; +} + +.dataview.small-text::after { + content: ")"; +} diff --git a/.obsidian/plugins/obsidian-day-planner/data.json b/.obsidian/plugins/obsidian-day-planner/data.json new file mode 100644 index 0000000..dfcc7ff --- /dev/null +++ b/.obsidian/plugins/obsidian-day-planner/data.json @@ -0,0 +1,39 @@ +{ + "snapStepMinutes": 10, + "progressIndicator": "bar", + "showTaskNotification": false, + "zoomLevel": 2, + "timelineIcon": "calendar-with-checkmark", + "endLabel": "All done", + "startHour": 6, + "timelineDateFormat": "YYYY-MM-DD", + "centerNeedle": false, + "plannerHeading": "Day planner", + "plannerHeadingLevel": 1, + "timelineColored": false, + "timelineStartColor": "#006466", + "timelineEndColor": "#4d194d", + "timestampFormat": "HH:mm", + "hourFormat": "H", + "dataviewSource": "", + "extendDurationUntilNext": false, + "defaultDurationMinutes": 30, + "minimalDurationMinutes": 10, + "showTimestampInTaskBlock": false, + "showUncheduledTasks": true, + "showUnscheduledNestedTasks": true, + "showNow": true, + "showNext": true, + "pluginVersion": "0.27.0", + "showCompletedTasks": true, + "showSubtasksInTaskBlocks": true, + "icals": [], + "colorOverrides": [], + "releaseNotes": true, + "taskStatusOnCreation": " ", + "eventFormatOnCreation": "task", + "sortTasksInPlanAfterEdit": false, + "firstDayOfWeek": "monday", + "multiDayRange": "3-days", + "showTimeTracker": false +} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-day-planner/main.js b/.obsidian/plugins/obsidian-day-planner/main.js new file mode 100644 index 0000000..454e4cd --- /dev/null +++ b/.obsidian/plugins/obsidian-day-planner/main.js @@ -0,0 +1,412 @@ +"use strict";var qT=Object.defineProperty;var hT=(e,t,n)=>t in e?qT(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Sn=(e,t,n)=>hT(e,typeof t!="symbol"?t+"":t,n);Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const $0=require("obsidian");var e2=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function WT(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function bm(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var n=function o(){return this instanceof o?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach(function(o){var M=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(n,o,M.get?M:{enumerable:!0,get:function(){return e[o]}})}),n}var C1={};Object.defineProperty(C1,"__esModule",{value:!0});var nt=$0;const vW="YYYY-MM-DD",NW="gggg-[W]ww",BL="YYYY-MM",TL="YYYY-[Q]Q",_L="YYYY";function _O(e){var n,o;const t=window.app.plugins.getPlugin("periodic-notes");return t&&((o=(n=t.settings)==null?void 0:n[e])==null?void 0:o.enabled)}function EO(){var e,t,n,o;try{const{internalPlugins:M,plugins:c}=window.app;if(_O("daily")){const{format:s,folder:u,template:l}=((t=(e=c.getPlugin("periodic-notes"))==null?void 0:e.settings)==null?void 0:t.daily)||{};return{format:s||vW,folder:(u==null?void 0:u.trim())||"",template:(l==null?void 0:l.trim())||""}}const{folder:b,format:z,template:a}=((o=(n=M.getPluginById("daily-notes"))==null?void 0:n.instance)==null?void 0:o.options)||{};return{format:z||vW,folder:(b==null?void 0:b.trim())||"",template:(a==null?void 0:a.trim())||""}}catch(M){console.info("No custom daily note settings found!",M)}}function SO(){var e,t,n,o,M,c,b;try{const z=window.app.plugins,a=(e=z.getPlugin("calendar"))==null?void 0:e.options,s=(n=(t=z.getPlugin("periodic-notes"))==null?void 0:t.settings)==null?void 0:n.weekly;if(_O("weekly"))return{format:s.format||NW,folder:((o=s.folder)==null?void 0:o.trim())||"",template:((M=s.template)==null?void 0:M.trim())||""};const u=a||{};return{format:u.weeklyNoteFormat||NW,folder:((c=u.weeklyNoteFolder)==null?void 0:c.trim())||"",template:((b=u.weeklyNoteTemplate)==null?void 0:b.trim())||""}}catch(z){console.info("No custom weekly note settings found!",z)}}function kO(){var t,n,o,M;const e=window.app.plugins;try{const c=_O("monthly")&&((n=(t=e.getPlugin("periodic-notes"))==null?void 0:t.settings)==null?void 0:n.monthly)||{};return{format:c.format||BL,folder:((o=c.folder)==null?void 0:o.trim())||"",template:((M=c.template)==null?void 0:M.trim())||""}}catch(c){console.info("No custom monthly note settings found!",c)}}function XO(){var t,n,o,M;const e=window.app.plugins;try{const c=_O("quarterly")&&((n=(t=e.getPlugin("periodic-notes"))==null?void 0:t.settings)==null?void 0:n.quarterly)||{};return{format:c.format||TL,folder:((o=c.folder)==null?void 0:o.trim())||"",template:((M=c.template)==null?void 0:M.trim())||""}}catch(c){console.info("No custom quarterly note settings found!",c)}}function CO(){var t,n,o,M;const e=window.app.plugins;try{const c=_O("yearly")&&((n=(t=e.getPlugin("periodic-notes"))==null?void 0:t.settings)==null?void 0:n.yearly)||{};return{format:c.format||_L,folder:((o=c.folder)==null?void 0:o.trim())||"",template:((M=c.template)==null?void 0:M.trim())||""}}catch(c){console.info("No custom yearly note settings found!",c)}}function EL(...e){let t=[];for(let o=0,M=e.length;o<M;o++)t=t.concat(e[o].split("/"));const n=[];for(let o=0,M=t.length;o<M;o++){const c=t[o];!c||c==="."||n.push(c)}return t[0]===""&&n.unshift(""),n.join("/")}function mT(e){let t=e.substring(e.lastIndexOf("/")+1);return t.lastIndexOf(".")!=-1&&(t=t.substring(0,t.lastIndexOf("."))),t}async function gT(e){const t=e.replace(/\\/g,"/").split("/");if(t.pop(),t.length){const n=EL(...t);window.app.vault.getAbstractFileByPath(n)||await window.app.vault.createFolder(n)}}async function xO(e,t){t.endsWith(".md")||(t+=".md");const n=nt.normalizePath(EL(e,t));return await gT(n),n}async function wz(e){const{metadataCache:t,vault:n}=window.app,o=nt.normalizePath(e);if(o==="/")return Promise.resolve(["",null]);try{const M=t.getFirstLinkpathDest(o,""),c=await n.cachedRead(M),b=window.app.foldManager.load(M);return[c,b]}catch(M){return console.error(`Failed to read the daily note template '${o}'`,M),new nt.Notice("Failed to read the daily note template"),["",null]}}function Vo(e,t="day"){const n=e.clone().startOf(t).format();return`${t}-${n}`}function SL(e){return e.replace(/\[[^\]]*\]/g,"")}function RT(e,t){if(t==="week"){const n=SL(e);return/w{1,2}/i.test(n)&&(/M{1,4}/.test(n)||/D{1,4}/.test(n))}return!1}function Dz(e,t){return kL(e.basename,t)}function yT(e,t){return kL(mT(e),t)}function kL(e,t){const o={day:EO,week:SO,month:kO,quarter:XO,year:CO}[t]().format.split("/").pop(),M=window.moment(e,o,!0);if(!M.isValid())return null;if(RT(o,t)&&t==="week"){const c=SL(o);if(/w{1,2}/i.test(c))return window.moment(e,o.replace(/M{1,4}/g,"").replace(/D{1,4}/g,""),!1)}return M}class LT extends Error{}async function XL(e){const t=window.app,{vault:n}=t,o=window.moment,{template:M,format:c,folder:b}=EO(),[z,a]=await wz(M),s=e.format(c),u=await xO(b,s);try{const l=await n.create(u,z.replace(/{{\s*date\s*}}/gi,s).replace(/{{\s*time\s*}}/gi,o().format("HH:mm")).replace(/{{\s*title\s*}}/gi,s).replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(A,d,W,g,L,R)=>{const E=o(),k=e.clone().set({hour:E.get("hour"),minute:E.get("minute"),second:E.get("second")});return W&&k.add(parseInt(g,10),L),R?k.format(R.substring(1).trim()):k.format(c)}).replace(/{{\s*yesterday\s*}}/gi,e.clone().subtract(1,"day").format(c)).replace(/{{\s*tomorrow\s*}}/gi,e.clone().add(1,"d").format(c)));return t.foldManager.save(l,a),l}catch(l){console.error(`Failed to create file: '${u}'`,l),new nt.Notice("Unable to create new file.")}}function vT(e,t){return t[Vo(e,"day")]??null}function NT(){const{vault:e}=window.app,{folder:t}=EO(),n=e.getAbstractFileByPath(nt.normalizePath(t));if(!n)throw new LT("Failed to find daily notes folder");const o={};return nt.Vault.recurseChildren(n,M=>{if(M instanceof nt.TFile){const c=Dz(M,"day");if(c){const b=Vo(c,"day");o[b]=M}}}),o}class wT extends Error{}function DT(){const{moment:e}=window;let t=e.localeData()._week.dow;const n=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"];for(;t;)n.push(n.shift()),t--;return n}function BT(e){return DT().indexOf(e.toLowerCase())}async function CL(e){const{vault:t}=window.app,{template:n,format:o,folder:M}=SO(),[c,b]=await wz(n),z=e.format(o),a=await xO(M,z);try{const s=await t.create(a,c.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(u,l,A,d,W,g)=>{const L=window.moment(),R=e.clone().set({hour:L.get("hour"),minute:L.get("minute"),second:L.get("second")});return A&&R.add(parseInt(d,10),W),g?R.format(g.substring(1).trim()):R.format(o)}).replace(/{{\s*title\s*}}/gi,z).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*(sunday|monday|tuesday|wednesday|thursday|friday|saturday)\s*:(.*?)}}/gi,(u,l,A)=>{const d=BT(l);return e.weekday(d).format(A.trim())}));return window.app.foldManager.save(s,b),s}catch(s){console.error(`Failed to create file: '${a}'`,s),new nt.Notice("Unable to create new file.")}}function TT(e,t){return t[Vo(e,"week")]??null}function _T(){const e={};if(!FL())return e;const{vault:t}=window.app,{folder:n}=SO(),o=t.getAbstractFileByPath(nt.normalizePath(n));if(!o)throw new wT("Failed to find weekly notes folder");return nt.Vault.recurseChildren(o,M=>{if(M instanceof nt.TFile){const c=Dz(M,"week");if(c){const b=Vo(c,"week");e[b]=M}}}),e}class ET extends Error{}async function xL(e){const{vault:t}=window.app,{template:n,format:o,folder:M}=kO(),[c,b]=await wz(n),z=e.format(o),a=await xO(M,z);try{const s=await t.create(a,c.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(u,l,A,d,W,g)=>{const L=window.moment(),R=e.clone().set({hour:L.get("hour"),minute:L.get("minute"),second:L.get("second")});return A&&R.add(parseInt(d,10),W),g?R.format(g.substring(1).trim()):R.format(o)}).replace(/{{\s*date\s*}}/gi,z).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,z));return window.app.foldManager.save(s,b),s}catch(s){console.error(`Failed to create file: '${a}'`,s),new nt.Notice("Unable to create new file.")}}function ST(e,t){return t[Vo(e,"month")]??null}function kT(){const e={};if(!IL())return e;const{vault:t}=window.app,{folder:n}=kO(),o=t.getAbstractFileByPath(nt.normalizePath(n));if(!o)throw new ET("Failed to find monthly notes folder");return nt.Vault.recurseChildren(o,M=>{if(M instanceof nt.TFile){const c=Dz(M,"month");if(c){const b=Vo(c,"month");e[b]=M}}}),e}class XT extends Error{}async function CT(e){const{vault:t}=window.app,{template:n,format:o,folder:M}=XO(),[c,b]=await wz(n),z=e.format(o),a=await xO(M,z);try{const s=await t.create(a,c.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(u,l,A,d,W,g)=>{const L=window.moment(),R=e.clone().set({hour:L.get("hour"),minute:L.get("minute"),second:L.get("second")});return A&&R.add(parseInt(d,10),W),g?R.format(g.substring(1).trim()):R.format(o)}).replace(/{{\s*date\s*}}/gi,z).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,z));return window.app.foldManager.save(s,b),s}catch(s){console.error(`Failed to create file: '${a}'`,s),new nt.Notice("Unable to create new file.")}}function xT(e,t){return t[Vo(e,"quarter")]??null}function FT(){const e={};if(!PL())return e;const{vault:t}=window.app,{folder:n}=XO(),o=t.getAbstractFileByPath(nt.normalizePath(n));if(!o)throw new XT("Failed to find quarterly notes folder");return nt.Vault.recurseChildren(o,M=>{if(M instanceof nt.TFile){const c=Dz(M,"quarter");if(c){const b=Vo(c,"quarter");e[b]=M}}}),e}class IT extends Error{}async function PT(e){const{vault:t}=window.app,{template:n,format:o,folder:M}=CO(),[c,b]=await wz(n),z=e.format(o),a=await xO(M,z);try{const s=await t.create(a,c.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(u,l,A,d,W,g)=>{const L=window.moment(),R=e.clone().set({hour:L.get("hour"),minute:L.get("minute"),second:L.get("second")});return A&&R.add(parseInt(d,10),W),g?R.format(g.substring(1).trim()):R.format(o)}).replace(/{{\s*date\s*}}/gi,z).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,z));return window.app.foldManager.save(s,b),s}catch(s){console.error(`Failed to create file: '${a}'`,s),new nt.Notice("Unable to create new file.")}}function UT(e,t){return t[Vo(e,"year")]??null}function $T(){const e={};if(!UL())return e;const{vault:t}=window.app,{folder:n}=CO(),o=t.getAbstractFileByPath(nt.normalizePath(n));if(!o)throw new IT("Failed to find yearly notes folder");return nt.Vault.recurseChildren(o,M=>{if(M instanceof nt.TFile){const c=Dz(M,"year");if(c){const b=Vo(c,"year");e[b]=M}}}),e}function HT(){var o,M;const{app:e}=window,t=e.internalPlugins.plugins["daily-notes"];if(t&&t.enabled)return!0;const n=e.plugins.getPlugin("periodic-notes");return n&&((M=(o=n.settings)==null?void 0:o.daily)==null?void 0:M.enabled)}function FL(){var n,o;const{app:e}=window;if(e.plugins.getPlugin("calendar"))return!0;const t=e.plugins.getPlugin("periodic-notes");return t&&((o=(n=t.settings)==null?void 0:n.weekly)==null?void 0:o.enabled)}function IL(){var n,o;const{app:e}=window,t=e.plugins.getPlugin("periodic-notes");return t&&((o=(n=t.settings)==null?void 0:n.monthly)==null?void 0:o.enabled)}function PL(){var n,o;const{app:e}=window,t=e.plugins.getPlugin("periodic-notes");return t&&((o=(n=t.settings)==null?void 0:n.quarterly)==null?void 0:o.enabled)}function UL(){var n,o;const{app:e}=window,t=e.plugins.getPlugin("periodic-notes");return t&&((o=(n=t.settings)==null?void 0:n.yearly)==null?void 0:o.enabled)}function YT(e){const t={day:EO,week:SO,month:kO,quarter:XO,year:CO}[e];return t()}function jT(e,t){return{day:XL,month:xL,week:CL}[e](t)}var VT=C1.DEFAULT_DAILY_NOTE_FORMAT=vW;C1.DEFAULT_MONTHLY_NOTE_FORMAT=BL;C1.DEFAULT_QUARTERLY_NOTE_FORMAT=TL;C1.DEFAULT_WEEKLY_NOTE_FORMAT=NW;C1.DEFAULT_YEARLY_NOTE_FORMAT=_L;C1.appHasDailyNotesPluginLoaded=HT;C1.appHasMonthlyNotesPluginLoaded=IL;C1.appHasQuarterlyNotesPluginLoaded=PL;C1.appHasWeeklyNotesPluginLoaded=FL;C1.appHasYearlyNotesPluginLoaded=UL;var pm=C1.createDailyNote=XL;C1.createMonthlyNote=xL;C1.createPeriodicNote=jT;C1.createQuarterlyNote=CT;C1.createWeeklyNote=CL;C1.createYearlyNote=PT;var zm=C1.getAllDailyNotes=NT;C1.getAllMonthlyNotes=kT;C1.getAllQuarterlyNotes=FT;C1.getAllWeeklyNotes=_T;C1.getAllYearlyNotes=$T;var am=C1.getDailyNote=vT,GT=C1.getDailyNoteSettings=EO,KT=C1.getDateFromFile=Dz,bf=C1.getDateFromPath=yT;C1.getDateUID=Vo;C1.getMonthlyNote=ST;C1.getMonthlyNoteSettings=kO;C1.getPeriodicNoteSettings=YT;C1.getQuarterlyNote=xT;C1.getQuarterlyNoteSettings=XO;C1.getTemplateInfo=wz;C1.getWeeklyNote=TT;C1.getWeeklyNoteSettings=SO;C1.getYearlyNote=UT;C1.getYearlyNoteSettings=CO;var vM={};Object.defineProperty(vM,"__esModule",{value:!0});class bb extends Error{}class ZT extends bb{constructor(t){super(`Invalid DateTime: ${t.toMessage()}`)}}class JT extends bb{constructor(t){super(`Invalid Interval: ${t.toMessage()}`)}}class QT extends bb{constructor(t){super(`Invalid Duration: ${t.toMessage()}`)}}class Ks extends bb{}class $L extends bb{constructor(t){super(`Invalid unit ${t}`)}}class G2 extends bb{}class pi extends bb{constructor(){super("Zone is an abstract class")}}const I0="numeric",Io="short",g2="long",aA={year:I0,month:I0,day:I0},HL={year:I0,month:Io,day:I0},e_={year:I0,month:Io,day:I0,weekday:Io},YL={year:I0,month:g2,day:I0},jL={year:I0,month:g2,day:I0,weekday:g2},VL={hour:I0,minute:I0},GL={hour:I0,minute:I0,second:I0},KL={hour:I0,minute:I0,second:I0,timeZoneName:Io},ZL={hour:I0,minute:I0,second:I0,timeZoneName:g2},JL={hour:I0,minute:I0,hourCycle:"h23"},QL={hour:I0,minute:I0,second:I0,hourCycle:"h23"},ev={hour:I0,minute:I0,second:I0,hourCycle:"h23",timeZoneName:Io},tv={hour:I0,minute:I0,second:I0,hourCycle:"h23",timeZoneName:g2},nv={year:I0,month:I0,day:I0,hour:I0,minute:I0},ov={year:I0,month:I0,day:I0,hour:I0,minute:I0,second:I0},rv={year:I0,month:Io,day:I0,hour:I0,minute:I0},Mv={year:I0,month:Io,day:I0,hour:I0,minute:I0,second:I0},t_={year:I0,month:Io,day:I0,weekday:Io,hour:I0,minute:I0},iv={year:I0,month:g2,day:I0,hour:I0,minute:I0,timeZoneName:Io},cv={year:I0,month:g2,day:I0,hour:I0,minute:I0,second:I0,timeZoneName:Io},bv={year:I0,month:g2,day:I0,weekday:g2,hour:I0,minute:I0,timeZoneName:g2},pv={year:I0,month:g2,day:I0,weekday:g2,hour:I0,minute:I0,second:I0,timeZoneName:g2};class FO{get type(){throw new pi}get name(){throw new pi}get ianaName(){return this.name}get isUniversal(){throw new pi}offsetName(t,n){throw new pi}formatOffset(t,n){throw new pi}offset(t){throw new pi}equals(t){throw new pi}get isValid(){throw new pi}}let Xh=null;class pf extends FO{static get instance(){return Xh===null&&(Xh=new pf),Xh}get type(){return"system"}get name(){return new Intl.DateTimeFormat().resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(t,{format:n,locale:o}){return av(t,n,o)}formatOffset(t,n){return nO(this.offset(t),n)}offset(t){return-new Date(t).getTimezoneOffset()}equals(t){return t.type==="system"}get isValid(){return!0}}let Pl={};function n_(e){return Pl[e]||(Pl[e]=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",era:"short"})),Pl[e]}const o_={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};function r_(e,t){const n=e.format(t).replace(/\u200E/g,""),o=/(\d+)\/(\d+)\/(\d+) (AD|BC),? (\d+):(\d+):(\d+)/.exec(n),[,M,c,b,z,a,s,u]=o;return[b,M,c,z,a,s,u]}function M_(e,t){const n=e.formatToParts(t),o=[];for(let M=0;M<n.length;M++){const{type:c,value:b}=n[M],z=o_[c];c==="era"?o[z]=b:F1(z)||(o[z]=parseInt(b,10))}return o}let Wl={};class hM extends FO{static create(t){return Wl[t]||(Wl[t]=new hM(t)),Wl[t]}static resetCache(){Wl={},Pl={}}static isValidSpecifier(t){return this.isValidZone(t)}static isValidZone(t){if(!t)return!1;try{return new Intl.DateTimeFormat("en-US",{timeZone:t}).format(),!0}catch{return!1}}constructor(t){super(),this.zoneName=t,this.valid=hM.isValidZone(t)}get type(){return"iana"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(t,{format:n,locale:o}){return av(t,n,o,this.name)}formatOffset(t,n){return nO(this.offset(t),n)}offset(t){const n=new Date(t);if(isNaN(n))return NaN;const o=n_(this.name);let[M,c,b,z,a,s,u]=o.formatToParts?M_(o,n):r_(o,n);z==="BC"&&(M=-Math.abs(M)+1);const A=af({year:M,month:c,day:b,hour:a===24?0:a,minute:s,second:u,millisecond:0});let d=+n;const W=d%1e3;return d-=W>=0?W:1e3+W,(A-d)/(60*1e3)}equals(t){return t.type==="iana"&&t.name===this.name}get isValid(){return this.valid}}let lR={};function i_(e,t={}){const n=JSON.stringify([e,t]);let o=lR[n];return o||(o=new Intl.ListFormat(e,t),lR[n]=o),o}let wW={};function DW(e,t={}){const n=JSON.stringify([e,t]);let o=wW[n];return o||(o=new Intl.DateTimeFormat(e,t),wW[n]=o),o}let BW={};function c_(e,t={}){const n=JSON.stringify([e,t]);let o=BW[n];return o||(o=new Intl.NumberFormat(e,t),BW[n]=o),o}let TW={};function b_(e,t={}){const{base:n,...o}=t,M=JSON.stringify([e,o]);let c=TW[M];return c||(c=new Intl.RelativeTimeFormat(e,t),TW[M]=c),c}let Zs=null;function p_(){return Zs||(Zs=new Intl.DateTimeFormat().resolvedOptions().locale,Zs)}function z_(e){const t=e.indexOf("-x-");t!==-1&&(e=e.substring(0,t));const n=e.indexOf("-u-");if(n===-1)return[e];{let o,M;try{o=DW(e).resolvedOptions(),M=e}catch{const a=e.substring(0,n);o=DW(a).resolvedOptions(),M=a}const{numberingSystem:c,calendar:b}=o;return[M,c,b]}}function a_(e,t,n){return(n||t)&&(e.includes("-u-")||(e+="-u"),n&&(e+=`-ca-${n}`),t&&(e+=`-nu-${t}`)),e}function s_(e){const t=[];for(let n=1;n<=12;n++){const o=k1.utc(2009,n,1);t.push(e(o))}return t}function O_(e){const t=[];for(let n=1;n<=7;n++){const o=k1.utc(2016,11,13+n);t.push(e(o))}return t}function ml(e,t,n,o){const M=e.listingMode();return M==="error"?null:M==="en"?n(t):o(t)}function u_(e){return e.numberingSystem&&e.numberingSystem!=="latn"?!1:e.numberingSystem==="latn"||!e.locale||e.locale.startsWith("en")||new Intl.DateTimeFormat(e.intl).resolvedOptions().numberingSystem==="latn"}class l_{constructor(t,n,o){this.padTo=o.padTo||0,this.floor=o.floor||!1;const{padTo:M,floor:c,...b}=o;if(!n||Object.keys(b).length>0){const z={useGrouping:!1,...o};o.padTo>0&&(z.minimumIntegerDigits=o.padTo),this.inf=c_(t,z)}}format(t){if(this.inf){const n=this.floor?Math.floor(t):t;return this.inf.format(n)}else{const n=this.floor?Math.floor(t):Om(t,3);return Rt(n,this.padTo)}}}class A_{constructor(t,n,o){this.opts=o,this.originalZone=void 0;let M;if(this.opts.timeZone)this.dt=t;else if(t.zone.type==="fixed"){const b=-1*(t.offset/60),z=b>=0?`Etc/GMT+${b}`:`Etc/GMT${b}`;t.offset!==0&&hM.create(z).valid?(M=z,this.dt=t):(M="UTC",this.dt=t.offset===0?t:t.setZone("UTC").plus({minutes:t.offset}),this.originalZone=t.zone)}else t.zone.type==="system"?this.dt=t:t.zone.type==="iana"?(this.dt=t,M=t.zone.name):(M="UTC",this.dt=t.setZone("UTC").plus({minutes:t.offset}),this.originalZone=t.zone);const c={...this.opts};c.timeZone=c.timeZone||M,this.dtf=DW(n,c)}format(){return this.originalZone?this.formatToParts().map(({value:t})=>t).join(""):this.dtf.format(this.dt.toJSDate())}formatToParts(){const t=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?t.map(n=>{if(n.type==="timeZoneName"){const o=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...n,value:o}}else return n}):t}resolvedOptions(){return this.dtf.resolvedOptions()}}class f_{constructor(t,n,o){this.opts={style:"long",...o},!n&&zv()&&(this.rtf=b_(t,o))}format(t,n){return this.rtf?this.rtf.format(t,n):E_(n,t,this.opts.numeric,this.opts.style!=="long")}formatToParts(t,n){return this.rtf?this.rtf.formatToParts(t,n):[]}}let gt=class Js{static fromOpts(t){return Js.create(t.locale,t.numberingSystem,t.outputCalendar,t.defaultToEN)}static create(t,n,o,M=!1){const c=t||mt.defaultLocale,b=c||(M?"en-US":p_()),z=n||mt.defaultNumberingSystem,a=o||mt.defaultOutputCalendar;return new Js(b,z,a,c)}static resetCache(){Zs=null,wW={},BW={},TW={}}static fromObject({locale:t,numberingSystem:n,outputCalendar:o}={}){return Js.create(t,n,o)}constructor(t,n,o,M){const[c,b,z]=z_(t);this.locale=c,this.numberingSystem=n||b||null,this.outputCalendar=o||z||null,this.intl=a_(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=M,this.fastNumbersCached=null}get fastNumbers(){return this.fastNumbersCached==null&&(this.fastNumbersCached=u_(this)),this.fastNumbersCached}listingMode(){const t=this.isEnglish(),n=(this.numberingSystem===null||this.numberingSystem==="latn")&&(this.outputCalendar===null||this.outputCalendar==="gregory");return t&&n?"en":"intl"}clone(t){return!t||Object.getOwnPropertyNames(t).length===0?this:Js.create(t.locale||this.specifiedLocale,t.numberingSystem||this.numberingSystem,t.outputCalendar||this.outputCalendar,t.defaultToEN||!1)}redefaultToEN(t={}){return this.clone({...t,defaultToEN:!0})}redefaultToSystem(t={}){return this.clone({...t,defaultToEN:!1})}months(t,n=!1){return ml(this,t,uv,()=>{const o=n?{month:t,day:"numeric"}:{month:t},M=n?"format":"standalone";return this.monthsCache[M][t]||(this.monthsCache[M][t]=s_(c=>this.extract(c,o,"month"))),this.monthsCache[M][t]})}weekdays(t,n=!1){return ml(this,t,fv,()=>{const o=n?{weekday:t,year:"numeric",month:"long",day:"numeric"}:{weekday:t},M=n?"format":"standalone";return this.weekdaysCache[M][t]||(this.weekdaysCache[M][t]=O_(c=>this.extract(c,o,"weekday"))),this.weekdaysCache[M][t]})}meridiems(){return ml(this,void 0,()=>dv,()=>{if(!this.meridiemCache){const t={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[k1.utc(2016,11,13,9),k1.utc(2016,11,13,19)].map(n=>this.extract(n,t,"dayperiod"))}return this.meridiemCache})}eras(t){return ml(this,t,qv,()=>{const n={era:t};return this.eraCache[t]||(this.eraCache[t]=[k1.utc(-40,1,1),k1.utc(2017,1,1)].map(o=>this.extract(o,n,"era"))),this.eraCache[t]})}extract(t,n,o){const M=this.dtFormatter(t,n),c=M.formatToParts(),b=c.find(z=>z.type.toLowerCase()===o);return b?b.value:null}numberFormatter(t={}){return new l_(this.intl,t.forceSimple||this.fastNumbers,t)}dtFormatter(t,n={}){return new A_(t,this.intl,n)}relFormatter(t={}){return new f_(this.intl,this.isEnglish(),t)}listFormatter(t={}){return i_(this.intl,t)}isEnglish(){return this.locale==="en"||this.locale.toLowerCase()==="en-us"||new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")}equals(t){return this.locale===t.locale&&this.numberingSystem===t.numberingSystem&&this.outputCalendar===t.outputCalendar}},Ch=null;class Cn extends FO{static get utcInstance(){return Ch===null&&(Ch=new Cn(0)),Ch}static instance(t){return t===0?Cn.utcInstance:new Cn(t)}static parseSpecifier(t){if(t){const n=t.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(n)return new Cn(sf(n[1],n[2]))}return null}constructor(t){super(),this.fixed=t}get type(){return"fixed"}get name(){return this.fixed===0?"UTC":`UTC${nO(this.fixed,"narrow")}`}get ianaName(){return this.fixed===0?"Etc/UTC":`Etc/GMT${nO(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(t,n){return nO(this.fixed,n)}get isUniversal(){return!0}offset(){return this.fixed}equals(t){return t.type==="fixed"&&t.fixed===this.fixed}get isValid(){return!0}}class d_ extends FO{constructor(t){super(),this.zoneName=t}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}}function Wi(e,t){if(F1(e)||e===null)return t;if(e instanceof FO)return e;if(q_(e)){const n=e.toLowerCase();return n==="default"?t:n==="local"||n==="system"?pf.instance:n==="utc"||n==="gmt"?Cn.utcInstance:Cn.parseSpecifier(n)||hM.create(e)}else return Gc(e)?Cn.instance(e):typeof e=="object"&&"offset"in e&&typeof e.offset=="function"?e:new d_(e)}let AR=()=>Date.now(),fR="system",dR=null,qR=null,hR=null,WR=60,mR,mt=class{static get now(){return AR}static set now(t){AR=t}static set defaultZone(t){fR=t}static get defaultZone(){return Wi(fR,pf.instance)}static get defaultLocale(){return dR}static set defaultLocale(t){dR=t}static get defaultNumberingSystem(){return qR}static set defaultNumberingSystem(t){qR=t}static get defaultOutputCalendar(){return hR}static set defaultOutputCalendar(t){hR=t}static get twoDigitCutoffYear(){return WR}static set twoDigitCutoffYear(t){WR=t%100}static get throwOnInvalid(){return mR}static set throwOnInvalid(t){mR=t}static resetCaches(){gt.resetCache(),hM.resetCache()}};function F1(e){return typeof e>"u"}function Gc(e){return typeof e=="number"}function zf(e){return typeof e=="number"&&e%1===0}function q_(e){return typeof e=="string"}function h_(e){return Object.prototype.toString.call(e)==="[object Date]"}function zv(){try{return typeof Intl<"u"&&!!Intl.RelativeTimeFormat}catch{return!1}}function W_(e){return Array.isArray(e)?e:[e]}function gR(e,t,n){if(e.length!==0)return e.reduce((o,M)=>{const c=[t(M),M];return o&&n(o[0],c[0])===o[0]?o:c},null)[1]}function m_(e,t){return t.reduce((n,o)=>(n[o]=e[o],n),{})}function sz(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function bM(e,t,n){return zf(e)&&e>=t&&e<=n}function g_(e,t){return e-t*Math.floor(e/t)}function Rt(e,t=2){const n=e<0;let o;return n?o="-"+(""+-e).padStart(t,"0"):o=(""+e).padStart(t,"0"),o}function di(e){if(!(F1(e)||e===null||e===""))return parseInt(e,10)}function Xc(e){if(!(F1(e)||e===null||e===""))return parseFloat(e)}function sm(e){if(!(F1(e)||e===null||e==="")){const t=parseFloat("0."+e)*1e3;return Math.floor(t)}}function Om(e,t,n=!1){const o=10**t;return(n?Math.trunc:Math.round)(e*o)/o}function IO(e){return e%4===0&&(e%100!==0||e%400===0)}function tO(e){return IO(e)?366:365}function sA(e,t){const n=g_(t-1,12)+1,o=e+(t-n)/12;return n===2?IO(o)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][n-1]}function af(e){let t=Date.UTC(e.year,e.month-1,e.day,e.hour,e.minute,e.second,e.millisecond);return e.year<100&&e.year>=0&&(t=new Date(t),t.setUTCFullYear(e.year,e.month-1,e.day)),+t}function OA(e){const t=(e+Math.floor(e/4)-Math.floor(e/100)+Math.floor(e/400))%7,n=e-1,o=(n+Math.floor(n/4)-Math.floor(n/100)+Math.floor(n/400))%7;return t===4||o===3?53:52}function _W(e){return e>99?e:e>mt.twoDigitCutoffYear?1900+e:2e3+e}function av(e,t,n,o=null){const M=new Date(e),c={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};o&&(c.timeZone=o);const b={timeZoneName:t,...c},z=new Intl.DateTimeFormat(n,b).formatToParts(M).find(a=>a.type.toLowerCase()==="timezonename");return z?z.value:null}function sf(e,t){let n=parseInt(e,10);Number.isNaN(n)&&(n=0);const o=parseInt(t,10)||0,M=n<0||Object.is(n,-0)?-o:o;return n*60+M}function sv(e){const t=Number(e);if(typeof e=="boolean"||e===""||Number.isNaN(t))throw new G2(`Invalid unit value ${e}`);return t}function uA(e,t){const n={};for(const o in e)if(sz(e,o)){const M=e[o];if(M==null)continue;n[t(o)]=sv(M)}return n}function nO(e,t){const n=Math.trunc(Math.abs(e/60)),o=Math.trunc(Math.abs(e%60)),M=e>=0?"+":"-";switch(t){case"short":return`${M}${Rt(n,2)}:${Rt(o,2)}`;case"narrow":return`${M}${n}${o>0?`:${o}`:""}`;case"techie":return`${M}${Rt(n,2)}${Rt(o,2)}`;default:throw new RangeError(`Value format ${t} is out of range for property format`)}}function Of(e){return m_(e,["hour","minute","second","millisecond"])}const R_=["January","February","March","April","May","June","July","August","September","October","November","December"],Ov=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],y_=["J","F","M","A","M","J","J","A","S","O","N","D"];function uv(e){switch(e){case"narrow":return[...y_];case"short":return[...Ov];case"long":return[...R_];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}const lv=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],Av=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],L_=["M","T","W","T","F","S","S"];function fv(e){switch(e){case"narrow":return[...L_];case"short":return[...Av];case"long":return[...lv];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}const dv=["AM","PM"],v_=["Before Christ","Anno Domini"],N_=["BC","AD"],w_=["B","A"];function qv(e){switch(e){case"narrow":return[...w_];case"short":return[...N_];case"long":return[...v_];default:return null}}function D_(e){return dv[e.hour<12?0:1]}function B_(e,t){return fv(t)[e.weekday-1]}function T_(e,t){return uv(t)[e.month-1]}function __(e,t){return qv(t)[e.year<0?0:1]}function E_(e,t,n="always",o=!1){const M={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},c=["hours","minutes","seconds"].indexOf(e)===-1;if(n==="auto"&&c){const l=e==="days";switch(t){case 1:return l?"tomorrow":`next ${M[e][0]}`;case-1:return l?"yesterday":`last ${M[e][0]}`;case 0:return l?"today":`this ${M[e][0]}`}}const b=Object.is(t,-0)||t<0,z=Math.abs(t),a=z===1,s=M[e],u=o?a?s[1]:s[2]||s[1]:a?M[e][0]:e;return b?`${z} ${u} ago`:`in ${z} ${u}`}function RR(e,t){let n="";for(const o of e)o.literal?n+=o.val:n+=t(o.val);return n}const S_={D:aA,DD:HL,DDD:YL,DDDD:jL,t:VL,tt:GL,ttt:KL,tttt:ZL,T:JL,TT:QL,TTT:ev,TTTT:tv,f:nv,ff:rv,fff:iv,ffff:bv,F:ov,FF:Mv,FFF:cv,FFFF:pv};class qn{static create(t,n={}){return new qn(t,n)}static parseFormat(t){let n=null,o="",M=!1;const c=[];for(let b=0;b<t.length;b++){const z=t.charAt(b);z==="'"?(o.length>0&&c.push({literal:M||/^\s+$/.test(o),val:o}),n=null,o="",M=!M):M||z===n?o+=z:(o.length>0&&c.push({literal:/^\s+$/.test(o),val:o}),o=z,n=z)}return o.length>0&&c.push({literal:M||/^\s+$/.test(o),val:o}),c}static macroTokenToFormatOpts(t){return S_[t]}constructor(t,n){this.opts=n,this.loc=t,this.systemLoc=null}formatWithSystemDefault(t,n){return this.systemLoc===null&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(t,{...this.opts,...n}).format()}dtFormatter(t,n={}){return this.loc.dtFormatter(t,{...this.opts,...n})}formatDateTime(t,n){return this.dtFormatter(t,n).format()}formatDateTimeParts(t,n){return this.dtFormatter(t,n).formatToParts()}formatInterval(t,n){return this.dtFormatter(t.start,n).dtf.formatRange(t.start.toJSDate(),t.end.toJSDate())}resolvedOptions(t,n){return this.dtFormatter(t,n).resolvedOptions()}num(t,n=0){if(this.opts.forceSimple)return Rt(t,n);const o={...this.opts};return n>0&&(o.padTo=n),this.loc.numberFormatter(o).format(t)}formatDateTimeFromString(t,n){const o=this.loc.listingMode()==="en",M=this.loc.outputCalendar&&this.loc.outputCalendar!=="gregory",c=(d,W)=>this.loc.extract(t,d,W),b=d=>t.isOffsetFixed&&t.offset===0&&d.allowZ?"Z":t.isValid?t.zone.formatOffset(t.ts,d.format):"",z=()=>o?D_(t):c({hour:"numeric",hourCycle:"h12"},"dayperiod"),a=(d,W)=>o?T_(t,d):c(W?{month:d}:{month:d,day:"numeric"},"month"),s=(d,W)=>o?B_(t,d):c(W?{weekday:d}:{weekday:d,month:"long",day:"numeric"},"weekday"),u=d=>{const W=qn.macroTokenToFormatOpts(d);return W?this.formatWithSystemDefault(t,W):d},l=d=>o?__(t,d):c({era:d},"era"),A=d=>{switch(d){case"S":return this.num(t.millisecond);case"u":case"SSS":return this.num(t.millisecond,3);case"s":return this.num(t.second);case"ss":return this.num(t.second,2);case"uu":return this.num(Math.floor(t.millisecond/10),2);case"uuu":return this.num(Math.floor(t.millisecond/100));case"m":return this.num(t.minute);case"mm":return this.num(t.minute,2);case"h":return this.num(t.hour%12===0?12:t.hour%12);case"hh":return this.num(t.hour%12===0?12:t.hour%12,2);case"H":return this.num(t.hour);case"HH":return this.num(t.hour,2);case"Z":return b({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return b({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return b({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return t.zone.offsetName(t.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return t.zone.offsetName(t.ts,{format:"long",locale:this.loc.locale});case"z":return t.zoneName;case"a":return z();case"d":return M?c({day:"numeric"},"day"):this.num(t.day);case"dd":return M?c({day:"2-digit"},"day"):this.num(t.day,2);case"c":return this.num(t.weekday);case"ccc":return s("short",!0);case"cccc":return s("long",!0);case"ccccc":return s("narrow",!0);case"E":return this.num(t.weekday);case"EEE":return s("short",!1);case"EEEE":return s("long",!1);case"EEEEE":return s("narrow",!1);case"L":return M?c({month:"numeric",day:"numeric"},"month"):this.num(t.month);case"LL":return M?c({month:"2-digit",day:"numeric"},"month"):this.num(t.month,2);case"LLL":return a("short",!0);case"LLLL":return a("long",!0);case"LLLLL":return a("narrow",!0);case"M":return M?c({month:"numeric"},"month"):this.num(t.month);case"MM":return M?c({month:"2-digit"},"month"):this.num(t.month,2);case"MMM":return a("short",!1);case"MMMM":return a("long",!1);case"MMMMM":return a("narrow",!1);case"y":return M?c({year:"numeric"},"year"):this.num(t.year);case"yy":return M?c({year:"2-digit"},"year"):this.num(t.year.toString().slice(-2),2);case"yyyy":return M?c({year:"numeric"},"year"):this.num(t.year,4);case"yyyyyy":return M?c({year:"numeric"},"year"):this.num(t.year,6);case"G":return l("short");case"GG":return l("long");case"GGGGG":return l("narrow");case"kk":return this.num(t.weekYear.toString().slice(-2),2);case"kkkk":return this.num(t.weekYear,4);case"W":return this.num(t.weekNumber);case"WW":return this.num(t.weekNumber,2);case"o":return this.num(t.ordinal);case"ooo":return this.num(t.ordinal,3);case"q":return this.num(t.quarter);case"qq":return this.num(t.quarter,2);case"X":return this.num(Math.floor(t.ts/1e3));case"x":return this.num(t.ts);default:return u(d)}};return RR(qn.parseFormat(n),A)}formatDurationFromString(t,n){const o=a=>{switch(a[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"M":return"month";case"y":return"year";default:return null}},M=a=>s=>{const u=o(s);return u?this.num(a.get(u),s.length):s},c=qn.parseFormat(n),b=c.reduce((a,{literal:s,val:u})=>s?a:a.concat(u),[]),z=t.shiftTo(...b.map(o).filter(a=>a));return RR(c,M(z))}}class ko{constructor(t,n){this.reason=t,this.explanation=n}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}}const hv=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function Bz(...e){const t=e.reduce((n,o)=>n+o.source,"");return RegExp(`^${t}$`)}function Tz(...e){return t=>e.reduce(([n,o,M],c)=>{const[b,z,a]=c(t,M);return[{...n,...b},z||o,a]},[{},null,1]).slice(0,2)}function _z(e,...t){if(e==null)return[null,null];for(const[n,o]of t){const M=n.exec(e);if(M)return o(M)}return[null,null]}function Wv(...e){return(t,n)=>{const o={};let M;for(M=0;M<e.length;M++)o[e[M]]=di(t[n+M]);return[o,null,n+M]}}const mv=/(?:(Z)|([+-]\d\d)(?::?(\d\d))?)/,k_=`(?:${mv.source}?(?:\\[(${hv.source})\\])?)?`,um=/(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/,gv=RegExp(`${um.source}${k_}`),lm=RegExp(`(?:T${gv.source})?`),X_=/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,C_=/(\d{4})-?W(\d\d)(?:-?(\d))?/,x_=/(\d{4})-?(\d{3})/,F_=Wv("weekYear","weekNumber","weekDay"),I_=Wv("year","ordinal"),P_=/(\d{4})-(\d\d)-(\d\d)/,Rv=RegExp(`${um.source} ?(?:${mv.source}|(${hv.source}))?`),U_=RegExp(`(?: ${Rv.source})?`);function Jp(e,t,n){const o=e[t];return F1(o)?n:di(o)}function $_(e,t){return[{year:Jp(e,t),month:Jp(e,t+1,1),day:Jp(e,t+2,1)},null,t+3]}function Ez(e,t){return[{hours:Jp(e,t,0),minutes:Jp(e,t+1,0),seconds:Jp(e,t+2,0),milliseconds:sm(e[t+3])},null,t+4]}function PO(e,t){const n=!e[t]&&!e[t+1],o=sf(e[t+1],e[t+2]),M=n?null:Cn.instance(o);return[{},M,t+3]}function UO(e,t){const n=e[t]?hM.create(e[t]):null;return[{},n,t+1]}const H_=RegExp(`^T?${um.source}$`),Y_=/^-?P(?:(?:(-?\d{1,20}(?:\.\d{1,20})?)Y)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20}(?:\.\d{1,20})?)W)?(?:(-?\d{1,20}(?:\.\d{1,20})?)D)?(?:T(?:(-?\d{1,20}(?:\.\d{1,20})?)H)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,20}))?S)?)?)$/;function j_(e){const[t,n,o,M,c,b,z,a,s]=e,u=t[0]==="-",l=a&&a[0]==="-",A=(d,W=!1)=>d!==void 0&&(W||d&&u)?-d:d;return[{years:A(Xc(n)),months:A(Xc(o)),weeks:A(Xc(M)),days:A(Xc(c)),hours:A(Xc(b)),minutes:A(Xc(z)),seconds:A(Xc(a),a==="-0"),milliseconds:A(sm(s),l)}]}const V_={GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function Am(e,t,n,o,M,c,b){const z={year:t.length===2?_W(di(t)):di(t),month:Ov.indexOf(n)+1,day:di(o),hour:di(M),minute:di(c)};return b&&(z.second=di(b)),e&&(z.weekday=e.length>3?lv.indexOf(e)+1:Av.indexOf(e)+1),z}const G_=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function K_(e){const[,t,n,o,M,c,b,z,a,s,u,l]=e,A=Am(t,M,o,n,c,b,z);let d;return a?d=V_[a]:s?d=0:d=sf(u,l),[A,new Cn(d)]}function Z_(e){return e.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}const J_=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,Q_=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,e9=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function yR(e){const[,t,n,o,M,c,b,z]=e;return[Am(t,M,o,n,c,b,z),Cn.utcInstance]}function t9(e){const[,t,n,o,M,c,b,z]=e;return[Am(t,z,n,o,M,c,b),Cn.utcInstance]}const n9=Bz(X_,lm),o9=Bz(C_,lm),r9=Bz(x_,lm),M9=Bz(gv),yv=Tz($_,Ez,PO,UO),i9=Tz(F_,Ez,PO,UO),c9=Tz(I_,Ez,PO,UO),b9=Tz(Ez,PO,UO);function p9(e){return _z(e,[n9,yv],[o9,i9],[r9,c9],[M9,b9])}function z9(e){return _z(Z_(e),[G_,K_])}function a9(e){return _z(e,[J_,yR],[Q_,yR],[e9,t9])}function s9(e){return _z(e,[Y_,j_])}const O9=Tz(Ez);function u9(e){return _z(e,[H_,O9])}const l9=Bz(P_,U_),A9=Bz(Rv),f9=Tz(Ez,PO,UO);function d9(e){return _z(e,[l9,yv],[A9,f9])}const LR="Invalid Duration",Lv={weeks:{days:7,hours:7*24,minutes:7*24*60,seconds:7*24*60*60,milliseconds:7*24*60*60*1e3},days:{hours:24,minutes:24*60,seconds:24*60*60,milliseconds:24*60*60*1e3},hours:{minutes:60,seconds:60*60,milliseconds:60*60*1e3},minutes:{seconds:60,milliseconds:60*1e3},seconds:{milliseconds:1e3}},q9={years:{quarters:4,months:12,weeks:52,days:365,hours:365*24,minutes:365*24*60,seconds:365*24*60*60,milliseconds:365*24*60*60*1e3},quarters:{months:3,weeks:13,days:91,hours:91*24,minutes:91*24*60,seconds:91*24*60*60,milliseconds:91*24*60*60*1e3},months:{weeks:4,days:30,hours:30*24,minutes:30*24*60,seconds:30*24*60*60,milliseconds:30*24*60*60*1e3},...Lv},Y2=146097/400,kp=146097/4800,h9={years:{quarters:4,months:12,weeks:Y2/7,days:Y2,hours:Y2*24,minutes:Y2*24*60,seconds:Y2*24*60*60,milliseconds:Y2*24*60*60*1e3},quarters:{months:3,weeks:Y2/28,days:Y2/4,hours:Y2*24/4,minutes:Y2*24*60/4,seconds:Y2*24*60*60/4,milliseconds:Y2*24*60*60*1e3/4},months:{weeks:kp/7,days:kp,hours:kp*24,minutes:kp*24*60,seconds:kp*24*60*60,milliseconds:kp*24*60*60*1e3},...Lv},Uc=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],W9=Uc.slice(0).reverse();function zi(e,t,n=!1){const o={values:n?t.values:{...e.values,...t.values||{}},loc:e.loc.clone(t.loc),conversionAccuracy:t.conversionAccuracy||e.conversionAccuracy,matrix:t.matrix||e.matrix};return new b1(o)}function vv(e,t){let n=t.milliseconds??0;for(const o of W9.slice(1))t[o]&&(n+=t[o]*e[o].milliseconds);return n}function vR(e,t){const n=vv(e,t)<0?-1:1;Uc.reduceRight((o,M)=>{if(F1(t[M]))return o;if(o){const c=t[o]*n,b=e[M][o],z=Math.floor(c/b);t[M]+=z*n,t[o]-=z*b*n}return M},null),Uc.reduce((o,M)=>{if(F1(t[M]))return o;if(o){const c=t[o]%1;t[o]-=c,t[M]+=c*e[o][M]}return M},null)}function m9(e){const t={};for(const[n,o]of Object.entries(e))o!==0&&(t[n]=o);return t}let b1=class Qt{constructor(t){const n=t.conversionAccuracy==="longterm"||!1;let o=n?h9:q9;t.matrix&&(o=t.matrix),this.values=t.values,this.loc=t.loc||gt.create(),this.conversionAccuracy=n?"longterm":"casual",this.invalid=t.invalid||null,this.matrix=o,this.isLuxonDuration=!0}static fromMillis(t,n){return Qt.fromObject({milliseconds:t},n)}static fromObject(t,n={}){if(t==null||typeof t!="object")throw new G2(`Duration.fromObject: argument expected to be an object, got ${t===null?"null":typeof t}`);return new Qt({values:uA(t,Qt.normalizeUnit),loc:gt.fromObject(n),conversionAccuracy:n.conversionAccuracy,matrix:n.matrix})}static fromDurationLike(t){if(Gc(t))return Qt.fromMillis(t);if(Qt.isDuration(t))return t;if(typeof t=="object")return Qt.fromObject(t);throw new G2(`Unknown duration argument ${t} of type ${typeof t}`)}static fromISO(t,n){const[o]=s9(t);return o?Qt.fromObject(o,n):Qt.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static fromISOTime(t,n){const[o]=u9(t);return o?Qt.fromObject(o,n):Qt.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static invalid(t,n=null){if(!t)throw new G2("need to specify a reason the Duration is invalid");const o=t instanceof ko?t:new ko(t,n);if(mt.throwOnInvalid)throw new QT(o);return new Qt({invalid:o})}static normalizeUnit(t){const n={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[t&&t.toLowerCase()];if(!n)throw new $L(t);return n}static isDuration(t){return t&&t.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(t,n={}){const o={...n,floor:n.round!==!1&&n.floor!==!1};return this.isValid?qn.create(this.loc,o).formatDurationFromString(this,t):LR}toHuman(t={}){if(!this.isValid)return LR;const n=Uc.map(o=>{const M=this.values[o];return F1(M)?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...t,unit:o.slice(0,-1)}).format(M)}).filter(o=>o);return this.loc.listFormatter({type:"conjunction",style:t.listStyle||"narrow",...t}).format(n)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let t="P";return this.years!==0&&(t+=this.years+"Y"),(this.months!==0||this.quarters!==0)&&(t+=this.months+this.quarters*3+"M"),this.weeks!==0&&(t+=this.weeks+"W"),this.days!==0&&(t+=this.days+"D"),(this.hours!==0||this.minutes!==0||this.seconds!==0||this.milliseconds!==0)&&(t+="T"),this.hours!==0&&(t+=this.hours+"H"),this.minutes!==0&&(t+=this.minutes+"M"),(this.seconds!==0||this.milliseconds!==0)&&(t+=Om(this.seconds+this.milliseconds/1e3,3)+"S"),t==="P"&&(t+="T0S"),t}toISOTime(t={}){if(!this.isValid)return null;const n=this.toMillis();return n<0||n>=864e5?null:(t={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...t,includeOffset:!1},k1.fromMillis(n,{zone:"UTC"}).toISOTime(t))}toJSON(){return this.toISO()}toString(){return this.toISO()}toMillis(){return this.isValid?vv(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(t){if(!this.isValid)return this;const n=Qt.fromDurationLike(t),o={};for(const M of Uc)(sz(n.values,M)||sz(this.values,M))&&(o[M]=n.get(M)+this.get(M));return zi(this,{values:o},!0)}minus(t){if(!this.isValid)return this;const n=Qt.fromDurationLike(t);return this.plus(n.negate())}mapUnits(t){if(!this.isValid)return this;const n={};for(const o of Object.keys(this.values))n[o]=sv(t(this.values[o],o));return zi(this,{values:n},!0)}get(t){return this[Qt.normalizeUnit(t)]}set(t){if(!this.isValid)return this;const n={...this.values,...uA(t,Qt.normalizeUnit)};return zi(this,{values:n})}reconfigure({locale:t,numberingSystem:n,conversionAccuracy:o,matrix:M}={}){const b={loc:this.loc.clone({locale:t,numberingSystem:n}),matrix:M,conversionAccuracy:o};return zi(this,b)}as(t){return this.isValid?this.shiftTo(t).get(t):NaN}normalize(){if(!this.isValid)return this;const t=this.toObject();return vR(this.matrix,t),zi(this,{values:t},!0)}rescale(){if(!this.isValid)return this;const t=m9(this.normalize().shiftToAll().toObject());return zi(this,{values:t},!0)}shiftTo(...t){if(!this.isValid)return this;if(t.length===0)return this;t=t.map(b=>Qt.normalizeUnit(b));const n={},o={},M=this.toObject();let c;for(const b of Uc)if(t.indexOf(b)>=0){c=b;let z=0;for(const s in o)z+=this.matrix[s][b]*o[s],o[s]=0;Gc(M[b])&&(z+=M[b]);const a=Math.trunc(z);n[b]=a,o[b]=(z*1e3-a*1e3)/1e3}else Gc(M[b])&&(o[b]=M[b]);for(const b in o)o[b]!==0&&(n[c]+=b===c?o[b]:o[b]/this.matrix[c][b]);return vR(this.matrix,n),zi(this,{values:n},!0)}shiftToAll(){return this.isValid?this.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds"):this}negate(){if(!this.isValid)return this;const t={};for(const n of Object.keys(this.values))t[n]=this.values[n]===0?0:-this.values[n];return zi(this,{values:t},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(t){if(!this.isValid||!t.isValid||!this.loc.equals(t.loc))return!1;function n(o,M){return o===void 0||o===0?M===void 0||M===0:o===M}for(const o of Uc)if(!n(this.values[o],t.values[o]))return!1;return!0}};const Xp="Invalid Interval";function g9(e,t){return!e||!e.isValid?bt.invalid("missing or invalid start"):!t||!t.isValid?bt.invalid("missing or invalid end"):t<e?bt.invalid("end before start",`The end of an interval must be after its start, but you had start=${e.toISO()} and end=${t.toISO()}`):null}class bt{constructor(t){this.s=t.start,this.e=t.end,this.invalid=t.invalid||null,this.isLuxonInterval=!0}static invalid(t,n=null){if(!t)throw new G2("need to specify a reason the Interval is invalid");const o=t instanceof ko?t:new ko(t,n);if(mt.throwOnInvalid)throw new JT(o);return new bt({invalid:o})}static fromDateTimes(t,n){const o=Us(t),M=Us(n),c=g9(o,M);return c??new bt({start:o,end:M})}static after(t,n){const o=b1.fromDurationLike(n),M=Us(t);return bt.fromDateTimes(M,M.plus(o))}static before(t,n){const o=b1.fromDurationLike(n),M=Us(t);return bt.fromDateTimes(M.minus(o),M)}static fromISO(t,n){const[o,M]=(t||"").split("/",2);if(o&&M){let c,b;try{c=k1.fromISO(o,n),b=c.isValid}catch{b=!1}let z,a;try{z=k1.fromISO(M,n),a=z.isValid}catch{a=!1}if(b&&a)return bt.fromDateTimes(c,z);if(b){const s=b1.fromISO(M,n);if(s.isValid)return bt.after(c,s)}else if(a){const s=b1.fromISO(o,n);if(s.isValid)return bt.before(z,s)}}return bt.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static isInterval(t){return t&&t.isLuxonInterval||!1}get start(){return this.isValid?this.s:null}get end(){return this.isValid?this.e:null}get isValid(){return this.invalidReason===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}length(t="milliseconds"){return this.isValid?this.toDuration(t).get(t):NaN}count(t="milliseconds"){if(!this.isValid)return NaN;const n=this.start.startOf(t),o=this.end.startOf(t);return Math.floor(o.diff(n,t).get(t))+(o.valueOf()!==this.end.valueOf())}hasSame(t){return this.isValid?this.isEmpty()||this.e.minus(1).hasSame(this.s,t):!1}isEmpty(){return this.s.valueOf()===this.e.valueOf()}isAfter(t){return this.isValid?this.s>t:!1}isBefore(t){return this.isValid?this.e<=t:!1}contains(t){return this.isValid?this.s<=t&&this.e>t:!1}set({start:t,end:n}={}){return this.isValid?bt.fromDateTimes(t||this.s,n||this.e):this}splitAt(...t){if(!this.isValid)return[];const n=t.map(Us).filter(b=>this.contains(b)).sort(),o=[];let{s:M}=this,c=0;for(;M<this.e;){const b=n[c]||this.e,z=+b>+this.e?this.e:b;o.push(bt.fromDateTimes(M,z)),M=z,c+=1}return o}splitBy(t){const n=b1.fromDurationLike(t);if(!this.isValid||!n.isValid||n.as("milliseconds")===0)return[];let{s:o}=this,M=1,c;const b=[];for(;o<this.e;){const z=this.start.plus(n.mapUnits(a=>a*M));c=+z>+this.e?this.e:z,b.push(bt.fromDateTimes(o,c)),o=c,M+=1}return b}divideEqually(t){return this.isValid?this.splitBy(this.length()/t).slice(0,t):[]}overlaps(t){return this.e>t.s&&this.s<t.e}abutsStart(t){return this.isValid?+this.e==+t.s:!1}abutsEnd(t){return this.isValid?+t.e==+this.s:!1}engulfs(t){return this.isValid?this.s<=t.s&&this.e>=t.e:!1}equals(t){return!this.isValid||!t.isValid?!1:this.s.equals(t.s)&&this.e.equals(t.e)}intersection(t){if(!this.isValid)return this;const n=this.s>t.s?this.s:t.s,o=this.e<t.e?this.e:t.e;return n>=o?null:bt.fromDateTimes(n,o)}union(t){if(!this.isValid)return this;const n=this.s<t.s?this.s:t.s,o=this.e>t.e?this.e:t.e;return bt.fromDateTimes(n,o)}static merge(t){const[n,o]=t.sort((M,c)=>M.s-c.s).reduce(([M,c],b)=>c?c.overlaps(b)||c.abutsStart(b)?[M,c.union(b)]:[M.concat([c]),b]:[M,b],[[],null]);return o&&n.push(o),n}static xor(t){let n=null,o=0;const M=[],c=t.map(a=>[{time:a.s,type:"s"},{time:a.e,type:"e"}]),b=Array.prototype.concat(...c),z=b.sort((a,s)=>a.time-s.time);for(const a of z)o+=a.type==="s"?1:-1,o===1?n=a.time:(n&&+n!=+a.time&&M.push(bt.fromDateTimes(n,a.time)),n=null);return bt.merge(M)}difference(...t){return bt.xor([this].concat(t)).map(n=>this.intersection(n)).filter(n=>n&&!n.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} – ${this.e.toISO()})`:Xp}toLocaleString(t=aA,n={}){return this.isValid?qn.create(this.s.loc.clone(n),t).formatInterval(this):Xp}toISO(t){return this.isValid?`${this.s.toISO(t)}/${this.e.toISO(t)}`:Xp}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:Xp}toISOTime(t){return this.isValid?`${this.s.toISOTime(t)}/${this.e.toISOTime(t)}`:Xp}toFormat(t,{separator:n=" – "}={}){return this.isValid?`${this.s.toFormat(t)}${n}${this.e.toFormat(t)}`:Xp}toDuration(t,n){return this.isValid?this.e.diff(this.s,t,n):b1.invalid(this.invalidReason)}mapEndpoints(t){return bt.fromDateTimes(t(this.s),t(this.e))}}let gl=class{static hasDST(t=mt.defaultZone){const n=k1.now().setZone(t).set({month:12});return!t.isUniversal&&n.offset!==n.set({month:6}).offset}static isValidIANAZone(t){return hM.isValidZone(t)}static normalizeZone(t){return Wi(t,mt.defaultZone)}static months(t="long",{locale:n=null,numberingSystem:o=null,locObj:M=null,outputCalendar:c="gregory"}={}){return(M||gt.create(n,o,c)).months(t)}static monthsFormat(t="long",{locale:n=null,numberingSystem:o=null,locObj:M=null,outputCalendar:c="gregory"}={}){return(M||gt.create(n,o,c)).months(t,!0)}static weekdays(t="long",{locale:n=null,numberingSystem:o=null,locObj:M=null}={}){return(M||gt.create(n,o,null)).weekdays(t)}static weekdaysFormat(t="long",{locale:n=null,numberingSystem:o=null,locObj:M=null}={}){return(M||gt.create(n,o,null)).weekdays(t,!0)}static meridiems({locale:t=null}={}){return gt.create(t).meridiems()}static eras(t="short",{locale:n=null}={}){return gt.create(n,null,"gregory").eras(t)}static features(){return{relative:zv()}}};function NR(e,t){const n=M=>M.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),o=n(t)-n(e);return Math.floor(b1.fromMillis(o).as("days"))}function R9(e,t,n){const o=[["years",(a,s)=>s.year-a.year],["quarters",(a,s)=>s.quarter-a.quarter+(s.year-a.year)*4],["months",(a,s)=>s.month-a.month+(s.year-a.year)*12],["weeks",(a,s)=>{const u=NR(a,s);return(u-u%7)/7}],["days",NR]],M={},c=e;let b,z;for(const[a,s]of o)n.indexOf(a)>=0&&(b=a,M[a]=s(e,t),z=c.plus(M),z>t?(M[a]--,e=c.plus(M),e>t&&(z=e,M[a]--,e=c.plus(M))):e=z);return[e,M,z,b]}function y9(e,t,n,o){let[M,c,b,z]=R9(e,t,n);const a=t-M,s=n.filter(l=>["hours","minutes","seconds","milliseconds"].indexOf(l)>=0);s.length===0&&(b<t&&(b=M.plus({[z]:1})),b!==M&&(c[z]=(c[z]||0)+a/(b-M)));const u=b1.fromObject(c,o);return s.length>0?b1.fromMillis(a,o).shiftTo(...s).plus(u):u}const fm={arab:"[٠-٩]",arabext:"[۰-۹]",bali:"[᭐-᭙]",beng:"[০-৯]",deva:"[०-९]",fullwide:"[0-9]",gujr:"[૦-૯]",hanidec:"[〇|一|二|三|四|五|六|七|八|九]",khmr:"[០-៩]",knda:"[೦-೯]",laoo:"[໐-໙]",limb:"[᥆-᥏]",mlym:"[൦-൯]",mong:"[᠐-᠙]",mymr:"[၀-၉]",orya:"[୦-୯]",tamldec:"[௦-௯]",telu:"[౦-౯]",thai:"[๐-๙]",tibt:"[༠-༩]",latn:"\\d"},wR={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},L9=fm.hanidec.replace(/[\[|\]]/g,"").split("");function v9(e){let t=parseInt(e,10);if(isNaN(t)){t="";for(let n=0;n<e.length;n++){const o=e.charCodeAt(n);if(e[n].search(fm.hanidec)!==-1)t+=L9.indexOf(e[n]);else for(const M in wR){const[c,b]=wR[M];o>=c&&o<=b&&(t+=o-c)}}return parseInt(t,10)}else return t}function Do({numberingSystem:e},t=""){return new RegExp(`${fm[e||"latn"]}${t}`)}const N9="missing Intl.DateTimeFormat.formatToParts support";function pe(e,t=n=>n){return{regex:e,deser:([n])=>t(v9(n))}}const w9=" ",Nv=`[ ${w9}]`,wv=new RegExp(Nv,"g");function D9(e){return e.replace(/\./g,"\\.?").replace(wv,Nv)}function DR(e){return e.replace(/\./g,"").replace(wv," ").toLowerCase()}function Bo(e,t){return e===null?null:{regex:RegExp(e.map(D9).join("|")),deser:([n])=>e.findIndex(o=>DR(n)===DR(o))+t}}function BR(e,t){return{regex:e,deser:([,n,o])=>sf(n,o),groups:t}}function Rl(e){return{regex:e,deser:([t])=>t}}function B9(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function T9(e,t){const n=Do(t),o=Do(t,"{2}"),M=Do(t,"{3}"),c=Do(t,"{4}"),b=Do(t,"{6}"),z=Do(t,"{1,2}"),a=Do(t,"{1,3}"),s=Do(t,"{1,6}"),u=Do(t,"{1,9}"),l=Do(t,"{2,4}"),A=Do(t,"{4,6}"),d=L=>({regex:RegExp(B9(L.val)),deser:([R])=>R,literal:!0}),g=(L=>{if(e.literal)return d(L);switch(L.val){case"G":return Bo(t.eras("short"),0);case"GG":return Bo(t.eras("long"),0);case"y":return pe(s);case"yy":return pe(l,_W);case"yyyy":return pe(c);case"yyyyy":return pe(A);case"yyyyyy":return pe(b);case"M":return pe(z);case"MM":return pe(o);case"MMM":return Bo(t.months("short",!0),1);case"MMMM":return Bo(t.months("long",!0),1);case"L":return pe(z);case"LL":return pe(o);case"LLL":return Bo(t.months("short",!1),1);case"LLLL":return Bo(t.months("long",!1),1);case"d":return pe(z);case"dd":return pe(o);case"o":return pe(a);case"ooo":return pe(M);case"HH":return pe(o);case"H":return pe(z);case"hh":return pe(o);case"h":return pe(z);case"mm":return pe(o);case"m":return pe(z);case"q":return pe(z);case"qq":return pe(o);case"s":return pe(z);case"ss":return pe(o);case"S":return pe(a);case"SSS":return pe(M);case"u":return Rl(u);case"uu":return Rl(z);case"uuu":return pe(n);case"a":return Bo(t.meridiems(),0);case"kkkk":return pe(c);case"kk":return pe(l,_W);case"W":return pe(z);case"WW":return pe(o);case"E":case"c":return pe(n);case"EEE":return Bo(t.weekdays("short",!1),1);case"EEEE":return Bo(t.weekdays("long",!1),1);case"ccc":return Bo(t.weekdays("short",!0),1);case"cccc":return Bo(t.weekdays("long",!0),1);case"Z":case"ZZ":return BR(new RegExp(`([+-]${z.source})(?::(${o.source}))?`),2);case"ZZZ":return BR(new RegExp(`([+-]${z.source})(${o.source})?`),2);case"z":return Rl(/[a-z_+-/]{1,256}?/i);case" ":return Rl(/[^\S\n\r]/);default:return d(L)}})(e)||{invalidReason:N9};return g.token=e,g}const _9={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour12:{numeric:"h","2-digit":"hh"},hour24:{numeric:"H","2-digit":"HH"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"},timeZoneName:{long:"ZZZZZ",short:"ZZZ"}};function E9(e,t,n){const{type:o,value:M}=e;if(o==="literal"){const a=/^\s+$/.test(M);return{literal:!a,val:a?" ":M}}const c=t[o];let b=o;o==="hour"&&(t.hour12!=null?b=t.hour12?"hour12":"hour24":t.hourCycle!=null?t.hourCycle==="h11"||t.hourCycle==="h12"?b="hour12":b="hour24":b=n.hour12?"hour12":"hour24");let z=_9[b];if(typeof z=="object"&&(z=z[c]),z)return{literal:!1,val:z}}function S9(e){return[`^${e.map(n=>n.regex).reduce((n,o)=>`${n}(${o.source})`,"")}$`,e]}function k9(e,t,n){const o=e.match(t);if(o){const M={};let c=1;for(const b in n)if(sz(n,b)){const z=n[b],a=z.groups?z.groups+1:1;!z.literal&&z.token&&(M[z.token.val[0]]=z.deser(o.slice(c,c+a))),c+=a}return[o,M]}else return[o,{}]}function X9(e){const t=c=>{switch(c){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}};let n=null,o;return F1(e.z)||(n=hM.create(e.z)),F1(e.Z)||(n||(n=new Cn(e.Z)),o=e.Z),F1(e.q)||(e.M=(e.q-1)*3+1),F1(e.h)||(e.h<12&&e.a===1?e.h+=12:e.h===12&&e.a===0&&(e.h=0)),e.G===0&&e.y&&(e.y=-e.y),F1(e.u)||(e.S=sm(e.u)),[Object.keys(e).reduce((c,b)=>{const z=t(b);return z&&(c[z]=e[b]),c},{}),n,o]}let xh=null;function C9(){return xh||(xh=k1.fromMillis(1555555555555)),xh}function x9(e,t){if(e.literal)return e;const n=qn.macroTokenToFormatOpts(e.val),o=Tv(n,t);return o==null||o.includes(void 0)?e:o}function Dv(e,t){return Array.prototype.concat(...e.map(n=>x9(n,t)))}function Bv(e,t,n){const o=Dv(qn.parseFormat(n),e),M=o.map(b=>T9(b,e)),c=M.find(b=>b.invalidReason);if(c)return{input:t,tokens:o,invalidReason:c.invalidReason};{const[b,z]=S9(M),a=RegExp(b,"i"),[s,u]=k9(t,a,z),[l,A,d]=u?X9(u):[null,null,void 0];if(sz(u,"a")&&sz(u,"H"))throw new Ks("Can't include meridiem when specifying 24-hour format");return{input:t,tokens:o,regex:a,rawMatches:s,matches:u,result:l,zone:A,specificOffset:d}}}function F9(e,t,n){const{result:o,zone:M,specificOffset:c,invalidReason:b}=Bv(e,t,n);return[o,M,c,b]}function Tv(e,t){if(!e)return null;const o=qn.create(t,e).dtFormatter(C9()),M=o.formatToParts(),c=o.resolvedOptions();return M.map(b=>E9(b,e,c))}const _v=[0,31,59,90,120,151,181,212,243,273,304,334],Ev=[0,31,60,91,121,152,182,213,244,274,305,335];function eo(e,t){return new ko("unit out of range",`you specified ${t} (of type ${typeof t}) as a ${e}, which is invalid`)}function Sv(e,t,n){const o=new Date(Date.UTC(e,t-1,n));e<100&&e>=0&&o.setUTCFullYear(o.getUTCFullYear()-1900);const M=o.getUTCDay();return M===0?7:M}function kv(e,t,n){return n+(IO(e)?Ev:_v)[t-1]}function Xv(e,t){const n=IO(e)?Ev:_v,o=n.findIndex(c=>c<t),M=t-n[o];return{month:o+1,day:M}}function EW(e){const{year:t,month:n,day:o}=e,M=kv(t,n,o),c=Sv(t,n,o);let b=Math.floor((M-c+10)/7),z;return b<1?(z=t-1,b=OA(z)):b>OA(t)?(z=t+1,b=1):z=t,{weekYear:z,weekNumber:b,weekday:c,...Of(e)}}function TR(e){const{weekYear:t,weekNumber:n,weekday:o}=e,M=Sv(t,1,4),c=tO(t);let b=n*7+o-M-3,z;b<1?(z=t-1,b+=tO(z)):b>c?(z=t+1,b-=tO(t)):z=t;const{month:a,day:s}=Xv(z,b);return{year:z,month:a,day:s,...Of(e)}}function Fh(e){const{year:t,month:n,day:o}=e,M=kv(t,n,o);return{year:t,ordinal:M,...Of(e)}}function _R(e){const{year:t,ordinal:n}=e,{month:o,day:M}=Xv(t,n);return{year:t,month:o,day:M,...Of(e)}}function I9(e){const t=zf(e.weekYear),n=bM(e.weekNumber,1,OA(e.weekYear)),o=bM(e.weekday,1,7);return t?n?o?!1:eo("weekday",e.weekday):eo("week",e.week):eo("weekYear",e.weekYear)}function P9(e){const t=zf(e.year),n=bM(e.ordinal,1,tO(e.year));return t?n?!1:eo("ordinal",e.ordinal):eo("year",e.year)}function Cv(e){const t=zf(e.year),n=bM(e.month,1,12),o=bM(e.day,1,sA(e.year,e.month));return t?n?o?!1:eo("day",e.day):eo("month",e.month):eo("year",e.year)}function xv(e){const{hour:t,minute:n,second:o,millisecond:M}=e,c=bM(t,0,23)||t===24&&n===0&&o===0&&M===0,b=bM(n,0,59),z=bM(o,0,59),a=bM(M,0,999);return c?b?z?a?!1:eo("millisecond",M):eo("second",o):eo("minute",n):eo("hour",t)}const Ih="Invalid DateTime",ER=864e13;function yl(e){return new ko("unsupported zone",`the zone "${e.name}" is not supported`)}function Ph(e){return e.weekData===null&&(e.weekData=EW(e.c)),e.weekData}function Cc(e,t){const n={ts:e.ts,zone:e.zone,c:e.c,o:e.o,loc:e.loc,invalid:e.invalid};return new k1({...n,...t,old:n})}function Fv(e,t,n){let o=e-t*60*1e3;const M=n.offset(o);if(t===M)return[o,t];o-=(M-t)*60*1e3;const c=n.offset(o);return M===c?[o,M]:[e-Math.min(M,c)*60*1e3,Math.max(M,c)]}function Ll(e,t){e+=t*60*1e3;const n=new Date(e);return{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate(),hour:n.getUTCHours(),minute:n.getUTCMinutes(),second:n.getUTCSeconds(),millisecond:n.getUTCMilliseconds()}}function Ul(e,t,n){return Fv(af(e),t,n)}function SR(e,t){const n=e.o,o=e.c.year+Math.trunc(t.years),M=e.c.month+Math.trunc(t.months)+Math.trunc(t.quarters)*3,c={...e.c,year:o,month:M,day:Math.min(e.c.day,sA(o,M))+Math.trunc(t.days)+Math.trunc(t.weeks)*7},b=b1.fromObject({years:t.years-Math.trunc(t.years),quarters:t.quarters-Math.trunc(t.quarters),months:t.months-Math.trunc(t.months),weeks:t.weeks-Math.trunc(t.weeks),days:t.days-Math.trunc(t.days),hours:t.hours,minutes:t.minutes,seconds:t.seconds,milliseconds:t.milliseconds}).as("milliseconds"),z=af(c);let[a,s]=Fv(z,n,e.zone);return b!==0&&(a+=b,s=e.zone.offset(a)),{ts:a,o:s}}function Ps(e,t,n,o,M,c){const{setZone:b,zone:z}=n;if(e&&Object.keys(e).length!==0||t){const a=t||z,s=k1.fromObject(e,{...n,zone:a,specificOffset:c});return b?s:s.setZone(z)}else return k1.invalid(new ko("unparsable",`the input "${M}" can't be parsed as ${o}`))}function vl(e,t,n=!0){return e.isValid?qn.create(gt.create("en-US"),{allowZ:n,forceSimple:!0}).formatDateTimeFromString(e,t):null}function Uh(e,t){const n=e.c.year>9999||e.c.year<0;let o="";return n&&e.c.year>=0&&(o+="+"),o+=Rt(e.c.year,n?6:4),t?(o+="-",o+=Rt(e.c.month),o+="-",o+=Rt(e.c.day)):(o+=Rt(e.c.month),o+=Rt(e.c.day)),o}function kR(e,t,n,o,M,c){let b=Rt(e.c.hour);return t?(b+=":",b+=Rt(e.c.minute),(e.c.millisecond!==0||e.c.second!==0||!n)&&(b+=":")):b+=Rt(e.c.minute),(e.c.millisecond!==0||e.c.second!==0||!n)&&(b+=Rt(e.c.second),(e.c.millisecond!==0||!o)&&(b+=".",b+=Rt(e.c.millisecond,3))),M&&(e.isOffsetFixed&&e.offset===0&&!c?b+="Z":e.o<0?(b+="-",b+=Rt(Math.trunc(-e.o/60)),b+=":",b+=Rt(Math.trunc(-e.o%60))):(b+="+",b+=Rt(Math.trunc(e.o/60)),b+=":",b+=Rt(Math.trunc(e.o%60)))),c&&(b+="["+e.zone.ianaName+"]"),b}const Iv={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},U9={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},$9={ordinal:1,hour:0,minute:0,second:0,millisecond:0},Pv=["year","month","day","hour","minute","second","millisecond"],H9=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],Y9=["year","ordinal","hour","minute","second","millisecond"];function XR(e){const t={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[e.toLowerCase()];if(!t)throw new $L(e);return t}function CR(e,t){const n=Wi(t.zone,mt.defaultZone),o=gt.fromObject(t),M=mt.now();let c,b;if(F1(e.year))c=M;else{for(const s of Pv)F1(e[s])&&(e[s]=Iv[s]);const z=Cv(e)||xv(e);if(z)return k1.invalid(z);const a=n.offset(M);[c,b]=Ul(e,a,n)}return new k1({ts:c,zone:n,loc:o,o:b})}function xR(e,t,n){const o=F1(n.round)?!0:n.round,M=(b,z)=>(b=Om(b,o||n.calendary?0:2,!0),t.loc.clone(n).relFormatter(n).format(b,z)),c=b=>n.calendary?t.hasSame(e,b)?0:t.startOf(b).diff(e.startOf(b),b).get(b):t.diff(e,b).get(b);if(n.unit)return M(c(n.unit),n.unit);for(const b of n.units){const z=c(b);if(Math.abs(z)>=1)return M(z,b)}return M(e>t?-0:0,n.units[n.units.length-1])}function FR(e){let t={},n;return e.length>0&&typeof e[e.length-1]=="object"?(t=e[e.length-1],n=Array.from(e).slice(0,e.length-1)):n=Array.from(e),[t,n]}let k1=class it{constructor(t){const n=t.zone||mt.defaultZone;let o=t.invalid||(Number.isNaN(t.ts)?new ko("invalid input"):null)||(n.isValid?null:yl(n));this.ts=F1(t.ts)?mt.now():t.ts;let M=null,c=null;if(!o)if(t.old&&t.old.ts===this.ts&&t.old.zone.equals(n))[M,c]=[t.old.c,t.old.o];else{const z=n.offset(this.ts);M=Ll(this.ts,z),o=Number.isNaN(M.year)?new ko("invalid input"):null,M=o?null:M,c=o?null:z}this._zone=n,this.loc=t.loc||gt.create(),this.invalid=o,this.weekData=null,this.c=M,this.o=c,this.isLuxonDateTime=!0}static now(){return new it({})}static local(){const[t,n]=FR(arguments),[o,M,c,b,z,a,s]=n;return CR({year:o,month:M,day:c,hour:b,minute:z,second:a,millisecond:s},t)}static utc(){const[t,n]=FR(arguments),[o,M,c,b,z,a,s]=n;return t.zone=Cn.utcInstance,CR({year:o,month:M,day:c,hour:b,minute:z,second:a,millisecond:s},t)}static fromJSDate(t,n={}){const o=h_(t)?t.valueOf():NaN;if(Number.isNaN(o))return it.invalid("invalid input");const M=Wi(n.zone,mt.defaultZone);return M.isValid?new it({ts:o,zone:M,loc:gt.fromObject(n)}):it.invalid(yl(M))}static fromMillis(t,n={}){if(Gc(t))return t<-ER||t>ER?it.invalid("Timestamp out of range"):new it({ts:t,zone:Wi(n.zone,mt.defaultZone),loc:gt.fromObject(n)});throw new G2(`fromMillis requires a numerical input, but received a ${typeof t} with value ${t}`)}static fromSeconds(t,n={}){if(Gc(t))return new it({ts:t*1e3,zone:Wi(n.zone,mt.defaultZone),loc:gt.fromObject(n)});throw new G2("fromSeconds requires a numerical input")}static fromObject(t,n={}){t=t||{};const o=Wi(n.zone,mt.defaultZone);if(!o.isValid)return it.invalid(yl(o));const M=mt.now(),c=F1(n.specificOffset)?o.offset(M):n.specificOffset,b=uA(t,XR),z=!F1(b.ordinal),a=!F1(b.year),s=!F1(b.month)||!F1(b.day),u=a||s,l=b.weekYear||b.weekNumber,A=gt.fromObject(n);if((u||z)&&l)throw new Ks("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(s&&z)throw new Ks("Can't mix ordinal dates with month/day");const d=l||b.weekday&&!u;let W,g,L=Ll(M,c);d?(W=H9,g=U9,L=EW(L)):z?(W=Y9,g=$9,L=Fh(L)):(W=Pv,g=Iv);let R=!1;for(const P of W){const J=b[P];F1(J)?R?b[P]=g[P]:b[P]=L[P]:R=!0}const E=d?I9(b):z?P9(b):Cv(b),k=E||xv(b);if(k)return it.invalid(k);const B=d?TR(b):z?_R(b):b,[I,S]=Ul(B,c,o),N=new it({ts:I,zone:o,o:S,loc:A});return b.weekday&&u&&t.weekday!==N.weekday?it.invalid("mismatched weekday",`you can't specify both a weekday of ${b.weekday} and a date of ${N.toISO()}`):N}static fromISO(t,n={}){const[o,M]=p9(t);return Ps(o,M,n,"ISO 8601",t)}static fromRFC2822(t,n={}){const[o,M]=z9(t);return Ps(o,M,n,"RFC 2822",t)}static fromHTTP(t,n={}){const[o,M]=a9(t);return Ps(o,M,n,"HTTP",n)}static fromFormat(t,n,o={}){if(F1(t)||F1(n))throw new G2("fromFormat requires an input string and a format");const{locale:M=null,numberingSystem:c=null}=o,b=gt.fromOpts({locale:M,numberingSystem:c,defaultToEN:!0}),[z,a,s,u]=F9(b,t,n);return u?it.invalid(u):Ps(z,a,o,`format ${n}`,t,s)}static fromString(t,n,o={}){return it.fromFormat(t,n,o)}static fromSQL(t,n={}){const[o,M]=d9(t);return Ps(o,M,n,"SQL",t)}static invalid(t,n=null){if(!t)throw new G2("need to specify a reason the DateTime is invalid");const o=t instanceof ko?t:new ko(t,n);if(mt.throwOnInvalid)throw new ZT(o);return new it({invalid:o})}static isDateTime(t){return t&&t.isLuxonDateTime||!1}static parseFormatForOpts(t,n={}){const o=Tv(t,gt.fromObject(n));return o?o.map(M=>M?M.val:null).join(""):null}static expandFormat(t,n={}){return Dv(qn.parseFormat(t),gt.fromObject(n)).map(M=>M.val).join("")}get(t){return this[t]}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?Ph(this).weekYear:NaN}get weekNumber(){return this.isValid?Ph(this).weekNumber:NaN}get weekday(){return this.isValid?Ph(this).weekday:NaN}get ordinal(){return this.isValid?Fh(this.c).ordinal:NaN}get monthShort(){return this.isValid?gl.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?gl.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?gl.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?gl.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return this.isOffsetFixed?!1:this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];const t=864e5,n=6e4,o=af(this.c),M=this.zone.offset(o-t),c=this.zone.offset(o+t),b=this.zone.offset(o-M*n),z=this.zone.offset(o-c*n);if(b===z)return[this];const a=o-b*n,s=o-z*n,u=Ll(a,b),l=Ll(s,z);return u.hour===l.hour&&u.minute===l.minute&&u.second===l.second&&u.millisecond===l.millisecond?[Cc(this,{ts:a}),Cc(this,{ts:s})]:[this]}get isInLeapYear(){return IO(this.year)}get daysInMonth(){return sA(this.year,this.month)}get daysInYear(){return this.isValid?tO(this.year):NaN}get weeksInWeekYear(){return this.isValid?OA(this.weekYear):NaN}resolvedLocaleOptions(t={}){const{locale:n,numberingSystem:o,calendar:M}=qn.create(this.loc.clone(t),t).resolvedOptions(this);return{locale:n,numberingSystem:o,outputCalendar:M}}toUTC(t=0,n={}){return this.setZone(Cn.instance(t),n)}toLocal(){return this.setZone(mt.defaultZone)}setZone(t,{keepLocalTime:n=!1,keepCalendarTime:o=!1}={}){if(t=Wi(t,mt.defaultZone),t.equals(this.zone))return this;if(t.isValid){let M=this.ts;if(n||o){const c=t.offset(this.ts),b=this.toObject();[M]=Ul(b,c,t)}return Cc(this,{ts:M,zone:t})}else return it.invalid(yl(t))}reconfigure({locale:t,numberingSystem:n,outputCalendar:o}={}){const M=this.loc.clone({locale:t,numberingSystem:n,outputCalendar:o});return Cc(this,{loc:M})}setLocale(t){return this.reconfigure({locale:t})}set(t){if(!this.isValid)return this;const n=uA(t,XR),o=!F1(n.weekYear)||!F1(n.weekNumber)||!F1(n.weekday),M=!F1(n.ordinal),c=!F1(n.year),b=!F1(n.month)||!F1(n.day),z=c||b,a=n.weekYear||n.weekNumber;if((z||M)&&a)throw new Ks("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(b&&M)throw new Ks("Can't mix ordinal dates with month/day");let s;o?s=TR({...EW(this.c),...n}):F1(n.ordinal)?(s={...this.toObject(),...n},F1(n.day)&&(s.day=Math.min(sA(s.year,s.month),s.day))):s=_R({...Fh(this.c),...n});const[u,l]=Ul(s,this.o,this.zone);return Cc(this,{ts:u,o:l})}plus(t){if(!this.isValid)return this;const n=b1.fromDurationLike(t);return Cc(this,SR(this,n))}minus(t){if(!this.isValid)return this;const n=b1.fromDurationLike(t).negate();return Cc(this,SR(this,n))}startOf(t){if(!this.isValid)return this;const n={},o=b1.normalizeUnit(t);switch(o){case"years":n.month=1;case"quarters":case"months":n.day=1;case"weeks":case"days":n.hour=0;case"hours":n.minute=0;case"minutes":n.second=0;case"seconds":n.millisecond=0;break}if(o==="weeks"&&(n.weekday=1),o==="quarters"){const M=Math.ceil(this.month/3);n.month=(M-1)*3+1}return this.set(n)}endOf(t){return this.isValid?this.plus({[t]:1}).startOf(t).minus(1):this}toFormat(t,n={}){return this.isValid?qn.create(this.loc.redefaultToEN(n)).formatDateTimeFromString(this,t):Ih}toLocaleString(t=aA,n={}){return this.isValid?qn.create(this.loc.clone(n),t).formatDateTime(this):Ih}toLocaleParts(t={}){return this.isValid?qn.create(this.loc.clone(t),t).formatDateTimeParts(this):[]}toISO({format:t="extended",suppressSeconds:n=!1,suppressMilliseconds:o=!1,includeOffset:M=!0,extendedZone:c=!1}={}){if(!this.isValid)return null;const b=t==="extended";let z=Uh(this,b);return z+="T",z+=kR(this,b,n,o,M,c),z}toISODate({format:t="extended"}={}){return this.isValid?Uh(this,t==="extended"):null}toISOWeekDate(){return vl(this,"kkkk-'W'WW-c")}toISOTime({suppressMilliseconds:t=!1,suppressSeconds:n=!1,includeOffset:o=!0,includePrefix:M=!1,extendedZone:c=!1,format:b="extended"}={}){return this.isValid?(M?"T":"")+kR(this,b==="extended",n,t,o,c):null}toRFC2822(){return vl(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)}toHTTP(){return vl(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss 'GMT'")}toSQLDate(){return this.isValid?Uh(this,!0):null}toSQLTime({includeOffset:t=!0,includeZone:n=!1,includeOffsetSpace:o=!0}={}){let M="HH:mm:ss.SSS";return(n||t)&&(o&&(M+=" "),n?M+="z":t&&(M+="ZZ")),vl(this,M,!0)}toSQL(t={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(t)}`:null}toString(){return this.isValid?this.toISO():Ih}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(t={}){if(!this.isValid)return{};const n={...this.c};return t.includeConfig&&(n.outputCalendar=this.outputCalendar,n.numberingSystem=this.loc.numberingSystem,n.locale=this.loc.locale),n}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(t,n="milliseconds",o={}){if(!this.isValid||!t.isValid)return b1.invalid("created by diffing an invalid DateTime");const M={locale:this.locale,numberingSystem:this.numberingSystem,...o},c=W_(n).map(b1.normalizeUnit),b=t.valueOf()>this.valueOf(),z=b?this:t,a=b?t:this,s=y9(z,a,c,M);return b?s.negate():s}diffNow(t="milliseconds",n={}){return this.diff(it.now(),t,n)}until(t){return this.isValid?bt.fromDateTimes(this,t):this}hasSame(t,n){if(!this.isValid)return!1;const o=t.valueOf(),M=this.setZone(t.zone,{keepLocalTime:!0});return M.startOf(n)<=o&&o<=M.endOf(n)}equals(t){return this.isValid&&t.isValid&&this.valueOf()===t.valueOf()&&this.zone.equals(t.zone)&&this.loc.equals(t.loc)}toRelative(t={}){if(!this.isValid)return null;const n=t.base||it.fromObject({},{zone:this.zone}),o=t.padding?this<n?-t.padding:t.padding:0;let M=["years","months","days","hours","minutes","seconds"],c=t.unit;return Array.isArray(t.unit)&&(M=t.unit,c=void 0),xR(n,this.plus(o),{...t,numeric:"always",units:M,unit:c})}toRelativeCalendar(t={}){return this.isValid?xR(t.base||it.fromObject({},{zone:this.zone}),this,{...t,numeric:"auto",units:["years","months","days"],calendary:!0}):null}static min(...t){if(!t.every(it.isDateTime))throw new G2("min requires all arguments be DateTimes");return gR(t,n=>n.valueOf(),Math.min)}static max(...t){if(!t.every(it.isDateTime))throw new G2("max requires all arguments be DateTimes");return gR(t,n=>n.valueOf(),Math.max)}static fromFormatExplain(t,n,o={}){const{locale:M=null,numberingSystem:c=null}=o,b=gt.fromOpts({locale:M,numberingSystem:c,defaultToEN:!0});return Bv(b,t,n)}static fromStringExplain(t,n,o={}){return it.fromFormatExplain(t,n,o)}static get DATE_SHORT(){return aA}static get DATE_MED(){return HL}static get DATE_MED_WITH_WEEKDAY(){return e_}static get DATE_FULL(){return YL}static get DATE_HUGE(){return jL}static get TIME_SIMPLE(){return VL}static get TIME_WITH_SECONDS(){return GL}static get TIME_WITH_SHORT_OFFSET(){return KL}static get TIME_WITH_LONG_OFFSET(){return ZL}static get TIME_24_SIMPLE(){return JL}static get TIME_24_WITH_SECONDS(){return QL}static get TIME_24_WITH_SHORT_OFFSET(){return ev}static get TIME_24_WITH_LONG_OFFSET(){return tv}static get DATETIME_SHORT(){return nv}static get DATETIME_SHORT_WITH_SECONDS(){return ov}static get DATETIME_MED(){return rv}static get DATETIME_MED_WITH_SECONDS(){return Mv}static get DATETIME_MED_WITH_WEEKDAY(){return t_}static get DATETIME_FULL(){return iv}static get DATETIME_FULL_WITH_SECONDS(){return cv}static get DATETIME_HUGE(){return bv}static get DATETIME_HUGE_WITH_SECONDS(){return pv}};function Us(e){if(k1.isDateTime(e))return e;if(e&&e.valueOf&&Gc(e.valueOf()))return k1.fromJSDate(e);if(e&&typeof e=="object")return k1.fromObject(e);throw new G2(`Unknown datetime argument: ${e}, of type ${typeof e}`)}const dm={renderNullAs:"\\-",taskCompletionTracking:!1,taskCompletionUseEmojiShorthand:!1,taskCompletionText:"completion",taskCompletionDateFormat:"yyyy-MM-dd",recursiveSubTaskCompletion:!1,warnOnEmptyResult:!0,refreshEnabled:!0,refreshInterval:2500,defaultDateFormat:"MMMM dd, yyyy",defaultDateTimeFormat:"h:mm a - MMMM dd, yyyy",maxRecursiveRenderDepth:4,tableIdColumnName:"File",tableGroupColumnName:"Group",showResultCount:!0},j9={allowHtml:!0};({...dm,...j9});class qm{constructor(t){Sn(this,"value");Sn(this,"successful");this.value=t,this.successful=!0}map(t){return new qm(t(this.value))}flatMap(t){return t(this.value)}mapErr(t){return this}bimap(t,n){return this.map(t)}orElse(t){return this.value}cast(){return this}orElseThrow(t){return this.value}}class hm{constructor(t){Sn(this,"error");Sn(this,"successful");this.error=t,this.successful=!1}map(t){return this}flatMap(t){return this}mapErr(t){return new hm(t(this.error))}bimap(t,n){return this.mapErr(n)}orElse(t){return t}cast(){return this}orElseThrow(t){throw t?new Error(t(this.error)):new Error(""+this.error)}}var lA;(function(e){function t(c){return new qm(c)}e.success=t;function n(c){return new hm(c)}e.failure=n;function o(c,b,z){return c.successful?b.successful?z(c.value,b.value):n(b.error):n(c.error)}e.flatMap2=o;function M(c,b,z){return o(c,b,(a,s)=>t(z(a,s)))}e.map2=M})(lA||(lA={}));var V9=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof e2<"u"?e2:typeof self<"u"?self:{},Uv={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(typeof self<"u"?self:V9,function(){return function(n){var o={};function M(c){if(o[c])return o[c].exports;var b=o[c]={i:c,l:!1,exports:{}};return n[c].call(b.exports,b,b.exports,M),b.l=!0,b.exports}return M.m=n,M.c=o,M.d=function(c,b,z){M.o(c,b)||Object.defineProperty(c,b,{configurable:!1,enumerable:!0,get:z})},M.r=function(c){Object.defineProperty(c,"__esModule",{value:!0})},M.n=function(c){var b=c&&c.__esModule?function(){return c.default}:function(){return c};return M.d(b,"a",b),b},M.o=function(c,b){return Object.prototype.hasOwnProperty.call(c,b)},M.p="",M(M.s=0)}([function(n,o,M){function c(T){if(!(this instanceof c))return new c(T);this._=T}var b=c.prototype;function z(T,G){for(var M0=0;M0<T;M0++)G(M0)}function a(T,G,M0){return function(l0,y0){z(y0.length,function(_0){l0(y0[_0],_0,y0)})}(function(l0,y0,_0){G=T(G,l0,y0,_0)},M0),G}function s(T,G){return a(function(M0,l0,y0,_0){return M0.concat([T(l0,y0,_0)])},[],G)}function u(T,G){var M0={v:0,buf:G};return z(T,function(){var l0;M0={v:M0.v<<1|(l0=M0.buf,l0[0]>>7),buf:function(y0){var _0=a(function(E0,c1,K1,$e){return E0.concat(K1===$e.length-1?Buffer.from([c1,0]).readUInt16BE(0):$e.readUInt16BE(K1))},[],y0);return Buffer.from(s(function(E0){return(E0<<1&65535)>>8},_0))}(M0.buf)}}),M0}function l(){return typeof Buffer<"u"}function A(){if(!l())throw new Error("Buffer global does not exist; please use webpack if you need to parse Buffers in the browser.")}function d(T){A();var G=a(function(_0,E0){return _0+E0},0,T);if(G%8!=0)throw new Error("The bits ["+T.join(", ")+"] add up to "+G+" which is not an even number of bytes; the total should be divisible by 8");var M0,l0=G/8,y0=(M0=function(_0){return _0>48},a(function(_0,E0){return _0||(M0(E0)?E0:_0)},null,T));if(y0)throw new Error(y0+" bit range requested exceeds 48 bit (6 byte) Number max.");return new c(function(_0,E0){var c1=l0+E0;return c1>_0.length?P(E0,l0.toString()+" bytes"):N(c1,a(function(K1,$e){var _e=u($e,K1.buf);return{coll:K1.coll.concat(_e.v),buf:_e.buf}},{coll:[],buf:_0.slice(E0,c1)},T).coll)})}function W(T,G){return new c(function(M0,l0){return A(),l0+G>M0.length?P(l0,G+" bytes for "+T):N(l0+G,M0.slice(l0,l0+G))})}function g(T,G){if(typeof(M0=G)!="number"||Math.floor(M0)!==M0||G<0||G>6)throw new Error(T+" requires integer length in range [0, 6].");var M0}function L(T){return g("uintBE",T),W("uintBE("+T+")",T).map(function(G){return G.readUIntBE(0,T)})}function R(T){return g("uintLE",T),W("uintLE("+T+")",T).map(function(G){return G.readUIntLE(0,T)})}function E(T){return g("intBE",T),W("intBE("+T+")",T).map(function(G){return G.readIntBE(0,T)})}function k(T){return g("intLE",T),W("intLE("+T+")",T).map(function(G){return G.readIntLE(0,T)})}function B(T){return T instanceof c}function I(T){return{}.toString.call(T)==="[object Array]"}function S(T){return l()&&Buffer.isBuffer(T)}function N(T,G){return{status:!0,index:T,value:G,furthest:-1,expected:[]}}function P(T,G){return I(G)||(G=[G]),{status:!1,index:-1,value:null,furthest:T,expected:G}}function J(T,G){if(!G||T.furthest>G.furthest)return T;var M0=T.furthest===G.furthest?function(l0,y0){if(function(){if(c._supportsSet!==void 0)return c._supportsSet;var ve=typeof Set<"u";return c._supportsSet=ve,ve}()&&Array.from){for(var _0=new Set(l0),E0=0;E0<y0.length;E0++)_0.add(y0[E0]);var c1=Array.from(_0);return c1.sort(),c1}for(var K1={},$e=0;$e<l0.length;$e++)K1[l0[$e]]=!0;for(var _e=0;_e<y0.length;_e++)K1[y0[_e]]=!0;var Et=[];for(var qe in K1)({}).hasOwnProperty.call(K1,qe)&&Et.push(qe);return Et.sort(),Et}(T.expected,G.expected):G.expected;return{status:T.status,index:T.index,value:T.value,furthest:G.furthest,expected:M0}}var K={};function V(T,G){if(S(T))return{offset:G,line:-1,column:-1};T in K||(K[T]={});for(var M0=K[T],l0=0,y0=0,_0=0,E0=G;E0>=0;){if(E0 in M0){l0=M0[E0].line,_0===0&&(_0=M0[E0].lineStart);break}(T.charAt(E0)===` +`||T.charAt(E0)==="\r"&&T.charAt(E0+1)!==` +`)&&(y0++,_0===0&&(_0=E0+1)),E0--}var c1=l0+y0,K1=G-_0;return M0[G]={line:c1,lineStart:_0},{offset:G,line:c1+1,column:K1+1}}function x(T){if(!B(T))throw new Error("not a parser: "+T)}function e0(T,G){return typeof T=="string"?T.charAt(G):T[G]}function Z(T){if(typeof T!="number")throw new Error("not a number: "+T)}function j(T){if(typeof T!="function")throw new Error("not a function: "+T)}function t0(T){if(typeof T!="string")throw new Error("not a string: "+T)}var O0=2,m0=3,q0=8,C=5*q0,z0=4*q0,d0=" ";function _(T,G){return new Array(G+1).join(T)}function D0(T,G,M0){var l0=G-T.length;return l0<=0?T:_(M0,l0)+T}function o0(T,G,M0,l0){return{from:T-G>0?T-G:0,to:T+M0>l0?l0:T+M0}}function i0(T,G){var M0,l0,y0,_0,E0,c1=G.index,K1=c1.offset,$e=1;if(K1===T.length)return"Got the end of the input";if(S(T)){var _e=K1-K1%q0,Et=K1-_e,qe=o0(_e,C,z0+q0,T.length),ve=s(function(Z1){return s(function(Jo){return D0(Jo.toString(16),2,"0")},Z1)},function(Z1,Jo){var Qo=Z1.length,so=[],yn=0;if(Qo<=Jo)return[Z1.slice()];for(var M2=0;M2<Qo;M2++)so[yn]||so.push([]),so[yn].push(Z1[M2]),(M2+1)%Jo==0&&yn++;return so}(T.slice(qe.from,qe.to).toJSON().data,q0));_0=function(Z1){return Z1.from===0&&Z1.to===1?{from:Z1.from,to:Z1.to}:{from:Z1.from/q0,to:Math.floor(Z1.to/q0)}}(qe),l0=_e/q0,M0=3*Et,Et>=4&&(M0+=1),$e=2,y0=s(function(Z1){return Z1.length<=4?Z1.join(" "):Z1.slice(0,4).join(" ")+" "+Z1.slice(4).join(" ")},ve),(E0=(8*(_0.to>0?_0.to-1:_0.to)).toString(16).length)<2&&(E0=2)}else{var T2=T.split(/\r\n|[\n\r\u2028\u2029]/);M0=c1.column-1,l0=c1.line-1,_0=o0(l0,O0,m0,T2.length),y0=T2.slice(_0.from,_0.to),E0=_0.to.toString().length}var r2=l0-_0.from;return S(T)&&(E0=(8*(_0.to>0?_0.to-1:_0.to)).toString(16).length)<2&&(E0=2),a(function(Z1,Jo,Qo){var so,yn=Qo===r2,M2=yn?"> ":d0;return so=S(T)?D0((8*(_0.from+Qo)).toString(16),E0,"0"):D0((_0.from+Qo+1).toString(),E0," "),[].concat(Z1,[M2+so+" | "+Jo],yn?[d0+_(" ",E0)+" | "+D0("",M0," ")+_("^",$e)]:[])},[],y0).join(` +`)}function c0(T,G){return[` +`,"-- PARSING FAILED "+_("-",50),` + +`,i0(T,G),` + +`,(M0=G.expected,M0.length===1?`Expected: + +`+M0[0]:`Expected one of the following: + +`+M0.join(", ")),` +`].join("");var M0}function s0(T){return T.flags!==void 0?T.flags:[T.global?"g":"",T.ignoreCase?"i":"",T.multiline?"m":"",T.unicode?"u":"",T.sticky?"y":""].join("")}function L0(){for(var T=[].slice.call(arguments),G=T.length,M0=0;M0<G;M0+=1)x(T[M0]);return c(function(l0,y0){for(var _0,E0=new Array(G),c1=0;c1<G;c1+=1){if(!(_0=J(T[c1]._(l0,y0),_0)).status)return _0;E0[c1]=_0.value,y0=_0.index}return J(N(y0,E0),_0)})}function G0(){var T=[].slice.call(arguments);if(T.length===0)throw new Error("seqMap needs at least one argument");var G=T.pop();return j(G),L0.apply(null,T).map(function(M0){return G.apply(null,M0)})}function p1(){var T=[].slice.call(arguments),G=T.length;if(G===0)return S0("zero alternates");for(var M0=0;M0<G;M0+=1)x(T[M0]);return c(function(l0,y0){for(var _0,E0=0;E0<T.length;E0+=1)if((_0=J(T[E0]._(l0,y0),_0)).status)return _0;return _0})}function n1(T,G){return $(T,G).or(g0([]))}function $(T,G){return x(T),x(G),G0(T,G.then(T).many(),function(M0,l0){return[M0].concat(l0)})}function n0(T){t0(T);var G="'"+T+"'";return c(function(M0,l0){var y0=l0+T.length,_0=M0.slice(l0,y0);return _0===T?N(y0,_0):P(l0,G)})}function p0(T,G){(function(y0){if(!(y0 instanceof RegExp))throw new Error("not a regexp: "+y0);for(var _0=s0(y0),E0=0;E0<_0.length;E0++){var c1=_0.charAt(E0);if(c1!=="i"&&c1!=="m"&&c1!=="u"&&c1!=="s")throw new Error('unsupported regexp flag "'+c1+'": '+y0)}})(T),arguments.length>=2?Z(G):G=0;var M0=function(y0){return RegExp("^(?:"+y0.source+")",s0(y0))}(T),l0=""+T;return c(function(y0,_0){var E0=M0.exec(y0.slice(_0));if(E0){if(0<=G&&G<=E0.length){var c1=E0[0],K1=E0[G];return N(_0+c1.length,K1)}return P(_0,"valid match group (0 to "+E0.length+") in "+l0)}return P(_0,l0)})}function g0(T){return c(function(G,M0){return N(M0,T)})}function S0(T){return c(function(G,M0){return P(M0,T)})}function K0(T){if(B(T))return c(function(G,M0){var l0=T._(G,M0);return l0.index=M0,l0.value="",l0});if(typeof T=="string")return K0(n0(T));if(T instanceof RegExp)return K0(p0(T));throw new Error("not a string, regexp, or parser: "+T)}function X(T){return x(T),c(function(G,M0){var l0=T._(G,M0),y0=G.slice(M0,l0.index);return l0.status?P(M0,'not "'+y0+'"'):N(M0,null)})}function j0(T){return j(T),c(function(G,M0){var l0=e0(G,M0);return M0<G.length&&T(l0)?N(M0+1,l0):P(M0,"a character/byte matching "+T)})}function U0(T,G){arguments.length<2&&(G=T,T=void 0);var M0=c(function(l0,y0){return M0._=G()._,M0._(l0,y0)});return T?M0.desc(T):M0}function T1(){return S0("fantasy-land/empty")}b.parse=function(T){if(typeof T!="string"&&!S(T))throw new Error(".parse must be called with a string or Buffer as its argument");var G,M0=this.skip(u0)._(T,0);return G=M0.status?{status:!0,value:M0.value}:{status:!1,index:V(T,M0.furthest),expected:M0.expected},delete K[T],G},b.tryParse=function(T){var G=this.parse(T);if(G.status)return G.value;var M0=c0(T,G),l0=new Error(M0);throw l0.type="ParsimmonError",l0.result=G,l0},b.assert=function(T,G){return this.chain(function(M0){return T(M0)?g0(M0):S0(G)})},b.or=function(T){return p1(this,T)},b.trim=function(T){return this.wrap(T,T)},b.wrap=function(T,G){return G0(T,this,G,function(M0,l0){return l0})},b.thru=function(T){return T(this)},b.then=function(T){return x(T),L0(this,T).map(function(G){return G[1]})},b.many=function(){var T=this;return c(function(G,M0){for(var l0=[],y0=void 0;;){if(!(y0=J(T._(G,M0),y0)).status)return J(N(M0,l0),y0);if(M0===y0.index)throw new Error("infinite loop detected in .many() parser --- calling .many() on a parser which can accept zero characters is usually the cause");M0=y0.index,l0.push(y0.value)}})},b.tieWith=function(T){return t0(T),this.map(function(G){if(function(y0){if(!I(y0))throw new Error("not an array: "+y0)}(G),G.length){t0(G[0]);for(var M0=G[0],l0=1;l0<G.length;l0++)t0(G[l0]),M0+=T+G[l0];return M0}return""})},b.tie=function(){return this.tieWith("")},b.times=function(T,G){var M0=this;return arguments.length<2&&(G=T),Z(T),Z(G),c(function(l0,y0){for(var _0=[],E0=void 0,c1=void 0,K1=0;K1<T;K1+=1){if(c1=J(E0=M0._(l0,y0),c1),!E0.status)return c1;y0=E0.index,_0.push(E0.value)}for(;K1<G&&(c1=J(E0=M0._(l0,y0),c1),E0.status);K1+=1)y0=E0.index,_0.push(E0.value);return J(N(y0,_0),c1)})},b.result=function(T){return this.map(function(){return T})},b.atMost=function(T){return this.times(0,T)},b.atLeast=function(T){return G0(this.times(T),this.many(),function(G,M0){return G.concat(M0)})},b.map=function(T){j(T);var G=this;return c(function(M0,l0){var y0=G._(M0,l0);return y0.status?J(N(y0.index,T(y0.value)),y0):y0})},b.contramap=function(T){j(T);var G=this;return c(function(M0,l0){var y0=G.parse(T(M0.slice(l0)));return y0.status?N(l0+M0.length,y0.value):y0})},b.promap=function(T,G){return j(T),j(G),this.contramap(T).map(G)},b.skip=function(T){return L0(this,T).map(function(G){return G[0]})},b.mark=function(){return G0(f1,this,f1,function(T,G,M0){return{start:T,value:G,end:M0}})},b.node=function(T){return G0(f1,this,f1,function(G,M0,l0){return{name:T,value:M0,start:G,end:l0}})},b.sepBy=function(T){return n1(this,T)},b.sepBy1=function(T){return $(this,T)},b.lookahead=function(T){return this.skip(K0(T))},b.notFollowedBy=function(T){return this.skip(X(T))},b.desc=function(T){I(T)||(T=[T]);var G=this;return c(function(M0,l0){var y0=G._(M0,l0);return y0.status||(y0.expected=T),y0})},b.fallback=function(T){return this.or(g0(T))},b.ap=function(T){return G0(T,this,function(G,M0){return G(M0)})},b.chain=function(T){var G=this;return c(function(M0,l0){var y0=G._(M0,l0);return y0.status?J(T(y0.value)._(M0,y0.index),y0):y0})},b.concat=b.or,b.empty=T1,b.of=g0,b["fantasy-land/ap"]=b.ap,b["fantasy-land/chain"]=b.chain,b["fantasy-land/concat"]=b.concat,b["fantasy-land/empty"]=b.empty,b["fantasy-land/of"]=b.of,b["fantasy-land/map"]=b.map;var f1=c(function(T,G){return N(G,V(T,G))}),ot=c(function(T,G){return G>=T.length?P(G,"any character/byte"):N(G+1,e0(T,G))}),vt=c(function(T,G){return N(T.length,T.slice(G))}),u0=c(function(T,G){return G<T.length?P(G,"EOF"):N(G,null)}),N0=p0(/[0-9]/).desc("a digit"),V0=p0(/[0-9]*/).desc("optional digits"),i1=p0(/[a-z]/i).desc("a letter"),O1=p0(/[a-z]*/i).desc("optional letters"),de=p0(/\s*/).desc("optional whitespace"),rt=p0(/\s+/).desc("whitespace"),j1=n0("\r"),Ue=n0(` +`),Te=n0(`\r +`),x1=p1(Te,Ue,j1).desc("newline"),Xe=p1(x1,u0);c.all=vt,c.alt=p1,c.any=ot,c.cr=j1,c.createLanguage=function(T){var G={};for(var M0 in T)({}).hasOwnProperty.call(T,M0)&&function(l0){G[l0]=U0(function(){return T[l0](G)})}(M0);return G},c.crlf=Te,c.custom=function(T){return c(T(N,P))},c.digit=N0,c.digits=V0,c.empty=T1,c.end=Xe,c.eof=u0,c.fail=S0,c.formatError=c0,c.index=f1,c.isParser=B,c.lazy=U0,c.letter=i1,c.letters=O1,c.lf=Ue,c.lookahead=K0,c.makeFailure=P,c.makeSuccess=N,c.newline=x1,c.noneOf=function(T){return j0(function(G){return T.indexOf(G)<0}).desc("none of '"+T+"'")},c.notFollowedBy=X,c.of=g0,c.oneOf=function(T){for(var G=T.split(""),M0=0;M0<G.length;M0++)G[M0]="'"+G[M0]+"'";return j0(function(l0){return T.indexOf(l0)>=0}).desc(G)},c.optWhitespace=de,c.Parser=c,c.range=function(T,G){return j0(function(M0){return T<=M0&&M0<=G}).desc(T+"-"+G)},c.regex=p0,c.regexp=p0,c.sepBy=n1,c.sepBy1=$,c.seq=L0,c.seqMap=G0,c.seqObj=function(){for(var T,G={},M0=0,l0=(T=arguments,Array.prototype.slice.call(T)),y0=l0.length,_0=0;_0<y0;_0+=1){var E0=l0[_0];if(!B(E0)){if(I(E0)&&E0.length===2&&typeof E0[0]=="string"&&B(E0[1])){var c1=E0[0];if(Object.prototype.hasOwnProperty.call(G,c1))throw new Error("seqObj: duplicate key "+c1);G[c1]=!0,M0++;continue}throw new Error("seqObj arguments must be parsers or [string, parser] array pairs.")}}if(M0===0)throw new Error("seqObj expects at least one named parser, found zero");return c(function(K1,$e){for(var _e,Et={},qe=0;qe<y0;qe+=1){var ve,T2;if(I(l0[qe])?(ve=l0[qe][0],T2=l0[qe][1]):(ve=null,T2=l0[qe]),!(_e=J(T2._(K1,$e),_e)).status)return _e;ve&&(Et[ve]=_e.value),$e=_e.index}return J(N($e,Et),_e)})},c.string=n0,c.succeed=g0,c.takeWhile=function(T){return j(T),c(function(G,M0){for(var l0=M0;l0<G.length&&T(e0(G,l0));)l0++;return N(l0,G.slice(M0,l0))})},c.test=j0,c.whitespace=rt,c["fantasy-land/empty"]=T1,c["fantasy-land/of"]=g0,c.Binary={bitSeq:d,bitSeqObj:function(T){A();var G={},M0=0,l0=s(function(_0){if(I(_0)){var E0=_0;if(E0.length!==2)throw new Error("["+E0.join(", ")+"] should be length 2, got length "+E0.length);if(t0(E0[0]),Z(E0[1]),Object.prototype.hasOwnProperty.call(G,E0[0]))throw new Error("duplicate key in bitSeqObj: "+E0[0]);return G[E0[0]]=!0,M0++,E0}return Z(_0),[null,_0]},T);if(M0<1)throw new Error("bitSeqObj expects at least one named pair, got ["+T.join(", ")+"]");var y0=s(function(_0){return _0[0]},l0);return d(s(function(_0){return _0[1]},l0)).map(function(_0){return a(function(E0,c1){return c1[0]!==null&&(E0[c1[0]]=c1[1]),E0},{},s(function(E0,c1){return[E0,_0[c1]]},y0))})},byte:function(T){if(A(),Z(T),T>255)throw new Error("Value specified to byte constructor ("+T+"=0x"+T.toString(16)+") is larger in value than a single byte.");var G=(T>15?"0x":"0x0")+T.toString(16);return c(function(M0,l0){var y0=e0(M0,l0);return y0===T?N(l0+1,y0):P(l0,G)})},buffer:function(T){return W("buffer",T).map(function(G){return Buffer.from(G)})},encodedString:function(T,G){return W("string",G).map(function(M0){return M0.toString(T)})},uintBE:L,uint8BE:L(1),uint16BE:L(2),uint32BE:L(4),uintLE:R,uint8LE:R(1),uint16LE:R(2),uint32LE:R(4),intBE:E,int8BE:E(1),int16BE:E(2),int32BE:E(4),intLE:k,int8LE:k(1),int16LE:k(2),int32LE:k(4),floatBE:W("floatBE",4).map(function(T){return T.readFloatBE(0)}),floatLE:W("floatLE",4).map(function(T){return T.readFloatLE(0)}),doubleBE:W("doubleBE",8).map(function(T){return T.readDoubleBE(0)}),doubleLE:W("doubleLE",8).map(function(T){return T.readDoubleLE(0)})},n.exports=c}])})})(Uv);var Y=Uv.exports,Wm=()=>/[#*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\u26D3\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]|\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])?|[\uDFC3\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-\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]|\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(?:[\uDC08\uDC26](?:\u200D\u2B1B)?|[\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-\uDEB6](?:\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-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC15(?:\u200D\uD83E\uDDBA)?|\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-\uDDB3\uDDBC\uDDBD])|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD])|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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?)?)|\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])?|\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-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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;function $v(e){return e==null?e:e.shiftToAll().normalize()}function IR(e){return e.includes("/")&&(e=e.substring(e.lastIndexOf("/")+1)),e.endsWith(".md")&&(e=e.substring(0,e.length-3)),e}Y.alt(Y.regex(new RegExp(Wm(),"")),Y.regex(/[0-9\p{Letter}_-]+/u).map(e=>e.toLocaleLowerCase()),Y.whitespace.map(e=>"-"),Y.any.map(e=>"")).many().map(e=>e.join(""));const G9=Y.alt(Y.regex(new RegExp(Wm(),"")),Y.regex(/[0-9\p{Letter}_-]+/u),Y.whitespace.map(e=>" "),Y.any.map(e=>" ")).many().map(e=>e.join("").split(/\s+/).join(" ").trim());function K9(e){return G9.tryParse(e)}function Z9(e){return e=$v(e),e=b1.fromObject(Object.fromEntries(Object.entries(e.toObject()).filter(([,t])=>t!=0))),e.toHuman()}var pO;(function(e){function t(B,I=dm,S=!1){let N=n(B);if(!N)return I.renderNullAs;switch(N.type){case"null":return I.renderNullAs;case"string":return N.value;case"number":case"boolean":return""+N.value;case"html":return N.value.outerHTML;case"widget":return N.value.markdown();case"link":return N.value.markdown();case"function":return"<function>";case"array":let P="";return S&&(P+="["),P+=N.value.map(J=>t(J,I,!0)).join(", "),S&&(P+="]"),P;case"object":return"{ "+Object.entries(N.value).map(J=>J[0]+": "+t(J[1],I,!0)).join(", ")+" }";case"date":return N.value.second==0&&N.value.hour==0&&N.value.minute==0?N.value.toFormat(I.defaultDateFormat):N.value.toFormat(I.defaultDateTimeFormat);case"duration":return Z9(N.value)}}e.toString=t;function n(B){return A(B)?{type:"null",value:B}:s(B)?{type:"number",value:B}:a(B)?{type:"string",value:B}:W(B)?{type:"boolean",value:B}:l(B)?{type:"duration",value:B}:u(B)?{type:"date",value:B}:L(B)?{type:"widget",value:B}:d(B)?{type:"array",value:B}:g(B)?{type:"link",value:B}:k(B)?{type:"function",value:B}:R(B)?{type:"html",value:B}:E(B)?{type:"object",value:B}:void 0}e.wrapValue=n;function o(B,I){if(E(B)){let S={};for(let[N,P]of Object.entries(B))S[N]=o(P,I);return S}else if(d(B)){let S=[];for(let N of B)S.push(o(N,I));return S}else return I(B)}e.mapLeaves=o;function M(B,I,S){if(B===void 0&&(B=null),I===void 0&&(I=null),B===null&&I===null)return 0;if(B===null)return-1;if(I===null)return 1;let N=n(B),P=n(I);if(N===void 0&&P===void 0)return 0;if(N===void 0)return-1;if(P===void 0)return 1;if(N.type!=P.type)return N.type.localeCompare(P.type);if(N.value===P.value)return 0;switch(N.type){case"string":return N.value.localeCompare(P.value);case"number":return N.value<P.value?-1:N.value==P.value?0:1;case"null":return 0;case"boolean":return N.value==P.value?0:N.value?1:-1;case"link":let J=N.value,K=P.value,V=S??(z0=>z0),x=V(J.path).localeCompare(V(K.path));if(x!=0)return x;let e0=J.type.localeCompare(K.type);return e0!=0?e0:J.subpath&&!K.subpath?1:!J.subpath&&K.subpath?-1:!J.subpath&&!K.subpath?0:(J.subpath??"").localeCompare(K.subpath??"");case"date":return N.value<P.value?-1:N.value.equals(P.value)?0:1;case"duration":return N.value<P.value?-1:N.value.equals(P.value)?0:1;case"array":let Z=N.value,j=P.value;for(let z0=0;z0<Math.min(Z.length,j.length);z0++){let d0=M(Z[z0],j[z0]);if(d0!=0)return d0}return Z.length-j.length;case"object":let t0=N.value,O0=P.value,m0=Array.from(Object.keys(t0)),q0=Array.from(Object.keys(O0));m0.sort(),q0.sort();let C=M(m0,q0);if(C!=0)return C;for(let z0 of m0){let d0=M(t0[z0],O0[z0]);if(d0!=0)return d0}return 0;case"widget":case"html":case"function":return 0}}e.compareValue=M;function c(B){var I;return(I=n(B))==null?void 0:I.type}e.typeOf=c;function b(B){let I=n(B);if(!I)return!1;switch(I.type){case"number":return I.value!=0;case"string":return I.value.length>0;case"boolean":return I.value;case"link":return!!I.value.path;case"date":return I.value.toMillis()!=0;case"duration":return I.value.as("seconds")!=0;case"object":return Object.keys(I.value).length>0;case"array":return I.value.length>0;case"null":return!1;case"html":case"widget":case"function":return!0}}e.isTruthy=b;function z(B){if(B==null)return B;if(e.isArray(B))return[].concat(B.map(I=>z(I)));if(e.isObject(B)){let I={};for(let[S,N]of Object.entries(B))I[S]=z(N);return I}else return B}e.deepCopy=z;function a(B){return typeof B=="string"}e.isString=a;function s(B){return typeof B=="number"}e.isNumber=s;function u(B){return B instanceof k1}e.isDate=u;function l(B){return B instanceof b1}e.isDuration=l;function A(B){return B==null}e.isNull=A;function d(B){return Array.isArray(B)}e.isArray=d;function W(B){return typeof B=="boolean"}e.isBoolean=W;function g(B){return B instanceof un}e.isLink=g;function L(B){return B instanceof mm}e.isWidget=L;function R(B){return typeof HTMLElement<"u"?B instanceof HTMLElement:!1}e.isHtml=R;function E(B){return typeof B=="object"&&!R(B)&&!L(B)&&!d(B)&&!l(B)&&!u(B)&&!g(B)&&B!==void 0&&!A(B)}e.isObject=E;function k(B){return typeof B=="function"}e.isFunction=k})(pO||(pO={}));var PR;(function(e){function t(M){return pO.isObject(M)&&Object.keys(M).length==2&&"key"in M&&"rows"in M}e.isElementGroup=t;function n(M){for(let c of M)if(!t(c))return!1;return!0}e.isGrouping=n;function o(M){if(n(M)){let c=0;for(let b of M)c+=o(b.rows);return c}else return M.length}e.count=o})(PR||(PR={}));class un{constructor(t){Sn(this,"path");Sn(this,"display");Sn(this,"subpath");Sn(this,"embed");Sn(this,"type");Object.assign(this,t)}static file(t,n=!1,o){return new un({path:t,embed:n,display:o,subpath:void 0,type:"file"})}static infer(t,n=!1,o){if(t.includes("#^")){let M=t.split("#^");return un.block(M[0],M[1],n,o)}else if(t.includes("#")){let M=t.split("#");return un.header(M[0],M[1],n,o)}else return un.file(t,n,o)}static header(t,n,o,M){return new un({path:t,embed:o,display:M,subpath:K9(n),type:"header"})}static block(t,n,o,M){return new un({path:t,embed:o,display:M,subpath:n,type:"block"})}static fromObject(t){return new un(t)}equals(t){return t==null||t==null?!1:this.path==t.path&&this.type==t.type&&this.subpath==t.subpath}toString(){return this.markdown()}toObject(){return{path:this.path,type:this.type,subpath:this.subpath,display:this.display,embed:this.embed}}withPath(t){return new un(Object.assign({},this,{path:t}))}withDisplay(t){return new un(Object.assign({},this,{display:t}))}withHeader(t){return un.header(this.path,t,this.embed,this.display)}toFile(){return un.file(this.path,this.embed,this.display)}toEmbed(){if(this.embed)return this;{let t=new un(this);return t.embed=!0,t}}fromEmbed(){if(this.embed){let t=new un(this);return t.embed=!1,t}else return this}markdown(){let t=(this.embed?"!":"")+"[["+this.obsidianLink();return this.display?t+="|"+this.display:(t+="|"+IR(this.path),(this.type=="header"||this.type=="block")&&(t+=" > "+this.subpath)),t+="]]",t}obsidianLink(){var n,o;const t=this.path.replaceAll("|","\\|");return this.type=="header"?t+"#"+((n=this.subpath)==null?void 0:n.replaceAll("|","\\|")):this.type=="block"?t+"#^"+((o=this.subpath)==null?void 0:o.replaceAll("|","\\|")):t}fileName(){return IR(this.path).replace(".md","")}}class mm{constructor(t){Sn(this,"$widget");this.$widget=t}}class J9 extends mm{constructor(n,o){super("dataview:list-pair");Sn(this,"key");Sn(this,"value");this.key=n,this.value=o}markdown(){return`${pO.toString(this.key)}: ${pO.toString(this.value)}`}}class Q9 extends mm{constructor(n,o){super("dataview:external-link");Sn(this,"url");Sn(this,"display");this.url=n,this.display=o}markdown(){return`[${this.display??this.url}](${this.url})`}}var UR;(function(e){function t(b,z){return new J9(b,z)}e.listPair=t;function n(b,z){return new Q9(b,z)}e.externalLink=n;function o(b){return b.$widget==="dataview:list-pair"}e.isListPair=o;function M(b){return b.$widget==="dataview:external-link"}e.isExternalLink=M;function c(b){return o(b)||M(b)}e.isBuiltin=c})(UR||(UR={}));var ct;(function(e){function t(A){return{type:"variable",name:A}}e.variable=t;function n(A){return{type:"literal",value:A}}e.literal=n;function o(A,d,W){return{type:"binaryop",left:A,op:d,right:W}}e.binaryOp=o;function M(A,d){return{type:"index",object:A,index:d}}e.index=M;function c(A){let d=A.split("."),W=e.variable(d[0]);for(let g=1;g<d.length;g++)W=e.index(W,e.literal(d[g]));return W}e.indexVariable=c;function b(A,d){return{type:"lambda",arguments:A,value:d}}e.lambda=b;function z(A,d){return{type:"function",func:A,arguments:d}}e.func=z;function a(A){return{type:"list",values:A}}e.list=a;function s(A){return{type:"object",values:A}}e.object=s;function u(A){return{type:"negated",child:A}}e.negate=u;function l(A){return A=="<="||A=="<"||A==">"||A==">="||A=="!="||A=="="}e.isCompareOp=l,e.NULL=e.literal(null)})(ct||(ct={}));var lr;(function(e){function t(u){return{type:"tag",tag:u}}e.tag=t;function n(u){return{type:"csv",path:u}}e.csv=n;function o(u){return{type:"folder",folder:u}}e.folder=o;function M(u,l){return{type:"link",file:u,direction:l?"incoming":"outgoing"}}e.link=M;function c(u,l,A){return{type:"binaryop",left:u,op:l,right:A}}e.binaryOp=c;function b(u,l){return{type:"binaryop",left:u,op:"&",right:l}}e.and=b;function z(u,l){return{type:"binaryop",left:u,op:"|",right:l}}e.or=z;function a(u){return{type:"negate",child:u}}e.negate=a;function s(){return{type:"empty"}}e.empty=s})(lr||(lr={}));const $R=new RegExp(Wm(),""),SW={year:b1.fromObject({years:1}),years:b1.fromObject({years:1}),yr:b1.fromObject({years:1}),yrs:b1.fromObject({years:1}),month:b1.fromObject({months:1}),months:b1.fromObject({months:1}),mo:b1.fromObject({months:1}),mos:b1.fromObject({months:1}),week:b1.fromObject({weeks:1}),weeks:b1.fromObject({weeks:1}),wk:b1.fromObject({weeks:1}),wks:b1.fromObject({weeks:1}),w:b1.fromObject({weeks:1}),day:b1.fromObject({days:1}),days:b1.fromObject({days:1}),d:b1.fromObject({days:1}),hour:b1.fromObject({hours:1}),hours:b1.fromObject({hours:1}),hr:b1.fromObject({hours:1}),hrs:b1.fromObject({hours:1}),h:b1.fromObject({hours:1}),minute:b1.fromObject({minutes:1}),minutes:b1.fromObject({minutes:1}),min:b1.fromObject({minutes:1}),mins:b1.fromObject({minutes:1}),m:b1.fromObject({minutes:1}),second:b1.fromObject({seconds:1}),seconds:b1.fromObject({seconds:1}),sec:b1.fromObject({seconds:1}),secs:b1.fromObject({seconds:1}),s:b1.fromObject({seconds:1})},kW={now:()=>k1.local(),today:()=>k1.local().startOf("day"),yesterday:()=>k1.local().startOf("day").minus(b1.fromObject({days:1})),tomorrow:()=>k1.local().startOf("day").plus(b1.fromObject({days:1})),sow:()=>k1.local().startOf("week"),"start-of-week":()=>k1.local().startOf("week"),eow:()=>k1.local().endOf("week"),"end-of-week":()=>k1.local().endOf("week"),soy:()=>k1.local().startOf("year"),"start-of-year":()=>k1.local().startOf("year"),eoy:()=>k1.local().endOf("year"),"end-of-year":()=>k1.local().endOf("year"),som:()=>k1.local().startOf("month"),"start-of-month":()=>k1.local().startOf("month"),eom:()=>k1.local().endOf("month"),"end-of-month":()=>k1.local().endOf("month")},XW=["FROM","WHERE","LIMIT","GROUP","FLATTEN"];function eE(e){let t=-1;for(;(t=e.indexOf("|",t+1))>=0;)if(!(t>0&&e[t-1]=="\\"))return[e.substring(0,t).replace(/\\\|/g,"|"),e.substring(t+1)];return[e.replace(/\\\|/g,"|"),void 0]}function tE(e){let[t,n]=eE(e);return un.infer(t,!1,n)}function $s(e,t,n){return Y.seqMap(e,Y.seq(Y.optWhitespace,t,Y.optWhitespace,e).many(),(o,M)=>{if(M.length==0)return o;let c=n(o,M[0][1],M[0][3]);for(let b=1;b<M.length;b++)c=n(c,M[b][1],M[b][3]);return c})}function nE(e,...t){return Y.custom((n,o)=>(M,c)=>{let b=e._(M,c);if(!b.status)return b;for(let z of t){let a=z(b.value)._(M,b.index);if(!a.status)return b;b=a}return b})}const To=Y.createLanguage({number:e=>Y.regexp(/-?[0-9]+(\.[0-9]+)?/).map(t=>Number.parseFloat(t)).desc("number"),string:e=>Y.string('"').then(Y.alt(e.escapeCharacter,Y.noneOf('"\\')).atLeast(0).map(t=>t.join(""))).skip(Y.string('"')).desc("string"),escapeCharacter:e=>Y.string("\\").then(Y.any).map(t=>t==='"'?'"':t==="\\"?"\\":"\\"+t),bool:e=>Y.regexp(/true|false|True|False/).map(t=>t.toLowerCase()=="true").desc("boolean ('true' or 'false')"),tag:e=>Y.seqMap(Y.string("#"),Y.alt(Y.regexp(/[^\u2000-\u206F\u2E00-\u2E7F'!"#$%&()*+,.:;<=>?@^`{|}~\[\]\\\s]/).desc("text")).many(),(t,n)=>t+n.join("")).desc("tag ('#hello/stuff')"),identifier:e=>Y.seqMap(Y.alt(Y.regexp(new RegExp("\\p{Letter}","u")),Y.regexp($R).desc("text")),Y.alt(Y.regexp(/[0-9\p{Letter}_-]/u),Y.regexp($R).desc("text")).many(),(t,n)=>t+n.join("")).desc("variable identifier"),link:e=>Y.regexp(/\[\[([^\[\]]*?)\]\]/u,1).map(t=>tE(t)).desc("file link"),embedLink:e=>Y.seqMap(Y.string("!").atMost(1),e.link,(t,n)=>(t.length>0&&(n.embed=!0),n)).desc("file link"),binaryPlusMinus:e=>Y.regexp(/\+|-/).map(t=>t).desc("'+' or '-'"),binaryMulDiv:e=>Y.regexp(/\*|\/|%/).map(t=>t).desc("'*' or '/' or '%'"),binaryCompareOp:e=>Y.regexp(/>=|<=|!=|>|<|=/).map(t=>t).desc("'>=' or '<=' or '!=' or '=' or '>' or '<'"),binaryBooleanOp:e=>Y.regexp(/and|or|&|\|/i).map(t=>t.toLowerCase()=="and"?"&":t.toLowerCase()=="or"?"|":t).desc("'and' or 'or'"),rootDate:e=>Y.seqMap(Y.regexp(/\d{4}/),Y.string("-"),Y.regexp(/\d{2}/),(t,n,o)=>k1.fromObject({year:Number.parseInt(t),month:Number.parseInt(o)})).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"),dateShorthand:e=>Y.alt(...Object.keys(kW).sort((t,n)=>n.length-t.length).map(Y.string)),date:e=>nE(e.rootDate,t=>Y.seqMap(Y.string("-"),Y.regexp(/\d{2}/),(n,o)=>t.set({day:Number.parseInt(o)})),t=>Y.seqMap(Y.string("T"),Y.regexp(/\d{2}/),(n,o)=>t.set({hour:Number.parseInt(o)})),t=>Y.seqMap(Y.string(":"),Y.regexp(/\d{2}/),(n,o)=>t.set({minute:Number.parseInt(o)})),t=>Y.seqMap(Y.string(":"),Y.regexp(/\d{2}/),(n,o)=>t.set({second:Number.parseInt(o)})),t=>Y.alt(Y.seqMap(Y.string("."),Y.regexp(/\d{3}/),(n,o)=>t.set({millisecond:Number.parseInt(o)})),Y.succeed(t)),t=>Y.alt(Y.seqMap(Y.string("+").or(Y.string("-")),Y.regexp(/\d{1,2}(:\d{2})?/),(n,o)=>t.setZone("UTC"+n+o,{keepLocalTime:!0})),Y.seqMap(Y.string("Z"),()=>t.setZone("utc",{keepLocalTime:!0})),Y.seqMap(Y.string("["),Y.regexp(/[0-9A-Za-z+-\/]+/u),Y.string("]"),(n,o,M)=>t.setZone(o,{keepLocalTime:!0})))).assert(t=>t.isValid,"valid date").desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"),datePlus:e=>Y.alt(e.dateShorthand.map(t=>kW[t]()),e.date).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS] or in shorthand"),durationType:e=>Y.alt(...Object.keys(SW).sort((t,n)=>n.length-t.length).map(Y.string)),duration:e=>Y.seqMap(e.number,Y.optWhitespace,e.durationType,(t,n,o)=>SW[o].mapUnits(M=>M*t)).sepBy1(Y.string(",").trim(Y.optWhitespace).or(Y.optWhitespace)).map(t=>t.reduce((n,o)=>n.plus(o))).desc("duration like 4hr2min"),rawNull:e=>Y.string("null"),tagSource:e=>e.tag.map(t=>lr.tag(t)),csvSource:e=>Y.seqMap(Y.string("csv(").skip(Y.optWhitespace),e.string,Y.string(")"),(t,n,o)=>lr.csv(n)),linkIncomingSource:e=>e.link.map(t=>lr.link(t.path,!0)),linkOutgoingSource:e=>Y.seqMap(Y.string("outgoing(").skip(Y.optWhitespace),e.link,Y.string(")"),(t,n,o)=>lr.link(n.path,!1)),folderSource:e=>e.string.map(t=>lr.folder(t)),parensSource:e=>Y.seqMap(Y.string("("),Y.optWhitespace,e.source,Y.optWhitespace,Y.string(")"),(t,n,o,M,c)=>o),negateSource:e=>Y.seqMap(Y.alt(Y.string("-"),Y.string("!")),e.atomSource,(t,n)=>lr.negate(n)),atomSource:e=>Y.alt(e.parensSource,e.negateSource,e.linkOutgoingSource,e.linkIncomingSource,e.folderSource,e.tagSource,e.csvSource),binaryOpSource:e=>$s(e.atomSource,e.binaryBooleanOp.map(t=>t),lr.binaryOp),source:e=>e.binaryOpSource,variableField:e=>e.identifier.chain(t=>XW.includes(t.toUpperCase())?Y.fail("Variable fields cannot be a keyword ("+XW.join(" or ")+")"):Y.succeed(ct.variable(t))).desc("variable"),numberField:e=>e.number.map(t=>ct.literal(t)).desc("number"),stringField:e=>e.string.map(t=>ct.literal(t)).desc("string"),boolField:e=>e.bool.map(t=>ct.literal(t)).desc("boolean"),dateField:e=>Y.seqMap(Y.string("date("),Y.optWhitespace,e.datePlus,Y.optWhitespace,Y.string(")"),(t,n,o,M,c)=>ct.literal(o)).desc("date"),durationField:e=>Y.seqMap(Y.string("dur("),Y.optWhitespace,e.duration,Y.optWhitespace,Y.string(")"),(t,n,o,M,c)=>ct.literal(o)).desc("duration"),nullField:e=>e.rawNull.map(t=>ct.NULL),linkField:e=>e.link.map(t=>ct.literal(t)),listField:e=>e.field.sepBy(Y.string(",").trim(Y.optWhitespace)).wrap(Y.string("[").skip(Y.optWhitespace),Y.optWhitespace.then(Y.string("]"))).map(t=>ct.list(t)).desc("list ('[1, 2, 3]')"),objectField:e=>Y.seqMap(e.identifier.or(e.string),Y.string(":").trim(Y.optWhitespace),e.field,(t,n,o)=>({name:t,value:o})).sepBy(Y.string(",").trim(Y.optWhitespace)).wrap(Y.string("{").skip(Y.optWhitespace),Y.optWhitespace.then(Y.string("}"))).map(t=>{let n={};for(let o of t)n[o.name]=o.value;return ct.object(n)}).desc("object ('{ a: 1, b: 2 }')"),atomInlineField:e=>Y.alt(e.date,e.duration.map(t=>$v(t)),e.string,e.tag,e.embedLink,e.bool,e.number,e.rawNull),inlineFieldList:e=>e.atomInlineField.sepBy(Y.string(",").trim(Y.optWhitespace).lookahead(e.atomInlineField)),inlineField:e=>Y.alt(Y.seqMap(e.atomInlineField,Y.string(",").trim(Y.optWhitespace),e.inlineFieldList,(t,n,o)=>[t].concat(o)),e.atomInlineField),atomField:e=>Y.alt(e.embedLink.map(t=>ct.literal(t)),e.negatedField,e.linkField,e.listField,e.objectField,e.lambdaField,e.parensField,e.boolField,e.numberField,e.stringField,e.dateField,e.durationField,e.nullField,e.variableField),indexField:e=>Y.seqMap(e.atomField,Y.alt(e.dotPostfix,e.indexPostfix,e.functionPostfix).many(),(t,n)=>{let o=t;for(let M of n)switch(M.type){case"dot":o=ct.index(o,ct.literal(M.field));break;case"index":o=ct.index(o,M.field);break;case"function":o=ct.func(o,M.fields);break}return o}),negatedField:e=>Y.seqMap(Y.string("!"),e.indexField,(t,n)=>ct.negate(n)).desc("negated field"),parensField:e=>Y.seqMap(Y.string("("),Y.optWhitespace,e.field,Y.optWhitespace,Y.string(")"),(t,n,o,M,c)=>o),lambdaField:e=>Y.seqMap(e.identifier.sepBy(Y.string(",").trim(Y.optWhitespace)).wrap(Y.string("(").trim(Y.optWhitespace),Y.string(")").trim(Y.optWhitespace)),Y.string("=>").trim(Y.optWhitespace),e.field,(t,n,o)=>({type:"lambda",arguments:t,value:o})),dotPostfix:e=>Y.seqMap(Y.string("."),e.identifier,(t,n)=>({type:"dot",field:n})),indexPostfix:e=>Y.seqMap(Y.string("["),Y.optWhitespace,e.field,Y.optWhitespace,Y.string("]"),(t,n,o,M,c)=>({type:"index",field:o})),functionPostfix:e=>Y.seqMap(Y.string("("),Y.optWhitespace,e.field.sepBy(Y.string(",").trim(Y.optWhitespace)),Y.optWhitespace,Y.string(")"),(t,n,o,M,c)=>({type:"function",fields:o})),binaryMulDivField:e=>$s(e.indexField,e.binaryMulDiv,ct.binaryOp),binaryPlusMinusField:e=>$s(e.binaryMulDivField,e.binaryPlusMinus,ct.binaryOp),binaryCompareField:e=>$s(e.binaryPlusMinusField,e.binaryCompareOp,ct.binaryOp),binaryBooleanField:e=>$s(e.binaryCompareField,e.binaryBooleanOp,ct.binaryOp),binaryOpField:e=>e.binaryBooleanField,field:e=>e.binaryOpField});function oE(e){try{return lA.success(To.field.tryParse(e))}catch(t){return lA.failure(""+t)}}var AA;(function(e){function t(o,M){return{name:o,field:M}}e.named=t;function n(o,M){return{field:o,direction:M}}e.sortBy=n})(AA||(AA={}));function rE(e){return Y.custom((t,n)=>(o,M)=>{let c=e._(o,M);return c.status?Object.assign({},c,{value:[c.value,o.substring(M,c.index)]}):c})}function ME(e){return e.split(/[\r\n]+/).map(t=>t.trim()).join("")}function HR(e,t){return Y.eof.map(e).or(Y.whitespace.then(t))}const Hv=Y.createLanguage({queryType:e=>Y.alt(Y.regexp(/TABLE|LIST|TASK|CALENDAR/i)).map(t=>t.toLowerCase()).desc("query type ('TABLE', 'LIST', 'TASK', or 'CALENDAR')"),explicitNamedField:e=>Y.seqMap(To.field.skip(Y.whitespace),Y.regexp(/AS/i).skip(Y.whitespace),To.identifier.or(To.string),(t,n,o)=>AA.named(o,t)),comment:()=>Y.Parser((e,t)=>{let n=e.substring(t);if(!n.startsWith("//"))return Y.makeFailure(t,"Not a comment");n=n.split(` +`)[0];let o=n.substring(2).trim();return Y.makeSuccess(t+n.length,o)}),namedField:e=>Y.alt(e.explicitNamedField,rE(To.field).map(([t,n])=>AA.named(ME(n),t))),sortField:e=>Y.seqMap(To.field.skip(Y.optWhitespace),Y.regexp(/ASCENDING|DESCENDING|ASC|DESC/i).atMost(1),(t,n)=>{let o=n.length==0?"ascending":n[0].toLowerCase();return o=="desc"&&(o="descending"),o=="asc"&&(o="ascending"),{field:t,direction:o}}),headerClause:e=>e.queryType.chain(t=>{switch(t){case"table":return HR(()=>({type:t,fields:[],showId:!0}),Y.seqMap(Y.regexp(/WITHOUT\s+ID/i).skip(Y.optWhitespace).atMost(1),Y.sepBy(e.namedField,Y.string(",").trim(Y.optWhitespace)),(n,o)=>({type:t,fields:o,showId:n.length==0})));case"list":return HR(()=>({type:t,format:void 0,showId:!0}),Y.seqMap(Y.regexp(/WITHOUT\s+ID/i).skip(Y.optWhitespace).atMost(1),To.field.atMost(1),(n,o)=>({type:t,format:o.length==1?o[0]:void 0,showId:n.length==0})));case"task":return Y.succeed({type:t});case"calendar":return Y.whitespace.then(Y.seqMap(e.namedField,n=>({type:t,showId:!0,field:n})));default:return Y.fail(`Unrecognized query type '${t}'`)}}).desc("TABLE or LIST or TASK or CALENDAR"),fromClause:e=>Y.seqMap(Y.regexp(/FROM/i),Y.whitespace,To.source,(t,n,o)=>o),whereClause:e=>Y.seqMap(Y.regexp(/WHERE/i),Y.whitespace,To.field,(t,n,o)=>({type:"where",clause:o})).desc("WHERE <expression>"),sortByClause:e=>Y.seqMap(Y.regexp(/SORT/i),Y.whitespace,e.sortField.sepBy1(Y.string(",").trim(Y.optWhitespace)),(t,n,o)=>({type:"sort",fields:o})).desc("SORT field [ASC/DESC]"),limitClause:e=>Y.seqMap(Y.regexp(/LIMIT/i),Y.whitespace,To.field,(t,n,o)=>({type:"limit",amount:o})).desc("LIMIT <value>"),flattenClause:e=>Y.seqMap(Y.regexp(/FLATTEN/i).skip(Y.whitespace),e.namedField,(t,n)=>({type:"flatten",field:n})).desc("FLATTEN <value> [AS <name>]"),groupByClause:e=>Y.seqMap(Y.regexp(/GROUP BY/i).skip(Y.whitespace),e.namedField,(t,n)=>({type:"group",field:n})).desc("GROUP BY <value> [AS <name>]"),clause:e=>Y.alt(e.fromClause,e.whereClause,e.sortByClause,e.limitClause,e.groupByClause,e.flattenClause),query:e=>Y.seqMap(e.headerClause.trim($h),e.fromClause.trim($h).atMost(1),e.clause.trim($h).many(),(t,n,o)=>({header:t,source:n.length==0?lr.folder(""):n[0],operations:o,settings:dm}))}),$h=Y.alt(Y.whitespace,Hv.comment).many().map(e=>e.join("")),iE=e=>{var t;return e?(t=e.plugins.plugins.dataview)==null?void 0:t.api:window.DataviewAPI},cE=e=>e.plugins.enabledPlugins.has("dataview");vM.DATE_SHORTHANDS=kW;vM.DURATION_TYPES=SW;vM.EXPRESSION=To;vM.KEYWORDS=XW;vM.QUERY_LANGUAGE=Hv;var $l=vM.getAPI=iE;vM.isPluginEnabled=cE;vM.parseField=oE;const Yv=!1;var $O=Array.isArray,gm=Array.from,bE=Object.defineProperty,sM=Object.getOwnPropertyDescriptor,jv=Object.getOwnPropertyDescriptors,pE=Object.prototype,zE=Array.prototype,fA=Object.getPrototypeOf;function Hp(e){return typeof e=="function"}const yt=()=>{};function aE(e){return e()}function dA(e){for(var t=0;t<e.length;t++)e[t]()}const WM=2,Vv=4,HO=8,uf=16,Go=32,YO=64,pb=128,qA=256,Fn=512,Xi=1024,Sz=2048,OM=4096,jO=8192,Gv=16384,zb=32768,sE=65536,OE=1<<18,Kv=1<<19,Di=Symbol("$state"),uE=Symbol("");function Zv(e){return e===this.v}function Rm(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function ym(e){return!Rm(e,this.v)}function lE(e){throw new Error("effect_in_teardown")}function AE(){throw new Error("effect_in_unowned_derived")}function fE(e){throw new Error("effect_orphan")}function dE(){throw new Error("effect_update_depth_exceeded")}function qE(e){throw new Error("lifecycle_legacy_only")}function hE(e){throw new Error("props_invalid_value")}function WE(){throw new Error("state_descriptors_fixed")}function mE(){throw new Error("state_prototype_fixed")}function gE(){throw new Error("state_unsafe_local_read")}function RE(){throw new Error("state_unsafe_mutation")}function Xn(e){return{f:0,v:e,reactions:null,equals:Zv,version:0}}function Oz(e){return Jv(Xn(e))}function lf(e,t=!1){var o;const n=Xn(e);return t||(n.equals=ym),P1!==null&&P1.l!==null&&((o=P1.l).s??(o.s=[])).push(n),n}function K2(e,t=!1){return Jv(lf(e,t))}function Jv(e){return fe!==null&&fe.f&WM&&(Rr===null?YE([e]):Rr.push(e)),e}function I1(e,t){return fe!==null&&df()&&fe.f&(WM|uf)&&(Rr===null||!Rr.includes(e))&&RE(),CW(e,t)}function CW(e,t){return e.equals(t)||(e.v=t,e.version=d7(),Qv(e,Xi),df()&&X1!==null&&X1.f&Fn&&!(X1.f&Go)&&(ln!==null&&ln.includes(e)?(Ko(X1,Xi),qf(X1)):Bi===null?jE([e]):Bi.push(e))),t}function Qv(e,t){var n=e.reactions;if(n!==null)for(var o=df(),M=n.length,c=0;c<M;c++){var b=n[c],z=b.f;z&Xi||!o&&b===X1||(Ko(b,t),z&(Fn|pb)&&(z&WM?Qv(b,Sz):qf(b)))}}const Lm=1,vm=2,e7=4,yE=8,LE=16,vE=1,NE=2,t7=4,wE=8,DE=16,BE=1,TE=2,_E=4,EE=1,SE=2,u2=Symbol(),Nm="http://www.w3.org/2000/svg";let n7=!1;function fr(e,t=null,n){if(typeof e!="object"||e===null||Di in e)return e;const o=fA(e);if(o!==pE&&o!==zE)return e;var M=new Map,c=$O(e),b=Xn(0);c&&M.set("length",Xn(e.length));var z;return new Proxy(e,{defineProperty(a,s,u){(!("value"in u)||u.configurable===!1||u.enumerable===!1||u.writable===!1)&&WE();var l=M.get(s);return l===void 0?(l=Xn(u.value),M.set(s,l)):I1(l,fr(u.value,z)),!0},deleteProperty(a,s){var u=M.get(s);if(u===void 0)s in a&&M.set(s,Xn(u2));else{if(c&&typeof s=="string"){var l=M.get("length"),A=Number(s);Number.isInteger(A)&&A<l.v&&I1(l,A)}I1(u,u2),YR(b)}return!0},get(a,s,u){var W;if(s===Di)return e;var l=M.get(s),A=s in a;if(l===void 0&&(!A||(W=sM(a,s))!=null&&W.writable)&&(l=Xn(fr(A?a[s]:u2,z)),M.set(s,l)),l!==void 0){var d=r0(l);return d===u2?void 0:d}return Reflect.get(a,s,u)},getOwnPropertyDescriptor(a,s){var u=Reflect.getOwnPropertyDescriptor(a,s);if(u&&"value"in u){var l=M.get(s);l&&(u.value=r0(l))}else if(u===void 0){var A=M.get(s),d=A==null?void 0:A.v;if(A!==void 0&&d!==u2)return{enumerable:!0,configurable:!0,value:d,writable:!0}}return u},has(a,s){var d;if(s===Di)return!0;var u=M.get(s),l=u!==void 0&&u.v!==u2||Reflect.has(a,s);if(u!==void 0||X1!==null&&(!l||(d=sM(a,s))!=null&&d.writable)){u===void 0&&(u=Xn(l?fr(a[s],z):u2),M.set(s,u));var A=r0(u);if(A===u2)return!1}return l},set(a,s,u,l){var k;var A=M.get(s),d=s in a;if(c&&s==="length")for(var W=u;W<A.v;W+=1){var g=M.get(W+"");g!==void 0?I1(g,u2):W in a&&(g=Xn(u2),M.set(W+"",g))}A===void 0?(!d||(k=sM(a,s))!=null&&k.writable)&&(A=Xn(void 0),I1(A,fr(u,z)),M.set(s,A)):(d=A.v!==u2,I1(A,fr(u,z)));var L=Reflect.getOwnPropertyDescriptor(a,s);if(L!=null&&L.set&&L.set.call(l,u),!d){if(c&&typeof s=="string"){var R=M.get("length"),E=Number(s);Number.isInteger(E)&&E>=R.v&&I1(R,E+1)}YR(b)}return!0},ownKeys(a){r0(b);var s=Reflect.ownKeys(a).filter(A=>{var d=M.get(A);return d===void 0||d.v!==u2});for(var[u,l]of M)l.v!==u2&&!(u in a)&&s.push(u);return s},setPrototypeOf(){mE()}})}function YR(e,t=1){I1(e,e.v+t)}function jR(e){return e!==null&&typeof e=="object"&&Di in e?e[Di]:e}function kE(e,t){return Object.is(jR(e),jR(t))}var xW,hA,o7,r7;function XE(){if(xW===void 0){xW=window,hA=document;var e=Element.prototype,t=Node.prototype;o7=sM(t,"firstChild").get,r7=sM(t,"nextSibling").get,e.__click=void 0,e.__className="",e.__attributes=null,e.__styles=null,e.__e=void 0,Text.prototype.__t=void 0}}function VO(e=""){return document.createTextNode(e)}function uz(e){return o7.call(e)}function Af(e){return r7.call(e)}function e1(e,t){return uz(e)}function J0(e,t){{var n=uz(e);return n instanceof Comment&&n.data===""?Af(n):n}}function H0(e,t=1,n=!1){let o=e;for(;t--;)o=Af(o);return o}function CE(e){e.textContent=""}function W1(e){var t=WM|Xi;X1===null?t|=pb:X1.f|=Kv;const n={children:null,ctx:P1,deps:null,equals:Zv,f:t,fn:e,reactions:null,v:null,version:0,parent:X1};if(fe!==null&&fe.f&WM){var o=fe;(o.children??(o.children=[])).push(n)}return n}function to(e){const t=W1(e);return t.equals=ym,t}function M7(e){var t=e.children;if(t!==null){e.children=null;for(var n=0;n<t.length;n+=1){var o=t[n];o.f&WM?wm(o):NM(o)}}}function i7(e){var t,n=X1;Mo(e.parent);try{M7(e),t=q7(e)}finally{Mo(n)}return t}function c7(e){var t=i7(e),n=(Hc||e.f&pb)&&e.deps!==null?Sz:Fn;Ko(e,n),e.equals(t)||(e.v=t,e.version=d7())}function wm(e){M7(e),OO(e,0),Ko(e,jO),e.v=e.children=e.deps=e.ctx=e.reactions=null}function b7(e){X1===null&&fe===null&&fE(),fe!==null&&fe.f&pb&&AE(),Tm&&lE()}function xE(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function kz(e,t,n,o=!0){var M=(e&YO)!==0,c=X1,b={ctx:P1,deps:null,deriveds:null,nodes_start:null,nodes_end:null,f:e|Xi,first:null,fn:t,last:null,next:null,parent:M?null:c,prev:null,teardown:null,transitions:null,version:0};if(n){var z=ez;try{VR(!0),KO(b),b.f|=Gv}catch(u){throw NM(b),u}finally{VR(z)}}else t!==null&&qf(b);var a=n&&b.deps===null&&b.first===null&&b.nodes_start===null&&b.teardown===null&&(b.f&Kv)===0;if(!a&&!M&&o&&(c!==null&&xE(b,c),fe!==null&&fe.f&WM)){var s=fe;(s.children??(s.children=[])).push(b)}return b}function FE(){return fe===null?!1:!Hc}function ff(e){const t=kz(HO,null,!1);return Ko(t,Fn),t.teardown=e,t}function FW(e){b7();var t=X1!==null&&(X1.f&Go)!==0&&P1!==null&&!P1.m;if(t){var n=P1;(n.e??(n.e=[])).push({fn:e,effect:X1,reaction:fe})}else{var o=q2(e);return o}}function IE(e){return b7(),Yi(e)}function PE(e){const t=kz(YO,e,!0);return()=>{NM(t)}}function q2(e){return kz(Vv,e,!1)}function Qp(e,t){var n=P1,o={effect:null,ran:!1};n.l.r1.push(o),o.effect=Yi(()=>{e(),!o.ran&&(o.ran=!0,I1(n.l.r2,!0),Fe(t))})}function Dm(){var e=P1;Yi(()=>{if(r0(e.l.r2)){for(var t of e.l.r1){var n=t.effect;n.f&Fn&&Ko(n,Sz),xz(n)&&KO(n),t.ran=!1}e.l.r2.v=!1}})}function Yi(e){return kz(HO,e,!0)}function y1(e){return Xz(e)}function Xz(e,t=0){return kz(HO|uf|t,e,!0)}function Ci(e,t=!0){return kz(HO|Go,e,!0,t)}function p7(e){var t=e.teardown;if(t!==null){const n=Tm,o=fe;GR(!0),vr(null);try{t.call(null)}finally{GR(n),vr(o)}}}function z7(e){var t=e.deriveds;if(t!==null){e.deriveds=null;for(var n=0;n<t.length;n+=1)wm(t[n])}}function a7(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){var o=n.next;NM(n,t),n=o}}function UE(e){for(var t=e.first;t!==null;){var n=t.next;t.f&Go||NM(t),t=n}}function NM(e,t=!0){var n=!1;if((t||e.f&OE)&&e.nodes_start!==null){for(var o=e.nodes_start,M=e.nodes_end;o!==null;){var c=o===M?null:Af(o);o.remove(),o=c}n=!0}a7(e,t&&!n),z7(e),OO(e,0),Ko(e,jO);var b=e.transitions;if(b!==null)for(const a of b)a.stop();p7(e);var z=e.parent;z!==null&&z.first!==null&&s7(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.parent=e.fn=e.nodes_start=e.nodes_end=null}function s7(e){var t=e.parent,n=e.prev,o=e.next;n!==null&&(n.next=o),o!==null&&(o.prev=n),t!==null&&(t.first===e&&(t.first=o),t.last===e&&(t.last=n))}function zO(e,t){var n=[];Bm(e,n,!0),O7(n,()=>{NM(e),t&&t()})}function O7(e,t){var n=e.length;if(n>0){var o=()=>--n||t();for(var M of e)M.out(o)}else t()}function Bm(e,t,n){if(!(e.f&OM)){if(e.f^=OM,e.transitions!==null)for(const b of e.transitions)(b.is_global||n)&&t.push(b);for(var o=e.first;o!==null;){var M=o.next,c=(o.f&zb)!==0||(o.f&Go)!==0;Bm(o,t,c?n:!1),o=M}}}function aO(e){u7(e,!0)}function u7(e,t){if(e.f&OM){e.f^=OM,xz(e)&&KO(e);for(var n=e.first;n!==null;){var o=n.next,M=(n.f&zb)!==0||(n.f&Go)!==0;u7(n,M?t:!1),n=o}if(e.transitions!==null)for(const c of e.transitions)(c.is_global||t)&&c.in()}}let WA=!1,IW=[];function l7(){WA=!1;const e=IW.slice();IW=[],dA(e)}function Cz(e){WA||(WA=!0,queueMicrotask(l7)),IW.push(e)}function $E(){WA&&l7()}function GO(e){throw new Error("lifecycle_outside_component")}const A7=0,HE=1;let Hl=A7,sO=!1,ez=!1,Tm=!1;function VR(e){ez=e}function GR(e){Tm=e}let $c=[],tz=0;let fe=null;function vr(e){fe=e}let X1=null;function Mo(e){X1=e}let Rr=null;function YE(e){Rr=e}let ln=null,A2=0,Bi=null;function jE(e){Bi=e}let f7=0,Hc=!1,P1=null;function d7(){return++f7}function df(){return P1!==null&&P1.l===null}function xz(e){var b,z;var t=e.f;if(t&Xi)return!0;if(t&Sz){var n=e.deps,o=(t&pb)!==0;if(n!==null){var M;if(t&qA){for(M=0;M<n.length;M++)((b=n[M]).reactions??(b.reactions=[])).push(e);e.f^=qA}for(M=0;M<n.length;M++){var c=n[M];if(xz(c)&&c7(c),o&&X1!==null&&!Hc&&!((z=c==null?void 0:c.reactions)!=null&&z.includes(e))&&(c.reactions??(c.reactions=[])).push(e),c.version>e.version)return!0}}o||Ko(e,Fn)}return!1}function VE(e,t,n){throw e}function q7(e){var A;var t=ln,n=A2,o=Bi,M=fe,c=Hc,b=Rr,z=P1,a=e.f;ln=null,A2=0,Bi=null,fe=a&(Go|YO)?null:e,Hc=!ez&&(a&pb)!==0,Rr=null,P1=e.ctx;try{var s=(0,e.fn)(),u=e.deps;if(ln!==null){var l;if(OO(e,A2),u!==null&&A2>0)for(u.length=A2+ln.length,l=0;l<ln.length;l++)u[A2+l]=ln[l];else e.deps=u=ln;if(!Hc)for(l=A2;l<u.length;l++)((A=u[l]).reactions??(A.reactions=[])).push(e)}else u!==null&&A2<u.length&&(OO(e,A2),u.length=A2);return s}finally{ln=t,A2=n,Bi=o,fe=M,Hc=c,Rr=b,P1=z}}function GE(e,t){let n=t.reactions;if(n!==null){var o=n.indexOf(e);if(o!==-1){var M=n.length-1;M===0?n=t.reactions=null:(n[o]=n[M],n.pop())}}n===null&&t.f&WM&&(ln===null||!ln.includes(t))&&(Ko(t,Sz),t.f&(pb|qA)||(t.f^=qA),OO(t,0))}function OO(e,t){var n=e.deps;if(n!==null)for(var o=t;o<n.length;o++)GE(e,n[o])}function KO(e){var t=e.f;if(!(t&jO)){Ko(e,Fn);var n=X1;X1=e;try{t&uf?UE(e):a7(e),z7(e),p7(e);var o=q7(e);e.teardown=typeof o=="function"?o:null,e.version=f7}catch(M){VE(M)}finally{X1=n}}}function h7(){tz>1e3&&(tz=0,dE()),tz++}function W7(e){var t=e.length;if(t!==0){h7();var n=ez;ez=!0;try{for(var o=0;o<t;o++){var M=e[o];M.f&Fn||(M.f^=Fn);var c=[];m7(M,c),KE(c)}}finally{ez=n}}}function KE(e){var t=e.length;if(t!==0)for(var n=0;n<t;n++){var o=e[n];!(o.f&(jO|OM))&&xz(o)&&(KO(o),o.deps===null&&o.first===null&&o.nodes_start===null&&(o.teardown===null?s7(o):o.fn=null))}}function ZE(){if(sO=!1,tz>1001)return;const e=$c;$c=[],W7(e),sO||(tz=0)}function qf(e){Hl===A7&&(sO||(sO=!0,queueMicrotask(ZE)));for(var t=e;t.parent!==null;){t=t.parent;var n=t.f;if(n&(YO|Go)){if(!(n&Fn))return;t.f^=Fn}}$c.push(t)}function m7(e,t){var n=e.first,o=[];e:for(;n!==null;){var M=n.f,c=(M&Go)!==0,b=c&&(M&Fn)!==0;if(!b&&!(M&OM))if(M&HO){c?n.f^=Fn:xz(n)&&KO(n);var z=n.first;if(z!==null){n=z;continue}}else M&Vv&&o.push(n);var a=n.next;if(a===null){let l=n.parent;for(;l!==null;){if(e===l)break e;var s=l.next;if(s!==null){n=s;continue e}l=l.parent}}n=a}for(var u=0;u<o.length;u++)z=o[u],t.push(z),m7(z,t)}function g7(e){var t=Hl,n=$c;try{h7();const M=[];Hl=HE,$c=M,sO=!1,W7(n);var o=e==null?void 0:e();return $E(),($c.length>0||M.length>0)&&g7(),tz=0,o}finally{Hl=t,$c=n}}async function R7(){await Promise.resolve(),g7()}function r0(e){var z;var t=e.f,n=(t&WM)!==0;if(n&&t&jO){var o=i7(e);return wm(e),o}if(fe!==null){Rr!==null&&Rr.includes(e)&&gE();var M=fe.deps;ln===null&&M!==null&&M[A2]===e?A2++:ln===null?ln=[e]:ln.push(e),Bi!==null&&X1!==null&&X1.f&Fn&&!(X1.f&Go)&&Bi.includes(e)&&(Ko(X1,Xi),qf(X1))}else if(n&&e.deps===null){var c=e,b=c.parent;b!==null&&!((z=b.deriveds)!=null&&z.includes(c))&&(b.deriveds??(b.deriveds=[])).push(c)}return n&&(c=e,xz(c)&&c7(c)),e.v}function Fe(e){const t=fe;try{return fe=null,e()}finally{fe=t}}const JE=~(Xi|Sz|Fn);function Ko(e,t){e.f=e.f&JE|t}function y7(e){return QE().get(e)}function QE(e){return P1===null&&GO(),P1.c??(P1.c=new Map(eS(P1)||void 0))}function eS(e){let t=e.p;for(;t!==null;){const n=t.c;if(n!==null)return n;t=t.p}return null}function KR(e,t=1){var n=+r0(e);return I1(e,n+t),n}function Re(e,t=!1,n){P1={p:P1,c:null,e:null,m:!1,s:e,x:null,l:null},t||(P1.l={s:null,u:null,r1:[],r2:Xn(!1)})}function ye(e){const t=P1;if(t!==null){e!==void 0&&(t.x=e);const b=t.e;if(b!==null){var n=X1,o=fe;t.e=null;try{for(var M=0;M<b.length;M++){var c=b[M];Mo(c.effect),vr(c.reaction),q2(c.fn)}}finally{Mo(n),vr(o)}}P1=t.p,t.m=!0}return e||{}}function mA(e){if(!(typeof e!="object"||!e||e instanceof EventTarget)){if(Di in e)PW(e);else if(!Array.isArray(e))for(let t in e){const n=e[t];typeof n=="object"&&n&&Di in n&&PW(n)}}}function PW(e,t=new Set){if(typeof e=="object"&&e!==null&&!(e instanceof EventTarget)&&!t.has(e)){t.add(e),e instanceof Date&&e.getTime();for(let o in e)try{PW(e[o],t)}catch{}const n=fA(e);if(n!==Object.prototype&&n!==Array.prototype&&n!==Map.prototype&&n!==Set.prototype&&n!==Date.prototype){const o=jv(n);for(let M in o){const c=o[M].get;if(c)try{c.call(e)}catch{}}}}}const L7=new Set,UW=new Set;function $W(e,t,n,o){function M(c){if(o.capture||Qs.call(t,c),!c.cancelBubble){var b=fe,z=X1;vr(null),Mo(null);try{return n.call(this,c)}finally{vr(b),Mo(z)}}}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?Cz(()=>{t.addEventListener(e,M,o)}):t.addEventListener(e,M,o),M}function pt(e,t,n,o,M){var c={capture:o,passive:M},b=$W(e,t,n,c);(t===document.body||t===window||t===document)&&ff(()=>{t.removeEventListener(e,b,c)})}function ab(e){for(var t=0;t<e.length;t++)L7.add(e[t]);for(var n of UW)n(e)}function Qs(e){var E;var t=this,n=t.ownerDocument,o=e.type,M=((E=e.composedPath)==null?void 0:E.call(e))||[],c=M[0]||e.target,b=0,z=e.__root;if(z){var a=M.indexOf(z);if(a!==-1&&(t===document||t===window)){e.__root=t;return}var s=M.indexOf(t);if(s===-1)return;a<=s&&(b=a)}if(c=M[b]||e.target,c!==t){bE(e,"currentTarget",{configurable:!0,get(){return c||n}});var u=fe,l=X1;vr(null),Mo(null);try{for(var A,d=[];c!==null;){var W=c.assignedSlot||c.parentNode||c.host||null;try{var g=c["__"+o];if(g!==void 0&&!c.disabled)if($O(g)){var[L,...R]=g;L.apply(c,[e,...R])}else g.call(c,e)}catch(k){A?d.push(k):A=k}if(e.cancelBubble||W===t||W===null)break;c=W}if(A){for(let k of d)queueMicrotask(()=>{throw k});throw A}}finally{e.__root=t,delete e.currentTarget,vr(u),Mo(l)}}}function v7(e){var t=document.createElement("template");return t.innerHTML=e,t.content}function lz(e,t){var n=X1;n.nodes_start===null&&(n.nodes_start=e,n.nodes_end=t)}function x0(e,t){var n=(t&EE)!==0,o=(t&SE)!==0,M,c=!e.startsWith("<!>");return()=>{M===void 0&&(M=v7(c?e:"<!>"+e),n||(M=uz(M)));var b=o?document.importNode(M,!0):M.cloneNode(!0);if(n){var z=uz(b),a=b.lastChild;lz(z,a)}else lz(b,b);return b}}function N7(e,t,n="svg"){var o=!e.startsWith("<!>"),M=`<${n}>${o?e:"<!>"+e}</${n}>`,c;return()=>{if(!c){var b=v7(M),z=uz(b);c=uz(z)}var a=c.cloneNode(!0);return lz(a,a),a}}function j2(e=""){{var t=VO(e+"");return lz(t,t),t}}function ne(){var e=document.createDocumentFragment(),t=document.createComment(""),n=VO();return e.append(t,n),lz(t,n),e}function f0(e,t){e!==null&&e.before(t)}function tS(e){return e.endsWith("capture")&&e!=="gotpointercapture"&&e!=="lostpointercapture"}const nS=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"];function oS(e){return nS.includes(e)}const rS={formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly"};function MS(e){return e=e.toLowerCase(),rS[e]??e}const iS=["touchstart","touchmove"];function cS(e){return iS.includes(e)}let gA=!0;function ZR(e){gA=e}function o2(e,t){var n=t==null?"":typeof t=="object"?t+"":t;n!==(e.__t??(e.__t=e.nodeValue))&&(e.__t=n,e.nodeValue=n==null?"":n+"")}function RA(e,t){return bS(e,t)}const Cp=new Map;function bS(e,{target:t,anchor:n,props:o={},events:M,context:c,intro:b=!0}){XE();var z=new Set,a=l=>{for(var A=0;A<l.length;A++){var d=l[A];if(!z.has(d)){z.add(d);var W=cS(d);t.addEventListener(d,Qs,{passive:W});var g=Cp.get(d);g===void 0?(document.addEventListener(d,Qs,{passive:W}),Cp.set(d,1)):Cp.set(d,g+1)}}};a(gm(L7)),UW.add(a);var s=void 0,u=PE(()=>{var l=n??t.appendChild(VO());return Ci(()=>{if(c){Re({});var A=P1;A.c=c}M&&(o.$$events=M),gA=b,s=e(l,o)||{},gA=!0,c&&ye()}),()=>{var W;for(var A of z){t.removeEventListener(A,Qs);var d=Cp.get(A);--d===0?(document.removeEventListener(A,Qs),Cp.delete(A)):Cp.set(A,d)}UW.delete(a),HW.delete(s),l!==n&&((W=l.parentNode)==null||W.removeChild(l))}});return HW.set(s,u),s}let HW=new WeakMap;function YW(e){const t=HW.get(e);t&&t()}function B1(e,t,n,o=null,M=!1){var c=e,b=null,z=null,a=null,s=M?zb:0;Xz(()=>{a!==(a=!!t())&&(a?(b?aO(b):b=Ci(()=>n(c)),z&&zO(z,()=>{z=null})):(z?aO(z):o&&(z=Ci(()=>o(c))),b&&zO(b,()=>{b=null})))},s)}function uM(e,t){Yi(()=>{var n=t();for(var o in n){var M=n[o];M?e.style.setProperty(o,M):e.style.removeProperty(o)}}),ff(()=>{e.remove()})}let nz=null;function JR(e){nz=e}function lM(e,t){return t}function pS(e,t,n,o){for(var M=[],c=t.length,b=0;b<c;b++)Bm(t[b].e,M,!0);var z=c>0&&M.length===0&&n!==null;if(z){var a=n.parentNode;CE(a),a.append(n),o.clear(),qi(e,t[0].prev,t[c-1].next)}O7(M,()=>{for(var s=0;s<c;s++){var u=t[s];z||(o.delete(u.k),qi(e,u.prev,u.next)),NM(u.e,!z)}})}function xo(e,t,n,o,M,c=null){var b=e,z={flags:t,items:new Map,first:null},a=(t&e7)!==0;if(a){var s=e;b=s.appendChild(VO())}var u=null,l=!1;Xz(()=>{var A=n(),d=$O(A)?A:A==null?[]:gm(A),W=d.length;l&&W===0||(l=W===0,zS(d,z,b,M,t,o),c!==null&&(W===0?u?aO(u):u=Ci(()=>c(b)):u!==null&&zO(u,()=>{u=null})),n())})}function zS(e,t,n,o,M,c){var e0,Z,j,t0;var b=(M&yE)!==0,z=(M&(Lm|vm))!==0,a=e.length,s=t.items,u=t.first,l=u,A,d=null,W,g=[],L=[],R,E,k,B;if(b)for(B=0;B<a;B+=1)R=e[B],E=c(R,B),k=s.get(E),k!==void 0&&((e0=k.a)==null||e0.measure(),(W??(W=new Set)).add(k));for(B=0;B<a;B+=1){if(R=e[B],E=c(R,B),k=s.get(E),k===void 0){var I=l?l.e.nodes_start:n;d=sS(I,t,d,d===null?t.first:d.next,R,E,B,o,M),s.set(E,d),g=[],L=[],l=d.next;continue}if(z&&aS(k,R,B,M),k.e.f&OM&&(aO(k.e),b&&((Z=k.a)==null||Z.unfix(),(W??(W=new Set)).delete(k))),k!==l){if(A!==void 0&&A.has(k)){if(g.length<L.length){var S=L[0],N;d=S.prev;var P=g[0],J=g[g.length-1];for(N=0;N<g.length;N+=1)QR(g[N],S,n);for(N=0;N<L.length;N+=1)A.delete(L[N]);qi(t,P.prev,J.next),qi(t,d,P),qi(t,J,S),l=S,d=J,B-=1,g=[],L=[]}else A.delete(k),QR(k,l,n),qi(t,k.prev,k.next),qi(t,k,d===null?t.first:d.next),qi(t,d,k),d=k;continue}for(g=[],L=[];l!==null&&l.k!==E;)l.e.f&OM||(A??(A=new Set)).add(l),L.push(l),l=l.next;if(l===null)continue;k=l}g.push(k),d=k,l=k.next}if(l!==null||A!==void 0){for(var K=A===void 0?[]:gm(A);l!==null;)l.e.f&OM||K.push(l),l=l.next;var V=K.length;if(V>0){var x=M&e7&&a===0?n:null;if(b){for(B=0;B<V;B+=1)(j=K[B].a)==null||j.measure();for(B=0;B<V;B+=1)(t0=K[B].a)==null||t0.fix()}pS(t,K,x,s)}}b&&Cz(()=>{var O0;if(W!==void 0)for(k of W)(O0=k.a)==null||O0.apply()}),X1.first=t.first&&t.first.e,X1.last=d&&d.e}function aS(e,t,n,o){o&Lm&&CW(e.v,t),o&vm?CW(e.i,n):e.i=n}function sS(e,t,n,o,M,c,b,z,a){var s=nz;try{var u=(a&Lm)!==0,l=(a&LE)===0,A=u?l?lf(M):Xn(M):M,d=a&vm?Xn(b):b,W={i:d,v:A,k:c,a:null,e:null,prev:n,next:o};return nz=W,W.e=Ci(()=>z(e,A,d),n7),W.e.prev=n&&n.e,W.e.next=o&&o.e,n===null?t.first=W:(n.next=W,n.e.next=W.e),o!==null&&(o.prev=W,o.e.prev=W.e),W}finally{nz=s}}function QR(e,t,n){for(var o=e.next?e.next.e.nodes_start:n,M=t?t.e.nodes_start:n,c=e.e.nodes_start;c!==o;){var b=Af(c);M.before(c),c=b}}function qi(e,t,n){t===null?e.first=n:(t.next=n,t.e.next=n&&n.e),n!==null&&(n.prev=t,n.e.prev=t&&t.e)}function ke(e,t,n,o,M){var z;var c=(z=t.$$slots)==null?void 0:z[n],b=!1;c===!0&&(c=t[n==="default"?"children":n],b=!0),c===void 0||c(e,b?()=>o:o)}function wM(e,t,...n){var o=e,M=yt,c;Xz(()=>{M!==(M=t())&&(c&&(NM(c),c=null),c=Ci(()=>M(o,...n)))},zb)}function OS(e,t,n){var o=e,M,c;Xz(()=>{M!==(M=t())&&(c&&(zO(c),c=null),M&&(c=Ci(()=>n(o,M))))},zb)}function w7(e,t,n,o,M,c){var b,z,a=null,s=e,u,l=nz;Xz(()=>{const A=t()||null;var d=n||A==="svg"?Nm:null;if(A!==b){var W=nz;JR(l),u&&(A===null?zO(u,()=>{u=null,z=null}):A===z?aO(u):(NM(u),ZR(!1))),A&&A!==z&&(u=Ci(()=>{if(a=d?document.createElementNS(d,A):document.createElement(A),lz(a,a),o){var g=a.appendChild(VO());o(a,g)}X1.nodes_end=a,s.before(a)})),b=A,b&&(z=b),ZR(!0),JR(W)}},zb)}function uO(e,t,n){q2(()=>{var o=Fe(()=>t(e,n==null?void 0:n())||{});if(n&&(o!=null&&o.update)){var M=!1,c={};Yi(()=>{var b=n();mA(b),M&&Rm(c,b)&&(c=b,o.update(b))}),M=!0}if(o!=null&&o.destroy)return()=>o.destroy()})}function uS(e,t){if(t){const n=document.body;e.autofocus=!0,Cz(()=>{document.activeElement===n&&e.focus()})}}let e8=!1;function lS(){e8||(e8=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{var t;if(!e.defaultPrevented)for(const n of e.target.elements)(t=n.__on_r)==null||t.call(n)})},{capture:!0}))}function mM(e,t,n,o){var M=e.__attributes??(e.__attributes={});M[t]!==(M[t]=n)&&(t==="style"&&"__styles"in e&&(e.__styles={}),t==="loading"&&(e[uE]=n),n==null?e.removeAttribute(t):typeof n!="string"&&D7(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function jW(e,t,n,o,M=!1,c=!1,b=!1){var z=t||{},a=e.tagName==="OPTION";for(var s in t)s in n||(n[s]=null);var u=D7(e),l=e.__attributes??(e.__attributes={}),A=[];for(const R in n){let E=n[R];if(a&&R==="value"&&E==null){e.value=e.__value="",z[R]=E;continue}var d=z[R];if(E!==d){z[R]=E;var W=R[0]+R[1];if(W!=="$$"){if(W==="on"){const k={},B="$$"+R;let I=R.slice(2);var g=oS(I);if(tS(I)&&(I=I.slice(0,-7),k.capture=!0),!g&&d){if(E!=null)continue;e.removeEventListener(I,z[B],k),z[B]=null}if(E!=null)if(g)e[`__${I}`]=E,ab([I]);else{let S=function(N){z[R].call(this,N)};t?z[B]=$W(I,e,S,k):A.push([R,E,()=>z[B]=$W(I,e,S,k)])}}else if(R==="style"&&E!=null)e.style.cssText=E+"";else if(R==="autofocus")uS(e,!!E);else if(R==="__value"||R==="value"&&E!=null)e.value=e[R]=e.__value=E;else{var L=R;M||(L=MS(L)),E==null&&!c?(l[R]=null,e.removeAttribute(R)):u.includes(L)&&(c||typeof E!="string")?e[L]=E:typeof E!="function"&&mM(e,L,E)}R==="style"&&"__styles"in e&&(e.__styles={})}}}return t||Cz(()=>{if(e.isConnected)for(const[R,E,k]of A)z[R]===E&&k()}),z}var t8=new Map;function D7(e){var t=t8.get(e.nodeName);if(t)return t;t8.set(e.nodeName,t=[]);for(var n,o=fA(e),M=Element.prototype;M!==o;){n=jv(o);for(var c in n)n[c].set&&t.push(c);o=fA(o)}return t}function hf(e,t){var n=e.__className,o=AS(t);(n!==o||n7)&&(t==null?e.removeAttribute("class"):e.className=o,e.__className=o)}function AS(e){return e??""}function Qn(e,t,n){if(n){if(e.classList.contains(t))return;e.classList.add(t)}else{if(!e.classList.contains(t))return;e.classList.remove(t)}}function Ot(e,t,n,o){var M=e.__styles??(e.__styles={});M[t]!==n&&(M[t]=n,n==null?e.style.removeProperty(t):e.style.setProperty(t,n,""))}const fS=()=>performance.now(),gi={tick:e=>requestAnimationFrame(e),now:()=>fS(),tasks:new Set};function B7(e){gi.tasks.forEach(t=>{t.c(e)||(gi.tasks.delete(t),t.f())}),gi.tasks.size!==0&&gi.tick(B7)}function dS(e){let t;return gi.tasks.size===0&&gi.tick(B7),{promise:new Promise(n=>{gi.tasks.add(t={c:e,f:n})}),abort(){gi.tasks.delete(t)}}}function Nl(e,t){e.dispatchEvent(new CustomEvent(t))}function qS(e){if(e==="float")return"cssFloat";if(e==="offset")return"cssOffset";if(e.startsWith("--"))return e;const t=e.split("-");return t.length===1?t[0]:t[0]+t.slice(1).map(n=>n[0].toUpperCase()+n.slice(1)).join("")}function n8(e){const t={},n=e.split(";");for(const o of n){const[M,c]=o.split(":");if(!M||c===void 0)break;const b=qS(M.trim());t[b]=c.trim()}return t}const hS=e=>e;function tb(e,t,n,o){var M=(e&BE)!==0,c=(e&TE)!==0,b=M&&c,z=(e&_E)!==0,a=b?"both":M?"in":"out",s,u=t.inert,l,A;function d(){var E=fe,k=X1;vr(null),Mo(null);try{return s??(s=n()(t,(o==null?void 0:o())??{},{direction:a}))}finally{vr(E),Mo(k)}}var W={is_global:z,in(){var E;if(t.inert=u,!M){A==null||A.abort(),(E=A==null?void 0:A.reset)==null||E.call(A);return}c||l==null||l.abort(),Nl(t,"introstart"),l=VW(t,d(),A,1,()=>{Nl(t,"introend"),l==null||l.abort(),l=s=void 0})},out(E){if(!c){E==null||E(),s=void 0;return}t.inert=!0,Nl(t,"outrostart"),A=VW(t,d(),l,0,()=>{Nl(t,"outroend"),E==null||E()})},stop:()=>{l==null||l.abort(),A==null||A.abort()}},g=X1;if((g.transitions??(g.transitions=[])).push(W),M&&gA){var L=z;if(!L){for(var R=g.parent;R&&R.f&zb;)for(;(R=R.parent)&&!(R.f&uf););L=!R||(R.f&Gv)!==0}L&&q2(()=>{Fe(()=>W.in())})}}function VW(e,t,n,o,M){var c=o===1;if(Hp(t)){var b,z=!1;return Cz(()=>{if(!z){var L=t({direction:c?"in":"out"});b=VW(e,L,n,o,M)}}),{abort:()=>{z=!0,b==null||b.abort()},deactivate:()=>b.deactivate(),reset:()=>b.reset(),t:()=>b.t()}}if(n==null||n.deactivate(),!(t!=null&&t.duration))return M(),{abort:yt,deactivate:yt,reset:yt,t:()=>o};const{delay:a=0,css:s,tick:u,easing:l=hS}=t;var A=[];if(c&&n===void 0&&(u&&u(0,1),s)){var d=n8(s(0,1));A.push(d,d)}var W=()=>1-o,g=e.animate(A,{duration:a});return g.onfinish=()=>{var L=(n==null?void 0:n.t())??1-o;n==null||n.abort();var R=o-L,E=t.duration*Math.abs(R),k=[];if(E>0){if(s)for(var B=Math.ceil(E/16.666666666666668),I=0;I<=B;I+=1){var S=L+R*l(I/B),N=s(S,1-S);k.push(n8(N))}W=()=>{var P=g.currentTime;return L+R*l(P/E)},u&&dS(()=>{if(g.playState!=="running")return!1;var P=W();return u(P,1-P),!0})}g=e.animate(k,{duration:E,fill:"forwards"}),g.onfinish=()=>{W=()=>o,u==null||u(o,1-o),M()}},{abort:()=>{g&&(g.cancel(),g.effect=null,g.onfinish=yt)},deactivate:()=>{M=yt},reset:()=>{o===0&&(u==null||u(1,0))},t:()=>W()}}function WS(e,t,n,o=n){e.addEventListener(t,n);const M=e.__on_r;M?e.__on_r=()=>{M(),o()}:e.__on_r=o,lS()}function mS(e,t,n=t){var o=df();WS(e,"input",()=>{var M=o8(e)?r8(e.value):e.value;n(M),o&&M!==(M=t())&&(e.value=M??"")}),Yi(()=>{var M=t();o8(e)&&M===r8(e.value)||e.type==="date"&&!M&&!e.value||M!==e.value&&(e.value=M??"")})}function o8(e){var t=e.type;return t==="number"||t==="range"}function r8(e){return e===""?null:+e}function M8(e,t,n){var o=sM(e,t);o&&o.set&&(e[t]=n,ff(()=>{e[t]=null}))}function GW(e,t,n){if(e.multiple)return RS(e,t);for(var o of e.options){var M=T7(o);if(kE(M,t)){o.selected=!0;return}}(!n||t!==void 0)&&(e.selectedIndex=-1)}function gS(e,t){let n=!0;q2(()=>{t&&GW(e,Fe(t),n),n=!1;var o=new MutationObserver(()=>{var M=e.__value;GW(e,M)});return o.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),()=>{o.disconnect()}})}function RS(e,t){for(var n of e.options)n.selected=~t.indexOf(T7(n))}function T7(e){return"__value"in e?e.__value:e.value}function i8(e,t){return e===t||(e==null?void 0:e[Di])===t}function Az(e={},t,n,o){return q2(()=>{var M,c;return Yi(()=>{M=c,c=[],Fe(()=>{e!==n(...c)&&(t(e,...c),M&&i8(n(...M),e)&&t(null,...M))})}),()=>{Cz(()=>{c&&i8(n(...c),e)&&t(null,...c)})}}),e}function yS(e){return function(...t){var n=t[0];return n.preventDefault(),e==null?void 0:e.apply(this,t)}}function w2(e=!1){const t=P1,n=t.l.u;if(!n)return;let o=()=>mA(t.s);if(e){let M=0,c={};const b=W1(()=>{let z=!1;const a=t.s;for(const s in a)a[s]!==c[s]&&(c[s]=a[s],z=!0);return z&&M++,M});o=()=>r0(b)}n.b.length&&IE(()=>{c8(t,o),dA(n.b)}),FW(()=>{const M=Fe(()=>n.m.map(aE));return()=>{for(const c of M)typeof c=="function"&&c()}}),n.a.length&&FW(()=>{c8(t,o),dA(n.a)})}function c8(e,t){if(e.l.s)for(const n of e.l.s)r0(n);t()}function hn(e,t){var c;var n=(c=e.$$events)==null?void 0:c[t.type],o=$O(n)?n.slice():n==null?[]:[n];for(var M of o)M.call(this,t)}function _m(e,t,n){if(e==null)return t(void 0),n&&n(void 0),yt;const o=Fe(()=>e.subscribe(t,n));return o.unsubscribe?()=>o.unsubscribe():o}let wl=!1;function w1(e,t,n){const o=n[t]??(n[t]={store:null,source:lf(void 0),unsubscribe:yt});if(o.store!==e)if(o.unsubscribe(),o.store=e??null,e==null)o.source.v=void 0,o.unsubscribe=yt;else{var M=!0;o.unsubscribe=_m(e,c=>{M?o.source.v=c:I1(o.source,c)}),M=!1}return r0(o.source)}function KW(e,t){return e.set(t),t}function tn(){const e={};return ff(()=>{for(var t in e)e[t].unsubscribe()}),e}function nb(e,t,n){return e.set(n),t}function LS(e){var t=wl;try{return wl=!1,[e(),wl]}finally{wl=t}}const vS={get(e,t){if(!e.exclude.includes(t))return r0(e.version),t in e.special?e.special[t]():e.props[t]},set(e,t,n){return t in e.special||(e.special[t]=M1({get[t](){return e.props[t]}},t,t7)),e.special[t](n),KR(e.version),!0},getOwnPropertyDescriptor(e,t){if(!e.exclude.includes(t)&&t in e.props)return{enumerable:!0,configurable:!0,value:e.props[t]}},deleteProperty(e,t){return e.exclude.includes(t)||(e.exclude.push(t),KR(e.version)),!0},has(e,t){return e.exclude.includes(t)?!1:t in e.props},ownKeys(e){return Reflect.ownKeys(e.props).filter(t=>!e.exclude.includes(t))}};function ut(e,t){return new Proxy({props:e,exclude:t,special:{},version:Xn(0)},vS)}const NS={get(e,t){let n=e.props.length;for(;n--;){let o=e.props[n];if(Hp(o)&&(o=o()),typeof o=="object"&&o!==null&&t in o)return o[t]}},set(e,t,n){let o=e.props.length;for(;o--;){let M=e.props[o];Hp(M)&&(M=M());const c=sM(M,t);if(c&&c.set)return c.set(n),!0}return!1},getOwnPropertyDescriptor(e,t){let n=e.props.length;for(;n--;){let o=e.props[n];if(Hp(o)&&(o=o()),typeof o=="object"&&o!==null&&t in o){const M=sM(o,t);return M&&!M.configurable&&(M.configurable=!0),M}}},has(e,t){for(let n of e.props)if(Hp(n)&&(n=n()),n!=null&&t in n)return!0;return!1},ownKeys(e){const t=[];for(let n of e.props){Hp(n)&&(n=n());for(const o in n)t.includes(o)||t.push(o)}return t}};function nn(...e){return new Proxy({props:e},NS)}function b8(e){for(var t=X1,n=X1;t!==null&&!(t.f&(Go|YO));)t=t.parent;try{return Mo(t),e()}finally{Mo(n)}}function M1(e,t,n,o){var S;var M=(n&vE)!==0,c=(n&NE)!==0,b=(n&wE)!==0,z=(n&DE)!==0,a=!1,s;b?[s,a]=LS(()=>e[t]):s=e[t];var u=(S=sM(e,t))==null?void 0:S.set,l=o,A=!0,d=!1,W=()=>(d=!0,A&&(A=!1,z?l=Fe(o):l=o),l);s===void 0&&o!==void 0&&(u&&c&&hE(),s=W(),u&&u(s));var g;if(c)g=()=>{var N=e[t];return N===void 0?W():(A=!0,d=!1,N)};else{var L=b8(()=>(M?W1:to)(()=>e[t]));L.f|=sE,g=()=>{var N=r0(L);return N!==void 0&&(l=void 0),N===void 0?l:N}}if(!(n&t7))return g;if(u){var R=e.$$legacy;return function(N,P){return arguments.length>0?((!c||!P||R||a)&&u(P?g():N),N):g()}}var E=!1,k=!1,B=lf(s),I=b8(()=>W1(()=>{var N=g(),P=r0(B);return E?(E=!1,k=!0,P):(k=!1,B.v=N)}));return M||(I.equals=ym),function(N,P){if(arguments.length>0){const J=P?r0(I):c&&b?fr(N):N;return I.equals(J)||(E=!0,I1(B,J),d&&l!==void 0&&(l=J),Fe(()=>r0(I))),N}return r0(I)}}function wS(e){P1===null&&GO(),P1.l!==null?E7(P1).m.push(e):FW(()=>{const t=Fe(e);if(typeof t=="function")return t})}function _7(e){P1===null&&GO(),wS(()=>()=>Fe(e))}function DS(e,t,{bubbles:n=!1,cancelable:o=!1}={}){return new CustomEvent(e,{detail:t,bubbles:n,cancelable:o})}function BS(){const e=P1;return e===null&&GO(),(t,n,o)=>{var c;const M=(c=e.s.$$events)==null?void 0:c[t];if(M){const b=$O(M)?M.slice():[M],z=DS(t,n,o);for(const a of b)a.call(e.x,z);return!z.defaultPrevented}return!0}}function TS(e){P1===null&&GO(),P1.l===null&&qE(),E7(P1).a.push(e)}function E7(e){var t=e.l;return t.u??(t.u={a:[],b:[],m:[]})}function _S(e){I1(e,e.v+1)}const xp=[];function no(e,t){return{subscribe:xn(e,t).subscribe}}function xn(e,t=yt){let n=null;const o=new Set;function M(z){if(Rm(e,z)&&(e=z,n)){const a=!xp.length;for(const s of o)s[1](),xp.push(s,e);if(a){for(let s=0;s<xp.length;s+=2)xp[s][0](xp[s+1]);xp.length=0}}}function c(z){M(z(e))}function b(z,a=yt){const s=[z,a];return o.add(s),o.size===1&&(n=t(M,c)||yt),z(e),()=>{o.delete(s),o.size===0&&n&&(n(),n=null)}}return{set:M,update:c,subscribe:b}}function G1(e,t,n){const o=!Array.isArray(e),M=o?[e]:e;if(!M.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const c=t.length<2;return no(n,(b,z)=>{let a=!1;const s=[];let u=0,l=yt;const A=()=>{if(u)return;l();const W=t(o?s[0]:s,b,z);c?b(W):l=typeof W=="function"?W:yt},d=M.map((W,g)=>_m(W,L=>{s[g]=L,u&=~(1<<g),a&&A()},()=>{u|=1<<g}));return a=!0,A(),function(){dA(d),l(),a=!1}})}function Ze(e){let t;return _m(e,n=>t=n)(),t}function Em(e){let t,n=Xn(0),o=0,M=yt;function c(){return FE()?(r0(n),Yi(()=>{if(o===0){let b=!1;M=e.subscribe(z=>{t=z,b&&_S(n)}),b=!0}return o+=1,()=>{R7().then(()=>{o-=1,o===0&&M()})}}),t):Ze(e)}return"set"in e?{get current(){return c()},set current(b){e.set(b)}}:{get current(){return c()}}}var l1={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.check=e.isPromise=e.isInstanceOf=e.isOneOfType=e.isOneOf=e.isOptionOfType=e.isArrayOfType=e.isRecordOfType=e.isArray=e.isRecordWithKeys=e.isRecord=e.isDate=e.isString=e.isNumber=e.isBoolean=e.isExactly=e.isNotVoid=e.isNotUndefined=e.isNotNull=e.isNever=e.isUnknown=e.safeJsonParse=e.setBaseAssert=e.assert=e.defaultAssert=void 0;const t=x=>`expected to be ${x}`,n=(x,e0)=>{if(!x)throw new TypeError(e0)};e.defaultAssert=n;let o=e.defaultAssert;const M=(x,e0)=>o(x,e0);e.assert=M;function c(x){x&&(o=x)}e.setBaseAssert=c;const b=x=>JSON.parse(x);e.safeJsonParse=b;function z(x){return!0}e.isUnknown=z;function a(x,e0=t("unreachable")){throw new TypeError(e0)}e.isNever=a;function s(x,e0=t("not null")){(0,e.assert)(x!==null,e0)}e.isNotNull=s;function u(x,e0=t("not undefined")){(0,e.assert)(x!==void 0,e0)}e.isNotUndefined=u;function l(x,e0=t("neither null nor undefined")){(0,e.assert)(x!=null,e0)}e.isNotVoid=l;function A(x,e0,Z=t(`exactly ${e0}`)){(0,e.assert)(x===e0,Z)}e.isExactly=A;function d(x,e0=t("a boolean")){(0,e.assert)(typeof x=="boolean",e0)}e.isBoolean=d;function W(x,e0=t("a number")){(0,e.assert)(typeof x=="number",e0)}e.isNumber=W;function g(x,e0=t("a string")){(0,e.assert)(typeof x=="string",e0)}e.isString=g;function L(x,e0=t("a Date")){(0,e.assert)(x instanceof Date,e0)}e.isDate=L;function R(x,e0=t("a record")){(0,e.assert)(typeof x=="object",e0),s(x,e0);for(const Z of Object.keys(x))g(Z,e0)}e.isRecord=R;function E(x,e0,Z=t(`a record with keys ${e0.join(", ")}`)){R(x,Z);for(const j of e0)u(x[j])}e.isRecordWithKeys=E;function k(x,e0=t("an array")){(0,e.assert)(Array.isArray(x),e0)}e.isArray=k;function B(x,e0,Z=t("a record of given type"),j=t("of given type")){R(x,Z);for(const t0 of Object.values(x))e0(t0,j)}e.isRecordOfType=B;function I(x,e0,Z=t("an array of given type"),j=t("of given type")){k(x,Z);for(const t0 of x)e0(t0,j)}e.isArrayOfType=I;function S(x,e0,Z=t("option of given type")){x!==void 0&&e0(x,Z)}e.isOptionOfType=S;function N(x,e0,Z=t(`one of ${e0.join(", ")}`)){(0,e.assert)(e0.includes(x),Z)}e.isOneOf=N;function P(x,e0,Z=t("one of type"),j){for(const t0 of e0)try{t0(x,j);return}catch{}throw new TypeError(Z)}e.isOneOfType=P;function J(x,e0,Z=t("an instance of given constructor")){(0,e.assert)(x instanceof e0,Z)}e.isInstanceOf=J;function K(x,e0=t("a promise")){J(x,Promise,e0)}e.isPromise=K;function V(x){return e0=>{try{return x(e0),!0}catch{return!1}}}e.check=V})(l1);const nM="planner-timeline",Yl="planner-weekly",ZW="planner-release-notes",S7="obsidianContext",Sm="dateRangeContext",ES="errorContext",Wf="YYYY-MM-DD",SS="YYYY-MM-DD",p8="MMM, D",kS="yyyy-MM-dd",mf="--",Ti="clock",XS="YYYY-MM-DDTHH:mm:ss",k7=30,z8=50,a8=15,CS=6,xS=2,FS=200,s8=8e3,X7=100,IS=5*60*1e3,O8="NEEDS-ACTION",PS=4,US="https://obsidian.md/plugins?id=dataview",$S=["any-key","audio-file","blocks","broken-link","bullet-list","calendar-with-checkmark","calendar-clock","calendar-range","checkmark","create-new","cross","cross-in-box","crossed-star","dice","document","documents","dot-network","enter","expand-vertically","filled-pin","folder","gear","go-to-file","hashtag","help","horizontal-split","image-file","info","install","languages","left-arrow","left-arrow-with-tail","lines-of-text","link","logo-crystal","magnifying-glass","microphone","microphone-filled","open-vault","pane-layout","paper-plane","pdf-file","pencil","pin","popup-open","presentation","reset","right-arrow","right-arrow-with-tail","right-triangle","search","sheets-in-box","star","star-list","switch","three-horizontal-bars","trash","two-columns","up-and-down-arrows","uppercase-lowercase-a","vault","vertical-split","vertical-three-dots"],ZO=no(window.moment(),e=>{const t=setInterval(()=>{e(window.moment())},1e3);return()=>{clearInterval(t)}}),C7=Em(ZO),km=G1(ZO,e=>t=>e.isSame(t,"day")),HS=["task","bullet"],YS=["monday","sunday","saturday","friday"],Xm={snapStepMinutes:10,progressIndicator:"bar",showTaskNotification:!1,zoomLevel:2,timelineIcon:"calendar-with-checkmark",endLabel:"All done",startHour:6,timelineDateFormat:Wf,centerNeedle:!1,plannerHeading:"Day planner",plannerHeadingLevel:1,timelineColored:!1,timelineStartColor:"#006466",timelineEndColor:"#4d194d",timestampFormat:"HH:mm",hourFormat:"H",dataviewSource:"",extendDurationUntilNext:!1,defaultDurationMinutes:30,minimalDurationMinutes:10,showTimestampInTaskBlock:!1,showUncheduledTasks:!0,showUnscheduledNestedTasks:!0,showNow:!0,showNext:!0,pluginVersion:"",showCompletedTasks:!0,showSubtasksInTaskBlocks:!0,icals:[],colorOverrides:[],releaseNotes:!0,taskStatusOnCreation:" ",eventFormatOnCreation:"task",sortTasksInPlanAfterEdit:!1,firstDayOfWeek:"monday",multiDayRange:"3-days",showTimeTracker:!1};({...Xm});const ue=xn(Xm);var x7=Symbol.for("immer-nothing"),u8=Symbol.for("immer-draftable"),L2=Symbol.for("immer-state");function Eo(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var fz=Object.getPrototypeOf;function dz(e){return!!e&&!!e[L2]}function ob(e){var t;return e?F7(e)||Array.isArray(e)||!!e[u8]||!!((t=e.constructor)!=null&&t[u8])||Rf(e)||yf(e):!1}var jS=Object.prototype.constructor.toString();function F7(e){if(!e||typeof e!="object")return!1;const t=fz(e);if(t===null)return!0;const n=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return n===Object?!0:typeof n=="function"&&Function.toString.call(n)===jS}function yA(e,t){gf(e)===0?Reflect.ownKeys(e).forEach(n=>{t(n,e[n],e)}):e.forEach((n,o)=>t(o,n,e))}function gf(e){const t=e[L2];return t?t.type_:Array.isArray(e)?1:Rf(e)?2:yf(e)?3:0}function JW(e,t){return gf(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function I7(e,t,n){const o=gf(e);o===2?e.set(t,n):o===3?e.add(n):e[t]=n}function VS(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function Rf(e){return e instanceof Map}function yf(e){return e instanceof Set}function Ic(e){return e.copy_||e.base_}function QW(e,t){if(Rf(e))return new Map(e);if(yf(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const n=F7(e);if(t===!0||t==="class_only"&&!n){const o=Object.getOwnPropertyDescriptors(e);delete o[L2];let M=Reflect.ownKeys(o);for(let c=0;c<M.length;c++){const b=M[c],z=o[b];z.writable===!1&&(z.writable=!0,z.configurable=!0),(z.get||z.set)&&(o[b]={configurable:!0,writable:!0,enumerable:z.enumerable,value:e[b]})}return Object.create(fz(e),o)}else{const o=fz(e);if(o!==null&&n)return{...e};const M=Object.create(o);return Object.assign(M,e)}}function Cm(e,t=!1){return Lf(e)||dz(e)||!ob(e)||(gf(e)>1&&(e.set=e.add=e.clear=e.delete=GS),Object.freeze(e),t&&Object.entries(e).forEach(([n,o])=>Cm(o,!0))),e}function GS(){Eo(2)}function Lf(e){return Object.isFrozen(e)}var KS={};function rb(e){const t=KS[e];return t||Eo(0,e),t}var lO;function P7(){return lO}function ZS(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function l8(e,t){t&&(rb("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function e6(e){t6(e),e.drafts_.forEach(JS),e.drafts_=null}function t6(e){e===lO&&(lO=e.parent_)}function A8(e){return lO=ZS(lO,e)}function JS(e){const t=e[L2];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function f8(e,t){t.unfinalizedDrafts_=t.drafts_.length;const n=t.drafts_[0];return e!==void 0&&e!==n?(n[L2].modified_&&(e6(t),Eo(4)),ob(e)&&(e=LA(t,e),t.parent_||vA(t,e)),t.patches_&&rb("Patches").generateReplacementPatches_(n[L2].base_,e,t.patches_,t.inversePatches_)):e=LA(t,n,[]),e6(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==x7?e:void 0}function LA(e,t,n){if(Lf(t))return t;const o=t[L2];if(!o)return yA(t,(M,c)=>d8(e,o,t,M,c,n)),t;if(o.scope_!==e)return t;if(!o.modified_)return vA(e,o.base_,!0),o.base_;if(!o.finalized_){o.finalized_=!0,o.scope_.unfinalizedDrafts_--;const M=o.copy_;let c=M,b=!1;o.type_===3&&(c=new Set(M),M.clear(),b=!0),yA(c,(z,a)=>d8(e,o,M,z,a,n,b)),vA(e,M,!1),n&&e.patches_&&rb("Patches").generatePatches_(o,n,e.patches_,e.inversePatches_)}return o.copy_}function d8(e,t,n,o,M,c,b){if(dz(M)){const z=c&&t&&t.type_!==3&&!JW(t.assigned_,o)?c.concat(o):void 0,a=LA(e,M,z);if(I7(n,o,a),dz(a))e.canAutoFreeze_=!1;else return}else b&&n.add(M);if(ob(M)&&!Lf(M)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;LA(e,M),(!t||!t.scope_.parent_)&&typeof o!="symbol"&&Object.prototype.propertyIsEnumerable.call(n,o)&&vA(e,M)}}function vA(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Cm(t,n)}function QS(e,t){const n=Array.isArray(e),o={type_:n?1:0,scope_:t?t.scope_:P7(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let M=o,c=xm;n&&(M=[o],c=AO);const{revoke:b,proxy:z}=Proxy.revocable(M,c);return o.draft_=z,o.revoke_=b,z}var xm={get(e,t){if(t===L2)return e;const n=Ic(e);if(!JW(n,t))return ek(e,n,t);const o=n[t];return e.finalized_||!ob(o)?o:o===Hh(e.base_,t)?(Yh(e),e.copy_[t]=o6(o,e)):o},has(e,t){return t in Ic(e)},ownKeys(e){return Reflect.ownKeys(Ic(e))},set(e,t,n){const o=U7(Ic(e),t);if(o!=null&&o.set)return o.set.call(e.draft_,n),!0;if(!e.modified_){const M=Hh(Ic(e),t),c=M==null?void 0:M[L2];if(c&&c.base_===n)return e.copy_[t]=n,e.assigned_[t]=!1,!0;if(VS(n,M)&&(n!==void 0||JW(e.base_,t)))return!0;Yh(e),n6(e)}return e.copy_[t]===n&&(n!==void 0||t in e.copy_)||Number.isNaN(n)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=n,e.assigned_[t]=!0),!0},deleteProperty(e,t){return Hh(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,Yh(e),n6(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const n=Ic(e),o=Reflect.getOwnPropertyDescriptor(n,t);return o&&{writable:!0,configurable:e.type_!==1||t!=="length",enumerable:o.enumerable,value:n[t]}},defineProperty(){Eo(11)},getPrototypeOf(e){return fz(e.base_)},setPrototypeOf(){Eo(12)}},AO={};yA(xm,(e,t)=>{AO[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});AO.deleteProperty=function(e,t){return AO.set.call(this,e,t,void 0)};AO.set=function(e,t,n){return xm.set.call(this,e[0],t,n,e[0])};function Hh(e,t){const n=e[L2];return(n?Ic(n):e)[t]}function ek(e,t,n){var M;const o=U7(t,n);return o?"value"in o?o.value:(M=o.get)==null?void 0:M.call(e.draft_):void 0}function U7(e,t){if(!(t in e))return;let n=fz(e);for(;n;){const o=Object.getOwnPropertyDescriptor(n,t);if(o)return o;n=fz(n)}}function n6(e){e.modified_||(e.modified_=!0,e.parent_&&n6(e.parent_))}function Yh(e){e.copy_||(e.copy_=QW(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var tk=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(t,n,o)=>{if(typeof t=="function"&&typeof n!="function"){const c=n;n=t;const b=this;return function(a=c,...s){return b.produce(a,u=>n.call(this,u,...s))}}typeof n!="function"&&Eo(6),o!==void 0&&typeof o!="function"&&Eo(7);let M;if(ob(t)){const c=A8(this),b=o6(t,void 0);let z=!0;try{M=n(b),z=!1}finally{z?e6(c):t6(c)}return l8(c,o),f8(M,c)}else if(!t||typeof t!="object"){if(M=n(t),M===void 0&&(M=t),M===x7&&(M=void 0),this.autoFreeze_&&Cm(M,!0),o){const c=[],b=[];rb("Patches").generateReplacementPatches_(t,M,c,b),o(c,b)}return M}else Eo(1,t)},this.produceWithPatches=(t,n)=>{if(typeof t=="function")return(b,...z)=>this.produceWithPatches(b,a=>t(a,...z));let o,M;return[this.produce(t,n,(b,z)=>{o=b,M=z}),o,M]},typeof(e==null?void 0:e.autoFreeze)=="boolean"&&this.setAutoFreeze(e.autoFreeze),typeof(e==null?void 0:e.useStrictShallowCopy)=="boolean"&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){ob(e)||Eo(8),dz(e)&&(e=nk(e));const t=A8(this),n=o6(e,void 0);return n[L2].isManual_=!0,t6(t),n}finishDraft(e,t){const n=e&&e[L2];(!n||!n.isManual_)&&Eo(9);const{scope_:o}=n;return l8(o,t),f8(void 0,o)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){const M=t[n];if(M.path.length===0&&M.op==="replace"){e=M.value;break}}n>-1&&(t=t.slice(n+1));const o=rb("Patches").applyPatches_;return dz(e)?o(e,t):this.produce(e,M=>o(M,t))}};function o6(e,t){const n=Rf(e)?rb("MapSet").proxyMap_(e,t):yf(e)?rb("MapSet").proxySet_(e,t):QS(e,t);return(t?t.scope_:P7()).drafts_.push(n),n}function nk(e){return dz(e)||Eo(10,e),$7(e)}function $7(e){if(!ob(e)||Lf(e))return e;const t=e[L2];let n;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=QW(e,t.scope_.immer_.useStrictShallowCopy_)}else n=QW(e,!0);return yA(n,(o,M)=>{I7(n,o,$7(M))}),t&&(t.finalized_=!1),n}var v2=new tk,hi=v2.produce;v2.produceWithPatches.bind(v2);v2.setAutoFreeze.bind(v2);v2.setUseStrictShallowCopy.bind(v2);v2.applyPatches.bind(v2);v2.createDraft.bind(v2);v2.finishDraft.bind(v2);var NA={exports:{}};/** + * @license + * Lodash <https://lodash.com/> + * Copyright OpenJS Foundation and other contributors <https://openjsf.org/> + * Released under MIT license <https://lodash.com/license> + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */NA.exports;(function(e,t){(function(){function n(v,F,h){switch(h.length){case 0:return v.call(F);case 1:return v.call(F,h[0]);case 2:return v.call(F,h[0],h[1]);case 3:return v.call(F,h[0],h[1],h[2])}return v.apply(F,h)}function o(v,F,h,a0){for(var v0=-1,w0=v==null?0:v.length;++v0<w0;){var U1=v[v0];F(a0,U1,h(U1),v)}return a0}function M(v,F){for(var h=-1,a0=v==null?0:v.length;++h<a0&&F(v[h],h,v)!==!1;);return v}function c(v,F){for(var h=v==null?0:v.length;h--&&F(v[h],h,v)!==!1;);return v}function b(v,F){for(var h=-1,a0=v==null?0:v.length;++h<a0;)if(!F(v[h],h,v))return!1;return!0}function z(v,F){for(var h=-1,a0=v==null?0:v.length,v0=0,w0=[];++h<a0;){var U1=v[h];F(U1,h,v)&&(w0[v0++]=U1)}return w0}function a(v,F){return!!(v!=null&&v.length)&&k(v,F,0)>-1}function s(v,F,h){for(var a0=-1,v0=v==null?0:v.length;++a0<v0;)if(h(F,v[a0]))return!0;return!1}function u(v,F){for(var h=-1,a0=v==null?0:v.length,v0=Array(a0);++h<a0;)v0[h]=F(v[h],h,v);return v0}function l(v,F){for(var h=-1,a0=F.length,v0=v.length;++h<a0;)v[v0+h]=F[h];return v}function A(v,F,h,a0){var v0=-1,w0=v==null?0:v.length;for(a0&&w0&&(h=v[++v0]);++v0<w0;)h=F(h,v[v0],v0,v);return h}function d(v,F,h,a0){var v0=v==null?0:v.length;for(a0&&v0&&(h=v[--v0]);v0--;)h=F(h,v[v0],v0,v);return h}function W(v,F){for(var h=-1,a0=v==null?0:v.length;++h<a0;)if(F(v[h],h,v))return!0;return!1}function g(v){return v.split("")}function L(v){return v.match(Bd)||[]}function R(v,F,h){var a0;return h(v,function(v0,w0,U1){if(F(v0,w0,U1))return a0=w0,!1}),a0}function E(v,F,h,a0){for(var v0=v.length,w0=h+(a0?1:-1);a0?w0--:++w0<v0;)if(F(v[w0],w0,v))return w0;return-1}function k(v,F,h){return F===F?p1(v,F,h):E(v,I,h)}function B(v,F,h,a0){for(var v0=h-1,w0=v.length;++v0<w0;)if(a0(v[v0],F))return v0;return-1}function I(v){return v!==v}function S(v,F){var h=v==null?0:v.length;return h?V(v,F)/h:r2}function N(v){return function(F){return F==null?X:F[v]}}function P(v){return function(F){return v==null?X:v[F]}}function J(v,F,h,a0,v0){return v0(v,function(w0,U1,Me){h=a0?(a0=!1,w0):F(h,w0,U1,Me)}),h}function K(v,F){var h=v.length;for(v.sort(F);h--;)v[h]=v[h].value;return v}function V(v,F){for(var h,a0=-1,v0=v.length;++a0<v0;){var w0=F(v[a0]);w0!==X&&(h=h===X?w0:h+w0)}return h}function x(v,F){for(var h=-1,a0=Array(v);++h<v;)a0[h]=F(h);return a0}function e0(v,F){return u(F,function(h){return[h,v[h]]})}function Z(v){return v&&v.slice(0,p0(v)+1).replace(ra,"")}function j(v){return function(F){return v(F)}}function t0(v,F){return u(F,function(h){return v[h]})}function O0(v,F){return v.has(F)}function m0(v,F){for(var h=-1,a0=v.length;++h<a0&&k(F,v[h],0)>-1;);return h}function q0(v,F){for(var h=v.length;h--&&k(F,v[h],0)>-1;);return h}function C(v,F){for(var h=v.length,a0=0;h--;)v[h]===F&&++a0;return a0}function z0(v){return"\\"+Yd[v]}function d0(v,F){return v==null?X:v[F]}function _(v){return qa.test(v)}function D0(v){return $d.test(v)}function o0(v){for(var F,h=[];!(F=v.next()).done;)h.push(F.value);return h}function i0(v){var F=-1,h=Array(v.size);return v.forEach(function(a0,v0){h[++F]=[v0,a0]}),h}function c0(v,F){return function(h){return v(F(h))}}function s0(v,F){for(var h=-1,a0=v.length,v0=0,w0=[];++h<a0;){var U1=v[h];U1!==F&&U1!==N0||(v[h]=N0,w0[v0++]=h)}return w0}function L0(v){var F=-1,h=Array(v.size);return v.forEach(function(a0){h[++F]=a0}),h}function G0(v){var F=-1,h=Array(v.size);return v.forEach(function(a0){h[++F]=[a0,a0]}),h}function p1(v,F,h){for(var a0=h-1,v0=v.length;++a0<v0;)if(v[a0]===F)return a0;return-1}function n1(v,F,h){for(var a0=h+1;a0--;)if(v[a0]===F)return a0;return a0}function $(v){return _(v)?g0(v):Gd(v)}function n0(v){return _(v)?S0(v):g(v)}function p0(v){for(var F=v.length;F--&&Nd.test(v.charAt(F)););return F}function g0(v){for(var F=fa.lastIndex=0;fa.test(v);)++F;return F}function S0(v){return v.match(fa)||[]}function K0(v){return v.match(da)||[]}var X,j0="4.17.21",U0=200,T1="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",f1="Expected a function",ot="Invalid `variable` option passed into `_.template`",vt="__lodash_hash_undefined__",u0=500,N0="__lodash_placeholder__",V0=1,i1=2,O1=4,de=1,rt=2,j1=1,Ue=2,Te=4,x1=8,Xe=16,T=32,G=64,M0=128,l0=256,y0=512,_0=30,E0="...",c1=800,K1=16,$e=1,_e=2,Et=3,qe=1/0,ve=9007199254740991,T2=17976931348623157e292,r2=NaN,Z1=4294967295,Jo=Z1-1,Qo=Z1>>>1,so=[["ary",M0],["bind",j1],["bindKey",Ue],["curry",x1],["curryRight",Xe],["flip",y0],["partial",T],["partialRight",G],["rearg",l0]],yn="[object Arguments]",M2="[object Array]",gd="[object AsyncFunction]",Ji="[object Boolean]",EM="[object Date]",Rd="[object DOMException]",ub="[object Error]",lb="[object Function]",pu="[object GeneratorFunction]",i2="[object Map]",Qi="[object Number]",Ab="[object Null]",Oo="[object Object]",ec="[object Promise]",yd="[object Proxy]",tc="[object RegExp]",c2="[object Set]",SM="[object String]",nc="[object Symbol]",zu="[object Undefined]",oc="[object WeakMap]",Ld="[object WeakSet]",rc="[object ArrayBuffer]",kM="[object DataView]",fb="[object Float32Array]",db="[object Float64Array]",qb="[object Int8Array]",Mc="[object Int16Array]",Zz="[object Int32Array]",hb="[object Uint8Array]",XM="[object Uint8ClampedArray]",Wb="[object Uint16Array]",Jz="[object Uint32Array]",au=/\b__p \+= '';/g,su=/\b(__p \+=) '' \+/g,Qz=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Ou=/&(?:amp|lt|gt|quot|#39);/g,ea=/[&<>"']/g,ta=RegExp(Ou.source),na=RegExp(ea.source),CM=/<%-([\s\S]+?)%>/g,uu=/<%([\s\S]+?)%>/g,oa=/<%=([\s\S]+?)%>/g,vd=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,lu=/^\w*$/,Au=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,mb=/[\\^$.*+?()[\]{}|]/g,fu=RegExp(mb.source),ra=/^\s+/,Nd=/\s/,wd=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,du=/\{\n\/\* \[wrapped with (.+)\] \*/,Dd=/,? & /,Bd=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Td=/[()=,{}\[\]\/\s]/,_d=/\\(\\)?/g,Ma=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,qu=/\w*$/,Ed=/^[-+]0x[0-9a-f]+$/i,Sd=/^0b[01]+$/i,kd=/^\[object .+?Constructor\]$/,Xd=/^0o[0-7]+$/i,Ne=/^(?:0|[1-9]\d*)$/,he=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,gb=/($^)/,Cd=/['\n\r\u2028\u2029\\]/g,Rb="\\ud800-\\udfff",xd="\\u0300-\\u036f",Fd="\\ufe20-\\ufe2f",Id="\\u20d0-\\u20ff",ia=xd+Fd+Id,hu="\\u2700-\\u27bf",lt="a-z\\xdf-\\xf6\\xf8-\\xff",ca="\\xac\\xb1\\xd7\\xf7",Xr="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Wu="\\u2000-\\u206f",ba=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Ln="A-Z\\xc0-\\xd6\\xd8-\\xde",pa="\\ufe0e\\ufe0f",za=ca+Xr+Wu+ba,yb="['’]",mu="["+Rb+"]",aa="["+za+"]",ic="["+ia+"]",rn="\\d+",Pd="["+hu+"]",vn="["+lt+"]",gu="[^"+Rb+za+rn+hu+lt+Ln+"]",Lb="\\ud83c[\\udffb-\\udfff]",er="(?:"+ic+"|"+Lb+")",cc="[^"+Rb+"]",bc="(?:\\ud83c[\\udde6-\\uddff]){2}",We="[\\ud800-\\udbff][\\udc00-\\udfff]",Nn="["+Ln+"]",vb="\\u200d",Ru="(?:"+vn+"|"+gu+")",sa="(?:"+Nn+"|"+gu+")",yu="(?:"+yb+"(?:d|ll|m|re|s|t|ve))?",Lu="(?:"+yb+"(?:D|LL|M|RE|S|T|VE))?",vu=er+"?",Oa="["+pa+"]?",Nb="(?:"+vb+"(?:"+[cc,bc,We].join("|")+")"+Oa+vu+")*",xM="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Ud="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",ua=Oa+vu+Nb,Nu="(?:"+[Pd,bc,We].join("|")+")"+ua,la="(?:"+[cc+ic+"?",ic,bc,We,mu].join("|")+")",Aa=RegExp(yb,"g"),wu=RegExp(ic,"g"),fa=RegExp(Lb+"(?="+Lb+")|"+la+ua,"g"),da=RegExp([Nn+"?"+vn+"+"+yu+"(?="+[aa,Nn,"$"].join("|")+")",sa+"+"+Lu+"(?="+[aa,Nn+Ru,"$"].join("|")+")",Nn+"?"+Ru+"+"+yu,Nn+"+"+Lu,Ud,xM,rn,Nu].join("|"),"g"),qa=RegExp("["+vb+Rb+ia+pa+"]"),$d=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Du=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],wn=-1,le={};le[fb]=le[db]=le[qb]=le[Mc]=le[Zz]=le[hb]=le[XM]=le[Wb]=le[Jz]=!0,le[yn]=le[M2]=le[rc]=le[Ji]=le[kM]=le[EM]=le[ub]=le[lb]=le[i2]=le[Qi]=le[Oo]=le[tc]=le[c2]=le[SM]=le[oc]=!1;var J1={};J1[yn]=J1[M2]=J1[rc]=J1[kM]=J1[Ji]=J1[EM]=J1[fb]=J1[db]=J1[qb]=J1[Mc]=J1[Zz]=J1[i2]=J1[Qi]=J1[Oo]=J1[tc]=J1[c2]=J1[SM]=J1[nc]=J1[hb]=J1[XM]=J1[Wb]=J1[Jz]=!0,J1[ub]=J1[lb]=J1[oc]=!1;var Bu={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},Tu={"&":"&","<":"<",">":">",'"':""","'":"'"},Hd={"&":"&","<":"<",">":">",""":'"',"'":"'"},Yd={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},jd=parseFloat,Vd=parseInt,_u=typeof e2=="object"&&e2&&e2.Object===Object&&e2,FM=typeof self=="object"&&self&&self.Object===Object&&self,Nt=_u||FM||Function("return this")(),ha=t&&!t.nodeType&&t,uo=ha&&!0&&e&&!e.nodeType&&e,Wa=uo&&uo.exports===ha,_2=Wa&&_u.process,Ht=function(){try{var v=uo&&uo.require&&uo.require("util").types;return v||_2&&_2.binding&&_2.binding("util")}catch{}}(),Eu=Ht&&Ht.isArrayBuffer,Su=Ht&&Ht.isDate,ku=Ht&&Ht.isMap,Cr=Ht&&Ht.isRegExp,In=Ht&&Ht.isSet,ma=Ht&&Ht.isTypedArray,Gd=N("length"),Kd=P(Bu),Zd=P(Tu),Jd=P(Hd),Qd=function v(F){function h(r){if(Ye(r)&&!d1(r)&&!(r instanceof w0)){if(r instanceof v0)return r;if(be.call(r,"__wrapped__"))return jt(r)}return new v0(r)}function a0(){}function v0(r,i){this.__wrapped__=r,this.__actions__=[],this.__chain__=!!i,this.__index__=0,this.__values__=X}function w0(r){this.__wrapped__=r,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Z1,this.__views__=[]}function U1(){var r=new w0(this.__wrapped__);return r.__actions__=Xt(this.__actions__),r.__dir__=this.__dir__,r.__filtered__=this.__filtered__,r.__iteratees__=Xt(this.__iteratees__),r.__takeCount__=this.__takeCount__,r.__views__=Xt(this.__views__),r}function Me(){if(this.__filtered__){var r=new w0(this);r.__dir__=-1,r.__filtered__=!0}else r=this.clone(),r.__dir__*=-1;return r}function ga(){var r=this.__wrapped__.value(),i=this.__dir__,p=d1(r),O=i<0,f=p?r.length:0,q=L4(0,f,this.__views__),m=q.start,y=q.end,D=y-m,H=O?y:m-1,U=this.__iteratees__,Q=U.length,b0=0,A0=Q0(D,this.__takeCount__);if(!p||!O&&f==D&&A0==D)return _a(r,this.__actions__);var W0=[];e:for(;D--&&b0<A0;){H+=i;for(var k0=-1,R0=r[H];++k0<Q;){var F0=U[k0],P0=F0.iteratee,se=F0.type,Oe=P0(R0);if(se==_e)R0=Oe;else if(!Oe){if(se==$e)continue e;break e}}W0[b0++]=R0}return W0}function xr(r){var i=-1,p=r==null?0:r.length;for(this.clear();++i<p;){var O=r[i];this.set(O[0],O[1])}}function Pn(){this.__data__=Ec?Ec(null):{},this.size=0}function wb(r){var i=this.has(r)&&delete this.__data__[r];return this.size-=i?1:0,i}function e4(r){var i=this.__data__;if(Ec){var p=i[r];return p===vt?X:p}return be.call(i,r)?i[r]:X}function IM(r){var i=this.__data__;return Ec?i[r]!==X:be.call(i,r)}function Db(r,i){var p=this.__data__;return this.size+=this.has(r)?0:1,p[r]=Ec&&i===X?vt:i,this}function Un(r){var i=-1,p=r==null?0:r.length;for(this.clear();++i<p;){var O=r[i];this.set(O[0],O[1])}}function ie(){this.__data__=[],this.size=0}function t4(r){var i=this.__data__,p=sc(i,r);return!(p<0)&&(p==i.length-1?i.pop():Np.call(i,p,1),--this.size,!0)}function Xu(r){var i=this.__data__,p=sc(i,r);return p<0?X:i[p][1]}function Bb(r){return sc(this.__data__,r)>-1}function n4(r,i){var p=this.__data__,O=sc(p,r);return O<0?(++this.size,p.push([r,i])):p[O][1]=i,this}function lo(r){var i=-1,p=r==null?0:r.length;for(this.clear();++i<p;){var O=r[i];this.set(O[0],O[1])}}function o4(){this.size=0,this.__data__={hash:new xr,map:new(Tc||Un),string:new xr}}function Tb(r){var i=Zb(this,r).delete(r);return this.size-=i?1:0,i}function tr(r){return Zb(this,r).get(r)}function _b(r){return Zb(this,r).has(r)}function Cu(r,i){var p=Zb(this,r),O=p.size;return p.set(r,i),this.size+=p.size==O?0:1,this}function E2(r){var i=-1,p=r==null?0:r.length;for(this.__data__=new lo;++i<p;)this.add(r[i])}function xu(r){return this.__data__.set(r,vt),this}function Fu(r){return this.__data__.has(r)}function Mn(r){this.size=(this.__data__=new Un(r)).size}function Iu(){this.__data__=new Un,this.size=0}function pc(r){var i=this.__data__,p=i.delete(r);return this.size=i.size,p}function Fr(r){return this.__data__.get(r)}function Eb(r){return this.__data__.has(r)}function r4(r,i){var p=this.__data__;if(p instanceof Un){var O=p.__data__;if(!Tc||O.length<U0-1)return O.push([r,i]),this.size=++p.size,this;p=this.__data__=new lo(O)}return p.set(r,i),this.size=p.size,this}function Pu(r,i){var p=d1(r),O=!p&&Zr(r),f=!p&&!O&&H2(r),q=!p&&!O&&!f&&bi(r),m=p||O||f||q,y=m?x(r.length,Qe):[],D=y.length;for(var H in r)!i&&!be.call(r,H)||m&&(H=="length"||f&&(H=="offset"||H=="parent")||q&&(H=="buffer"||H=="byteLength"||H=="byteOffset")||Ct(H,D))||y.push(H);return y}function Uu(r){var i=r.length;return i?r[Da(0,i-1)]:X}function Sb(r,i){return mc(Xt(r),Ir(i,0,r.length))}function kb(r){return mc(Xt(r))}function zc(r,i,p){(p===X||Yn(r[i],p))&&(p!==X||i in r)||Ee(r,i,p)}function ac(r,i,p){var O=r[i];be.call(r,i)&&Yn(O,p)&&(p!==X||i in r)||Ee(r,i,p)}function sc(r,i){for(var p=r.length;p--;)if(Yn(r[p][0],i))return p;return-1}function M4(r,i,p,O){return $2(r,function(f,q,m){i(O,f,p(f),m)}),O}function $u(r,i){return r&&x2(i,ft(i),r)}function zt(r,i){return r&&x2(i,pn(i),r)}function Ee(r,i,p){i=="__proto__"&&wp?wp(r,i,{configurable:!0,enumerable:!0,value:p,writable:!0}):r[i]=p}function Ra(r,i){for(var p=-1,O=i.length,f=ce(O),q=r==null;++p<O;)f[p]=q?X:us(r,i[p]);return f}function Ir(r,i,p){return r===r&&(p!==X&&(r=r<=p?r:p),i!==X&&(r=r>=i?r:i)),r}function Dn(r,i,p,O,f,q){var m,y=i&V0,D=i&i1,H=i&O1;if(p&&(m=f?p(r,O,f,q):p(r)),m!==X)return m;if(!Ce(r))return r;var U=d1(r);if(U){if(m=Jb(r),!y)return Xt(r,m)}else{var Q=Pt(r),b0=Q==lb||Q==pu;if(H2(r))return Sa(r,y);if(Q==Oo||Q==yn||b0&&!f){if(m=D||b0?{}:Qb(r),!y)return D?q4(r,zt(m,r)):d4(r,$u(m,r))}else{if(!J1[Q])return f?r:{};m=b3(r,Q,y)}}q||(q=new Mn);var A0=q.get(r);if(A0)return A0;q.set(r,m),Al(r)?r.forEach(function(R0){m.add(Dn(R0,i,p,R0,r,q))}):Bs(r)&&r.forEach(function(R0,F0){m.set(F0,Dn(R0,i,p,F0,r,q))});var W0=H?D?Ha:Wc:D?pn:ft,k0=U?X:W0(r);return M(k0||r,function(R0,F0){k0&&(F0=R0,R0=r[F0]),ac(m,F0,Dn(R0,i,p,F0,r,q))}),m}function i4(r){var i=ft(r);return function(p){return Xb(p,r,i)}}function Xb(r,i,p){var O=p.length;if(r==null)return!O;for(r=we(r);O--;){var f=p[O],q=i[f],m=r[f];if(m===X&&!(f in r)||!q(m))return!1}return!0}function PM(r,i,p){if(typeof r!="function")throw new Vn(f1);return ii(function(){r.apply(X,p)},i)}function Pr(r,i,p,O){var f=-1,q=a,m=!0,y=r.length,D=[],H=i.length;if(!y)return D;p&&(i=u(i,j(p))),O?(q=s,m=!1):i.length>=U0&&(q=O0,m=!1,i=new E2(i));e:for(;++f<y;){var U=r[f],Q=p==null?U:p(U);if(U=O||U!==0?U:0,m&&Q===Q){for(var b0=H;b0--;)if(i[b0]===Q)continue e;D.push(U)}else q(i,Q,O)||D.push(U)}return D}function UM(r,i){var p=!0;return $2(r,function(O,f,q){return p=!!i(O,f,q)}),p}function nr(r,i,p){for(var O=-1,f=r.length;++O<f;){var q=r[O],m=i(q);if(m!=null&&(y===X?m===m&&!Tn(m):p(m,y)))var y=m,D=q}return D}function Oc(r,i,p,O){var f=r.length;for(p=h1(p),p<0&&(p=-p>f?0:f+p),O=O===X||O>f?f:h1(O),O<0&&(O+=f),O=p>O?0:S3(O);p<O;)r[p++]=i;return r}function uc(r,i){var p=[];return $2(r,function(O,f,q){i(O,f,q)&&p.push(O)}),p}function He(r,i,p,O,f){var q=-1,m=r.length;for(p||(p=Bn),f||(f=[]);++q<m;){var y=r[q];i>0&&p(y)?i>1?He(y,i-1,p,O,f):l(f,y):O||(f[f.length]=y)}return f}function S2(r,i){return r&&kc(r,i,ft)}function ya(r,i){return r&&Ml(r,i,ft)}function Cb(r,i){return z(i,function(p){return go(r[p])})}function Ur(r,i){i=a2(i,r);for(var p=0,O=i.length;r!=null&&p<O;)r=r[P2(i[p++])];return p&&p==O?r:X}function Hu(r,i,p){var O=i(r);return d1(r)?O:l(O,p(r))}function At(r){return r==null?r===X?zu:Ab:vo&&vo in we(r)?y4(r):z3(r)}function $r(r,i){return r>i}function Yu(r,i){return r!=null&&be.call(r,i)}function w(r,i){return r!=null&&i in we(r)}function $M(r,i,p){return r>=Q0(i,p)&&r<Ae(i,p)}function HM(r,i,p){for(var O=p?s:a,f=r[0].length,q=r.length,m=q,y=ce(q),D=1/0,H=[];m--;){var U=r[m];m&&i&&(U=u(U,j(i))),D=Q0(U.length,D),y[m]=!p&&(i||f>=120&&U.length>=120)?new E2(m&&U):X}U=r[0];var Q=-1,b0=y[0];e:for(;++Q<f&&H.length<D;){var A0=U[Q],W0=i?i(A0):A0;if(A0=p||A0!==0?A0:0,!(b0?O0(b0,W0):O(H,W0,p))){for(m=q;--m;){var k0=y[m];if(!(k0?O0(k0,W0):O(r[m],W0,p)))continue e}b0&&b0.push(W0),H.push(A0)}}return H}function $n(r,i,p,O){return S2(r,function(f,q,m){i(O,p(f),q,m)}),O}function g1(r,i,p){i=a2(i,r),r=Mp(r,i);var O=r==null?r:r[P2(Vt(i))];return O==null?X:n(O,r,p)}function ju(r){return Ye(r)&&At(r)==yn}function c4(r){return Ye(r)&&At(r)==rc}function b4(r){return Ye(r)&&At(r)==EM}function p2(r,i,p,O,f){return r===i||(r==null||i==null||!Ye(r)&&!Ye(i)?r!==r&&i!==i:p4(r,i,p,O,p2,f))}function p4(r,i,p,O,f,q){var m=d1(r),y=d1(i),D=m?M2:Pt(r),H=y?M2:Pt(i);D=D==yn?Oo:D,H=H==yn?Oo:H;var U=D==Oo,Q=H==Oo,b0=D==H;if(b0&&H2(r)){if(!H2(i))return!1;m=!0,U=!1}if(b0&&!U)return q||(q=new Mn),m||bi(r)?Ua(r,i,p,O,f,q):R4(r,i,D,p,O,f,q);if(!(p&de)){var A0=U&&be.call(r,"__wrapped__"),W0=Q&&be.call(i,"__wrapped__");if(A0||W0){var k0=A0?r.value():r,R0=W0?i.value():i;return q||(q=new Mn),f(k0,R0,p,O,q)}}return!!b0&&(q||(q=new Mn),$a(r,i,p,O,f,q))}function z4(r){return Ye(r)&&Pt(r)==i2}function La(r,i,p,O){var f=p.length,q=f,m=!O;if(r==null)return!q;for(r=we(r);f--;){var y=p[f];if(m&&y[2]?y[1]!==r[y[0]]:!(y[0]in r))return!1}for(;++f<q;){y=p[f];var D=y[0],H=r[D],U=y[1];if(m&&y[2]){if(H===X&&!(D in r))return!1}else{var Q=new Mn;if(O)var b0=O(H,U,D,r,i,Q);if(!(b0===X?p2(U,H,de|rt,O,Q):b0))return!1}}return!0}function Vu(r){return!(!Ce(r)||Ya(r))&&(go(r)?xe:kd).test(br(r))}function a4(r){return Ye(r)&&At(r)==tc}function Ao(r){return Ye(r)&&Pt(r)==c2}function s4(r){return Ye(r)&&Zt(r.length)&&!!le[At(r)]}function Gu(r){return typeof r=="function"?r:r==null?Ft:typeof r=="object"?d1(r)?Zu(r[0],r[1]):Ku(r):Bc(r)}function va(r){if(!ZM(r))return tl(r);var i=[];for(var p in we(r))be.call(r,p)&&p!="constructor"&&i.push(p);return i}function O4(r){if(!Ce(r))return cr(r);var i=ZM(r),p=[];for(var O in r)(O!="constructor"||!i&&be.call(r,O))&&p.push(O);return p}function Na(r,i){return r<i}function k2(r,i){var p=-1,O=Kt(r)?ce(r.length):[];return $2(r,function(f,q,m){O[++p]=i(f,q,m)}),O}function Ku(r){var i=jr(r);return i.length==1&&i[0][2]?rp(i[0][0],i[0][1]):function(p){return p===r||La(p,r,i)}}function Zu(r,i){return ep(r)&&op(i)?rp(P2(r),i):function(p){var O=us(p,r);return O===X&&O===i?ls(p,r):p2(i,O,de|rt)}}function xb(r,i,p,O,f){r!==i&&kc(i,function(q,m){if(f||(f=new Mn),Ce(q))u4(r,i,m,p,xb,O,f);else{var y=O?O(Va(r,m),q,m+"",r,i,f):X;y===X&&(y=q),zc(r,m,y)}},pn)}function u4(r,i,p,O,f,q,m){var y=Va(r,p),D=Va(i,p),H=m.get(D);if(H)return zc(r,p,H),X;var U=q?q(y,D,p+"",r,i,m):X,Q=U===X;if(Q){var b0=d1(D),A0=!b0&&H2(D),W0=!b0&&!A0&&bi(D);U=D,b0||A0||W0?d1(y)?U=y:Je(y)?U=Xt(y):A0?(Q=!1,U=Sa(D,!0)):W0?(Q=!1,U=$b(D,!0)):U=[]:wc(D)||Zr(D)?(U=y,Zr(y)?U=k3(y):Ce(y)&&!go(y)||(U=Qb(D))):Q=!1}Q&&(m.set(D,U),f(U,D,O,q,m),m.delete(D)),zc(r,p,U)}function Ju(r,i){var p=r.length;if(p)return i+=i<0?p:0,Ct(i,p)?r[i]:X}function or(r,i,p){i=i.length?u(i,function(f){return d1(f)?function(q){return Ur(q,f.length===1?f[0]:f)}:f}):[Ft];var O=-1;return i=u(i,j(o1())),K(k2(r,function(f,q,m){return{criteria:u(i,function(y){return y(f)}),index:++O,value:f}}),function(f,q){return Yr(f,q,p)})}function l4(r,i){return Qu(r,i,function(p,O){return ls(r,O)})}function Qu(r,i,p){for(var O=-1,f=i.length,q={};++O<f;){var m=i[O],y=Ur(r,m);p(y,m)&&lc(q,a2(m,r),y)}return q}function z2(r){return function(i){return Ur(i,r)}}function wa(r,i,p,O){var f=O?B:k,q=-1,m=i.length,y=r;for(r===i&&(i=Xt(i)),p&&(y=u(r,j(p)));++q<m;)for(var D=0,H=i[q],U=p?p(H):H;(D=f(y,U,D,O))>-1;)y!==r&&Np.call(y,D,1),Np.call(r,D,1);return r}function e3(r,i){for(var p=r?i.length:0,O=p-1;p--;){var f=i[p];if(p==O||f!==q){var q=f;Ct(f)?Np.call(r,f,1):bn(r,f)}}return r}function Da(r,i){return r+Bp(Rs()*(i-r+1))}function A4(r,i,p,O){for(var f=-1,q=Ae(No((i-r)/(p||1)),0),m=ce(q);q--;)m[O?q:++f]=r,r+=p;return m}function Ba(r,i){var p="";if(!r||i<1||i>ve)return p;do i%2&&(p+=r),i=Bp(i/2),i&&(r+=r);while(i);return p}function R1(r,i){return Ns(ja(r,i,Ft),r+"")}function t3(r){return Uu(ni(r))}function f4(r,i){var p=ni(r);return mc(p,Ir(i,0,p.length))}function lc(r,i,p,O){if(!Ce(r))return r;i=a2(i,r);for(var f=-1,q=i.length,m=q-1,y=r;y!=null&&++f<q;){var D=P2(i[f]),H=p;if(D==="__proto__"||D==="constructor"||D==="prototype")return r;if(f!=m){var U=y[D];H=O?O(U,D,y):X,H===X&&(H=Ce(U)?U:Ct(i[f+1])?[]:{})}ac(y,D,H),y=y[D]}return r}function Ta(r){return mc(ni(r))}function St(r,i,p){var O=-1,f=r.length;i<0&&(i=-i>f?0:f+i),p=p>f?f:p,p<0&&(p+=f),f=i>p?0:p-i>>>0,i>>>=0;for(var q=ce(f);++O<f;)q[O]=r[O+i];return q}function Fb(r,i){var p;return $2(r,function(O,f,q){return p=i(O,f,q),!p}),!!p}function Ib(r,i,p){var O=0,f=r==null?O:r.length;if(typeof i=="number"&&i===i&&f<=Qo){for(;O<f;){var q=O+f>>>1,m=r[q];m!==null&&!Tn(m)&&(p?m<=i:m<i)?O=q+1:f=q}return f}return Pb(r,i,Ft,p)}function Pb(r,i,p,O){var f=0,q=r==null?0:r.length;if(q===0)return 0;i=p(i);for(var m=i!==i,y=i===null,D=Tn(i),H=i===X;f<q;){var U=Bp((f+q)/2),Q=p(r[U]),b0=Q!==X,A0=Q===null,W0=Q===Q,k0=Tn(Q);if(m)var R0=O||W0;else R0=H?W0&&(O||b0):y?W0&&b0&&(O||!A0):D?W0&&b0&&!A0&&(O||!k0):!A0&&!k0&&(O?Q<=i:Q<i);R0?f=U+1:q=U}return Q0(q,Jo)}function n3(r,i){for(var p=-1,O=r.length,f=0,q=[];++p<O;){var m=r[p],y=i?i(m):m;if(!p||!Yn(y,D)){var D=y;q[f++]=m===0?0:m}}return q}function X2(r){return typeof r=="number"?r:Tn(r)?r2:+r}function Yt(r){if(typeof r=="string")return r;if(d1(r))return u(r,Yt)+"";if(Tn(r))return ol?ol.call(r):"";var i=r+"";return i=="0"&&1/r==-qe?"-0":i}function cn(r,i,p){var O=-1,f=a,q=r.length,m=!0,y=[],D=y;if(p)m=!1,f=s;else if(q>=U0){var H=i?null:D5(r);if(H)return L0(H);m=!1,f=O0,D=new E2}else D=i?[]:y;e:for(;++O<q;){var U=r[O],Q=i?i(U):U;if(U=p||U!==0?U:0,m&&Q===Q){for(var b0=D.length;b0--;)if(D[b0]===Q)continue e;i&&D.push(Q),y.push(U)}else f(D,Q,p)||(D!==y&&D.push(Q),y.push(U))}return y}function bn(r,i){return i=a2(i,r),r=Mp(r,i),r==null||delete r[P2(Vt(i))]}function o3(r,i,p,O){return lc(r,i,p(Ur(r,i)),O)}function Ac(r,i,p,O){for(var f=r.length,q=O?f:-1;(O?q--:++q<f)&&i(r[q],q,r););return p?St(r,O?0:q,O?q+1:f):St(r,O?q+1:0,O?f:q)}function _a(r,i){var p=r;return p instanceof w0&&(p=p.value()),A(i,function(O,f){return f.func.apply(f.thisArg,l([O],f.args))},p)}function Hr(r,i,p){var O=r.length;if(O<2)return O?cn(r[0]):[];for(var f=-1,q=ce(O);++f<O;)for(var m=r[f],y=-1;++y<O;)y!=f&&(q[f]=Pr(q[f]||m,r[y],i,p));return cn(He(q,1),i,p)}function fo(r,i,p){for(var O=-1,f=r.length,q=i.length,m={};++O<f;)p(m,r[O],O<q?i[O]:X);return m}function Ub(r){return Je(r)?r:[]}function Ea(r){return typeof r=="function"?r:Ft}function a2(r,i){return d1(r)?r:ep(r,i)?[r]:bl(Q1(r))}function rr(r,i,p){var O=r.length;return p=p===X?O:p,!i&&p>=O?r:St(r,i,p)}function Sa(r,i){if(i)return r.slice();var p=r.length,O=K3?K3(p):new r.constructor(p);return r.copy(O),O}function at(r){var i=new r.constructor(r.byteLength);return new Lp(i).set(new Lp(r)),i}function ka(r,i){return new r.constructor(i?at(r.buffer):r.buffer,r.byteOffset,r.byteLength)}function r3(r){var i=new r.constructor(r.source,qu.exec(r));return i.lastIndex=r.lastIndex,i}function C2(r){return Sc?we(Sc.call(r)):{}}function $b(r,i){return new r.constructor(i?at(r.buffer):r.buffer,r.byteOffset,r.length)}function fc(r,i){if(r!==i){var p=r!==X,O=r===null,f=r===r,q=Tn(r),m=i!==X,y=i===null,D=i===i,H=Tn(i);if(!y&&!H&&!q&&r>i||q&&m&&D&&!y&&!H||O&&m&&D||!p&&D||!f)return 1;if(!O&&!q&&!H&&r<i||H&&p&&f&&!O&&!q||y&&p&&f||!m&&f||!D)return-1}return 0}function Yr(r,i,p){for(var O=-1,f=r.criteria,q=i.criteria,m=f.length,y=p.length;++O<m;){var D=fc(f[O],q[O]);if(D)return O>=y?D:D*(p[O]=="desc"?-1:1)}return r.index-i.index}function Xa(r,i,p,O){for(var f=-1,q=r.length,m=p.length,y=-1,D=i.length,H=Ae(q-m,0),U=ce(D+H),Q=!O;++y<D;)U[y]=i[y];for(;++f<m;)(Q||f<q)&&(U[p[f]]=r[f]);for(;H--;)U[y++]=r[f++];return U}function kt(r,i,p,O){for(var f=-1,q=r.length,m=-1,y=p.length,D=-1,H=i.length,U=Ae(q-y,0),Q=ce(U+H),b0=!O;++f<U;)Q[f]=r[f];for(var A0=f;++D<H;)Q[A0+D]=i[D];for(;++m<y;)(b0||f<q)&&(Q[A0+p[m]]=r[f++]);return Q}function Xt(r,i){var p=-1,O=r.length;for(i||(i=ce(O));++p<O;)i[p]=r[p];return i}function x2(r,i,p,O){var f=!p;p||(p={});for(var q=-1,m=i.length;++q<m;){var y=i[q],D=O?O(p[y],r[y],y,p,r):X;D===X&&(D=r[y]),f?Ee(p,y,D):ac(p,y,D)}return p}function d4(r,i){return x2(r,Ls(r),i)}function q4(r,i){return x2(r,vs(r),i)}function YM(r,i){return function(p,O){var f=d1(p)?o:M4,q=i?i():{};return f(p,r,o1(O,2),q)}}function jM(r){return R1(function(i,p){var O=-1,f=p.length,q=f>1?p[f-1]:X,m=f>2?p[2]:X;for(q=r.length>3&&typeof q=="function"?(f--,q):X,m&&wt(p[0],p[1],m)&&(q=f<3?X:q,f=1),i=we(i);++O<f;){var y=p[O];y&&r(i,y,O,q)}return i})}function VM(r,i){return function(p,O){if(p==null)return p;if(!Kt(p))return r(p,O);for(var f=p.length,q=i?f:-1,m=we(p);(i?q--:++q<f)&&O(m[q],q,m)!==!1;);return p}}function Ca(r){return function(i,p,O){for(var f=-1,q=we(i),m=O(i),y=m.length;y--;){var D=m[r?y:++f];if(p(q[D],D,q)===!1)break}return i}}function h4(r,i,p){function O(){return(this&&this!==Nt&&this instanceof O?q:r).apply(f?p:this,arguments)}var f=i&j1,q=dc(r);return O}function M3(r){return function(i){i=Q1(i);var p=_(i)?n0(i):X,O=p?p[0]:i.charAt(0),f=p?rr(p,1).join(""):i.slice(1);return O[r]()+f}}function F2(r){return function(i){return A(U3(F3(i).replace(Aa,"")),r,"")}}function dc(r){return function(){var i=arguments;switch(i.length){case 0:return new r;case 1:return new r(i[0]);case 2:return new r(i[0],i[1]);case 3:return new r(i[0],i[1],i[2]);case 4:return new r(i[0],i[1],i[2],i[3]);case 5:return new r(i[0],i[1],i[2],i[3],i[4]);case 6:return new r(i[0],i[1],i[2],i[3],i[4],i[5]);case 7:return new r(i[0],i[1],i[2],i[3],i[4],i[5],i[6])}var p=Mi(r.prototype),O=r.apply(p,i);return Ce(O)?O:p}}function W4(r,i,p){function O(){for(var q=arguments.length,m=ce(q),y=q,D=A1(O);y--;)m[y]=arguments[y];var H=q<3&&m[0]!==D&&m[q-1]!==D?[]:s0(m,D);return q-=H.length,q<p?Fa(r,i,Yb,O.placeholder,X,m,H,X,X,p-q):n(this&&this!==Nt&&this instanceof O?f:r,this,m)}var f=dc(r);return O}function Hb(r){return function(i,p,O){var f=we(i);if(!Kt(i)){var q=o1(p,3);i=ft(i),p=function(y){return q(f[y],y,f)}}var m=r(i,p,O);return m>-1?f[q?i[m]:m]:X}}function xa(r){return I2(function(i){var p=i.length,O=p,f=v0.prototype.thru;for(r&&i.reverse();O--;){var q=i[O];if(typeof q!="function")throw new Vn(f1);if(f&&!m&&KM(q)=="wrapper")var m=new v0([],!0)}for(O=m?O:p;++O<p;){q=i[O];var y=KM(q),D=y=="wrapper"?ys(q):X;m=D&&np(D[0])&&D[1]==(M0|x1|T|l0)&&!D[4].length&&D[9]==1?m[KM(D[0])].apply(m,D[3]):q.length==1&&np(q)?m[y]():m.thru(q)}return function(){var H=arguments,U=H[0];if(m&&H.length==1&&d1(U))return m.plant(U).value();for(var Q=0,b0=p?i[Q].apply(this,H):U;++Q<p;)b0=i[Q].call(this,b0);return b0}})}function Yb(r,i,p,O,f,q,m,y,D,H){function U(){for(var F0=arguments.length,P0=ce(F0),se=F0;se--;)P0[se]=arguments[se];if(W0)var Oe=A1(U),Mt=C(P0,Oe);if(O&&(P0=Xa(P0,O,f,W0)),q&&(P0=kt(P0,q,m,W0)),F0-=Mt,W0&&F0<H)return Fa(r,i,Yb,U.placeholder,p,P0,s0(P0,Oe),y,D,H-F0);var q1=b0?p:this,je=A0?q1[r]:r;return F0=P0.length,y?P0=N4(P0,y):k0&&F0>1&&P0.reverse(),Q&&D<F0&&(P0.length=D),this&&this!==Nt&&this instanceof U&&(je=R0||dc(je)),je.apply(q1,P0)}var Q=i&M0,b0=i&j1,A0=i&Ue,W0=i&(x1|Xe),k0=i&y0,R0=A0?X:dc(r);return U}function i3(r,i){return function(p,O){return $n(p,r,i(O),{})}}function jb(r,i){return function(p,O){var f;if(p===X&&O===X)return i;if(p!==X&&(f=p),O!==X){if(f===X)return O;typeof p=="string"||typeof O=="string"?(p=Yt(p),O=Yt(O)):(p=X2(p),O=X2(O)),f=r(p,O)}return f}}function Vb(r){return I2(function(i){return i=u(i,j(o1())),R1(function(p){var O=this;return r(i,function(f){return n(f,O,p)})})})}function GM(r,i){i=i===X?" ":Yt(i);var p=i.length;if(p<2)return p?Ba(i,r):i;var O=Ba(i,No(r/$(i)));return _(i)?rr(n0(O),0,r).join(""):O.slice(0,r)}function m4(r,i,p,O){function f(){for(var y=-1,D=arguments.length,H=-1,U=O.length,Q=ce(U+D),b0=this&&this!==Nt&&this instanceof f?m:r;++H<U;)Q[H]=O[H];for(;D--;)Q[H++]=arguments[++y];return n(b0,q?p:this,Q)}var q=i&j1,m=dc(r);return f}function Gb(r){return function(i,p,O){return O&&typeof O!="number"&&wt(i,p,O)&&(p=O=X),i=Ro(i),p===X?(p=i,i=0):p=Ro(p),O=O===X?i<p?1:-1:Ro(O),A4(i,p,O,r)}}function qc(r){return function(i,p){return typeof i=="string"&&typeof p=="string"||(i=jn(i),p=jn(p)),r(i,p)}}function Fa(r,i,p,O,f,q,m,y,D,H){var U=i&x1,Q=U?m:X,b0=U?X:m,A0=U?q:X,W0=U?X:q;i|=U?T:G,i&=~(U?G:T),i&Te||(i&=~(j1|Ue));var k0=[r,i,f,A0,Q,W0,b0,y,D,H],R0=p.apply(X,k0);return np(r)&&cl(R0,k0),R0.placeholder=O,a3(R0,r,i)}function Kb(r){var i=z1[r];return function(p,O){if(p=jn(p),O=O==null?0:Q0(h1(O),292),O&&el(p)){var f=(Q1(p)+"e").split("e");return f=(Q1(i(f[0]+"e"+(+f[1]+O)))+"e").split("e"),+(f[0]+"e"+(+f[1]-O))}return i(p)}}function hc(r){return function(i){var p=Pt(i);return p==i2?i0(i):p==c2?G0(i):e0(i,r(i))}}function qo(r,i,p,O,f,q,m,y){var D=i&Ue;if(!D&&typeof r!="function")throw new Vn(f1);var H=O?O.length:0;if(H||(i&=~(T|G),O=f=X),m=m===X?m:Ae(h1(m),0),y=y===X?y:h1(y),H-=f?f.length:0,i&G){var U=O,Q=f;O=f=X}var b0=D?X:ys(r),A0=[r,i,p,O,f,U,Q,q,m,y];if(b0&&v4(A0,b0),r=A0[0],i=A0[1],p=A0[2],O=A0[3],f=A0[4],y=A0[9]=A0[9]===X?D?0:r.length:Ae(A0[9]-H,0),!y&&i&(x1|Xe)&&(i&=~(x1|Xe)),i&&i!=j1)W0=i==x1||i==Xe?W4(r,i,y):i!=T&&i!=(j1|T)||f.length?Yb.apply(X,A0):m4(r,i,p,O);else var W0=h4(r,i,p);return a3((b0?il:cl)(W0,A0),r,i)}function Ia(r,i,p,O){return r===X||Yn(r,oi[p])&&!be.call(O,p)?i:r}function Pa(r,i,p,O,f,q){return Ce(r)&&Ce(i)&&(q.set(i,r),xb(r,i,X,Pa,q),q.delete(i)),r}function g4(r){return wc(r)?X:r}function Ua(r,i,p,O,f,q){var m=p&de,y=r.length,D=i.length;if(y!=D&&!(m&&D>y))return!1;var H=q.get(r),U=q.get(i);if(H&&U)return H==i&&U==r;var Q=-1,b0=!0,A0=p&rt?new E2:X;for(q.set(r,i),q.set(i,r);++Q<y;){var W0=r[Q],k0=i[Q];if(O)var R0=m?O(k0,W0,Q,i,r,q):O(W0,k0,Q,r,i,q);if(R0!==X){if(R0)continue;b0=!1;break}if(A0){if(!W(i,function(F0,P0){if(!O0(A0,P0)&&(W0===F0||f(W0,F0,p,O,q)))return A0.push(P0)})){b0=!1;break}}else if(W0!==k0&&!f(W0,k0,p,O,q)){b0=!1;break}}return q.delete(r),q.delete(i),b0}function R4(r,i,p,O,f,q,m){switch(p){case kM:if(r.byteLength!=i.byteLength||r.byteOffset!=i.byteOffset)return!1;r=r.buffer,i=i.buffer;case rc:return!(r.byteLength!=i.byteLength||!q(new Lp(r),new Lp(i)));case Ji:case EM:case Qi:return Yn(+r,+i);case ub:return r.name==i.name&&r.message==i.message;case tc:case SM:return r==i+"";case i2:var y=i0;case c2:var D=O&de;if(y||(y=L0),r.size!=i.size&&!D)return!1;var H=m.get(r);if(H)return H==i;O|=rt,m.set(r,i);var U=Ua(y(r),y(i),O,f,q,m);return m.delete(r),U;case nc:if(Sc)return Sc.call(r)==Sc.call(i)}return!1}function $a(r,i,p,O,f,q){var m=p&de,y=Wc(r),D=y.length;if(D!=Wc(i).length&&!m)return!1;for(var H=D;H--;){var U=y[H];if(!(m?U in i:be.call(i,U)))return!1}var Q=q.get(r),b0=q.get(i);if(Q&&b0)return Q==i&&b0==r;var A0=!0;q.set(r,i),q.set(i,r);for(var W0=m;++H<D;){U=y[H];var k0=r[U],R0=i[U];if(O)var F0=m?O(R0,k0,U,i,r,q):O(k0,R0,U,r,i,q);if(!(F0===X?k0===R0||f(k0,R0,p,O,q):F0)){A0=!1;break}W0||(W0=U=="constructor")}if(A0&&!W0){var P0=r.constructor,se=i.constructor;P0!=se&&"constructor"in r&&"constructor"in i&&!(typeof P0=="function"&&P0 instanceof P0&&typeof se=="function"&&se instanceof se)&&(A0=!1)}return q.delete(r),q.delete(i),A0}function I2(r){return Ns(ja(r,X,QM),r+"")}function Wc(r){return Hu(r,ft,Ls)}function Ha(r){return Hu(r,pn,vs)}function KM(r){for(var i=r.name+"",p=ri[i],O=be.call(ri,i)?p.length:0;O--;){var f=p[O],q=f.func;if(q==null||q==r)return f.name}return i}function A1(r){return(be.call(h,"placeholder")?h:r).placeholder}function o1(){var r=h.iteratee||qp;return r=r===qp?Gu:r,arguments.length?r(arguments[0],arguments[1]):r}function Zb(r,i){var p=r.__data__;return tp(i)?p[typeof i=="string"?"string":"hash"]:p.map}function jr(r){for(var i=ft(r),p=i.length;p--;){var O=i[p],f=r[O];i[p]=[O,f,op(f)]}return i}function Mr(r,i){var p=d0(r,i);return Vu(p)?p:X}function y4(r){var i=be.call(r,vo),p=r[vo];try{r[vo]=X;var O=!0}catch{}var f=Gn.call(r);return O&&(i?r[vo]=p:delete r[vo]),f}function L4(r,i,p){for(var O=-1,f=p.length;++O<f;){var q=p[O],m=q.size;switch(q.type){case"drop":r+=m;break;case"dropRight":i-=m;break;case"take":i=Q0(i,r+m);break;case"takeRight":r=Ae(r,i-m)}}return{start:r,end:i}}function Hn(r){var i=r.match(du);return i?i[1].split(Dd):[]}function c3(r,i,p){i=a2(i,r);for(var O=-1,f=i.length,q=!1;++O<f;){var m=P2(i[O]);if(!(q=r!=null&&p(r,m)))break;r=r[m]}return q||++O!=f?q:(f=r==null?0:r.length,!!f&&Zt(f)&&Ct(m,f)&&(d1(r)||Zr(r)))}function Jb(r){var i=r.length,p=new r.constructor(i);return i&&typeof r[0]=="string"&&be.call(r,"index")&&(p.index=r.index,p.input=r.input),p}function Qb(r){return typeof r.constructor!="function"||ZM(r)?{}:Mi(vp(r))}function b3(r,i,p){var O=r.constructor;switch(i){case rc:return at(r);case Ji:case EM:return new O(+r);case kM:return ka(r,p);case fb:case db:case qb:case Mc:case Zz:case hb:case XM:case Wb:case Jz:return $b(r,p);case i2:return new O;case Qi:case SM:return new O(r);case tc:return r3(r);case c2:return new O;case nc:return C2(r)}}function p3(r,i){var p=i.length;if(!p)return r;var O=p-1;return i[O]=(p>1?"& ":"")+i[O],i=i.join(p>2?", ":" "),r.replace(wd,`{ +/* [wrapped with `+i+`] */ +`)}function Bn(r){return d1(r)||Zr(r)||!!(ms&&r&&r[ms])}function Ct(r,i){var p=typeof r;return i=i??ve,!!i&&(p=="number"||p!="symbol"&&Ne.test(r))&&r>-1&&r%1==0&&r<i}function wt(r,i,p){if(!Ce(p))return!1;var O=typeof i;return!!(O=="number"?Kt(p)&&Ct(i,p.length):O=="string"&&i in p)&&Yn(p[i],r)}function ep(r,i){if(d1(r))return!1;var p=typeof r;return!(p!="number"&&p!="symbol"&&p!="boolean"&&r!=null&&!Tn(r))||lu.test(r)||!vd.test(r)||i!=null&&r in we(i)}function tp(r){var i=typeof r;return i=="string"||i=="number"||i=="symbol"||i=="boolean"?r!=="__proto__":r===null}function np(r){var i=KM(r),p=h[i];if(typeof p!="function"||!(i in w0.prototype))return!1;if(r===p)return!0;var O=ys(p);return!!O&&r===O[0]}function Ya(r){return!!V3&&V3 in r}function ZM(r){var i=r&&r.constructor;return r===(typeof i=="function"&&i.prototype||oi)}function op(r){return r===r&&!Ce(r)}function rp(r,i){return function(p){return p!=null&&p[r]===i&&(i!==X||r in we(p))}}function ir(r){var i=Op(r,function(O){return p.size===u0&&p.clear(),O}),p=i.cache;return i}function v4(r,i){var p=r[1],O=i[1],f=p|O,q=f<(j1|Ue|M0),m=O==M0&&p==x1||O==M0&&p==l0&&r[7].length<=i[8]||O==(M0|l0)&&i[7].length<=i[8]&&p==x1;if(!q&&!m)return r;O&j1&&(r[2]=i[2],f|=p&j1?0:Te);var y=i[3];if(y){var D=r[3];r[3]=D?Xa(D,y,i[4]):y,r[4]=D?s0(r[3],N0):i[4]}return y=i[5],y&&(D=r[5],r[5]=D?kt(D,y,i[6]):y,r[6]=D?s0(r[5],N0):i[6]),y=i[7],y&&(r[7]=y),O&M0&&(r[8]=r[8]==null?i[8]:Q0(r[8],i[8])),r[9]==null&&(r[9]=i[9]),r[0]=i[0],r[1]=f,r}function cr(r){var i=[];if(r!=null)for(var p in we(r))i.push(p);return i}function z3(r){return Gn.call(r)}function ja(r,i,p){return i=Ae(i===X?r.length-1:i,0),function(){for(var O=arguments,f=-1,q=Ae(O.length-i,0),m=ce(q);++f<q;)m[f]=O[i+f];f=-1;for(var y=ce(i+1);++f<i;)y[f]=O[f];return y[i]=p(m),n(r,this,y)}}function Mp(r,i){return i.length<2?r:Ur(r,St(i,0,-1))}function N4(r,i){for(var p=r.length,O=Q0(i.length,p),f=Xt(r);O--;){var q=i[O];r[O]=Ct(q,p)?f[q]:X}return r}function Va(r,i){if((i!=="constructor"||typeof r[i]!="function")&&i!="__proto__")return r[i]}function a3(r,i,p){var O=i+"";return Ns(r,p3(O,s3(Hn(O),p)))}function Ga(r){var i=0,p=0;return function(){var O=nl(),f=K1-(O-p);if(p=O,f>0){if(++i>=c1)return arguments[0]}else i=0;return r.apply(X,arguments)}}function mc(r,i){var p=-1,O=r.length,f=O-1;for(i=i===X?O:i;++p<i;){var q=Da(p,f),m=r[q];r[q]=r[p],r[p]=m}return r.length=i,r}function P2(r){if(typeof r=="string"||Tn(r))return r;var i=r+"";return i=="0"&&1/r==-qe?"-0":i}function br(r){if(r!=null){try{return Rp.call(r)}catch{}try{return r+""}catch{}}return""}function s3(r,i){return M(so,function(p){var O="_."+p[0];i&p[1]&&!a(r,O)&&r.push(O)}),r.sort()}function jt(r){if(r instanceof w0)return r.clone();var i=new v0(r.__wrapped__,r.__chain__);return i.__actions__=Xt(r.__actions__),i.__index__=r.__index__,i.__values__=r.__values__,i}function U2(r,i,p){i=(p?wt(r,i,p):i===X)?1:Ae(h1(i),0);var O=r==null?0:r.length;if(!O||i<1)return[];for(var f=0,q=0,m=ce(No(O/i));f<O;)m[q++]=St(r,f,f+=i);return m}function w4(r){for(var i=-1,p=r==null?0:r.length,O=0,f=[];++i<p;){var q=r[i];q&&(f[O++]=q)}return f}function D4(){var r=arguments.length;if(!r)return[];for(var i=ce(r-1),p=arguments[0],O=r;O--;)i[O-1]=arguments[O];return l(d1(p)?Xt(p):[p],He(i,1))}function ip(r,i,p){var O=r==null?0:r.length;return O?(i=p||i===X?1:h1(i),St(r,i<0?0:i,O)):[]}function JM(r,i,p){var O=r==null?0:r.length;return O?(i=p||i===X?1:h1(i),i=O-i,St(r,0,i<0?0:i)):[]}function O3(r,i){return r&&r.length?Ac(r,o1(i,3),!0,!0):[]}function u3(r,i){return r&&r.length?Ac(r,o1(i,3),!0):[]}function B4(r,i,p,O){var f=r==null?0:r.length;return f?(p&&typeof p!="number"&&wt(r,i,p)&&(p=0,O=f),Oc(r,i,p,O)):[]}function Ka(r,i,p){var O=r==null?0:r.length;if(!O)return-1;var f=p==null?0:h1(p);return f<0&&(f=Ae(O+f,0)),E(r,o1(i,3),f)}function Vr(r,i,p){var O=r==null?0:r.length;if(!O)return-1;var f=O-1;return p!==X&&(f=h1(p),f=p<0?Ae(O+f,0):Q0(f,O-1)),E(r,o1(i,3),f,!0)}function QM(r){return r!=null&&r.length?He(r,1):[]}function T4(r){return r!=null&&r.length?He(r,qe):[]}function l3(r,i){return r!=null&&r.length?(i=i===X?1:h1(i),He(r,i)):[]}function A3(r){for(var i=-1,p=r==null?0:r.length,O={};++i<p;){var f=r[i];O[f[0]]=f[1]}return O}function gc(r){return r&&r.length?r[0]:X}function f3(r,i,p){var O=r==null?0:r.length;if(!O)return-1;var f=p==null?0:h1(p);return f<0&&(f=Ae(O+f,0)),k(r,i,f)}function cp(r){return r!=null&&r.length?St(r,0,-1):[]}function Za(r,i){return r==null?"":m5.call(r,i)}function Vt(r){var i=r==null?0:r.length;return i?r[i-1]:X}function _4(r,i,p){var O=r==null?0:r.length;if(!O)return-1;var f=O;return p!==X&&(f=h1(p),f=f<0?Ae(O+f,0):Q0(f,O-1)),i===i?n1(r,i,f):E(r,I,f,!0)}function d3(r,i){return r&&r.length?Ju(r,h1(i)):X}function Rc(r,i){return r&&r.length&&i&&i.length?wa(r,i):r}function q3(r,i,p){return r&&r.length&&i&&i.length?wa(r,i,o1(p,2)):r}function Ja(r,i,p){return r&&r.length&&i&&i.length?wa(r,i,X,p):r}function E4(r,i){var p=[];if(!r||!r.length)return p;var O=-1,f=[],q=r.length;for(i=o1(i,3);++O<q;){var m=r[O];i(m,O,r)&&(p.push(m),f.push(O))}return e3(r,f),p}function bp(r){return r==null?r:g5.call(r)}function ho(r,i,p){var O=r==null?0:r.length;return O?(p&&typeof p!="number"&&wt(r,i,p)?(i=0,p=O):(i=i==null?0:h1(i),p=p===X?O:h1(p)),St(r,i,p)):[]}function h3(r,i){return Ib(r,i)}function W3(r,i,p){return Pb(r,i,o1(p,2))}function S4(r,i){var p=r==null?0:r.length;if(p){var O=Ib(r,i);if(O<p&&Yn(r[O],i))return O}return-1}function m3(r,i){return Ib(r,i,!0)}function k4(r,i,p){return Pb(r,i,o1(p,2),!0)}function X4(r,i){if(r!=null&&r.length){var p=Ib(r,i,!0)-1;if(Yn(r[p],i))return p}return-1}function Wo(r){return r&&r.length?n3(r):[]}function Qa(r,i){return r&&r.length?n3(r,o1(i,2)):[]}function es(r){var i=r==null?0:r.length;return i?St(r,1,i):[]}function ts(r,i,p){return r&&r.length?(i=p||i===X?1:h1(i),St(r,0,i<0?0:i)):[]}function pp(r,i,p){var O=r==null?0:r.length;return O?(i=p||i===X?1:h1(i),i=O-i,St(r,i<0?0:i,O)):[]}function ei(r,i){return r&&r.length?Ac(r,o1(i,3),!1,!0):[]}function r1(r,i){return r&&r.length?Ac(r,o1(i,3)):[]}function zp(r){return r&&r.length?cn(r):[]}function ns(r,i){return r&&r.length?cn(r,o1(i,2)):[]}function Gr(r,i){return i=typeof i=="function"?i:X,r&&r.length?cn(r,X,i):[]}function os(r){if(!r||!r.length)return[];var i=0;return r=z(r,function(p){if(Je(p))return i=Ae(p.length,i),!0}),x(i,function(p){return u(r,N(p))})}function ap(r,i){if(!r||!r.length)return[];var p=os(r);return i==null?p:u(p,function(O){return n(i,X,O)})}function g3(r,i){return fo(r||[],i||[],ac)}function xt(r,i){return fo(r||[],i||[],lc)}function R3(r){var i=h(r);return i.__chain__=!0,i}function C4(r,i){return i(r),r}function yc(r,i){return i(r)}function x4(){return R3(this)}function y3(){return new v0(this.value(),this.__chain__)}function F4(){this.__values__===X&&(this.__values__=E3(this.value()));var r=this.__index__>=this.__values__.length;return{done:r,value:r?X:this.__values__[this.__index__++]}}function I4(){return this}function P4(r){for(var i,p=this;p instanceof a0;){var O=jt(p);O.__index__=0,O.__values__=X,i?f.__wrapped__=O:i=O;var f=O;p=p.__wrapped__}return f.__wrapped__=r,i}function mo(){var r=this.__wrapped__;if(r instanceof w0){var i=r;return this.__actions__.length&&(i=new w0(this)),i=i.reverse(),i.__actions__.push({func:yc,args:[bp],thisArg:X}),new v0(i,this.__chain__)}return this.thru(bp)}function Gt(){return _a(this.__wrapped__,this.__actions__)}function rs(r,i,p){var O=d1(r)?b:UM;return p&&wt(r,i,p)&&(i=X),O(r,o1(i,3))}function U4(r,i){return(d1(r)?z:uc)(r,o1(i,3))}function Ms(r,i){return He(sp(r,i),1)}function $4(r,i){return He(sp(r,i),qe)}function H4(r,i,p){return p=p===X?1:h1(p),He(sp(r,i),p)}function ti(r,i){return(d1(r)?M:$2)(r,o1(i,3))}function is(r,i){return(d1(r)?c:rl)(r,o1(i,3))}function L3(r,i,p,O){r=Kt(r)?r:ni(r),p=p&&!O?h1(p):0;var f=r.length;return p<0&&(p=Ae(f+p,0)),lp(r)?p<=f&&r.indexOf(i,p)>-1:!!f&&k(r,i,p)>-1}function sp(r,i){return(d1(r)?u:k2)(r,o1(i,3))}function Y4(r,i,p,O){return r==null?[]:(d1(i)||(i=i==null?[]:[i]),p=O?X:p,d1(p)||(p=p==null?[]:[p]),or(r,i,p))}function j4(r,i,p){var O=d1(r)?A:J,f=arguments.length<3;return O(r,o1(i,4),p,f,$2)}function V4(r,i,p){var O=d1(r)?d:J,f=arguments.length<3;return O(r,o1(i,4),p,f,rl)}function v3(r,i){return(d1(r)?z:uc)(r,Nc(o1(i,3)))}function N3(r){return(d1(r)?Uu:t3)(r)}function G4(r,i,p){return i=(p?wt(r,i,p):i===X)?1:h1(i),(d1(r)?Sb:f4)(r,i)}function cs(r){return(d1(r)?kb:Ta)(r)}function w3(r){if(r==null)return 0;if(Kt(r))return lp(r)?$(r):r.length;var i=Pt(r);return i==i2||i==c2?r.size:va(r).length}function Lc(r,i,p){var O=d1(r)?W:Fb;return p&&wt(r,i,p)&&(i=X),O(r,o1(i,3))}function bs(r,i){if(typeof i!="function")throw new Vn(f1);return r=h1(r),function(){if(--r<1)return i.apply(this,arguments)}}function ps(r,i,p){return i=p?X:i,i=r&&i==null?r.length:i,qo(r,M0,X,X,X,X,i)}function zs(r,i){var p;if(typeof i!="function")throw new Vn(f1);return r=h1(r),function(){return--r>0&&(p=i.apply(this,arguments)),r<=1&&(i=X),p}}function vc(r,i,p){i=p?X:i;var O=qo(r,x1,X,X,X,X,X,i);return O.placeholder=vc.placeholder,O}function as(r,i,p){i=p?X:i;var O=qo(r,Xe,X,X,X,X,X,i);return O.placeholder=as.placeholder,O}function s2(r,i,p){function O(q1){var je=b0,En=A0;return b0=A0=X,P0=q1,k0=r.apply(En,je)}function f(q1){return P0=q1,R0=ii(y,i),se?O(q1):k0}function q(q1){var je=q1-F0,En=q1-P0,Is=i-je;return Oe?Q0(Is,W0-En):Is}function m(q1){var je=q1-F0,En=q1-P0;return F0===X||je>=i||je<0||Oe&&En>=W0}function y(){var q1=Sp();return m(q1)?D(q1):(R0=ii(y,q(q1)),X)}function D(q1){return R0=X,Mt&&b0?O(q1):(b0=A0=X,k0)}function H(){R0!==X&&Jt(R0),P0=0,b0=F0=A0=R0=X}function U(){return R0===X?k0:D(Sp())}function Q(){var q1=Sp(),je=m(q1);if(b0=arguments,A0=this,F0=q1,je){if(R0===X)return f(F0);if(Oe)return Jt(R0),R0=ii(y,i),O(F0)}return R0===X&&(R0=ii(y,i)),k0}var b0,A0,W0,k0,R0,F0,P0=0,se=!1,Oe=!1,Mt=!0;if(typeof r!="function")throw new Vn(f1);return i=jn(i)||0,Ce(p)&&(se=!!p.leading,Oe="maxWait"in p,W0=Oe?Ae(jn(p.maxWait)||0,i):W0,Mt="trailing"in p?!!p.trailing:Mt),Q.cancel=H,Q.flush=U,Q}function Kr(r){return qo(r,y0)}function Op(r,i){if(typeof r!="function"||i!=null&&typeof i!="function")throw new Vn(f1);var p=function(){var O=arguments,f=i?i.apply(this,O):O[0],q=p.cache;if(q.has(f))return q.get(f);var m=r.apply(this,O);return p.cache=q.set(f,m)||q,m};return p.cache=new(Op.Cache||lo),p}function Nc(r){if(typeof r!="function")throw new Vn(f1);return function(){var i=arguments;switch(i.length){case 0:return!r.call(this);case 1:return!r.call(this,i[0]);case 2:return!r.call(this,i[0],i[1]);case 3:return!r.call(this,i[0],i[1],i[2])}return!r.apply(this,i)}}function K4(r){return zs(2,r)}function Z4(r,i){if(typeof r!="function")throw new Vn(f1);return i=i===X?i:h1(i),R1(r,i)}function J4(r,i){if(typeof r!="function")throw new Vn(f1);return i=i==null?0:Ae(h1(i),0),R1(function(p){var O=p[i],f=rr(p,0,i);return O&&l(f,O),n(r,this,f)})}function Q4(r,i,p){var O=!0,f=!0;if(typeof r!="function")throw new Vn(f1);return Ce(p)&&(O="leading"in p?!!p.leading:O,f="trailing"in p?!!p.trailing:f),s2(r,i,{leading:O,maxWait:i,trailing:f})}function eq(r){return ps(r,1)}function tq(r,i){return Ds(Ea(i),r)}function nq(){if(!arguments.length)return[];var r=arguments[0];return d1(r)?r:[r]}function oq(r){return Dn(r,O1)}function rq(r,i){return i=typeof i=="function"?i:X,Dn(r,O1,i)}function Mq(r){return Dn(r,V0|O1)}function iq(r,i){return i=typeof i=="function"?i:X,Dn(r,V0|O1,i)}function D3(r,i){return i==null||Xb(r,i,ft(i))}function Yn(r,i){return r===i||r!==r&&i!==i}function Kt(r){return r!=null&&Zt(r.length)&&!go(r)}function Je(r){return Ye(r)&&Kt(r)}function cq(r){return r===!0||r===!1||Ye(r)&&At(r)==Ji}function bq(r){return Ye(r)&&r.nodeType===1&&!wc(r)}function B3(r){if(r==null)return!0;if(Kt(r)&&(d1(r)||typeof r=="string"||typeof r.splice=="function"||H2(r)||bi(r)||Zr(r)))return!r.length;var i=Pt(r);if(i==i2||i==c2)return!r.size;if(ZM(r))return!va(r).length;for(var p in r)if(be.call(r,p))return!1;return!0}function pq(r,i){return p2(r,i)}function zq(r,i,p){p=typeof p=="function"?p:X;var O=p?p(r,i):X;return O===X?p2(r,i,X,p):!!O}function ss(r){if(!Ye(r))return!1;var i=At(r);return i==ub||i==Rd||typeof r.message=="string"&&typeof r.name=="string"&&!wc(r)}function aq(r){return typeof r=="number"&&el(r)}function go(r){if(!Ce(r))return!1;var i=At(r);return i==lb||i==pu||i==gd||i==yd}function T3(r){return typeof r=="number"&&r==h1(r)}function Zt(r){return typeof r=="number"&&r>-1&&r%1==0&&r<=ve}function Ce(r){var i=typeof r;return r!=null&&(i=="object"||i=="function")}function Ye(r){return r!=null&&typeof r=="object"}function sq(r,i){return r===i||La(r,i,jr(i))}function _3(r,i,p){return p=typeof p=="function"?p:X,La(r,i,jr(i),p)}function Oq(r){return up(r)&&r!=+r}function uq(r){if(B5(r))throw new hs(T1);return Vu(r)}function lq(r){return r===null}function Aq(r){return r==null}function up(r){return typeof r=="number"||Ye(r)&&At(r)==Qi}function wc(r){if(!Ye(r)||At(r)!=Oo)return!1;var i=vp(r);if(i===null)return!0;var p=be.call(i,"constructor")&&i.constructor;return typeof p=="function"&&p instanceof p&&Rp.call(p)==G3}function fq(r){return T3(r)&&r>=-ve&&r<=ve}function lp(r){return typeof r=="string"||!d1(r)&&Ye(r)&&At(r)==SM}function Tn(r){return typeof r=="symbol"||Ye(r)&&At(r)==nc}function dq(r){return r===X}function qq(r){return Ye(r)&&Pt(r)==oc}function hq(r){return Ye(r)&&At(r)==Ld}function E3(r){if(!r)return[];if(Kt(r))return lp(r)?n0(r):Xt(r);if(Lo&&r[Lo])return o0(r[Lo]());var i=Pt(r);return(i==i2?i0:i==c2?L0:ni)(r)}function Ro(r){return r?(r=jn(r),r===qe||r===-qe?(r<0?-1:1)*T2:r===r?r:0):r===0?r:0}function h1(r){var i=Ro(r),p=i%1;return i===i?p?i-p:i:0}function S3(r){return r?Ir(h1(r),0,Z1):0}function jn(r){if(typeof r=="number")return r;if(Tn(r))return r2;if(Ce(r)){var i=typeof r.valueOf=="function"?r.valueOf():r;r=Ce(i)?i+"":i}if(typeof r!="string")return r===0?r:+r;r=Z(r);var p=Sd.test(r);return p||Xd.test(r)?Vd(r.slice(2),p?2:8):Ed.test(r)?r2:+r}function k3(r){return x2(r,pn(r))}function Wq(r){return r?Ir(h1(r),-ve,ve):r===0?r:0}function Q1(r){return r==null?"":Yt(r)}function mq(r,i){var p=Mi(r);return i==null?p:$u(p,i)}function gq(r,i){return R(r,o1(i,3),S2)}function Rq(r,i){return R(r,o1(i,3),ya)}function yq(r,i){return r==null?r:kc(r,o1(i,3),pn)}function Lq(r,i){return r==null?r:Ml(r,o1(i,3),pn)}function Os(r,i){return r&&S2(r,o1(i,3))}function X3(r,i){return r&&ya(r,o1(i,3))}function vq(r){return r==null?[]:Cb(r,ft(r))}function Nq(r){return r==null?[]:Cb(r,pn(r))}function us(r,i,p){var O=r==null?X:Ur(r,i);return O===X?p:O}function wq(r,i){return r!=null&&c3(r,i,Yu)}function ls(r,i){return r!=null&&c3(r,i,w)}function ft(r){return Kt(r)?Pu(r):va(r)}function pn(r){return Kt(r)?Pu(r,!0):O4(r)}function Dq(r,i){var p={};return i=o1(i,3),S2(r,function(O,f,q){Ee(p,i(O,f,q),O)}),p}function C3(r,i){var p={};return i=o1(i,3),S2(r,function(O,f,q){Ee(p,f,i(O,f,q))}),p}function Bq(r,i){return Dc(r,Nc(o1(i)))}function Dc(r,i){if(r==null)return{};var p=u(Ha(r),function(O){return[O]});return i=o1(i),Qu(r,p,function(O,f){return i(O,f[0])})}function Tq(r,i,p){i=a2(i,r);var O=-1,f=i.length;for(f||(f=1,r=X);++O<f;){var q=r==null?X:r[P2(i[O])];q===X&&(O=f,q=p),r=go(q)?q.call(r):q}return r}function _q(r,i,p){return r==null?r:lc(r,i,p)}function Eq(r,i,p,O){return O=typeof O=="function"?O:X,r==null?r:lc(r,i,p,O)}function Sq(r,i,p){var O=d1(r),f=O||H2(r)||bi(r);if(i=o1(i,4),p==null){var q=r&&r.constructor;p=f?O?new q:[]:Ce(r)&&go(q)?Mi(vp(r)):{}}return(f?M:S2)(r,function(m,y,D){return i(p,m,y,D)}),p}function kq(r,i){return r==null||bn(r,i)}function Xq(r,i,p){return r==null?r:o3(r,i,Ea(p))}function Cq(r,i,p,O){return O=typeof O=="function"?O:X,r==null?r:o3(r,i,Ea(p),O)}function ni(r){return r==null?[]:t0(r,ft(r))}function xq(r){return r==null?[]:t0(r,pn(r))}function Fq(r,i,p){return p===X&&(p=i,i=X),p!==X&&(p=jn(p),p=p===p?p:0),i!==X&&(i=jn(i),i=i===i?i:0),Ir(jn(r),i,p)}function Iq(r,i,p){return i=Ro(i),p===X?(p=i,i=0):p=Ro(p),r=jn(r),$M(r,i,p)}function Pq(r,i,p){if(p&&typeof p!="boolean"&&wt(r,i,p)&&(i=p=X),p===X&&(typeof i=="boolean"?(p=i,i=X):typeof r=="boolean"&&(p=r,r=X)),r===X&&i===X?(r=0,i=1):(r=Ro(r),i===X?(i=r,r=0):i=Ro(i)),r>i){var O=r;r=i,i=O}if(p||r%1||i%1){var f=Rs();return Q0(r+f*(i-r+jd("1e-"+((f+"").length-1))),i)}return Da(r,i)}function x3(r){return Fs(Q1(r).toLowerCase())}function F3(r){return r=Q1(r),r&&r.replace(he,Kd).replace(wu,"")}function Uq(r,i,p){r=Q1(r),i=Yt(i);var O=r.length;p=p===X?O:Ir(h1(p),0,O);var f=p;return p-=i.length,p>=0&&r.slice(p,f)==i}function $q(r){return r=Q1(r),r&&na.test(r)?r.replace(ea,Zd):r}function I3(r){return r=Q1(r),r&&fu.test(r)?r.replace(mb,"\\$&"):r}function P3(r,i,p){r=Q1(r),i=h1(i);var O=i?$(r):0;if(!i||O>=i)return r;var f=(i-O)/2;return GM(Bp(f),p)+r+GM(No(f),p)}function Hq(r,i,p){r=Q1(r),i=h1(i);var O=i?$(r):0;return i&&O<i?r+GM(i-O,p):r}function Yq(r,i,p){r=Q1(r),i=h1(i);var O=i?$(r):0;return i&&O<i?GM(i-O,p)+r:r}function jq(r,i,p){return p||i==null?i=0:i&&(i=+i),Kn(Q1(r).replace(ra,""),i||0)}function Vq(r,i,p){return i=(p?wt(r,i,p):i===X)?1:h1(i),Ba(Q1(r),i)}function Ap(){var r=arguments,i=Q1(r[0]);return r.length<3?i:i.replace(r[1],r[2])}function Gq(r,i,p){return p&&typeof p!="number"&&wt(r,i,p)&&(i=p=X),(p=p===X?Z1:p>>>0)?(r=Q1(r),r&&(typeof i=="string"||i!=null&&!Ts(i))&&(i=Yt(i),!i&&_(r))?rr(n0(r),0,p):r.split(i,p)):[]}function Kq(r,i,p){return r=Q1(r),p=p==null?0:Ir(h1(p),0,r.length),i=Yt(i),r.slice(p,p+i.length)==i}function Zq(r,i,p){var O=h.templateSettings;p&&wt(r,i,p)&&(i=X),r=Q1(r),i=Dt({},i,O,Ia);var f,q,m=Dt({},i.imports,O.imports,Ia),y=ft(m),D=t0(m,y),H=0,U=i.interpolate||gb,Q="__p += '",b0=It((i.escape||gb).source+"|"+U.source+"|"+(U===oa?Ma:gb).source+"|"+(i.evaluate||gb).source+"|$","g"),A0="//# sourceURL="+(be.call(i,"sourceURL")?(i.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++wn+"]")+` +`;r.replace(b0,function(R0,F0,P0,se,Oe,Mt){return P0||(P0=se),Q+=r.slice(H,Mt).replace(Cd,z0),F0&&(f=!0,Q+=`' + +__e(`+F0+`) + +'`),Oe&&(q=!0,Q+=`'; +`+Oe+`; +__p += '`),P0&&(Q+=`' + +((__t = (`+P0+`)) == null ? '' : __t) + +'`),H=Mt+R0.length,R0}),Q+=`'; +`;var W0=be.call(i,"variable")&&i.variable;if(W0){if(Td.test(W0))throw new hs(ot)}else Q=`with (obj) { +`+Q+` +} +`;Q=(q?Q.replace(au,""):Q).replace(su,"$1").replace(Qz,"$1;"),Q="function("+(W0||"obj")+`) { +`+(W0?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(f?", __e = _.escape":"")+(q?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+Q+`return __p +}`;var k0=hl(function(){return pr(y,A0+"return "+Q).apply(X,D)});if(k0.source=Q,ss(k0))throw k0;return k0}function Jq(r){return Q1(r).toLowerCase()}function Qq(r){return Q1(r).toUpperCase()}function e5(r,i,p){if(r=Q1(r),r&&(p||i===X))return Z(r);if(!r||!(i=Yt(i)))return r;var O=n0(r),f=n0(i);return rr(O,m0(O,f),q0(O,f)+1).join("")}function t5(r,i,p){if(r=Q1(r),r&&(p||i===X))return r.slice(0,p0(r)+1);if(!r||!(i=Yt(i)))return r;var O=n0(r);return rr(O,0,q0(O,n0(i))+1).join("")}function n5(r,i,p){if(r=Q1(r),r&&(p||i===X))return r.replace(ra,"");if(!r||!(i=Yt(i)))return r;var O=n0(r);return rr(O,m0(O,n0(i))).join("")}function o5(r,i){var p=_0,O=E0;if(Ce(i)){var f="separator"in i?i.separator:f;p="length"in i?h1(i.length):p,O="omission"in i?Yt(i.omission):O}r=Q1(r);var q=r.length;if(_(r)){var m=n0(r);q=m.length}if(p>=q)return r;var y=p-$(O);if(y<1)return O;var D=m?rr(m,0,y).join(""):r.slice(0,y);if(f===X)return D+O;if(m&&(y+=D.length-y),Ts(f)){if(r.slice(y).search(f)){var H,U=D;for(f.global||(f=It(f.source,Q1(qu.exec(f))+"g")),f.lastIndex=0;H=f.exec(U);)var Q=H.index;D=D.slice(0,Q===X?y:Q)}}else if(r.indexOf(Yt(f),y)!=y){var b0=D.lastIndexOf(f);b0>-1&&(D=D.slice(0,b0))}return D+O}function r5(r){return r=Q1(r),r&&ta.test(r)?r.replace(Ou,Jd):r}function U3(r,i,p){return r=Q1(r),i=p?X:i,i===X?D0(r)?K0(r):L(r):r.match(i)||[]}function fp(r){var i=r==null?0:r.length,p=o1();return r=i?u(r,function(O){if(typeof O[1]!="function")throw new Vn(f1);return[p(O[0]),O[1]]}):[],R1(function(O){for(var f=-1;++f<i;){var q=r[f];if(n(q[0],this,O))return n(q[1],this,O)}})}function M5(r){return i4(Dn(r,V0))}function dp(r){return function(){return r}}function $3(r,i){return r==null||r!==r?i:r}function Ft(r){return r}function qp(r){return Gu(typeof r=="function"?r:Dn(r,V0))}function H3(r){return Ku(Dn(r,V0))}function Y3(r,i){return Zu(r,Dn(i,V0))}function hp(r,i,p){var O=ft(i),f=Cb(i,O);p!=null||Ce(i)&&(f.length||!O.length)||(p=i,i=r,r=this,f=Cb(i,ft(i)));var q=!(Ce(p)&&"chain"in p&&!p.chain),m=go(r);return M(f,function(y){var D=i[y];r[y]=D,m&&(r.prototype[y]=function(){var H=this.__chain__;if(q||H){var U=r(this.__wrapped__);return(U.__actions__=Xt(this.__actions__)).push({func:D,args:arguments,thisArg:r}),U.__chain__=H,U}return D.apply(r,l([this.value()],arguments))})}),r}function i5(){return Nt._===this&&(Nt._=yp),this}function As(){}function c5(r){return r=h1(r),R1(function(i){return Ju(i,r)})}function Bc(r){return ep(r)?N(P2(r)):z2(r)}function Wp(r){return function(i){return r==null?X:Ur(r,i)}}function fs(){return[]}function ds(){return!1}function qs(){return{}}function j3(){return""}function b5(){return!0}function p5(r,i){if(r=h1(r),r<1||r>ve)return[];var p=Z1,O=Q0(r,Z1);i=o1(i),r-=Z1;for(var f=x(O,i);++p<r;)i(p);return f}function z5(r){return d1(r)?u(r,P2):Tn(r)?[r]:Xt(bl(Q1(r)))}function a5(r){var i=++Ws;return Q1(r)+i}function s5(r){return r&&r.length?nr(r,Ft,$r):X}function O5(r,i){return r&&r.length?nr(r,o1(i,2),$r):X}function u5(r){return S(r,Ft)}function l5(r,i){return S(r,o1(i,2))}function A5(r){return r&&r.length?nr(r,Ft,Na):X}function f5(r,i){return r&&r.length?nr(r,o1(i,2),Na):X}function d5(r){return r&&r.length?V(r,Ft):0}function q5(r,i){return r&&r.length?V(r,o1(i,2)):0}F=F==null?Nt:b2.defaults(Nt.Object(),F,b2.pick(Nt,Du));var ce=F.Array,mp=F.Date,hs=F.Error,pr=F.Function,z1=F.Math,we=F.Object,It=F.RegExp,Qe=F.String,Vn=F.TypeError,O2=ce.prototype,h5=pr.prototype,oi=we.prototype,gp=F["__core-js_shared__"],Rp=h5.toString,be=oi.hasOwnProperty,Ws=0,V3=function(){var r=/[^.]+$/.exec(gp&&gp.keys&&gp.keys.IE_PROTO||"");return r?"Symbol(src)_1."+r:""}(),Gn=oi.toString,G3=Rp.call(we),yp=Nt._,xe=It("^"+Rp.call(be).replace(mb,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),De=Wa?F.Buffer:X,yo=F.Symbol,Lp=F.Uint8Array,K3=De?De.allocUnsafe:X,vp=c0(we.getPrototypeOf,we),Z3=we.create,J3=oi.propertyIsEnumerable,Np=O2.splice,ms=yo?yo.isConcatSpreadable:X,Lo=yo?yo.iterator:X,vo=yo?yo.toStringTag:X,wp=function(){try{var r=Mr(we,"defineProperty");return r({},"",{}),r}catch{}}(),Q3=F.clearTimeout!==Nt.clearTimeout&&F.clearTimeout,Dp=mp&&mp.now!==Nt.Date.now&&mp.now,_n=F.setTimeout!==Nt.setTimeout&&F.setTimeout,No=z1.ceil,Bp=z1.floor,gs=we.getOwnPropertySymbols,W5=De?De.isBuffer:X,el=F.isFinite,m5=O2.join,tl=c0(we.keys,we),Ae=z1.max,Q0=z1.min,nl=mp.now,Kn=F.parseInt,Rs=z1.random,g5=O2.reverse,$1=Mr(F,"DataView"),Tc=Mr(F,"Map"),Tp=Mr(F,"Promise"),wo=Mr(F,"Set"),_c=Mr(F,"WeakMap"),Ec=Mr(we,"create"),_p=_c&&new _c,ri={},R5=br($1),y5=br(Tc),L5=br(Tp),v5=br(wo),N5=br(_c),Ep=yo?yo.prototype:X,Sc=Ep?Ep.valueOf:X,ol=Ep?Ep.toString:X,Mi=function(){function r(){}return function(i){if(!Ce(i))return{};if(Z3)return Z3(i);r.prototype=i;var p=new r;return r.prototype=X,p}}();h.templateSettings={escape:CM,evaluate:uu,interpolate:oa,variable:"",imports:{_:h}},h.prototype=a0.prototype,h.prototype.constructor=h,v0.prototype=Mi(a0.prototype),v0.prototype.constructor=v0,w0.prototype=Mi(a0.prototype),w0.prototype.constructor=w0,xr.prototype.clear=Pn,xr.prototype.delete=wb,xr.prototype.get=e4,xr.prototype.has=IM,xr.prototype.set=Db,Un.prototype.clear=ie,Un.prototype.delete=t4,Un.prototype.get=Xu,Un.prototype.has=Bb,Un.prototype.set=n4,lo.prototype.clear=o4,lo.prototype.delete=Tb,lo.prototype.get=tr,lo.prototype.has=_b,lo.prototype.set=Cu,E2.prototype.add=E2.prototype.push=xu,E2.prototype.has=Fu,Mn.prototype.clear=Iu,Mn.prototype.delete=pc,Mn.prototype.get=Fr,Mn.prototype.has=Eb,Mn.prototype.set=r4;var $2=VM(S2),rl=VM(ya,!0),kc=Ca(),Ml=Ca(!0),il=_p?function(r,i){return _p.set(r,i),r}:Ft,w5=wp?function(r,i){return wp(r,"toString",{configurable:!0,enumerable:!1,value:dp(i),writable:!0})}:Ft,dt=R1,Jt=Q3||function(r){return Nt.clearTimeout(r)},D5=wo&&1/L0(new wo([,-0]))[1]==qe?function(r){return new wo(r)}:As,ys=_p?function(r){return _p.get(r)}:As,Ls=gs?function(r){return r==null?[]:(r=we(r),z(gs(r),function(i){return J3.call(r,i)}))}:fs,vs=gs?function(r){for(var i=[];r;)l(i,Ls(r)),r=vp(r);return i}:fs,Pt=At;($1&&Pt(new $1(new ArrayBuffer(1)))!=kM||Tc&&Pt(new Tc)!=i2||Tp&&Pt(Tp.resolve())!=ec||wo&&Pt(new wo)!=c2||_c&&Pt(new _c)!=oc)&&(Pt=function(r){var i=At(r),p=i==Oo?r.constructor:X,O=p?br(p):"";if(O)switch(O){case R5:return kM;case y5:return i2;case L5:return ec;case v5:return c2;case N5:return oc}return i});var B5=gp?go:ds,cl=Ga(il),ii=_n||function(r,i){return Nt.setTimeout(r,i)},Ns=Ga(w5),bl=ir(function(r){var i=[];return r.charCodeAt(0)===46&&i.push(""),r.replace(Au,function(p,O,f,q){i.push(f?q.replace(_d,"$1"):O||p)}),i}),T5=R1(function(r,i){return Je(r)?Pr(r,He(i,1,Je,!0)):[]}),pl=R1(function(r,i){var p=Vt(i);return Je(p)&&(p=X),Je(r)?Pr(r,He(i,1,Je,!0),o1(p,2)):[]}),zl=R1(function(r,i){var p=Vt(i);return Je(p)&&(p=X),Je(r)?Pr(r,He(i,1,Je,!0),X,p):[]}),_5=R1(function(r){var i=u(r,Ub);return i.length&&i[0]===r[0]?HM(i):[]}),E5=R1(function(r){var i=Vt(r),p=u(r,Ub);return i===Vt(p)?i=X:p.pop(),p.length&&p[0]===r[0]?HM(p,o1(i,2)):[]}),S5=R1(function(r){var i=Vt(r),p=u(r,Ub);return i=typeof i=="function"?i:X,i&&p.pop(),p.length&&p[0]===r[0]?HM(p,X,i):[]}),k5=R1(Rc),ci=I2(function(r,i){var p=r==null?0:r.length,O=Ra(r,i);return e3(r,u(i,function(f){return Ct(f,p)?+f:f}).sort(fc)),O}),X5=R1(function(r){return cn(He(r,1,Je,!0))}),C5=R1(function(r){var i=Vt(r);return Je(i)&&(i=X),cn(He(r,1,Je,!0),o1(i,2))}),x5=R1(function(r){var i=Vt(r);return i=typeof i=="function"?i:X,cn(He(r,1,Je,!0),X,i)}),F5=R1(function(r,i){return Je(r)?Pr(r,i):[]}),I5=R1(function(r){return Hr(z(r,Je))}),al=R1(function(r){var i=Vt(r);return Je(i)&&(i=X),Hr(z(r,Je),o1(i,2))}),sl=R1(function(r){var i=Vt(r);return i=typeof i=="function"?i:X,Hr(z(r,Je),X,i)}),P5=R1(os),U5=R1(function(r){var i=r.length,p=i>1?r[i-1]:X;return p=typeof p=="function"?(r.pop(),p):X,ap(r,p)}),$5=I2(function(r){var i=r.length,p=i?r[0]:0,O=this.__wrapped__,f=function(q){return Ra(q,r)};return!(i>1||this.__actions__.length)&&O instanceof w0&&Ct(p)?(O=O.slice(p,+p+(i?1:0)),O.__actions__.push({func:yc,args:[f],thisArg:X}),new v0(O,this.__chain__).thru(function(q){return i&&!q.length&&q.push(X),q})):this.thru(f)}),H5=YM(function(r,i,p){be.call(r,p)?++r[p]:Ee(r,p,1)}),Y5=Hb(Ka),j5=Hb(Vr),V5=YM(function(r,i,p){be.call(r,p)?r[p].push(i):Ee(r,p,[i])}),G5=R1(function(r,i,p){var O=-1,f=typeof i=="function",q=Kt(r)?ce(r.length):[];return $2(r,function(m){q[++O]=f?n(i,m,p):g1(m,i,p)}),q}),K5=YM(function(r,i,p){Ee(r,p,i)}),Z5=YM(function(r,i,p){r[p?0:1].push(i)},function(){return[[],[]]}),J5=R1(function(r,i){if(r==null)return[];var p=i.length;return p>1&&wt(r,i[0],i[1])?i=[]:p>2&&wt(i[0],i[1],i[2])&&(i=[i[0]]),or(r,He(i,1),[])}),Sp=Dp||function(){return Nt.Date.now()},ws=R1(function(r,i,p){var O=j1;if(p.length){var f=s0(p,A1(ws));O|=T}return qo(r,O,i,p,f)}),Ol=R1(function(r,i,p){var O=j1|Ue;if(p.length){var f=s0(p,A1(Ol));O|=T}return qo(i,O,r,p,f)}),Q5=R1(function(r,i){return PM(r,1,i)}),eh=R1(function(r,i,p){return PM(r,jn(i)||0,p)});Op.Cache=lo;var th=dt(function(r,i){i=i.length==1&&d1(i[0])?u(i[0],j(o1())):u(He(i,1),j(o1()));var p=i.length;return R1(function(O){for(var f=-1,q=Q0(O.length,p);++f<q;)O[f]=i[f].call(this,O[f]);return n(r,this,O)})}),Ds=R1(function(r,i){return qo(r,T,X,i,s0(i,A1(Ds)))}),ul=R1(function(r,i){return qo(r,G,X,i,s0(i,A1(ul)))}),nh=I2(function(r,i){return qo(r,l0,X,X,X,i)}),oh=qc($r),rh=qc(function(r,i){return r>=i}),Zr=ju(function(){return arguments}())?ju:function(r){return Ye(r)&&be.call(r,"callee")&&!J3.call(r,"callee")},d1=ce.isArray,Mh=Eu?j(Eu):c4,H2=W5||ds,ll=Su?j(Su):b4,Bs=ku?j(ku):z4,Ts=Cr?j(Cr):a4,Al=In?j(In):Ao,bi=ma?j(ma):s4,_s=qc(Na),ih=qc(function(r,i){return r<=i}),ch=jM(function(r,i){if(ZM(i)||Kt(i))return x2(i,ft(i),r),X;for(var p in i)be.call(i,p)&&ac(r,p,i[p])}),fl=jM(function(r,i){x2(i,pn(i),r)}),Dt=jM(function(r,i,p,O){x2(i,pn(i),r,O)}),Es=jM(function(r,i,p,O){x2(i,ft(i),r,O)}),bh=I2(Ra),ph=R1(function(r,i){r=we(r);var p=-1,O=i.length,f=O>2?i[2]:X;for(f&&wt(i[0],i[1],f)&&(O=1);++p<O;)for(var q=i[p],m=pn(q),y=-1,D=m.length;++y<D;){var H=m[y],U=r[H];(U===X||Yn(U,oi[H])&&!be.call(r,H))&&(r[H]=q[H])}return r}),zh=R1(function(r){return r.push(X,Pa),n(dl,X,r)}),ah=i3(function(r,i,p){i!=null&&typeof i.toString!="function"&&(i=Gn.call(i)),r[i]=p},dp(Ft)),Ss=i3(function(r,i,p){i!=null&&typeof i.toString!="function"&&(i=Gn.call(i)),be.call(r,i)?r[i].push(p):r[i]=[p]},o1),sh=R1(g1),ks=jM(function(r,i,p){xb(r,i,p)}),dl=jM(function(r,i,p,O){xb(r,i,p,O)}),Oh=I2(function(r,i){var p={};if(r==null)return p;var O=!1;i=u(i,function(q){return q=a2(q,r),O||(O=q.length>1),q}),x2(r,Ha(r),p),O&&(p=Dn(p,V0|i1|O1,g4));for(var f=i.length;f--;)bn(p,i[f]);return p}),uh=I2(function(r,i){return r==null?{}:l4(r,i)}),ql=hc(ft),Xs=hc(pn),lh=F2(function(r,i,p){return i=i.toLowerCase(),r+(p?x3(i):i)}),Ah=F2(function(r,i,p){return r+(p?"-":"")+i.toLowerCase()}),fh=F2(function(r,i,p){return r+(p?" ":"")+i.toLowerCase()}),Cs=M3("toLowerCase"),xs=F2(function(r,i,p){return r+(p?"_":"")+i.toLowerCase()}),dh=F2(function(r,i,p){return r+(p?" ":"")+Fs(i)}),qh=F2(function(r,i,p){return r+(p?" ":"")+i.toUpperCase()}),Fs=M3("toUpperCase"),hl=R1(function(r,i){try{return n(r,X,i)}catch(p){return ss(p)?p:new hs(p)}}),hh=I2(function(r,i){return M(i,function(p){p=P2(p),Ee(r,p,ws(r[p],r))}),r}),Wh=xa(),mh=xa(!0),gh=R1(function(r,i){return function(p){return g1(p,r,i)}}),Rh=R1(function(r,i){return function(p){return g1(r,p,i)}}),yh=Vb(u),Lh=Vb(b),vh=Vb(W),Nh=Gb(),wh=Gb(!0),Dh=jb(function(r,i){return r+i},0),Bh=Kb("ceil"),Th=jb(function(r,i){return r/i},1),_h=Kb("floor"),Eh=jb(function(r,i){return r*i},1),Sh=Kb("round"),kh=jb(function(r,i){return r-i},0);return h.after=bs,h.ary=ps,h.assign=ch,h.assignIn=fl,h.assignInWith=Dt,h.assignWith=Es,h.at=bh,h.before=zs,h.bind=ws,h.bindAll=hh,h.bindKey=Ol,h.castArray=nq,h.chain=R3,h.chunk=U2,h.compact=w4,h.concat=D4,h.cond=fp,h.conforms=M5,h.constant=dp,h.countBy=H5,h.create=mq,h.curry=vc,h.curryRight=as,h.debounce=s2,h.defaults=ph,h.defaultsDeep=zh,h.defer=Q5,h.delay=eh,h.difference=T5,h.differenceBy=pl,h.differenceWith=zl,h.drop=ip,h.dropRight=JM,h.dropRightWhile=O3,h.dropWhile=u3,h.fill=B4,h.filter=U4,h.flatMap=Ms,h.flatMapDeep=$4,h.flatMapDepth=H4,h.flatten=QM,h.flattenDeep=T4,h.flattenDepth=l3,h.flip=Kr,h.flow=Wh,h.flowRight=mh,h.fromPairs=A3,h.functions=vq,h.functionsIn=Nq,h.groupBy=V5,h.initial=cp,h.intersection=_5,h.intersectionBy=E5,h.intersectionWith=S5,h.invert=ah,h.invertBy=Ss,h.invokeMap=G5,h.iteratee=qp,h.keyBy=K5,h.keys=ft,h.keysIn=pn,h.map=sp,h.mapKeys=Dq,h.mapValues=C3,h.matches=H3,h.matchesProperty=Y3,h.memoize=Op,h.merge=ks,h.mergeWith=dl,h.method=gh,h.methodOf=Rh,h.mixin=hp,h.negate=Nc,h.nthArg=c5,h.omit=Oh,h.omitBy=Bq,h.once=K4,h.orderBy=Y4,h.over=yh,h.overArgs=th,h.overEvery=Lh,h.overSome=vh,h.partial=Ds,h.partialRight=ul,h.partition=Z5,h.pick=uh,h.pickBy=Dc,h.property=Bc,h.propertyOf=Wp,h.pull=k5,h.pullAll=Rc,h.pullAllBy=q3,h.pullAllWith=Ja,h.pullAt=ci,h.range=Nh,h.rangeRight=wh,h.rearg=nh,h.reject=v3,h.remove=E4,h.rest=Z4,h.reverse=bp,h.sampleSize=G4,h.set=_q,h.setWith=Eq,h.shuffle=cs,h.slice=ho,h.sortBy=J5,h.sortedUniq=Wo,h.sortedUniqBy=Qa,h.split=Gq,h.spread=J4,h.tail=es,h.take=ts,h.takeRight=pp,h.takeRightWhile=ei,h.takeWhile=r1,h.tap=C4,h.throttle=Q4,h.thru=yc,h.toArray=E3,h.toPairs=ql,h.toPairsIn=Xs,h.toPath=z5,h.toPlainObject=k3,h.transform=Sq,h.unary=eq,h.union=X5,h.unionBy=C5,h.unionWith=x5,h.uniq=zp,h.uniqBy=ns,h.uniqWith=Gr,h.unset=kq,h.unzip=os,h.unzipWith=ap,h.update=Xq,h.updateWith=Cq,h.values=ni,h.valuesIn=xq,h.without=F5,h.words=U3,h.wrap=tq,h.xor=I5,h.xorBy=al,h.xorWith=sl,h.zip=P5,h.zipObject=g3,h.zipObjectDeep=xt,h.zipWith=U5,h.entries=ql,h.entriesIn=Xs,h.extend=fl,h.extendWith=Dt,hp(h,h),h.add=Dh,h.attempt=hl,h.camelCase=lh,h.capitalize=x3,h.ceil=Bh,h.clamp=Fq,h.clone=oq,h.cloneDeep=Mq,h.cloneDeepWith=iq,h.cloneWith=rq,h.conformsTo=D3,h.deburr=F3,h.defaultTo=$3,h.divide=Th,h.endsWith=Uq,h.eq=Yn,h.escape=$q,h.escapeRegExp=I3,h.every=rs,h.find=Y5,h.findIndex=Ka,h.findKey=gq,h.findLast=j5,h.findLastIndex=Vr,h.findLastKey=Rq,h.floor=_h,h.forEach=ti,h.forEachRight=is,h.forIn=yq,h.forInRight=Lq,h.forOwn=Os,h.forOwnRight=X3,h.get=us,h.gt=oh,h.gte=rh,h.has=wq,h.hasIn=ls,h.head=gc,h.identity=Ft,h.includes=L3,h.indexOf=f3,h.inRange=Iq,h.invoke=sh,h.isArguments=Zr,h.isArray=d1,h.isArrayBuffer=Mh,h.isArrayLike=Kt,h.isArrayLikeObject=Je,h.isBoolean=cq,h.isBuffer=H2,h.isDate=ll,h.isElement=bq,h.isEmpty=B3,h.isEqual=pq,h.isEqualWith=zq,h.isError=ss,h.isFinite=aq,h.isFunction=go,h.isInteger=T3,h.isLength=Zt,h.isMap=Bs,h.isMatch=sq,h.isMatchWith=_3,h.isNaN=Oq,h.isNative=uq,h.isNil=Aq,h.isNull=lq,h.isNumber=up,h.isObject=Ce,h.isObjectLike=Ye,h.isPlainObject=wc,h.isRegExp=Ts,h.isSafeInteger=fq,h.isSet=Al,h.isString=lp,h.isSymbol=Tn,h.isTypedArray=bi,h.isUndefined=dq,h.isWeakMap=qq,h.isWeakSet=hq,h.join=Za,h.kebabCase=Ah,h.last=Vt,h.lastIndexOf=_4,h.lowerCase=fh,h.lowerFirst=Cs,h.lt=_s,h.lte=ih,h.max=s5,h.maxBy=O5,h.mean=u5,h.meanBy=l5,h.min=A5,h.minBy=f5,h.stubArray=fs,h.stubFalse=ds,h.stubObject=qs,h.stubString=j3,h.stubTrue=b5,h.multiply=Eh,h.nth=d3,h.noConflict=i5,h.noop=As,h.now=Sp,h.pad=P3,h.padEnd=Hq,h.padStart=Yq,h.parseInt=jq,h.random=Pq,h.reduce=j4,h.reduceRight=V4,h.repeat=Vq,h.replace=Ap,h.result=Tq,h.round=Sh,h.runInContext=v,h.sample=N3,h.size=w3,h.snakeCase=xs,h.some=Lc,h.sortedIndex=h3,h.sortedIndexBy=W3,h.sortedIndexOf=S4,h.sortedLastIndex=m3,h.sortedLastIndexBy=k4,h.sortedLastIndexOf=X4,h.startCase=dh,h.startsWith=Kq,h.subtract=kh,h.sum=d5,h.sumBy=q5,h.template=Zq,h.times=p5,h.toFinite=Ro,h.toInteger=h1,h.toLength=S3,h.toLower=Jq,h.toNumber=jn,h.toSafeInteger=Wq,h.toString=Q1,h.toUpper=Qq,h.trim=e5,h.trimEnd=t5,h.trimStart=n5,h.truncate=o5,h.unescape=r5,h.uniqueId=a5,h.upperCase=qh,h.upperFirst=Fs,h.each=ti,h.eachRight=is,h.first=gc,hp(h,function(){var r={};return S2(h,function(i,p){be.call(h.prototype,p)||(r[p]=i)}),r}(),{chain:!1}),h.VERSION=j0,M(["bind","bindKey","curry","curryRight","partial","partialRight"],function(r){h[r].placeholder=h}),M(["drop","take"],function(r,i){w0.prototype[r]=function(p){p=p===X?1:Ae(h1(p),0);var O=this.__filtered__&&!i?new w0(this):this.clone();return O.__filtered__?O.__takeCount__=Q0(p,O.__takeCount__):O.__views__.push({size:Q0(p,Z1),type:r+(O.__dir__<0?"Right":"")}),O},w0.prototype[r+"Right"]=function(p){return this.reverse()[r](p).reverse()}}),M(["filter","map","takeWhile"],function(r,i){var p=i+1,O=p==$e||p==Et;w0.prototype[r]=function(f){var q=this.clone();return q.__iteratees__.push({iteratee:o1(f,3),type:p}),q.__filtered__=q.__filtered__||O,q}}),M(["head","last"],function(r,i){var p="take"+(i?"Right":"");w0.prototype[r]=function(){return this[p](1).value()[0]}}),M(["initial","tail"],function(r,i){var p="drop"+(i?"":"Right");w0.prototype[r]=function(){return this.__filtered__?new w0(this):this[p](1)}}),w0.prototype.compact=function(){return this.filter(Ft)},w0.prototype.find=function(r){return this.filter(r).head()},w0.prototype.findLast=function(r){return this.reverse().find(r)},w0.prototype.invokeMap=R1(function(r,i){return typeof r=="function"?new w0(this):this.map(function(p){return g1(p,r,i)})}),w0.prototype.reject=function(r){return this.filter(Nc(o1(r)))},w0.prototype.slice=function(r,i){r=h1(r);var p=this;return p.__filtered__&&(r>0||i<0)?new w0(p):(r<0?p=p.takeRight(-r):r&&(p=p.drop(r)),i!==X&&(i=h1(i),p=i<0?p.dropRight(-i):p.take(i-r)),p)},w0.prototype.takeRightWhile=function(r){return this.reverse().takeWhile(r).reverse()},w0.prototype.toArray=function(){return this.take(Z1)},S2(w0.prototype,function(r,i){var p=/^(?:filter|find|map|reject)|While$/.test(i),O=/^(?:head|last)$/.test(i),f=h[O?"take"+(i=="last"?"Right":""):i],q=O||/^find/.test(i);f&&(h.prototype[i]=function(){var m=this.__wrapped__,y=O?[1]:arguments,D=m instanceof w0,H=y[0],U=D||d1(m),Q=function(F0){var P0=f.apply(h,l([F0],y));return O&&b0?P0[0]:P0};U&&p&&typeof H=="function"&&H.length!=1&&(D=U=!1);var b0=this.__chain__,A0=!!this.__actions__.length,W0=q&&!b0,k0=D&&!A0;if(!q&&U){m=k0?m:new w0(this);var R0=r.apply(m,y);return R0.__actions__.push({func:yc,args:[Q],thisArg:X}),new v0(R0,b0)}return W0&&k0?r.apply(this,y):(R0=this.thru(Q),W0?O?R0.value()[0]:R0.value():R0)})}),M(["pop","push","shift","sort","splice","unshift"],function(r){var i=O2[r],p=/^(?:push|sort|unshift)$/.test(r)?"tap":"thru",O=/^(?:pop|shift)$/.test(r);h.prototype[r]=function(){var f=arguments;if(O&&!this.__chain__){var q=this.value();return i.apply(d1(q)?q:[],f)}return this[p](function(m){return i.apply(d1(m)?m:[],f)})}}),S2(w0.prototype,function(r,i){var p=h[i];if(p){var O=p.name+"";be.call(ri,O)||(ri[O]=[]),ri[O].push({name:i,func:p})}}),ri[Yb(X,Ue).name]=[{name:"wrapper",func:X}],w0.prototype.clone=U1,w0.prototype.reverse=Me,w0.prototype.value=ga,h.prototype.at=$5,h.prototype.chain=x4,h.prototype.commit=y3,h.prototype.next=F4,h.prototype.plant=P4,h.prototype.reverse=mo,h.prototype.toJSON=h.prototype.valueOf=h.prototype.value=Gt,h.prototype.first=h.prototype.head,Lo&&(h.prototype[Lo]=I4),h},b2=Qd();uo?((uo.exports=b2)._=b2,ha._=b2):Nt._=b2}).call(e2)})(NA,NA.exports);var ok=NA.exports,H7={};(function(e){e.aliasToReal={each:"forEach",eachRight:"forEachRight",entries:"toPairs",entriesIn:"toPairsIn",extend:"assignIn",extendAll:"assignInAll",extendAllWith:"assignInAllWith",extendWith:"assignInWith",first:"head",conforms:"conformsTo",matches:"isMatch",property:"get",__:"placeholder",F:"stubFalse",T:"stubTrue",all:"every",allPass:"overEvery",always:"constant",any:"some",anyPass:"overSome",apply:"spread",assoc:"set",assocPath:"set",complement:"negate",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",dropLast:"dropRight",dropLastWhile:"dropRightWhile",equals:"isEqual",identical:"eq",indexBy:"keyBy",init:"initial",invertObj:"invert",juxt:"over",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",paths:"at",pickAll:"pick",pipe:"flow",pluck:"map",prop:"get",propEq:"matchesProperty",propOr:"getOr",props:"at",symmetricDifference:"xor",symmetricDifferenceBy:"xorBy",symmetricDifferenceWith:"xorWith",takeLast:"takeRight",takeLastWhile:"takeRightWhile",unapply:"rest",unnest:"flatten",useWith:"overArgs",where:"conformsTo",whereEq:"isMatch",zipObj:"zipObject"},e.aryMethod={1:["assignAll","assignInAll","attempt","castArray","ceil","create","curry","curryRight","defaultsAll","defaultsDeepAll","floor","flow","flowRight","fromPairs","invert","iteratee","memoize","method","mergeAll","methodOf","mixin","nthArg","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words","zipAll"],2:["add","after","ary","assign","assignAllWith","assignIn","assignInAllWith","at","before","bind","bindAll","bindKey","chunk","cloneDeepWith","cloneWith","concat","conformsTo","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","defaultTo","delay","difference","divide","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","flatMapDeep","flattenDepth","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","meanBy","merge","mergeAllWith","minBy","multiply","nth","omit","omitBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","propertyOf","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","restFrom","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","spreadFrom","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","trimChars","trimCharsEnd","trimCharsStart","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","findFrom","findIndexFrom","findLastFrom","findLastIndexFrom","getOr","includesFrom","indexOfFrom","inRange","intersectionBy","intersectionWith","invokeArgs","invokeArgsMap","isEqualWith","isMatchWith","flatMapDepth","lastIndexOfFrom","mergeWith","orderBy","padChars","padCharsEnd","padCharsStart","pullAllBy","pullAllWith","rangeStep","rangeStepRight","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","update","xorBy","xorWith","zipWith"],4:["fill","setWith","updateWith"]},e.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]},e.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2},e.iterateeRearg={mapKeys:[1],reduceRight:[1,0]},e.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]},e.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}},e.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}},e.realToAlias=function(){var t=Object.prototype.hasOwnProperty,n=e.aliasToReal,o={};for(var M in n){var c=n[M];t.call(o,c)?o[c].push(M):o[c]=[M]}return o}(),e.remap={assignAll:"assign",assignAllWith:"assignWith",assignInAll:"assignIn",assignInAllWith:"assignInWith",curryN:"curry",curryRightN:"curryRight",defaultsAll:"defaults",defaultsDeepAll:"defaultsDeep",findFrom:"find",findIndexFrom:"findIndex",findLastFrom:"findLast",findLastIndexFrom:"findLastIndex",getOr:"get",includesFrom:"includes",indexOfFrom:"indexOf",invokeArgs:"invoke",invokeArgsMap:"invokeMap",lastIndexOfFrom:"lastIndexOf",mergeAll:"merge",mergeAllWith:"mergeWith",padChars:"pad",padCharsEnd:"padEnd",padCharsStart:"padStart",propertyOf:"get",rangeStep:"range",rangeStepRight:"rangeRight",restFrom:"rest",spreadFrom:"spread",trimChars:"trim",trimCharsEnd:"trimEnd",trimCharsStart:"trimStart",zipAll:"zip"},e.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0},e.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}})(H7);var rk={},Bt=H7,Mk=rk,q8=Array.prototype.push;function ik(e,t){return t==2?function(n,o){return e.apply(void 0,arguments)}:function(n){return e.apply(void 0,arguments)}}function jh(e,t){return t==2?function(n,o){return e(n,o)}:function(n){return e(n)}}function h8(e){for(var t=e?e.length:0,n=Array(t);t--;)n[t]=e[t];return n}function ck(e){return function(t){return e({},t)}}function bk(e,t){return function(){for(var n=arguments.length,o=n-1,M=Array(n);n--;)M[n]=arguments[n];var c=M[t],b=M.slice(0,t);return c&&q8.apply(b,c),t!=o&&q8.apply(b,M.slice(t+1)),e.apply(this,b)}}function Vh(e,t){return function(){var n=arguments.length;if(n){for(var o=Array(n);n--;)o[n]=arguments[n];var M=o[0]=t.apply(void 0,o);return e.apply(void 0,o),M}}}function r6(e,t,n,o){var M=typeof t=="function",c=t===Object(t);if(c&&(o=n,n=t,t=void 0),n==null)throw new TypeError;o||(o={});var b={cap:"cap"in o?o.cap:!0,curry:"curry"in o?o.curry:!0,fixed:"fixed"in o?o.fixed:!0,immutable:"immutable"in o?o.immutable:!0,rearg:"rearg"in o?o.rearg:!0},z=M?n:Mk,a="curry"in o&&o.curry,s="fixed"in o&&o.fixed,u="rearg"in o&&o.rearg,l=M?n.runInContext():void 0,A=M?n:{ary:e.ary,assign:e.assign,clone:e.clone,curry:e.curry,forEach:e.forEach,isArray:e.isArray,isError:e.isError,isFunction:e.isFunction,isWeakMap:e.isWeakMap,iteratee:e.iteratee,keys:e.keys,rearg:e.rearg,toInteger:e.toInteger,toPath:e.toPath},d=A.ary,W=A.assign,g=A.clone,L=A.curry,R=A.forEach,E=A.isArray,k=A.isError,B=A.isFunction,I=A.isWeakMap,S=A.keys,N=A.rearg,P=A.toInteger,J=A.toPath,K=S(Bt.aryMethod),V={castArray:function(o0){return function(){var i0=arguments[0];return E(i0)?o0(h8(i0)):o0.apply(void 0,arguments)}},iteratee:function(o0){return function(){var i0=arguments[0],c0=arguments[1],s0=o0(i0,c0),L0=s0.length;return b.cap&&typeof c0=="number"?(c0=c0>2?c0-2:1,L0&&L0<=c0?s0:jh(s0,c0)):s0}},mixin:function(o0){return function(i0){var c0=this;if(!B(c0))return o0(c0,Object(i0));var s0=[];return R(S(i0),function(L0){B(i0[L0])&&s0.push([L0,c0.prototype[L0]])}),o0(c0,Object(i0)),R(s0,function(L0){var G0=L0[1];B(G0)?c0.prototype[L0[0]]=G0:delete c0.prototype[L0[0]]}),c0}},nthArg:function(o0){return function(i0){var c0=i0<0?1:P(i0)+1;return L(o0(i0),c0)}},rearg:function(o0){return function(i0,c0){var s0=c0?c0.length:0;return L(o0(i0,c0),s0)}},runInContext:function(o0){return function(i0){return r6(e,o0(i0),o)}}};function x(o0,i0){if(b.cap){var c0=Bt.iterateeRearg[o0];if(c0)return C(i0,c0);var s0=!M&&Bt.iterateeAry[o0];if(s0)return q0(i0,s0)}return i0}function e0(o0,i0,c0){return a||b.curry&&c0>1?L(i0,c0):i0}function Z(o0,i0,c0){if(b.fixed&&(s||!Bt.skipFixed[o0])){var s0=Bt.methodSpread[o0],L0=s0&&s0.start;return L0===void 0?d(i0,c0):bk(i0,L0)}return i0}function j(o0,i0,c0){return b.rearg&&c0>1&&(u||!Bt.skipRearg[o0])?N(i0,Bt.methodRearg[o0]||Bt.aryRearg[c0]):i0}function t0(o0,i0){i0=J(i0);for(var c0=-1,s0=i0.length,L0=s0-1,G0=g(Object(o0)),p1=G0;p1!=null&&++c0<s0;){var n1=i0[c0],$=p1[n1];$!=null&&!(B($)||k($)||I($))&&(p1[n1]=g(c0==L0?$:Object($))),p1=p1[n1]}return G0}function O0(o0){return _.runInContext.convert(o0)(void 0)}function m0(o0,i0){var c0=Bt.aliasToReal[o0]||o0,s0=Bt.remap[c0]||c0,L0=o;return function(G0){var p1=M?l:A,n1=M?l[s0]:i0,$=W(W({},L0),G0);return r6(p1,c0,n1,$)}}function q0(o0,i0){return z0(o0,function(c0){return typeof c0=="function"?jh(c0,i0):c0})}function C(o0,i0){return z0(o0,function(c0){var s0=i0.length;return ik(N(jh(c0,s0),i0),s0)})}function z0(o0,i0){return function(){var c0=arguments.length;if(!c0)return o0();for(var s0=Array(c0);c0--;)s0[c0]=arguments[c0];var L0=b.rearg?0:c0-1;return s0[L0]=i0(s0[L0]),o0.apply(void 0,s0)}}function d0(o0,i0,c0){var s0,L0=Bt.aliasToReal[o0]||o0,G0=i0,p1=V[L0];return p1?G0=p1(i0):b.immutable&&(Bt.mutate.array[L0]?G0=Vh(i0,h8):Bt.mutate.object[L0]?G0=Vh(i0,ck(i0)):Bt.mutate.set[L0]&&(G0=Vh(i0,t0))),R(K,function(n1){return R(Bt.aryMethod[n1],function($){if(L0==$){var n0=Bt.methodSpread[L0],p0=n0&&n0.afterRearg;return s0=p0?Z(L0,j(L0,G0,n1),n1):j(L0,Z(L0,G0,n1),n1),s0=x(L0,s0),s0=e0(L0,s0,n1),!1}}),!s0}),s0||(s0=G0),s0==i0&&(s0=a?L(s0,1):function(){return i0.apply(this,arguments)}),s0.convert=m0(L0,i0),s0.placeholder=i0.placeholder=c0,s0}if(!c)return d0(t,n,z);var _=n,D0=[];return R(K,function(o0){R(Bt.aryMethod[o0],function(i0){var c0=_[Bt.remap[i0]||i0];c0&&D0.push([i0,d0(i0,c0,_)])})}),R(S(_),function(o0){var i0=_[o0];if(typeof i0=="function"){for(var c0=D0.length;c0--;)if(D0[c0][0]==o0)return;i0.convert=m0(o0,i0),D0.push([o0,i0])}}),R(D0,function(o0){_[o0[0]]=o0[1]}),_.convert=O0,_.placeholder=_,R(S(_),function(o0){R(Bt.realToAlias[o0]||[],function(i0){_[i0]=_[o0]})}),_}var pk=r6,W8=ok.runInContext(),me=pk(W8,W8);const zk={};function Fm(e,t){const n=zk,o=typeof n.includeImageAlt=="boolean"?n.includeImageAlt:!0,M=typeof n.includeHtml=="boolean"?n.includeHtml:!0;return Y7(e,o,M)}function Y7(e,t,n){if(ak(e)){if("value"in e)return e.type==="html"&&!n?"":e.value;if(t&&"alt"in e&&e.alt)return e.alt;if("children"in e)return m8(e.children,t,n)}return Array.isArray(e)?m8(e,t,n):""}function m8(e,t,n){const o=[];let M=-1;for(;++M<e.length;)o[M]=Y7(e[M],t,n);return o.join("")}function ak(e){return!!(e&&typeof e=="object")}const g8=document.createElement("i");function Im(e){const t="&"+e+";";g8.innerHTML=t;const n=g8.textContent;return n.charCodeAt(n.length-1)===59&&e!=="semi"||n===t?!1:n}function gM(e,t,n,o){const M=e.length;let c=0,b;if(t<0?t=-t>M?0:M+t:t=t>M?M:t,n=n>0?n:0,o.length<1e4)b=Array.from(o),b.unshift(t,n),e.splice(...b);else for(n&&e.splice(t,n);c<o.length;)b=o.slice(c,c+1e4),b.unshift(t,0),e.splice(...b),c+=1e4,t+=1e4}function Z2(e,t){return e.length>0?(gM(e,e.length,0,t),e):t}const R8={}.hasOwnProperty;function sk(e){const t={};let n=-1;for(;++n<e.length;)Ok(t,e[n]);return t}function Ok(e,t){let n;for(n in t){const M=(R8.call(e,n)?e[n]:void 0)||(e[n]={}),c=t[n];let b;if(c)for(b in c){R8.call(M,b)||(M[b]=[]);const z=c[b];uk(M[b],Array.isArray(z)?z:z?[z]:[])}}}function uk(e,t){let n=-1;const o=[];for(;++n<t.length;)(t[n].add==="after"?e:o).push(t[n]);gM(e,0,0,o)}function j7(e,t){const n=Number.parseInt(e,t);return n<9||n===11||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)===65535||(n&65535)===65534||n>1114111?"�":String.fromCodePoint(n)}function oz(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const dr=ji(/[A-Za-z]/),Xo=ji(/[\dA-Za-z]/),lk=ji(/[#-'*+\--9=?A-Z^-~]/);function M6(e){return e!==null&&(e<32||e===127)}const i6=ji(/\d/),Ak=ji(/[\dA-Fa-f]/),fk=ji(/[!-/:-@[-`{-~]/);function u1(e){return e!==null&&e<-2}function n2(e){return e!==null&&(e<0||e===32)}function ae(e){return e===-2||e===-1||e===32}const dk=ji(new RegExp("\\p{P}|\\p{S}","u")),qk=ji(/\s/);function ji(e){return t;function t(n){return n!==null&&n>-1&&e.test(String.fromCharCode(n))}}function Se(e,t,n,o){const M=o?o-1:Number.POSITIVE_INFINITY;let c=0;return b;function b(a){return ae(a)?(e.enter(n),z(a)):t(a)}function z(a){return ae(a)&&c++<M?(e.consume(a),z):(e.exit(n),t(a))}}const hk={tokenize:Wk};function Wk(e){const t=e.attempt(this.parser.constructs.contentInitial,o,M);let n;return t;function o(z){if(z===null){e.consume(z);return}return e.enter("lineEnding"),e.consume(z),e.exit("lineEnding"),Se(e,t,"linePrefix")}function M(z){return e.enter("paragraph"),c(z)}function c(z){const a=e.enter("chunkText",{contentType:"text",previous:n});return n&&(n.next=a),n=a,b(z)}function b(z){if(z===null){e.exit("chunkText"),e.exit("paragraph"),e.consume(z);return}return u1(z)?(e.consume(z),e.exit("chunkText"),c):(e.consume(z),b)}}const mk={tokenize:gk},y8={tokenize:Rk};function gk(e){const t=this,n=[];let o=0,M,c,b;return z;function z(k){if(o<n.length){const B=n[o];return t.containerState=B[1],e.attempt(B[0].continuation,a,s)(k)}return s(k)}function a(k){if(o++,t.containerState._closeFlow){t.containerState._closeFlow=void 0,M&&E();const B=t.events.length;let I=B,S;for(;I--;)if(t.events[I][0]==="exit"&&t.events[I][1].type==="chunkFlow"){S=t.events[I][1].end;break}R(o);let N=B;for(;N<t.events.length;)t.events[N][1].end=Object.assign({},S),N++;return gM(t.events,I+1,0,t.events.slice(B)),t.events.length=N,s(k)}return z(k)}function s(k){if(o===n.length){if(!M)return A(k);if(M.currentConstruct&&M.currentConstruct.concrete)return W(k);t.interrupt=!!(M.currentConstruct&&!M._gfmTableDynamicInterruptHack)}return t.containerState={},e.check(y8,u,l)(k)}function u(k){return M&&E(),R(o),A(k)}function l(k){return t.parser.lazy[t.now().line]=o!==n.length,b=t.now().offset,W(k)}function A(k){return t.containerState={},e.attempt(y8,d,W)(k)}function d(k){return o++,n.push([t.currentConstruct,t.containerState]),A(k)}function W(k){if(k===null){M&&E(),R(0),e.consume(k);return}return M=M||t.parser.flow(t.now()),e.enter("chunkFlow",{contentType:"flow",previous:c,_tokenizer:M}),g(k)}function g(k){if(k===null){L(e.exit("chunkFlow"),!0),R(0),e.consume(k);return}return u1(k)?(e.consume(k),L(e.exit("chunkFlow")),o=0,t.interrupt=void 0,z):(e.consume(k),g)}function L(k,B){const I=t.sliceStream(k);if(B&&I.push(null),k.previous=c,c&&(c.next=k),c=k,M.defineSkip(k.start),M.write(I),t.parser.lazy[k.start.line]){let S=M.events.length;for(;S--;)if(M.events[S][1].start.offset<b&&(!M.events[S][1].end||M.events[S][1].end.offset>b))return;const N=t.events.length;let P=N,J,K;for(;P--;)if(t.events[P][0]==="exit"&&t.events[P][1].type==="chunkFlow"){if(J){K=t.events[P][1].end;break}J=!0}for(R(o),S=N;S<t.events.length;)t.events[S][1].end=Object.assign({},K),S++;gM(t.events,P+1,0,t.events.slice(N)),t.events.length=S}}function R(k){let B=n.length;for(;B-- >k;){const I=n[B];t.containerState=I[1],I[0].exit.call(t,e)}n.length=k}function E(){M.write([null]),c=void 0,M=void 0,t.containerState._closeFlow=void 0}}function Rk(e,t,n){return Se(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function L8(e){if(e===null||n2(e)||qk(e))return 1;if(dk(e))return 2}function Pm(e,t,n){const o=[];let M=-1;for(;++M<e.length;){const c=e[M].resolveAll;c&&!o.includes(c)&&(t=c(t,n),o.push(c))}return t}const c6={name:"attention",tokenize:Lk,resolveAll:yk};function yk(e,t){let n=-1,o,M,c,b,z,a,s,u;for(;++n<e.length;)if(e[n][0]==="enter"&&e[n][1].type==="attentionSequence"&&e[n][1]._close){for(o=n;o--;)if(e[o][0]==="exit"&&e[o][1].type==="attentionSequence"&&e[o][1]._open&&t.sliceSerialize(e[o][1]).charCodeAt(0)===t.sliceSerialize(e[n][1]).charCodeAt(0)){if((e[o][1]._close||e[n][1]._open)&&(e[n][1].end.offset-e[n][1].start.offset)%3&&!((e[o][1].end.offset-e[o][1].start.offset+e[n][1].end.offset-e[n][1].start.offset)%3))continue;a=e[o][1].end.offset-e[o][1].start.offset>1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;const l=Object.assign({},e[o][1].end),A=Object.assign({},e[n][1].start);v8(l,-a),v8(A,a),b={type:a>1?"strongSequence":"emphasisSequence",start:l,end:Object.assign({},e[o][1].end)},z={type:a>1?"strongSequence":"emphasisSequence",start:Object.assign({},e[n][1].start),end:A},c={type:a>1?"strongText":"emphasisText",start:Object.assign({},e[o][1].end),end:Object.assign({},e[n][1].start)},M={type:a>1?"strong":"emphasis",start:Object.assign({},b.start),end:Object.assign({},z.end)},e[o][1].end=Object.assign({},b.start),e[n][1].start=Object.assign({},z.end),s=[],e[o][1].end.offset-e[o][1].start.offset&&(s=Z2(s,[["enter",e[o][1],t],["exit",e[o][1],t]])),s=Z2(s,[["enter",M,t],["enter",b,t],["exit",b,t],["enter",c,t]]),s=Z2(s,Pm(t.parser.constructs.insideSpan.null,e.slice(o+1,n),t)),s=Z2(s,[["exit",c,t],["enter",z,t],["exit",z,t],["exit",M,t]]),e[n][1].end.offset-e[n][1].start.offset?(u=2,s=Z2(s,[["enter",e[n][1],t],["exit",e[n][1],t]])):u=0,gM(e,o-1,n-o+3,s),n=o+s.length-u-2;break}}for(n=-1;++n<e.length;)e[n][1].type==="attentionSequence"&&(e[n][1].type="data");return e}function Lk(e,t){const n=this.parser.constructs.attentionMarkers.null,o=this.previous,M=L8(o);let c;return b;function b(a){return c=a,e.enter("attentionSequence"),z(a)}function z(a){if(a===c)return e.consume(a),z;const s=e.exit("attentionSequence"),u=L8(a),l=!u||u===2&&M||n.includes(a),A=!M||M===2&&u||n.includes(o);return s._open=!!(c===42?l:l&&(M||!A)),s._close=!!(c===42?A:A&&(u||!l)),t(a)}}function v8(e,t){e.column+=t,e.offset+=t,e._bufferIndex+=t}const vk={name:"autolink",tokenize:Nk};function Nk(e,t,n){let o=0;return M;function M(d){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(d),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),c}function c(d){return dr(d)?(e.consume(d),b):d===64?n(d):s(d)}function b(d){return d===43||d===45||d===46||Xo(d)?(o=1,z(d)):s(d)}function z(d){return d===58?(e.consume(d),o=0,a):(d===43||d===45||d===46||Xo(d))&&o++<32?(e.consume(d),z):(o=0,s(d))}function a(d){return d===62?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(d),e.exit("autolinkMarker"),e.exit("autolink"),t):d===null||d===32||d===60||M6(d)?n(d):(e.consume(d),a)}function s(d){return d===64?(e.consume(d),u):lk(d)?(e.consume(d),s):n(d)}function u(d){return Xo(d)?l(d):n(d)}function l(d){return d===46?(e.consume(d),o=0,u):d===62?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(d),e.exit("autolinkMarker"),e.exit("autolink"),t):A(d)}function A(d){if((d===45||Xo(d))&&o++<63){const W=d===45?A:l;return e.consume(d),W}return n(d)}}const vf={tokenize:wk,partial:!0};function wk(e,t,n){return o;function o(c){return ae(c)?Se(e,M,"linePrefix")(c):M(c)}function M(c){return c===null||u1(c)?t(c):n(c)}}const V7={name:"blockQuote",tokenize:Dk,continuation:{tokenize:Bk},exit:Tk};function Dk(e,t,n){const o=this;return M;function M(b){if(b===62){const z=o.containerState;return z.open||(e.enter("blockQuote",{_container:!0}),z.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(b),e.exit("blockQuoteMarker"),c}return n(b)}function c(b){return ae(b)?(e.enter("blockQuotePrefixWhitespace"),e.consume(b),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),t):(e.exit("blockQuotePrefix"),t(b))}}function Bk(e,t,n){const o=this;return M;function M(b){return ae(b)?Se(e,c,"linePrefix",o.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(b):c(b)}function c(b){return e.attempt(V7,t,n)(b)}}function Tk(e){e.exit("blockQuote")}const G7={name:"characterEscape",tokenize:_k};function _k(e,t,n){return o;function o(c){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(c),e.exit("escapeMarker"),M}function M(c){return fk(c)?(e.enter("characterEscapeValue"),e.consume(c),e.exit("characterEscapeValue"),e.exit("characterEscape"),t):n(c)}}const K7={name:"characterReference",tokenize:Ek};function Ek(e,t,n){const o=this;let M=0,c,b;return z;function z(l){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(l),e.exit("characterReferenceMarker"),a}function a(l){return l===35?(e.enter("characterReferenceMarkerNumeric"),e.consume(l),e.exit("characterReferenceMarkerNumeric"),s):(e.enter("characterReferenceValue"),c=31,b=Xo,u(l))}function s(l){return l===88||l===120?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(l),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),c=6,b=Ak,u):(e.enter("characterReferenceValue"),c=7,b=i6,u(l))}function u(l){if(l===59&&M){const A=e.exit("characterReferenceValue");return b===Xo&&!Im(o.sliceSerialize(A))?n(l):(e.enter("characterReferenceMarker"),e.consume(l),e.exit("characterReferenceMarker"),e.exit("characterReference"),t)}return b(l)&&M++<c?(e.consume(l),u):n(l)}}const N8={tokenize:kk,partial:!0},w8={name:"codeFenced",tokenize:Sk,concrete:!0};function Sk(e,t,n){const o=this,M={tokenize:I,partial:!0};let c=0,b=0,z;return a;function a(S){return s(S)}function s(S){const N=o.events[o.events.length-1];return c=N&&N[1].type==="linePrefix"?N[2].sliceSerialize(N[1],!0).length:0,z=S,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),u(S)}function u(S){return S===z?(b++,e.consume(S),u):b<3?n(S):(e.exit("codeFencedFenceSequence"),ae(S)?Se(e,l,"whitespace")(S):l(S))}function l(S){return S===null||u1(S)?(e.exit("codeFencedFence"),o.interrupt?t(S):e.check(N8,g,B)(S)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),A(S))}function A(S){return S===null||u1(S)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),l(S)):ae(S)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),Se(e,d,"whitespace")(S)):S===96&&S===z?n(S):(e.consume(S),A)}function d(S){return S===null||u1(S)?l(S):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),W(S))}function W(S){return S===null||u1(S)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),l(S)):S===96&&S===z?n(S):(e.consume(S),W)}function g(S){return e.attempt(M,B,L)(S)}function L(S){return e.enter("lineEnding"),e.consume(S),e.exit("lineEnding"),R}function R(S){return c>0&&ae(S)?Se(e,E,"linePrefix",c+1)(S):E(S)}function E(S){return S===null||u1(S)?e.check(N8,g,B)(S):(e.enter("codeFlowValue"),k(S))}function k(S){return S===null||u1(S)?(e.exit("codeFlowValue"),E(S)):(e.consume(S),k)}function B(S){return e.exit("codeFenced"),t(S)}function I(S,N,P){let J=0;return K;function K(j){return S.enter("lineEnding"),S.consume(j),S.exit("lineEnding"),V}function V(j){return S.enter("codeFencedFence"),ae(j)?Se(S,x,"linePrefix",o.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(j):x(j)}function x(j){return j===z?(S.enter("codeFencedFenceSequence"),e0(j)):P(j)}function e0(j){return j===z?(J++,S.consume(j),e0):J>=b?(S.exit("codeFencedFenceSequence"),ae(j)?Se(S,Z,"whitespace")(j):Z(j)):P(j)}function Z(j){return j===null||u1(j)?(S.exit("codeFencedFence"),N(j)):P(j)}}}function kk(e,t,n){const o=this;return M;function M(b){return b===null?n(b):(e.enter("lineEnding"),e.consume(b),e.exit("lineEnding"),c)}function c(b){return o.parser.lazy[o.now().line]?n(b):t(b)}}const Gh={name:"codeIndented",tokenize:Ck},Xk={tokenize:xk,partial:!0};function Ck(e,t,n){const o=this;return M;function M(s){return e.enter("codeIndented"),Se(e,c,"linePrefix",5)(s)}function c(s){const u=o.events[o.events.length-1];return u&&u[1].type==="linePrefix"&&u[2].sliceSerialize(u[1],!0).length>=4?b(s):n(s)}function b(s){return s===null?a(s):u1(s)?e.attempt(Xk,b,a)(s):(e.enter("codeFlowValue"),z(s))}function z(s){return s===null||u1(s)?(e.exit("codeFlowValue"),b(s)):(e.consume(s),z)}function a(s){return e.exit("codeIndented"),t(s)}}function xk(e,t,n){const o=this;return M;function M(b){return o.parser.lazy[o.now().line]?n(b):u1(b)?(e.enter("lineEnding"),e.consume(b),e.exit("lineEnding"),M):Se(e,c,"linePrefix",5)(b)}function c(b){const z=o.events[o.events.length-1];return z&&z[1].type==="linePrefix"&&z[2].sliceSerialize(z[1],!0).length>=4?t(b):u1(b)?M(b):n(b)}}const Fk={name:"codeText",tokenize:Uk,resolve:Ik,previous:Pk};function Ik(e){let t=e.length-4,n=3,o,M;if((e[n][1].type==="lineEnding"||e[n][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(o=n;++o<t;)if(e[o][1].type==="codeTextData"){e[n][1].type="codeTextPadding",e[t][1].type="codeTextPadding",n+=2,t-=2;break}}for(o=n-1,t++;++o<=t;)M===void 0?o!==t&&e[o][1].type!=="lineEnding"&&(M=o):(o===t||e[o][1].type==="lineEnding")&&(e[M][1].type="codeTextData",o!==M+2&&(e[M][1].end=e[o-1][1].end,e.splice(M+2,o-M-2),t-=o-M-2,o=M+2),M=void 0);return e}function Pk(e){return e!==96||this.events[this.events.length-1][1].type==="characterEscape"}function Uk(e,t,n){let o=0,M,c;return b;function b(l){return e.enter("codeText"),e.enter("codeTextSequence"),z(l)}function z(l){return l===96?(e.consume(l),o++,z):(e.exit("codeTextSequence"),a(l))}function a(l){return l===null?n(l):l===32?(e.enter("space"),e.consume(l),e.exit("space"),a):l===96?(c=e.enter("codeTextSequence"),M=0,u(l)):u1(l)?(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),a):(e.enter("codeTextData"),s(l))}function s(l){return l===null||l===32||l===96||u1(l)?(e.exit("codeTextData"),a(l)):(e.consume(l),s)}function u(l){return l===96?(e.consume(l),M++,u):M===o?(e.exit("codeTextSequence"),e.exit("codeText"),t(l)):(c.type="codeTextData",s(l))}}class $k{constructor(t){this.left=t?[...t]:[],this.right=[]}get(t){if(t<0||t>=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return t<this.left.length?this.left[t]:this.right[this.right.length-t+this.left.length-1]}get length(){return this.left.length+this.right.length}shift(){return this.setCursor(0),this.right.pop()}slice(t,n){const o=n??Number.POSITIVE_INFINITY;return o<this.left.length?this.left.slice(t,o):t>this.left.length?this.right.slice(this.right.length-o+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-o+this.left.length).reverse())}splice(t,n,o){const M=n||0;this.setCursor(Math.trunc(t));const c=this.right.splice(this.right.length-M,Number.POSITIVE_INFINITY);return o&&Hs(this.left,o),c.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Hs(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Hs(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t<this.left.length){const n=this.left.splice(t,Number.POSITIVE_INFINITY);Hs(this.right,n.reverse())}else{const n=this.right.splice(this.left.length+this.right.length-t,Number.POSITIVE_INFINITY);Hs(this.left,n.reverse())}}}function Hs(e,t){let n=0;if(t.length<1e4)e.push(...t);else for(;n<t.length;)e.push(...t.slice(n,n+1e4)),n+=1e4}function Z7(e){const t={};let n=-1,o,M,c,b,z,a,s;const u=new $k(e);for(;++n<u.length;){for(;n in t;)n=t[n];if(o=u.get(n),n&&o[1].type==="chunkFlow"&&u.get(n-1)[1].type==="listItemPrefix"&&(a=o[1]._tokenizer.events,c=0,c<a.length&&a[c][1].type==="lineEndingBlank"&&(c+=2),c<a.length&&a[c][1].type==="content"))for(;++c<a.length&&a[c][1].type!=="content";)a[c][1].type==="chunkText"&&(a[c][1]._isInFirstContentOfListItem=!0,c++);if(o[0]==="enter")o[1].contentType&&(Object.assign(t,Hk(u,n)),n=t[n],s=!0);else if(o[1]._container){for(c=n,M=void 0;c--&&(b=u.get(c),b[1].type==="lineEnding"||b[1].type==="lineEndingBlank");)b[0]==="enter"&&(M&&(u.get(M)[1].type="lineEndingBlank"),b[1].type="lineEnding",M=c);M&&(o[1].end=Object.assign({},u.get(M)[1].start),z=u.slice(M,n),z.unshift(o),u.splice(M,n-M+1,z))}}return gM(e,0,Number.POSITIVE_INFINITY,u.slice(0)),!s}function Hk(e,t){const n=e.get(t)[1],o=e.get(t)[2];let M=t-1;const c=[],b=n._tokenizer||o.parser[n.contentType](n.start),z=b.events,a=[],s={};let u,l,A=-1,d=n,W=0,g=0;const L=[g];for(;d;){for(;e.get(++M)[1]!==d;);c.push(M),d._tokenizer||(u=o.sliceStream(d),d.next||u.push(null),l&&b.defineSkip(d.start),d._isInFirstContentOfListItem&&(b._gfmTasklistFirstContentOfListItem=!0),b.write(u),d._isInFirstContentOfListItem&&(b._gfmTasklistFirstContentOfListItem=void 0)),l=d,d=d.next}for(d=n;++A<z.length;)z[A][0]==="exit"&&z[A-1][0]==="enter"&&z[A][1].type===z[A-1][1].type&&z[A][1].start.line!==z[A][1].end.line&&(g=A+1,L.push(g),d._tokenizer=void 0,d.previous=void 0,d=d.next);for(b.events=[],d?(d._tokenizer=void 0,d.previous=void 0):L.pop(),A=L.length;A--;){const R=z.slice(L[A],L[A+1]),E=c.pop();a.push([E,E+R.length-1]),e.splice(E,2,R)}for(a.reverse(),A=-1;++A<a.length;)s[W+a[A][0]]=W+a[A][1],W+=a[A][1]-a[A][0]-1;return s}const Yk={tokenize:Gk,resolve:Vk},jk={tokenize:Kk,partial:!0};function Vk(e){return Z7(e),e}function Gk(e,t){let n;return o;function o(z){return e.enter("content"),n=e.enter("chunkContent",{contentType:"content"}),M(z)}function M(z){return z===null?c(z):u1(z)?e.check(jk,b,c)(z):(e.consume(z),M)}function c(z){return e.exit("chunkContent"),e.exit("content"),t(z)}function b(z){return e.consume(z),e.exit("chunkContent"),n.next=e.enter("chunkContent",{contentType:"content",previous:n}),n=n.next,M}}function Kk(e,t,n){const o=this;return M;function M(b){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(b),e.exit("lineEnding"),Se(e,c,"linePrefix")}function c(b){if(b===null||u1(b))return n(b);const z=o.events[o.events.length-1];return!o.parser.constructs.disable.null.includes("codeIndented")&&z&&z[1].type==="linePrefix"&&z[2].sliceSerialize(z[1],!0).length>=4?t(b):e.interrupt(o.parser.constructs.flow,n,t)(b)}}function J7(e,t,n,o,M,c,b,z,a){const s=a||Number.POSITIVE_INFINITY;let u=0;return l;function l(R){return R===60?(e.enter(o),e.enter(M),e.enter(c),e.consume(R),e.exit(c),A):R===null||R===32||R===41||M6(R)?n(R):(e.enter(o),e.enter(b),e.enter(z),e.enter("chunkString",{contentType:"string"}),g(R))}function A(R){return R===62?(e.enter(c),e.consume(R),e.exit(c),e.exit(M),e.exit(o),t):(e.enter(z),e.enter("chunkString",{contentType:"string"}),d(R))}function d(R){return R===62?(e.exit("chunkString"),e.exit(z),A(R)):R===null||R===60||u1(R)?n(R):(e.consume(R),R===92?W:d)}function W(R){return R===60||R===62||R===92?(e.consume(R),d):d(R)}function g(R){return!u&&(R===null||R===41||n2(R))?(e.exit("chunkString"),e.exit(z),e.exit(b),e.exit(o),t(R)):u<s&&R===40?(e.consume(R),u++,g):R===41?(e.consume(R),u--,g):R===null||R===32||R===40||M6(R)?n(R):(e.consume(R),R===92?L:g)}function L(R){return R===40||R===41||R===92?(e.consume(R),g):g(R)}}function Q7(e,t,n,o,M,c){const b=this;let z=0,a;return s;function s(d){return e.enter(o),e.enter(M),e.consume(d),e.exit(M),e.enter(c),u}function u(d){return z>999||d===null||d===91||d===93&&!a||d===94&&!z&&"_hiddenFootnoteSupport"in b.parser.constructs?n(d):d===93?(e.exit(c),e.enter(M),e.consume(d),e.exit(M),e.exit(o),t):u1(d)?(e.enter("lineEnding"),e.consume(d),e.exit("lineEnding"),u):(e.enter("chunkString",{contentType:"string"}),l(d))}function l(d){return d===null||d===91||d===93||u1(d)||z++>999?(e.exit("chunkString"),u(d)):(e.consume(d),a||(a=!ae(d)),d===92?A:l)}function A(d){return d===91||d===92||d===93?(e.consume(d),z++,l):l(d)}}function eN(e,t,n,o,M,c){let b;return z;function z(A){return A===34||A===39||A===40?(e.enter(o),e.enter(M),e.consume(A),e.exit(M),b=A===40?41:A,a):n(A)}function a(A){return A===b?(e.enter(M),e.consume(A),e.exit(M),e.exit(o),t):(e.enter(c),s(A))}function s(A){return A===b?(e.exit(c),a(b)):A===null?n(A):u1(A)?(e.enter("lineEnding"),e.consume(A),e.exit("lineEnding"),Se(e,s,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),u(A))}function u(A){return A===b||A===null||u1(A)?(e.exit("chunkString"),s(A)):(e.consume(A),A===92?l:u)}function l(A){return A===b||A===92?(e.consume(A),u):u(A)}}function oO(e,t){let n;return o;function o(M){return u1(M)?(e.enter("lineEnding"),e.consume(M),e.exit("lineEnding"),n=!0,o):ae(M)?Se(e,o,n?"linePrefix":"lineSuffix")(M):t(M)}}const Zk={name:"definition",tokenize:Qk},Jk={tokenize:eX,partial:!0};function Qk(e,t,n){const o=this;let M;return c;function c(d){return e.enter("definition"),b(d)}function b(d){return Q7.call(o,e,z,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(d)}function z(d){return M=oz(o.sliceSerialize(o.events[o.events.length-1][1]).slice(1,-1)),d===58?(e.enter("definitionMarker"),e.consume(d),e.exit("definitionMarker"),a):n(d)}function a(d){return n2(d)?oO(e,s)(d):s(d)}function s(d){return J7(e,u,n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(d)}function u(d){return e.attempt(Jk,l,l)(d)}function l(d){return ae(d)?Se(e,A,"whitespace")(d):A(d)}function A(d){return d===null||u1(d)?(e.exit("definition"),o.parser.defined.push(M),t(d)):n(d)}}function eX(e,t,n){return o;function o(z){return n2(z)?oO(e,M)(z):n(z)}function M(z){return eN(e,c,n,"definitionTitle","definitionTitleMarker","definitionTitleString")(z)}function c(z){return ae(z)?Se(e,b,"whitespace")(z):b(z)}function b(z){return z===null||u1(z)?t(z):n(z)}}const tX={name:"hardBreakEscape",tokenize:nX};function nX(e,t,n){return o;function o(c){return e.enter("hardBreakEscape"),e.consume(c),M}function M(c){return u1(c)?(e.exit("hardBreakEscape"),t(c)):n(c)}}const oX={name:"headingAtx",tokenize:MX,resolve:rX};function rX(e,t){let n=e.length-2,o=3,M,c;return e[o][1].type==="whitespace"&&(o+=2),n-2>o&&e[n][1].type==="whitespace"&&(n-=2),e[n][1].type==="atxHeadingSequence"&&(o===n-1||n-4>o&&e[n-2][1].type==="whitespace")&&(n-=o+1===n?2:4),n>o&&(M={type:"atxHeadingText",start:e[o][1].start,end:e[n][1].end},c={type:"chunkText",start:e[o][1].start,end:e[n][1].end,contentType:"text"},gM(e,o,n-o+1,[["enter",M,t],["enter",c,t],["exit",c,t],["exit",M,t]])),e}function MX(e,t,n){let o=0;return M;function M(u){return e.enter("atxHeading"),c(u)}function c(u){return e.enter("atxHeadingSequence"),b(u)}function b(u){return u===35&&o++<6?(e.consume(u),b):u===null||n2(u)?(e.exit("atxHeadingSequence"),z(u)):n(u)}function z(u){return u===35?(e.enter("atxHeadingSequence"),a(u)):u===null||u1(u)?(e.exit("atxHeading"),t(u)):ae(u)?Se(e,z,"whitespace")(u):(e.enter("atxHeadingText"),s(u))}function a(u){return u===35?(e.consume(u),a):(e.exit("atxHeadingSequence"),z(u))}function s(u){return u===null||u===35||n2(u)?(e.exit("atxHeadingText"),z(u)):(e.consume(u),s)}}const iX=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],D8=["pre","script","style","textarea"],cX={name:"htmlFlow",tokenize:aX,resolveTo:zX,concrete:!0},bX={tokenize:OX,partial:!0},pX={tokenize:sX,partial:!0};function zX(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function aX(e,t,n){const o=this;let M,c,b,z,a;return s;function s(_){return u(_)}function u(_){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(_),l}function l(_){return _===33?(e.consume(_),A):_===47?(e.consume(_),c=!0,g):_===63?(e.consume(_),M=3,o.interrupt?t:C):dr(_)?(e.consume(_),b=String.fromCharCode(_),L):n(_)}function A(_){return _===45?(e.consume(_),M=2,d):_===91?(e.consume(_),M=5,z=0,W):dr(_)?(e.consume(_),M=4,o.interrupt?t:C):n(_)}function d(_){return _===45?(e.consume(_),o.interrupt?t:C):n(_)}function W(_){const D0="CDATA[";return _===D0.charCodeAt(z++)?(e.consume(_),z===D0.length?o.interrupt?t:x:W):n(_)}function g(_){return dr(_)?(e.consume(_),b=String.fromCharCode(_),L):n(_)}function L(_){if(_===null||_===47||_===62||n2(_)){const D0=_===47,o0=b.toLowerCase();return!D0&&!c&&D8.includes(o0)?(M=1,o.interrupt?t(_):x(_)):iX.includes(b.toLowerCase())?(M=6,D0?(e.consume(_),R):o.interrupt?t(_):x(_)):(M=7,o.interrupt&&!o.parser.lazy[o.now().line]?n(_):c?E(_):k(_))}return _===45||Xo(_)?(e.consume(_),b+=String.fromCharCode(_),L):n(_)}function R(_){return _===62?(e.consume(_),o.interrupt?t:x):n(_)}function E(_){return ae(_)?(e.consume(_),E):K(_)}function k(_){return _===47?(e.consume(_),K):_===58||_===95||dr(_)?(e.consume(_),B):ae(_)?(e.consume(_),k):K(_)}function B(_){return _===45||_===46||_===58||_===95||Xo(_)?(e.consume(_),B):I(_)}function I(_){return _===61?(e.consume(_),S):ae(_)?(e.consume(_),I):k(_)}function S(_){return _===null||_===60||_===61||_===62||_===96?n(_):_===34||_===39?(e.consume(_),a=_,N):ae(_)?(e.consume(_),S):P(_)}function N(_){return _===a?(e.consume(_),a=null,J):_===null||u1(_)?n(_):(e.consume(_),N)}function P(_){return _===null||_===34||_===39||_===47||_===60||_===61||_===62||_===96||n2(_)?I(_):(e.consume(_),P)}function J(_){return _===47||_===62||ae(_)?k(_):n(_)}function K(_){return _===62?(e.consume(_),V):n(_)}function V(_){return _===null||u1(_)?x(_):ae(_)?(e.consume(_),V):n(_)}function x(_){return _===45&&M===2?(e.consume(_),t0):_===60&&M===1?(e.consume(_),O0):_===62&&M===4?(e.consume(_),z0):_===63&&M===3?(e.consume(_),C):_===93&&M===5?(e.consume(_),q0):u1(_)&&(M===6||M===7)?(e.exit("htmlFlowData"),e.check(bX,d0,e0)(_)):_===null||u1(_)?(e.exit("htmlFlowData"),e0(_)):(e.consume(_),x)}function e0(_){return e.check(pX,Z,d0)(_)}function Z(_){return e.enter("lineEnding"),e.consume(_),e.exit("lineEnding"),j}function j(_){return _===null||u1(_)?e0(_):(e.enter("htmlFlowData"),x(_))}function t0(_){return _===45?(e.consume(_),C):x(_)}function O0(_){return _===47?(e.consume(_),b="",m0):x(_)}function m0(_){if(_===62){const D0=b.toLowerCase();return D8.includes(D0)?(e.consume(_),z0):x(_)}return dr(_)&&b.length<8?(e.consume(_),b+=String.fromCharCode(_),m0):x(_)}function q0(_){return _===93?(e.consume(_),C):x(_)}function C(_){return _===62?(e.consume(_),z0):_===45&&M===2?(e.consume(_),C):x(_)}function z0(_){return _===null||u1(_)?(e.exit("htmlFlowData"),d0(_)):(e.consume(_),z0)}function d0(_){return e.exit("htmlFlow"),t(_)}}function sX(e,t,n){const o=this;return M;function M(b){return u1(b)?(e.enter("lineEnding"),e.consume(b),e.exit("lineEnding"),c):n(b)}function c(b){return o.parser.lazy[o.now().line]?n(b):t(b)}}function OX(e,t,n){return o;function o(M){return e.enter("lineEnding"),e.consume(M),e.exit("lineEnding"),e.attempt(vf,t,n)}}const uX={name:"htmlText",tokenize:lX};function lX(e,t,n){const o=this;let M,c,b;return z;function z(C){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(C),a}function a(C){return C===33?(e.consume(C),s):C===47?(e.consume(C),I):C===63?(e.consume(C),k):dr(C)?(e.consume(C),P):n(C)}function s(C){return C===45?(e.consume(C),u):C===91?(e.consume(C),c=0,W):dr(C)?(e.consume(C),E):n(C)}function u(C){return C===45?(e.consume(C),d):n(C)}function l(C){return C===null?n(C):C===45?(e.consume(C),A):u1(C)?(b=l,O0(C)):(e.consume(C),l)}function A(C){return C===45?(e.consume(C),d):l(C)}function d(C){return C===62?t0(C):C===45?A(C):l(C)}function W(C){const z0="CDATA[";return C===z0.charCodeAt(c++)?(e.consume(C),c===z0.length?g:W):n(C)}function g(C){return C===null?n(C):C===93?(e.consume(C),L):u1(C)?(b=g,O0(C)):(e.consume(C),g)}function L(C){return C===93?(e.consume(C),R):g(C)}function R(C){return C===62?t0(C):C===93?(e.consume(C),R):g(C)}function E(C){return C===null||C===62?t0(C):u1(C)?(b=E,O0(C)):(e.consume(C),E)}function k(C){return C===null?n(C):C===63?(e.consume(C),B):u1(C)?(b=k,O0(C)):(e.consume(C),k)}function B(C){return C===62?t0(C):k(C)}function I(C){return dr(C)?(e.consume(C),S):n(C)}function S(C){return C===45||Xo(C)?(e.consume(C),S):N(C)}function N(C){return u1(C)?(b=N,O0(C)):ae(C)?(e.consume(C),N):t0(C)}function P(C){return C===45||Xo(C)?(e.consume(C),P):C===47||C===62||n2(C)?J(C):n(C)}function J(C){return C===47?(e.consume(C),t0):C===58||C===95||dr(C)?(e.consume(C),K):u1(C)?(b=J,O0(C)):ae(C)?(e.consume(C),J):t0(C)}function K(C){return C===45||C===46||C===58||C===95||Xo(C)?(e.consume(C),K):V(C)}function V(C){return C===61?(e.consume(C),x):u1(C)?(b=V,O0(C)):ae(C)?(e.consume(C),V):J(C)}function x(C){return C===null||C===60||C===61||C===62||C===96?n(C):C===34||C===39?(e.consume(C),M=C,e0):u1(C)?(b=x,O0(C)):ae(C)?(e.consume(C),x):(e.consume(C),Z)}function e0(C){return C===M?(e.consume(C),M=void 0,j):C===null?n(C):u1(C)?(b=e0,O0(C)):(e.consume(C),e0)}function Z(C){return C===null||C===34||C===39||C===60||C===61||C===96?n(C):C===47||C===62||n2(C)?J(C):(e.consume(C),Z)}function j(C){return C===47||C===62||n2(C)?J(C):n(C)}function t0(C){return C===62?(e.consume(C),e.exit("htmlTextData"),e.exit("htmlText"),t):n(C)}function O0(C){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(C),e.exit("lineEnding"),m0}function m0(C){return ae(C)?Se(e,q0,"linePrefix",o.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(C):q0(C)}function q0(C){return e.enter("htmlTextData"),b(C)}}const Um={name:"labelEnd",tokenize:WX,resolveTo:hX,resolveAll:qX},AX={tokenize:mX},fX={tokenize:gX},dX={tokenize:RX};function qX(e){let t=-1;for(;++t<e.length;){const n=e[t][1];(n.type==="labelImage"||n.type==="labelLink"||n.type==="labelEnd")&&(e.splice(t+1,n.type==="labelImage"?4:2),n.type="data",t++)}return e}function hX(e,t){let n=e.length,o=0,M,c,b,z;for(;n--;)if(M=e[n][1],c){if(M.type==="link"||M.type==="labelLink"&&M._inactive)break;e[n][0]==="enter"&&M.type==="labelLink"&&(M._inactive=!0)}else if(b){if(e[n][0]==="enter"&&(M.type==="labelImage"||M.type==="labelLink")&&!M._balanced&&(c=n,M.type!=="labelLink")){o=2;break}}else M.type==="labelEnd"&&(b=n);const a={type:e[c][1].type==="labelLink"?"link":"image",start:Object.assign({},e[c][1].start),end:Object.assign({},e[e.length-1][1].end)},s={type:"label",start:Object.assign({},e[c][1].start),end:Object.assign({},e[b][1].end)},u={type:"labelText",start:Object.assign({},e[c+o+2][1].end),end:Object.assign({},e[b-2][1].start)};return z=[["enter",a,t],["enter",s,t]],z=Z2(z,e.slice(c+1,c+o+3)),z=Z2(z,[["enter",u,t]]),z=Z2(z,Pm(t.parser.constructs.insideSpan.null,e.slice(c+o+4,b-3),t)),z=Z2(z,[["exit",u,t],e[b-2],e[b-1],["exit",s,t]]),z=Z2(z,e.slice(b+1)),z=Z2(z,[["exit",a,t]]),gM(e,c,e.length,z),e}function WX(e,t,n){const o=this;let M=o.events.length,c,b;for(;M--;)if((o.events[M][1].type==="labelImage"||o.events[M][1].type==="labelLink")&&!o.events[M][1]._balanced){c=o.events[M][1];break}return z;function z(A){return c?c._inactive?l(A):(b=o.parser.defined.includes(oz(o.sliceSerialize({start:c.end,end:o.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(A),e.exit("labelMarker"),e.exit("labelEnd"),a):n(A)}function a(A){return A===40?e.attempt(AX,u,b?u:l)(A):A===91?e.attempt(fX,u,b?s:l)(A):b?u(A):l(A)}function s(A){return e.attempt(dX,u,l)(A)}function u(A){return t(A)}function l(A){return c._balanced=!0,n(A)}}function mX(e,t,n){return o;function o(l){return e.enter("resource"),e.enter("resourceMarker"),e.consume(l),e.exit("resourceMarker"),M}function M(l){return n2(l)?oO(e,c)(l):c(l)}function c(l){return l===41?u(l):J7(e,b,z,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(l)}function b(l){return n2(l)?oO(e,a)(l):u(l)}function z(l){return n(l)}function a(l){return l===34||l===39||l===40?eN(e,s,n,"resourceTitle","resourceTitleMarker","resourceTitleString")(l):u(l)}function s(l){return n2(l)?oO(e,u)(l):u(l)}function u(l){return l===41?(e.enter("resourceMarker"),e.consume(l),e.exit("resourceMarker"),e.exit("resource"),t):n(l)}}function gX(e,t,n){const o=this;return M;function M(z){return Q7.call(o,e,c,b,"reference","referenceMarker","referenceString")(z)}function c(z){return o.parser.defined.includes(oz(o.sliceSerialize(o.events[o.events.length-1][1]).slice(1,-1)))?t(z):n(z)}function b(z){return n(z)}}function RX(e,t,n){return o;function o(c){return e.enter("reference"),e.enter("referenceMarker"),e.consume(c),e.exit("referenceMarker"),M}function M(c){return c===93?(e.enter("referenceMarker"),e.consume(c),e.exit("referenceMarker"),e.exit("reference"),t):n(c)}}const yX={name:"labelStartImage",tokenize:LX,resolveAll:Um.resolveAll};function LX(e,t,n){const o=this;return M;function M(z){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(z),e.exit("labelImageMarker"),c}function c(z){return z===91?(e.enter("labelMarker"),e.consume(z),e.exit("labelMarker"),e.exit("labelImage"),b):n(z)}function b(z){return z===94&&"_hiddenFootnoteSupport"in o.parser.constructs?n(z):t(z)}}const vX={name:"labelStartLink",tokenize:NX,resolveAll:Um.resolveAll};function NX(e,t,n){const o=this;return M;function M(b){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(b),e.exit("labelMarker"),e.exit("labelLink"),c}function c(b){return b===94&&"_hiddenFootnoteSupport"in o.parser.constructs?n(b):t(b)}}const Kh={name:"lineEnding",tokenize:wX};function wX(e,t){return n;function n(o){return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),Se(e,t,"linePrefix")}}const jl={name:"thematicBreak",tokenize:DX};function DX(e,t,n){let o=0,M;return c;function c(s){return e.enter("thematicBreak"),b(s)}function b(s){return M=s,z(s)}function z(s){return s===M?(e.enter("thematicBreakSequence"),a(s)):o>=3&&(s===null||u1(s))?(e.exit("thematicBreak"),t(s)):n(s)}function a(s){return s===M?(e.consume(s),o++,a):(e.exit("thematicBreakSequence"),ae(s)?Se(e,z,"whitespace")(s):z(s))}}const Zn={name:"list",tokenize:_X,continuation:{tokenize:EX},exit:kX},BX={tokenize:XX,partial:!0},TX={tokenize:SX,partial:!0};function _X(e,t,n){const o=this,M=o.events[o.events.length-1];let c=M&&M[1].type==="linePrefix"?M[2].sliceSerialize(M[1],!0).length:0,b=0;return z;function z(d){const W=o.containerState.type||(d===42||d===43||d===45?"listUnordered":"listOrdered");if(W==="listUnordered"?!o.containerState.marker||d===o.containerState.marker:i6(d)){if(o.containerState.type||(o.containerState.type=W,e.enter(W,{_container:!0})),W==="listUnordered")return e.enter("listItemPrefix"),d===42||d===45?e.check(jl,n,s)(d):s(d);if(!o.interrupt||d===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),a(d)}return n(d)}function a(d){return i6(d)&&++b<10?(e.consume(d),a):(!o.interrupt||b<2)&&(o.containerState.marker?d===o.containerState.marker:d===41||d===46)?(e.exit("listItemValue"),s(d)):n(d)}function s(d){return e.enter("listItemMarker"),e.consume(d),e.exit("listItemMarker"),o.containerState.marker=o.containerState.marker||d,e.check(vf,o.interrupt?n:u,e.attempt(BX,A,l))}function u(d){return o.containerState.initialBlankLine=!0,c++,A(d)}function l(d){return ae(d)?(e.enter("listItemPrefixWhitespace"),e.consume(d),e.exit("listItemPrefixWhitespace"),A):n(d)}function A(d){return o.containerState.size=c+o.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(d)}}function EX(e,t,n){const o=this;return o.containerState._closeFlow=void 0,e.check(vf,M,c);function M(z){return o.containerState.furtherBlankLines=o.containerState.furtherBlankLines||o.containerState.initialBlankLine,Se(e,t,"listItemIndent",o.containerState.size+1)(z)}function c(z){return o.containerState.furtherBlankLines||!ae(z)?(o.containerState.furtherBlankLines=void 0,o.containerState.initialBlankLine=void 0,b(z)):(o.containerState.furtherBlankLines=void 0,o.containerState.initialBlankLine=void 0,e.attempt(TX,t,b)(z))}function b(z){return o.containerState._closeFlow=!0,o.interrupt=void 0,Se(e,e.attempt(Zn,t,n),"linePrefix",o.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(z)}}function SX(e,t,n){const o=this;return Se(e,M,"listItemIndent",o.containerState.size+1);function M(c){const b=o.events[o.events.length-1];return b&&b[1].type==="listItemIndent"&&b[2].sliceSerialize(b[1],!0).length===o.containerState.size?t(c):n(c)}}function kX(e){e.exit(this.containerState.type)}function XX(e,t,n){const o=this;return Se(e,M,"listItemPrefixWhitespace",o.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function M(c){const b=o.events[o.events.length-1];return!ae(c)&&b&&b[1].type==="listItemPrefixWhitespace"?t(c):n(c)}}const B8={name:"setextUnderline",tokenize:xX,resolveTo:CX};function CX(e,t){let n=e.length,o,M,c;for(;n--;)if(e[n][0]==="enter"){if(e[n][1].type==="content"){o=n;break}e[n][1].type==="paragraph"&&(M=n)}else e[n][1].type==="content"&&e.splice(n,1),!c&&e[n][1].type==="definition"&&(c=n);const b={type:"setextHeading",start:Object.assign({},e[M][1].start),end:Object.assign({},e[e.length-1][1].end)};return e[M][1].type="setextHeadingText",c?(e.splice(M,0,["enter",b,t]),e.splice(c+1,0,["exit",e[o][1],t]),e[o][1].end=Object.assign({},e[c][1].end)):e[o][1]=b,e.push(["exit",b,t]),e}function xX(e,t,n){const o=this;let M;return c;function c(s){let u=o.events.length,l;for(;u--;)if(o.events[u][1].type!=="lineEnding"&&o.events[u][1].type!=="linePrefix"&&o.events[u][1].type!=="content"){l=o.events[u][1].type==="paragraph";break}return!o.parser.lazy[o.now().line]&&(o.interrupt||l)?(e.enter("setextHeadingLine"),M=s,b(s)):n(s)}function b(s){return e.enter("setextHeadingLineSequence"),z(s)}function z(s){return s===M?(e.consume(s),z):(e.exit("setextHeadingLineSequence"),ae(s)?Se(e,a,"lineSuffix")(s):a(s))}function a(s){return s===null||u1(s)?(e.exit("setextHeadingLine"),t(s)):n(s)}}const FX={tokenize:IX};function IX(e){const t=this,n=e.attempt(vf,o,e.attempt(this.parser.constructs.flowInitial,M,Se(e,e.attempt(this.parser.constructs.flow,M,e.attempt(Yk,M)),"linePrefix")));return n;function o(c){if(c===null){e.consume(c);return}return e.enter("lineEndingBlank"),e.consume(c),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n}function M(c){if(c===null){e.consume(c);return}return e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),t.currentConstruct=void 0,n}}const PX={resolveAll:nN()},UX=tN("string"),$X=tN("text");function tN(e){return{tokenize:t,resolveAll:nN(e==="text"?HX:void 0)};function t(n){const o=this,M=this.parser.constructs[e],c=n.attempt(M,b,z);return b;function b(u){return s(u)?c(u):z(u)}function z(u){if(u===null){n.consume(u);return}return n.enter("data"),n.consume(u),a}function a(u){return s(u)?(n.exit("data"),c(u)):(n.consume(u),a)}function s(u){if(u===null)return!0;const l=M[u];let A=-1;if(l)for(;++A<l.length;){const d=l[A];if(!d.previous||d.previous.call(o,o.previous))return!0}return!1}}}function nN(e){return t;function t(n,o){let M=-1,c;for(;++M<=n.length;)c===void 0?n[M]&&n[M][1].type==="data"&&(c=M,M++):(!n[M]||n[M][1].type!=="data")&&(M!==c+2&&(n[c][1].end=n[M-1][1].end,n.splice(c+2,M-c-2),M=c+2),c=void 0);return e?e(n,o):n}}function HX(e,t){let n=0;for(;++n<=e.length;)if((n===e.length||e[n][1].type==="lineEnding")&&e[n-1][1].type==="data"){const o=e[n-1][1],M=t.sliceStream(o);let c=M.length,b=-1,z=0,a;for(;c--;){const s=M[c];if(typeof s=="string"){for(b=s.length;s.charCodeAt(b-1)===32;)z++,b--;if(b)break;b=-1}else if(s===-2)a=!0,z++;else if(s!==-1){c++;break}}if(z){const s={type:n===e.length||a||z<2?"lineSuffix":"hardBreakTrailing",start:{line:o.end.line,column:o.end.column-z,offset:o.end.offset-z,_index:o.start._index+c,_bufferIndex:c?b:o.start._bufferIndex+b},end:Object.assign({},o.end)};o.end=Object.assign({},s.start),o.start.offset===o.end.offset?Object.assign(o,s):(e.splice(n,0,["enter",s,t],["exit",s,t]),n+=2)}n++}return e}function YX(e,t,n){let o=Object.assign(n?Object.assign({},n):{line:1,column:1,offset:0},{_index:0,_bufferIndex:-1});const M={},c=[];let b=[],z=[];const a={consume:E,enter:k,exit:B,attempt:N(I),check:N(S),interrupt:N(S,{interrupt:!0})},s={previous:null,code:null,containerState:{},events:[],parser:e,sliceStream:d,sliceSerialize:A,now:W,defineSkip:g,write:l};let u=t.tokenize.call(s,a);return t.resolveAll&&c.push(t),s;function l(V){return b=Z2(b,V),L(),b[b.length-1]!==null?[]:(P(t,0),s.events=Pm(c,s.events,s),s.events)}function A(V,x){return VX(d(V),x)}function d(V){return jX(b,V)}function W(){const{line:V,column:x,offset:e0,_index:Z,_bufferIndex:j}=o;return{line:V,column:x,offset:e0,_index:Z,_bufferIndex:j}}function g(V){M[V.line]=V.column,K()}function L(){let V;for(;o._index<b.length;){const x=b[o._index];if(typeof x=="string")for(V=o._index,o._bufferIndex<0&&(o._bufferIndex=0);o._index===V&&o._bufferIndex<x.length;)R(x.charCodeAt(o._bufferIndex));else R(x)}}function R(V){u=u(V)}function E(V){u1(V)?(o.line++,o.column=1,o.offset+=V===-3?2:1,K()):V!==-1&&(o.column++,o.offset++),o._bufferIndex<0?o._index++:(o._bufferIndex++,o._bufferIndex===b[o._index].length&&(o._bufferIndex=-1,o._index++)),s.previous=V}function k(V,x){const e0=x||{};return e0.type=V,e0.start=W(),s.events.push(["enter",e0,s]),z.push(e0),e0}function B(V){const x=z.pop();return x.end=W(),s.events.push(["exit",x,s]),x}function I(V,x){P(V,x.from)}function S(V,x){x.restore()}function N(V,x){return e0;function e0(Z,j,t0){let O0,m0,q0,C;return Array.isArray(Z)?d0(Z):"tokenize"in Z?d0([Z]):z0(Z);function z0(i0){return c0;function c0(s0){const L0=s0!==null&&i0[s0],G0=s0!==null&&i0.null,p1=[...Array.isArray(L0)?L0:L0?[L0]:[],...Array.isArray(G0)?G0:G0?[G0]:[]];return d0(p1)(s0)}}function d0(i0){return O0=i0,m0=0,i0.length===0?t0:_(i0[m0])}function _(i0){return c0;function c0(s0){return C=J(),q0=i0,i0.partial||(s.currentConstruct=i0),i0.name&&s.parser.constructs.disable.null.includes(i0.name)?o0():i0.tokenize.call(x?Object.assign(Object.create(s),x):s,a,D0,o0)(s0)}}function D0(i0){return V(q0,C),j}function o0(i0){return C.restore(),++m0<O0.length?_(O0[m0]):t0}}}function P(V,x){V.resolveAll&&!c.includes(V)&&c.push(V),V.resolve&&gM(s.events,x,s.events.length-x,V.resolve(s.events.slice(x),s)),V.resolveTo&&(s.events=V.resolveTo(s.events,s))}function J(){const V=W(),x=s.previous,e0=s.currentConstruct,Z=s.events.length,j=Array.from(z);return{restore:t0,from:Z};function t0(){o=V,s.previous=x,s.currentConstruct=e0,s.events.length=Z,z=j,K()}}function K(){o.line in M&&o.column<2&&(o.column=M[o.line],o.offset+=M[o.line]-1)}}function jX(e,t){const n=t.start._index,o=t.start._bufferIndex,M=t.end._index,c=t.end._bufferIndex;let b;if(n===M)b=[e[n].slice(o,c)];else{if(b=e.slice(n,M),o>-1){const z=b[0];typeof z=="string"?b[0]=z.slice(o):b.shift()}c>0&&b.push(e[M].slice(0,c))}return b}function VX(e,t){let n=-1;const o=[];let M;for(;++n<e.length;){const c=e[n];let b;if(typeof c=="string")b=c;else switch(c){case-5:{b="\r";break}case-4:{b=` +`;break}case-3:{b=`\r +`;break}case-2:{b=t?" ":" ";break}case-1:{if(!t&&M)continue;b=" ";break}default:b=String.fromCharCode(c)}M=c===-2,o.push(b)}return o.join("")}const GX={42:Zn,43:Zn,45:Zn,48:Zn,49:Zn,50:Zn,51:Zn,52:Zn,53:Zn,54:Zn,55:Zn,56:Zn,57:Zn,62:V7},KX={91:Zk},ZX={[-2]:Gh,[-1]:Gh,32:Gh},JX={35:oX,42:jl,45:[B8,jl],60:cX,61:B8,95:jl,96:w8,126:w8},QX={38:K7,92:G7},eC={[-5]:Kh,[-4]:Kh,[-3]:Kh,33:yX,38:K7,42:c6,60:[vk,uX],91:vX,92:[tX,G7],93:Um,95:c6,96:Fk},tC={null:[c6,PX]},nC={null:[42,95]},oC={null:[]},rC=Object.freeze(Object.defineProperty({__proto__:null,attentionMarkers:nC,contentInitial:KX,disable:oC,document:GX,flow:JX,flowInitial:ZX,insideSpan:tC,string:QX,text:eC},Symbol.toStringTag,{value:"Module"}));function MC(e){const n=sk([rC,...(e||{}).extensions||[]]),o={defined:[],lazy:{},constructs:n,content:M(hk),document:M(mk),flow:M(FX),string:M(UX),text:M($X)};return o;function M(c){return b;function b(z){return YX(o,c,z)}}}function iC(e){for(;!Z7(e););return e}const T8=/[\0\t\n\r]/g;function cC(){let e=1,t="",n=!0,o;return M;function M(c,b,z){const a=[];let s,u,l,A,d;for(c=t+(typeof c=="string"?c.toString():new TextDecoder(b||void 0).decode(c)),l=0,t="",n&&(c.charCodeAt(0)===65279&&l++,n=void 0);l<c.length;){if(T8.lastIndex=l,s=T8.exec(c),A=s&&s.index!==void 0?s.index:c.length,d=c.charCodeAt(A),!s){t=c.slice(l);break}if(d===10&&l===A&&o)a.push(-3),o=void 0;else switch(o&&(a.push(-5),o=void 0),l<A&&(a.push(c.slice(l,A)),e+=A-l),d){case 0:{a.push(65533),e++;break}case 9:{for(u=Math.ceil(e/4)*4,a.push(-2);e++<u;)a.push(-1);break}case 10:{a.push(-4),e=1;break}default:o=!0,e=1}l=A+1}return z&&(o&&a.push(-5),t&&a.push(t),a.push(null)),a}}const bC=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function oN(e){return e.replace(bC,pC)}function pC(e,t,n){if(t)return t;if(n.charCodeAt(0)===35){const M=n.charCodeAt(1),c=M===120||M===88;return j7(n.slice(c?2:1),c?16:10)}return Im(n)||e}function Vl(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?_8(e.position):"start"in e||"end"in e?_8(e):"line"in e||"column"in e?b6(e):""}function b6(e){return E8(e&&e.line)+":"+E8(e&&e.column)}function _8(e){return b6(e&&e.start)+"-"+b6(e&&e.end)}function E8(e){return e&&typeof e=="number"?e:1}const rN={}.hasOwnProperty;function fO(e,t,n){return typeof t!="string"&&(n=t,t=void 0),zC(n)(iC(MC(n).document().write(cC()(e,t,!0))))}function zC(e){const t={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:c(X),autolinkProtocol:J,autolinkEmail:J,atxHeading:c(p0),blockQuote:c(G0),characterEscape:J,characterReference:J,codeFenced:c(p1),codeFencedFenceInfo:b,codeFencedFenceMeta:b,codeIndented:c(p1,b),codeText:c(n1,b),codeTextData:J,data:J,codeFlowValue:J,definition:c($),definitionDestinationString:b,definitionLabelString:b,definitionTitleString:b,emphasis:c(n0),hardBreakEscape:c(g0),hardBreakTrailing:c(g0),htmlFlow:c(S0,b),htmlFlowData:J,htmlText:c(S0,b),htmlTextData:J,image:c(K0),label:b,link:c(X),listItem:c(U0),listItemValue:A,listOrdered:c(j0,l),listUnordered:c(j0),paragraph:c(T1),reference:_,referenceString:b,resourceDestinationString:b,resourceTitleString:b,setextHeading:c(p0),strong:c(f1),thematicBreak:c(vt)},exit:{atxHeading:a(),atxHeadingSequence:I,autolink:a(),autolinkEmail:L0,autolinkProtocol:s0,blockQuote:a(),characterEscapeValue:K,characterReferenceMarkerHexadecimal:o0,characterReferenceMarkerNumeric:o0,characterReferenceValue:i0,characterReference:c0,codeFenced:a(L),codeFencedFence:g,codeFencedFenceInfo:d,codeFencedFenceMeta:W,codeFlowValue:K,codeIndented:a(R),codeText:a(j),codeTextData:K,data:K,definition:a(),definitionDestinationString:B,definitionLabelString:E,definitionTitleString:k,emphasis:a(),hardBreakEscape:a(x),hardBreakTrailing:a(x),htmlFlow:a(e0),htmlFlowData:K,htmlText:a(Z),htmlTextData:K,image:a(O0),label:q0,labelText:m0,lineEnding:V,link:a(t0),listItem:a(),listOrdered:a(),listUnordered:a(),paragraph:a(),referenceString:D0,resourceDestinationString:C,resourceTitleString:z0,resource:d0,setextHeading:a(P),setextHeadingLineSequence:N,setextHeadingText:S,strong:a(),thematicBreak:a()}};MN(t,(e||{}).mdastExtensions||[]);const n={};return o;function o(u0){let N0={type:"root",children:[]};const V0={stack:[N0],tokenStack:[],config:t,enter:z,exit:s,buffer:b,resume:u,data:n},i1=[];let O1=-1;for(;++O1<u0.length;)if(u0[O1][1].type==="listOrdered"||u0[O1][1].type==="listUnordered")if(u0[O1][0]==="enter")i1.push(O1);else{const de=i1.pop();O1=M(u0,de,O1)}for(O1=-1;++O1<u0.length;){const de=t[u0[O1][0]];rN.call(de,u0[O1][1].type)&&de[u0[O1][1].type].call(Object.assign({sliceSerialize:u0[O1][2].sliceSerialize},V0),u0[O1][1])}if(V0.tokenStack.length>0){const de=V0.tokenStack[V0.tokenStack.length-1];(de[1]||S8).call(V0,void 0,de[0])}for(N0.position={start:ai(u0.length>0?u0[0][1].start:{line:1,column:1,offset:0}),end:ai(u0.length>0?u0[u0.length-2][1].end:{line:1,column:1,offset:0})},O1=-1;++O1<t.transforms.length;)N0=t.transforms[O1](N0)||N0;return N0}function M(u0,N0,V0){let i1=N0-1,O1=-1,de=!1,rt,j1,Ue,Te;for(;++i1<=V0;){const x1=u0[i1];switch(x1[1].type){case"listUnordered":case"listOrdered":case"blockQuote":{x1[0]==="enter"?O1++:O1--,Te=void 0;break}case"lineEndingBlank":{x1[0]==="enter"&&(rt&&!Te&&!O1&&!Ue&&(Ue=i1),Te=void 0);break}case"linePrefix":case"listItemValue":case"listItemMarker":case"listItemPrefix":case"listItemPrefixWhitespace":break;default:Te=void 0}if(!O1&&x1[0]==="enter"&&x1[1].type==="listItemPrefix"||O1===-1&&x1[0]==="exit"&&(x1[1].type==="listUnordered"||x1[1].type==="listOrdered")){if(rt){let Xe=i1;for(j1=void 0;Xe--;){const T=u0[Xe];if(T[1].type==="lineEnding"||T[1].type==="lineEndingBlank"){if(T[0]==="exit")continue;j1&&(u0[j1][1].type="lineEndingBlank",de=!0),T[1].type="lineEnding",j1=Xe}else if(!(T[1].type==="linePrefix"||T[1].type==="blockQuotePrefix"||T[1].type==="blockQuotePrefixWhitespace"||T[1].type==="blockQuoteMarker"||T[1].type==="listItemIndent"))break}Ue&&(!j1||Ue<j1)&&(rt._spread=!0),rt.end=Object.assign({},j1?u0[j1][1].start:x1[1].end),u0.splice(j1||i1,0,["exit",rt,x1[2]]),i1++,V0++}if(x1[1].type==="listItemPrefix"){const Xe={type:"listItem",_spread:!1,start:Object.assign({},x1[1].start),end:void 0};rt=Xe,u0.splice(i1,0,["enter",Xe,x1[2]]),i1++,V0++,Ue=void 0,Te=!0}}}return u0[N0][1]._spread=de,V0}function c(u0,N0){return V0;function V0(i1){z.call(this,u0(i1),i1),N0&&N0.call(this,i1)}}function b(){this.stack.push({type:"fragment",children:[]})}function z(u0,N0,V0){this.stack[this.stack.length-1].children.push(u0),this.stack.push(u0),this.tokenStack.push([N0,V0]),u0.position={start:ai(N0.start),end:void 0}}function a(u0){return N0;function N0(V0){u0&&u0.call(this,V0),s.call(this,V0)}}function s(u0,N0){const V0=this.stack.pop(),i1=this.tokenStack.pop();if(i1)i1[0].type!==u0.type&&(N0?N0.call(this,u0,i1[0]):(i1[1]||S8).call(this,u0,i1[0]));else throw new Error("Cannot close `"+u0.type+"` ("+Vl({start:u0.start,end:u0.end})+"): it’s not open");V0.position.end=ai(u0.end)}function u(){return Fm(this.stack.pop())}function l(){this.data.expectingFirstListItemValue=!0}function A(u0){if(this.data.expectingFirstListItemValue){const N0=this.stack[this.stack.length-2];N0.start=Number.parseInt(this.sliceSerialize(u0),10),this.data.expectingFirstListItemValue=void 0}}function d(){const u0=this.resume(),N0=this.stack[this.stack.length-1];N0.lang=u0}function W(){const u0=this.resume(),N0=this.stack[this.stack.length-1];N0.meta=u0}function g(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)}function L(){const u0=this.resume(),N0=this.stack[this.stack.length-1];N0.value=u0.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),this.data.flowCodeInside=void 0}function R(){const u0=this.resume(),N0=this.stack[this.stack.length-1];N0.value=u0.replace(/(\r?\n|\r)$/g,"")}function E(u0){const N0=this.resume(),V0=this.stack[this.stack.length-1];V0.label=N0,V0.identifier=oz(this.sliceSerialize(u0)).toLowerCase()}function k(){const u0=this.resume(),N0=this.stack[this.stack.length-1];N0.title=u0}function B(){const u0=this.resume(),N0=this.stack[this.stack.length-1];N0.url=u0}function I(u0){const N0=this.stack[this.stack.length-1];if(!N0.depth){const V0=this.sliceSerialize(u0).length;N0.depth=V0}}function S(){this.data.setextHeadingSlurpLineEnding=!0}function N(u0){const N0=this.stack[this.stack.length-1];N0.depth=this.sliceSerialize(u0).codePointAt(0)===61?1:2}function P(){this.data.setextHeadingSlurpLineEnding=void 0}function J(u0){const V0=this.stack[this.stack.length-1].children;let i1=V0[V0.length-1];(!i1||i1.type!=="text")&&(i1=ot(),i1.position={start:ai(u0.start),end:void 0},V0.push(i1)),this.stack.push(i1)}function K(u0){const N0=this.stack.pop();N0.value+=this.sliceSerialize(u0),N0.position.end=ai(u0.end)}function V(u0){const N0=this.stack[this.stack.length-1];if(this.data.atHardBreak){const V0=N0.children[N0.children.length-1];V0.position.end=ai(u0.end),this.data.atHardBreak=void 0;return}!this.data.setextHeadingSlurpLineEnding&&t.canContainEols.includes(N0.type)&&(J.call(this,u0),K.call(this,u0))}function x(){this.data.atHardBreak=!0}function e0(){const u0=this.resume(),N0=this.stack[this.stack.length-1];N0.value=u0}function Z(){const u0=this.resume(),N0=this.stack[this.stack.length-1];N0.value=u0}function j(){const u0=this.resume(),N0=this.stack[this.stack.length-1];N0.value=u0}function t0(){const u0=this.stack[this.stack.length-1];if(this.data.inReference){const N0=this.data.referenceType||"shortcut";u0.type+="Reference",u0.referenceType=N0,delete u0.url,delete u0.title}else delete u0.identifier,delete u0.label;this.data.referenceType=void 0}function O0(){const u0=this.stack[this.stack.length-1];if(this.data.inReference){const N0=this.data.referenceType||"shortcut";u0.type+="Reference",u0.referenceType=N0,delete u0.url,delete u0.title}else delete u0.identifier,delete u0.label;this.data.referenceType=void 0}function m0(u0){const N0=this.sliceSerialize(u0),V0=this.stack[this.stack.length-2];V0.label=oN(N0),V0.identifier=oz(N0).toLowerCase()}function q0(){const u0=this.stack[this.stack.length-1],N0=this.resume(),V0=this.stack[this.stack.length-1];if(this.data.inReference=!0,V0.type==="link"){const i1=u0.children;V0.children=i1}else V0.alt=N0}function C(){const u0=this.resume(),N0=this.stack[this.stack.length-1];N0.url=u0}function z0(){const u0=this.resume(),N0=this.stack[this.stack.length-1];N0.title=u0}function d0(){this.data.inReference=void 0}function _(){this.data.referenceType="collapsed"}function D0(u0){const N0=this.resume(),V0=this.stack[this.stack.length-1];V0.label=N0,V0.identifier=oz(this.sliceSerialize(u0)).toLowerCase(),this.data.referenceType="full"}function o0(u0){this.data.characterReferenceType=u0.type}function i0(u0){const N0=this.sliceSerialize(u0),V0=this.data.characterReferenceType;let i1;V0?(i1=j7(N0,V0==="characterReferenceMarkerNumeric"?10:16),this.data.characterReferenceType=void 0):i1=Im(N0);const O1=this.stack[this.stack.length-1];O1.value+=i1}function c0(u0){const N0=this.stack.pop();N0.position.end=ai(u0.end)}function s0(u0){K.call(this,u0);const N0=this.stack[this.stack.length-1];N0.url=this.sliceSerialize(u0)}function L0(u0){K.call(this,u0);const N0=this.stack[this.stack.length-1];N0.url="mailto:"+this.sliceSerialize(u0)}function G0(){return{type:"blockquote",children:[]}}function p1(){return{type:"code",lang:null,meta:null,value:""}}function n1(){return{type:"inlineCode",value:""}}function $(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function n0(){return{type:"emphasis",children:[]}}function p0(){return{type:"heading",depth:0,children:[]}}function g0(){return{type:"break"}}function S0(){return{type:"html",value:""}}function K0(){return{type:"image",title:null,url:"",alt:null}}function X(){return{type:"link",title:null,url:"",children:[]}}function j0(u0){return{type:"list",ordered:u0.type==="listOrdered",start:null,spread:u0._spread,children:[]}}function U0(u0){return{type:"listItem",spread:u0._spread,checked:null,children:[]}}function T1(){return{type:"paragraph",children:[]}}function f1(){return{type:"strong",children:[]}}function ot(){return{type:"text",value:""}}function vt(){return{type:"thematicBreak"}}}function ai(e){return{line:e.line,column:e.column,offset:e.offset}}function MN(e,t){let n=-1;for(;++n<t.length;){const o=t[n];Array.isArray(o)?MN(e,o):aC(e,o)}}function aC(e,t){let n;for(n in t)if(rN.call(t,n))switch(n){case"canContainEols":{const o=t[n];o&&e[n].push(...o);break}case"transforms":{const o=t[n];o&&e[n].push(...o);break}case"enter":case"exit":{const o=t[n];o&&Object.assign(e[n],o);break}}}function S8(e,t){throw e?new Error("Cannot close `"+e.type+"` ("+Vl({start:e.start,end:e.end})+"): a different token (`"+t.type+"`, "+Vl({start:t.start,end:t.end})+") is open"):new Error("Cannot close document, a token (`"+t.type+"`, "+Vl({start:t.start,end:t.end})+") is still open")}const k8={}.hasOwnProperty;function sC(e,t){const n=t||{};function o(M,...c){let b=o.invalid;const z=o.handlers;if(M&&k8.call(M,e)){const a=String(M[e]);b=k8.call(z,a)?z[a]:o.unknown}if(b)return b.call(this,M,...c)}return o.handlers=n.handlers||{},o.invalid=n.invalid,o.unknown=n.unknown,o}const OC={}.hasOwnProperty;function iN(e,t){let n=-1,o;if(t.extensions)for(;++n<t.extensions.length;)iN(e,t.extensions[n]);for(o in t)if(OC.call(t,o))switch(o){case"extensions":break;case"unsafe":{X8(e[o],t[o]);break}case"join":{X8(e[o],t[o]);break}case"handlers":{uC(e[o],t[o]);break}default:e.options[o]=t[o]}return e}function X8(e,t){t&&e.push(...t)}function uC(e,t){t&&Object.assign(e,t)}function lC(e,t,n,o){const M=n.enter("blockquote"),c=n.createTracker(o);c.move("> "),c.shift(2);const b=n.indentLines(n.containerFlow(e,c.current()),AC);return M(),b}function AC(e,t,n){return">"+(n?"":" ")+e}function cN(e,t){return C8(e,t.inConstruct,!0)&&!C8(e,t.notInConstruct,!1)}function C8(e,t,n){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return n;let o=-1;for(;++o<t.length;)if(e.includes(t[o]))return!0;return!1}function x8(e,t,n,o){let M=-1;for(;++M<n.unsafe.length;)if(n.unsafe[M].character===` +`&&cN(n.stack,n.unsafe[M]))return/[ \t]/.test(o.before)?"":" ";return`\\ +`}function fC(e,t){const n=String(e);let o=n.indexOf(t),M=o,c=0,b=0;if(typeof t!="string")throw new TypeError("Expected substring");for(;o!==-1;)o===M?++c>b&&(b=c):c=1,M=o+t.length,o=n.indexOf(t,M);return b}function p6(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function dC(e){const t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function qC(e,t,n,o){const M=dC(n),c=e.value||"",b=M==="`"?"GraveAccent":"Tilde";if(p6(e,n)){const l=n.enter("codeIndented"),A=n.indentLines(c,hC);return l(),A}const z=n.createTracker(o),a=M.repeat(Math.max(fC(c,M)+1,3)),s=n.enter("codeFenced");let u=z.move(a);if(e.lang){const l=n.enter(`codeFencedLang${b}`);u+=z.move(n.safe(e.lang,{before:u,after:" ",encode:["`"],...z.current()})),l()}if(e.lang&&e.meta){const l=n.enter(`codeFencedMeta${b}`);u+=z.move(" "),u+=z.move(n.safe(e.meta,{before:u,after:` +`,encode:["`"],...z.current()})),l()}return u+=z.move(` +`),c&&(u+=z.move(c+` +`)),u+=z.move(a),s(),u}function hC(e,t,n){return(n?"":" ")+e}function $m(e){const t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function WC(e,t,n,o){const M=$m(n),c=M==='"'?"Quote":"Apostrophe",b=n.enter("definition");let z=n.enter("label");const a=n.createTracker(o);let s=a.move("[");return s+=a.move(n.safe(n.associationId(e),{before:s,after:"]",...a.current()})),s+=a.move("]: "),z(),!e.url||/[\0- \u007F]/.test(e.url)?(z=n.enter("destinationLiteral"),s+=a.move("<"),s+=a.move(n.safe(e.url,{before:s,after:">",...a.current()})),s+=a.move(">")):(z=n.enter("destinationRaw"),s+=a.move(n.safe(e.url,{before:s,after:e.title?" ":` +`,...a.current()}))),z(),e.title&&(z=n.enter(`title${c}`),s+=a.move(" "+M),s+=a.move(n.safe(e.title,{before:s,after:M,...a.current()})),s+=a.move(M),z()),b(),s}function mC(e){const t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}bN.peek=gC;function bN(e,t,n,o){const M=mC(n),c=n.enter("emphasis"),b=n.createTracker(o);let z=b.move(M);return z+=b.move(n.containerPhrasing(e,{before:z,after:M,...b.current()})),z+=b.move(M),c(),z}function gC(e,t,n){return n.options.emphasis||"*"}const Hm=function(e){if(e==null)return vC;if(typeof e=="function")return Nf(e);if(typeof e=="object")return Array.isArray(e)?RC(e):yC(e);if(typeof e=="string")return LC(e);throw new Error("Expected function, string, or object as test")};function RC(e){const t=[];let n=-1;for(;++n<e.length;)t[n]=Hm(e[n]);return Nf(o);function o(...M){let c=-1;for(;++c<t.length;)if(t[c].apply(this,M))return!0;return!1}}function yC(e){const t=e;return Nf(n);function n(o){const M=o;let c;for(c in e)if(M[c]!==t[c])return!1;return!0}}function LC(e){return Nf(t);function t(n){return n&&n.type===e}}function Nf(e){return t;function t(n,o,M){return!!(NC(n)&&e.call(this,n,typeof o=="number"?o:void 0,M||void 0))}}function vC(){return!0}function NC(e){return e!==null&&typeof e=="object"&&"type"in e}const pN=[],wC=!0,z6=!1,DC="skip";function BC(e,t,n,o){let M;typeof t=="function"&&typeof n!="function"?(o=n,n=t):M=t;const c=Hm(M),b=o?-1:1;z(e,void 0,[])();function z(a,s,u){const l=a&&typeof a=="object"?a:{};if(typeof l.type=="string"){const d=typeof l.tagName=="string"?l.tagName:typeof l.name=="string"?l.name:void 0;Object.defineProperty(A,"name",{value:"node ("+(a.type+(d?"<"+d+">":""))+")"})}return A;function A(){let d=pN,W,g,L;if((!t||c(a,s,u[u.length-1]||void 0))&&(d=TC(n(a,u)),d[0]===z6))return d;if("children"in a&&a.children){const R=a;if(R.children&&d[0]!==DC)for(g=(o?R.children.length:-1)+b,L=u.concat(R);g>-1&&g<R.children.length;){const E=R.children[g];if(W=z(E,g,L)(),W[0]===z6)return W;g=typeof W[1]=="number"?W[1]:g+b}}return d}}}function TC(e){return Array.isArray(e)?e:typeof e=="number"?[wC,e]:e==null?pN:[e]}function _C(e,t,n,o){let M,c,b;typeof t=="function"&&typeof n!="function"?(c=void 0,b=t,M=n):(c=t,b=n,M=o),BC(e,c,z,M);function z(a,s){const u=s[s.length-1],l=u?u.children.indexOf(a):void 0;return b(a,l,u)}}function zN(e,t){let n=!1;return _C(e,function(o){if("value"in o&&/\r?\n|\r/.test(o.value)||o.type==="break")return n=!0,z6}),!!((!e.depth||e.depth<3)&&Fm(e)&&(t.options.setext||n))}function EC(e,t,n,o){const M=Math.max(Math.min(6,e.depth||1),1),c=n.createTracker(o);if(zN(e,n)){const u=n.enter("headingSetext"),l=n.enter("phrasing"),A=n.containerPhrasing(e,{...c.current(),before:` +`,after:` +`});return l(),u(),A+` +`+(M===1?"=":"-").repeat(A.length-(Math.max(A.lastIndexOf("\r"),A.lastIndexOf(` +`))+1))}const b="#".repeat(M),z=n.enter("headingAtx"),a=n.enter("phrasing");c.move(b+" ");let s=n.containerPhrasing(e,{before:"# ",after:` +`,...c.current()});return/^[\t ]/.test(s)&&(s="&#x"+s.charCodeAt(0).toString(16).toUpperCase()+";"+s.slice(1)),s=s?b+" "+s:b,n.options.closeAtx&&(s+=" "+b),a(),z(),s}aN.peek=SC;function aN(e){return e.value||""}function SC(){return"<"}sN.peek=kC;function sN(e,t,n,o){const M=$m(n),c=M==='"'?"Quote":"Apostrophe",b=n.enter("image");let z=n.enter("label");const a=n.createTracker(o);let s=a.move("![");return s+=a.move(n.safe(e.alt,{before:s,after:"]",...a.current()})),s+=a.move("]("),z(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(z=n.enter("destinationLiteral"),s+=a.move("<"),s+=a.move(n.safe(e.url,{before:s,after:">",...a.current()})),s+=a.move(">")):(z=n.enter("destinationRaw"),s+=a.move(n.safe(e.url,{before:s,after:e.title?" ":")",...a.current()}))),z(),e.title&&(z=n.enter(`title${c}`),s+=a.move(" "+M),s+=a.move(n.safe(e.title,{before:s,after:M,...a.current()})),s+=a.move(M),z()),s+=a.move(")"),b(),s}function kC(){return"!"}ON.peek=XC;function ON(e,t,n,o){const M=e.referenceType,c=n.enter("imageReference");let b=n.enter("label");const z=n.createTracker(o);let a=z.move("![");const s=n.safe(e.alt,{before:a,after:"]",...z.current()});a+=z.move(s+"]["),b();const u=n.stack;n.stack=[],b=n.enter("reference");const l=n.safe(n.associationId(e),{before:a,after:"]",...z.current()});return b(),n.stack=u,c(),M==="full"||!s||s!==l?a+=z.move(l+"]"):M==="shortcut"?a=a.slice(0,-1):a+=z.move("]"),a}function XC(){return"!"}uN.peek=CC;function uN(e,t,n){let o=e.value||"",M="`",c=-1;for(;new RegExp("(^|[^`])"+M+"([^`]|$)").test(o);)M+="`";for(/[^ \r\n]/.test(o)&&(/^[ \r\n]/.test(o)&&/[ \r\n]$/.test(o)||/^`|`$/.test(o))&&(o=" "+o+" ");++c<n.unsafe.length;){const b=n.unsafe[c],z=n.compilePattern(b);let a;if(b.atBreak)for(;a=z.exec(o);){let s=a.index;o.charCodeAt(s)===10&&o.charCodeAt(s-1)===13&&s--,o=o.slice(0,s)+" "+o.slice(a.index+1)}}return M+o+M}function CC(){return"`"}function lN(e,t){const n=Fm(e);return!!(!t.options.resourceLink&&e.url&&!e.title&&e.children&&e.children.length===1&&e.children[0].type==="text"&&(n===e.url||"mailto:"+n===e.url)&&/^[a-z][a-z+.-]+:/i.test(e.url)&&!/[\0- <>\u007F]/.test(e.url))}AN.peek=xC;function AN(e,t,n,o){const M=$m(n),c=M==='"'?"Quote":"Apostrophe",b=n.createTracker(o);let z,a;if(lN(e,n)){const u=n.stack;n.stack=[],z=n.enter("autolink");let l=b.move("<");return l+=b.move(n.containerPhrasing(e,{before:l,after:">",...b.current()})),l+=b.move(">"),z(),n.stack=u,l}z=n.enter("link"),a=n.enter("label");let s=b.move("[");return s+=b.move(n.containerPhrasing(e,{before:s,after:"](",...b.current()})),s+=b.move("]("),a(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(a=n.enter("destinationLiteral"),s+=b.move("<"),s+=b.move(n.safe(e.url,{before:s,after:">",...b.current()})),s+=b.move(">")):(a=n.enter("destinationRaw"),s+=b.move(n.safe(e.url,{before:s,after:e.title?" ":")",...b.current()}))),a(),e.title&&(a=n.enter(`title${c}`),s+=b.move(" "+M),s+=b.move(n.safe(e.title,{before:s,after:M,...b.current()})),s+=b.move(M),a()),s+=b.move(")"),z(),s}function xC(e,t,n){return lN(e,n)?"<":"["}fN.peek=FC;function fN(e,t,n,o){const M=e.referenceType,c=n.enter("linkReference");let b=n.enter("label");const z=n.createTracker(o);let a=z.move("[");const s=n.containerPhrasing(e,{before:a,after:"]",...z.current()});a+=z.move(s+"]["),b();const u=n.stack;n.stack=[],b=n.enter("reference");const l=n.safe(n.associationId(e),{before:a,after:"]",...z.current()});return b(),n.stack=u,c(),M==="full"||!s||s!==l?a+=z.move(l+"]"):M==="shortcut"?a=a.slice(0,-1):a+=z.move("]"),a}function FC(){return"["}function Ym(e){const t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function IC(e){const t=Ym(e),n=e.options.bulletOther;if(!n)return t==="*"?"-":"*";if(n!=="*"&&n!=="+"&&n!=="-")throw new Error("Cannot serialize items with `"+n+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(n===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+n+"`) to be different");return n}function PC(e){const t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function dN(e){const t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function UC(e,t,n,o){const M=n.enter("list"),c=n.bulletCurrent;let b=e.ordered?PC(n):Ym(n);const z=e.ordered?b==="."?")":".":IC(n);let a=t&&n.bulletLastUsed?b===n.bulletLastUsed:!1;if(!e.ordered){const u=e.children?e.children[0]:void 0;if((b==="*"||b==="-")&&u&&(!u.children||!u.children[0])&&n.stack[n.stack.length-1]==="list"&&n.stack[n.stack.length-2]==="listItem"&&n.stack[n.stack.length-3]==="list"&&n.stack[n.stack.length-4]==="listItem"&&n.indexStack[n.indexStack.length-1]===0&&n.indexStack[n.indexStack.length-2]===0&&n.indexStack[n.indexStack.length-3]===0&&(a=!0),dN(n)===b&&u){let l=-1;for(;++l<e.children.length;){const A=e.children[l];if(A&&A.type==="listItem"&&A.children&&A.children[0]&&A.children[0].type==="thematicBreak"){a=!0;break}}}}a&&(b=z),n.bulletCurrent=b;const s=n.containerFlow(e,o);return n.bulletLastUsed=b,n.bulletCurrent=c,M(),s}function $C(e){const t=e.options.listItemIndent||"one";if(t!=="tab"&&t!=="one"&&t!=="mixed")throw new Error("Cannot serialize items with `"+t+"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`");return t}function HC(e,t,n,o){const M=$C(n);let c=n.bulletCurrent||Ym(n);t&&t.type==="list"&&t.ordered&&(c=(typeof t.start=="number"&&t.start>-1?t.start:1)+(n.options.incrementListMarker===!1?0:t.children.indexOf(e))+c);let b=c.length+1;(M==="tab"||M==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(b=Math.ceil(b/4)*4);const z=n.createTracker(o);z.move(c+" ".repeat(b-c.length)),z.shift(b);const a=n.enter("listItem"),s=n.indentLines(n.containerFlow(e,z.current()),u);return a(),s;function u(l,A,d){return A?(d?"":" ".repeat(b))+l:(d?c:c+" ".repeat(b-c.length))+l}}function YC(e,t,n,o){const M=n.enter("paragraph"),c=n.enter("phrasing"),b=n.containerPhrasing(e,o);return c(),M(),b}const jC=Hm(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function VC(e,t,n,o){return(e.children.some(function(b){return jC(b)})?n.containerPhrasing:n.containerFlow).call(n,e,o)}function GC(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}qN.peek=KC;function qN(e,t,n,o){const M=GC(n),c=n.enter("strong"),b=n.createTracker(o);let z=b.move(M+M);return z+=b.move(n.containerPhrasing(e,{before:z,after:M,...b.current()})),z+=b.move(M+M),c(),z}function KC(e,t,n){return n.options.strong||"*"}function ZC(e,t,n,o){return n.safe(e.value,o)}function JC(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function QC(e,t,n){const o=(dN(n)+(n.options.ruleSpaces?" ":"")).repeat(JC(n));return n.options.ruleSpaces?o.slice(0,-1):o}const ex={blockquote:lC,break:x8,code:qC,definition:WC,emphasis:bN,hardBreak:x8,heading:EC,html:aN,image:sN,imageReference:ON,inlineCode:uN,link:AN,linkReference:fN,list:UC,listItem:HC,paragraph:YC,root:VC,strong:qN,text:ZC,thematicBreak:QC},tx=[nx];function nx(e,t,n,o){if(t.type==="code"&&p6(t,o)&&(e.type==="list"||e.type===t.type&&p6(e,o)))return!1;if("spread"in n&&typeof n.spread=="boolean")return e.type==="paragraph"&&(e.type===t.type||t.type==="definition"||t.type==="heading"&&zN(t,o))?void 0:n.spread?1:0}const xc=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"],ox=[{character:" ",after:"[\\r\\n]",inConstruct:"phrasing"},{character:" ",before:"[\\r\\n]",inConstruct:"phrasing"},{character:" ",inConstruct:["codeFencedLangGraveAccent","codeFencedLangTilde"]},{character:"\r",inConstruct:["codeFencedLangGraveAccent","codeFencedLangTilde","codeFencedMetaGraveAccent","codeFencedMetaTilde","destinationLiteral","headingAtx"]},{character:` +`,inConstruct:["codeFencedLangGraveAccent","codeFencedLangTilde","codeFencedMetaGraveAccent","codeFencedMetaTilde","destinationLiteral","headingAtx"]},{character:" ",after:"[\\r\\n]",inConstruct:"phrasing"},{character:" ",before:"[\\r\\n]",inConstruct:"phrasing"},{character:" ",inConstruct:["codeFencedLangGraveAccent","codeFencedLangTilde"]},{character:"!",after:"\\[",inConstruct:"phrasing",notInConstruct:xc},{character:'"',inConstruct:"titleQuote"},{atBreak:!0,character:"#"},{character:"#",inConstruct:"headingAtx",after:`(?:[\r +]|$)`},{character:"&",after:"[#A-Za-z]",inConstruct:"phrasing"},{character:"'",inConstruct:"titleApostrophe"},{character:"(",inConstruct:"destinationRaw"},{before:"\\]",character:"(",inConstruct:"phrasing",notInConstruct:xc},{atBreak:!0,before:"\\d+",character:")"},{character:")",inConstruct:"destinationRaw"},{atBreak:!0,character:"*",after:`(?:[ \r +*])`},{character:"*",inConstruct:"phrasing",notInConstruct:xc},{atBreak:!0,character:"+",after:`(?:[ \r +])`},{atBreak:!0,character:"-",after:`(?:[ \r +-])`},{atBreak:!0,before:"\\d+",character:".",after:`(?:[ \r +]|$)`},{atBreak:!0,character:"<",after:"[!/?A-Za-z]"},{character:"<",after:"[!/?A-Za-z]",inConstruct:"phrasing",notInConstruct:xc},{character:"<",inConstruct:"destinationLiteral"},{atBreak:!0,character:"="},{atBreak:!0,character:">"},{character:">",inConstruct:"destinationLiteral"},{atBreak:!0,character:"["},{character:"[",inConstruct:"phrasing",notInConstruct:xc},{character:"[",inConstruct:["label","reference"]},{character:"\\",after:"[\\r\\n]",inConstruct:"phrasing"},{character:"]",inConstruct:["label","reference"]},{atBreak:!0,character:"_"},{character:"_",inConstruct:"phrasing",notInConstruct:xc},{atBreak:!0,character:"`"},{character:"`",inConstruct:["codeFencedLangGraveAccent","codeFencedMetaGraveAccent"]},{character:"`",inConstruct:"phrasing",notInConstruct:xc},{atBreak:!0,character:"~"}];function rx(e){return e.label||!e.identifier?e.label||"":oN(e.identifier)}function Mx(e){if(!e._compiled){const t=(e.atBreak?"[\\r\\n][\\t ]*":"")+(e.before?"(?:"+e.before+")":"");e._compiled=new RegExp((t?"("+t+")":"")+(/[|\\{}()[\]^$+*?.-]/.test(e.character)?"\\":"")+e.character+(e.after?"(?:"+e.after+")":""),"g")}return e._compiled}function ix(e,t,n){const o=t.indexStack,M=e.children||[],c=[];let b=-1,z=n.before;o.push(-1);let a=t.createTracker(n);for(;++b<M.length;){const s=M[b];let u;if(o[o.length-1]=b,b+1<M.length){let l=t.handle.handlers[M[b+1].type];l&&l.peek&&(l=l.peek),u=l?l(M[b+1],e,t,{before:"",after:"",...a.current()}).charAt(0):""}else u=n.after;c.length>0&&(z==="\r"||z===` +`)&&s.type==="html"&&(c[c.length-1]=c[c.length-1].replace(/(\r?\n|\r)$/," "),z=" ",a=t.createTracker(n),a.move(c.join(""))),c.push(a.move(t.handle(s,e,t,{...a.current(),before:z,after:u}))),z=c[c.length-1].slice(-1)}return o.pop(),c.join("")}function cx(e,t,n){const o=t.indexStack,M=e.children||[],c=t.createTracker(n),b=[];let z=-1;for(o.push(-1);++z<M.length;){const a=M[z];o[o.length-1]=z,b.push(c.move(t.handle(a,e,t,{before:` +`,after:` +`,...c.current()}))),a.type!=="list"&&(t.bulletLastUsed=void 0),z<M.length-1&&b.push(c.move(bx(a,M[z+1],e,t)))}return o.pop(),b.join("")}function bx(e,t,n,o){let M=o.join.length;for(;M--;){const c=o.join[M](e,t,n,o);if(c===!0||c===1)break;if(typeof c=="number")return` +`.repeat(1+c);if(c===!1)return` + +<!----> + +`}return` + +`}const px=/\r?\n|\r/g;function zx(e,t){const n=[];let o=0,M=0,c;for(;c=px.exec(e);)b(e.slice(o,c.index)),n.push(c[0]),o=c.index+c[0].length,M++;return b(e.slice(o)),n.join("");function b(z){n.push(t(z,M,!z))}}function ax(e,t,n){const o=(n.before||"")+(t||"")+(n.after||""),M=[],c=[],b={};let z=-1;for(;++z<e.unsafe.length;){const u=e.unsafe[z];if(!cN(e.stack,u))continue;const l=e.compilePattern(u);let A;for(;A=l.exec(o);){const d="before"in u||!!u.atBreak,W="after"in u,g=A.index+(d?A[1].length:0);M.includes(g)?(b[g].before&&!d&&(b[g].before=!1),b[g].after&&!W&&(b[g].after=!1)):(M.push(g),b[g]={before:d,after:W})}}M.sort(sx);let a=n.before?n.before.length:0;const s=o.length-(n.after?n.after.length:0);for(z=-1;++z<M.length;){const u=M[z];u<a||u>=s||u+1<s&&M[z+1]===u+1&&b[u].after&&!b[u+1].before&&!b[u+1].after||M[z-1]===u-1&&b[u].before&&!b[u-1].before&&!b[u-1].after||(a!==u&&c.push(F8(o.slice(a,u),"\\")),a=u,/[!-/:-@[-`{-~]/.test(o.charAt(u))&&(!n.encode||!n.encode.includes(o.charAt(u)))?c.push("\\"):(c.push("&#x"+o.charCodeAt(u).toString(16).toUpperCase()+";"),a++))}return c.push(F8(o.slice(a,s),n.after)),c.join("")}function sx(e,t){return e-t}function F8(e,t){const n=/\\(?=[!-/:-@[-`{-~])/g,o=[],M=[],c=e+t;let b=-1,z=0,a;for(;a=n.exec(c);)o.push(a.index);for(;++b<o.length;)z!==o[b]&&M.push(e.slice(z,o[b])),M.push("\\"),z=o[b];return M.push(e.slice(z)),M.join("")}function Ox(e){const t=e||{},n=t.now||{};let o=t.lineShift||0,M=n.line||1,c=n.column||1;return{move:a,current:b,shift:z};function b(){return{now:{line:M,column:c},lineShift:o}}function z(s){o+=s}function a(s){const u=s||"",l=u.split(/\r?\n|\r/g),A=l[l.length-1];return M+=l.length-1,c=l.length===1?c+A.length:1+A.length+o,u}}function ux(e,t={}){const n={enter:M,indentLines:zx,associationId:rx,containerPhrasing:dx,containerFlow:qx,createTracker:Ox,compilePattern:Mx,safe:hx,stack:[],unsafe:[...ox],join:[...tx],handlers:{...ex},options:{},indexStack:[],handle:void 0};iN(n,t),n.options.tightDefinitions&&n.join.push(fx),n.handle=sC("type",{invalid:lx,unknown:Ax,handlers:n.handlers});let o=n.handle(e,void 0,n,{before:` +`,after:` +`,now:{line:1,column:1},lineShift:0});return o&&o.charCodeAt(o.length-1)!==10&&o.charCodeAt(o.length-1)!==13&&(o+=` +`),o;function M(c){return n.stack.push(c),b;function b(){n.stack.pop()}}}function lx(e){throw new Error("Cannot handle value `"+e+"`, expected node")}function Ax(e){const t=e;throw new Error("Cannot handle unknown node `"+t.type+"`")}function fx(e,t){if(e.type==="definition"&&e.type===t.type)return 0}function dx(e,t){return ix(e,this,t)}function qx(e,t){return cx(e,this,t)}function hx(e,t){return ax(this,e,t)}function Wx(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var o=Array.from(typeof e=="string"?[e]:e);o[o.length-1]=o[o.length-1].replace(/\r?\n([\t ]*)$/,"");var M=o.reduce(function(z,a){var s=a.match(/\n([\t ]+|(?!\s).)/g);return s?z.concat(s.map(function(u){var l,A;return(A=(l=u.match(/[\t ]/g))===null||l===void 0?void 0:l.length)!==null&&A!==void 0?A:0})):z},[]);if(M.length){var c=new RegExp(` +[ ]{`+Math.min.apply(Math,M)+"}","g");o=o.map(function(z){return z.replace(c,` +`)})}o[0]=o[0].replace(/^\r?\n/,"");var b=o[0];return t.forEach(function(z,a){var s=b.match(/(?:^|\n)( *)$/),u=s?s[1]:"",l=z;typeof z=="string"&&z.includes(` +`)&&(l=String(z).split(` +`).map(function(A,d){return d===0?A:""+u+A}).join(` +`)),b+=l+o[a+1]}),b}const mx="[-*+]",gx="\\d+[.)]",hN=`(${mx}|${gx})`,Rx=`\\s*${hN}\\s+`,yx="\\s*\\[(?<completion>[^\\]])]\\s+",WN="\\s?-{1,2}\\s?",mN="\\d{1,2}",gN="\\d{2}",Lx="[:. ]",vx=":",RN="\\s?[apAP][mM](?!\\w)",jm="\\d{4}-\\d{2}-\\d{2}",a6=`(${mN})(?:${Lx}?(${gN}))?(${RN})?`,I8=`${mN}${vx}${gN}(${RN})?`,Nx=new RegExp(Rx),wx=new RegExp(yx),Dx=new RegExp(a6),Bx=/^(#+)\s/,Tx=/\s\^[a-z1-9-]+$/i,dO=new RegExp(`^(?<start>${a6})(?:${WN}(?<end>${a6}))?`,"im"),wA=new RegExp(`(?<start>${I8})(?:${WN}(?<end>${I8}))?`,"im"),yN=new RegExp(`(\\[scheduled\\s*::\\s*)${jm}(\\])`),LN=new RegExp(`(\\(scheduled\\s*::\\s*)${jm}(\\))`),Vm=new RegExp(`(⏳\\s*)${jm}`),_x=[yN,LN,Vm],vN=/\[([^\]]+)::([^\]]+)\]/g,Ex=/(-|\d+[.)])\s+/g,Sx=/\\\[/g,kx=new RegExp(`^( {4})+(?=${hN})`,"gm"),Xx=/\n+/g,NN=window.moment;function N1(e){return e.diff(e.clone().startOf("day"),"minutes")}function Kc(e,t){return Math.abs(e.diff(t,"minutes"))}function Cx(e,t){const n=e.startOf("isoWeek"),o={monday:0,sunday:1,saturday:2,friday:3};return n.subtract(o[t],"days")}function $t(e,t){return t.clone().startOf("day").add(e,"minutes")}function xx(e){return NN().startOf("day").add(e,"minutes")}function Fx(e){return NN().startOf("day").add(e,"hours")}function Ix(e,t){return e.clone().add(t,"minutes")}function Px(e,t,n){return n.isBefore(e)?"past":t.isAfter(e)?"future":"present"}function Gm(e,t,n=[]){const o=e.clone().endOf("day");if(t.isBefore(o))return[...n,[e,t]];const M=e.clone().add(1,"day").startOf("day");return Gm(M,t,[...n,[e,o]])}function Ux(e){return e.reduce((t,n)=>n.isBefore(t)?n:t)}function $x(e){return e.isoWeekday()===6||e.isoWeekday()===7}function Hx(e,t){return window.moment.utc(t.diff(e,"milliseconds"))}function wf(e){return Object.hasOwn(e,"calendar")}function Yx(e){return Object.hasOwn(e,"location")}var D1=(e=>(e.DRAG="DRAG",e.DRAG_AND_SHIFT_OTHERS="DRAG_AND_SHIFT_OTHERS",e.DRAG_AND_SHRINK_OTHERS="DRAG_AND_SHRINK_OTHERS",e.RESIZE="RESIZE",e.RESIZE_FROM_TOP="RESIZE_FROM_TOP",e.RESIZE_AND_SHIFT_OTHERS="RESIZE_AND_SHIFT_OTHERS",e.RESIZE_FROM_TOP_AND_SHIFT_OTHERS="RESIZE_FROM_TOP_AND_SHIFT_OTHERS",e.RESIZE_AND_SHRINK_OTHERS="RESIZE_AND_SHRINK_OTHERS",e.RESIZE_FROM_TOP_AND_SHRINK_OTHERS="RESIZE_FROM_TOP_AND_SHRINK_OTHERS",e.CREATE="CREATE",e.SCHEDULE_SEARCH_RESULT="SCHEDULE_SEARCH_RESULT",e))(D1||{});function jx(e,t,n="default"){return n==="default"?`[${e}::${t}]`:`(${e}::${t})`}function Vx(e,t){const n=[...e.matchAll(vN)];if(n.length===0)throw new Error(`Did not find a prop in line: '${e}'`);const o=n[0],[,M,c]=o;return`[${M}::${t(c)}]`}function Gx(e){return e.replaceAll(vN,"").trim()}function Kx(e){return e.split(mf).map(t=>window.moment(t))}function Zx(e){return e.length===2&&e.every(t=>t.isValid())}function wN(e){return Object.hasOwn(e,Ti)}function Km(e){return wN(e)?Array.isArray(e[Ti])?e[Ti].some(s6):s6(e[Ti]):!1}function s6(e){return!String(e).includes(mf)}function DN(){return window.moment().format(XS)}function Jx(){return jx(Ti,DN())}function Qx(e){return Vx(e,t=>`${t}${mf}${DN()}`)}function BN(e){return e.includes(Ti)&&!e.includes(mf)}function eF(e){return{...e,text:`${e.text.trimEnd()} +${Jx()}`}}function TN(e){return{...e,text:_N(me.filter(t=>!BN(t)),e.text)}}function _N(e,t){return e(t.split(` +`)).join(` +`)}function EN(e){return{...e,text:_N(me.map(t=>BN(t)?Qx(t):t),e.text)}}function P8(e){if(!Km(e))throw new Error("The task has no active clocks");return e}function tF(e){if(Km(e))throw new Error("The task already has an active clock");return e}function Fz(){return Math.random().toString(16).slice(2)}function Zm(e){return Array.isArray(e)?e:[e]}function _i(e){return["pen","touch"].includes(e.pointerType)}function U8(e,t){return t?e.relatedTarget&&(e.relatedTarget===t||e.relatedTarget instanceof Node&&t.contains(e.relatedTarget)):!1}function nF(e,t){return t?_i(e)&&e.target!==t&&e.target instanceof Node&&!t.contains(e.target):!1}function oF(e){return e.includes("[ ]")?e.replace("[ ]","[x]"):e.replace("[x]","[ ]")}function rF(e,t){return`${"#".repeat(e)} ${t}`}function MF(e,t,n){const o=e.split(` +`),M=o[t];return l1.isNotVoid(M,`No line #${t} in text with ${o.length} lines`),o[t]=n(M),o.join(` +`)}function iF(e){return e.replaceAll(Xx,` +`)}function SN(e,t){return e.map(n=>`${t}${n}`)}function kN(e,t){return SN(e.split(` +`),t).join(` +`)}const cF=" ";function bF(e){return cF.repeat(e)}function pF(e){const t=e.status===void 0;return" ".repeat(t?xS:CS)}function XN(e){const t=pF(e),[n,...o]=e.text.split(` +`);return[`${CN(e)} ${n}`,...SN(o,t)].join(` +`)}const zF=" ";function Jm(e,t=""){const n=kN(XN(e),t);return e.children.reduce((o,M)=>{const c=`${zF}${t}`;return`${o} +${Jm(M,c)}`},n)}function Qm(e,t=[]){t.push({text:e.text,line:e.line,task:e.task});for(const n of e.children)Qm(n,t);return t}function aF(e){const{sTask:t,clockMoments:n}=e,[o,M]=n;let c=M.diff(o,"minutes");return c<0&&(c=k7),{...Df(t,window.moment()),isAllDayEvent:!1,startTime:o,durationMinutes:c}}function sF(e,t){return{...Df(e,t),isAllDayEvent:!1,startTime:t}}function Df(e,t){return{isAllDayEvent:!0,startTime:t,durationMinutes:k7,symbol:e.symbol,status:e.status,text:Jm(e),lines:Qm(e),location:{path:e.path,line:e.line,position:e.position},id:Fz()}}function OF(e,t){const n=O6({line:Mb(e.text),day:t});l1.isNotVoid(n,`Unexpectedly received an STask without a timestamp: ${e.text}`);const{startTime:o,durationMinutes:M}=n;return{startTime:o,symbol:e.symbol,status:e.status,text:Jm(e),lines:Qm(e),durationMinutes:M,location:{path:e.path,position:e.position},id:Fz()}}function uF(e){var o,M,c;const t=(M=(o=e.scheduled)==null?void 0:o.toFormat)==null?void 0:M.call(o,kS),n=(c=bf(e.path,"day"))==null?void 0:c.format(Wf);return t||n}function Dl(e){return kN(XN(e),bF(e.position.start.col))}function lF(e){return`[${e}]`}function CN(e){return e.status===void 0?e.symbol:`${e.symbol} ${lF(e.status)}`}function AF(e,t,n){const o=e.split(` +`),M=t.position.end.line-t.position.start.line+1;return o.splice(t.position.start.line,M,n),o.join(` +`)}function fF(e){return Zm(e[Ti]).filter(me.isString).map(Kx).filter(Zx).flatMap(([t,n])=>Gm(t,n)).map(t=>({sTask:e,clockMoments:t}))}const dF=me.uniqBy(e=>`${e.path}::${e.position.start.line}`);function Tt(e){return N1(e.startTime)+e.durationMinutes}function rz(e){return e.startTime.clone().add(e.durationMinutes,"minutes")}function Bf(e){return Object.hasOwn(e,"startTime")||!e.isAllDayEvent}function qO(e){const t=[];return Bf(e)&&t.push(String(N1(e.startTime)),String(Tt(e))),wf(e)?t.push(e.calendar.name,e.summary):t.push(e.text,e.isGhost?"ghost":""),t.join("::")}function qF(e){var t;return wf(e)?`${e.calendar.name}::${N1(e.startTime)}:${e.durationMinutes}::${e.summary}`:`${((t=e.location)==null?void 0:t.path)??"blank"}::${N1(e.startTime)}::${e.durationMinutes}::${e.text}`}function hF(e){let t;if(DF(e)){const n=e.location;l1.isNotVoid(n,`Did not find location on task$ ${qz(e)}`),t=hi(n,o=>{o.position.start.line=o.position.end.line+1})}return{...e,id:Fz(),isGhost:!0,location:t}}function xN(e,t,n){const o=xx(e),M=Ix(o,t);return`${o.format(n)} - ${M.format(n)}`}function WF(){return{withTime:[],noTime:[]}}function xi(e){return e.format(Wf)}function mF(e,t){const n=eg(Mb(e.text)),o=xN(N1(e.startTime),e.durationMinutes,Ze(ue).timestampFormat),M=CN(e),c=_F(n,o);let b=gF(c,xi(e.startTime));t===D1.SCHEDULE_SEARCH_RESULT&&!Vm.test(b)&&(b=yF(b,`⏳ ${e.startTime.format(Wf)}`));const z=FN(e.text);return`${M} ${b} +${z}`}function gF(e,t){return e.replace(Vm,`$1${t}`).replace(yN,`$1${t}$2`).replace(LN,`$1${t}$2`)}function RF(e,t){const n=Tx.exec(e);if(n){const o=n[0];return e.slice(0,n.index)+t+o}return e+t}function yF(e,t){return RF(e,` ${t}`)}function LF(e,t,n){const o=n*60*t;return(e+o)/t}function vF(e){const{day:t,startMinutes:n,settings:o,location:M,text:c="New item",status:b}=e;return{location:M,id:Fz(),durationMinutes:o.defaultDurationMinutes,text:c,startTime:$t(n,t),symbol:"-",status:b||o.eventFormatOnCreation==="task"?o.taskStatusOnCreation:void 0}}function Mb(e){return e.split(` +`)[0]}function qz(e){return wf(e)?e.summary:me.flow(eg,NF)(Mb(e.text))}function FN(e){return e.split(` +`).slice(1).join(` +`)}function eg(e){return e.replace(Nx,"").replace(wx,"")}function NF(e){return e.replace(dO,"")}function wF(e,t){return e.startTime.isSame(t.startTime)&&e.durationMinutes===t.durationMinutes}function DF(e){return _x.some(t=>t.test(e.text))}function $8(e,t){const n=Dx.exec(e);if(n===null)throw new Error(`${e} is not a valid timestamp`);const[,o,M,c]=n;let b=parseInt(o);if(isNaN(b))throw new Error(`${e} is not a valid timestamp`);const z=parseInt(M)||0;(c==null?void 0:c.toLowerCase().trim())==="pm"&&b<12&&(b+=12),(c==null?void 0:c.toLowerCase().trim())==="am"&&b===12&&(b=0);const a=window.moment.duration({hours:b,minutes:z});return t.clone().startOf("day").add(a)}function BF(e){const t=e.trim();return dO.exec(t)||wA.exec(t)}function TF(e){const t=e.trim();return dO.test(t)||wA.test(t)}function _F(e,t){return dO.test(e)?e.replace(dO,t):wA.test(e)?e.replace(wA,t):`${t} ${e}`}function O6({line:e,day:t}){const n=BF(e);if(!(n!=null&&n.groups))return null;const{groups:{start:o,end:M}}=n,c=$8(o,t);let b;if(M){const z=$8(M,t);z.isAfter(c)?b=Kc(z,c):b=Kc(c,z.clone().add(1,"day"))}return{startTime:c,durationMinutes:b}}function EF(e){return e.status?e.text:`${eg(Mb(e.text))} +${Wx(FN(e.text)).trimStart()}`}function SF(e,t){const n=window.moment(),o=O6({line:e,day:n}),M=O6({line:t,day:n});return!o&&!M?0:o?M?o.startTime.diff(M.startTime):-1:1}function tg(e){return UF(ux(e,{bullet:"-",listItemIndent:"tab"}).replace(Ex,"- ").replace(Sx,"["))}function kF(e){const t=fO(e),n={...t,children:t.children.map(o=>ng(o,IN))};return tg(n)}function ng(e,t=XF){return UN(e)?{...e,children:e.children.map(n=>({...n,children:n.children.map(o=>ng(o,t))})).toSorted(t)}:e}function u6(e,t){if(t(e))return e;if(PN(e))for(const n of e.children){const o=u6(n,t);if(o)return o}}function H8(e,t,n){return hi(e,o=>{const M=o.children.findIndex(c=>Y8(c)&&hz(c)===t);if(M>=0){const c=o.children.slice(M+1),b=c.findIndex(u=>Y8(u)),z=b===-1?void 0:b,s=c.slice(0,z).find(u=>UN(u));s?s.children.push(n):o.children.splice(M+1,0,{type:"list",children:[n]})}else o.children.push({type:"heading",depth:1,children:[{type:"text",value:t}]},{type:"list",children:[n]})})}function XF(e,t){const n=hz(e),o=hz(t);return n.localeCompare(o)}function IN(e,t){const n=hz(e),o=hz(t);return SF(n,o)}function hz(e){if(PN(e)){if(e.children.length===0)return"";const t=e.children[0];return l1.isNotVoid(t),hz(t)}return CF(e)?e.value:""}function PN(e){return Object.hasOwn(e,"children")}function CF(e){return e.type==="text"}function xF(e){return l1.isExactly(e.type,"heading")}function FF(e){return l1.isExactly(e.type,"list")}function l6(e){return l1.isExactly(e.type,"listItem")}const UN=l1.check(FF),Y8=l1.check(xF),j8=l1.check(l6);function IF({start:e,end:t},n){return(e.line<n.line||e.line===n.line&&e.column<=n.column)&&(t.line>n.line||t.line===n.line&&t.column>=n.column)}function V8(e){return{line:e.line-1,ch:e.column-1}}function PF(e){return{line:e.line+1,column:e.ch+1}}function UF(e){return e.replace(kx,t=>{const n=t.length/PS;return" ".repeat(n)})}class $F{constructor(t){this.app=t,this.getAllTasksFrom=n=>{var o;return((o=$l(this.app))==null?void 0:o.pages(n).file.tasks.array())||[]},this.getAllListsFrom=n=>{var o;return((o=$l(this.app))==null?void 0:o.pages(n).file.lists.array())||[]},this.getTasksFromPath=n=>{var o,M;return((M=(o=$l(this.app))==null?void 0:o.page(n))==null?void 0:M.file.tasks)||[]}}getTaskAtLine({path:t,line:n}){return this.getTasksFromPath(t).find(o=>o.line===n)}}async function A6(e){return am(e,zm())||pm(e)}function G8(e){const{format:t=VT,folder:n="."}=GT();let o=e.format(t);return o.endsWith(".md")||(o+=".md"),$0.normalizePath(HF(n,o))}function HF(...e){let t=[];for(let o=0,M=e.length;o<M;o++)t=t.concat(e[o].split("/"));const n=[];for(let o=0,M=t.length;o<M;o++){const c=t[o];!c||c==="."||n.push(c)}return t[0]===""&&n.unshift(""),n.join("/")}function YF(e,t){const n=e.type==="created",o=t.type==="created";return n&&o?0:n?1:o?-1:e.range.start.line-t.range.start.line}function jF(e,t){const n=e.slice();if(t.type==="created")return n.splice(t.target,0,t.contents),n;const o=t.range.start.line,M=t.range.start.col,b=t.range.end.line-o+1;if(t.type==="updated"){const a=n[o].substring(0,M)+t.contents;n.splice(o,1,a)}else t.type==="deleted"&&n.splice(o,b);return n}function VF(e){const{updates:t,afterEach:n,settings:o}=e,M=me.groupBy(c=>c.path,t);return Object.entries(M).map(([c,b])=>({path:c,updateFn:z=>{const a=z.split(` +`),s=b.filter(A=>A.type==="mdast");let l=b.filter(A=>A.type!=="mdast").toSorted(YF).toReversed().reduce(jF,a).join(` +`);return s.length>0&&(l=og(l,o.plannerHeading,A=>JF(A,s),{createHeading:!0,settings:o})),n?n(l):l}}))}function GF(e,t){let n=e;return e.length>0&&(n=n.trimEnd(),n=n.concat(` +`,` +`)),n.concat(t,` +`,` +`)}function og(e,t,n,o){if(t.trim().length===0)return e;const M=ZF(e,t);if((M==null?void 0:M.start)===void 0){if(o!=null&&o.createHeading){const{plannerHeadingLevel:l,plannerHeading:A}=o.settings,d=GF(e,rF(l,A));return og(d,t,n)}return e}const c=e.split(` +`),b=c.slice(0,M.start),z=M.start+M.length,a=c.slice(M.start,z).join(` +`),s=c.slice(z),u=n(a).split(` +`);return b.concat(u,s).join(` +`)}function KF(e){const t=Bx.exec(e);if(!t)return;const[,n]=t;return{level:n.length}}function ZF(e,t){const n=e.split(` +`),o={start:void 0,length:0,level:0};for(let M=0;M<n.length;M++){const c=n[M],b=KF(c);if(o.start!==void 0){if(b&&b.level<=o.level)return o;o.length++}else b&&c.includes(t)&&(o.start=M,o.level=b.level,o.length=1)}if(o.start!==void 0)return o}function JF(e,t){const n=fO(e),o=t.reduce((M,{updateFn:c})=>c(M),n);return tg(o)}class QF{constructor(t){this.vaultFacade=t,this.history=[],this.writeTransaction=async n=>{const o={},M=n.map(({path:c,updateFn:b})=>this.vaultFacade.editFile(c,z=>(o[c]=z,b(z))));return this.history.push(o),Promise.all(M)},this.undo=async()=>{const n=this.history.pop();if(!n)throw new Error("No updates to revert");const o=Object.entries(n).map(([M,c])=>this.vaultFacade.editFile(M,()=>c));return Promise.all(o)}}}function eI(e,t){return t.reduce((n,o)=>{const M=e.find(c=>c.id===o.id);return M||n.added.push(o),M&&!wF(M,o)&&n.updated.push(o),n},{updated:[],added:[]})}function tI(e,t,n){return Object.entries(e).flatMap(([o,M])=>M.map(c=>({type:o,task:c}))).reduce((o,{type:M,task:c})=>{var l,A;const b=mF(c,t);if(M==="added")return c.location?t===D1.SCHEDULE_SEARCH_RESULT?o.concat({type:"updated",path:c.location.path,range:{start:c.location.position.start,end:c.location.position.start},contents:Mb(b)}):o.concat({type:"created",contents:b,path:c.location.path,target:(A=(l=c.location.position)==null?void 0:l.start)==null?void 0:A.line}):o.concat({type:"mdast",path:G8(c.startTime),updateFn:d=>{const W=fO(b),g=u6(W,j8);return l1.isNotVoid(g),l6(g),H8(d,n.plannerHeading,g)}});l1.isNotVoid(c.location);const{path:z,position:a}=c.location;if(M==="deleted")return o.concat({type:"deleted",path:z,range:a});const s=bf(z,"day");return s&&!c.startTime.isSame(s,"day")?o.concat({type:"deleted",path:z,range:a},{type:"mdast",path:G8(c.startTime),updateFn:d=>{const W=fO(b),g=u6(W,j8);return l1.isNotVoid(g),l6(g),H8(d,n.plannerHeading,g)}}):o.concat({type:"updated",path:z,range:{start:a.start,end:a.start},contents:Mb(b)})},[])}function K8({line:e,col:t}){return{line:e,ch:t}}function Bl(e){return async(...t)=>{try{await e(...t)}catch(n){console.error(n),new $0.Notice((n==null?void 0:n.message)||n)}}}function nI(e,t){const{view:n}=e;return n instanceof $0.FileView&&n.file===t}class oI{constructor(t,n){this.workspace=t,this.vaultFacade=n,this.getLastCaretLocation=()=>{const o=this.getActiveMarkdownView(),M=o.file;l1.isNotVoid(M,"There is no file in view");const c=M.path,b=o.editor.getCursor().line;return{path:c,line:b}},this.getActiveMarkdownView=()=>{var M;const o=(M=this.workspace.getMostRecentLeaf())==null?void 0:M.view;return l1.isInstanceOf(o,$0.MarkdownView,"No markdown editor is active"),o}}async openFileInEditor(t){const n=this.workspace.getLeavesOfType("markdown").find(o=>nI(o,t));if(n){if(this.workspace.setActiveLeaf(n,{focus:!0}),n.view instanceof $0.MarkdownView)return n.view.editor}else{const o=this.workspace.getLeaf(!1);if(await o.openFile(t),o.view instanceof $0.MarkdownView)return o.view.editor}}async openFileForDay(t){const n=am(t,zm())||await pm(t);return this.openFileInEditor(n)}async revealLineInFile(t,n){var c;const o=this.vaultFacade.getFileByPath(t),M=await this.openFileInEditor(o);M&&((c=this.workspace.getActiveViewOfType($0.MarkdownView))==null||c.setEphemeralState({line:n}),M.setCursor({line:n,ch:M.getLine(n).length}))}}class rI{constructor(t,n,o){this.workspaceFacade=t,this.vaultFacade=n,this.dataviewFacade=o,this.edit=Bl(async M=>{const{path:c,line:b,editFn:z}=M,a=this.dataviewFacade.getTaskAtLine({path:c,line:b});l1.isNotVoid(a,`No task found: ${c}:${b}`);const s=Dl(z(a));await this.vaultFacade.editFile(a.path,u=>AF(u,a,s))}),this.replaceSTaskUnderCursor=M=>{const c=this.workspaceFacade.getActiveMarkdownView(),b=this.getSTaskUnderCursorFromLastView(),z={...b.position.start,col:0};c.editor.replaceRange(M,K8(z),K8(b.position.end))},this.getSTaskUnderCursorFromLastView=()=>{const M=this.dataviewFacade.getTaskAtLine(this.workspaceFacade.getLastCaretLocation());return l1.isNotVoid(M,"No task under cursor"),M},this.clockInUnderCursor=Bl(me.flow(this.getSTaskUnderCursorFromLastView,tF,eF,Dl,this.replaceSTaskUnderCursor)),this.clockOutUnderCursor=Bl(me.flow(this.getSTaskUnderCursorFromLastView,P8,EN,Dl,this.replaceSTaskUnderCursor)),this.cancelClockUnderCursor=Bl(me.flow(this.getSTaskUnderCursorFromLastView,P8,TN,Dl,this.replaceSTaskUnderCursor))}}class MI{constructor(t,n){this.vault=t,this.getTasksApi=n,this.toggleCheckboxInFile=async(o,M)=>{const c=this.getTasksApi(),b=c?z=>c.executeToggleTaskDoneCommand(z,o):oF;await this.editLineInFile(o,M,b)}}async editFile(t,n){const o=this.getFileByPath(t),M=await this.vault.read(o),c=n(M);await this.vault.modify(o,c)}async editLineInFile(t,n,o){await this.editFile(t,M=>MF(M,n,o))}getFileByPath(t){const n=this.vault.getAbstractFileByPath(t);return l1.isInstanceOf(n,$0.TFile,`${t} is not a markdown file`),n}checkFileExists(t){return this.vault.getAbstractFileByPath(t)!==null}}const iI=e=>()=>{var t;return(t=e.plugins.plugins["obsidian-tasks-plugin"])==null?void 0:t.apiV1},cI="5";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(cI);function Z8(e,t){return e.length<=t?e:e.substring(0,t)+"..."}function J8(e){return window.moment.utc(window.moment.duration(e,"minutes").asMilliseconds()).format("HH:mm")}function bI({tasksForToday:e}){return G1([e,ZO],([t,n])=>{const o=t.find(b=>b.startTime.isBefore(n)&&rz(b).isAfter(n)),M=t.slice().sort((b,z)=>b.startTime.diff(z.startTime)).find(b=>b.startTime.isAfter(n)),c={};if(o){const z=Kc(o.startTime,n)/(o.durationMinutes/100),a=Kc(rz(o),window.moment()),s=J8(a),u=Z8(qz(o),a8);c.current={percentageComplete:z.toFixed(0),timeLeft:s,text:u,endTime:rz(o)}}if(M){const b=Kc(n,M.startTime),z=J8(b),a=Z8(qz(M),a8);c.next={timeToNext:z,text:a}}return c})}var pI=x0('<span class="status-bar-item-segment">All done</span>'),zI=x0('<div class="status-bar-item-segment progress-pie day-planner"></div>'),aI=x0('<div class="status-bar-item-segment day-planner-progress-bar"><div class="day-planner-progress-value"></div></div>'),sI=x0('<span class="status-bar-item-segment"> </span> <!>',1),OI=x0('<span class="status-bar-item-segment"> </span>'),uI=x0("<!> <!>",1),lI=x0('<div class="root svelte-1grib6a"><!></div>');function AI(e,t){Re(t,!1);const n=tn(),o=()=>w1(ue,"$settings",n),M=()=>w1(g,"$statusBarProps",n),c=()=>w1(W(),"$errorStore",n),b=K2(),z=K2(),a=K2(),s=K2(),u=K2(),l=K2();let A=M1(t,"onClick",8),d=M1(t,"tasksForToday",8),W=M1(t,"errorStore",8);const g=bI({tasksForToday:d()});Qp(()=>(r0(b),r0(z),r0(a),r0(s),o()),()=>{(E=>(I1(b,E.showNow),I1(z,E.showNext),I1(a,E.progressIndicator),I1(s,E.timestampFormat)))(o())}),Qp(()=>(r0(u),r0(l),M()),()=>{(E=>(I1(u,E.current),I1(l,E.next)))(M())}),Dm(),w2();var L=lI();L.__click=function(...E){var k;(k=A())==null||k.apply(this,E)};var R=e1(L);B1(R,c,E=>{var k=j2("😵 Error in Day Planner (click to see)");f0(E,k)},E=>{var k=ne(),B=J0(k);B1(B,()=>!r0(u)&&!r0(l),I=>{var S=pI();f0(I,S)},I=>{var S=uI(),N=J0(S);B1(N,()=>r0(b)&&r0(u),J=>{var K=sI(),V=J0(K),x=e1(V);y1(()=>o2(x,`Now: ${r0(u).text??""} (-${r0(u).timeLeft??""}, till ${r0(u).endTime.format(r0(s))??""})`));var e0=H0(V,2);B1(e0,()=>r0(a)==="pie",Z=>{var j=zI();y1(()=>mM(j,"data-value",r0(u).percentageComplete)),f0(Z,j)},Z=>{var j=ne(),t0=J0(j);B1(t0,()=>r0(a)==="bar",O0=>{var m0=aI(),q0=e1(m0);y1(()=>mM(q0,"style",`width: ${r0(u).percentageComplete??""}%;`)),f0(O0,m0)},null,!0),f0(Z,j)}),f0(J,K)});var P=H0(N,2);B1(P,()=>r0(z)&&r0(l),J=>{var K=OI(),V=e1(K);y1(()=>o2(V,`Next: ${r0(l).text??""} (in ${r0(l).timeToNext??""})`)),f0(J,K)}),f0(I,S)},!0),f0(E,k)}),f0(e,L),ye()}ab(["click"]);class fI extends $0.Modal{constructor(t,n){super(t);const{cta:o,onAccept:M,text:c,title:b,onCancel:z}=n;this.contentEl.createEl("h2",{text:b}),this.contentEl.createEl("p",{text:c}),this.contentEl.createDiv("day-planner-modal-buttons",a=>{a.createEl("button",{text:"Cancel"}).addEventListener("click",s=>{z(s),this.close()}),a.createEl("button",{cls:"mod-cta",text:o}).addEventListener("click",async s=>{await M(s),this.close()})})}}async function dI(e){return new Promise(t=>{const{app:n,...o}=e;new fI(n,{...o,onAccept:async()=>t(!0),onCancel:()=>t(!1)}).open()})}const RM=Symbol.for("@ts-pattern/matcher"),qI=Symbol.for("@ts-pattern/isVariadic"),DA="@ts-pattern/anonymous-select-key",f6=e=>!!(e&&typeof e=="object"),Gl=e=>e&&!!e[RM],qr=(e,t,n)=>{if(Gl(e)){const o=e[RM](),{matched:M,selections:c}=o.match(t);return M&&c&&Object.keys(c).forEach(b=>n(b,c[b])),M}if(f6(e)){if(!f6(t))return!1;if(Array.isArray(e)){if(!Array.isArray(t))return!1;let o=[],M=[],c=[];for(const b of e.keys()){const z=e[b];Gl(z)&&z[qI]?c.push(z):c.length?M.push(z):o.push(z)}if(c.length){if(c.length>1)throw new Error("Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.");if(t.length<o.length+M.length)return!1;const b=t.slice(0,o.length),z=M.length===0?[]:t.slice(-M.length),a=t.slice(o.length,M.length===0?1/0:-M.length);return o.every((s,u)=>qr(s,b[u],n))&&M.every((s,u)=>qr(s,z[u],n))&&(c.length===0||qr(c[0],a,n))}return e.length===t.length&&e.every((b,z)=>qr(b,t[z],n))}return Reflect.ownKeys(e).every(o=>{const M=e[o];return(o in t||Gl(c=M)&&c[RM]().matcherType==="optional")&&qr(M,t[o],n);var c})}return Object.is(t,e)},Fi=e=>{var t,n,o;return f6(e)?Gl(e)?(t=(n=(o=e[RM]()).getSelectionKeys)==null?void 0:n.call(o))!=null?t:[]:Array.isArray(e)?hO(e,Fi):hO(Object.values(e),Fi):[]},hO=(e,t)=>e.reduce((n,o)=>n.concat(t(o)),[]);function bo(e){return Object.assign(e,{optional:()=>hI(e),and:t=>Ke(e,t),or:t=>WI(e,t),select:t=>t===void 0?Q8(e):Q8(t,e)})}function hI(e){return bo({[RM]:()=>({match:t=>{let n={};const o=(M,c)=>{n[M]=c};return t===void 0?(Fi(e).forEach(M=>o(M,void 0)),{matched:!0,selections:n}):{matched:qr(e,t,o),selections:n}},getSelectionKeys:()=>Fi(e),matcherType:"optional"})})}function Ke(...e){return bo({[RM]:()=>({match:t=>{let n={};const o=(M,c)=>{n[M]=c};return{matched:e.every(M=>qr(M,t,o)),selections:n}},getSelectionKeys:()=>hO(e,Fi),matcherType:"and"})})}function WI(...e){return bo({[RM]:()=>({match:t=>{let n={};const o=(M,c)=>{n[M]=c};return hO(e,Fi).forEach(M=>o(M,void 0)),{matched:e.some(M=>qr(M,t,o)),selections:n}},getSelectionKeys:()=>hO(e,Fi),matcherType:"or"})})}function ze(e){return{[RM]:()=>({match:t=>({matched:!!e(t)})})}}function Q8(...e){const t=typeof e[0]=="string"?e[0]:void 0,n=e.length===2?e[1]:typeof e[0]=="string"?void 0:e[0];return bo({[RM]:()=>({match:o=>{let M={[t??DA]:o};return{matched:n===void 0||qr(n,o,(c,b)=>{M[c]=b}),selections:M}},getSelectionKeys:()=>[t??DA].concat(n===void 0?[]:Fi(n))})})}function ar(e){return typeof e=="number"}function ui(e){return typeof e=="string"}function li(e){return typeof e=="bigint"}bo(ze(function(e){return!0}));const Ai=e=>Object.assign(bo(e),{startsWith:t=>{return Ai(Ke(e,(n=t,ze(o=>ui(o)&&o.startsWith(n)))));var n},endsWith:t=>{return Ai(Ke(e,(n=t,ze(o=>ui(o)&&o.endsWith(n)))));var n},minLength:t=>Ai(Ke(e,(n=>ze(o=>ui(o)&&o.length>=n))(t))),length:t=>Ai(Ke(e,(n=>ze(o=>ui(o)&&o.length===n))(t))),maxLength:t=>Ai(Ke(e,(n=>ze(o=>ui(o)&&o.length<=n))(t))),includes:t=>{return Ai(Ke(e,(n=t,ze(o=>ui(o)&&o.includes(n)))));var n},regex:t=>{return Ai(Ke(e,(n=t,ze(o=>ui(o)&&!!o.match(n)))));var n}});Ai(ze(ui));const sr=e=>Object.assign(bo(e),{between:(t,n)=>sr(Ke(e,((o,M)=>ze(c=>ar(c)&&o<=c&&M>=c))(t,n))),lt:t=>sr(Ke(e,(n=>ze(o=>ar(o)&&o<n))(t))),gt:t=>sr(Ke(e,(n=>ze(o=>ar(o)&&o>n))(t))),lte:t=>sr(Ke(e,(n=>ze(o=>ar(o)&&o<=n))(t))),gte:t=>sr(Ke(e,(n=>ze(o=>ar(o)&&o>=n))(t))),int:()=>sr(Ke(e,ze(t=>ar(t)&&Number.isInteger(t)))),finite:()=>sr(Ke(e,ze(t=>ar(t)&&Number.isFinite(t)))),positive:()=>sr(Ke(e,ze(t=>ar(t)&&t>0))),negative:()=>sr(Ke(e,ze(t=>ar(t)&&t<0)))});sr(ze(ar));const fi=e=>Object.assign(bo(e),{between:(t,n)=>fi(Ke(e,((o,M)=>ze(c=>li(c)&&o<=c&&M>=c))(t,n))),lt:t=>fi(Ke(e,(n=>ze(o=>li(o)&&o<n))(t))),gt:t=>fi(Ke(e,(n=>ze(o=>li(o)&&o>n))(t))),lte:t=>fi(Ke(e,(n=>ze(o=>li(o)&&o<=n))(t))),gte:t=>fi(Ke(e,(n=>ze(o=>li(o)&&o>=n))(t))),positive:()=>fi(Ke(e,ze(t=>li(t)&&t>0))),negative:()=>fi(Ke(e,ze(t=>li(t)&&t<0)))});fi(ze(li));bo(ze(function(e){return typeof e=="boolean"}));bo(ze(function(e){return typeof e=="symbol"}));bo(ze(function(e){return e==null}));bo(ze(function(e){return e!=null}));let mI=class extends Error{constructor(t){let n;try{n=JSON.stringify(t)}catch{n=t}super(`Pattern matching error: no pattern matches value ${n}`),this.input=void 0,this.input=t}};const d6={matched:!1,value:void 0};function gI(e){return new RI(e,d6)}let RI=class q6{constructor(t,n){this.input=void 0,this.state=void 0,this.input=t,this.state=n}with(...t){if(this.state.matched)return this;const n=t[t.length-1],o=[t[0]];let M;t.length===3&&typeof t[1]=="function"?M=t[1]:t.length>2&&o.push(...t.slice(1,t.length-1));let c=!1,b={};const z=(s,u)=>{c=!0,b[s]=u},a=!o.some(s=>qr(s,this.input,z))||M&&!M(this.input)?d6:{matched:!0,value:n(c?DA in b?b[DA]:b:this.input,this.input)};return new q6(this.input,a)}when(t,n){if(this.state.matched)return this;const o=!!t(this.input);return new q6(this.input,o?{matched:!0,value:n(this.input,this.input)}:d6)}otherwise(t){return this.state.matched?this.state.value:t(this.input)}exhaustive(){if(this.state.matched)return this.state.value;throw new mI(this.input)}run(){return this.exhaustive()}returnType(){return this}};function h6(e,t){const n=window.moment();return gI(e).with("full-week",()=>yI(n,t)).with("3-days",()=>Tf(n,3)).with("work-week",()=>LI(n)).exhaustive()}function yI(e,t){const n=Cx(e,t);return me.range(1,7).reduce((o,M)=>{const c=n.clone().add(M,"day");return[...o,c]},[n])}function LI(e){return Tf(e.clone().startOf("isoWeek"),5)}function Tf(e,t){return me.range(1,t).reduce((n,o)=>{const M=e.clone().add(o,"day");return[...n,M]},[e])}function vI(e){const t=e.clone().startOf("isoWeek").add(7,"days");return Tf(t,5)}function NI(e){const t=e.clone().startOf("isoWeek").subtract(7,"days");return Tf(t,5)}function wI(e){return e.map(t=>t.clone().add(e.length,"days"))}function DI(e){return e.map(t=>t.clone().subtract(e.length,"days"))}function ey(e){const t=e[0].format(p8),n=e[e.length-1].format(p8);return`${t}–${n}`}var BI=x0('<span class="pill svelte-w634mr"><!> </span>');function BA(e,t){const n=M1(t,"onpointerup",3,()=>{});var o=ne(),M=J0(o);B1(M,()=>t.value,c=>{var b=BI();b.__pointerup=function(...s){var u;(u=n())==null||u.apply(this,s)};var z=e1(b);B1(z,()=>typeof t.key=="string",s=>{var u=j2();y1(()=>o2(u,`${t.key??""}:`)),f0(s,u)},s=>{var u=ne();const l=W1(()=>t.key);var A=J0(u);OS(A,()=>r0(l),(d,W)=>{W(d,{class:"pill-icon"})}),f0(s,u)});var a=H0(z);y1(()=>o2(a,` ${t.value??""}`)),f0(c,b)}),f0(e,o)}ab(["pointerup"]);var TI=x0('<div class="view-header-nav-buttons svelte-zd0ihh"><!></div>');function _I(e,t){Re(t,!1);const n=tn(),o=()=>w1(ue,"$settings",n);w2();var M=TI(),c=e1(M);BA(c,{key:"filter",get value(){return o().dataviewSource}}),f0(e,M),ye()}const EI=e=>e;function SI(e){const t=e-1;return t*t*t+1}function ty(e,{delay:t=0,duration:n=400,easing:o=EI}={}){const M=+getComputedStyle(e).opacity;return{delay:t,duration:n,easing:o,css:c=>`opacity: ${c*M}`}}function WO(e,{delay:t=0,duration:n=400,easing:o=SI,axis:M="y"}={}){const c=getComputedStyle(e),b=+c.opacity,z=M==="y"?"height":"width",a=parseFloat(c[z]),s=M==="y"?["top","bottom"]:["left","right"],u=s.map(R=>`${R[0].toUpperCase()}${R.slice(1)}`),l=parseFloat(c[`padding${u[0]}`]),A=parseFloat(c[`padding${u[1]}`]),d=parseFloat(c[`margin${u[0]}`]),W=parseFloat(c[`margin${u[1]}`]),g=parseFloat(c[`border${u[0]}Width`]),L=parseFloat(c[`border${u[1]}Width`]);return{delay:t,duration:n,easing:o,css:R=>`overflow: hidden;opacity: ${Math.min(R*20,1)*b};${z}: ${R*a}px;padding-${s[0]}: ${R*l}px;padding-${s[1]}: ${R*A}px;margin-${s[0]}: ${R*d}px;margin-${s[1]}: ${R*W}px;border-${s[0]}-width: ${R*g}px;border-${s[1]}-width: ${R*L}px;`}}function rg(){return y7(Sm)}function po(){return y7(S7)}function TA(e){return e.zoomLevel*60}function $N(e){return e.startHour*TA(e)}function _A(e){return[...Array(24).keys()].slice(e.startHour)}function ny(e,t){return e*t.zoomLevel-$N(t)}function kI(e,{zoomLevel:t,snapStepMinutes:n}){return e-e%(n*t)}var XI=x0("<div><!></div>");function V2(e,t){Re(t,!0);const n=M1(t,"label",3,""),o=M1(t,"isActive",3,!1),M=M1(t,"disabled",3,!1);var c=XI();c.__click=function(...z){var a;(a=t.onclick)==null||a.apply(this,z)};var b=e1(c);wM(b,()=>t.children),y1(()=>{hf(c,`clickable-icon ${t.classes??""} svelte-1pdjptp`),mM(c,"aria-disabled",M()),mM(c,"aria-label",n()),Qn(c,"is-active",o())}),f0(e,c),ye()}ab(["click"]);function CI(e){return e<.5?4*e*e*e:.5*Math.pow(2*e-2,3)+1}const xI=150;function mO(e){const{axis:t}=e;return{duration:xI,easing:CI,axis:t}}/** + * @license lucide-svelte v0.441.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const FI={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"};var II=N7("<svg><!><!></svg>");function on(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]),o=ut(n,["name","color","size","strokeWidth","absoluteStrokeWidth","iconNode"]);Re(t,!1);let M=M1(t,"name",8,void 0),c=M1(t,"color",8,"currentColor"),b=M1(t,"size",8,24),z=M1(t,"strokeWidth",8,2),a=M1(t,"absoluteStrokeWidth",8,!1),s=M1(t,"iconNode",24,()=>[]);const u=(...g)=>g.filter((L,R,E)=>!!L&&E.indexOf(L)===R).join(" ");w2();var l=II();let A;var d=e1(l);xo(d,1,s,lM,(g,L)=>{let R=()=>r0(L)[0],E=()=>r0(L)[1];var k=ne(),B=J0(k);w7(B,R,!0,(I,S)=>{let N;y1(()=>N=jW(I,N,{...E()},void 0,I.namespaceURI===Nm,I.nodeName.includes("-")))}),f0(g,k)});var W=H0(d);ke(W,t,"default",{}),y1(()=>A=jW(l,A,{...FI,...o,width:b(),height:b(),stroke:c(),"stroke-width":a()?Number(z())*24/Number(b()):z(),class:u("lucide-icon","lucide",M()?`lucide-${M()}`:"",n.class)},void 0,!0)),f0(e,l),ye()}function HN(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"arrow-down-to-line"},()=>n,{iconNode:[["path",{d:"M12 17V3"}],["path",{d:"m6 11 6 6 6-6"}],["path",{d:"M19 21H5"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}function PI(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"calendar-arrow-up"},()=>n,{iconNode:[["path",{d:"m14 18 4-4 4 4"}],["path",{d:"M16 2v4"}],["path",{d:"M18 22v-8"}],["path",{d:"M21 11.343V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h9"}],["path",{d:"M3 10h18"}],["path",{d:"M8 2v4"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}function YN(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"chevron-left"},()=>n,{iconNode:[["path",{d:"m15 18-6-6 6-6"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}function jN(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"chevron-right"},()=>n,{iconNode:[["path",{d:"m9 18 6-6-6-6"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}function UI(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"clock-3"},()=>n,{iconNode:[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 6 12 12 16.5 12"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}function $I(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"columns-3"},()=>n,{iconNode:[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}],["path",{d:"M9 3v18"}],["path",{d:"M15 3v18"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}function HI(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"copy"},()=>n,{iconNode:[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}function YI(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"ellipsis-vertical"},()=>n,{iconNode:[["circle",{cx:"12",cy:"12",r:"1"}],["circle",{cx:"12",cy:"5",r:"1"}],["circle",{cx:"12",cy:"19",r:"1"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}function VN(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"fold-vertical"},()=>n,{iconNode:[["path",{d:"M12 22v-6"}],["path",{d:"M12 8V2"}],["path",{d:"M4 12H2"}],["path",{d:"M10 12H8"}],["path",{d:"M16 12h-2"}],["path",{d:"M22 12h-2"}],["path",{d:"m15 19-3-3-3 3"}],["path",{d:"m15 5-3 3-3-3"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}function jI(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"grip-vertical"},()=>n,{iconNode:[["circle",{cx:"9",cy:"12",r:"1"}],["circle",{cx:"9",cy:"5",r:"1"}],["circle",{cx:"9",cy:"19",r:"1"}],["circle",{cx:"15",cy:"12",r:"1"}],["circle",{cx:"15",cy:"5",r:"1"}],["circle",{cx:"15",cy:"19",r:"1"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}function VI(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"info"},()=>n,{iconNode:[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M12 16v-4"}],["path",{d:"M12 8h.01"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}function GI(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"move-vertical"},()=>n,{iconNode:[["polyline",{points:"8 18 12 22 16 18"}],["polyline",{points:"8 6 12 2 16 6"}],["line",{x1:"12",x2:"12",y1:"2",y2:"22"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}function KI(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"plane-takeoff"},()=>n,{iconNode:[["path",{d:"M2 22h20"}],["path",{d:"M6.36 17.4 4 17l-2-4 1.1-.55a2 2 0 0 1 1.8 0l.17.1a2 2 0 0 0 1.8 0L8 12 5 6l.9-.45a2 2 0 0 1 2.09.2l4.02 3a2 2 0 0 0 2.1.2l4.19-2.06a2.41 2.41 0 0 1 1.73-.17L21 7a1.4 1.4 0 0 1 .87 1.99l-.38.76c-.23.46-.6.84-1.07 1.08L7.58 17.2a2 2 0 0 1-1.22.18Z"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}function ZI(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"search"},()=>n,{iconNode:[["circle",{cx:"11",cy:"11",r:"8"}],["path",{d:"m21 21-4.3-4.3"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}function GN(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"settings"},()=>n,{iconNode:[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}],["circle",{cx:"12",cy:"12",r:"3"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}function JI(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"triangle-alert"},()=>n,{iconNode:[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"}],["path",{d:"M12 9v4"}],["path",{d:"M12 17h.01"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}function QI(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]);on(e,nn({name:"zap"},()=>n,{iconNode:[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"}]],children:(M,c)=>{var b=ne(),z=J0(b);ke(z,t,"default",{}),f0(M,b)},$$slots:{default:!0}}))}const DM=e=>(t,n)=>{const o={...n,class:`${n.class||""} svg-icon`};return e(t,o)},eP=DM(GN),tP=DM(YN),nP=DM(jN),oP=DM(PI),rP=DM($I),MP=DM(ZI),iP=DM(JI),cP=DM(VI),bP=DM(QI);var pP=x0('<hr class="workspace-leaf-resize-handle">');function KN(e,t){let n=M1(t,"visible",8,!0);var o=pP();y1(()=>Ot(o,"display",n()?"block":"none")),pt("mousedown",o,function(M){hn.call(this,t,M)}),f0(e,o)}var zP=x0("<div><!></div>");function ZN(e,t){Re(t,!0);let n,o=Oz(0);const M=W1(()=>r0(o)===0?"auto":`${r0(o)}px`);let c=Oz(!1);function b(){I1(c,!0)}function z(A){r0(c)&&(A.stopPropagation(),I1(c,!1))}function a(){I1(c,!1)}function s(A){if(!r0(c))return;l1.isNotVoid(n);const d=n.getBoundingClientRect().top;I1(o,A.clientY-d)}var u=zP();pt("mousemove",hA,s),pt("pointerup",hA,z,!0),pt("blur",xW,a);var l=e1(u);wM(l,()=>t.children,()=>b),Az(u,A=>n=A,()=>n),y1(()=>{hf(u,t.className),Ot(u,"height",r0(M)),Ot(u,"max-height","25vh")}),f0(e,u),ye()}var aP=x0('<div class="hour svelte-l1k23m"><div class="hour-number-container svelte-l1k23m"> </div></div>'),sP=x0('<div class="hours-container svelte-l1k23m"></div>');function JN(e,t){Re(t,!1);const n=tn(),o=()=>w1(ue,"$settings",n);let M=M1(t,"visibleHours",8);w2();var c=sP();xo(c,5,M,lM,(b,z)=>{var a=aP();const s=to(()=>`${TA(o())??""}px`);y1(()=>Ot(a,"flex-basis",r0(s)));var u=e1(a),l=e1(u);y1(()=>o2(l,Fx(r0(z)).format(o().hourFormat))),f0(b,a)}),f0(e,c),ye()}var OP=x0("<div><!></div>");function QN(e,t){Re(t,!0);let n=Oz(!1);var o=OP(),M=e1(o);wM(M,()=>t.children,()=>r0(n)),y1(()=>hf(o,`scroller ${t.className??""} svelte-f6k6y4`)),pt("mouseenter",o,()=>{I1(n,!0)}),pt("mouseleave",o,()=>{I1(n,!1)}),pt("scroll",o,function(c){hn.call(this,t,c)}),f0(e,o),ye()}function uP({refreshTasks:e}){const t=G1(ue,a=>a.dataviewSource.trim().length===0),n=xn(Ze(ue).dataviewSource),o=xn("");function M(a){try{return e(a),""}catch(s){return String(s)}}function c(a){const s=M(a);o.set(s),s.length===0&&ue.update(u=>({...u,dataviewSource:a}))}const b=$0.debounce(c,1e3,!0),z=n.subscribe(a=>{b(a)});return _7(()=>{z()}),{sourceIsEmpty:t,errorMessage:o,dataviewSourceInput:n}}var lP=x0('<div class="callout-wrapper svelte-1ewqwvu"><!> <!></div>');function Kl(e,t){Re(t,!0);const n=M1(t,"type",3,"info"),o={error:"var(--callout-error)",warning:"var(--callout-warning)",info:"var(--callout-default)"},M=W1(()=>o[n()]);var c=lP(),b=e1(c);B1(b,()=>n()==="error",a=>{bP(a,{class:"planner-callout-icon"})},a=>{var s=ne(),u=J0(s);B1(u,()=>n()==="warning",l=>{iP(l,{})},l=>{cP(l,{})},!0),f0(a,s)});var z=H0(b,2);wM(z,()=>t.children),y1(()=>Ot(c,"--callout-color",r0(M))),f0(e,c),ye()}var AP=x0("<option> </option>"),fP=x0('<select class="dropdown"></select>');function oy(e,t){let n=M1(t,"value",8),o=M1(t,"values",8);var M=fP();gS(M,n);var c;xo(M,5,o,lM,(z,a)=>{var s=AP(),u={},l=e1(s);y1(()=>{u!==(u=r0(a))&&(s.value=(s.__value=r0(a))==null?"":r0(a)),o2(l,r0(a))}),f0(z,s)}),y1(()=>{c!==(c=n())&&(M.value=(M.__value=n())==null?"":n(),GW(M,n()))}),pt("input",M,function(z){hn.call(this,t,z)}),f0(e,M)}var dP=x0('<div class="setting-item svelte-ysxaf1"><div class="setting-item-info"><div class="setting-item-name svelte-ysxaf1"><!></div></div> <div class="setting-item-control"><!></div></div>');function si(e,t){var n=dP(),o=e1(n),M=e1(o),c=e1(M);ke(c,t,"name",{});var b=H0(o,2),z=e1(b);ke(z,t,"control",{}),f0(e,n)}var qP=x0("Tasks are pulled only from daily notes <!>",1),hP=x0('<pre class="error-message svelte-1m3ab8g"> </pre>'),WP=x0('<a href="https://blacksmithgu.github.io/obsidian-dataview/reference/sources/">Dataview source reference</a>'),mP=(e,t)=>{nb(ue,Fe(t).centerNeedle=!t().centerNeedle,Fe(t))},gP=x0('<div slot="control" class="checkbox-container mod-small"><input tabindex="0" type="checkbox"></div>'),RP=(e,t)=>{nb(ue,Fe(t).showCompletedTasks=!t().showCompletedTasks,Fe(t))},yP=x0('<div slot="control" class="checkbox-container mod-small"><input tabindex="0" type="checkbox"></div>'),LP=x0('<div slot="control" class="checkbox-container mod-small"><input tabindex="0" type="checkbox"></div>'),vP=(e,t)=>{nb(ue,Fe(t).showUncheduledTasks=!t().showUncheduledTasks,Fe(t))},NP=x0('<div slot="control" class="checkbox-container mod-small"><input tabindex="0" type="checkbox"></div>'),wP=(e,t)=>{nb(ue,Fe(t).showUnscheduledNestedTasks=!t().showUnscheduledNestedTasks,Fe(t))},DP=x0('<div slot="control" class="checkbox-container mod-small"><input tabindex="0" type="checkbox"></div>'),BP=(e,t)=>{nb(ue,Fe(t).showTimeTracker=!t().showTimeTracker,Fe(t))},TP=x0('<div slot="control" class="checkbox-container mod-small"><input tabindex="0" type="checkbox"></div>'),_P=x0('<div class="dataview-source svelte-1m3ab8g">Include additional files, folders and tags with a Dataview source: <input spellcheck="false" type="text" class="svelte-1m3ab8g"> <!> <!> <!></div> <div class="settings svelte-1m3ab8g"><!> <!> <!> <!> <!> <div class="controls-section svelte-1m3ab8g">Unscheduled tasks</div> <!> <!> <div class="controls-section svelte-1m3ab8g">Time tracker</div> <!></div>',1);function ew(e,t){Re(t,!1);const n=tn(),o=()=>w1(ue,"$settings",n),M=()=>w1(u,"$dataviewSourceInput",n),c=()=>w1(a,"$sourceIsEmpty",n),b=()=>w1(s,"$dataviewErrorMessage",n),{refreshTasks:z}=po(),{sourceIsEmpty:a,errorMessage:s,dataviewSourceInput:u}=uP({refreshTasks:z}),l=me.range(0,13).map(String),A=me.range(1,9).map(String);function d(Z){nb(ue,Fe(o).startHour=Number(Z.currentTarget.value),Fe(o))}function W(Z){nb(ue,Fe(o).zoomLevel=Number(Z.currentTarget.value),Fe(o))}w2();var g=_P(),L=J0(g),R=H0(e1(L));mM(R,"placeholder",'-#archived and -"notes/personal"');var E=H0(R,2);B1(E,c,Z=>{Kl(Z,{type:"warning",children:(j,t0)=>{var O0=qP(),m0=H0(J0(O0));B1(m0,()=>o().plannerHeading,q0=>{var C=j2();y1(()=>o2(C,`under planner heading: "${o().plannerHeading??""}"`)),f0(q0,C)}),f0(j,O0)},$$slots:{default:!0}})});var k=H0(E,2);B1(k,()=>b().length>0,Z=>{Kl(Z,{type:"error",children:(j,t0)=>{var O0=hP(),m0=e1(O0);y1(()=>o2(m0,b())),f0(j,O0)},$$slots:{default:!0}})});var B=H0(k,2);Kl(B,{type:"info",children:(Z,j)=>{var t0=WP();f0(Z,t0)},$$slots:{default:!0}});var I=H0(L,2),S=e1(I);si(S,{$$slots:{name:(Z,j)=>{var t0=j2("Start hour");f0(Z,t0)},control:(Z,j)=>{var t0=to(()=>String(o().startHour));oy(Z,{slot:"control",get value(){return r0(t0)},values:l,$$events:{input:d}})}}});var N=H0(S,2);si(N,{$$slots:{name:(Z,j)=>{var t0=j2("Zoom");f0(Z,t0)},control:(Z,j)=>{var t0=to(()=>String(o().zoomLevel));oy(Z,{slot:"control",get value(){return r0(t0)},values:A,$$events:{input:W}})}}});var P=H0(N,2);si(P,{$$slots:{name:(Z,j)=>{var t0=j2("Auto-scroll to now");f0(Z,t0)},control:(Z,j)=>{var t0=gP();t0.__click=[mP,o],y1(()=>Qn(t0,"is-enabled",o().centerNeedle)),f0(Z,t0)}}});var J=H0(P,2);si(J,{$$slots:{name:(Z,j)=>{var t0=j2("Show completed tasks");f0(Z,t0)},control:(Z,j)=>{var t0=yP();t0.__click=[RP,o],y1(()=>Qn(t0,"is-enabled",o().showCompletedTasks)),f0(Z,t0)}}});var K=H0(J,2);si(K,{$$slots:{name:(Z,j)=>{var t0=j2("Show subtasks in task blocks");f0(Z,t0)},control:(Z,j)=>{var t0=LP();t0.__click=()=>{ue.update(O0=>({...O0,showSubtasksInTaskBlocks:!O0.showSubtasksInTaskBlocks}))},y1(()=>Qn(t0,"is-enabled",o().showSubtasksInTaskBlocks)),f0(Z,t0)}}});var V=H0(K,4);si(V,{$$slots:{name:(Z,j)=>{var t0=j2("Show unscheduled tasks");f0(Z,t0)},control:(Z,j)=>{var t0=NP();t0.__click=[vP,o],y1(()=>Qn(t0,"is-enabled",o().showUncheduledTasks)),f0(Z,t0)}}});var x=H0(V,2);B1(x,()=>o().showUncheduledTasks,Z=>{si(Z,{$$slots:{name:(j,t0)=>{var O0=j2("Show unscheduled sub-tasks as separate blocks");f0(j,O0)},control:(j,t0)=>{var O0=DP();O0.__click=[wP,o],y1(()=>Qn(O0,"is-enabled",o().showUnscheduledNestedTasks)),f0(j,O0)}}})});var e0=H0(x,4);si(e0,{$$slots:{name:(Z,j)=>{var t0=j2("Show time tracker");f0(Z,t0)},control:(Z,j)=>{var t0=TP();t0.__click=[BP,o],y1(()=>Qn(t0,"is-enabled",o().showTimeTracker)),f0(Z,t0)}}}),mS(R,M,Z=>KW(u,Z)),f0(e,g),ye()}ab(["click"]);var EP=x0('<div class="hour-block svelte-456hjm"><div class="half-hour-separator svelte-456hjm"></div></div>'),SP=x0('<div class="column svelte-456hjm"><!> <!></div>');function ry(e,t){Re(t,!1);const n=tn(),o=()=>w1(ue,"$settings",n);let M=M1(t,"visibleHours",8);w2();var c=SP(),b=e1(c);ke(b,t,"default",{});var z=H0(b,2);xo(z,1,M,lM,(a,s)=>{var u=EP();const l=to(()=>`${TA(o())??""}px`);y1(()=>Ot(u,"height",r0(l)));var A=e1(u);const d=to(()=>`${TA(o())/2}px`);y1(()=>Ot(A,"height",r0(d))),f0(a,u)}),f0(e,c),ye()}const W6=Math.min,Mz=Math.max,EA=Math.round,Tl=Math.floor,Ii=e=>({x:e,y:e});function kP(e,t){return typeof e=="function"?e(t):e}function Mg(e){return e.split("-")[0]}function tw(e){return e.split("-")[1]}function XP(e){return e==="x"?"y":"x"}function CP(e){return e==="y"?"height":"width"}function ig(e){return["top","bottom"].includes(Mg(e))?"y":"x"}function xP(e){return XP(ig(e))}function nw(e){const{x:t,y:n,width:o,height:M}=e;return{width:o,height:M,top:n,left:t,right:t+o,bottom:n+M,x:t,y:n}}function My(e,t,n){let{reference:o,floating:M}=e;const c=ig(t),b=xP(t),z=CP(b),a=Mg(t),s=c==="y",u=o.x+o.width/2-M.width/2,l=o.y+o.height/2-M.height/2,A=o[z]/2-M[z]/2;let d;switch(a){case"top":d={x:u,y:o.y-M.height};break;case"bottom":d={x:u,y:o.y+o.height};break;case"right":d={x:o.x+o.width,y:l};break;case"left":d={x:o.x-M.width,y:l};break;default:d={x:o.x,y:o.y}}switch(tw(t)){case"start":d[b]-=A*(n&&s?-1:1);break;case"end":d[b]+=A*(n&&s?-1:1);break}return d}const FP=async(e,t,n)=>{const{placement:o="bottom",strategy:M="absolute",middleware:c=[],platform:b}=n,z=c.filter(Boolean),a=await(b.isRTL==null?void 0:b.isRTL(t));let s=await b.getElementRects({reference:e,floating:t,strategy:M}),{x:u,y:l}=My(s,o,a),A=o,d={},W=0;for(let g=0;g<z.length;g++){const{name:L,fn:R}=z[g],{x:E,y:k,data:B,reset:I}=await R({x:u,y:l,initialPlacement:o,placement:A,strategy:M,middlewareData:d,rects:s,platform:b,elements:{reference:e,floating:t}});u=E??u,l=k??l,d={...d,[L]:{...d[L],...B}},I&&W<=50&&(W++,typeof I=="object"&&(I.placement&&(A=I.placement),I.rects&&(s=I.rects===!0?await b.getElementRects({reference:e,floating:t,strategy:M}):I.rects),{x:u,y:l}=My(s,A,a)),g=-1)}return{x:u,y:l,placement:A,strategy:M,middlewareData:d}};async function IP(e,t){const{placement:n,platform:o,elements:M}=e,c=await(o.isRTL==null?void 0:o.isRTL(M.floating)),b=Mg(n),z=tw(n),a=ig(n)==="y",s=["left","top"].includes(b)?-1:1,u=c&&a?-1:1,l=kP(t,e);let{mainAxis:A,crossAxis:d,alignmentAxis:W}=typeof l=="number"?{mainAxis:l,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...l};return z&&typeof W=="number"&&(d=z==="end"?W*-1:W),a?{x:d*u,y:A*s}:{x:A*s,y:d*u}}const PP=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,o;const{x:M,y:c,placement:b,middlewareData:z}=t,a=await IP(t,e);return b===((n=z.offset)==null?void 0:n.placement)&&(o=z.arrow)!=null&&o.alignmentOffset?{}:{x:M+a.x,y:c+a.y,data:{...a,placement:b}}}}};function _f(){return typeof window<"u"}function Iz(e){return ow(e)?(e.nodeName||"").toLowerCase():"#document"}function R2(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function Br(e){var t;return(t=(ow(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function ow(e){return _f()?e instanceof Node||e instanceof R2(e).Node:!1}function Po(e){return _f()?e instanceof Element||e instanceof R2(e).Element:!1}function Nr(e){return _f()?e instanceof HTMLElement||e instanceof R2(e).HTMLElement:!1}function iy(e){return!_f()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof R2(e).ShadowRoot}function JO(e){const{overflow:t,overflowX:n,overflowY:o,display:M}=Uo(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+n)&&!["inline","contents"].includes(M)}function UP(e){return["table","td","th"].includes(Iz(e))}function Ef(e){return[":popover-open",":modal"].some(t=>{try{return e.matches(t)}catch{return!1}})}function cg(e){const t=bg(),n=Po(e)?Uo(e):e;return n.transform!=="none"||n.perspective!=="none"||(n.containerType?n.containerType!=="normal":!1)||!t&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!t&&(n.filter?n.filter!=="none":!1)||["transform","perspective","filter"].some(o=>(n.willChange||"").includes(o))||["paint","layout","strict","content"].some(o=>(n.contain||"").includes(o))}function $P(e){let t=Pi(e);for(;Nr(t)&&!Wz(t);){if(cg(t))return t;if(Ef(t))return null;t=Pi(t)}return null}function bg(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function Wz(e){return["html","body","#document"].includes(Iz(e))}function Uo(e){return R2(e).getComputedStyle(e)}function Sf(e){return Po(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Pi(e){if(Iz(e)==="html")return e;const t=e.assignedSlot||e.parentNode||iy(e)&&e.host||Br(e);return iy(t)?t.host:t}function rw(e){const t=Pi(e);return Wz(t)?e.ownerDocument?e.ownerDocument.body:e.body:Nr(t)&&JO(t)?t:rw(t)}function gO(e,t,n){var o;t===void 0&&(t=[]),n===void 0&&(n=!0);const M=rw(e),c=M===((o=e.ownerDocument)==null?void 0:o.body),b=R2(M);if(c){const z=m6(b);return t.concat(b,b.visualViewport||[],JO(M)?M:[],z&&n?gO(z):[])}return t.concat(M,gO(M,[],n))}function m6(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Mw(e){const t=Uo(e);let n=parseFloat(t.width)||0,o=parseFloat(t.height)||0;const M=Nr(e),c=M?e.offsetWidth:n,b=M?e.offsetHeight:o,z=EA(n)!==c||EA(o)!==b;return z&&(n=c,o=b),{width:n,height:o,$:z}}function pg(e){return Po(e)?e:e.contextElement}function iz(e){const t=pg(e);if(!Nr(t))return Ii(1);const n=t.getBoundingClientRect(),{width:o,height:M,$:c}=Mw(t);let b=(c?EA(n.width):n.width)/o,z=(c?EA(n.height):n.height)/M;return(!b||!Number.isFinite(b))&&(b=1),(!z||!Number.isFinite(z))&&(z=1),{x:b,y:z}}const HP=Ii(0);function iw(e){const t=R2(e);return!bg()||!t.visualViewport?HP:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function YP(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==R2(e)?!1:t}function ib(e,t,n,o){t===void 0&&(t=!1),n===void 0&&(n=!1);const M=e.getBoundingClientRect(),c=pg(e);let b=Ii(1);t&&(o?Po(o)&&(b=iz(o)):b=iz(e));const z=YP(c,n,o)?iw(c):Ii(0);let a=(M.left+z.x)/b.x,s=(M.top+z.y)/b.y,u=M.width/b.x,l=M.height/b.y;if(c){const A=R2(c),d=o&&Po(o)?R2(o):o;let W=A,g=m6(W);for(;g&&o&&d!==W;){const L=iz(g),R=g.getBoundingClientRect(),E=Uo(g),k=R.left+(g.clientLeft+parseFloat(E.paddingLeft))*L.x,B=R.top+(g.clientTop+parseFloat(E.paddingTop))*L.y;a*=L.x,s*=L.y,u*=L.x,l*=L.y,a+=k,s+=B,W=R2(g),g=m6(W)}}return nw({width:u,height:l,x:a,y:s})}function jP(e){let{elements:t,rect:n,offsetParent:o,strategy:M}=e;const c=M==="fixed",b=Br(o),z=t?Ef(t.floating):!1;if(o===b||z&&c)return n;let a={scrollLeft:0,scrollTop:0},s=Ii(1);const u=Ii(0),l=Nr(o);if((l||!l&&!c)&&((Iz(o)!=="body"||JO(b))&&(a=Sf(o)),Nr(o))){const A=ib(o);s=iz(o),u.x=A.x+o.clientLeft,u.y=A.y+o.clientTop}return{width:n.width*s.x,height:n.height*s.y,x:n.x*s.x-a.scrollLeft*s.x+u.x,y:n.y*s.y-a.scrollTop*s.y+u.y}}function VP(e){return Array.from(e.getClientRects())}function g6(e,t){const n=Sf(e).scrollLeft;return t?t.left+n:ib(Br(e)).left+n}function GP(e){const t=Br(e),n=Sf(e),o=e.ownerDocument.body,M=Mz(t.scrollWidth,t.clientWidth,o.scrollWidth,o.clientWidth),c=Mz(t.scrollHeight,t.clientHeight,o.scrollHeight,o.clientHeight);let b=-n.scrollLeft+g6(e);const z=-n.scrollTop;return Uo(o).direction==="rtl"&&(b+=Mz(t.clientWidth,o.clientWidth)-M),{width:M,height:c,x:b,y:z}}function KP(e,t){const n=R2(e),o=Br(e),M=n.visualViewport;let c=o.clientWidth,b=o.clientHeight,z=0,a=0;if(M){c=M.width,b=M.height;const s=bg();(!s||s&&t==="fixed")&&(z=M.offsetLeft,a=M.offsetTop)}return{width:c,height:b,x:z,y:a}}function ZP(e,t){const n=ib(e,!0,t==="fixed"),o=n.top+e.clientTop,M=n.left+e.clientLeft,c=Nr(e)?iz(e):Ii(1),b=e.clientWidth*c.x,z=e.clientHeight*c.y,a=M*c.x,s=o*c.y;return{width:b,height:z,x:a,y:s}}function cy(e,t,n){let o;if(t==="viewport")o=KP(e,n);else if(t==="document")o=GP(Br(e));else if(Po(t))o=ZP(t,n);else{const M=iw(e);o={...t,x:t.x-M.x,y:t.y-M.y}}return nw(o)}function cw(e,t){const n=Pi(e);return n===t||!Po(n)||Wz(n)?!1:Uo(n).position==="fixed"||cw(n,t)}function JP(e,t){const n=t.get(e);if(n)return n;let o=gO(e,[],!1).filter(z=>Po(z)&&Iz(z)!=="body"),M=null;const c=Uo(e).position==="fixed";let b=c?Pi(e):e;for(;Po(b)&&!Wz(b);){const z=Uo(b),a=cg(b);!a&&z.position==="fixed"&&(M=null),(c?!a&&!M:!a&&z.position==="static"&&!!M&&["absolute","fixed"].includes(M.position)||JO(b)&&!a&&cw(e,b))?o=o.filter(u=>u!==b):M=z,b=Pi(b)}return t.set(e,o),o}function QP(e){let{element:t,boundary:n,rootBoundary:o,strategy:M}=e;const b=[...n==="clippingAncestors"?Ef(t)?[]:JP(t,this._c):[].concat(n),o],z=b[0],a=b.reduce((s,u)=>{const l=cy(t,u,M);return s.top=Mz(l.top,s.top),s.right=W6(l.right,s.right),s.bottom=W6(l.bottom,s.bottom),s.left=Mz(l.left,s.left),s},cy(t,z,M));return{width:a.right-a.left,height:a.bottom-a.top,x:a.left,y:a.top}}function eU(e){const{width:t,height:n}=Mw(e);return{width:t,height:n}}function tU(e,t,n){const o=Nr(t),M=Br(t),c=n==="fixed",b=ib(e,!0,c,t);let z={scrollLeft:0,scrollTop:0};const a=Ii(0);if(o||!o&&!c)if((Iz(t)!=="body"||JO(M))&&(z=Sf(t)),o){const d=ib(t,!0,c,t);a.x=d.x+t.clientLeft,a.y=d.y+t.clientTop}else M&&(a.x=g6(M));let s=0,u=0;if(M&&!o&&!c){const d=M.getBoundingClientRect();u=d.top+z.scrollTop,s=d.left+z.scrollLeft-g6(M,d)}const l=b.left+z.scrollLeft-a.x-s,A=b.top+z.scrollTop-a.y-u;return{x:l,y:A,width:b.width,height:b.height}}function Zh(e){return Uo(e).position==="static"}function by(e,t){if(!Nr(e)||Uo(e).position==="fixed")return null;if(t)return t(e);let n=e.offsetParent;return Br(e)===n&&(n=n.ownerDocument.body),n}function bw(e,t){const n=R2(e);if(Ef(e))return n;if(!Nr(e)){let M=Pi(e);for(;M&&!Wz(M);){if(Po(M)&&!Zh(M))return M;M=Pi(M)}return n}let o=by(e,t);for(;o&&UP(o)&&Zh(o);)o=by(o,t);return o&&Wz(o)&&Zh(o)&&!cg(o)?n:o||$P(e)||n}const nU=async function(e){const t=this.getOffsetParent||bw,n=this.getDimensions,o=await n(e.floating);return{reference:tU(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function oU(e){return Uo(e).direction==="rtl"}const rU={convertOffsetParentRelativeRectToViewportRelativeRect:jP,getDocumentElement:Br,getClippingRect:QP,getOffsetParent:bw,getElementRects:nU,getClientRects:VP,getDimensions:eU,getScale:iz,isElement:Po,isRTL:oU};function MU(e,t){let n=null,o;const M=Br(e);function c(){var z;clearTimeout(o),(z=n)==null||z.disconnect(),n=null}function b(z,a){z===void 0&&(z=!1),a===void 0&&(a=1),c();const{left:s,top:u,width:l,height:A}=e.getBoundingClientRect();if(z||t(),!l||!A)return;const d=Tl(u),W=Tl(M.clientWidth-(s+l)),g=Tl(M.clientHeight-(u+A)),L=Tl(s),E={rootMargin:-d+"px "+-W+"px "+-g+"px "+-L+"px",threshold:Mz(0,W6(1,a))||1};let k=!0;function B(I){const S=I[0].intersectionRatio;if(S!==a){if(!k)return b();S?b(!1,S):o=setTimeout(()=>{b(!1,1e-7)},1e3)}k=!1}try{n=new IntersectionObserver(B,{...E,root:M.ownerDocument})}catch{n=new IntersectionObserver(B,E)}n.observe(e)}return b(!0),c}function iU(e,t,n,o){o===void 0&&(o={});const{ancestorScroll:M=!0,ancestorResize:c=!0,elementResize:b=typeof ResizeObserver=="function",layoutShift:z=typeof IntersectionObserver=="function",animationFrame:a=!1}=o,s=pg(e),u=M||c?[...s?gO(s):[],...gO(t)]:[];u.forEach(R=>{M&&R.addEventListener("scroll",n,{passive:!0}),c&&R.addEventListener("resize",n)});const l=s&&z?MU(s,n):null;let A=-1,d=null;b&&(d=new ResizeObserver(R=>{let[E]=R;E&&E.target===s&&d&&(d.unobserve(t),cancelAnimationFrame(A),A=requestAnimationFrame(()=>{var k;(k=d)==null||k.observe(t)})),n()}),s&&!a&&d.observe(s),d.observe(t));let W,g=a?ib(e):null;a&&L();function L(){const R=ib(e);g&&(R.x!==g.x||R.y!==g.y||R.width!==g.width||R.height!==g.height)&&n(),g=R,W=requestAnimationFrame(L)}return n(),()=>{var R;u.forEach(E=>{M&&E.removeEventListener("scroll",n),c&&E.removeEventListener("resize",n)}),l==null||l(),(R=d)==null||R.disconnect(),d=null,a&&cancelAnimationFrame(W)}}const Zl=PP,cU=(e,t,n)=>{const o=new Map,M={platform:rU,...n},c={...M.platform,_c:o};return FP(e,t,{...M,platform:c})};function bU(e,t){const{isModPressed:n,showPreview:o}=po(),M=xn(!1);function c(){M.set(!0)}function b(){M.set(!1)}e.addEventListener("mouseenter",c),e.addEventListener("mouseleave",b);const a=G1([n,M],([s,u])=>s&&u).subscribe(s=>{var u,l,A;s&&((u=t.location)!=null&&u.path)&&o(e,t.location.path,(A=(l=t.location.position)==null?void 0:l.start)==null?void 0:A.line)});return{destroy(){e.removeEventListener("mouseenter",c),e.removeEventListener("mouseleave",b),a()}}}function Jl(e){let t=null,n=null;const o=xn(!1);function M(u){_i(u)||U8(u,t)||o.set(!1)}function c(u){_i(u)||o.set(!0)}function b(u){_i(u)||U8(u,n)||o.set(!1)}function z(u){nF(u,n)&&o.set(!1)}function a(u){return t=u,{destroy(){t=null}}}function s(u){n=u,l1.isNotVoid(t,"Cannot initialize floating UI before obtaining a reference to anchor.");const l=iU(t,n,()=>{l1.isNotVoid(t),l1.isNotVoid(n),cU(t,n,e).then(({x:A,y:d})=>{l1.isNotVoid(n),Object.assign(n.style,{left:`${A}px`,top:`${d}px`})})});return{destroy(){l(),n=null}}}return{handleFloatingUiTapOutside:z,handleFloatingUiPointerLeave:M,handleAnchorPointerEnter:c,handleAnchorPointerLeave:b,anchorSetup:a,floatingUiSetup:s,isActive:o}}var pU=x0('<div class="clickable-icon svelte-1bnee9v"><!></div>');function Yc(e,t){let n=M1(t,"cursor",8,""),o=M1(t,"label",8);var M=pU(),c=e1(M);ke(c,t,"default",{}),y1(()=>{mM(M,"aria-label",o()),Ot(M,"cursor",n())}),pt("pointerdown",M,function(b){hn.call(this,t,b)}),f0(e,M)}function zU(){const e=xn(!1);function t(M){_i(M)&&!Ze(e)&&e.set(!0)}function n(M){_i(M)||e.set(!0)}function o(M){_i(M)||e.set(!1)}return{isActive:e,handlePointerDown:t,handlePointerEnter:n,handlePointerLeave:o}}var aU=x0('<div style="display: flex"><!></div>'),sU=x0('<div class="expanding-controls svelte-kovjwo"><!> <div class="circle svelte-kovjwo"></div></div>');function pw(e,t){Re(t,!1);const n=tn(),o=()=>w1(c,"$isActive",n);let M=M1(t,"reverse",8,!1);const{isActive:c,handlePointerDown:b,handlePointerEnter:z,handlePointerLeave:a}=zU();w2();var s=sU();Ot(s,"touch-action","none");var u=e1(s);B1(u,o,A=>{var d=aU(),W=e1(d);ke(W,t,"default",{}),tb(1,d,()=>ty,()=>({duration:300})),f0(A,d)});var l=H0(u,2);y1(()=>{Qn(s,"active",o()),Ot(s,"flex-direction",M()?"row-reverse":"row"),Ot(l,"display",o()?"none":"block")}),tb(1,l,()=>ty,()=>({duration:300})),pt("pointermove",s,yS(function(A){hn.call(this,t,A)})),pt("pointerdown",s,function(A){hn.call(this,t,A)}),pt("pointerdown",s,b),pt("pointerenter",s,z),pt("pointerleave",s,a),f0(e,s),ye()}var OU=x0("<!> <!> <!> <!>",1),uU=x0('<svelte-css-wrapper style="display: contents"><!></svelte-css-wrapper>',1);function zw(e,t){let n=M1(t,"onMove",8),o=M1(t,"onMoveWithNeighbors",8,()=>{}),M=M1(t,"onCopy",8,()=>{}),c=M1(t,"onMoveWithShrink",8,()=>{}),b=M1(t,"onPointerDown",8,()=>{});var z=uU(),a=J0(z);uM(a,()=>({"--right":"4px","--top":"4px"})),pw(a.lastChild,{$$events:{pointerdown(...s){var u;(u=b())==null||u.apply(this,s)}},children:(s,u)=>{var l=OU(),A=J0(l);B1(A,M,L=>{Yc(L,{cursor:"grab",label:"Copy block",$$events:{pointerdown(...R){var E;(E=M())==null||E.apply(this,R)}},children:(R,E)=>{HI(R,{class:"svg-icon"})},$$slots:{default:!0}})});var d=H0(A,2);B1(d,o,L=>{Yc(L,{cursor:"grab",label:"Move block and push neighboring blocks",$$events:{pointerdown(...R){var E;(E=o())==null||E.apply(this,R)}},children:(R,E)=>{HN(R,{class:"svg-icon"})},$$slots:{default:!0}})});var W=H0(d,2);B1(W,c,L=>{Yc(L,{cursor:"grab",label:"Move block and shrink neighboring blocks",$$events:{pointerdown(...R){var E;(E=c())==null||E.apply(this,R)}},children:(R,E)=>{VN(R,{class:"svg-icon"})},$$slots:{default:!0}})});var g=H0(W,2);Yc(g,{cursor:"grab",label:"Move block",$$events:{pointerdown(...L){var R;(R=n())==null||R.apply(this,L)}},children:(L,R)=>{jI(L,{class:"svg-icon"})},$$slots:{default:!0}}),f0(s,l)},$$slots:{default:!0}}),f0(e,z)}function lU(e,t="body"){let n;async function o(c){if(t=c,typeof t=="string"){if(n=document.querySelector(t),n===null&&(await R7(),n=document.querySelector(t)),n===null)throw new Error(`No element found matching css selector: "${t}"`)}else if(t instanceof HTMLElement)n=t;else throw new TypeError(`Unknown portal target type: ${t===null?"null":typeof t}. Allowed types: string (CSS selector) or HTMLElement.`);n.appendChild(e),e.hidden=!1}function M(){e.parentNode&&e.parentNode.removeChild(e)}return o(t),{update:o,destroy:M}}function aw(e,t){const n=[];if(t)for(let o=0;o<t.length;o++){const M=t[o],c=Array.isArray(M)?M[0]:M;Array.isArray(M)&&M.length>1?n.push(c(e,M[1])):n.push(c(e))}return{update(o){if((o&&o.length||0)!=n.length)throw new Error("You must not change the length of an actions array.");if(o)for(let M=0;M<o.length;M++){const c=n[M];if(c&&c.update){const b=o[M];Array.isArray(b)&&b.length>1?c.update(b[1]):c.update()}}},destroy(){for(let o=0;o<n.length;o++){const M=n[o];M&&M.destroy&&M.destroy()}}}}var AU=x0('<div class="floating-ui svelte-13xxfh4"><!></div>');function Ql(e,t){let n=M1(t,"use",24,()=>[]),o=M1(t,"onPointerLeave",8),M=M1(t,"onTapOutside",8),c=M1(t,"onPointerDown",8,()=>{});var b=AU();pt("pointerdown",hA.body,function(...a){var s;(s=M())==null||s.apply(this,a)});var z=e1(b);ke(z,t,"default",{}),q2(()=>pt("pointerleave",b,function(...a){var s;(s=o())==null||s.apply(this,a)})),q2(()=>pt("pointerdown",b,function(...a){var s;(s=c())==null||s.apply(this,a)})),uO(b,a=>lU(a)),uO(b,(a,s)=>aw(a,s),n),f0(e,b)}function fU(e,t){let n=e;function o(M){for(const[c,b]of Object.entries(M)){const z=n[c],a=(t==null?void 0:t[c])||me.identity;if(a(b)!==a(z))return n=M,!0}return!1}return o}function dU(e,t){let n=[];function o(){n.forEach(b=>b()),n=[]}const M=fU(t,{task:qO});function c({task:b,settings:z,renderMarkdown:a}){o();const s=iF(Gx(EF(b))),u=z.showSubtasksInTaskBlocks?s:Mb(s);if(n.push(a(e,u)),!b.lines)return;const l=b.lines.filter(d=>d.task);e.querySelectorAll('[data-task] input[type="checkbox"]').forEach((d,W)=>{!(d instanceof HTMLElement)||!b.location||(d.dataset.line=String(l[W].line))});async function A(d){if(!(d.target instanceof HTMLElement)||!b.location)return;const W=d.target.dataset.line;W&&(d.stopPropagation(),await t.toggleCheckboxInFile(b.location.path,Number(W)))}e.addEventListener("pointerup",A),n.push(()=>e.removeEventListener("pointerup",A))}return c(t),{update(b){M(b)&&c(b)},destroy(){o()}}}var qU=x0('<div class="rendered-markdown planner-sticky-block-content svelte-16dqlil"></div>');function sw(e,t){Re(t,!1);const n=tn(),o=()=>w1(z,"$settings",n);let M=M1(t,"task",8);const{renderMarkdown:c,toggleCheckboxInFile:b,settings:z}=po();w2();var a=qU();uO(a,(s,u)=>dU(s,u),()=>({task:M(),settings:o(),renderMarkdown:c,toggleCheckboxInFile:b})),f0(e,a),ye()}var hU=x0("<!> <!> <!>",1);function py(e,t){let n=M1(t,"onResize",8),o=M1(t,"onResizeWithNeighbors",8),M=M1(t,"onResizeWithShrink",8),c=M1(t,"onPointerDown",8,()=>{}),b=M1(t,"reverse",8,!1);pw(e,{get reverse(){return b()},$$events:{pointerdown(...z){var a;(a=c())==null||a.apply(this,z)}},children:(z,a)=>{var s=hU(),u=J0(s);Yc(u,{cursor:"grab",label:"Resize block",$$events:{pointerdown(...d){var W;(W=n())==null||W.apply(this,d)}},children:(d,W)=>{GI(d,{class:"svg-icon"})},$$slots:{default:!0}});var l=H0(u,2);Yc(l,{cursor:"grab",label:"Resize block and push neighboring blocks",$$events:{pointerdown(...d){var W;(W=o())==null||W.apply(this,d)}},children:(d,W)=>{HN(d,{class:"svg-icon"})},$$slots:{default:!0}});var A=H0(l,2);Yc(A,{cursor:"grab",label:"Resize block and shrink neighboring blocks",$$events:{pointerdown(...d){var W;(W=M())==null||W.apply(this,d)}},children:(d,W)=>{VN(d,{class:"svg-icon"})},$$slots:{default:!0}}),f0(z,s)},$$slots:{default:!0}})}function WU(e,{settings:t}){var b,z;const n=`${((b=e.placing)==null?void 0:b.widthPercent)||100}%`,o=`${((z=e.placing)==null?void 0:z.xOffsetPercent)||0}%`,M=G1(t,a=>`${N1(e.startTime)*a.zoomLevel-$N(a)}px`),c=G1(t,a=>`${e.durationMinutes*a.zoomLevel}px`);return{width:n,left:o,offset:M,height:c}}class kf{constructor(t,n){this.element=t,this.touch1=null,this.touch2=null,this.touchStartX=null,this.touchStartY=null,this.touchEndX=null,this.touchEndY=null,this.touchMove1=null,this.touchMove2=null,this.touchMoveX=null,this.touchMoveY=null,this.velocityX=null,this.velocityY=null,this.longPressTimer=null,this.doubleTapTimer=null,this.doubleTapWaiting=!1,this.thresholdX=0,this.thresholdY=0,this.disregardVelocityThresholdX=0,this.disregardVelocityThresholdY=0,this.swipingHorizontal=!1,this.swipingVertical=!1,this.swipingDirection=null,this.swipedHorizontal=!1,this.swipedVertical=!1,this.originalDistance=null,this.newDistance=null,this.scale=null,this.originalAngle=null,this.newAngle=null,this.rotation=null,this.handlers={panstart:[],panmove:[],panend:[],swipeleft:[],swiperight:[],swipeup:[],swipedown:[],tap:[],doubletap:[],longpress:[],pinch:[],pinchend:[],rotate:[],rotateend:[]},this._onTouchStart=this.onTouchStart.bind(this),this._onTouchMove=this.onTouchMove.bind(this),this._onTouchEnd=this.onTouchEnd.bind(this),this.opts=Object.assign({},kf.defaults,n),this.element.addEventListener("touchstart",this._onTouchStart,Pc),this.element.addEventListener("touchmove",this._onTouchMove,Pc),this.element.addEventListener("touchend",this._onTouchEnd,Pc),this.opts.mouseSupport&&!("ontouchstart"in window)&&(this.element.addEventListener("mousedown",this._onTouchStart,Pc),document.addEventListener("mousemove",this._onTouchMove,Pc),document.addEventListener("mouseup",this._onTouchEnd,Pc))}destroy(){var t,n;this.element.removeEventListener("touchstart",this._onTouchStart),this.element.removeEventListener("touchmove",this._onTouchMove),this.element.removeEventListener("touchend",this._onTouchEnd),this.element.removeEventListener("mousedown",this._onTouchStart),document.removeEventListener("mousemove",this._onTouchMove),document.removeEventListener("mouseup",this._onTouchEnd),clearTimeout((t=this.longPressTimer)!==null&&t!==void 0?t:void 0),clearTimeout((n=this.doubleTapTimer)!==null&&n!==void 0?n:void 0)}on(t,n){if(this.handlers[t])return this.handlers[t].push(n),{type:t,fn:n,cancel:()=>this.off(t,n)}}off(t,n){if(this.handlers[t]){const o=this.handlers[t].indexOf(n);o!==-1&&this.handlers[t].splice(o,1)}}fire(t,n){for(let o=0;o<this.handlers[t].length;o++)this.handlers[t][o](n)}onTouchStart(t){var n,o,M,c,b,z,a,s,u,l,A,d,W,g,L,R,E,k,B,I,S,N,P,J,K,V;let x=!1,e0=!1;if(t.type!=="mousedown"){if(this.touch1||(this.touch1=t.changedTouches[0],x=!0),(x&&t.changedTouches.length>1||!x)&&!this.touch2){this.touch2=[...t.changedTouches].find(Z=>{var j;return Z.identifier!==((j=this.touch1)===null||j===void 0?void 0:j.identifier)})||null,this.originalDistance=Math.sqrt(Math.pow(((o=(n=this.touch2)===null||n===void 0?void 0:n.screenX)!==null&&o!==void 0?o:0)-((z=(c=(M=this.touchMove1)===null||M===void 0?void 0:M.screenX)!==null&&c!==void 0?c:(b=this.touch1)===null||b===void 0?void 0:b.screenX)!==null&&z!==void 0?z:0),2)+Math.pow(((s=(a=this.touch2)===null||a===void 0?void 0:a.screenY)!==null&&s!==void 0?s:0)-((d=(l=(u=this.touchMove1)===null||u===void 0?void 0:u.screenY)!==null&&l!==void 0?l:(A=this.touch1)===null||A===void 0?void 0:A.screenY)!==null&&d!==void 0?d:0),2)),this.originalAngle=Math.atan2(((g=(W=this.touch2)===null||W===void 0?void 0:W.screenY)!==null&&g!==void 0?g:0)-((k=(R=(L=this.touchMove1)===null||L===void 0?void 0:L.screenY)!==null&&R!==void 0?R:(E=this.touch1)===null||E===void 0?void 0:E.screenY)!==null&&k!==void 0?k:0),((I=(B=this.touch2)===null||B===void 0?void 0:B.screenX)!==null&&I!==void 0?I:0)-((J=(N=(S=this.touchMove1)===null||S===void 0?void 0:S.screenX)!==null&&N!==void 0?N:(P=this.touch1)===null||P===void 0?void 0:P.screenX)!==null&&J!==void 0?J:0))/(Math.PI/180);return}if(!x&&!e0)return}(x||t.type==="mousedown")&&(this.thresholdX=this.opts.threshold("x",this),this.thresholdY=this.opts.threshold("y",this),this.disregardVelocityThresholdX=this.opts.disregardVelocityThreshold("x",this),this.disregardVelocityThresholdY=this.opts.disregardVelocityThreshold("y",this),this.touchStartX=t.type==="mousedown"?t.screenX:((K=this.touch1)===null||K===void 0?void 0:K.screenX)||0,this.touchStartY=t.type==="mousedown"?t.screenY:((V=this.touch1)===null||V===void 0?void 0:V.screenY)||0,this.touchMoveX=null,this.touchMoveY=null,this.touchEndX=null,this.touchEndY=null,this.swipingDirection=null,this.longPressTimer=setTimeout(()=>this.fire("longpress",t),this.opts.longPressTime),this.scale=1,this.rotation=0,this.fire("panstart",t))}onTouchMove(t){var n,o,M,c,b,z,a,s,u,l,A,d,W;if(t.type==="mousemove"&&(!this.touchStartX||this.touchEndX!==null))return;let g,L;if(t.type!=="mousemove"&&(g=[...t.changedTouches].find(R=>{var E;return R.identifier===((E=this.touch1)===null||E===void 0?void 0:E.identifier)}),this.touchMove1=g||this.touchMove1,L=[...t.changedTouches].find(R=>{var E;return R.identifier===((E=this.touch2)===null||E===void 0?void 0:E.identifier)}),this.touchMove2=L||this.touchMove2),t.type==="mousemove"||g){const R=(t.type==="mousemove"?t.screenX:(n=g==null?void 0:g.screenX)!==null&&n!==void 0?n:0)-((o=this.touchStartX)!==null&&o!==void 0?o:0);this.velocityX=R-((M=this.touchMoveX)!==null&&M!==void 0?M:0),this.touchMoveX=R;const E=(t.type==="mousemove"?t.screenY:(c=g==null?void 0:g.screenY)!==null&&c!==void 0?c:0)-((b=this.touchStartY)!==null&&b!==void 0?b:0);this.velocityY=E-((z=this.touchMoveY)!==null&&z!==void 0?z:0),this.touchMoveY=E;const k=Math.abs(this.touchMoveX),B=Math.abs(this.touchMoveY);this.swipingHorizontal=k>this.thresholdX,this.swipingVertical=B>this.thresholdY,this.swipingDirection=k>B?this.swipingHorizontal?"horizontal":"pre-horizontal":this.swipingVertical?"vertical":"pre-vertical",Math.max(k,B)>this.opts.pressThreshold&&clearTimeout((a=this.longPressTimer)!==null&&a!==void 0?a:void 0),this.fire("panmove",t)}t.type!=="mousemove"&&this.touchMove1!=null&&this.touchMove2!=null&&(this.newDistance=Math.sqrt(Math.pow(this.touchMove2.screenX-this.touchMove1.screenX,2)+Math.pow(this.touchMove2.screenY-this.touchMove1.screenY,2)),this.scale=this.newDistance/((s=this.originalDistance)!==null&&s!==void 0?s:0),this.fire("pinch",t),this.newAngle=Math.atan2(((u=this.touchMove2.screenY)!==null&&u!==void 0?u:0)-((l=this.touchMove1.screenY)!==null&&l!==void 0?l:0),((A=this.touchMove2.screenX)!==null&&A!==void 0?A:0)-((d=this.touchMove1.screenX)!==null&&d!==void 0?d:0))/(Math.PI/180),this.rotation=this.newAngle-((W=this.originalAngle)!==null&&W!==void 0?W:0),this.fire("rotate",t))}onTouchEnd(t){var n,o,M,c,b,z,a,s,u,l;let A;if(t.type!=="mouseup"&&(A=[...t.changedTouches].find(d=>{var W;return d.identifier===((W=this.touch1)===null||W===void 0?void 0:W.identifier)}),[...t.touches].find(d=>{var W;return d.identifier===((W=this.touch1)===null||W===void 0?void 0:W.identifier)})||(this.touch1=null,this.touchMove1=null),[...t.touches].find(d=>{var W;return d.identifier===((W=this.touch2)===null||W===void 0?void 0:W.identifier)})||(this.touch2=null,this.touchMove2=null)),!(t.type==="mouseup"&&(!this.touchStartX||this.touchEndX!==null))){if(t.type==="mouseup"||A){this.touchEndX=t.type==="mouseup"?t.screenX:(n=A==null?void 0:A.screenX)!==null&&n!==void 0?n:0,this.touchEndY=t.type==="mouseup"?t.screenY:(o=A==null?void 0:A.screenY)!==null&&o!==void 0?o:0,this.fire("panend",t),clearTimeout((M=this.longPressTimer)!==null&&M!==void 0?M:void 0);const d=this.touchEndX-((c=this.touchStartX)!==null&&c!==void 0?c:0),W=Math.abs(d),g=this.touchEndY-((b=this.touchStartY)!==null&&b!==void 0?b:0),L=Math.abs(g),R=Math.sqrt(Math.pow(d,2)+Math.pow(g,2)),E=Math.abs(R),k=L/W;W>this.thresholdX||L>this.thresholdY||this.opts.diagonalSwipes&&(E>this.thresholdX||E>this.thresholdY)?(this.swipedHorizontal=W>this.thresholdX||this.opts.diagonalSwipes&&E>this.thresholdX,this.swipedVertical=L>this.thresholdY||this.opts.diagonalSwipes&&E>this.thresholdY,(!this.opts.diagonalSwipes||k<Math.tan((45-this.opts.diagonalLimit)*Math.PI/180)||k>Math.tan((45+this.opts.diagonalLimit)*Math.PI/180))&&(W>=L&&(this.swipedVertical=!1),L>W&&(this.swipedHorizontal=!1)),this.swipedHorizontal&&(d<0?(((z=this.velocityX)!==null&&z!==void 0?z:0)<-this.opts.velocityThreshold||R<-this.disregardVelocityThresholdX)&&this.fire("swipeleft",t):(((a=this.velocityX)!==null&&a!==void 0?a:0)>this.opts.velocityThreshold||R>this.disregardVelocityThresholdX)&&this.fire("swiperight",t)),this.swipedVertical&&(g<0?(((s=this.velocityY)!==null&&s!==void 0?s:0)<-this.opts.velocityThreshold||R<-this.disregardVelocityThresholdY)&&this.fire("swipeup",t):(((u=this.velocityY)!==null&&u!==void 0?u:0)>this.opts.velocityThreshold||R>this.disregardVelocityThresholdY)&&this.fire("swipedown",t))):W<this.opts.pressThreshold&&L<this.opts.pressThreshold&&(this.doubleTapWaiting?(this.doubleTapWaiting=!1,clearTimeout((l=this.doubleTapTimer)!==null&&l!==void 0?l:void 0),this.fire("doubletap",t)):(this.doubleTapWaiting=!0,this.doubleTapTimer=setTimeout(()=>this.doubleTapWaiting=!1,this.opts.doubleTapTime),this.fire("tap",t)))}!this.touch1&&!this.touch2&&(this.fire("pinchend",t),this.fire("rotateend",t),this.originalDistance=null,this.newDistance=null,this.scale=null,this.originalAngle=null,this.newAngle=null,this.rotation=null)}}}kf.defaults={threshold:(e,t)=>Math.max(25,Math.floor(.15*(e==="x"?window.innerWidth||document.body.clientWidth:window.innerHeight||document.body.clientHeight))),velocityThreshold:10,disregardVelocityThreshold:(e,t)=>Math.floor(.5*(e==="x"?t.element.clientWidth:t.element.clientHeight)),pressThreshold:8,diagonalSwipes:!1,diagonalLimit:15,longPressTime:500,doubleTapTime:300,mouseSupport:!0};let Pc=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){Pc={passive:!0}}}))}catch{}function mU(e){const t=new kf(e);let n=!1;return t.on("tap",()=>{n||e.dispatchEvent(new CustomEvent("tap"))}),t.on("longpress",()=>{n=!0,e.dispatchEvent(new CustomEvent("longpress"))}),t.on("panend",()=>{n&&setTimeout(()=>{n=!1},0)}),{destroy(){t.destroy()}}}function gU(e,t,n){const o=n.colorOverrides.find(M=>qz(e).includes(M.text));return o?t?o==null?void 0:o.darkModeColor:o==null?void 0:o.color:"var(--time-block-bg-color, var(--background-primary))"}const{min:RU,max:yU}=Math,Zc=(e,t=0,n=1)=>RU(yU(t,e),n),zg=e=>{e._clipped=!1,e._unclipped=e.slice(0);for(let t=0;t<=3;t++)t<3?((e[t]<0||e[t]>255)&&(e._clipped=!0),e[t]=Zc(e[t],0,255)):t===3&&(e[t]=Zc(e[t],0,1));return e},Ow={};for(let e of["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"])Ow[`[object ${e}]`]=e.toLowerCase();function E1(e){return Ow[Object.prototype.toString.call(e)]||"object"}const L1=(e,t=null)=>e.length>=3?Array.prototype.slice.call(e):E1(e[0])=="object"&&t?t.split("").filter(n=>e[0][n]!==void 0).map(n=>e[0][n]):e[0].slice(0),Pz=e=>{if(e.length<2)return null;const t=e.length-1;return E1(e[t])=="string"?e[t].toLowerCase():null},{PI:Xf,min:uw,max:lw}=Math,oo=e=>Math.round(e*100)/100,R6=e=>Math.round(e*100)/100,iM=Xf*2,Jh=Xf/3,LU=Xf/180,vU=180/Xf,m1={format:{},autodetect:[]};class B0{constructor(...t){const n=this;if(E1(t[0])==="object"&&t[0].constructor&&t[0].constructor===this.constructor)return t[0];let o=Pz(t),M=!1;if(!o){M=!0,m1.sorted||(m1.autodetect=m1.autodetect.sort((c,b)=>b.p-c.p),m1.sorted=!0);for(let c of m1.autodetect)if(o=c.test(...t),o)break}if(m1.format[o]){const c=m1.format[o].apply(null,M?t:t.slice(0,-1));n._rgb=zg(c)}else throw new Error("unknown format: "+t);n._rgb.length===3&&n._rgb.push(1)}toString(){return E1(this.hex)=="function"?this.hex():`[${this._rgb.join(",")}]`}}const NU="3.1.1",_1=(...e)=>new B0(...e);_1.version=NU;const mz={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",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"},wU=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,DU=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,Aw=e=>{if(e.match(wU)){(e.length===4||e.length===7)&&(e=e.substr(1)),e.length===3&&(e=e.split(""),e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]);const t=parseInt(e,16),n=t>>16,o=t>>8&255,M=t&255;return[n,o,M,1]}if(e.match(DU)){(e.length===5||e.length===9)&&(e=e.substr(1)),e.length===4&&(e=e.split(""),e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]);const t=parseInt(e,16),n=t>>24&255,o=t>>16&255,M=t>>8&255,c=Math.round((t&255)/255*100)/100;return[n,o,M,c]}throw new Error(`unknown hex color: ${e}`)},{round:_l}=Math,fw=(...e)=>{let[t,n,o,M]=L1(e,"rgba"),c=Pz(e)||"auto";M===void 0&&(M=1),c==="auto"&&(c=M<1?"rgba":"rgb"),t=_l(t),n=_l(n),o=_l(o);let z="000000"+(t<<16|n<<8|o).toString(16);z=z.substr(z.length-6);let a="0"+_l(M*255).toString(16);switch(a=a.substr(a.length-2),c.toLowerCase()){case"rgba":return`#${z}${a}`;case"argb":return`#${a}${z}`;default:return`#${z}`}};B0.prototype.name=function(){const e=fw(this._rgb,"rgb");for(let t of Object.keys(mz))if(mz[t]===e)return t.toLowerCase();return e};m1.format.named=e=>{if(e=e.toLowerCase(),mz[e])return Aw(mz[e]);throw new Error("unknown color name: "+e)};m1.autodetect.push({p:5,test:(e,...t)=>{if(!t.length&&E1(e)==="string"&&mz[e.toLowerCase()])return"named"}});B0.prototype.alpha=function(e,t=!1){return e!==void 0&&E1(e)==="number"?t?(this._rgb[3]=e,this):new B0([this._rgb[0],this._rgb[1],this._rgb[2],e],"rgb"):this._rgb[3]};B0.prototype.clipped=function(){return this._rgb._clipped||!1};const yr={Kn:18,labWhitePoint:"d65",Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452,kE:216/24389,kKE:8,kK:24389/27,RefWhiteRGB:{X:.95047,Y:1,Z:1.08883},MtxRGB2XYZ:{m00:.4124564390896922,m01:.21267285140562253,m02:.0193338955823293,m10:.357576077643909,m11:.715152155287818,m12:.11919202588130297,m20:.18043748326639894,m21:.07217499330655958,m22:.9503040785363679},MtxXYZ2RGB:{m00:3.2404541621141045,m01:-.9692660305051868,m02:.055643430959114726,m10:-1.5371385127977166,m11:1.8760108454466942,m12:-.2040259135167538,m20:-.498531409556016,m21:.041556017530349834,m22:1.0572251882231791},As:.9414285350000001,Bs:1.040417467,Cs:1.089532651,MtxAdaptMa:{m00:.8951,m01:-.7502,m02:.0389,m10:.2664,m11:1.7135,m12:-.0685,m20:-.1614,m21:.0367,m22:1.0296},MtxAdaptMaI:{m00:.9869929054667123,m01:.43230526972339456,m02:-.008528664575177328,m10:-.14705425642099013,m11:.5183602715367776,m12:.04004282165408487,m20:.15996265166373125,m21:.0492912282128556,m22:.9684866957875502}},BU=new Map([["a",[1.0985,.35585]],["b",[1.0985,.35585]],["c",[.98074,1.18232]],["d50",[.96422,.82521]],["d55",[.95682,.92149]],["d65",[.95047,1.08883]],["e",[1,1,1]],["f2",[.99186,.67393]],["f7",[.95041,1.08747]],["f11",[1.00962,.6435]],["icc",[.96422,.82521]]]);function pM(e){const t=BU.get(String(e).toLowerCase());if(!t)throw new Error("unknown Lab illuminant "+e);yr.labWhitePoint=e,yr.Xn=t[0],yr.Zn=t[1]}function RO(){return yr.labWhitePoint}const ag=(...e)=>{e=L1(e,"lab");const[t,n,o]=e,[M,c,b]=TU(t,n,o),[z,a,s]=dw(M,c,b);return[z,a,s,e.length>3?e[3]:1]},TU=(e,t,n)=>{const{kE:o,kK:M,kKE:c,Xn:b,Yn:z,Zn:a}=yr,s=(e+16)/116,u=.002*t+s,l=s-.005*n,A=u*u*u,d=l*l*l,W=A>o?A:(116*u-16)/M,g=e>c?Math.pow((e+16)/116,3):e/M,L=d>o?d:(116*l-16)/M,R=W*b,E=g*z,k=L*a;return[R,E,k]},Qh=e=>{const t=Math.sign(e);return e=Math.abs(e),(e<=.0031308?e*12.92:1.055*Math.pow(e,1/2.4)-.055)*t},dw=(e,t,n)=>{const{MtxAdaptMa:o,MtxAdaptMaI:M,MtxXYZ2RGB:c,RefWhiteRGB:b,Xn:z,Yn:a,Zn:s}=yr,u=z*o.m00+a*o.m10+s*o.m20,l=z*o.m01+a*o.m11+s*o.m21,A=z*o.m02+a*o.m12+s*o.m22,d=b.X*o.m00+b.Y*o.m10+b.Z*o.m20,W=b.X*o.m01+b.Y*o.m11+b.Z*o.m21,g=b.X*o.m02+b.Y*o.m12+b.Z*o.m22,L=(e*o.m00+t*o.m10+n*o.m20)*(d/u),R=(e*o.m01+t*o.m11+n*o.m21)*(W/l),E=(e*o.m02+t*o.m12+n*o.m22)*(g/A),k=L*M.m00+R*M.m10+E*M.m20,B=L*M.m01+R*M.m11+E*M.m21,I=L*M.m02+R*M.m12+E*M.m22,S=Qh(k*c.m00+B*c.m10+I*c.m20),N=Qh(k*c.m01+B*c.m11+I*c.m21),P=Qh(k*c.m02+B*c.m12+I*c.m22);return[S*255,N*255,P*255]},sg=(...e)=>{const[t,n,o,...M]=L1(e,"rgb"),[c,b,z]=qw(t,n,o),[a,s,u]=_U(c,b,z);return[a,s,u,...M.length>0&&M[0]<1?[M[0]]:[]]};function _U(e,t,n){const{Xn:o,Yn:M,Zn:c,kE:b,kK:z}=yr,a=e/o,s=t/M,u=n/c,l=a>b?Math.pow(a,1/3):(z*a+16)/116,A=s>b?Math.pow(s,1/3):(z*s+16)/116,d=u>b?Math.pow(u,1/3):(z*u+16)/116;return[116*A-16,500*(l-A),200*(A-d)]}function eW(e){const t=Math.sign(e);return e=Math.abs(e),(e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4))*t}const qw=(e,t,n)=>{e=eW(e/255),t=eW(t/255),n=eW(n/255);const{MtxRGB2XYZ:o,MtxAdaptMa:M,MtxAdaptMaI:c,Xn:b,Yn:z,Zn:a,As:s,Bs:u,Cs:l}=yr;let A=e*o.m00+t*o.m10+n*o.m20,d=e*o.m01+t*o.m11+n*o.m21,W=e*o.m02+t*o.m12+n*o.m22;const g=b*M.m00+z*M.m10+a*M.m20,L=b*M.m01+z*M.m11+a*M.m21,R=b*M.m02+z*M.m12+a*M.m22;let E=A*M.m00+d*M.m10+W*M.m20,k=A*M.m01+d*M.m11+W*M.m21,B=A*M.m02+d*M.m12+W*M.m22;return E*=g/s,k*=L/u,B*=R/l,A=E*c.m00+k*c.m10+B*c.m20,d=E*c.m01+k*c.m11+B*c.m21,W=E*c.m02+k*c.m12+B*c.m22,[A,d,W]};B0.prototype.lab=function(){return sg(this._rgb)};const EU=(...e)=>new B0(...e,"lab");Object.assign(_1,{lab:EU,getLabWhitePoint:RO,setLabWhitePoint:pM});m1.format.lab=ag;m1.autodetect.push({p:2,test:(...e)=>{if(e=L1(e,"lab"),E1(e)==="array"&&e.length===3)return"lab"}});B0.prototype.darken=function(e=1){const t=this,n=t.lab();return n[0]-=yr.Kn*e,new B0(n,"lab").alpha(t.alpha(),!0)};B0.prototype.brighten=function(e=1){return this.darken(-e)};B0.prototype.darker=B0.prototype.darken;B0.prototype.brighter=B0.prototype.brighten;B0.prototype.get=function(e){const[t,n]=e.split("."),o=this[t]();if(n){const M=t.indexOf(n)-(t.substr(0,2)==="ok"?2:0);if(M>-1)return o[M];throw new Error(`unknown channel ${n} in mode ${t}`)}else return o};const{pow:SU}=Math,kU=1e-7,XU=20;B0.prototype.luminance=function(e,t="rgb"){if(e!==void 0&&E1(e)==="number"){if(e===0)return new B0([0,0,0,this._rgb[3]],"rgb");if(e===1)return new B0([255,255,255,this._rgb[3]],"rgb");let n=this.luminance(),o=XU;const M=(b,z)=>{const a=b.interpolate(z,.5,t),s=a.luminance();return Math.abs(e-s)<kU||!o--?a:s>e?M(b,a):M(a,z)},c=(n>e?M(new B0([0,0,0]),this):M(this,new B0([255,255,255]))).rgb();return new B0([...c,this._rgb[3]])}return CU(...this._rgb.slice(0,3))};const CU=(e,t,n)=>(e=tW(e),t=tW(t),n=tW(n),.2126*e+.7152*t+.0722*n),tW=e=>(e/=255,e<=.03928?e/12.92:SU((e+.055)/1.055,2.4)),Wn={},gz=(e,t,n=.5,...o)=>{let M=o[0]||"lrgb";if(!Wn[M]&&!o.length&&(M=Object.keys(Wn)[0]),!Wn[M])throw new Error(`interpolation mode ${M} is not defined`);return E1(e)!=="object"&&(e=new B0(e)),E1(t)!=="object"&&(t=new B0(t)),Wn[M](e,t,n).alpha(e.alpha()+n*(t.alpha()-e.alpha()))};B0.prototype.mix=B0.prototype.interpolate=function(e,t=.5,...n){return gz(this,e,t,...n)};B0.prototype.premultiply=function(e=!1){const t=this._rgb,n=t[3];return e?(this._rgb=[t[0]*n,t[1]*n,t[2]*n,n],this):new B0([t[0]*n,t[1]*n,t[2]*n,n],"rgb")};const{sin:xU,cos:FU}=Math,hw=(...e)=>{let[t,n,o]=L1(e,"lch");return isNaN(o)&&(o=0),o=o*LU,[t,FU(o)*n,xU(o)*n]},Og=(...e)=>{e=L1(e,"lch");const[t,n,o]=e,[M,c,b]=hw(t,n,o),[z,a,s]=ag(M,c,b);return[z,a,s,e.length>3?e[3]:1]},IU=(...e)=>{const t=L1(e,"hcl").reverse();return Og(...t)},{sqrt:PU,atan2:UU,round:$U}=Math,Ww=(...e)=>{const[t,n,o]=L1(e,"lab"),M=PU(n*n+o*o);let c=(UU(o,n)*vU+360)%360;return $U(M*1e4)===0&&(c=Number.NaN),[t,M,c]},ug=(...e)=>{const[t,n,o,...M]=L1(e,"rgb"),[c,b,z]=sg(t,n,o),[a,s,u]=Ww(c,b,z);return[a,s,u,...M.length>0&&M[0]<1?[M[0]]:[]]};B0.prototype.lch=function(){return ug(this._rgb)};B0.prototype.hcl=function(){return ug(this._rgb).reverse()};const HU=(...e)=>new B0(...e,"lch"),YU=(...e)=>new B0(...e,"hcl");Object.assign(_1,{lch:HU,hcl:YU});m1.format.lch=Og;m1.format.hcl=IU;["lch","hcl"].forEach(e=>m1.autodetect.push({p:2,test:(...t)=>{if(t=L1(t,e),E1(t)==="array"&&t.length===3)return e}}));B0.prototype.saturate=function(e=1){const t=this,n=t.lch();return n[1]+=yr.Kn*e,n[1]<0&&(n[1]=0),new B0(n,"lch").alpha(t.alpha(),!0)};B0.prototype.desaturate=function(e=1){return this.saturate(-e)};B0.prototype.set=function(e,t,n=!1){const[o,M]=e.split("."),c=this[o]();if(M){const b=o.indexOf(M)-(o.substr(0,2)==="ok"?2:0);if(b>-1){if(E1(t)=="string")switch(t.charAt(0)){case"+":c[b]+=+t;break;case"-":c[b]+=+t;break;case"*":c[b]*=+t.substr(1);break;case"/":c[b]/=+t.substr(1);break;default:c[b]=+t}else if(E1(t)==="number")c[b]=t;else throw new Error("unsupported value for Color.set");const z=new B0(c,o);return n?(this._rgb=z._rgb,this):z}throw new Error(`unknown channel ${M} in mode ${o}`)}else return c};B0.prototype.tint=function(e=.5,...t){return gz(this,"white",e,...t)};B0.prototype.shade=function(e=.5,...t){return gz(this,"black",e,...t)};const jU=(e,t,n)=>{const o=e._rgb,M=t._rgb;return new B0(o[0]+n*(M[0]-o[0]),o[1]+n*(M[1]-o[1]),o[2]+n*(M[2]-o[2]),"rgb")};Wn.rgb=jU;const{sqrt:nW,pow:Fp}=Math,VU=(e,t,n)=>{const[o,M,c]=e._rgb,[b,z,a]=t._rgb;return new B0(nW(Fp(o,2)*(1-n)+Fp(b,2)*n),nW(Fp(M,2)*(1-n)+Fp(z,2)*n),nW(Fp(c,2)*(1-n)+Fp(a,2)*n),"rgb")};Wn.lrgb=VU;const GU=(e,t,n)=>{const o=e.lab(),M=t.lab();return new B0(o[0]+n*(M[0]-o[0]),o[1]+n*(M[1]-o[1]),o[2]+n*(M[2]-o[2]),"lab")};Wn.lab=GU;const Uz=(e,t,n,o)=>{let M,c;o==="hsl"?(M=e.hsl(),c=t.hsl()):o==="hsv"?(M=e.hsv(),c=t.hsv()):o==="hcg"?(M=e.hcg(),c=t.hcg()):o==="hsi"?(M=e.hsi(),c=t.hsi()):o==="lch"||o==="hcl"?(o="hcl",M=e.hcl(),c=t.hcl()):o==="oklch"&&(M=e.oklch().reverse(),c=t.oklch().reverse());let b,z,a,s,u,l;(o.substr(0,1)==="h"||o==="oklch")&&([b,a,u]=M,[z,s,l]=c);let A,d,W,g;return!isNaN(b)&&!isNaN(z)?(z>b&&z-b>180?g=z-(b+360):z<b&&b-z>180?g=z+360-b:g=z-b,d=b+n*g):isNaN(b)?isNaN(z)?d=Number.NaN:(d=z,(u==1||u==0)&&o!="hsv"&&(A=s)):(d=b,(l==1||l==0)&&o!="hsv"&&(A=a)),A===void 0&&(A=a+n*(s-a)),W=u+n*(l-u),o==="oklch"?new B0([W,A,d],o):new B0([d,A,W],o)},mw=(e,t,n)=>Uz(e,t,n,"lch");Wn.lch=mw;Wn.hcl=mw;const KU=e=>{if(E1(e)=="number"&&e>=0&&e<=16777215){const t=e>>16,n=e>>8&255,o=e&255;return[t,n,o,1]}throw new Error("unknown num color: "+e)},ZU=(...e)=>{const[t,n,o]=L1(e,"rgb");return(t<<16)+(n<<8)+o};B0.prototype.num=function(){return ZU(this._rgb)};const JU=(...e)=>new B0(...e,"num");Object.assign(_1,{num:JU});m1.format.num=KU;m1.autodetect.push({p:5,test:(...e)=>{if(e.length===1&&E1(e[0])==="number"&&e[0]>=0&&e[0]<=16777215)return"num"}});const QU=(e,t,n)=>{const o=e.num(),M=t.num();return new B0(o+n*(M-o),"num")};Wn.num=QU;const{floor:e$}=Math,t$=(...e)=>{e=L1(e,"hcg");let[t,n,o]=e,M,c,b;o=o*255;const z=n*255;if(n===0)M=c=b=o;else{t===360&&(t=0),t>360&&(t-=360),t<0&&(t+=360),t/=60;const a=e$(t),s=t-a,u=o*(1-n),l=u+z*(1-s),A=u+z*s,d=u+z;switch(a){case 0:[M,c,b]=[d,A,u];break;case 1:[M,c,b]=[l,d,u];break;case 2:[M,c,b]=[u,d,A];break;case 3:[M,c,b]=[u,l,d];break;case 4:[M,c,b]=[A,u,d];break;case 5:[M,c,b]=[d,u,l];break}}return[M,c,b,e.length>3?e[3]:1]},n$=(...e)=>{const[t,n,o]=L1(e,"rgb"),M=uw(t,n,o),c=lw(t,n,o),b=c-M,z=b*100/255,a=M/(255-b)*100;let s;return b===0?s=Number.NaN:(t===c&&(s=(n-o)/b),n===c&&(s=2+(o-t)/b),o===c&&(s=4+(t-n)/b),s*=60,s<0&&(s+=360)),[s,z,a]};B0.prototype.hcg=function(){return n$(this._rgb)};const o$=(...e)=>new B0(...e,"hcg");_1.hcg=o$;m1.format.hcg=t$;m1.autodetect.push({p:1,test:(...e)=>{if(e=L1(e,"hcg"),E1(e)==="array"&&e.length===3)return"hcg"}});const r$=(e,t,n)=>Uz(e,t,n,"hcg");Wn.hcg=r$;const{cos:Ip}=Math,M$=(...e)=>{e=L1(e,"hsi");let[t,n,o]=e,M,c,b;return isNaN(t)&&(t=0),isNaN(n)&&(n=0),t>360&&(t-=360),t<0&&(t+=360),t/=360,t<1/3?(b=(1-n)/3,M=(1+n*Ip(iM*t)/Ip(Jh-iM*t))/3,c=1-(b+M)):t<2/3?(t-=1/3,M=(1-n)/3,c=(1+n*Ip(iM*t)/Ip(Jh-iM*t))/3,b=1-(M+c)):(t-=2/3,c=(1-n)/3,b=(1+n*Ip(iM*t)/Ip(Jh-iM*t))/3,M=1-(c+b)),M=Zc(o*M*3),c=Zc(o*c*3),b=Zc(o*b*3),[M*255,c*255,b*255,e.length>3?e[3]:1]},{min:i$,sqrt:c$,acos:b$}=Math,p$=(...e)=>{let[t,n,o]=L1(e,"rgb");t/=255,n/=255,o/=255;let M;const c=i$(t,n,o),b=(t+n+o)/3,z=b>0?1-c/b:0;return z===0?M=NaN:(M=(t-n+(t-o))/2,M/=c$((t-n)*(t-n)+(t-o)*(n-o)),M=b$(M),o>n&&(M=iM-M),M/=iM),[M*360,z,b]};B0.prototype.hsi=function(){return p$(this._rgb)};const z$=(...e)=>new B0(...e,"hsi");_1.hsi=z$;m1.format.hsi=M$;m1.autodetect.push({p:2,test:(...e)=>{if(e=L1(e,"hsi"),E1(e)==="array"&&e.length===3)return"hsi"}});const a$=(e,t,n)=>Uz(e,t,n,"hsi");Wn.hsi=a$;const y6=(...e)=>{e=L1(e,"hsl");const[t,n,o]=e;let M,c,b;if(n===0)M=c=b=o*255;else{const z=[0,0,0],a=[0,0,0],s=o<.5?o*(1+n):o+n-o*n,u=2*o-s,l=t/360;z[0]=l+1/3,z[1]=l,z[2]=l-1/3;for(let A=0;A<3;A++)z[A]<0&&(z[A]+=1),z[A]>1&&(z[A]-=1),6*z[A]<1?a[A]=u+(s-u)*6*z[A]:2*z[A]<1?a[A]=s:3*z[A]<2?a[A]=u+(s-u)*(2/3-z[A])*6:a[A]=u;[M,c,b]=[a[0]*255,a[1]*255,a[2]*255]}return e.length>3?[M,c,b,e[3]]:[M,c,b,1]},gw=(...e)=>{e=L1(e,"rgba");let[t,n,o]=e;t/=255,n/=255,o/=255;const M=uw(t,n,o),c=lw(t,n,o),b=(c+M)/2;let z,a;return c===M?(z=0,a=Number.NaN):z=b<.5?(c-M)/(c+M):(c-M)/(2-c-M),t==c?a=(n-o)/(c-M):n==c?a=2+(o-t)/(c-M):o==c&&(a=4+(t-n)/(c-M)),a*=60,a<0&&(a+=360),e.length>3&&e[3]!==void 0?[a,z,b,e[3]]:[a,z,b]};B0.prototype.hsl=function(){return gw(this._rgb)};const s$=(...e)=>new B0(...e,"hsl");_1.hsl=s$;m1.format.hsl=y6;m1.autodetect.push({p:2,test:(...e)=>{if(e=L1(e,"hsl"),E1(e)==="array"&&e.length===3)return"hsl"}});const O$=(e,t,n)=>Uz(e,t,n,"hsl");Wn.hsl=O$;const{floor:u$}=Math,l$=(...e)=>{e=L1(e,"hsv");let[t,n,o]=e,M,c,b;if(o*=255,n===0)M=c=b=o;else{t===360&&(t=0),t>360&&(t-=360),t<0&&(t+=360),t/=60;const z=u$(t),a=t-z,s=o*(1-n),u=o*(1-n*a),l=o*(1-n*(1-a));switch(z){case 0:[M,c,b]=[o,l,s];break;case 1:[M,c,b]=[u,o,s];break;case 2:[M,c,b]=[s,o,l];break;case 3:[M,c,b]=[s,u,o];break;case 4:[M,c,b]=[l,s,o];break;case 5:[M,c,b]=[o,s,u];break}}return[M,c,b,e.length>3?e[3]:1]},{min:A$,max:f$}=Math,d$=(...e)=>{e=L1(e,"rgb");let[t,n,o]=e;const M=A$(t,n,o),c=f$(t,n,o),b=c-M;let z,a,s;return s=c/255,c===0?(z=Number.NaN,a=0):(a=b/c,t===c&&(z=(n-o)/b),n===c&&(z=2+(o-t)/b),o===c&&(z=4+(t-n)/b),z*=60,z<0&&(z+=360)),[z,a,s]};B0.prototype.hsv=function(){return d$(this._rgb)};const q$=(...e)=>new B0(...e,"hsv");_1.hsv=q$;m1.format.hsv=l$;m1.autodetect.push({p:2,test:(...e)=>{if(e=L1(e,"hsv"),E1(e)==="array"&&e.length===3)return"hsv"}});const h$=(e,t,n)=>Uz(e,t,n,"hsv");Wn.hsv=h$;function SA(e,t){let n=e.length;Array.isArray(e[0])||(e=[e]),Array.isArray(t[0])||(t=t.map(b=>[b]));let o=t[0].length,M=t[0].map((b,z)=>t.map(a=>a[z])),c=e.map(b=>M.map(z=>Array.isArray(b)?b.reduce((a,s,u)=>a+s*(z[u]||0),0):z.reduce((a,s)=>a+s*b,0)));return n===1&&(c=c[0]),o===1?c.map(b=>b[0]):c}const lg=(...e)=>{e=L1(e,"lab");const[t,n,o,...M]=e,[c,b,z]=W$([t,n,o]),[a,s,u]=dw(c,b,z);return[a,s,u,...M.length>0&&M[0]<1?[M[0]]:[]]};function W$(e){var t=[[1.2268798758459243,-.5578149944602171,.2813910456659647],[-.0405757452148008,1.112286803280317,-.0717110580655164],[-.0763729366746601,-.4214933324022432,1.5869240198367816]],n=[[1,.3963377773761749,.2158037573099136],[1,-.1055613458156586,-.0638541728258133],[1,-.0894841775298119,-1.2914855480194092]],o=SA(n,e);return SA(t,o.map(M=>M**3))}const Ag=(...e)=>{const[t,n,o,...M]=L1(e,"rgb"),c=qw(t,n,o);return[...m$(c),...M.length>0&&M[0]<1?[M[0]]:[]]};function m$(e){const t=[[.819022437996703,.3619062600528904,-.1288737815209879],[.0329836539323885,.9292868615863434,.0361446663506424],[.0481771893596242,.2642395317527308,.6335478284694309]],n=[[.210454268309314,.7936177747023054,-.0040720430116193],[1.9779985324311684,-2.42859224204858,.450593709617411],[.0259040424655478,.7827717124575296,-.8086757549230774]],o=SA(t,e);return SA(n,o.map(M=>Math.cbrt(M)))}B0.prototype.oklab=function(){return Ag(this._rgb)};const g$=(...e)=>new B0(...e,"oklab");Object.assign(_1,{oklab:g$});m1.format.oklab=lg;m1.autodetect.push({p:2,test:(...e)=>{if(e=L1(e,"oklab"),E1(e)==="array"&&e.length===3)return"oklab"}});const R$=(e,t,n)=>{const o=e.oklab(),M=t.oklab();return new B0(o[0]+n*(M[0]-o[0]),o[1]+n*(M[1]-o[1]),o[2]+n*(M[2]-o[2]),"oklab")};Wn.oklab=R$;const y$=(e,t,n)=>Uz(e,t,n,"oklch");Wn.oklch=y$;const{pow:oW,sqrt:rW,PI:MW,cos:zy,sin:ay,atan2:L$}=Math,v$=(e,t="lrgb",n=null)=>{const o=e.length;n||(n=Array.from(new Array(o)).map(()=>1));const M=o/n.reduce(function(l,A){return l+A});if(n.forEach((l,A)=>{n[A]*=M}),e=e.map(l=>new B0(l)),t==="lrgb")return N$(e,n);const c=e.shift(),b=c.get(t),z=[];let a=0,s=0;for(let l=0;l<b.length;l++)if(b[l]=(b[l]||0)*n[0],z.push(isNaN(b[l])?0:n[0]),t.charAt(l)==="h"&&!isNaN(b[l])){const A=b[l]/180*MW;a+=zy(A)*n[0],s+=ay(A)*n[0]}let u=c.alpha()*n[0];e.forEach((l,A)=>{const d=l.get(t);u+=l.alpha()*n[A+1];for(let W=0;W<b.length;W++)if(!isNaN(d[W]))if(z[W]+=n[A+1],t.charAt(W)==="h"){const g=d[W]/180*MW;a+=zy(g)*n[A+1],s+=ay(g)*n[A+1]}else b[W]+=d[W]*n[A+1]});for(let l=0;l<b.length;l++)if(t.charAt(l)==="h"){let A=L$(s/z[l],a/z[l])/MW*180;for(;A<0;)A+=360;for(;A>=360;)A-=360;b[l]=A}else b[l]=b[l]/z[l];return u/=o,new B0(b,t).alpha(u>.99999?1:u,!0)},N$=(e,t)=>{const n=e.length,o=[0,0,0,0];for(let M=0;M<e.length;M++){const c=e[M],b=t[M]/n,z=c._rgb;o[0]+=oW(z[0],2)*b,o[1]+=oW(z[1],2)*b,o[2]+=oW(z[2],2)*b,o[3]+=z[3]*b}return o[0]=rW(o[0]),o[1]=rW(o[1]),o[2]=rW(o[2]),o[3]>.9999999&&(o[3]=1),new B0(zg(o))},{pow:w$}=Math;function kA(e){let t="rgb",n=_1("#ccc"),o=0,M=[0,1],c=[],b=[0,0],z=!1,a=[],s=!1,u=0,l=1,A=!1,d={},W=!0,g=1;const L=function(N){if(N=N||["#fff","#000"],N&&E1(N)==="string"&&_1.brewer&&_1.brewer[N.toLowerCase()]&&(N=_1.brewer[N.toLowerCase()]),E1(N)==="array"){N.length===1&&(N=[N[0],N[0]]),N=N.slice(0);for(let P=0;P<N.length;P++)N[P]=_1(N[P]);c.length=0;for(let P=0;P<N.length;P++)c.push(P/(N.length-1))}return I(),a=N},R=function(N){if(z!=null){const P=z.length-1;let J=0;for(;J<P&&N>=z[J];)J++;return J-1}return 0};let E=N=>N,k=N=>N;const B=function(N,P){let J,K;if(P==null&&(P=!1),isNaN(N)||N===null)return n;P?K=N:z&&z.length>2?K=R(N)/(z.length-2):l!==u?K=(N-u)/(l-u):K=1,K=k(K),P||(K=E(K)),g!==1&&(K=w$(K,g)),K=b[0]+K*(1-b[0]-b[1]),K=Zc(K,0,1);const V=Math.floor(K*1e4);if(W&&d[V])J=d[V];else{if(E1(a)==="array")for(let x=0;x<c.length;x++){const e0=c[x];if(K<=e0){J=a[x];break}if(K>=e0&&x===c.length-1){J=a[x];break}if(K>e0&&K<c[x+1]){K=(K-e0)/(c[x+1]-e0),J=_1.interpolate(a[x],a[x+1],K,t);break}}else E1(a)==="function"&&(J=a(K));W&&(d[V]=J)}return J};var I=()=>d={};L(e);const S=function(N){const P=_1(B(N));return s&&P[s]?P[s]():P};return S.classes=function(N){if(N!=null){if(E1(N)==="array")z=N,M=[N[0],N[N.length-1]];else{const P=_1.analyze(M);N===0?z=[P.min,P.max]:z=_1.limits(P,"e",N)}return S}return z},S.domain=function(N){if(!arguments.length)return M;u=N[0],l=N[N.length-1],c=[];const P=a.length;if(N.length===P&&u!==l)for(let J of Array.from(N))c.push((J-u)/(l-u));else{for(let J=0;J<P;J++)c.push(J/(P-1));if(N.length>2){const J=N.map((V,x)=>x/(N.length-1)),K=N.map(V=>(V-u)/(l-u));K.every((V,x)=>J[x]===V)||(k=V=>{if(V<=0||V>=1)return V;let x=0;for(;V>=K[x+1];)x++;const e0=(V-K[x])/(K[x+1]-K[x]);return J[x]+e0*(J[x+1]-J[x])})}}return M=[u,l],S},S.mode=function(N){return arguments.length?(t=N,I(),S):t},S.range=function(N,P){return L(N),S},S.out=function(N){return s=N,S},S.spread=function(N){return arguments.length?(o=N,S):o},S.correctLightness=function(N){return N==null&&(N=!0),A=N,I(),A?E=function(P){const J=B(0,!0).lab()[0],K=B(1,!0).lab()[0],V=J>K;let x=B(P,!0).lab()[0];const e0=J+(K-J)*P;let Z=x-e0,j=0,t0=1,O0=20;for(;Math.abs(Z)>.01&&O0-- >0;)(function(){return V&&(Z*=-1),Z<0?(j=P,P+=(t0-P)*.5):(t0=P,P+=(j-P)*.5),x=B(P,!0).lab()[0],Z=x-e0})();return P}:E=P=>P,S},S.padding=function(N){return N!=null?(E1(N)==="number"&&(N=[N,N]),b=N,S):b},S.colors=function(N,P){arguments.length<2&&(P="hex");let J=[];if(arguments.length===0)J=a.slice(0);else if(N===1)J=[S(.5)];else if(N>1){const K=M[0],V=M[1]-K;J=D$(0,N).map(x=>S(K+x/(N-1)*V))}else{e=[];let K=[];if(z&&z.length>2)for(let V=1,x=z.length,e0=1<=x;e0?V<x:V>x;e0?V++:V--)K.push((z[V-1]+z[V])*.5);else K=M;J=K.map(V=>S(V))}return _1[P]&&(J=J.map(K=>K[P]())),J},S.cache=function(N){return N!=null?(W=N,S):W},S.gamma=function(N){return N!=null?(g=N,S):g},S.nodata=function(N){return N!=null?(n=_1(N),S):n},S}function D$(e,t,n){let o=[],M=e<t,c=t;for(let b=e;M?b<c:b>c;M?b++:b--)o.push(b);return o}const B$=function(e){let t=[1,1];for(let n=1;n<e;n++){let o=[1];for(let M=1;M<=t.length;M++)o[M]=(t[M]||0)+t[M-1];t=o}return t},T$=function(e){let t,n,o,M;if(e=e.map(c=>new B0(c)),e.length===2)[n,o]=e.map(c=>c.lab()),t=function(c){const b=[0,1,2].map(z=>n[z]+c*(o[z]-n[z]));return new B0(b,"lab")};else if(e.length===3)[n,o,M]=e.map(c=>c.lab()),t=function(c){const b=[0,1,2].map(z=>(1-c)*(1-c)*n[z]+2*(1-c)*c*o[z]+c*c*M[z]);return new B0(b,"lab")};else if(e.length===4){let c;[n,o,M,c]=e.map(b=>b.lab()),t=function(b){const z=[0,1,2].map(a=>(1-b)*(1-b)*(1-b)*n[a]+3*(1-b)*(1-b)*b*o[a]+3*(1-b)*b*b*M[a]+b*b*b*c[a]);return new B0(z,"lab")}}else if(e.length>=5){let c,b,z;c=e.map(a=>a.lab()),z=e.length-1,b=B$(z),t=function(a){const s=1-a,u=[0,1,2].map(l=>c.reduce((A,d,W)=>A+b[W]*s**(z-W)*a**W*d[l],0));return new B0(u,"lab")}}else throw new RangeError("No point in running bezier with only one color.");return t},_$=e=>{const t=T$(e);return t.scale=()=>kA(t),t},{round:Rw}=Math;B0.prototype.rgb=function(e=!0){return e===!1?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Rw)};B0.prototype.rgba=function(e=!0){return this._rgb.slice(0,4).map((t,n)=>n<3?e===!1?t:Rw(t):t)};const E$=(...e)=>new B0(...e,"rgb");Object.assign(_1,{rgb:E$});m1.format.rgb=(...e)=>{const t=L1(e,"rgba");return t[3]===void 0&&(t[3]=1),t};m1.autodetect.push({p:3,test:(...e)=>{if(e=L1(e,"rgba"),E1(e)==="array"&&(e.length===3||e.length===4&&E1(e[3])=="number"&&e[3]>=0&&e[3]<=1))return"rgb"}});const $o=(e,t,n)=>{if(!$o[n])throw new Error("unknown blend mode "+n);return $o[n](e,t)},Vi=e=>(t,n)=>{const o=_1(n).rgb(),M=_1(t).rgb();return _1.rgb(e(o,M))},Gi=e=>(t,n)=>{const o=[];return o[0]=e(t[0],n[0]),o[1]=e(t[1],n[1]),o[2]=e(t[2],n[2]),o},S$=e=>e,k$=(e,t)=>e*t/255,X$=(e,t)=>e>t?t:e,C$=(e,t)=>e>t?e:t,x$=(e,t)=>255*(1-(1-e/255)*(1-t/255)),F$=(e,t)=>t<128?2*e*t/255:255*(1-2*(1-e/255)*(1-t/255)),I$=(e,t)=>255*(1-(1-t/255)/(e/255)),P$=(e,t)=>e===255?255:(e=255*(t/255)/(1-e/255),e>255?255:e);$o.normal=Vi(Gi(S$));$o.multiply=Vi(Gi(k$));$o.screen=Vi(Gi(x$));$o.overlay=Vi(Gi(F$));$o.darken=Vi(Gi(X$));$o.lighten=Vi(Gi(C$));$o.dodge=Vi(Gi(P$));$o.burn=Vi(Gi(I$));const{pow:U$,sin:$$,cos:H$}=Math;function Y$(e=300,t=-1.5,n=1,o=1,M=[0,1]){let c=0,b;E1(M)==="array"?b=M[1]-M[0]:(b=0,M=[M,M]);const z=function(a){const s=iM*((e+120)/360+t*a),u=U$(M[0]+b*a,o),A=(c!==0?n[0]+a*c:n)*u*(1-u)/2,d=H$(s),W=$$(s),g=u+A*(-.14861*d+1.78277*W),L=u+A*(-.29227*d-.90649*W),R=u+A*(1.97294*d);return _1(zg([g*255,L*255,R*255,1]))};return z.start=function(a){return a==null?e:(e=a,z)},z.rotations=function(a){return a==null?t:(t=a,z)},z.gamma=function(a){return a==null?o:(o=a,z)},z.hue=function(a){return a==null?n:(n=a,E1(n)==="array"?(c=n[1]-n[0],c===0&&(n=n[1])):c=0,z)},z.lightness=function(a){return a==null?M:(E1(a)==="array"?(M=a,b=a[1]-a[0]):(M=[a,a],b=0),z)},z.scale=()=>_1.scale(z),z.hue(n),z}const j$="0123456789abcdef",{floor:V$,random:G$}=Math,K$=()=>{let e="#";for(let t=0;t<6;t++)e+=j$.charAt(V$(G$()*16));return new B0(e,"hex")},{log:sy,pow:Z$,floor:J$,abs:Q$}=Math;function yw(e,t=null){const n={min:Number.MAX_VALUE,max:Number.MAX_VALUE*-1,sum:0,values:[],count:0};return E1(e)==="object"&&(e=Object.values(e)),e.forEach(o=>{t&&E1(o)==="object"&&(o=o[t]),o!=null&&!isNaN(o)&&(n.values.push(o),n.sum+=o,o<n.min&&(n.min=o),o>n.max&&(n.max=o),n.count+=1)}),n.domain=[n.min,n.max],n.limits=(o,M)=>Lw(n,o,M),n}function Lw(e,t="equal",n=7){E1(e)=="array"&&(e=yw(e));const{min:o,max:M}=e,c=e.values.sort((z,a)=>z-a);if(n===1)return[o,M];const b=[];if(t.substr(0,1)==="c"&&(b.push(o),b.push(M)),t.substr(0,1)==="e"){b.push(o);for(let z=1;z<n;z++)b.push(o+z/n*(M-o));b.push(M)}else if(t.substr(0,1)==="l"){if(o<=0)throw new Error("Logarithmic scales are only possible for values > 0");const z=Math.LOG10E*sy(o),a=Math.LOG10E*sy(M);b.push(o);for(let s=1;s<n;s++)b.push(Z$(10,z+s/n*(a-z)));b.push(M)}else if(t.substr(0,1)==="q"){b.push(o);for(let z=1;z<n;z++){const a=(c.length-1)*z/n,s=J$(a);if(s===a)b.push(c[s]);else{const u=a-s;b.push(c[s]*(1-u)+c[s+1]*u)}}b.push(M)}else if(t.substr(0,1)==="k"){let z;const a=c.length,s=new Array(a),u=new Array(n);let l=!0,A=0,d=null;d=[],d.push(o);for(let L=1;L<n;L++)d.push(o+L/n*(M-o));for(d.push(M);l;){for(let R=0;R<n;R++)u[R]=0;for(let R=0;R<a;R++){const E=c[R];let k=Number.MAX_VALUE,B;for(let I=0;I<n;I++){const S=Q$(d[I]-E);S<k&&(k=S,B=I),u[B]++,s[R]=B}}const L=new Array(n);for(let R=0;R<n;R++)L[R]=null;for(let R=0;R<a;R++)z=s[R],L[z]===null?L[z]=c[R]:L[z]+=c[R];for(let R=0;R<n;R++)L[R]*=1/u[R];l=!1;for(let R=0;R<n;R++)if(L[R]!==d[R]){l=!0;break}d=L,A++,A>200&&(l=!1)}const W={};for(let L=0;L<n;L++)W[L]=[];for(let L=0;L<a;L++)z=s[L],W[z].push(c[L]);let g=[];for(let L=0;L<n;L++)g.push(W[L][0]),g.push(W[L][W[L].length-1]);g=g.sort((L,R)=>L-R),b.push(g[0]);for(let L=1;L<g.length;L+=2){const R=g[L];!isNaN(R)&&b.indexOf(R)===-1&&b.push(R)}}return b}const eH=(e,t)=>{e=new B0(e),t=new B0(t);const n=e.luminance(),o=t.luminance();return n>o?(n+.05)/(o+.05):(o+.05)/(n+.05)};/** + * @license + * + * The APCA contrast prediction algorithm is based of the formulas published + * in the APCA-1.0.98G specification by Myndex. The specification is available at: + * https://raw.githubusercontent.com/Myndex/apca-w3/master/images/APCAw3_0.1.17_APCA0.0.98G.svg + * + * Note that the APCA implementation is still beta, so please update to + * future versions of chroma.js when they become available. + * + * You can read more about the APCA Readability Criterion at + * https://readtech.org/ARC/ + */const Oy=.027,tH=5e-4,nH=.1,uy=1.14,El=.022,ly=1.414,oH=(e,t)=>{e=new B0(e),t=new B0(t),e.alpha()<1&&(e=gz(t,e,e.alpha(),"rgb"));const n=Ay(...e.rgb()),o=Ay(...t.rgb()),M=n>=El?n:n+Math.pow(El-n,ly),c=o>=El?o:o+Math.pow(El-o,ly),b=Math.pow(c,.56)-Math.pow(M,.57),z=Math.pow(c,.65)-Math.pow(M,.62),a=Math.abs(c-M)<tH?0:M<c?b*uy:z*uy;return(Math.abs(a)<nH?0:a>0?a-Oy:a+Oy)*100};function Ay(e,t,n){return .2126729*Math.pow(e/255,2.4)+.7151522*Math.pow(t/255,2.4)+.072175*Math.pow(n/255,2.4)}const{sqrt:Jr,pow:qt,min:rH,max:MH,atan2:fy,abs:dy,cos:Sl,sin:qy,exp:iH,PI:hy}=Math;function cH(e,t,n=1,o=1,M=1){var c=function(_){return 360*_/(2*hy)},b=function(_){return 2*hy*_/360};e=new B0(e),t=new B0(t);const[z,a,s]=Array.from(e.lab()),[u,l,A]=Array.from(t.lab()),d=(z+u)/2,W=Jr(qt(a,2)+qt(s,2)),g=Jr(qt(l,2)+qt(A,2)),L=(W+g)/2,R=.5*(1-Jr(qt(L,7)/(qt(L,7)+qt(25,7)))),E=a*(1+R),k=l*(1+R),B=Jr(qt(E,2)+qt(s,2)),I=Jr(qt(k,2)+qt(A,2)),S=(B+I)/2,N=c(fy(s,E)),P=c(fy(A,k)),J=N>=0?N:N+360,K=P>=0?P:P+360,V=dy(J-K)>180?(J+K+360)/2:(J+K)/2,x=1-.17*Sl(b(V-30))+.24*Sl(b(2*V))+.32*Sl(b(3*V+6))-.2*Sl(b(4*V-63));let e0=K-J;e0=dy(e0)<=180?e0:K<=J?e0+360:e0-360,e0=2*Jr(B*I)*qy(b(e0)/2);const Z=u-z,j=I-B,t0=1+.015*qt(d-50,2)/Jr(20+qt(d-50,2)),O0=1+.045*S,m0=1+.015*S*x,q0=30*iH(-qt((V-275)/25,2)),z0=-(2*Jr(qt(S,7)/(qt(S,7)+qt(25,7))))*qy(2*b(q0)),d0=Jr(qt(Z/(n*t0),2)+qt(j/(o*O0),2)+qt(e0/(M*m0),2)+z0*(j/(o*O0))*(e0/(M*m0)));return MH(0,rH(100,d0))}function bH(e,t,n="lab"){e=new B0(e),t=new B0(t);const o=e.get(n),M=t.get(n);let c=0;for(let b in o){const z=(o[b]||0)-(M[b]||0);c+=z*z}return Math.sqrt(c)}const pH=(...e)=>{try{return new B0(...e),!0}catch{return!1}},zH={cool(){return kA([_1.hsl(180,1,.9),_1.hsl(250,.7,.4)])},hot(){return kA(["#000","#f00","#ff0","#fff"]).mode("rgb")}},L6={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"],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"],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"]},vw=Object.keys(L6),Wy=new Map(vw.map(e=>[e.toLowerCase(),e])),aH=typeof Proxy=="function"?new Proxy(L6,{get(e,t){const n=t.toLowerCase();if(Wy.has(n))return e[Wy.get(n)]},getOwnPropertyNames(){return Object.getOwnPropertyNames(vw)}}):L6,sH=(...e)=>{e=L1(e,"cmyk");const[t,n,o,M]=e,c=e.length>4?e[4]:1;return M===1?[0,0,0,c]:[t>=1?0:255*(1-t)*(1-M),n>=1?0:255*(1-n)*(1-M),o>=1?0:255*(1-o)*(1-M),c]},{max:my}=Math,OH=(...e)=>{let[t,n,o]=L1(e,"rgb");t=t/255,n=n/255,o=o/255;const M=1-my(t,my(n,o)),c=M<1?1/(1-M):0,b=(1-t-M)*c,z=(1-n-M)*c,a=(1-o-M)*c;return[b,z,a,M]};B0.prototype.cmyk=function(){return OH(this._rgb)};const uH=(...e)=>new B0(...e,"cmyk");Object.assign(_1,{cmyk:uH});m1.format.cmyk=sH;m1.autodetect.push({p:2,test:(...e)=>{if(e=L1(e,"cmyk"),E1(e)==="array"&&e.length===4)return"cmyk"}});const lH=(...e)=>{const t=L1(e,"hsla");let n=Pz(e)||"lsa";return t[0]=oo(t[0]||0)+"deg",t[1]=oo(t[1]*100)+"%",t[2]=oo(t[2]*100)+"%",n==="hsla"||t.length>3&&t[3]<1?(t[3]="/ "+(t.length>3?t[3]:1),n="hsla"):t.length=3,`${n.substr(0,3)}(${t.join(" ")})`},AH=(...e)=>{const t=L1(e,"lab");let n=Pz(e)||"lab";return t[0]=oo(t[0])+"%",t[1]=oo(t[1]),t[2]=oo(t[2]),n==="laba"||t.length>3&&t[3]<1?t[3]="/ "+(t.length>3?t[3]:1):t.length=3,`lab(${t.join(" ")})`},fH=(...e)=>{const t=L1(e,"lch");let n=Pz(e)||"lab";return t[0]=oo(t[0])+"%",t[1]=oo(t[1]),t[2]=isNaN(t[2])?"none":oo(t[2])+"deg",n==="lcha"||t.length>3&&t[3]<1?t[3]="/ "+(t.length>3?t[3]:1):t.length=3,`lch(${t.join(" ")})`},dH=(...e)=>{const t=L1(e,"lab");return t[0]=oo(t[0]*100)+"%",t[1]=R6(t[1]),t[2]=R6(t[2]),t.length>3&&t[3]<1?t[3]="/ "+(t.length>3?t[3]:1):t.length=3,`oklab(${t.join(" ")})`},Nw=(...e)=>{const[t,n,o,...M]=L1(e,"rgb"),[c,b,z]=Ag(t,n,o),[a,s,u]=Ww(c,b,z);return[a,s,u,...M.length>0&&M[0]<1?[M[0]]:[]]},qH=(...e)=>{const t=L1(e,"lch");return t[0]=oo(t[0]*100)+"%",t[1]=R6(t[1]),t[2]=isNaN(t[2])?"none":oo(t[2])+"deg",t.length>3&&t[3]<1?t[3]="/ "+(t.length>3?t[3]:1):t.length=3,`oklch(${t.join(" ")})`},{round:iW}=Math,hH=(...e)=>{const t=L1(e,"rgba");let n=Pz(e)||"rgb";if(n.substr(0,3)==="hsl")return lH(gw(t),n);if(n.substr(0,3)==="lab"){const o=RO();pM("d50");const M=AH(sg(t),n);return pM(o),M}if(n.substr(0,3)==="lch"){const o=RO();pM("d50");const M=fH(ug(t),n);return pM(o),M}return n.substr(0,5)==="oklab"?dH(Ag(t)):n.substr(0,5)==="oklch"?qH(Nw(t)):(t[0]=iW(t[0]),t[1]=iW(t[1]),t[2]=iW(t[2]),(n==="rgba"||t.length>3&&t[3]<1)&&(t[3]="/ "+(t.length>3?t[3]:1),n="rgba"),`${n.substr(0,3)}(${t.slice(0,n==="rgb"?3:4).join(" ")})`)},ww=(...e)=>{e=L1(e,"lch");const[t,n,o,...M]=e,[c,b,z]=hw(t,n,o),[a,s,u]=lg(c,b,z);return[a,s,u,...M.length>0&&M[0]<1?[M[0]]:[]]},AM=/((?:-?\d+)|(?:-?\d+(?:\.\d+)?)%|none)/.source,Fo=/((?:-?(?:\d+(?:\.\d*)?|\.\d+)%?)|none)/.source,XA=/((?:-?(?:\d+(?:\.\d*)?|\.\d+)%)|none)/.source,io=/\s*/.source,$z=/\s+/.source,fg=/\s*,\s*/.source,Cf=/((?:-?(?:\d+(?:\.\d*)?|\.\d+)(?:deg)?)|none)/.source,Hz=/\s*(?:\/\s*((?:[01]|[01]?\.\d+)|\d+(?:\.\d+)?%))?/.source,Dw=new RegExp("^rgba?\\("+io+[AM,AM,AM].join($z)+Hz+"\\)$"),Bw=new RegExp("^rgb\\("+io+[AM,AM,AM].join(fg)+io+"\\)$"),Tw=new RegExp("^rgba\\("+io+[AM,AM,AM,Fo].join(fg)+io+"\\)$"),_w=new RegExp("^hsla?\\("+io+[Cf,XA,XA].join($z)+Hz+"\\)$"),Ew=new RegExp("^hsl?\\("+io+[Cf,XA,XA].join(fg)+io+"\\)$"),Sw=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,kw=new RegExp("^lab\\("+io+[Fo,Fo,Fo].join($z)+Hz+"\\)$"),Xw=new RegExp("^lch\\("+io+[Fo,Fo,Cf].join($z)+Hz+"\\)$"),Cw=new RegExp("^oklab\\("+io+[Fo,Fo,Fo].join($z)+Hz+"\\)$"),xw=new RegExp("^oklch\\("+io+[Fo,Fo,Cf].join($z)+Hz+"\\)$"),{round:Fw}=Math,Pp=e=>e.map((t,n)=>n<=2?Zc(Fw(t),0,255):t),ht=(e,t=0,n=100,o=!1)=>(typeof e=="string"&&e.endsWith("%")&&(e=parseFloat(e.substring(0,e.length-1))/100,o?e=t+(e+1)*.5*(n-t):e=t+e*(n-t)),+e),kn=(e,t)=>e==="none"?t:e,dg=e=>{if(e=e.toLowerCase().trim(),e==="transparent")return[0,0,0,0];let t;if(m1.format.named)try{return m1.format.named(e)}catch{}if((t=e.match(Dw))||(t=e.match(Bw))){let n=t.slice(1,4);for(let M=0;M<3;M++)n[M]=+ht(kn(n[M],0),0,255);n=Pp(n);const o=t[4]!==void 0?+ht(t[4],0,1):1;return n[3]=o,n}if(t=e.match(Tw)){const n=t.slice(1,5);for(let o=0;o<4;o++)n[o]=+ht(n[o],0,255);return n}if((t=e.match(_w))||(t=e.match(Ew))){const n=t.slice(1,4);n[0]=+kn(n[0].replace("deg",""),0),n[1]=+ht(kn(n[1],0),0,100)*.01,n[2]=+ht(kn(n[2],0),0,100)*.01;const o=Pp(y6(n)),M=t[4]!==void 0?+ht(t[4],0,1):1;return o[3]=M,o}if(t=e.match(Sw)){const n=t.slice(1,4);n[1]*=.01,n[2]*=.01;const o=y6(n);for(let M=0;M<3;M++)o[M]=Fw(o[M]);return o[3]=+t[4],o}if(t=e.match(kw)){const n=t.slice(1,4);n[0]=ht(kn(n[0],0),0,100),n[1]=ht(kn(n[1],0),-125,125,!0),n[2]=ht(kn(n[2],0),-125,125,!0);const o=RO();pM("d50");const M=Pp(ag(n));pM(o);const c=t[4]!==void 0?+ht(t[4],0,1):1;return M[3]=c,M}if(t=e.match(Xw)){const n=t.slice(1,4);n[0]=ht(n[0],0,100),n[1]=ht(kn(n[1],0),0,150,!1),n[2]=+kn(n[2].replace("deg",""),0);const o=RO();pM("d50");const M=Pp(Og(n));pM(o);const c=t[4]!==void 0?+ht(t[4],0,1):1;return M[3]=c,M}if(t=e.match(Cw)){const n=t.slice(1,4);n[0]=ht(kn(n[0],0),0,1),n[1]=ht(kn(n[1],0),-.4,.4,!0),n[2]=ht(kn(n[2],0),-.4,.4,!0);const o=Pp(lg(n)),M=t[4]!==void 0?+ht(t[4],0,1):1;return o[3]=M,o}if(t=e.match(xw)){const n=t.slice(1,4);n[0]=ht(kn(n[0],0),0,1),n[1]=ht(kn(n[1],0),0,.4,!1),n[2]=+kn(n[2].replace("deg",""),0);const o=Pp(ww(n)),M=t[4]!==void 0?+ht(t[4],0,1):1;return o[3]=M,o}};dg.test=e=>Dw.test(e)||_w.test(e)||kw.test(e)||Xw.test(e)||Cw.test(e)||xw.test(e)||Bw.test(e)||Tw.test(e)||Ew.test(e)||Sw.test(e)||e==="transparent";B0.prototype.css=function(e){return hH(this._rgb,e)};const WH=(...e)=>new B0(...e,"css");_1.css=WH;m1.format.css=dg;m1.autodetect.push({p:5,test:(e,...t)=>{if(!t.length&&E1(e)==="string"&&dg.test(e))return"css"}});m1.format.gl=(...e)=>{const t=L1(e,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t};const mH=(...e)=>new B0(...e,"gl");_1.gl=mH;B0.prototype.gl=function(){const e=this._rgb;return[e[0]/255,e[1]/255,e[2]/255,e[3]]};B0.prototype.hex=function(e){return fw(this._rgb,e)};const gH=(...e)=>new B0(...e,"hex");_1.hex=gH;m1.format.hex=Aw;m1.autodetect.push({p:4,test:(e,...t)=>{if(!t.length&&E1(e)==="string"&&[3,4,5,6,7,8,9].indexOf(e.length)>=0)return"hex"}});const{log:kl}=Math,Iw=e=>{const t=e/100;let n,o,M;return t<66?(n=255,o=t<6?0:-155.25485562709179-.44596950469579133*(o=t-2)+104.49216199393888*kl(o),M=t<20?0:-254.76935184120902+.8274096064007395*(M=t-10)+115.67994401066147*kl(M)):(n=351.97690566805693+.114206453784165*(n=t-55)-40.25366309332127*kl(n),o=325.4494125711974+.07943456536662342*(o=t-50)-28.0852963507957*kl(o),M=255),[n,o,M,1]},{round:RH}=Math,yH=(...e)=>{const t=L1(e,"rgb"),n=t[0],o=t[2];let M=1e3,c=4e4;const b=.4;let z;for(;c-M>b;){z=(c+M)*.5;const a=Iw(z);a[2]/a[0]>=o/n?c=z:M=z}return RH(z)};B0.prototype.temp=B0.prototype.kelvin=B0.prototype.temperature=function(){return yH(this._rgb)};const cW=(...e)=>new B0(...e,"temp");Object.assign(_1,{temp:cW,kelvin:cW,temperature:cW});m1.format.temp=m1.format.kelvin=m1.format.temperature=Iw;B0.prototype.oklch=function(){return Nw(this._rgb)};const LH=(...e)=>new B0(...e,"oklch");Object.assign(_1,{oklch:LH});m1.format.oklch=ww;m1.autodetect.push({p:2,test:(...e)=>{if(e=L1(e,"oklch"),E1(e)==="array"&&e.length===3)return"oklch"}});Object.assign(_1,{analyze:yw,average:v$,bezier:_$,blend:$o,brewer:aH,Color:B0,colors:mz,contrast:eH,contrastAPCA:oH,cubehelix:Y$,deltaE:cH,distance:bH,input:m1,interpolate:gz,limits:Lw,mix:gz,random:K$,scale:kA,scales:zH,valid:pH});const gy={normal:"#222222",muted:"#5c5c5c",faint:"#666666"},Ry={normal:"#dadada",muted:"#b3b3b3",faint:"#ababab"};function vH(e){return _1.contrast(e,Ry.normal)>_1.contrast(e,gy.normal)?Ry:gy}const NH="var(--color-base-50)";function wH({task:e}){const{settingsSignal:t,isDarkMode:n}=po(),o=W1(()=>Bf(e)?rz(e):e.startTime.clone().endOf("day")),M=W1(()=>Px(C7.current,e.startTime,r0(o))),c=W1(()=>{const{timelineStartColor:u,timelineEndColor:l}=t.current;return _1.scale([u,l]).mode("lab")}),b=W1(()=>{const{colorOverrides:u}=t.current;return u.find(l=>qz(e).includes(l.text))}),z=W1(()=>{var A,d;const{timelineColored:u,startHour:l}=t.current;if(r0(b))return n.current?(A=r0(b))==null?void 0:A.darkModeColor:(d=r0(b))==null?void 0:d.color;if(u){const W=(e.startTime.hour()-l)/(24-l);return r0(c)(W).hex()}return r0(M)==="past"?"var(--background-secondary)":"var(--background-primary)"}),a=W1(()=>r0(M)==="present"?"var(--color-accent)":NH),s=W1(()=>{const{timelineColored:u}=t.current;return u||r0(b)?vH(r0(z)):{normal:"inherit",muted:"inherit",faint:"inherit"}});return{get properContrastColors(){return r0(s)},get backgroundColor(){return r0(z)},get borderColor(){return r0(a)}}}var DH=x0('<div class="padding svelte-1cq6n2d"><div class="content svelte-1cq6n2d"><!></div></div>');function qg(e,t){Re(t,!0);const n=M1(t,"use",19,()=>[]),{isDarkMode:o,settingsSignal:M}=po(),c=W1(()=>wH({task:t.task})),b=W1(()=>r0(c).properContrastColors.normal),z=W1(()=>r0(c).properContrastColors.muted),a=W1(()=>r0(c).properContrastColors.faint),s=W1(()=>r0(c).backgroundColor),u=W1(()=>r0(c).borderColor);var l=DH(),A=e1(l);const d=W1(()=>gU(t.task,o.current,M.current));y1(()=>Ot(A,"background-color",r0(d)));var W=e1(A);wM(W,()=>t.children),q2(()=>pt("longpress",A,function(g){hn.call(this,t,g)})),q2(()=>pt("pointerenter",A,function(g){hn.call(this,t,g)})),q2(()=>pt("pointerleave",A,function(g){hn.call(this,t,g)})),q2(()=>pt("pointerup",A,function(g){hn.call(this,t,g)})),q2(()=>pt("tap",A,function(g){hn.call(this,t,g)})),uO(A,g=>mU(g)),uO(A,(g,L)=>aw(g,L),n),y1(()=>{Qn(A,"truncated-bottom",t.task.truncated==="bottom"),Ot(A,"--text-faint",r0(a)),Ot(A,"--text-muted",r0(z)),Ot(A,"--text-normal",r0(b)),Ot(A,"--time-block-bg-color",r0(s)),Ot(A,"--time-block-border-color",r0(u))}),f0(e,l),ye()}var BH=x0('<svelte-css-wrapper style="display: contents"><!></svelte-css-wrapper>',1);function Pw(e,t){Re(t,!0);const n=tn(),o=()=>w1(r0(z),"$height",n),M=()=>w1(r0(a),"$offset",n),c=M1(t,"use",19,()=>[]),b=W1(()=>WU(t.task,{settings:ue})),z=W1(()=>r0(b).height),a=W1(()=>r0(b).offset),s=W1(()=>r0(b).width),u=W1(()=>r0(b).left);var l=BH(),A=J0(l);uM(A,()=>({"--time-block-height":o(),"--time-block-left":r0(u),"--time-block-position":"absolute","--time-block-top":M(),"--time-block-width":r0(s)})),qg(A.lastChild,{get task(){return t.task},get use(){return c()},$$events:{tap(d){hn.call(this,t,d)},longpress(d){hn.call(this,t,d)},pointerup(d){hn.call(this,t,d)},pointerenter(d){hn.call(this,t,d)},pointerleave(d){hn.call(this,t,d)}},children:(d,W)=>{var g=ne(),L=J0(g);wM(L,()=>t.children),f0(d,g)},$$slots:{default:!0}}),f0(e,l),ye()}var TH=x0("<!> <!>",1),_H=x0("<!> <!>",1),EH=x0("<!> <!>",1);function yy(e,t){Re(t,!1);const n=tn(),o=()=>w1(A,"$editOperation",n),M=()=>w1(W,"$isDragActive",n),c=()=>w1(L,"$isResizeActive",n),b=()=>w1(E,"$isResizeFromTopActive",n);let z=M1(t,"task",8),a=M1(t,"onGripMouseDown",8,void 0),s=M1(t,"onResizerMouseDown",8,void 0),u=M1(t,"onFloatingUiPointerDown",8,void 0),l=M1(t,"onpointerup",8);const{editContext:{editOperation:A}}=po(),d=Jl({middleware:[Zl({mainAxis:-32})],placement:"top-end"}),{isActive:W}=d,g=Jl({middleware:[Zl({mainAxis:-4})],placement:"bottom"}),{isActive:L}=g,R=Jl({middleware:[Zl({mainAxis:-4})],placement:"top"}),{isActive:E}=R;w2();var k=EH(),B=J0(k),I=to(()=>[d.anchorSetup,g.anchorSetup,R.anchorSetup,N=>bU(N,z())]);Pw(B,{get task(){return z()},get use(){return r0(I)},$$events:{longpress:()=>{var N;(N=navigator.vibrate)==null||N.call(navigator,X7),W.set(!0),L.set(!0),E.set(!0)},pointerenter:N=>{d.handleAnchorPointerEnter(N),g.handleAnchorPointerEnter(N),R.handleAnchorPointerEnter(N)},pointerleave:N=>{d.handleAnchorPointerLeave(N),g.handleAnchorPointerLeave(N),R.handleAnchorPointerLeave(N)},pointerup(...N){var P;(P=l())==null||P.apply(this,N)}},children:(N,P)=>{sw(N,{get task(){return z()}})},$$slots:{default:!0}});var S=H0(B,2);B1(S,()=>!o()&&u(),N=>{var P=_H(),J=J0(P);B1(J,()=>M()&&a(),V=>{var x=to(()=>[d.floatingUiSetup]);Ql(V,{get onPointerDown(){return u()},get onPointerLeave(){return d.handleFloatingUiPointerLeave},get onTapOutside(){return d.handleFloatingUiTapOutside},get use(){return r0(x)},children:(e0,Z)=>{zw(e0,{onCopy:()=>{a()(hF(z()),D1.DRAG)},onMove:()=>a()(z(),D1.DRAG),onMoveWithNeighbors:()=>{a()(z(),D1.DRAG_AND_SHIFT_OTHERS)},onMoveWithShrink:()=>{a()(z(),D1.DRAG_AND_SHRINK_OTHERS)}})},$$slots:{default:!0}})});var K=H0(J,2);B1(K,s,V=>{var x=TH(),e0=J0(x);B1(e0,c,j=>{var t0=to(()=>[g.floatingUiSetup]);Ql(j,{get onPointerDown(){return u()},get onPointerLeave(){return g.handleFloatingUiPointerLeave},get onTapOutside(){return g.handleFloatingUiTapOutside},get use(){return r0(t0)},children:(O0,m0)=>{py(O0,{onResize:()=>{s()(z(),D1.RESIZE)},onResizeWithNeighbors:()=>{s()(z(),D1.RESIZE_AND_SHIFT_OTHERS)},onResizeWithShrink:()=>{s()(z(),D1.RESIZE_AND_SHRINK_OTHERS)}})},$$slots:{default:!0}})});var Z=H0(e0,2);B1(Z,b,j=>{var t0=to(()=>[R.floatingUiSetup]);Ql(j,{get onPointerDown(){return u()},get onPointerLeave(){return R.handleFloatingUiPointerLeave},get onTapOutside(){return R.handleFloatingUiTapOutside},get use(){return r0(t0)},children:(O0,m0)=>{py(O0,{onResize:()=>{s()(z(),D1.RESIZE_FROM_TOP)},onResizeWithNeighbors:()=>{s()(z(),D1.RESIZE_FROM_TOP_AND_SHIFT_OTHERS)},onResizeWithShrink:()=>{s()(z(),D1.RESIZE_FROM_TOP_AND_SHRINK_OTHERS)},reverse:!0})},$$slots:{default:!0}})}),f0(V,x)}),f0(N,P)}),f0(e,k),ye()}var SH=x0('<div class="ball svelte-cgn4an"></div>'),kH=x0('<div class="needle absolute-stretch-x svelte-cgn4an"></div> <!>',1);function Ly(e,t){Re(t,!1);const n=tn(),o=()=>w1(ZO,"$currentTime",n),M=()=>w1(ue,"$settings",n);let c=M1(t,"autoScrollBlocked",8,!1),b=M1(t,"showBall",8,!0),z=K2(),a=K2(ny(N1(o()),M()));function s(){var d;M().centerNeedle&&!c()&&((d=r0(z))==null||d.scrollIntoView({behavior:"smooth",block:"center"}))}Qp(()=>(o(),M()),()=>{I1(a,ny(N1(o()),M())),s()}),Dm(),w2();var u=kH(),l=J0(u);Az(l,d=>I1(z,d),()=>r0(z));var A=H0(l,2);B1(A,b,d=>{var W=SH();y1(()=>Ot(W,"top",`${r0(a)??""}px`)),f0(d,W)}),y1(()=>Ot(l,"top",`${r0(a)??""}px`)),f0(e,u),ye()}var XH=x0('<div class="remote-task-content svelte-1xjmze5"><div class="ribbon svelte-1xjmze5"></div> <div class="planner-sticky-block-content"><span class="calendar-name svelte-1xjmze5"> </span> <span class="summary svelte-1xjmze5"> </span></div></div>');function Uw(e,t){Re(t,!1);let n=M1(t,"task",8);const o=n().rsvpStatus==="TENTATIVE",M=n().rsvpStatus==="DECLINED";w2();var c=XH(),b=e1(c),z=H0(b,2),a=e1(z),s=e1(a),u=H0(a,2);Qn(u,"declined",M);var l=e1(u);y1(()=>{mM(b,"style",` + +--ribbon-color: ${n().calendar.color??""}`),Qn(b,"declined",M),Qn(b,"tentative",o),o2(s,n().calendar.name),o2(l,n().summary)}),f0(e,c),ye()}var CH=x0('<!> <div class="tasks absolute-stretch-x svelte-wfuxso"></div>',1),xH=x0('<!> <div class="tasks absolute-stretch-x svelte-wfuxso"></div>',1),FH=x0('<svelte-css-wrapper style="display: contents"><!></svelte-css-wrapper>',1),IH=x0("<!> <!>",1);function $w(e,t){Re(t,!0);const n=tn(),o=()=>w1(s,"$settings",n),M=()=>w1(km,"$isToday",n),c=()=>w1(r0(R),"$displayedTasksForTimeline",n),b=()=>w1(r0(E),"$displayedTasksWithClocksForTimeline",n),z=M1(t,"isUnderCursor",3,!1),{pointerDateTime:a,settings:s,editContext:{confirmEdit:u,handlers:{handleContainerMouseDown:l,handleResizerMouseDown:A,handleTaskMouseUp:d,handleGripMouseDown:W},getDisplayedTasksForTimeline:g},getDisplayedTasksWithClocksForTimeline:L}=po(),R=W1(()=>g(t.day)),E=W1(()=>L(t.day));let k;function B(J){l1.isNotVoid(k);const K=k.getBoundingClientRect().top,V=J.clientY-K,x=kI(V,o()),e0=LF(x,o().zoomLevel,o().startHour),Z=$t(e0,t.day);a.set({dateTime:Z,type:"dateTime"})}var I=IH(),S=J0(I),N=W1(()=>_A(o()));ry(S,{get visibleHours(){return r0(N)},children:(J,K)=>{var V=CH(),x=J0(V);B1(x,()=>M()(t.day),Z=>{Ly(Z,{get autoScrollBlocked(){return z()}})});var e0=H0(x,2);e0.__pointerdown=Z=>{_i(Z)||Z.target!==k||l()},e0.__pointermove=B,e0.__pointerup=u,xo(e0,5,()=>c().withTime,Z=>qO(Z),(Z,j)=>{var t0=ne(),O0=J0(t0);B1(O0,()=>wf(r0(j)),m0=>{Pw(m0,{get task(){return r0(j)},children:(q0,C)=>{Uw(q0,{get task(){return r0(j)}})},$$slots:{default:!0}})},m0=>{yy(m0,{onFloatingUiPointerDown:B,onGripMouseDown:W,onResizerMouseDown:A,onpointerup:()=>{d(r0(j))},get task(){return r0(j)}})}),f0(Z,t0)}),Az(e0,Z=>k=Z,()=>k),f0(J,V)},$$slots:{default:!0}});var P=H0(S,2);B1(P,()=>o().showTimeTracker,J=>{var K=FH(),V=J0(K),x=W1(()=>_A(o()));uM(V,()=>({"--column-background-color":"hsl(var(--color-accent-hsl), 0.03)"})),ry(V.lastChild,{get visibleHours(){return r0(x)},children:(e0,Z)=>{var j=xH(),t0=J0(j);B1(t0,()=>M()(t.day),m0=>{Ly(m0,{get autoScrollBlocked(){return z()},showBall:!1})});var O0=H0(t0,2);xo(O0,5,b,m0=>qO(m0),(m0,q0)=>{yy(m0,{onpointerup:()=>{d(r0(q0))},get task(){return r0(q0)}})}),f0(e0,j)},$$slots:{default:!0}}),f0(J,K)}),f0(e,I),ye()}ab(["pointerdown","pointermove","pointerup"]);/*! + * OverlayScrollbars + * Version: 2.10.0 + * + * Copyright (c) Rene Haas | KingSora. + * https://github.com/KingSora + * + * Released under the MIT license. + */const f2=(e,t)=>{const{o:n,i:o,u:M}=e;let c=n,b;const z=(u,l)=>{const A=c,d=u,W=l||(o?!o(A,d):A!==d);return(W||M)&&(c=d,b=A),[c,W,b]};return[t?u=>z(t(c,b),u):z,u=>[c,!!u,b]]},PH=typeof window<"u"&&typeof HTMLElement<"u"&&!!window.document,t2=PH?window:{},Hw=Math.max,UH=Math.min,v6=Math.round,CA=Math.abs,vy=Math.sign,Yw=t2.cancelAnimationFrame,hg=t2.requestAnimationFrame,xA=t2.setTimeout,N6=t2.clearTimeout,xf=e=>typeof t2[e]<"u"?t2[e]:void 0,$H=xf("MutationObserver"),Ny=xf("IntersectionObserver"),FA=xf("ResizeObserver"),eA=xf("ScrollTimeline"),Wg=e=>e===void 0,Ff=e=>e===null,Lr=e=>typeof e=="number",QO=e=>typeof e=="string",mg=e=>typeof e=="boolean",co=e=>typeof e=="function",wr=e=>Array.isArray(e),IA=e=>typeof e=="object"&&!wr(e)&&!Ff(e),gg=e=>{const t=!!e&&e.length,n=Lr(t)&&t>-1&&t%1==0;return wr(e)||!co(e)&&n?t>0&&IA(e)?t-1 in e:!0:!1},PA=e=>!!e&&e.constructor===Object,UA=e=>e instanceof HTMLElement,If=e=>e instanceof Element;function ge(e,t){if(gg(e))for(let n=0;n<e.length&&t(e[n],n,e)!==!1;n++);else e&&ge(Object.keys(e),n=>t(e[n],n,e));return e}const jw=(e,t)=>e.indexOf(t)>=0,yO=(e,t)=>e.concat(t),tt=(e,t,n)=>(!QO(t)&&gg(t)?Array.prototype.push.apply(e,t):e.push(t),e),Ki=e=>Array.from(e||[]),Rg=e=>wr(e)?e:!QO(e)&&gg(e)?Ki(e):[e],w6=e=>!!e&&!e.length,D6=e=>Ki(new Set(e)),y2=(e,t,n)=>{ge(e,M=>M?M.apply(void 0,t||[]):!0),!n&&(e.length=0)},Vw="paddingTop",Gw="paddingRight",Kw="paddingLeft",Zw="paddingBottom",Jw="marginLeft",Qw="marginRight",eD="marginBottom",tD="overflowX",nD="overflowY",Pf="width",Uf="height",mi="visible",jc="hidden",Rz="scroll",HH=e=>{const t=String(e||"");return t?t[0].toUpperCase()+t.slice(1):""},$f=(e,t,n,o)=>{if(e&&t){let M=!0;return ge(n,c=>{const b=e[c],z=t[c];b!==z&&(M=!1)}),M}return!1},oD=(e,t)=>$f(e,t,["w","h"]),tA=(e,t)=>$f(e,t,["x","y"]),YH=(e,t)=>$f(e,t,["t","r","b","l"]),Jc=()=>{},s1=(e,...t)=>e.bind(0,...t),jp=e=>{let t;const n=e?xA:hg,o=e?N6:Yw;return[M=>{o(t),t=n(()=>M(),co(e)?e():e)},()=>o(t)]},B6=(e,t)=>{const{_:n,v:o,p:M,S:c}=t||{};let b,z,a,s,u=Jc;const l=function(L){u(),N6(b),s=b=z=void 0,u=Jc,e.apply(this,L)},A=g=>c&&z?c(z,g):g,d=()=>{u!==Jc&&l(A(a)||a)},W=function(){const L=Ki(arguments),R=co(n)?n():n;if(Lr(R)&&R>=0){const k=co(o)?o():o,B=Lr(k)&&k>=0,I=R>0?xA:hg,S=R>0?N6:Yw,P=A(L)||L,J=l.bind(0,P);let K;u(),M&&!s?(J(),s=!0,K=I(()=>s=void 0,R)):(K=I(J,R),B&&!b&&(b=xA(d,k))),u=()=>S(K),z=a=P}else l(L)};return W.m=d,W},rD=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),Ho=e=>e?Object.keys(e):[],te=(e,t,n,o,M,c,b)=>{const z=[t,n,o,M,c,b];return(typeof e!="object"||Ff(e))&&!co(e)&&(e={}),ge(z,a=>{ge(a,(s,u)=>{const l=a[u];if(e===l)return!0;const A=wr(l);if(l&&PA(l)){const d=e[u];let W=d;A&&!wr(d)?W=[]:!A&&!PA(d)&&(W={}),e[u]=te(W,l)}else e[u]=A?l.slice():l})}),e},MD=(e,t)=>ge(te({},e),(n,o,M)=>{n===void 0?delete M[o]:n&&PA(n)&&(M[o]=MD(n))}),yg=e=>!Ho(e).length,iD=(e,t,n)=>Hw(e,UH(t,n)),Qc=e=>D6((wr(e)?e:(e||"").split(" ")).filter(t=>t)),Lg=(e,t)=>e&&e.getAttribute(t),wy=(e,t)=>e&&e.hasAttribute(t),oM=(e,t,n)=>{ge(Qc(t),o=>{e&&e.setAttribute(o,String(n||""))})},Or=(e,t)=>{ge(Qc(t),n=>e&&e.removeAttribute(n))},Hf=(e,t)=>{const n=Qc(Lg(e,t)),o=s1(oM,e,t),M=(c,b)=>{const z=new Set(n);return ge(Qc(c),a=>{z[b](a)}),Ki(z).join(" ")};return{O:c=>o(M(c,"delete")),$:c=>o(M(c,"add")),C:c=>{const b=Qc(c);return b.reduce((z,a)=>z&&n.includes(a),b.length>0)}}},cD=(e,t,n)=>(Hf(e,t).O(n),s1(vg,e,t,n)),vg=(e,t,n)=>(Hf(e,t).$(n),s1(cD,e,t,n)),$A=(e,t,n,o)=>(o?vg:cD)(e,t,n),Ng=(e,t,n)=>Hf(e,t).C(n),bD=e=>Hf(e,"class"),pD=(e,t)=>{bD(e).O(t)},wg=(e,t)=>(bD(e).$(t),s1(pD,e,t)),zD=(e,t)=>{const n=t?If(t)&&t:document;return n?Ki(n.querySelectorAll(e)):[]},jH=(e,t)=>{const n=t?If(t)&&t:document;return n&&n.querySelector(e)},T6=(e,t)=>If(e)&&e.matches(t),aD=e=>T6(e,"body"),_6=e=>e?Ki(e.childNodes):[],LO=e=>e&&e.parentElement,Vp=(e,t)=>If(e)&&e.closest(t),E6=e=>document.activeElement,VH=(e,t,n)=>{const o=Vp(e,t),M=e&&jH(n,o),c=Vp(M,t)===o;return o&&M?o===e||M===e||c&&Vp(Vp(e,n),t)!==o:!1},yz=e=>{ge(Rg(e),t=>{const n=LO(t);t&&n&&n.removeChild(t)})},h2=(e,t)=>s1(yz,e&&t&&ge(Rg(t),n=>{n&&e.appendChild(n)})),cz=e=>{const t=document.createElement("div");return oM(t,"class",e),t},sD=e=>{const t=cz();return t.innerHTML=e.trim(),ge(_6(t),n=>yz(n))},Dy=(e,t)=>e.getPropertyValue(t)||e[t]||"",OD=e=>{const t=e||0;return isFinite(t)?t:0},Xl=e=>OD(parseFloat(e||"")),S6=e=>Math.round(e*1e4)/1e4,uD=e=>`${S6(OD(e))}px`;function vO(e,t){e&&t&&ge(t,(n,o)=>{try{const M=e.style,c=Ff(n)||mg(n)?"":Lr(n)?uD(n):n;o.indexOf("--")===0?M.setProperty(o,c):M[o]=c}catch{}})}function yM(e,t,n){const o=QO(t);let M=o?"":{};if(e){const c=t2.getComputedStyle(e,n)||e.style;M=o?Dy(c,t):Ki(t).reduce((b,z)=>(b[z]=Dy(c,z),b),M)}return M}const By=(e,t,n)=>{const o=t?`${t}-`:"",M=n?`-${n}`:"",c=`${o}top${M}`,b=`${o}right${M}`,z=`${o}bottom${M}`,a=`${o}left${M}`,s=yM(e,[c,b,z,a]);return{t:Xl(s[c]),r:Xl(s[b]),b:Xl(s[z]),l:Xl(s[a])}},GH=(e,t)=>`translate${IA(e)?`(${e.x},${e.y})`:`Y(${e})`}`,KH=e=>!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length),ZH={w:0,h:0},Yf=(e,t)=>t?{w:t[`${e}Width`],h:t[`${e}Height`]}:ZH,JH=e=>Yf("inner",e||t2),bz=s1(Yf,"offset"),lD=s1(Yf,"client"),HA=s1(Yf,"scroll"),Dg=e=>{const t=parseFloat(yM(e,Pf))||0,n=parseFloat(yM(e,Uf))||0;return{w:t-v6(t),h:n-v6(n)}},bW=e=>e.getBoundingClientRect(),QH=e=>!!e&&KH(e),k6=e=>!!(e&&(e[Uf]||e[Pf])),AD=(e,t)=>{const n=k6(e);return!k6(t)&&n},Ty=(e,t,n,o)=>{ge(Qc(t),M=>{e&&e.removeEventListener(M,n,o)})},Ge=(e,t,n,o)=>{var M;const c=(M=o&&o.H)!=null?M:!0,b=o&&o.I||!1,z=o&&o.A||!1,a={passive:c,capture:b};return s1(y2,Qc(t).map(s=>{const u=z?l=>{Ty(e,s,u,b),n&&n(l)}:n;return e&&e.addEventListener(s,u,a),s1(Ty,e,s,u,b)}))},fD=e=>e.stopPropagation(),X6=e=>e.preventDefault(),dD=e=>fD(e)||X6(e),mr=(e,t)=>{const{x:n,y:o}=Lr(t)?{x:t,y:t}:t||{};Lr(n)&&(e.scrollLeft=n),Lr(o)&&(e.scrollTop=o)},W2=e=>({x:e.scrollLeft,y:e.scrollTop}),qD=()=>({D:{x:0,y:0},M:{x:0,y:0}}),eY=(e,t)=>{const{D:n,M:o}=e,{w:M,h:c}=t,b=(l,A,d)=>{let W=vy(l)*d,g=vy(A)*d;if(W===g){const L=CA(l),R=CA(A);g=L>R?0:g,W=L<R?0:W}return W=W===g?0:W,[W+0,g+0]},[z,a]=b(n.x,o.x,M),[s,u]=b(n.y,o.y,c);return{D:{x:z,y:s},M:{x:a,y:u}}},_y=({D:e,M:t})=>{const n=(o,M)=>o===0&&o<=M;return{x:n(e.x,t.x),y:n(e.y,t.y)}},Ey=({D:e,M:t},n)=>{const o=(M,c,b)=>iD(0,1,(M-b)/(M-c)||0);return{x:o(e.x,t.x,n.x),y:o(e.y,t.y,n.y)}},C6=e=>{e&&e.focus&&e.focus({preventScroll:!0})},Sy=(e,t)=>{ge(Rg(t),e)},x6=e=>{const t=new Map,n=(c,b)=>{if(c){const z=t.get(c);Sy(a=>{z&&z[a?"delete":"clear"](a)},b)}else t.forEach(z=>{z.clear()}),t.clear()},o=(c,b)=>{if(QO(c)){const s=t.get(c)||new Set;return t.set(c,s),Sy(u=>{co(u)&&s.add(u)},b),s1(n,c,b)}mg(b)&&b&&n();const z=Ho(c),a=[];return ge(z,s=>{const u=c[s];u&&tt(a,o(s,u))}),s1(y2,a)},M=(c,b)=>{ge(Ki(t.get(c)),z=>{b&&!w6(b)?z.apply(0,b):z()})};return o(e||{}),[o,n,M]},ky=e=>JSON.stringify(e,(t,n)=>{if(co(n))throw 0;return n}),Xy=(e,t)=>e?`${t}`.split(".").reduce((n,o)=>n&&rD(n,o)?n[o]:void 0,e):void 0,tY={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,update:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:1300,autoHideSuspend:!1,dragScroll:!0,clickScroll:!1,pointers:["mouse","touch","pen"]}},hD=(e,t)=>{const n={},o=yO(Ho(t),Ho(e));return ge(o,M=>{const c=e[M],b=t[M];if(IA(c)&&IA(b))te(n[M]={},hD(c,b)),yg(n[M])&&delete n[M];else if(rD(t,M)&&b!==c){let z=!0;if(wr(c)||wr(b))try{ky(c)===ky(b)&&(z=!1)}catch{}z&&(n[M]=b)}}),n},Cy=(e,t,n)=>o=>[Xy(e,o),n||Xy(t,o)!==void 0],Yz="data-overlayscrollbars",nA="os-environment",Cl=`${nA}-scrollbar-hidden`,pW=`${Yz}-initialize`,oA="noClipping",xy=`${Yz}-body`,Ei=Yz,nY="host",rM=`${Yz}-viewport`,oY=tD,rY=nD,MY="arrange",WD="measuring",iY="scrolling",mD="scrollbarHidden",cY="noContent",F6=`${Yz}-padding`,Fy=`${Yz}-content`,Bg="os-size-observer",bY=`${Bg}-appear`,pY=`${Bg}-listener`,zY="os-trinsic-observer",aY="os-theme-none",D2="os-scrollbar",sY=`${D2}-rtl`,OY=`${D2}-horizontal`,uY=`${D2}-vertical`,gD=`${D2}-track`,Tg=`${D2}-handle`,lY=`${D2}-visible`,AY=`${D2}-cornerless`,Iy=`${D2}-interaction`,Py=`${D2}-unusable`,I6=`${D2}-auto-hide`,Uy=`${I6}-hidden`,$y=`${D2}-wheel`,fY=`${gD}-interactive`,dY=`${Tg}-interactive`;let RD;const qY=()=>RD,hY=e=>{RD=e};let zW;const WY=()=>{const e=(B,I,S)=>{h2(document.body,B),h2(document.body,B);const N=lD(B),P=bz(B),J=Dg(I);return S&&yz(B),{x:P.h-N.h+J.h,y:P.w-N.w+J.w}},t=B=>{let I=!1;const S=wg(B,Cl);try{I=yM(B,"scrollbar-width")==="none"||yM(B,"display","::-webkit-scrollbar")==="none"}catch{}return S(),I},n=`.${nA}{scroll-behavior:auto!important;position:fixed;opacity:0;visibility:hidden;overflow:scroll;height:200px;width:200px;z-index:-1}.${nA} div{width:200%;height:200%;margin:10px 0}.${Cl}{scrollbar-width:none!important}.${Cl}::-webkit-scrollbar,.${Cl}::-webkit-scrollbar-corner{appearance:none!important;display:none!important;width:0!important;height:0!important}`,M=sD(`<div class="${nA}"><div></div><style>${n}</style></div>`)[0],c=M.firstChild,b=M.lastChild,z=qY();z&&(b.nonce=z);const[a,,s]=x6(),[u,l]=f2({o:e(M,c),i:tA},s1(e,M,c,!0)),[A]=l(),d=t(M),W={x:A.x===0,y:A.y===0},g={elements:{host:null,padding:!d,viewport:B=>d&&aD(B)&&B,content:!1},scrollbars:{slot:!0},cancel:{nativeScrollbarsOverlaid:!1,body:null}},L=te({},tY),R=s1(te,{},L),E=s1(te,{},g),k={T:A,k:W,R:d,V:!!eA,L:s1(a,"r"),U:E,P:B=>te(g,B)&&E(),N:R,q:B=>te(L,B)&&R(),B:te({},g),F:te({},L)};if(Or(M,"style"),yz(M),Ge(t2,"resize",()=>{s("r",[])}),co(t2.matchMedia)&&!d&&(!W.x||!W.y)){const B=I=>{const S=t2.matchMedia(`(resolution: ${t2.devicePixelRatio}dppx)`);Ge(S,"change",()=>{I(),B(I)},{A:!0})};B(()=>{const[I,S]=u();te(k.T,I),s("r",[S])})}return k},Tr=()=>(zW||(zW=WY()),zW),yD=(e,t)=>co(t)?t.apply(0,e):t,mY=(e,t,n,o)=>{const M=Wg(o)?n:o;return yD(e,M)||t.apply(0,e)},LD=(e,t,n,o)=>{const M=Wg(o)?n:o,c=yD(e,M);return!!c&&(UA(c)?c:t.apply(0,e))},gY=(e,t)=>{const{nativeScrollbarsOverlaid:n,body:o}=t||{},{k:M,R:c,U:b}=Tr(),{nativeScrollbarsOverlaid:z,body:a}=b().cancel,s=n??z,u=Wg(o)?a:o,l=(M.x||M.y)&&s,A=e&&(Ff(u)?!c:u);return!!l||!!A},_g=new WeakMap,RY=(e,t)=>{_g.set(e,t)},yY=e=>{_g.delete(e)},vD=e=>_g.get(e),LY=(e,t,n)=>{let o=!1;const M=n?new WeakMap:!1,c=()=>{o=!0},b=z=>{if(M&&n){const a=n.map(s=>{const[u,l]=s||[];return[l&&u?(z||zD)(u,e):[],l]});ge(a,s=>ge(s[0],u=>{const l=s[1],A=M.get(u)||[];if(e.contains(u)&&l){const W=Ge(u,l,g=>{o?(W(),M.delete(u)):t(g)});M.set(u,tt(A,W))}else y2(A),M.delete(u)}))}};return b(),[c,b]},Hy=(e,t,n,o)=>{let M=!1;const{j:c,X:b,Y:z,W:a,J:s,G:u}=o||{},l=B6(()=>M&&n(!0),{_:33,v:99}),[A,d]=LY(e,l,z),W=c||[],g=b||[],L=yO(W,g),R=(k,B)=>{if(!w6(B)){const I=s||Jc,S=u||Jc,N=[],P=[];let J=!1,K=!1;if(ge(B,V=>{const{attributeName:x,target:e0,type:Z,oldValue:j,addedNodes:t0,removedNodes:O0}=V,m0=Z==="attributes",q0=Z==="childList",C=e===e0,z0=m0&&x,d0=z0&&Lg(e0,x||""),_=QO(d0)?d0:null,D0=z0&&j!==_,o0=jw(g,x)&&D0;if(t&&(q0||!C)){const i0=m0&&D0,c0=i0&&a&&T6(e0,a),L0=(c0?!I(e0,x,j,_):!m0||i0)&&!S(V,!!c0,e,o);ge(t0,G0=>tt(N,G0)),ge(O0,G0=>tt(N,G0)),K=K||L0}!t&&C&&D0&&!I(e0,x,j,_)&&(tt(P,x),J=J||o0)}),d(V=>D6(N).reduce((x,e0)=>(tt(x,zD(V,e0)),T6(e0,V)?tt(x,e0):x),[])),t)return!k&&K&&n(!1),[!1];if(!w6(P)||J){const V=[D6(P),J];return!k&&n.apply(0,V),V}}},E=new $H(s1(R,!1));return[()=>(E.observe(e,{attributes:!0,attributeOldValue:!0,attributeFilter:L,subtree:t,childList:t,characterData:t}),M=!0,()=>{M&&(A(),E.disconnect(),M=!1)}),()=>{if(M)return l.m(),R(!0,E.takeRecords())}]},ND={},wD={},vY=e=>{ge(e,t=>ge(t,(n,o)=>{ND[o]=t[o]}))},DD=(e,t,n)=>Ho(e).map(o=>{const{static:M,instance:c}=e[o],[b,z,a]=n||[],s=n?c:M;if(s){const u=n?s(b,z,t):s(t);return(a||wD)[o]=u}}),eu=e=>wD[e],NY="__osOptionsValidationPlugin",wY="__osSizeObserverPlugin",DY=(e,t)=>{const{k:n}=t,[o,M]=e("showNativeOverlaidScrollbars");return[o&&n.x&&n.y,M]},Lz=e=>e.indexOf(mi)===0,BY=(e,t)=>{const n=(M,c,b,z)=>{const a=M===mi?jc:M.replace(`${mi}-`,""),s=Lz(M),u=Lz(b);return!c&&!z?jc:s&&u?mi:s?c&&z?a:c?mi:jc:c?a:u&&z?mi:jc},o={x:n(t.x,e.x,t.y,e.y),y:n(t.y,e.y,t.x,e.x)};return{K:o,Z:{x:o.x===Rz,y:o.y===Rz}}},BD="__osScrollbarsHidingPlugin",TY="__osClickScrollPlugin",TD=(e,t,n)=>{const{dt:o}=n||{},M=eu(wY),[c]=f2({o:!1,u:!0});return()=>{const b=[],a=sD(`<div class="${Bg}"><div class="${pY}"></div></div>`)[0],s=a.firstChild,u=l=>{const A=l instanceof ResizeObserverEntry;let d=!1,W=!1;if(A){const[g,,L]=c(l.contentRect),R=k6(g);W=AD(g,L),d=!W&&!R}else W=l===!0;d||t({ft:!0,dt:W})};if(FA){const l=new FA(A=>u(A.pop()));l.observe(s),tt(b,()=>{l.disconnect()})}else if(M){const[l,A]=M(s,u,o);tt(b,yO([wg(a,bY),Ge(a,"animationstart",l)],A))}else return Jc;return s1(y2,tt(b,h2(e,a)))}},_Y=(e,t)=>{let n;const o=a=>a.h===0||a.isIntersecting||a.intersectionRatio>0,M=cz(zY),[c]=f2({o:!1}),b=(a,s)=>{if(a){const u=c(o(a)),[,l]=u;return l&&!s&&t(u)&&[u]}},z=(a,s)=>b(s.pop(),a);return[()=>{const a=[];if(Ny)n=new Ny(s1(z,!1),{root:e}),n.observe(M),tt(a,()=>{n.disconnect()});else{const s=()=>{const u=bz(M);b(u)};tt(a,TD(M,s)()),s()}return s1(y2,tt(a,h2(e,M)))},()=>n&&z(!0,n.takeRecords())]},EY=(e,t,n,o)=>{let M,c,b,z,a,s;const u=`[${Ei}]`,l=`[${rM}]`,A=["id","class","style","open","wrap","cols","rows"],{vt:d,ht:W,ot:g,gt:L,bt:R,nt:E,wt:k,yt:B,St:I,Ot:S}=e,N=o0=>yM(o0,"direction")==="rtl",P={$t:!1,ct:N(d)},J=Tr(),K=eu(BD),[V]=f2({i:oD,o:{w:0,h:0}},()=>{const o0=K&&K.tt(e,t,P,J,n).ut,c0=!(k&&E)&&Ng(W,Ei,oA),s0=!E&&B(MY),L0=s0&&W2(L),G0=L0&&S(),p1=I(WD,c0),n1=s0&&o0&&o0()[0],$=HA(g),n0=Dg(g);return n1&&n1(),mr(L,L0),G0&&G0(),c0&&p1(),{w:$.w+n0.w,h:$.h+n0.h}}),x=B6(o,{_:()=>M,v:()=>c,S(o0,i0){const[c0]=o0,[s0]=i0;return[yO(Ho(c0),Ho(s0)).reduce((L0,G0)=>(L0[G0]=c0[G0]||s0[G0],L0),{})]}}),e0=o0=>{const i0=N(d);te(o0,{Ct:s!==i0}),te(P,{ct:i0}),s=i0},Z=(o0,i0)=>{const[c0,s0]=o0,L0={xt:s0};return te(P,{$t:c0}),!i0&&o(L0),L0},j=({ft:o0,dt:i0})=>{const s0=!(o0&&!i0)&&J.R?x:o,L0={ft:o0||i0,dt:i0};e0(L0),s0(L0)},t0=(o0,i0)=>{const[,c0]=V(),s0={Ht:c0};return e0(s0),c0&&!i0&&(o0?o:x)(s0),s0},O0=(o0,i0,c0)=>{const s0={Et:i0};return e0(s0),i0&&!c0&&x(s0),s0},[m0,q0]=R?_Y(W,Z):[],C=!E&&TD(W,j,{dt:!0}),[z0,d0]=Hy(W,!1,O0,{X:A,j:A}),_=E&&FA&&new FA(o0=>{const i0=o0[o0.length-1].contentRect;j({ft:!0,dt:AD(i0,a)}),a=i0}),D0=B6(()=>{const[,o0]=V();o({Ht:o0})},{_:222,p:!0});return[()=>{_&&_.observe(W);const o0=C&&C(),i0=m0&&m0(),c0=z0(),s0=J.L(L0=>{L0?x({zt:L0}):D0()});return()=>{_&&_.disconnect(),o0&&o0(),i0&&i0(),z&&z(),c0(),s0()}},({It:o0,At:i0,Dt:c0})=>{const s0={},[L0]=o0("update.ignoreMutation"),[G0,p1]=o0("update.attributes"),[n1,$]=o0("update.elementEvents"),[n0,p0]=o0("update.debounce"),g0=$||p1,S0=i0||c0,K0=X=>co(L0)&&L0(X);if(g0){b&&b(),z&&z();const[X,j0]=Hy(R||g,!0,t0,{j:yO(A,G0||[]),Y:n1,W:u,G:(U0,T1)=>{const{target:f1,attributeName:ot}=U0;return(!T1&&ot&&!E?VH(f1,u,l):!1)||!!Vp(f1,`.${D2}`)||!!K0(U0)}});z=X(),b=j0}if(p0)if(x.m(),wr(n0)){const X=n0[0],j0=n0[1];M=Lr(X)&&X,c=Lr(j0)&&j0}else Lr(n0)?(M=n0,c=!1):(M=!1,c=!1);if(S0){const X=d0(),j0=q0&&q0(),U0=b&&b();X&&te(s0,O0(X[0],X[1],S0)),j0&&te(s0,Z(j0[0],S0)),U0&&te(s0,t0(U0[0],S0))}return e0(s0),s0},P]},SY=(e,t,n,o)=>{const M="--os-viewport-percent",c="--os-scroll-percent",b="--os-scroll-direction",{U:z}=Tr(),{scrollbars:a}=z(),{slot:s}=a,{vt:u,ht:l,ot:A,Mt:d,gt:W,wt:g,nt:L}=t,{scrollbars:R}=d?{}:e,{slot:E}=R||{},k=[],B=[],I=[],S=LD([u,l,A],()=>L&&g?u:l,s,E),N=z0=>{if(eA){const d0=new eA({source:W,axis:z0});return{kt:D0=>{const o0=D0.Tt.animate({clear:["left"],[c]:[0,1]},{timeline:d0});return()=>o0.cancel()}}}},P={x:N("x"),y:N("y")},J=()=>{const{Rt:z0,Vt:d0}=n,_=(D0,o0)=>iD(0,1,D0/(D0+o0)||0);return{x:_(d0.x,z0.x),y:_(d0.y,z0.y)}},K=(z0,d0,_)=>{const D0=_?wg:pD;ge(z0,o0=>{D0(o0.Tt,d0)})},V=(z0,d0)=>{ge(z0,_=>{const[D0,o0]=d0(_);vO(D0,o0)})},x=(z0,d0,_)=>{const D0=mg(_),o0=D0?_:!0,i0=D0?!_:!0;o0&&K(B,z0,d0),i0&&K(I,z0,d0)},e0=()=>{const z0=J(),d0=_=>D0=>[D0.Tt,{[M]:S6(_)+""}];V(B,d0(z0.x)),V(I,d0(z0.y))},Z=()=>{if(!eA){const{Lt:z0}=n,d0=Ey(z0,W2(W)),_=D0=>o0=>[o0.Tt,{[c]:S6(D0)+""}];V(B,_(d0.x)),V(I,_(d0.y))}},j=()=>{const{Lt:z0}=n,d0=_y(z0),_=D0=>o0=>[o0.Tt,{[b]:D0?"0":"1"}];V(B,_(d0.x)),V(I,_(d0.y))},t0=()=>{if(L&&!g){const{Rt:z0,Lt:d0}=n,_=_y(d0),D0=Ey(d0,W2(W)),o0=i0=>{const{Tt:c0}=i0,s0=LO(c0)===A&&c0,L0=(G0,p1,n1)=>{const $=p1*G0;return uD(n1?$:-$)};return[s0,s0&&{transform:GH({x:L0(D0.x,z0.x,_.x),y:L0(D0.y,z0.y,_.y)})}]};V(B,o0),V(I,o0)}},O0=z0=>{const d0=z0?"x":"y",D0=cz(`${D2} ${z0?OY:uY}`),o0=cz(gD),i0=cz(Tg),c0={Tt:D0,Ut:o0,Pt:i0},s0=P[d0];return tt(z0?B:I,c0),tt(k,[h2(D0,o0),h2(o0,i0),s1(yz,D0),s0&&s0.kt(c0),o(c0,x,z0)]),c0},m0=s1(O0,!0),q0=s1(O0,!1),C=()=>(h2(S,B[0].Tt),h2(S,I[0].Tt),s1(y2,k));return m0(),q0(),[{Nt:e0,qt:Z,Bt:j,Ft:t0,jt:x,Xt:{Yt:B,Wt:m0,Jt:s1(V,B)},Gt:{Yt:I,Wt:q0,Jt:s1(V,I)}},C]},kY=(e,t,n,o)=>(M,c,b)=>{const{ht:z,ot:a,nt:s,gt:u,Kt:l,Ot:A}=t,{Tt:d,Ut:W,Pt:g}=M,[L,R]=jp(333),[E,k]=jp(444),B=N=>{co(u.scrollBy)&&u.scrollBy({behavior:"smooth",left:N.x,top:N.y})},I=()=>{const N="pointerup pointercancel lostpointercapture",P=`client${b?"X":"Y"}`,J=b?Pf:Uf,K=b?"left":"top",V=b?"w":"h",x=b?"x":"y",e0=(j,t0)=>O0=>{const{Rt:m0}=n,q0=bz(W)[V]-bz(g)[V],z0=t0*O0/q0*m0[x];mr(u,{[x]:j+z0})},Z=[];return Ge(W,"pointerdown",j=>{const t0=Vp(j.target,`.${Tg}`)===g,O0=t0?g:W,m0=e.scrollbars,q0=m0[t0?"dragScroll":"clickScroll"],{button:C,isPrimary:z0,pointerType:d0}=j,{pointers:_}=m0;if(C===0&&z0&&q0&&(_||[]).includes(d0)){y2(Z),k();const o0=!t0&&(j.shiftKey||q0==="instant"),i0=s1(bW,g),c0=s1(bW,W),s0=(T1,f1)=>(T1||i0())[K]-(f1||c0())[K],L0=v6(bW(u)[J])/bz(u)[V]||1,G0=e0(W2(u)[x],1/L0),p1=j[P],n1=i0(),$=c0(),n0=n1[J],p0=s0(n1,$)+n0/2,g0=p1-$[K],S0=t0?0:g0-p0,K0=T1=>{y2(U0),O0.releasePointerCapture(T1.pointerId)},X=t0||o0,j0=A(),U0=[Ge(l,N,K0),Ge(l,"selectstart",T1=>X6(T1),{H:!1}),Ge(W,N,K0),X&&Ge(W,"pointermove",T1=>G0(S0+(T1[P]-p1))),X&&(()=>{const T1=W2(u);j0();const f1=W2(u),ot={x:f1.x-T1.x,y:f1.y-T1.y};(CA(ot.x)>3||CA(ot.y)>3)&&(A(),mr(u,T1),B(ot),E(j0))})];if(O0.setPointerCapture(j.pointerId),o0)G0(S0);else if(!t0){const T1=eu(TY);if(T1){const f1=T1(G0,S0,n0,ot=>{ot?j0():tt(U0,j0)});tt(U0,f1),tt(Z,s1(f1,!0))}}}})};let S=!0;return s1(y2,[Ge(g,"pointermove pointerleave",o),Ge(d,"pointerenter",()=>{c(Iy,!0)}),Ge(d,"pointerleave pointercancel",()=>{c(Iy,!1)}),!s&&Ge(d,"mousedown",()=>{const N=E6();(wy(N,rM)||wy(N,Ei)||N===document.body)&&xA(s1(C6,a),25)}),Ge(d,"wheel",N=>{const{deltaX:P,deltaY:J,deltaMode:K}=N;S&&K===0&&LO(d)===z&&B({x:P,y:J}),S=!1,c($y,!0),L(()=>{S=!0,c($y)}),X6(N)},{H:!1,I:!0}),Ge(d,"pointerdown",s1(Ge,l,"click",dD,{A:!0,I:!0,H:!1}),{I:!0}),I(),R,k])},XY=(e,t,n,o,M,c)=>{let b,z,a,s,u,l=Jc,A=0;const d=z0=>z0.pointerType==="mouse",[W,g]=jp(),[L,R]=jp(100),[E,k]=jp(100),[B,I]=jp(()=>A),[S,N]=SY(e,M,o,kY(t,M,o,z0=>d(z0)&&O0())),{ht:P,Qt:J,wt:K}=M,{jt:V,Nt:x,qt:e0,Bt:Z,Ft:j}=S,t0=(z0,d0)=>{if(I(),z0)V(Uy);else{const _=s1(V,Uy,!0);A>0&&!d0?B(_):_()}},O0=()=>{(a?!b:!s)&&(t0(!0),L(()=>{t0(!1)}))},m0=z0=>{V(I6,z0,!0),V(I6,z0,!1)},q0=z0=>{d(z0)&&(b=a,a&&t0(!0))},C=[I,R,k,g,()=>l(),Ge(P,"pointerover",q0,{A:!0}),Ge(P,"pointerenter",q0),Ge(P,"pointerleave",z0=>{d(z0)&&(b=!1,a&&t0(!1))}),Ge(P,"pointermove",z0=>{d(z0)&&z&&O0()}),Ge(J,"scroll",z0=>{W(()=>{e0(),O0()}),c(z0),j()})];return[()=>s1(y2,tt(C,N())),({It:z0,Dt:d0,Zt:_,tn:D0})=>{const{nn:o0,sn:i0,en:c0,cn:s0}=D0||{},{Ct:L0,dt:G0}=_||{},{ct:p1}=n,{k:n1}=Tr(),{K:$,rn:n0}=o,[p0,g0]=z0("showNativeOverlaidScrollbars"),[S0,K0]=z0("scrollbars.theme"),[X,j0]=z0("scrollbars.visibility"),[U0,T1]=z0("scrollbars.autoHide"),[f1,ot]=z0("scrollbars.autoHideSuspend"),[vt]=z0("scrollbars.autoHideDelay"),[u0,N0]=z0("scrollbars.dragScroll"),[V0,i1]=z0("scrollbars.clickScroll"),[O1,de]=z0("overflow"),rt=G0&&!d0,j1=n0.x||n0.y,Ue=o0||i0||s0||L0||d0,Te=c0||j0||de,x1=p0&&n1.x&&n1.y,Xe=(T,G,M0)=>{const l0=T.includes(Rz)&&(X===mi||X==="auto"&&G===Rz);return V(lY,l0,M0),l0};if(A=vt,rt&&(f1&&j1?(m0(!1),l(),E(()=>{l=Ge(J,"scroll",s1(m0,!0),{A:!0})})):m0(!0)),g0&&V(aY,x1),K0&&(V(u),V(S0,!0),u=S0),ot&&!f1&&m0(!0),T1&&(z=U0==="move",a=U0==="leave",s=U0==="never",t0(s,!0)),N0&&V(dY,u0),i1&&V(fY,!!V0),Te){const T=Xe(O1.x,$.x,!0),G=Xe(O1.y,$.y,!1);V(AY,!(T&&G))}Ue&&(e0(),x(),j(),s0&&Z(),V(Py,!n0.x,!0),V(Py,!n0.y,!1),V(sY,p1&&!K))},{},S]},CY=e=>{const t=Tr(),{U:n,R:o}=t,{elements:M}=n(),{padding:c,viewport:b,content:z}=M,a=UA(e),s=a?{}:e,{elements:u}=s,{padding:l,viewport:A,content:d}=u||{},W=a?e:s.target,g=aD(W),L=W.ownerDocument,R=L.documentElement,E=()=>L.defaultView||t2,k=s1(mY,[W]),B=s1(LD,[W]),I=s1(cz,""),S=s1(k,I,b),N=s1(B,I,z),P=n0=>{const p0=bz(n0),g0=HA(n0),S0=yM(n0,tD),K0=yM(n0,nD);return g0.w-p0.w>0&&!Lz(S0)||g0.h-p0.h>0&&!Lz(K0)},J=S(A),K=J===W,V=K&&g,x=!K&&N(d),e0=!K&&J===x,Z=V?R:J,j=V?Z:W,t0=!K&&B(I,c,l),O0=!e0&&x,m0=[O0,Z,t0,j].map(n0=>UA(n0)&&!LO(n0)&&n0),q0=n0=>n0&&jw(m0,n0),C=!q0(Z)&&P(Z)?Z:W,z0=V?R:Z,_={vt:W,ht:j,ot:Z,ln:t0,bt:O0,gt:z0,Qt:V?L:Z,an:g?R:C,Kt:L,wt:g,Mt:a,nt:K,un:E,yt:n0=>Ng(Z,rM,n0),St:(n0,p0)=>$A(Z,rM,n0,p0),Ot:()=>$A(z0,rM,iY,!0)},{vt:D0,ht:o0,ln:i0,ot:c0,bt:s0}=_,L0=[()=>{Or(o0,[Ei,pW]),Or(D0,pW),g&&Or(R,[pW,Ei])}];let G0=_6([s0,c0,i0,o0,D0].find(n0=>n0&&!q0(n0)));const p1=V?D0:s0||c0,n1=s1(y2,L0);return[_,()=>{const n0=E(),p0=E6(),g0=U0=>{h2(LO(U0),_6(U0)),yz(U0)},S0=U0=>Ge(U0,"focusin focusout focus blur",dD,{I:!0,H:!1}),K0="tabindex",X=Lg(c0,K0),j0=S0(p0);return oM(o0,Ei,K?"":nY),oM(i0,F6,""),oM(c0,rM,""),oM(s0,Fy,""),K||(oM(c0,K0,X||"-1"),g&&oM(R,xy,"")),h2(p1,G0),h2(o0,i0),h2(i0||o0,!K&&c0),h2(c0,s0),tt(L0,[j0,()=>{const U0=E6(),T1=q0(c0),f1=T1&&U0===c0?D0:U0,ot=S0(f1);Or(i0,F6),Or(s0,Fy),Or(c0,rM),g&&Or(R,xy),X?oM(c0,K0,X):Or(c0,K0),q0(s0)&&g0(s0),T1&&g0(c0),q0(i0)&&g0(i0),C6(f1),ot()}]),o&&!K&&(vg(c0,rM,mD),tt(L0,s1(Or,c0,rM))),C6(!K&&g&&p0===D0&&n0.top===n0?c0:p0),j0(),G0=0,n1},n1]},xY=({bt:e})=>({Zt:t,_n:n,Dt:o})=>{const{xt:M}=t||{},{$t:c}=n;e&&(M||o)&&vO(e,{[Uf]:c&&"100%"})},FY=({ht:e,ln:t,ot:n,nt:o},M)=>{const[c,b]=f2({i:YH,o:By()},s1(By,e,"padding",""));return({It:z,Zt:a,_n:s,Dt:u})=>{let[l,A]=b(u);const{R:d}=Tr(),{ft:W,Ht:g,Ct:L}=a||{},{ct:R}=s,[E,k]=z("paddingAbsolute");(W||A||(u||g))&&([l,A]=c(u));const I=!o&&(k||L||A);if(I){const S=!E||!t&&!d,N=l.r+l.l,P=l.t+l.b,J={[Qw]:S&&!R?-N:0,[eD]:S?-P:0,[Jw]:S&&R?-N:0,top:S?-l.t:0,right:S?R?-l.r:"auto":0,left:S?R?"auto":-l.l:0,[Pf]:S&&`calc(100% + ${N}px)`},K={[Vw]:S?l.t:0,[Gw]:S?l.r:0,[Zw]:S?l.b:0,[Kw]:S?l.l:0};vO(t||n,J),vO(n,K),te(M,{ln:l,dn:!S,rt:t?K:te({},J,K)})}return{fn:I}}},IY=(e,t)=>{const n=Tr(),{ht:o,ln:M,ot:c,nt:b,Qt:z,gt:a,wt:s,St:u,un:l}=e,{R:A}=n,d=s&&b,W=s1(Hw,0),g={display:()=>!1,direction:d0=>d0!=="ltr",flexDirection:d0=>d0.endsWith("-reverse"),writingMode:d0=>d0!=="horizontal-tb"},L=Ho(g),R={i:oD,o:{w:0,h:0}},E={i:tA,o:{}},k=d0=>{u(WD,!d&&d0)},B=d0=>{if(!L.some(p1=>{const n1=d0[p1];return n1&&g[p1](n1)}))return{D:{x:0,y:0},M:{x:1,y:1}};k(!0);const D0=W2(a),o0=u(cY,!0),i0=Ge(z,Rz,p1=>{const n1=W2(a);p1.isTrusted&&n1.x===D0.x&&n1.y===D0.y&&fD(p1)},{I:!0,A:!0});mr(a,{x:0,y:0}),o0();const c0=W2(a),s0=HA(a);mr(a,{x:s0.w,y:s0.h});const L0=W2(a);mr(a,{x:L0.x-c0.x<1&&-s0.w,y:L0.y-c0.y<1&&-s0.h});const G0=W2(a);return mr(a,D0),hg(()=>i0()),{D:c0,M:G0}},I=(d0,_)=>{const D0=t2.devicePixelRatio%1!==0?1:0,o0={w:W(d0.w-_.w),h:W(d0.h-_.h)};return{w:o0.w>D0?o0.w:0,h:o0.h>D0?o0.h:0}},[S,N]=f2(R,s1(Dg,c)),[P,J]=f2(R,s1(HA,c)),[K,V]=f2(R),[x]=f2(E),[e0,Z]=f2(R),[j]=f2(E),[t0]=f2({i:(d0,_)=>$f(d0,_,L),o:{}},()=>QH(c)?yM(c,L):{}),[O0,m0]=f2({i:(d0,_)=>tA(d0.D,_.D)&&tA(d0.M,_.M),o:qD()}),q0=eu(BD),C=(d0,_)=>`${_?oY:rY}${HH(d0)}`,z0=d0=>{const _=o0=>[mi,jc,Rz].map(i0=>C(i0,o0)),D0=_(!0).concat(_()).join(" ");u(D0),u(Ho(d0).map(o0=>C(d0[o0],o0==="x")).join(" "),!0)};return({It:d0,Zt:_,_n:D0,Dt:o0},{fn:i0})=>{const{ft:c0,Ht:s0,Ct:L0,dt:G0,zt:p1}=_||{},n1=q0&&q0.tt(e,t,D0,n,d0),{it:$,ut:n0,_t:p0}=n1||{},[g0,S0]=DY(d0,n),[K0,X]=d0("overflow"),j0=Lz(K0.x),U0=Lz(K0.y),T1=!0;let f1=N(o0),ot=J(o0),vt=V(o0),u0=Z(o0);S0&&A&&u(mD,!g0);{Ng(o,Ei,oA)&&k(!0);const[$e]=n0?n0():[],[_e]=f1=S(o0),[Et]=ot=P(o0),qe=lD(c),ve=d&&JH(l()),T2={w:W(Et.w+_e.w),h:W(Et.h+_e.h)},r2={w:W((ve?ve.w:qe.w+W(qe.w-Et.w))+_e.w),h:W((ve?ve.h:qe.h+W(qe.h-Et.h))+_e.h)};$e&&$e(),u0=e0(r2),vt=K(I(T2,r2),o0)}const[N0,V0]=u0,[i1,O1]=vt,[de,rt]=ot,[j1,Ue]=f1,[Te,x1]=x({x:i1.w>0,y:i1.h>0}),Xe=j0&&U0&&(Te.x||Te.y)||j0&&Te.x&&!Te.y||U0&&Te.y&&!Te.x,T=i0||L0||p1||Ue||rt||V0||O1||X||S0||T1,G=BY(Te,K0),[M0,l0]=j(G.K),[y0,_0]=t0(o0),E0=L0||G0||_0||x1||o0,[c1,K1]=E0?O0(B(y0),o0):m0();return T&&(l0&&z0(G.K),p0&&$&&vO(c,p0(G,D0,$(G,de,j1)))),k(!1),$A(o,Ei,oA,Xe),$A(M,F6,oA,Xe),te(t,{K:M0,Vt:{x:N0.w,y:N0.h},Rt:{x:i1.w,y:i1.h},rn:Te,Lt:eY(c1,i1)}),{en:l0,nn:V0,sn:O1,cn:K1||O1,vn:E0}}},PY=e=>{const[t,n,o]=CY(e),M={ln:{t:0,r:0,b:0,l:0},dn:!1,rt:{[Qw]:0,[eD]:0,[Jw]:0,[Vw]:0,[Gw]:0,[Zw]:0,[Kw]:0},Vt:{x:0,y:0},Rt:{x:0,y:0},K:{x:jc,y:jc},rn:{x:!1,y:!1},Lt:qD()},{vt:c,gt:b,nt:z,Ot:a}=t,{R:s,k:u}=Tr(),l=!s&&(u.x||u.y),A=[xY(t),FY(t,M),IY(t,M)];return[n,d=>{const W={},L=l&&W2(b),R=L&&a();return ge(A,E=>{te(W,E(d,W)||{})}),mr(b,L),R&&R(),!z&&mr(c,0),W},M,t,o]},UY=(e,t,n,o,M)=>{let c=!1;const b=Cy(t,{}),[z,a,s,u,l]=PY(e),[A,d,W]=EY(u,s,b,B=>{k({},B)}),[g,L,,R]=XY(e,t,W,s,u,M),E=B=>Ho(B).some(I=>!!B[I]),k=(B,I)=>{if(n())return!1;const{pn:S,Dt:N,At:P,hn:J}=B,K=S||{},V=!!N||!c,x={It:Cy(t,K,V),pn:K,Dt:V};if(J)return L(x),!1;const e0=I||d(te({},x,{At:P})),Z=a(te({},x,{_n:W,Zt:e0}));L(te({},x,{Zt:e0,tn:Z}));const j=E(e0),t0=E(Z),O0=j||t0||!yg(K)||V;return c=!0,O0&&o(B,{Zt:e0,tn:Z}),O0};return[()=>{const{an:B,gt:I,Ot:S}=u,N=W2(B),P=[A(),z(),g()],J=S();return mr(I,N),J(),s1(y2,P)},k,()=>({gn:W,bn:s}),{wn:u,yn:R},l]},fM=(e,t,n)=>{const{N:o}=Tr(),M=UA(e),c=M?e:e.target,b=vD(c);if(t&&!b){let z=!1;const a=[],s={},u=K=>{const V=MD(K),x=eu(NY);return x?x(V,!0):V},l=te({},o(),u(t)),[A,d,W]=x6(),[g,L,R]=x6(n),E=(K,V)=>{R(K,V),W(K,V)},[k,B,I,S,N]=UY(e,l,()=>z,({pn:K,Dt:V},{Zt:x,tn:e0})=>{const{ft:Z,Ct:j,xt:t0,Ht:O0,Et:m0,dt:q0}=x,{nn:C,sn:z0,en:d0,cn:_}=e0;E("updated",[J,{updateHints:{sizeChanged:!!Z,directionChanged:!!j,heightIntrinsicChanged:!!t0,overflowEdgeChanged:!!C,overflowAmountChanged:!!z0,overflowStyleChanged:!!d0,scrollCoordinatesChanged:!!_,contentMutation:!!O0,hostMutation:!!m0,appear:!!q0},changedOptions:K||{},force:!!V}])},K=>E("scroll",[J,K])),P=K=>{yY(c),y2(a),z=!0,E("destroyed",[J,K]),d(),L()},J={options(K,V){if(K){const x=V?o():{},e0=hD(l,te(x,u(K)));yg(e0)||(te(l,e0),B({pn:e0}))}return te({},l)},on:g,off:(K,V)=>{K&&V&&L(K,V)},state(){const{gn:K,bn:V}=I(),{ct:x}=K,{Vt:e0,Rt:Z,K:j,rn:t0,ln:O0,dn:m0,Lt:q0}=V;return te({},{overflowEdge:e0,overflowAmount:Z,overflowStyle:j,hasOverflow:t0,scrollCoordinates:{start:q0.D,end:q0.M},padding:O0,paddingAbsolute:m0,directionRTL:x,destroyed:z})},elements(){const{vt:K,ht:V,ln:x,ot:e0,bt:Z,gt:j,Qt:t0}=S.wn,{Xt:O0,Gt:m0}=S.yn,q0=z0=>{const{Pt:d0,Ut:_,Tt:D0}=z0;return{scrollbar:D0,track:_,handle:d0}},C=z0=>{const{Yt:d0,Wt:_}=z0,D0=q0(d0[0]);return te({},D0,{clone:()=>{const o0=q0(_());return B({hn:!0}),o0}})};return te({},{target:K,host:V,padding:x||e0,viewport:e0,content:Z||e0,scrollOffsetElement:j,scrollEventElement:t0,scrollbarHorizontal:C(O0),scrollbarVertical:C(m0)})},update:K=>B({Dt:K,At:!0}),destroy:s1(P,!1),plugin:K=>s[Ho(K)[0]]};return tt(a,[N]),RY(c,J),DD(ND,fM,[J,A,s]),gY(S.wn.wt,!M&&e.cancel)?(P(!0),J):(tt(a,k()),E("initialized",[J]),J.update(),J)}return b};fM.plugin=e=>{const t=wr(e),n=t?e:[e],o=n.map(M=>DD(M,fM)[0]);return vY(n),t?o:o[0]};fM.valid=e=>{const t=e&&e.elements,n=co(t)&&t();return PA(n)&&!!vD(n.target)};fM.env=()=>{const{T:e,k:t,R:n,V:o,B:M,F:c,U:b,P:z,N:a,q:s}=Tr();return te({},{scrollbarsSize:e,scrollbarsOverlaid:t,scrollbarsHiding:n,scrollTimeline:o,staticDefaultInitialization:M,staticDefaultOptions:c,getDefaultInitialization:b,setDefaultInitialization:z,getDefaultOptions:a,setDefaultOptions:s})};fM.nonce=hY;const $Y=()=>{if(typeof window>"u"){const s=()=>{};return[s,s]}let e,t;const n=window,o=typeof n.requestIdleCallback=="function",M=n.requestAnimationFrame,c=n.cancelAnimationFrame,b=o?n.requestIdleCallback:M,z=o?n.cancelIdleCallback:c,a=()=>{z(e),c(t)};return[(s,u)=>{a(),e=b(o?()=>{a(),t=M(s)}:s,typeof u=="object"?u:{timeout:2233})},a]};var HY=x0('<div data-overlayscrollbars-contents=""><!></div>');function YY(e,t){const n=ut(t,["children","$$slots","$$events","$$legacy"]),o=ut(n,["osInstance","getElement","element","options","events","defer"]);Re(t,!1);let M=M1(t,"element",8,"div"),c=M1(t,"options",8,void 0),b=M1(t,"events",8,void 0),z=M1(t,"defer",8,void 0),a=K2(null),s=K2(null),u=K2(null),l=K2(void 0),A;const[d,W]=$Y(),g=()=>{const S=()=>{var P;const N=r0(s);N&&((P=r0(a))==null||P.destroy(),I1(a,fM(M()==="body"?{target:N,cancel:{body:null}}:{target:N,elements:{viewport:r0(u),content:r0(u)}},c()||{},r0(l)||{})))};z()?d(S,z()):S(),A=M()},L={initialized:"osInitialized",updated:"osUpdated",destroyed:"osDestroyed",scroll:"osScroll"},R=BS(),E=()=>r0(a),k=()=>r0(s);_7(()=>{var S;W(),(S=r0(a))==null||S.destroy()}),TS(()=>{A!==M()&&g()}),Qp(()=>mA(b()),()=>{const S=b()||{};I1(l,Object.keys(L).reduce((N,P)=>{const J=S[P];return N[P]=[(...K)=>R(L[P],K),...(Array.isArray(J)?J:[J]).filter(Boolean)],N},{}))}),Qp(()=>(r0(a),mA(c())),()=>{fM.valid(r0(a))&&r0(a).options(c()||{},!0)}),Qp(()=>(r0(a),r0(l)),()=>{fM.valid(r0(a))&&r0(a).on(r0(l)||{},!0)}),Dm(),w2();var B=ne(),I=J0(B);return w7(I,M,!1,(S,N)=>{Az(S,V=>I1(s,V),()=>r0(s));let P;y1(()=>P=jW(S,P,{"data-overlayscrollbars-initialize":"",...o},void 0,S.namespaceURI===Nm,S.nodeName.includes("-")));var J=ne(),K=J0(J);B1(K,()=>M()==="body",V=>{var x=ne(),e0=J0(x);ke(e0,t,"default",{}),f0(V,x)},V=>{var x=HY(),e0=e1(x);ke(e0,t,"default",{}),Az(x,Z=>I1(u,Z),()=>r0(u)),f0(V,x)}),f0(N,J)}),f0(e,B),M8(t,"osInstance",E),M8(t,"getElement",k),ye({osInstance:E,getElement:k})}var jY=x0("<!> <!>",1),VY=x0("<!> <!>",1);function _D(e,t){Re(t,!0);const n=tn(),o=()=>w1(c,"$editOperation",n),M=()=>w1(z,"$isActive",n),{editContext:{editOperation:c}}=po(),b=Jl({middleware:[Zl({mainAxis:-32,crossAxis:-4})],placement:"top-end"}),{isActive:z}=b;var a=VY(),s=J0(a),u=W1(()=>[b.anchorSetup]);qg(s,{get task(){return t.task},get use(){return r0(u)},$$events:{longpress:()=>{var A;(A=navigator.vibrate)==null||A.call(navigator,X7),z.set(!0)},pointerenter(...A){var d;(d=b.handleAnchorPointerEnter)==null||d.apply(this,A)},pointerleave(...A){var d;(d=b.handleAnchorPointerLeave)==null||d.apply(this,A)},pointerup(...A){var d;(d=t.onpointerup)==null||d.apply(this,A)}},children:(A,d)=>{var W=jY(),g=J0(W);sw(g,{get task(){return t.task}});var L=H0(g,2);wM(L,()=>t.children??yt),f0(A,W)},$$slots:{default:!0}});var l=H0(s,2);B1(l,()=>!o()&&M()&&t.onGripMouseDown,A=>{var d=W1(()=>[b.floatingUiSetup]);Ql(A,{get onPointerLeave(){return b.handleFloatingUiPointerLeave},get onTapOutside(){return b.handleFloatingUiTapOutside},get use(){return r0(d)},children:(W,g)=>{zw(W,{onMove:()=>t.onGripMouseDown(t.task)})},$$slots:{default:!0}})}),f0(e,a),ye()}function ED(e,t){Re(t,!0);const n=tn(),o=()=>w1(r0(a),"$displayedTasksForTimeline",n),M=()=>w1(ue,"$settings",n),{editContext:{handlers:{handleTaskMouseUp:c,handleUnscheduledTaskGripMouseDown:b},getDisplayedTasksForTimeline:z}}=po(),a=W1(()=>z(t.day));var s=ne(),u=J0(s);B1(u,()=>o().noTime.length>0&&M().showUncheduledTasks,l=>{YY(l,{class:"unscheduled-task-container overlayscrollbars-svelte",defer:!0,options:{scrollbars:{theme:"os-theme-custom"}},children:(A,d)=>{var W=ne(),g=J0(W);xo(g,1,()=>o().noTime,lM,(L,R)=>{var E=ne(),k=J0(E);B1(k,()=>Yx(r0(R)),B=>{_D(B,{onGripMouseDown:b,onpointerup:()=>{c(r0(R))},get task(){return r0(R)}})},B=>{qg(B,{get task(){return r0(R)},children:(I,S)=>{Uw(I,{get task(){return r0(R)}})},$$slots:{default:!0}})}),f0(L,E)}),f0(A,W)},$$slots:{default:!0}})}),f0(e,s),ye()}var GY=x0('<div class="header-cell svelte-8axcq1"><svelte-css-wrapper style="display: contents"><!></svelte-css-wrapper></div>'),KY=x0('<div class="header-cell svelte-8axcq1"><!></div>'),ZY=x0('<div class="corner svelte-8axcq1"></div> <!> <!>',1),JY=x0('<div class="side-controls-container svelte-8axcq1"><!></div>'),QY=x0('<svelte-css-wrapper style="display: contents"><!></svelte-css-wrapper>',1),ej=x0('<svelte-css-wrapper style="display: contents"><!></svelte-css-wrapper> <!>',1),tj=x0('<div class="header svelte-8axcq1"><div class="header-row day-buttons svelte-8axcq1"><div class="corner svelte-8axcq1"></div> <!></div> <!></div> <div class="controls-sidebar svelte-8axcq1"><!> <!> <!> <!> <!> <!></div> <!> <!>',1);function nj(e,t){Re(t,!0);const n=tn(),o=()=>w1(z,"$settings",n),M=()=>w1(a,"$dateRange",n),c=()=>w1(km,"$isToday",n),{workspaceFacade:b,settings:z}=po(),a=rg();let s=Oz("none");function u(j){I1(s,fr(r0(s)===j?"none":j))}function l(j){const t0=Ze(z).multiDayRange,O0=new $0.Menu;O0.addItem(m0=>m0.setTitle("Full week").setChecked(t0==="full-week").onClick(()=>{z.update(q0=>({...q0,multiDayRange:"full-week"}))})),O0.addItem(m0=>{m0.setTitle("Work week").setChecked(t0==="work-week").onClick(()=>{z.update(q0=>({...q0,multiDayRange:"work-week"}))})}),O0.addItem(m0=>{m0.setTitle("3 days").setChecked(t0==="3-days").onClick(()=>{z.update(q0=>({...q0,multiDayRange:"3-days"}))})}),O0.showAtMouseEvent(j)}function A(j){return $x(j)?"var(--background-primary)":""}let d;function W(j){d&&j.target instanceof Element&&(d.scrollLeft=j.target.scrollLeft)}var g=tj(),L=J0(g),R=e1(L),E=H0(e1(R),2);xo(E,1,M,lM,(j,t0)=>{var O0=GY();const m0=W1(()=>c()(r0(t0)));y1(()=>Qn(O0,"today",r0(m0)));var q0=e1(O0);uM(q0,()=>({"--color":c()(r0(t0))?"white":"var(--icon-color)"})),V2(q0.lastChild,{label:"Open note for day",onclick:async()=>await b.openFileForDay(r0(t0)),children:(C,z0)=>{var d0=j2();y1(()=>o2(d0,r0(t0).format(o().timelineDateFormat))),f0(C,d0)},$$slots:{default:!0}}),f0(j,O0)});var k=H0(R,2);ZN(k,{className:"header-row",children:(t0,O0=yt)=>{var m0=ZY(),q0=H0(J0(m0),2);xo(q0,1,M,lM,(z0,d0)=>{var _=KY(),D0=e1(_);ED(D0,{get day(){return r0(d0)}}),f0(z0,_)});var C=H0(q0,2);KN(C,{$$events:{mousedown(...z0){var d0;(d0=O0())==null||d0.apply(this,z0)}}}),f0(t0,m0)},$$slots:{default:!0}}),Az(L,j=>d=j,()=>d);var B=H0(L,2),I=e1(B),S=W1(()=>r0(s)==="search");V2(I,{get isActive(){return r0(S)},onclick:()=>u("search"),children:(j,t0)=>{MP(j,{})},$$slots:{default:!0}});var N=H0(I,2),P=W1(()=>r0(s)==="settings");V2(N,{get isActive(){return r0(P)},onclick:()=>u("settings"),children:(j,t0)=>{eP(j,{})},$$slots:{default:!0}});var J=H0(N,2);V2(J,{label:"Change columns",onclick:l,children:(j,t0)=>{rP(j,{})},$$slots:{default:!0}});var K=H0(J,2);V2(K,{label:"Show current period",onclick:()=>{a.set(h6(o().multiDayRange,o().firstDayOfWeek))},children:(j,t0)=>{oP(j,{})},$$slots:{default:!0}});var V=H0(K,2);V2(V,{label:"Show next period",onclick:()=>{a.update(o().multiDayRange==="work-week"?([j])=>vI(j):wI)},children:(j,t0)=>{nP(j,{})},$$slots:{default:!0}});var x=H0(V,2);V2(x,{label:"Show previous period",onclick:()=>{a.update(o().multiDayRange==="work-week"?([j])=>NI(j):DI)},children:(j,t0)=>{tP(j,{})},$$slots:{default:!0}});var e0=H0(B,2);B1(e0,()=>r0(s)!=="none",j=>{var t0=JY(),O0=e1(t0);B1(O0,()=>r0(s)==="settings",m0=>{ew(m0,{})}),tb(3,t0,()=>WO,()=>mO({axis:"x"})),f0(j,t0)});var Z=H0(e0,2);QN(Z,{className:"multiday-main-content",$$events:{scroll:W},children:(j,t0)=>{var O0=ej(),m0=J0(O0),q0=W1(()=>_A(o()));uM(m0,()=>({"--ruler-box-shadow":"var(--shadow-right)"})),JN(m0.lastChild,{get visibleHours(){return r0(q0)}});var C=H0(m0,2);xo(C,1,M,lM,(z0,d0)=>{var _=QY(),D0=J0(_);uM(D0,()=>({"--column-background-color":A(r0(d0))})),$w(D0.lastChild,{get day(){return r0(d0)},isUnderCursor:!0}),f0(z0,_)}),f0(j,O0)},$$slots:{default:!0}}),y1(()=>Ot(L,"--timeline-internal-column-count",o().showTimeTracker?2:1)),f0(e,g),ye()}function oj(){const e=xn({});function t(n){const o=Fz();e.update(a=>({...a,[o]:n}));function M(){e.update(me.omit([o]))}function c(a){e.update(s=>({...s,[o]:a(s[o])}))}function b(a){e.update(s=>({...s,[o]:a}))}function z(a){return e.subscribe(s=>a(s[o]))}return{subscribe:z,update:c,set:b,untrack:M}}return{trackRange:t,ranges:e}}const bO=class bO extends $0.ItemView{constructor(t,n,o,M){super(t),this.settings=n,this.componentContext=o,this.dateRanges=M,this.navigation=!1,this.updateTabTitleAndHeader=c=>{var z,a,s;const b=ey(c);(z=this.titleEl)==null||z.setText(b),(s=(a=this.leaf).updateHeader)==null||s.call(a)}}getViewType(){return Yl}getDisplayText(){return!this.dateRange||!Ze(this.dateRange)?bO.defaultDisplayText:ey(Ze(this.dateRange))}getIcon(){return"table-2"}async onOpen(){const t=this.containerEl.children[0],n=this.containerEl.children[1],o=Ze(this.settings),M=h6(o.multiDayRange,o.firstDayOfWeek);this.dateRange=this.dateRanges.trackRange(M),this.register(this.dateRange.subscribe(this.updateTabTitleAndHeader));const c=G1(this.settings,l=>({multiDayRange:l.multiDayRange,firstDayOfWeek:l.firstDayOfWeek})),b=Ze(this.settings);let z=b.multiDayRange,a=b.firstDayOfWeek;this.register(c.subscribe(l=>{var A;(l.multiDayRange!==z||l.firstDayOfWeek!==a)&&(z=l.multiDayRange,a=l.firstDayOfWeek,(A=this.dateRange)==null||A.set(h6(l.multiDayRange,l.firstDayOfWeek)))}));const s=new Map([...this.componentContext,[Sm,this.dateRange]]);this.weekComponent=RA(nj,{target:n,context:s});const u=t.querySelector(".view-actions");if(u){const l=createDiv();u.prepend(l),this.headerActionsComponent=RA(_I,{target:l,context:s})}}async onClose(){var t;(t=this.dateRange)==null||t.untrack(),this.multiDayComponent&&YW(this.multiDayComponent),this.headerActionsComponent&&YW(this.headerActionsComponent)}};bO.defaultDisplayText="Multi-Day View";let P6=bO;class rj extends $0.ItemView{getViewType(){return ZW}getDisplayText(){return"Day Planner Release 0.27.0"}async onOpen(){this.contentEl.addClass("release-notes-view");const t=this.contentEl.createDiv({cls:"cm-scroller is-readable-line-width"}).createDiv({cls:"markdown-preview-view markdown-rendered"});await $0.MarkdownPreviewView.render(this.app,`- 🗳️ [Add '👍' reactions under the issues important to you.](https://github.com/ivan-lednev/obsidian-day-planner/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc) This helps me prioritize my work +- 🪲 [Report bugs and suggest features](https://github.com/ivan-lednev/obsidian-day-planner/issues) +- ❓ [Ask questions](https://github.com/ivan-lednev/obsidian-day-planner/discussions/new?category=q-a) +- 🛠️ [Submit pull-requests](./CONTRIBUTING.md) +- ❤️ If this project adds value to your life, consider supporting it finantially: + - <a href="https://www.buymeacoffee.com/machineelf" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a> +## 0.27.0 + +### ✨ New features + +- Edit text in the command palette before task creation +- Add descriptive icons to clock commands, so that they are easier to use in the mobile toolbar + +## 0.26.3 + +### 🐞 Fixed issues + +- Fix tasks not added to daily note when there is no planner heading inside it +- Fix clocks from daily notes not showing up in timeline & active clocks + +## 0.26.2 + +### 🐞 Fixed issues + +- Fix messing up frontmatter when there is no planner heading in file + +## 0.26.0 + +### ✨ New feature: time tracking (experimental) + +You can record time spent on tasks in the form of Dataview properties and then view the records as time blocks, much like planner entries. See [the docs for detailed instructions](https://github.com/ivan-lednev/obsidian-day-planner?tab=readme-ov-file#4-time-tracking). + +### 🐞 Fixed issues + +- Fixed crash for iOS on drag-and-drop edits (#519) +- Fixed duplicated timestamps on drag-and-drop edits (#618) +- Fixed removing task Dataview properties on edits (#370) + +## 0.25.0 + +### 💥 Breaking changes + +- Now only the items under the planner heading will get pulled from daily notes (#382) + +### ✨ New features + +- Now after edits there is an **UNDO** notice that lets you revert the changes to tasks, even across multiple files (partially addresses #341) +- Now the plugin will ask for permission before creating new files on drag-and-drop edits +- Tasks crossing midnight now get shown properly in multiple day columns instead of stretching the first day (#586, #364) + - E.g.: \`- 23:00 - 4:00 Task\` will get shown in 2 columns as 2 separate blocks +- Timeline controls look tidier now +- Now all-day remote events are shown in the unscheduled tasks section +- Text in blocks is now sticky and will stay visible when scrolling as well as when an event starts before the configured start hour + +#### Week planner -> multi-day planner + +- Now you can switch between 3 views: + - **full week** (with configurable start of the week) + - **work week** (starting on Monday) + - **3 upcoming days** (#515) +- You can now configure the first day of the week (#231) +- Now you can move back and forth between time periods from the sidebar of the multiday-view (#458, #495) +- Now weekends get marked by a different background color +- Now you an open plugin settings from the multi-day view +- Now the time period of the open view is visible in its tab title +- Now you can open the multi-day view from the left ribbon + +### 🐞 Fixed issues + +- Now the plugin finds contrasting font colors for your color overrides for time blocks (#481) +- obsidian-tasks tasks now get copied under the original line in the original file +- Now copying a task also copies the sub-items under it +- Extra spaces no longer get added in edited files + +## 0.24.0 + +### ✨ New features + +- Active task end time is now shown in status bar +- Notifications now show timestamps + +### 🐞 Fixed issues + +- Now tasks with no text content are not shown in timeline +- Fixed deleted recurrences of events in remote calendars showing up +- Fixed 12 am parsed as noon + +## 0.23.0 + +### ✨ New features + +- Now clicking on checkboxes on the timeline completes a task. [obsidian-tasks](https://github.com/obsidian-tasks-group/obsidian-tasks) logic is also respected: recurrent tasks get updated, 'finished' property gets added +- There is now an option to sort items by time in your planner after an edit (thanks, @Gelio) +- You can now configure what kind of task to create on edit: bullet (\`- task\`) or checkbox (\`- [ ] task\`) +- Minimal task duration is now configurable. Now tasks won't shrink beyond this point when editing +- Timestamps get parsed anywhere on the line, not only at the start, e.g.: \`- [ ] #task 20:30 - 21:00 Wake up\` + - Note that if a timestamp is not at the start of the line, it needs to be in a stricter format to avoid confusing the plugin + - \`20:00\` will work + - \`2000\` will not work +- There is now an option to specify your email in remote calendar config. If you do this, your RSVP status (declined/tentative) will get displayed on remote tasks from this calendar (thanks, @ramandv) + +### 🐞 Fixed issues + +- Now timeline will stay where you've left it when you reload Obsidian (thanks, @k4a-l) + +## 0.22.0 + +### ✨ New features + +- Default task status on creation is now configurable + +### 🐞 Fixed issues + +- Fixed load failure when unable to read daily notes +- Fixed console error on plugin load +- Fixed moving tasks to non-existent daily notes +- Fixed active day in week not changing on next day +- No more note switching when navigating between days from timeline view + +## 0.21.1 + +### ✨ New features + +- Drag-and-drop edits are now working on mobile: long-press on a task block to see the controls, tap on the control and start dragging to change task time +- Added floating edit controls on top of task blocks. All the edit modes are now easily available +- Now you can change task start time +- There is now a new edit mode: move block and shrink neighboring blocks +- Now you can manually adjust the height of the unscheduled tasks section through drag-and-drop + +### 🐞 Fixed issues + +- Fixed empty remote event names breaking the plugin (#430) +- Fixed advanced editing with Ctrl/Shift not working (#462). To do advanced edits, simply hover over the block, then over the edit controls + +## 0.20.1 - 0.20.4 + +- 🐞 add toggle to disable release notes (#399) +- 🐞 do not reset timeline position when it's already open (#289) +- 🐞 do not replace tab content when opening weekly view (#313) +- 🐞 fix status bar error breaking plugin +- 🐞 Move task on copy, instead of changing its size +- 🐞 Fix different hourglass emoji breaking task movement +- 🐞 Fix calendar events without a location crashes plugin (#438, thanks, @sepatel) +- 🐞 Do not print undefined inside checkbox when list item is not a task (#368, thanks, @Gelio) +- 🐞 AM/PM doesn't match unexpectedly anymore (#312, thanks, @teisermann) + +## 0.20.0 + +### New features + +- ✨ Color coding: you can define background color for blocks containing certain text in first line +- ✨ Weekly view now displays unscheduled tasks on top +- ✨ Advanced drag-and-drop editing does not require modifier keys any more, you pick current edit mode in timeline controls + +### Fixed issues + +- 🐞 Fixed scheduling tasks for other days than today (by @Lunkle) +- 🐞 Pointer to current time is now more visible +- 🐞 Task summary in internet calendars is now displayed next to calendar name, to make it visible in short blocks + +## 0.19.1 - 0.19.6 + +- 🐞 Fix iOS crash +- 🐞 Fix performance on startup +- 🐞 Fix colorful timeline both for local & remote calendars +- 🐞 Fix planner not reacting to daily note creation +- 🐞 Fix displaying hover preview + +## 0.19.0 + +### ✨ New Feature: Internet Calendar Sync (Google, Outlook, iCloud) + +- This lets you display events from calendars like Google Calendar, iCloud Calendar, Outlook Calendar +- You only need to add a link in the plugin settings to start displaying events from that calendar + +See [README](https://github.com/ivan-lednev/obsidian-day-planner?tab=readme-ov-file#showing-internet-calendars) for details. + +## 0.18.0 + +### ✨ New features + +- Now hovering over a task with \`Control\` pressed will trigger a preview pop-up. This works great with the awesome [Hover Editor plugin](https://github.com/nothingislost/obsidian-hover-editor) +- Now when you click on a task, if there is an open tab for that file, the plugin is going to reuse it + +## 0.17.2 + +### 🐞 Fixed issues + +- Fix creating tasks with drag-and-drop + +## 0.17.0 + +### 💥 Breaking changes + +- Now by default, if your Dataview souce filter is empty, tasks are pulled only from visible daily notes + - Most people never touch this field, so the plugin is going to be lightning-fast by default + - If you want to add other folders or tags as task sources, you can still do so by adding them explicitly + +### ✨ New features + +- When dragging tasks from daily notes across days in the weekly view, they now get moved across files +- There is now an option to hide completed tasks from timeline +- There is now an option to hide subtasks from task blocks in the timeline + +### 🐞 Fixed issues + +- New drag-and-drop operations can now be started immediately after previous ones +- The plugin is much faster in the default use case (daily notes only) +- You can use plain list items in daily notes again +- Notifications work again +- Unscheduled tasks now fit their contents + +### Acknowledgements + +- Big thanks to @weph for helping me figure out a good performance solution +`,t,"/",this)}}class Mj extends $0.PluginSettingTab{constructor(t,n){super(t.app,t),this.plugin=t,this.settingsStore=n}display(){const{containerEl:t}=this;t.empty(),new $0.Setting(t).setName("Show release notes after update").addToggle(n=>n.setValue(this.plugin.settings().releaseNotes).onChange(o=>{this.update({releaseNotes:o})})),new $0.Setting(t).setName("Task Notification").setDesc("Display a notification when a new task is started").addToggle(n=>n.setValue(this.plugin.settings().showTaskNotification).onChange(o=>{this.update({showTaskNotification:o})})),new $0.Setting(t).setName("Center the Pointer in the Timeline View").setDesc("Should the pointer continuously get scrolled to the center of the view").addToggle(n=>{n.setValue(this.plugin.settings().centerNeedle).onChange(o=>{this.update({centerNeedle:o})})}),new $0.Setting(t).setName("Sort tasks in planner chronologically after edits").addToggle(n=>{n.setValue(this.plugin.settings().sortTasksInPlanAfterEdit).onChange(o=>{this.update({sortTasksInPlanAfterEdit:o})})}),new $0.Setting(t).setName("Event format on creation").addDropdown(n=>(n.addOptions({bullet:"Bullet (- New item)",task:"Task (- [ ] New item)"}),n.setValue(this.plugin.settings().eventFormatOnCreation).onChange(o=>{l1.isOneOf(o,HS),this.update({eventFormatOnCreation:o}),this.display()}))),new $0.Setting(t).setName("Timeline Zoom Level").setDesc("The zoom level to display the timeline. The higher the number, the more vertical space each task will take up.").addSlider(n=>n.setLimits(1,5,1).setValue(Number(this.plugin.settings().zoomLevel)??4).setDynamicTooltip().onChange(o=>{this.update({zoomLevel:o})})),this.plugin.settings().eventFormatOnCreation==="task"&&new $0.Setting(t).setName("Default task status on creation").setDesc("You can use custom statuses for more advanced workflows. E.g.: '- [>] Task'").addText(n=>n.setPlaceholder("Empty").setValue(this.plugin.settings().taskStatusOnCreation).onChange(o=>{this.settingsStore.update(M=>{const c=o.length>0?o.substring(0,1):" ";return{...M,taskStatusOnCreation:c}})})),new $0.Setting(t).setName("Timeline Icon").setDesc("The icon of the timeline pane. Reopen timeline pane or restart obsidian to see the change.").addDropdown(n=>($S.forEach(o=>n.addOption(o,o)),n.setValue(this.plugin.settings().timelineIcon??"calendar-with-checkmark").onChange(o=>{this.update({timelineIcon:o})}))),new $0.Setting(t).setName("Start Hour").setDesc("The planner is going to start at this hour each day").addDropdown(n=>n.addOptions({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"}).setValue(String(this.plugin.settings().startHour)).onChange(o=>{const M=Number(o);this.update({startHour:M})})),new $0.Setting(t).setName("First day of week").addDropdown(n=>n.addOptions({monday:"Monday",sunday:"Sunday",saturday:"Saturday",friday:"Friday"}).setValue(String(this.plugin.settings().firstDayOfWeek)).onChange(o=>{l1.isOneOf(o,YS),this.update({firstDayOfWeek:o})})),t.createEl("h2",{text:"Remote calendars"}),this.plugin.settings().icals.map((n,o)=>{t.createEl("h2",{text:`Calendar ${o+1}`}),new $0.Setting(t).setName("Mark calendar with color").addColorPicker(M=>M.setValue(n.color).onChange(c=>{this.settingsStore.update(hi(b=>{b.icals[o].color=c}))})),new $0.Setting(t).setName("Prepend this text to events from this calendar").addText(M=>M.setPlaceholder("Displayed name").setValue(n.name).onChange(c=>{this.settingsStore.update(hi(b=>{b.icals[o].name=c}))})),new $0.Setting(t).setName("Your email address, used to show 'tentative'/'needs action'/'declined' marker").addText(M=>M.setPlaceholder("Your email address").setValue(n.email||"").onChange(c=>{this.settingsStore.update(hi(b=>{b.icals[o].email=c.trim()}))})),new $0.Setting(t).setName("Remote calendar URL").addText(M=>M.setPlaceholder("URL").setValue(n.url).onChange(c=>{const b=c.replace("webcal://","https://");this.settingsStore.update(hi(z=>{z.icals[o].url=b}))})),new $0.Setting(t).addButton(M=>M.setIcon("trash").setButtonText(`Delete calendar ${o+1}`).onClick(()=>{this.settingsStore.update(c=>({...c,icals:c.icals.filter((b,z)=>z!==o)})),this.display()}))}),new $0.Setting(t).addButton(n=>n.setButtonText("Add remote calendar").onClick(()=>{const o={name:"",email:"",url:"",color:"#ffffff"};this.settingsStore.update(M=>({...M,icals:[...M.icals,o]})),this.display()})),t.createEl("h2",{text:"Date & Time Formats"}),new $0.Setting(t).setName("Hour format").then(n=>{n.setDesc(createFragment(o=>{o.appendText("This is the format used in the time ruler. Use 'H' for 24 hours; use 'h' for 12 hours. Your current syntax looks like this: "),n.addMomentFormat(M=>M.setValue(this.plugin.settings().hourFormat).setSampleEl(o.createSpan()).onChange(c=>{this.update({hourFormat:c.trim()})})),o.append(createEl("br"),createEl("a",{text:"format reference",href:"https://momentjs.com/docs/#/displaying/format/"},M=>{M.setAttr("target","_blank")}))}))}),new $0.Setting(t).setName("Default timestamp format").then(n=>{n.setDesc(createFragment(o=>{o.appendText("When you create or edit tasks with drag-and-drop, the plugin use this format. Use 'HH:mm' for 24 hours; use 'hh:mm' for 12 hours. Your current syntax looks like this: "),n.addMomentFormat(M=>M.setValue(this.plugin.settings().timestampFormat).setSampleEl(o.createSpan()).onChange(c=>{this.update({timestampFormat:c.trim()})})),o.append(createEl("br"),createEl("a",{text:"format reference",href:"https://momentjs.com/docs/#/displaying/format/"},M=>{M.setAttr("target","_blank")}))}))}),new $0.Setting(t).setName("Date Format in Timeline Header").then(n=>{n.setDesc(createFragment(o=>{o.appendText("Your current syntax looks like this: "),n.addMomentFormat(M=>M.setValue(this.plugin.settings().timelineDateFormat).setSampleEl(o.createSpan()).onChange(c=>{this.update({timelineDateFormat:c})})),o.append(createEl("br"),createEl("a",{text:"format reference",href:"https://momentjs.com/docs/#/displaying/format/"},M=>{M.setAttr("target","_blank")}))}))}),t.createEl("h2",{text:"Planner Heading"}),new $0.Setting(t).setName("Planner Heading Text").setDesc(createFragment(n=>{n.append(createEl("p",{text:"Only the items under this heading (and its subheadings) are going to be pulled from daily notes."}),createEl("p",{text:"If left empty, the plugin will pull all items from daily notes."}),createEl("p",{text:"Also used when creating a plan with drag-and-drop."}))})).addText(n=>n.setValue(this.plugin.settings().plannerHeading).onChange(o=>{this.update({plannerHeading:o})})),new $0.Setting(t).setName("Planner heading level").setDesc("When you create a planner in a file, this level of heading is going to be used").addSlider(n=>n.setLimits(1,6,1).setDynamicTooltip().setValue(this.plugin.settings().plannerHeadingLevel).onChange(o=>{this.update({plannerHeadingLevel:o})})),t.createEl("h2",{text:"Status bar widget"}),new $0.Setting(t).setName("Show active task").addToggle(n=>n.setValue(this.plugin.settings().showNow).onChange(o=>{this.update({showNow:o})})),new $0.Setting(t).setName("Show upcoming task").addToggle(n=>n.setValue(this.plugin.settings().showNext).onChange(o=>{this.update({showNext:o})})),new $0.Setting(t).setName("Current task progress indicator").addDropdown(n=>n.addOptions({bar:"bar",pie:"pie",none:"none"}).setValue(String(this.plugin.settings().progressIndicator)).onChange(o=>{this.update({progressIndicator:o})})),t.createEl("h2",{text:"Task decoration"}),new $0.Setting(t).setName("Show a timestamp next to task text in timeline").addToggle(n=>{n.setValue(this.plugin.settings().showTimestampInTaskBlock).onChange(o=>{this.update({showTimestampInTaskBlock:o})})}),t.createEl("h2",{text:"Duration"}),new $0.Setting(t).setName("Stretch task until next one in timeline if it has no end time").setDesc('By "no end time" we mean "- [ ] 10:00 Wake up" instead of "- [ ] 10:00 - 11:00 Wake up"').addToggle(n=>{n.setValue(this.plugin.settings().extendDurationUntilNext).onChange(o=>{this.update({extendDurationUntilNext:o})})}),new $0.Setting(t).setName("Round time to minutes").setDesc("While editing, tasks are going to get rounded to this number").addSlider(n=>n.setLimits(5,20,5).setValue(this.plugin.settings().snapStepMinutes).setDynamicTooltip().onChange(o=>{this.update({snapStepMinutes:o})})),new $0.Setting(t).setName("Default task duration").setDesc("Used when you create a task with drag-and-drop & when you don't specify an end time").addSlider(n=>n.setLimits(20,120,10).setValue(Number(this.plugin.settings().defaultDurationMinutes)).setDynamicTooltip().onChange(o=>{this.update({defaultDurationMinutes:o})})),new $0.Setting(t).setName("Minimal task duration").setDesc("Used when you create a task with drag-and-drop").addSlider(n=>n.setLimits(5,15,5).setValue(Number(this.plugin.settings().minimalDurationMinutes)).setDynamicTooltip().onChange(o=>{this.update({minimalDurationMinutes:o})})),t.createEl("h2",{text:"Color blocking"}),t.createEl("p",{text:"Define a background color for a block containing some text (it might be a tag, like '#important'). The first color is for light mode, the second is for dark mode."}),this.plugin.settings().colorOverrides.map((n,o)=>new $0.Setting(t).setName(`Color ${o+1}`).addColorPicker(M=>M.setValue(n.color).onChange(c=>{this.settingsStore.update(hi(b=>{b.colorOverrides[o].color=c}))})).addColorPicker(M=>M.setValue(n.darkModeColor).onChange(c=>{this.settingsStore.update(hi(b=>{b.colorOverrides[o].darkModeColor=c}))})).addText(M=>M.setPlaceholder("Text").setValue(n.text).onChange(c=>{this.settingsStore.update(b=>({...b,colorOverrides:b.colorOverrides.map((z,a)=>a===o?{...z,text:c}:z)}))})).addExtraButton(M=>M.setIcon("trash").setTooltip("Delete color override").onClick(()=>{this.settingsStore.update(c=>({...c,colorOverrides:c.colorOverrides.filter((b,z)=>z!==o)})),this.display()}))),new $0.Setting(t).addButton(n=>n.setButtonText("Add color override").onClick(()=>{const o={text:"#important",darkModeColor:"#6e3737",color:"#ffa1a1"};this.settingsStore.update(M=>({...M,colorOverrides:[...M.colorOverrides,o]})),this.display()})),t.createEl("h2",{text:"Colorful Timeline"}),new $0.Setting(t).setName("Enable Colorful Timeline").setDesc("If the planner timeline should be monochrome or color tasks based on time of day").addToggle(n=>{n.setValue(this.plugin.settings().timelineColored).onChange(o=>{this.update({timelineColored:o})})}),new $0.Setting(t).setName("Colorful Timeline - Start Color").addColorPicker(n=>{n.setValue(this.plugin.settings().timelineStartColor).onChange(o=>{this.update({timelineStartColor:o})})}),new $0.Setting(t).setName("Colorful Timeline - End Color").addColorPicker(n=>{n.setValue(this.plugin.settings().timelineEndColor).onChange(o=>{this.update({timelineEndColor:o})})})}update(t){this.settingsStore.update(n=>({...n,...t}))}}class ij extends $0.SuggestModal{constructor(t){super(t.app),this.props=t,this.setInstructions([{command:"esc",purpose:"to dismiss"},{command:"↵",purpose:"to confirm"}])}getSuggestions(t){return[{text:t}]}renderSuggestion(t,n){n.createDiv({text:this.props.getDescriptionText(t.text)})}onChooseSuggestion(t,n){this.props.onChooseSuggestion(t)}close(){window.setTimeout(()=>{this.props.onClose(),super.close()})}}function cj(e,t){var o;if(!((e==null?void 0:e.view)instanceof $0.FileView)||!(e!=null&&e.view.file))return;const n=KT(e.view.file,"day");n!=null&&n.isSame((o=Ze(t))==null?void 0:o[0],"day")||!n||t.set([n])}var bj=x0('<div class="search-result svelte-1jzfqa"><!></div>'),pj=x0('<div class="search-results-scroller svelte-1jzfqa"><div class="search-results svelte-1jzfqa"></div></div>');function zj(e,t){Re(t,!0);var n=ne(),o=J0(n);B1(o,()=>t.list.length>0,M=>{var c=pj(),b=e1(c);xo(b,21,()=>t.list,lM,(z,a)=>{var s=bj(),u=e1(s);wM(u,()=>t.match,()=>r0(a)),tb(3,s,()=>WO,()=>mO({axis:"y"})),f0(z,s)}),tb(3,c,()=>WO,()=>mO({axis:"y"})),f0(M,c)}),f0(e,n),ye()}var aj=x0('<div class="properties-wrapper svelte-zowwmd"><!> <!></div>'),sj=x0('<svelte-css-wrapper style="display: contents"><!></svelte-css-wrapper>',1);function Oj(e,t){Re(t,!1);const n=tn(),o=()=>w1(b,"$tasksWithActiveClockProps",n),M=()=>w1(ue,"$settings",n),{workspaceFacade:c,tasksWithActiveClockProps:b,sTaskEditor:z}=po();function a(s,u){const l=new $0.Menu,{location:A}=u;l1.isNotVoid(A);const{path:d,position:{start:{line:W}}}=A;l.addItem(g=>g.setTitle("Clock out").setIcon("square").onClick(()=>{z.edit({path:d,line:W,editFn:EN})})),l.addItem(g=>{g.setTitle("Cancel clock").setIcon("trash-2").onClick(()=>{z.edit({path:d,line:W,editFn:TN})})}),l.addItem(g=>{g.setTitle("Reveal task in file").setIcon("file-input").onClick(async()=>{await c.revealLineInFile(d,W)})}),l.showAtMouseEvent(s)}w2(),zj(e,{get list(){return o()},match:(u,l=yt)=>{var A=sj(),d=J0(A);uM(d,()=>({"--time-block-padding":"var(--size-4-1)"})),_D(d.lastChild,{onpointerup:W=>a(W,l()),get task(){return l()},children:(W,g)=>{var L=aj(),R=e1(L),E=to(()=>l().startTime.format(M().timestampFormat));BA(R,{key:KI,get value(){return r0(E)}});var k=H0(R,2),B=to(()=>Hx(l().startTime,C7.current).format(M().timestampFormat));BA(k,{key:UI,get value(){return r0(B)}}),f0(W,L)},$$slots:{default:!0}}),f0(u,A)},$$slots:{match:!0}}),ye()}var uj=N7('<svg class="svg-icon right-triangle" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M3 8L12 17L21 8"></path></svg>');function lj(e){var t=uj();f0(e,t)}function Aj(e,t){I1(t,!r0(t))}var fj=x0('<div class="tree-item-flair-outer"><span class="tree-item-flair"> </span></div>'),dj=x0("<div><!></div>"),qj=x0('<div class="tree-container svelte-1yd9zwp"><div class="tree-item-self is-clickable svelte-1yd9zwp"><div class="tree-item-icon collapse-icon"><!></div> <div class="tree-item-inner svelte-1yd9zwp"> </div> <!></div> <!></div>');function hj(e,t){Re(t,!0);let n=Oz(fr(t.isInitiallyOpen));const o=W1(()=>r0(n)?"var(--text-muted)":"var(--text-faint)");var M=qj(),c=e1(M);c.__click=[Aj,n];var b=e1(c),z=e1(b);lj(z);var a=H0(b,2),s=e1(a),u=H0(a,2);B1(u,()=>t.flair,A=>{var d=fj(),W=e1(d),g=e1(W);y1(()=>o2(g,t.flair)),f0(A,d)});var l=H0(c,2);B1(l,()=>r0(n),A=>{var d=dj(),W=e1(d);wM(W,()=>t.children),tb(3,d,()=>WO,()=>mO({axis:"y"})),f0(A,d)}),y1(()=>{Qn(b,"is-collapsed",!r0(n)),Ot(a,"color",r0(o)),o2(s,t.title)}),f0(e,M),ye()}ab(["click"]);var Wj=x0("<span> </span>"),mj=x0("<span>You need to install and enable <a>Dataview</a></span>"),gj=x0('<svelte-css-wrapper style="display: contents"><!></svelte-css-wrapper>',1),Rj=x0("<div><!></div>"),yj=x0('<svelte-css-wrapper style="display: contents"><!></svelte-css-wrapper>',1),Lj=x0('<div class="controls svelte-1u6zhce"><div class="header svelte-1u6zhce"><!> <div class="day-controls svelte-1u6zhce"><!> <!> <!></div> <!></div> <div class="pill-wrapper svelte-1u6zhce"><!></div> <!> <!> <!></div>');function vj(e,t){Re(t,!0);const n=tn(),o=()=>w1(d,"$dateRange",n),M=()=>w1(km,"$isToday",n),c=()=>w1(ue,"$settings",n),b=()=>w1(u,"$dataviewLoaded",n),z=()=>w1(A,"$tasksWithActiveClockProps",n),{workspaceFacade:a,initWeeklyView:s,dataviewLoaded:u,reSync:l,tasksWithActiveClockProps:A}=po(),d=rg();let W=Oz(!1);function g(){I1(W,!r0(W))}async function L(){const q0=o()[0].clone().subtract(1,"day");KW(d,fr([q0]))}async function R(){const q0=o()[0].clone().add(1,"day");KW(d,fr([q0]))}async function E(){const q0=await A6(window.moment());await a.openFileInEditor(q0)}function k(q0){const C=new $0.Menu;C.addItem(z0=>z0.setTitle("Re-sync internet calendars").setIcon("sync").onClick(l)),C.addItem(z0=>z0.setTitle("Open multi-day planner").setIcon("table-2").onClick(s)),C.addItem(z0=>{z0.setTitle("Open today's daily note").setIcon("pencil").onClick(E)}),C.showAtMouseEvent(q0)}var B=Lj(),I=e1(B),S=e1(I);V2(S,{onclick:k,children:(q0,C)=>{YI(q0,{class:"svg-icon"})},$$slots:{default:!0}});var N=H0(S,2),P=e1(N);V2(P,{label:"Go to previous day",onclick:L,children:(q0,C)=>{YN(q0,{class:"svg-icon"})},$$slots:{default:!0}});var J=H0(P,2),K=W1(()=>M()(o()[0])?"today":"");V2(J,{get classes(){return r0(K)},label:"Go to file",onclick:async()=>{const q0=await A6(o()[0]);await a.openFileInEditor(q0)},children:(q0,C)=>{var z0=Wj();const d0=W1(()=>`${`date ${M()(o()[0])?"today":""}`??""} svelte-1u6zhce`);var _=e1(z0);y1(()=>o2(_,o()[0].format(c().timelineDateFormat))),y1(()=>hf(z0,r0(d0))),f0(q0,z0)},$$slots:{default:!0}});var V=H0(J,2);V2(V,{label:"Go to next day",onclick:R,children:(q0,C)=>{jN(q0,{class:"svg-icon"})},$$slots:{default:!0}});var x=H0(N,2);V2(x,{get isActive(){return r0(W)},label:"Settings",onclick:g,children:(q0,C)=>{GN(q0,{class:"svg-icon"})},$$slots:{default:!0}});var e0=H0(I,2),Z=e1(e0);BA(Z,{key:"filter",onpointerup:()=>{I1(W,!0)},get value(){return c().dataviewSource}});var j=H0(e0,2);B1(j,()=>!b(),q0=>{var C=gj(),z0=J0(C);uM(z0,()=>({"--callout-margin-inline":"var(--size-4-3)"})),Kl(z0.lastChild,{type:"error",children:(d0,_)=>{var D0=mj(),o0=H0(e1(D0));mM(o0,"href",US),f0(d0,D0)},$$slots:{default:!0}}),f0(q0,C)});var t0=H0(j,2);B1(t0,()=>r0(W),q0=>{var C=Rj(),z0=e1(C);ew(z0,{}),tb(3,C,()=>WO,()=>mO({axis:"y"})),f0(q0,C)});var O0=H0(t0,2),m0=W1(()=>String(z().length));hj(O0,{get flair(){return r0(m0)},isInitiallyOpen:!0,title:"Active clocks",children:(q0,C)=>{var z0=yj(),d0=J0(z0);uM(d0,()=>({"--search-results-bg-color":"var(--background-primary)"})),Oj(d0.lastChild,{}),f0(q0,z0)},$$slots:{default:!0}}),f0(e,B),ye()}var Nj=x0("<!> <!>",1),wj=x0("<!> <!>",1),Dj=x0('<div class="controls svelte-8um20a"><!> <!></div> <!>',1);function Bj(e,t){Re(t,!0);const n=tn(),o=()=>w1(c,"$dateRange",n),M=()=>w1(ue,"$settings",n),c=rg(),b=W1(()=>o()[0]);var z=Dj(),a=J0(z),s=e1(a);vj(s,{});var u=H0(s,2);ZN(u,{className:"timeline-box",children:(d,W=yt)=>{var g=Nj(),L=J0(g);ED(L,{get day(){return r0(b)}});var R=H0(L,2);KN(R,{$$events:{mousedown(...E){var k;(k=W())==null||k.apply(this,E)}}}),f0(d,g)},$$slots:{default:!0}});var l=H0(a,2);QN(l,{children:(d,W=yt)=>{var g=wj(),L=J0(g),R=W1(()=>_A(M()));JN(L,{get visibleHours(){return r0(R)}});var E=H0(L,2);$w(E,{get day(){return r0(b)},get isUnderCursor(){return W()}}),f0(d,g)},$$slots:{default:!0}}),f0(e,z),ye()}class Tj extends $0.ItemView{constructor(t,n,o,M){super(t),this.settings=n,this.componentContext=o,this.dateRanges=M}getViewType(){return nM}getDisplayText(){return"Timeline"}getIcon(){return this.settings().timelineIcon}async onOpen(){const t=this.containerEl.children[1];this.dateRange=this.dateRanges.trackRange([window.moment()]),this.registerEvent(this.app.workspace.on("active-leaf-change",o=>{this.dateRange&&cj(o,this.dateRange)}));const n=new Map([...this.componentContext,[Sm,this.dateRange]]);this.timeline=RA(Bj,{target:t,context:n})}async onClose(){var t;(t=this.dateRange)==null||t.untrack(),this.timeline&&YW(this.timeline)}}function _j(e){const t=new $0.Notice(createFragment(n=>{n.appendText("Changes saved. "),n.append(createEl("a",{text:"UNDO"},o=>{o.addEventListener("pointerup",e,{once:!0})}),createEl("div",{cls:"undo-timeout-bar"},o=>{o.style.animation=`${s8}ms linear forwards shrink`}))}),s8);return t.noticeEl.addClass("planner-undo-notice"),t}/** + * @license Fraction.js v4.3.7 31/08/2023 + * https://www.xarg.org/2014/03/rational-numbers-in-javascript/ + * + * Copyright (c) 2023, Robert Eisele (robert@raw.org) + * Dual licensed under the MIT or GPL Version 2 licenses. + **/var Ej=2e3,Z0={s:1,n:0,d:1};function Qr(e,t){if(isNaN(e=parseInt(e,10)))throw rA();return e*t}function et(e,t){if(t===0)throw Eg();var n=Object.create(hr.prototype);n.s=e<0?-1:1,e=e<0?-e:e;var o=Gp(e,t);return n.n=e/o,n.d=t/o,n}function Yy(e){for(var t={},n=e,o=2,M=4;M<=n;){for(;n%o===0;)n/=o,t[o]=(t[o]||0)+1;M+=1+2*o++}return n!==e?n>1&&(t[n]=(t[n]||0)+1):t[e]=(t[e]||0)+1,t}var l2=function(e,t){var n=0,o=1,M=1,c=0,b=0,z=0,a=1,s=1,u=0,l=1,A=1,d=1,W=1e7,g;if(e!=null)if(t!==void 0){if(n=e,o=t,M=n*o,n%1!==0||o%1!==0)throw Cj()}else switch(typeof e){case"object":{if("d"in e&&"n"in e)n=e.n,o=e.d,"s"in e&&(n*=e.s);else if(0 in e)n=e[0],1 in e&&(o=e[1]);else throw rA();M=n*o;break}case"number":{if(e<0&&(M=e,e=-e),e%1===0)n=e;else if(e>0){for(e>=1&&(s=Math.pow(10,Math.floor(1+Math.log(e)/Math.LN10)),e/=s);l<=W&&d<=W;)if(g=(u+A)/(l+d),e===g){l+d<=W?(n=u+A,o=l+d):d>l?(n=A,o=d):(n=u,o=l);break}else e>g?(u+=A,l+=d):(A+=u,d+=l),l>W?(n=A,o=d):(n=u,o=l);n*=s}else(isNaN(e)||isNaN(t))&&(o=n=NaN);break}case"string":{if(l=e.match(/\d+|./g),l===null)throw rA();if(l[u]==="-"?(M=-1,u++):l[u]==="+"&&u++,l.length===u+1?b=Qr(l[u++],M):l[u+1]==="."||l[u]==="."?(l[u]!=="."&&(c=Qr(l[u++],M)),u++,(u+1===l.length||l[u+1]==="("&&l[u+3]===")"||l[u+1]==="'"&&l[u+3]==="'")&&(b=Qr(l[u],M),a=Math.pow(10,l[u].length),u++),(l[u]==="("&&l[u+2]===")"||l[u]==="'"&&l[u+2]==="'")&&(z=Qr(l[u+1],M),s=Math.pow(10,l[u+1].length)-1,u+=3)):l[u+1]==="/"||l[u+1]===":"?(b=Qr(l[u],M),a=Qr(l[u+2],1),u+=3):l[u+3]==="/"&&l[u+1]===" "&&(c=Qr(l[u],M),b=Qr(l[u+2],M),a=Qr(l[u+4],1),u+=5),l.length<=u){o=a*s,M=n=z+o*c+s*b;break}}default:throw rA()}if(o===0)throw Eg();Z0.s=M<0?-1:1,Z0.n=Math.abs(n),Z0.d=Math.abs(o)};function Sj(e,t,n){for(var o=1;t>0;e=e*e%n,t>>=1)t&1&&(o=o*e%n);return o}function kj(e,t){for(;t%2===0;t/=2);for(;t%5===0;t/=5);if(t===1)return 0;for(var n=10%t,o=1;n!==1;o++)if(n=n*10%t,o>Ej)return 0;return o}function Xj(e,t,n){for(var o=1,M=Sj(10,n,t),c=0;c<300;c++){if(o===M)return c;o=o*10%t,M=M*10%t}return 0}function Gp(e,t){if(!e)return t;if(!t)return e;for(;;){if(e%=t,!e)return t;if(t%=e,!t)return e}}function hr(e,t){if(l2(e,t),this instanceof hr)e=Gp(Z0.d,Z0.n),this.s=Z0.s,this.n=Z0.n/e,this.d=Z0.d/e;else return et(Z0.s*Z0.n,Z0.d)}var Eg=function(){return new Error("Division by Zero")},rA=function(){return new Error("Invalid argument")},Cj=function(){return new Error("Parameters must be integer")};hr.prototype={s:1,n:0,d:1,abs:function(){return et(this.n,this.d)},neg:function(){return et(-this.s*this.n,this.d)},add:function(e,t){return l2(e,t),et(this.s*this.n*Z0.d+Z0.s*this.d*Z0.n,this.d*Z0.d)},sub:function(e,t){return l2(e,t),et(this.s*this.n*Z0.d-Z0.s*this.d*Z0.n,this.d*Z0.d)},mul:function(e,t){return l2(e,t),et(this.s*Z0.s*this.n*Z0.n,this.d*Z0.d)},div:function(e,t){return l2(e,t),et(this.s*Z0.s*this.n*Z0.d,this.d*Z0.n)},clone:function(){return et(this.s*this.n,this.d)},mod:function(e,t){if(isNaN(this.n)||isNaN(this.d))return new hr(NaN);if(e===void 0)return et(this.s*this.n%this.d,1);if(l2(e,t),Z0.n===0&&this.d===0)throw Eg();return et(this.s*(Z0.d*this.n)%(Z0.n*this.d),Z0.d*this.d)},gcd:function(e,t){return l2(e,t),et(Gp(Z0.n,this.n)*Gp(Z0.d,this.d),Z0.d*this.d)},lcm:function(e,t){return l2(e,t),Z0.n===0&&this.n===0?et(0,1):et(Z0.n*this.n,Gp(Z0.n,this.n)*Gp(Z0.d,this.d))},ceil:function(e){return e=Math.pow(10,e||0),isNaN(this.n)||isNaN(this.d)?new hr(NaN):et(Math.ceil(e*this.s*this.n/this.d),e)},floor:function(e){return e=Math.pow(10,e||0),isNaN(this.n)||isNaN(this.d)?new hr(NaN):et(Math.floor(e*this.s*this.n/this.d),e)},round:function(e){return e=Math.pow(10,e||0),isNaN(this.n)||isNaN(this.d)?new hr(NaN):et(Math.round(e*this.s*this.n/this.d),e)},roundTo:function(e,t){return l2(e,t),et(this.s*Math.round(this.n*Z0.d/(this.d*Z0.n))*Z0.n,Z0.d)},inverse:function(){return et(this.s*this.d,this.n)},pow:function(e,t){if(l2(e,t),Z0.d===1)return Z0.s<0?et(Math.pow(this.s*this.d,Z0.n),Math.pow(this.n,Z0.n)):et(Math.pow(this.s*this.n,Z0.n),Math.pow(this.d,Z0.n));if(this.s<0)return null;var n=Yy(this.n),o=Yy(this.d),M=1,c=1;for(var b in n)if(b!=="1"){if(b==="0"){M=0;break}if(n[b]*=Z0.n,n[b]%Z0.d===0)n[b]/=Z0.d;else return null;M*=Math.pow(b,n[b])}for(var b in o)if(b!=="1"){if(o[b]*=Z0.n,o[b]%Z0.d===0)o[b]/=Z0.d;else return null;c*=Math.pow(b,o[b])}return Z0.s<0?et(c,M):et(M,c)},equals:function(e,t){return l2(e,t),this.s*this.n*Z0.d===Z0.s*Z0.n*this.d},compare:function(e,t){l2(e,t);var n=this.s*this.n*Z0.d-Z0.s*Z0.n*this.d;return(0<n)-(n<0)},simplify:function(e){if(isNaN(this.n)||isNaN(this.d))return this;e=e||.001;for(var t=this.abs(),n=t.toContinued(),o=1;o<n.length;o++){for(var M=et(n[o-1],1),c=o-2;c>=0;c--)M=M.inverse().add(n[c]);if(Math.abs(M.sub(t).valueOf())<e)return M.mul(this.s)}return this},divisible:function(e,t){return l2(e,t),!(!(Z0.n*this.d)||this.n*Z0.d%(Z0.n*this.d))},valueOf:function(){return this.s*this.n/this.d},toFraction:function(e){var t,n="",o=this.n,M=this.d;return this.s<0&&(n+="-"),M===1?n+=o:(e&&(t=Math.floor(o/M))>0&&(n+=t,n+=" ",o%=M),n+=o,n+="/",n+=M),n},toLatex:function(e){var t,n="",o=this.n,M=this.d;return this.s<0&&(n+="-"),M===1?n+=o:(e&&(t=Math.floor(o/M))>0&&(n+=t,o%=M),n+="\\frac{",n+=o,n+="}{",n+=M,n+="}"),n},toContinued:function(){var e,t=this.n,n=this.d,o=[];if(isNaN(t)||isNaN(n))return o;do o.push(Math.floor(t/n)),e=t%n,t=n,n=e;while(t!==1);return o},toString:function(e){var t=this.n,n=this.d;if(isNaN(t)||isNaN(n))return"NaN";e=e||15;var o=kj(t,n),M=Xj(t,n,o),c=this.s<0?"-":"";if(c+=t/n|0,t%=n,t*=10,t&&(c+="."),o){for(var b=M;b--;)c+=t/n|0,t%=n,t*=10;c+="(";for(var b=o;b--;)c+=t/n|0,t%=n,t*=10;c+=")"}else for(var b=e;t&&b--;)c+=t/n|0,t%=n,t*=10;return c}};function xj(e){const t=e?e.span/e.columns*100:100,n=e?100/e.columns*e.start:0;return{widthPercent:t,xOffsetPercent:n}}const jy="empty",aW="taken";function Fj(e){return e.reduce((t,n)=>{const o=Ij(n,e);return Pj(o,t)},new Map)}function Ij(e,t){return t.reduce((n,o)=>(o===e||n.every(c=>Uj(c,o))&&n.push(o),n),[e]).sort((n,o)=>n.startTime.diff(o.startTime))}function Pj(e,t){const n=new Map([...t]),[o,M]=me.partition(({id:l})=>n.has(l),e);if(M.length===0)return n;const c=o.reduce((l,A)=>{const d=n.get(A.id);return l1.isNotVoid(d),new hr(d.span,d.columns).add(l)},new hr(0)),z=new hr(1).sub(c).div(M.length),a=z.d,s=z.n,u=Array(a).fill(jy);return o.forEach(l=>{const A=n.get(l.id);l1.isNotVoid(A);const{start:d,span:W,columns:g}=A,L=a/g,R=L*d,E=L*W,k=R+E;u.fill(aW,R,k)}),M.forEach(l=>{const A=u.findIndex(E=>E===jy),d=u.findIndex((E,k)=>k>A&&E===aW),W=d-A,L=d===-1?s:Math.min(s,W),R=A+L;u.fill(aW,A,R),n.set(l.id,{start:A,span:L,columns:a})}),n}function Uj(e,t){const[n,o]=N1(e.startTime)<N1(t.startTime)?[e,t]:[t,e];return Tt(n)>N1(o.startTime)}function SD(e){if(e.length===0)return[];const t=Fj(e);return e.map(n=>{const o=t.get(n.id);return{...n,placing:xj(o)}})}function $j(e){return no([],t=>{const n=e.on("dataview:metadata-change",(...o)=>t(o));return()=>{e.offref(n)}})}function Hj(e){return no(!!$l(e),t=>{const n=e.metadataCache.on("dataview:metadata-change",()=>{e.metadataCache.offref(n),t(!0)})})}function Yj({listsFromVisibleDailyNotes:e,tasksFromExtraSources:t,settingsStore:n}){return G1([e,t,n],([o,M,c])=>{const b=dF([...o,...M]);return c.showCompletedTasks?b:b.filter(z=>!z.completed)})}function jj(e,t){let n,o;function M(){n=window.setTimeout(()=>{e(...o),n=null},t)}function c(...z){o=z,n||M()}function b(){n&&(clearTimeout(n),M())}return[c,b]}function Ri(){return{}}function kD(e,t,n){return no({},o=>{const[M,c]=jj(()=>o(Ri()),n),b=e.subscribe(M),z=t.subscribe(c);return()=>{b(),z()}})}function Vj({workspaceFacade:e,startEdit:t,editOperation:n,settings:o,pointerDateTime:M}){function c(){const u=Ze(M).dateTime;if(!u)throw new Error("Day cannot be undefined on edit");const l=N1(u),A=vF({day:u,startMinutes:l,settings:Ze(o)});t({task:{...A,isGhost:!0},mode:D1.CREATE})}function b(u,l){if(!Ze(M).dateTime)throw new Error("Day cannot be undefined on edit");t({task:u,mode:l})}async function z(u){var d;if(Ze(n)||!u.location)return;const{path:l,position:A}=u.location;await e.revealLineInFile(l,(d=A==null?void 0:A.start)==null?void 0:d.line)}function a(u){let l=Ze(M).dateTime;l||(console.warn("Day should not be undefined on edit"),l=window.moment());const A={...u,startTime:u.location&&bf(u.location.path,"day")||window.moment()};t({task:A,mode:D1.DRAG})}function s(u){const l=Ze(M).dateTime;if(!l)throw new Error("Day cannot be undefined on edit");const A={...u,startTime:l};t({task:A,mode:D1.SCHEDULE_SEARCH_RESULT})}return{handleGripMouseDown:b,handleContainerMouseDown:c,handleResizerMouseDown:b,handleTaskMouseUp:z,handleUnscheduledTaskGripMouseDown:a,handleSearchResultGripMouseDown:s}}function Gj(e){return G1(e,t=>(t==null?void 0:t.mode)===D1.CREATE||(t==null?void 0:t.mode)===D1.DRAG||(t==null?void 0:t.mode)===D1.DRAG_AND_SHIFT_OTHERS?{bodyCursor:"grabbing",gripCursor:"grabbing"}:(t==null?void 0:t.mode)===D1.RESIZE||(t==null?void 0:t.mode)===D1.RESIZE_AND_SHIFT_OTHERS?{bodyCursor:"row-resize",gripCursor:"grab"}:{bodyCursor:"unset",gripCursor:"grab"})}function jf(e,t,n){if(t<0)throw new Error("Cannot use negative indexes for splicing");const o=[...e];return o[t]=n,o}function Kj(e,t,n,o){return e.map(M=>M.id===t.id?{...M,durationMinutes:Math.max(n-N1(M.startTime),o.minimalDurationMinutes)}:M)}function Vy(e,t,n){const o=e.findIndex(b=>b.id===t.id),M=e[o];l1.isNotVoid(M);const c={...M,isAllDayEvent:!1,startTime:$t(n,M.startTime)};return jf(e,o,c)}var YA={exports:{}};/** + * @license + * Lodash <https://lodash.com/> + * Copyright OpenJS Foundation and other contributors <https://openjsf.org/> + * Released under MIT license <https://lodash.com/license> + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */YA.exports;(function(e,t){(function(){var n,o="4.17.21",M=200,c="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",b="Expected a function",z="Invalid `variable` option passed into `_.template`",a="__lodash_hash_undefined__",s=500,u="__lodash_placeholder__",l=1,A=2,d=4,W=1,g=2,L=1,R=2,E=4,k=8,B=16,I=32,S=64,N=128,P=256,J=512,K=30,V="...",x=800,e0=16,Z=1,j=2,t0=3,O0=1/0,m0=9007199254740991,q0=17976931348623157e292,C=NaN,z0=4294967295,d0=z0-1,_=z0>>>1,D0=[["ary",N],["bind",L],["bindKey",R],["curry",k],["curryRight",B],["flip",J],["partial",I],["partialRight",S],["rearg",P]],o0="[object Arguments]",i0="[object Array]",c0="[object AsyncFunction]",s0="[object Boolean]",L0="[object Date]",G0="[object DOMException]",p1="[object Error]",n1="[object Function]",$="[object GeneratorFunction]",n0="[object Map]",p0="[object Number]",g0="[object Null]",S0="[object Object]",K0="[object Promise]",X="[object Proxy]",j0="[object RegExp]",U0="[object Set]",T1="[object String]",f1="[object Symbol]",ot="[object Undefined]",vt="[object WeakMap]",u0="[object WeakSet]",N0="[object ArrayBuffer]",V0="[object DataView]",i1="[object Float32Array]",O1="[object Float64Array]",de="[object Int8Array]",rt="[object Int16Array]",j1="[object Int32Array]",Ue="[object Uint8Array]",Te="[object Uint8ClampedArray]",x1="[object Uint16Array]",Xe="[object Uint32Array]",T=/\b__p \+= '';/g,G=/\b(__p \+=) '' \+/g,M0=/(__e\(.*?\)|\b__t\)) \+\n'';/g,l0=/&(?:amp|lt|gt|quot|#39);/g,y0=/[&<>"']/g,_0=RegExp(l0.source),E0=RegExp(y0.source),c1=/<%-([\s\S]+?)%>/g,K1=/<%([\s\S]+?)%>/g,$e=/<%=([\s\S]+?)%>/g,_e=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Et=/^\w*$/,qe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ve=/[\\^$.*+?()[\]{}|]/g,T2=RegExp(ve.source),r2=/^\s+/,Z1=/\s/,Jo=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Qo=/\{\n\/\* \[wrapped with (.+)\] \*/,so=/,? & /,yn=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,M2=/[()=,{}\[\]\/\s]/,gd=/\\(\\)?/g,Ji=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,EM=/\w*$/,Rd=/^[-+]0x[0-9a-f]+$/i,ub=/^0b[01]+$/i,lb=/^\[object .+?Constructor\]$/,pu=/^0o[0-7]+$/i,i2=/^(?:0|[1-9]\d*)$/,Qi=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ab=/($^)/,Oo=/['\n\r\u2028\u2029\\]/g,ec="\\ud800-\\udfff",yd="\\u0300-\\u036f",tc="\\ufe20-\\ufe2f",c2="\\u20d0-\\u20ff",SM=yd+tc+c2,nc="\\u2700-\\u27bf",zu="a-z\\xdf-\\xf6\\xf8-\\xff",oc="\\xac\\xb1\\xd7\\xf7",Ld="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",rc="\\u2000-\\u206f",kM=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",fb="A-Z\\xc0-\\xd6\\xd8-\\xde",db="\\ufe0e\\ufe0f",qb=oc+Ld+rc+kM,Mc="['’]",Zz="["+ec+"]",hb="["+qb+"]",XM="["+SM+"]",Wb="\\d+",Jz="["+nc+"]",au="["+zu+"]",su="[^"+ec+qb+Wb+nc+zu+fb+"]",Qz="\\ud83c[\\udffb-\\udfff]",Ou="(?:"+XM+"|"+Qz+")",ea="[^"+ec+"]",ta="(?:\\ud83c[\\udde6-\\uddff]){2}",na="[\\ud800-\\udbff][\\udc00-\\udfff]",CM="["+fb+"]",uu="\\u200d",oa="(?:"+au+"|"+su+")",vd="(?:"+CM+"|"+su+")",lu="(?:"+Mc+"(?:d|ll|m|re|s|t|ve))?",Au="(?:"+Mc+"(?:D|LL|M|RE|S|T|VE))?",mb=Ou+"?",fu="["+db+"]?",ra="(?:"+uu+"(?:"+[ea,ta,na].join("|")+")"+fu+mb+")*",Nd="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",wd="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",du=fu+mb+ra,Dd="(?:"+[Jz,ta,na].join("|")+")"+du,Bd="(?:"+[ea+XM+"?",XM,ta,na,Zz].join("|")+")",Td=RegExp(Mc,"g"),_d=RegExp(XM,"g"),Ma=RegExp(Qz+"(?="+Qz+")|"+Bd+du,"g"),qu=RegExp([CM+"?"+au+"+"+lu+"(?="+[hb,CM,"$"].join("|")+")",vd+"+"+Au+"(?="+[hb,CM+oa,"$"].join("|")+")",CM+"?"+oa+"+"+lu,CM+"+"+Au,wd,Nd,Wb,Dd].join("|"),"g"),Ed=RegExp("["+uu+ec+SM+db+"]"),Sd=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,kd=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Xd=-1,Ne={};Ne[i1]=Ne[O1]=Ne[de]=Ne[rt]=Ne[j1]=Ne[Ue]=Ne[Te]=Ne[x1]=Ne[Xe]=!0,Ne[o0]=Ne[i0]=Ne[N0]=Ne[s0]=Ne[V0]=Ne[L0]=Ne[p1]=Ne[n1]=Ne[n0]=Ne[p0]=Ne[S0]=Ne[j0]=Ne[U0]=Ne[T1]=Ne[vt]=!1;var he={};he[o0]=he[i0]=he[N0]=he[V0]=he[s0]=he[L0]=he[i1]=he[O1]=he[de]=he[rt]=he[j1]=he[n0]=he[p0]=he[S0]=he[j0]=he[U0]=he[T1]=he[f1]=he[Ue]=he[Te]=he[x1]=he[Xe]=!0,he[p1]=he[n1]=he[vt]=!1;var gb={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},Cd={"&":"&","<":"<",">":">",'"':""","'":"'"},Rb={"&":"&","<":"<",">":">",""":'"',"'":"'"},xd={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Fd=parseFloat,Id=parseInt,ia=typeof e2=="object"&&e2&&e2.Object===Object&&e2,hu=typeof self=="object"&&self&&self.Object===Object&&self,lt=ia||hu||Function("return this")(),ca=t&&!t.nodeType&&t,Xr=ca&&!0&&e&&!e.nodeType&&e,Wu=Xr&&Xr.exports===ca,ba=Wu&&ia.process,Ln=function(){try{var v=Xr&&Xr.require&&Xr.require("util").types;return v||ba&&ba.binding&&ba.binding("util")}catch{}}(),pa=Ln&&Ln.isArrayBuffer,za=Ln&&Ln.isDate,yb=Ln&&Ln.isMap,mu=Ln&&Ln.isRegExp,aa=Ln&&Ln.isSet,ic=Ln&&Ln.isTypedArray;function rn(v,F,h){switch(h.length){case 0:return v.call(F);case 1:return v.call(F,h[0]);case 2:return v.call(F,h[0],h[1]);case 3:return v.call(F,h[0],h[1],h[2])}return v.apply(F,h)}function Pd(v,F,h,a0){for(var v0=-1,w0=v==null?0:v.length;++v0<w0;){var U1=v[v0];F(a0,U1,h(U1),v)}return a0}function vn(v,F){for(var h=-1,a0=v==null?0:v.length;++h<a0&&F(v[h],h,v)!==!1;);return v}function gu(v,F){for(var h=v==null?0:v.length;h--&&F(v[h],h,v)!==!1;);return v}function Lb(v,F){for(var h=-1,a0=v==null?0:v.length;++h<a0;)if(!F(v[h],h,v))return!1;return!0}function er(v,F){for(var h=-1,a0=v==null?0:v.length,v0=0,w0=[];++h<a0;){var U1=v[h];F(U1,h,v)&&(w0[v0++]=U1)}return w0}function cc(v,F){var h=v==null?0:v.length;return!!h&&xM(v,F,0)>-1}function bc(v,F,h){for(var a0=-1,v0=v==null?0:v.length;++a0<v0;)if(h(F,v[a0]))return!0;return!1}function We(v,F){for(var h=-1,a0=v==null?0:v.length,v0=Array(a0);++h<a0;)v0[h]=F(v[h],h,v);return v0}function Nn(v,F){for(var h=-1,a0=F.length,v0=v.length;++h<a0;)v[v0+h]=F[h];return v}function vb(v,F,h,a0){var v0=-1,w0=v==null?0:v.length;for(a0&&w0&&(h=v[++v0]);++v0<w0;)h=F(h,v[v0],v0,v);return h}function Ru(v,F,h,a0){var v0=v==null?0:v.length;for(a0&&v0&&(h=v[--v0]);v0--;)h=F(h,v[v0],v0,v);return h}function sa(v,F){for(var h=-1,a0=v==null?0:v.length;++h<a0;)if(F(v[h],h,v))return!0;return!1}var yu=la("length");function Lu(v){return v.split("")}function vu(v){return v.match(yn)||[]}function Oa(v,F,h){var a0;return h(v,function(v0,w0,U1){if(F(v0,w0,U1))return a0=w0,!1}),a0}function Nb(v,F,h,a0){for(var v0=v.length,w0=h+(a0?1:-1);a0?w0--:++w0<v0;)if(F(v[w0],w0,v))return w0;return-1}function xM(v,F,h){return F===F?Su(v,F,h):Nb(v,ua,h)}function Ud(v,F,h,a0){for(var v0=h-1,w0=v.length;++v0<w0;)if(a0(v[v0],F))return v0;return-1}function ua(v){return v!==v}function Nu(v,F){var h=v==null?0:v.length;return h?da(v,F)/h:C}function la(v){return function(F){return F==null?n:F[v]}}function Aa(v){return function(F){return v==null?n:v[F]}}function wu(v,F,h,a0,v0){return v0(v,function(w0,U1,Me){h=a0?(a0=!1,w0):F(h,w0,U1,Me)}),h}function fa(v,F){var h=v.length;for(v.sort(F);h--;)v[h]=v[h].value;return v}function da(v,F){for(var h,a0=-1,v0=v.length;++a0<v0;){var w0=F(v[a0]);w0!==n&&(h=h===n?w0:h+w0)}return h}function qa(v,F){for(var h=-1,a0=Array(v);++h<v;)a0[h]=F(h);return a0}function $d(v,F){return We(F,function(h){return[h,v[h]]})}function Du(v){return v&&v.slice(0,ma(v)+1).replace(r2,"")}function wn(v){return function(F){return v(F)}}function le(v,F){return We(F,function(h){return v[h]})}function J1(v,F){return v.has(F)}function Bu(v,F){for(var h=-1,a0=v.length;++h<a0&&xM(F,v[h],0)>-1;);return h}function Tu(v,F){for(var h=v.length;h--&&xM(F,v[h],0)>-1;);return h}function Hd(v,F){for(var h=v.length,a0=0;h--;)v[h]===F&&++a0;return a0}var Yd=Aa(gb),jd=Aa(Cd);function Vd(v){return"\\"+xd[v]}function _u(v,F){return v==null?n:v[F]}function FM(v){return Ed.test(v)}function Nt(v){return Sd.test(v)}function ha(v){for(var F,h=[];!(F=v.next()).done;)h.push(F.value);return h}function uo(v){var F=-1,h=Array(v.size);return v.forEach(function(a0,v0){h[++F]=[v0,a0]}),h}function Wa(v,F){return function(h){return v(F(h))}}function _2(v,F){for(var h=-1,a0=v.length,v0=0,w0=[];++h<a0;){var U1=v[h];(U1===F||U1===u)&&(v[h]=u,w0[v0++]=h)}return w0}function Ht(v){var F=-1,h=Array(v.size);return v.forEach(function(a0){h[++F]=a0}),h}function Eu(v){var F=-1,h=Array(v.size);return v.forEach(function(a0){h[++F]=[a0,a0]}),h}function Su(v,F,h){for(var a0=h-1,v0=v.length;++a0<v0;)if(v[a0]===F)return a0;return-1}function ku(v,F,h){for(var a0=h+1;a0--;)if(v[a0]===F)return a0;return a0}function Cr(v){return FM(v)?Kd(v):yu(v)}function In(v){return FM(v)?Zd(v):Lu(v)}function ma(v){for(var F=v.length;F--&&Z1.test(v.charAt(F)););return F}var Gd=Aa(Rb);function Kd(v){for(var F=Ma.lastIndex=0;Ma.test(v);)++F;return F}function Zd(v){return v.match(Ma)||[]}function Jd(v){return v.match(qu)||[]}var Qd=function v(F){F=F==null?lt:b2.defaults(lt.Object(),F,b2.pick(lt,kd));var h=F.Array,a0=F.Date,v0=F.Error,w0=F.Function,U1=F.Math,Me=F.Object,ga=F.RegExp,xr=F.String,Pn=F.TypeError,wb=h.prototype,e4=w0.prototype,IM=Me.prototype,Db=F["__core-js_shared__"],Un=e4.toString,ie=IM.hasOwnProperty,t4=0,Xu=function(){var r=/[^.]+$/.exec(Db&&Db.keys&&Db.keys.IE_PROTO||"");return r?"Symbol(src)_1."+r:""}(),Bb=IM.toString,n4=Un.call(Me),lo=lt._,o4=ga("^"+Un.call(ie).replace(ve,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Tb=Wu?F.Buffer:n,tr=F.Symbol,_b=F.Uint8Array,Cu=Tb?Tb.allocUnsafe:n,E2=Wa(Me.getPrototypeOf,Me),xu=Me.create,Fu=IM.propertyIsEnumerable,Mn=wb.splice,Iu=tr?tr.isConcatSpreadable:n,pc=tr?tr.iterator:n,Fr=tr?tr.toStringTag:n,Eb=function(){try{var r=Gr(Me,"defineProperty");return r({},"",{}),r}catch{}}(),r4=F.clearTimeout!==lt.clearTimeout&&F.clearTimeout,Pu=a0&&a0.now!==lt.Date.now&&a0.now,Uu=F.setTimeout!==lt.setTimeout&&F.setTimeout,Sb=U1.ceil,kb=U1.floor,zc=Me.getOwnPropertySymbols,ac=Tb?Tb.isBuffer:n,sc=F.isFinite,M4=wb.join,$u=Wa(Me.keys,Me),zt=U1.max,Ee=U1.min,Ra=a0.now,Ir=F.parseInt,Dn=U1.random,i4=wb.reverse,Xb=Gr(F,"DataView"),PM=Gr(F,"Map"),Pr=Gr(F,"Promise"),UM=Gr(F,"Set"),nr=Gr(F,"WeakMap"),Oc=Gr(Me,"create"),uc=nr&&new nr,He={},S2=Kr(Xb),ya=Kr(PM),Cb=Kr(Pr),Ur=Kr(UM),Hu=Kr(nr),At=tr?tr.prototype:n,$r=At?At.valueOf:n,Yu=At?At.toString:n;function w(r){if(De(r)&&!z1(r)&&!(r instanceof g1)){if(r instanceof $n)return r;if(ie.call(r,"__wrapped__"))return Nc(r)}return new $n(r)}var $M=function(){function r(){}return function(i){if(!xe(i))return{};if(xu)return xu(i);r.prototype=i;var p=new r;return r.prototype=n,p}}();function HM(){}function $n(r,i){this.__wrapped__=r,this.__actions__=[],this.__chain__=!!i,this.__index__=0,this.__values__=n}w.templateSettings={escape:c1,evaluate:K1,interpolate:$e,variable:"",imports:{_:w}},w.prototype=HM.prototype,w.prototype.constructor=w,$n.prototype=$M(HM.prototype),$n.prototype.constructor=$n;function g1(r){this.__wrapped__=r,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=z0,this.__views__=[]}function ju(){var r=new g1(this.__wrapped__);return r.__actions__=jt(this.__actions__),r.__dir__=this.__dir__,r.__filtered__=this.__filtered__,r.__iteratees__=jt(this.__iteratees__),r.__takeCount__=this.__takeCount__,r.__views__=jt(this.__views__),r}function c4(){if(this.__filtered__){var r=new g1(this);r.__dir__=-1,r.__filtered__=!0}else r=this.clone(),r.__dir__*=-1;return r}function b4(){var r=this.__wrapped__.value(),i=this.__dir__,p=z1(r),O=i<0,f=p?r.length:0,q=R3(0,f,this.__views__),m=q.start,y=q.end,D=y-m,H=O?y:m-1,U=this.__iteratees__,Q=U.length,b0=0,A0=Ee(D,this.__takeCount__);if(!p||!O&&f==D&&A0==D)return np(r,this.__actions__);var W0=[];e:for(;D--&&b0<A0;){H+=i;for(var k0=-1,R0=r[H];++k0<Q;){var F0=U[k0],P0=F0.iteratee,se=F0.type,Oe=P0(R0);if(se==j)R0=Oe;else if(!Oe){if(se==Z)continue e;break e}}W0[b0++]=R0}return W0}g1.prototype=$M(HM.prototype),g1.prototype.constructor=g1;function p2(r){var i=-1,p=r==null?0:r.length;for(this.clear();++i<p;){var O=r[i];this.set(O[0],O[1])}}function p4(){this.__data__=Oc?Oc(null):{},this.size=0}function z4(r){var i=this.has(r)&&delete this.__data__[r];return this.size-=i?1:0,i}function La(r){var i=this.__data__;if(Oc){var p=i[r];return p===a?n:p}return ie.call(i,r)?i[r]:n}function Vu(r){var i=this.__data__;return Oc?i[r]!==n:ie.call(i,r)}function a4(r,i){var p=this.__data__;return this.size+=this.has(r)?0:1,p[r]=Oc&&i===n?a:i,this}p2.prototype.clear=p4,p2.prototype.delete=z4,p2.prototype.get=La,p2.prototype.has=Vu,p2.prototype.set=a4;function Ao(r){var i=-1,p=r==null?0:r.length;for(this.clear();++i<p;){var O=r[i];this.set(O[0],O[1])}}function s4(){this.__data__=[],this.size=0}function Gu(r){var i=this.__data__,p=Fb(i,r);if(p<0)return!1;var O=i.length-1;return p==O?i.pop():Mn.call(i,p,1),--this.size,!0}function va(r){var i=this.__data__,p=Fb(i,r);return p<0?n:i[p][1]}function O4(r){return Fb(this.__data__,r)>-1}function Na(r,i){var p=this.__data__,O=Fb(p,r);return O<0?(++this.size,p.push([r,i])):p[O][1]=i,this}Ao.prototype.clear=s4,Ao.prototype.delete=Gu,Ao.prototype.get=va,Ao.prototype.has=O4,Ao.prototype.set=Na;function k2(r){var i=-1,p=r==null?0:r.length;for(this.clear();++i<p;){var O=r[i];this.set(O[0],O[1])}}function Ku(){this.size=0,this.__data__={hash:new p2,map:new(PM||Ao),string:new p2}}function Zu(r){var i=zp(this,r).delete(r);return this.size-=i?1:0,i}function xb(r){return zp(this,r).get(r)}function u4(r){return zp(this,r).has(r)}function Ju(r,i){var p=zp(this,r),O=p.size;return p.set(r,i),this.size+=p.size==O?0:1,this}k2.prototype.clear=Ku,k2.prototype.delete=Zu,k2.prototype.get=xb,k2.prototype.has=u4,k2.prototype.set=Ju;function or(r){var i=-1,p=r==null?0:r.length;for(this.__data__=new k2;++i<p;)this.add(r[i])}function l4(r){return this.__data__.set(r,a),this}function Qu(r){return this.__data__.has(r)}or.prototype.add=or.prototype.push=l4,or.prototype.has=Qu;function z2(r){var i=this.__data__=new Ao(r);this.size=i.size}function wa(){this.__data__=new Ao,this.size=0}function e3(r){var i=this.__data__,p=i.delete(r);return this.size=i.size,p}function Da(r){return this.__data__.get(r)}function A4(r){return this.__data__.has(r)}function Ba(r,i){var p=this.__data__;if(p instanceof Ao){var O=p.__data__;if(!PM||O.length<M-1)return O.push([r,i]),this.size=++p.size,this;p=this.__data__=new k2(O)}return p.set(r,i),this.size=p.size,this}z2.prototype.clear=wa,z2.prototype.delete=e3,z2.prototype.get=Da,z2.prototype.has=A4,z2.prototype.set=Ba;function R1(r,i){var p=z1(r),O=!p&&pr(r),f=!p&&!O&&O2(r),q=!p&&!O&&!f&&No(r),m=p||O||f||q,y=m?qa(r.length,xr):[],D=y.length;for(var H in r)(i||ie.call(r,H))&&!(m&&(H=="length"||f&&(H=="offset"||H=="parent")||q&&(H=="buffer"||H=="byteLength"||H=="byteOffset")||mo(H,D)))&&y.push(H);return y}function t3(r){var i=r.length;return i?r[Wc(0,i-1)]:n}function f4(r,i){return vc(jt(r),cn(i,0,r.length))}function lc(r){return vc(jt(r))}function Ta(r,i,p){(p!==n&&!ce(r[i],p)||p===n&&!(i in r))&&X2(r,i,p)}function St(r,i,p){var O=r[i];(!(ie.call(r,i)&&ce(O,p))||p===n&&!(i in r))&&X2(r,i,p)}function Fb(r,i){for(var p=r.length;p--;)if(ce(r[p][0],i))return p;return-1}function Ib(r,i,p,O){return fo(r,function(f,q,m){i(O,f,p(f),m)}),O}function Pb(r,i){return r&&U2(i,dt(i),r)}function n3(r,i){return r&&U2(i,Jt(i),r)}function X2(r,i,p){i=="__proto__"&&Eb?Eb(r,i,{configurable:!0,enumerable:!0,value:p,writable:!0}):r[i]=p}function Yt(r,i){for(var p=-1,O=i.length,f=h(O),q=r==null;++p<O;)f[p]=q?n:$2(r,i[p]);return f}function cn(r,i,p){return r===r&&(p!==n&&(r=r<=p?r:p),i!==n&&(r=r>=i?r:i)),r}function bn(r,i,p,O,f,q){var m,y=i&l,D=i&A,H=i&d;if(p&&(m=f?p(r,O,f,q):p(r)),m!==n)return m;if(!xe(r))return r;var U=z1(r);if(U){if(m=x4(r),!y)return jt(r,m)}else{var Q=xt(r),b0=Q==n1||Q==$;if(O2(r))return ja(r,y);if(Q==S0||Q==o0||b0&&!f){if(m=D||b0?{}:y3(r),!y)return D?D4(r,n3(m,r)):w4(r,Pb(m,r))}else{if(!he[Q])return f?r:{};m=F4(r,Q,y)}}q||(q=new z2);var A0=q.get(r);if(A0)return A0;q.set(r,m),Q3(r)?r.forEach(function(R0){m.add(bn(R0,i,p,R0,r,q))}):yo(r)&&r.forEach(function(R0,F0){m.set(F0,bn(R0,i,p,F0,r,q))});var W0=H?D?es:Qa:D?Jt:dt,k0=U?n:W0(r);return vn(k0||r,function(R0,F0){k0&&(F0=R0,R0=r[F0]),St(m,F0,bn(R0,i,p,F0,r,q))}),m}function o3(r){var i=dt(r);return function(p){return Ac(p,r,i)}}function Ac(r,i,p){var O=p.length;if(r==null)return!O;for(r=Me(r);O--;){var f=p[O],q=i[f],m=r[f];if(m===n&&!(f in r)||!q(m))return!1}return!0}function _a(r,i,p){if(typeof r!="function")throw new Pn(b);return Lc(function(){r.apply(n,p)},i)}function Hr(r,i,p,O){var f=-1,q=cc,m=!0,y=r.length,D=[],H=i.length;if(!y)return D;p&&(i=We(i,wn(p))),O?(q=bc,m=!1):i.length>=M&&(q=J1,m=!1,i=new or(i));e:for(;++f<y;){var U=r[f],Q=p==null?U:p(U);if(U=O||U!==0?U:0,m&&Q===Q){for(var b0=H;b0--;)if(i[b0]===Q)continue e;D.push(U)}else q(i,Q,O)||D.push(U)}return D}var fo=O3(C2),Ub=O3($b,!0);function Ea(r,i){var p=!0;return fo(r,function(O,f,q){return p=!!i(O,f,q),p}),p}function a2(r,i,p){for(var O=-1,f=r.length;++O<f;){var q=r[O],m=i(q);if(m!=null&&(y===n?m===m&&!_n(m):p(m,y)))var y=m,D=q}return D}function rr(r,i,p,O){var f=r.length;for(p=Q0(p),p<0&&(p=-p>f?0:f+p),O=O===n||O>f?f:Q0(O),O<0&&(O+=f),O=p>O?0:nl(O);p<O;)r[p++]=i;return r}function Sa(r,i){var p=[];return fo(r,function(O,f,q){i(O,f,q)&&p.push(O)}),p}function at(r,i,p,O,f){var q=-1,m=r.length;for(p||(p=P4),f||(f=[]);++q<m;){var y=r[q];i>0&&p(y)?i>1?at(y,i-1,p,O,f):Nn(f,y):O||(f[f.length]=y)}return f}var ka=u3(),r3=u3(!0);function C2(r,i){return r&&ka(r,i,dt)}function $b(r,i){return r&&r3(r,i,dt)}function fc(r,i){return er(i,function(p){return Gn(r[p])})}function Yr(r,i){i=ir(i,r);for(var p=0,O=i.length;r!=null&&p<O;)r=r[s2(i[p++])];return p&&p==O?r:n}function Xa(r,i,p){var O=i(r);return z1(r)?O:Nn(O,p(r))}function kt(r){return r==null?r===n?ot:g0:Fr&&Fr in Me(r)?os(r):V4(r)}function Xt(r,i){return r>i}function x2(r,i){return r!=null&&ie.call(r,i)}function d4(r,i){return r!=null&&i in Me(r)}function q4(r,i,p){return r>=Ee(i,p)&&r<zt(i,p)}function YM(r,i,p){for(var O=p?bc:cc,f=r[0].length,q=r.length,m=q,y=h(q),D=1/0,H=[];m--;){var U=r[m];m&&i&&(U=We(U,wn(i))),D=Ee(U.length,D),y[m]=!p&&(i||f>=120&&U.length>=120)?new or(m&&U):n}U=r[0];var Q=-1,b0=y[0];e:for(;++Q<f&&H.length<D;){var A0=U[Q],W0=i?i(A0):A0;if(A0=p||A0!==0?A0:0,!(b0?J1(b0,W0):O(H,W0,p))){for(m=q;--m;){var k0=y[m];if(!(k0?J1(k0,W0):O(r[m],W0,p)))continue e}b0&&b0.push(W0),H.push(A0)}}return H}function jM(r,i,p,O){return C2(r,function(f,q,m){i(O,p(f),q,m)}),O}function VM(r,i,p){i=ir(i,r),r=N3(r,i);var O=r==null?r:r[s2(Zt(i))];return O==null?n:rn(O,r,p)}function Ca(r){return De(r)&&kt(r)==o0}function h4(r){return De(r)&&kt(r)==N0}function M3(r){return De(r)&&kt(r)==L0}function F2(r,i,p,O,f){return r===i?!0:r==null||i==null||!De(r)&&!De(i)?r!==r&&i!==i:dc(r,i,p,O,F2,f)}function dc(r,i,p,O,f,q){var m=z1(r),y=z1(i),D=m?i0:xt(r),H=y?i0:xt(i);D=D==o0?S0:D,H=H==o0?S0:H;var U=D==S0,Q=H==S0,b0=D==H;if(b0&&O2(r)){if(!O2(i))return!1;m=!0,U=!1}if(b0&&!U)return q||(q=new z2),m||No(r)?m3(r,i,p,O,f,q):k4(r,i,D,p,O,f,q);if(!(p&W)){var A0=U&&ie.call(r,"__wrapped__"),W0=Q&&ie.call(i,"__wrapped__");if(A0||W0){var k0=A0?r.value():r,R0=W0?i.value():i;return q||(q=new z2),f(k0,R0,p,O,q)}}return b0?(q||(q=new z2),X4(r,i,p,O,f,q)):!1}function W4(r){return De(r)&&xt(r)==n0}function Hb(r,i,p,O){var f=p.length,q=f,m=!O;if(r==null)return!q;for(r=Me(r);f--;){var y=p[f];if(m&&y[2]?y[1]!==r[y[0]]:!(y[0]in r))return!1}for(;++f<q;){y=p[f];var D=y[0],H=r[D],U=y[1];if(m&&y[2]){if(H===n&&!(D in r))return!1}else{var Q=new z2;if(O)var b0=O(H,U,D,r,i,Q);if(!(b0===n?F2(U,H,W|g,O,Q):b0))return!1}}return!0}function xa(r){if(!xe(r)||$4(r))return!1;var i=Gn(r)?o4:lb;return i.test(Kr(r))}function Yb(r){return De(r)&&kt(r)==j0}function i3(r){return De(r)&&xt(r)==U0}function jb(r){return De(r)&&yp(r.length)&&!!Ne[kt(r)]}function Vb(r){return typeof r=="function"?r:r==null?Dt:typeof r=="object"?z1(r)?Kb(r[0],r[1]):Fa(r):Xs(r)}function GM(r){if(!ti(r))return $u(r);var i=[];for(var p in Me(r))ie.call(r,p)&&p!="constructor"&&i.push(p);return i}function m4(r){if(!xe(r))return j4(r);var i=ti(r),p=[];for(var O in r)O=="constructor"&&(i||!ie.call(r,O))||p.push(O);return p}function Gb(r,i){return r<i}function qc(r,i){var p=-1,O=It(r)?h(r.length):[];return fo(r,function(f,q,m){O[++p]=i(f,q,m)}),O}function Fa(r){var i=ns(r);return i.length==1&&i[0][2]?L3(i[0][0],i[0][1]):function(p){return p===r||Hb(p,r,i)}}function Kb(r,i){return rs(r)&&is(i)?L3(s2(r),i):function(p){var O=$2(p,r);return O===n&&O===i?kc(p,r):F2(i,O,W|g)}}function hc(r,i,p,O,f){r!==i&&ka(i,function(q,m){if(f||(f=new z2),xe(q))qo(r,i,m,p,hc,O,f);else{var y=O?O(cs(r,m),q,m+"",r,i,f):n;y===n&&(y=q),Ta(r,m,y)}},Jt)}function qo(r,i,p,O,f,q,m){var y=cs(r,p),D=cs(i,p),H=m.get(D);if(H){Ta(r,p,H);return}var U=q?q(y,D,p+"",r,i,m):n,Q=U===n;if(Q){var b0=z1(D),A0=!b0&&O2(D),W0=!b0&&!A0&&No(D);U=D,b0||A0||W0?z1(y)?U=y:Qe(y)?U=jt(y):A0?(Q=!1,U=ja(D,!0)):W0?(Q=!1,U=Ga(D,!0)):U=[]:Lo(D)||pr(D)?(U=y,pr(y)?U=Rs(y):(!xe(y)||Gn(y))&&(U=y3(D))):Q=!1}Q&&(m.set(D,U),f(U,D,O,q,m),m.delete(D)),Ta(r,p,U)}function Ia(r,i){var p=r.length;if(p)return i+=i<0?p:0,mo(i,p)?r[i]:n}function Pa(r,i,p){i.length?i=We(i,function(q){return z1(q)?function(m){return Yr(m,q.length===1?q[0]:q)}:q}):i=[Dt];var O=-1;i=We(i,wn(r1()));var f=qc(r,function(q,m,y){var D=We(i,function(H){return H(q)});return{criteria:D,index:++O,value:q}});return fa(f,function(q,m){return P2(q,m,p)})}function g4(r,i){return Ua(r,i,function(p,O){return kc(r,O)})}function Ua(r,i,p){for(var O=-1,f=i.length,q={};++O<f;){var m=i[O],y=Yr(r,m);p(y,m)&&jr(q,ir(m,r),y)}return q}function R4(r){return function(i){return Yr(i,r)}}function $a(r,i,p,O){var f=O?Ud:xM,q=-1,m=i.length,y=r;for(r===i&&(i=jt(i)),p&&(y=We(r,wn(p)));++q<m;)for(var D=0,H=i[q],U=p?p(H):H;(D=f(y,U,D,O))>-1;)y!==r&&Mn.call(y,D,1),Mn.call(r,D,1);return r}function I2(r,i){for(var p=r?i.length:0,O=p-1;p--;){var f=i[p];if(p==O||f!==q){var q=f;mo(f)?Mn.call(r,f,1):wt(r,f)}}return r}function Wc(r,i){return r+kb(Dn()*(i-r+1))}function Ha(r,i,p,O){for(var f=-1,q=zt(Sb((i-r)/(p||1)),0),m=h(q);q--;)m[O?q:++f]=r,r+=p;return m}function KM(r,i){var p="";if(!r||i<1||i>m0)return p;do i%2&&(p+=r),i=kb(i/2),i&&(r+=r);while(i);return p}function A1(r,i){return bs(v3(r,i,Dt),r+"")}function o1(r){return t3(ci(r))}function Zb(r,i){var p=ci(r);return vc(p,cn(i,0,p.length))}function jr(r,i,p,O){if(!xe(r))return r;i=ir(i,r);for(var f=-1,q=i.length,m=q-1,y=r;y!=null&&++f<q;){var D=s2(i[f]),H=p;if(D==="__proto__"||D==="constructor"||D==="prototype")return r;if(f!=m){var U=y[D];H=O?O(U,D,y):n,H===n&&(H=xe(U)?U:mo(i[f+1])?[]:{})}St(y,D,H),y=y[D]}return r}var Mr=uc?function(r,i){return uc.set(r,i),r}:Dt,y4=Eb?function(r,i){return Eb(r,"toString",{configurable:!0,enumerable:!1,value:_s(i),writable:!0})}:Dt;function L4(r){return vc(ci(r))}function Hn(r,i,p){var O=-1,f=r.length;i<0&&(i=-i>f?0:f+i),p=p>f?f:p,p<0&&(p+=f),f=i>p?0:p-i>>>0,i>>>=0;for(var q=h(f);++O<f;)q[O]=r[O+i];return q}function c3(r,i){var p;return fo(r,function(O,f,q){return p=i(O,f,q),!p}),!!p}function Jb(r,i,p){var O=0,f=r==null?O:r.length;if(typeof i=="number"&&i===i&&f<=_){for(;O<f;){var q=O+f>>>1,m=r[q];m!==null&&!_n(m)&&(p?m<=i:m<i)?O=q+1:f=q}return f}return Qb(r,i,Dt,p)}function Qb(r,i,p,O){var f=0,q=r==null?0:r.length;if(q===0)return 0;i=p(i);for(var m=i!==i,y=i===null,D=_n(i),H=i===n;f<q;){var U=kb((f+q)/2),Q=p(r[U]),b0=Q!==n,A0=Q===null,W0=Q===Q,k0=_n(Q);if(m)var R0=O||W0;else H?R0=W0&&(O||b0):y?R0=W0&&b0&&(O||!A0):D?R0=W0&&b0&&!A0&&(O||!k0):A0||k0?R0=!1:R0=O?Q<=i:Q<i;R0?f=U+1:q=U}return Ee(q,d0)}function b3(r,i){for(var p=-1,O=r.length,f=0,q=[];++p<O;){var m=r[p],y=i?i(m):m;if(!p||!ce(y,D)){var D=y;q[f++]=m===0?0:m}}return q}function p3(r){return typeof r=="number"?r:_n(r)?C:+r}function Bn(r){if(typeof r=="string")return r;if(z1(r))return We(r,Bn)+"";if(_n(r))return Yu?Yu.call(r):"";var i=r+"";return i=="0"&&1/r==-O0?"-0":i}function Ct(r,i,p){var O=-1,f=cc,q=r.length,m=!0,y=[],D=y;if(p)m=!1,f=bc;else if(q>=M){var H=i?null:E4(r);if(H)return Ht(H);m=!1,f=J1,D=new or}else D=i?[]:y;e:for(;++O<q;){var U=r[O],Q=i?i(U):U;if(U=p||U!==0?U:0,m&&Q===Q){for(var b0=D.length;b0--;)if(D[b0]===Q)continue e;i&&D.push(Q),y.push(U)}else f(D,Q,p)||(D!==y&&D.push(Q),y.push(U))}return y}function wt(r,i){return i=ir(i,r),r=N3(r,i),r==null||delete r[s2(Zt(i))]}function ep(r,i,p,O){return jr(r,i,p(Yr(r,i)),O)}function tp(r,i,p,O){for(var f=r.length,q=O?f:-1;(O?q--:++q<f)&&i(r[q],q,r););return p?Hn(r,O?0:q,O?q+1:f):Hn(r,O?q+1:0,O?f:q)}function np(r,i){var p=r;return p instanceof g1&&(p=p.value()),vb(i,function(O,f){return f.func.apply(f.thisArg,Nn([O],f.args))},p)}function Ya(r,i,p){var O=r.length;if(O<2)return O?Ct(r[0]):[];for(var f=-1,q=h(O);++f<O;)for(var m=r[f],y=-1;++y<O;)y!=f&&(q[f]=Hr(q[f]||m,r[y],i,p));return Ct(at(q,1),i,p)}function ZM(r,i,p){for(var O=-1,f=r.length,q=i.length,m={};++O<f;){var y=O<q?i[O]:n;p(m,r[O],y)}return m}function op(r){return Qe(r)?r:[]}function rp(r){return typeof r=="function"?r:Dt}function ir(r,i){return z1(r)?r:rs(r,i)?[r]:as($1(r))}var v4=A1;function cr(r,i,p){var O=r.length;return p=p===n?O:p,!i&&p>=O?r:Hn(r,i,p)}var z3=r4||function(r){return lt.clearTimeout(r)};function ja(r,i){if(i)return r.slice();var p=r.length,O=Cu?Cu(p):new r.constructor(p);return r.copy(O),O}function Mp(r){var i=new r.constructor(r.byteLength);return new _b(i).set(new _b(r)),i}function N4(r,i){var p=i?Mp(r.buffer):r.buffer;return new r.constructor(p,r.byteOffset,r.byteLength)}function Va(r){var i=new r.constructor(r.source,EM.exec(r));return i.lastIndex=r.lastIndex,i}function a3(r){return $r?Me($r.call(r)):{}}function Ga(r,i){var p=i?Mp(r.buffer):r.buffer;return new r.constructor(p,r.byteOffset,r.length)}function mc(r,i){if(r!==i){var p=r!==n,O=r===null,f=r===r,q=_n(r),m=i!==n,y=i===null,D=i===i,H=_n(i);if(!y&&!H&&!q&&r>i||q&&m&&D&&!y&&!H||O&&m&&D||!p&&D||!f)return 1;if(!O&&!q&&!H&&r<i||H&&p&&f&&!O&&!q||y&&p&&f||!m&&f||!D)return-1}return 0}function P2(r,i,p){for(var O=-1,f=r.criteria,q=i.criteria,m=f.length,y=p.length;++O<m;){var D=mc(f[O],q[O]);if(D){if(O>=y)return D;var H=p[O];return D*(H=="desc"?-1:1)}}return r.index-i.index}function br(r,i,p,O){for(var f=-1,q=r.length,m=p.length,y=-1,D=i.length,H=zt(q-m,0),U=h(D+H),Q=!O;++y<D;)U[y]=i[y];for(;++f<m;)(Q||f<q)&&(U[p[f]]=r[f]);for(;H--;)U[y++]=r[f++];return U}function s3(r,i,p,O){for(var f=-1,q=r.length,m=-1,y=p.length,D=-1,H=i.length,U=zt(q-y,0),Q=h(U+H),b0=!O;++f<U;)Q[f]=r[f];for(var A0=f;++D<H;)Q[A0+D]=i[D];for(;++m<y;)(b0||f<q)&&(Q[A0+p[m]]=r[f++]);return Q}function jt(r,i){var p=-1,O=r.length;for(i||(i=h(O));++p<O;)i[p]=r[p];return i}function U2(r,i,p,O){var f=!p;p||(p={});for(var q=-1,m=i.length;++q<m;){var y=i[q],D=O?O(p[y],r[y],y,p,r):n;D===n&&(D=r[y]),f?X2(p,y,D):St(p,y,D)}return p}function w4(r,i){return U2(r,ap(r),i)}function D4(r,i){return U2(r,g3(r),i)}function ip(r,i){return function(p,O){var f=z1(p)?Pd:Ib,q=i?i():{};return f(p,r,r1(O,2),q)}}function JM(r){return A1(function(i,p){var O=-1,f=p.length,q=f>1?p[f-1]:n,m=f>2?p[2]:n;for(q=r.length>3&&typeof q=="function"?(f--,q):n,m&&Gt(p[0],p[1],m)&&(q=f<3?n:q,f=1),i=Me(i);++O<f;){var y=p[O];y&&r(i,y,O,q)}return i})}function O3(r,i){return function(p,O){if(p==null)return p;if(!It(p))return r(p,O);for(var f=p.length,q=i?f:-1,m=Me(p);(i?q--:++q<f)&&O(m[q],q,m)!==!1;);return p}}function u3(r){return function(i,p,O){for(var f=-1,q=Me(i),m=O(i),y=m.length;y--;){var D=m[r?y:++f];if(p(q[D],D,q)===!1)break}return i}}function B4(r,i,p){var O=i&L,f=QM(r);function q(){var m=this&&this!==lt&&this instanceof q?f:r;return m.apply(O?p:this,arguments)}return q}function Ka(r){return function(i){i=$1(i);var p=FM(i)?In(i):n,O=p?p[0]:i.charAt(0),f=p?cr(p,1).join(""):i.slice(1);return O[r]()+f}}function Vr(r){return function(i){return vb(ll(sl(i).replace(Td,"")),r,"")}}function QM(r){return function(){var i=arguments;switch(i.length){case 0:return new r;case 1:return new r(i[0]);case 2:return new r(i[0],i[1]);case 3:return new r(i[0],i[1],i[2]);case 4:return new r(i[0],i[1],i[2],i[3]);case 5:return new r(i[0],i[1],i[2],i[3],i[4]);case 6:return new r(i[0],i[1],i[2],i[3],i[4],i[5]);case 7:return new r(i[0],i[1],i[2],i[3],i[4],i[5],i[6])}var p=$M(r.prototype),O=r.apply(p,i);return xe(O)?O:p}}function T4(r,i,p){var O=QM(r);function f(){for(var q=arguments.length,m=h(q),y=q,D=ei(f);y--;)m[y]=arguments[y];var H=q<3&&m[0]!==D&&m[q-1]!==D?[]:_2(m,D);if(q-=H.length,q<p)return q3(r,i,gc,f.placeholder,n,m,H,n,n,p-q);var U=this&&this!==lt&&this instanceof f?O:r;return rn(U,this,m)}return f}function l3(r){return function(i,p,O){var f=Me(i);if(!It(i)){var q=r1(p,3);i=dt(i),p=function(y){return q(f[y],y,f)}}var m=r(i,p,O);return m>-1?f[q?i[m]:m]:n}}function A3(r){return Wo(function(i){var p=i.length,O=p,f=$n.prototype.thru;for(r&&i.reverse();O--;){var q=i[O];if(typeof q!="function")throw new Pn(b);if(f&&!m&&pp(q)=="wrapper")var m=new $n([],!0)}for(O=m?O:p;++O<p;){q=i[O];var y=pp(q),D=y=="wrapper"?ts(q):n;D&&Ms(D[0])&&D[1]==(N|k|I|P)&&!D[4].length&&D[9]==1?m=m[pp(D[0])].apply(m,D[3]):m=q.length==1&&Ms(q)?m[y]():m.thru(q)}return function(){var H=arguments,U=H[0];if(m&&H.length==1&&z1(U))return m.plant(U).value();for(var Q=0,b0=p?i[Q].apply(this,H):U;++Q<p;)b0=i[Q].call(this,b0);return b0}})}function gc(r,i,p,O,f,q,m,y,D,H){var U=i&N,Q=i&L,b0=i&R,A0=i&(k|B),W0=i&J,k0=b0?n:QM(r);function R0(){for(var F0=arguments.length,P0=h(F0),se=F0;se--;)P0[se]=arguments[se];if(A0)var Oe=ei(R0),Mt=Hd(P0,Oe);if(O&&(P0=br(P0,O,f,A0)),q&&(P0=s3(P0,q,m,A0)),F0-=Mt,A0&&F0<H){var q1=_2(P0,Oe);return q3(r,i,gc,R0.placeholder,p,P0,q1,y,D,H-F0)}var je=Q?p:this,En=b0?je[r]:r;return F0=P0.length,y?P0=G4(P0,y):W0&&F0>1&&P0.reverse(),U&&D<F0&&(P0.length=D),this&&this!==lt&&this instanceof R0&&(En=k0||QM(En)),En.apply(je,P0)}return R0}function f3(r,i){return function(p,O){return jM(p,r,i(O),{})}}function cp(r,i){return function(p,O){var f;if(p===n&&O===n)return i;if(p!==n&&(f=p),O!==n){if(f===n)return O;typeof p=="string"||typeof O=="string"?(p=Bn(p),O=Bn(O)):(p=p3(p),O=p3(O)),f=r(p,O)}return f}}function Za(r){return Wo(function(i){return i=We(i,wn(r1())),A1(function(p){var O=this;return r(i,function(f){return rn(f,O,p)})})})}function Vt(r,i){i=i===n?" ":Bn(i);var p=i.length;if(p<2)return p?KM(i,r):i;var O=KM(i,Sb(r/Cr(i)));return FM(i)?cr(In(O),0,r).join(""):O.slice(0,r)}function _4(r,i,p,O){var f=i&L,q=QM(r);function m(){for(var y=-1,D=arguments.length,H=-1,U=O.length,Q=h(U+D),b0=this&&this!==lt&&this instanceof m?q:r;++H<U;)Q[H]=O[H];for(;D--;)Q[H++]=arguments[++y];return rn(b0,f?p:this,Q)}return m}function d3(r){return function(i,p,O){return O&&typeof O!="number"&&Gt(i,p,O)&&(p=O=n),i=Ae(i),p===n?(p=i,i=0):p=Ae(p),O=O===n?i<p?1:-1:Ae(O),Ha(i,p,O,r)}}function Rc(r){return function(i,p){return typeof i=="string"&&typeof p=="string"||(i=Kn(i),p=Kn(p)),r(i,p)}}function q3(r,i,p,O,f,q,m,y,D,H){var U=i&k,Q=U?m:n,b0=U?n:m,A0=U?q:n,W0=U?n:q;i|=U?I:S,i&=~(U?S:I),i&E||(i&=~(L|R));var k0=[r,i,f,A0,Q,W0,b0,y,D,H],R0=p.apply(n,k0);return Ms(r)&&w3(R0,k0),R0.placeholder=O,ps(R0,r,i)}function Ja(r){var i=U1[r];return function(p,O){if(p=Kn(p),O=O==null?0:Ee(Q0(O),292),O&&sc(p)){var f=($1(p)+"e").split("e"),q=i(f[0]+"e"+(+f[1]+O));return f=($1(q)+"e").split("e"),+(f[0]+"e"+(+f[1]-O))}return i(p)}}var E4=UM&&1/Ht(new UM([,-0]))[1]==O0?function(r){return new UM(r)}:ks;function bp(r){return function(i){var p=xt(i);return p==n0?uo(i):p==U0?Eu(i):$d(i,r(i))}}function ho(r,i,p,O,f,q,m,y){var D=i&R;if(!D&&typeof r!="function")throw new Pn(b);var H=O?O.length:0;if(H||(i&=~(I|S),O=f=n),m=m===n?m:zt(Q0(m),0),y=y===n?y:Q0(y),H-=f?f.length:0,i&S){var U=O,Q=f;O=f=n}var b0=D?n:ts(r),A0=[r,i,p,O,f,U,Q,q,m,y];if(b0&&Y4(A0,b0),r=A0[0],i=A0[1],p=A0[2],O=A0[3],f=A0[4],y=A0[9]=A0[9]===n?D?0:r.length:zt(A0[9]-H,0),!y&&i&(k|B)&&(i&=~(k|B)),!i||i==L)var W0=B4(r,i,p);else i==k||i==B?W0=T4(r,i,y):(i==I||i==(L|I))&&!f.length?W0=_4(r,i,p,O):W0=gc.apply(n,A0);var k0=b0?Mr:w3;return ps(k0(W0,A0),r,i)}function h3(r,i,p,O){return r===n||ce(r,IM[p])&&!ie.call(O,p)?i:r}function W3(r,i,p,O,f,q){return xe(r)&&xe(i)&&(q.set(i,r),hc(r,i,n,W3,q),q.delete(i)),r}function S4(r){return Lo(r)?n:r}function m3(r,i,p,O,f,q){var m=p&W,y=r.length,D=i.length;if(y!=D&&!(m&&D>y))return!1;var H=q.get(r),U=q.get(i);if(H&&U)return H==i&&U==r;var Q=-1,b0=!0,A0=p&g?new or:n;for(q.set(r,i),q.set(i,r);++Q<y;){var W0=r[Q],k0=i[Q];if(O)var R0=m?O(k0,W0,Q,i,r,q):O(W0,k0,Q,r,i,q);if(R0!==n){if(R0)continue;b0=!1;break}if(A0){if(!sa(i,function(F0,P0){if(!J1(A0,P0)&&(W0===F0||f(W0,F0,p,O,q)))return A0.push(P0)})){b0=!1;break}}else if(!(W0===k0||f(W0,k0,p,O,q))){b0=!1;break}}return q.delete(r),q.delete(i),b0}function k4(r,i,p,O,f,q,m){switch(p){case V0:if(r.byteLength!=i.byteLength||r.byteOffset!=i.byteOffset)return!1;r=r.buffer,i=i.buffer;case N0:return!(r.byteLength!=i.byteLength||!q(new _b(r),new _b(i)));case s0:case L0:case p0:return ce(+r,+i);case p1:return r.name==i.name&&r.message==i.message;case j0:case T1:return r==i+"";case n0:var y=uo;case U0:var D=O&W;if(y||(y=Ht),r.size!=i.size&&!D)return!1;var H=m.get(r);if(H)return H==i;O|=g,m.set(r,i);var U=m3(y(r),y(i),O,f,q,m);return m.delete(r),U;case f1:if($r)return $r.call(r)==$r.call(i)}return!1}function X4(r,i,p,O,f,q){var m=p&W,y=Qa(r),D=y.length,H=Qa(i),U=H.length;if(D!=U&&!m)return!1;for(var Q=D;Q--;){var b0=y[Q];if(!(m?b0 in i:ie.call(i,b0)))return!1}var A0=q.get(r),W0=q.get(i);if(A0&&W0)return A0==i&&W0==r;var k0=!0;q.set(r,i),q.set(i,r);for(var R0=m;++Q<D;){b0=y[Q];var F0=r[b0],P0=i[b0];if(O)var se=m?O(P0,F0,b0,i,r,q):O(F0,P0,b0,r,i,q);if(!(se===n?F0===P0||f(F0,P0,p,O,q):se)){k0=!1;break}R0||(R0=b0=="constructor")}if(k0&&!R0){var Oe=r.constructor,Mt=i.constructor;Oe!=Mt&&"constructor"in r&&"constructor"in i&&!(typeof Oe=="function"&&Oe instanceof Oe&&typeof Mt=="function"&&Mt instanceof Mt)&&(k0=!1)}return q.delete(r),q.delete(i),k0}function Wo(r){return bs(v3(r,n,Kt),r+"")}function Qa(r){return Xa(r,dt,ap)}function es(r){return Xa(r,Jt,g3)}var ts=uc?function(r){return uc.get(r)}:ks;function pp(r){for(var i=r.name+"",p=He[i],O=ie.call(He,i)?p.length:0;O--;){var f=p[O],q=f.func;if(q==null||q==r)return f.name}return i}function ei(r){var i=ie.call(w,"placeholder")?w:r;return i.placeholder}function r1(){var r=w.iteratee||Es;return r=r===Es?Vb:r,arguments.length?r(arguments[0],arguments[1]):r}function zp(r,i){var p=r.__data__;return U4(i)?p[typeof i=="string"?"string":"hash"]:p.map}function ns(r){for(var i=dt(r),p=i.length;p--;){var O=i[p],f=r[O];i[p]=[O,f,is(f)]}return i}function Gr(r,i){var p=_u(r,i);return xa(p)?p:n}function os(r){var i=ie.call(r,Fr),p=r[Fr];try{r[Fr]=n;var O=!0}catch{}var f=Bb.call(r);return O&&(i?r[Fr]=p:delete r[Fr]),f}var ap=zc?function(r){return r==null?[]:(r=Me(r),er(zc(r),function(i){return Fu.call(r,i)}))}:Cs,g3=zc?function(r){for(var i=[];r;)Nn(i,ap(r)),r=E2(r);return i}:Cs,xt=kt;(Xb&&xt(new Xb(new ArrayBuffer(1)))!=V0||PM&&xt(new PM)!=n0||Pr&&xt(Pr.resolve())!=K0||UM&&xt(new UM)!=U0||nr&&xt(new nr)!=vt)&&(xt=function(r){var i=kt(r),p=i==S0?r.constructor:n,O=p?Kr(p):"";if(O)switch(O){case S2:return V0;case ya:return n0;case Cb:return K0;case Ur:return U0;case Hu:return vt}return i});function R3(r,i,p){for(var O=-1,f=p.length;++O<f;){var q=p[O],m=q.size;switch(q.type){case"drop":r+=m;break;case"dropRight":i-=m;break;case"take":i=Ee(i,r+m);break;case"takeRight":r=zt(r,i-m);break}}return{start:r,end:i}}function C4(r){var i=r.match(Qo);return i?i[1].split(so):[]}function yc(r,i,p){i=ir(i,r);for(var O=-1,f=i.length,q=!1;++O<f;){var m=s2(i[O]);if(!(q=r!=null&&p(r,m)))break;r=r[m]}return q||++O!=f?q:(f=r==null?0:r.length,!!f&&yp(f)&&mo(m,f)&&(z1(r)||pr(r)))}function x4(r){var i=r.length,p=new r.constructor(i);return i&&typeof r[0]=="string"&&ie.call(r,"index")&&(p.index=r.index,p.input=r.input),p}function y3(r){return typeof r.constructor=="function"&&!ti(r)?$M(E2(r)):{}}function F4(r,i,p){var O=r.constructor;switch(i){case N0:return Mp(r);case s0:case L0:return new O(+r);case V0:return N4(r,p);case i1:case O1:case de:case rt:case j1:case Ue:case Te:case x1:case Xe:return Ga(r,p);case n0:return new O;case p0:case T1:return new O(r);case j0:return Va(r);case U0:return new O;case f1:return a3(r)}}function I4(r,i){var p=i.length;if(!p)return r;var O=p-1;return i[O]=(p>1?"& ":"")+i[O],i=i.join(p>2?", ":" "),r.replace(Jo,`{ +/* [wrapped with `+i+`] */ +`)}function P4(r){return z1(r)||pr(r)||!!(Iu&&r&&r[Iu])}function mo(r,i){var p=typeof r;return i=i??m0,!!i&&(p=="number"||p!="symbol"&&i2.test(r))&&r>-1&&r%1==0&&r<i}function Gt(r,i,p){if(!xe(p))return!1;var O=typeof i;return(O=="number"?It(p)&&mo(i,p.length):O=="string"&&i in p)?ce(p[i],r):!1}function rs(r,i){if(z1(r))return!1;var p=typeof r;return p=="number"||p=="symbol"||p=="boolean"||r==null||_n(r)?!0:Et.test(r)||!_e.test(r)||i!=null&&r in Me(i)}function U4(r){var i=typeof r;return i=="string"||i=="number"||i=="symbol"||i=="boolean"?r!=="__proto__":r===null}function Ms(r){var i=pp(r),p=w[i];if(typeof p!="function"||!(i in g1.prototype))return!1;if(r===p)return!0;var O=ts(p);return!!O&&r===O[0]}function $4(r){return!!Xu&&Xu in r}var H4=Db?Gn:xs;function ti(r){var i=r&&r.constructor,p=typeof i=="function"&&i.prototype||IM;return r===p}function is(r){return r===r&&!xe(r)}function L3(r,i){return function(p){return p==null?!1:p[r]===i&&(i!==n||r in Me(p))}}function sp(r){var i=Bc(r,function(O){return p.size===s&&p.clear(),O}),p=i.cache;return i}function Y4(r,i){var p=r[1],O=i[1],f=p|O,q=f<(L|R|N),m=O==N&&p==k||O==N&&p==P&&r[7].length<=i[8]||O==(N|P)&&i[7].length<=i[8]&&p==k;if(!(q||m))return r;O&L&&(r[2]=i[2],f|=p&L?0:E);var y=i[3];if(y){var D=r[3];r[3]=D?br(D,y,i[4]):y,r[4]=D?_2(r[3],u):i[4]}return y=i[5],y&&(D=r[5],r[5]=D?s3(D,y,i[6]):y,r[6]=D?_2(r[5],u):i[6]),y=i[7],y&&(r[7]=y),O&N&&(r[8]=r[8]==null?i[8]:Ee(r[8],i[8])),r[9]==null&&(r[9]=i[9]),r[0]=i[0],r[1]=f,r}function j4(r){var i=[];if(r!=null)for(var p in Me(r))i.push(p);return i}function V4(r){return Bb.call(r)}function v3(r,i,p){return i=zt(i===n?r.length-1:i,0),function(){for(var O=arguments,f=-1,q=zt(O.length-i,0),m=h(q);++f<q;)m[f]=O[i+f];f=-1;for(var y=h(i+1);++f<i;)y[f]=O[f];return y[i]=p(m),rn(r,this,y)}}function N3(r,i){return i.length<2?r:Yr(r,Hn(i,0,-1))}function G4(r,i){for(var p=r.length,O=Ee(i.length,p),f=jt(r);O--;){var q=i[O];r[O]=mo(q,p)?f[q]:n}return r}function cs(r,i){if(!(i==="constructor"&&typeof r[i]=="function")&&i!="__proto__")return r[i]}var w3=zs(Mr),Lc=Uu||function(r,i){return lt.setTimeout(r,i)},bs=zs(y4);function ps(r,i,p){var O=i+"";return bs(r,I4(O,Op(C4(O),p)))}function zs(r){var i=0,p=0;return function(){var O=Ra(),f=e0-(O-p);if(p=O,f>0){if(++i>=x)return arguments[0]}else i=0;return r.apply(n,arguments)}}function vc(r,i){var p=-1,O=r.length,f=O-1;for(i=i===n?O:i;++p<i;){var q=Wc(p,f),m=r[q];r[q]=r[p],r[p]=m}return r.length=i,r}var as=sp(function(r){var i=[];return r.charCodeAt(0)===46&&i.push(""),r.replace(qe,function(p,O,f,q){i.push(f?q.replace(gd,"$1"):O||p)}),i});function s2(r){if(typeof r=="string"||_n(r))return r;var i=r+"";return i=="0"&&1/r==-O0?"-0":i}function Kr(r){if(r!=null){try{return Un.call(r)}catch{}try{return r+""}catch{}}return""}function Op(r,i){return vn(D0,function(p){var O="_."+p[0];i&p[1]&&!cc(r,O)&&r.push(O)}),r.sort()}function Nc(r){if(r instanceof g1)return r.clone();var i=new $n(r.__wrapped__,r.__chain__);return i.__actions__=jt(r.__actions__),i.__index__=r.__index__,i.__values__=r.__values__,i}function K4(r,i,p){(p?Gt(r,i,p):i===n)?i=1:i=zt(Q0(i),0);var O=r==null?0:r.length;if(!O||i<1)return[];for(var f=0,q=0,m=h(Sb(O/i));f<O;)m[q++]=Hn(r,f,f+=i);return m}function Z4(r){for(var i=-1,p=r==null?0:r.length,O=0,f=[];++i<p;){var q=r[i];q&&(f[O++]=q)}return f}function J4(){var r=arguments.length;if(!r)return[];for(var i=h(r-1),p=arguments[0],O=r;O--;)i[O-1]=arguments[O];return Nn(z1(p)?jt(p):[p],at(i,1))}var Q4=A1(function(r,i){return Qe(r)?Hr(r,at(i,1,Qe,!0)):[]}),eq=A1(function(r,i){var p=Zt(i);return Qe(p)&&(p=n),Qe(r)?Hr(r,at(i,1,Qe,!0),r1(p,2)):[]}),tq=A1(function(r,i){var p=Zt(i);return Qe(p)&&(p=n),Qe(r)?Hr(r,at(i,1,Qe,!0),n,p):[]});function nq(r,i,p){var O=r==null?0:r.length;return O?(i=p||i===n?1:Q0(i),Hn(r,i<0?0:i,O)):[]}function oq(r,i,p){var O=r==null?0:r.length;return O?(i=p||i===n?1:Q0(i),i=O-i,Hn(r,0,i<0?0:i)):[]}function rq(r,i){return r&&r.length?tp(r,r1(i,3),!0,!0):[]}function Mq(r,i){return r&&r.length?tp(r,r1(i,3),!0):[]}function iq(r,i,p,O){var f=r==null?0:r.length;return f?(p&&typeof p!="number"&&Gt(r,i,p)&&(p=0,O=f),rr(r,i,p,O)):[]}function D3(r,i,p){var O=r==null?0:r.length;if(!O)return-1;var f=p==null?0:Q0(p);return f<0&&(f=zt(O+f,0)),Nb(r,r1(i,3),f)}function Yn(r,i,p){var O=r==null?0:r.length;if(!O)return-1;var f=O-1;return p!==n&&(f=Q0(p),f=p<0?zt(O+f,0):Ee(f,O-1)),Nb(r,r1(i,3),f,!0)}function Kt(r){var i=r==null?0:r.length;return i?at(r,1):[]}function Je(r){var i=r==null?0:r.length;return i?at(r,O0):[]}function cq(r,i){var p=r==null?0:r.length;return p?(i=i===n?1:Q0(i),at(r,i)):[]}function bq(r){for(var i=-1,p=r==null?0:r.length,O={};++i<p;){var f=r[i];O[f[0]]=f[1]}return O}function B3(r){return r&&r.length?r[0]:n}function pq(r,i,p){var O=r==null?0:r.length;if(!O)return-1;var f=p==null?0:Q0(p);return f<0&&(f=zt(O+f,0)),xM(r,i,f)}function zq(r){var i=r==null?0:r.length;return i?Hn(r,0,-1):[]}var ss=A1(function(r){var i=We(r,op);return i.length&&i[0]===r[0]?YM(i):[]}),aq=A1(function(r){var i=Zt(r),p=We(r,op);return i===Zt(p)?i=n:p.pop(),p.length&&p[0]===r[0]?YM(p,r1(i,2)):[]}),go=A1(function(r){var i=Zt(r),p=We(r,op);return i=typeof i=="function"?i:n,i&&p.pop(),p.length&&p[0]===r[0]?YM(p,n,i):[]});function T3(r,i){return r==null?"":M4.call(r,i)}function Zt(r){var i=r==null?0:r.length;return i?r[i-1]:n}function Ce(r,i,p){var O=r==null?0:r.length;if(!O)return-1;var f=O;return p!==n&&(f=Q0(p),f=f<0?zt(O+f,0):Ee(f,O-1)),i===i?ku(r,i,f):Nb(r,ua,f,!0)}function Ye(r,i){return r&&r.length?Ia(r,Q0(i)):n}var sq=A1(_3);function _3(r,i){return r&&r.length&&i&&i.length?$a(r,i):r}function Oq(r,i,p){return r&&r.length&&i&&i.length?$a(r,i,r1(p,2)):r}function uq(r,i,p){return r&&r.length&&i&&i.length?$a(r,i,n,p):r}var lq=Wo(function(r,i){var p=r==null?0:r.length,O=Yt(r,i);return I2(r,We(i,function(f){return mo(f,p)?+f:f}).sort(mc)),O});function Aq(r,i){var p=[];if(!(r&&r.length))return p;var O=-1,f=[],q=r.length;for(i=r1(i,3);++O<q;){var m=r[O];i(m,O,r)&&(p.push(m),f.push(O))}return I2(r,f),p}function up(r){return r==null?r:i4.call(r)}function wc(r,i,p){var O=r==null?0:r.length;return O?(p&&typeof p!="number"&&Gt(r,i,p)?(i=0,p=O):(i=i==null?0:Q0(i),p=p===n?O:Q0(p)),Hn(r,i,p)):[]}function fq(r,i){return Jb(r,i)}function lp(r,i,p){return Qb(r,i,r1(p,2))}function Tn(r,i){var p=r==null?0:r.length;if(p){var O=Jb(r,i);if(O<p&&ce(r[O],i))return O}return-1}function dq(r,i){return Jb(r,i,!0)}function qq(r,i,p){return Qb(r,i,r1(p,2),!0)}function hq(r,i){var p=r==null?0:r.length;if(p){var O=Jb(r,i,!0)-1;if(ce(r[O],i))return O}return-1}function E3(r){return r&&r.length?b3(r):[]}function Ro(r,i){return r&&r.length?b3(r,r1(i,2)):[]}function h1(r){var i=r==null?0:r.length;return i?Hn(r,1,i):[]}function S3(r,i,p){return r&&r.length?(i=p||i===n?1:Q0(i),Hn(r,0,i<0?0:i)):[]}function jn(r,i,p){var O=r==null?0:r.length;return O?(i=p||i===n?1:Q0(i),i=O-i,Hn(r,i<0?0:i,O)):[]}function k3(r,i){return r&&r.length?tp(r,r1(i,3),!1,!0):[]}function Wq(r,i){return r&&r.length?tp(r,r1(i,3)):[]}var Q1=A1(function(r){return Ct(at(r,1,Qe,!0))}),mq=A1(function(r){var i=Zt(r);return Qe(i)&&(i=n),Ct(at(r,1,Qe,!0),r1(i,2))}),gq=A1(function(r){var i=Zt(r);return i=typeof i=="function"?i:n,Ct(at(r,1,Qe,!0),n,i)});function Rq(r){return r&&r.length?Ct(r):[]}function yq(r,i){return r&&r.length?Ct(r,r1(i,2)):[]}function Lq(r,i){return i=typeof i=="function"?i:n,r&&r.length?Ct(r,n,i):[]}function Os(r){if(!(r&&r.length))return[];var i=0;return r=er(r,function(p){if(Qe(p))return i=zt(p.length,i),!0}),qa(i,function(p){return We(r,la(p))})}function X3(r,i){if(!(r&&r.length))return[];var p=Os(r);return i==null?p:We(p,function(O){return rn(i,n,O)})}var vq=A1(function(r,i){return Qe(r)?Hr(r,i):[]}),Nq=A1(function(r){return Ya(er(r,Qe))}),us=A1(function(r){var i=Zt(r);return Qe(i)&&(i=n),Ya(er(r,Qe),r1(i,2))}),wq=A1(function(r){var i=Zt(r);return i=typeof i=="function"?i:n,Ya(er(r,Qe),n,i)}),ls=A1(Os);function ft(r,i){return ZM(r||[],i||[],St)}function pn(r,i){return ZM(r||[],i||[],jr)}var Dq=A1(function(r){var i=r.length,p=i>1?r[i-1]:n;return p=typeof p=="function"?(r.pop(),p):n,X3(r,p)});function C3(r){var i=w(r);return i.__chain__=!0,i}function Bq(r,i){return i(r),r}function Dc(r,i){return i(r)}var Tq=Wo(function(r){var i=r.length,p=i?r[0]:0,O=this.__wrapped__,f=function(q){return Yt(q,r)};return i>1||this.__actions__.length||!(O instanceof g1)||!mo(p)?this.thru(f):(O=O.slice(p,+p+(i?1:0)),O.__actions__.push({func:Dc,args:[f],thisArg:n}),new $n(O,this.__chain__).thru(function(q){return i&&!q.length&&q.push(n),q}))});function _q(){return C3(this)}function Eq(){return new $n(this.value(),this.__chain__)}function Sq(){this.__values__===n&&(this.__values__=tl(this.value()));var r=this.__index__>=this.__values__.length,i=r?n:this.__values__[this.__index__++];return{done:r,value:i}}function kq(){return this}function Xq(r){for(var i,p=this;p instanceof HM;){var O=Nc(p);O.__index__=0,O.__values__=n,i?f.__wrapped__=O:i=O;var f=O;p=p.__wrapped__}return f.__wrapped__=r,i}function Cq(){var r=this.__wrapped__;if(r instanceof g1){var i=r;return this.__actions__.length&&(i=new g1(this)),i=i.reverse(),i.__actions__.push({func:Dc,args:[up],thisArg:n}),new $n(i,this.__chain__)}return this.thru(up)}function ni(){return np(this.__wrapped__,this.__actions__)}var xq=ip(function(r,i,p){ie.call(r,p)?++r[p]:X2(r,p,1)});function Fq(r,i,p){var O=z1(r)?Lb:Ea;return p&&Gt(r,i,p)&&(i=n),O(r,r1(i,3))}function Iq(r,i){var p=z1(r)?er:Sa;return p(r,r1(i,3))}var Pq=l3(D3),x3=l3(Yn);function F3(r,i){return at(Ap(r,i),1)}function Uq(r,i){return at(Ap(r,i),O0)}function $q(r,i,p){return p=p===n?1:Q0(p),at(Ap(r,i),p)}function I3(r,i){var p=z1(r)?vn:fo;return p(r,r1(i,3))}function P3(r,i){var p=z1(r)?gu:Ub;return p(r,r1(i,3))}var Hq=ip(function(r,i,p){ie.call(r,p)?r[p].push(i):X2(r,p,[i])});function Yq(r,i,p,O){r=It(r)?r:ci(r),p=p&&!O?Q0(p):0;var f=r.length;return p<0&&(p=zt(f+p,0)),Dp(r)?p<=f&&r.indexOf(i,p)>-1:!!f&&xM(r,i,p)>-1}var jq=A1(function(r,i,p){var O=-1,f=typeof i=="function",q=It(r)?h(r.length):[];return fo(r,function(m){q[++O]=f?rn(i,m,p):VM(m,i,p)}),q}),Vq=ip(function(r,i,p){X2(r,p,i)});function Ap(r,i){var p=z1(r)?We:qc;return p(r,r1(i,3))}function Gq(r,i,p,O){return r==null?[]:(z1(i)||(i=i==null?[]:[i]),p=O?n:p,z1(p)||(p=p==null?[]:[p]),Pa(r,i,p))}var Kq=ip(function(r,i,p){r[p?0:1].push(i)},function(){return[[],[]]});function Zq(r,i,p){var O=z1(r)?vb:wu,f=arguments.length<3;return O(r,r1(i,4),p,f,fo)}function Jq(r,i,p){var O=z1(r)?Ru:wu,f=arguments.length<3;return O(r,r1(i,4),p,f,Ub)}function Qq(r,i){var p=z1(r)?er:Sa;return p(r,Wp(r1(i,3)))}function e5(r){var i=z1(r)?t3:o1;return i(r)}function t5(r,i,p){(p?Gt(r,i,p):i===n)?i=1:i=Q0(i);var O=z1(r)?f4:Zb;return O(r,i)}function n5(r){var i=z1(r)?lc:L4;return i(r)}function o5(r){if(r==null)return 0;if(It(r))return Dp(r)?Cr(r):r.length;var i=xt(r);return i==n0||i==U0?r.size:GM(r).length}function r5(r,i,p){var O=z1(r)?sa:c3;return p&&Gt(r,i,p)&&(i=n),O(r,r1(i,3))}var U3=A1(function(r,i){if(r==null)return[];var p=i.length;return p>1&&Gt(r,i[0],i[1])?i=[]:p>2&&Gt(i[0],i[1],i[2])&&(i=[i[0]]),Pa(r,at(i,1),[])}),fp=Pu||function(){return lt.Date.now()};function M5(r,i){if(typeof i!="function")throw new Pn(b);return r=Q0(r),function(){if(--r<1)return i.apply(this,arguments)}}function dp(r,i,p){return i=p?n:i,i=r&&i==null?r.length:i,ho(r,N,n,n,n,n,i)}function $3(r,i){var p;if(typeof i!="function")throw new Pn(b);return r=Q0(r),function(){return--r>0&&(p=i.apply(this,arguments)),r<=1&&(i=n),p}}var Ft=A1(function(r,i,p){var O=L;if(p.length){var f=_2(p,ei(Ft));O|=I}return ho(r,O,i,p,f)}),qp=A1(function(r,i,p){var O=L|R;if(p.length){var f=_2(p,ei(qp));O|=I}return ho(i,O,r,p,f)});function H3(r,i,p){i=p?n:i;var O=ho(r,k,n,n,n,n,n,i);return O.placeholder=H3.placeholder,O}function Y3(r,i,p){i=p?n:i;var O=ho(r,B,n,n,n,n,n,i);return O.placeholder=Y3.placeholder,O}function hp(r,i,p){var O,f,q,m,y,D,H=0,U=!1,Q=!1,b0=!0;if(typeof r!="function")throw new Pn(b);i=Kn(i)||0,xe(p)&&(U=!!p.leading,Q="maxWait"in p,q=Q?zt(Kn(p.maxWait)||0,i):q,b0="trailing"in p?!!p.trailing:b0);function A0(q1){var je=O,En=f;return O=f=n,H=q1,m=r.apply(En,je),m}function W0(q1){return H=q1,y=Lc(F0,i),U?A0(q1):m}function k0(q1){var je=q1-D,En=q1-H,Is=i-je;return Q?Ee(Is,q-En):Is}function R0(q1){var je=q1-D,En=q1-H;return D===n||je>=i||je<0||Q&&En>=q}function F0(){var q1=fp();if(R0(q1))return P0(q1);y=Lc(F0,k0(q1))}function P0(q1){return y=n,b0&&O?A0(q1):(O=f=n,m)}function se(){y!==n&&z3(y),H=0,O=D=f=y=n}function Oe(){return y===n?m:P0(fp())}function Mt(){var q1=fp(),je=R0(q1);if(O=arguments,f=this,D=q1,je){if(y===n)return W0(D);if(Q)return z3(y),y=Lc(F0,i),A0(D)}return y===n&&(y=Lc(F0,i)),m}return Mt.cancel=se,Mt.flush=Oe,Mt}var i5=A1(function(r,i){return _a(r,1,i)}),As=A1(function(r,i,p){return _a(r,Kn(i)||0,p)});function c5(r){return ho(r,J)}function Bc(r,i){if(typeof r!="function"||i!=null&&typeof i!="function")throw new Pn(b);var p=function(){var O=arguments,f=i?i.apply(this,O):O[0],q=p.cache;if(q.has(f))return q.get(f);var m=r.apply(this,O);return p.cache=q.set(f,m)||q,m};return p.cache=new(Bc.Cache||k2),p}Bc.Cache=k2;function Wp(r){if(typeof r!="function")throw new Pn(b);return function(){var i=arguments;switch(i.length){case 0:return!r.call(this);case 1:return!r.call(this,i[0]);case 2:return!r.call(this,i[0],i[1]);case 3:return!r.call(this,i[0],i[1],i[2])}return!r.apply(this,i)}}function fs(r){return $3(2,r)}var ds=v4(function(r,i){i=i.length==1&&z1(i[0])?We(i[0],wn(r1())):We(at(i,1),wn(r1()));var p=i.length;return A1(function(O){for(var f=-1,q=Ee(O.length,p);++f<q;)O[f]=i[f].call(this,O[f]);return rn(r,this,O)})}),qs=A1(function(r,i){var p=_2(i,ei(qs));return ho(r,I,n,i,p)}),j3=A1(function(r,i){var p=_2(i,ei(j3));return ho(r,S,n,i,p)}),b5=Wo(function(r,i){return ho(r,P,n,n,n,i)});function p5(r,i){if(typeof r!="function")throw new Pn(b);return i=i===n?i:Q0(i),A1(r,i)}function z5(r,i){if(typeof r!="function")throw new Pn(b);return i=i==null?0:zt(Q0(i),0),A1(function(p){var O=p[i],f=cr(p,0,i);return O&&Nn(f,O),rn(r,this,f)})}function a5(r,i,p){var O=!0,f=!0;if(typeof r!="function")throw new Pn(b);return xe(p)&&(O="leading"in p?!!p.leading:O,f="trailing"in p?!!p.trailing:f),hp(r,i,{leading:O,maxWait:i,trailing:f})}function s5(r){return dp(r,1)}function O5(r,i){return qs(rp(i),r)}function u5(){if(!arguments.length)return[];var r=arguments[0];return z1(r)?r:[r]}function l5(r){return bn(r,d)}function A5(r,i){return i=typeof i=="function"?i:n,bn(r,d,i)}function f5(r){return bn(r,l|d)}function d5(r,i){return i=typeof i=="function"?i:n,bn(r,l|d,i)}function q5(r,i){return i==null||Ac(r,i,dt(i))}function ce(r,i){return r===i||r!==r&&i!==i}var mp=Rc(Xt),hs=Rc(function(r,i){return r>=i}),pr=Ca(function(){return arguments}())?Ca:function(r){return De(r)&&ie.call(r,"callee")&&!Fu.call(r,"callee")},z1=h.isArray,we=pa?wn(pa):h4;function It(r){return r!=null&&yp(r.length)&&!Gn(r)}function Qe(r){return De(r)&&It(r)}function Vn(r){return r===!0||r===!1||De(r)&&kt(r)==s0}var O2=ac||xs,h5=za?wn(za):M3;function oi(r){return De(r)&&r.nodeType===1&&!Lo(r)}function gp(r){if(r==null)return!0;if(It(r)&&(z1(r)||typeof r=="string"||typeof r.splice=="function"||O2(r)||No(r)||pr(r)))return!r.length;var i=xt(r);if(i==n0||i==U0)return!r.size;if(ti(r))return!GM(r).length;for(var p in r)if(ie.call(r,p))return!1;return!0}function Rp(r,i){return F2(r,i)}function be(r,i,p){p=typeof p=="function"?p:n;var O=p?p(r,i):n;return O===n?F2(r,i,n,p):!!O}function Ws(r){if(!De(r))return!1;var i=kt(r);return i==p1||i==G0||typeof r.message=="string"&&typeof r.name=="string"&&!Lo(r)}function V3(r){return typeof r=="number"&&sc(r)}function Gn(r){if(!xe(r))return!1;var i=kt(r);return i==n1||i==$||i==c0||i==X}function G3(r){return typeof r=="number"&&r==Q0(r)}function yp(r){return typeof r=="number"&&r>-1&&r%1==0&&r<=m0}function xe(r){var i=typeof r;return r!=null&&(i=="object"||i=="function")}function De(r){return r!=null&&typeof r=="object"}var yo=yb?wn(yb):W4;function Lp(r,i){return r===i||Hb(r,i,ns(i))}function K3(r,i,p){return p=typeof p=="function"?p:n,Hb(r,i,ns(i),p)}function vp(r){return ms(r)&&r!=+r}function Z3(r){if(H4(r))throw new v0(c);return xa(r)}function J3(r){return r===null}function Np(r){return r==null}function ms(r){return typeof r=="number"||De(r)&&kt(r)==p0}function Lo(r){if(!De(r)||kt(r)!=S0)return!1;var i=E2(r);if(i===null)return!0;var p=ie.call(i,"constructor")&&i.constructor;return typeof p=="function"&&p instanceof p&&Un.call(p)==n4}var vo=mu?wn(mu):Yb;function wp(r){return G3(r)&&r>=-m0&&r<=m0}var Q3=aa?wn(aa):i3;function Dp(r){return typeof r=="string"||!z1(r)&&De(r)&&kt(r)==T1}function _n(r){return typeof r=="symbol"||De(r)&&kt(r)==f1}var No=ic?wn(ic):jb;function Bp(r){return r===n}function gs(r){return De(r)&&xt(r)==vt}function W5(r){return De(r)&&kt(r)==u0}var el=Rc(Gb),m5=Rc(function(r,i){return r<=i});function tl(r){if(!r)return[];if(It(r))return Dp(r)?In(r):jt(r);if(pc&&r[pc])return ha(r[pc]());var i=xt(r),p=i==n0?uo:i==U0?Ht:ci;return p(r)}function Ae(r){if(!r)return r===0?r:0;if(r=Kn(r),r===O0||r===-O0){var i=r<0?-1:1;return i*q0}return r===r?r:0}function Q0(r){var i=Ae(r),p=i%1;return i===i?p?i-p:i:0}function nl(r){return r?cn(Q0(r),0,z0):0}function Kn(r){if(typeof r=="number")return r;if(_n(r))return C;if(xe(r)){var i=typeof r.valueOf=="function"?r.valueOf():r;r=xe(i)?i+"":i}if(typeof r!="string")return r===0?r:+r;r=Du(r);var p=ub.test(r);return p||pu.test(r)?Id(r.slice(2),p?2:8):Rd.test(r)?C:+r}function Rs(r){return U2(r,Jt(r))}function g5(r){return r?cn(Q0(r),-m0,m0):r===0?r:0}function $1(r){return r==null?"":Bn(r)}var Tc=JM(function(r,i){if(ti(i)||It(i)){U2(i,dt(i),r);return}for(var p in i)ie.call(i,p)&&St(r,p,i[p])}),Tp=JM(function(r,i){U2(i,Jt(i),r)}),wo=JM(function(r,i,p,O){U2(i,Jt(i),r,O)}),_c=JM(function(r,i,p,O){U2(i,dt(i),r,O)}),Ec=Wo(Yt);function _p(r,i){var p=$M(r);return i==null?p:Pb(p,i)}var ri=A1(function(r,i){r=Me(r);var p=-1,O=i.length,f=O>2?i[2]:n;for(f&&Gt(i[0],i[1],f)&&(O=1);++p<O;)for(var q=i[p],m=Jt(q),y=-1,D=m.length;++y<D;){var H=m[y],U=r[H];(U===n||ce(U,IM[H])&&!ie.call(r,H))&&(r[H]=q[H])}return r}),R5=A1(function(r){return r.push(n,W3),rn(vs,n,r)});function y5(r,i){return Oa(r,r1(i,3),C2)}function L5(r,i){return Oa(r,r1(i,3),$b)}function v5(r,i){return r==null?r:ka(r,r1(i,3),Jt)}function N5(r,i){return r==null?r:r3(r,r1(i,3),Jt)}function Ep(r,i){return r&&C2(r,r1(i,3))}function Sc(r,i){return r&&$b(r,r1(i,3))}function ol(r){return r==null?[]:fc(r,dt(r))}function Mi(r){return r==null?[]:fc(r,Jt(r))}function $2(r,i,p){var O=r==null?n:Yr(r,i);return O===n?p:O}function rl(r,i){return r!=null&&yc(r,i,x2)}function kc(r,i){return r!=null&&yc(r,i,d4)}var Ml=f3(function(r,i,p){i!=null&&typeof i.toString!="function"&&(i=Bb.call(i)),r[i]=p},_s(Dt)),il=f3(function(r,i,p){i!=null&&typeof i.toString!="function"&&(i=Bb.call(i)),ie.call(r,i)?r[i].push(p):r[i]=[p]},r1),w5=A1(VM);function dt(r){return It(r)?R1(r):GM(r)}function Jt(r){return It(r)?R1(r,!0):m4(r)}function D5(r,i){var p={};return i=r1(i,3),C2(r,function(O,f,q){X2(p,i(O,f,q),O)}),p}function ys(r,i){var p={};return i=r1(i,3),C2(r,function(O,f,q){X2(p,f,i(O,f,q))}),p}var Ls=JM(function(r,i,p){hc(r,i,p)}),vs=JM(function(r,i,p,O){hc(r,i,p,O)}),Pt=Wo(function(r,i){var p={};if(r==null)return p;var O=!1;i=We(i,function(q){return q=ir(q,r),O||(O=q.length>1),q}),U2(r,es(r),p),O&&(p=bn(p,l|A|d,S4));for(var f=i.length;f--;)wt(p,i[f]);return p});function B5(r,i){return ii(r,Wp(r1(i)))}var cl=Wo(function(r,i){return r==null?{}:g4(r,i)});function ii(r,i){if(r==null)return{};var p=We(es(r),function(O){return[O]});return i=r1(i),Ua(r,p,function(O,f){return i(O,f[0])})}function Ns(r,i,p){i=ir(i,r);var O=-1,f=i.length;for(f||(f=1,r=n);++O<f;){var q=r==null?n:r[s2(i[O])];q===n&&(O=f,q=p),r=Gn(q)?q.call(r):q}return r}function bl(r,i,p){return r==null?r:jr(r,i,p)}function T5(r,i,p,O){return O=typeof O=="function"?O:n,r==null?r:jr(r,i,p,O)}var pl=bp(dt),zl=bp(Jt);function _5(r,i,p){var O=z1(r),f=O||O2(r)||No(r);if(i=r1(i,4),p==null){var q=r&&r.constructor;f?p=O?new q:[]:xe(r)?p=Gn(q)?$M(E2(r)):{}:p={}}return(f?vn:C2)(r,function(m,y,D){return i(p,m,y,D)}),p}function E5(r,i){return r==null?!0:wt(r,i)}function S5(r,i,p){return r==null?r:ep(r,i,rp(p))}function k5(r,i,p,O){return O=typeof O=="function"?O:n,r==null?r:ep(r,i,rp(p),O)}function ci(r){return r==null?[]:le(r,dt(r))}function X5(r){return r==null?[]:le(r,Jt(r))}function C5(r,i,p){return p===n&&(p=i,i=n),p!==n&&(p=Kn(p),p=p===p?p:0),i!==n&&(i=Kn(i),i=i===i?i:0),cn(Kn(r),i,p)}function x5(r,i,p){return i=Ae(i),p===n?(p=i,i=0):p=Ae(p),r=Kn(r),q4(r,i,p)}function F5(r,i,p){if(p&&typeof p!="boolean"&&Gt(r,i,p)&&(i=p=n),p===n&&(typeof i=="boolean"?(p=i,i=n):typeof r=="boolean"&&(p=r,r=n)),r===n&&i===n?(r=0,i=1):(r=Ae(r),i===n?(i=r,r=0):i=Ae(i)),r>i){var O=r;r=i,i=O}if(p||r%1||i%1){var f=Dn();return Ee(r+f*(i-r+Fd("1e-"+((f+"").length-1))),i)}return Wc(r,i)}var I5=Vr(function(r,i,p){return i=i.toLowerCase(),r+(p?al(i):i)});function al(r){return H2($1(r).toLowerCase())}function sl(r){return r=$1(r),r&&r.replace(Qi,Yd).replace(_d,"")}function P5(r,i,p){r=$1(r),i=Bn(i);var O=r.length;p=p===n?O:cn(Q0(p),0,O);var f=p;return p-=i.length,p>=0&&r.slice(p,f)==i}function U5(r){return r=$1(r),r&&E0.test(r)?r.replace(y0,jd):r}function $5(r){return r=$1(r),r&&T2.test(r)?r.replace(ve,"\\$&"):r}var H5=Vr(function(r,i,p){return r+(p?"-":"")+i.toLowerCase()}),Y5=Vr(function(r,i,p){return r+(p?" ":"")+i.toLowerCase()}),j5=Ka("toLowerCase");function V5(r,i,p){r=$1(r),i=Q0(i);var O=i?Cr(r):0;if(!i||O>=i)return r;var f=(i-O)/2;return Vt(kb(f),p)+r+Vt(Sb(f),p)}function G5(r,i,p){r=$1(r),i=Q0(i);var O=i?Cr(r):0;return i&&O<i?r+Vt(i-O,p):r}function K5(r,i,p){r=$1(r),i=Q0(i);var O=i?Cr(r):0;return i&&O<i?Vt(i-O,p)+r:r}function Z5(r,i,p){return p||i==null?i=0:i&&(i=+i),Ir($1(r).replace(r2,""),i||0)}function J5(r,i,p){return(p?Gt(r,i,p):i===n)?i=1:i=Q0(i),KM($1(r),i)}function Sp(){var r=arguments,i=$1(r[0]);return r.length<3?i:i.replace(r[1],r[2])}var ws=Vr(function(r,i,p){return r+(p?"_":"")+i.toLowerCase()});function Ol(r,i,p){return p&&typeof p!="number"&&Gt(r,i,p)&&(i=p=n),p=p===n?z0:p>>>0,p?(r=$1(r),r&&(typeof i=="string"||i!=null&&!vo(i))&&(i=Bn(i),!i&&FM(r))?cr(In(r),0,p):r.split(i,p)):[]}var Q5=Vr(function(r,i,p){return r+(p?" ":"")+H2(i)});function eh(r,i,p){return r=$1(r),p=p==null?0:cn(Q0(p),0,r.length),i=Bn(i),r.slice(p,p+i.length)==i}function th(r,i,p){var O=w.templateSettings;p&&Gt(r,i,p)&&(i=n),r=$1(r),i=wo({},i,O,h3);var f=wo({},i.imports,O.imports,h3),q=dt(f),m=le(f,q),y,D,H=0,U=i.interpolate||Ab,Q="__p += '",b0=ga((i.escape||Ab).source+"|"+U.source+"|"+(U===$e?Ji:Ab).source+"|"+(i.evaluate||Ab).source+"|$","g"),A0="//# sourceURL="+(ie.call(i,"sourceURL")?(i.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Xd+"]")+` +`;r.replace(b0,function(R0,F0,P0,se,Oe,Mt){return P0||(P0=se),Q+=r.slice(H,Mt).replace(Oo,Vd),F0&&(y=!0,Q+=`' + +__e(`+F0+`) + +'`),Oe&&(D=!0,Q+=`'; +`+Oe+`; +__p += '`),P0&&(Q+=`' + +((__t = (`+P0+`)) == null ? '' : __t) + +'`),H=Mt+R0.length,R0}),Q+=`'; +`;var W0=ie.call(i,"variable")&&i.variable;if(!W0)Q=`with (obj) { +`+Q+` +} +`;else if(M2.test(W0))throw new v0(z);Q=(D?Q.replace(T,""):Q).replace(G,"$1").replace(M0,"$1;"),Q="function("+(W0||"obj")+`) { +`+(W0?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(y?", __e = _.escape":"")+(D?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+Q+`return __p +}`;var k0=Bs(function(){return w0(q,A0+"return "+Q).apply(n,m)});if(k0.source=Q,Ws(k0))throw k0;return k0}function Ds(r){return $1(r).toLowerCase()}function ul(r){return $1(r).toUpperCase()}function nh(r,i,p){if(r=$1(r),r&&(p||i===n))return Du(r);if(!r||!(i=Bn(i)))return r;var O=In(r),f=In(i),q=Bu(O,f),m=Tu(O,f)+1;return cr(O,q,m).join("")}function oh(r,i,p){if(r=$1(r),r&&(p||i===n))return r.slice(0,ma(r)+1);if(!r||!(i=Bn(i)))return r;var O=In(r),f=Tu(O,In(i))+1;return cr(O,0,f).join("")}function rh(r,i,p){if(r=$1(r),r&&(p||i===n))return r.replace(r2,"");if(!r||!(i=Bn(i)))return r;var O=In(r),f=Bu(O,In(i));return cr(O,f).join("")}function Zr(r,i){var p=K,O=V;if(xe(i)){var f="separator"in i?i.separator:f;p="length"in i?Q0(i.length):p,O="omission"in i?Bn(i.omission):O}r=$1(r);var q=r.length;if(FM(r)){var m=In(r);q=m.length}if(p>=q)return r;var y=p-Cr(O);if(y<1)return O;var D=m?cr(m,0,y).join(""):r.slice(0,y);if(f===n)return D+O;if(m&&(y+=D.length-y),vo(f)){if(r.slice(y).search(f)){var H,U=D;for(f.global||(f=ga(f.source,$1(EM.exec(f))+"g")),f.lastIndex=0;H=f.exec(U);)var Q=H.index;D=D.slice(0,Q===n?y:Q)}}else if(r.indexOf(Bn(f),y)!=y){var b0=D.lastIndexOf(f);b0>-1&&(D=D.slice(0,b0))}return D+O}function d1(r){return r=$1(r),r&&_0.test(r)?r.replace(l0,Gd):r}var Mh=Vr(function(r,i,p){return r+(p?" ":"")+i.toUpperCase()}),H2=Ka("toUpperCase");function ll(r,i,p){return r=$1(r),i=p?n:i,i===n?Nt(r)?Jd(r):vu(r):r.match(i)||[]}var Bs=A1(function(r,i){try{return rn(r,n,i)}catch(p){return Ws(p)?p:new v0(p)}}),Ts=Wo(function(r,i){return vn(i,function(p){p=s2(p),X2(r,p,Ft(r[p],r))}),r});function Al(r){var i=r==null?0:r.length,p=r1();return r=i?We(r,function(O){if(typeof O[1]!="function")throw new Pn(b);return[p(O[0]),O[1]]}):[],A1(function(O){for(var f=-1;++f<i;){var q=r[f];if(rn(q[0],this,O))return rn(q[1],this,O)}})}function bi(r){return o3(bn(r,l))}function _s(r){return function(){return r}}function ih(r,i){return r==null||r!==r?i:r}var ch=A3(),fl=A3(!0);function Dt(r){return r}function Es(r){return Vb(typeof r=="function"?r:bn(r,l))}function bh(r){return Fa(bn(r,l))}function ph(r,i){return Kb(r,bn(i,l))}var zh=A1(function(r,i){return function(p){return VM(p,r,i)}}),ah=A1(function(r,i){return function(p){return VM(r,p,i)}});function Ss(r,i,p){var O=dt(i),f=fc(i,O);p==null&&!(xe(i)&&(f.length||!O.length))&&(p=i,i=r,r=this,f=fc(i,dt(i)));var q=!(xe(p)&&"chain"in p)||!!p.chain,m=Gn(r);return vn(f,function(y){var D=i[y];r[y]=D,m&&(r.prototype[y]=function(){var H=this.__chain__;if(q||H){var U=r(this.__wrapped__),Q=U.__actions__=jt(this.__actions__);return Q.push({func:D,args:arguments,thisArg:r}),U.__chain__=H,U}return D.apply(r,Nn([this.value()],arguments))})}),r}function sh(){return lt._===this&&(lt._=lo),this}function ks(){}function dl(r){return r=Q0(r),A1(function(i){return Ia(i,r)})}var Oh=Za(We),uh=Za(Lb),ql=Za(sa);function Xs(r){return rs(r)?la(s2(r)):R4(r)}function lh(r){return function(i){return r==null?n:Yr(r,i)}}var Ah=d3(),fh=d3(!0);function Cs(){return[]}function xs(){return!1}function dh(){return{}}function qh(){return""}function Fs(){return!0}function hl(r,i){if(r=Q0(r),r<1||r>m0)return[];var p=z0,O=Ee(r,z0);i=r1(i),r-=z0;for(var f=qa(O,i);++p<r;)i(p);return f}function hh(r){return z1(r)?We(r,s2):_n(r)?[r]:jt(as($1(r)))}function Wh(r){var i=++t4;return $1(r)+i}var mh=cp(function(r,i){return r+i},0),gh=Ja("ceil"),Rh=cp(function(r,i){return r/i},1),yh=Ja("floor");function Lh(r){return r&&r.length?a2(r,Dt,Xt):n}function vh(r,i){return r&&r.length?a2(r,r1(i,2),Xt):n}function Nh(r){return Nu(r,Dt)}function wh(r,i){return Nu(r,r1(i,2))}function Dh(r){return r&&r.length?a2(r,Dt,Gb):n}function Bh(r,i){return r&&r.length?a2(r,r1(i,2),Gb):n}var Th=cp(function(r,i){return r*i},1),_h=Ja("round"),Eh=cp(function(r,i){return r-i},0);function Sh(r){return r&&r.length?da(r,Dt):0}function kh(r,i){return r&&r.length?da(r,r1(i,2)):0}return w.after=M5,w.ary=dp,w.assign=Tc,w.assignIn=Tp,w.assignInWith=wo,w.assignWith=_c,w.at=Ec,w.before=$3,w.bind=Ft,w.bindAll=Ts,w.bindKey=qp,w.castArray=u5,w.chain=C3,w.chunk=K4,w.compact=Z4,w.concat=J4,w.cond=Al,w.conforms=bi,w.constant=_s,w.countBy=xq,w.create=_p,w.curry=H3,w.curryRight=Y3,w.debounce=hp,w.defaults=ri,w.defaultsDeep=R5,w.defer=i5,w.delay=As,w.difference=Q4,w.differenceBy=eq,w.differenceWith=tq,w.drop=nq,w.dropRight=oq,w.dropRightWhile=rq,w.dropWhile=Mq,w.fill=iq,w.filter=Iq,w.flatMap=F3,w.flatMapDeep=Uq,w.flatMapDepth=$q,w.flatten=Kt,w.flattenDeep=Je,w.flattenDepth=cq,w.flip=c5,w.flow=ch,w.flowRight=fl,w.fromPairs=bq,w.functions=ol,w.functionsIn=Mi,w.groupBy=Hq,w.initial=zq,w.intersection=ss,w.intersectionBy=aq,w.intersectionWith=go,w.invert=Ml,w.invertBy=il,w.invokeMap=jq,w.iteratee=Es,w.keyBy=Vq,w.keys=dt,w.keysIn=Jt,w.map=Ap,w.mapKeys=D5,w.mapValues=ys,w.matches=bh,w.matchesProperty=ph,w.memoize=Bc,w.merge=Ls,w.mergeWith=vs,w.method=zh,w.methodOf=ah,w.mixin=Ss,w.negate=Wp,w.nthArg=dl,w.omit=Pt,w.omitBy=B5,w.once=fs,w.orderBy=Gq,w.over=Oh,w.overArgs=ds,w.overEvery=uh,w.overSome=ql,w.partial=qs,w.partialRight=j3,w.partition=Kq,w.pick=cl,w.pickBy=ii,w.property=Xs,w.propertyOf=lh,w.pull=sq,w.pullAll=_3,w.pullAllBy=Oq,w.pullAllWith=uq,w.pullAt=lq,w.range=Ah,w.rangeRight=fh,w.rearg=b5,w.reject=Qq,w.remove=Aq,w.rest=p5,w.reverse=up,w.sampleSize=t5,w.set=bl,w.setWith=T5,w.shuffle=n5,w.slice=wc,w.sortBy=U3,w.sortedUniq=E3,w.sortedUniqBy=Ro,w.split=Ol,w.spread=z5,w.tail=h1,w.take=S3,w.takeRight=jn,w.takeRightWhile=k3,w.takeWhile=Wq,w.tap=Bq,w.throttle=a5,w.thru=Dc,w.toArray=tl,w.toPairs=pl,w.toPairsIn=zl,w.toPath=hh,w.toPlainObject=Rs,w.transform=_5,w.unary=s5,w.union=Q1,w.unionBy=mq,w.unionWith=gq,w.uniq=Rq,w.uniqBy=yq,w.uniqWith=Lq,w.unset=E5,w.unzip=Os,w.unzipWith=X3,w.update=S5,w.updateWith=k5,w.values=ci,w.valuesIn=X5,w.without=vq,w.words=ll,w.wrap=O5,w.xor=Nq,w.xorBy=us,w.xorWith=wq,w.zip=ls,w.zipObject=ft,w.zipObjectDeep=pn,w.zipWith=Dq,w.entries=pl,w.entriesIn=zl,w.extend=Tp,w.extendWith=wo,Ss(w,w),w.add=mh,w.attempt=Bs,w.camelCase=I5,w.capitalize=al,w.ceil=gh,w.clamp=C5,w.clone=l5,w.cloneDeep=f5,w.cloneDeepWith=d5,w.cloneWith=A5,w.conformsTo=q5,w.deburr=sl,w.defaultTo=ih,w.divide=Rh,w.endsWith=P5,w.eq=ce,w.escape=U5,w.escapeRegExp=$5,w.every=Fq,w.find=Pq,w.findIndex=D3,w.findKey=y5,w.findLast=x3,w.findLastIndex=Yn,w.findLastKey=L5,w.floor=yh,w.forEach=I3,w.forEachRight=P3,w.forIn=v5,w.forInRight=N5,w.forOwn=Ep,w.forOwnRight=Sc,w.get=$2,w.gt=mp,w.gte=hs,w.has=rl,w.hasIn=kc,w.head=B3,w.identity=Dt,w.includes=Yq,w.indexOf=pq,w.inRange=x5,w.invoke=w5,w.isArguments=pr,w.isArray=z1,w.isArrayBuffer=we,w.isArrayLike=It,w.isArrayLikeObject=Qe,w.isBoolean=Vn,w.isBuffer=O2,w.isDate=h5,w.isElement=oi,w.isEmpty=gp,w.isEqual=Rp,w.isEqualWith=be,w.isError=Ws,w.isFinite=V3,w.isFunction=Gn,w.isInteger=G3,w.isLength=yp,w.isMap=yo,w.isMatch=Lp,w.isMatchWith=K3,w.isNaN=vp,w.isNative=Z3,w.isNil=Np,w.isNull=J3,w.isNumber=ms,w.isObject=xe,w.isObjectLike=De,w.isPlainObject=Lo,w.isRegExp=vo,w.isSafeInteger=wp,w.isSet=Q3,w.isString=Dp,w.isSymbol=_n,w.isTypedArray=No,w.isUndefined=Bp,w.isWeakMap=gs,w.isWeakSet=W5,w.join=T3,w.kebabCase=H5,w.last=Zt,w.lastIndexOf=Ce,w.lowerCase=Y5,w.lowerFirst=j5,w.lt=el,w.lte=m5,w.max=Lh,w.maxBy=vh,w.mean=Nh,w.meanBy=wh,w.min=Dh,w.minBy=Bh,w.stubArray=Cs,w.stubFalse=xs,w.stubObject=dh,w.stubString=qh,w.stubTrue=Fs,w.multiply=Th,w.nth=Ye,w.noConflict=sh,w.noop=ks,w.now=fp,w.pad=V5,w.padEnd=G5,w.padStart=K5,w.parseInt=Z5,w.random=F5,w.reduce=Zq,w.reduceRight=Jq,w.repeat=J5,w.replace=Sp,w.result=Ns,w.round=_h,w.runInContext=v,w.sample=e5,w.size=o5,w.snakeCase=ws,w.some=r5,w.sortedIndex=fq,w.sortedIndexBy=lp,w.sortedIndexOf=Tn,w.sortedLastIndex=dq,w.sortedLastIndexBy=qq,w.sortedLastIndexOf=hq,w.startCase=Q5,w.startsWith=eh,w.subtract=Eh,w.sum=Sh,w.sumBy=kh,w.template=th,w.times=hl,w.toFinite=Ae,w.toInteger=Q0,w.toLength=nl,w.toLower=Ds,w.toNumber=Kn,w.toSafeInteger=g5,w.toString=$1,w.toUpper=ul,w.trim=nh,w.trimEnd=oh,w.trimStart=rh,w.truncate=Zr,w.unescape=d1,w.uniqueId=Wh,w.upperCase=Mh,w.upperFirst=H2,w.each=I3,w.eachRight=P3,w.first=B3,Ss(w,function(){var r={};return C2(w,function(i,p){ie.call(w.prototype,p)||(r[p]=i)}),r}(),{chain:!1}),w.VERSION=o,vn(["bind","bindKey","curry","curryRight","partial","partialRight"],function(r){w[r].placeholder=w}),vn(["drop","take"],function(r,i){g1.prototype[r]=function(p){p=p===n?1:zt(Q0(p),0);var O=this.__filtered__&&!i?new g1(this):this.clone();return O.__filtered__?O.__takeCount__=Ee(p,O.__takeCount__):O.__views__.push({size:Ee(p,z0),type:r+(O.__dir__<0?"Right":"")}),O},g1.prototype[r+"Right"]=function(p){return this.reverse()[r](p).reverse()}}),vn(["filter","map","takeWhile"],function(r,i){var p=i+1,O=p==Z||p==t0;g1.prototype[r]=function(f){var q=this.clone();return q.__iteratees__.push({iteratee:r1(f,3),type:p}),q.__filtered__=q.__filtered__||O,q}}),vn(["head","last"],function(r,i){var p="take"+(i?"Right":"");g1.prototype[r]=function(){return this[p](1).value()[0]}}),vn(["initial","tail"],function(r,i){var p="drop"+(i?"":"Right");g1.prototype[r]=function(){return this.__filtered__?new g1(this):this[p](1)}}),g1.prototype.compact=function(){return this.filter(Dt)},g1.prototype.find=function(r){return this.filter(r).head()},g1.prototype.findLast=function(r){return this.reverse().find(r)},g1.prototype.invokeMap=A1(function(r,i){return typeof r=="function"?new g1(this):this.map(function(p){return VM(p,r,i)})}),g1.prototype.reject=function(r){return this.filter(Wp(r1(r)))},g1.prototype.slice=function(r,i){r=Q0(r);var p=this;return p.__filtered__&&(r>0||i<0)?new g1(p):(r<0?p=p.takeRight(-r):r&&(p=p.drop(r)),i!==n&&(i=Q0(i),p=i<0?p.dropRight(-i):p.take(i-r)),p)},g1.prototype.takeRightWhile=function(r){return this.reverse().takeWhile(r).reverse()},g1.prototype.toArray=function(){return this.take(z0)},C2(g1.prototype,function(r,i){var p=/^(?:filter|find|map|reject)|While$/.test(i),O=/^(?:head|last)$/.test(i),f=w[O?"take"+(i=="last"?"Right":""):i],q=O||/^find/.test(i);f&&(w.prototype[i]=function(){var m=this.__wrapped__,y=O?[1]:arguments,D=m instanceof g1,H=y[0],U=D||z1(m),Q=function(F0){var P0=f.apply(w,Nn([F0],y));return O&&b0?P0[0]:P0};U&&p&&typeof H=="function"&&H.length!=1&&(D=U=!1);var b0=this.__chain__,A0=!!this.__actions__.length,W0=q&&!b0,k0=D&&!A0;if(!q&&U){m=k0?m:new g1(this);var R0=r.apply(m,y);return R0.__actions__.push({func:Dc,args:[Q],thisArg:n}),new $n(R0,b0)}return W0&&k0?r.apply(this,y):(R0=this.thru(Q),W0?O?R0.value()[0]:R0.value():R0)})}),vn(["pop","push","shift","sort","splice","unshift"],function(r){var i=wb[r],p=/^(?:push|sort|unshift)$/.test(r)?"tap":"thru",O=/^(?:pop|shift)$/.test(r);w.prototype[r]=function(){var f=arguments;if(O&&!this.__chain__){var q=this.value();return i.apply(z1(q)?q:[],f)}return this[p](function(m){return i.apply(z1(m)?m:[],f)})}}),C2(g1.prototype,function(r,i){var p=w[i];if(p){var O=p.name+"";ie.call(He,O)||(He[O]=[]),He[O].push({name:i,func:p})}}),He[gc(n,R).name]=[{name:"wrapper",func:n}],g1.prototype.clone=ju,g1.prototype.reverse=c4,g1.prototype.value=b4,w.prototype.at=Tq,w.prototype.chain=_q,w.prototype.commit=Eq,w.prototype.next=Sq,w.prototype.plant=Xq,w.prototype.reverse=Cq,w.prototype.toJSON=w.prototype.valueOf=w.prototype.value=ni,w.prototype.first=w.prototype.head,pc&&(w.prototype[pc]=kq),w},b2=Qd();Xr?((Xr.exports=b2)._=b2,ca._=b2):lt._=b2}).call(e2)})(YA,YA.exports);var Ui=YA.exports;function Zj(e,t,n){const o=e.findIndex(u=>u.id===t.id),M=e[o];l1.isNotVoid(M);const c=e.slice(0,o),b=e.slice(o+1),z={...M,isAllDayEvent:!1,startTime:$t(n,M.startTime)},a=b.reduce((u,l)=>{const A=Ui.last(u)||z;return Tt(A)>N1(l.startTime)?[...u,{...l,startTime:$t(Tt(A),l.startTime)}]:[...u,l]},[]);return[...c.reverse().reduce((u,l)=>{const A=Ui.last(u)||z;return N1(A.startTime)<Tt(l)?[...u,{...l,startTime:$t(N1(A.startTime)-l.durationMinutes,l.startTime)}]:[...u,l]},[]).reverse(),z,...a]}function Jj(e,t,n,o){const M=e.findIndex(l=>l.id===t.id),c=e[M];l1.isNotVoid(c);const b=e.slice(0,M),z=e.slice(M+1),a={...c,isAllDayEvent:!1,startTime:$t(n,c.startTime)},s=z.reduce((l,A)=>{const d=Ui.last(l)||a;if(Tt(d)>N1(A.startTime)){const g=Tt(d),L=Tt(A)-g;return[...l,{...A,startTime:$t(g,A.startTime),durationMinutes:Math.max(L,o.minimalDurationMinutes)}]}return[...l,A]},[]);return[...b.reverse().reduce((l,A)=>{const d=Ui.last(l)||a;if(N1(d.startTime)<Tt(A)){const L=N1(d.startTime)-N1(A.startTime)<o.minimalDurationMinutes?N1(d.startTime)-o.minimalDurationMinutes:N1(A.startTime);return[...l,{...A,startTime:$t(L,A.startTime),durationMinutes:N1(d.startTime)-L}]}return[...l,A]},[]).reverse(),a,...s]}function Sg(e,t,n,o){return Math.max(o?o.clone().startOf("day").add(t,"minutes").diff(e.startTime,"minutes"):t-N1(e.startTime),n.minimalDurationMinutes)}function Qj(e,t,n,o,M){const c=e.findIndex(a=>a.id===t.id),b=e[c];l1.isNotVoid(b);const z={...b,durationMinutes:Sg(b,n,o,M)};return jf(e,c,z)}function eV(e,t,n,o){const M=e.findIndex(a=>a.id===t.id),c=e[M];l1.isNotVoid(c);const b=Math.max(Tt(c)-n,o.minimalDurationMinutes),z={...c,startTime:$t(n,c.startTime),durationMinutes:b};return jf(e,M,z)}function tV(e,t,n,o,M){const c=e.findIndex(l=>l.id===t.id),b=e[c];l1.isNotVoid(b);const z=e.slice(0,c),a=e.slice(c+1),s={...b,durationMinutes:Sg(b,n,o,M)},u=a.reduce((l,A)=>{const d=Ui.last(l)||s;return Tt(d)>N1(A.startTime)?[...l,{...A,startTime:$t(Tt(d),A.startTime)}]:[...l,A]},[]);return[...z,s,...u]}function nV(e,t,n,o){const M=e.findIndex(l=>l.id===t.id),c=e[M];l1.isNotVoid(c);const b=e.slice(0,M),z=e.slice(M+1),a=Math.max(Tt(c)-n,o.minimalDurationMinutes),s={...c,startTime:$t(n,c.startTime),durationMinutes:a};return[...b.reverse().reduce((l,A)=>{const d=Ui.last(l)||s;return N1(d.startTime)<Tt(A)?[...l,{...A,startTime:$t(N1(d.startTime)-A.durationMinutes,A.startTime)}]:[...l,A]},[]).reverse(),s,...z]}function oV(e,t,n,o,M){const c=e.findIndex(l=>l.id===t.id),b=e[c];l1.isNotVoid(b);const z=e.slice(0,c),a=e.slice(c+1),s={...b,durationMinutes:Sg(b,n,o,M)},u=a.reduce((l,A)=>{const d=Ui.last(l)||s;if(Tt(d)>N1(A.startTime)){const g=Tt(d),L=Tt(A)-g;return[...l,{...A,startTime:$t(g,A.startTime),durationMinutes:Math.max(L,o.minimalDurationMinutes)}]}return[...l,A]},[]);return[...z,s,...u]}function rV(e,t,n,o){const M=e.findIndex(l=>l.id===t.id),c=e[M];l1.isNotVoid(c);const b=e.slice(0,M),z=e.slice(M+1),a=Math.max(Tt(c)-n,o.minimalDurationMinutes),s={...c,startTime:$t(n,c.startTime),durationMinutes:a};return[...b.reverse().reduce((l,A)=>{const d=Ui.last(l)||s;if(N1(d.startTime)<Tt(A)){const L=N1(d.startTime)-N1(A.startTime)<o.minimalDurationMinutes?N1(d.startTime)-o.minimalDurationMinutes:N1(A.startTime);return[...l,{...A,startTime:$t(L,A.startTime),durationMinutes:N1(d.startTime)-L}]}return[...l,A]},[]).reverse(),s,...z]}const MV={[D1.DRAG]:Vy,[D1.DRAG_AND_SHIFT_OTHERS]:Zj,[D1.DRAG_AND_SHRINK_OTHERS]:Jj,[D1.CREATE]:Kj,[D1.RESIZE]:Qj,[D1.RESIZE_AND_SHIFT_OTHERS]:tV,[D1.RESIZE_FROM_TOP]:eV,[D1.RESIZE_FROM_TOP_AND_SHIFT_OTHERS]:nV,[D1.RESIZE_AND_SHRINK_OTHERS]:oV,[D1.RESIZE_FROM_TOP_AND_SHRINK_OTHERS]:rV,[D1.SCHEDULE_SEARCH_RESULT]:Vy};function iV(e){return[D1.RESIZE,D1.RESIZE_FROM_TOP,D1.RESIZE_AND_SHRINK_OTHERS,D1.RESIZE_FROM_TOP_AND_SHRINK_OTHERS,D1.RESIZE_AND_SHIFT_OTHERS,D1.RESIZE_FROM_TOP_AND_SHIFT_OTHERS].includes(e)}function cV(e){return e.slice().sort((t,n)=>t.startTime.diff(n.startTime))}function bV(e,t,n,o){const M=o.dateTime;if(!M)throw new Error("DateTime must be defined on edit");const c=MV[t.mode];l1.isNotVoid(c,`No transformer for operation: ${t.mode}`);const b=e.findIndex(u=>u.id===t.task.id),z=b>=0;let a;if(z){const u=e[b];let l=u;iV(t.mode)||(l={...u,startTime:$t(N1(u.startTime),M)}),a=jf(e,b,l)}else a=e.concat({...t.task,startTime:$t(N1(t.task.startTime),M)});const s=cV(a);return c(s,t.task,N1(M),n,M)}function pV({editOperation:e,baselineTasks:t,tasksWithPendingUpdate:n,onUpdate:o}){function M(z){e.set(z)}function c(){e.set(void 0)}async function b(){const z=Ze(e);if(z===void 0)return;const a=Ze(t),s=Ze(n);t.set(s),e.set(void 0),await o(a,s,z.mode)}return{startEdit:M,confirmEdit:b,cancelEdit:c}}function zV(e){return e.reduce((t,n)=>{const o=xi(n.startTime);return t[o]||(t[o]={withTime:[],noTime:[]}),n.isAllDayEvent?t[o].noTime.push(n):t[o].withTime.push(n),t},{})}function aV(e){const{workspaceFacade:t,onUpdate:n,settings:o,localTasks:M,remoteTasks:c,pointerDateTime:b}=e,z=xn(),a=Gj(z),s=xn([],R=>M.subscribe(R)),u=G1([z,s,o,b],([R,E,k,B])=>R?bV(E,R,k,B):E),{startEdit:l,confirmEdit:A,cancelEdit:d}=pV({editOperation:z,baselineTasks:s,tasksWithPendingUpdate:u,onUpdate:n}),W=Vj({pointerDateTime:b,workspaceFacade:t,startEdit:l,editOperation:z,settings:o}),g=G1([c,u],([R,E])=>{const B=R.concat(E).flatMap(I=>Bf(I)?Gm(I.startTime,rz(I)).map(([N,P])=>({...I,startTime:N,durationMinutes:Kc(N,P)})):I);return zV(B)});function L(R){return G1(g,E=>{const k=E[xi(R)]||WF(),B=me.flow(me.uniqBy(qO),SD)(k.withTime);return{...k,withTime:B}})}return{handlers:W,cursor:a,dayToDisplayedTasks:g,confirmEdit:A,cancelEdit:d,editOperation:z,getDisplayedTasksForTimeline:L}}function sV(){return no(window.navigator.onLine,e=>{function t(){e(!0)}function n(){e(!1)}window.addEventListener("online",t),window.addEventListener("offline",n);function o(){window.removeEventListener("online",t),window.removeEventListener("offline",n)}return o})}function OV(){return no({},e=>{const t=n=>e(n);return document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t)}})}function uV(e){return e.map(t=>`"${t.path}"`).join(" OR ")}function lV(e,t){return t.findIndex(n=>n.position.start.line===e.start.line)}function AV(e,t){return t.reduce((n,o,M)=>o.position.start.line<e.start.line?M:n,-1)}function fV(e,t){const n=[];if(t.length===0)return n;const o=a=>{let s=t[a].level;const u=a-1;for(let l=u;l>=0;l--){const A=t[l];A.level<s&&(s=A.level,n.unshift(A))}},M=lV(e,t);if(M>=0)return n.unshift(t[M]),o(M),n;const b=AV(e,t);if(b>=0){const a=t[b];return n.unshift(a),o(b),n}return n}function dV(e){const{visibleDailyNotes:t,debouncedTaskUpdateTrigger:n,dataviewFacade:o,metadataCache:M,settings:c}=e;return G1([t,c,n],([b,z])=>{if(b.length===0)return[];const a=o.getAllListsFrom(uV(b));if(z.plannerHeading==="")return a;const s=Object.fromEntries(b.map(u=>{var l;return[u.path,((l=M.getFileCache(u))==null?void 0:l.headings)||[]]}));return a.reduce((u,l)=>(fV(l.position,s[l.path]).some(({heading:W})=>W===z.plannerHeading)&&u.push(l),u),[])})}function qV(){return no(!1,e=>{const t=M=>{$0.Keymap.isModifier(M,"Mod")&&e(!0)},n=M=>{$0.Keymap.isModifier(M,"Mod")||e(!1)},o=()=>{e(!1)};return document.addEventListener("keydown",t),document.addEventListener("keyup",n),window.addEventListener("blur",o),()=>{document.removeEventListener("keydown",t),document.removeEventListener("keyup",n),window.removeEventListener("blur",o)}})}function hV(e){const{settings:t,currentTime:n,tasksForToday:o}=e;let M=[];return G1([t,n],([c,b])=>{if(!c.showTaskNotification)return[];const z=Ze(o).filter(s=>s.startTime.isBefore(b)&&rz(s).isAfter(b)),a=me.differenceBy(qF,z,M);return M=z,a})}function WV(e){const{dataviewFacade:t,dataviewSource:n,taskUpdateTrigger:o,keyDown:M}=e,c=n,b=xn(""),z=G1([o,b],Ri),a=kD(z,M,250),s=G1(a,()=>{const l=Ze(b).toLowerCase(),A=Ze(c);return l.trim().length===0?[]:t.getAllTasksFrom(A).filter(d=>d.text.toLowerCase().includes(l)).map(d=>Df(d,window.moment()))}),u=G1([b,s],([l,A])=>l.trim().length===0?"Empty":A.length===0?"No matches":A.length>z8?`The matches are limited to ${z8} entries. Try refining your search.`:`${A.length} matches`);return{query:b,result:s,description:u}}function mV({dataviewSource:e,refreshSignal:t,dataviewFacade:n}){return G1([e,t],([o])=>o.trim().length===0?[]:n.getAllTasksFrom(o))}function gV(e){const{dataviewTasks:t}=e;return G1([t],([n])=>n.reduce((o,M)=>{const c=Zm(M[Ti]??[]).find(s6);if(c!=null&&c.isLuxonDateTime){const b=window.moment(c.toJSDate());o.push(sF(M,b))}return o},[]))}function RV(){try{return zm()}catch(e){console.error(e);const t=e instanceof Error?e.message:e;return new $0.Notice(`Could not read daily notes. Reason: ${t}`),{}}}function yV(e,t,n){return G1([e,n,t],([o,M])=>{if(!o)return[];const c=RV();return M.map(b=>am(b,c)).filter(Boolean)})}function LV(e,t){return e.map((n,o,M)=>{if(n.durationMinutes)return n;const c=M[o+1];if(c&&t.extendDurationUntilNext){const z=N1(c.startTime)-N1(n.startTime);return{...n,durationMinutes:z}}return{...n,durationMinutes:t.defaultDurationMinutes}})}function vV(e,t,n){const[o,M]=me.partition(({text:a})=>TF(a),t),{parsed:c}=o.reduce((a,s)=>{try{const u=OF(s,e);a.parsed.push(u)}catch(u){a.errors.push(u)}return a},{parsed:[],errors:[]});c.sort((a,s)=>a.startTime.diff(s.startTime));const b=LV(c,n),z=M.filter(a=>!a.task||a.text.trim().length===0?!1:n.showUnscheduledNestedTasks?!0:!a.parent).map(a=>Df(a,e));return[...b,...z]}function NV(e,t){return G1([t,e,ue],([n,o,M])=>{const c=me.groupBy(uF,o);return n.reduce((b,z)=>{const a=xi(z),s=c[a];return s?b.concat(vV(z,s,M)):b},[])})}function wV(e){let t;return G1(e,(n,o)=>{const M=Object.values(n).flat(),c=me.uniqBy(xi,M),b=c.map(xi).sort();t&&me.isEqual(b,t)||(t=b,o(c))})}const DV={},BV=Object.freeze(Object.defineProperty({__proto__:null,default:DV},Symbol.toStringTag,{value:"Module"})),TV=bm(BV);function XD(e,t){return function(){return e.apply(t,arguments)}}const{toString:_V}=Object.prototype,{getPrototypeOf:kg}=Object,Vf=(e=>t=>{const n=_V.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),_r=e=>(e=e.toLowerCase(),t=>Vf(t)===e),Gf=e=>t=>typeof t===e,{isArray:jz}=Array,NO=Gf("undefined");function EV(e){return e!==null&&!NO(e)&&e.constructor!==null&&!NO(e.constructor)&&ro(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const CD=_r("ArrayBuffer");function SV(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&CD(e.buffer),t}const kV=Gf("string"),ro=Gf("function"),xD=Gf("number"),Kf=e=>e!==null&&typeof e=="object",XV=e=>e===!0||e===!1,MA=e=>{if(Vf(e)!=="object")return!1;const t=kg(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},CV=_r("Date"),xV=_r("File"),FV=_r("Blob"),IV=_r("FileList"),PV=e=>Kf(e)&&ro(e.pipe),UV=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||ro(e.append)&&((t=Vf(e))==="formdata"||t==="object"&&ro(e.toString)&&e.toString()==="[object FormData]"))},$V=_r("URLSearchParams"),HV=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function tu(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let o,M;if(typeof e!="object"&&(e=[e]),jz(e))for(o=0,M=e.length;o<M;o++)t.call(null,e[o],o,e);else{const c=n?Object.getOwnPropertyNames(e):Object.keys(e),b=c.length;let z;for(o=0;o<b;o++)z=c[o],t.call(null,e[z],z,e)}}function FD(e,t){t=t.toLowerCase();const n=Object.keys(e);let o=n.length,M;for(;o-- >0;)if(M=n[o],t===M.toLowerCase())return M;return null}const ID=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:e2,PD=e=>!NO(e)&&e!==ID;function U6(){const{caseless:e}=PD(this)&&this||{},t={},n=(o,M)=>{const c=e&&FD(t,M)||M;MA(t[c])&&MA(o)?t[c]=U6(t[c],o):MA(o)?t[c]=U6({},o):jz(o)?t[c]=o.slice():t[c]=o};for(let o=0,M=arguments.length;o<M;o++)arguments[o]&&tu(arguments[o],n);return t}const YV=(e,t,n,{allOwnKeys:o}={})=>(tu(t,(M,c)=>{n&&ro(M)?e[c]=XD(M,n):e[c]=M},{allOwnKeys:o}),e),jV=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),VV=(e,t,n,o)=>{e.prototype=Object.create(t.prototype,o),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},GV=(e,t,n,o)=>{let M,c,b;const z={};if(t=t||{},e==null)return t;do{for(M=Object.getOwnPropertyNames(e),c=M.length;c-- >0;)b=M[c],(!o||o(b,e,t))&&!z[b]&&(t[b]=e[b],z[b]=!0);e=n!==!1&&kg(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},KV=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const o=e.indexOf(t,n);return o!==-1&&o===n},ZV=e=>{if(!e)return null;if(jz(e))return e;let t=e.length;if(!xD(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},JV=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&kg(Uint8Array)),QV=(e,t)=>{const o=(e&&e[Symbol.iterator]).call(e);let M;for(;(M=o.next())&&!M.done;){const c=M.value;t.call(e,c[0],c[1])}},eG=(e,t)=>{let n;const o=[];for(;(n=e.exec(t))!==null;)o.push(n);return o},tG=_r("HTMLFormElement"),nG=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,o,M){return o.toUpperCase()+M}),Gy=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),oG=_r("RegExp"),UD=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),o={};tu(n,(M,c)=>{let b;(b=t(M,c,e))!==!1&&(o[c]=b||M)}),Object.defineProperties(e,o)},rG=e=>{UD(e,(t,n)=>{if(ro(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const o=e[n];if(ro(o)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},MG=(e,t)=>{const n={},o=M=>{M.forEach(c=>{n[c]=!0})};return jz(e)?o(e):o(String(e).split(t)),n},iG=()=>{},cG=(e,t)=>(e=+e,Number.isFinite(e)?e:t),sW="abcdefghijklmnopqrstuvwxyz",Ky="0123456789",$D={DIGIT:Ky,ALPHA:sW,ALPHA_DIGIT:sW+sW.toUpperCase()+Ky},bG=(e=16,t=$D.ALPHA_DIGIT)=>{let n="";const{length:o}=t;for(;e--;)n+=t[Math.random()*o|0];return n};function pG(e){return!!(e&&ro(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const zG=e=>{const t=new Array(10),n=(o,M)=>{if(Kf(o)){if(t.indexOf(o)>=0)return;if(!("toJSON"in o)){t[M]=o;const c=jz(o)?[]:{};return tu(o,(b,z)=>{const a=n(b,M+1);!NO(a)&&(c[z]=a)}),t[M]=void 0,c}}return o};return n(e,0)},aG=_r("AsyncFunction"),sG=e=>e&&(Kf(e)||ro(e))&&ro(e.then)&&ro(e.catch);var h0={isArray:jz,isArrayBuffer:CD,isBuffer:EV,isFormData:UV,isArrayBufferView:SV,isString:kV,isNumber:xD,isBoolean:XV,isObject:Kf,isPlainObject:MA,isUndefined:NO,isDate:CV,isFile:xV,isBlob:FV,isRegExp:oG,isFunction:ro,isStream:PV,isURLSearchParams:$V,isTypedArray:JV,isFileList:IV,forEach:tu,merge:U6,extend:YV,trim:HV,stripBOM:jV,inherits:VV,toFlatObject:GV,kindOf:Vf,kindOfTest:_r,endsWith:KV,toArray:ZV,forEachEntry:QV,matchAll:eG,isHTMLForm:tG,hasOwnProperty:Gy,hasOwnProp:Gy,reduceDescriptors:UD,freezeMethods:rG,toObjectSet:MG,toCamelCase:nG,noop:iG,toFiniteNumber:cG,findKey:FD,global:ID,isContextDefined:PD,ALPHABET:$D,generateString:bG,isSpecCompliantForm:pG,toJSONObject:zG,isAsyncFn:aG,isThenable:sG};function H1(e,t,n,o,M){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),o&&(this.request=o),M&&(this.response=M)}h0.inherits(H1,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:h0.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const HD=H1.prototype,YD={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{YD[e]={value:e}});Object.defineProperties(H1,YD);Object.defineProperty(HD,"isAxiosError",{value:!0});H1.from=(e,t,n,o,M,c)=>{const b=Object.create(HD);return h0.toFlatObject(e,b,function(a){return a!==Error.prototype},z=>z!=="isAxiosError"),H1.call(b,e.message,t,n,o,M),b.cause=e,b.name=e.name,c&&Object.assign(b,c),b};var OG=null;function $6(e){return h0.isPlainObject(e)||h0.isArray(e)}function jD(e){return h0.endsWith(e,"[]")?e.slice(0,-2):e}function Zy(e,t,n){return e?e.concat(t).map(function(M,c){return M=jD(M),!n&&c?"["+M+"]":M}).join(n?".":""):t}function uG(e){return h0.isArray(e)&&!e.some($6)}const lG=h0.toFlatObject(h0,{},null,function(t){return/^is[A-Z]/.test(t)});function Zf(e,t,n){if(!h0.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=h0.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(g,L){return!h0.isUndefined(L[g])});const o=n.metaTokens,M=n.visitor||u,c=n.dots,b=n.indexes,a=(n.Blob||typeof Blob<"u"&&Blob)&&h0.isSpecCompliantForm(t);if(!h0.isFunction(M))throw new TypeError("visitor must be a function");function s(W){if(W===null)return"";if(h0.isDate(W))return W.toISOString();if(!a&&h0.isBlob(W))throw new H1("Blob is not supported. Use a Buffer instead.");return h0.isArrayBuffer(W)||h0.isTypedArray(W)?a&&typeof Blob=="function"?new Blob([W]):Buffer.from(W):W}function u(W,g,L){let R=W;if(W&&!L&&typeof W=="object"){if(h0.endsWith(g,"{}"))g=o?g:g.slice(0,-2),W=JSON.stringify(W);else if(h0.isArray(W)&&uG(W)||(h0.isFileList(W)||h0.endsWith(g,"[]"))&&(R=h0.toArray(W)))return g=jD(g),R.forEach(function(k,B){!(h0.isUndefined(k)||k===null)&&t.append(b===!0?Zy([g],B,c):b===null?g:g+"[]",s(k))}),!1}return $6(W)?!0:(t.append(Zy(L,g,c),s(W)),!1)}const l=[],A=Object.assign(lG,{defaultVisitor:u,convertValue:s,isVisitable:$6});function d(W,g){if(!h0.isUndefined(W)){if(l.indexOf(W)!==-1)throw Error("Circular reference detected in "+g.join("."));l.push(W),h0.forEach(W,function(R,E){(!(h0.isUndefined(R)||R===null)&&M.call(t,R,h0.isString(E)?E.trim():E,g,A))===!0&&d(R,g?g.concat(E):[E])}),l.pop()}}if(!h0.isObject(e))throw new TypeError("data must be an object");return d(e),t}function Jy(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(o){return t[o]})}function Xg(e,t){this._pairs=[],e&&Zf(e,this,t)}const VD=Xg.prototype;VD.append=function(t,n){this._pairs.push([t,n])};VD.toString=function(t){const n=t?function(o){return t.call(this,o,Jy)}:Jy;return this._pairs.map(function(M){return n(M[0])+"="+n(M[1])},"").join("&")};function AG(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function GD(e,t,n){if(!t)return e;const o=n&&n.encode||AG,M=n&&n.serialize;let c;if(M?c=M(t,n):c=h0.isURLSearchParams(t)?t.toString():new Xg(t,n).toString(o),c){const b=e.indexOf("#");b!==-1&&(e=e.slice(0,b)),e+=(e.indexOf("?")===-1?"?":"&")+c}return e}class fG{constructor(){this.handlers=[]}use(t,n,o){return this.handlers.push({fulfilled:t,rejected:n,synchronous:o?o.synchronous:!1,runWhen:o?o.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){h0.forEach(this.handlers,function(o){o!==null&&t(o)})}}var Qy=fG,KD={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},dG=typeof URLSearchParams<"u"?URLSearchParams:Xg,qG=typeof FormData<"u"?FormData:null,hG=typeof Blob<"u"?Blob:null,WG={isBrowser:!0,classes:{URLSearchParams:dG,FormData:qG,Blob:hG},protocols:["http","https","file","blob","url","data"]};const ZD=typeof window<"u"&&typeof document<"u",mG=(e=>ZD&&["ReactNative","NativeScript","NS"].indexOf(e)<0)(typeof navigator<"u"&&navigator.product),gG=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function";var RG=Object.freeze({__proto__:null,hasBrowserEnv:ZD,hasStandardBrowserWebWorkerEnv:gG,hasStandardBrowserEnv:mG}),gr={...RG,...WG};function yG(e,t){return Zf(e,new gr.classes.URLSearchParams,Object.assign({visitor:function(n,o,M,c){return gr.isNode&&h0.isBuffer(n)?(this.append(o,n.toString("base64")),!1):c.defaultVisitor.apply(this,arguments)}},t))}function LG(e){return h0.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function vG(e){const t={},n=Object.keys(e);let o;const M=n.length;let c;for(o=0;o<M;o++)c=n[o],t[c]=e[c];return t}function JD(e){function t(n,o,M,c){let b=n[c++];if(b==="__proto__")return!0;const z=Number.isFinite(+b),a=c>=n.length;return b=!b&&h0.isArray(M)?M.length:b,a?(h0.hasOwnProp(M,b)?M[b]=[M[b],o]:M[b]=o,!z):((!M[b]||!h0.isObject(M[b]))&&(M[b]=[]),t(n,o,M[b],c)&&h0.isArray(M[b])&&(M[b]=vG(M[b])),!z)}if(h0.isFormData(e)&&h0.isFunction(e.entries)){const n={};return h0.forEachEntry(e,(o,M)=>{t(LG(o),M,n,0)}),n}return null}function NG(e,t,n){if(h0.isString(e))try{return(t||JSON.parse)(e),h0.trim(e)}catch(o){if(o.name!=="SyntaxError")throw o}return(0,JSON.stringify)(e)}const Cg={transitional:KD,adapter:["xhr","http"],transformRequest:[function(t,n){const o=n.getContentType()||"",M=o.indexOf("application/json")>-1,c=h0.isObject(t);if(c&&h0.isHTMLForm(t)&&(t=new FormData(t)),h0.isFormData(t))return M?JSON.stringify(JD(t)):t;if(h0.isArrayBuffer(t)||h0.isBuffer(t)||h0.isStream(t)||h0.isFile(t)||h0.isBlob(t))return t;if(h0.isArrayBufferView(t))return t.buffer;if(h0.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let z;if(c){if(o.indexOf("application/x-www-form-urlencoded")>-1)return yG(t,this.formSerializer).toString();if((z=h0.isFileList(t))||o.indexOf("multipart/form-data")>-1){const a=this.env&&this.env.FormData;return Zf(z?{"files[]":t}:t,a&&new a,this.formSerializer)}}return c||M?(n.setContentType("application/json",!1),NG(t)):t}],transformResponse:[function(t){const n=this.transitional||Cg.transitional,o=n&&n.forcedJSONParsing,M=this.responseType==="json";if(t&&h0.isString(t)&&(o&&!this.responseType||M)){const b=!(n&&n.silentJSONParsing)&&M;try{return JSON.parse(t)}catch(z){if(b)throw z.name==="SyntaxError"?H1.from(z,H1.ERR_BAD_RESPONSE,this,null,this.response):z}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:gr.classes.FormData,Blob:gr.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};h0.forEach(["delete","get","head","post","put","patch"],e=>{Cg.headers[e]={}});var xg=Cg;const wG=h0.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);var DG=e=>{const t={};let n,o,M;return e&&e.split(` +`).forEach(function(b){M=b.indexOf(":"),n=b.substring(0,M).trim().toLowerCase(),o=b.substring(M+1).trim(),!(!n||t[n]&&wG[n])&&(n==="set-cookie"?t[n]?t[n].push(o):t[n]=[o]:t[n]=t[n]?t[n]+", "+o:o)}),t};const eL=Symbol("internals");function Ys(e){return e&&String(e).trim().toLowerCase()}function iA(e){return e===!1||e==null?e:h0.isArray(e)?e.map(iA):String(e)}function BG(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let o;for(;o=n.exec(e);)t[o[1]]=o[2];return t}const TG=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function OW(e,t,n,o,M){if(h0.isFunction(o))return o.call(this,t,n);if(M&&(t=n),!!h0.isString(t)){if(h0.isString(o))return t.indexOf(o)!==-1;if(h0.isRegExp(o))return o.test(t)}}function _G(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,o)=>n.toUpperCase()+o)}function EG(e,t){const n=h0.toCamelCase(" "+t);["get","set","has"].forEach(o=>{Object.defineProperty(e,o+n,{value:function(M,c,b){return this[o].call(this,t,M,c,b)},configurable:!0})})}class Jf{constructor(t){t&&this.set(t)}set(t,n,o){const M=this;function c(z,a,s){const u=Ys(a);if(!u)throw new Error("header name must be a non-empty string");const l=h0.findKey(M,u);(!l||M[l]===void 0||s===!0||s===void 0&&M[l]!==!1)&&(M[l||a]=iA(z))}const b=(z,a)=>h0.forEach(z,(s,u)=>c(s,u,a));return h0.isPlainObject(t)||t instanceof this.constructor?b(t,n):h0.isString(t)&&(t=t.trim())&&!TG(t)?b(DG(t),n):t!=null&&c(n,t,o),this}get(t,n){if(t=Ys(t),t){const o=h0.findKey(this,t);if(o){const M=this[o];if(!n)return M;if(n===!0)return BG(M);if(h0.isFunction(n))return n.call(this,M,o);if(h0.isRegExp(n))return n.exec(M);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=Ys(t),t){const o=h0.findKey(this,t);return!!(o&&this[o]!==void 0&&(!n||OW(this,this[o],o,n)))}return!1}delete(t,n){const o=this;let M=!1;function c(b){if(b=Ys(b),b){const z=h0.findKey(o,b);z&&(!n||OW(o,o[z],z,n))&&(delete o[z],M=!0)}}return h0.isArray(t)?t.forEach(c):c(t),M}clear(t){const n=Object.keys(this);let o=n.length,M=!1;for(;o--;){const c=n[o];(!t||OW(this,this[c],c,t,!0))&&(delete this[c],M=!0)}return M}normalize(t){const n=this,o={};return h0.forEach(this,(M,c)=>{const b=h0.findKey(o,c);if(b){n[b]=iA(M),delete n[c];return}const z=t?_G(c):String(c).trim();z!==c&&delete n[c],n[z]=iA(M),o[z]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return h0.forEach(this,(o,M)=>{o!=null&&o!==!1&&(n[M]=t&&h0.isArray(o)?o.join(", "):o)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const o=new this(t);return n.forEach(M=>o.set(M)),o}static accessor(t){const o=(this[eL]=this[eL]={accessors:{}}).accessors,M=this.prototype;function c(b){const z=Ys(b);o[z]||(EG(M,b),o[z]=!0)}return h0.isArray(t)?t.forEach(c):c(t),this}}Jf.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);h0.reduceDescriptors(Jf.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(o){this[n]=o}}});h0.freezeMethods(Jf);var dM=Jf;function uW(e,t){const n=this||xg,o=t||n,M=dM.from(o.headers);let c=o.data;return h0.forEach(e,function(z){c=z.call(n,c,M.normalize(),t?t.status:void 0)}),M.normalize(),c}function QD(e){return!!(e&&e.__CANCEL__)}function nu(e,t,n){H1.call(this,e??"canceled",H1.ERR_CANCELED,t,n),this.name="CanceledError"}h0.inherits(nu,H1,{__CANCEL__:!0});function SG(e,t,n){const o=n.config.validateStatus;!n.status||!o||o(n.status)?e(n):t(new H1("Request failed with status code "+n.status,[H1.ERR_BAD_REQUEST,H1.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}var kG=gr.hasStandardBrowserEnv?{write(e,t,n,o,M,c){const b=[e+"="+encodeURIComponent(t)];h0.isNumber(n)&&b.push("expires="+new Date(n).toGMTString()),h0.isString(o)&&b.push("path="+o),h0.isString(M)&&b.push("domain="+M),c===!0&&b.push("secure"),document.cookie=b.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function XG(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function CG(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function eB(e,t){return e&&!XG(t)?CG(e,t):t}var xG=gr.hasStandardBrowserEnv?function(){const t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");let o;function M(c){let b=c;return t&&(n.setAttribute("href",b),b=n.href),n.setAttribute("href",b),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return o=M(window.location.href),function(b){const z=h0.isString(b)?M(b):b;return z.protocol===o.protocol&&z.host===o.host}}():function(){return function(){return!0}}();function FG(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function IG(e,t){e=e||10;const n=new Array(e),o=new Array(e);let M=0,c=0,b;return t=t!==void 0?t:1e3,function(a){const s=Date.now(),u=o[c];b||(b=s),n[M]=a,o[M]=s;let l=c,A=0;for(;l!==M;)A+=n[l++],l=l%e;if(M=(M+1)%e,M===c&&(c=(c+1)%e),s-b<t)return;const d=u&&s-u;return d?Math.round(A*1e3/d):void 0}}function tL(e,t){let n=0;const o=IG(50,250);return M=>{const c=M.loaded,b=M.lengthComputable?M.total:void 0,z=c-n,a=o(z),s=c<=b;n=c;const u={loaded:c,total:b,progress:b?c/b:void 0,bytes:z,rate:a||void 0,estimated:a&&b&&s?(b-c)/a:void 0,event:M};u[t?"download":"upload"]=!0,e(u)}}const PG=typeof XMLHttpRequest<"u";var UG=PG&&function(e){return new Promise(function(n,o){let M=e.data;const c=dM.from(e.headers).normalize();let{responseType:b,withXSRFToken:z}=e,a;function s(){e.cancelToken&&e.cancelToken.unsubscribe(a),e.signal&&e.signal.removeEventListener("abort",a)}let u;if(h0.isFormData(M)){if(gr.hasStandardBrowserEnv||gr.hasStandardBrowserWebWorkerEnv)c.setContentType(!1);else if((u=c.getContentType())!==!1){const[g,...L]=u?u.split(";").map(R=>R.trim()).filter(Boolean):[];c.setContentType([g||"multipart/form-data",...L].join("; "))}}let l=new XMLHttpRequest;if(e.auth){const g=e.auth.username||"",L=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";c.set("Authorization","Basic "+btoa(g+":"+L))}const A=eB(e.baseURL,e.url);l.open(e.method.toUpperCase(),GD(A,e.params,e.paramsSerializer),!0),l.timeout=e.timeout;function d(){if(!l)return;const g=dM.from("getAllResponseHeaders"in l&&l.getAllResponseHeaders()),R={data:!b||b==="text"||b==="json"?l.responseText:l.response,status:l.status,statusText:l.statusText,headers:g,config:e,request:l};SG(function(k){n(k),s()},function(k){o(k),s()},R),l=null}if("onloadend"in l?l.onloadend=d:l.onreadystatechange=function(){!l||l.readyState!==4||l.status===0&&!(l.responseURL&&l.responseURL.indexOf("file:")===0)||setTimeout(d)},l.onabort=function(){l&&(o(new H1("Request aborted",H1.ECONNABORTED,e,l)),l=null)},l.onerror=function(){o(new H1("Network Error",H1.ERR_NETWORK,e,l)),l=null},l.ontimeout=function(){let L=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const R=e.transitional||KD;e.timeoutErrorMessage&&(L=e.timeoutErrorMessage),o(new H1(L,R.clarifyTimeoutError?H1.ETIMEDOUT:H1.ECONNABORTED,e,l)),l=null},gr.hasStandardBrowserEnv&&(z&&h0.isFunction(z)&&(z=z(e)),z||z!==!1&&xG(A))){const g=e.xsrfHeaderName&&e.xsrfCookieName&&kG.read(e.xsrfCookieName);g&&c.set(e.xsrfHeaderName,g)}M===void 0&&c.setContentType(null),"setRequestHeader"in l&&h0.forEach(c.toJSON(),function(L,R){l.setRequestHeader(R,L)}),h0.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),b&&b!=="json"&&(l.responseType=e.responseType),typeof e.onDownloadProgress=="function"&&l.addEventListener("progress",tL(e.onDownloadProgress,!0)),typeof e.onUploadProgress=="function"&&l.upload&&l.upload.addEventListener("progress",tL(e.onUploadProgress)),(e.cancelToken||e.signal)&&(a=g=>{l&&(o(!g||g.type?new nu(null,e,l):g),l.abort(),l=null)},e.cancelToken&&e.cancelToken.subscribe(a),e.signal&&(e.signal.aborted?a():e.signal.addEventListener("abort",a)));const W=FG(A);if(W&&gr.protocols.indexOf(W)===-1){o(new H1("Unsupported protocol "+W+":",H1.ERR_BAD_REQUEST,e));return}l.send(M||null)})};const H6={http:OG,xhr:UG};h0.forEach(H6,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const nL=e=>`- ${e}`,$G=e=>h0.isFunction(e)||e===null||e===!1;var tB={getAdapter:e=>{e=h0.isArray(e)?e:[e];const{length:t}=e;let n,o;const M={};for(let c=0;c<t;c++){n=e[c];let b;if(o=n,!$G(n)&&(o=H6[(b=String(n)).toLowerCase()],o===void 0))throw new H1(`Unknown adapter '${b}'`);if(o)break;M[b||"#"+c]=o}if(!o){const c=Object.entries(M).map(([z,a])=>`adapter ${z} `+(a===!1?"is not supported by the environment":"is not available in the build"));let b=t?c.length>1?`since : +`+c.map(nL).join(` +`):" "+nL(c[0]):"as no adapter specified";throw new H1("There is no suitable adapter to dispatch the request "+b,"ERR_NOT_SUPPORT")}return o},adapters:H6};function lW(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new nu(null,e)}function oL(e){return lW(e),e.headers=dM.from(e.headers),e.data=uW.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),tB.getAdapter(e.adapter||xg.adapter)(e).then(function(o){return lW(e),o.data=uW.call(e,e.transformResponse,o),o.headers=dM.from(o.headers),o},function(o){return QD(o)||(lW(e),o&&o.response&&(o.response.data=uW.call(e,e.transformResponse,o.response),o.response.headers=dM.from(o.response.headers))),Promise.reject(o)})}const rL=e=>e instanceof dM?e.toJSON():e;function vz(e,t){t=t||{};const n={};function o(s,u,l){return h0.isPlainObject(s)&&h0.isPlainObject(u)?h0.merge.call({caseless:l},s,u):h0.isPlainObject(u)?h0.merge({},u):h0.isArray(u)?u.slice():u}function M(s,u,l){if(h0.isUndefined(u)){if(!h0.isUndefined(s))return o(void 0,s,l)}else return o(s,u,l)}function c(s,u){if(!h0.isUndefined(u))return o(void 0,u)}function b(s,u){if(h0.isUndefined(u)){if(!h0.isUndefined(s))return o(void 0,s)}else return o(void 0,u)}function z(s,u,l){if(l in t)return o(s,u);if(l in e)return o(void 0,s)}const a={url:c,method:c,data:c,baseURL:b,transformRequest:b,transformResponse:b,paramsSerializer:b,timeout:b,timeoutMessage:b,withCredentials:b,withXSRFToken:b,adapter:b,responseType:b,xsrfCookieName:b,xsrfHeaderName:b,onUploadProgress:b,onDownloadProgress:b,decompress:b,maxContentLength:b,maxBodyLength:b,beforeRedirect:b,transport:b,httpAgent:b,httpsAgent:b,cancelToken:b,socketPath:b,responseEncoding:b,validateStatus:z,headers:(s,u)=>M(rL(s),rL(u),!0)};return h0.forEach(Object.keys(Object.assign({},e,t)),function(u){const l=a[u]||M,A=l(e[u],t[u],u);h0.isUndefined(A)&&l!==z||(n[u]=A)}),n}const nB="1.6.7",Fg={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Fg[e]=function(o){return typeof o===e||"a"+(t<1?"n ":" ")+e}});const ML={};Fg.transitional=function(t,n,o){function M(c,b){return"[Axios v"+nB+"] Transitional option '"+c+"'"+b+(o?". "+o:"")}return(c,b,z)=>{if(t===!1)throw new H1(M(b," has been removed"+(n?" in "+n:"")),H1.ERR_DEPRECATED);return n&&!ML[b]&&(ML[b]=!0,console.warn(M(b," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(c,b,z):!0}};function HG(e,t,n){if(typeof e!="object")throw new H1("options must be an object",H1.ERR_BAD_OPTION_VALUE);const o=Object.keys(e);let M=o.length;for(;M-- >0;){const c=o[M],b=t[c];if(b){const z=e[c],a=z===void 0||b(z,c,e);if(a!==!0)throw new H1("option "+c+" must be "+a,H1.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new H1("Unknown option "+c,H1.ERR_BAD_OPTION)}}var Y6={assertOptions:HG,validators:Fg};const Oi=Y6.validators;class jA{constructor(t){this.defaults=t,this.interceptors={request:new Qy,response:new Qy}}async request(t,n){try{return await this._request(t,n)}catch(o){if(o instanceof Error){let M;Error.captureStackTrace?Error.captureStackTrace(M={}):M=new Error;const c=M.stack?M.stack.replace(/^.+\n/,""):"";o.stack?c&&!String(o.stack).endsWith(c.replace(/^.+\n.+\n/,""))&&(o.stack+=` +`+c):o.stack=c}throw o}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=vz(this.defaults,n);const{transitional:o,paramsSerializer:M,headers:c}=n;o!==void 0&&Y6.assertOptions(o,{silentJSONParsing:Oi.transitional(Oi.boolean),forcedJSONParsing:Oi.transitional(Oi.boolean),clarifyTimeoutError:Oi.transitional(Oi.boolean)},!1),M!=null&&(h0.isFunction(M)?n.paramsSerializer={serialize:M}:Y6.assertOptions(M,{encode:Oi.function,serialize:Oi.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let b=c&&h0.merge(c.common,c[n.method]);c&&h0.forEach(["delete","get","head","post","put","patch","common"],W=>{delete c[W]}),n.headers=dM.concat(b,c);const z=[];let a=!0;this.interceptors.request.forEach(function(g){typeof g.runWhen=="function"&&g.runWhen(n)===!1||(a=a&&g.synchronous,z.unshift(g.fulfilled,g.rejected))});const s=[];this.interceptors.response.forEach(function(g){s.push(g.fulfilled,g.rejected)});let u,l=0,A;if(!a){const W=[oL.bind(this),void 0];for(W.unshift.apply(W,z),W.push.apply(W,s),A=W.length,u=Promise.resolve(n);l<A;)u=u.then(W[l++],W[l++]);return u}A=z.length;let d=n;for(l=0;l<A;){const W=z[l++],g=z[l++];try{d=W(d)}catch(L){g.call(this,L);break}}try{u=oL.call(this,d)}catch(W){return Promise.reject(W)}for(l=0,A=s.length;l<A;)u=u.then(s[l++],s[l++]);return u}getUri(t){t=vz(this.defaults,t);const n=eB(t.baseURL,t.url);return GD(n,t.params,t.paramsSerializer)}}h0.forEach(["delete","get","head","options"],function(t){jA.prototype[t]=function(n,o){return this.request(vz(o||{},{method:t,url:n,data:(o||{}).data}))}});h0.forEach(["post","put","patch"],function(t){function n(o){return function(c,b,z){return this.request(vz(z||{},{method:t,headers:o?{"Content-Type":"multipart/form-data"}:{},url:c,data:b}))}}jA.prototype[t]=n(),jA.prototype[t+"Form"]=n(!0)});var cA=jA;class Ig{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let n;this.promise=new Promise(function(c){n=c});const o=this;this.promise.then(M=>{if(!o._listeners)return;let c=o._listeners.length;for(;c-- >0;)o._listeners[c](M);o._listeners=null}),this.promise.then=M=>{let c;const b=new Promise(z=>{o.subscribe(z),c=z}).then(M);return b.cancel=function(){o.unsubscribe(c)},b},t(function(c,b,z){o.reason||(o.reason=new nu(c,b,z),n(o.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}static source(){let t;return{token:new Ig(function(M){t=M}),cancel:t}}}var YG=Ig;function jG(e){return function(n){return e.apply(null,n)}}function VG(e){return h0.isObject(e)&&e.isAxiosError===!0}const j6={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(j6).forEach(([e,t])=>{j6[t]=e});var GG=j6;function oB(e){const t=new cA(e),n=XD(cA.prototype.request,t);return h0.extend(n,cA.prototype,t,{allOwnKeys:!0}),h0.extend(n,t,null,{allOwnKeys:!0}),n.create=function(M){return oB(vz(e,M))},n}const Lt=oB(xg);Lt.Axios=cA;Lt.CanceledError=nu;Lt.CancelToken=YG;Lt.isCancel=QD;Lt.VERSION=nB;Lt.toFormData=Zf;Lt.AxiosError=H1;Lt.Cancel=Lt.CanceledError;Lt.all=function(t){return Promise.all(t)};Lt.spread=jG;Lt.isAxiosError=VG;Lt.mergeConfig=vz;Lt.AxiosHeaders=dM;Lt.formToJSON=e=>JD(h0.isHTMLForm(e)?new FormData(e):e);Lt.getAdapter=tB.getAdapter;Lt.HttpStatusCode=GG;Lt.default=Lt;var KG=Lt,rB={},Qf={},ed={};Object.defineProperty(ed,"__esModule",{value:!0});ed.default=JG;let xl;const ZG=new Uint8Array(16);function JG(){if(!xl&&(xl=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!xl))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return xl(ZG)}var Zi={},sb={},td={};Object.defineProperty(td,"__esModule",{value:!0});td.default=void 0;var QG=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;td.default=QG;Object.defineProperty(sb,"__esModule",{value:!0});sb.default=void 0;var eK=tK(td);function tK(e){return e&&e.__esModule?e:{default:e}}function nK(e){return typeof e=="string"&&eK.default.test(e)}var oK=nK;sb.default=oK;Object.defineProperty(Zi,"__esModule",{value:!0});Zi.default=void 0;Zi.unsafeStringify=MB;var rK=MK(sb);function MK(e){return e&&e.__esModule?e:{default:e}}const en=[];for(let e=0;e<256;++e)en.push((e+256).toString(16).slice(1));function MB(e,t=0){return en[e[t+0]]+en[e[t+1]]+en[e[t+2]]+en[e[t+3]]+"-"+en[e[t+4]]+en[e[t+5]]+"-"+en[e[t+6]]+en[e[t+7]]+"-"+en[e[t+8]]+en[e[t+9]]+"-"+en[e[t+10]]+en[e[t+11]]+en[e[t+12]]+en[e[t+13]]+en[e[t+14]]+en[e[t+15]]}function iK(e,t=0){const n=MB(e,t);if(!(0,rK.default)(n))throw TypeError("Stringified UUID is invalid");return n}var cK=iK;Zi.default=cK;Object.defineProperty(Qf,"__esModule",{value:!0});Qf.default=void 0;var bK=zK(ed),pK=Zi;function zK(e){return e&&e.__esModule?e:{default:e}}let iL,AW,fW=0,dW=0;function aK(e,t,n){let o=t&&n||0;const M=t||new Array(16);e=e||{};let c=e.node||iL,b=e.clockseq!==void 0?e.clockseq:AW;if(c==null||b==null){const A=e.random||(e.rng||bK.default)();c==null&&(c=iL=[A[0]|1,A[1],A[2],A[3],A[4],A[5]]),b==null&&(b=AW=(A[6]<<8|A[7])&16383)}let z=e.msecs!==void 0?e.msecs:Date.now(),a=e.nsecs!==void 0?e.nsecs:dW+1;const s=z-fW+(a-dW)/1e4;if(s<0&&e.clockseq===void 0&&(b=b+1&16383),(s<0||z>fW)&&e.nsecs===void 0&&(a=0),a>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");fW=z,dW=a,AW=b,z+=122192928e5;const u=((z&268435455)*1e4+a)%4294967296;M[o++]=u>>>24&255,M[o++]=u>>>16&255,M[o++]=u>>>8&255,M[o++]=u&255;const l=z/4294967296*1e4&268435455;M[o++]=l>>>8&255,M[o++]=l&255,M[o++]=l>>>24&15|16,M[o++]=l>>>16&255,M[o++]=b>>>8|128,M[o++]=b&255;for(let A=0;A<6;++A)M[o+A]=c[A];return t||(0,pK.unsafeStringify)(M)}var sK=aK;Qf.default=sK;var nd={},$i={},ou={};Object.defineProperty(ou,"__esModule",{value:!0});ou.default=void 0;var OK=uK(sb);function uK(e){return e&&e.__esModule?e:{default:e}}function lK(e){if(!(0,OK.default)(e))throw TypeError("Invalid UUID");let t;const n=new Uint8Array(16);return n[0]=(t=parseInt(e.slice(0,8),16))>>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=t&255,n[4]=(t=parseInt(e.slice(9,13),16))>>>8,n[5]=t&255,n[6]=(t=parseInt(e.slice(14,18),16))>>>8,n[7]=t&255,n[8]=(t=parseInt(e.slice(19,23),16))>>>8,n[9]=t&255,n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=t&255,n}var AK=lK;ou.default=AK;Object.defineProperty($i,"__esModule",{value:!0});$i.URL=$i.DNS=void 0;$i.default=WK;var fK=Zi,dK=qK(ou);function qK(e){return e&&e.__esModule?e:{default:e}}function hK(e){e=unescape(encodeURIComponent(e));const t=[];for(let n=0;n<e.length;++n)t.push(e.charCodeAt(n));return t}const iB="6ba7b810-9dad-11d1-80b4-00c04fd430c8";$i.DNS=iB;const cB="6ba7b811-9dad-11d1-80b4-00c04fd430c8";$i.URL=cB;function WK(e,t,n){function o(M,c,b,z){var a;if(typeof M=="string"&&(M=hK(M)),typeof c=="string"&&(c=(0,dK.default)(c)),((a=c)===null||a===void 0?void 0:a.length)!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let s=new Uint8Array(16+M.length);if(s.set(c),s.set(M,c.length),s=n(s),s[6]=s[6]&15|t,s[8]=s[8]&63|128,b){z=z||0;for(let u=0;u<16;++u)b[z+u]=s[u];return b}return(0,fK.unsafeStringify)(s)}try{o.name=e}catch{}return o.DNS=iB,o.URL=cB,o}var od={};Object.defineProperty(od,"__esModule",{value:!0});od.default=void 0;function mK(e){if(typeof e=="string"){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let n=0;n<t.length;++n)e[n]=t.charCodeAt(n)}return gK(RK(yK(e),e.length*8))}function gK(e){const t=[],n=e.length*32,o="0123456789abcdef";for(let M=0;M<n;M+=8){const c=e[M>>5]>>>M%32&255,b=parseInt(o.charAt(c>>>4&15)+o.charAt(c&15),16);t.push(b)}return t}function bB(e){return(e+64>>>9<<4)+14+1}function RK(e,t){e[t>>5]|=128<<t%32,e[bB(t)-1]=t;let n=1732584193,o=-271733879,M=-1732584194,c=271733878;for(let b=0;b<e.length;b+=16){const z=n,a=o,s=M,u=c;n=zn(n,o,M,c,e[b],7,-680876936),c=zn(c,n,o,M,e[b+1],12,-389564586),M=zn(M,c,n,o,e[b+2],17,606105819),o=zn(o,M,c,n,e[b+3],22,-1044525330),n=zn(n,o,M,c,e[b+4],7,-176418897),c=zn(c,n,o,M,e[b+5],12,1200080426),M=zn(M,c,n,o,e[b+6],17,-1473231341),o=zn(o,M,c,n,e[b+7],22,-45705983),n=zn(n,o,M,c,e[b+8],7,1770035416),c=zn(c,n,o,M,e[b+9],12,-1958414417),M=zn(M,c,n,o,e[b+10],17,-42063),o=zn(o,M,c,n,e[b+11],22,-1990404162),n=zn(n,o,M,c,e[b+12],7,1804603682),c=zn(c,n,o,M,e[b+13],12,-40341101),M=zn(M,c,n,o,e[b+14],17,-1502002290),o=zn(o,M,c,n,e[b+15],22,1236535329),n=an(n,o,M,c,e[b+1],5,-165796510),c=an(c,n,o,M,e[b+6],9,-1069501632),M=an(M,c,n,o,e[b+11],14,643717713),o=an(o,M,c,n,e[b],20,-373897302),n=an(n,o,M,c,e[b+5],5,-701558691),c=an(c,n,o,M,e[b+10],9,38016083),M=an(M,c,n,o,e[b+15],14,-660478335),o=an(o,M,c,n,e[b+4],20,-405537848),n=an(n,o,M,c,e[b+9],5,568446438),c=an(c,n,o,M,e[b+14],9,-1019803690),M=an(M,c,n,o,e[b+3],14,-187363961),o=an(o,M,c,n,e[b+8],20,1163531501),n=an(n,o,M,c,e[b+13],5,-1444681467),c=an(c,n,o,M,e[b+2],9,-51403784),M=an(M,c,n,o,e[b+7],14,1735328473),o=an(o,M,c,n,e[b+12],20,-1926607734),n=sn(n,o,M,c,e[b+5],4,-378558),c=sn(c,n,o,M,e[b+8],11,-2022574463),M=sn(M,c,n,o,e[b+11],16,1839030562),o=sn(o,M,c,n,e[b+14],23,-35309556),n=sn(n,o,M,c,e[b+1],4,-1530992060),c=sn(c,n,o,M,e[b+4],11,1272893353),M=sn(M,c,n,o,e[b+7],16,-155497632),o=sn(o,M,c,n,e[b+10],23,-1094730640),n=sn(n,o,M,c,e[b+13],4,681279174),c=sn(c,n,o,M,e[b],11,-358537222),M=sn(M,c,n,o,e[b+3],16,-722521979),o=sn(o,M,c,n,e[b+6],23,76029189),n=sn(n,o,M,c,e[b+9],4,-640364487),c=sn(c,n,o,M,e[b+12],11,-421815835),M=sn(M,c,n,o,e[b+15],16,530742520),o=sn(o,M,c,n,e[b+2],23,-995338651),n=On(n,o,M,c,e[b],6,-198630844),c=On(c,n,o,M,e[b+7],10,1126891415),M=On(M,c,n,o,e[b+14],15,-1416354905),o=On(o,M,c,n,e[b+5],21,-57434055),n=On(n,o,M,c,e[b+12],6,1700485571),c=On(c,n,o,M,e[b+3],10,-1894986606),M=On(M,c,n,o,e[b+10],15,-1051523),o=On(o,M,c,n,e[b+1],21,-2054922799),n=On(n,o,M,c,e[b+8],6,1873313359),c=On(c,n,o,M,e[b+15],10,-30611744),M=On(M,c,n,o,e[b+6],15,-1560198380),o=On(o,M,c,n,e[b+13],21,1309151649),n=On(n,o,M,c,e[b+4],6,-145523070),c=On(c,n,o,M,e[b+11],10,-1120210379),M=On(M,c,n,o,e[b+2],15,718787259),o=On(o,M,c,n,e[b+9],21,-343485551),n=yi(n,z),o=yi(o,a),M=yi(M,s),c=yi(c,u)}return[n,o,M,c]}function yK(e){if(e.length===0)return[];const t=e.length*8,n=new Uint32Array(bB(t));for(let o=0;o<t;o+=8)n[o>>5]|=(e[o/8]&255)<<o%32;return n}function yi(e,t){const n=(e&65535)+(t&65535);return(e>>16)+(t>>16)+(n>>16)<<16|n&65535}function LK(e,t){return e<<t|e>>>32-t}function rd(e,t,n,o,M,c){return yi(LK(yi(yi(t,e),yi(o,c)),M),n)}function zn(e,t,n,o,M,c,b){return rd(t&n|~t&o,e,t,M,c,b)}function an(e,t,n,o,M,c,b){return rd(t&o|n&~o,e,t,M,c,b)}function sn(e,t,n,o,M,c,b){return rd(t^n^o,e,t,M,c,b)}function On(e,t,n,o,M,c,b){return rd(n^(t|~o),e,t,M,c,b)}var vK=mK;od.default=vK;Object.defineProperty(nd,"__esModule",{value:!0});nd.default=void 0;var NK=pB($i),wK=pB(od);function pB(e){return e&&e.__esModule?e:{default:e}}const DK=(0,NK.default)("v3",48,wK.default);var BK=DK;nd.default=BK;var Md={},id={};Object.defineProperty(id,"__esModule",{value:!0});id.default=void 0;const TK=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);var _K={randomUUID:TK};id.default=_K;Object.defineProperty(Md,"__esModule",{value:!0});Md.default=void 0;var cL=zB(id),EK=zB(ed),SK=Zi;function zB(e){return e&&e.__esModule?e:{default:e}}function kK(e,t,n){if(cL.default.randomUUID&&!t&&!e)return cL.default.randomUUID();e=e||{};const o=e.random||(e.rng||EK.default)();if(o[6]=o[6]&15|64,o[8]=o[8]&63|128,t){n=n||0;for(let M=0;M<16;++M)t[n+M]=o[M];return t}return(0,SK.unsafeStringify)(o)}var XK=kK;Md.default=XK;var cd={},bd={};Object.defineProperty(bd,"__esModule",{value:!0});bd.default=void 0;function CK(e,t,n,o){switch(e){case 0:return t&n^~t&o;case 1:return t^n^o;case 2:return t&n^t&o^n&o;case 3:return t^n^o}}function qW(e,t){return e<<t|e>>>32-t}function xK(e){const t=[1518500249,1859775393,2400959708,3395469782],n=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof e=="string"){const b=unescape(encodeURIComponent(e));e=[];for(let z=0;z<b.length;++z)e.push(b.charCodeAt(z))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);const o=e.length/4+2,M=Math.ceil(o/16),c=new Array(M);for(let b=0;b<M;++b){const z=new Uint32Array(16);for(let a=0;a<16;++a)z[a]=e[b*64+a*4]<<24|e[b*64+a*4+1]<<16|e[b*64+a*4+2]<<8|e[b*64+a*4+3];c[b]=z}c[M-1][14]=(e.length-1)*8/Math.pow(2,32),c[M-1][14]=Math.floor(c[M-1][14]),c[M-1][15]=(e.length-1)*8&4294967295;for(let b=0;b<M;++b){const z=new Uint32Array(80);for(let d=0;d<16;++d)z[d]=c[b][d];for(let d=16;d<80;++d)z[d]=qW(z[d-3]^z[d-8]^z[d-14]^z[d-16],1);let a=n[0],s=n[1],u=n[2],l=n[3],A=n[4];for(let d=0;d<80;++d){const W=Math.floor(d/20),g=qW(a,5)+CK(W,s,u,l)+A+t[W]+z[d]>>>0;A=l,l=u,u=qW(s,30)>>>0,s=a,a=g}n[0]=n[0]+a>>>0,n[1]=n[1]+s>>>0,n[2]=n[2]+u>>>0,n[3]=n[3]+l>>>0,n[4]=n[4]+A>>>0}return[n[0]>>24&255,n[0]>>16&255,n[0]>>8&255,n[0]&255,n[1]>>24&255,n[1]>>16&255,n[1]>>8&255,n[1]&255,n[2]>>24&255,n[2]>>16&255,n[2]>>8&255,n[2]&255,n[3]>>24&255,n[3]>>16&255,n[3]>>8&255,n[3]&255,n[4]>>24&255,n[4]>>16&255,n[4]>>8&255,n[4]&255]}var FK=xK;bd.default=FK;Object.defineProperty(cd,"__esModule",{value:!0});cd.default=void 0;var IK=aB($i),PK=aB(bd);function aB(e){return e&&e.__esModule?e:{default:e}}const UK=(0,IK.default)("v5",80,PK.default);var $K=UK;cd.default=$K;var pd={};Object.defineProperty(pd,"__esModule",{value:!0});pd.default=void 0;var HK="00000000-0000-0000-0000-000000000000";pd.default=HK;var zd={};Object.defineProperty(zd,"__esModule",{value:!0});zd.default=void 0;var YK=jK(sb);function jK(e){return e&&e.__esModule?e:{default:e}}function VK(e){if(!(0,YK.default)(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}var GK=VK;zd.default=GK;(function(e){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"NIL",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(e,"parse",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(e,"v1",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"v3",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"v4",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,"v5",{enumerable:!0,get:function(){return M.default}}),Object.defineProperty(e,"validate",{enumerable:!0,get:function(){return z.default}}),Object.defineProperty(e,"version",{enumerable:!0,get:function(){return b.default}});var t=u(Qf),n=u(nd),o=u(Md),M=u(cd),c=u(pd),b=u(zd),z=u(sb),a=u(Zi),s=u(ou);function u(l){return l&&l.__esModule?l:{default:l}}})(rB);var sB={exports:{}},OB={exports:{}};//! moment.js +//! version : 2.29.4 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com +var uB;function C0(){return uB.apply(null,arguments)}function KK(e){uB=e}function Yo(e){return e instanceof Array||Object.prototype.toString.call(e)==="[object Array]"}function eb(e){return e!=null&&Object.prototype.toString.call(e)==="[object Object]"}function oe(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Pg(e){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(e).length===0;var t;for(t in e)if(oe(e,t))return!1;return!0}function Jn(e){return e===void 0}function LM(e){return typeof e=="number"||Object.prototype.toString.call(e)==="[object Number]"}function ru(e){return e instanceof Date||Object.prototype.toString.call(e)==="[object Date]"}function lB(e,t){var n=[],o,M=e.length;for(o=0;o<M;++o)n.push(t(e[o],o));return n}function Li(e,t){for(var n in t)oe(t,n)&&(e[n]=t[n]);return oe(t,"toString")&&(e.toString=t.toString),oe(t,"valueOf")&&(e.valueOf=t.valueOf),e}function Er(e,t,n,o){return xB(e,t,n,o,!0).utc()}function ZK(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function v1(e){return e._pf==null&&(e._pf=ZK()),e._pf}var V6;Array.prototype.some?V6=Array.prototype.some:V6=function(e){var t=Object(this),n=t.length>>>0,o;for(o=0;o<n;o++)if(o in t&&e.call(this,t[o],o,t))return!0;return!1};function Ug(e){if(e._isValid==null){var t=v1(e),n=V6.call(t.parsedDateParts,function(M){return M!=null}),o=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(o=o&&t.charsLeftOver===0&&t.unusedTokens.length===0&&t.bigHour===void 0),Object.isFrozen==null||!Object.isFrozen(e))e._isValid=o;else return o}return e._isValid}function ad(e){var t=Er(NaN);return e!=null?Li(v1(t),e):v1(t).userInvalidated=!0,t}var bL=C0.momentProperties=[],hW=!1;function $g(e,t){var n,o,M,c=bL.length;if(Jn(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),Jn(t._i)||(e._i=t._i),Jn(t._f)||(e._f=t._f),Jn(t._l)||(e._l=t._l),Jn(t._strict)||(e._strict=t._strict),Jn(t._tzm)||(e._tzm=t._tzm),Jn(t._isUTC)||(e._isUTC=t._isUTC),Jn(t._offset)||(e._offset=t._offset),Jn(t._pf)||(e._pf=v1(t)),Jn(t._locale)||(e._locale=t._locale),c>0)for(n=0;n<c;n++)o=bL[n],M=t[o],Jn(M)||(e[o]=M);return e}function Mu(e){$g(this,e),this._d=new Date(e._d!=null?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),hW===!1&&(hW=!0,C0.updateOffset(this),hW=!1)}function jo(e){return e instanceof Mu||e!=null&&e._isAMomentObject!=null}function AB(e){C0.suppressDeprecationWarnings===!1&&typeof console<"u"&&console.warn&&console.warn("Deprecation warning: "+e)}function zo(e,t){var n=!0;return Li(function(){if(C0.deprecationHandler!=null&&C0.deprecationHandler(null,e),n){var o=[],M,c,b,z=arguments.length;for(c=0;c<z;c++){if(M="",typeof arguments[c]=="object"){M+=` +[`+c+"] ";for(b in arguments[0])oe(arguments[0],b)&&(M+=b+": "+arguments[0][b]+", ");M=M.slice(0,-2)}else M=arguments[c];o.push(M)}AB(e+` +Arguments: `+Array.prototype.slice.call(o).join("")+` +`+new Error().stack),n=!1}return t.apply(this,arguments)},t)}var pL={};function fB(e,t){C0.deprecationHandler!=null&&C0.deprecationHandler(e,t),pL[e]||(AB(t),pL[e]=!0)}C0.suppressDeprecationWarnings=!1;C0.deprecationHandler=null;function Sr(e){return typeof Function<"u"&&e instanceof Function||Object.prototype.toString.call(e)==="[object Function]"}function JK(e){var t,n;for(n in e)oe(e,n)&&(t=e[n],Sr(t)?this[n]=t:this["_"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function G6(e,t){var n=Li({},e),o;for(o in t)oe(t,o)&&(eb(e[o])&&eb(t[o])?(n[o]={},Li(n[o],e[o]),Li(n[o],t[o])):t[o]!=null?n[o]=t[o]:delete n[o]);for(o in e)oe(e,o)&&!oe(t,o)&&eb(e[o])&&(n[o]=Li({},n[o]));return n}function Hg(e){e!=null&&this.set(e)}var K6;Object.keys?K6=Object.keys:K6=function(e){var t,n=[];for(t in e)oe(e,t)&&n.push(t);return n};var QK={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function eZ(e,t,n){var o=this._calendar[e]||this._calendar.sameElse;return Sr(o)?o.call(t,n):o}function Dr(e,t,n){var o=""+Math.abs(e),M=t-o.length,c=e>=0;return(c?n?"+":"":"-")+Math.pow(10,Math.max(0,M)).toString().substr(1)+o}var Yg=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Fl=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,WW={},pz={};function t1(e,t,n,o){var M=o;typeof o=="string"&&(M=function(){return this[o]()}),e&&(pz[e]=M),t&&(pz[t[0]]=function(){return Dr(M.apply(this,arguments),t[1],t[2])}),n&&(pz[n]=function(){return this.localeData().ordinal(M.apply(this,arguments),e)})}function tZ(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function nZ(e){var t=e.match(Yg),n,o;for(n=0,o=t.length;n<o;n++)pz[t[n]]?t[n]=pz[t[n]]:t[n]=tZ(t[n]);return function(M){var c="",b;for(b=0;b<o;b++)c+=Sr(t[b])?t[b].call(M,e):t[b];return c}}function bA(e,t){return e.isValid()?(t=dB(t,e.localeData()),WW[t]=WW[t]||nZ(t),WW[t](e)):e.localeData().invalidDate()}function dB(e,t){var n=5;function o(M){return t.longDateFormat(M)||M}for(Fl.lastIndex=0;n>=0&&Fl.test(e);)e=e.replace(Fl,o),Fl.lastIndex=0,n-=1;return e}var oZ={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function rZ(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(Yg).map(function(o){return o==="MMMM"||o==="MM"||o==="DD"||o==="dddd"?o.slice(1):o}).join(""),this._longDateFormat[e])}var MZ="Invalid date";function iZ(){return this._invalidDate}var cZ="%d",bZ=/\d{1,2}/;function pZ(e){return this._ordinal.replace("%d",e)}var zZ={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function aZ(e,t,n,o){var M=this._relativeTime[n];return Sr(M)?M(e,t,n,o):M.replace(/%d/i,e)}function sZ(e,t){var n=this._relativeTime[e>0?"future":"past"];return Sr(n)?n(t):n.replace(/%s/i,t)}var rO={};function gn(e,t){var n=e.toLowerCase();rO[n]=rO[n+"s"]=rO[t]=e}function ao(e){return typeof e=="string"?rO[e]||rO[e.toLowerCase()]:void 0}function jg(e){var t={},n,o;for(o in e)oe(e,o)&&(n=ao(o),n&&(t[n]=e[o]));return t}var qB={};function Rn(e,t){qB[e]=t}function OZ(e){var t=[],n;for(n in e)oe(e,n)&&t.push({unit:n,priority:qB[n]});return t.sort(function(o,M){return o.priority-M.priority}),t}function sd(e){return e%4===0&&e%100!==0||e%400===0}function J2(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function S1(e){var t=+e,n=0;return t!==0&&isFinite(t)&&(n=J2(t)),n}function Vz(e,t){return function(n){return n!=null?(hB(this,e,n),C0.updateOffset(this,t),this):VA(this,e)}}function VA(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function hB(e,t,n){e.isValid()&&!isNaN(n)&&(t==="FullYear"&&sd(e.year())&&e.month()===1&&e.date()===29?(n=S1(n),e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),dd(n,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+t](n))}function uZ(e){return e=ao(e),Sr(this[e])?this[e]():this}function lZ(e,t){if(typeof e=="object"){e=jg(e);var n=OZ(e),o,M=n.length;for(o=0;o<M;o++)this[n[o].unit](e[n[o].unit])}else if(e=ao(e),Sr(this[e]))return this[e](t);return this}var WB=/\d/,B2=/\d\d/,mB=/\d{3}/,Vg=/\d{4}/,Od=/[+-]?\d{6}/,Pe=/\d\d?/,gB=/\d\d\d\d?/,RB=/\d\d\d\d\d\d?/,ud=/\d{1,3}/,Gg=/\d{1,4}/,ld=/[+-]?\d{1,6}/,Gz=/\d+/,Ad=/[+-]?\d+/,AZ=/Z|[+-]\d\d:?\d\d/gi,fd=/Z|[+-]\d\d(?::?\d\d)?/gi,fZ=/[+-]?\d+(\.\d{1,3})?/,iu=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,GA;GA={};function Y0(e,t,n){GA[e]=Sr(t)?t:function(o,M){return o&&n?n:t}}function dZ(e,t){return oe(GA,e)?GA[e](t._strict,t._locale):new RegExp(qZ(e))}function qZ(e){return d2(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,n,o,M,c){return n||o||M||c}))}function d2(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var Z6={};function Le(e,t){var n,o=t,M;for(typeof e=="string"&&(e=[e]),LM(t)&&(o=function(c,b){b[t]=S1(c)}),M=e.length,n=0;n<M;n++)Z6[e[n]]=o}function cu(e,t){Le(e,function(n,o,M,c){M._w=M._w||{},t(n,M._w,M,c)})}function hZ(e,t,n){t!=null&&oe(Z6,e)&&Z6[e](t,n._a,n,e)}var mn=0,zM=1,Wr=2,_t=3,Co=4,aM=5,Vc=6,WZ=7,mZ=8;function gZ(e,t){return(e%t+t)%t}var st;Array.prototype.indexOf?st=Array.prototype.indexOf:st=function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1};function dd(e,t){if(isNaN(e)||isNaN(t))return NaN;var n=gZ(t,12);return e+=(t-n)/12,n===1?sd(e)?29:28:31-n%7%2}t1("M",["MM",2],"Mo",function(){return this.month()+1});t1("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)});t1("MMMM",0,0,function(e){return this.localeData().months(this,e)});gn("month","M");Rn("month",8);Y0("M",Pe);Y0("MM",Pe,B2);Y0("MMM",function(e,t){return t.monthsShortRegex(e)});Y0("MMMM",function(e,t){return t.monthsRegex(e)});Le(["M","MM"],function(e,t){t[zM]=S1(e)-1});Le(["MMM","MMMM"],function(e,t,n,o){var M=n._locale.monthsParse(e,o,n._strict);M!=null?t[zM]=M:v1(n).invalidMonth=e});var RZ="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),yB="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),LB=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,yZ=iu,LZ=iu;function vZ(e,t){return e?Yo(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||LB).test(t)?"format":"standalone"][e.month()]:Yo(this._months)?this._months:this._months.standalone}function NZ(e,t){return e?Yo(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[LB.test(t)?"format":"standalone"][e.month()]:Yo(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function wZ(e,t,n){var o,M,c,b=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],o=0;o<12;++o)c=Er([2e3,o]),this._shortMonthsParse[o]=this.monthsShort(c,"").toLocaleLowerCase(),this._longMonthsParse[o]=this.months(c,"").toLocaleLowerCase();return n?t==="MMM"?(M=st.call(this._shortMonthsParse,b),M!==-1?M:null):(M=st.call(this._longMonthsParse,b),M!==-1?M:null):t==="MMM"?(M=st.call(this._shortMonthsParse,b),M!==-1?M:(M=st.call(this._longMonthsParse,b),M!==-1?M:null)):(M=st.call(this._longMonthsParse,b),M!==-1?M:(M=st.call(this._shortMonthsParse,b),M!==-1?M:null))}function DZ(e,t,n){var o,M,c;if(this._monthsParseExact)return wZ.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),o=0;o<12;o++){if(M=Er([2e3,o]),n&&!this._longMonthsParse[o]&&(this._longMonthsParse[o]=new RegExp("^"+this.months(M,"").replace(".","")+"$","i"),this._shortMonthsParse[o]=new RegExp("^"+this.monthsShort(M,"").replace(".","")+"$","i")),!n&&!this._monthsParse[o]&&(c="^"+this.months(M,"")+"|^"+this.monthsShort(M,""),this._monthsParse[o]=new RegExp(c.replace(".",""),"i")),n&&t==="MMMM"&&this._longMonthsParse[o].test(e))return o;if(n&&t==="MMM"&&this._shortMonthsParse[o].test(e))return o;if(!n&&this._monthsParse[o].test(e))return o}}function vB(e,t){var n;if(!e.isValid())return e;if(typeof t=="string"){if(/^\d+$/.test(t))t=S1(t);else if(t=e.localeData().monthsParse(t),!LM(t))return e}return n=Math.min(e.date(),dd(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e}function NB(e){return e!=null?(vB(this,e),C0.updateOffset(this,!0),this):VA(this,"Month")}function BZ(){return dd(this.year(),this.month())}function TZ(e){return this._monthsParseExact?(oe(this,"_monthsRegex")||wB.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(oe(this,"_monthsShortRegex")||(this._monthsShortRegex=yZ),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)}function _Z(e){return this._monthsParseExact?(oe(this,"_monthsRegex")||wB.call(this),e?this._monthsStrictRegex:this._monthsRegex):(oe(this,"_monthsRegex")||(this._monthsRegex=LZ),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)}function wB(){function e(b,z){return z.length-b.length}var t=[],n=[],o=[],M,c;for(M=0;M<12;M++)c=Er([2e3,M]),t.push(this.monthsShort(c,"")),n.push(this.months(c,"")),o.push(this.months(c,"")),o.push(this.monthsShort(c,""));for(t.sort(e),n.sort(e),o.sort(e),M=0;M<12;M++)t[M]=d2(t[M]),n[M]=d2(n[M]);for(M=0;M<24;M++)o[M]=d2(o[M]);this._monthsRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+n.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+t.join("|")+")","i")}t1("Y",0,0,function(){var e=this.year();return e<=9999?Dr(e,4):"+"+e});t1(0,["YY",2],0,function(){return this.year()%100});t1(0,["YYYY",4],0,"year");t1(0,["YYYYY",5],0,"year");t1(0,["YYYYYY",6,!0],0,"year");gn("year","y");Rn("year",1);Y0("Y",Ad);Y0("YY",Pe,B2);Y0("YYYY",Gg,Vg);Y0("YYYYY",ld,Od);Y0("YYYYYY",ld,Od);Le(["YYYYY","YYYYYY"],mn);Le("YYYY",function(e,t){t[mn]=e.length===2?C0.parseTwoDigitYear(e):S1(e)});Le("YY",function(e,t){t[mn]=C0.parseTwoDigitYear(e)});Le("Y",function(e,t){t[mn]=parseInt(e,10)});function MO(e){return sd(e)?366:365}C0.parseTwoDigitYear=function(e){return S1(e)+(S1(e)>68?1900:2e3)};var DB=Vz("FullYear",!0);function EZ(){return sd(this.year())}function SZ(e,t,n,o,M,c,b){var z;return e<100&&e>=0?(z=new Date(e+400,t,n,o,M,c,b),isFinite(z.getFullYear())&&z.setFullYear(e)):z=new Date(e,t,n,o,M,c,b),z}function wO(e){var t,n;return e<100&&e>=0?(n=Array.prototype.slice.call(arguments),n[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function KA(e,t,n){var o=7+t-n,M=(7+wO(e,0,o).getUTCDay()-t)%7;return-M+o-1}function BB(e,t,n,o,M){var c=(7+n-o)%7,b=KA(e,o,M),z=1+7*(t-1)+c+b,a,s;return z<=0?(a=e-1,s=MO(a)+z):z>MO(e)?(a=e+1,s=z-MO(e)):(a=e,s=z),{year:a,dayOfYear:s}}function DO(e,t,n){var o=KA(e.year(),t,n),M=Math.floor((e.dayOfYear()-o-1)/7)+1,c,b;return M<1?(b=e.year()-1,c=M+qM(b,t,n)):M>qM(e.year(),t,n)?(c=M-qM(e.year(),t,n),b=e.year()+1):(b=e.year(),c=M),{week:c,year:b}}function qM(e,t,n){var o=KA(e,t,n),M=KA(e+1,t,n);return(MO(e)-o+M)/7}t1("w",["ww",2],"wo","week");t1("W",["WW",2],"Wo","isoWeek");gn("week","w");gn("isoWeek","W");Rn("week",5);Rn("isoWeek",5);Y0("w",Pe);Y0("ww",Pe,B2);Y0("W",Pe);Y0("WW",Pe,B2);cu(["w","ww","W","WW"],function(e,t,n,o){t[o.substr(0,1)]=S1(e)});function kZ(e){return DO(e,this._week.dow,this._week.doy).week}var XZ={dow:0,doy:6};function CZ(){return this._week.dow}function xZ(){return this._week.doy}function FZ(e){var t=this.localeData().week(this);return e==null?t:this.add((e-t)*7,"d")}function IZ(e){var t=DO(this,1,4).week;return e==null?t:this.add((e-t)*7,"d")}t1("d",0,"do","day");t1("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)});t1("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)});t1("dddd",0,0,function(e){return this.localeData().weekdays(this,e)});t1("e",0,0,"weekday");t1("E",0,0,"isoWeekday");gn("day","d");gn("weekday","e");gn("isoWeekday","E");Rn("day",11);Rn("weekday",11);Rn("isoWeekday",11);Y0("d",Pe);Y0("e",Pe);Y0("E",Pe);Y0("dd",function(e,t){return t.weekdaysMinRegex(e)});Y0("ddd",function(e,t){return t.weekdaysShortRegex(e)});Y0("dddd",function(e,t){return t.weekdaysRegex(e)});cu(["dd","ddd","dddd"],function(e,t,n,o){var M=n._locale.weekdaysParse(e,o,n._strict);M!=null?t.d=M:v1(n).invalidWeekday=e});cu(["d","e","E"],function(e,t,n,o){t[o]=S1(e)});function PZ(e,t){return typeof e!="string"?e:isNaN(e)?(e=t.weekdaysParse(e),typeof e=="number"?e:null):parseInt(e,10)}function UZ(e,t){return typeof e=="string"?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Kg(e,t){return e.slice(t,7).concat(e.slice(0,t))}var $Z="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),TB="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),HZ="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),YZ=iu,jZ=iu,VZ=iu;function GZ(e,t){var n=Yo(this._weekdays)?this._weekdays:this._weekdays[e&&e!==!0&&this._weekdays.isFormat.test(t)?"format":"standalone"];return e===!0?Kg(n,this._week.dow):e?n[e.day()]:n}function KZ(e){return e===!0?Kg(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function ZZ(e){return e===!0?Kg(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function JZ(e,t,n){var o,M,c,b=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)c=Er([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(c,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(c,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(c,"").toLocaleLowerCase();return n?t==="dddd"?(M=st.call(this._weekdaysParse,b),M!==-1?M:null):t==="ddd"?(M=st.call(this._shortWeekdaysParse,b),M!==-1?M:null):(M=st.call(this._minWeekdaysParse,b),M!==-1?M:null):t==="dddd"?(M=st.call(this._weekdaysParse,b),M!==-1||(M=st.call(this._shortWeekdaysParse,b),M!==-1)?M:(M=st.call(this._minWeekdaysParse,b),M!==-1?M:null)):t==="ddd"?(M=st.call(this._shortWeekdaysParse,b),M!==-1||(M=st.call(this._weekdaysParse,b),M!==-1)?M:(M=st.call(this._minWeekdaysParse,b),M!==-1?M:null)):(M=st.call(this._minWeekdaysParse,b),M!==-1||(M=st.call(this._weekdaysParse,b),M!==-1)?M:(M=st.call(this._shortWeekdaysParse,b),M!==-1?M:null))}function QZ(e,t,n){var o,M,c;if(this._weekdaysParseExact)return JZ.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(M=Er([2e3,1]).day(o),n&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(M,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(M,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(M,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[o]||(c="^"+this.weekdays(M,"")+"|^"+this.weekdaysShort(M,"")+"|^"+this.weekdaysMin(M,""),this._weekdaysParse[o]=new RegExp(c.replace(".",""),"i")),n&&t==="dddd"&&this._fullWeekdaysParse[o].test(e))return o;if(n&&t==="ddd"&&this._shortWeekdaysParse[o].test(e))return o;if(n&&t==="dd"&&this._minWeekdaysParse[o].test(e))return o;if(!n&&this._weekdaysParse[o].test(e))return o}}function eJ(e){if(!this.isValid())return e!=null?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return e!=null?(e=PZ(e,this.localeData()),this.add(e-t,"d")):t}function tJ(e){if(!this.isValid())return e!=null?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return e==null?t:this.add(e-t,"d")}function nJ(e){if(!this.isValid())return e!=null?this:NaN;if(e!=null){var t=UZ(e,this.localeData());return this.day(this.day()%7?t:t-7)}else return this.day()||7}function oJ(e){return this._weekdaysParseExact?(oe(this,"_weekdaysRegex")||Zg.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(oe(this,"_weekdaysRegex")||(this._weekdaysRegex=YZ),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function rJ(e){return this._weekdaysParseExact?(oe(this,"_weekdaysRegex")||Zg.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(oe(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=jZ),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function MJ(e){return this._weekdaysParseExact?(oe(this,"_weekdaysRegex")||Zg.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(oe(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=VZ),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Zg(){function e(u,l){return l.length-u.length}var t=[],n=[],o=[],M=[],c,b,z,a,s;for(c=0;c<7;c++)b=Er([2e3,1]).day(c),z=d2(this.weekdaysMin(b,"")),a=d2(this.weekdaysShort(b,"")),s=d2(this.weekdays(b,"")),t.push(z),n.push(a),o.push(s),M.push(z),M.push(a),M.push(s);t.sort(e),n.sort(e),o.sort(e),M.sort(e),this._weekdaysRegex=new RegExp("^("+M.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+n.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+t.join("|")+")","i")}function Jg(){return this.hours()%12||12}function iJ(){return this.hours()||24}t1("H",["HH",2],0,"hour");t1("h",["hh",2],0,Jg);t1("k",["kk",2],0,iJ);t1("hmm",0,0,function(){return""+Jg.apply(this)+Dr(this.minutes(),2)});t1("hmmss",0,0,function(){return""+Jg.apply(this)+Dr(this.minutes(),2)+Dr(this.seconds(),2)});t1("Hmm",0,0,function(){return""+this.hours()+Dr(this.minutes(),2)});t1("Hmmss",0,0,function(){return""+this.hours()+Dr(this.minutes(),2)+Dr(this.seconds(),2)});function _B(e,t){t1(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}_B("a",!0);_B("A",!1);gn("hour","h");Rn("hour",13);function EB(e,t){return t._meridiemParse}Y0("a",EB);Y0("A",EB);Y0("H",Pe);Y0("h",Pe);Y0("k",Pe);Y0("HH",Pe,B2);Y0("hh",Pe,B2);Y0("kk",Pe,B2);Y0("hmm",gB);Y0("hmmss",RB);Y0("Hmm",gB);Y0("Hmmss",RB);Le(["H","HH"],_t);Le(["k","kk"],function(e,t,n){var o=S1(e);t[_t]=o===24?0:o});Le(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e});Le(["h","hh"],function(e,t,n){t[_t]=S1(e),v1(n).bigHour=!0});Le("hmm",function(e,t,n){var o=e.length-2;t[_t]=S1(e.substr(0,o)),t[Co]=S1(e.substr(o)),v1(n).bigHour=!0});Le("hmmss",function(e,t,n){var o=e.length-4,M=e.length-2;t[_t]=S1(e.substr(0,o)),t[Co]=S1(e.substr(o,2)),t[aM]=S1(e.substr(M)),v1(n).bigHour=!0});Le("Hmm",function(e,t,n){var o=e.length-2;t[_t]=S1(e.substr(0,o)),t[Co]=S1(e.substr(o))});Le("Hmmss",function(e,t,n){var o=e.length-4,M=e.length-2;t[_t]=S1(e.substr(0,o)),t[Co]=S1(e.substr(o,2)),t[aM]=S1(e.substr(M))});function cJ(e){return(e+"").toLowerCase().charAt(0)==="p"}var bJ=/[ap]\.?m?\.?/i,pJ=Vz("Hours",!0);function zJ(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}var SB={calendar:QK,longDateFormat:oZ,invalidDate:MZ,ordinal:cZ,dayOfMonthOrdinalParse:bZ,relativeTime:zZ,months:RZ,monthsShort:yB,week:XZ,weekdays:$Z,weekdaysMin:HZ,weekdaysShort:TB,meridiemParse:bJ},Ve={},js={},BO;function aJ(e,t){var n,o=Math.min(e.length,t.length);for(n=0;n<o;n+=1)if(e[n]!==t[n])return n;return o}function zL(e){return e&&e.toLowerCase().replace("_","-")}function sJ(e){for(var t=0,n,o,M,c;t<e.length;){for(c=zL(e[t]).split("-"),n=c.length,o=zL(e[t+1]),o=o?o.split("-"):null;n>0;){if(M=qd(c.slice(0,n).join("-")),M)return M;if(o&&o.length>=n&&aJ(c,o)>=n-1)break;n--}t++}return BO}function OJ(e){return e.match("^[^/\\\\]*$")!=null}function qd(e){var t=null,n;if(Ve[e]===void 0&&typeof module<"u"&&module&&module.exports&&OJ(e))try{t=BO._abbr,n=require,n("./locale/"+e),Si(t)}catch{Ve[e]=null}return Ve[e]}function Si(e,t){var n;return e&&(Jn(t)?n=BM(e):n=Qg(e,t),n?BO=n:typeof console<"u"&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),BO._abbr}function Qg(e,t){if(t!==null){var n,o=SB;if(t.abbr=e,Ve[e]!=null)fB("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),o=Ve[e]._config;else if(t.parentLocale!=null)if(Ve[t.parentLocale]!=null)o=Ve[t.parentLocale]._config;else if(n=qd(t.parentLocale),n!=null)o=n._config;else return js[t.parentLocale]||(js[t.parentLocale]=[]),js[t.parentLocale].push({name:e,config:t}),null;return Ve[e]=new Hg(G6(o,t)),js[e]&&js[e].forEach(function(M){Qg(M.name,M.config)}),Si(e),Ve[e]}else return delete Ve[e],null}function uJ(e,t){if(t!=null){var n,o,M=SB;Ve[e]!=null&&Ve[e].parentLocale!=null?Ve[e].set(G6(Ve[e]._config,t)):(o=qd(e),o!=null&&(M=o._config),t=G6(M,t),o==null&&(t.abbr=e),n=new Hg(t),n.parentLocale=Ve[e],Ve[e]=n),Si(e)}else Ve[e]!=null&&(Ve[e].parentLocale!=null?(Ve[e]=Ve[e].parentLocale,e===Si()&&Si(e)):Ve[e]!=null&&delete Ve[e]);return Ve[e]}function BM(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return BO;if(!Yo(e)){if(t=qd(e),t)return t;e=[e]}return sJ(e)}function lJ(){return K6(Ve)}function eR(e){var t,n=e._a;return n&&v1(e).overflow===-2&&(t=n[zM]<0||n[zM]>11?zM:n[Wr]<1||n[Wr]>dd(n[mn],n[zM])?Wr:n[_t]<0||n[_t]>24||n[_t]===24&&(n[Co]!==0||n[aM]!==0||n[Vc]!==0)?_t:n[Co]<0||n[Co]>59?Co:n[aM]<0||n[aM]>59?aM:n[Vc]<0||n[Vc]>999?Vc:-1,v1(e)._overflowDayOfYear&&(t<mn||t>Wr)&&(t=Wr),v1(e)._overflowWeeks&&t===-1&&(t=WZ),v1(e)._overflowWeekday&&t===-1&&(t=mZ),v1(e).overflow=t),e}var AJ=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,fJ=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,dJ=/Z|[+-]\d\d(?::?\d\d)?/,Il=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],mW=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],qJ=/^\/?Date\((-?\d+)/i,hJ=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,WJ={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function kB(e){var t,n,o=e._i,M=AJ.exec(o)||fJ.exec(o),c,b,z,a,s=Il.length,u=mW.length;if(M){for(v1(e).iso=!0,t=0,n=s;t<n;t++)if(Il[t][1].exec(M[1])){b=Il[t][0],c=Il[t][2]!==!1;break}if(b==null){e._isValid=!1;return}if(M[3]){for(t=0,n=u;t<n;t++)if(mW[t][1].exec(M[3])){z=(M[2]||" ")+mW[t][0];break}if(z==null){e._isValid=!1;return}}if(!c&&z!=null){e._isValid=!1;return}if(M[4])if(dJ.exec(M[4]))a="Z";else{e._isValid=!1;return}e._f=b+(z||"")+(a||""),nR(e)}else e._isValid=!1}function mJ(e,t,n,o,M,c){var b=[gJ(e),yB.indexOf(t),parseInt(n,10),parseInt(o,10),parseInt(M,10)];return c&&b.push(parseInt(c,10)),b}function gJ(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}function RJ(e){return e.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function yJ(e,t,n){if(e){var o=TB.indexOf(e),M=new Date(t[0],t[1],t[2]).getDay();if(o!==M)return v1(n).weekdayMismatch=!0,n._isValid=!1,!1}return!0}function LJ(e,t,n){if(e)return WJ[e];if(t)return 0;var o=parseInt(n,10),M=o%100,c=(o-M)/100;return c*60+M}function XB(e){var t=hJ.exec(RJ(e._i)),n;if(t){if(n=mJ(t[4],t[3],t[2],t[5],t[6],t[7]),!yJ(t[1],n,e))return;e._a=n,e._tzm=LJ(t[8],t[9],t[10]),e._d=wO.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),v1(e).rfc2822=!0}else e._isValid=!1}function vJ(e){var t=qJ.exec(e._i);if(t!==null){e._d=new Date(+t[1]);return}if(kB(e),e._isValid===!1)delete e._isValid;else return;if(XB(e),e._isValid===!1)delete e._isValid;else return;e._strict?e._isValid=!1:C0.createFromInputFallback(e)}C0.createFromInputFallback=zo("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))});function Yp(e,t,n){return e??t??n}function NJ(e){var t=new Date(C0.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function tR(e){var t,n,o=[],M,c,b;if(!e._d){for(M=NJ(e),e._w&&e._a[Wr]==null&&e._a[zM]==null&&wJ(e),e._dayOfYear!=null&&(b=Yp(e._a[mn],M[mn]),(e._dayOfYear>MO(b)||e._dayOfYear===0)&&(v1(e)._overflowDayOfYear=!0),n=wO(b,0,e._dayOfYear),e._a[zM]=n.getUTCMonth(),e._a[Wr]=n.getUTCDate()),t=0;t<3&&e._a[t]==null;++t)e._a[t]=o[t]=M[t];for(;t<7;t++)e._a[t]=o[t]=e._a[t]==null?t===2?1:0:e._a[t];e._a[_t]===24&&e._a[Co]===0&&e._a[aM]===0&&e._a[Vc]===0&&(e._nextDay=!0,e._a[_t]=0),e._d=(e._useUTC?wO:SZ).apply(null,o),c=e._useUTC?e._d.getUTCDay():e._d.getDay(),e._tzm!=null&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[_t]=24),e._w&&typeof e._w.d<"u"&&e._w.d!==c&&(v1(e).weekdayMismatch=!0)}}function wJ(e){var t,n,o,M,c,b,z,a,s;t=e._w,t.GG!=null||t.W!=null||t.E!=null?(c=1,b=4,n=Yp(t.GG,e._a[mn],DO(Ie(),1,4).year),o=Yp(t.W,1),M=Yp(t.E,1),(M<1||M>7)&&(a=!0)):(c=e._locale._week.dow,b=e._locale._week.doy,s=DO(Ie(),c,b),n=Yp(t.gg,e._a[mn],s.year),o=Yp(t.w,s.week),t.d!=null?(M=t.d,(M<0||M>6)&&(a=!0)):t.e!=null?(M=t.e+c,(t.e<0||t.e>6)&&(a=!0)):M=c),o<1||o>qM(n,c,b)?v1(e)._overflowWeeks=!0:a!=null?v1(e)._overflowWeekday=!0:(z=BB(n,o,M,c,b),e._a[mn]=z.year,e._dayOfYear=z.dayOfYear)}C0.ISO_8601=function(){};C0.RFC_2822=function(){};function nR(e){if(e._f===C0.ISO_8601){kB(e);return}if(e._f===C0.RFC_2822){XB(e);return}e._a=[],v1(e).empty=!0;var t=""+e._i,n,o,M,c,b,z=t.length,a=0,s,u;for(M=dB(e._f,e._locale).match(Yg)||[],u=M.length,n=0;n<u;n++)c=M[n],o=(t.match(dZ(c,e))||[])[0],o&&(b=t.substr(0,t.indexOf(o)),b.length>0&&v1(e).unusedInput.push(b),t=t.slice(t.indexOf(o)+o.length),a+=o.length),pz[c]?(o?v1(e).empty=!1:v1(e).unusedTokens.push(c),hZ(c,o,e)):e._strict&&!o&&v1(e).unusedTokens.push(c);v1(e).charsLeftOver=z-a,t.length>0&&v1(e).unusedInput.push(t),e._a[_t]<=12&&v1(e).bigHour===!0&&e._a[_t]>0&&(v1(e).bigHour=void 0),v1(e).parsedDateParts=e._a.slice(0),v1(e).meridiem=e._meridiem,e._a[_t]=DJ(e._locale,e._a[_t],e._meridiem),s=v1(e).era,s!==null&&(e._a[mn]=e._locale.erasConvertYear(s,e._a[mn])),tR(e),eR(e)}function DJ(e,t,n){var o;return n==null?t:e.meridiemHour!=null?e.meridiemHour(t,n):(e.isPM!=null&&(o=e.isPM(n),o&&t<12&&(t+=12),!o&&t===12&&(t=0)),t)}function BJ(e){var t,n,o,M,c,b,z=!1,a=e._f.length;if(a===0){v1(e).invalidFormat=!0,e._d=new Date(NaN);return}for(M=0;M<a;M++)c=0,b=!1,t=$g({},e),e._useUTC!=null&&(t._useUTC=e._useUTC),t._f=e._f[M],nR(t),Ug(t)&&(b=!0),c+=v1(t).charsLeftOver,c+=v1(t).unusedTokens.length*10,v1(t).score=c,z?c<o&&(o=c,n=t):(o==null||c<o||b)&&(o=c,n=t,b&&(z=!0));Li(e,n||t)}function TJ(e){if(!e._d){var t=jg(e._i),n=t.day===void 0?t.date:t.day;e._a=lB([t.year,t.month,n,t.hour,t.minute,t.second,t.millisecond],function(o){return o&&parseInt(o,10)}),tR(e)}}function _J(e){var t=new Mu(eR(CB(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function CB(e){var t=e._i,n=e._f;return e._locale=e._locale||BM(e._l),t===null||n===void 0&&t===""?ad({nullInput:!0}):(typeof t=="string"&&(e._i=t=e._locale.preparse(t)),jo(t)?new Mu(eR(t)):(ru(t)?e._d=t:Yo(n)?BJ(e):n?nR(e):EJ(e),Ug(e)||(e._d=null),e))}function EJ(e){var t=e._i;Jn(t)?e._d=new Date(C0.now()):ru(t)?e._d=new Date(t.valueOf()):typeof t=="string"?vJ(e):Yo(t)?(e._a=lB(t.slice(0),function(n){return parseInt(n,10)}),tR(e)):eb(t)?TJ(e):LM(t)?e._d=new Date(t):C0.createFromInputFallback(e)}function xB(e,t,n,o,M){var c={};return(t===!0||t===!1)&&(o=t,t=void 0),(n===!0||n===!1)&&(o=n,n=void 0),(eb(e)&&Pg(e)||Yo(e)&&e.length===0)&&(e=void 0),c._isAMomentObject=!0,c._useUTC=c._isUTC=M,c._l=n,c._i=e,c._f=t,c._strict=o,_J(c)}function Ie(e,t,n,o){return xB(e,t,n,o,!1)}var SJ=zo("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Ie.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:ad()}),kJ=zo("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Ie.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:ad()});function FB(e,t){var n,o;if(t.length===1&&Yo(t[0])&&(t=t[0]),!t.length)return Ie();for(n=t[0],o=1;o<t.length;++o)(!t[o].isValid()||t[o][e](n))&&(n=t[o]);return n}function XJ(){var e=[].slice.call(arguments,0);return FB("isBefore",e)}function CJ(){var e=[].slice.call(arguments,0);return FB("isAfter",e)}var xJ=function(){return Date.now?Date.now():+new Date},Vs=["year","quarter","month","week","day","hour","minute","second","millisecond"];function FJ(e){var t,n=!1,o,M=Vs.length;for(t in e)if(oe(e,t)&&!(st.call(Vs,t)!==-1&&(e[t]==null||!isNaN(e[t]))))return!1;for(o=0;o<M;++o)if(e[Vs[o]]){if(n)return!1;parseFloat(e[Vs[o]])!==S1(e[Vs[o]])&&(n=!0)}return!0}function IJ(){return this._isValid}function PJ(){return Zo(NaN)}function hd(e){var t=jg(e),n=t.year||0,o=t.quarter||0,M=t.month||0,c=t.week||t.isoWeek||0,b=t.day||0,z=t.hour||0,a=t.minute||0,s=t.second||0,u=t.millisecond||0;this._isValid=FJ(t),this._milliseconds=+u+s*1e3+a*6e4+z*1e3*60*60,this._days=+b+c*7,this._months=+M+o*3+n*12,this._data={},this._locale=BM(),this._bubble()}function pA(e){return e instanceof hd}function J6(e){return e<0?Math.round(-1*e)*-1:Math.round(e)}function UJ(e,t,n){var o=Math.min(e.length,t.length),M=Math.abs(e.length-t.length),c=0,b;for(b=0;b<o;b++)S1(e[b])!==S1(t[b])&&c++;return c+M}function IB(e,t){t1(e,0,0,function(){var n=this.utcOffset(),o="+";return n<0&&(n=-n,o="-"),o+Dr(~~(n/60),2)+t+Dr(~~n%60,2)})}IB("Z",":");IB("ZZ","");Y0("Z",fd);Y0("ZZ",fd);Le(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=oR(fd,e)});var $J=/([\+\-]|\d\d)/gi;function oR(e,t){var n=(t||"").match(e),o,M,c;return n===null?null:(o=n[n.length-1]||[],M=(o+"").match($J)||["-",0,0],c=+(M[1]*60)+S1(M[2]),c===0?0:M[0]==="+"?c:-c)}function rR(e,t){var n,o;return t._isUTC?(n=t.clone(),o=(jo(e)||ru(e)?e.valueOf():Ie(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+o),C0.updateOffset(n,!1),n):Ie(e).local()}function Q6(e){return-Math.round(e._d.getTimezoneOffset())}C0.updateOffset=function(){};function HJ(e,t,n){var o=this._offset||0,M;if(!this.isValid())return e!=null?this:NaN;if(e!=null){if(typeof e=="string"){if(e=oR(fd,e),e===null)return this}else Math.abs(e)<16&&!n&&(e=e*60);return!this._isUTC&&t&&(M=Q6(this)),this._offset=e,this._isUTC=!0,M!=null&&this.add(M,"m"),o!==e&&(!t||this._changeInProgress?$B(this,Zo(e-o,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,C0.updateOffset(this,!0),this._changeInProgress=null)),this}else return this._isUTC?o:Q6(this)}function YJ(e,t){return e!=null?(typeof e!="string"&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function jJ(e){return this.utcOffset(0,e)}function VJ(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Q6(this),"m")),this}function GJ(){if(this._tzm!=null)this.utcOffset(this._tzm,!1,!0);else if(typeof this._i=="string"){var e=oR(AZ,this._i);e!=null?this.utcOffset(e):this.utcOffset(0,!0)}return this}function KJ(e){return this.isValid()?(e=e?Ie(e).utcOffset():0,(this.utcOffset()-e)%60===0):!1}function ZJ(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function JJ(){if(!Jn(this._isDSTShifted))return this._isDSTShifted;var e={},t;return $g(e,this),e=CB(e),e._a?(t=e._isUTC?Er(e._a):Ie(e._a),this._isDSTShifted=this.isValid()&&UJ(e._a,t.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function QJ(){return this.isValid()?!this._isUTC:!1}function eQ(){return this.isValid()?this._isUTC:!1}function PB(){return this.isValid()?this._isUTC&&this._offset===0:!1}var tQ=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,nQ=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Zo(e,t){var n=e,o=null,M,c,b;return pA(e)?n={ms:e._milliseconds,d:e._days,M:e._months}:LM(e)||!isNaN(+e)?(n={},t?n[t]=+e:n.milliseconds=+e):(o=tQ.exec(e))?(M=o[1]==="-"?-1:1,n={y:0,d:S1(o[Wr])*M,h:S1(o[_t])*M,m:S1(o[Co])*M,s:S1(o[aM])*M,ms:S1(J6(o[Vc]*1e3))*M}):(o=nQ.exec(e))?(M=o[1]==="-"?-1:1,n={y:Fc(o[2],M),M:Fc(o[3],M),w:Fc(o[4],M),d:Fc(o[5],M),h:Fc(o[6],M),m:Fc(o[7],M),s:Fc(o[8],M)}):n==null?n={}:typeof n=="object"&&("from"in n||"to"in n)&&(b=oQ(Ie(n.from),Ie(n.to)),n={},n.ms=b.milliseconds,n.M=b.months),c=new hd(n),pA(e)&&oe(e,"_locale")&&(c._locale=e._locale),pA(e)&&oe(e,"_isValid")&&(c._isValid=e._isValid),c}Zo.fn=hd.prototype;Zo.invalid=PJ;function Fc(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function aL(e,t){var n={};return n.months=t.month()-e.month()+(t.year()-e.year())*12,e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function oQ(e,t){var n;return e.isValid()&&t.isValid()?(t=rR(t,e),e.isBefore(t)?n=aL(e,t):(n=aL(t,e),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function UB(e,t){return function(n,o){var M,c;return o!==null&&!isNaN(+o)&&(fB(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),c=n,n=o,o=c),M=Zo(n,o),$B(this,M,e),this}}function $B(e,t,n,o){var M=t._milliseconds,c=J6(t._days),b=J6(t._months);e.isValid()&&(o=o??!0,b&&vB(e,VA(e,"Month")+b*n),c&&hB(e,"Date",VA(e,"Date")+c*n),M&&e._d.setTime(e._d.valueOf()+M*n),o&&C0.updateOffset(e,c||b))}var rQ=UB(1,"add"),MQ=UB(-1,"subtract");function HB(e){return typeof e=="string"||e instanceof String}function iQ(e){return jo(e)||ru(e)||HB(e)||LM(e)||bQ(e)||cQ(e)||e===null||e===void 0}function cQ(e){var t=eb(e)&&!Pg(e),n=!1,o=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],M,c,b=o.length;for(M=0;M<b;M+=1)c=o[M],n=n||oe(e,c);return t&&n}function bQ(e){var t=Yo(e),n=!1;return t&&(n=e.filter(function(o){return!LM(o)&&HB(e)}).length===0),t&&n}function pQ(e){var t=eb(e)&&!Pg(e),n=!1,o=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"],M,c;for(M=0;M<o.length;M+=1)c=o[M],n=n||oe(e,c);return t&&n}function zQ(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function aQ(e,t){arguments.length===1&&(arguments[0]?iQ(arguments[0])?(e=arguments[0],t=void 0):pQ(arguments[0])&&(t=arguments[0],e=void 0):(e=void 0,t=void 0));var n=e||Ie(),o=rR(n,this).startOf("day"),M=C0.calendarFormat(this,o)||"sameElse",c=t&&(Sr(t[M])?t[M].call(this,n):t[M]);return this.format(c||this.localeData().calendar(M,this,Ie(n)))}function sQ(){return new Mu(this)}function OQ(e,t){var n=jo(e)?e:Ie(e);return this.isValid()&&n.isValid()?(t=ao(t)||"millisecond",t==="millisecond"?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf()):!1}function uQ(e,t){var n=jo(e)?e:Ie(e);return this.isValid()&&n.isValid()?(t=ao(t)||"millisecond",t==="millisecond"?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf()):!1}function lQ(e,t,n,o){var M=jo(e)?e:Ie(e),c=jo(t)?t:Ie(t);return this.isValid()&&M.isValid()&&c.isValid()?(o=o||"()",(o[0]==="("?this.isAfter(M,n):!this.isBefore(M,n))&&(o[1]===")"?this.isBefore(c,n):!this.isAfter(c,n))):!1}function AQ(e,t){var n=jo(e)?e:Ie(e),o;return this.isValid()&&n.isValid()?(t=ao(t)||"millisecond",t==="millisecond"?this.valueOf()===n.valueOf():(o=n.valueOf(),this.clone().startOf(t).valueOf()<=o&&o<=this.clone().endOf(t).valueOf())):!1}function fQ(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function dQ(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function qQ(e,t,n){var o,M,c;if(!this.isValid())return NaN;if(o=rR(e,this),!o.isValid())return NaN;switch(M=(o.utcOffset()-this.utcOffset())*6e4,t=ao(t),t){case"year":c=zA(this,o)/12;break;case"month":c=zA(this,o);break;case"quarter":c=zA(this,o)/3;break;case"second":c=(this-o)/1e3;break;case"minute":c=(this-o)/6e4;break;case"hour":c=(this-o)/36e5;break;case"day":c=(this-o-M)/864e5;break;case"week":c=(this-o-M)/6048e5;break;default:c=this-o}return n?c:J2(c)}function zA(e,t){if(e.date()<t.date())return-zA(t,e);var n=(t.year()-e.year())*12+(t.month()-e.month()),o=e.clone().add(n,"months"),M,c;return t-o<0?(M=e.clone().add(n-1,"months"),c=(t-o)/(o-M)):(M=e.clone().add(n+1,"months"),c=(t-o)/(M-o)),-(n+c)||0}C0.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";C0.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";function hQ(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function WQ(e){if(!this.isValid())return null;var t=e!==!0,n=t?this.clone().utc():this;return n.year()<0||n.year()>9999?bA(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):Sr(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",bA(n,"Z")):bA(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function mQ(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="",n,o,M,c;return this.isLocal()||(e=this.utcOffset()===0?"moment.utc":"moment.parseZone",t="Z"),n="["+e+'("]',o=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",M="-MM-DD[T]HH:mm:ss.SSS",c=t+'[")]',this.format(n+o+M+c)}function gQ(e){e||(e=this.isUtc()?C0.defaultFormatUtc:C0.defaultFormat);var t=bA(this,e);return this.localeData().postformat(t)}function RQ(e,t){return this.isValid()&&(jo(e)&&e.isValid()||Ie(e).isValid())?Zo({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function yQ(e){return this.from(Ie(),e)}function LQ(e,t){return this.isValid()&&(jo(e)&&e.isValid()||Ie(e).isValid())?Zo({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function vQ(e){return this.to(Ie(),e)}function YB(e){var t;return e===void 0?this._locale._abbr:(t=BM(e),t!=null&&(this._locale=t),this)}var jB=zo("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return e===void 0?this.localeData():this.locale(e)});function VB(){return this._locale}var ZA=1e3,zz=60*ZA,JA=60*zz,GB=(365*400+97)*24*JA;function az(e,t){return(e%t+t)%t}function KB(e,t,n){return e<100&&e>=0?new Date(e+400,t,n)-GB:new Date(e,t,n).valueOf()}function ZB(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-GB:Date.UTC(e,t,n)}function NQ(e){var t,n;if(e=ao(e),e===void 0||e==="millisecond"||!this.isValid())return this;switch(n=this._isUTC?ZB:KB,e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=az(t+(this._isUTC?0:this.utcOffset()*zz),JA);break;case"minute":t=this._d.valueOf(),t-=az(t,zz);break;case"second":t=this._d.valueOf(),t-=az(t,ZA);break}return this._d.setTime(t),C0.updateOffset(this,!0),this}function wQ(e){var t,n;if(e=ao(e),e===void 0||e==="millisecond"||!this.isValid())return this;switch(n=this._isUTC?ZB:KB,e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=JA-az(t+(this._isUTC?0:this.utcOffset()*zz),JA)-1;break;case"minute":t=this._d.valueOf(),t+=zz-az(t,zz)-1;break;case"second":t=this._d.valueOf(),t+=ZA-az(t,ZA)-1;break}return this._d.setTime(t),C0.updateOffset(this,!0),this}function DQ(){return this._d.valueOf()-(this._offset||0)*6e4}function BQ(){return Math.floor(this.valueOf()/1e3)}function TQ(){return new Date(this.valueOf())}function _Q(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function EQ(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function SQ(){return this.isValid()?this.toISOString():null}function kQ(){return Ug(this)}function XQ(){return Li({},v1(this))}function CQ(){return v1(this).overflow}function xQ(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}t1("N",0,0,"eraAbbr");t1("NN",0,0,"eraAbbr");t1("NNN",0,0,"eraAbbr");t1("NNNN",0,0,"eraName");t1("NNNNN",0,0,"eraNarrow");t1("y",["y",1],"yo","eraYear");t1("y",["yy",2],0,"eraYear");t1("y",["yyy",3],0,"eraYear");t1("y",["yyyy",4],0,"eraYear");Y0("N",MR);Y0("NN",MR);Y0("NNN",MR);Y0("NNNN",KQ);Y0("NNNNN",ZQ);Le(["N","NN","NNN","NNNN","NNNNN"],function(e,t,n,o){var M=n._locale.erasParse(e,o,n._strict);M?v1(n).era=M:v1(n).invalidEra=e});Y0("y",Gz);Y0("yy",Gz);Y0("yyy",Gz);Y0("yyyy",Gz);Y0("yo",JQ);Le(["y","yy","yyy","yyyy"],mn);Le(["yo"],function(e,t,n,o){var M;n._locale._eraYearOrdinalRegex&&(M=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[mn]=n._locale.eraYearOrdinalParse(e,M):t[mn]=parseInt(e,10)});function FQ(e,t){var n,o,M,c=this._eras||BM("en")._eras;for(n=0,o=c.length;n<o;++n){switch(typeof c[n].since){case"string":M=C0(c[n].since).startOf("day"),c[n].since=M.valueOf();break}switch(typeof c[n].until){case"undefined":c[n].until=1/0;break;case"string":M=C0(c[n].until).startOf("day").valueOf(),c[n].until=M.valueOf();break}}return c}function IQ(e,t,n){var o,M,c=this.eras(),b,z,a;for(e=e.toUpperCase(),o=0,M=c.length;o<M;++o)if(b=c[o].name.toUpperCase(),z=c[o].abbr.toUpperCase(),a=c[o].narrow.toUpperCase(),n)switch(t){case"N":case"NN":case"NNN":if(z===e)return c[o];break;case"NNNN":if(b===e)return c[o];break;case"NNNNN":if(a===e)return c[o];break}else if([b,z,a].indexOf(e)>=0)return c[o]}function PQ(e,t){var n=e.since<=e.until?1:-1;return t===void 0?C0(e.since).year():C0(e.since).year()+(t-e.offset)*n}function UQ(){var e,t,n,o=this.localeData().eras();for(e=0,t=o.length;e<t;++e)if(n=this.clone().startOf("day").valueOf(),o[e].since<=n&&n<=o[e].until||o[e].until<=n&&n<=o[e].since)return o[e].name;return""}function $Q(){var e,t,n,o=this.localeData().eras();for(e=0,t=o.length;e<t;++e)if(n=this.clone().startOf("day").valueOf(),o[e].since<=n&&n<=o[e].until||o[e].until<=n&&n<=o[e].since)return o[e].narrow;return""}function HQ(){var e,t,n,o=this.localeData().eras();for(e=0,t=o.length;e<t;++e)if(n=this.clone().startOf("day").valueOf(),o[e].since<=n&&n<=o[e].until||o[e].until<=n&&n<=o[e].since)return o[e].abbr;return""}function YQ(){var e,t,n,o,M=this.localeData().eras();for(e=0,t=M.length;e<t;++e)if(n=M[e].since<=M[e].until?1:-1,o=this.clone().startOf("day").valueOf(),M[e].since<=o&&o<=M[e].until||M[e].until<=o&&o<=M[e].since)return(this.year()-C0(M[e].since).year())*n+M[e].offset;return this.year()}function jQ(e){return oe(this,"_erasNameRegex")||iR.call(this),e?this._erasNameRegex:this._erasRegex}function VQ(e){return oe(this,"_erasAbbrRegex")||iR.call(this),e?this._erasAbbrRegex:this._erasRegex}function GQ(e){return oe(this,"_erasNarrowRegex")||iR.call(this),e?this._erasNarrowRegex:this._erasRegex}function MR(e,t){return t.erasAbbrRegex(e)}function KQ(e,t){return t.erasNameRegex(e)}function ZQ(e,t){return t.erasNarrowRegex(e)}function JQ(e,t){return t._eraYearOrdinalRegex||Gz}function iR(){var e=[],t=[],n=[],o=[],M,c,b=this.eras();for(M=0,c=b.length;M<c;++M)t.push(d2(b[M].name)),e.push(d2(b[M].abbr)),n.push(d2(b[M].narrow)),o.push(d2(b[M].name)),o.push(d2(b[M].abbr)),o.push(d2(b[M].narrow));this._erasRegex=new RegExp("^("+o.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+t.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+e.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+n.join("|")+")","i")}t1(0,["gg",2],0,function(){return this.weekYear()%100});t1(0,["GG",2],0,function(){return this.isoWeekYear()%100});function Wd(e,t){t1(0,[e,e.length],0,t)}Wd("gggg","weekYear");Wd("ggggg","weekYear");Wd("GGGG","isoWeekYear");Wd("GGGGG","isoWeekYear");gn("weekYear","gg");gn("isoWeekYear","GG");Rn("weekYear",1);Rn("isoWeekYear",1);Y0("G",Ad);Y0("g",Ad);Y0("GG",Pe,B2);Y0("gg",Pe,B2);Y0("GGGG",Gg,Vg);Y0("gggg",Gg,Vg);Y0("GGGGG",ld,Od);Y0("ggggg",ld,Od);cu(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,o){t[o.substr(0,2)]=S1(e)});cu(["gg","GG"],function(e,t,n,o){t[o]=C0.parseTwoDigitYear(e)});function QQ(e){return JB.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function e00(e){return JB.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function t00(){return qM(this.year(),1,4)}function n00(){return qM(this.isoWeekYear(),1,4)}function o00(){var e=this.localeData()._week;return qM(this.year(),e.dow,e.doy)}function r00(){var e=this.localeData()._week;return qM(this.weekYear(),e.dow,e.doy)}function JB(e,t,n,o,M){var c;return e==null?DO(this,o,M).year:(c=qM(e,o,M),t>c&&(t=c),M00.call(this,e,t,n,o,M))}function M00(e,t,n,o,M){var c=BB(e,t,n,o,M),b=wO(c.year,0,c.dayOfYear);return this.year(b.getUTCFullYear()),this.month(b.getUTCMonth()),this.date(b.getUTCDate()),this}t1("Q",0,"Qo","quarter");gn("quarter","Q");Rn("quarter",7);Y0("Q",WB);Le("Q",function(e,t){t[zM]=(S1(e)-1)*3});function i00(e){return e==null?Math.ceil((this.month()+1)/3):this.month((e-1)*3+this.month()%3)}t1("D",["DD",2],"Do","date");gn("date","D");Rn("date",9);Y0("D",Pe);Y0("DD",Pe,B2);Y0("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient});Le(["D","DD"],Wr);Le("Do",function(e,t){t[Wr]=S1(e.match(Pe)[0])});var QB=Vz("Date",!0);t1("DDD",["DDDD",3],"DDDo","dayOfYear");gn("dayOfYear","DDD");Rn("dayOfYear",4);Y0("DDD",ud);Y0("DDDD",mB);Le(["DDD","DDDD"],function(e,t,n){n._dayOfYear=S1(e)});function c00(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return e==null?t:this.add(e-t,"d")}t1("m",["mm",2],0,"minute");gn("minute","m");Rn("minute",14);Y0("m",Pe);Y0("mm",Pe,B2);Le(["m","mm"],Co);var b00=Vz("Minutes",!1);t1("s",["ss",2],0,"second");gn("second","s");Rn("second",15);Y0("s",Pe);Y0("ss",Pe,B2);Le(["s","ss"],aM);var p00=Vz("Seconds",!1);t1("S",0,0,function(){return~~(this.millisecond()/100)});t1(0,["SS",2],0,function(){return~~(this.millisecond()/10)});t1(0,["SSS",3],0,"millisecond");t1(0,["SSSS",4],0,function(){return this.millisecond()*10});t1(0,["SSSSS",5],0,function(){return this.millisecond()*100});t1(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3});t1(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4});t1(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5});t1(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6});gn("millisecond","ms");Rn("millisecond",16);Y0("S",ud,WB);Y0("SS",ud,B2);Y0("SSS",ud,mB);var vi,eT;for(vi="SSSS";vi.length<=9;vi+="S")Y0(vi,Gz);function z00(e,t){t[Vc]=S1(("0."+e)*1e3)}for(vi="S";vi.length<=9;vi+="S")Le(vi,z00);eT=Vz("Milliseconds",!1);t1("z",0,0,"zoneAbbr");t1("zz",0,0,"zoneName");function a00(){return this._isUTC?"UTC":""}function s00(){return this._isUTC?"Coordinated Universal Time":""}var T0=Mu.prototype;T0.add=rQ;T0.calendar=aQ;T0.clone=sQ;T0.diff=qQ;T0.endOf=wQ;T0.format=gQ;T0.from=RQ;T0.fromNow=yQ;T0.to=LQ;T0.toNow=vQ;T0.get=uZ;T0.invalidAt=CQ;T0.isAfter=OQ;T0.isBefore=uQ;T0.isBetween=lQ;T0.isSame=AQ;T0.isSameOrAfter=fQ;T0.isSameOrBefore=dQ;T0.isValid=kQ;T0.lang=jB;T0.locale=YB;T0.localeData=VB;T0.max=kJ;T0.min=SJ;T0.parsingFlags=XQ;T0.set=lZ;T0.startOf=NQ;T0.subtract=MQ;T0.toArray=_Q;T0.toObject=EQ;T0.toDate=TQ;T0.toISOString=WQ;T0.inspect=mQ;typeof Symbol<"u"&&Symbol.for!=null&&(T0[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"});T0.toJSON=SQ;T0.toString=hQ;T0.unix=BQ;T0.valueOf=DQ;T0.creationData=xQ;T0.eraName=UQ;T0.eraNarrow=$Q;T0.eraAbbr=HQ;T0.eraYear=YQ;T0.year=DB;T0.isLeapYear=EZ;T0.weekYear=QQ;T0.isoWeekYear=e00;T0.quarter=T0.quarters=i00;T0.month=NB;T0.daysInMonth=BZ;T0.week=T0.weeks=FZ;T0.isoWeek=T0.isoWeeks=IZ;T0.weeksInYear=o00;T0.weeksInWeekYear=r00;T0.isoWeeksInYear=t00;T0.isoWeeksInISOWeekYear=n00;T0.date=QB;T0.day=T0.days=eJ;T0.weekday=tJ;T0.isoWeekday=nJ;T0.dayOfYear=c00;T0.hour=T0.hours=pJ;T0.minute=T0.minutes=b00;T0.second=T0.seconds=p00;T0.millisecond=T0.milliseconds=eT;T0.utcOffset=HJ;T0.utc=jJ;T0.local=VJ;T0.parseZone=GJ;T0.hasAlignedHourOffset=KJ;T0.isDST=ZJ;T0.isLocal=QJ;T0.isUtcOffset=eQ;T0.isUtc=PB;T0.isUTC=PB;T0.zoneAbbr=a00;T0.zoneName=s00;T0.dates=zo("dates accessor is deprecated. Use date instead.",QB);T0.months=zo("months accessor is deprecated. Use month instead",NB);T0.years=zo("years accessor is deprecated. Use year instead",DB);T0.zone=zo("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",YJ);T0.isDSTShifted=zo("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",JJ);function O00(e){return Ie(e*1e3)}function u00(){return Ie.apply(null,arguments).parseZone()}function tT(e){return e}var re=Hg.prototype;re.calendar=eZ;re.longDateFormat=rZ;re.invalidDate=iZ;re.ordinal=pZ;re.preparse=tT;re.postformat=tT;re.relativeTime=aZ;re.pastFuture=sZ;re.set=JK;re.eras=FQ;re.erasParse=IQ;re.erasConvertYear=PQ;re.erasAbbrRegex=VQ;re.erasNameRegex=jQ;re.erasNarrowRegex=GQ;re.months=vZ;re.monthsShort=NZ;re.monthsParse=DZ;re.monthsRegex=_Z;re.monthsShortRegex=TZ;re.week=kZ;re.firstDayOfYear=xZ;re.firstDayOfWeek=CZ;re.weekdays=GZ;re.weekdaysMin=ZZ;re.weekdaysShort=KZ;re.weekdaysParse=QZ;re.weekdaysRegex=oJ;re.weekdaysShortRegex=rJ;re.weekdaysMinRegex=MJ;re.isPM=cJ;re.meridiem=zJ;function QA(e,t,n,o){var M=BM(),c=Er().set(o,t);return M[n](c,e)}function nT(e,t,n){if(LM(e)&&(t=e,e=void 0),e=e||"",t!=null)return QA(e,t,n,"month");var o,M=[];for(o=0;o<12;o++)M[o]=QA(e,o,n,"month");return M}function cR(e,t,n,o){typeof e=="boolean"?(LM(t)&&(n=t,t=void 0),t=t||""):(t=e,n=t,e=!1,LM(t)&&(n=t,t=void 0),t=t||"");var M=BM(),c=e?M._week.dow:0,b,z=[];if(n!=null)return QA(t,(n+c)%7,o,"day");for(b=0;b<7;b++)z[b]=QA(t,(b+c)%7,o,"day");return z}function l00(e,t){return nT(e,t,"months")}function A00(e,t){return nT(e,t,"monthsShort")}function f00(e,t,n){return cR(e,t,n,"weekdays")}function d00(e,t,n){return cR(e,t,n,"weekdaysShort")}function q00(e,t,n){return cR(e,t,n,"weekdaysMin")}Si("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,n=S1(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+n}});C0.lang=zo("moment.lang is deprecated. Use moment.locale instead.",Si);C0.langData=zo("moment.langData is deprecated. Use moment.localeData instead.",BM);var eM=Math.abs;function h00(){var e=this._data;return this._milliseconds=eM(this._milliseconds),this._days=eM(this._days),this._months=eM(this._months),e.milliseconds=eM(e.milliseconds),e.seconds=eM(e.seconds),e.minutes=eM(e.minutes),e.hours=eM(e.hours),e.months=eM(e.months),e.years=eM(e.years),this}function oT(e,t,n,o){var M=Zo(t,n);return e._milliseconds+=o*M._milliseconds,e._days+=o*M._days,e._months+=o*M._months,e._bubble()}function W00(e,t){return oT(this,e,t,1)}function m00(e,t){return oT(this,e,t,-1)}function sL(e){return e<0?Math.floor(e):Math.ceil(e)}function g00(){var e=this._milliseconds,t=this._days,n=this._months,o=this._data,M,c,b,z,a;return e>=0&&t>=0&&n>=0||e<=0&&t<=0&&n<=0||(e+=sL(em(n)+t)*864e5,t=0,n=0),o.milliseconds=e%1e3,M=J2(e/1e3),o.seconds=M%60,c=J2(M/60),o.minutes=c%60,b=J2(c/60),o.hours=b%24,t+=J2(b/24),a=J2(rT(t)),n+=a,t-=sL(em(a)),z=J2(n/12),n%=12,o.days=t,o.months=n,o.years=z,this}function rT(e){return e*4800/146097}function em(e){return e*146097/4800}function R00(e){if(!this.isValid())return NaN;var t,n,o=this._milliseconds;if(e=ao(e),e==="month"||e==="quarter"||e==="year")switch(t=this._days+o/864e5,n=this._months+rT(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(em(this._months)),e){case"week":return t/7+o/6048e5;case"day":return t+o/864e5;case"hour":return t*24+o/36e5;case"minute":return t*1440+o/6e4;case"second":return t*86400+o/1e3;case"millisecond":return Math.floor(t*864e5)+o;default:throw new Error("Unknown unit "+e)}}function y00(){return this.isValid()?this._milliseconds+this._days*864e5+this._months%12*2592e6+S1(this._months/12)*31536e6:NaN}function TM(e){return function(){return this.as(e)}}var L00=TM("ms"),v00=TM("s"),N00=TM("m"),w00=TM("h"),D00=TM("d"),B00=TM("w"),T00=TM("M"),_00=TM("Q"),E00=TM("y");function S00(){return Zo(this)}function k00(e){return e=ao(e),this.isValid()?this[e+"s"]():NaN}function Ob(e){return function(){return this.isValid()?this._data[e]:NaN}}var X00=Ob("milliseconds"),C00=Ob("seconds"),x00=Ob("minutes"),F00=Ob("hours"),I00=Ob("days"),P00=Ob("months"),U00=Ob("years");function $00(){return J2(this.days()/7)}var MM=Math.round,Kp={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function H00(e,t,n,o,M){return M.relativeTime(t||1,!!n,e,o)}function Y00(e,t,n,o){var M=Zo(e).abs(),c=MM(M.as("s")),b=MM(M.as("m")),z=MM(M.as("h")),a=MM(M.as("d")),s=MM(M.as("M")),u=MM(M.as("w")),l=MM(M.as("y")),A=c<=n.ss&&["s",c]||c<n.s&&["ss",c]||b<=1&&["m"]||b<n.m&&["mm",b]||z<=1&&["h"]||z<n.h&&["hh",z]||a<=1&&["d"]||a<n.d&&["dd",a];return n.w!=null&&(A=A||u<=1&&["w"]||u<n.w&&["ww",u]),A=A||s<=1&&["M"]||s<n.M&&["MM",s]||l<=1&&["y"]||["yy",l],A[2]=t,A[3]=+e>0,A[4]=o,H00.apply(null,A)}function j00(e){return e===void 0?MM:typeof e=="function"?(MM=e,!0):!1}function V00(e,t){return Kp[e]===void 0?!1:t===void 0?Kp[e]:(Kp[e]=t,e==="s"&&(Kp.ss=t-1),!0)}function G00(e,t){if(!this.isValid())return this.localeData().invalidDate();var n=!1,o=Kp,M,c;return typeof e=="object"&&(t=e,e=!1),typeof e=="boolean"&&(n=e),typeof t=="object"&&(o=Object.assign({},Kp,t),t.s!=null&&t.ss==null&&(o.ss=t.s-1)),M=this.localeData(),c=Y00(this,!n,o,M),n&&(c=M.pastFuture(+this,c)),M.postformat(c)}var gW=Math.abs;function Up(e){return(e>0)-(e<0)||+e}function md(){if(!this.isValid())return this.localeData().invalidDate();var e=gW(this._milliseconds)/1e3,t=gW(this._days),n=gW(this._months),o,M,c,b,z=this.asSeconds(),a,s,u,l;return z?(o=J2(e/60),M=J2(o/60),e%=60,o%=60,c=J2(n/12),n%=12,b=e?e.toFixed(3).replace(/\.?0+$/,""):"",a=z<0?"-":"",s=Up(this._months)!==Up(z)?"-":"",u=Up(this._days)!==Up(z)?"-":"",l=Up(this._milliseconds)!==Up(z)?"-":"",a+"P"+(c?s+c+"Y":"")+(n?s+n+"M":"")+(t?u+t+"D":"")+(M||o||e?"T":"")+(M?l+M+"H":"")+(o?l+o+"M":"")+(e?l+b+"S":"")):"P0D"}var Y1=hd.prototype;Y1.isValid=IJ;Y1.abs=h00;Y1.add=W00;Y1.subtract=m00;Y1.as=R00;Y1.asMilliseconds=L00;Y1.asSeconds=v00;Y1.asMinutes=N00;Y1.asHours=w00;Y1.asDays=D00;Y1.asWeeks=B00;Y1.asMonths=T00;Y1.asQuarters=_00;Y1.asYears=E00;Y1.valueOf=y00;Y1._bubble=g00;Y1.clone=S00;Y1.get=k00;Y1.milliseconds=X00;Y1.seconds=C00;Y1.minutes=x00;Y1.hours=F00;Y1.days=I00;Y1.weeks=$00;Y1.months=P00;Y1.years=U00;Y1.humanize=G00;Y1.toISOString=md;Y1.toString=md;Y1.toJSON=md;Y1.locale=YB;Y1.localeData=VB;Y1.toIsoString=zo("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",md);Y1.lang=jB;t1("X",0,0,"unix");t1("x",0,0,"valueOf");Y0("x",Ad);Y0("X",fZ);Le("X",function(e,t,n){n._d=new Date(parseFloat(e)*1e3)});Le("x",function(e,t,n){n._d=new Date(S1(e))});//! moment.js +C0.version="2.29.4";KK(Ie);C0.fn=T0;C0.min=XJ;C0.max=CJ;C0.now=xJ;C0.utc=Er;C0.unix=O00;C0.months=l00;C0.isDate=ru;C0.locale=Si;C0.invalid=ad;C0.duration=Zo;C0.isMoment=jo;C0.weekdays=f00;C0.parseZone=u00;C0.localeData=BM;C0.isDuration=pA;C0.monthsShort=A00;C0.weekdaysMin=q00;C0.defineLocale=Qg;C0.updateLocale=uJ;C0.locales=lJ;C0.weekdaysShort=d00;C0.normalizeUnits=ao;C0.relativeTimeRounding=j00;C0.relativeTimeThreshold=V00;C0.calendarFormat=zQ;C0.prototype=T0;C0.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"};const K00=Object.freeze(Object.defineProperty({__proto__:null,default:C0},Symbol.toStringTag,{value:"Module"})),Z00=bm(K00);(function(e){//! moment-timezone.js +//! version : 0.5.45 +//! Copyright (c) JS Foundation and other contributors +//! license : MIT +//! github.com/moment/moment-timezone +(function(t,n){e.exports?e.exports=n(Z00):n(t.moment)})(e2,function(t){t.version===void 0&&t.default&&(t=t.default);var n="0.5.45",o={},M={},c={},b={},z={},a;(!t||typeof t.version!="string")&&i0("Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/");var s=t.version.split("."),u=+s[0],l=+s[1];(u<2||u===2&&l<6)&&i0("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+t.version+". See momentjs.com");function A($){return $>96?$-87:$>64?$-29:$-48}function d($){var n0=0,p0=$.split("."),g0=p0[0],S0=p0[1]||"",K0=1,X,j0=0,U0=1;for($.charCodeAt(0)===45&&(n0=1,U0=-1),n0;n0<g0.length;n0++)X=A(g0.charCodeAt(n0)),j0=60*j0+X;for(n0=0;n0<S0.length;n0++)K0=K0/60,X=A(S0.charCodeAt(n0)),j0+=X*K0;return j0*U0}function W($){for(var n0=0;n0<$.length;n0++)$[n0]=d($[n0])}function g($,n0){for(var p0=0;p0<n0;p0++)$[p0]=Math.round(($[p0-1]||0)+$[p0]*6e4);$[n0-1]=1/0}function L($,n0){var p0=[],g0;for(g0=0;g0<n0.length;g0++)p0[g0]=$[n0[g0]];return p0}function R($){var n0=$.split("|"),p0=n0[2].split(" "),g0=n0[3].split(""),S0=n0[4].split(" ");return W(p0),W(g0),W(S0),g(S0,g0.length),{name:n0[0],abbrs:L(n0[1].split(" "),g0),offsets:L(p0,g0),untils:S0,population:n0[5]|0}}function E($){$&&this._set(R($))}function k($,n0){var p0=n0.length;if($<n0[0])return 0;if(p0>1&&n0[p0-1]===1/0&&$>=n0[p0-2])return p0-1;if($>=n0[p0-1])return-1;for(var g0,S0=0,K0=p0-1;K0-S0>1;)g0=Math.floor((S0+K0)/2),n0[g0]<=$?S0=g0:K0=g0;return K0}E.prototype={_set:function($){this.name=$.name,this.abbrs=$.abbrs,this.untils=$.untils,this.offsets=$.offsets,this.population=$.population},_index:function($){var n0=+$,p0=this.untils,g0;if(g0=k(n0,p0),g0>=0)return g0},countries:function(){var $=this.name;return Object.keys(c).filter(function(n0){return c[n0].zones.indexOf($)!==-1})},parse:function($){var n0=+$,p0=this.offsets,g0=this.untils,S0=g0.length-1,K0,X,j0,U0;for(U0=0;U0<S0;U0++)if(K0=p0[U0],X=p0[U0+1],j0=p0[U0&&U0-1],K0<X&&c0.moveAmbiguousForward?K0=X:K0>j0&&c0.moveInvalidForward&&(K0=j0),n0<g0[U0]-K0*6e4)return p0[U0];return p0[S0]},abbr:function($){return this.abbrs[this._index($)]},offset:function($){return i0("zone.offset has been deprecated in favor of zone.utcOffset"),this.offsets[this._index($)]},utcOffset:function($){return this.offsets[this._index($)]}};function B($,n0){this.name=$,this.zones=n0}function I($){var n0=$.toTimeString(),p0=n0.match(/\([a-z ]+\)/i);p0&&p0[0]?(p0=p0[0].match(/[A-Z]/g),p0=p0?p0.join(""):void 0):(p0=n0.match(/[A-Z]{3,5}/g),p0=p0?p0[0]:void 0),p0==="GMT"&&(p0=void 0),this.at=+$,this.abbr=p0,this.offset=$.getTimezoneOffset()}function S($){this.zone=$,this.offsetScore=0,this.abbrScore=0}S.prototype.scoreOffsetAt=function($){this.offsetScore+=Math.abs(this.zone.utcOffset($.at)-$.offset),this.zone.abbr($.at).replace(/[^A-Z]/g,"")!==$.abbr&&this.abbrScore++};function N($,n0){for(var p0,g0;g0=((n0.at-$.at)/12e4|0)*6e4;)p0=new I(new Date($.at+g0)),p0.offset===$.offset?$=p0:n0=p0;return $}function P(){var $=new Date().getFullYear()-2,n0=new I(new Date($,0,1)),p0=n0.offset,g0=[n0],S0,K0,X,j0;for(j0=1;j0<48;j0++)X=new Date($,j0,1).getTimezoneOffset(),X!==p0&&(K0=new I(new Date($,j0,1)),S0=N(n0,K0),g0.push(S0),g0.push(new I(new Date(S0.at+6e4))),n0=K0,p0=X);for(j0=0;j0<4;j0++)g0.push(new I(new Date($+j0,0,1))),g0.push(new I(new Date($+j0,6,1)));return g0}function J($,n0){return $.offsetScore!==n0.offsetScore?$.offsetScore-n0.offsetScore:$.abbrScore!==n0.abbrScore?$.abbrScore-n0.abbrScore:$.zone.population!==n0.zone.population?n0.zone.population-$.zone.population:n0.zone.name.localeCompare($.zone.name)}function K($,n0){var p0,g0;for(W(n0),p0=0;p0<n0.length;p0++)g0=n0[p0],z[g0]=z[g0]||{},z[g0][$]=!0}function V($){var n0=$.length,p0={},g0=[],S0={},K0,X,j0,U0;for(K0=0;K0<n0;K0++)if(j0=$[K0].offset,!S0.hasOwnProperty(j0)){U0=z[j0]||{};for(X in U0)U0.hasOwnProperty(X)&&(p0[X]=!0);S0[j0]=!0}for(K0 in p0)p0.hasOwnProperty(K0)&&g0.push(b[K0]);return g0}function x(){try{var $=Intl.DateTimeFormat().resolvedOptions().timeZone;if($&&$.length>3){var n0=b[Z($)];if(n0)return n0;i0("Moment Timezone found "+$+" from the Intl api, but did not have that data loaded.")}}catch{}var p0=P(),g0=p0.length,S0=V(p0),K0=[],X,j0,U0;for(j0=0;j0<S0.length;j0++){for(X=new S(t0(S0[j0])),U0=0;U0<g0;U0++)X.scoreOffsetAt(p0[U0]);K0.push(X)}return K0.sort(J),K0.length>0?K0[0].zone.name:void 0}function e0($){return(!a||$)&&(a=x()),a}function Z($){return($||"").toLowerCase().replace(/\//g,"_")}function j($){var n0,p0,g0,S0;for(typeof $=="string"&&($=[$]),n0=0;n0<$.length;n0++)g0=$[n0].split("|"),p0=g0[0],S0=Z(p0),o[S0]=$[n0],b[S0]=p0,K(S0,g0[2].split(" "))}function t0($,n0){$=Z($);var p0=o[$],g0;return p0 instanceof E?p0:typeof p0=="string"?(p0=new E(p0),o[$]=p0,p0):M[$]&&n0!==t0&&(g0=t0(M[$],t0))?(p0=o[$]=new E,p0._set(g0),p0.name=b[$],p0):null}function O0(){var $,n0=[];for($ in b)b.hasOwnProperty($)&&(o[$]||o[M[$]])&&b[$]&&n0.push(b[$]);return n0.sort()}function m0(){return Object.keys(c)}function q0($){var n0,p0,g0,S0;for(typeof $=="string"&&($=[$]),n0=0;n0<$.length;n0++)p0=$[n0].split("|"),g0=Z(p0[0]),S0=Z(p0[1]),M[g0]=S0,b[g0]=p0[0],M[S0]=g0,b[S0]=p0[1]}function C($){var n0,p0,g0,S0;if(!(!$||!$.length))for(n0=0;n0<$.length;n0++)S0=$[n0].split("|"),p0=S0[0].toUpperCase(),g0=S0[1].split(" "),c[p0]=new B(p0,g0)}function z0($){return $=$.toUpperCase(),c[$]||null}function d0($,n0){if($=z0($),!$)return null;var p0=$.zones.sort();return n0?p0.map(function(g0){var S0=t0(g0);return{name:g0,offset:S0.utcOffset(new Date)}}):p0}function _($){j($.zones),q0($.links),C($.countries),c0.dataVersion=$.version}function D0($){return D0.didShowError||(D0.didShowError=!0,i0("moment.tz.zoneExists('"+$+"') has been deprecated in favor of !moment.tz.zone('"+$+"')")),!!t0($)}function o0($){var n0=$._f==="X"||$._f==="x";return!!($._a&&$._tzm===void 0&&!n0)}function i0($){typeof console<"u"&&typeof console.error=="function"&&console.error($)}function c0($){var n0=Array.prototype.slice.call(arguments,0,-1),p0=arguments[arguments.length-1],g0=t.utc.apply(null,n0),S0;return!t.isMoment($)&&o0(g0)&&(S0=t0(p0))&&g0.add(S0.parse(g0),"minutes"),g0.tz(p0),g0}c0.version=n,c0.dataVersion="",c0._zones=o,c0._links=M,c0._names=b,c0._countries=c,c0.add=j,c0.link=q0,c0.load=_,c0.zone=t0,c0.zoneExists=D0,c0.guess=e0,c0.names=O0,c0.Zone=E,c0.unpack=R,c0.unpackBase60=d,c0.needsOffset=o0,c0.moveInvalidForward=!0,c0.moveAmbiguousForward=!1,c0.countries=m0,c0.zonesForCountry=d0;var s0=t.fn;t.tz=c0,t.defaultZone=null,t.updateOffset=function($,n0){var p0=t.defaultZone,g0;if($._z===void 0&&(p0&&o0($)&&!$._isUTC&&$.isValid()&&($._d=t.utc($._a)._d,$.utc().add(p0.parse($),"minutes")),$._z=p0),$._z)if(g0=$._z.utcOffset($),Math.abs(g0)<16&&(g0=g0/60),$.utcOffset!==void 0){var S0=$._z;$.utcOffset(-g0,n0),$._z=S0}else $.zone(g0,n0)},s0.tz=function($,n0){if($){if(typeof $!="string")throw new Error("Time zone name must be a string, got "+$+" ["+typeof $+"]");return this._z=t0($),this._z?t.updateOffset(this,n0):i0("Moment Timezone has no data for "+$+". See http://momentjs.com/timezone/docs/#/data-loading/."),this}if(this._z)return this._z.name};function L0($){return function(){return this._z?this._z.abbr(this):$.call(this)}}function G0($){return function(){return this._z=null,$.apply(this,arguments)}}function p1($){return function(){return arguments.length>0&&(this._z=null),$.apply(this,arguments)}}s0.zoneName=L0(s0.zoneName),s0.zoneAbbr=L0(s0.zoneAbbr),s0.utc=G0(s0.utc),s0.local=G0(s0.local),s0.utcOffset=p1(s0.utcOffset),t.tz.setDefault=function($){return(u<2||u===2&&l<9)&&i0("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+t.version+"."),t.defaultZone=$?t0($):null,t};var n1=t.momentProperties;return Object.prototype.toString.call(n1)==="[object Array]"?(n1.push("_z"),n1.push("_a")):n1&&(n1._z=null),t})})(OB);var J00=OB.exports;const Q00="2024a",e10=["Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5","Africa/Nairobi|LMT +0230 EAT +0245|-2r.g -2u -30 -2J|012132|-2ua2r.g N6nV.g 3Fbu h1cu dzbJ|47e5","Africa/Algiers|LMT PMT WET WEST CET CEST|-c.c -9.l 0 -10 -10 -20|01232323232323232454542423234542324|-3bQ0c.c MDA2.P cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5","Africa/Lagos|LMT GMT +0030 WAT|-d.z 0 -u -10|01023|-2B40d.z 7iod.z dnXK.p dLzH.z|17e6","Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4","Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5","Africa/Cairo|LMT EET EEST|-25.9 -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBC5.9 1AQM5.9 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0 kSp0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0|15e6","Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|32e5","Africa/Ceuta|LMT WET WEST CET CEST|l.g 0 -10 -10 -20|0121212121212121212121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2M0M0 GdX0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|85e3","Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|20e4","Africa/Johannesburg|LMT SAST SAST SAST|-1Q -1u -20 -30|0123232|-39EpQ qTcm 1Ajdu 1cL0 1cN0 1cL0|84e5","Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|012121212121212121212121212121212131|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 PeX0|","Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5","Africa/Monrovia|LMT MMT MMT GMT|H.8 H.8 I.u 0|0123|-3ygng.Q 1usM0 28G01.m|11e5","Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5","Africa/Sao_Tome|LMT LMT GMT WAT|-q.U A.J 0 -10|01232|-3tooq.U 18aoq.U 4i6N0 2q00|","Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5","Africa/Tunis|LMT PMT CET CEST|-E.I -9.l -10 -20|01232323232323232323232323232323232|-3zO0E.I 1cBAv.n 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5","Africa/Windhoek|LMT +0130 SAST SAST CAT WAT|-18.o -1u -20 -30 -20 -10|012324545454545454545454545454545454545454545454545454|-39Ep8.o qTbC.o 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|LMT LMT NST NWT NPT BST BDT AHST HST HDT|-cd.m bK.C b0 a0 a0 b0 a0 a0 a0 90|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVzf.p 1EX1d.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326","America/Anchorage|LMT LMT AST AWT APT AHST AHDT YST AKST AKDT|-e0.o 9X.A a0 90 90 a0 90 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVxs.n 1EX20.o 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4","America/Puerto_Rico|LMT AST AWT APT|4o.p 40 30 30|01231|-2Qi7z.z 1IUbz.z 7XT0 iu0|24e5","America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4","America/Argentina/Buenos_Aires|LMT CMT -04 -03 -02|3R.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343434343|-331U6.c 125cn pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|","America/Argentina/Catamarca|LMT CMT -04 -03 -02|4n.8 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243432343|-331TA.Q 125bR.E pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Cordoba|LMT CMT -04 -03 -02|4g.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243434343|-331TH.c 125c0 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|","America/Argentina/Jujuy|LMT CMT -04 -03 -02|4l.c 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232434343|-331TC.M 125bT.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|","America/Argentina/La_Rioja|LMT CMT -04 -03 -02|4r.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tw.A 125bN.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Mendoza|LMT CMT -04 -03 -02|4z.g 4g.M 40 30 20|012323232323232323232323232323232323232323234343423232432343|-331To.I 125bF.w pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|","America/Argentina/Rio_Gallegos|LMT CMT -04 -03 -02|4A.Q 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tn.8 125bD.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Salta|LMT CMT -04 -03 -02|4l.E 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342434343|-331TC.k 125bT.8 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|","America/Argentina/San_Juan|LMT CMT -04 -03 -02|4y.4 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tp.U 125bG.I pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|","America/Argentina/San_Luis|LMT CMT -04 -03 -02|4p.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232323432323|-331Ty.A 125bP.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|","America/Argentina/Tucuman|LMT CMT -04 -03 -02|4k.Q 4g.M 40 30 20|01232323232323232323232323232323232323232323434343424343234343|-331TD.8 125bT.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|","America/Argentina/Ushuaia|LMT CMT -04 -03 -02|4x.c 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tq.M 125bH.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|","America/Asuncion|LMT AMT -04 -03|3O.E 3O.E 40 30|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-3eLw9.k 1FGo0 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0|28e5","America/Panama|LMT CMT EST|5i.8 5j.A 50|012|-3eLuF.Q Iy01.s|15e5","America/Bahia_Banderas|LMT MST CST MDT PST CDT|71 70 60 60 80 50|0121312141313131313131313131313131313152525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|84e3","America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5","America/Barbados|LMT AST ADT -0330|3W.t 40 30 3u|0121213121212121|-2m4k1.v 1eAN1.v RB0 1Bz0 Op0 1rb0 11d0 1jJc0 IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4","America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5","America/Belize|LMT CST -0530 CWT CPT CDT|5Q.M 60 5u 50 50 50|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121215151|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu Rcu 7Bt0 Ni0 4nd0 Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu e9Au qn0 lxB0 mn0|57e3","America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2","America/Bogota|LMT BMT -05 -04|4U.g 4U.g 50 40|01232|-3sTv3.I 1eIo0 38yo3.I 1PX0|90e5","America/Boise|LMT PST PDT MST MWT MPT MDT|7I.N 80 70 70 60 60 60|01212134536363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-3tFE0 1nEe0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4","America/Cambridge_Bay|-00 MST MWT MPT MDT CST CDT EST|0 70 60 60 60 60 50 50|012314141414141414141414141414141414141414141414141414141414567541414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-21Jc0 RO90 8x20 ix0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2","America/Campo_Grande|LMT -04 -03|3C.s 40 30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4","America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|LMT CMT -0430 -04|4r.I 4r.E 4u 40|012323|-3eLvw.g ROnX.U 28KM2.k 1IwOu kqo0|29e5","America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3","America/Chicago|LMT CST CDT EST CWT CPT|5O.A 60 50 50 50 50|012121212121212121212121212121212121213121212121214512121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5","America/Chihuahua|LMT MST CST MDT CDT|74.k 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4","America/Ciudad_Juarez|LMT MST CST MDT CDT|75.U 70 60 60 50|01213124242313131313131313131313131313131313131313131313131321313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 cm0 EP0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Costa_Rica|LMT SJMT CST CDT|5A.d 5A.d 60 50|01232323232|-3eLun.L 1fyo0 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5","America/Phoenix|LMT MST MDT MWT|7s.i 70 60 60|012121313121|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5","America/Cuiaba|LMT -04 -03|3I.k 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4","America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8","America/Dawson_Creek|LMT PST PDT PWT PPT MST|80.U 80 70 70 70 70|01213412121212121212121212121212121212121212121212121212125|-3tofX.4 1nspX.4 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3","America/Dawson|LMT YST YDT YWT YPT YDDT PST PDT MST|9h.E 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeG.k GWpG.k 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|13e2","America/Denver|LMT MST MDT MWT MPT|6X.U 70 60 60 60|012121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFF0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5","America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|0123425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 JxX1 SMX 1cN0 1cL0 aW10 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5","America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|0121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 XQp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5","America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3","America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5","America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 4Q00 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5","America/Fort_Nelson|LMT PST PDT PWT PPT MST|8a.L 80 70 70 70 70|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121215|-3tofN.d 1nspN.d 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Fort_Wayne|LMT CST CDT CWT CPT EST EDT|5I.C 60 50 50 50 50 40|0121212134121212121212121212151565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5","America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","America/Godthab|LMT -03 -02 -01|3q.U 30 20 10|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 2so0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e3","America/Goose_Bay|LMT NST NDT NST NDT NWT NPT AST ADT ADDT|41.E 3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|0121343434343434356343434343434343434343434343434343434343437878787878787878787878787878787878787878787879787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-3tojW.k 1nspt.c 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2","America/Grand_Turk|LMT KMT EST EDT AST|4I.w 57.a 50 40 40|01232323232323232323232323232323232323232323232323232323232323232323232323243232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLvf.s RK0m.C 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2","America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5","America/Guayaquil|LMT QMT -05 -04|5j.k 5e 50 40|01232|-3eLuE.E 1DNzS.E 2uILK rz0|27e5","America/Guyana|LMT -04 -0345 -03|3Q.D 40 3J 30|01231|-2mf87.l 8Hc7.l 2r7bJ Ey0f|80e4","America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4","America/Havana|LMT HMT CST CDT|5t.s 5t.A 50 40|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLuu.w 1qx00.8 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5","America/Hermosillo|LMT MST CST MDT PST|7n.Q 70 60 60 80|0121312141313131|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4","America/Indiana/Knox|LMT CST CDT CWT CPT EST|5K.u 60 50 50 50 50|01212134121212121212121212121212121212151212121212121212121212121212121212121212121212121252121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Marengo|LMT CST CDT CWT CPT EST EDT|5J.n 60 50 50 50 50 40|01212134121212121212121215656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Petersburg|LMT CST CDT CWT CPT EST EDT|5N.7 60 50 50 50 50 40|012121341212121212121212121215121212121212121212121252125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Tell_City|LMT CST CDT CWT CPT EST EDT|5L.3 60 50 50 50 50 40|012121341212121212121212121512165652121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 8wn0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Vevay|LMT CST CDT CWT CPT EST EDT|5E.g 60 50 50 50 50 40|0121213415656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Vincennes|LMT CST CDT CWT CPT EST EDT|5O.7 60 50 50 50 50 40|012121341212121212121212121212121565652125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Winamac|LMT CST CDT CWT CPT EST EDT|5K.p 60 50 50 50 50 40|012121341212121212121212121212121212121565652165656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Inuvik|-00 PST PDT MDT MST|0 80 70 60 70|01212121212121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-FnA0 L3K0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2","America/Iqaluit|-00 EWT EPT EST EDT CST CDT|0 40 40 50 40 60 50|0123434343434343434343434343434343434343434343434343434343456343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-16K00 7nX0 iv0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2","America/Jamaica|LMT KMT EST EDT|57.a 57.a 50 40|01232323232323232323232|-3eLuQ.O RK00 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4","America/Juneau|LMT LMT PST PWT PPT PDT YDT YST AKST AKDT|-f2.j 8V.F 80 70 70 70 80 90 90 80|0123425252525252525252525252625252578989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVwq.s 1EX12.j 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3","America/Kentucky/Louisville|LMT CST CDT CWT CPT EST EDT|5H.2 60 50 50 50 50 40|01212121213412121212121212121212121212565656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 1nX1 e0X 9vd0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Kentucky/Monticello|LMT CST CDT CWT CPT EST EDT|5D.o 60 50 50 50 50 40|01212134121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/La_Paz|LMT CMT BST -04|4w.A 4w.A 3w.A 40|0123|-3eLvr.o 1FIo0 13b0|19e5","America/Lima|LMT LMT -05 -04|58.c 58.A 50 40|01232323232323232|-3eLuP.M JcM0.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6","America/Los_Angeles|LMT PST PDT PWT PPT|7Q.W 80 70 70 70|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFE0 1nEe0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6","America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4","America/Managua|LMT MMT CST EST CDT|5J.8 5J.c 60 50 50|01232424232324242|-3eLue.Q 1Mhc0.4 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5","America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5","America/Martinique|LMT FFMT AST ADT|44.k 44.k 40 30|01232|-3eLvT.E PTA0 2LPbT.E 19X0|39e4","America/Matamoros|LMT CST CDT|6u 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4","America/Mazatlan|LMT MST CST MDT PST|75.E 70 60 60 80|0121312141313131313131313131313131313131313131313131313131313131|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|44e4","America/Menominee|LMT CST CDT CWT CPT EST|5O.r 60 50 50 50 50|012121341212152121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3pdG9.x 1jce9.x 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2","America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|11e5","America/Metlakatla|LMT LMT PST PWT PPT PDT AKST AKDT|-fd.G 8K.i 80 70 70 70 90 80|0123425252525252525252525252525252526767672676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwf.5 1EX1d.G 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Mexico_City|LMT MST CST MDT CDT CWT|6A.A 70 60 60 50 50|012131242425242424242424242424242424242424242424242424242424242424242|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6","America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mxUf.k 2LHcf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2","America/Moncton|LMT EST AST ADT AWT APT|4j.8 50 40 30 30 30|0123232323232323232323245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3txvE.Q J4ME.Q CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3","America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|41e5","America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Toronto|LMT EST EDT EWT EPT|5h.w 50 40 40 40|012121212121212121212121212121212121212121212123412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B6G.s UFdG.s 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1qL0 11B0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5","America/New_York|LMT EST EDT EWT EPT|4U.2 50 40 40 40|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFH0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6","America/Nome|LMT LMT NST NWT NPT BST BDT YST AKST AKDT|-cW.m b1.C b0 a0 a0 b0 a0 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVyu.p 1EX1W.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2","America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2","America/North_Dakota/Beulah|LMT MST MDT MWT MPT CST CDT|6L.7 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/North_Dakota/Center|LMT MST MDT MWT MPT CST CDT|6J.c 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/North_Dakota/New_Salem|LMT MST MDT MWT MPT CST CDT|6J.D 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Ojinaga|LMT MST CST MDT CDT|6V.E 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 Rc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3","America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4","America/Port-au-Prince|LMT PPMT EST EDT|4N.k 4N 50 40|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLva.E 15RLX.E 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4","America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4","America/Punta_Arenas|LMT SMT -05 -04 -03|4H.E 4G.J 50 40 30|01213132323232323232343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvg.k MJbX.5 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|","America/Winnipeg|LMT CST CDT CWT CPT|6s.A 60 50 50 50|0121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3kLtv.o 1a3bv.o WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4","America/Rankin_Inlet|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-vDc0 Bjk0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2","America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5","America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4","America/Resolute|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-SnA0 103I0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229","America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4","America/Santiago|LMT SMT -05 -04 -03|4G.J 4G.J 50 40 30|0121313232323232323432343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvh.f MJc0 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 hX0 1q10 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|62e5","America/Santo_Domingo|LMT SDMT EST EDT -0430 AST|4D.A 4E 50 40 4u 40|012324242424242525|-3eLvk.o 1Jic0.o 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5","America/Sao_Paulo|LMT -03 -02|36.s 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6","America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|012132323232323232323232323232323232323232323232323232323232323232323232323232323232323232121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 2pA0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|452","America/Sitka|LMT LMT PST PWT PPT PDT YST AKST AKDT|-eW.L 91.d 80 70 70 70 90 90 80|0123425252525252525252525252525252567878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-48Pzs.L 1jVwu 1EX0W.L 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2","America/St_Johns|LMT NST NDT NST NDT NWT NPT NDDT|3u.Q 3u.Q 2u.Q 3u 2u 2u 2u 1u|012121212121212121212121212121212121213434343434343435634343434343434343434343434343434343434343434343434343434343434343434343434343434343437343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tokt.8 1l020 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3","America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5","America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656","America/Vancouver|LMT PST PDT PWT PPT|8c.s 80 70 70 70|01213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tofL.w 1nspL.w 1in0 UGp0 8x10 iy0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Whitehorse|LMT YST YDT YWT YPT YDDT PST PDT MST|90.c 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeX.M GWpX.M 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 LA0 ytd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3","America/Yakutat|LMT LMT YST YWT YPT YDT AKST AKDT|-eF.5 9i.T 90 80 80 80 90 80|0123425252525252525252525252525252526767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwL.G 1EX1F.5 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642","Antarctica/Casey|-00 +08 +11|0 -80 -b0|012121212121212121|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01 14kX 1lf1 14kX 1lf1 13bX|10","Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70","Pacific/Port_Moresby|LMT PMMT +10|-9M.E -9M.w -a0|012|-3D8VM.E AvA0.8|25e4","Antarctica/Macquarie|-00 AEST AEDT|0 -a0 -b0|0121012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2OPc0 Fb40 1a00 4SK0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 3Co0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|1","Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60","Pacific/Auckland|LMT NZMT NZST NZST NZDT|-bD.4 -bu -cu -c0 -d0|012131313131313131313131313134343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-46jLD.4 2nEO9.4 Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5","Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","Antarctica/Rothera|-00 -03|0 30|01|gOo0|130","Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5","Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|40","Antarctica/Vostok|-00 +07 +05|0 -70 -50|01012|-tjA0 1rWh0 1Nj0 1aTv0|25","Europe/Berlin|LMT CET CEST CEMT|-R.s -10 -20 -30|012121212121212321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36RcR.s UbWR.s 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e5","Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|0123232323232323232323212323232323232323232323232321|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 L4m0|15e5","Asia/Amman|LMT EET EEST +03|-2n.I -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5","Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3","Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4","Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4","Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4","Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|","Asia/Baghdad|LMT BMT +03 +04|-2V.E -2V.A -30 -40|0123232323232323232323232323232323232323232323232323232|-3eLCV.E 18ao0.4 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5","Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4","Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|LMT BMT +07|-6G.4 -6G.4 -70|012|-3D8SG.4 1C000|15e6","Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|","Asia/Beirut|LMT EET EEST|-2m -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3D8Om 1BWom 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|22e5","Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4","Asia/Brunei|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|42e4","Asia/Kolkata|LMT HMT MMT IST +0630|-5R.s -5R.k -5l.a -5u -6u|01234343|-4Fg5R.s BKo0.8 1rDcw.a 1r2LP.a 1un0 HB0 7zX0|15e6","Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4","Asia/Choibalsan|LMT +07 +08 +10 +09|-7C -70 -80 -a0 -90|0123434343434343434343434343434343434343434343424242|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3","Asia/Shanghai|LMT CST CDT|-85.H -80 -90|012121212121212121212121212121|-2M0U5.H Iuo5.H 18n0 OjB0 Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6","Asia/Colombo|LMT MMT +0530 +06 +0630|-5j.o -5j.w -5u -60 -6u|012342432|-3D8Rj.o 13inX.Q 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5","Asia/Dhaka|LMT HMT +0630 +0530 +06 +07|-61.E -5R.k -6u -5u -60 -70|01232454|-3eLG1.E 26008.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6","Asia/Damascus|LMT EET EEST +03|-2p.c -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5","Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le8m.k 1dnXm.k 1nfA0 Xld0|19e4","Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5","Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4","Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","Asia/Gaza|LMT EET EEST IST IDT|-2h.Q -20 -30 -20 -30|0121212121212121212121212121212121234343434343434343434343434343431212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCh.Q 1Azeh.Q MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 1a10 1fz0 17d0 1in0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 1fB0 14n0 jB0 2L0 11B0 WL0 gN0 8n0 11B0 TX0 gN0 bb0 11B0 On0 jB0 dX0 11B0 Lz0 gN0 mn0 WN0 IL0 gN0 pb0 WN0 Db0 jB0 rX0 11B0 xz0 gN0 xz0 11B0 rX0 jB0 An0 11B0 pb0 gN0 IL0 WN0 mn0 gN0 Lz0 WN0 gL0 jB0 On0 11B0 bb0 gN0 TX0 11B0 5z0 jB0 WL0 11B0 2L0 jB0 11z0 1ip0 19X0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 gN0 2L0 WN0 14n0 gN0 5z0 WN0 WL0 jB0 8n0 11B0 Rb0 gN0 dX0 11B0 Lz0 jB0 gL0 11B0 IL0 jB0 mn0 WN0 FX0 gN0 rX0 WN0 An0 jB0 uL0 11B0 uL0 gN0 An0 11B0 rX0 gN0 Db0 11B0 mn0 jB0 FX0 11B0 jz0 gN0 On0 WN0 dX0 jB0 Rb0 WN0 bb0 jB0 TX0 11B0 5z0 gN0 11z0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|18e5","Asia/Hebron|LMT EET EEST IST IDT|-2k.n -20 -30 -20 -30|012121212121212121212121212121212123434343434343434343434343434343121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCk.n 1Azek.n MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 1a10 1fz0 17d0 1in0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 1fB0 14n0 jB0 2L0 11B0 WL0 gN0 8n0 11B0 TX0 gN0 bb0 11B0 On0 jB0 dX0 11B0 Lz0 gN0 mn0 WN0 IL0 gN0 pb0 WN0 Db0 jB0 rX0 11B0 xz0 gN0 xz0 11B0 rX0 jB0 An0 11B0 pb0 gN0 IL0 WN0 mn0 gN0 Lz0 WN0 gL0 jB0 On0 11B0 bb0 gN0 TX0 11B0 5z0 jB0 WL0 11B0 2L0 jB0 11z0 1ip0 19X0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 gN0 2L0 WN0 14n0 gN0 5z0 WN0 WL0 jB0 8n0 11B0 Rb0 gN0 dX0 11B0 Lz0 jB0 gL0 11B0 IL0 jB0 mn0 WN0 FX0 gN0 rX0 WN0 An0 jB0 uL0 11B0 uL0 gN0 An0 11B0 rX0 gN0 Db0 11B0 mn0 jB0 FX0 11B0 jz0 gN0 On0 WN0 dX0 jB0 Rb0 WN0 bb0 jB0 TX0 11B0 5z0 gN0 11z0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|25e4","Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.u -76.u -70 -80 -90|0123423232|-2yC76.u bK00 1h7b6.u 5lz0 18o0 3Oq0 k5c0 aVX0 BAM0|90e5","Asia/Hong_Kong|LMT HKT HKST HKWT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taO0 Hc0 xUu 9tBu 11z0 1tDu Rc0 1wo0 11A0 1cM0 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5","Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|LMT IMT +07 +08 +09|-6V.5 -6V.5 -70 -80 -90|012343434343434343434343234343434343434343434343434343434343434343|-3D8SV.5 1Bxc0 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Europe/Istanbul|LMT IMT EET EEST +03 +04|-1T.Q -1U.U -20 -30 -30 -40|01232323232323232323232323232323232323232323232345423232323232323232323232323232323232323232323232323232323232323234|-3D8NT.Q 1ePXW.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSN0 CL0 mp0 1Vz0 1gN0 8yn0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1ip0 19X0 1ip0 17b0 qdB0 38L0 1jd0 Tz0 l6O0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|LMT BMT +0720 +0730 +09 +08 WIB|-77.c -77.c -7k -7u -90 -80 -70|012343536|-49jH7.c 2hiLL.c luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6","Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4","Asia/Jerusalem|LMT JMT IST IDT IDDT|-2k.S -2k.E -20 -30 -40|012323232323232432323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8Ok.S 1wvA0.e SyOk.E MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 3LA0 Eo0 oo0 1co0 1dA0 16o0 10M0 1jc0 1tA0 14o0 1cM0 1a00 11A0 1Nc0 Ao0 1Nc0 Ao0 1Ko0 LA0 1o00 WM0 EQK0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0|81e4","Asia/Kabul|LMT +04 +0430|-4A.M -40 -4u|012|-3eLEA.M 2dTcA.M|46e5","Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4","Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6","Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5","Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5","Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2","Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5","Asia/Kuala_Lumpur|LMT SMT +07 +0720 +0730 +09 +08|-6T.p -6T.p -70 -7k -7u -90 -80|01234546|-2M0ST.p aIM0 17anT.p l5XE 17bO 8Fyu 1so10|71e5","Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4","Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3","Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5","Asia/Manila|LMT LMT PST PDT JST|fU -84 -80 -90 -90|01232423232|-54m84 2clc0 1vfc4 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6","Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|32e4","Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4","Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5","Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5","Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4","Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4","Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5","Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 Mv90|","Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4","Asia/Rangoon|LMT RMT +0630 +09|-6o.L -6o.L -6u -90|01232|-3D8So.L 1BnA0 SmnS.L 7j9u|48e5","Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4","Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4","Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -a0 -9u|012343434343151515151515134343|-2um8r.Q 97XV.Q 1m1zu 6CM0 Fz0 1kN0 14n0 1kN0 14L0 1zd0 On0 69B0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6","Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2","Asia/Taipei|LMT CST JST CDT|-86 -80 -90 -90|012131313131313131313131313131313131313131|-30bk6 1FDc6 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5","Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5","Asia/Tbilisi|LMT TBMT +03 +04 +05|-2X.b -2X.b -30 -40 -50|01234343434343434343434323232343434343434343434323|-3D8OX.b 1LUM0 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5","Asia/Tehran|LMT TMT +0330 +0430 +04 +05|-3p.I -3p.I -3u -4u -40 -50|012345423232323232323232323232323232323232323232323232323232323232323232|-2btDp.I Llc0 1FHaT.I 1pc0 120u Rc0 XA0 Wou JX0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6","Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3","Asia/Tokyo|LMT JST JDT|-9i.X -90 -a0|0121212121|-3jE90 2qSo0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6","Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5","Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5","Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2","Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4","Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5","Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5","Atlantic/Azores|LMT HMT -02 -01 +00 WET|1G.E 1S.w 20 10 0 0|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232343434343434343434343434343434345434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tomh.k 18aoh.k aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|25e4","Atlantic/Bermuda|LMT BMT BST AST ADT|4j.i 4j.i 3j.i 40 30|0121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3eLvE.G 16mo0 1bb0 1i10 11X0 ru30 thbE.G 1PX0 11B0 1tz0 Rd0 1zb0 Op0 1zb0 3I10 Lz0 1EN0 FX0 1HB0 FX0 1Kp0 Db0 1Kp0 Db0 1Kp0 FX0 93d0 11z0 GAp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3","Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4","Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|49e3","Atlantic/Madeira|LMT FMT -01 +00 +01 WET WEST|17.A 17.A 10 0 -10 0 -10|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tomQ.o 18anQ.o aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e4","Atlantic/South_Georgia|LMT -02|2q.8 20|01|-3eLxx.Q|30","Atlantic/Stanley|LMT SMT -04 -03 -02|3P.o 3P.o 40 30 20|0123232323232323434323232323232323232323232323232323232323232323232323|-3eLw8.A S200 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2","Australia/Sydney|LMT AEST AEDT|-a4.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oW4.Q RlC4.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|LMT ACST ACST ACDT|-9e.k -90 -9u -au|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-32oVe.k ak0e.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|LMT AEST AEDT|-ac.8 -a0 -b0|012121212121212121|-32Bmc.8 Ry2c.8 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5","Australia/Broken_Hill|LMT AEST ACST ACST ACDT|-9p.M -a0 -90 -9u -au|0123434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-32oVp.M 3Lzp.M 6wp0 H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|18e3","Australia/Hobart|LMT AEST AEDT|-9N.g -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-3109N.g Pk1N.g 1a00 1qM0 Oo0 1zc0 Oo0 TAo0 yM0 1cM0 1cM0 1fA0 1a00 VfA0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|21e4","Australia/Darwin|LMT ACST ACST ACDT|-8H.k -90 -9u -au|01232323232|-32oUH.k ajXH.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00|12e4","Australia/Eucla|LMT +0845 +0945|-8z.s -8J -9J|01212121212121212121|-30nIz.s PkpO.s xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368","Australia/Lord_Howe|LMT AEST +1030 +1130 +11|-aA.k -a0 -au -bu -b0|01232323232424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-32oWA.k 3tzAA.k 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347","Australia/Lindeman|LMT AEST AEDT|-9T.U -a0 -b0|0121212121212121212121|-32BlT.U Ry1T.U xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10","Australia/Melbourne|LMT AEST AEDT|-9D.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oVD.Q RlBD.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|39e5","Australia/Perth|LMT AWST AWDT|-7H.o -80 -90|01212121212121212121|-30nHH.o PkpH.o xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5","CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","Pacific/Easter|LMT EMT -07 -06 -05|7h.s 7h.s 70 60 50|0123232323232323232323232323234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLsG.w 1HRc0 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|30e2","CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","Europe/Dublin|LMT DMT IST GMT BST IST|p.l p.l -y.D 0 -10 -10|012343434343435353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353|-3BHby.D 1ra20 Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","EST|EST|50|0||","EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","Etc/GMT-0|GMT|0|0||","Etc/GMT-1|+01|-10|0||","Etc/GMT-10|+10|-a0|0||","Etc/GMT-11|+11|-b0|0||","Etc/GMT-12|+12|-c0|0||","Etc/GMT-13|+13|-d0|0||","Etc/GMT-14|+14|-e0|0||","Etc/GMT-2|+02|-20|0||","Etc/GMT-3|+03|-30|0||","Etc/GMT-4|+04|-40|0||","Etc/GMT-5|+05|-50|0||","Etc/GMT-6|+06|-60|0||","Etc/GMT-7|+07|-70|0||","Etc/GMT-8|+08|-80|0||","Etc/GMT-9|+09|-90|0||","Etc/GMT+1|-01|10|0||","Etc/GMT+10|-10|a0|0||","Etc/GMT+11|-11|b0|0||","Etc/GMT+12|-12|c0|0||","Etc/GMT+2|-02|20|0||","Etc/GMT+3|-03|30|0||","Etc/GMT+4|-04|40|0||","Etc/GMT+5|-05|50|0||","Etc/GMT+6|-06|60|0||","Etc/GMT+7|-07|70|0||","Etc/GMT+8|-08|80|0||","Etc/GMT+9|-09|90|0||","Etc/UTC|UTC|0|0||","Europe/Brussels|LMT BMT WET CET CEST WEST|-h.u -h.u 0 -10 -20 -10|012343434325252525252525252525252525252525252525252525434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8Mh.u u1Ah.u SO00 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|21e5","Europe/Andorra|LMT WET CET CEST|-6.4 0 -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2M0M6.4 1Pnc6.4 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|79e3","Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5","Europe/Athens|LMT AMT EET EEST CEST CET|-1y.Q -1y.Q -20 -30 -20 -10|0123234545232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-30SNy.Q OMM1 CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|35e5","Europe/London|LMT GMT BST BDST|1.f 0 -10 -20|01212121212121212121212121212121212121212121212121232323232321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-4VgnW.J 2KHdW.J Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|10e6","Europe/Belgrade|LMT CET CEST|-1m -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3topm 2juLm 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Prague|LMT PMT CET CEST GMT|-V.I -V.I -10 -20 0|0123232323232323232423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4QbAV.I 1FDc0 XPaV.I 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|13e5","Europe/Bucharest|LMT BMT EET EEST|-1I.o -1I.o -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3awpI.o 1AU00 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|19e5","Europe/Budapest|LMT CET CEST|-1g.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3cK1g.k 124Lg.k 11d0 1iO0 11A0 1o00 11A0 1oo0 11c0 1lc0 17c0 O1V0 3Nf0 WM0 1fA0 1cM0 1cM0 1oJ0 1dd0 1020 1fX0 1cp0 1cM0 1cM0 1cM0 1fA0 1a00 bhy0 Rb0 1wr0 Rc0 1C00 LA0 1C00 LA0 SNW0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cO0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5","Europe/Zurich|LMT BMT CET CEST|-y.8 -t.K -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4HyMy.8 1Dw04.m 1SfAt.K 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|38e4","Europe/Chisinau|LMT CMT BMT EET EEST CEST CET MSK MSD|-1T.k -1T -1I.o -20 -30 -20 -10 -30 -40|0123434343434343434345656578787878787878787878434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8NT.k 1wNA0.k wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|67e4","Europe/Gibraltar|LMT GMT BST BDST CET CEST|l.o 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123232323232121232121212121212121212145454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-3BHbC.A 1ra1C.A Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|30e3","Europe/Helsinki|LMT HMT EET EEST|-1D.N -1D.N -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3H0ND.N 1Iu00 OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Kaliningrad|LMT CET CEST EET EEST MSK MSD +03|-1m -10 -20 -20 -30 -30 -40 -30|012121212121212343565656565656565654343434343434343434343434343434343434343434373|-36Rdm UbXm 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 390 7A0 1en0 12N0 1pbb0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4","Europe/Kiev|LMT KMT EET MSK CEST CET MSD EEST|-22.4 -22.4 -20 -30 -20 -10 -40 -30|01234545363636363636363636367272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-3D8O2.4 1LUM0 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o10 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|34e5","Europe/Kirov|LMT +03 +04 +05 MSD MSK MSK|-3i.M -30 -40 -50 -40 -30 -40|0123232323232323232454524545454545454545454545454545454545454565|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4","Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Europe/Madrid|LMT WET WEST WEMT CET CEST|e.I 0 -10 -20 -10 -20|0121212121212121212321454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2M0M0 G5z0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|62e5","Europe/Malta|LMT CET CEST|-W.4 -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-35rcW.4 SXzW.4 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4","Europe/Minsk|LMT MMT EET MSK CEST CET MSD EEST +03|-1O.g -1O -20 -30 -20 -10 -40 -30 -30|012345454363636363636363636372727272727272727272727272727272727272728|-3D8NO.g 1LUM0.g eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5","Europe/Paris|LMT PMT WET WEST CEST CET WEMT|-9.l -9.l 0 -10 -20 -10 -20|01232323232323232323232323232323232323232323232323234545463654545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-3bQ09.l MDA0 cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|11e6","Europe/Moscow|LMT MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|01232434565756865656565656565656565698656565656565656565656565656565656565656a6|-3D8Ou.h 1sQM0 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6","Europe/Riga|LMT RMT LST EET MSK CEST CET MSD EEST|-1A.y -1A.y -2A.y -20 -30 -20 -10 -40 -30|0121213456565647474747474747474838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383|-3D8NA.y 1xde0 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|64e4","Europe/Rome|LMT RMT CET CEST|-N.U -N.U -10 -20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4aU0N.U 15snN.U T000 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|39e5","Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5","Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|","Europe/Simferopol|LMT SMT EET MSK CEST CET MSD EEST MSK|-2g.o -2g -20 -30 -20 -10 -40 -30 -40|0123454543636363636363636363272727636363727272727272727272727272727272727283|-3D8Og.o 1LUM0.o eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eN0 1cM0 1cM0 1cM0 1cM0 dV0 WO0 1cM0 1cM0 1fy0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Sofia|LMT IMT EET CET CEST EEST|-1x.g -1U.U -20 -10 -20 -30|0123434325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-3D8Nx.g AiLA.k 1UFeU.U WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Tallinn|LMT TMT CET CEST EET MSK MSD EEST|-1D -1D -10 -20 -20 -30 -40 -30|0123214532323565656565656565657474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474|-3D8ND 1wI00 teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e4","Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4","Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5","Europe/Vienna|LMT CET CEST|-15.l -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36Rd5.l UbX5.l 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1ao0 1co0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|18e5","Europe/Vilnius|LMT WMT KMT CET EET MSK CEST MSD EEST|-1F.g -1o -1z.A -10 -20 -30 -20 -40 -30|0123435636365757575757575757584848484848484848463648484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484|-3D8NF.g 1u5Ah.g 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Europe/Volgograd|LMT +03 +04 +05 MSD MSK MSK|-2V.E -30 -40 -50 -40 -30 -40|012323232323232324545452454545454545454545454545454545454545456525|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0 5gn0|10e5","Europe/Warsaw|LMT WMT CET CEST EET EEST|-1o -1o -10 -20 -20 -30|0123232345423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8No 1qDA0 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5","HST|HST|a0|0||","Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2","Indian/Maldives|LMT MMT +05|-4S -4S -50|012|-3D8QS 3eLA0|35e4","Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4","Pacific/Kwajalein|LMT +11 +10 +09 -12 +12|-b9.k -b0 -a0 -90 c0 -c0|0123145|-2M0X9.k 1rDA9.k akp0 6Up0 12ry0 Wan0|14e3","MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","MST|MST|70|0||","MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","Pacific/Chatham|LMT +1215 +1245 +1345|-cd.M -cf -cJ -dJ|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-46jMd.M 37RbW.M 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|LMT LMT -1130 -11 -10 +14 +13|-cx.4 bq.U bu b0 a0 -e0 -d0|012343456565656565656565656|-38Fox.4 J1A0 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3","Pacific/Bougainville|LMT PMMT +10 +09 +11|-am.g -9M.w -a0 -90 -b0|012324|-3D8Wm.g AvAx.I 1TCLM.w 7CN0 2MQp0|18e4","Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|012121212121212121212121|-2l9nd.g 2uNXd.g Dc0 n610 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3","Pacific/Enderbury|-00 -12 -11 +13|0 c0 b0 -d0|0123|-1iIo0 1GsA0 B7X0|1","Pacific/Fakaofo|LMT -11 +13|bo.U b0 -d0|012|-2M0Az.4 4ufXz.4|483","Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|012121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0|88e4","Pacific/Tarawa|LMT +12|-bw.4 -c0|01|-2M0Xw.4|29e3","Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3","Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125","Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4","Pacific/Guam|LMT LMT GST +09 GDT ChST|el -9D -a0 -90 -b0 -a0|0123242424242424242425|-54m9D 2glc0 1DFbD 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4","Pacific/Honolulu|LMT HST HDT HWT HPT HST|av.q au 9u 9u 9u a0|01213415|-3061s.y 1uMdW.y 8x0 lef0 8wWu iAu 46p0|37e4","Pacific/Kiritimati|LMT -1040 -10 +14|at.k aE a0 -e0|0123|-2M0Bu.E 3bIMa.E B7Xk|51e2","Pacific/Kosrae|LMT LMT +11 +09 +10 +12|d8.4 -aP.U -b0 -90 -a0 -c0|0123243252|-54maP.U 2glc0 xsnP.U axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2","Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2","Pacific/Pago_Pago|LMT LMT SST|-cB.c bm.M b0|012|-38FoB.c J1A0|37e2","Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3","Pacific/Niue|LMT -1120 -11|bj.E bk b0|012|-FScE.k suo0.k|12e2","Pacific/Norfolk|LMT +1112 +1130 +1230 +11 +12|-bb.Q -bc -bu -cu -b0 -c0|0123245454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2M0Xb.Q 21ILX.Q W01G Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4","Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3","Pacific/Palau|LMT LMT +09|f2.4 -8V.U -90|012|-54m8V.U 2glc0|21e3","Pacific/Pitcairn|LMT -0830 -08|8E.k 8u 80|012|-2M0Dj.E 3UVXN.E|56","Pacific/Rarotonga|LMT LMT -1030 -0930 -10|-dk.U aD.4 au 9u a0|01234343434343434343434343434|-2Otpk.U 28zc0 13tbO.U IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3","Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4","Pacific/Tongatapu|LMT +1220 +13 +14|-cj.c -ck -d0 -e0|01232323232|-XbMj.c BgLX.c 1yndk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3","PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|"],t10=["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Iceland","Africa/Cairo|Egypt","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|US/Alaska","America/Argentina/Buenos_Aires|America/Buenos_Aires","America/Argentina/Catamarca|America/Argentina/ComodRivadavia","America/Argentina/Catamarca|America/Catamarca","America/Argentina/Cordoba|America/Cordoba","America/Argentina/Cordoba|America/Rosario","America/Argentina/Jujuy|America/Jujuy","America/Argentina/Mendoza|America/Mendoza","America/Chicago|US/Central","America/Denver|America/Shiprock","America/Denver|Navajo","America/Denver|US/Mountain","America/Detroit|US/Michigan","America/Edmonton|America/Yellowknife","America/Edmonton|Canada/Mountain","America/Fort_Wayne|America/Indiana/Indianapolis","America/Fort_Wayne|America/Indianapolis","America/Fort_Wayne|US/East-Indiana","America/Godthab|America/Nuuk","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/Indiana/Knox|America/Knox_IN","America/Indiana/Knox|US/Indiana-Starke","America/Iqaluit|America/Pangnirtung","America/Jamaica|Jamaica","America/Kentucky/Louisville|America/Louisville","America/Los_Angeles|US/Pacific","America/Manaus|Brazil/West","America/Mazatlan|Mexico/BajaSur","America/Mexico_City|Mexico/General","America/New_York|US/Eastern","America/Noronha|Brazil/DeNoronha","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Phoenix|America/Creston","America/Phoenix|US/Arizona","America/Puerto_Rico|America/Anguilla","America/Puerto_Rico|America/Antigua","America/Puerto_Rico|America/Aruba","America/Puerto_Rico|America/Blanc-Sablon","America/Puerto_Rico|America/Curacao","America/Puerto_Rico|America/Dominica","America/Puerto_Rico|America/Grenada","America/Puerto_Rico|America/Guadeloupe","America/Puerto_Rico|America/Kralendijk","America/Puerto_Rico|America/Lower_Princes","America/Puerto_Rico|America/Marigot","America/Puerto_Rico|America/Montserrat","America/Puerto_Rico|America/Port_of_Spain","America/Puerto_Rico|America/St_Barthelemy","America/Puerto_Rico|America/St_Kitts","America/Puerto_Rico|America/St_Lucia","America/Puerto_Rico|America/St_Thomas","America/Puerto_Rico|America/St_Vincent","America/Puerto_Rico|America/Tortola","America/Puerto_Rico|America/Virgin","America/Regina|Canada/Saskatchewan","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","America/Tijuana|America/Ensenada","America/Tijuana|America/Santa_Isabel","America/Tijuana|Mexico/BajaNorte","America/Toronto|America/Montreal","America/Toronto|America/Nassau","America/Toronto|America/Nipigon","America/Toronto|America/Thunder_Bay","America/Toronto|Canada/Eastern","America/Vancouver|Canada/Pacific","America/Whitehorse|Canada/Yukon","America/Winnipeg|America/Rainy_River","America/Winnipeg|Canada/Central","Asia/Ashgabat|Asia/Ashkhabad","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Vientiane","Asia/Bangkok|Indian/Christmas","Asia/Brunei|Asia/Kuching","Asia/Dhaka|Asia/Dacca","Asia/Dubai|Asia/Muscat","Asia/Dubai|Indian/Mahe","Asia/Dubai|Indian/Reunion","Asia/Ho_Chi_Minh|Asia/Saigon","Asia/Hong_Kong|Hongkong","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Singapore","Asia/Kuala_Lumpur|Singapore","Asia/Macau|Asia/Macao","Asia/Makassar|Asia/Ujung_Pandang","Asia/Nicosia|Europe/Nicosia","Asia/Qatar|Asia/Bahrain","Asia/Rangoon|Asia/Yangon","Asia/Rangoon|Indian/Cocos","Asia/Riyadh|Antarctica/Syowa","Asia/Riyadh|Asia/Aden","Asia/Riyadh|Asia/Kuwait","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|PRC","Asia/Taipei|ROC","Asia/Tehran|Iran","Asia/Thimphu|Asia/Thimbu","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Urumqi|Asia/Kashgar","Atlantic/Faroe|Atlantic/Faeroe","Australia/Adelaide|Australia/South","Australia/Brisbane|Australia/Queensland","Australia/Broken_Hill|Australia/Yancowinna","Australia/Darwin|Australia/North","Australia/Hobart|Australia/Currie","Australia/Hobart|Australia/Tasmania","Australia/Lord_Howe|Australia/LHI","Australia/Melbourne|Australia/Victoria","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/NSW","Etc/GMT-0|Etc/GMT","Etc/GMT-0|Etc/GMT+0","Etc/GMT-0|Etc/GMT0","Etc/GMT-0|Etc/Greenwich","Etc/GMT-0|GMT","Etc/GMT-0|GMT+0","Etc/GMT-0|GMT-0","Etc/GMT-0|GMT0","Etc/GMT-0|Greenwich","Etc/UTC|Etc/UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UCT","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Belgrade|Europe/Ljubljana","Europe/Belgrade|Europe/Podgorica","Europe/Belgrade|Europe/Sarajevo","Europe/Belgrade|Europe/Skopje","Europe/Belgrade|Europe/Zagreb","Europe/Berlin|Arctic/Longyearbyen","Europe/Berlin|Atlantic/Jan_Mayen","Europe/Berlin|Europe/Copenhagen","Europe/Berlin|Europe/Oslo","Europe/Berlin|Europe/Stockholm","Europe/Brussels|Europe/Amsterdam","Europe/Brussels|Europe/Luxembourg","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Helsinki|Europe/Mariehamn","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Kiev|Europe/Kyiv","Europe/Kiev|Europe/Uzhgorod","Europe/Kiev|Europe/Zaporozhye","Europe/Lisbon|Portugal","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Europe/Monaco","Europe/Prague|Europe/Bratislava","Europe/Rome|Europe/San_Marino","Europe/Rome|Europe/Vatican","Europe/Warsaw|Poland","Europe/Zurich|Europe/Busingen","Europe/Zurich|Europe/Vaduz","Indian/Maldives|Indian/Kerguelen","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Enderbury|Pacific/Kanton","Pacific/Guadalcanal|Pacific/Pohnpei","Pacific/Guadalcanal|Pacific/Ponape","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kwajalein|Kwajalein","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Port_Moresby|Antarctica/DumontDUrville","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tarawa|Pacific/Funafuti","Pacific/Tarawa|Pacific/Majuro","Pacific/Tarawa|Pacific/Wake","Pacific/Tarawa|Pacific/Wallis"],n10=["AD|Europe/Andorra","AE|Asia/Dubai","AF|Asia/Kabul","AG|America/Puerto_Rico America/Antigua","AI|America/Puerto_Rico America/Anguilla","AL|Europe/Tirane","AM|Asia/Yerevan","AO|Africa/Lagos Africa/Luanda","AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Antarctica/Vostok Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa","AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia","AS|Pacific/Pago_Pago","AT|Europe/Vienna","AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla","AW|America/Puerto_Rico America/Aruba","AX|Europe/Helsinki Europe/Mariehamn","AZ|Asia/Baku","BA|Europe/Belgrade Europe/Sarajevo","BB|America/Barbados","BD|Asia/Dhaka","BE|Europe/Brussels","BF|Africa/Abidjan Africa/Ouagadougou","BG|Europe/Sofia","BH|Asia/Qatar Asia/Bahrain","BI|Africa/Maputo Africa/Bujumbura","BJ|Africa/Lagos Africa/Porto-Novo","BL|America/Puerto_Rico America/St_Barthelemy","BM|Atlantic/Bermuda","BN|Asia/Kuching Asia/Brunei","BO|America/La_Paz","BQ|America/Puerto_Rico America/Kralendijk","BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco","BS|America/Toronto America/Nassau","BT|Asia/Thimphu","BW|Africa/Maputo Africa/Gaborone","BY|Europe/Minsk","BZ|America/Belize","CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Iqaluit America/Winnipeg America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston","CC|Asia/Yangon Indian/Cocos","CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi","CF|Africa/Lagos Africa/Bangui","CG|Africa/Lagos Africa/Brazzaville","CH|Europe/Zurich","CI|Africa/Abidjan","CK|Pacific/Rarotonga","CL|America/Santiago America/Punta_Arenas Pacific/Easter","CM|Africa/Lagos Africa/Douala","CN|Asia/Shanghai Asia/Urumqi","CO|America/Bogota","CR|America/Costa_Rica","CU|America/Havana","CV|Atlantic/Cape_Verde","CW|America/Puerto_Rico America/Curacao","CX|Asia/Bangkok Indian/Christmas","CY|Asia/Nicosia Asia/Famagusta","CZ|Europe/Prague","DE|Europe/Zurich Europe/Berlin Europe/Busingen","DJ|Africa/Nairobi Africa/Djibouti","DK|Europe/Berlin Europe/Copenhagen","DM|America/Puerto_Rico America/Dominica","DO|America/Santo_Domingo","DZ|Africa/Algiers","EC|America/Guayaquil Pacific/Galapagos","EE|Europe/Tallinn","EG|Africa/Cairo","EH|Africa/El_Aaiun","ER|Africa/Nairobi Africa/Asmara","ES|Europe/Madrid Africa/Ceuta Atlantic/Canary","ET|Africa/Nairobi Africa/Addis_Ababa","FI|Europe/Helsinki","FJ|Pacific/Fiji","FK|Atlantic/Stanley","FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei","FO|Atlantic/Faroe","FR|Europe/Paris","GA|Africa/Lagos Africa/Libreville","GB|Europe/London","GD|America/Puerto_Rico America/Grenada","GE|Asia/Tbilisi","GF|America/Cayenne","GG|Europe/London Europe/Guernsey","GH|Africa/Abidjan Africa/Accra","GI|Europe/Gibraltar","GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule","GM|Africa/Abidjan Africa/Banjul","GN|Africa/Abidjan Africa/Conakry","GP|America/Puerto_Rico America/Guadeloupe","GQ|Africa/Lagos Africa/Malabo","GR|Europe/Athens","GS|Atlantic/South_Georgia","GT|America/Guatemala","GU|Pacific/Guam","GW|Africa/Bissau","GY|America/Guyana","HK|Asia/Hong_Kong","HN|America/Tegucigalpa","HR|Europe/Belgrade Europe/Zagreb","HT|America/Port-au-Prince","HU|Europe/Budapest","ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura","IE|Europe/Dublin","IL|Asia/Jerusalem","IM|Europe/London Europe/Isle_of_Man","IN|Asia/Kolkata","IO|Indian/Chagos","IQ|Asia/Baghdad","IR|Asia/Tehran","IS|Africa/Abidjan Atlantic/Reykjavik","IT|Europe/Rome","JE|Europe/London Europe/Jersey","JM|America/Jamaica","JO|Asia/Amman","JP|Asia/Tokyo","KE|Africa/Nairobi","KG|Asia/Bishkek","KH|Asia/Bangkok Asia/Phnom_Penh","KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati","KM|Africa/Nairobi Indian/Comoro","KN|America/Puerto_Rico America/St_Kitts","KP|Asia/Pyongyang","KR|Asia/Seoul","KW|Asia/Riyadh Asia/Kuwait","KY|America/Panama America/Cayman","KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral","LA|Asia/Bangkok Asia/Vientiane","LB|Asia/Beirut","LC|America/Puerto_Rico America/St_Lucia","LI|Europe/Zurich Europe/Vaduz","LK|Asia/Colombo","LR|Africa/Monrovia","LS|Africa/Johannesburg Africa/Maseru","LT|Europe/Vilnius","LU|Europe/Brussels Europe/Luxembourg","LV|Europe/Riga","LY|Africa/Tripoli","MA|Africa/Casablanca","MC|Europe/Paris Europe/Monaco","MD|Europe/Chisinau","ME|Europe/Belgrade Europe/Podgorica","MF|America/Puerto_Rico America/Marigot","MG|Africa/Nairobi Indian/Antananarivo","MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro","MK|Europe/Belgrade Europe/Skopje","ML|Africa/Abidjan Africa/Bamako","MM|Asia/Yangon","MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan","MO|Asia/Macau","MP|Pacific/Guam Pacific/Saipan","MQ|America/Martinique","MR|Africa/Abidjan Africa/Nouakchott","MS|America/Puerto_Rico America/Montserrat","MT|Europe/Malta","MU|Indian/Mauritius","MV|Indian/Maldives","MW|Africa/Maputo Africa/Blantyre","MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Chihuahua America/Ciudad_Juarez America/Ojinaga America/Mazatlan America/Bahia_Banderas America/Hermosillo America/Tijuana","MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur","MZ|Africa/Maputo","NA|Africa/Windhoek","NC|Pacific/Noumea","NE|Africa/Lagos Africa/Niamey","NF|Pacific/Norfolk","NG|Africa/Lagos","NI|America/Managua","NL|Europe/Brussels Europe/Amsterdam","NO|Europe/Berlin Europe/Oslo","NP|Asia/Kathmandu","NR|Pacific/Nauru","NU|Pacific/Niue","NZ|Pacific/Auckland Pacific/Chatham","OM|Asia/Dubai Asia/Muscat","PA|America/Panama","PE|America/Lima","PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier","PG|Pacific/Port_Moresby Pacific/Bougainville","PH|Asia/Manila","PK|Asia/Karachi","PL|Europe/Warsaw","PM|America/Miquelon","PN|Pacific/Pitcairn","PR|America/Puerto_Rico","PS|Asia/Gaza Asia/Hebron","PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores","PW|Pacific/Palau","PY|America/Asuncion","QA|Asia/Qatar","RE|Asia/Dubai Indian/Reunion","RO|Europe/Bucharest","RS|Europe/Belgrade","RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr","RW|Africa/Maputo Africa/Kigali","SA|Asia/Riyadh","SB|Pacific/Guadalcanal","SC|Asia/Dubai Indian/Mahe","SD|Africa/Khartoum","SE|Europe/Berlin Europe/Stockholm","SG|Asia/Singapore","SH|Africa/Abidjan Atlantic/St_Helena","SI|Europe/Belgrade Europe/Ljubljana","SJ|Europe/Berlin Arctic/Longyearbyen","SK|Europe/Prague Europe/Bratislava","SL|Africa/Abidjan Africa/Freetown","SM|Europe/Rome Europe/San_Marino","SN|Africa/Abidjan Africa/Dakar","SO|Africa/Nairobi Africa/Mogadishu","SR|America/Paramaribo","SS|Africa/Juba","ST|Africa/Sao_Tome","SV|America/El_Salvador","SX|America/Puerto_Rico America/Lower_Princes","SY|Asia/Damascus","SZ|Africa/Johannesburg Africa/Mbabane","TC|America/Grand_Turk","TD|Africa/Ndjamena","TF|Asia/Dubai Indian/Maldives Indian/Kerguelen","TG|Africa/Abidjan Africa/Lome","TH|Asia/Bangkok","TJ|Asia/Dushanbe","TK|Pacific/Fakaofo","TL|Asia/Dili","TM|Asia/Ashgabat","TN|Africa/Tunis","TO|Pacific/Tongatapu","TR|Europe/Istanbul","TT|America/Puerto_Rico America/Port_of_Spain","TV|Pacific/Tarawa Pacific/Funafuti","TW|Asia/Taipei","TZ|Africa/Nairobi Africa/Dar_es_Salaam","UA|Europe/Simferopol Europe/Kyiv","UG|Africa/Nairobi Africa/Kampala","UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Midway Pacific/Wake","US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu","UY|America/Montevideo","UZ|Asia/Samarkand Asia/Tashkent","VA|Europe/Rome Europe/Vatican","VC|America/Puerto_Rico America/St_Vincent","VE|America/Caracas","VG|America/Puerto_Rico America/Tortola","VI|America/Puerto_Rico America/St_Thomas","VN|Asia/Bangkok Asia/Ho_Chi_Minh","VU|Pacific/Efate","WF|Pacific/Tarawa Pacific/Wallis","WS|Pacific/Apia","YE|Asia/Riyadh Asia/Aden","YT|Africa/Nairobi Indian/Mayotte","ZA|Africa/Johannesburg","ZM|Africa/Maputo Africa/Lusaka","ZW|Africa/Maputo Africa/Harare"],o10={version:Q00,zones:e10,links:t10,countries:n10};var r10=sB.exports=J00;r10.tz.load(o10);var iO=sB.exports,ef=["MO","TU","WE","TH","FR","SA","SU"],dn=function(){function e(t,n){if(n===0)throw new Error("Can't create weekday with n == 0");this.weekday=t,this.n=n}return e.fromStr=function(t){return new e(ef.indexOf(t))},e.prototype.nth=function(t){return this.n===t?this:new e(this.weekday,t)},e.prototype.equals=function(t){return this.weekday===t.weekday&&this.n===t.n},e.prototype.toString=function(){var t=ef[this.weekday];return this.n&&(t=(this.n>0?"+":"")+String(this.n)+t),t},e.prototype.getJsWeekday=function(){return this.weekday===6?0:this.weekday+1},e}(),Wt=function(e){return e!=null},ur=function(e){return typeof e=="number"},OL=function(e){return typeof e=="string"&&ef.includes(e)},m2=Array.isArray,kr=function(e,t){t===void 0&&(t=e),arguments.length===1&&(t=e,e=0);for(var n=[],o=e;o<t;o++)n.push(o);return n},ee=function(e,t){var n=0,o=[];if(m2(e))for(;n<t;n++)o[n]=[].concat(e);else for(;n<t;n++)o[n]=e;return o},M10=function(e){return m2(e)?e:[e]};function $p(e,t,n){n===void 0&&(n=" ");var o=String(e);return t=t>>0,o.length>t?String(o):(t=t-o.length,t>n.length&&(n+=ee(n,t/n.length)),n.slice(0,t)+String(o))}var i10=function(e,t,n){var o=e.split(t);return n?o.slice(0,n).concat([o.slice(n).join(t)]):o},Q2=function(e,t){var n=e%t;return n*t<0?n+t:n},RW=function(e,t){return{div:Math.floor(e/t),mod:Q2(e,t)}},Ar=function(e){return!Wt(e)||e.length===0},Ut=function(e){return!Ar(e)},Be=function(e,t){return Ut(e)&&e.indexOf(t)!==-1},Hi=function(e,t,n,o,M,c){return o===void 0&&(o=0),M===void 0&&(M=0),c===void 0&&(c=0),new Date(Date.UTC(e,t-1,n,o,M,c))},c10=[31,28,31,30,31,30,31,31,30,31,30,31],MT=1e3*60*60*24,iT=9999,cT=Hi(1970,1,1),b10=[6,0,1,2,3,4,5],cO=function(e){return e%4===0&&e%100!==0||e%400===0},bT=function(e){return e instanceof Date},eO=function(e){return bT(e)&&!isNaN(e.getTime())},p10=function(e,t){var n=e.getTime(),o=t.getTime(),M=n-o;return Math.round(M/MT)},tm=function(e){return p10(e,cT)},pT=function(e){return new Date(cT.getTime()+e*MT)},z10=function(e){var t=e.getUTCMonth();return t===1&&cO(e.getUTCFullYear())?29:c10[t]},Nz=function(e){return b10[e.getUTCDay()]},uL=function(e,t){var n=Hi(e,t+1,1);return[Nz(n),z10(n)]},zT=function(e,t){return t=t||e,new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()))},nm=function(e){var t=new Date(e.getTime());return t},lL=function(e){for(var t=[],n=0;n<e.length;n++)t.push(nm(e[n]));return t},TO=function(e){e.sort(function(t,n){return t.getTime()-n.getTime()})},bR=function(e,t){t===void 0&&(t=!0);var n=new Date(e);return[$p(n.getUTCFullYear().toString(),4,"0"),$p(n.getUTCMonth()+1,2,"0"),$p(n.getUTCDate(),2,"0"),"T",$p(n.getUTCHours(),2,"0"),$p(n.getUTCMinutes(),2,"0"),$p(n.getUTCSeconds(),2,"0"),t?"Z":""].join("")},pR=function(e){var t=/^(\d{4})(\d{2})(\d{2})(T(\d{2})(\d{2})(\d{2})Z?)?$/,n=t.exec(e);if(!n)throw new Error("Invalid UNTIL value: ".concat(e));return new Date(Date.UTC(parseInt(n[1],10),parseInt(n[2],10)-1,parseInt(n[3],10),parseInt(n[5],10)||0,parseInt(n[6],10)||0,parseInt(n[7],10)||0))},AL=function(e,t){var n=e.toLocaleString("sv-SE",{timeZone:t});return n.replace(" ","T")+"Z"},a10=function(e,t){var n=Intl.DateTimeFormat().resolvedOptions().timeZone,o=new Date(AL(e,n)),M=new Date(AL(e,t??"UTC")),c=M.getTime()-o.getTime();return new Date(e.getTime()-c)},Zp=function(){function e(t,n){this.minDate=null,this.maxDate=null,this._result=[],this.total=0,this.method=t,this.args=n,t==="between"?(this.maxDate=n.inc?n.before:new Date(n.before.getTime()-1),this.minDate=n.inc?n.after:new Date(n.after.getTime()+1)):t==="before"?this.maxDate=n.inc?n.dt:new Date(n.dt.getTime()-1):t==="after"&&(this.minDate=n.inc?n.dt:new Date(n.dt.getTime()+1))}return e.prototype.accept=function(t){++this.total;var n=this.minDate&&t<this.minDate,o=this.maxDate&&t>this.maxDate;if(this.method==="between"){if(n)return!0;if(o)return!1}else if(this.method==="before"){if(o)return!1}else if(this.method==="after")return n?!0:(this.add(t),!1);return this.add(t)},e.prototype.add=function(t){return this._result.push(t),!0},e.prototype.getValue=function(){var t=this._result;switch(this.method){case"all":case"between":return t;case"before":case"after":default:return t.length?t[t.length-1]:null}},e.prototype.clone=function(){return new e(this.method,this.args)},e}(),om=function(e,t){return om=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var M in o)Object.prototype.hasOwnProperty.call(o,M)&&(n[M]=o[M])},om(e,t)};function zR(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");om(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var N2=function(){return N2=Object.assign||function(t){for(var n,o=1,M=arguments.length;o<M;o++){n=arguments[o];for(var c in n)Object.prototype.hasOwnProperty.call(n,c)&&(t[c]=n[c])}return t},N2.apply(this,arguments)};function X0(e,t,n){if(n||arguments.length===2)for(var o=0,M=t.length,c;o<M;o++)(c||!(o in t))&&(c||(c=Array.prototype.slice.call(t,0,o)),c[o]=t[o]);return e.concat(c||Array.prototype.slice.call(t))}var fL=function(e){zR(t,e);function t(n,o,M){var c=e.call(this,n,o)||this;return c.iterator=M,c}return t.prototype.add=function(n){return this.iterator(n,this._result.length)?(this._result.push(n),!0):!1},t}(Zp),tf={dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],tokens:{SKIP:/^[ \r\n\t]+|^\.$/,number:/^[1-9][0-9]*/,numberAsText:/^(one|two|three)/i,every:/^every/i,"day(s)":/^days?/i,"weekday(s)":/^weekdays?/i,"week(s)":/^weeks?/i,"hour(s)":/^hours?/i,"minute(s)":/^minutes?/i,"month(s)":/^months?/i,"year(s)":/^years?/i,on:/^(on|in)/i,at:/^(at)/i,the:/^the/i,first:/^first/i,second:/^second/i,third:/^third/i,nth:/^([1-9][0-9]*)(\.|th|nd|rd|st)/i,last:/^last/i,for:/^for/i,"time(s)":/^times?/i,until:/^(un)?til/i,monday:/^mo(n(day)?)?/i,tuesday:/^tu(e(s(day)?)?)?/i,wednesday:/^we(d(n(esday)?)?)?/i,thursday:/^th(u(r(sday)?)?)?/i,friday:/^fr(i(day)?)?/i,saturday:/^sa(t(urday)?)?/i,sunday:/^su(n(day)?)?/i,january:/^jan(uary)?/i,february:/^feb(ruary)?/i,march:/^mar(ch)?/i,april:/^apr(il)?/i,may:/^may/i,june:/^june?/i,july:/^july?/i,august:/^aug(ust)?/i,september:/^sep(t(ember)?)?/i,october:/^oct(ober)?/i,november:/^nov(ember)?/i,december:/^dec(ember)?/i,comma:/^(,\s*|(and|or)\s*)+/i}},dL=function(e,t){return e.indexOf(t)!==-1},s10=function(e){return e.toString()},O10=function(e,t,n){return"".concat(t," ").concat(n,", ").concat(e)},_M=function(){function e(t,n,o,M){if(n===void 0&&(n=s10),o===void 0&&(o=tf),M===void 0&&(M=O10),this.text=[],this.language=o||tf,this.gettext=n,this.dateFormatter=M,this.rrule=t,this.options=t.options,this.origOptions=t.origOptions,this.origOptions.bymonthday){var c=[].concat(this.options.bymonthday),b=[].concat(this.options.bynmonthday);c.sort(function(u,l){return u-l}),b.sort(function(u,l){return l-u}),this.bymonthday=c.concat(b),this.bymonthday.length||(this.bymonthday=null)}if(Wt(this.origOptions.byweekday)){var z=m2(this.origOptions.byweekday)?this.origOptions.byweekday:[this.origOptions.byweekday],a=String(z);this.byweekday={allWeeks:z.filter(function(u){return!u.n}),someWeeks:z.filter(function(u){return!!u.n}),isWeekdays:a.indexOf("MO")!==-1&&a.indexOf("TU")!==-1&&a.indexOf("WE")!==-1&&a.indexOf("TH")!==-1&&a.indexOf("FR")!==-1&&a.indexOf("SA")===-1&&a.indexOf("SU")===-1,isEveryDay:a.indexOf("MO")!==-1&&a.indexOf("TU")!==-1&&a.indexOf("WE")!==-1&&a.indexOf("TH")!==-1&&a.indexOf("FR")!==-1&&a.indexOf("SA")!==-1&&a.indexOf("SU")!==-1};var s=function(u,l){return u.weekday-l.weekday};this.byweekday.allWeeks.sort(s),this.byweekday.someWeeks.sort(s),this.byweekday.allWeeks.length||(this.byweekday.allWeeks=null),this.byweekday.someWeeks.length||(this.byweekday.someWeeks=null)}else this.byweekday=null}return e.isFullyConvertible=function(t){var n=!0;if(!(t.options.freq in e.IMPLEMENTED)||t.origOptions.until&&t.origOptions.count)return!1;for(var o in t.origOptions){if(dL(["dtstart","tzid","wkst","freq"],o))return!0;if(!dL(e.IMPLEMENTED[t.options.freq],o))return!1}return n},e.prototype.isFullyConvertible=function(){return e.isFullyConvertible(this.rrule)},e.prototype.toString=function(){var t=this.gettext;if(!(this.options.freq in e.IMPLEMENTED))return t("RRule error: Unable to fully convert this rrule to text");if(this.text=[t("every")],this[a1.FREQUENCIES[this.options.freq]](),this.options.until){this.add(t("until"));var n=this.options.until;this.add(this.dateFormatter(n.getUTCFullYear(),this.language.monthNames[n.getUTCMonth()],n.getUTCDate()))}else this.options.count&&this.add(t("for")).add(this.options.count.toString()).add(this.plural(this.options.count)?t("times"):t("time"));return this.isFullyConvertible()||this.add(t("(~ approximate)")),this.text.join("")},e.prototype.HOURLY=function(){var t=this.gettext;this.options.interval!==1&&this.add(this.options.interval.toString()),this.add(this.plural(this.options.interval)?t("hours"):t("hour"))},e.prototype.MINUTELY=function(){var t=this.gettext;this.options.interval!==1&&this.add(this.options.interval.toString()),this.add(this.plural(this.options.interval)?t("minutes"):t("minute"))},e.prototype.DAILY=function(){var t=this.gettext;this.options.interval!==1&&this.add(this.options.interval.toString()),this.byweekday&&this.byweekday.isWeekdays?this.add(this.plural(this.options.interval)?t("weekdays"):t("weekday")):this.add(this.plural(this.options.interval)?t("days"):t("day")),this.origOptions.bymonth&&(this.add(t("in")),this._bymonth()),this.bymonthday?this._bymonthday():this.byweekday?this._byweekday():this.origOptions.byhour&&this._byhour()},e.prototype.WEEKLY=function(){var t=this.gettext;this.options.interval!==1&&this.add(this.options.interval.toString()).add(this.plural(this.options.interval)?t("weeks"):t("week")),this.byweekday&&this.byweekday.isWeekdays?this.options.interval===1?this.add(this.plural(this.options.interval)?t("weekdays"):t("weekday")):this.add(t("on")).add(t("weekdays")):this.byweekday&&this.byweekday.isEveryDay?this.add(this.plural(this.options.interval)?t("days"):t("day")):(this.options.interval===1&&this.add(t("week")),this.origOptions.bymonth&&(this.add(t("in")),this._bymonth()),this.bymonthday?this._bymonthday():this.byweekday&&this._byweekday(),this.origOptions.byhour&&this._byhour())},e.prototype.MONTHLY=function(){var t=this.gettext;this.origOptions.bymonth?(this.options.interval!==1&&(this.add(this.options.interval.toString()).add(t("months")),this.plural(this.options.interval)&&this.add(t("in"))),this._bymonth()):(this.options.interval!==1&&this.add(this.options.interval.toString()),this.add(this.plural(this.options.interval)?t("months"):t("month"))),this.bymonthday?this._bymonthday():this.byweekday&&this.byweekday.isWeekdays?this.add(t("on")).add(t("weekdays")):this.byweekday&&this._byweekday()},e.prototype.YEARLY=function(){var t=this.gettext;this.origOptions.bymonth?(this.options.interval!==1&&(this.add(this.options.interval.toString()),this.add(t("years"))),this._bymonth()):(this.options.interval!==1&&this.add(this.options.interval.toString()),this.add(this.plural(this.options.interval)?t("years"):t("year"))),this.bymonthday?this._bymonthday():this.byweekday&&this._byweekday(),this.options.byyearday&&this.add(t("on the")).add(this.list(this.options.byyearday,this.nth,t("and"))).add(t("day")),this.options.byweekno&&this.add(t("in")).add(this.plural(this.options.byweekno.length)?t("weeks"):t("week")).add(this.list(this.options.byweekno,void 0,t("and")))},e.prototype._bymonthday=function(){var t=this.gettext;this.byweekday&&this.byweekday.allWeeks?this.add(t("on")).add(this.list(this.byweekday.allWeeks,this.weekdaytext,t("or"))).add(t("the")).add(this.list(this.bymonthday,this.nth,t("or"))):this.add(t("on the")).add(this.list(this.bymonthday,this.nth,t("and")))},e.prototype._byweekday=function(){var t=this.gettext;this.byweekday.allWeeks&&!this.byweekday.isWeekdays&&this.add(t("on")).add(this.list(this.byweekday.allWeeks,this.weekdaytext)),this.byweekday.someWeeks&&(this.byweekday.allWeeks&&this.add(t("and")),this.add(t("on the")).add(this.list(this.byweekday.someWeeks,this.weekdaytext,t("and"))))},e.prototype._byhour=function(){var t=this.gettext;this.add(t("at")).add(this.list(this.origOptions.byhour,void 0,t("and")))},e.prototype._bymonth=function(){this.add(this.list(this.options.bymonth,this.monthtext,this.gettext("and")))},e.prototype.nth=function(t){t=parseInt(t.toString(),10);var n,o=this.gettext;if(t===-1)return o("last");var M=Math.abs(t);switch(M){case 1:case 21:case 31:n=M+o("st");break;case 2:case 22:n=M+o("nd");break;case 3:case 23:n=M+o("rd");break;default:n=M+o("th")}return t<0?n+" "+o("last"):n},e.prototype.monthtext=function(t){return this.language.monthNames[t-1]},e.prototype.weekdaytext=function(t){var n=ur(t)?(t+1)%7:t.getJsWeekday();return(t.n?this.nth(t.n)+" ":"")+this.language.dayNames[n]},e.prototype.plural=function(t){return t%100!==1},e.prototype.add=function(t){return this.text.push(" "),this.text.push(t),this},e.prototype.list=function(t,n,o,M){var c=this;M===void 0&&(M=","),m2(t)||(t=[t]);var b=function(a,s,u){for(var l="",A=0;A<a.length;A++)A!==0&&(A===a.length-1?l+=" "+u+" ":l+=s+" "),l+=a[A];return l};n=n||function(a){return a.toString()};var z=function(a){return n&&n.call(c,a)};return o?b(t.map(z),M,o):t.map(z).join(M+" ")},e}(),u10=function(){function e(t){this.done=!0,this.rules=t}return e.prototype.start=function(t){return this.text=t,this.done=!1,this.nextSymbol()},e.prototype.isDone=function(){return this.done&&this.symbol===null},e.prototype.nextSymbol=function(){var t,n;this.symbol=null,this.value=null;do{if(this.done)return!1;var o=void 0;t=null;for(var M in this.rules){o=this.rules[M];var c=o.exec(this.text);c&&(t===null||c[0].length>t[0].length)&&(t=c,n=M)}if(t!=null&&(this.text=this.text.substr(t[0].length),this.text===""&&(this.done=!0)),t==null){this.done=!0,this.symbol=null,this.value=null;return}}while(n==="SKIP");return this.symbol=n,this.value=t,!0},e.prototype.accept=function(t){if(this.symbol===t){if(this.value){var n=this.value;return this.nextSymbol(),n}return this.nextSymbol(),!0}return!1},e.prototype.acceptNumber=function(){return this.accept("number")},e.prototype.expect=function(t){if(this.accept(t))return!0;throw new Error("expected "+t+" but found "+this.symbol)},e}();function aT(e,t){t===void 0&&(t=tf);var n={},o=new u10(t.tokens);if(!o.start(e))return null;return M(),n;function M(){o.expect("every");var A=o.acceptNumber();if(A&&(n.interval=parseInt(A[0],10)),o.isDone())throw new Error("Unexpected end");switch(o.symbol){case"day(s)":n.freq=a1.DAILY,o.nextSymbol()&&(b(),l());break;case"weekday(s)":n.freq=a1.WEEKLY,n.byweekday=[a1.MO,a1.TU,a1.WE,a1.TH,a1.FR],o.nextSymbol(),b(),l();break;case"week(s)":n.freq=a1.WEEKLY,o.nextSymbol()&&(c(),b(),l());break;case"hour(s)":n.freq=a1.HOURLY,o.nextSymbol()&&(c(),l());break;case"minute(s)":n.freq=a1.MINUTELY,o.nextSymbol()&&(c(),l());break;case"month(s)":n.freq=a1.MONTHLY,o.nextSymbol()&&(c(),l());break;case"year(s)":n.freq=a1.YEARLY,o.nextSymbol()&&(c(),l());break;case"monday":case"tuesday":case"wednesday":case"thursday":case"friday":case"saturday":case"sunday":n.freq=a1.WEEKLY;var d=o.symbol.substr(0,2).toUpperCase();if(n.byweekday=[a1[d]],!o.nextSymbol())return;for(;o.accept("comma");){if(o.isDone())throw new Error("Unexpected end");var W=a();if(!W)throw new Error("Unexpected symbol "+o.symbol+", expected weekday");n.byweekday.push(a1[W]),o.nextSymbol()}b(),u(),l();break;case"january":case"february":case"march":case"april":case"may":case"june":case"july":case"august":case"september":case"october":case"november":case"december":if(n.freq=a1.YEARLY,n.bymonth=[z()],!o.nextSymbol())return;for(;o.accept("comma");){if(o.isDone())throw new Error("Unexpected end");var g=z();if(!g)throw new Error("Unexpected symbol "+o.symbol+", expected month");n.bymonth.push(g),o.nextSymbol()}c(),l();break;default:throw new Error("Unknown symbol")}}function c(){var A=o.accept("on"),d=o.accept("the");if(A||d)do{var W=s(),g=a(),L=z();if(W)g?(o.nextSymbol(),n.byweekday||(n.byweekday=[]),n.byweekday.push(a1[g].nth(W))):(n.bymonthday||(n.bymonthday=[]),n.bymonthday.push(W),o.accept("day(s)"));else if(g)o.nextSymbol(),n.byweekday||(n.byweekday=[]),n.byweekday.push(a1[g]);else if(o.symbol==="weekday(s)")o.nextSymbol(),n.byweekday||(n.byweekday=[a1.MO,a1.TU,a1.WE,a1.TH,a1.FR]);else if(o.symbol==="week(s)"){o.nextSymbol();var R=o.acceptNumber();if(!R)throw new Error("Unexpected symbol "+o.symbol+", expected week number");for(n.byweekno=[parseInt(R[0],10)];o.accept("comma");){if(R=o.acceptNumber(),!R)throw new Error("Unexpected symbol "+o.symbol+"; expected monthday");n.byweekno.push(parseInt(R[0],10))}}else if(L)o.nextSymbol(),n.bymonth||(n.bymonth=[]),n.bymonth.push(L);else return}while(o.accept("comma")||o.accept("the")||o.accept("on"))}function b(){var A=o.accept("at");if(A)do{var d=o.acceptNumber();if(!d)throw new Error("Unexpected symbol "+o.symbol+", expected hour");for(n.byhour=[parseInt(d[0],10)];o.accept("comma");){if(d=o.acceptNumber(),!d)throw new Error("Unexpected symbol "+o.symbol+"; expected hour");n.byhour.push(parseInt(d[0],10))}}while(o.accept("comma")||o.accept("at"))}function z(){switch(o.symbol){case"january":return 1;case"february":return 2;case"march":return 3;case"april":return 4;case"may":return 5;case"june":return 6;case"july":return 7;case"august":return 8;case"september":return 9;case"october":return 10;case"november":return 11;case"december":return 12;default:return!1}}function a(){switch(o.symbol){case"monday":case"tuesday":case"wednesday":case"thursday":case"friday":case"saturday":case"sunday":return o.symbol.substr(0,2).toUpperCase();default:return!1}}function s(){switch(o.symbol){case"last":return o.nextSymbol(),-1;case"first":return o.nextSymbol(),1;case"second":return o.nextSymbol(),o.accept("last")?-2:2;case"third":return o.nextSymbol(),o.accept("last")?-3:3;case"nth":var A=parseInt(o.value[1],10);if(A<-366||A>366)throw new Error("Nth out of range: "+A);return o.nextSymbol(),o.accept("last")?-A:A;default:return!1}}function u(){o.accept("on"),o.accept("the");var A=s();if(A)for(n.bymonthday=[A],o.nextSymbol();o.accept("comma");){if(A=s(),!A)throw new Error("Unexpected symbol "+o.symbol+"; expected monthday");n.bymonthday.push(A),o.nextSymbol()}}function l(){if(o.symbol==="until"){var A=Date.parse(o.text);if(!A)throw new Error("Cannot parse until date:"+o.text);n.until=new Date(A)}else o.accept("for")&&(n.count=parseInt(o.value[0],10),o.expect("number"))}}var V1;(function(e){e[e.YEARLY=0]="YEARLY",e[e.MONTHLY=1]="MONTHLY",e[e.WEEKLY=2]="WEEKLY",e[e.DAILY=3]="DAILY",e[e.HOURLY=4]="HOURLY",e[e.MINUTELY=5]="MINUTELY",e[e.SECONDLY=6]="SECONDLY"})(V1||(V1={}));function aR(e){return e<V1.HOURLY}var l10=function(e,t){return t===void 0&&(t=tf),new a1(aT(e,t)||void 0)},Kz=["count","until","interval","byweekday","bymonthday","bymonth"];_M.IMPLEMENTED=[];_M.IMPLEMENTED[V1.HOURLY]=Kz;_M.IMPLEMENTED[V1.MINUTELY]=Kz;_M.IMPLEMENTED[V1.DAILY]=["byhour"].concat(Kz);_M.IMPLEMENTED[V1.WEEKLY]=Kz;_M.IMPLEMENTED[V1.MONTHLY]=Kz;_M.IMPLEMENTED[V1.YEARLY]=["byweekno","byyearday"].concat(Kz);var A10=function(e,t,n,o){return new _M(e,t,n,o).toString()},f10=_M.isFullyConvertible,nf=function(){function e(t,n,o,M){this.hour=t,this.minute=n,this.second=o,this.millisecond=M||0}return e.prototype.getHours=function(){return this.hour},e.prototype.getMinutes=function(){return this.minute},e.prototype.getSeconds=function(){return this.second},e.prototype.getMilliseconds=function(){return this.millisecond},e.prototype.getTime=function(){return(this.hour*60*60+this.minute*60+this.second)*1e3+this.millisecond},e}(),d10=function(e){zR(t,e);function t(n,o,M,c,b,z,a){var s=e.call(this,c,b,z,a)||this;return s.year=n,s.month=o,s.day=M,s}return t.fromDate=function(n){return new this(n.getUTCFullYear(),n.getUTCMonth()+1,n.getUTCDate(),n.getUTCHours(),n.getUTCMinutes(),n.getUTCSeconds(),n.valueOf()%1e3)},t.prototype.getWeekday=function(){return Nz(new Date(this.getTime()))},t.prototype.getTime=function(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond)).getTime()},t.prototype.getDay=function(){return this.day},t.prototype.getMonth=function(){return this.month},t.prototype.getYear=function(){return this.year},t.prototype.addYears=function(n){this.year+=n},t.prototype.addMonths=function(n){if(this.month+=n,this.month>12){var o=Math.floor(this.month/12),M=Q2(this.month,12);this.month=M,this.year+=o,this.month===0&&(this.month=12,--this.year)}},t.prototype.addWeekly=function(n,o){o>this.getWeekday()?this.day+=-(this.getWeekday()+1+(6-o))+n*7:this.day+=-(this.getWeekday()-o)+n*7,this.fixDay()},t.prototype.addDaily=function(n){this.day+=n,this.fixDay()},t.prototype.addHours=function(n,o,M){for(o&&(this.hour+=Math.floor((23-this.hour)/n)*n);;){this.hour+=n;var c=RW(this.hour,24),b=c.div,z=c.mod;if(b&&(this.hour=z,this.addDaily(b)),Ar(M)||Be(M,this.hour))break}},t.prototype.addMinutes=function(n,o,M,c){for(o&&(this.minute+=Math.floor((1439-(this.hour*60+this.minute))/n)*n);;){this.minute+=n;var b=RW(this.minute,60),z=b.div,a=b.mod;if(z&&(this.minute=a,this.addHours(z,!1,M)),(Ar(M)||Be(M,this.hour))&&(Ar(c)||Be(c,this.minute)))break}},t.prototype.addSeconds=function(n,o,M,c,b){for(o&&(this.second+=Math.floor((86399-(this.hour*3600+this.minute*60+this.second))/n)*n);;){this.second+=n;var z=RW(this.second,60),a=z.div,s=z.mod;if(a&&(this.second=s,this.addMinutes(a,!1,M,c)),(Ar(M)||Be(M,this.hour))&&(Ar(c)||Be(c,this.minute))&&(Ar(b)||Be(b,this.second)))break}},t.prototype.fixDay=function(){if(!(this.day<=28)){var n=uL(this.year,this.month-1)[1];if(!(this.day<=n))for(;this.day>n;){if(this.day-=n,++this.month,this.month===13&&(this.month=1,++this.year,this.year>iT))return;n=uL(this.year,this.month-1)[1]}}},t.prototype.add=function(n,o){var M=n.freq,c=n.interval,b=n.wkst,z=n.byhour,a=n.byminute,s=n.bysecond;switch(M){case V1.YEARLY:return this.addYears(c);case V1.MONTHLY:return this.addMonths(c);case V1.WEEKLY:return this.addWeekly(c,b);case V1.DAILY:return this.addDaily(c);case V1.HOURLY:return this.addHours(c,o,z);case V1.MINUTELY:return this.addMinutes(c,o,z,a);case V1.SECONDLY:return this.addSeconds(c,o,z,a,s)}},t}(nf);function sT(e){for(var t=[],n=Object.keys(e),o=0,M=n;o<M.length;o++){var c=M[o];Be(V10,c)||t.push(c),bT(e[c])&&!eO(e[c])&&t.push(c)}if(t.length)throw new Error("Invalid options: "+t.join(", "));return N2({},e)}function q10(e){var t=N2(N2({},sR),sT(e));if(Wt(t.byeaster)&&(t.freq=a1.YEARLY),!(Wt(t.freq)&&a1.FREQUENCIES[t.freq]))throw new Error("Invalid frequency: ".concat(t.freq," ").concat(e.freq));if(t.dtstart||(t.dtstart=new Date(new Date().setMilliseconds(0))),Wt(t.wkst)?ur(t.wkst)||(t.wkst=t.wkst.weekday):t.wkst=a1.MO.weekday,Wt(t.bysetpos)){ur(t.bysetpos)&&(t.bysetpos=[t.bysetpos]);for(var n=0;n<t.bysetpos.length;n++){var o=t.bysetpos[n];if(o===0||!(o>=-366&&o<=366))throw new Error("bysetpos must be between 1 and 366, or between -366 and -1")}}if(!(t.byweekno||Ut(t.byweekno)||Ut(t.byyearday)||t.bymonthday||Ut(t.bymonthday)||Wt(t.byweekday)||Wt(t.byeaster)))switch(t.freq){case a1.YEARLY:t.bymonth||(t.bymonth=t.dtstart.getUTCMonth()+1),t.bymonthday=t.dtstart.getUTCDate();break;case a1.MONTHLY:t.bymonthday=t.dtstart.getUTCDate();break;case a1.WEEKLY:t.byweekday=[Nz(t.dtstart)];break}if(Wt(t.bymonth)&&!m2(t.bymonth)&&(t.bymonth=[t.bymonth]),Wt(t.byyearday)&&!m2(t.byyearday)&&ur(t.byyearday)&&(t.byyearday=[t.byyearday]),!Wt(t.bymonthday))t.bymonthday=[],t.bynmonthday=[];else if(m2(t.bymonthday)){for(var M=[],c=[],n=0;n<t.bymonthday.length;n++){var o=t.bymonthday[n];o>0?M.push(o):o<0&&c.push(o)}t.bymonthday=M,t.bynmonthday=c}else t.bymonthday<0?(t.bynmonthday=[t.bymonthday],t.bymonthday=[]):(t.bynmonthday=[],t.bymonthday=[t.bymonthday]);if(Wt(t.byweekno)&&!m2(t.byweekno)&&(t.byweekno=[t.byweekno]),!Wt(t.byweekday))t.bynweekday=null;else if(ur(t.byweekday))t.byweekday=[t.byweekday],t.bynweekday=null;else if(OL(t.byweekday))t.byweekday=[dn.fromStr(t.byweekday).weekday],t.bynweekday=null;else if(t.byweekday instanceof dn)!t.byweekday.n||t.freq>a1.MONTHLY?(t.byweekday=[t.byweekday.weekday],t.bynweekday=null):(t.bynweekday=[[t.byweekday.weekday,t.byweekday.n]],t.byweekday=null);else{for(var b=[],z=[],n=0;n<t.byweekday.length;n++){var a=t.byweekday[n];if(ur(a)){b.push(a);continue}else if(OL(a)){b.push(dn.fromStr(a).weekday);continue}!a.n||t.freq>a1.MONTHLY?b.push(a.weekday):z.push([a.weekday,a.n])}t.byweekday=Ut(b)?b:null,t.bynweekday=Ut(z)?z:null}return Wt(t.byhour)?ur(t.byhour)&&(t.byhour=[t.byhour]):t.byhour=t.freq<a1.HOURLY?[t.dtstart.getUTCHours()]:null,Wt(t.byminute)?ur(t.byminute)&&(t.byminute=[t.byminute]):t.byminute=t.freq<a1.MINUTELY?[t.dtstart.getUTCMinutes()]:null,Wt(t.bysecond)?ur(t.bysecond)&&(t.bysecond=[t.bysecond]):t.bysecond=t.freq<a1.SECONDLY?[t.dtstart.getUTCSeconds()]:null,{parsedOptions:t}}function h10(e){var t=e.dtstart.getTime()%1e3;if(!aR(e.freq))return[];var n=[];return e.byhour.forEach(function(o){e.byminute.forEach(function(M){e.bysecond.forEach(function(c){n.push(new nf(o,M,c,t))})})}),n}function rm(e){var t=e.split(` +`).map(W10).filter(function(n){return n!==null});return N2(N2({},t[0]),t[1])}function of(e){var t={},n=/DTSTART(?:;TZID=([^:=]+?))?(?::|=)([^;\s]+)/i.exec(e);if(!n)return t;var o=n[1],M=n[2];return o&&(t.tzid=o),t.dtstart=pR(M),t}function W10(e){if(e=e.replace(/^\s+|\s+$/,""),!e.length)return null;var t=/^([A-Z]+?)[:;]/.exec(e.toUpperCase());if(!t)return qL(e);var n=t[1];switch(n.toUpperCase()){case"RRULE":case"EXRULE":return qL(e);case"DTSTART":return of(e);default:throw new Error("Unsupported RFC prop ".concat(n," in ").concat(e))}}function qL(e){var t=e.replace(/^RRULE:/i,""),n=of(t),o=e.replace(/^(?:RRULE|EXRULE):/i,"").split(";");return o.forEach(function(M){var c=M.split("="),b=c[0],z=c[1];switch(b.toUpperCase()){case"FREQ":n.freq=V1[z.toUpperCase()];break;case"WKST":n.wkst=_o[z.toUpperCase()];break;case"COUNT":case"INTERVAL":case"BYSETPOS":case"BYMONTH":case"BYMONTHDAY":case"BYYEARDAY":case"BYWEEKNO":case"BYHOUR":case"BYMINUTE":case"BYSECOND":var a=m10(z),s=b.toLowerCase();n[s]=a;break;case"BYWEEKDAY":case"BYDAY":n.byweekday=g10(z);break;case"DTSTART":case"TZID":var u=of(e);n.tzid=u.tzid,n.dtstart=u.dtstart;break;case"UNTIL":n.until=pR(z);break;case"BYEASTER":n.byeaster=Number(z);break;default:throw new Error("Unknown RRULE property '"+b+"'")}}),n}function m10(e){if(e.indexOf(",")!==-1){var t=e.split(",");return t.map(hL)}return hL(e)}function hL(e){return/^[+-]?\d+$/.test(e)?Number(e):e}function g10(e){var t=e.split(",");return t.map(function(n){if(n.length===2)return _o[n];var o=n.match(/^([+-]?\d{1,2})([A-Z]{2})$/);if(!o||o.length<3)throw new SyntaxError("Invalid weekday string: ".concat(n));var M=Number(o[1]),c=o[2],b=_o[c].weekday;return new dn(b,M)})}var rf=function(){function e(t,n){if(isNaN(t.getTime()))throw new RangeError("Invalid date passed to DateWithZone");this.date=t,this.tzid=n}return Object.defineProperty(e.prototype,"isUTC",{get:function(){return!this.tzid||this.tzid.toUpperCase()==="UTC"},enumerable:!1,configurable:!0}),e.prototype.toString=function(){var t=bR(this.date.getTime(),this.isUTC);return this.isUTC?":".concat(t):";TZID=".concat(this.tzid,":").concat(t)},e.prototype.getTime=function(){return this.date.getTime()},e.prototype.rezonedDate=function(){return this.isUTC?this.date:a10(this.date,this.tzid)},e}();function Mm(e){for(var t=[],n="",o=Object.keys(e),M=Object.keys(sR),c=0;c<o.length;c++)if(o[c]!=="tzid"&&Be(M,o[c])){var b=o[c].toUpperCase(),z=e[o[c]],a="";if(!(!Wt(z)||m2(z)&&!z.length)){switch(b){case"FREQ":a=a1.FREQUENCIES[e.freq];break;case"WKST":ur(z)?a=new dn(z).toString():a=z.toString();break;case"BYWEEKDAY":b="BYDAY",a=M10(z).map(function(d){return d instanceof dn?d:m2(d)?new dn(d[0],d[1]):new dn(d)}).toString();break;case"DTSTART":n=R10(z,e.tzid);break;case"UNTIL":a=bR(z,!e.tzid);break;default:if(m2(z)){for(var s=[],u=0;u<z.length;u++)s[u]=String(z[u]);a=s.toString()}else a=String(z)}a&&t.push([b,a])}}var l=t.map(function(d){var W=d[0],g=d[1];return"".concat(W,"=").concat(g.toString())}).join(";"),A="";return l!==""&&(A="RRULE:".concat(l)),[n,A].filter(function(d){return!!d}).join(` +`)}function R10(e,t){return e?"DTSTART"+new rf(new Date(e),t).toString():""}function y10(e,t){return Array.isArray(e)?!Array.isArray(t)||e.length!==t.length?!1:e.every(function(n,o){return n.getTime()===t[o].getTime()}):e instanceof Date?t instanceof Date&&e.getTime()===t.getTime():e===t}var L10=function(){function e(){this.all=!1,this.before=[],this.after=[],this.between=[]}return e.prototype._cacheAdd=function(t,n,o){n&&(n=n instanceof Date?nm(n):lL(n)),t==="all"?this.all=n:(o._value=n,this[t].push(o))},e.prototype._cacheGet=function(t,n){var o=!1,M=n?Object.keys(n):[],c=function(u){for(var l=0;l<M.length;l++){var A=M[l];if(!y10(n[A],u[A]))return!0}return!1},b=this[t];if(t==="all")o=this.all;else if(m2(b))for(var z=0;z<b.length;z++){var a=b[z];if(!(M.length&&c(a))){o=a._value;break}}if(!o&&this.all){for(var s=new Zp(t,n),z=0;z<this.all.length&&s.accept(this.all[z]);z++);o=s.getValue(),this._cacheAdd(t,o,n)}return m2(o)?lL(o):o instanceof Date?nm(o):o},e}(),v10=X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0([],ee(1,31),!0),ee(2,28),!0),ee(3,31),!0),ee(4,30),!0),ee(5,31),!0),ee(6,30),!0),ee(7,31),!0),ee(8,31),!0),ee(9,30),!0),ee(10,31),!0),ee(11,30),!0),ee(12,31),!0),ee(1,7),!0),N10=X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0([],ee(1,31),!0),ee(2,29),!0),ee(3,31),!0),ee(4,30),!0),ee(5,31),!0),ee(6,30),!0),ee(7,31),!0),ee(8,31),!0),ee(9,30),!0),ee(10,31),!0),ee(11,30),!0),ee(12,31),!0),ee(1,7),!0),w10=kr(1,29),D10=kr(1,30),Ni=kr(1,31),An=kr(1,32),B10=X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0([],An,!0),D10,!0),An,!0),Ni,!0),An,!0),Ni,!0),An,!0),An,!0),Ni,!0),An,!0),Ni,!0),An,!0),An.slice(0,7),!0),T10=X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0([],An,!0),w10,!0),An,!0),Ni,!0),An,!0),Ni,!0),An,!0),An,!0),Ni,!0),An,!0),Ni,!0),An,!0),An.slice(0,7),!0),_10=kr(-28,0),E10=kr(-29,0),wi=kr(-30,0),fn=kr(-31,0),S10=X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0([],fn,!0),E10,!0),fn,!0),wi,!0),fn,!0),wi,!0),fn,!0),fn,!0),wi,!0),fn,!0),wi,!0),fn,!0),fn.slice(0,7),!0),k10=X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0(X0([],fn,!0),_10,!0),fn,!0),wi,!0),fn,!0),wi,!0),fn,!0),fn,!0),wi,!0),fn,!0),wi,!0),fn,!0),fn.slice(0,7),!0),X10=[0,31,60,91,121,152,182,213,244,274,305,335,366],C10=[0,31,59,90,120,151,181,212,243,273,304,334,365],WL=function(){for(var e=[],t=0;t<55;t++)e=e.concat(kr(7));return e}();function x10(e,t){var n=Hi(e,1,1),o=cO(e)?366:365,M=cO(e+1)?366:365,c=tm(n),b=Nz(n),z=N2(N2({yearlen:o,nextyearlen:M,yearordinal:c,yearweekday:b},F10(e)),{wnomask:null});if(Ar(t.byweekno))return z;z.wnomask=ee(0,o+7);var a,s,u=a=Q2(7-b+t.wkst,7);u>=4?(u=0,s=z.yearlen+Q2(b-t.wkst,7)):s=o-u;for(var l=Math.floor(s/7),A=Q2(s,7),d=Math.floor(l+A/4),W=0;W<t.byweekno.length;W++){var g=t.byweekno[W];if(g<0&&(g+=d+1),g>0&&g<=d){var L=void 0;g>1?(L=u+(g-1)*7,u!==a&&(L-=7-a)):L=u;for(var R=0;R<7&&(z.wnomask[L]=1,L++,z.wdaymask[L]!==t.wkst);R++);}}if(Be(t.byweekno,1)){var L=u+d*7;if(u!==a&&(L-=7-a),L<o)for(var W=0;W<7&&(z.wnomask[L]=1,L+=1,z.wdaymask[L]!==t.wkst);W++);}if(u){var E=void 0;if(Be(t.byweekno,-1))E=-1;else{var k=Nz(Hi(e-1,1,1)),B=Q2(7-k.valueOf()+t.wkst,7),I=cO(e-1)?366:365,S=void 0;B>=4?(B=0,S=I+Q2(k-t.wkst,7)):S=o-u,E=Math.floor(52+Q2(S,7)/4)}if(Be(t.byweekno,E))for(var L=0;L<u;L++)z.wnomask[L]=1}return z}function F10(e){var t=cO(e)?366:365,n=Hi(e,1,1),o=Nz(n);return t===365?{mmask:v10,mdaymask:T10,nmdaymask:k10,wdaymask:WL.slice(o),mrange:C10}:{mmask:N10,mdaymask:B10,nmdaymask:S10,wdaymask:WL.slice(o),mrange:X10}}function I10(e,t,n,o,M,c){var b={lastyear:e,lastmonth:t,nwdaymask:[]},z=[];if(c.freq===a1.YEARLY)if(Ar(c.bymonth))z=[[0,n]];else for(var a=0;a<c.bymonth.length;a++)t=c.bymonth[a],z.push(o.slice(t-1,t+1));else c.freq===a1.MONTHLY&&(z=[o.slice(t-1,t+1)]);if(Ar(z))return b;b.nwdaymask=ee(0,n);for(var a=0;a<z.length;a++)for(var s=z[a],u=s[0],l=s[1]-1,A=0;A<c.bynweekday.length;A++){var d=void 0,W=c.bynweekday[A],g=W[0],L=W[1];L<0?(d=l+(L+1)*7,d-=Q2(M[d]-g,7)):(d=u+(L-1)*7,d+=Q2(7-M[d]+g,7)),u<=d&&d<=l&&(b.nwdaymask[d]=1)}return b}function P10(e,t){t===void 0&&(t=0);var n=e%19,o=Math.floor(e/100),M=e%100,c=Math.floor(o/4),b=o%4,z=Math.floor((o+8)/25),a=Math.floor((o-z+1)/3),s=Math.floor(19*n+o-c-a+15)%30,u=Math.floor(M/4),l=M%4,A=Math.floor(32+2*b+2*u-s-l)%7,d=Math.floor((n+11*s+22*A)/451),W=Math.floor((s+A-7*d+114)/31),g=(s+A-7*d+114)%31+1,L=Date.UTC(e,W-1,g+t),R=Date.UTC(e,0,1);return[Math.ceil((L-R)/(1e3*60*60*24))]}var U10=function(){function e(t){this.options=t}return e.prototype.rebuild=function(t,n){var o=this.options;if(t!==this.lastyear&&(this.yearinfo=x10(t,o)),Ut(o.bynweekday)&&(n!==this.lastmonth||t!==this.lastyear)){var M=this.yearinfo,c=M.yearlen,b=M.mrange,z=M.wdaymask;this.monthinfo=I10(t,n,c,b,z,o)}Wt(o.byeaster)&&(this.eastermask=P10(t,o.byeaster))},Object.defineProperty(e.prototype,"lastyear",{get:function(){return this.monthinfo?this.monthinfo.lastyear:null},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"lastmonth",{get:function(){return this.monthinfo?this.monthinfo.lastmonth:null},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"yearlen",{get:function(){return this.yearinfo.yearlen},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"yearordinal",{get:function(){return this.yearinfo.yearordinal},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"mrange",{get:function(){return this.yearinfo.mrange},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"wdaymask",{get:function(){return this.yearinfo.wdaymask},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"mmask",{get:function(){return this.yearinfo.mmask},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"wnomask",{get:function(){return this.yearinfo.wnomask},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"nwdaymask",{get:function(){return this.monthinfo?this.monthinfo.nwdaymask:[]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"nextyearlen",{get:function(){return this.yearinfo.nextyearlen},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"mdaymask",{get:function(){return this.yearinfo.mdaymask},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"nmdaymask",{get:function(){return this.yearinfo.nmdaymask},enumerable:!1,configurable:!0}),e.prototype.ydayset=function(){return[kr(this.yearlen),0,this.yearlen]},e.prototype.mdayset=function(t,n){for(var o=this.mrange[n-1],M=this.mrange[n],c=ee(null,this.yearlen),b=o;b<M;b++)c[b]=b;return[c,o,M]},e.prototype.wdayset=function(t,n,o){for(var M=ee(null,this.yearlen+7),c=tm(Hi(t,n,o))-this.yearordinal,b=c,z=0;z<7&&(M[c]=c,++c,this.wdaymask[c]!==this.options.wkst);z++);return[M,b,c]},e.prototype.ddayset=function(t,n,o){var M=ee(null,this.yearlen),c=tm(Hi(t,n,o))-this.yearordinal;return M[c]=c,[M,c,c+1]},e.prototype.htimeset=function(t,n,o,M){var c=this,b=[];return this.options.byminute.forEach(function(z){b=b.concat(c.mtimeset(t,z,o,M))}),TO(b),b},e.prototype.mtimeset=function(t,n,o,M){var c=this.options.bysecond.map(function(b){return new nf(t,n,b,M)});return TO(c),c},e.prototype.stimeset=function(t,n,o,M){return[new nf(t,n,o,M)]},e.prototype.getdayset=function(t){switch(t){case V1.YEARLY:return this.ydayset.bind(this);case V1.MONTHLY:return this.mdayset.bind(this);case V1.WEEKLY:return this.wdayset.bind(this);case V1.DAILY:return this.ddayset.bind(this);default:return this.ddayset.bind(this)}},e.prototype.gettimeset=function(t){switch(t){case V1.HOURLY:return this.htimeset.bind(this);case V1.MINUTELY:return this.mtimeset.bind(this);case V1.SECONDLY:return this.stimeset.bind(this)}},e}();function $10(e,t,n,o,M,c){for(var b=[],z=0;z<e.length;z++){var a=void 0,s=void 0,u=e[z];u<0?(a=Math.floor(u/t.length),s=Q2(u,t.length)):(a=Math.floor((u-1)/t.length),s=Q2(u-1,t.length));for(var l=[],A=n;A<o;A++){var d=c[A];Wt(d)&&l.push(d)}var W=void 0;a<0?W=l.slice(a)[0]:W=l[a];var g=t[s],L=pT(M.yearordinal+W),R=zT(L,g);Be(b,R)||b.push(R)}return TO(b),b}function OT(e,t){var n=t.dtstart,o=t.freq,M=t.interval,c=t.until,b=t.bysetpos,z=t.count;if(z===0||M===0)return tM(e);var a=d10.fromDate(n),s=new U10(t);s.rebuild(a.year,a.month);for(var u=j10(s,a,t);;){var l=s.getdayset(o)(a.year,a.month,a.day),A=l[0],d=l[1],W=l[2],g=Y10(A,d,W,s,t);if(Ut(b))for(var L=$10(b,u,d,W,s,A),R=0;R<L.length;R++){var E=L[R];if(c&&E>c)return tM(e);if(E>=n){var k=mL(E,t);if(!e.accept(k)||z&&(--z,!z))return tM(e)}}else for(var R=d;R<W;R++){var B=A[R];if(Wt(B))for(var I=pT(s.yearordinal+B),S=0;S<u.length;S++){var N=u[S],E=zT(I,N);if(c&&E>c)return tM(e);if(E>=n){var k=mL(E,t);if(!e.accept(k)||z&&(--z,!z))return tM(e)}}}if(t.interval===0||(a.add(t,g),a.year>iT))return tM(e);aR(o)||(u=s.gettimeset(o)(a.hour,a.minute,a.second,0)),s.rebuild(a.year,a.month)}}function H10(e,t,n){var o=n.bymonth,M=n.byweekno,c=n.byweekday,b=n.byeaster,z=n.bymonthday,a=n.bynmonthday,s=n.byyearday;return Ut(o)&&!Be(o,e.mmask[t])||Ut(M)&&!e.wnomask[t]||Ut(c)&&!Be(c,e.wdaymask[t])||Ut(e.nwdaymask)&&!e.nwdaymask[t]||b!==null&&!Be(e.eastermask,t)||(Ut(z)||Ut(a))&&!Be(z,e.mdaymask[t])&&!Be(a,e.nmdaymask[t])||Ut(s)&&(t<e.yearlen&&!Be(s,t+1)&&!Be(s,-e.yearlen+t)||t>=e.yearlen&&!Be(s,t+1-e.yearlen)&&!Be(s,-e.nextyearlen+t-e.yearlen))}function mL(e,t){return new rf(e,t.tzid).rezonedDate()}function tM(e){return e.getValue()}function Y10(e,t,n,o,M){for(var c=!1,b=t;b<n;b++){var z=e[b];c=H10(o,z,M),c&&(e[z]=null)}return c}function j10(e,t,n){var o=n.freq,M=n.byhour,c=n.byminute,b=n.bysecond;return aR(o)?h10(n):o>=a1.HOURLY&&Ut(M)&&!Be(M,t.hour)||o>=a1.MINUTELY&&Ut(c)&&!Be(c,t.minute)||o>=a1.SECONDLY&&Ut(b)&&!Be(b,t.second)?[]:e.gettimeset(o)(t.hour,t.minute,t.second,t.millisecond)}var _o={MO:new dn(0),TU:new dn(1),WE:new dn(2),TH:new dn(3),FR:new dn(4),SA:new dn(5),SU:new dn(6)},sR={freq:V1.YEARLY,dtstart:null,interval:1,wkst:_o.MO,count:null,until:null,tzid:null,bysetpos:null,bymonth:null,bymonthday:null,bynmonthday:null,byyearday:null,byweekno:null,byweekday:null,bynweekday:null,byhour:null,byminute:null,bysecond:null,byeaster:null},V10=Object.keys(sR),a1=function(){function e(t,n){t===void 0&&(t={}),n===void 0&&(n=!1),this._cache=n?null:new L10,this.origOptions=sT(t);var o=q10(t).parsedOptions;this.options=o}return e.parseText=function(t,n){return aT(t,n)},e.fromText=function(t,n){return l10(t,n)},e.fromString=function(t){return new e(e.parseString(t)||void 0)},e.prototype._iter=function(t){return OT(t,this.options)},e.prototype._cacheGet=function(t,n){return this._cache?this._cache._cacheGet(t,n):!1},e.prototype._cacheAdd=function(t,n,o){if(this._cache)return this._cache._cacheAdd(t,n,o)},e.prototype.all=function(t){if(t)return this._iter(new fL("all",{},t));var n=this._cacheGet("all");return n===!1&&(n=this._iter(new Zp("all",{})),this._cacheAdd("all",n)),n},e.prototype.between=function(t,n,o,M){if(o===void 0&&(o=!1),!eO(t)||!eO(n))throw new Error("Invalid date passed in to RRule.between");var c={before:n,after:t,inc:o};if(M)return this._iter(new fL("between",c,M));var b=this._cacheGet("between",c);return b===!1&&(b=this._iter(new Zp("between",c)),this._cacheAdd("between",b,c)),b},e.prototype.before=function(t,n){if(n===void 0&&(n=!1),!eO(t))throw new Error("Invalid date passed in to RRule.before");var o={dt:t,inc:n},M=this._cacheGet("before",o);return M===!1&&(M=this._iter(new Zp("before",o)),this._cacheAdd("before",M,o)),M},e.prototype.after=function(t,n){if(n===void 0&&(n=!1),!eO(t))throw new Error("Invalid date passed in to RRule.after");var o={dt:t,inc:n},M=this._cacheGet("after",o);return M===!1&&(M=this._iter(new Zp("after",o)),this._cacheAdd("after",M,o)),M},e.prototype.count=function(){return this.all().length},e.prototype.toString=function(){return Mm(this.origOptions)},e.prototype.toText=function(t,n,o){return A10(this,t,n,o)},e.prototype.isFullyConvertibleToText=function(){return f10(this)},e.prototype.clone=function(){return new e(this.origOptions)},e.FREQUENCIES=["YEARLY","MONTHLY","WEEKLY","DAILY","HOURLY","MINUTELY","SECONDLY"],e.YEARLY=V1.YEARLY,e.MONTHLY=V1.MONTHLY,e.WEEKLY=V1.WEEKLY,e.DAILY=V1.DAILY,e.HOURLY=V1.HOURLY,e.MINUTELY=V1.MINUTELY,e.SECONDLY=V1.SECONDLY,e.MO=_o.MO,e.TU=_o.TU,e.WE=_o.WE,e.TH=_o.TH,e.FR=_o.FR,e.SA=_o.SA,e.SU=_o.SU,e.parseString=rm,e.optionsToString=Mm,e}();function G10(e,t,n,o,M,c){var b={},z=e.accept;function a(A,d){n.forEach(function(W){W.between(A,d,!0).forEach(function(g){b[Number(g)]=!0})})}M.forEach(function(A){var d=new rf(A,c).rezonedDate();b[Number(d)]=!0}),e.accept=function(A){var d=Number(A);return isNaN(d)?z.call(this,A):!b[d]&&(a(new Date(d-1),new Date(d+1)),!b[d])?(b[d]=!0,z.call(this,A)):!0},e.method==="between"&&(a(e.args.after,e.args.before),e.accept=function(A){var d=Number(A);return b[d]?!0:(b[d]=!0,z.call(this,A))});for(var s=0;s<o.length;s++){var u=new rf(o[s],c).rezonedDate();if(!e.accept(new Date(u.getTime())))break}t.forEach(function(A){OT(e,A.options)});var l=e._result;switch(TO(l),e.method){case"all":case"between":return l;case"before":return l.length&&l[l.length-1]||null;case"after":default:return l.length&&l[0]||null}}var gL={dtstart:null,cache:!1,unfold:!1,forceset:!1,compatible:!1,tzid:null};function K10(e,t){var n=[],o=[],M=[],c=[],b=of(e),z=b.dtstart,a=b.tzid,s=te0(e,t.unfold);return s.forEach(function(u){var l;if(u){var A=ee0(u),d=A.name,W=A.parms,g=A.value;switch(d.toUpperCase()){case"RRULE":if(W.length)throw new Error("unsupported RRULE parm: ".concat(W.join(",")));n.push(rm(u));break;case"RDATE":var L=(l=/RDATE(?:;TZID=([^:=]+))?/i.exec(u))!==null&&l!==void 0?l:[],R=L[1];R&&!a&&(a=R),o=o.concat(RL(g,W));break;case"EXRULE":if(W.length)throw new Error("unsupported EXRULE parm: ".concat(W.join(",")));M.push(rm(g));break;case"EXDATE":c=c.concat(RL(g,W));break;case"DTSTART":break;default:throw new Error("unsupported property: "+d)}}}),{dtstart:z,tzid:a,rrulevals:n,rdatevals:o,exrulevals:M,exdatevals:c}}function Z10(e,t){var n=K10(e,t),o=n.rrulevals,M=n.rdatevals,c=n.exrulevals,b=n.exdatevals,z=n.dtstart,a=n.tzid,s=t.cache===!1;if(t.compatible&&(t.forceset=!0,t.unfold=!0),t.forceset||o.length>1||M.length||c.length||b.length){var u=new uT(s);return u.dtstart(z),u.tzid(a||void 0),o.forEach(function(A){u.rrule(new a1(yW(A,z,a),s))}),M.forEach(function(A){u.rdate(A)}),c.forEach(function(A){u.exrule(new a1(yW(A,z,a),s))}),b.forEach(function(A){u.exdate(A)}),t.compatible&&t.dtstart&&u.rdate(z),u}var l=o[0]||{};return new a1(yW(l,l.dtstart||t.dtstart||z,l.tzid||t.tzid||a),s)}function im(e,t){return t===void 0&&(t={}),Z10(e,J10(t))}function yW(e,t,n){return N2(N2({},e),{dtstart:t,tzid:n})}function J10(e){var t=[],n=Object.keys(e),o=Object.keys(gL);if(n.forEach(function(M){Be(o,M)||t.push(M)}),t.length)throw new Error("Invalid options: "+t.join(", "));return N2(N2({},gL),e)}function Q10(e){if(e.indexOf(":")===-1)return{name:"RRULE",value:e};var t=i10(e,":",1),n=t[0],o=t[1];return{name:n,value:o}}function ee0(e){var t=Q10(e),n=t.name,o=t.value,M=n.split(";");if(!M)throw new Error("empty property name");return{name:M[0].toUpperCase(),parms:M.slice(1),value:o}}function te0(e,t){if(t===void 0&&(t=!1),e=e&&e.trim(),!e)throw new Error("Invalid empty string");if(!t)return e.split(/\s/);for(var n=e.split(` +`),o=0;o<n.length;){var M=n[o]=n[o].replace(/\s+$/g,"");M?o>0&&M[0]===" "?(n[o-1]+=M.slice(1),n.splice(o,1)):o+=1:n.splice(o,1)}return n}function ne0(e){e.forEach(function(t){if(!/(VALUE=DATE(-TIME)?)|(TZID=)/.test(t))throw new Error("unsupported RDATE/EXDATE parm: "+t)})}function RL(e,t){return ne0(t),e.split(",").map(function(n){return pR(n)})}function yL(e){var t=this;return function(n){if(n!==void 0&&(t["_".concat(e)]=n),t["_".concat(e)]!==void 0)return t["_".concat(e)];for(var o=0;o<t._rrule.length;o++){var M=t._rrule[o].origOptions[e];if(M)return M}}}var uT=function(e){zR(t,e);function t(n){n===void 0&&(n=!1);var o=e.call(this,{},n)||this;return o.dtstart=yL.apply(o,["dtstart"]),o.tzid=yL.apply(o,["tzid"]),o._rrule=[],o._rdate=[],o._exrule=[],o._exdate=[],o}return t.prototype._iter=function(n){return G10(n,this._rrule,this._exrule,this._rdate,this._exdate,this.tzid())},t.prototype.rrule=function(n){LL(n,this._rrule)},t.prototype.exrule=function(n){LL(n,this._exrule)},t.prototype.rdate=function(n){vL(n,this._rdate)},t.prototype.exdate=function(n){vL(n,this._exdate)},t.prototype.rrules=function(){return this._rrule.map(function(n){return im(n.toString())})},t.prototype.exrules=function(){return this._exrule.map(function(n){return im(n.toString())})},t.prototype.rdates=function(){return this._rdate.map(function(n){return new Date(n.getTime())})},t.prototype.exdates=function(){return this._exdate.map(function(n){return new Date(n.getTime())})},t.prototype.valueOf=function(){var n=[];return!this._rrule.length&&this._dtstart&&(n=n.concat(Mm({dtstart:this._dtstart}))),this._rrule.forEach(function(o){n=n.concat(o.toString().split(` +`))}),this._exrule.forEach(function(o){n=n.concat(o.toString().split(` +`).map(function(M){return M.replace(/^RRULE:/,"EXRULE:")}).filter(function(M){return!/^DTSTART/.test(M)}))}),this._rdate.length&&n.push(NL("RDATE",this._rdate,this.tzid())),this._exdate.length&&n.push(NL("EXDATE",this._exdate,this.tzid())),n},t.prototype.toString=function(){return this.valueOf().join(` +`)},t.prototype.clone=function(){var n=new t(!!this._cache);return this._rrule.forEach(function(o){return n.rrule(o.clone())}),this._exrule.forEach(function(o){return n.exrule(o.clone())}),this._rdate.forEach(function(o){return n.rdate(new Date(o.getTime()))}),this._exdate.forEach(function(o){return n.exdate(new Date(o.getTime()))}),n},t}(a1);function LL(e,t){if(!(e instanceof a1))throw new TypeError(String(e)+" is not RRule instance");Be(t.map(String),String(e))||t.push(e)}function vL(e,t){if(!(e instanceof Date))throw new TypeError(String(e)+" is not Date instance");Be(t.map(Number),Number(e))||(t.push(e),TO(t))}function NL(e,t,n){var o=!n||n.toUpperCase()==="UTC",M=o?"".concat(e,":"):"".concat(e,";TZID=").concat(n,":"),c=t.map(function(b){return bR(b.valueOf(),o)}).join(",");return"".concat(M).concat(c)}const oe0=Object.freeze(Object.defineProperty({__proto__:null,ALL_WEEKDAYS:ef,get Frequency(){return V1},RRule:a1,RRuleSet:uT,Weekday:dn,datetime:Hi,rrulestr:im},Symbol.toStringTag,{value:"Module"})),re0=bm(oe0),Me0={iana:["Etc/UTC"]},ie0={"Dateline Standard Time":{iana:["Etc/GMT+12"]},"UTC-11":{iana:["Etc/GMT+11"]},"Aleutian Standard Time":{iana:["America/Adak"]},"Hawaiian Standard Time":{iana:["Pacific/Honolulu"]},"Marquesas Standard Time":{iana:["Pacific/Marquesas"]},"Alaskan Standard Time":{iana:["America/Anchorage"]},"UTC-09":{iana:["Etc/GMT+9"]},"Pacific Standard Time (Mexico)":{iana:["America/Tijuana"]},"UTC-08":{iana:["Etc/GMT+8"]},"Pacific Standard Time":{iana:["America/Los_Angeles"]},"US Mountain Standard Time":{iana:["America/Phoenix"]},"Mountain Standard Time (Mexico)":{iana:["America/Mazatlan"]},"Mountain Standard Time":{iana:["America/Denver"]},"Yukon Standard Time":{iana:["America/Whitehorse"]},"Central America Standard Time":{iana:["America/Guatemala"]},"Central Standard Time":{iana:["America/Chicago"]},"Easter Island Standard Time":{iana:["Pacific/Easter"]},"Central Standard Time (Mexico)":{iana:["America/Mexico_City"]},"Canada Central Standard Time":{iana:["America/Regina"]},"SA Pacific Standard Time":{iana:["America/Bogota"]},"Eastern Standard Time (Mexico)":{iana:["America/Cancun"]},"Eastern Standard Time":{iana:["America/New_York"]},"Haiti Standard Time":{iana:["America/Port-au-Prince"]},"Cuba Standard Time":{iana:["America/Havana"]},"US Eastern Standard Time":{iana:["America/Indianapolis"]},"Turks And Caicos Standard Time":{iana:["America/Grand_Turk"]},"Paraguay Standard Time":{iana:["America/Asuncion"]},"Atlantic Standard Time":{iana:["America/Halifax"]},"Venezuela Standard Time":{iana:["America/Caracas"]},"Central Brazilian Standard Time":{iana:["America/Cuiaba"]},"SA Western Standard Time":{iana:["America/La_Paz"]},"Pacific SA Standard Time":{iana:["America/Santiago"]},"Newfoundland Standard Time":{iana:["America/St_Johns"]},"Tocantins Standard Time":{iana:["America/Araguaina"]},"E. South America Standard Time":{iana:["America/Sao_Paulo"]},"SA Eastern Standard Time":{iana:["America/Cayenne"]},"Argentina Standard Time":{iana:["America/Buenos_Aires"]},"Greenland Standard Time":{iana:["America/Godthab"]},"Montevideo Standard Time":{iana:["America/Montevideo"]},"Magallanes Standard Time":{iana:["America/Punta_Arenas"]},"Saint Pierre Standard Time":{iana:["America/Miquelon"]},"Bahia Standard Time":{iana:["America/Bahia"]},"UTC-02":{iana:["Etc/GMT+2"]},"Azores Standard Time":{iana:["Atlantic/Azores"]},"Cape Verde Standard Time":{iana:["Atlantic/Cape_Verde"]},UTC:Me0,"GMT Standard Time":{iana:["Europe/London"]},"Greenwich Standard Time":{iana:["Atlantic/Reykjavik"]},"Sao Tome Standard Time":{iana:["Africa/Sao_Tome"]},"Morocco Standard Time":{iana:["Africa/Casablanca"]},"W. Europe Standard Time":{iana:["Europe/Berlin"]},"Central Europe Standard Time":{iana:["Europe/Budapest"]},"Romance Standard Time":{iana:["Europe/Paris"]},"Central European Standard Time":{iana:["Europe/Warsaw"]},"W. Central Africa Standard Time":{iana:["Africa/Lagos"]},"Jordan Standard Time":{iana:["Asia/Amman"]},"GTB Standard Time":{iana:["Europe/Bucharest"]},"Middle East Standard Time":{iana:["Asia/Beirut"]},"Egypt Standard Time":{iana:["Africa/Cairo"]},"E. Europe Standard Time":{iana:["Europe/Chisinau"]},"Syria Standard Time":{iana:["Asia/Damascus"]},"West Bank Standard Time":{iana:["Asia/Hebron"]},"South Africa Standard Time":{iana:["Africa/Johannesburg"]},"FLE Standard Time":{iana:["Europe/Kiev"]},"Israel Standard Time":{iana:["Asia/Jerusalem"]},"South Sudan Standard Time":{iana:["Africa/Juba"]},"Kaliningrad Standard Time":{iana:["Europe/Kaliningrad"]},"Sudan Standard Time":{iana:["Africa/Khartoum"]},"Libya Standard Time":{iana:["Africa/Tripoli"]},"Namibia Standard Time":{iana:["Africa/Windhoek"]},"Arabic Standard Time":{iana:["Asia/Baghdad"]},"Turkey Standard Time":{iana:["Europe/Istanbul"]},"Arab Standard Time":{iana:["Asia/Riyadh"]},"Belarus Standard Time":{iana:["Europe/Minsk"]},"Russian Standard Time":{iana:["Europe/Moscow"]},"E. Africa Standard Time":{iana:["Africa/Nairobi"]},"Iran Standard Time":{iana:["Asia/Tehran"]},"Arabian Standard Time":{iana:["Asia/Dubai"]},"Astrakhan Standard Time":{iana:["Europe/Astrakhan"]},"Azerbaijan Standard Time":{iana:["Asia/Baku"]},"Russia Time Zone 3":{iana:["Europe/Samara"]},"Mauritius Standard Time":{iana:["Indian/Mauritius"]},"Saratov Standard Time":{iana:["Europe/Saratov"]},"Georgian Standard Time":{iana:["Asia/Tbilisi"]},"Volgograd Standard Time":{iana:["Europe/Volgograd"]},"Caucasus Standard Time":{iana:["Asia/Yerevan"]},"Afghanistan Standard Time":{iana:["Asia/Kabul"]},"West Asia Standard Time":{iana:["Asia/Tashkent"]},"Ekaterinburg Standard Time":{iana:["Asia/Yekaterinburg"]},"Pakistan Standard Time":{iana:["Asia/Karachi"]},"Qyzylorda Standard Time":{iana:["Asia/Qyzylorda"]},"India Standard Time":{iana:["Asia/Calcutta"]},"Sri Lanka Standard Time":{iana:["Asia/Colombo"]},"Nepal Standard Time":{iana:["Asia/Katmandu"]},"Central Asia Standard Time":{iana:["Asia/Bishkek"]},"Bangladesh Standard Time":{iana:["Asia/Dhaka"]},"Omsk Standard Time":{iana:["Asia/Omsk"]},"Myanmar Standard Time":{iana:["Asia/Rangoon"]},"SE Asia Standard Time":{iana:["Asia/Bangkok"]},"Altai Standard Time":{iana:["Asia/Barnaul"]},"W. Mongolia Standard Time":{iana:["Asia/Hovd"]},"North Asia Standard Time":{iana:["Asia/Krasnoyarsk"]},"N. Central Asia Standard Time":{iana:["Asia/Novosibirsk"]},"Tomsk Standard Time":{iana:["Asia/Tomsk"]},"China Standard Time":{iana:["Asia/Shanghai"]},"North Asia East Standard Time":{iana:["Asia/Irkutsk"]},"Singapore Standard Time":{iana:["Asia/Singapore"]},"W. Australia Standard Time":{iana:["Australia/Perth"]},"Taipei Standard Time":{iana:["Asia/Taipei"]},"Ulaanbaatar Standard Time":{iana:["Asia/Ulaanbaatar"]},"Aus Central W. Standard Time":{iana:["Australia/Eucla"]},"Transbaikal Standard Time":{iana:["Asia/Chita"]},"Tokyo Standard Time":{iana:["Asia/Tokyo"]},"North Korea Standard Time":{iana:["Asia/Pyongyang"]},"Korea Standard Time":{iana:["Asia/Seoul"]},"Yakutsk Standard Time":{iana:["Asia/Yakutsk"]},"Cen. Australia Standard Time":{iana:["Australia/Adelaide"]},"AUS Central Standard Time":{iana:["Australia/Darwin"]},"E. Australia Standard Time":{iana:["Australia/Brisbane"]},"AUS Eastern Standard Time":{iana:["Australia/Sydney"]},"West Pacific Standard Time":{iana:["Pacific/Port_Moresby"]},"Tasmania Standard Time":{iana:["Australia/Hobart"]},"Vladivostok Standard Time":{iana:["Asia/Vladivostok"]},"Lord Howe Standard Time":{iana:["Australia/Lord_Howe"]},"Bougainville Standard Time":{iana:["Pacific/Bougainville"]},"Russia Time Zone 10":{iana:["Asia/Srednekolymsk"]},"Magadan Standard Time":{iana:["Asia/Magadan"]},"Norfolk Standard Time":{iana:["Pacific/Norfolk"]},"Sakhalin Standard Time":{iana:["Asia/Sakhalin"]},"Central Pacific Standard Time":{iana:["Pacific/Guadalcanal"]},"Russia Time Zone 11":{iana:["Asia/Kamchatka"]},"New Zealand Standard Time":{iana:["Pacific/Auckland"]},"UTC+12":{iana:["Etc/GMT-12"]},"Fiji Standard Time":{iana:["Pacific/Fiji"]},"Chatham Islands Standard Time":{iana:["Pacific/Chatham"]},"UTC+13":{iana:["Etc/GMT-13"]},"Tonga Standard Time":{iana:["Pacific/Tongatapu"]},"Samoa Standard Time":{iana:["Pacific/Apia"]},"Line Islands Standard Time":{iana:["Pacific/Kiritimati"]},"(UTC-12:00) International Date Line West":{iana:["Etc/GMT+12"]},"(UTC-11:00) Midway Island, Samoa":{iana:["Pacific/Apia"]},"(UTC-10:00) Hawaii":{iana:["Pacific/Honolulu"]},"(UTC-09:00) Alaska":{iana:["America/Anchorage"]},"(UTC-08:00) Pacific Time (US & Canada); Tijuana":{iana:["America/Los_Angeles"]},"(UTC-08:00) Pacific Time (US and Canada); Tijuana":{iana:["America/Los_Angeles"]},"(UTC-07:00) Mountain Time (US & Canada)":{iana:["America/Denver"]},"(UTC-07:00) Mountain Time (US and Canada)":{iana:["America/Denver"]},"(UTC-07:00) Chihuahua, La Paz, Mazatlan":{iana:[null]},"(UTC-07:00) Arizona":{iana:["America/Phoenix"]},"(UTC-06:00) Central Time (US & Canada)":{iana:["America/Chicago"]},"(UTC-06:00) Central Time (US and Canada)":{iana:["America/Chicago"]},"(UTC-06:00) Saskatchewan":{iana:["America/Regina"]},"(UTC-06:00) Guadalajara, Mexico City, Monterrey":{iana:[null]},"(UTC-06:00) Central America":{iana:["America/Guatemala"]},"(UTC-05:00) Eastern Time (US & Canada)":{iana:["America/New_York"]},"(UTC-05:00) Eastern Time (US and Canada)":{iana:["America/New_York"]},"(UTC-05:00) Indiana (East)":{iana:["America/Indianapolis"]},"(UTC-05:00) Bogota, Lima, Quito":{iana:["America/Bogota"]},"(UTC-04:00) Atlantic Time (Canada)":{iana:["America/Halifax"]},"(UTC-04:00) Georgetown, La Paz, San Juan":{iana:["America/La_Paz"]},"(UTC-04:00) Santiago":{iana:["America/Santiago"]},"(UTC-03:30) Newfoundland":{iana:[null]},"(UTC-03:00) Brasilia":{iana:["America/Sao_Paulo"]},"(UTC-03:00) Georgetown":{iana:["America/Cayenne"]},"(UTC-03:00) Greenland":{iana:["America/Godthab"]},"(UTC-02:00) Mid-Atlantic":{iana:[null]},"(UTC-01:00) Azores":{iana:["Atlantic/Azores"]},"(UTC-01:00) Cape Verde Islands":{iana:["Atlantic/Cape_Verde"]},"(UTC) Greenwich Mean Time: Dublin, Edinburgh, Lisbon, London":{iana:[null]},"(UTC) Monrovia, Reykjavik":{iana:["Atlantic/Reykjavik"]},"(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague":{iana:["Europe/Budapest"]},"(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb":{iana:["Europe/Warsaw"]},"(UTC+01:00) Brussels, Copenhagen, Madrid, Paris":{iana:["Europe/Paris"]},"(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna":{iana:["Europe/Berlin"]},"(UTC+01:00) West Central Africa":{iana:["Africa/Lagos"]},"(UTC+02:00) Minsk":{iana:["Europe/Chisinau"]},"(UTC+02:00) Cairo":{iana:["Africa/Cairo"]},"(UTC+02:00) Helsinki, Kiev, Riga, Sofia, Tallinn, Vilnius":{iana:["Europe/Kiev"]},"(UTC+02:00) Athens, Bucharest, Istanbul":{iana:["Europe/Bucharest"]},"(UTC+02:00) Jerusalem":{iana:["Asia/Jerusalem"]},"(UTC+02:00) Harare, Pretoria":{iana:["Africa/Johannesburg"]},"(UTC+03:00) Moscow, St. Petersburg, Volgograd":{iana:["Europe/Moscow"]},"(UTC+03:00) Kuwait, Riyadh":{iana:["Asia/Riyadh"]},"(UTC+03:00) Nairobi":{iana:["Africa/Nairobi"]},"(UTC+03:00) Baghdad":{iana:["Asia/Baghdad"]},"(UTC+03:30) Tehran":{iana:["Asia/Tehran"]},"(UTC+04:00) Abu Dhabi, Muscat":{iana:["Asia/Dubai"]},"(UTC+04:00) Baku, Tbilisi, Yerevan":{iana:["Asia/Yerevan"]},"(UTC+04:30) Kabul":{iana:[null]},"(UTC+05:00) Ekaterinburg":{iana:["Asia/Yekaterinburg"]},"(UTC+05:00) Tashkent":{iana:["Asia/Tashkent"]},"(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi":{iana:["Asia/Calcutta"]},"(UTC+05:45) Kathmandu":{iana:["Asia/Katmandu"]},"(UTC+06:00) Astana, Dhaka":{iana:["Asia/Bishkek"]},"(UTC+06:00) Sri Jayawardenepura":{iana:["Asia/Colombo"]},"(UTC+06:00) Almaty, Novosibirsk":{iana:["Asia/Novosibirsk"]},"(UTC+06:30) Yangon (Rangoon)":{iana:["Asia/Rangoon"]},"(UTC+07:00) Bangkok, Hanoi, Jakarta":{iana:["Asia/Bangkok"]},"(UTC+07:00) Krasnoyarsk":{iana:["Asia/Krasnoyarsk"]},"(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi":{iana:["Asia/Shanghai"]},"(UTC+08:00) Kuala Lumpur, Singapore":{iana:["Asia/Singapore"]},"(UTC+08:00) Taipei":{iana:["Asia/Taipei"]},"(UTC+08:00) Perth":{iana:["Australia/Perth"]},"(UTC+08:00) Irkutsk, Ulaanbaatar":{iana:["Asia/Irkutsk"]},"(UTC+09:00) Seoul":{iana:["Asia/Seoul"]},"(UTC+09:00) Osaka, Sapporo, Tokyo":{iana:["Asia/Tokyo"]},"(UTC+09:00) Yakutsk":{iana:["Asia/Yakutsk"]},"(UTC+09:30) Darwin":{iana:["Australia/Darwin"]},"(UTC+09:30) Adelaide":{iana:["Australia/Adelaide"]},"(UTC+10:00) Canberra, Melbourne, Sydney":{iana:["Australia/Sydney"]},"(GMT+10:00) Canberra, Melbourne, Sydney":{iana:["Australia/Sydney"]},"(UTC+10:00) Brisbane":{iana:["Australia/Brisbane"]},"(UTC+10:00) Hobart":{iana:["Australia/Hobart"]},"(UTC+10:00) Vladivostok":{iana:["Asia/Vladivostok"]},"(UTC+10:00) Guam, Port Moresby":{iana:["Pacific/Port_Moresby"]},"(UTC+11:00) Magadan, Solomon Islands, New Caledonia":{iana:["Pacific/Guadalcanal"]},"(UTC+12:00) Fiji, Kamchatka, Marshall Is.":{iana:[null]},"(UTC+12:00) Auckland, Wellington":{iana:["Pacific/Auckland"]},"(UTC+13:00) Nuku'alofa":{iana:["Pacific/Tongatapu"]},"(UTC-03:00) Buenos Aires":{iana:["America/Buenos_Aires"]},"(UTC+02:00) Beirut":{iana:["Asia/Beirut"]},"(UTC+02:00) Amman":{iana:["Asia/Amman"]},"(UTC-06:00) Guadalajara, Mexico City, Monterrey - New":{iana:["America/Mexico_City"]},"(UTC-07:00) Chihuahua, La Paz, Mazatlan - New":{iana:["America/Mazatlan"]},"(UTC-08:00) Tijuana, Baja California":{iana:["America/Tijuana"]},"(UTC+02:00) Windhoek":{iana:["Africa/Windhoek"]},"(UTC+03:00) Tbilisi":{iana:["Asia/Tbilisi"]},"(UTC-04:00) Manaus":{iana:["America/Cuiaba"]},"(UTC-03:00) Montevideo":{iana:["America/Montevideo"]},"(UTC+04:00) Yerevan":{iana:[null]},"(UTC-04:30) Caracas":{iana:["America/Caracas"]},"(UTC) Casablanca":{iana:["Africa/Casablanca"]},"(UTC+05:00) Islamabad, Karachi":{iana:["Asia/Karachi"]},"(UTC+04:00) Port Louis":{iana:["Indian/Mauritius"]},"(UTC) Coordinated Universal Time":{iana:["Etc/UTC"]},"(UTC-04:00) Asuncion":{iana:["America/Asuncion"]},"(UTC+12:00) Petropavlovsk-Kamchatsky":{iana:[null]}},{v4:ce0}=rB,So=iO,be0=re0.RRule,cm=function(e=""){return e.replace(/\\,/g,",").replace(/\\;/g,";").replace(/\\[nN]/g,` +`).replace(/\\\\/g,"\\")},pe0=function(e){if(e==="TRUE")return!0;if(e==="FALSE")return!1;const t=Number(e);return Number.isNaN(t)?e:t},OR=function(e){const t={};for(const n of e)if(n.includes("=")){const o=n.split("=");t[o[0]]=pe0(o.slice(1).join("="))}return t},Mf=function(e){return function(t,n){const o=n[e];return Array.isArray(o)?(o.push(t),n):(typeof o>"u"?n[e]=t:n[e]=[o,t],n)}},zr=function(e){return function(t,n,o){const M=n&&n.length>0&&!(n.length===1&&(n[0]==="CHARSET=utf-8"||n[0]==="VALUE=TEXT"))?{params:OR(n),val:cm(t)}:cm(t);return Mf(e)(M,o)}},ze0=function(e,t){const n=OR(t);return e.tz||t&&n&&e&&(e.tz=n.TZID,e.tz!==void 0&&(e.tz=e.tz.replace(/^"(.*)"$/,"$1"))),e};let Gs=null;function ae0(e){Gs||(Gs=ie0);let t=Gs[e];if(!t&&e.includes(",")){const n=e.split(",")[0],o=Object.keys(Gs).filter(M=>!!M.includes(n));o.length>0&&(t=Gs[o[0]])}return t?t.iana[0]:null}function lT(e){let t=e,n="";if((t==="tzone://Microsoft/Custom"||t.startsWith("Customized Time Zone")||t.startsWith("tzone://Microsoft/"))&&(t=So.tz.guess()),t=t.replace(/^"(.*)"$/,"$1"),t&&(t.includes(" ")||t.includes(","))){const o=ae0(t);o&&(t=o)}if(t&&t.startsWith("(")){const o=/[+|-]\d*:\d*/;t=null,n=t.match(o)}return n===""&&(n=So.tz.names().find(o=>o===t)),n===""?t:n}function AT(e,t){return t&&t.includes("VALUE=DATE")&&!t.includes("VALUE=DATE-TIME")||/^\d{8}$/.test(e)===!0}const se0=function(e){return function(t,n,o){const M=AT(t,n)?"date":"date-time";return Mf(e)(M,o)}},cM=function(e){return function(t,n,o,M){const c=n.indexOf("TZID=tzone");c>=0&&(n[c]=n[c]+":"+t.split(":")[0],t=t.split(":")[1]);let b=cm(t);if(AT(t,n)){const a=/^(\d{4})(\d{2})(\d{2}).*$/.exec(t);if(a!==null)return b=new Date(a[1],Number.parseInt(a[2],10)-1,a[3]),b.dateOnly=!0,Mf(e)(b,o)}const z=/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})(Z)?$/.exec(t);if(z!==null)if(z[7]==="Z")b=new Date(Date.UTC(Number.parseInt(z[1],10),Number.parseInt(z[2],10)-1,Number.parseInt(z[3],10),Number.parseInt(z[4],10),Number.parseInt(z[5],10),Number.parseInt(z[6],10))),b.tz="Etc/UTC";else if(n&&n[0]&&n[0].includes("TZID=")&&n[0].split("=")[1]){let a=n[0].split("=")[1],s="",u="";if((a==="tzone://Microsoft/Custom"||a==="(no TZ description)"||a.startsWith("Customized Time Zone")||a.startsWith("tzone://Microsoft/"))&&(a=So.tz.guess(),n[0]="TZID="+a),a=a.replace(/^"(.*)"$/,"$1"),a&&(a.includes(" ")||a.includes(","))){const l=lT(a);l&&(a=l,u="",n[0]="TZID="+a)}if(a&&a.startsWith("(")){const l=/[+|-]\d*:\d*/;u=a.match(l),a=null,s=u}s===""&&(s=So.tz.names().find(l=>l===a)),b=s?So.tz(t,"YYYYMMDDTHHmmss"+u,a).toDate():new Date(Number.parseInt(z[1],10),Number.parseInt(z[2],10)-1,Number.parseInt(z[3],10),Number.parseInt(z[4],10),Number.parseInt(z[5],10),Number.parseInt(z[6],10)),b=ze0(b,n)}else{const a=(M||[]).find(l=>Object.values(l).find(A=>A.type==="VTIMEZONE"))||{},s=Object.values(a).find(({type:l})=>l==="VTIMEZONE"),u=s?Array.isArray(s.tzid)?s.tzid.slice(-1)[0]:s.tzid:null;b=u&&So.tz.zone(u)?So.tz(t,"YYYYMMDDTHHmmss",u).toDate():new Date(Number.parseInt(z[1],10),Number.parseInt(z[2],10)-1,Number.parseInt(z[3],10),Number.parseInt(z[4],10),Number.parseInt(z[5],10),Number.parseInt(z[6],10))}return Mf(e)(b,o)}},Oe0=function(e){return function(t,n,o){const M=t.split(";");return o[e]={lat:Number(M[0]),lon:Number(M[1])},o}},ue0=function(e){return function(t,n,o){return o[e]===void 0?o[e]=t?t.split(",").map(M=>M.trim()):[]:t&&(o[e]=o[e].concat(t.split(",").map(M=>M.trim()))),o}},le0=function(e){return function(t,n,o){o[e]=o[e]||[];const M=t?t.split(",").map(c=>c.trim()):[];for(const c of M){const b=[];if(cM(e)(c,n,b),b[e])if(typeof b[e].toISOString=="function")o[e][b[e].toISOString().slice(0,10)]=b[e];else throw new TypeError("No toISOString function in exdate[name]",b[e])}return o}},Ae0=function(e){return cM(e)},fe0=function(e,t){const n=OR(t);return t&&n&&(e.type=n.FBTYPE||"BUSY"),e},de0=function(e){return function(t,n,o){const M=fe0({},n);o[e]=o[e]||[],o[e].push(M);const c=t.split("/");for(const[b,z]of["start","end"].entries())cM(z)(c[b],n,M);return o}};var qe0={objectHandlers:{BEGIN(e,t,n,o){return o.push(n),{type:e,params:t}},END(e,t,n,o){const M=function(c,b,z,a){if(c==="VCALENDAR"){let u,l;const A={};for(u in z)({}).hasOwnProperty.call(z,u)&&(l=z[u],typeof l=="string"&&(A[u]=l,delete z[u]));return A.type&&(z[A.type.toLowerCase()]=A),z}const s=a.pop();if(!z.end&&(z.end=z.datetype==="date-time"?new Date(z.start.getTime()):So.utc(z.start).add(1,"days").toDate(),z.duration!==void 0)){const u={W:"weeks",D:"days",H:"hours",M:"minutes",S:"seconds"},l=z.duration.match(/-?\d{1,10}[YMWDHS]/g);let A=So.utc(z.start);const d=z.duration.startsWith("-")?-1:1;A=A.add(Number.parseInt(l,10)*d,u[l.toString().slice(-1)]),z.end=A.toDate()}if(z.uid){if(s[z.uid]===void 0)s[z.uid]=z,s.method&&(s[z.uid].method=s.method);else if(z.recurrenceid===void 0){let u;for(u in z)u!==null&&(s[z.uid][u]=z[u])}if(typeof z.recurrenceid<"u"){const u={};let l;for(l in z)l!==null&&(u[l]=z[l]);if(typeof u.recurrences<"u"&&delete u.recurrences,s[z.uid].recurrences===void 0&&(s[z.uid].recurrences={}),typeof z.recurrenceid.toISOString=="function")s[z.uid].recurrences[z.recurrenceid.toISOString().slice(0,10)]=u;else throw new TypeError("No toISOString function in curr.recurrenceid",z.recurrenceid)}z.uid!=="__proto__"&&typeof s[z.uid].rrule<"u"&&typeof s[z.uid].recurrenceid<"u"&&delete s[z.uid].recurrenceid}else if(c==="VALARM"&&(s.type==="VEVENT"||s.type==="VTODO"))s.alarms??(s.alarms=[]),s.alarms.push(z);else{const u=ce0();s[u]=z,s.method&&(s[u].method=s.method)}return s};if((e==="VEVENT"||e==="VTODO"||e==="VJOURNAL")&&n.rrule){let c=n.rrule.replace("RRULE:","");if(c=c.slice(c.lastIndexOf("FREQ=")),c.includes("DTSTART")===!1){let b=So(n.start).format("MMMM/Do/YYYY, h:mm:ss a");if(b.slice(-11)==="12:00:00 am"){const z=n.start.getTimezoneOffset();if(z<0)n.start=new Date(n.start.getTime()+Math.abs(z)*6e4);else{b=So(n.start).format("MMMM/Do/YYYY");const a=/^(\d{2})\/(\d{2})\/(\d{4})/.exec(b);a&&(n.start=new Date(a[3],a[1]-1,a[2]))}}if(n.start&&typeof n.start.toISOString=="function")try{if(n.start.tz){const z=lT(n.start.tz);c+=`;DTSTART;TZID=${z}:${n.start.toISOString().replace(/[-:]/g,"")}`}else c+=`;DTSTART=${n.start.toISOString().replace(/[-:]/g,"")}`;c=c.replace(/\.\d{3}/,"")}catch(z){throw new Error("ERROR when trying to convert to ISOString",z)}else throw new Error("No toISOString function in curr.start",n.start)}try{n.rrule=be0.fromString(c)}catch(b){throw b}}return M.call(this,e,t,n,o)},SUMMARY:zr("summary"),DESCRIPTION:zr("description"),URL:zr("url"),UID:zr("uid"),LOCATION:zr("location"),DTSTART(e,t,n,o){return n=cM("start")(e,t,n,o),se0("datetype")(e,t,n)},DTEND:cM("end"),EXDATE:le0("exdate")," CLASS":zr("class"),TRANSP:zr("transparency"),GEO:Oe0("geo"),"PERCENT-COMPLETE":zr("completion"),COMPLETED:cM("completed"),CATEGORIES:ue0("categories"),FREEBUSY:de0("freebusy"),DTSTAMP:cM("dtstamp"),CREATED:cM("created"),"LAST-MODIFIED":cM("lastmodified"),"RECURRENCE-ID":Ae0("recurrenceid"),RRULE(e,t,n,o,M){return n.rrule=M,n}},handleObject(e,t,n,o,M,c){return this.objectHandlers[e]?this.objectHandlers[e](t,n,o,M,c):/X-[\w-]+/.test(e)&&M.length>0?(e=e.slice(2),zr(e)(t,n,o,M,c)):zr(e.toLowerCase())(t,n,o)},parseLines(e,t,n,o,M,c){!c&&typeof n=="function"&&(c=n,n=void 0),n=n||{},o=o||[];let b=0,z=M||0;for(let a=e.length;z<a;z++){let s=e[z];for(;e[z+1]&&/[ \t]/.test(e[z+1][0]);)s+=e[z+1].slice(1),z++;s.indexOf("TZID=")&&!s.includes('"(')&&(s=s.replace(/"/g,""));const u=/^([\w\d-]+)((?:;[\w\d-]+=(?:(?:"[^"]*")|[^":;]+))*):(.*)$/;let l=s.match(u);if(l===null)continue;l=l.slice(1);const A=l[l.length-1],d=l[0],W=l[1]?l[1].split(";").slice(1):[];if(n=this.handleObject(d,A,W,n,o,s)||{},++b>t)break}if(z>=e.length&&(delete n.type,delete n.params),c)z<e.length?setImmediate(()=>{this.parseLines(e,t,n,o,z+1,c)}):setImmediate(()=>{c(null,n)});else return n},parseICS(e,t){const n=e.split(/\r?\n/);let o;if(t)this.parseLines(n,2e3,t);else return o=this.parseLines(n,n.length),o}};const fT=TV,he0=KG,ki=qe0;function uR(e,t){const n=new Promise(e);if(!t)return n;n.then(o=>{t(null,o)}).catch(o=>{t(o,null)})}const bu={},cb={},cf={};cb.fromURL=function(e,t,n){return uR((o,M)=>{he0.get(e,t).then(c=>{if(Math.floor(c.status/100)!==2){M(new Error(`${c.status} ${c.statusText}`));return}return c.data}).then(c=>{ki.parseICS(c,(b,z)=>{if(b){M(b);return}o(z)})}).catch(c=>{M(c)})},n)};cb.parseFile=function(e,t){return uR((n,o)=>{fT.readFile(e,"utf8",(M,c)=>{if(M){o(M);return}ki.parseICS(c,(b,z)=>{if(b){o(b);return}n(z)})})},t)};cb.parseICS=function(e,t){return uR((n,o)=>{ki.parseICS(e,(M,c)=>{if(M){o(M);return}n(c)})},t)};bu.parseFile=function(e){const t=fT.readFileSync(e,"utf8");return ki.parseICS(t)};bu.parseICS=function(e){return ki.parseICS(e)};cf.parseFile=function(e,t){if(!t)return bu.parseFile(e);cb.parseFile(e,t)};cf.parseICS=function(e,t){if(!t)return bu.parseICS(e);cb.parseICS(e,t)};var We0={fromURL:cb.fromURL,parseFile:cf.parseFile,parseICS:cf.parseICS,sync:bu,async:cb,objectHandlers:ki.objectHandlers,handleObject:ki.handleObject,parseLines:ki.parseLines};const me0=WT(We0);function ge0(e,t){return e.rrule?e.rrule.options.until===null||e.rrule.options.until>t:e.end>t}function Re0(e,t){return e.recurrences?Object.hasOwn(e.recurrences,dT(t)):!1}function dT(e){return C0(e).format(SS)}function ye0(e,t){return e.exdate?Object.keys(e.exdate).includes(dT(t)):!1}function Le0(e,t){var M;if(e.rrule){const c=t.clone().startOf("day").toDate(),b=t.clone().endOf("day").toDate(),z=Object.values((e==null?void 0:e.recurrences)||{}).map(s=>LW({...s,calendar:e.calendar},s.start));return[...(M=e.rrule)==null?void 0:M.between(c,b).filter(s=>!Re0(e,s)&&!ye0(e,s)).map(s=>LW(e,s)),...z]}const n=window.moment(e.start);if(t.isSame(n,"day"))return LW(e,e.start)}function LW(e,t){var z,a;let n=window.moment(t);const o=(a=(z=e.rrule)==null?void 0:z.origOptions)==null?void 0:a.tzid;o&&(n=we0(o,e.start,t),n=Ne0(o,n.toDate()));const M=e.datetype==="date",c=ve0(e,e.calendar.email),b={id:Fz(),calendar:e.calendar,summary:e.summary||"(No title)",startTime:n,rsvpStatus:c};return M?{...b,isAllDayEvent:!0}:{...b,isAllDayEvent:!1,durationMinutes:(e.end.getTime()-e.start.getTime())/1e3/60}}function ve0(e,t){if(!(t!=null&&t.trim()))return O8;const n=Zm(e.attendee).find(o=>typeof o!="string"&&(o==null?void 0:o.params.CN)===t);if(typeof n=="string")throw new Error("Unexpected attendee format");return(n==null?void 0:n.params.PARTSTAT)||O8}function Ne0(e,t){const n=iO.tz.guess();if(e===n)return C0(t);const o=iO.tz.zone(n),M=iO.tz.zone(e);if(!o||!M)return C0(t);const c=o.utcOffset(t.getTime())-M.utcOffset(t.getTime());return C0(t).add(c,"minutes")}function we0(e,t,n){const o=iO.tz.zone(e);if(!o)return C0(n);const M=o.utcOffset(n.getTime())-o.utcOffset(t.getTime());return C0(n).add(M,"minutes")}const wL=window.requestIdleCallback||((e,t)=>{const n=t||{},o=1,M=n.timeout||o,c=performance.now();return window.setTimeout(()=>{e({get didTimeout(){return n.timeout?!1:performance.now()-c-o>M},timeRemaining:function(){return Math.max(0,o+(performance.now()-c))}})},o)}),De0=window.cancelIdleCallback||(e=>{clearTimeout(e)});function Be0(e){let n=[],o=[],M=null;function c(z){for(;(z.timeRemaining()>10||z.didTimeout)&&o.length>0;){const a=o.shift();a&&n.push(a())}o.length>0?M=wL(c):(performance.mark("batch-end"),e(n),M=null)}function b(z){performance.mark("batch-start"),M&&(De0(M),M=null),o=z,n=[],M=wL(c)}return{enqueueTasks:b}}function Te0(e){return e.type==="VEVENT"}function _e0(e){const{settings:t,refreshSignal:n,isOnline:o,visibleDays:M}=e,c=new Map,b=G1(t,u=>u.icals),z=G1([b,o,n],([u,l],A)=>{if(!l)return;const d=u.filter(W=>W.url.trim().length>0).map(W=>$0.request({url:W.url}).then(g=>{const L=me0.parseICS(g),R=Object.values(L).filter(Te0).map(E=>({...E,calendar:W}));return c.set(W.url,R),R}).catch(()=>c.get(W.url)||[]));Promise.all(d).then(W=>{const g=W.flat();A(g)})}),a=G1([z,M],([u,l])=>{if(me.isEmpty(u)||me.isEmpty(l))return[];const d=Ux(l).clone().startOf("day").toDate();return u.filter(g=>ge0(g,d)).flatMap(g=>l.map(L=>()=>Le0(g,L)))}),s=no([],u=>{const l=Be0(u);return a.subscribe(l.enqueueTasks)});return G1(s,u=>u.flat().filter(l=>!!l))}function DL(){return document.body.hasClass("theme-dark")}function Ee0(e){const{settingsStore:t,combinedIcalSyncTrigger:n,isOnline:o,visibleDays:M,layoutReady:c,debouncedTaskUpdateTrigger:b,dataviewFacade:z,app:a,dataviewSource:s,currentTime:u,taskUpdateTrigger:l,keyDown:A,workspaceFacade:d,pointerDateTime:W,onUpdate:g}=e,L=_e0({settings:t,refreshSignal:n,isOnline:o,visibleDays:M}),R=yV(c,b,M),E=dV({visibleDailyNotes:R,debouncedTaskUpdateTrigger:b,dataviewFacade:z,metadataCache:a.metadataCache,settings:t}),k=mV({refreshSignal:b,dataviewSource:s,dataviewFacade:z}),B=gV({dataviewTasks:k}),I=G1([B,u],([Z,j])=>Z.map(t0=>({...t0,durationMinutes:Kc(j,t0.startTime.clone().startOf("minute")),truncated:"bottom"}))),S=G1([k,I],([Z,j])=>{const t0=Z.filter(wN).flatMap(fF).map(aF).concat(j);return me.groupBy(({startTime:O0})=>xi(O0),t0)});function N(Z){return G1(S,j=>{const t0=j[xi(Z)]||[];return me.flow(me.uniqBy(qO),SD)(t0)})}const P=Yj({listsFromVisibleDailyNotes:E,tasksFromExtraSources:k,settingsStore:t}),J=NV(P,M),K=G1([J,L,u],([Z,j,t0])=>[...Z,...j].filter(O0=>O0.startTime.isSame(t0,"day")&&Bf(O0))),V=WV({dataviewFacade:z,dataviewSource:s,taskUpdateTrigger:l,keyDown:A}),x=aV({workspaceFacade:d,onUpdate:g,settings:t,localTasks:J,remoteTasks:L,pointerDateTime:W}),e0=hV({settings:t,tasksForToday:K,currentTime:u});return{tasksWithActiveClockProps:B,getDisplayedTasksWithClocksForTimeline:N,tasksForToday:K,search:V,editContext:x,newlyStartedTasks:e0}}function Se0({app:e,dataviewFacade:t,workspaceFacade:n,settingsStore:o,onUpdate:M,currentTime:c}){const b=G1(o,Z=>Z.dataviewSource),z=no(!1,Z=>{e.workspace.onLayoutReady(()=>Z(!0))}),a=xn({}),s=no(DL(),Z=>{const j=e.workspace.on("css-change",()=>{Z(DL())});return()=>{e.workspace.offref(j)}}),u=Em(s),l=OV(),A=qV(),d=sV(),W=$j(e.metadataCache),g=Hj(e),L=no(Ri(),Z=>{const j=setInterval(()=>{Z(Ri())},IS);return()=>{clearInterval(j)}}),R=xn(),E=G1([L,R],Ri),k=oj(),B=wV(k.ranges),I=xn(),S=G1([W,b,I],Ri),N=kD(S,l,FS),{tasksWithActiveClockProps:P,getDisplayedTasksWithClocksForTimeline:J,tasksForToday:K,search:V,editContext:x,newlyStartedTasks:e0}=Ee0({settingsStore:o,combinedIcalSyncTrigger:E,isOnline:d,visibleDays:B,layoutReady:z,debouncedTaskUpdateTrigger:N,dataviewFacade:t,app:e,dataviewSource:b,currentTime:c,taskUpdateTrigger:S,keyDown:l,workspaceFacade:n,onUpdate:M,pointerDateTime:a});return{tasksWithActiveClockProps:P,editContext:x,tasksForToday:K,dataviewLoaded:g,newlyStartedTasks:e0,isModPressed:A,icalSyncTrigger:R,dataviewSyncTrigger:I,isOnline:d,isDarkMode:u,search:V,dateRanges:k,pointerDateTime:a,getDisplayedTasksWithClocksForTimeline:J}}const ke0=e=>(t,n)=>{const o=new $0.Component;return t.empty(),$0.MarkdownRenderer.render(e,n,t,"/",o).then(()=>o.load(),M=>console.error("Failed to render markdown. ",M)),()=>o.unload()},Xe0=e=>(t,n,o=0)=>{if(!e.internalPlugins.plugins["page-preview"].enabled)return;const M={scroll:o};e.workspace.trigger("link-hover",{},t,n,"",M)};function Ce0(e,t){if(e.length===0)return;const n=e[0],o=qz(n),M=xN(N1(n.startTime),n.durationMinutes,t.timestampFormat);new Notification(`Task started: ${o} +${M}`)}class xe0 extends $0.Plugin{constructor(){super(...arguments),this.initWeeklyLeaf=async()=>{await this.app.workspace.getLeaf("tab").setViewState({type:Yl,active:!0})},this.initTimelineLeafSilently=async()=>{this.app.workspace.onLayoutReady(async()=>{var n;const[t]=this.app.workspace.getLeavesOfType(nM);t||(await this.detachLeavesOfType(nM),await((n=this.app.workspace.getRightLeaf(!1))==null?void 0:n.setViewState({type:nM})))})},this.initTimelineLeaf=async()=>{var n;const[t]=this.app.workspace.getLeavesOfType(nM);if(t){this.app.workspace.revealLeaf(t);return}await this.detachLeavesOfType(nM),await((n=this.app.workspace.getRightLeaf(!1))==null?void 0:n.setViewState({type:nM,active:!0})),this.app.workspace.rightSplit.expand()},this.showReleaseNotes=async()=>{await this.app.workspace.getLeaf("tab").setViewState({type:ZW,active:!0})},this.getSTaskUnderCursor=t=>{l1.isInstanceOf(t,$0.MarkdownView,"You can only get tasks from markdown editor views");const n=t.file;l1.isNotVoid(n,"There is no file for view");const o=this.dataviewFacade.getTaskAtLine({path:n.path,line:t.editor.getCursor().line});return l1.isNotVoid(o,"There is no task under cursor"),o}}async onload(){await this.initSettingsStore();const t=iI(this.app);this.vaultFacade=new MI(this.app.vault,t),this.transationWriter=new QF(this.vaultFacade),this.workspaceFacade=new oI(this.app.workspace,this.vaultFacade),this.dataviewFacade=new $F(this.app),this.sTaskEditor=new rI(this.workspaceFacade,this.vaultFacade,this.dataviewFacade),this.registerViews(),this.registerCommands(),this.addRibbonIcon("calendar-range","Open Timeline",this.initTimelineLeaf),this.addRibbonIcon("table-2","Open Multi-Day View",this.initWeeklyLeaf),this.addSettingTab(new Mj(this,this.settingsStore)),await this.handleNewPluginVersion(),await this.initTimelineLeafSilently()}async onunload(){return Promise.all([this.detachLeavesOfType(nM),this.detachLeavesOfType(Yl)])}async handleNewPluginVersion(){this.settings().pluginVersion!=="0.27.0"&&(this.settingsStore.update(t=>({...t,pluginVersion:"0.27.0"})),this.settings().releaseNotes&&this.app.workspace.onLayoutReady(async()=>{await this.showReleaseNotes()}))}registerCommands(){this.addCommand({id:"show-day-planner-timeline",name:"Show timeline",callback:async()=>await this.initTimelineLeaf()}),this.addCommand({id:"show-weekly-view",name:"Show week planner",callback:this.initWeeklyLeaf}),this.addCommand({id:"show-multi-day-view",name:"Show multi-day planner",callback:this.initWeeklyLeaf}),this.addCommand({id:"show-day-planner-today-note",name:"Open today's Day Planner",callback:async()=>{const t=await A6(window.moment());await this.app.workspace.getLeaf(!1).openFile(t)}}),this.addCommand({id:"reorder-tasks-by-time",name:"Sort tasks under cursor by time",editorCallback:t=>{const n=fO(t.getValue()),o=PF(t.getCursor()),M=n.children.find(z=>z.position&&IF(z.position,o));if(!M){new $0.Notice("There is no list under cursor");return}const c=ng(M,IN),b=tg(c).trim();l1.isNotVoid(c.position),t.replaceRange(b,V8(c.position.start),V8(c.position.end))}}),this.addCommand({id:"clock-in",icon:"play",name:"Clock in",editorCallback:this.sTaskEditor.clockInUnderCursor}),this.addCommand({icon:"square",id:"clock-out",name:"Clock out",editorCallback:this.sTaskEditor.clockOutUnderCursor}),this.addCommand({icon:"trash-2",id:"cancel-clock",name:"Cancel clock",editorCallback:this.sTaskEditor.cancelClockUnderCursor})}async initSettingsStore(){const t={...Xm,...await this.loadData()};ue.set(t),this.register(ue.subscribe(async n=>{await this.saveData(n)})),this.settingsStore=ue,this.settings=()=>Ze(ue)}async detachLeavesOfType(t){await this.app.workspace.detachLeavesOfType(t)}getPathsToCreate(t){return t.reduce((n,o)=>this.vaultFacade.checkFileExists(o)?n:n.concat(o),[])}registerViews(){const t=()=>{var B;new $0.Notice("Edit canceled"),(B=this.syncDataview)==null||B.call(this)},n=async(B,I,S)=>{var e0;const N=eI(B,I);if(S===D1.CREATE){const Z=N.added[0];l1.isNotVoid(Z);const j=await new Promise(t0=>{new ij({app:this.app,getDescriptionText:O0=>O0.trim().length===0?"Start typing to create a task":`Create item "${O0}"`,onChooseSuggestion:async({text:O0})=>{t0(O0)},onClose:()=>{t0(void 0)}}).open()});if(!j){t();return}N.added[0]={...Z,text:j}}const P=tI(N,S,this.settings()),J=this.settings().sortTasksInPlanAfterEdit?Z=>og(Z,this.settings().plannerHeading,kF):void 0,K=VF({updates:P,afterEach:J,settings:this.settings()}),V=[...new Set([...K.map(({path:Z})=>Z)])],x=this.getPathsToCreate(V);if(x.length>0){if(!await dI({app:this.app,title:"Need to create files",text:`The following files need to be created: ${x.join("; ")}`,cta:"Create"})){t();return}await Promise.all(x.map(async j=>{const t0=bf(j,"day");l1.isNotVoid(t0),await pm(t0)}))}await this.transationWriter.writeTransaction(K),(e0=this.currentUndoNotice)==null||e0.hide(),this.currentUndoNotice=_j(this.transationWriter.undo)},{editContext:o,tasksForToday:M,dataviewLoaded:c,isModPressed:b,newlyStartedTasks:z,icalSyncTrigger:a,isOnline:s,isDarkMode:u,dateRanges:l,dataviewSyncTrigger:A,search:d,pointerDateTime:W,tasksWithActiveClockProps:g,getDisplayedTasksWithClocksForTimeline:L}=Se0({app:this.app,dataviewFacade:this.dataviewFacade,workspaceFacade:this.workspaceFacade,settingsStore:this.settingsStore,onUpdate:n,currentTime:ZO});this.syncDataview=()=>A.set({}),this.registerDomEvent(window,"blur",o.cancelEdit),this.registerDomEvent(document,"pointerup",o.cancelEdit),this.register(o.cursor.subscribe(({bodyCursor:B})=>{document.body.style.cursor=B})),this.registerEvent(this.app.workspace.on("editor-menu",(B,I,S)=>{let N;try{N=this.getSTaskUnderCursor(S)}catch{return}B.addSeparator(),Km(N)?(B.addItem(P=>{P.setTitle("Clock out").setIcon("square").onClick(this.sTaskEditor.clockOutUnderCursor)}),B.addItem(P=>{P.setTitle("Cancel clock").setIcon("trash").onClick(this.sTaskEditor.cancelClockUnderCursor)})):B.addItem(P=>{P.setTitle("Clock in").setIcon("play").onClick(this.sTaskEditor.clockInUnderCursor)})}));const R=xn();RA(AI,{target:this.addStatusBarItem(),props:{onClick:this.initTimelineLeaf,tasksForToday:M,errorStore:R}}),this.register(z.subscribe(B=>Ce0(B,this.settings()))),this.addCommand({id:"re-sync",name:"Re-sync tasks",callback:async()=>{a.set(Ri())}}),this.addCommand({id:"jump-to-active-clock",name:"Jump to active clock",callback:()=>{var N,P;const B=Ze(g);if(B.length===0){new $0.Notice("No active clocks found");return}const I=B[0],{location:S}=I;l1.isNotVoid(S),this.workspaceFacade.revealLineInFile(S.path,(P=(N=S.position)==null?void 0:N.start)==null?void 0:P.line)}});const E={search:d,sTaskEditor:this.sTaskEditor,workspaceFacade:this.workspaceFacade,initWeeklyView:this.initWeeklyLeaf,refreshTasks:this.dataviewFacade.getAllTasksFrom,dataviewLoaded:c,renderMarkdown:ke0(this.app),toggleCheckboxInFile:this.vaultFacade.toggleCheckboxInFile,editContext:o,showPreview:Xe0(this.app),isModPressed:b,reSync:()=>a.set(Ri()),isOnline:s,isDarkMode:u,settings:ue,settingsSignal:Em(ue),pointerDateTime:W,tasksWithActiveClockProps:g,getDisplayedTasksWithClocksForTimeline:L},k=new Map([[S7,E],[ES,R]]);this.registerView(nM,B=>new Tj(B,this.settings,k,l)),this.registerView(Yl,B=>new P6(B,this.settingsStore,k,l)),this.registerView(ZW,B=>new rj(B))}}exports.default=xe0; + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-day-planner/manifest.json b/.obsidian/plugins/obsidian-day-planner/manifest.json new file mode 100644 index 0000000..5ced78e --- /dev/null +++ b/.obsidian/plugins/obsidian-day-planner/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "obsidian-day-planner", + "name": "Day Planner", + "version": "0.27.0", + "minAppVersion": "0.16.0", + "description": "A day planner with clean UI and readable syntax", + "author": "James Lynch, continued by Ivan Lednev", + "authorUrl": "https://github.com/ivan-lednev", + "fundingUrl": "https://www.buymeacoffee.com/machineelf", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/obsidian-day-planner/styles.css b/.obsidian/plugins/obsidian-day-planner/styles.css new file mode 100644 index 0000000..a03a2e7 --- /dev/null +++ b/.obsidian/plugins/obsidian-day-planner/styles.css @@ -0,0 +1,9 @@ +.root.svelte-1grib6a{display:contents}.pill-icon{width:var(--size-4-3);height:var(--size-4-3)}.pill.svelte-w634mr{display:inline-flex;gap:var(--size-4-1);align-items:center;padding:var(--size-2-1) var(--size-4-2);font-size:var(--font-ui-smaller);color:var(--tag-color);white-space:nowrap;background-color:var(--tag-background);border-radius:var(--radius-m)}.view-header-nav-buttons.svelte-zd0ihh{display:flex;gap:var(--size-4-1)}.clickable-icon.svelte-1pdjptp{color:var(--color, var(--icon-color));white-space:nowrap;border:var(--control-button-border, none)}.hours-container.svelte-l1k23m{position:sticky;z-index:5;left:0;display:flex;flex:0 0 30px;flex-direction:column;height:fit-content;background-color:var(--background-primary);border-right:1px solid var(--background-modifier-border);box-shadow:var(--ruler-box-shadow, none)}.hour.svelte-l1k23m{display:flex;flex:1 0 0;border-bottom:1px solid var(--background-modifier-border)}.hour-number-container.svelte-l1k23m{display:flex;flex:0 0 30px;align-self:flex-start;justify-content:center;font-size:var(--nav-item-size);color:var(--text-muted)}.scroller.svelte-f6k6y4{overflow:auto;display:flex;flex:1 0 0;background-color:var(--background-secondary)}.callout-wrapper.svelte-1ewqwvu .planner-callout-icon{color:rgb(var(--callout-color))}.callout-wrapper.svelte-1ewqwvu{--callout-opacity: .1;display:flex;gap:var(--size-4-1);margin-inline:var(--callout-margin-inline);padding:var(--size-4-2);color:rgb(var(--callout-color));background-color:rgba(var(--callout-color),var(--callout-opacity));border-radius:var(--radius-s)}.callout-wrapper.svelte-1ewqwvu .svg-icon{flex-shrink:0}.setting-item.svelte-ysxaf1{padding:var(--size-2-3) 0}.setting-item-name.svelte-ysxaf1{font-size:var(--font-ui-small)}.dataview-source.svelte-1m3ab8g{display:flex;flex-direction:column;gap:var(--size-4-2);font-size:var(--font-ui-small);color:var(--text-muted)}.dataview-source.svelte-1m3ab8g input:where(.svelte-1m3ab8g){font-family:var(--font-monospace)}.error-message.svelte-1m3ab8g{overflow-x:auto;margin-block:0;padding:var(--size-4-1);border:1px solid var(--text-error);border-radius:var(--radius-s)}.controls-section.svelte-1m3ab8g{margin:var(--size-4-2) 0;font-size:var(--font-ui-small);font-weight:var(--font-medium)}.settings.svelte-1m3ab8g,.dataview-source.svelte-1m3ab8g{margin-inline:var(--size-4-3)}.column.svelte-456hjm{position:relative;flex:1 0 var(--timeline-flex-basis);height:fit-content;background-color:var( --column-background-color, var(--background-secondary) );border-right:1px solid var(--background-modifier-border)}.hour-block.svelte-456hjm{flex:1 0 0;border-bottom:1px solid var(--background-modifier-border)}.half-hour-separator.svelte-456hjm{border-bottom:1px dashed var(--background-modifier-border)}.clickable-icon.svelte-1bnee9v{padding:var(--size-2-2) var(--size-4-2);border-radius:0}.circle.svelte-kovjwo{padding:var(--size-4-1);opacity:.3;background-color:var(--color-accent);border-radius:50%}.expanding-controls.svelte-kovjwo{overflow:hidden;display:flex;flex-direction:var(--expanding-controls-flex-direction, row);align-items:center;justify-content:center;min-width:32px;min-height:32px;border-radius:4px}.active.svelte-kovjwo{min-width:auto;min-height:auto;background-color:var(--background-primary);border:1px solid var(--background-modifier-border)}.floating-ui.svelte-13xxfh4{position:absolute;z-index:9999;top:0;left:0;width:max-content}.day-planner-task-decoration{margin:0 .25em;padding:.1em .25em;font-size:var(--tag-size);font-weight:var(--tag-weight);line-height:1;color:var(--tag-color);text-decoration:var(--tag-decoration);background-color:var(--tag-background);border-radius:var(--radius-s)}.rendered-markdown.svelte-16dqlil{--checkbox-size: var(--font-ui-small);flex:1 0 0;padding:var(--size-2-1) var(--size-4-1);color:var(--text-normal)}.rendered-markdown.svelte-16dqlil p,.rendered-markdown.svelte-16dqlil ul{margin-block:0}.rendered-markdown.svelte-16dqlil ul,.rendered-markdown.svelte-16dqlil ol{padding-inline-start:20px}.rendered-markdown.svelte-16dqlil input[type=checkbox]{top:2px;margin-inline-end:4px;border-color:var(--text-muted)}.rendered-markdown.svelte-16dqlil li{color:var(--text-normal)}.rendered-markdown.svelte-16dqlil li.task-list-item[data-task=x],.rendered-markdown.svelte-16dqlil li.task-list-item[data-task=X]{color:var(--text-muted)}.padding.svelte-1cq6n2d{position:var(--time-block-position, static);top:var(--time-block-top, 0);left:var(--time-block-left, 0);display:flex;width:var(--time-block-width, 100%);height:var(--time-block-height, auto);padding:var(--time-block-padding, 0 1px 2px);transition:.05s linear}.content.svelte-1cq6n2d{position:relative;flex:1 0 0;font-size:var(--font-ui-small);text-align:left;overflow-wrap:anywhere;white-space:normal;border:1px solid var(--time-block-border-color, var(--color-base-50));border-radius:var(--radius-s);box-shadow:1px 1px 2px #0000001f}.truncated-bottom.svelte-1cq6n2d{border-bottom-style:dashed;border-bottom-right-radius:0;border-bottom-left-radius:0}.needle.svelte-cgn4an{height:2px;background-color:var(--color-accent)}.ball.svelte-cgn4an{position:absolute;z-index:1000;width:12px;height:12px;margin-top:-5px;margin-left:-6px;background:var(--color-accent);border-radius:50%}.calendar-name.svelte-1xjmze5{color:var(--text-muted)}.remote-task-content.svelte-1xjmze5{display:flex;flex:1 0 0;flex-direction:column;height:100%;padding:var(--size-2-1) var(--size-4-1);padding-left:calc(4px + var(--size-4-2));color:var(--text-normal)}.ribbon.svelte-1xjmze5{position:absolute;top:var(--size-2-1);bottom:var(--size-2-1);left:var(--size-2-1);width:var(--size-4-1);background-color:var(--ribbon-color);border-radius:var(--radius-s)}.declined.svelte-1xjmze5{background-color:inherit;border-right:2px solid var(--ribbon-color)}.ribbon.tentative.svelte-1xjmze5{background:repeating-linear-gradient(45deg,var(--ribbon-color),var(--ribbon-color) 5px,transparent 5px,transparent 10px);border-right:1px solid var(--ribbon-color)}.summary.declined.svelte-1xjmze5{color:var(--text-muted);text-decoration:line-through}.tasks.svelte-wfuxso{top:0;bottom:0;display:flex;flex-direction:column;margin-right:10px;margin-left:10px}.unscheduled-task-container{padding:var(--size-2-1) var(--size-4-1)}.header-row{position:relative;display:flex}.day-buttons.svelte-8axcq1{font-size:var(--font-ui-small)}.controls-sidebar.svelte-8axcq1{display:flex;grid-column:2;grid-row:1 / 3;flex-direction:column;gap:var(--size-4-2);padding:var(--size-4-2) var(--size-4-1);border-left:1px solid var(--background-modifier-border)}.multiday-main-content{grid-row:2}.corner.svelte-8axcq1{position:sticky;z-index:100;top:0;left:0;flex:0 0 var(--time-ruler-width);background-color:var(--background-primary);border:1px solid var(--background-modifier-border);border-top:none;border-left:none}.header.svelte-8axcq1{--cell-flex-basis: calc( var(--timeline-flex-basis) * var(--timeline-internal-column-count, 1) );position:relative;z-index:1000;overflow-x:hidden;display:flex;flex-direction:column;box-shadow:var(--shadow-bottom)}.header-cell.svelte-8axcq1{overflow-x:hidden;flex:1 0 var(--cell-flex-basis);width:var(--cell-flex-basis);background-color:var(--background-primary);border-right:1px solid var(--background-modifier-border);border-bottom:1px solid var(--background-modifier-border)}.header-cell.svelte-8axcq1:last-of-type{flex:1 0 calc(var(--cell-flex-basis) + var(--scrollbar-width));border-right:none}.today.svelte-8axcq1{color:#fff;background-color:var(--color-accent)}.side-controls-container.svelte-8axcq1{grid-column:3;grid-row:span 2;width:min(320px,50vw);border-left:1px solid var(--background-modifier-border)}.search-results-scroller.svelte-1jzfqa{overflow-y:auto}.search-results.svelte-1jzfqa{display:flex;flex-direction:column;margin:var(--size-4-2) var(--size-4-3);background-color:var( --search-results-bg-color, var(--background-secondary) );border:1px solid var(--background-modifier-border);border-radius:var(--radius-s)}.search-result.svelte-1jzfqa:not(:where(.svelte-1jzfqa):last-child){border-bottom:1px solid var(--background-modifier-border)}.properties-wrapper.svelte-zowwmd{display:flex;gap:var(--size-4-1);align-items:center;padding:var(--size-4-1)}.tree-container.svelte-1yd9zwp{display:flex;flex:var(--flex);flex-direction:column}.tree-item-inner.svelte-1yd9zwp{font-weight:var(--font-medium)}.tree-item-self.svelte-1yd9zwp{margin-bottom:0;border-radius:0}.active-filter{color:var(--text-success)}.today,.today:hover{background-color:var(--color-accent)}.date.today.svelte-1u6zhce{color:#fff}.mod-error{color:var(--text-error)}.pill-wrapper.svelte-1u6zhce{padding-bottom:var(--size-4-2)}.pill-wrapper.svelte-1u6zhce,.header.svelte-1u6zhce{padding-inline:var(--size-4-3)}.header.svelte-1u6zhce{display:flex;justify-content:space-between;padding-block:var(--size-4-2)}.date.svelte-1u6zhce{display:flex;align-items:center;justify-content:center;font-size:var(--font-ui-small);font-weight:var(--font-medium);color:var(--text-normal)}.controls.svelte-1u6zhce{overflow:hidden;display:flex;flex:0 0 auto;flex-direction:column;font-size:var(--font-ui-small)}.day-controls.svelte-1u6zhce{display:flex;gap:var(--size-4-1);justify-content:space-between}.controls.svelte-8um20a{position:relative;z-index:1000;box-shadow:var(--shadow-bottom)}.controls.svelte-8um20a>*{border-bottom:1px solid var(--background-modifier-border)}.timeline-box{display:flex;flex-direction:column}/*! + * OverlayScrollbars + * Version: 2.10.0 + * + * Copyright (c) Rene Haas | KingSora. + * https://github.com/KingSora + * + * Released under the MIT license. + */.os-size-observer,.os-size-observer-listener{scroll-behavior:auto!important;direction:inherit;pointer-events:none;overflow:hidden;visibility:hidden;box-sizing:border-box}.os-size-observer,.os-size-observer-listener,.os-size-observer-listener-item,.os-size-observer-listener-item-final{writing-mode:horizontal-tb;position:absolute;left:0;top:0}.os-size-observer{z-index:-1;contain:strict;display:flex;flex-direction:row;flex-wrap:nowrap;padding:inherit;border:inherit;box-sizing:inherit;margin:-133px;top:0;right:0;bottom:0;left:0;transform:scale(.1)}.os-size-observer:before{content:"";flex:none;box-sizing:inherit;padding:10px;width:10px;height:10px}.os-size-observer-appear{animation:os-size-observer-appear-animation 1ms forwards}.os-size-observer-listener{box-sizing:border-box;position:relative;flex:auto;padding:inherit;border:inherit;margin:-133px;transform:scale(10)}.os-size-observer-listener.ltr{margin-right:-266px;margin-left:0}.os-size-observer-listener.rtl{margin-left:-266px;margin-right:0}.os-size-observer-listener:empty:before{content:"";width:100%;height:100%}.os-size-observer-listener:empty:before,.os-size-observer-listener>.os-size-observer-listener-item{display:block;position:relative;padding:inherit;border:inherit;box-sizing:content-box;flex:auto}.os-size-observer-listener-scroll{box-sizing:border-box;display:flex}.os-size-observer-listener-item{right:0;bottom:0;overflow:hidden;direction:ltr;flex:none}.os-size-observer-listener-item-final{transition:none}@keyframes os-size-observer-appear-animation{0%{cursor:auto}to{cursor:none}}.os-trinsic-observer{flex:none;box-sizing:border-box;position:relative;max-width:0px;max-height:1px;padding:0;margin:0;border:none;overflow:hidden;z-index:-1;height:0;top:calc(100% + 1px);contain:strict}.os-trinsic-observer:not(:empty){height:calc(100% + 1px);top:-1px}.os-trinsic-observer:not(:empty)>.os-size-observer{width:1000%;height:1000%;min-height:1px;min-width:1px}[data-overlayscrollbars-initialize],[data-overlayscrollbars-viewport~=scrollbarHidden]{scrollbar-width:none!important}[data-overlayscrollbars-initialize]::-webkit-scrollbar,[data-overlayscrollbars-initialize]::-webkit-scrollbar-corner,[data-overlayscrollbars-viewport~=scrollbarHidden]::-webkit-scrollbar,[data-overlayscrollbars-viewport~=scrollbarHidden]::-webkit-scrollbar-corner{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;display:none!important;width:0!important;height:0!important}[data-overlayscrollbars-initialize]:not([data-overlayscrollbars]):not(html):not(body){overflow:auto}html[data-overlayscrollbars-body]{overflow:hidden}html[data-overlayscrollbars-body],html[data-overlayscrollbars-body]>body{width:100%;height:100%;margin:0}html[data-overlayscrollbars-body]>body{overflow:visible;margin:0}[data-overlayscrollbars]{position:relative}[data-overlayscrollbars~=host],[data-overlayscrollbars-padding]{display:flex;align-items:stretch!important;flex-direction:row!important;flex-wrap:nowrap!important;scroll-behavior:auto!important}[data-overlayscrollbars-padding],[data-overlayscrollbars-viewport]:not([data-overlayscrollbars]){box-sizing:inherit;position:relative;flex:auto!important;height:auto;width:100%;min-width:0;padding:0;margin:0;border:none;z-index:0}[data-overlayscrollbars-viewport]:not([data-overlayscrollbars]){--os-vaw: 0;--os-vah: 0;outline:none}[data-overlayscrollbars-viewport]:not([data-overlayscrollbars]):focus{outline:none}[data-overlayscrollbars-viewport][data-overlayscrollbars-viewport~=arrange]:before{content:"";position:absolute;pointer-events:none;z-index:-1;min-width:1px;min-height:1px;width:var(--os-vaw);height:var(--os-vah)}[data-overlayscrollbars],[data-overlayscrollbars-padding],[data-overlayscrollbars-viewport]{overflow:hidden!important}[data-overlayscrollbars~=noClipping],[data-overlayscrollbars-padding~=noClipping]{overflow:visible!important}[data-overlayscrollbars-viewport~=measuring]{overflow:hidden!important;scroll-behavior:auto!important;scroll-snap-type:none!important}[data-overlayscrollbars-viewport~=overflowXVisible]:not([data-overlayscrollbars-viewport~=measuring]){overflow-x:visible!important}[data-overlayscrollbars-viewport~=overflowXHidden]{overflow-x:hidden!important}[data-overlayscrollbars-viewport~=overflowXScroll]{overflow-x:scroll!important}[data-overlayscrollbars-viewport~=overflowYVisible]:not([data-overlayscrollbars-viewport~=measuring]){overflow-y:visible!important}[data-overlayscrollbars-viewport~=overflowYHidden]{overflow-y:hidden!important}[data-overlayscrollbars-viewport~=overflowYScroll]{overflow-y:scroll!important}[data-overlayscrollbars-viewport~=noContent]:not(#osFakeId){font-size:0!important;line-height:0!important}[data-overlayscrollbars-viewport~=noContent]:not(#osFakeId):before,[data-overlayscrollbars-viewport~=noContent]:not(#osFakeId):after,[data-overlayscrollbars-viewport~=noContent]:not(#osFakeId)>*{display:none!important;position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}[data-overlayscrollbars-viewport~=scrolling]{scroll-behavior:auto!important;scroll-snap-type:none!important}[data-overlayscrollbars-content]{box-sizing:inherit}[data-overlayscrollbars-contents]:not(#osFakeId):not([data-overlayscrollbars-padding]):not([data-overlayscrollbars-viewport]):not([data-overlayscrollbars-content]){display:contents}[data-overlayscrollbars-grid],[data-overlayscrollbars-grid] [data-overlayscrollbars-padding]{display:grid;grid-template:1fr/1fr}[data-overlayscrollbars-grid]>[data-overlayscrollbars-padding],[data-overlayscrollbars-grid]>[data-overlayscrollbars-viewport],[data-overlayscrollbars-grid]>[data-overlayscrollbars-padding]>[data-overlayscrollbars-viewport]{height:auto!important;width:auto!important}@property --os-scroll-percent{syntax: "<number>"; inherits: true; initial-value: 0;}@property --os-viewport-percent{syntax: "<number>"; inherits: true; initial-value: 0;}.os-scrollbar{--os-viewport-percent: 0;--os-scroll-percent: 0;--os-scroll-direction: 0;--os-scroll-percent-directional: calc( var(--os-scroll-percent) - (var(--os-scroll-percent) + (1 - var(--os-scroll-percent)) * -1) * var(--os-scroll-direction) )}.os-scrollbar{contain:size layout;contain:size layout style;transition:opacity .15s,visibility .15s,top .15s,right .15s,bottom .15s,left .15s;pointer-events:none;position:absolute;opacity:0;visibility:hidden}body>.os-scrollbar{position:fixed;z-index:99999}.os-scrollbar-transitionless{transition:none!important}.os-scrollbar-track{position:relative;padding:0!important;border:none!important}.os-scrollbar-handle{position:absolute}.os-scrollbar-track,.os-scrollbar-handle{pointer-events:none;width:100%;height:100%}.os-scrollbar.os-scrollbar-track-interactive .os-scrollbar-track,.os-scrollbar.os-scrollbar-handle-interactive .os-scrollbar-handle{pointer-events:auto;touch-action:none}.os-scrollbar-horizontal{bottom:0;left:0}.os-scrollbar-vertical{top:0;right:0}.os-scrollbar-rtl.os-scrollbar-horizontal{right:0}.os-scrollbar-rtl.os-scrollbar-vertical{right:auto;left:0}.os-scrollbar-visible{opacity:1;visibility:visible}.os-scrollbar-auto-hide.os-scrollbar-auto-hide-hidden{opacity:0;visibility:hidden}.os-scrollbar-interaction.os-scrollbar-visible{opacity:1;visibility:visible}.os-scrollbar-unusable,.os-scrollbar-unusable *,.os-scrollbar-wheel,.os-scrollbar-wheel *{pointer-events:none!important}.os-scrollbar-unusable .os-scrollbar-handle{opacity:0!important;transition:none!important}.os-scrollbar-horizontal .os-scrollbar-handle{bottom:0;left:calc(var(--os-scroll-percent-directional) * 100%);transform:translate(calc(var(--os-scroll-percent-directional) * -100%));width:calc(var(--os-viewport-percent) * 100%)}.os-scrollbar-vertical .os-scrollbar-handle{right:0;top:calc(var(--os-scroll-percent-directional) * 100%);transform:translateY(calc(var(--os-scroll-percent-directional) * -100%));height:calc(var(--os-viewport-percent) * 100%)}@supports (container-type: size){.os-scrollbar-track{container-type:size}.os-scrollbar-horizontal .os-scrollbar-handle{left:auto;transform:translate(calc(var(--os-scroll-percent-directional) * 100cqw + var(--os-scroll-percent-directional) * -100%))}.os-scrollbar-vertical .os-scrollbar-handle{top:auto;transform:translateY(calc(var(--os-scroll-percent-directional) * 100cqh + var(--os-scroll-percent-directional) * -100%))}.os-scrollbar-rtl.os-scrollbar-horizontal .os-scrollbar-handle{right:auto;left:0}}.os-scrollbar-rtl.os-scrollbar-vertical .os-scrollbar-handle{right:auto;left:0}.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless,.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless.os-scrollbar-rtl{left:0;right:0}.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless,.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless.os-scrollbar-rtl{top:0;bottom:0}@media print{.os-scrollbar{display:none}}.os-scrollbar{--os-size: 0;--os-padding-perpendicular: 0;--os-padding-axis: 0;--os-track-border-radius: 0;--os-track-bg: none;--os-track-bg-hover: none;--os-track-bg-active: none;--os-track-border: none;--os-track-border-hover: none;--os-track-border-active: none;--os-handle-border-radius: 0;--os-handle-bg: none;--os-handle-bg-hover: none;--os-handle-bg-active: none;--os-handle-border: none;--os-handle-border-hover: none;--os-handle-border-active: none;--os-handle-min-size: 33px;--os-handle-max-size: none;--os-handle-perpendicular-size: 100%;--os-handle-perpendicular-size-hover: 100%;--os-handle-perpendicular-size-active: 100%;--os-handle-interactive-area-offset: 0}.os-scrollbar-track{border:var(--os-track-border);border-radius:var(--os-track-border-radius);background:var(--os-track-bg);transition:opacity .15s,background-color .15s,border-color .15s}.os-scrollbar-track:hover{border:var(--os-track-border-hover);background:var(--os-track-bg-hover)}.os-scrollbar-track:active{border:var(--os-track-border-active);background:var(--os-track-bg-active)}.os-scrollbar-handle{border:var(--os-handle-border);border-radius:var(--os-handle-border-radius);background:var(--os-handle-bg)}.os-scrollbar-handle:hover{border:var(--os-handle-border-hover);background:var(--os-handle-bg-hover)}.os-scrollbar-handle:active{border:var(--os-handle-border-active);background:var(--os-handle-bg-active)}.os-scrollbar-track:before,.os-scrollbar-handle:before{content:"";position:absolute;left:0;right:0;top:0;bottom:0;display:block}.os-scrollbar-horizontal{padding:var(--os-padding-perpendicular) var(--os-padding-axis);right:var(--os-size);height:var(--os-size)}.os-scrollbar-horizontal.os-scrollbar-rtl{left:var(--os-size);right:0}.os-scrollbar-horizontal .os-scrollbar-track:before{top:calc(var(--os-padding-perpendicular) * -1);bottom:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-horizontal .os-scrollbar-handle{min-width:var(--os-handle-min-size);max-width:var(--os-handle-max-size);height:var(--os-handle-perpendicular-size);transition:opacity .15s,background-color .15s,border-color .15s,height .15s}.os-scrollbar-horizontal .os-scrollbar-handle:before{top:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);bottom:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-horizontal:hover .os-scrollbar-handle{height:var(--os-handle-perpendicular-size-hover)}.os-scrollbar-horizontal:active .os-scrollbar-handle{height:var(--os-handle-perpendicular-size-active)}.os-scrollbar-vertical{padding:var(--os-padding-axis) var(--os-padding-perpendicular);bottom:var(--os-size);width:var(--os-size)}.os-scrollbar-vertical .os-scrollbar-track:before{left:calc(var(--os-padding-perpendicular) * -1);right:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-vertical .os-scrollbar-handle{min-height:var(--os-handle-min-size);max-height:var(--os-handle-max-size);width:var(--os-handle-perpendicular-size);transition:opacity .15s,background-color .15s,border-color .15s,width .15s}.os-scrollbar-vertical .os-scrollbar-handle:before{left:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);right:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-vertical.os-scrollbar-rtl .os-scrollbar-handle:before{right:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);left:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-vertical:hover .os-scrollbar-handle{width:var(--os-handle-perpendicular-size-hover)}.os-scrollbar-vertical:active .os-scrollbar-handle{width:var(--os-handle-perpendicular-size-active)}[data-overlayscrollbars-viewport~=measuring]>.os-scrollbar,.os-theme-none.os-scrollbar{display:none!important}.os-theme-dark,.os-theme-light{box-sizing:border-box;--os-size: 10px;--os-padding-perpendicular: 2px;--os-padding-axis: 2px;--os-track-border-radius: 10px;--os-handle-interactive-area-offset: 4px;--os-handle-border-radius: 10px}.os-theme-dark{--os-handle-bg: rgba(0, 0, 0, .44);--os-handle-bg-hover: rgba(0, 0, 0, .55);--os-handle-bg-active: rgba(0, 0, 0, .66)}.os-theme-light{--os-handle-bg: rgba(255, 255, 255, .44);--os-handle-bg-hover: rgba(255, 255, 255, .55);--os-handle-bg-active: rgba(255, 255, 255, .66)}.progress-pie{width:60px;height:60px;border-radius:50%;background:#eee;background-image:linear-gradient(to right,transparent 50%,#4CC9D8 0);position:relative;display:inline-block}.progress-pie:before{content:"";display:block;margin-left:50%;height:100%;border-radius:0 100% 100% 0/50%;background-color:inherit;transform-origin:left}.progress-pie:after{content:attr(data-value);position:absolute;width:70%;height:70%;margin:auto;border-radius:50%;background-color:#fff;left:0;right:0;top:0;bottom:0;text-align:center;font:900 20px/41px Tahoma}.progress-pie[data-value="0"]:before{transform:rotate(0)}.progress-pie[data-value="1"]:before{transform:rotate(.01turn)}.progress-pie[data-value="2"]:before{transform:rotate(.02turn)}.progress-pie[data-value="3"]:before{transform:rotate(.03turn)}.progress-pie[data-value="4"]:before{transform:rotate(.04turn)}.progress-pie[data-value="5"]:before{transform:rotate(.05turn)}.progress-pie[data-value="6"]:before{transform:rotate(.06turn)}.progress-pie[data-value="7"]:before{transform:rotate(.07turn)}.progress-pie[data-value="8"]:before{transform:rotate(.08turn)}.progress-pie[data-value="9"]:before{transform:rotate(.09turn)}.progress-pie[data-value="10"]:before{transform:rotate(.1turn)}.progress-pie[data-value="11"]:before{transform:rotate(.11turn)}.progress-pie[data-value="12"]:before{transform:rotate(.12turn)}.progress-pie[data-value="13"]:before{transform:rotate(.13turn)}.progress-pie[data-value="14"]:before{transform:rotate(.14turn)}.progress-pie[data-value="15"]:before{transform:rotate(.15turn)}.progress-pie[data-value="16"]:before{transform:rotate(.16turn)}.progress-pie[data-value="17"]:before{transform:rotate(.17turn)}.progress-pie[data-value="18"]:before{transform:rotate(.18turn)}.progress-pie[data-value="19"]:before{transform:rotate(.19turn)}.progress-pie[data-value="20"]:before{transform:rotate(.2turn)}.progress-pie[data-value="21"]:before{transform:rotate(.21turn)}.progress-pie[data-value="22"]:before{transform:rotate(.22turn)}.progress-pie[data-value="23"]:before{transform:rotate(.23turn)}.progress-pie[data-value="24"]:before{transform:rotate(.24turn)}.progress-pie[data-value="25"]:before{transform:rotate(.25turn)}.progress-pie[data-value="26"]:before{transform:rotate(.26turn)}.progress-pie[data-value="27"]:before{transform:rotate(.27turn)}.progress-pie[data-value="28"]:before{transform:rotate(.28turn)}.progress-pie[data-value="29"]:before{transform:rotate(.29turn)}.progress-pie[data-value="30"]:before{transform:rotate(.3turn)}.progress-pie[data-value="31"]:before{transform:rotate(.31turn)}.progress-pie[data-value="32"]:before{transform:rotate(.32turn)}.progress-pie[data-value="33"]:before{transform:rotate(.33turn)}.progress-pie[data-value="34"]:before{transform:rotate(.34turn)}.progress-pie[data-value="35"]:before{transform:rotate(.35turn)}.progress-pie[data-value="36"]:before{transform:rotate(.36turn)}.progress-pie[data-value="37"]:before{transform:rotate(.37turn)}.progress-pie[data-value="38"]:before{transform:rotate(.38turn)}.progress-pie[data-value="39"]:before{transform:rotate(.39turn)}.progress-pie[data-value="40"]:before{transform:rotate(.4turn)}.progress-pie[data-value="41"]:before{transform:rotate(.41turn)}.progress-pie[data-value="42"]:before{transform:rotate(.42turn)}.progress-pie[data-value="43"]:before{transform:rotate(.43turn)}.progress-pie[data-value="44"]:before{transform:rotate(.44turn)}.progress-pie[data-value="45"]:before{transform:rotate(.45turn)}.progress-pie[data-value="46"]:before{transform:rotate(.46turn)}.progress-pie[data-value="47"]:before{transform:rotate(.47turn)}.progress-pie[data-value="48"]:before{transform:rotate(.48turn)}.progress-pie[data-value="49"]:before{transform:rotate(.49turn)}.progress-pie[data-value="50"]:before{transform:rotate(.5turn)}.progress-pie[data-value="51"]:before{background-color:#4cc9d8;transform:rotate(.01turn)}.progress-pie[data-value="52"]:before{background-color:#4cc9d8;transform:rotate(.02turn)}.progress-pie[data-value="53"]:before{background-color:#4cc9d8;transform:rotate(.03turn)}.progress-pie[data-value="54"]:before{background-color:#4cc9d8;transform:rotate(.04turn)}.progress-pie[data-value="55"]:before{background-color:#4cc9d8;transform:rotate(.05turn)}.progress-pie[data-value="56"]:before{background-color:#4cc9d8;transform:rotate(.06turn)}.progress-pie[data-value="57"]:before{background-color:#4cc9d8;transform:rotate(.07turn)}.progress-pie[data-value="58"]:before{background-color:#4cc9d8;transform:rotate(.08turn)}.progress-pie[data-value="59"]:before{background-color:#4cc9d8;transform:rotate(.09turn)}.progress-pie[data-value="60"]:before{background-color:#4cc9d8;transform:rotate(.1turn)}.progress-pie[data-value="61"]:before{background-color:#4cc9d8;transform:rotate(.11turn)}.progress-pie[data-value="62"]:before{background-color:#4cc9d8;transform:rotate(.12turn)}.progress-pie[data-value="63"]:before{background-color:#4cc9d8;transform:rotate(.13turn)}.progress-pie[data-value="64"]:before{background-color:#4cc9d8;transform:rotate(.14turn)}.progress-pie[data-value="65"]:before{background-color:#4cc9d8;transform:rotate(.15turn)}.progress-pie[data-value="66"]:before{background-color:#4cc9d8;transform:rotate(.16turn)}.progress-pie[data-value="67"]:before{background-color:#4cc9d8;transform:rotate(.17turn)}.progress-pie[data-value="68"]:before{background-color:#4cc9d8;transform:rotate(.18turn)}.progress-pie[data-value="69"]:before{background-color:#4cc9d8;transform:rotate(.19turn)}.progress-pie[data-value="70"]:before{background-color:#4cc9d8;transform:rotate(.2turn)}.progress-pie[data-value="71"]:before{background-color:#4cc9d8;transform:rotate(.21turn)}.progress-pie[data-value="72"]:before{background-color:#4cc9d8;transform:rotate(.22turn)}.progress-pie[data-value="73"]:before{background-color:#4cc9d8;transform:rotate(.23turn)}.progress-pie[data-value="74"]:before{background-color:#4cc9d8;transform:rotate(.24turn)}.progress-pie[data-value="75"]:before{background-color:#4cc9d8;transform:rotate(.25turn)}.progress-pie[data-value="76"]:before{background-color:#4cc9d8;transform:rotate(.26turn)}.progress-pie[data-value="77"]:before{background-color:#4cc9d8;transform:rotate(.27turn)}.progress-pie[data-value="78"]:before{background-color:#4cc9d8;transform:rotate(.28turn)}.progress-pie[data-value="79"]:before{background-color:#4cc9d8;transform:rotate(.29turn)}.progress-pie[data-value="80"]:before{background-color:#4cc9d8;transform:rotate(.3turn)}.progress-pie[data-value="81"]:before{background-color:#4cc9d8;transform:rotate(.31turn)}.progress-pie[data-value="82"]:before{background-color:#4cc9d8;transform:rotate(.32turn)}.progress-pie[data-value="83"]:before{background-color:#4cc9d8;transform:rotate(.33turn)}.progress-pie[data-value="84"]:before{background-color:#4cc9d8;transform:rotate(.34turn)}.progress-pie[data-value="85"]:before{background-color:#4cc9d8;transform:rotate(.35turn)}.progress-pie[data-value="86"]:before{background-color:#4cc9d8;transform:rotate(.36turn)}.progress-pie[data-value="87"]:before{background-color:#4cc9d8;transform:rotate(.37turn)}.progress-pie[data-value="88"]:before{background-color:#4cc9d8;transform:rotate(.38turn)}.progress-pie[data-value="89"]:before{background-color:#4cc9d8;transform:rotate(.39turn)}.progress-pie[data-value="90"]:before{background-color:#4cc9d8;transform:rotate(.4turn)}.progress-pie[data-value="91"]:before{background-color:#4cc9d8;transform:rotate(.41turn)}.progress-pie[data-value="92"]:before{background-color:#4cc9d8;transform:rotate(.42turn)}.progress-pie[data-value="93"]:before{background-color:#4cc9d8;transform:rotate(.43turn)}.progress-pie[data-value="94"]:before{background-color:#4cc9d8;transform:rotate(.44turn)}.progress-pie[data-value="95"]:before{background-color:#4cc9d8;transform:rotate(.45turn)}.progress-pie[data-value="96"]:before{background-color:#4cc9d8;transform:rotate(.46turn)}.progress-pie[data-value="97"]:before{background-color:#4cc9d8;transform:rotate(.47turn)}.progress-pie[data-value="98"]:before{background-color:#4cc9d8;transform:rotate(.48turn)}.progress-pie[data-value="99"]:before{background-color:#4cc9d8;transform:rotate(.49turn)}.progress-pie[data-value="100"]:before{background-color:#4cc9d8;transform:rotate(.5turn)}@keyframes pulse{0%{opacity:.8}to{opacity:.2}}@keyframes shrink{0%{width:100%}to{width:0%}}.day-planner{position:relative}.day-planner .status-bar-item-segment:hover{cursor:pointer}.status-bar-item.plugin-obsidian-day-planner{display:flex;gap:var(--size-2-2)}.day-planner-progress-bar{overflow:hidden;display:flex;align-items:stretch;align-self:stretch;min-width:100px;background-color:var(--text-faint);border-radius:var(--radius-s)}.day-planner-progress-value{background-color:var(--color-accent)}.day-planner-progress-value.green,.day-planner .progress-pie.green:before{background-color:#4caf50}.day-planner .progress-pie.green{background-image:linear-gradient(to right,transparent 50%,#4caf50 0)}.day-planner-status-bar-text{float:left;margin-right:10px}.day-planner-status-card{position:absolute;top:-140px;display:none;width:300px;padding:8px;background-color:var(--background-secondary-alt);border-radius:4px}.day-planner-status-card .arrow-down{position:absolute;width:20px;border-top:20px solid var(--background-secondary-alt);border-right:20px solid transparent;border-left:20px solid transparent}.progress-pie.day-planner{width:20px;height:20px}.progress-pie.day-planner:after{width:80%;height:80%}.progress-pie.day-planner:after{font-size:8px;font-weight:900;line-height:13px;color:transparent;background-color:transparent}[data-type=planner-timeline] .view-content,[data-type=planner-weekly] .view-content{--time-ruler-width: 30px;--scrollbar-width: 12px;--timeline-flex-basis: 200px;--shadow-color: #00000010;--shadow-right: 2px 0px 2px var(--shadow-color);--shadow-bottom: 0px 2px 2px var(--shadow-color);display:flex;flex-direction:column;padding:0}[data-type=planner-weekly] .view-header{display:grid;grid-template-columns:repeat(3,1fr)}[data-type=planner-weekly] .view-content{display:grid;grid-template-columns:1fr auto auto;grid-template-rows:auto 1fr}[data-type=planner-weekly] .view-actions{gap:var(--size-4-2);justify-self:end}[data-type=planner-weekly] .view-header-left{display:none}[data-type=planner-weekly] .view-header-title-container{grid-column:2}[data-type=planner-weekly] .view-header-title{font-size:var(--font-ui-medium);color:var(--text-muted)}.os-scrollbar{box-sizing:border-box;--os-size: var(--scrollbar-width);--os-padding-perpendicular: 2px;--os-padding-axis: 2px;--os-track-border-radius: 10px;--os-handle-interactive-area-offset: 4px;--os-handle-border-radius: 10px;--os-handle-bg: var(--scrollbar-thumb-bg);--os-handle-bg-hover: var(--scrollbar-active-thumb-bg);--os-handle-bg-active: var(--scrollbar-active-thumb-bg)}.absolute-stretch-x{position:absolute;right:0;left:0}.day-planner-release-notes-modal .modal-content{height:100%;overflow:auto}.day-planner-modal-buttons{display:flex;justify-content:flex-end;gap:var(--size-4-2)}.overlayscrollbars-svelte{width:100%;height:100%}.day-planner-release-notes-container{max-width:var(--file-line-width);margin-left:auto;margin-right:auto}.undo-timeout-bar{position:absolute;bottom:0;left:0;width:100%;height:3px;background-color:var(--color-accent)}.planner-undo-notice{position:relative;overflow:hidden}.planner-sticky-block-content{position:sticky;top:0;overflow:hidden;max-height:100%} diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json new file mode 100644 index 0000000..7948cd9 --- /dev/null +++ b/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,57 @@ +{ + "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": "merge", + "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, + "diffStyle": "split", + "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 + }, + "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 new file mode 100644 index 0000000..7140b16 --- /dev/null +++ b/.obsidian/plugins/obsidian-git/main.js @@ -0,0 +1,416 @@ +/* +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 UP=Object.create;var Oo=Object.defineProperty;var GP=Object.getOwnPropertyDescriptor;var zP=Object.getOwnPropertyNames;var VP=Object.getPrototypeOf,WP=Object.prototype.hasOwnProperty;var jv=e=>{throw TypeError(e)};var qP=(e,t,r)=>t in e?Oo(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var YP=(e,t)=>()=>(e&&(t=e(e=0)),t);var I=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),XP=(e,t)=>{for(var r in t)Oo(e,r,{get:t[r],enumerable:!0})},Bv=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of zP(t))!WP.call(e,i)&&i!==r&&Oo(e,i,{get:()=>t[i],enumerable:!(n=GP(t,i))||n.enumerable});return e};var ze=(e,t,r)=>(r=e!=null?UP(VP(e)):{},Bv(t||!e||!e.__esModule?Oo(r,"default",{value:e,enumerable:!0}):r,e)),ZP=e=>Bv(Oo({},"__esModule",{value:!0}),e);var Cr=(e,t,r)=>qP(e,typeof t!="symbol"?t+"":t,r),Hv=(e,t,r)=>t.has(e)||jv("Cannot "+r);var Bt=(e,t,r)=>(Hv(e,t,"read from private field"),r?r.call(e):t.get(e)),Pc=(e,t,r)=>t.has(e)?jv("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),Rc=(e,t,r,n)=>(Hv(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);var zv=I(Mc=>{"use strict";g();Mc.byteLength=JP;Mc.toByteArray=eR;Mc.fromByteArray=nR;var dn=[],Pr=[],KP=typeof Uint8Array!="undefined"?Uint8Array:Array,Qd="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(Xi=0,Uv=Qd.length;Xi<Uv;++Xi)dn[Xi]=Qd[Xi],Pr[Qd.charCodeAt(Xi)]=Xi;var Xi,Uv;Pr[45]=62;Pr[95]=63;function Gv(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");r===-1&&(r=t);var n=r===t?0:4-r%4;return[r,n]}function JP(e){var t=Gv(e),r=t[0],n=t[1];return(r+n)*3/4-n}function QP(e,t,r){return(t+r)*3/4-r}function eR(e){var t,r=Gv(e),n=r[0],i=r[1],a=new KP(QP(e,n,i)),s=0,o=i>0?n-4:n,c;for(c=0;c<o;c+=4)t=Pr[e.charCodeAt(c)]<<18|Pr[e.charCodeAt(c+1)]<<12|Pr[e.charCodeAt(c+2)]<<6|Pr[e.charCodeAt(c+3)],a[s++]=t>>16&255,a[s++]=t>>8&255,a[s++]=t&255;return i===2&&(t=Pr[e.charCodeAt(c)]<<2|Pr[e.charCodeAt(c+1)]>>4,a[s++]=t&255),i===1&&(t=Pr[e.charCodeAt(c)]<<10|Pr[e.charCodeAt(c+1)]<<4|Pr[e.charCodeAt(c+2)]>>2,a[s++]=t>>8&255,a[s++]=t&255),a}function tR(e){return dn[e>>18&63]+dn[e>>12&63]+dn[e>>6&63]+dn[e&63]}function rR(e,t,r){for(var n,i=[],a=t;a<r;a+=3)n=(e[a]<<16&16711680)+(e[a+1]<<8&65280)+(e[a+2]&255),i.push(tR(n));return i.join("")}function nR(e){for(var t,r=e.length,n=r%3,i=[],a=16383,s=0,o=r-n;s<o;s+=a)i.push(rR(e,s,s+a>o?o:s+a));return n===1?(t=e[r-1],i.push(dn[t>>2]+dn[t<<4&63]+"==")):n===2&&(t=(e[r-2]<<8)+e[r-1],i.push(dn[t>>10]+dn[t>>4&63]+dn[t<<2&63]+"=")),i.join("")}});var Vv=I(eh=>{g();eh.read=function(e,t,r,n,i){var a,s,o=i*8-n-1,c=(1<<o)-1,l=c>>1,u=-7,f=r?i-1:0,d=r?-1:1,h=e[t+f];for(f+=d,a=h&(1<<-u)-1,h>>=-u,u+=o;u>0;a=a*256+e[t+f],f+=d,u-=8);for(s=a&(1<<-u)-1,a>>=-u,u+=n;u>0;s=s*256+e[t+f],f+=d,u-=8);if(a===0)a=1-l;else{if(a===c)return s?NaN:(h?-1:1)*(1/0);s=s+Math.pow(2,n),a=a-l}return(h?-1:1)*s*Math.pow(2,a-n)};eh.write=function(e,t,r,n,i,a){var s,o,c,l=a*8-i-1,u=(1<<l)-1,f=u>>1,d=i===23?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:a-1,p=n?1:-1,m=t<0||t===0&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,s=u):(s=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-s))<1&&(s--,c*=2),s+f>=1?t+=d/c:t+=d*Math.pow(2,1-f),t*c>=2&&(s++,c/=2),s+f>=u?(o=0,s=u):s+f>=1?(o=(t*c-1)*Math.pow(2,i),s=s+f):(o=t*Math.pow(2,f-1)*Math.pow(2,i),s=0));i>=8;e[r+h]=o&255,h+=p,o/=256,i-=8);for(s=s<<i|o,l+=i;l>0;e[r+h]=s&255,h+=p,s/=256,l-=8);e[r+h-p]|=m*128}});var ch=I(Za=>{"use strict";g();var th=zv(),Ya=Vv(),Wv=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;Za.Buffer=M;Za.SlowBuffer=cR;Za.INSPECT_MAX_BYTES=50;var Oc=2147483647;Za.kMaxLength=Oc;M.TYPED_ARRAY_SUPPORT=iR();!M.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 iR(){try{let e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),e.foo()===42}catch(e){return!1}}Object.defineProperty(M.prototype,"parent",{enumerable:!0,get:function(){if(M.isBuffer(this))return this.buffer}});Object.defineProperty(M.prototype,"offset",{enumerable:!0,get:function(){if(M.isBuffer(this))return this.byteOffset}});function Ln(e){if(e>Oc)throw new RangeError('The value "'+e+'" is invalid for option "size"');let t=new Uint8Array(e);return Object.setPrototypeOf(t,M.prototype),t}function M(e,t,r){if(typeof e=="number"){if(typeof t=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return ah(e)}return Zv(e,t,r)}M.poolSize=8192;function Zv(e,t,r){if(typeof e=="string")return sR(e,t);if(ArrayBuffer.isView(e))return oR(e);if(e==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(hn(e,ArrayBuffer)||e&&hn(e.buffer,ArrayBuffer)||typeof SharedArrayBuffer!="undefined"&&(hn(e,SharedArrayBuffer)||e&&hn(e.buffer,SharedArrayBuffer)))return nh(e,t,r);if(typeof e=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let n=e.valueOf&&e.valueOf();if(n!=null&&n!==e)return M.from(n,t,r);let i=lR(e);if(i)return i;if(typeof Symbol!="undefined"&&Symbol.toPrimitive!=null&&typeof e[Symbol.toPrimitive]=="function")return M.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}M.from=function(e,t,r){return Zv(e,t,r)};Object.setPrototypeOf(M.prototype,Uint8Array.prototype);Object.setPrototypeOf(M,Uint8Array);function Kv(e){if(typeof e!="number")throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function aR(e,t,r){return Kv(e),e<=0?Ln(e):t!==void 0?typeof r=="string"?Ln(e).fill(t,r):Ln(e).fill(t):Ln(e)}M.alloc=function(e,t,r){return aR(e,t,r)};function ah(e){return Kv(e),Ln(e<0?0:sh(e)|0)}M.allocUnsafe=function(e){return ah(e)};M.allocUnsafeSlow=function(e){return ah(e)};function sR(e,t){if((typeof t!="string"||t==="")&&(t="utf8"),!M.isEncoding(t))throw new TypeError("Unknown encoding: "+t);let r=Jv(e,t)|0,n=Ln(r),i=n.write(e,t);return i!==r&&(n=n.slice(0,i)),n}function rh(e){let t=e.length<0?0:sh(e.length)|0,r=Ln(t);for(let n=0;n<t;n+=1)r[n]=e[n]&255;return r}function oR(e){if(hn(e,Uint8Array)){let t=new Uint8Array(e);return nh(t.buffer,t.byteOffset,t.byteLength)}return rh(e)}function nh(e,t,r){if(t<0||e.byteLength<t)throw new RangeError('"offset" is outside of buffer bounds');if(e.byteLength<t+(r||0))throw new RangeError('"length" is outside of buffer bounds');let n;return t===void 0&&r===void 0?n=new Uint8Array(e):r===void 0?n=new Uint8Array(e,t):n=new Uint8Array(e,t,r),Object.setPrototypeOf(n,M.prototype),n}function lR(e){if(M.isBuffer(e)){let t=sh(e.length)|0,r=Ln(t);return r.length===0||e.copy(r,0,0,t),r}if(e.length!==void 0)return typeof e.length!="number"||lh(e.length)?Ln(0):rh(e);if(e.type==="Buffer"&&Array.isArray(e.data))return rh(e.data)}function sh(e){if(e>=Oc)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+Oc.toString(16)+" bytes");return e|0}function cR(e){return+e!=e&&(e=0),M.alloc(+e)}M.isBuffer=function(t){return t!=null&&t._isBuffer===!0&&t!==M.prototype};M.compare=function(t,r){if(hn(t,Uint8Array)&&(t=M.from(t,t.offset,t.byteLength)),hn(r,Uint8Array)&&(r=M.from(r,r.offset,r.byteLength)),!M.isBuffer(t)||!M.isBuffer(r))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===r)return 0;let n=t.length,i=r.length;for(let a=0,s=Math.min(n,i);a<s;++a)if(t[a]!==r[a]){n=t[a],i=r[a];break}return n<i?-1:i<n?1:0};M.isEncoding=function(t){switch(String(t).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!0;default:return!1}};M.concat=function(t,r){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(t.length===0)return M.alloc(0);let n;if(r===void 0)for(r=0,n=0;n<t.length;++n)r+=t[n].length;let i=M.allocUnsafe(r),a=0;for(n=0;n<t.length;++n){let s=t[n];if(hn(s,Uint8Array))a+s.length>i.length?(M.isBuffer(s)||(s=M.from(s)),s.copy(i,a)):Uint8Array.prototype.set.call(i,s,a);else if(M.isBuffer(s))s.copy(i,a);else throw new TypeError('"list" argument must be an Array of Buffers');a+=s.length}return i};function Jv(e,t){if(M.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||hn(e,ArrayBuffer))return e.byteLength;if(typeof e!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);let r=e.length,n=arguments.length>2&&arguments[2]===!0;if(!n&&r===0)return 0;let i=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return ih(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return r*2;case"hex":return r>>>1;case"base64":return o1(e).length;default:if(i)return n?-1:ih(e).length;t=(""+t).toLowerCase(),i=!0}}M.byteLength=Jv;function uR(e,t,r){let n=!1;if((t===void 0||t<0)&&(t=0),t>this.length||((r===void 0||r>this.length)&&(r=this.length),r<=0)||(r>>>=0,t>>>=0,r<=t))return"";for(e||(e="utf8");;)switch(e){case"hex":return bR(this,t,r);case"utf8":case"utf-8":return e1(this,t,r);case"ascii":return yR(this,t,r);case"latin1":case"binary":return wR(this,t,r);case"base64":return gR(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _R(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}M.prototype._isBuffer=!0;function Zi(e,t,r){let n=e[t];e[t]=e[r],e[r]=n}M.prototype.swap16=function(){let t=this.length;if(t%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let r=0;r<t;r+=2)Zi(this,r,r+1);return this};M.prototype.swap32=function(){let t=this.length;if(t%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let r=0;r<t;r+=4)Zi(this,r,r+3),Zi(this,r+1,r+2);return this};M.prototype.swap64=function(){let t=this.length;if(t%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let r=0;r<t;r+=8)Zi(this,r,r+7),Zi(this,r+1,r+6),Zi(this,r+2,r+5),Zi(this,r+3,r+4);return this};M.prototype.toString=function(){let t=this.length;return t===0?"":arguments.length===0?e1(this,0,t):uR.apply(this,arguments)};M.prototype.toLocaleString=M.prototype.toString;M.prototype.equals=function(t){if(!M.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t?!0:M.compare(this,t)===0};M.prototype.inspect=function(){let t="",r=Za.INSPECT_MAX_BYTES;return t=this.toString("hex",0,r).replace(/(.{2})/g,"$1 ").trim(),this.length>r&&(t+=" ... "),"<Buffer "+t+">"};Wv&&(M.prototype[Wv]=M.prototype.inspect);M.prototype.compare=function(t,r,n,i,a){if(hn(t,Uint8Array)&&(t=M.from(t,t.offset,t.byteLength)),!M.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(r===void 0&&(r=0),n===void 0&&(n=t?t.length:0),i===void 0&&(i=0),a===void 0&&(a=this.length),r<0||n>t.length||i<0||a>this.length)throw new RangeError("out of range index");if(i>=a&&r>=n)return 0;if(i>=a)return-1;if(r>=n)return 1;if(r>>>=0,n>>>=0,i>>>=0,a>>>=0,this===t)return 0;let s=a-i,o=n-r,c=Math.min(s,o),l=this.slice(i,a),u=t.slice(r,n);for(let f=0;f<c;++f)if(l[f]!==u[f]){s=l[f],o=u[f];break}return s<o?-1:o<s?1:0};function Qv(e,t,r,n,i){if(e.length===0)return-1;if(typeof r=="string"?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,lh(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0)if(i)r=0;else return-1;if(typeof t=="string"&&(t=M.from(t,n)),M.isBuffer(t))return t.length===0?-1:qv(e,t,r,n,i);if(typeof t=="number")return t=t&255,typeof Uint8Array.prototype.indexOf=="function"?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):qv(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function qv(e,t,r,n,i){let a=1,s=e.length,o=t.length;if(n!==void 0&&(n=String(n).toLowerCase(),n==="ucs2"||n==="ucs-2"||n==="utf16le"||n==="utf-16le")){if(e.length<2||t.length<2)return-1;a=2,s/=2,o/=2,r/=2}function c(u,f){return a===1?u[f]:u.readUInt16BE(f*a)}let l;if(i){let u=-1;for(l=r;l<s;l++)if(c(e,l)===c(t,u===-1?0:l-u)){if(u===-1&&(u=l),l-u+1===o)return u*a}else u!==-1&&(l-=l-u),u=-1}else for(r+o>s&&(r=s-o),l=r;l>=0;l--){let u=!0;for(let f=0;f<o;f++)if(c(e,l+f)!==c(t,f)){u=!1;break}if(u)return l}return-1}M.prototype.includes=function(t,r,n){return this.indexOf(t,r,n)!==-1};M.prototype.indexOf=function(t,r,n){return Qv(this,t,r,n,!0)};M.prototype.lastIndexOf=function(t,r,n){return Qv(this,t,r,n,!1)};function fR(e,t,r,n){r=Number(r)||0;let i=e.length-r;n?(n=Number(n),n>i&&(n=i)):n=i;let a=t.length;n>a/2&&(n=a/2);let s;for(s=0;s<n;++s){let o=parseInt(t.substr(s*2,2),16);if(lh(o))return s;e[r+s]=o}return s}function dR(e,t,r,n){return Ic(ih(t,e.length-r),e,r,n)}function hR(e,t,r,n){return Ic(AR(t),e,r,n)}function pR(e,t,r,n){return Ic(o1(t),e,r,n)}function mR(e,t,r,n){return Ic(kR(t,e.length-r),e,r,n)}M.prototype.write=function(t,r,n,i){if(r===void 0)i="utf8",n=this.length,r=0;else if(n===void 0&&typeof r=="string")i=r,n=this.length,r=0;else if(isFinite(r))r=r>>>0,isFinite(n)?(n=n>>>0,i===void 0&&(i="utf8")):(i=n,n=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let a=this.length-r;if((n===void 0||n>a)&&(n=a),t.length>0&&(n<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");let s=!1;for(;;)switch(i){case"hex":return fR(this,t,r,n);case"utf8":case"utf-8":return dR(this,t,r,n);case"ascii":case"latin1":case"binary":return hR(this,t,r,n);case"base64":return pR(this,t,r,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return mR(this,t,r,n);default:if(s)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),s=!0}};M.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function gR(e,t,r){return t===0&&r===e.length?th.fromByteArray(e):th.fromByteArray(e.slice(t,r))}function e1(e,t,r){r=Math.min(e.length,r);let n=[],i=t;for(;i<r;){let a=e[i],s=null,o=a>239?4:a>223?3:a>191?2:1;if(i+o<=r){let c,l,u,f;switch(o){case 1:a<128&&(s=a);break;case 2:c=e[i+1],(c&192)===128&&(f=(a&31)<<6|c&63,f>127&&(s=f));break;case 3:c=e[i+1],l=e[i+2],(c&192)===128&&(l&192)===128&&(f=(a&15)<<12|(c&63)<<6|l&63,f>2047&&(f<55296||f>57343)&&(s=f));break;case 4:c=e[i+1],l=e[i+2],u=e[i+3],(c&192)===128&&(l&192)===128&&(u&192)===128&&(f=(a&15)<<18|(c&63)<<12|(l&63)<<6|u&63,f>65535&&f<1114112&&(s=f))}}s===null?(s=65533,o=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|s&1023),n.push(s),i+=o}return vR(n)}var Yv=4096;function vR(e){let t=e.length;if(t<=Yv)return String.fromCharCode.apply(String,e);let r="",n=0;for(;n<t;)r+=String.fromCharCode.apply(String,e.slice(n,n+=Yv));return r}function yR(e,t,r){let n="";r=Math.min(e.length,r);for(let i=t;i<r;++i)n+=String.fromCharCode(e[i]&127);return n}function wR(e,t,r){let n="";r=Math.min(e.length,r);for(let i=t;i<r;++i)n+=String.fromCharCode(e[i]);return n}function bR(e,t,r){let n=e.length;(!t||t<0)&&(t=0),(!r||r<0||r>n)&&(r=n);let i="";for(let a=t;a<r;++a)i+=TR[e[a]];return i}function _R(e,t,r){let n=e.slice(t,r),i="";for(let a=0;a<n.length-1;a+=2)i+=String.fromCharCode(n[a]+n[a+1]*256);return i}M.prototype.slice=function(t,r){let n=this.length;t=~~t,r=r===void 0?n:~~r,t<0?(t+=n,t<0&&(t=0)):t>n&&(t=n),r<0?(r+=n,r<0&&(r=0)):r>n&&(r=n),r<t&&(r=t);let i=this.subarray(t,r);return Object.setPrototypeOf(i,M.prototype),i};function yt(e,t,r){if(e%1!==0||e<0)throw new RangeError("offset is not uint");if(e+t>r)throw new RangeError("Trying to access beyond buffer length")}M.prototype.readUintLE=M.prototype.readUIntLE=function(t,r,n){t=t>>>0,r=r>>>0,n||yt(t,r,this.length);let i=this[t],a=1,s=0;for(;++s<r&&(a*=256);)i+=this[t+s]*a;return i};M.prototype.readUintBE=M.prototype.readUIntBE=function(t,r,n){t=t>>>0,r=r>>>0,n||yt(t,r,this.length);let i=this[t+--r],a=1;for(;r>0&&(a*=256);)i+=this[t+--r]*a;return i};M.prototype.readUint8=M.prototype.readUInt8=function(t,r){return t=t>>>0,r||yt(t,1,this.length),this[t]};M.prototype.readUint16LE=M.prototype.readUInt16LE=function(t,r){return t=t>>>0,r||yt(t,2,this.length),this[t]|this[t+1]<<8};M.prototype.readUint16BE=M.prototype.readUInt16BE=function(t,r){return t=t>>>0,r||yt(t,2,this.length),this[t]<<8|this[t+1]};M.prototype.readUint32LE=M.prototype.readUInt32LE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+this[t+3]*16777216};M.prototype.readUint32BE=M.prototype.readUInt32BE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),this[t]*16777216+(this[t+1]<<16|this[t+2]<<8|this[t+3])};M.prototype.readBigUInt64LE=ui(function(t){t=t>>>0,Xa(t,"offset");let r=this[t],n=this[t+7];(r===void 0||n===void 0)&&Io(t,this.length-8);let i=r+this[++t]*2**8+this[++t]*2**16+this[++t]*2**24,a=this[++t]+this[++t]*2**8+this[++t]*2**16+n*2**24;return BigInt(i)+(BigInt(a)<<BigInt(32))});M.prototype.readBigUInt64BE=ui(function(t){t=t>>>0,Xa(t,"offset");let r=this[t],n=this[t+7];(r===void 0||n===void 0)&&Io(t,this.length-8);let i=r*2**24+this[++t]*2**16+this[++t]*2**8+this[++t],a=this[++t]*2**24+this[++t]*2**16+this[++t]*2**8+n;return(BigInt(i)<<BigInt(32))+BigInt(a)});M.prototype.readIntLE=function(t,r,n){t=t>>>0,r=r>>>0,n||yt(t,r,this.length);let i=this[t],a=1,s=0;for(;++s<r&&(a*=256);)i+=this[t+s]*a;return a*=128,i>=a&&(i-=Math.pow(2,8*r)),i};M.prototype.readIntBE=function(t,r,n){t=t>>>0,r=r>>>0,n||yt(t,r,this.length);let i=r,a=1,s=this[t+--i];for(;i>0&&(a*=256);)s+=this[t+--i]*a;return a*=128,s>=a&&(s-=Math.pow(2,8*r)),s};M.prototype.readInt8=function(t,r){return t=t>>>0,r||yt(t,1,this.length),this[t]&128?(255-this[t]+1)*-1:this[t]};M.prototype.readInt16LE=function(t,r){t=t>>>0,r||yt(t,2,this.length);let n=this[t]|this[t+1]<<8;return n&32768?n|4294901760:n};M.prototype.readInt16BE=function(t,r){t=t>>>0,r||yt(t,2,this.length);let n=this[t+1]|this[t]<<8;return n&32768?n|4294901760:n};M.prototype.readInt32LE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24};M.prototype.readInt32BE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]};M.prototype.readBigInt64LE=ui(function(t){t=t>>>0,Xa(t,"offset");let r=this[t],n=this[t+7];(r===void 0||n===void 0)&&Io(t,this.length-8);let i=this[t+4]+this[t+5]*2**8+this[t+6]*2**16+(n<<24);return(BigInt(i)<<BigInt(32))+BigInt(r+this[++t]*2**8+this[++t]*2**16+this[++t]*2**24)});M.prototype.readBigInt64BE=ui(function(t){t=t>>>0,Xa(t,"offset");let r=this[t],n=this[t+7];(r===void 0||n===void 0)&&Io(t,this.length-8);let i=(r<<24)+this[++t]*2**16+this[++t]*2**8+this[++t];return(BigInt(i)<<BigInt(32))+BigInt(this[++t]*2**24+this[++t]*2**16+this[++t]*2**8+n)});M.prototype.readFloatLE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),Ya.read(this,t,!0,23,4)};M.prototype.readFloatBE=function(t,r){return t=t>>>0,r||yt(t,4,this.length),Ya.read(this,t,!1,23,4)};M.prototype.readDoubleLE=function(t,r){return t=t>>>0,r||yt(t,8,this.length),Ya.read(this,t,!0,52,8)};M.prototype.readDoubleBE=function(t,r){return t=t>>>0,r||yt(t,8,this.length),Ya.read(this,t,!1,52,8)};function Kt(e,t,r,n,i,a){if(!M.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||t<a)throw new RangeError('"value" argument is out of bounds');if(r+n>e.length)throw new RangeError("Index out of range")}M.prototype.writeUintLE=M.prototype.writeUIntLE=function(t,r,n,i){if(t=+t,r=r>>>0,n=n>>>0,!i){let o=Math.pow(2,8*n)-1;Kt(this,t,r,n,o,0)}let a=1,s=0;for(this[r]=t&255;++s<n&&(a*=256);)this[r+s]=t/a&255;return r+n};M.prototype.writeUintBE=M.prototype.writeUIntBE=function(t,r,n,i){if(t=+t,r=r>>>0,n=n>>>0,!i){let o=Math.pow(2,8*n)-1;Kt(this,t,r,n,o,0)}let a=n-1,s=1;for(this[r+a]=t&255;--a>=0&&(s*=256);)this[r+a]=t/s&255;return r+n};M.prototype.writeUint8=M.prototype.writeUInt8=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,1,255,0),this[r]=t&255,r+1};M.prototype.writeUint16LE=M.prototype.writeUInt16LE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,2,65535,0),this[r]=t&255,this[r+1]=t>>>8,r+2};M.prototype.writeUint16BE=M.prototype.writeUInt16BE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,2,65535,0),this[r]=t>>>8,this[r+1]=t&255,r+2};M.prototype.writeUint32LE=M.prototype.writeUInt32LE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,4,4294967295,0),this[r+3]=t>>>24,this[r+2]=t>>>16,this[r+1]=t>>>8,this[r]=t&255,r+4};M.prototype.writeUint32BE=M.prototype.writeUInt32BE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,4,4294967295,0),this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=t&255,r+4};function t1(e,t,r,n,i){s1(t,n,i,e,r,7);let a=Number(t&BigInt(4294967295));e[r++]=a,a=a>>8,e[r++]=a,a=a>>8,e[r++]=a,a=a>>8,e[r++]=a;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=s,s=s>>8,e[r++]=s,s=s>>8,e[r++]=s,s=s>>8,e[r++]=s,r}function r1(e,t,r,n,i){s1(t,n,i,e,r,7);let a=Number(t&BigInt(4294967295));e[r+7]=a,a=a>>8,e[r+6]=a,a=a>>8,e[r+5]=a,a=a>>8,e[r+4]=a;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=s,s=s>>8,e[r+2]=s,s=s>>8,e[r+1]=s,s=s>>8,e[r]=s,r+8}M.prototype.writeBigUInt64LE=ui(function(t,r=0){return t1(this,t,r,BigInt(0),BigInt("0xffffffffffffffff"))});M.prototype.writeBigUInt64BE=ui(function(t,r=0){return r1(this,t,r,BigInt(0),BigInt("0xffffffffffffffff"))});M.prototype.writeIntLE=function(t,r,n,i){if(t=+t,r=r>>>0,!i){let c=Math.pow(2,8*n-1);Kt(this,t,r,n,c-1,-c)}let a=0,s=1,o=0;for(this[r]=t&255;++a<n&&(s*=256);)t<0&&o===0&&this[r+a-1]!==0&&(o=1),this[r+a]=(t/s>>0)-o&255;return r+n};M.prototype.writeIntBE=function(t,r,n,i){if(t=+t,r=r>>>0,!i){let c=Math.pow(2,8*n-1);Kt(this,t,r,n,c-1,-c)}let a=n-1,s=1,o=0;for(this[r+a]=t&255;--a>=0&&(s*=256);)t<0&&o===0&&this[r+a+1]!==0&&(o=1),this[r+a]=(t/s>>0)-o&255;return r+n};M.prototype.writeInt8=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,1,127,-128),t<0&&(t=255+t+1),this[r]=t&255,r+1};M.prototype.writeInt16LE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,2,32767,-32768),this[r]=t&255,this[r+1]=t>>>8,r+2};M.prototype.writeInt16BE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,2,32767,-32768),this[r]=t>>>8,this[r+1]=t&255,r+2};M.prototype.writeInt32LE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,4,2147483647,-2147483648),this[r]=t&255,this[r+1]=t>>>8,this[r+2]=t>>>16,this[r+3]=t>>>24,r+4};M.prototype.writeInt32BE=function(t,r,n){return t=+t,r=r>>>0,n||Kt(this,t,r,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=t&255,r+4};M.prototype.writeBigInt64LE=ui(function(t,r=0){return t1(this,t,r,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});M.prototype.writeBigInt64BE=ui(function(t,r=0){return r1(this,t,r,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function n1(e,t,r,n,i,a){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function i1(e,t,r,n,i){return t=+t,r=r>>>0,i||n1(e,t,r,4,34028234663852886e22,-34028234663852886e22),Ya.write(e,t,r,n,23,4),r+4}M.prototype.writeFloatLE=function(t,r,n){return i1(this,t,r,!0,n)};M.prototype.writeFloatBE=function(t,r,n){return i1(this,t,r,!1,n)};function a1(e,t,r,n,i){return t=+t,r=r>>>0,i||n1(e,t,r,8,17976931348623157e292,-17976931348623157e292),Ya.write(e,t,r,n,52,8),r+8}M.prototype.writeDoubleLE=function(t,r,n){return a1(this,t,r,!0,n)};M.prototype.writeDoubleBE=function(t,r,n){return a1(this,t,r,!1,n)};M.prototype.copy=function(t,r,n,i){if(!M.isBuffer(t))throw new TypeError("argument should be a Buffer");if(n||(n=0),!i&&i!==0&&(i=this.length),r>=t.length&&(r=t.length),r||(r=0),i>0&&i<n&&(i=n),i===n||t.length===0||this.length===0)return 0;if(r<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-r<i-n&&(i=t.length-r+n);let a=i-n;return this===t&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(r,n,i):Uint8Array.prototype.set.call(t,this.subarray(n,i),r),a};M.prototype.fill=function(t,r,n,i){if(typeof t=="string"){if(typeof r=="string"?(i=r,r=0,n=this.length):typeof n=="string"&&(i=n,n=this.length),i!==void 0&&typeof i!="string")throw new TypeError("encoding must be a string");if(typeof i=="string"&&!M.isEncoding(i))throw new TypeError("Unknown encoding: "+i);if(t.length===1){let s=t.charCodeAt(0);(i==="utf8"&&s<128||i==="latin1")&&(t=s)}}else typeof t=="number"?t=t&255:typeof t=="boolean"&&(t=Number(t));if(r<0||this.length<r||this.length<n)throw new RangeError("Out of range index");if(n<=r)return this;r=r>>>0,n=n===void 0?this.length:n>>>0,t||(t=0);let a;if(typeof t=="number")for(a=r;a<n;++a)this[a]=t;else{let s=M.isBuffer(t)?t:M.from(t,i),o=s.length;if(o===0)throw new TypeError('The value "'+t+'" is invalid for argument "value"');for(a=0;a<n-r;++a)this[a+r]=s[a%o]}return this};var qa={};function oh(e,t,r){qa[e]=class extends r{constructor(){super(),Object.defineProperty(this,"message",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${e}]`,this.stack,delete this.name}get code(){return e}set code(i){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:i,writable:!0})}toString(){return`${this.name} [${e}]: ${this.message}`}}}oh("ERR_BUFFER_OUT_OF_BOUNDS",function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError);oh("ERR_INVALID_ARG_TYPE",function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`},TypeError);oh("ERR_OUT_OF_RANGE",function(e,t,r){let n=`The value of "${e}" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=Xv(String(r)):typeof r=="bigint"&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=Xv(i)),i+="n"),n+=` It must be ${t}. Received ${i}`,n},RangeError);function Xv(e){let t="",r=e.length,n=e[0]==="-"?1:0;for(;r>=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function xR(e,t,r){Xa(t,"offset"),(e[t]===void 0||e[t+r]===void 0)&&Io(t,e.length-(r+1))}function s1(e,t,r,n,i,a){if(e>r||e<t){let s=typeof t=="bigint"?"n":"",o;throw a>3?t===0||t===BigInt(0)?o=`>= 0${s} and < 2${s} ** ${(a+1)*8}${s}`:o=`>= -(2${s} ** ${(a+1)*8-1}${s}) and < 2 ** ${(a+1)*8-1}${s}`:o=`>= ${t}${s} and <= ${r}${s}`,new qa.ERR_OUT_OF_RANGE("value",o,e)}xR(n,i,a)}function Xa(e,t){if(typeof e!="number")throw new qa.ERR_INVALID_ARG_TYPE(t,"number",e)}function Io(e,t,r){throw Math.floor(e)!==e?(Xa(e,r),new qa.ERR_OUT_OF_RANGE(r||"offset","an integer",e)):t<0?new qa.ERR_BUFFER_OUT_OF_BOUNDS:new qa.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${t}`,e)}var SR=/[^+/0-9A-Za-z-_]/g;function ER(e){if(e=e.split("=")[0],e=e.trim().replace(SR,""),e.length<2)return"";for(;e.length%4!==0;)e=e+"=";return e}function ih(e,t){t=t||1/0;let r,n=e.length,i=null,a=[];for(let s=0;s<n;++s){if(r=e.charCodeAt(s),r>55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&a.push(239,191,189);continue}else if(s+1===n){(t-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&a.push(239,191,189),i=r;continue}r=(i-55296<<10|r-56320)+65536}else i&&(t-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;a.push(r)}else if(r<2048){if((t-=2)<0)break;a.push(r>>6|192,r&63|128)}else if(r<65536){if((t-=3)<0)break;a.push(r>>12|224,r>>6&63|128,r&63|128)}else if(r<1114112){if((t-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,r&63|128)}else throw new Error("Invalid code point")}return a}function AR(e){let t=[];for(let r=0;r<e.length;++r)t.push(e.charCodeAt(r)&255);return t}function kR(e,t){let r,n,i,a=[];for(let s=0;s<e.length&&!((t-=2)<0);++s)r=e.charCodeAt(s),n=r>>8,i=r%256,a.push(i),a.push(n);return a}function o1(e){return th.toByteArray(ER(e))}function Ic(e,t,r,n){let i;for(i=0;i<n&&!(i+r>=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function hn(e,t){return e instanceof t||e!=null&&e.constructor!=null&&e.constructor.name!=null&&e.constructor.name===t.name}function lh(e){return e!==e}var TR=function(){let e="0123456789abcdef",t=new Array(256);for(let r=0;r<16;++r){let n=r*16;for(let i=0;i<16;++i)t[n+i]=e[r]+e[i]}return t}();function ui(e){return typeof BigInt=="undefined"?CR:e}function CR(){throw new Error("BigInt not supported")}});var l1,uh,Buffer,g=YP(()=>{l1=require("obsidian");l1.Platform.isMobileApp?uh=ch().Buffer:uh=global.Buffer;Buffer=uh});var u1=I((XH,c1)=>{"use strict";g();var dr=function(e){if(e=e||{},this.Promise=e.Promise||Promise,this.queues=Object.create(null),this.domainReentrant=e.domainReentrant||!1,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=Object.create(null)}this.timeout=e.timeout||dr.DEFAULT_TIMEOUT,this.maxOccupationTime=e.maxOccupationTime||dr.DEFAULT_MAX_OCCUPATION_TIME,this.maxExecutionTime=e.maxExecutionTime||dr.DEFAULT_MAX_EXECUTION_TIME,e.maxPending===1/0||Number.isInteger(e.maxPending)&&e.maxPending>=0?this.maxPending=e.maxPending:this.maxPending=dr.DEFAULT_MAX_PENDING};dr.DEFAULT_TIMEOUT=0;dr.DEFAULT_MAX_OCCUPATION_TIME=0;dr.DEFAULT_MAX_EXECUTION_TIME=0;dr.DEFAULT_MAX_PENDING=1e3;dr.prototype.acquire=function(e,t,r,n){if(Array.isArray(e))return this._acquireBatch(e,t,r,n);if(typeof t!="function")throw new Error("You must pass a function to execute");var i=null,a=null,s=null;typeof r!="function"&&(n=r,r=null,s=new this.Promise(function(b,x){i=b,a=x})),n=n||{};var o=!1,c=null,l=null,u=null,f=this,d=function(b,x,E){l&&(clearTimeout(l),l=null),u&&(clearTimeout(u),u=null),b&&(f.queues[e]&&f.queues[e].length===0&&delete f.queues[e],f.domainReentrant&&delete f.domains[e]),o||(s?x?a(x):i(E):typeof r=="function"&&r(x,E),o=!0),b&&f.queues[e]&&f.queues[e].length>0&&f.queues[e].shift()()},h=function(b){if(o)return d(b);c&&(clearTimeout(c),c=null),f.domainReentrant&&b&&(f.domains[e]=process.domain);var x=n.maxExecutionTime||f.maxExecutionTime;if(x&&(u=setTimeout(function(){f.queues[e]&&d(b,new Error("Maximum execution time is exceeded "+e))},x)),t.length===1){var E=!1;try{t(function(_,k){E||(E=!0,d(b,_,k))})}catch(_){E||(E=!0,d(b,_))}}else f._promiseTry(function(){return t()}).then(function(_){d(b,void 0,_)},function(_){d(b,_)})};f.domainReentrant&&process.domain&&(h=process.domain.bind(h));var p=n.maxPending||f.maxPending;if(!f.queues[e])f.queues[e]=[],h(!0);else if(f.domainReentrant&&process.domain&&process.domain===f.domains[e])h(!1);else if(f.queues[e].length>=p)d(!1,new Error("Too many pending tasks in queue "+e));else{var m=function(){h(!0)};n.skipQueue?f.queues[e].unshift(m):f.queues[e].push(m);var v=n.timeout||f.timeout;v&&(c=setTimeout(function(){c=null,d(!1,new Error("async-lock timed out in queue "+e))},v))}var y=n.maxOccupationTime||f.maxOccupationTime;if(y&&(l=setTimeout(function(){f.queues[e]&&d(!1,new Error("Maximum occupation time is exceeded in queue "+e))},y)),s)return s};dr.prototype._acquireBatch=function(e,t,r,n){typeof r!="function"&&(n=r,r=null);var i=this,a=function(o,c){return function(l){i.acquire(o,c,l,n)}},s=e.reduceRight(function(o,c){return a(c,o)},t);if(typeof r=="function")s(r);else return new this.Promise(function(o,c){s.length===1?s(function(l,u){l?c(l):o(u)}):o(s())})};dr.prototype.isBusy=function(e){return e?!!this.queues[e]:Object.keys(this.queues).length>0};dr.prototype._promiseTry=function(e){try{return this.Promise.resolve(e())}catch(t){return this.Promise.reject(t)}};c1.exports=dr});var d1=I((KH,f1)=>{"use strict";g();f1.exports=u1()});var h1=I((QH,fh)=>{g();typeof Object.create=="function"?fh.exports=function(t,r){r&&(t.super_=r,t.prototype=Object.create(r.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:fh.exports=function(t,r){if(r){t.super_=r;var n=function(){};n.prototype=r.prototype,t.prototype=new n,t.prototype.constructor=t}}});var hh=I((dh,m1)=>{g();var Fc=ch(),pn=Fc.Buffer;function p1(e,t){for(var r in e)t[r]=e[r]}pn.from&&pn.alloc&&pn.allocUnsafe&&pn.allocUnsafeSlow?m1.exports=Fc:(p1(Fc,dh),dh.Buffer=Ki);function Ki(e,t,r){return pn(e,t,r)}Ki.prototype=Object.create(pn.prototype);p1(pn,Ki);Ki.from=function(e,t,r){if(typeof e=="number")throw new TypeError("Argument must not be a number");return pn(e,t,r)};Ki.alloc=function(e,t,r){if(typeof e!="number")throw new TypeError("Argument must be a number");var n=pn(e);return t!==void 0?typeof r=="string"?n.fill(t,r):n.fill(t):n.fill(0),n};Ki.allocUnsafe=function(e){if(typeof e!="number")throw new TypeError("Argument must be a number");return pn(e)};Ki.allocUnsafeSlow=function(e){if(typeof e!="number")throw new TypeError("Argument must be a number");return Fc.SlowBuffer(e)}});var y1=I((rU,v1)=>{g();var g1=hh().Buffer;function $c(e,t){this._block=g1.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}$c.prototype.update=function(e,t){typeof e=="string"&&(t=t||"utf8",e=g1.from(e,t));for(var r=this._block,n=this._blockSize,i=e.length,a=this._len,s=0;s<i;){for(var o=a%n,c=Math.min(i-s,n-o),l=0;l<c;l++)r[o+l]=e[s+l];a+=c,s+=c,a%n===0&&this._update(r)}return this._len+=i,this};$c.prototype.digest=function(e){var t=this._len%this._blockSize;this._block[t]=128,this._block.fill(0,t+1),t>=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=this._len*8;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(r&4294967295)>>>0,i=(r-n)/4294967296;this._block.writeUInt32BE(i,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var a=this._hash();return e?a.toString(e):a};$c.prototype._update=function(){throw new Error("_update must be implemented by subclass")};v1.exports=$c});var _1=I((iU,b1)=>{g();var PR=h1(),w1=y1(),RR=hh().Buffer,MR=[1518500249,1859775393,-1894007588,-899497514],OR=new Array(80);function Fo(){this.init(),this._w=OR,w1.call(this,64,56)}PR(Fo,w1);Fo.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this};function IR(e){return e<<1|e>>>31}function FR(e){return e<<5|e>>>27}function $R(e){return e<<30|e>>>2}function LR(e,t,r,n){return e===0?t&r|~t&n:e===2?t&r|t&n|r&n:t^r^n}Fo.prototype._update=function(e){for(var t=this._w,r=this._a|0,n=this._b|0,i=this._c|0,a=this._d|0,s=this._e|0,o=0;o<16;++o)t[o]=e.readInt32BE(o*4);for(;o<80;++o)t[o]=IR(t[o-3]^t[o-8]^t[o-14]^t[o-16]);for(var c=0;c<80;++c){var l=~~(c/20),u=FR(r)+LR(l,n,i,a)+s+t[c]+MR[l]|0;s=a,a=i,i=$R(n),n=r,r=u}this._a=r+this._a|0,this._b=n+this._b|0,this._c=i+this._c|0,this._d=a+this._d|0,this._e=s+this._e|0};Fo.prototype._hash=function(){var e=RR.allocUnsafe(20);return e.writeInt32BE(this._a|0,0),e.writeInt32BE(this._b|0,4),e.writeInt32BE(this._c|0,8),e.writeInt32BE(this._d|0,12),e.writeInt32BE(this._e|0,16),e};b1.exports=Fo});var S1=I(ph=>{g();var x1;(function(e){typeof DO_NOT_EXPORT_CRC=="undefined"?typeof ph=="object"?e(ph):typeof define=="function"&&define.amd?define(function(){var t={};return e(t),t}):e(x1={}):e(x1={})})(function(e){e.version="1.2.2";function t(){for(var w=0,A=new Array(256),S=0;S!=256;++S)w=S,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,w=w&1?-306674912^w>>>1:w>>>1,A[S]=w;return typeof Int32Array!="undefined"?new Int32Array(A):A}var r=t();function n(w){var A=0,S=0,T=0,P=typeof Int32Array!="undefined"?new Int32Array(4096):new Array(4096);for(T=0;T!=256;++T)P[T]=w[T];for(T=0;T!=256;++T)for(S=w[T],A=256+T;A<4096;A+=256)S=P[A]=S>>>8^w[S&255];var O=[];for(T=1;T!=16;++T)O[T-1]=typeof Int32Array!="undefined"?P.subarray(T*256,T*256+256):P.slice(T*256,T*256+256);return O}var i=n(r),a=i[0],s=i[1],o=i[2],c=i[3],l=i[4],u=i[5],f=i[6],d=i[7],h=i[8],p=i[9],m=i[10],v=i[11],y=i[12],b=i[13],x=i[14];function E(w,A){for(var S=A^-1,T=0,P=w.length;T<P;)S=S>>>8^r[(S^w.charCodeAt(T++))&255];return~S}function _(w,A){for(var S=A^-1,T=w.length-15,P=0;P<T;)S=x[w[P++]^S&255]^b[w[P++]^S>>8&255]^y[w[P++]^S>>16&255]^v[w[P++]^S>>>24]^m[w[P++]]^p[w[P++]]^h[w[P++]]^d[w[P++]]^f[w[P++]]^u[w[P++]]^l[w[P++]]^c[w[P++]]^o[w[P++]]^s[w[P++]]^a[w[P++]]^r[w[P++]];for(T+=15;P<T;)S=S>>>8^r[(S^w[P++])&255];return~S}function k(w,A){for(var S=A^-1,T=0,P=w.length,O=0,j=0;T<P;)O=w.charCodeAt(T++),O<128?S=S>>>8^r[(S^O)&255]:O<2048?(S=S>>>8^r[(S^(192|O>>6&31))&255],S=S>>>8^r[(S^(128|O&63))&255]):O>=55296&&O<57344?(O=(O&1023)+64,j=w.charCodeAt(T++)&1023,S=S>>>8^r[(S^(240|O>>8&7))&255],S=S>>>8^r[(S^(128|O>>2&63))&255],S=S>>>8^r[(S^(128|j>>6&15|(O&3)<<4))&255],S=S>>>8^r[(S^(128|j&63))&255]):(S=S>>>8^r[(S^(224|O>>12&15))&255],S=S>>>8^r[(S^(128|O>>6&63))&255],S=S>>>8^r[(S^(128|O&63))&255]);return~S}e.table=r,e.bstr=E,e.buf=_,e.str=k})});var Dn=I(Ht=>{"use strict";g();var DR=typeof Uint8Array!="undefined"&&typeof Uint16Array!="undefined"&&typeof Int32Array!="undefined";function NR(e,t){return Object.prototype.hasOwnProperty.call(e,t)}Ht.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(typeof r!="object")throw new TypeError(r+"must be non-object");for(var n in r)NR(r,n)&&(e[n]=r[n])}}return e};Ht.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var jR={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray){e.set(t.subarray(r,r+n),i);return}for(var a=0;a<n;a++)e[i+a]=t[r+a]},flattenChunks:function(e){var t,r,n,i,a,s;for(n=0,t=0,r=e.length;t<r;t++)n+=e[t].length;for(s=new Uint8Array(n),i=0,t=0,r=e.length;t<r;t++)a=e[t],s.set(a,i),i+=a.length;return s}},BR={arraySet:function(e,t,r,n,i){for(var a=0;a<n;a++)e[i+a]=t[r+a]},flattenChunks:function(e){return[].concat.apply([],e)}};Ht.setTyped=function(e){e?(Ht.Buf8=Uint8Array,Ht.Buf16=Uint16Array,Ht.Buf32=Int32Array,Ht.assign(Ht,jR)):(Ht.Buf8=Array,Ht.Buf16=Array,Ht.Buf32=Array,Ht.assign(Ht,BR))};Ht.setTyped(DR)});var W1=I(Qa=>{"use strict";g();var HR=Dn(),UR=4,E1=0,A1=1,GR=2;function Ja(e){for(var t=e.length;--t>=0;)e[t]=0}var zR=0,M1=1,VR=2,WR=3,qR=258,_h=29,Bo=256,Lo=Bo+1+_h,Ka=30,xh=19,O1=2*Lo+1,Ji=15,mh=16,YR=7,Sh=256,I1=16,F1=17,$1=18,wh=[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],Lc=[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],XR=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],L1=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ZR=512,Nn=new Array((Lo+2)*2);Ja(Nn);var $o=new Array(Ka*2);Ja($o);var Do=new Array(ZR);Ja(Do);var No=new Array(qR-WR+1);Ja(No);var Eh=new Array(_h);Ja(Eh);var Dc=new Array(Ka);Ja(Dc);function gh(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}var D1,N1,j1;function vh(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function B1(e){return e<256?Do[e]:Do[256+(e>>>7)]}function jo(e,t){e.pending_buf[e.pending++]=t&255,e.pending_buf[e.pending++]=t>>>8&255}function Jt(e,t,r){e.bi_valid>mh-r?(e.bi_buf|=t<<e.bi_valid&65535,jo(e,e.bi_buf),e.bi_buf=t>>mh-e.bi_valid,e.bi_valid+=r-mh):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function mn(e,t,r){Jt(e,r[t*2],r[t*2+1])}function H1(e,t){var r=0;do r|=e&1,e>>>=1,r<<=1;while(--t>0);return r>>>1}function KR(e){e.bi_valid===16?(jo(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=e.bi_buf&255,e.bi_buf>>=8,e.bi_valid-=8)}function JR(e,t){var r=t.dyn_tree,n=t.max_code,i=t.stat_desc.static_tree,a=t.stat_desc.has_stree,s=t.stat_desc.extra_bits,o=t.stat_desc.extra_base,c=t.stat_desc.max_length,l,u,f,d,h,p,m=0;for(d=0;d<=Ji;d++)e.bl_count[d]=0;for(r[e.heap[e.heap_max]*2+1]=0,l=e.heap_max+1;l<O1;l++)u=e.heap[l],d=r[r[u*2+1]*2+1]+1,d>c&&(d=c,m++),r[u*2+1]=d,!(u>n)&&(e.bl_count[d]++,h=0,u>=o&&(h=s[u-o]),p=r[u*2],e.opt_len+=p*(d+h),a&&(e.static_len+=p*(i[u*2+1]+h)));if(m!==0){do{for(d=c-1;e.bl_count[d]===0;)d--;e.bl_count[d]--,e.bl_count[d+1]+=2,e.bl_count[c]--,m-=2}while(m>0);for(d=c;d!==0;d--)for(u=e.bl_count[d];u!==0;)f=e.heap[--l],!(f>n)&&(r[f*2+1]!==d&&(e.opt_len+=(d-r[f*2+1])*r[f*2],r[f*2+1]=d),u--)}}function U1(e,t,r){var n=new Array(Ji+1),i=0,a,s;for(a=1;a<=Ji;a++)n[a]=i=i+r[a-1]<<1;for(s=0;s<=t;s++){var o=e[s*2+1];o!==0&&(e[s*2]=H1(n[o]++,o))}}function QR(){var e,t,r,n,i,a=new Array(Ji+1);for(r=0,n=0;n<_h-1;n++)for(Eh[n]=r,e=0;e<1<<wh[n];e++)No[r++]=n;for(No[r-1]=n,i=0,n=0;n<16;n++)for(Dc[n]=i,e=0;e<1<<Lc[n];e++)Do[i++]=n;for(i>>=7;n<Ka;n++)for(Dc[n]=i<<7,e=0;e<1<<Lc[n]-7;e++)Do[256+i++]=n;for(t=0;t<=Ji;t++)a[t]=0;for(e=0;e<=143;)Nn[e*2+1]=8,e++,a[8]++;for(;e<=255;)Nn[e*2+1]=9,e++,a[9]++;for(;e<=279;)Nn[e*2+1]=7,e++,a[7]++;for(;e<=287;)Nn[e*2+1]=8,e++,a[8]++;for(U1(Nn,Lo+1,a),e=0;e<Ka;e++)$o[e*2+1]=5,$o[e*2]=H1(e,5);D1=new gh(Nn,wh,Bo+1,Lo,Ji),N1=new gh($o,Lc,0,Ka,Ji),j1=new gh(new Array(0),XR,0,xh,YR)}function G1(e){var t;for(t=0;t<Lo;t++)e.dyn_ltree[t*2]=0;for(t=0;t<Ka;t++)e.dyn_dtree[t*2]=0;for(t=0;t<xh;t++)e.bl_tree[t*2]=0;e.dyn_ltree[Sh*2]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function z1(e){e.bi_valid>8?jo(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function e5(e,t,r,n){z1(e),n&&(jo(e,r),jo(e,~r)),HR.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}function k1(e,t,r,n){var i=t*2,a=r*2;return e[i]<e[a]||e[i]===e[a]&&n[t]<=n[r]}function yh(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&k1(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!k1(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function T1(e,t,r){var n,i,a=0,s,o;if(e.last_lit!==0)do n=e.pending_buf[e.d_buf+a*2]<<8|e.pending_buf[e.d_buf+a*2+1],i=e.pending_buf[e.l_buf+a],a++,n===0?mn(e,i,t):(s=No[i],mn(e,s+Bo+1,t),o=wh[s],o!==0&&(i-=Eh[s],Jt(e,i,o)),n--,s=B1(n),mn(e,s,r),o=Lc[s],o!==0&&(n-=Dc[s],Jt(e,n,o)));while(a<e.last_lit);mn(e,Sh,t)}function bh(e,t){var r=t.dyn_tree,n=t.stat_desc.static_tree,i=t.stat_desc.has_stree,a=t.stat_desc.elems,s,o,c=-1,l;for(e.heap_len=0,e.heap_max=O1,s=0;s<a;s++)r[s*2]!==0?(e.heap[++e.heap_len]=c=s,e.depth[s]=0):r[s*2+1]=0;for(;e.heap_len<2;)l=e.heap[++e.heap_len]=c<2?++c:0,r[l*2]=1,e.depth[l]=0,e.opt_len--,i&&(e.static_len-=n[l*2+1]);for(t.max_code=c,s=e.heap_len>>1;s>=1;s--)yh(e,r,s);l=a;do s=e.heap[1],e.heap[1]=e.heap[e.heap_len--],yh(e,r,1),o=e.heap[1],e.heap[--e.heap_max]=s,e.heap[--e.heap_max]=o,r[l*2]=r[s*2]+r[o*2],e.depth[l]=(e.depth[s]>=e.depth[o]?e.depth[s]:e.depth[o])+1,r[s*2+1]=r[o*2+1]=l,e.heap[1]=l++,yh(e,r,1);while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],JR(e,t),U1(r,c,e.bl_count)}function C1(e,t,r){var n,i=-1,a,s=t[0*2+1],o=0,c=7,l=4;for(s===0&&(c=138,l=3),t[(r+1)*2+1]=65535,n=0;n<=r;n++)a=s,s=t[(n+1)*2+1],!(++o<c&&a===s)&&(o<l?e.bl_tree[a*2]+=o:a!==0?(a!==i&&e.bl_tree[a*2]++,e.bl_tree[I1*2]++):o<=10?e.bl_tree[F1*2]++:e.bl_tree[$1*2]++,o=0,i=a,s===0?(c=138,l=3):a===s?(c=6,l=3):(c=7,l=4))}function P1(e,t,r){var n,i=-1,a,s=t[0*2+1],o=0,c=7,l=4;for(s===0&&(c=138,l=3),n=0;n<=r;n++)if(a=s,s=t[(n+1)*2+1],!(++o<c&&a===s)){if(o<l)do mn(e,a,e.bl_tree);while(--o!==0);else a!==0?(a!==i&&(mn(e,a,e.bl_tree),o--),mn(e,I1,e.bl_tree),Jt(e,o-3,2)):o<=10?(mn(e,F1,e.bl_tree),Jt(e,o-3,3)):(mn(e,$1,e.bl_tree),Jt(e,o-11,7));o=0,i=a,s===0?(c=138,l=3):a===s?(c=6,l=3):(c=7,l=4)}}function t5(e){var t;for(C1(e,e.dyn_ltree,e.l_desc.max_code),C1(e,e.dyn_dtree,e.d_desc.max_code),bh(e,e.bl_desc),t=xh-1;t>=3&&e.bl_tree[L1[t]*2+1]===0;t--);return e.opt_len+=3*(t+1)+5+5+4,t}function r5(e,t,r,n){var i;for(Jt(e,t-257,5),Jt(e,r-1,5),Jt(e,n-4,4),i=0;i<n;i++)Jt(e,e.bl_tree[L1[i]*2+1],3);P1(e,e.dyn_ltree,t-1),P1(e,e.dyn_dtree,r-1)}function n5(e){var t=4093624447,r;for(r=0;r<=31;r++,t>>>=1)if(t&1&&e.dyn_ltree[r*2]!==0)return E1;if(e.dyn_ltree[9*2]!==0||e.dyn_ltree[10*2]!==0||e.dyn_ltree[13*2]!==0)return A1;for(r=32;r<Bo;r++)if(e.dyn_ltree[r*2]!==0)return A1;return E1}var R1=!1;function i5(e){R1||(QR(),R1=!0),e.l_desc=new vh(e.dyn_ltree,D1),e.d_desc=new vh(e.dyn_dtree,N1),e.bl_desc=new vh(e.bl_tree,j1),e.bi_buf=0,e.bi_valid=0,G1(e)}function V1(e,t,r,n){Jt(e,(zR<<1)+(n?1:0),3),e5(e,t,r,!0)}function a5(e){Jt(e,M1<<1,3),mn(e,Sh,Nn),KR(e)}function s5(e,t,r,n){var i,a,s=0;e.level>0?(e.strm.data_type===GR&&(e.strm.data_type=n5(e)),bh(e,e.l_desc),bh(e,e.d_desc),s=t5(e),i=e.opt_len+3+7>>>3,a=e.static_len+3+7>>>3,a<=i&&(i=a)):i=a=r+5,r+4<=i&&t!==-1?V1(e,t,r,n):e.strategy===UR||a===i?(Jt(e,(M1<<1)+(n?1:0),3),T1(e,Nn,$o)):(Jt(e,(VR<<1)+(n?1:0),3),r5(e,e.l_desc.max_code+1,e.d_desc.max_code+1,s+1),T1(e,e.dyn_ltree,e.dyn_dtree)),G1(e),n&&z1(e)}function o5(e,t,r){return e.pending_buf[e.d_buf+e.last_lit*2]=t>>>8&255,e.pending_buf[e.d_buf+e.last_lit*2+1]=t&255,e.pending_buf[e.l_buf+e.last_lit]=r&255,e.last_lit++,t===0?e.dyn_ltree[r*2]++:(e.matches++,t--,e.dyn_ltree[(No[r]+Bo+1)*2]++,e.dyn_dtree[B1(t)*2]++),e.last_lit===e.lit_bufsize-1}Qa._tr_init=i5;Qa._tr_stored_block=V1;Qa._tr_flush_block=s5;Qa._tr_tally=o5;Qa._tr_align=a5});var Ah=I((dU,q1)=>{"use strict";g();function l5(e,t,r,n){for(var i=e&65535|0,a=e>>>16&65535|0,s=0;r!==0;){s=r>2e3?2e3:r,r-=s;do i=i+t[n++]|0,a=a+i|0;while(--s);i%=65521,a%=65521}return i|a<<16|0}q1.exports=l5});var kh=I((pU,Y1)=>{"use strict";g();function c5(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=e&1?3988292384^e>>>1:e>>>1;t[r]=e}return t}var u5=c5();function f5(e,t,r,n){var i=u5,a=n+r;e^=-1;for(var s=n;s<a;s++)e=e>>>8^i[(e^t[s])&255];return e^-1}Y1.exports=f5});var Nc=I((gU,X1)=>{"use strict";g();X1.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}});var iy=I(yn=>{"use strict";g();var Ut=Dn(),Rr=W1(),Q1=Ah(),fi=kh(),d5=Nc(),ra=0,h5=1,p5=3,gi=4,Z1=5,vn=0,K1=1,Mr=-2,m5=-3,Th=-5,g5=-1,v5=1,jc=2,y5=3,w5=4,b5=0,_5=2,Gc=8,x5=9,S5=15,E5=8,A5=29,k5=256,Ph=k5+1+A5,T5=30,C5=19,P5=2*Ph+1,R5=15,we=3,pi=258,Zr=pi+we+1,M5=32,zc=42,Rh=69,Bc=73,Hc=91,Uc=103,Qi=113,Uo=666,pt=1,Go=2,ea=3,rs=4,O5=3;function mi(e,t){return e.msg=d5[t],t}function J1(e){return(e<<1)-(e>4?9:0)}function hi(e){for(var t=e.length;--t>=0;)e[t]=0}function di(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),r!==0&&(Ut.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,t.pending===0&&(t.pending_out=0))}function xt(e,t){Rr._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,di(e.strm)}function Ae(e,t){e.pending_buf[e.pending++]=t}function Ho(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=t&255}function I5(e,t,r,n){var i=e.avail_in;return i>n&&(i=n),i===0?0:(e.avail_in-=i,Ut.arraySet(t,e.input,e.next_in,i,r),e.state.wrap===1?e.adler=Q1(e.adler,t,i,r):e.state.wrap===2&&(e.adler=fi(e.adler,t,i,r)),e.next_in+=i,e.total_in+=i,i)}function ey(e,t){var r=e.max_chain_length,n=e.strstart,i,a,s=e.prev_length,o=e.nice_match,c=e.strstart>e.w_size-Zr?e.strstart-(e.w_size-Zr):0,l=e.window,u=e.w_mask,f=e.prev,d=e.strstart+pi,h=l[n+s-1],p=l[n+s];e.prev_length>=e.good_match&&(r>>=2),o>e.lookahead&&(o=e.lookahead);do if(i=t,!(l[i+s]!==p||l[i+s-1]!==h||l[i]!==l[n]||l[++i]!==l[n+1])){n+=2,i++;do;while(l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&n<d);if(a=pi-(d-n),n=d-pi,a>s){if(e.match_start=t,s=a,a>=o)break;h=l[n+s-1],p=l[n+s]}}while((t=f[t&u])>c&&--r!==0);return s<=e.lookahead?s:e.lookahead}function ta(e){var t=e.w_size,r,n,i,a,s;do{if(a=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-Zr)){Ut.arraySet(e.window,e.window,t,t,0),e.match_start-=t,e.strstart-=t,e.block_start-=t,n=e.hash_size,r=n;do i=e.head[--r],e.head[r]=i>=t?i-t:0;while(--n);n=t,r=n;do i=e.prev[--r],e.prev[r]=i>=t?i-t:0;while(--n);a+=t}if(e.strm.avail_in===0)break;if(n=I5(e.strm,e.window,e.strstart+e.lookahead,a),e.lookahead+=n,e.lookahead+e.insert>=we)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+we-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<we)););}while(e.lookahead<Zr&&e.strm.avail_in!==0)}function F5(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(ta(e),e.lookahead===0&&t===ra)return pt;if(e.lookahead===0)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((e.strstart===0||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,xt(e,!1),e.strm.avail_out===0)||e.strstart-e.block_start>=e.w_size-Zr&&(xt(e,!1),e.strm.avail_out===0))return pt}return e.insert=0,t===gi?(xt(e,!0),e.strm.avail_out===0?ea:rs):(e.strstart>e.block_start&&(xt(e,!1),e.strm.avail_out===0),pt)}function Ch(e,t){for(var r,n;;){if(e.lookahead<Zr){if(ta(e),e.lookahead<Zr&&t===ra)return pt;if(e.lookahead===0)break}if(r=0,e.lookahead>=we&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+we-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),r!==0&&e.strstart-r<=e.w_size-Zr&&(e.match_length=ey(e,r)),e.match_length>=we)if(n=Rr._tr_tally(e,e.strstart-e.match_start,e.match_length-we),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=we){e.match_length--;do e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+we-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart;while(--e.match_length!==0);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=Rr._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(xt(e,!1),e.strm.avail_out===0))return pt}return e.insert=e.strstart<we-1?e.strstart:we-1,t===gi?(xt(e,!0),e.strm.avail_out===0?ea:rs):e.last_lit&&(xt(e,!1),e.strm.avail_out===0)?pt:Go}function es(e,t){for(var r,n,i;;){if(e.lookahead<Zr){if(ta(e),e.lookahead<Zr&&t===ra)return pt;if(e.lookahead===0)break}if(r=0,e.lookahead>=we&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+we-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=we-1,r!==0&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-Zr&&(e.match_length=ey(e,r),e.match_length<=5&&(e.strategy===v5||e.match_length===we&&e.strstart-e.match_start>4096)&&(e.match_length=we-1)),e.prev_length>=we&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-we,n=Rr._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-we),e.lookahead-=e.prev_length-1,e.prev_length-=2;do++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+we-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart);while(--e.prev_length!==0);if(e.match_available=0,e.match_length=we-1,e.strstart++,n&&(xt(e,!1),e.strm.avail_out===0))return pt}else if(e.match_available){if(n=Rr._tr_tally(e,0,e.window[e.strstart-1]),n&&xt(e,!1),e.strstart++,e.lookahead--,e.strm.avail_out===0)return pt}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=Rr._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<we-1?e.strstart:we-1,t===gi?(xt(e,!0),e.strm.avail_out===0?ea:rs):e.last_lit&&(xt(e,!1),e.strm.avail_out===0)?pt:Go}function $5(e,t){for(var r,n,i,a,s=e.window;;){if(e.lookahead<=pi){if(ta(e),e.lookahead<=pi&&t===ra)return pt;if(e.lookahead===0)break}if(e.match_length=0,e.lookahead>=we&&e.strstart>0&&(i=e.strstart-1,n=s[i],n===s[++i]&&n===s[++i]&&n===s[++i])){a=e.strstart+pi;do;while(n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&i<a);e.match_length=pi-(a-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=we?(r=Rr._tr_tally(e,1,e.match_length-we),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=Rr._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(xt(e,!1),e.strm.avail_out===0))return pt}return e.insert=0,t===gi?(xt(e,!0),e.strm.avail_out===0?ea:rs):e.last_lit&&(xt(e,!1),e.strm.avail_out===0)?pt:Go}function L5(e,t){for(var r;;){if(e.lookahead===0&&(ta(e),e.lookahead===0)){if(t===ra)return pt;break}if(e.match_length=0,r=Rr._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(xt(e,!1),e.strm.avail_out===0))return pt}return e.insert=0,t===gi?(xt(e,!0),e.strm.avail_out===0?ea:rs):e.last_lit&&(xt(e,!1),e.strm.avail_out===0)?pt:Go}function gn(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}var ts;ts=[new gn(0,0,0,0,F5),new gn(4,4,8,4,Ch),new gn(4,5,16,8,Ch),new gn(4,6,32,32,Ch),new gn(4,4,16,16,es),new gn(8,16,32,32,es),new gn(8,16,128,128,es),new gn(8,32,128,256,es),new gn(32,128,258,1024,es),new gn(32,258,258,4096,es)];function D5(e){e.window_size=2*e.w_size,hi(e.head),e.max_lazy_match=ts[e.level].max_lazy,e.good_match=ts[e.level].good_length,e.nice_match=ts[e.level].nice_length,e.max_chain_length=ts[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=we-1,e.match_available=0,e.ins_h=0}function N5(){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=Gc,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 Ut.Buf16(P5*2),this.dyn_dtree=new Ut.Buf16((2*T5+1)*2),this.bl_tree=new Ut.Buf16((2*C5+1)*2),hi(this.dyn_ltree),hi(this.dyn_dtree),hi(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Ut.Buf16(R5+1),this.heap=new Ut.Buf16(2*Ph+1),hi(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Ut.Buf16(2*Ph+1),hi(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 ty(e){var t;return!e||!e.state?mi(e,Mr):(e.total_in=e.total_out=0,e.data_type=_5,t=e.state,t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?zc:Qi,e.adler=t.wrap===2?0:1,t.last_flush=ra,Rr._tr_init(t),vn)}function ry(e){var t=ty(e);return t===vn&&D5(e.state),t}function j5(e,t){return!e||!e.state||e.state.wrap!==2?Mr:(e.state.gzhead=t,vn)}function ny(e,t,r,n,i,a){if(!e)return Mr;var s=1;if(t===g5&&(t=6),n<0?(s=0,n=-n):n>15&&(s=2,n-=16),i<1||i>x5||r!==Gc||n<8||n>15||t<0||t>9||a<0||a>w5)return mi(e,Mr);n===8&&(n=9);var o=new N5;return e.state=o,o.strm=e,o.wrap=s,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+we-1)/we),o.window=new Ut.Buf8(o.w_size*2),o.head=new Ut.Buf16(o.hash_size),o.prev=new Ut.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=o.lit_bufsize*4,o.pending_buf=new Ut.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=a,o.method=r,ry(e)}function B5(e,t){return ny(e,t,Gc,S5,E5,b5)}function H5(e,t){var r,n,i,a;if(!e||!e.state||t>Z1||t<0)return e?mi(e,Mr):Mr;if(n=e.state,!e.output||!e.input&&e.avail_in!==0||n.status===Uo&&t!==gi)return mi(e,e.avail_out===0?Th:Mr);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===zc)if(n.wrap===2)e.adler=0,Ae(n,31),Ae(n,139),Ae(n,8),n.gzhead?(Ae(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),Ae(n,n.gzhead.time&255),Ae(n,n.gzhead.time>>8&255),Ae(n,n.gzhead.time>>16&255),Ae(n,n.gzhead.time>>24&255),Ae(n,n.level===9?2:n.strategy>=jc||n.level<2?4:0),Ae(n,n.gzhead.os&255),n.gzhead.extra&&n.gzhead.extra.length&&(Ae(n,n.gzhead.extra.length&255),Ae(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=fi(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=Rh):(Ae(n,0),Ae(n,0),Ae(n,0),Ae(n,0),Ae(n,0),Ae(n,n.level===9?2:n.strategy>=jc||n.level<2?4:0),Ae(n,O5),n.status=Qi);else{var s=Gc+(n.w_bits-8<<4)<<8,o=-1;n.strategy>=jc||n.level<2?o=0:n.level<6?o=1:n.level===6?o=2:o=3,s|=o<<6,n.strstart!==0&&(s|=M5),s+=31-s%31,n.status=Qi,Ho(n,s),n.strstart!==0&&(Ho(n,e.adler>>>16),Ho(n,e.adler&65535)),e.adler=1}if(n.status===Rh)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(n.gzhead.extra.length&65535)&&!(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),di(e),i=n.pending,n.pending===n.pending_buf_size));)Ae(n,n.gzhead.extra[n.gzindex]&255),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=Bc)}else n.status=Bc;if(n.status===Bc)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),di(e),i=n.pending,n.pending===n.pending_buf_size)){a=1;break}n.gzindex<n.gzhead.name.length?a=n.gzhead.name.charCodeAt(n.gzindex++)&255:a=0,Ae(n,a)}while(a!==0);n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),a===0&&(n.gzindex=0,n.status=Hc)}else n.status=Hc;if(n.status===Hc)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),di(e),i=n.pending,n.pending===n.pending_buf_size)){a=1;break}n.gzindex<n.gzhead.comment.length?a=n.gzhead.comment.charCodeAt(n.gzindex++)&255:a=0,Ae(n,a)}while(a!==0);n.gzhead.hcrc&&n.pending>i&&(e.adler=fi(e.adler,n.pending_buf,n.pending-i,i)),a===0&&(n.status=Uc)}else n.status=Uc;if(n.status===Uc&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&di(e),n.pending+2<=n.pending_buf_size&&(Ae(n,e.adler&255),Ae(n,e.adler>>8&255),e.adler=0,n.status=Qi)):n.status=Qi),n.pending!==0){if(di(e),e.avail_out===0)return n.last_flush=-1,vn}else if(e.avail_in===0&&J1(t)<=J1(r)&&t!==gi)return mi(e,Th);if(n.status===Uo&&e.avail_in!==0)return mi(e,Th);if(e.avail_in!==0||n.lookahead!==0||t!==ra&&n.status!==Uo){var c=n.strategy===jc?L5(n,t):n.strategy===y5?$5(n,t):ts[n.level].func(n,t);if((c===ea||c===rs)&&(n.status=Uo),c===pt||c===ea)return e.avail_out===0&&(n.last_flush=-1),vn;if(c===Go&&(t===h5?Rr._tr_align(n):t!==Z1&&(Rr._tr_stored_block(n,0,0,!1),t===p5&&(hi(n.head),n.lookahead===0&&(n.strstart=0,n.block_start=0,n.insert=0))),di(e),e.avail_out===0))return n.last_flush=-1,vn}return t!==gi?vn:n.wrap<=0?K1:(n.wrap===2?(Ae(n,e.adler&255),Ae(n,e.adler>>8&255),Ae(n,e.adler>>16&255),Ae(n,e.adler>>24&255),Ae(n,e.total_in&255),Ae(n,e.total_in>>8&255),Ae(n,e.total_in>>16&255),Ae(n,e.total_in>>24&255)):(Ho(n,e.adler>>>16),Ho(n,e.adler&65535)),di(e),n.wrap>0&&(n.wrap=-n.wrap),n.pending!==0?vn:K1)}function U5(e){var t;return!e||!e.state?Mr:(t=e.state.status,t!==zc&&t!==Rh&&t!==Bc&&t!==Hc&&t!==Uc&&t!==Qi&&t!==Uo?mi(e,Mr):(e.state=null,t===Qi?mi(e,m5):vn))}function G5(e,t){var r=t.length,n,i,a,s,o,c,l,u;if(!e||!e.state||(n=e.state,s=n.wrap,s===2||s===1&&n.status!==zc||n.lookahead))return Mr;for(s===1&&(e.adler=Q1(e.adler,t,r,0)),n.wrap=0,r>=n.w_size&&(s===0&&(hi(n.head),n.strstart=0,n.block_start=0,n.insert=0),u=new Ut.Buf8(n.w_size),Ut.arraySet(u,t,r-n.w_size,n.w_size,0),t=u,r=n.w_size),o=e.avail_in,c=e.next_in,l=e.input,e.avail_in=r,e.next_in=0,e.input=t,ta(n);n.lookahead>=we;){i=n.strstart,a=n.lookahead-(we-1);do n.ins_h=(n.ins_h<<n.hash_shift^n.window[i+we-1])&n.hash_mask,n.prev[i&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=i,i++;while(--a);n.strstart=i,n.lookahead=we-1,ta(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=we-1,n.match_available=0,e.next_in=c,e.input=l,e.avail_in=o,n.wrap=s,vn}yn.deflateInit=B5;yn.deflateInit2=ny;yn.deflateReset=ry;yn.deflateResetKeep=ty;yn.deflateSetHeader=j5;yn.deflate=H5;yn.deflateEnd=U5;yn.deflateSetDictionary=G5;yn.deflateInfo="pako deflate (from Nodeca project)"});var Mh=I(ns=>{"use strict";g();var Vc=Dn(),ay=!0,sy=!0;try{String.fromCharCode.apply(null,[0])}catch(e){ay=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){sy=!1}var zo=new Vc.Buf8(256);for(jn=0;jn<256;jn++)zo[jn]=jn>=252?6:jn>=248?5:jn>=240?4:jn>=224?3:jn>=192?2:1;var jn;zo[254]=zo[254]=1;ns.string2buf=function(e){var t,r,n,i,a,s=e.length,o=0;for(i=0;i<s;i++)r=e.charCodeAt(i),(r&64512)===55296&&i+1<s&&(n=e.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new Vc.Buf8(o),a=0,i=0;a<o;i++)r=e.charCodeAt(i),(r&64512)===55296&&i+1<s&&(n=e.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),r<128?t[a++]=r:r<2048?(t[a++]=192|r>>>6,t[a++]=128|r&63):r<65536?(t[a++]=224|r>>>12,t[a++]=128|r>>>6&63,t[a++]=128|r&63):(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63,t[a++]=128|r>>>6&63,t[a++]=128|r&63);return t};function oy(e,t){if(t<65534&&(e.subarray&&sy||!e.subarray&&ay))return String.fromCharCode.apply(null,Vc.shrinkBuf(e,t));for(var r="",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}ns.buf2binstring=function(e){return oy(e,e.length)};ns.binstring2buf=function(e){for(var t=new Vc.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t};ns.buf2string=function(e,t){var r,n,i,a,s=t||e.length,o=new Array(s*2);for(n=0,r=0;r<s;){if(i=e[r++],i<128){o[n++]=i;continue}if(a=zo[i],a>4){o[n++]=65533,r+=a-1;continue}for(i&=a===2?31:a===3?15:7;a>1&&r<s;)i=i<<6|e[r++]&63,a--;if(a>1){o[n++]=65533;continue}i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|i&1023)}return oy(o,n)};ns.utf8border=function(e,t){var r;for(t=t||e.length,t>e.length&&(t=e.length),r=t-1;r>=0&&(e[r]&192)===128;)r--;return r<0||r===0?t:r+zo[e[r]]>t?r:t}});var Oh=I((xU,ly)=>{"use strict";g();function z5(){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}ly.exports=z5});var dy=I(qo=>{"use strict";g();var Vo=iy(),Wo=Dn(),Fh=Mh(),$h=Nc(),V5=Oh(),fy=Object.prototype.toString,W5=0,Ih=4,is=0,cy=1,uy=2,q5=-1,Y5=0,X5=8;function na(e){if(!(this instanceof na))return new na(e);this.options=Wo.assign({level:q5,method:X5,chunkSize:16384,windowBits:15,memLevel:8,strategy:Y5,to:""},e||{});var t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new V5,this.strm.avail_out=0;var r=Vo.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==is)throw new Error($h[r]);if(t.header&&Vo.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(typeof t.dictionary=="string"?n=Fh.string2buf(t.dictionary):fy.call(t.dictionary)==="[object ArrayBuffer]"?n=new Uint8Array(t.dictionary):n=t.dictionary,r=Vo.deflateSetDictionary(this.strm,n),r!==is)throw new Error($h[r]);this._dict_set=!0}}na.prototype.push=function(e,t){var r=this.strm,n=this.options.chunkSize,i,a;if(this.ended)return!1;a=t===~~t?t:t===!0?Ih:W5,typeof e=="string"?r.input=Fh.string2buf(e):fy.call(e)==="[object ArrayBuffer]"?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;do{if(r.avail_out===0&&(r.output=new Wo.Buf8(n),r.next_out=0,r.avail_out=n),i=Vo.deflate(r,a),i!==cy&&i!==is)return this.onEnd(i),this.ended=!0,!1;(r.avail_out===0||r.avail_in===0&&(a===Ih||a===uy))&&(this.options.to==="string"?this.onData(Fh.buf2binstring(Wo.shrinkBuf(r.output,r.next_out))):this.onData(Wo.shrinkBuf(r.output,r.next_out)))}while((r.avail_in>0||r.avail_out===0)&&i!==cy);return a===Ih?(i=Vo.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===is):(a===uy&&(this.onEnd(is),r.avail_out=0),!0)};na.prototype.onData=function(e){this.chunks.push(e)};na.prototype.onEnd=function(e){e===is&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=Wo.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function Lh(e,t){var r=new na(t);if(r.push(e,!0),r.err)throw r.msg||$h[r.err];return r.result}function Z5(e,t){return t=t||{},t.raw=!0,Lh(e,t)}function K5(e,t){return t=t||{},t.gzip=!0,Lh(e,t)}qo.Deflate=na;qo.deflate=Lh;qo.deflateRaw=Z5;qo.gzip=K5});var py=I((kU,hy)=>{"use strict";g();var Wc=30,J5=12;hy.exports=function(t,r){var n,i,a,s,o,c,l,u,f,d,h,p,m,v,y,b,x,E,_,k,w,A,S,T,P;n=t.state,i=t.next_in,T=t.input,a=i+(t.avail_in-5),s=t.next_out,P=t.output,o=s-(r-t.avail_out),c=s+(t.avail_out-257),l=n.dmax,u=n.wsize,f=n.whave,d=n.wnext,h=n.window,p=n.hold,m=n.bits,v=n.lencode,y=n.distcode,b=(1<<n.lenbits)-1,x=(1<<n.distbits)-1;e:do{m<15&&(p+=T[i++]<<m,m+=8,p+=T[i++]<<m,m+=8),E=v[p&b];t:for(;;){if(_=E>>>24,p>>>=_,m-=_,_=E>>>16&255,_===0)P[s++]=E&65535;else if(_&16){k=E&65535,_&=15,_&&(m<_&&(p+=T[i++]<<m,m+=8),k+=p&(1<<_)-1,p>>>=_,m-=_),m<15&&(p+=T[i++]<<m,m+=8,p+=T[i++]<<m,m+=8),E=y[p&x];r:for(;;){if(_=E>>>24,p>>>=_,m-=_,_=E>>>16&255,_&16){if(w=E&65535,_&=15,m<_&&(p+=T[i++]<<m,m+=8,m<_&&(p+=T[i++]<<m,m+=8)),w+=p&(1<<_)-1,w>l){t.msg="invalid distance too far back",n.mode=Wc;break e}if(p>>>=_,m-=_,_=s-o,w>_){if(_=w-_,_>f&&n.sane){t.msg="invalid distance too far back",n.mode=Wc;break e}if(A=0,S=h,d===0){if(A+=u-_,_<k){k-=_;do P[s++]=h[A++];while(--_);A=s-w,S=P}}else if(d<_){if(A+=u+d-_,_-=d,_<k){k-=_;do P[s++]=h[A++];while(--_);if(A=0,d<k){_=d,k-=_;do P[s++]=h[A++];while(--_);A=s-w,S=P}}}else if(A+=d-_,_<k){k-=_;do P[s++]=h[A++];while(--_);A=s-w,S=P}for(;k>2;)P[s++]=S[A++],P[s++]=S[A++],P[s++]=S[A++],k-=3;k&&(P[s++]=S[A++],k>1&&(P[s++]=S[A++]))}else{A=s-w;do P[s++]=P[A++],P[s++]=P[A++],P[s++]=P[A++],k-=3;while(k>2);k&&(P[s++]=P[A++],k>1&&(P[s++]=P[A++]))}}else if(_&64){t.msg="invalid distance code",n.mode=Wc;break e}else{E=y[(E&65535)+(p&(1<<_)-1)];continue r}break}}else if(_&64)if(_&32){n.mode=J5;break e}else{t.msg="invalid literal/length code",n.mode=Wc;break e}else{E=v[(E&65535)+(p&(1<<_)-1)];continue t}break}}while(i<a&&s<c);k=m>>3,i-=k,m-=k<<3,p&=(1<<m)-1,t.next_in=i,t.next_out=s,t.avail_in=i<a?5+(a-i):5-(i-a),t.avail_out=s<c?257+(c-s):257-(s-c),n.hold=p,n.bits=m}});var _y=I((CU,by)=>{"use strict";g();var my=Dn(),as=15,gy=852,vy=592,yy=0,Dh=1,wy=2,Q5=[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],e6=[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],t6=[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],r6=[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];by.exports=function(t,r,n,i,a,s,o,c){var l=c.bits,u=0,f=0,d=0,h=0,p=0,m=0,v=0,y=0,b=0,x=0,E,_,k,w,A,S=null,T=0,P,O=new my.Buf16(as+1),j=new my.Buf16(as+1),D=null,Q=0,de,ee,J;for(u=0;u<=as;u++)O[u]=0;for(f=0;f<i;f++)O[r[n+f]]++;for(p=l,h=as;h>=1&&O[h]===0;h--);if(p>h&&(p=h),h===0)return a[s++]=1<<24|64<<16|0,a[s++]=1<<24|64<<16|0,c.bits=1,0;for(d=1;d<h&&O[d]===0;d++);for(p<d&&(p=d),y=1,u=1;u<=as;u++)if(y<<=1,y-=O[u],y<0)return-1;if(y>0&&(t===yy||h!==1))return-1;for(j[1]=0,u=1;u<as;u++)j[u+1]=j[u]+O[u];for(f=0;f<i;f++)r[n+f]!==0&&(o[j[r[n+f]]++]=f);if(t===yy?(S=D=o,P=19):t===Dh?(S=Q5,T-=257,D=e6,Q-=257,P=256):(S=t6,D=r6,P=-1),x=0,f=0,u=d,A=s,m=p,v=0,k=-1,b=1<<p,w=b-1,t===Dh&&b>gy||t===wy&&b>vy)return 1;for(;;){de=u-v,o[f]<P?(ee=0,J=o[f]):o[f]>P?(ee=D[Q+o[f]],J=S[T+o[f]]):(ee=96,J=0),E=1<<u-v,_=1<<m,d=_;do _-=E,a[A+(x>>v)+_]=de<<24|ee<<16|J|0;while(_!==0);for(E=1<<u-1;x&E;)E>>=1;if(E!==0?(x&=E-1,x+=E):x=0,f++,--O[u]===0){if(u===h)break;u=r[n+o[f]]}if(u>p&&(x&w)!==k){for(v===0&&(v=p),A+=d,m=u-v,y=1<<m;m+v<h&&(y-=O[m+v],!(y<=0));)m++,y<<=1;if(b+=1<<m,t===Dh&&b>gy||t===wy&&b>vy)return 1;k=x&w,a[k]=p<<24|m<<16|A-s|0}}return x!==0&&(a[A+x]=u-v<<24|64<<16|0),c.bits=p,0}});var rw=I(Kr=>{"use strict";g();var hr=Dn(),Gh=Ah(),wn=kh(),n6=py(),Yo=_y(),i6=0,qy=1,Yy=2,xy=4,a6=5,qc=6,ia=0,s6=1,o6=2,Or=-2,Xy=-3,zh=-4,l6=-5,Sy=8,Zy=1,Ey=2,Ay=3,ky=4,Ty=5,Cy=6,Py=7,Ry=8,My=9,Oy=10,Zc=11,Bn=12,Nh=13,Iy=14,jh=15,Fy=16,$y=17,Ly=18,Dy=19,Yc=20,Xc=21,Ny=22,jy=23,By=24,Hy=25,Uy=26,Bh=27,Gy=28,zy=29,je=30,Vh=31,c6=32,u6=852,f6=592,d6=15,h6=d6;function Vy(e){return(e>>>24&255)+(e>>>8&65280)+((e&65280)<<8)+((e&255)<<24)}function p6(){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 hr.Buf16(320),this.work=new hr.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function Ky(e){var t;return!e||!e.state?Or:(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=t.wrap&1),t.mode=Zy,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new hr.Buf32(u6),t.distcode=t.distdyn=new hr.Buf32(f6),t.sane=1,t.back=-1,ia)}function Jy(e){var t;return!e||!e.state?Or:(t=e.state,t.wsize=0,t.whave=0,t.wnext=0,Ky(e))}function Qy(e,t){var r,n;return!e||!e.state||(n=e.state,t<0?(r=0,t=-t):(r=(t>>4)+1,t<48&&(t&=15)),t&&(t<8||t>15))?Or:(n.window!==null&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,Jy(e))}function ew(e,t){var r,n;return e?(n=new p6,e.state=n,n.window=null,r=Qy(e,t),r!==ia&&(e.state=null),r):Or}function m6(e){return ew(e,h6)}var Wy=!0,Hh,Uh;function g6(e){if(Wy){var t;for(Hh=new hr.Buf32(512),Uh=new hr.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(Yo(qy,e.lens,0,288,Hh,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;Yo(Yy,e.lens,0,32,Uh,0,e.work,{bits:5}),Wy=!1}e.lencode=Hh,e.lenbits=9,e.distcode=Uh,e.distbits=5}function tw(e,t,r,n){var i,a=e.state;return a.window===null&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new hr.Buf8(a.wsize)),n>=a.wsize?(hr.arraySet(a.window,t,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):(i=a.wsize-a.wnext,i>n&&(i=n),hr.arraySet(a.window,t,r-n,i,a.wnext),n-=i,n?(hr.arraySet(a.window,t,r-n,n,0),a.wnext=n,a.whave=a.wsize):(a.wnext+=i,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=i))),0}function v6(e,t){var r,n,i,a,s,o,c,l,u,f,d,h,p,m,v=0,y,b,x,E,_,k,w,A,S=new hr.Buf8(4),T,P,O=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&e.avail_in!==0)return Or;r=e.state,r.mode===Bn&&(r.mode=Nh),s=e.next_out,i=e.output,c=e.avail_out,a=e.next_in,n=e.input,o=e.avail_in,l=r.hold,u=r.bits,f=o,d=c,A=ia;e:for(;;)switch(r.mode){case Zy:if(r.wrap===0){r.mode=Nh;break}for(;u<16;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(r.wrap&2&&l===35615){r.check=0,S[0]=l&255,S[1]=l>>>8&255,r.check=wn(r.check,S,2,0),l=0,u=0,r.mode=Ey;break}if(r.flags=0,r.head&&(r.head.done=!1),!(r.wrap&1)||(((l&255)<<8)+(l>>8))%31){e.msg="incorrect header check",r.mode=je;break}if((l&15)!==Sy){e.msg="unknown compression method",r.mode=je;break}if(l>>>=4,u-=4,w=(l&15)+8,r.wbits===0)r.wbits=w;else if(w>r.wbits){e.msg="invalid window size",r.mode=je;break}r.dmax=1<<w,e.adler=r.check=1,r.mode=l&512?Oy:Bn,l=0,u=0;break;case Ey:for(;u<16;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(r.flags=l,(r.flags&255)!==Sy){e.msg="unknown compression method",r.mode=je;break}if(r.flags&57344){e.msg="unknown header flags set",r.mode=je;break}r.head&&(r.head.text=l>>8&1),r.flags&512&&(S[0]=l&255,S[1]=l>>>8&255,r.check=wn(r.check,S,2,0)),l=0,u=0,r.mode=Ay;case Ay:for(;u<32;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.head&&(r.head.time=l),r.flags&512&&(S[0]=l&255,S[1]=l>>>8&255,S[2]=l>>>16&255,S[3]=l>>>24&255,r.check=wn(r.check,S,4,0)),l=0,u=0,r.mode=ky;case ky:for(;u<16;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.head&&(r.head.xflags=l&255,r.head.os=l>>8),r.flags&512&&(S[0]=l&255,S[1]=l>>>8&255,r.check=wn(r.check,S,2,0)),l=0,u=0,r.mode=Ty;case Ty:if(r.flags&1024){for(;u<16;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.length=l,r.head&&(r.head.extra_len=l),r.flags&512&&(S[0]=l&255,S[1]=l>>>8&255,r.check=wn(r.check,S,2,0)),l=0,u=0}else r.head&&(r.head.extra=null);r.mode=Cy;case Cy:if(r.flags&1024&&(h=r.length,h>o&&(h=o),h&&(r.head&&(w=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),hr.arraySet(r.head.extra,n,a,h,w)),r.flags&512&&(r.check=wn(r.check,n,h,a)),o-=h,a+=h,r.length-=h),r.length))break e;r.length=0,r.mode=Py;case Py:if(r.flags&2048){if(o===0)break e;h=0;do w=n[a+h++],r.head&&w&&r.length<65536&&(r.head.name+=String.fromCharCode(w));while(w&&h<o);if(r.flags&512&&(r.check=wn(r.check,n,h,a)),o-=h,a+=h,w)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=Ry;case Ry:if(r.flags&4096){if(o===0)break e;h=0;do w=n[a+h++],r.head&&w&&r.length<65536&&(r.head.comment+=String.fromCharCode(w));while(w&&h<o);if(r.flags&512&&(r.check=wn(r.check,n,h,a)),o-=h,a+=h,w)break e}else r.head&&(r.head.comment=null);r.mode=My;case My:if(r.flags&512){for(;u<16;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(l!==(r.check&65535)){e.msg="header crc mismatch",r.mode=je;break}l=0,u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=Bn;break;case Oy:for(;u<32;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}e.adler=r.check=Vy(l),l=0,u=0,r.mode=Zc;case Zc:if(r.havedict===0)return e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,r.hold=l,r.bits=u,o6;e.adler=r.check=1,r.mode=Bn;case Bn:if(t===a6||t===qc)break e;case Nh:if(r.last){l>>>=u&7,u-=u&7,r.mode=Bh;break}for(;u<3;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}switch(r.last=l&1,l>>>=1,u-=1,l&3){case 0:r.mode=Iy;break;case 1:if(g6(r),r.mode=Yc,t===qc){l>>>=2,u-=2;break e}break;case 2:r.mode=$y;break;case 3:e.msg="invalid block type",r.mode=je}l>>>=2,u-=2;break;case Iy:for(l>>>=u&7,u-=u&7;u<32;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if((l&65535)!==(l>>>16^65535)){e.msg="invalid stored block lengths",r.mode=je;break}if(r.length=l&65535,l=0,u=0,r.mode=jh,t===qc)break e;case jh:r.mode=Fy;case Fy:if(h=r.length,h){if(h>o&&(h=o),h>c&&(h=c),h===0)break e;hr.arraySet(i,n,a,h,s),o-=h,a+=h,c-=h,s+=h,r.length-=h;break}r.mode=Bn;break;case $y:for(;u<14;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(r.nlen=(l&31)+257,l>>>=5,u-=5,r.ndist=(l&31)+1,l>>>=5,u-=5,r.ncode=(l&15)+4,l>>>=4,u-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=je;break}r.have=0,r.mode=Ly;case Ly:for(;r.have<r.ncode;){for(;u<3;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.lens[O[r.have++]]=l&7,l>>>=3,u-=3}for(;r.have<19;)r.lens[O[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,T={bits:r.lenbits},A=Yo(i6,r.lens,0,19,r.lencode,0,r.work,T),r.lenbits=T.bits,A){e.msg="invalid code lengths set",r.mode=je;break}r.have=0,r.mode=Dy;case Dy:for(;r.have<r.nlen+r.ndist;){for(;v=r.lencode[l&(1<<r.lenbits)-1],y=v>>>24,b=v>>>16&255,x=v&65535,!(y<=u);){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(x<16)l>>>=y,u-=y,r.lens[r.have++]=x;else{if(x===16){for(P=y+2;u<P;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(l>>>=y,u-=y,r.have===0){e.msg="invalid bit length repeat",r.mode=je;break}w=r.lens[r.have-1],h=3+(l&3),l>>>=2,u-=2}else if(x===17){for(P=y+3;u<P;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}l>>>=y,u-=y,w=0,h=3+(l&7),l>>>=3,u-=3}else{for(P=y+7;u<P;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}l>>>=y,u-=y,w=0,h=11+(l&127),l>>>=7,u-=7}if(r.have+h>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=je;break}for(;h--;)r.lens[r.have++]=w}}if(r.mode===je)break;if(r.lens[256]===0){e.msg="invalid code -- missing end-of-block",r.mode=je;break}if(r.lenbits=9,T={bits:r.lenbits},A=Yo(qy,r.lens,0,r.nlen,r.lencode,0,r.work,T),r.lenbits=T.bits,A){e.msg="invalid literal/lengths set",r.mode=je;break}if(r.distbits=6,r.distcode=r.distdyn,T={bits:r.distbits},A=Yo(Yy,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,T),r.distbits=T.bits,A){e.msg="invalid distances set",r.mode=je;break}if(r.mode=Yc,t===qc)break e;case Yc:r.mode=Xc;case Xc:if(o>=6&&c>=258){e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,r.hold=l,r.bits=u,n6(e,d),s=e.next_out,i=e.output,c=e.avail_out,a=e.next_in,n=e.input,o=e.avail_in,l=r.hold,u=r.bits,r.mode===Bn&&(r.back=-1);break}for(r.back=0;v=r.lencode[l&(1<<r.lenbits)-1],y=v>>>24,b=v>>>16&255,x=v&65535,!(y<=u);){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(b&&!(b&240)){for(E=y,_=b,k=x;v=r.lencode[k+((l&(1<<E+_)-1)>>E)],y=v>>>24,b=v>>>16&255,x=v&65535,!(E+y<=u);){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}l>>>=E,u-=E,r.back+=E}if(l>>>=y,u-=y,r.back+=y,r.length=x,b===0){r.mode=Uy;break}if(b&32){r.back=-1,r.mode=Bn;break}if(b&64){e.msg="invalid literal/length code",r.mode=je;break}r.extra=b&15,r.mode=Ny;case Ny:if(r.extra){for(P=r.extra;u<P;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.length+=l&(1<<r.extra)-1,l>>>=r.extra,u-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=jy;case jy:for(;v=r.distcode[l&(1<<r.distbits)-1],y=v>>>24,b=v>>>16&255,x=v&65535,!(y<=u);){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(!(b&240)){for(E=y,_=b,k=x;v=r.distcode[k+((l&(1<<E+_)-1)>>E)],y=v>>>24,b=v>>>16&255,x=v&65535,!(E+y<=u);){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}l>>>=E,u-=E,r.back+=E}if(l>>>=y,u-=y,r.back+=y,b&64){e.msg="invalid distance code",r.mode=je;break}r.offset=x,r.extra=b&15,r.mode=By;case By:if(r.extra){for(P=r.extra;u<P;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}r.offset+=l&(1<<r.extra)-1,l>>>=r.extra,u-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=je;break}r.mode=Hy;case Hy:if(c===0)break e;if(h=d-c,r.offset>h){if(h=r.offset-h,h>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=je;break}h>r.wnext?(h-=r.wnext,p=r.wsize-h):p=r.wnext-h,h>r.length&&(h=r.length),m=r.window}else m=i,p=s-r.offset,h=r.length;h>c&&(h=c),c-=h,r.length-=h;do i[s++]=m[p++];while(--h);r.length===0&&(r.mode=Xc);break;case Uy:if(c===0)break e;i[s++]=r.length,c--,r.mode=Xc;break;case Bh:if(r.wrap){for(;u<32;){if(o===0)break e;o--,l|=n[a++]<<u,u+=8}if(d-=c,e.total_out+=d,r.total+=d,d&&(e.adler=r.check=r.flags?wn(r.check,i,d,s-d):Gh(r.check,i,d,s-d)),d=c,(r.flags?l:Vy(l))!==r.check){e.msg="incorrect data check",r.mode=je;break}l=0,u=0}r.mode=Gy;case Gy:if(r.wrap&&r.flags){for(;u<32;){if(o===0)break e;o--,l+=n[a++]<<u,u+=8}if(l!==(r.total&4294967295)){e.msg="incorrect length check",r.mode=je;break}l=0,u=0}r.mode=zy;case zy:A=s6;break e;case je:A=Xy;break e;case Vh:return zh;case c6:default:return Or}return e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,r.hold=l,r.bits=u,(r.wsize||d!==e.avail_out&&r.mode<je&&(r.mode<Bh||t!==xy))&&tw(e,e.output,e.next_out,d-e.avail_out)?(r.mode=Vh,zh):(f-=e.avail_in,d-=e.avail_out,e.total_in+=f,e.total_out+=d,r.total+=d,r.wrap&&d&&(e.adler=r.check=r.flags?wn(r.check,i,d,e.next_out-d):Gh(r.check,i,d,e.next_out-d)),e.data_type=r.bits+(r.last?64:0)+(r.mode===Bn?128:0)+(r.mode===Yc||r.mode===jh?256:0),(f===0&&d===0||t===xy)&&A===ia&&(A=l6),A)}function y6(e){if(!e||!e.state)return Or;var t=e.state;return t.window&&(t.window=null),e.state=null,ia}function w6(e,t){var r;return!e||!e.state||(r=e.state,!(r.wrap&2))?Or:(r.head=t,t.done=!1,ia)}function b6(e,t){var r=t.length,n,i,a;return!e||!e.state||(n=e.state,n.wrap!==0&&n.mode!==Zc)?Or:n.mode===Zc&&(i=1,i=Gh(i,t,r,0),i!==n.check)?Xy:(a=tw(e,t,r,r),a?(n.mode=Vh,zh):(n.havedict=1,ia))}Kr.inflateReset=Jy;Kr.inflateReset2=Qy;Kr.inflateResetKeep=Ky;Kr.inflateInit=m6;Kr.inflateInit2=ew;Kr.inflate=v6;Kr.inflateEnd=y6;Kr.inflateGetHeader=w6;Kr.inflateSetDictionary=b6;Kr.inflateInfo="pako inflate (from Nodeca project)"});var Wh=I((OU,nw)=>{"use strict";g();nw.exports={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,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,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,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}});var aw=I((FU,iw)=>{"use strict";g();function _6(){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=!1}iw.exports=_6});var ow=I(Zo=>{"use strict";g();var ss=rw(),Xo=Dn(),Kc=Mh(),et=Wh(),qh=Nc(),x6=Oh(),S6=aw(),sw=Object.prototype.toString;function aa(e){if(!(this instanceof aa))return new aa(e);this.options=Xo.assign({chunkSize:16384,windowBits:0,to:""},e||{});var t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,t.windowBits===0&&(t.windowBits=-15)),t.windowBits>=0&&t.windowBits<16&&!(e&&e.windowBits)&&(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(t.windowBits&15||(t.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new x6,this.strm.avail_out=0;var r=ss.inflateInit2(this.strm,t.windowBits);if(r!==et.Z_OK)throw new Error(qh[r]);if(this.header=new S6,ss.inflateGetHeader(this.strm,this.header),t.dictionary&&(typeof t.dictionary=="string"?t.dictionary=Kc.string2buf(t.dictionary):sw.call(t.dictionary)==="[object ArrayBuffer]"&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(r=ss.inflateSetDictionary(this.strm,t.dictionary),r!==et.Z_OK)))throw new Error(qh[r])}aa.prototype.push=function(e,t){var r=this.strm,n=this.options.chunkSize,i=this.options.dictionary,a,s,o,c,l,u=!1;if(this.ended)return!1;s=t===~~t?t:t===!0?et.Z_FINISH:et.Z_NO_FLUSH,typeof e=="string"?r.input=Kc.binstring2buf(e):sw.call(e)==="[object ArrayBuffer]"?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;do{if(r.avail_out===0&&(r.output=new Xo.Buf8(n),r.next_out=0,r.avail_out=n),a=ss.inflate(r,et.Z_NO_FLUSH),a===et.Z_NEED_DICT&&i&&(a=ss.inflateSetDictionary(this.strm,i)),a===et.Z_BUF_ERROR&&u===!0&&(a=et.Z_OK,u=!1),a!==et.Z_STREAM_END&&a!==et.Z_OK)return this.onEnd(a),this.ended=!0,!1;r.next_out&&(r.avail_out===0||a===et.Z_STREAM_END||r.avail_in===0&&(s===et.Z_FINISH||s===et.Z_SYNC_FLUSH))&&(this.options.to==="string"?(o=Kc.utf8border(r.output,r.next_out),c=r.next_out-o,l=Kc.buf2string(r.output,o),r.next_out=c,r.avail_out=n-c,c&&Xo.arraySet(r.output,r.output,o,c,0),this.onData(l)):this.onData(Xo.shrinkBuf(r.output,r.next_out))),r.avail_in===0&&r.avail_out===0&&(u=!0)}while((r.avail_in>0||r.avail_out===0)&&a!==et.Z_STREAM_END);return a===et.Z_STREAM_END&&(s=et.Z_FINISH),s===et.Z_FINISH?(a=ss.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===et.Z_OK):(s===et.Z_SYNC_FLUSH&&(this.onEnd(et.Z_OK),r.avail_out=0),!0)};aa.prototype.onData=function(e){this.chunks.push(e)};aa.prototype.onEnd=function(e){e===et.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=Xo.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function Yh(e,t){var r=new aa(t);if(r.push(e,!0),r.err)throw r.msg||qh[r.err];return r.result}function E6(e,t){return t=t||{},t.raw=!0,Yh(e,t)}Zo.Inflate=aa;Zo.inflate=Yh;Zo.inflateRaw=E6;Zo.ungzip=Yh});var uw=I((NU,cw)=>{"use strict";g();var A6=Dn().assign,k6=dy(),T6=ow(),C6=Wh(),lw={};A6(lw,k6,T6,C6);cw.exports=lw});var hw=I((BU,dw)=>{"use strict";g();var fw=(e,t)=>function(...r){let n=t.promiseModule;return new n((i,a)=>{t.multiArgs?r.push((...s)=>{t.errorFirst?s[0]?a(s):(s.shift(),i(s)):i(s)}):t.errorFirst?r.push((s,o)=>{s?a(s):i(o)}):r.push(i),e.apply(this,r)})};dw.exports=(e,t)=>{t=Object.assign({exclude:[/.+(Sync|Stream)$/],errorFirst:!0,promiseModule:Promise},t);let r=typeof e;if(!(e!==null&&(r==="object"||r==="function")))throw new TypeError(`Expected \`input\` to be a \`Function\` or \`Object\`, got \`${e===null?"null":r}\``);let n=a=>{let s=o=>typeof o=="string"?a===o:o.test(a);return t.include?t.include.some(s):!t.exclude.some(s)},i;r==="function"?i=function(...a){return t.excludeMain?e(...a):fw(e,t).apply(this,a)}:i=Object.create(Object.getPrototypeOf(e));for(let a in e){let s=e[a];i[a]=typeof s=="function"&&n(a)?fw(s,t):s}return i}});var xw=I((UU,_w)=>{g();function pw(e){return Array.isArray(e)?e:[e]}var Kh="",mw=" ",Xh="\\",P6=/^\s+$/,R6=/(?:[^\\]|^)\\$/,M6=/^\\!/,O6=/^\\#/,I6=/\r?\n/g,F6=/^\.*\/|^\.+$/,Zh="/",yw="node-ignore";typeof Symbol!="undefined"&&(yw=Symbol.for("node-ignore"));var gw=yw,$6=(e,t,r)=>Object.defineProperty(e,t,{value:r}),L6=/([0-z])-([0-z])/g,ww=()=>!1,D6=e=>e.replace(L6,(t,r,n)=>r.charCodeAt(0)<=n.charCodeAt(0)?t:Kh),N6=e=>{let{length:t}=e;return e.slice(0,t-t%2)},j6=[[/^\uFEFF/,()=>Kh],[/((?:\\\\)*?)(\\?\s+)$/,(e,t,r)=>t+(r.indexOf("\\")===0?mw:Kh)],[/(\\+?)\s/g,(e,t)=>{let{length:r}=t;return t.slice(0,r-r%2)+mw}],[/[\\$.|*+(){^]/g,e=>`\\${e}`],[/(?!\\)\?/g,()=>"[^/]"],[/^\//,()=>"^"],[/\//g,()=>"\\/"],[/^\^*\\\*\\\*\\\//,()=>"^(?:.*\\/)?"],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?"^":"(?:^|\\/)"}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(e,t,r)=>t+6<r.length?"(?:\\/[^\\/]+)*":"\\/.+"],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(e,t,r)=>{let n=r.replace(/\\\*/g,"[^\\/]*");return t+n}],[/\\\\\\(?=[$.|*+(){^])/g,()=>Xh],[/\\\\/g,()=>Xh],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(e,t,r,n,i)=>t===Xh?`\\[${r}${N6(n)}${i}`:i==="]"&&n.length%2===0?`[${D6(r)}${n}]`:"[]"],[/(?:[^*])$/,e=>/\/$/.test(e)?`${e}$`:`${e}(?=$|\\/$)`],[/(\^|\\\/)?\\\*$/,(e,t)=>`${t?`${t}[^/]+`:"[^/]*"}(?=$|\\/$)`]],vw=Object.create(null),B6=(e,t)=>{let r=vw[e];return r||(r=j6.reduce((n,[i,a])=>n.replace(i,a.bind(e)),e),vw[e]=r),t?new RegExp(r,"i"):new RegExp(r)},ep=e=>typeof e=="string",H6=e=>e&&ep(e)&&!P6.test(e)&&!R6.test(e)&&e.indexOf("#")!==0,U6=e=>e.split(I6),Jh=class{constructor(t,r,n,i){this.origin=t,this.pattern=r,this.negative=n,this.regex=i}},G6=(e,t)=>{let r=e,n=!1;e.indexOf("!")===0&&(n=!0,e=e.substr(1)),e=e.replace(M6,"!").replace(O6,"#");let i=B6(e,t);return new Jh(r,e,n,i)},z6=(e,t)=>{throw new t(e)},Hn=(e,t,r)=>ep(e)?e?Hn.isNotRelative(e)?r(`path should be a \`path.relative()\`d string, but got "${t}"`,RangeError):!0:r("path must not be empty",TypeError):r(`path must be a string, but got \`${t}\``,TypeError),bw=e=>F6.test(e);Hn.isNotRelative=bw;Hn.convert=e=>e;var Qh=class{constructor({ignorecase:t=!0,ignoreCase:r=t,allowRelativePaths:n=!1}={}){$6(this,gw,!0),this._rules=[],this._ignoreCase=r,this._allowRelativePaths=n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(t){if(t&&t[gw]){this._rules=this._rules.concat(t._rules),this._added=!0;return}if(H6(t)){let r=G6(t,this._ignoreCase);this._added=!0,this._rules.push(r)}}add(t){return this._added=!1,pw(ep(t)?U6(t):t).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(t){return this.add(t)}_testOne(t,r){let n=!1,i=!1;return this._rules.forEach(a=>{let{negative:s}=a;if(i===s&&n!==i||s&&!n&&!i&&!r)return;a.regex.test(t)&&(n=!s,i=s)}),{ignored:n,unignored:i}}_test(t,r,n,i){let a=t&&Hn.convert(t);return Hn(a,t,this._allowRelativePaths?ww:z6),this._t(a,r,n,i)}_t(t,r,n,i){if(t in r)return r[t];if(i||(i=t.split(Zh)),i.pop(),!i.length)return r[t]=this._testOne(t,n);let a=this._t(i.join(Zh)+Zh,r,n,i);return r[t]=a.ignored?a:this._testOne(t,n)}ignores(t){return this._test(t,this._ignoreCache,!1).ignored}createFilter(){return t=>!this.ignores(t)}filter(t){return pw(t).filter(this.createFilter())}test(t){return this._test(t,this._testCache,!0)}},Jc=e=>new Qh(e),V6=e=>Hn(e&&Hn.convert(e),e,ww);Jc.isPathValid=V6;Jc.default=Jc;_w.exports=Jc;if(typeof process!="undefined"&&(process.env&&process.env.IGNORE_TEST_WIN32||process.platform==="win32")){let e=r=>/^\\\\\?\\/.test(r)||/["<>|\u0000-\u001F]+/u.test(r)?r:r.replace(/\\/g,"/");Hn.convert=e;let t=/^[a-z]:\//i;Hn.isNotRelative=r=>t.test(r)||bw(r)}});var Ew=I((zU,Sw)=>{"use strict";g();function W6(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function bn(e,t,r){return t=t instanceof RegExp?t:new RegExp(W6(t),"g"),e.replace(t,r)}var q6={clean:function(t){if(typeof t!="string")throw new Error("Expected a string, received: "+t);return t=bn(t,"./","/"),t=bn(t,"..","."),t=bn(t," ","-"),t=bn(t,/^[~^:?*\\\-]/g,""),t=bn(t,/[~^:?*\\]/g,"-"),t=bn(t,/[~^:?*\\\-]$/g,""),t=bn(t,"@{","-"),t=bn(t,/\.$/g,""),t=bn(t,/\/$/g,""),t=bn(t,/\.lock$/g,""),t}};Sw.exports=q6});var kw=I((WU,Aw)=>{g();Aw.exports=function(e,t){var r=e,n=t,i=r.length,a=n.length,s=!1,o=null,c=i+1,l=[],u=[],f=[],d="",h=-1,p=0,m=1,v,y,b=function(){i>=a&&(v=r,y=i,r=n,n=v,i=a,a=y,s=!0,c=i+1)},x=function(w,A,S){return{x:w,y:A,k:S}},E=function(w,A){return{elem:w,t:A}},_=function(w,A,S){var T,P,O;for(A>S?T=l[w-1+c]:T=l[w+1+c],O=Math.max(A,S),P=O-w;P<i&&O<a&&r[P]===n[O];)++P,++O;return l[w+c]=u.length,u[u.length]=new x(P,O,T),O},k=function(w){var A,S,T,P,O;for(A=S=1,T=P=0,O=w.length-1;O>=0;--O)for(;T<w[O].x||P<w[O].y;)w[O].y-w[O].x>P-T?(s?f[f.length]=new E(n[P],h):f[f.length]=new E(n[P],m),++S,++P):w[O].y-w[O].x<P-T?(s?f[f.length]=new E(r[T],m):f[f.length]=new E(r[T],h),++A,++T):(f[f.length]=new E(r[T],p),d+=r[T],++A,++S,++T,++P)};return b(),{SES_DELETE:-1,SES_COMMON:0,SES_ADD:1,editdistance:function(){return o},getlcs:function(){return d},getses:function(){return f},compose:function(){var w,A,S,T,P,O,j,D;for(w=a-i,A=i+a+3,S={},j=0;j<A;++j)S[j]=-1,l[j]=-1;T=-1;do{for(++T,D=-T;D<=w-1;++D)S[D+c]=_(D,S[D-1+c]+1,S[D+1+c]);for(D=w+T;D>=w+1;--D)S[D+c]=_(D,S[D-1+c]+1,S[D+1+c]);S[w+c]=_(w,S[w-1+c]+1,S[w+1+c])}while(S[w+c]!==a);for(o=w+2*T,P=l[w+c],O=[];P!==-1;)O[O.length]=new x(u[P].x,u[P].y,null),P=u[P].k;k(O)}}}});var Pw=I((YU,Cw)=>{g();var Y6=kw();function X6(e,t){var r=new Y6(e,t);r.compose();for(var n=r.getses(),i,a,s=e.length-1,o=t.length-1,c=n.length-1;c>=0;--c)n[c].t===r.SES_COMMON?(a?(a.chain={file1index:s,file2index:o,chain:null},a=a.chain):(i={file1index:s,file2index:o,chain:null},a=i),s--,o--):n[c].t===r.SES_DELETE?s--:n[c].t===r.SES_ADD&&o--;var l={file1index:-1,file2index:-1,chain:null};return a?(a.chain=l,i):l}function Tw(e,t){for(var r=[],n=e.length,i=t.length,a=X6(e,t);a!==null;a=a.chain){var s=n-a.file1index-1,o=i-a.file2index-1;n=a.file1index,i=a.file2index,(s||o)&&r.push({file1:[n+1,s],file2:[i+1,o]})}return r.reverse(),r}function Z6(e,t,r){var n,i=Tw(t,e),a=Tw(t,r),s=[];function o(j,D){s.push([j.file1[0],D,j.file1[1],j.file2[0],j.file2[1]])}for(n=0;n<i.length;n++)o(i[n],0);for(n=0;n<a.length;n++)o(a[n],2);s.sort(function(j,D){return j[0]-D[0]});var c=[],l=0;function u(j){j>l&&(c.push([1,l,j-l]),l=j)}for(var f=0;f<s.length;f++){for(var d=f,h=s[f],p=h[0],m=p+h[2];f<s.length-1;){var v=s[f+1],y=v[0];if(y>m)break;m=Math.max(m,y+v[2]),f++}if(u(p),d==f)h[4]>0&&c.push([h[1],h[3],h[4]]);else{var b={0:[e.length,-1,t.length,-1],2:[r.length,-1,t.length,-1]};for(n=d;n<=f;n++){h=s[n];var x=h[1],E=b[x],_=h[0],k=_+h[2],w=h[3],A=w+h[4];E[0]=Math.min(w,E[0]),E[1]=Math.max(A,E[1]),E[2]=Math.min(_,E[2]),E[3]=Math.max(k,E[3])}var S=b[0][0]+(p-b[0][2]),T=b[0][1]+(m-b[0][3]),P=b[2][0]+(p-b[2][2]),O=b[2][1]+(m-b[2][3]);c.push([-1,S,T-S,p,m-p,P,O-P])}l=m}return u(t.length),c}function K6(e,t,r){var n=[],i=[e,t,r],a=Z6(e,t,r),s=[];function o(){s.length&&n.push({ok:s}),s=[]}function c(h){for(var p=0;p<h.length;p++)s.push(h[p])}function l(h){if(h[2]!=h[6])return!0;for(var p=h[1],m=h[5],v=0;v<h[2];v++)if(e[v+p]!=r[v+m])return!0;return!1}for(var u=0;u<a.length;u++){var f=a[u],d=f[0];d==-1?l(f)?(o(),n.push({conflict:{a:e.slice(f[1],f[1]+f[2]),aIndex:f[1],o:t.slice(f[3],f[3]+f[4]),oIndex:f[3],b:r.slice(f[5],f[5]+f[6]),bIndex:f[5]}})):c(i[0].slice(f[1],f[1]+f[2])):c(i[d].slice(f[1],f[1]+f[2]))}return o(),n}Cw.exports=K6});var I2=I((tG,O2)=>{g();var Es=1e3,As=Es*60,ks=As*60,da=ks*24,eI=da*7,tI=da*365.25;O2.exports=function(e,t){t=t||{};var r=typeof e;if(r==="string"&&e.length>0)return rI(e);if(r==="number"&&isFinite(e))return t.long?iI(e):nI(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};function rI(e){if(e=String(e),!(e.length>100)){var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(t){var r=parseFloat(t[1]),n=(t[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*tI;case"weeks":case"week":case"w":return r*eI;case"days":case"day":case"d":return r*da;case"hours":case"hour":case"hrs":case"hr":case"h":return r*ks;case"minutes":case"minute":case"mins":case"min":case"m":return r*As;case"seconds":case"second":case"secs":case"sec":case"s":return r*Es;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function nI(e){var t=Math.abs(e);return t>=da?Math.round(e/da)+"d":t>=ks?Math.round(e/ks)+"h":t>=As?Math.round(e/As)+"m":t>=Es?Math.round(e/Es)+"s":e+"ms"}function iI(e){var t=Math.abs(e);return t>=da?wu(e,t,da,"day"):t>=ks?wu(e,t,ks,"hour"):t>=As?wu(e,t,As,"minute"):t>=Es?wu(e,t,Es,"second"):e+" ms"}function wu(e,t,r,n){var i=t>=r*1.5;return Math.round(e/r)+" "+n+(i?"s":"")}});var $2=I((nG,F2)=>{g();function aI(e){r.debug=r,r.default=r,r.coerce=c,r.disable=a,r.enable=i,r.enabled=s,r.humanize=I2(),r.destroy=l,Object.keys(e).forEach(u=>{r[u]=e[u]}),r.names=[],r.skips=[],r.formatters={};function t(u){let f=0;for(let d=0;d<u.length;d++)f=(f<<5)-f+u.charCodeAt(d),f|=0;return r.colors[Math.abs(f)%r.colors.length]}r.selectColor=t;function r(u){let f,d=null,h,p;function m(...v){if(!m.enabled)return;let y=m,b=Number(new Date),x=b-(f||b);y.diff=x,y.prev=f,y.curr=b,f=b,v[0]=r.coerce(v[0]),typeof v[0]!="string"&&v.unshift("%O");let E=0;v[0]=v[0].replace(/%([a-zA-Z%])/g,(k,w)=>{if(k==="%%")return"%";E++;let A=r.formatters[w];if(typeof A=="function"){let S=v[E];k=A.call(y,S),v.splice(E,1),E--}return k}),r.formatArgs.call(y,v),(y.log||r.log).apply(y,v)}return m.namespace=u,m.useColors=r.useColors(),m.color=r.selectColor(u),m.extend=n,m.destroy=r.destroy,Object.defineProperty(m,"enabled",{enumerable:!0,configurable:!1,get:()=>d!==null?d:(h!==r.namespaces&&(h=r.namespaces,p=r.enabled(u)),p),set:v=>{d=v}}),typeof r.init=="function"&&r.init(m),m}function n(u,f){let d=r(this.namespace+(typeof f=="undefined"?":":f)+u);return d.log=this.log,d}function i(u){r.save(u),r.namespaces=u,r.names=[],r.skips=[];let f,d=(typeof u=="string"?u:"").split(/[\s,]+/),h=d.length;for(f=0;f<h;f++)d[f]&&(u=d[f].replace(/\*/g,".*?"),u[0]==="-"?r.skips.push(new RegExp("^"+u.slice(1)+"$")):r.names.push(new RegExp("^"+u+"$")))}function a(){let u=[...r.names.map(o),...r.skips.map(o).map(f=>"-"+f)].join(",");return r.enable(""),u}function s(u){if(u[u.length-1]==="*")return!0;let f,d;for(f=0,d=r.skips.length;f<d;f++)if(r.skips[f].test(u))return!1;for(f=0,d=r.names.length;f<d;f++)if(r.names[f].test(u))return!0;return!1}function o(u){return u.toString().substring(2,u.toString().length-2).replace(/\.\*\?$/,"*")}function c(u){return u instanceof Error?u.stack||u.message:u}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return r.enable(r.load()),r}F2.exports=aI});var _u=I((gr,bu)=>{g();gr.formatArgs=oI;gr.save=lI;gr.load=cI;gr.useColors=sI;gr.storage=uI();gr.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();gr.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 sI(){if(typeof window!="undefined"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let e;return typeof document!="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!="undefined"&&navigator.userAgent&&(e=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(e[1],10)>=31||typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function oI(e){if(e[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+e[0]+(this.useColors?"%c ":" ")+"+"+bu.exports.humanize(this.diff),!this.useColors)return;let t="color: "+this.color;e.splice(1,0,t,"color: inherit");let r=0,n=0;e[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(r++,i==="%c"&&(n=r))}),e.splice(n,0,t)}gr.log=console.debug||console.log||(()=>{});function lI(e){try{e?gr.storage.setItem("debug",e):gr.storage.removeItem("debug")}catch(t){}}function cI(){let e;try{e=gr.storage.getItem("debug")}catch(t){}return!e&&typeof process!="undefined"&&"env"in process&&(e=process.env.DEBUG),e}function uI(){try{return localStorage}catch(e){}}bu.exports=$2()(gr);var{formatters:fI}=bu.exports;fI.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}});var L2=I(vr=>{"use strict";g();var dI=vr&&vr.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(vr,"__esModule",{value:!0});var hI=require("fs"),pI=dI(_u()),Ts=pI.default("@kwsites/file-exists");function mI(e,t,r){Ts("checking %s",e);try{let n=hI.statSync(e);return n.isFile()&&t?(Ts("[OK] path represents a file"),!0):n.isDirectory()&&r?(Ts("[OK] path represents a directory"),!0):(Ts("[FAIL] path represents something other than a file or directory"),!1)}catch(n){if(n.code==="ENOENT")return Ts("[FAIL] path is not accessible: %o",n),!1;throw Ts("[FATAL] %o",n),n}}function gI(e,t=vr.READABLE){return mI(e,(t&vr.FILE)>0,(t&vr.FOLDER)>0)}vr.exists=gI;vr.FILE=1;vr.FOLDER=2;vr.READABLE=vr.FILE+vr.FOLDER});var D2=I(xu=>{"use strict";g();function vI(e){for(var t in e)xu.hasOwnProperty(t)||(xu[t]=e[t])}Object.defineProperty(xu,"__esModule",{value:!0});vI(L2())});var Rp=I(ha=>{"use strict";g();Object.defineProperty(ha,"__esModule",{value:!0});ha.createDeferred=ha.deferred=void 0;function Pp(){let e,t,r="pending";return{promise:new Promise((i,a)=>{e=i,t=a}),done(i){r==="pending"&&(r="resolved",e(i))},fail(i){r==="pending"&&(r="rejected",t(i))},get fulfilled(){return r!=="pending"},get status(){return r}}}ha.deferred=Pp;ha.createDeferred=Pp;ha.default=Pp});var kx=I((XG,Ax)=>{"use strict";g();Ax.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]}});var Cx=I((KG,Tx)=>{g();var xm={px:{px:1,cm:37.79527559055118,mm:3.7795275590551185,in:96,pt:1.3333333333333333,pc:16},cm:{px:.026458333333333334,cm:1,mm:.1,in:2.54,pt:.035277777777777776,pc:.42333333333333334},mm:{px:.26458333333333334,cm:10,mm:1,in:25.4,pt:.35277777777777775,pc:4.233333333333333},in:{px:.010416666666666666,cm:.39370078740157477,mm:.03937007874015748,in:1,pt:.013888888888888888,pc:.16666666666666666},pt:{px:.75,cm:28.346456692913385,mm:2.834645669291339,in:72,pt:1,pc:12},pc:{px:.0625,cm:2.3622047244094486,mm:.2362204724409449,in:6,pt:.08333333333333333,pc:1},deg:{deg:1,grad:.9,rad:180/Math.PI,turn:360},grad:{deg:1.1111111111111112,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:.002777777777777778,grad:.0025,rad:.5/Math.PI,turn:1},s:{s:1,ms:.001},ms:{s:1e3,ms:1},Hz:{Hz:1,kHz:1e3},kHz:{Hz:.001,kHz:1},dpi:{dpi:1,dpcm:.39370078740157477,dppx:.010416666666666666},dpcm:{dpi:2.54,dpcm:1,dppx:.026458333333333334},dppx:{dpi:96,dpcm:37.79527559055118,dppx:1}};Tx.exports=function(e,t,r,n){if(!xm.hasOwnProperty(r))throw new Error("Cannot convert to "+r);if(!xm[r].hasOwnProperty(t))throw new Error("Cannot convert from "+t+" to "+r);var i=xm[r][t]*e;return n!==!1?(n=Math.pow(10,parseInt(n)||5),Math.round(i*n)/n):i}});var Ux=I(Wn=>{"use strict";g();Object.defineProperty(Wn,"__esModule",{value:!0});Wn.fromRgba=Fs;Wn.fromRgb=Sm;Wn.fromHsla=qu;Wn.fromHsl=Bx;Wn.fromString=Hx;Wn.default=void 0;var Px=Ox(kx()),P$=Ox(Cx());function Ox(e){return e&&e.__esModule?e:{default:e}}function R$(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Rx(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function M$(e,t,r){return t&&Rx(e.prototype,t),r&&Rx(e,r),e}function Wt(e,t){return $$(e)||F$(e,t)||I$(e,t)||O$()}function O$(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function I$(e,t){if(e){if(typeof e=="string")return Mx(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Mx(e,t)}}function Mx(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function F$(e,t){if(!(typeof Symbol=="undefined"||!(Symbol.iterator in Object(e)))){var r=[],n=!0,i=!1,a=void 0;try{for(var s=e[Symbol.iterator](),o;!(n=(o=s.next()).done)&&(r.push(o.value),!(t&&r.length===t));n=!0);}catch(c){i=!0,a=c}finally{try{!n&&s.return!=null&&s.return()}finally{if(i)throw a}}return r}}function $$(e){if(Array.isArray(e))return e}var Ix=/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})?$/,Fx=/^#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])?$/,$x=/^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)(?:\s*,\s*(0|1|0?\.\d+|\d+%))?\s*\)$/,Lx=/^rgba?\(\s*(\d+)\s+(\d+)\s+(\d+)(?:\s*\/\s*(0|1|0?\.\d+|\d+%))?\s*\)$/,Dx=/^rgba?\(\s*(\d+%)\s*,\s*(\d+%)\s*,\s*(\d+%)(?:\s*,\s*(0|1|0?\.\d+|\d+%))?\s*\)$/,Nx=/^rgba?\(\s*(\d+%)\s+(\d+%)\s+(\d+%)(?:\s*\/\s*(0|1|0?\.\d+|\d+%))?\s*\)$/,jx=/^hsla?\(\s*(\d+)(deg|rad|grad|turn)?\s*,\s*(\d+)%\s*,\s*(\d+)%(?:\s*,\s*(0|1|0?\.\d+|\d+%))?\s*\)$/;function Ol(e,t){return e.indexOf(t)>-1}function L$(e,t,r){var n=e/255,i=t/255,a=r/255,s=Math.max(n,i,a),o=Math.min(n,i,a),c=s-o,l=(s+o)/2;if(c===0)return[0,0,l*100];var u=c/(1-Math.abs(2*l-1)),f=function(){switch(s){case n:return(i-a)/c%6;case i:return(a-n)/c+2;default:return(n-i)/c+4}}();return[f*60,u*100,l*100]}function D$(e,t,r){var n=e/60,i=t/100,a=r/100,s=(1-Math.abs(2*a-1))*i,o=s*(1-Math.abs(n%2-1)),c=a-s/2,l=function(){return n<1?[s,o,0]:n<2?[o,s,0]:n<3?[0,s,o]:n<4?[0,o,s]:n<5?[o,0,s]:[s,0,o]}(),u=Wt(l,3),f=u[0],d=u[1],h=u[2];return[(f+c)*255,(d+c)*255,(h+c)*255]}var N$=function(){function e(t){var r=Wt(t,4),n=r[0],i=r[1],a=r[2],s=r[3];R$(this,e),this.values=[Math.max(Math.min(parseInt(n,10),255),0),Math.max(Math.min(parseInt(i,10),255),0),Math.max(Math.min(parseInt(a,10),255),0),s==null?1:Math.max(Math.min(parseFloat(s),255),0)]}return M$(e,[{key:"toRgbString",value:function(){var r=Wt(this.values,4),n=r[0],i=r[1],a=r[2],s=r[3];return s===1?"rgb(".concat(n,", ").concat(i,", ").concat(a,")"):"rgba(".concat(n,", ").concat(i,", ").concat(a,", ").concat(s,")")}},{key:"toHslString",value:function(){var r=this.toHslaArray(),n=Wt(r,4),i=n[0],a=n[1],s=n[2],o=n[3];return o===1?"hsl(".concat(i,", ").concat(a,"%, ").concat(s,"%)"):"hsla(".concat(i,", ").concat(a,"%, ").concat(s,"%, ").concat(o,")")}},{key:"toHexString",value:function(){var r=Wt(this.values,4),n=r[0],i=r[1],a=r[2],s=r[3];return n=Number(n).toString(16).padStart(2,"0"),i=Number(i).toString(16).padStart(2,"0"),a=Number(a).toString(16).padStart(2,"0"),s=s<1?parseInt(s*255,10).toString(16).padStart(2,"0"):"","#".concat(n).concat(i).concat(a).concat(s)}},{key:"toRgbaArray",value:function(){return this.values}},{key:"toHslaArray",value:function(){var r=Wt(this.values,4),n=r[0],i=r[1],a=r[2],s=r[3],o=L$(n,i,a),c=Wt(o,3),l=c[0],u=c[1],f=c[2];return[l,u,f,s]}}]),e}();function Fs(e){var t=Wt(e,4),r=t[0],n=t[1],i=t[2],a=t[3];return new N$([r,n,i,a])}function Sm(e){var t=Wt(e,3),r=t[0],n=t[1],i=t[2];return Fs([r,n,i,1])}function qu(e){var t=Wt(e,4),r=t[0],n=t[1],i=t[2],a=t[3],s=D$(r,n,i),o=Wt(s,3),c=o[0],l=o[1],u=o[2];return Fs([c,l,u,a])}function Bx(e){var t=Wt(e,3),r=t[0],n=t[1],i=t[2];return qu([r,n,i,1])}function j$(e){var t=Ix.exec(e)||Fx.exec(e),r=Wt(t,5),n=r[1],i=r[2],a=r[3],s=r[4];return n=parseInt(n.length<2?n.repeat(2):n,16),i=parseInt(i.length<2?i.repeat(2):i,16),a=parseInt(a.length<2?a.repeat(2):a,16),s=s&&(parseInt(s.length<2?s.repeat(2):s,16)/255).toPrecision(1)||1,Fs([n,i,a,s])}function B$(e){var t=$x.exec(e)||Dx.exec(e)||Lx.exec(e)||Nx.exec(e),r=Wt(t,5),n=r[1],i=r[2],a=r[3],s=r[4];return n=Ol(n,"%")?parseInt(n,10)*255/100:parseInt(n,10),i=Ol(i,"%")?parseInt(i,10)*255/100:parseInt(i,10),a=Ol(a,"%")>0?parseInt(a,10)*255/100:parseInt(a,10),s=s===void 0?1:parseFloat(s)/(Ol(s,"%")?100:1),Fs([n,i,a,s])}function H$(e){var t=jx.exec(e),r=Wt(t,6),n=r[1],i=r[2],a=r[3],s=r[4],o=r[5];return i=i||"deg",n=(0,P$.default)(parseFloat(n),i,"deg"),a=parseFloat(a),s=parseFloat(s),o=o===void 0?1:parseFloat(o)/(Ol(o,"%")?100:1),qu([n,a,s,o])}function Hx(e){return Px.default[e]?Sm(Px.default[e]):Ix.test(e)||Fx.test(e)?j$(e):$x.test(e)||Dx.test(e)||Lx.test(e)||Nx.test(e)?B$(e):jx.test(e)?H$(e):null}var U$={fromString:Hx,fromRgb:Sm,fromRgba:Fs,fromHsl:Bx,fromHsla:qu};Wn.default=U$});var Em=I((tz,zx)=>{"use strict";g();var Gx=Object.prototype.toString;zx.exports=function(t){var r=Gx.call(t),n=r==="[object Arguments]";return n||(n=r!=="[object Array]"&&t!==null&&typeof t=="object"&&typeof t.length=="number"&&t.length>=0&&Gx.call(t.callee)==="[object Function]"),n}});var Qx=I((nz,Jx)=>{"use strict";g();var Kx;Object.keys||(Il=Object.prototype.hasOwnProperty,Am=Object.prototype.toString,Vx=Em(),km=Object.prototype.propertyIsEnumerable,Wx=!km.call({toString:null},"toString"),qx=km.call(function(){},"prototype"),Fl=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],Yu=function(e){var t=e.constructor;return t&&t.prototype===e},Yx={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},Xx=function(){if(typeof window=="undefined")return!1;for(var e in window)try{if(!Yx["$"+e]&&Il.call(window,e)&&window[e]!==null&&typeof window[e]=="object")try{Yu(window[e])}catch(t){return!0}}catch(t){return!0}return!1}(),Zx=function(e){if(typeof window=="undefined"||!Xx)return Yu(e);try{return Yu(e)}catch(t){return!1}},Kx=function(t){var r=t!==null&&typeof t=="object",n=Am.call(t)==="[object Function]",i=Vx(t),a=r&&Am.call(t)==="[object String]",s=[];if(!r&&!n&&!i)throw new TypeError("Object.keys called on a non-object");var o=qx&&n;if(a&&t.length>0&&!Il.call(t,0))for(var c=0;c<t.length;++c)s.push(String(c));if(i&&t.length>0)for(var l=0;l<t.length;++l)s.push(String(l));else for(var u in t)!(o&&u==="prototype")&&Il.call(t,u)&&s.push(String(u));if(Wx)for(var f=Zx(t),d=0;d<Fl.length;++d)!(f&&Fl[d]==="constructor")&&Il.call(t,Fl[d])&&s.push(Fl[d]);return s});var Il,Am,Vx,km,Wx,qx,Fl,Yu,Yx,Xx,Zx;Jx.exports=Kx});var Zu=I((az,rS)=>{"use strict";g();var G$=Array.prototype.slice,z$=Em(),eS=Object.keys,Xu=eS?function(t){return eS(t)}:Qx(),tS=Object.keys;Xu.shim=function(){if(Object.keys){var t=function(){var r=Object.keys(arguments);return r&&r.length===arguments.length}(1,2);t||(Object.keys=function(n){return z$(n)?tS(G$.call(n)):tS(n)})}else Object.keys=Xu;return Object.keys||Xu};rS.exports=Xu});var iS=I((oz,nS)=>{"use strict";g();nS.exports=Error});var sS=I((cz,aS)=>{"use strict";g();aS.exports=EvalError});var lS=I((fz,oS)=>{"use strict";g();oS.exports=RangeError});var uS=I((hz,cS)=>{"use strict";g();cS.exports=ReferenceError});var Tm=I((mz,fS)=>{"use strict";g();fS.exports=SyntaxError});var qn=I((vz,dS)=>{"use strict";g();dS.exports=TypeError});var pS=I((wz,hS)=>{"use strict";g();hS.exports=URIError});var $l=I((_z,mS)=>{"use strict";g();mS.exports=function(){if(typeof Symbol!="function"||typeof Object.getOwnPropertySymbols!="function")return!1;if(typeof Symbol.iterator=="symbol")return!0;var t={},r=Symbol("test"),n=Object(r);if(typeof r=="string"||Object.prototype.toString.call(r)!=="[object Symbol]"||Object.prototype.toString.call(n)!=="[object Symbol]")return!1;var i=42;t[r]=i;for(r in t)return!1;if(typeof Object.keys=="function"&&Object.keys(t).length!==0||typeof Object.getOwnPropertyNames=="function"&&Object.getOwnPropertyNames(t).length!==0)return!1;var a=Object.getOwnPropertySymbols(t);if(a.length!==1||a[0]!==r||!Object.prototype.propertyIsEnumerable.call(t,r))return!1;if(typeof Object.getOwnPropertyDescriptor=="function"){var s=Object.getOwnPropertyDescriptor(t,r);if(s.value!==i||s.enumerable!==!0)return!1}return!0}});var Ku=I((Sz,vS)=>{"use strict";g();var gS=typeof Symbol!="undefined"&&Symbol,V$=$l();vS.exports=function(){return typeof gS!="function"||typeof Symbol!="function"||typeof gS("foo")!="symbol"||typeof Symbol("bar")!="symbol"?!1:V$()}});var wS=I((Az,yS)=>{"use strict";g();var Cm={__proto__:null,foo:{}},W$=Object;yS.exports=function(){return{__proto__:Cm}.foo===Cm.foo&&!(Cm instanceof W$)}});var xS=I((Tz,_S)=>{"use strict";g();var q$="Function.prototype.bind called on incompatible ",Y$=Object.prototype.toString,X$=Math.max,Z$="[object Function]",bS=function(t,r){for(var n=[],i=0;i<t.length;i+=1)n[i]=t[i];for(var a=0;a<r.length;a+=1)n[a+t.length]=r[a];return n},K$=function(t,r){for(var n=[],i=r||0,a=0;i<t.length;i+=1,a+=1)n[a]=t[i];return n},J$=function(e,t){for(var r="",n=0;n<e.length;n+=1)r+=e[n],n+1<e.length&&(r+=t);return r};_S.exports=function(t){var r=this;if(typeof r!="function"||Y$.apply(r)!==Z$)throw new TypeError(q$+r);for(var n=K$(arguments,1),i,a=function(){if(this instanceof i){var u=r.apply(this,bS(n,arguments));return Object(u)===u?u:this}return r.apply(t,bS(n,arguments))},s=X$(0,r.length-n.length),o=[],c=0;c<s;c++)o[c]="$"+c;if(i=Function("binder","return function ("+J$(o,",")+"){ return binder.apply(this,arguments); }")(a),r.prototype){var l=function(){};l.prototype=r.prototype,i.prototype=new l,l.prototype=null}return i}});var Ju=I((Pz,SS)=>{"use strict";g();var Q$=xS();SS.exports=Function.prototype.bind||Q$});var Pm=I((Mz,ES)=>{"use strict";g();var eL=Function.prototype.call,tL=Object.prototype.hasOwnProperty,rL=Ju();ES.exports=rL.call(eL,tL)});var en=I((Iz,PS)=>{"use strict";g();var ve,nL=iS(),iL=sS(),aL=lS(),sL=uS(),Ns=Tm(),Ds=qn(),oL=pS(),CS=Function,Rm=function(e){try{return CS('"use strict"; return ('+e+").constructor;")()}catch(t){}},va=Object.getOwnPropertyDescriptor;if(va)try{va({},"")}catch(e){va=null}var Mm=function(){throw new Ds},lL=va?function(){try{return arguments.callee,Mm}catch(e){try{return va(arguments,"callee").get}catch(t){return Mm}}}():Mm,$s=Ku()(),cL=wS()(),wt=Object.getPrototypeOf||(cL?function(e){return e.__proto__}:null),Ls={},uL=typeof Uint8Array=="undefined"||!wt?ve:wt(Uint8Array),ya={__proto__:null,"%AggregateError%":typeof AggregateError=="undefined"?ve:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer=="undefined"?ve:ArrayBuffer,"%ArrayIteratorPrototype%":$s&&wt?wt([][Symbol.iterator]()):ve,"%AsyncFromSyncIteratorPrototype%":ve,"%AsyncFunction%":Ls,"%AsyncGenerator%":Ls,"%AsyncGeneratorFunction%":Ls,"%AsyncIteratorPrototype%":Ls,"%Atomics%":typeof Atomics=="undefined"?ve:Atomics,"%BigInt%":typeof BigInt=="undefined"?ve:BigInt,"%BigInt64Array%":typeof BigInt64Array=="undefined"?ve:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array=="undefined"?ve:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView=="undefined"?ve:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":nL,"%eval%":eval,"%EvalError%":iL,"%Float32Array%":typeof Float32Array=="undefined"?ve:Float32Array,"%Float64Array%":typeof Float64Array=="undefined"?ve:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry=="undefined"?ve:FinalizationRegistry,"%Function%":CS,"%GeneratorFunction%":Ls,"%Int8Array%":typeof Int8Array=="undefined"?ve:Int8Array,"%Int16Array%":typeof Int16Array=="undefined"?ve:Int16Array,"%Int32Array%":typeof Int32Array=="undefined"?ve:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":$s&&wt?wt(wt([][Symbol.iterator]())):ve,"%JSON%":typeof JSON=="object"?JSON:ve,"%Map%":typeof Map=="undefined"?ve:Map,"%MapIteratorPrototype%":typeof Map=="undefined"||!$s||!wt?ve:wt(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise=="undefined"?ve:Promise,"%Proxy%":typeof Proxy=="undefined"?ve:Proxy,"%RangeError%":aL,"%ReferenceError%":sL,"%Reflect%":typeof Reflect=="undefined"?ve:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set=="undefined"?ve:Set,"%SetIteratorPrototype%":typeof Set=="undefined"||!$s||!wt?ve:wt(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer=="undefined"?ve:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":$s&&wt?wt(""[Symbol.iterator]()):ve,"%Symbol%":$s?Symbol:ve,"%SyntaxError%":Ns,"%ThrowTypeError%":lL,"%TypedArray%":uL,"%TypeError%":Ds,"%Uint8Array%":typeof Uint8Array=="undefined"?ve:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray=="undefined"?ve:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array=="undefined"?ve:Uint16Array,"%Uint32Array%":typeof Uint32Array=="undefined"?ve:Uint32Array,"%URIError%":oL,"%WeakMap%":typeof WeakMap=="undefined"?ve:WeakMap,"%WeakRef%":typeof WeakRef=="undefined"?ve:WeakRef,"%WeakSet%":typeof WeakSet=="undefined"?ve:WeakSet};if(wt)try{null.error}catch(e){AS=wt(wt(e)),ya["%Error.prototype%"]=AS}var AS,fL=function e(t){var r;if(t==="%AsyncFunction%")r=Rm("async function () {}");else if(t==="%GeneratorFunction%")r=Rm("function* () {}");else if(t==="%AsyncGeneratorFunction%")r=Rm("async function* () {}");else if(t==="%AsyncGenerator%"){var n=e("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if(t==="%AsyncIteratorPrototype%"){var i=e("%AsyncGenerator%");i&&wt&&(r=wt(i.prototype))}return ya[t]=r,r},kS={__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"]},Ll=Ju(),Qu=Pm(),dL=Ll.call(Function.call,Array.prototype.concat),hL=Ll.call(Function.apply,Array.prototype.splice),TS=Ll.call(Function.call,String.prototype.replace),ef=Ll.call(Function.call,String.prototype.slice),pL=Ll.call(Function.call,RegExp.prototype.exec),mL=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,gL=/\\(\\)?/g,vL=function(t){var r=ef(t,0,1),n=ef(t,-1);if(r==="%"&&n!=="%")throw new Ns("invalid intrinsic syntax, expected closing `%`");if(n==="%"&&r!=="%")throw new Ns("invalid intrinsic syntax, expected opening `%`");var i=[];return TS(t,mL,function(a,s,o,c){i[i.length]=o?TS(c,gL,"$1"):s||a}),i},yL=function(t,r){var n=t,i;if(Qu(kS,n)&&(i=kS[n],n="%"+i[0]+"%"),Qu(ya,n)){var a=ya[n];if(a===Ls&&(a=fL(n)),typeof a=="undefined"&&!r)throw new Ds("intrinsic "+t+" exists, but is not available. Please file an issue!");return{alias:i,name:n,value:a}}throw new Ns("intrinsic "+t+" does not exist!")};PS.exports=function(t,r){if(typeof t!="string"||t.length===0)throw new Ds("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof r!="boolean")throw new Ds('"allowMissing" argument must be a boolean');if(pL(/^%?[^%]*%?$/,t)===null)throw new Ns("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=vL(t),i=n.length>0?n[0]:"",a=yL("%"+i+"%",r),s=a.name,o=a.value,c=!1,l=a.alias;l&&(i=l[0],hL(n,dL([0,1],l)));for(var u=1,f=!0;u<n.length;u+=1){var d=n[u],h=ef(d,0,1),p=ef(d,-1);if((h==='"'||h==="'"||h==="`"||p==='"'||p==="'"||p==="`")&&h!==p)throw new Ns("property names with quotes must have matching quotes");if((d==="constructor"||!f)&&(c=!0),i+="."+d,s="%"+i+"%",Qu(ya,s))o=ya[s];else if(o!=null){if(!(d in o)){if(!r)throw new Ds("base intrinsic for "+t+" exists, but the property is not available.");return}if(va&&u+1>=n.length){var m=va(o,d);f=!!m,f&&"get"in m&&!("originalValue"in m.get)?o=m.get:o=o[d]}else f=Qu(o,d),o=o[d];f&&!c&&(ya[s]=o)}}return o}});var rf=I(($z,RS)=>{"use strict";g();var wL=en(),tf=wL("%Object.defineProperty%",!0)||!1;if(tf)try{tf({},"a",{value:1})}catch(e){tf=!1}RS.exports=tf});var af=I((Dz,MS)=>{"use strict";g();var bL=en(),nf=bL("%Object.getOwnPropertyDescriptor%",!0);if(nf)try{nf([],"length")}catch(e){nf=null}MS.exports=nf});var sf=I((jz,FS)=>{"use strict";g();var OS=rf(),_L=Tm(),js=qn(),IS=af();FS.exports=function(t,r,n){if(!t||typeof t!="object"&&typeof t!="function")throw new js("`obj` must be an object or a function`");if(typeof r!="string"&&typeof r!="symbol")throw new js("`property` must be a string or a symbol`");if(arguments.length>3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new js("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new js("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new js("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new js("`loose`, if provided, must be a boolean");var i=arguments.length>3?arguments[3]:null,a=arguments.length>4?arguments[4]:null,s=arguments.length>5?arguments[5]:null,o=arguments.length>6?arguments[6]:!1,c=!!IS&&IS(t,r);if(OS)OS(t,r,{configurable:s===null&&c?c.configurable:!s,enumerable:i===null&&c?c.enumerable:!i,value:n,writable:a===null&&c?c.writable:!a});else if(o||!i&&!a&&!s)t[r]=n;else throw new _L("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")}});var of=I((Hz,LS)=>{"use strict";g();var Om=rf(),$S=function(){return!!Om};$S.hasArrayLengthDefineBug=function(){if(!Om)return null;try{return Om([],"length",{value:1}).length!==1}catch(t){return!0}};LS.exports=$S});var Ti=I((Gz,BS)=>{"use strict";g();var xL=Zu(),SL=typeof Symbol=="function"&&typeof Symbol("foo")=="symbol",EL=Object.prototype.toString,AL=Array.prototype.concat,DS=sf(),kL=function(e){return typeof e=="function"&&EL.call(e)==="[object Function]"},NS=of()(),TL=function(e,t,r,n){if(t in e){if(n===!0){if(e[t]===r)return}else if(!kL(n)||!n())return}NS?DS(e,t,r,!0):DS(e,t,r)},jS=function(e,t){var r=arguments.length>2?arguments[2]:{},n=xL(t);SL&&(n=AL.call(n,Object.getOwnPropertySymbols(t)));for(var i=0;i<n.length;i+=1)TL(e,n[i],t[n[i]],r[n[i]])};jS.supportsDescriptors=!!NS;BS.exports=jS});var VS=I((Vz,zS)=>{"use strict";g();var CL=en(),HS=sf(),PL=of()(),US=af(),GS=qn(),RL=CL("%Math.floor%");zS.exports=function(t,r){if(typeof t!="function")throw new GS("`fn` is not a function");if(typeof r!="number"||r<0||r>4294967295||RL(r)!==r)throw new GS("`length` must be a positive 32-bit integer");var n=arguments.length>2&&!!arguments[2],i=!0,a=!0;if("length"in t&&US){var s=US(t,"length");s&&!s.configurable&&(i=!1),s&&!s.writable&&(a=!1)}return(i||a||!n)&&(PL?HS(t,"length",r,!0,!0):HS(t,"length",r)),t}});var wa=I((qz,lf)=>{"use strict";g();var Im=Ju(),cf=en(),ML=VS(),OL=qn(),YS=cf("%Function.prototype.apply%"),XS=cf("%Function.prototype.call%"),ZS=cf("%Reflect.apply%",!0)||Im.call(XS,YS),WS=rf(),IL=cf("%Math.max%");lf.exports=function(t){if(typeof t!="function")throw new OL("a function is required");var r=ZS(Im,XS,arguments);return ML(r,1+IL(0,t.length-(arguments.length-1)),!0)};var qS=function(){return ZS(Im,YS,arguments)};WS?WS(lf.exports,"apply",{value:qS}):lf.exports.apply=qS});var br=I((Xz,QS)=>{"use strict";g();var KS=en(),JS=wa(),FL=JS(KS("String.prototype.indexOf"));QS.exports=function(t,r){var n=KS(t,!!r);return typeof n=="function"&&FL(t,".prototype.")>-1?JS(n):n}});var Fm=I((Kz,iE)=>{"use strict";g();var $L=Zu(),rE=$l()(),nE=br(),eE=Object,LL=nE("Array.prototype.push"),tE=nE("Object.prototype.propertyIsEnumerable"),DL=rE?Object.getOwnPropertySymbols:null;iE.exports=function(t,r){if(t==null)throw new TypeError("target must be an object");var n=eE(t);if(arguments.length===1)return n;for(var i=1;i<arguments.length;++i){var a=eE(arguments[i]),s=$L(a),o=rE&&(Object.getOwnPropertySymbols||DL);if(o)for(var c=o(a),l=0;l<c.length;++l){var u=c[l];tE(a,u)&&LL(s,u)}for(var f=0;f<s.length;++f){var d=s[f];if(tE(a,d)){var h=a[d];n[d]=h}}}return n}});var Lm=I((Qz,aE)=>{"use strict";g();var $m=Fm(),NL=function(){if(!Object.assign)return!1;for(var e="abcdefghijklmnopqrst",t=e.split(""),r={},n=0;n<t.length;++n)r[t[n]]=t[n];var i=Object.assign({},r),a="";for(var s in i)a+=s;return e!==a},jL=function(){if(!Object.assign||!Object.preventExtensions)return!1;var e=Object.preventExtensions({1:2});try{Object.assign(e,"xy")}catch(t){return e[1]==="y"}return!1};aE.exports=function(){return!Object.assign||NL()||jL()?$m:Object.assign}});var oE=I((tV,sE)=>{"use strict";g();var BL=Ti(),HL=Lm();sE.exports=function(){var t=HL();return BL(Object,{assign:t},{assign:function(){return Object.assign!==t}}),t}});var fE=I((nV,uE)=>{"use strict";g();var UL=Ti(),GL=wa(),zL=Fm(),lE=Lm(),VL=oE(),WL=GL.apply(lE()),cE=function(t,r){return WL(Object,arguments)};UL(cE,{getPolyfill:lE,implementation:zL,shim:VL});uE.exports=cE});var hE=I((aV,dE)=>{"use strict";g();var Nl=function(){return typeof function(){}.name=="string"},Dl=Object.getOwnPropertyDescriptor;if(Dl)try{Dl([],"length")}catch(e){Dl=null}Nl.functionsHaveConfigurableNames=function(){if(!Nl()||!Dl)return!1;var t=Dl(function(){},"name");return!!t&&!!t.configurable};var qL=Function.prototype.bind;Nl.boundFunctionsHaveNames=function(){return Nl()&&typeof qL=="function"&&function(){}.bind().name!==""};dE.exports=Nl});var gE=I((oV,mE)=>{"use strict";g();var pE=sf(),YL=of()(),XL=hE().functionsHaveConfigurableNames(),ZL=qn();mE.exports=function(t,r){if(typeof t!="function")throw new ZL("`fn` is not a function");var n=arguments.length>2&&!!arguments[2];return(!n||XL)&&(YL?pE(t,"name",r,!0,!0):pE(t,"name",r)),t}});var Dm=I((cV,vE)=>{"use strict";g();var KL=gE(),JL=qn(),QL=Object;vE.exports=KL(function(){if(this==null||this!==QL(this))throw new JL("RegExp.prototype.flags getter called on non-object");var t="";return this.hasIndices&&(t+="d"),this.global&&(t+="g"),this.ignoreCase&&(t+="i"),this.multiline&&(t+="m"),this.dotAll&&(t+="s"),this.unicode&&(t+="u"),this.unicodeSets&&(t+="v"),this.sticky&&(t+="y"),t},"get flags",!0)});var Nm=I((fV,yE)=>{"use strict";g();var eD=Dm(),tD=Ti().supportsDescriptors,rD=Object.getOwnPropertyDescriptor;yE.exports=function(){if(tD&&/a/mig.flags==="gim"){var t=rD(RegExp.prototype,"flags");if(t&&typeof t.get=="function"&&"dotAll"in RegExp.prototype&&"hasIndices"in RegExp.prototype){var r="",n={};if(Object.defineProperty(n,"hasIndices",{get:function(){r+="d"}}),Object.defineProperty(n,"sticky",{get:function(){r+="y"}}),t.get.call(n),r==="dy")return t.get}}return eD}});var _E=I((hV,bE)=>{"use strict";g();var nD=Ti().supportsDescriptors,iD=Nm(),aD=Object.getOwnPropertyDescriptor,sD=Object.defineProperty,oD=TypeError,wE=Object.getPrototypeOf,lD=/a/;bE.exports=function(){if(!nD||!wE)throw new oD("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors");var t=iD(),r=wE(lD),n=aD(r,"flags");return(!n||n.get!==t)&&sD(r,"flags",{configurable:!0,enumerable:!1,get:t}),t}});var AE=I((mV,EE)=>{"use strict";g();var cD=Ti(),uD=wa(),fD=Dm(),xE=Nm(),dD=_E(),SE=uD(xE());cD(SE,{getPolyfill:xE,implementation:fD,shim:dD});EE.exports=SE});var Ci=I((vV,kE)=>{"use strict";g();var hD=$l();kE.exports=function(){return hD()&&!!Symbol.toStringTag}});var Bm=I((wV,CE)=>{"use strict";g();var pD=Ci()(),mD=br(),jm=mD("Object.prototype.toString"),uf=function(t){return pD&&t&&typeof t=="object"&&Symbol.toStringTag in t?!1:jm(t)==="[object Arguments]"},TE=function(t){return uf(t)?!0:t!==null&&typeof t=="object"&&typeof t.length=="number"&&t.length>=0&&jm(t)!=="[object Array]"&&jm(t.callee)==="[object Function]"},gD=function(){return uf(arguments)}();uf.isLegacyArguments=TE;CE.exports=gD?uf:TE});var PE=I(()=>{g()});var XE=I((EV,YE)=>{g();var Zm=typeof Map=="function"&&Map.prototype,Hm=Object.getOwnPropertyDescriptor&&Zm?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,df=Zm&&Hm&&typeof Hm.get=="function"?Hm.get:null,RE=Zm&&Map.prototype.forEach,Km=typeof Set=="function"&&Set.prototype,Um=Object.getOwnPropertyDescriptor&&Km?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,hf=Km&&Um&&typeof Um.get=="function"?Um.get:null,ME=Km&&Set.prototype.forEach,vD=typeof WeakMap=="function"&&WeakMap.prototype,Bl=vD?WeakMap.prototype.has:null,yD=typeof WeakSet=="function"&&WeakSet.prototype,Hl=yD?WeakSet.prototype.has:null,wD=typeof WeakRef=="function"&&WeakRef.prototype,OE=wD?WeakRef.prototype.deref:null,bD=Boolean.prototype.valueOf,_D=Object.prototype.toString,xD=Function.prototype.toString,SD=String.prototype.match,Jm=String.prototype.slice,Ri=String.prototype.replace,ED=String.prototype.toUpperCase,IE=String.prototype.toLowerCase,UE=RegExp.prototype.test,FE=Array.prototype.concat,En=Array.prototype.join,AD=Array.prototype.slice,$E=Math.floor,Vm=typeof BigInt=="function"?BigInt.prototype.valueOf:null,Gm=Object.getOwnPropertySymbols,Wm=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Symbol.prototype.toString:null,Bs=typeof Symbol=="function"&&typeof Symbol.iterator=="object",Rt=typeof Symbol=="function"&&Symbol.toStringTag&&(typeof Symbol.toStringTag===Bs||!0)?Symbol.toStringTag:null,GE=Object.prototype.propertyIsEnumerable,LE=(typeof Reflect=="function"?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function DE(e,t){if(e===1/0||e===-1/0||e!==e||e&&e>-1e3&&e<1e3||UE.call(/e/,t))return t;var r=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof e=="number"){var n=e<0?-$E(-e):$E(e);if(n!==e){var i=String(n),a=Jm.call(t,i.length+1);return Ri.call(i,r,"$&_")+"."+Ri.call(Ri.call(a,/([0-9]{3})/g,"$&_"),/_$/,"")}}return Ri.call(t,r,"$&_")}var qm=PE(),NE=qm.custom,jE=VE(NE)?NE:null;YE.exports=function e(t,r,n,i){var a=r||{};if(Pi(a,"quoteStyle")&&a.quoteStyle!=="single"&&a.quoteStyle!=="double")throw new TypeError('option "quoteStyle" must be "single" or "double"');if(Pi(a,"maxStringLength")&&(typeof a.maxStringLength=="number"?a.maxStringLength<0&&a.maxStringLength!==1/0:a.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var s=Pi(a,"customInspect")?a.customInspect:!0;if(typeof s!="boolean"&&s!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(Pi(a,"indent")&&a.indent!==null&&a.indent!==" "&&!(parseInt(a.indent,10)===a.indent&&a.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(Pi(a,"numericSeparator")&&typeof a.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var o=a.numericSeparator;if(typeof t=="undefined")return"undefined";if(t===null)return"null";if(typeof t=="boolean")return t?"true":"false";if(typeof t=="string")return qE(t,a);if(typeof t=="number"){if(t===0)return 1/0/t>0?"0":"-0";var c=String(t);return o?DE(t,c):c}if(typeof t=="bigint"){var l=String(t)+"n";return o?DE(t,l):l}var u=typeof a.depth=="undefined"?5:a.depth;if(typeof n=="undefined"&&(n=0),n>=u&&u>0&&typeof t=="object")return Ym(t)?"[Array]":"[Object]";var f=GD(a,n);if(typeof i=="undefined")i=[];else if(WE(i,t)>=0)return"[Circular]";function d(j,D,Q){if(D&&(i=AD.call(i),i.push(D)),Q){var de={depth:a.depth};return Pi(a,"quoteStyle")&&(de.quoteStyle=a.quoteStyle),e(j,de,n+1,i)}return e(j,a,n+1,i)}if(typeof t=="function"&&!BE(t)){var h=FD(t),p=ff(t,d);return"[Function"+(h?": "+h:" (anonymous)")+"]"+(p.length>0?" { "+En.call(p,", ")+" }":"")}if(VE(t)){var m=Bs?Ri.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):Wm.call(t);return typeof t=="object"&&!Bs?jl(m):m}if(BD(t)){for(var v="<"+IE.call(String(t.nodeName)),y=t.attributes||[],b=0;b<y.length;b++)v+=" "+y[b].name+"="+zE(kD(y[b].value),"double",a);return v+=">",t.childNodes&&t.childNodes.length&&(v+="..."),v+="</"+IE.call(String(t.nodeName))+">",v}if(Ym(t)){if(t.length===0)return"[]";var x=ff(t,d);return f&&!UD(x)?"["+Xm(x,f)+"]":"[ "+En.call(x,", ")+" ]"}if(CD(t)){var E=ff(t,d);return!("cause"in Error.prototype)&&"cause"in t&&!GE.call(t,"cause")?"{ ["+String(t)+"] "+En.call(FE.call("[cause]: "+d(t.cause),E),", ")+" }":E.length===0?"["+String(t)+"]":"{ ["+String(t)+"] "+En.call(E,", ")+" }"}if(typeof t=="object"&&s){if(jE&&typeof t[jE]=="function"&&qm)return qm(t,{depth:u-n});if(s!=="symbol"&&typeof t.inspect=="function")return t.inspect()}if($D(t)){var _=[];return RE&&RE.call(t,function(j,D){_.push(d(D,t,!0)+" => "+d(j,t))}),HE("Map",df.call(t),_,f)}if(ND(t)){var k=[];return ME&&ME.call(t,function(j){k.push(d(j,t))}),HE("Set",hf.call(t),k,f)}if(LD(t))return zm("WeakMap");if(jD(t))return zm("WeakSet");if(DD(t))return zm("WeakRef");if(RD(t))return jl(d(Number(t)));if(OD(t))return jl(d(Vm.call(t)));if(MD(t))return jl(bD.call(t));if(PD(t))return jl(d(String(t)));if(typeof window!="undefined"&&t===window)return"{ [object Window] }";if(typeof globalThis!="undefined"&&t===globalThis||typeof global!="undefined"&&t===global)return"{ [object globalThis] }";if(!TD(t)&&!BE(t)){var w=ff(t,d),A=LE?LE(t)===Object.prototype:t instanceof Object||t.constructor===Object,S=t instanceof Object?"":"null prototype",T=!A&&Rt&&Object(t)===t&&Rt in t?Jm.call(Mi(t),8,-1):S?"Object":"",P=A||typeof t.constructor!="function"?"":t.constructor.name?t.constructor.name+" ":"",O=P+(T||S?"["+En.call(FE.call([],T||[],S||[]),": ")+"] ":"");return w.length===0?O+"{}":f?O+"{"+Xm(w,f)+"}":O+"{ "+En.call(w,", ")+" }"}return String(t)};function zE(e,t,r){var n=(r.quoteStyle||t)==="double"?'"':"'";return n+e+n}function kD(e){return Ri.call(String(e),/"/g,""")}function Ym(e){return Mi(e)==="[object Array]"&&(!Rt||!(typeof e=="object"&&Rt in e))}function TD(e){return Mi(e)==="[object Date]"&&(!Rt||!(typeof e=="object"&&Rt in e))}function BE(e){return Mi(e)==="[object RegExp]"&&(!Rt||!(typeof e=="object"&&Rt in e))}function CD(e){return Mi(e)==="[object Error]"&&(!Rt||!(typeof e=="object"&&Rt in e))}function PD(e){return Mi(e)==="[object String]"&&(!Rt||!(typeof e=="object"&&Rt in e))}function RD(e){return Mi(e)==="[object Number]"&&(!Rt||!(typeof e=="object"&&Rt in e))}function MD(e){return Mi(e)==="[object Boolean]"&&(!Rt||!(typeof e=="object"&&Rt in e))}function VE(e){if(Bs)return e&&typeof e=="object"&&e instanceof Symbol;if(typeof e=="symbol")return!0;if(!e||typeof e!="object"||!Wm)return!1;try{return Wm.call(e),!0}catch(t){}return!1}function OD(e){if(!e||typeof e!="object"||!Vm)return!1;try{return Vm.call(e),!0}catch(t){}return!1}var ID=Object.prototype.hasOwnProperty||function(e){return e in this};function Pi(e,t){return ID.call(e,t)}function Mi(e){return _D.call(e)}function FD(e){if(e.name)return e.name;var t=SD.call(xD.call(e),/^function\s*([\w$]+)/);return t?t[1]:null}function WE(e,t){if(e.indexOf)return e.indexOf(t);for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1}function $D(e){if(!df||!e||typeof e!="object")return!1;try{df.call(e);try{hf.call(e)}catch(t){return!0}return e instanceof Map}catch(t){}return!1}function LD(e){if(!Bl||!e||typeof e!="object")return!1;try{Bl.call(e,Bl);try{Hl.call(e,Hl)}catch(t){return!0}return e instanceof WeakMap}catch(t){}return!1}function DD(e){if(!OE||!e||typeof e!="object")return!1;try{return OE.call(e),!0}catch(t){}return!1}function ND(e){if(!hf||!e||typeof e!="object")return!1;try{hf.call(e);try{df.call(e)}catch(t){return!0}return e instanceof Set}catch(t){}return!1}function jD(e){if(!Hl||!e||typeof e!="object")return!1;try{Hl.call(e,Hl);try{Bl.call(e,Bl)}catch(t){return!0}return e instanceof WeakSet}catch(t){}return!1}function BD(e){return!e||typeof e!="object"?!1:typeof HTMLElement!="undefined"&&e instanceof HTMLElement?!0:typeof e.nodeName=="string"&&typeof e.getAttribute=="function"}function qE(e,t){if(e.length>t.maxStringLength){var r=e.length-t.maxStringLength,n="... "+r+" more character"+(r>1?"s":"");return qE(Jm.call(e,0,t.maxStringLength),t)+n}var i=Ri.call(Ri.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,HD);return zE(i,"single",t)}function HD(e){var t=e.charCodeAt(0),r={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return r?"\\"+r:"\\x"+(t<16?"0":"")+ED.call(t.toString(16))}function jl(e){return"Object("+e+")"}function zm(e){return e+" { ? }"}function HE(e,t,r,n){var i=n?Xm(r,n):En.call(r,", ");return e+" ("+t+") {"+i+"}"}function UD(e){for(var t=0;t<e.length;t++)if(WE(e[t],` +`)>=0)return!1;return!0}function GD(e,t){var r;if(e.indent===" ")r=" ";else if(typeof e.indent=="number"&&e.indent>0)r=En.call(Array(e.indent+1)," ");else return null;return{base:r,prev:En.call(Array(t+1),r)}}function Xm(e,t){if(e.length===0)return"";var r=` +`+t.prev+t.base;return r+En.call(e,","+r)+` +`+t.prev}function ff(e,t){var r=Ym(e),n=[];if(r){n.length=e.length;for(var i=0;i<e.length;i++)n[i]=Pi(e,i)?t(e[i],e):""}var a=typeof Gm=="function"?Gm(e):[],s;if(Bs){s={};for(var o=0;o<a.length;o++)s["$"+a[o]]=a[o]}for(var c in e)Pi(e,c)&&(r&&String(Number(c))===c&&c<e.length||Bs&&s["$"+c]instanceof Symbol||(UE.call(/[^\w$]/,c)?n.push(t(c,e)+": "+t(e[c],e)):n.push(c+": "+t(e[c],e))));if(typeof Gm=="function")for(var l=0;l<a.length;l++)GE.call(e,a[l])&&n.push("["+t(a[l])+"]: "+t(e[a[l]],e));return n}});var eg=I((kV,KE)=>{"use strict";g();var ZE=en(),Hs=br(),zD=XE(),VD=qn(),pf=ZE("%WeakMap%",!0),mf=ZE("%Map%",!0),WD=Hs("WeakMap.prototype.get",!0),qD=Hs("WeakMap.prototype.set",!0),YD=Hs("WeakMap.prototype.has",!0),XD=Hs("Map.prototype.get",!0),ZD=Hs("Map.prototype.set",!0),KD=Hs("Map.prototype.has",!0),Qm=function(e,t){for(var r=e,n;(n=r.next)!==null;r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n},JD=function(e,t){var r=Qm(e,t);return r&&r.value},QD=function(e,t,r){var n=Qm(e,t);n?n.value=r:e.next={key:t,next:e.next,value:r}},eN=function(e,t){return!!Qm(e,t)};KE.exports=function(){var t,r,n,i={assert:function(a){if(!i.has(a))throw new VD("Side channel does not contain "+zD(a))},get:function(a){if(pf&&a&&(typeof a=="object"||typeof a=="function")){if(t)return WD(t,a)}else if(mf){if(r)return XD(r,a)}else if(n)return JD(n,a)},has:function(a){if(pf&&a&&(typeof a=="object"||typeof a=="function")){if(t)return YD(t,a)}else if(mf){if(r)return KD(r,a)}else if(n)return eN(n,a);return!1},set:function(a,s){pf&&a&&(typeof a=="object"||typeof a=="function")?(t||(t=new pf),qD(t,a,s)):mf?(r||(r=new mf),ZD(r,a,s)):(n||(n={key:{},next:null}),QD(n,a,s))}};return i}});var QE=I((CV,JE)=>{"use strict";g();var tN=Pm(),Ul=eg()(),Yn=qn(),tg={assert:function(e,t){if(!e||typeof e!="object"&&typeof e!="function")throw new Yn("`O` is not an object");if(typeof t!="string")throw new Yn("`slot` must be a string");if(Ul.assert(e),!tg.has(e,t))throw new Yn("`"+t+"` is not present on `O`")},get:function(e,t){if(!e||typeof e!="object"&&typeof e!="function")throw new Yn("`O` is not an object");if(typeof t!="string")throw new Yn("`slot` must be a string");var r=Ul.get(e);return r&&r["$"+t]},has:function(e,t){if(!e||typeof e!="object"&&typeof e!="function")throw new Yn("`O` is not an object");if(typeof t!="string")throw new Yn("`slot` must be a string");var r=Ul.get(e);return!!r&&tN(r,"$"+t)},set:function(e,t,r){if(!e||typeof e!="object"&&typeof e!="function")throw new Yn("`O` is not an object");if(typeof t!="string")throw new Yn("`slot` must be a string");var n=Ul.get(e);n||(n={},Ul.set(e,n)),n["$"+t]=r}};Object.freeze&&Object.freeze(tg);JE.exports=tg});var rA=I((RV,tA)=>{"use strict";g();var Gl=QE(),rN=SyntaxError,eA=typeof StopIteration=="object"?StopIteration:null;tA.exports=function(t){if(!eA)throw new rN("this environment lacks StopIteration");Gl.set(t,"[[Done]]",!1);var r={next:function(){var i=Gl.get(this,"[[Iterator]]"),a=Gl.get(i,"[[Done]]");try{return{done:a,value:a?void 0:i.next()}}catch(s){if(Gl.set(i,"[[Done]]",!0),s!==eA)throw s;return{done:!0,value:void 0}}}};return Gl.set(r,"[[Iterator]]",t),r}});var rg=I((OV,nA)=>{g();var nN={}.toString;nA.exports=Array.isArray||function(e){return nN.call(e)=="[object Array]"}});var ng=I((FV,iA)=>{"use strict";g();var iN=String.prototype.valueOf,aN=function(t){try{return iN.call(t),!0}catch(r){return!1}},sN=Object.prototype.toString,oN="[object String]",lN=Ci()();iA.exports=function(t){return typeof t=="string"?!0:typeof t!="object"?!1:lN?aN(t):sN.call(t)===oN}});var ag=I((LV,oA)=>{"use strict";g();var ig=typeof Map=="function"&&Map.prototype?Map:null,cN=typeof Set=="function"&&Set.prototype?Set:null,gf;ig||(gf=function(t){return!1});var sA=ig?Map.prototype.has:null,aA=cN?Set.prototype.has:null;!gf&&!sA&&(gf=function(t){return!1});oA.exports=gf||function(t){if(!t||typeof t!="object")return!1;try{if(sA.call(t),aA)try{aA.call(t)}catch(r){return!0}return t instanceof ig}catch(r){}return!1}});var og=I((NV,uA)=>{"use strict";g();var uN=typeof Map=="function"&&Map.prototype?Map:null,sg=typeof Set=="function"&&Set.prototype?Set:null,vf;sg||(vf=function(t){return!1});var lA=uN?Map.prototype.has:null,cA=sg?Set.prototype.has:null;!vf&&!cA&&(vf=function(t){return!1});uA.exports=vf||function(t){if(!t||typeof t!="object")return!1;try{if(cA.call(t),lA)try{lA.call(t)}catch(r){return!0}return t instanceof sg}catch(r){}return!1}});var xA=I((BV,bf)=>{"use strict";g();var fA=Bm(),dA=rA();Ku()()||$l()()?(yf=Symbol.iterator,bf.exports=function(t){if(t!=null&&typeof t[yf]!="undefined")return t[yf]();if(fA(t))return Array.prototype[yf].call(t)}):(hA=rg(),pA=ng(),lg=en(),mA=lg("%Map%",!0),gA=lg("%Set%",!0),Lr=br(),cg=Lr("Array.prototype.push"),ug=Lr("String.prototype.charCodeAt"),vA=Lr("String.prototype.slice"),yA=function(t,r){var n=t.length;if(r+1>=n)return r+1;var i=ug(t,r);if(i<55296||i>56319)return r+1;var a=ug(t,r+1);return a<56320||a>57343?r+1:r+2},wf=function(t){var r=0;return{next:function(){var i=r>=t.length,a;return i||(a=t[r],r+=1),{done:i,value:a}}}},fg=function(t,r){if(hA(t)||fA(t))return wf(t);if(pA(t)){var n=0;return{next:function(){var a=yA(t,n),s=vA(t,n,a);return n=a,{done:a>t.length,value:s}}}}if(r&&typeof t["_es6-shim iterator_"]!="undefined")return t["_es6-shim iterator_"]()},!mA&&!gA?bf.exports=function(t){if(t!=null)return fg(t,!0)}:(wA=ag(),bA=og(),dg=Lr("Map.prototype.forEach",!0),hg=Lr("Set.prototype.forEach",!0),(typeof process=="undefined"||!process.versions||!process.versions.node)&&(pg=Lr("Map.prototype.iterator",!0),mg=Lr("Set.prototype.iterator",!0)),gg=Lr("Map.prototype.@@iterator",!0)||Lr("Map.prototype._es6-shim iterator_",!0),vg=Lr("Set.prototype.@@iterator",!0)||Lr("Set.prototype._es6-shim iterator_",!0),_A=function(t){if(wA(t)){if(pg)return dA(pg(t));if(gg)return gg(t);if(dg){var r=[];return dg(t,function(i,a){cg(r,[a,i])}),wf(r)}}if(bA(t)){if(mg)return dA(mg(t));if(vg)return vg(t);if(hg){var n=[];return hg(t,function(i){cg(n,i)}),wf(n)}}},bf.exports=function(t){return _A(t)||fg(t)}));var yf,hA,pA,lg,mA,gA,Lr,cg,ug,vA,yA,wf,fg,wA,bA,dg,hg,pg,mg,gg,vg,_A});var yg=I((UV,EA)=>{"use strict";g();var SA=function(e){return e!==e};EA.exports=function(t,r){return t===0&&r===0?1/t===1/r:!!(t===r||SA(t)&&SA(r))}});var wg=I((zV,AA)=>{"use strict";g();var fN=yg();AA.exports=function(){return typeof Object.is=="function"?Object.is:fN}});var TA=I((WV,kA)=>{"use strict";g();var dN=wg(),hN=Ti();kA.exports=function(){var t=dN();return hN(Object,{is:t},{is:function(){return Object.is!==t}}),t}});var MA=I((YV,RA)=>{"use strict";g();var pN=Ti(),mN=wa(),gN=yg(),CA=wg(),vN=TA(),PA=mN(CA(),Object);pN(PA,{getPolyfill:CA,implementation:gN,shim:vN});RA.exports=PA});var _g=I((ZV,$A)=>{"use strict";g();var yN=wa(),FA=br(),wN=en(),bg=wN("%ArrayBuffer%",!0),_f=FA("ArrayBuffer.prototype.byteLength",!0),bN=FA("Object.prototype.toString"),OA=!!bg&&!_f&&new bg(0).slice,IA=!!OA&&yN(OA);$A.exports=_f||IA?function(t){if(!t||typeof t!="object")return!1;try{return _f?_f(t):IA(t,0),!0}catch(r){return!1}}:bg?function(t){return bN(t)==="[object ArrayBuffer]"}:function(t){return!1}});var DA=I((JV,LA)=>{"use strict";g();var _N=Date.prototype.getDay,xN=function(t){try{return _N.call(t),!0}catch(r){return!1}},SN=Object.prototype.toString,EN="[object Date]",AN=Ci()();LA.exports=function(t){return typeof t!="object"||t===null?!1:AN?xN(t):SN.call(t)===EN}});var UA=I((eW,HA)=>{"use strict";g();var xg=br(),NA=Ci()(),jA,BA,Sg,Eg;NA&&(jA=xg("Object.prototype.hasOwnProperty"),BA=xg("RegExp.prototype.exec"),Sg={},xf=function(){throw Sg},Eg={toString:xf,valueOf:xf},typeof Symbol.toPrimitive=="symbol"&&(Eg[Symbol.toPrimitive]=xf));var xf,kN=xg("Object.prototype.toString"),TN=Object.getOwnPropertyDescriptor,CN="[object RegExp]";HA.exports=NA?function(t){if(!t||typeof t!="object")return!1;var r=TN(t,"lastIndex"),n=r&&jA(r,"value");if(!n)return!1;try{BA(t,Eg)}catch(i){return i===Sg}}:function(t){return!t||typeof t!="object"&&typeof t!="function"?!1:kN(t)===CN}});var VA=I((rW,zA)=>{"use strict";g();var PN=br(),GA=PN("SharedArrayBuffer.prototype.byteLength",!0);zA.exports=GA?function(t){if(!t||typeof t!="object")return!1;try{return GA(t),!0}catch(r){return!1}}:function(t){return!1}});var qA=I((iW,WA)=>{"use strict";g();var RN=Number.prototype.toString,MN=function(t){try{return RN.call(t),!0}catch(r){return!1}},ON=Object.prototype.toString,IN="[object Number]",FN=Ci()();WA.exports=function(t){return typeof t=="number"?!0:typeof t!="object"?!1:FN?MN(t):ON.call(t)===IN}});var ZA=I((sW,XA)=>{"use strict";g();var YA=br(),$N=YA("Boolean.prototype.toString"),LN=YA("Object.prototype.toString"),DN=function(t){try{return $N(t),!0}catch(r){return!1}},NN="[object Boolean]",jN=Ci()();XA.exports=function(t){return typeof t=="boolean"?!0:t===null||typeof t!="object"?!1:jN&&Symbol.toStringTag in t?DN(t):LN(t)===NN}});var ek=I((lW,Ag)=>{"use strict";g();var BN=Object.prototype.toString,HN=Ku()();HN?(KA=Symbol.prototype.toString,JA=/^Symbol\(.*\)$/,QA=function(t){return typeof t.valueOf()!="symbol"?!1:JA.test(KA.call(t))},Ag.exports=function(t){if(typeof t=="symbol")return!0;if(BN.call(t)!=="[object Symbol]")return!1;try{return QA(t)}catch(r){return!1}}):Ag.exports=function(t){return!1};var KA,JA,QA});var nk=I((uW,rk)=>{"use strict";g();var tk=typeof BigInt!="undefined"&&BigInt;rk.exports=function(){return typeof tk=="function"&&typeof BigInt=="function"&&typeof tk(42)=="bigint"&&typeof BigInt(42)=="bigint"}});var sk=I((dW,kg)=>{"use strict";g();var UN=nk()();UN?(ik=BigInt.prototype.valueOf,ak=function(t){try{return ik.call(t),!0}catch(r){}return!1},kg.exports=function(t){return t===null||typeof t=="undefined"||typeof t=="boolean"||typeof t=="string"||typeof t=="number"||typeof t=="symbol"||typeof t=="function"?!1:typeof t=="bigint"?!0:ak(t)}):kg.exports=function(t){return!1};var ik,ak});var lk=I((pW,ok)=>{"use strict";g();var GN=ng(),zN=qA(),VN=ZA(),WN=ek(),qN=sk();ok.exports=function(t){if(t==null||typeof t!="object"&&typeof t!="function")return null;if(GN(t))return"String";if(zN(t))return"Number";if(VN(t))return"Boolean";if(WN(t))return"Symbol";if(qN(t))return"BigInt"}});var fk=I((gW,uk)=>{"use strict";g();var Sf=typeof WeakMap=="function"&&WeakMap.prototype?WeakMap:null,ck=typeof WeakSet=="function"&&WeakSet.prototype?WeakSet:null,Ef;Sf||(Ef=function(t){return!1});var Cg=Sf?Sf.prototype.has:null,Tg=ck?ck.prototype.has:null;!Ef&&!Cg&&(Ef=function(t){return!1});uk.exports=Ef||function(t){if(!t||typeof t!="object")return!1;try{if(Cg.call(t,Cg),Tg)try{Tg.call(t,Tg)}catch(r){return!0}return t instanceof Sf}catch(r){}return!1}});var hk=I((yW,Rg)=>{"use strict";g();var YN=en(),dk=br(),XN=YN("%WeakSet%",!0),Pg=dk("WeakSet.prototype.has",!0);Pg?(Af=dk("WeakMap.prototype.has",!0),Rg.exports=function(t){if(!t||typeof t!="object")return!1;try{if(Pg(t,Pg),Af)try{Af(t,Af)}catch(r){return!0}return t instanceof XN}catch(r){}return!1}):Rg.exports=function(t){return!1};var Af});var mk=I((bW,pk)=>{"use strict";g();var ZN=ag(),KN=og(),JN=fk(),QN=hk();pk.exports=function(t){if(t&&typeof t=="object"){if(ZN(t))return"Map";if(KN(t))return"Set";if(JN(t))return"WeakMap";if(QN(t))return"WeakSet"}return!1}});var wk=I((xW,yk)=>{"use strict";g();var vk=Function.prototype.toString,Us=typeof Reflect=="object"&&Reflect!==null&&Reflect.apply,Og,kf;if(typeof Us=="function"&&typeof Object.defineProperty=="function")try{Og=Object.defineProperty({},"length",{get:function(){throw kf}}),kf={},Us(function(){throw 42},null,Og)}catch(e){e!==kf&&(Us=null)}else Us=null;var ej=/^\s*class\b/,Ig=function(t){try{var r=vk.call(t);return ej.test(r)}catch(n){return!1}},Mg=function(t){try{return Ig(t)?!1:(vk.call(t),!0)}catch(r){return!1}},Tf=Object.prototype.toString,tj="[object Object]",rj="[object Function]",nj="[object GeneratorFunction]",ij="[object HTMLAllCollection]",aj="[object HTML document.all class]",sj="[object HTMLCollection]",oj=typeof Symbol=="function"&&!!Symbol.toStringTag,lj=!(0 in[,]),Fg=function(){return!1};typeof document=="object"&&(gk=document.all,Tf.call(gk)===Tf.call(document.all)&&(Fg=function(t){if((lj||!t)&&(typeof t=="undefined"||typeof t=="object"))try{var r=Tf.call(t);return(r===ij||r===aj||r===sj||r===tj)&&t("")==null}catch(n){}return!1}));var gk;yk.exports=Us?function(t){if(Fg(t))return!0;if(!t||typeof t!="function"&&typeof t!="object")return!1;try{Us(t,null,Og)}catch(r){if(r!==kf)return!1}return!Ig(t)&&Mg(t)}:function(t){if(Fg(t))return!0;if(!t||typeof t!="function"&&typeof t!="object")return!1;if(oj)return Mg(t);if(Ig(t))return!1;var r=Tf.call(t);return r!==rj&&r!==nj&&!/^\[object HTML/.test(r)?!1:Mg(t)}});var xk=I((EW,_k)=>{"use strict";g();var cj=wk(),uj=Object.prototype.toString,bk=Object.prototype.hasOwnProperty,fj=function(t,r,n){for(var i=0,a=t.length;i<a;i++)bk.call(t,i)&&(n==null?r(t[i],i,t):r.call(n,t[i],i,t))},dj=function(t,r,n){for(var i=0,a=t.length;i<a;i++)n==null?r(t.charAt(i),i,t):r.call(n,t.charAt(i),i,t)},hj=function(t,r,n){for(var i in t)bk.call(t,i)&&(n==null?r(t[i],i,t):r.call(n,t[i],i,t))},pj=function(t,r,n){if(!cj(r))throw new TypeError("iterator must be a function");var i;arguments.length>=3&&(i=n),uj.call(t)==="[object Array]"?fj(t,r,i):typeof t=="string"?dj(t,r,i):hj(t,r,i)};_k.exports=pj});var Ek=I((kW,Sk)=>{"use strict";g();Sk.exports=["Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array"]});var kk=I((CW,Ak)=>{"use strict";g();var $g=Ek(),mj=typeof globalThis=="undefined"?global:globalThis;Ak.exports=function(){for(var t=[],r=0;r<$g.length;r++)typeof mj[$g[r]]=="function"&&(t[t.length]=$g[r]);return t}});var Mk=I((RW,Rk)=>{"use strict";g();var Pf=xk(),gj=kk(),Tk=wa(),Ng=br(),Cf=af(),vj=Ng("Object.prototype.toString"),Pk=Ci()(),Ck=typeof globalThis=="undefined"?global:globalThis,Dg=gj(),jg=Ng("String.prototype.slice"),Lg=Object.getPrototypeOf,yj=Ng("Array.prototype.indexOf",!0)||function(t,r){for(var n=0;n<t.length;n+=1)if(t[n]===r)return n;return-1},Rf={__proto__:null};Pk&&Cf&&Lg?Pf(Dg,function(e){var t=new Ck[e];if(Symbol.toStringTag in t){var r=Lg(t),n=Cf(r,Symbol.toStringTag);if(!n){var i=Lg(r);n=Cf(i,Symbol.toStringTag)}Rf["$"+e]=Tk(n.get)}}):Pf(Dg,function(e){var t=new Ck[e],r=t.slice||t.set;r&&(Rf["$"+e]=Tk(r))});var wj=function(t){var r=!1;return Pf(Rf,function(n,i){if(!r)try{"$"+n(t)===i&&(r=jg(i,1))}catch(a){}}),r},bj=function(t){var r=!1;return Pf(Rf,function(n,i){if(!r)try{n(t),r=jg(i,1)}catch(a){}}),r};Rk.exports=function(t){if(!t||typeof t!="object")return!1;if(!Pk){var r=jg(vj(t),8,-1);return yj(Dg,r)>-1?r:r!=="Object"?!1:bj(t)}return Cf?wj(t):null}});var Fk=I((OW,Ik)=>{"use strict";g();var _j=br(),Ok=_j("ArrayBuffer.prototype.byteLength",!0),xj=_g();Ik.exports=function(t){return xj(t)?Ok?Ok(t):t.byteLength:NaN}});var aT=I((FW,iT)=>{"use strict";g();var tT=fE(),An=br(),$k=AE(),Sj=en(),Gs=xA(),Ej=eg(),Lk=MA(),Dk=Bm(),Nk=rg(),jk=_g(),Bk=DA(),Hk=UA(),Uk=VA(),Gk=Zu(),zk=lk(),Vk=mk(),Wk=Mk(),qk=Fk(),Yk=An("SharedArrayBuffer.prototype.byteLength",!0),Xk=An("Date.prototype.getTime"),Bg=Object.getPrototypeOf,Zk=An("Object.prototype.toString"),Of=Sj("%Set%",!0),Hg=An("Map.prototype.has",!0),If=An("Map.prototype.get",!0),Kk=An("Map.prototype.size",!0),Ff=An("Set.prototype.add",!0),rT=An("Set.prototype.delete",!0),$f=An("Set.prototype.has",!0),Mf=An("Set.prototype.size",!0);function Jk(e,t,r,n){for(var i=Gs(e),a;(a=i.next())&&!a.done;)if(tn(t,a.value,r,n))return rT(e,a.value),!0;return!1}function nT(e){if(typeof e=="undefined")return null;if(typeof e!="object")return typeof e=="symbol"?!1:typeof e=="string"||typeof e=="number"?+e==+e:!0}function Aj(e,t,r,n,i,a){var s=nT(r);if(s!=null)return s;var o=If(t,s),c=tT({},i,{strict:!1});return typeof o=="undefined"&&!Hg(t,s)||!tn(n,o,c,a)?!1:!Hg(e,s)&&tn(n,o,c,a)}function kj(e,t,r){var n=nT(r);return n!=null?n:$f(t,n)&&!$f(e,n)}function Qk(e,t,r,n,i,a){for(var s=Gs(e),o,c;(o=s.next())&&!o.done;)if(c=o.value,tn(r,c,i,a)&&tn(n,If(t,c),i,a))return rT(e,c),!0;return!1}function tn(e,t,r,n){var i=r||{};if(i.strict?Lk(e,t):e===t)return!0;var a=zk(e),s=zk(t);if(a!==s)return!1;if(!e||!t||typeof e!="object"&&typeof t!="object")return i.strict?Lk(e,t):e==t;var o=n.has(e),c=n.has(t),l;if(o&&c){if(n.get(e)===n.get(t))return!0}else l={};return o||n.set(e,l),c||n.set(t,l),Pj(e,t,i,n)}function eT(e){return!e||typeof e!="object"||typeof e.length!="number"||typeof e.copy!="function"||typeof e.slice!="function"||e.length>0&&typeof e[0]!="number"?!1:!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))}function Tj(e,t,r,n){if(Mf(e)!==Mf(t))return!1;for(var i=Gs(e),a=Gs(t),s,o,c;(s=i.next())&&!s.done;)if(s.value&&typeof s.value=="object")c||(c=new Of),Ff(c,s.value);else if(!$f(t,s.value)){if(r.strict||!kj(e,t,s.value))return!1;c||(c=new Of),Ff(c,s.value)}if(c){for(;(o=a.next())&&!o.done;)if(o.value&&typeof o.value=="object"){if(!Jk(c,o.value,r.strict,n))return!1}else if(!r.strict&&!$f(e,o.value)&&!Jk(c,o.value,r.strict,n))return!1;return Mf(c)===0}return!0}function Cj(e,t,r,n){if(Kk(e)!==Kk(t))return!1;for(var i=Gs(e),a=Gs(t),s,o,c,l,u,f;(s=i.next())&&!s.done;)if(l=s.value[0],u=s.value[1],l&&typeof l=="object")c||(c=new Of),Ff(c,l);else if(f=If(t,l),typeof f=="undefined"&&!Hg(t,l)||!tn(u,f,r,n)){if(r.strict||!Aj(e,t,l,u,r,n))return!1;c||(c=new Of),Ff(c,l)}if(c){for(;(o=a.next())&&!o.done;)if(l=o.value[0],f=o.value[1],l&&typeof l=="object"){if(!Qk(c,e,l,f,r,n))return!1}else if(!r.strict&&(!e.has(l)||!tn(If(e,l),f,r,n))&&!Qk(c,e,l,f,tT({},r,{strict:!1}),n))return!1;return Mf(c)===0}return!0}function Pj(e,t,r,n){var i,a;if(typeof e!=typeof t||e==null||t==null||Zk(e)!==Zk(t)||Dk(e)!==Dk(t))return!1;var s=Nk(e),o=Nk(t);if(s!==o)return!1;var c=e instanceof Error,l=t instanceof Error;if(c!==l||(c||l)&&(e.name!==t.name||e.message!==t.message))return!1;var u=Hk(e),f=Hk(t);if(u!==f||(u||f)&&(e.source!==t.source||$k(e)!==$k(t)))return!1;var d=Bk(e),h=Bk(t);if(d!==h||(d||h)&&Xk(e)!==Xk(t)||r.strict&&Bg&&Bg(e)!==Bg(t))return!1;var p=Wk(e),m=Wk(t);if(p!==m)return!1;if(p||m){if(e.length!==t.length)return!1;for(i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0}var v=eT(e),y=eT(t);if(v!==y)return!1;if(v||y){if(e.length!==t.length)return!1;for(i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0}var b=jk(e),x=jk(t);if(b!==x)return!1;if(b||x)return qk(e)!==qk(t)?!1:typeof Uint8Array=="function"&&tn(new Uint8Array(e),new Uint8Array(t),r,n);var E=Uk(e),_=Uk(t);if(E!==_)return!1;if(E||_)return Yk(e)!==Yk(t)?!1:typeof Uint8Array=="function"&&tn(new Uint8Array(e),new Uint8Array(t),r,n);if(typeof e!=typeof t)return!1;var k=Gk(e),w=Gk(t);if(k.length!==w.length)return!1;for(k.sort(),w.sort(),i=k.length-1;i>=0;i--)if(k[i]!=w[i])return!1;for(i=k.length-1;i>=0;i--)if(a=k[i],!tn(e[a],t[a],r,n))return!1;var A=Vk(e),S=Vk(t);return A!==S?!1:A==="Set"||S==="Set"?Tj(e,t,r,n):A==="Map"?Cj(e,t,r,n):!0}iT.exports=function(t,r,n){return tn(t,r,n,Ej())}});var Xg=I((exports,module)=>{g();(function(){"use strict";var ERROR="input is invalid type",WINDOW=typeof window=="object",root=WINDOW?window:{};root.JS_SHA256_NO_WINDOW&&(WINDOW=!1);var WEB_WORKER=!WINDOW&&typeof self=="object",NODE_JS=!root.JS_SHA256_NO_NODE_JS&&typeof process=="object"&&process.versions&&process.versions.node;NODE_JS?root=global:WEB_WORKER&&(root=self);var COMMON_JS=!root.JS_SHA256_NO_COMMON_JS&&typeof module=="object"&&module.exports,AMD=typeof define=="function"&&define.amd,ARRAY_BUFFER=!root.JS_SHA256_NO_ARRAY_BUFFER&&typeof ArrayBuffer!="undefined",HEX_CHARS="0123456789abcdef".split(""),EXTRA=[-2147483648,8388608,32768,128],SHIFT=[24,16,8,0],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],OUTPUT_TYPES=["hex","array","digest","arrayBuffer"],blocks=[];(root.JS_SHA256_NO_NODE_JS||!Array.isArray)&&(Array.isArray=function(e){return Object.prototype.toString.call(e)==="[object Array]"}),ARRAY_BUFFER&&(root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW||!ArrayBuffer.isView)&&(ArrayBuffer.isView=function(e){return typeof e=="object"&&e.buffer&&e.buffer.constructor===ArrayBuffer});var createOutputMethod=function(e,t){return function(r){return new Sha256(t,!0).update(r)[e]()}},createMethod=function(e){var t=createOutputMethod("hex",e);NODE_JS&&(t=nodeWrap(t,e)),t.create=function(){return new Sha256(e)},t.update=function(i){return t.create().update(i)};for(var r=0;r<OUTPUT_TYPES.length;++r){var n=OUTPUT_TYPES[r];t[n]=createOutputMethod(n,e)}return t},nodeWrap=function(method,is224){var crypto=eval("require('crypto')"),Buffer=eval("require('buffer').Buffer"),algorithm=is224?"sha224":"sha256",nodeMethod=function(e){if(typeof e=="string")return crypto.createHash(algorithm).update(e,"utf8").digest("hex");if(e==null)throw new Error(ERROR);return e.constructor===ArrayBuffer&&(e=new Uint8Array(e)),Array.isArray(e)||ArrayBuffer.isView(e)||e.constructor===Buffer?crypto.createHash(algorithm).update(new Buffer(e)).digest("hex"):method(e)};return nodeMethod},createHmacOutputMethod=function(e,t){return function(r,n){return new HmacSha256(r,t,!0).update(n)[e]()}},createHmacMethod=function(e){var t=createHmacOutputMethod("hex",e);t.create=function(i){return new HmacSha256(i,e)},t.update=function(i,a){return t.create(i).update(a)};for(var r=0;r<OUTPUT_TYPES.length;++r){var n=OUTPUT_TYPES[r];t[n]=createHmacOutputMethod(n,e)}return t};function Sha256(e,t){t?(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):this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],e?(this.h0=3238371032,this.h1=914150663,this.h2=812702999,this.h3=4144912697,this.h4=4290775857,this.h5=1750603025,this.h6=1694076839,this.h7=3204075428):(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=!1,this.first=!0,this.is224=e}Sha256.prototype.update=function(e){if(!this.finalized){var t,r=typeof e;if(r!=="string"){if(r==="object"){if(e===null)throw new Error(ERROR);if(ARRAY_BUFFER&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!Array.isArray(e)&&(!ARRAY_BUFFER||!ArrayBuffer.isView(e)))throw new Error(ERROR)}else throw new Error(ERROR);t=!0}for(var n,i=0,a,s=e.length,o=this.blocks;i<s;){if(this.hashed&&(this.hashed=!1,o[0]=this.block,o[16]=o[1]=o[2]=o[3]=o[4]=o[5]=o[6]=o[7]=o[8]=o[9]=o[10]=o[11]=o[12]=o[13]=o[14]=o[15]=0),t)for(a=this.start;i<s&&a<64;++i)o[a>>2]|=e[i]<<SHIFT[a++&3];else for(a=this.start;i<s&&a<64;++i)n=e.charCodeAt(i),n<128?o[a>>2]|=n<<SHIFT[a++&3]:n<2048?(o[a>>2]|=(192|n>>6)<<SHIFT[a++&3],o[a>>2]|=(128|n&63)<<SHIFT[a++&3]):n<55296||n>=57344?(o[a>>2]|=(224|n>>12)<<SHIFT[a++&3],o[a>>2]|=(128|n>>6&63)<<SHIFT[a++&3],o[a>>2]|=(128|n&63)<<SHIFT[a++&3]):(n=65536+((n&1023)<<10|e.charCodeAt(++i)&1023),o[a>>2]|=(240|n>>18)<<SHIFT[a++&3],o[a>>2]|=(128|n>>12&63)<<SHIFT[a++&3],o[a>>2]|=(128|n>>6&63)<<SHIFT[a++&3],o[a>>2]|=(128|n&63)<<SHIFT[a++&3]);this.lastByteIndex=a,this.bytes+=a-this.start,a>=64?(this.block=o[16],this.start=a-64,this.hash(),this.hashed=!0):this.start=a}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},Sha256.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[16]=this.block,e[t>>2]|=EXTRA[t&3],this.block=e[16],t>=56&&(this.hashed||this.hash(),e[0]=this.block,e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.hBytes<<3|this.bytes>>>29,e[15]=this.bytes<<3,this.hash()}},Sha256.prototype.hash=function(){var e=this.h0,t=this.h1,r=this.h2,n=this.h3,i=this.h4,a=this.h5,s=this.h6,o=this.h7,c=this.blocks,l,u,f,d,h,p,m,v,y,b,x;for(l=16;l<64;++l)h=c[l-15],u=(h>>>7|h<<25)^(h>>>18|h<<14)^h>>>3,h=c[l-2],f=(h>>>17|h<<15)^(h>>>19|h<<13)^h>>>10,c[l]=c[l-16]+u+c[l-7]+f<<0;for(x=t&r,l=0;l<64;l+=4)this.first?(this.is224?(v=300032,h=c[0]-1413257819,o=h-150054599<<0,n=h+24177077<<0):(v=704751109,h=c[0]-210244248,o=h-1521486534<<0,n=h+143694565<<0),this.first=!1):(u=(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10),f=(i>>>6|i<<26)^(i>>>11|i<<21)^(i>>>25|i<<7),v=e&t,d=v^e&r^x,m=i&a^~i&s,h=o+f+m+K[l]+c[l],p=u+d,o=n+h<<0,n=h+p<<0),u=(n>>>2|n<<30)^(n>>>13|n<<19)^(n>>>22|n<<10),f=(o>>>6|o<<26)^(o>>>11|o<<21)^(o>>>25|o<<7),y=n&e,d=y^n&t^v,m=o&i^~o&a,h=s+f+m+K[l+1]+c[l+1],p=u+d,s=r+h<<0,r=h+p<<0,u=(r>>>2|r<<30)^(r>>>13|r<<19)^(r>>>22|r<<10),f=(s>>>6|s<<26)^(s>>>11|s<<21)^(s>>>25|s<<7),b=r&n,d=b^r&e^y,m=s&o^~s&i,h=a+f+m+K[l+2]+c[l+2],p=u+d,a=t+h<<0,t=h+p<<0,u=(t>>>2|t<<30)^(t>>>13|t<<19)^(t>>>22|t<<10),f=(a>>>6|a<<26)^(a>>>11|a<<21)^(a>>>25|a<<7),x=t&r,d=x^t&n^b,m=a&s^~a&o,h=i+f+m+K[l+3]+c[l+3],p=u+d,i=e+h<<0,e=h+p<<0;this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+r<<0,this.h3=this.h3+n<<0,this.h4=this.h4+i<<0,this.h5=this.h5+a<<0,this.h6=this.h6+s<<0,this.h7=this.h7+o<<0},Sha256.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,r=this.h2,n=this.h3,i=this.h4,a=this.h5,s=this.h6,o=this.h7,c=HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>4&15]+HEX_CHARS[e&15]+HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[t&15]+HEX_CHARS[r>>28&15]+HEX_CHARS[r>>24&15]+HEX_CHARS[r>>20&15]+HEX_CHARS[r>>16&15]+HEX_CHARS[r>>12&15]+HEX_CHARS[r>>8&15]+HEX_CHARS[r>>4&15]+HEX_CHARS[r&15]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[n&15]+HEX_CHARS[i>>28&15]+HEX_CHARS[i>>24&15]+HEX_CHARS[i>>20&15]+HEX_CHARS[i>>16&15]+HEX_CHARS[i>>12&15]+HEX_CHARS[i>>8&15]+HEX_CHARS[i>>4&15]+HEX_CHARS[i&15]+HEX_CHARS[a>>28&15]+HEX_CHARS[a>>24&15]+HEX_CHARS[a>>20&15]+HEX_CHARS[a>>16&15]+HEX_CHARS[a>>12&15]+HEX_CHARS[a>>8&15]+HEX_CHARS[a>>4&15]+HEX_CHARS[a&15]+HEX_CHARS[s>>28&15]+HEX_CHARS[s>>24&15]+HEX_CHARS[s>>20&15]+HEX_CHARS[s>>16&15]+HEX_CHARS[s>>12&15]+HEX_CHARS[s>>8&15]+HEX_CHARS[s>>4&15]+HEX_CHARS[s&15];return this.is224||(c+=HEX_CHARS[o>>28&15]+HEX_CHARS[o>>24&15]+HEX_CHARS[o>>20&15]+HEX_CHARS[o>>16&15]+HEX_CHARS[o>>12&15]+HEX_CHARS[o>>8&15]+HEX_CHARS[o>>4&15]+HEX_CHARS[o&15]),c},Sha256.prototype.toString=Sha256.prototype.hex,Sha256.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,r=this.h2,n=this.h3,i=this.h4,a=this.h5,s=this.h6,o=this.h7,c=[e>>24&255,e>>16&255,e>>8&255,e&255,t>>24&255,t>>16&255,t>>8&255,t&255,r>>24&255,r>>16&255,r>>8&255,r&255,n>>24&255,n>>16&255,n>>8&255,n&255,i>>24&255,i>>16&255,i>>8&255,i&255,a>>24&255,a>>16&255,a>>8&255,a&255,s>>24&255,s>>16&255,s>>8&255,s&255];return this.is224||c.push(o>>24&255,o>>16&255,o>>8&255,o&255),c},Sha256.prototype.array=Sha256.prototype.digest,Sha256.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(this.is224?28:32),t=new DataView(e);return t.setUint32(0,this.h0),t.setUint32(4,this.h1),t.setUint32(8,this.h2),t.setUint32(12,this.h3),t.setUint32(16,this.h4),t.setUint32(20,this.h5),t.setUint32(24,this.h6),this.is224||t.setUint32(28,this.h7),e};function HmacSha256(e,t,r){var n,i=typeof e;if(i==="string"){var a=[],s=e.length,o=0,c;for(n=0;n<s;++n)c=e.charCodeAt(n),c<128?a[o++]=c:c<2048?(a[o++]=192|c>>6,a[o++]=128|c&63):c<55296||c>=57344?(a[o++]=224|c>>12,a[o++]=128|c>>6&63,a[o++]=128|c&63):(c=65536+((c&1023)<<10|e.charCodeAt(++n)&1023),a[o++]=240|c>>18,a[o++]=128|c>>12&63,a[o++]=128|c>>6&63,a[o++]=128|c&63);e=a}else if(i==="object"){if(e===null)throw new Error(ERROR);if(ARRAY_BUFFER&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!Array.isArray(e)&&(!ARRAY_BUFFER||!ArrayBuffer.isView(e)))throw new Error(ERROR)}else throw new Error(ERROR);e.length>64&&(e=new Sha256(t,!0).update(e).array());var l=[],u=[];for(n=0;n<64;++n){var f=e[n]||0;l[n]=92^f,u[n]=54^f}Sha256.call(this,t,r),this.update(u),this.oKeyPad=l,this.inner=!0,this.sharedMemory=r}HmacSha256.prototype=new Sha256,HmacSha256.prototype.finalize=function(){if(Sha256.prototype.finalize.call(this),this.inner){this.inner=!1;var e=this.array();Sha256.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(e),Sha256.prototype.finalize.call(this)}};var exports=createMethod();exports.sha256=exports,exports.sha224=createMethod(!0),exports.sha256.hmac=createHmacMethod(),exports.sha224.hmac=createHmacMethod(!0),COMMON_JS?module.exports=exports:(root.sha256=exports.sha256,root.sha224=exports.sha224,AMD&&define(function(){return exports}))})()});var kC=I(E0=>{g();(function(e){var t=/\S/,r=/\"/g,n=/\n/g,i=/\r/g,a=/\\/g,s=/\u2028/,o=/\u2029/;e.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},e.scan=function(A,S){var T=A.length,P=0,O=1,j=2,D=P,Q=null,de=null,ee="",J=[],Pe=!1,me=0,F=0,G="{{",N="}}";function Me(){ee.length>0&&(J.push({tag:"_t",text:new String(ee)}),ee="")}function Dt(){for(var st=!0,ot=F;ot<J.length;ot++)if(st=e.tags[J[ot].tag]<e.tags._v||J[ot].tag=="_t"&&J[ot].text.match(t)===null,!st)return!1;return st}function _t(st,ot){if(Me(),st&&Dt())for(var Ct=F,$e;Ct<J.length;Ct++)J[Ct].text&&(($e=J[Ct+1])&&$e.tag==">"&&($e.indent=J[Ct].text.toString()),J.splice(Ct,1));else ot||J.push({tag:` +`});Pe=!1,F=J.length}function Ee(st,ot){var Ct="="+N,$e=st.indexOf(Ct,ot),U=l(st.substring(st.indexOf("=",ot)+1,$e)).split(" ");return G=U[0],N=U[U.length-1],$e+Ct.length-1}for(S&&(S=S.split(" "),G=S[0],N=S[1]),me=0;me<T;me++)D==P?u(G,A,me)?(--me,Me(),D=O):A.charAt(me)==` +`?_t(Pe):ee+=A.charAt(me):D==O?(me+=G.length-1,de=e.tags[A.charAt(me+1)],Q=de?A.charAt(me+1):"_v",Q=="="?(me=Ee(A,me),D=P):(de&&me++,D=j),Pe=me):u(N,A,me)?(J.push({tag:Q,n:l(ee),otag:G,ctag:N,i:Q=="/"?Pe-G.length:me+N.length}),ee="",me+=N.length-1,D=P,Q=="{"&&(N=="}}"?me++:c(J[J.length-1]))):ee+=A.charAt(me);return _t(Pe,!0),J};function c(w){w.n.substr(w.n.length-1)==="}"&&(w.n=w.n.substring(0,w.n.length-1))}function l(w){return w.trim?w.trim():w.replace(/^\s*|\s*$/g,"")}function u(w,A,S){if(A.charAt(S)!=w.charAt(0))return!1;for(var T=1,P=w.length;T<P;T++)if(A.charAt(S+T)!=w.charAt(T))return!1;return!0}var f={_t:!0,"\n":!0,$:!0,"/":!0};function d(w,A,S,T){var P=[],O=null,j=null,D=null;for(j=S[S.length-1];w.length>0;){if(D=w.shift(),j&&j.tag=="<"&&!(D.tag in f))throw new Error("Illegal content in < super tag.");if(e.tags[D.tag]<=e.tags.$||h(D,T))S.push(D),D.nodes=d(w,D.tag,S,T);else if(D.tag=="/"){if(S.length===0)throw new Error("Closing tag without opener: /"+D.n);if(O=S.pop(),D.n!=O.n&&!p(D.n,O.n,T))throw new Error("Nesting error: "+O.n+" vs. "+D.n);return O.end=D.i,P}else D.tag==` +`&&(D.last=w.length==0||w[0].tag==` +`);P.push(D)}if(S.length>0)throw new Error("missing closing tag: "+S.pop().n);return P}function h(w,A){for(var S=0,T=A.length;S<T;S++)if(A[S].o==w.n)return w.tag="#",!0}function p(w,A,S){for(var T=0,P=S.length;T<P;T++)if(S[T].c==w&&S[T].o==A)return!0}function m(w){var A=[];for(var S in w)A.push('"'+b(S)+'": function(c,p,t,i) {'+w[S]+"}");return"{ "+A.join(",")+" }"}function v(w){var A=[];for(var S in w.partials)A.push('"'+b(S)+'":{name:"'+b(w.partials[S].name)+'", '+v(w.partials[S])+"}");return"partials: {"+A.join(",")+"}, subs: "+m(w.subs)}e.stringify=function(w,A,S){return"{code: function (c,p,i) { "+e.wrapMain(w.code)+" },"+v(w)+"}"};var y=0;e.generate=function(w,A,S){y=0;var T={code:"",subs:{},partials:{}};return e.walk(w,T),S.asString?this.stringify(T,A,S):this.makeTemplate(T,A,S)},e.wrapMain=function(w){return'var t=this;t.b(i=i||"");'+w+"return t.fl();"},e.template=e.Template,e.makeTemplate=function(w,A,S){var T=this.makePartials(w);return T.code=new Function("c","p","i",this.wrapMain(w.code)),new this.template(T,A,this,S)},e.makePartials=function(w){var A,S={subs:{},partials:w.partials,name:w.name};for(A in S.partials)S.partials[A]=this.makePartials(S.partials[A]);for(A in w.subs)S.subs[A]=new Function("c","p","t","i",w.subs[A]);return S};function b(w){return w.replace(a,"\\\\").replace(r,'\\"').replace(n,"\\n").replace(i,"\\r").replace(s,"\\u2028").replace(o,"\\u2029")}function x(w){return~w.indexOf(".")?"d":"f"}function E(w,A){var S="<"+(A.prefix||""),T=S+w.n+y++;return A.partials[T]={name:w.n,partials:{}},A.code+='t.b(t.rp("'+b(T)+'",c,p,"'+(w.indent||"")+'"));',T}e.codegen={"#":function(w,A){A.code+="if(t.s(t."+x(w.n)+'("'+b(w.n)+'",c,p,1),c,p,0,'+w.i+","+w.end+',"'+w.otag+" "+w.ctag+'")){t.rs(c,p,function(c,p,t){',e.walk(w.nodes,A),A.code+="});c.pop();}"},"^":function(w,A){A.code+="if(!t.s(t."+x(w.n)+'("'+b(w.n)+'",c,p,1),c,p,1,0,0,"")){',e.walk(w.nodes,A),A.code+="};"},">":E,"<":function(w,A){var S={partials:{},code:"",subs:{},inPartial:!0};e.walk(w.nodes,S);var T=A.partials[E(w,A)];T.subs=S.subs,T.partials=S.partials},$:function(w,A){var S={subs:{},code:"",partials:A.partials,prefix:w.n};e.walk(w.nodes,S),A.subs[w.n]=S.code,A.inPartial||(A.code+='t.sub("'+b(w.n)+'",c,p,i);')},"\n":function(w,A){A.code+=k('"\\n"'+(w.last?"":" + i"))},_v:function(w,A){A.code+="t.b(t.v(t."+x(w.n)+'("'+b(w.n)+'",c,p,0)));'},_t:function(w,A){A.code+=k('"'+b(w.text)+'"')},"{":_,"&":_};function _(w,A){A.code+="t.b(t.t(t."+x(w.n)+'("'+b(w.n)+'",c,p,0)));'}function k(w){return"t.b("+w+");"}e.walk=function(w,A){for(var S,T=0,P=w.length;T<P;T++)S=e.codegen[w[T].tag],S&&S(w[T],A);return A},e.parse=function(w,A,S){return S=S||{},d(w,"",[],S.sectionTags||[])},e.cache={},e.cacheKey=function(w,A){return[w,!!A.asString,!!A.disableLambda,A.delimiters,!!A.modelGet].join("||")},e.compile=function(w,A){A=A||{};var S=e.cacheKey(w,A),T=this.cache[S];if(T){var P=T.partials;for(var O in P)delete P[O].instance;return T}return T=this.generate(this.parse(this.scan(w,A.delimiters),w,A),w,A),this.cache[S]=T}})(typeof E0!="undefined"?E0:Hogan)});var TC=I(A0=>{g();var UB={};(function(e){e.Template=function(d,h,p,m){d=d||{},this.r=d.code||this.r,this.c=p,this.options=m||{},this.text=h||"",this.partials=d.partials||{},this.subs=d.subs||{},this.buf=""},e.Template.prototype={r:function(d,h,p){return""},v:u,t:l,render:function(h,p,m){return this.ri([h],p||{},m)},ri:function(d,h,p){return this.r(d,h,p)},ep:function(d,h){var p=this.partials[d],m=h[p.name];if(p.instance&&p.base==m)return p.instance;if(typeof m=="string"){if(!this.c)throw new Error("No compiler available.");m=this.c.compile(m,this.options)}if(!m)return null;if(this.partials[d].base=m,p.subs){h.stackText||(h.stackText={});for(key in p.subs)h.stackText[key]||(h.stackText[key]=this.activeSub!==void 0&&h.stackText[this.activeSub]?h.stackText[this.activeSub]:this.text);m=r(m,p.subs,p.partials,this.stackSubs,this.stackPartials,h.stackText)}return this.partials[d].instance=m,m},rp:function(d,h,p,m){var v=this.ep(d,p);return v?v.ri(h,p,m):""},rs:function(d,h,p){var m=d[d.length-1];if(!f(m)){p(d,h,this);return}for(var v=0;v<m.length;v++)d.push(m[v]),p(d,h,this),d.pop()},s:function(d,h,p,m,v,y,b){var x;return f(d)&&d.length===0?!1:(typeof d=="function"&&(d=this.ms(d,h,p,m,v,y,b)),x=!!d,!m&&x&&h&&h.push(typeof d=="object"?d:h[h.length-1]),x)},d:function(d,h,p,m){var v,y=d.split("."),b=this.f(y[0],h,p,m),x=this.options.modelGet,E=null;if(d==="."&&f(h[h.length-2]))b=h[h.length-1];else for(var _=1;_<y.length;_++)v=t(y[_],b,x),v!==void 0?(E=b,b=v):b="";return m&&!b?!1:(!m&&typeof b=="function"&&(h.push(E),b=this.mv(b,h,p),h.pop()),b)},f:function(d,h,p,m){for(var v=!1,y=null,b=!1,x=this.options.modelGet,E=h.length-1;E>=0;E--)if(y=h[E],v=t(d,y,x),v!==void 0){b=!0;break}return b?(!m&&typeof v=="function"&&(v=this.mv(v,h,p)),v):m?!1:""},ls:function(d,h,p,m,v){var y=this.options.delimiters;return this.options.delimiters=v,this.b(this.ct(l(d.call(h,m)),h,p)),this.options.delimiters=y,!1},ct:function(d,h,p){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(d,this.options).render(h,p)},b:function(d){this.buf+=d},fl:function(){var d=this.buf;return this.buf="",d},ms:function(d,h,p,m,v,y,b){var x,E=h[h.length-1],_=d.call(E);return typeof _=="function"?m?!0:(x=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(_,E,p,x.substring(v,y),b)):_},mv:function(d,h,p){var m=h[h.length-1],v=d.call(m);return typeof v=="function"?this.ct(l(v.call(m)),m,p):v},sub:function(d,h,p,m){var v=this.subs[d];v&&(this.activeSub=d,v(h,p,this,m),this.activeSub=!1)}};function t(d,h,p){var m;return h&&typeof h=="object"&&(h[d]!==void 0?m=h[d]:p&&h.get&&typeof h.get=="function"&&(m=h.get(d))),m}function r(d,h,p,m,v,y){function b(){}b.prototype=d;function x(){}x.prototype=d.subs;var E,_=new b;_.subs=new x,_.subsText={},_.buf="",m=m||{},_.stackSubs=m,_.subsText=y;for(E in h)m[E]||(m[E]=h[E]);for(E in m)_.subs[E]=m[E];v=v||{},_.stackPartials=v;for(E in p)v[E]||(v[E]=p[E]);for(E in v)_.partials[E]=v[E];return _}var n=/&/g,i=/</g,a=/>/g,s=/\'/g,o=/\"/g,c=/[&<>\"\']/;function l(d){return String(d==null?"":d)}function u(d){return d=l(d),c.test(d)?d.replace(n,"&").replace(i,"<").replace(a,">").replace(s,"'").replace(o,"""):d}var f=Array.isArray||function(d){return Object.prototype.toString.call(d)==="[object Array]"}})(typeof A0!="undefined"?A0:UB)});var k0=I((LX,CC)=>{g();var md=kC();md.Template=TC().Template;md.template=md.Template;CC.exports=md});var X3=I((yc,Sv)=>{g();(function(t,r){typeof yc=="object"&&typeof Sv=="object"?Sv.exports=r():typeof define=="function"&&define.amd?define([],r):typeof yc=="object"?yc.feather=r():t.feather=r()})(typeof self!="undefined"?self:yc,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.r=function(n){Object.defineProperty(n,"__esModule",{value:!0})},r.n=function(n){var i=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=0)}({"./dist/icons.json":function(e){e.exports={activity:'<polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline>',airplay:'<path d="M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1"></path><polygon points="12 15 17 21 7 21 12 15"></polygon>',"alert-circle":'<circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line>',"alert-octagon":'<polygon points="7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"></polygon><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line>',"alert-triangle":'<path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line>',"align-center":'<line x1="18" y1="10" x2="6" y2="10"></line><line x1="21" y1="6" x2="3" y2="6"></line><line x1="21" y1="14" x2="3" y2="14"></line><line x1="18" y1="18" x2="6" y2="18"></line>',"align-justify":'<line x1="21" y1="10" x2="3" y2="10"></line><line x1="21" y1="6" x2="3" y2="6"></line><line x1="21" y1="14" x2="3" y2="14"></line><line x1="21" y1="18" x2="3" y2="18"></line>',"align-left":'<line x1="17" y1="10" x2="3" y2="10"></line><line x1="21" y1="6" x2="3" y2="6"></line><line x1="21" y1="14" x2="3" y2="14"></line><line x1="17" y1="18" x2="3" y2="18"></line>',"align-right":'<line x1="21" y1="10" x2="7" y2="10"></line><line x1="21" y1="6" x2="3" y2="6"></line><line x1="21" y1="14" x2="3" y2="14"></line><line x1="21" y1="18" x2="7" y2="18"></line>',anchor:'<circle cx="12" cy="5" r="3"></circle><line x1="12" y1="22" x2="12" y2="8"></line><path d="M5 12H2a10 10 0 0 0 20 0h-3"></path>',aperture:'<circle cx="12" cy="12" r="10"></circle><line x1="14.31" y1="8" x2="20.05" y2="17.94"></line><line x1="9.69" y1="8" x2="21.17" y2="8"></line><line x1="7.38" y1="12" x2="13.12" y2="2.06"></line><line x1="9.69" y1="16" x2="3.95" y2="6.06"></line><line x1="14.31" y1="16" x2="2.83" y2="16"></line><line x1="16.62" y1="12" x2="10.88" y2="21.94"></line>',archive:'<polyline points="21 8 21 21 3 21 3 8"></polyline><rect x="1" y="3" width="22" height="5"></rect><line x1="10" y1="12" x2="14" y2="12"></line>',"arrow-down-circle":'<circle cx="12" cy="12" r="10"></circle><polyline points="8 12 12 16 16 12"></polyline><line x1="12" y1="8" x2="12" y2="16"></line>',"arrow-down-left":'<line x1="17" y1="7" x2="7" y2="17"></line><polyline points="17 17 7 17 7 7"></polyline>',"arrow-down-right":'<line x1="7" y1="7" x2="17" y2="17"></line><polyline points="17 7 17 17 7 17"></polyline>',"arrow-down":'<line x1="12" y1="5" x2="12" y2="19"></line><polyline points="19 12 12 19 5 12"></polyline>',"arrow-left-circle":'<circle cx="12" cy="12" r="10"></circle><polyline points="12 8 8 12 12 16"></polyline><line x1="16" y1="12" x2="8" y2="12"></line>',"arrow-left":'<line x1="19" y1="12" x2="5" y2="12"></line><polyline points="12 19 5 12 12 5"></polyline>',"arrow-right-circle":'<circle cx="12" cy="12" r="10"></circle><polyline points="12 16 16 12 12 8"></polyline><line x1="8" y1="12" x2="16" y2="12"></line>',"arrow-right":'<line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline>',"arrow-up-circle":'<circle cx="12" cy="12" r="10"></circle><polyline points="16 12 12 8 8 12"></polyline><line x1="12" y1="16" x2="12" y2="8"></line>',"arrow-up-left":'<line x1="17" y1="17" x2="7" y2="7"></line><polyline points="7 17 7 7 17 7"></polyline>',"arrow-up-right":'<line x1="7" y1="17" x2="17" y2="7"></line><polyline points="7 7 17 7 17 17"></polyline>',"arrow-up":'<line x1="12" y1="19" x2="12" y2="5"></line><polyline points="5 12 12 5 19 12"></polyline>',"at-sign":'<circle cx="12" cy="12" r="4"></circle><path d="M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94"></path>',award:'<circle cx="12" cy="8" r="7"></circle><polyline points="8.21 13.89 7 23 12 20 17 23 15.79 13.88"></polyline>',"bar-chart-2":'<line x1="18" y1="20" x2="18" y2="10"></line><line x1="12" y1="20" x2="12" y2="4"></line><line x1="6" y1="20" x2="6" y2="14"></line>',"bar-chart":'<line x1="12" y1="20" x2="12" y2="10"></line><line x1="18" y1="20" x2="18" y2="4"></line><line x1="6" y1="20" x2="6" y2="16"></line>',"battery-charging":'<path d="M5 18H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3.19M15 6h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-3.19"></path><line x1="23" y1="13" x2="23" y2="11"></line><polyline points="11 6 7 12 13 12 9 18"></polyline>',battery:'<rect x="1" y="6" width="18" height="12" rx="2" ry="2"></rect><line x1="23" y1="13" x2="23" y2="11"></line>',"bell-off":'<path d="M13.73 21a2 2 0 0 1-3.46 0"></path><path d="M18.63 13A17.89 17.89 0 0 1 18 8"></path><path d="M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14"></path><path d="M18 8a6 6 0 0 0-9.33-5"></path><line x1="1" y1="1" x2="23" y2="23"></line>',bell:'<path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"></path><path d="M13.73 21a2 2 0 0 1-3.46 0"></path>',bluetooth:'<polyline points="6.5 6.5 17.5 17.5 12 23 12 1 17.5 6.5 6.5 17.5"></polyline>',bold:'<path d="M6 4h8a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z"></path><path d="M6 12h9a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z"></path>',"book-open":'<path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path>',book:'<path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path>',bookmark:'<path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"></path>',box:'<path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line>',briefcase:'<rect x="2" y="7" width="20" height="14" rx="2" ry="2"></rect><path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"></path>',calendar:'<rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line>',"camera-off":'<line x1="1" y1="1" x2="23" y2="23"></line><path d="M21 21H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3m3-3h6l2 3h4a2 2 0 0 1 2 2v9.34m-7.72-2.06a4 4 0 1 1-5.56-5.56"></path>',camera:'<path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"></path><circle cx="12" cy="13" r="4"></circle>',cast:'<path d="M2 16.1A5 5 0 0 1 5.9 20M2 12.05A9 9 0 0 1 9.95 20M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6"></path><line x1="2" y1="20" x2="2.01" y2="20"></line>',"check-circle":'<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline>',"check-square":'<polyline points="9 11 12 14 22 4"></polyline><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"></path>',check:'<polyline points="20 6 9 17 4 12"></polyline>',"chevron-down":'<polyline points="6 9 12 15 18 9"></polyline>',"chevron-left":'<polyline points="15 18 9 12 15 6"></polyline>',"chevron-right":'<polyline points="9 18 15 12 9 6"></polyline>',"chevron-up":'<polyline points="18 15 12 9 6 15"></polyline>',"chevrons-down":'<polyline points="7 13 12 18 17 13"></polyline><polyline points="7 6 12 11 17 6"></polyline>',"chevrons-left":'<polyline points="11 17 6 12 11 7"></polyline><polyline points="18 17 13 12 18 7"></polyline>',"chevrons-right":'<polyline points="13 17 18 12 13 7"></polyline><polyline points="6 17 11 12 6 7"></polyline>',"chevrons-up":'<polyline points="17 11 12 6 7 11"></polyline><polyline points="17 18 12 13 7 18"></polyline>',chrome:'<circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="4"></circle><line x1="21.17" y1="8" x2="12" y2="8"></line><line x1="3.95" y1="6.06" x2="8.54" y2="14"></line><line x1="10.88" y1="21.94" x2="15.46" y2="14"></line>',circle:'<circle cx="12" cy="12" r="10"></circle>',clipboard:'<path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"></path><rect x="8" y="2" width="8" height="4" rx="1" ry="1"></rect>',clock:'<circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline>',"cloud-drizzle":'<line x1="8" y1="19" x2="8" y2="21"></line><line x1="8" y1="13" x2="8" y2="15"></line><line x1="16" y1="19" x2="16" y2="21"></line><line x1="16" y1="13" x2="16" y2="15"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="12" y1="15" x2="12" y2="17"></line><path d="M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25"></path>',"cloud-lightning":'<path d="M19 16.9A5 5 0 0 0 18 7h-1.26a8 8 0 1 0-11.62 9"></path><polyline points="13 11 9 17 15 17 11 23"></polyline>',"cloud-off":'<path d="M22.61 16.95A5 5 0 0 0 18 10h-1.26a8 8 0 0 0-7.05-6M5 5a8 8 0 0 0 4 15h9a5 5 0 0 0 1.7-.3"></path><line x1="1" y1="1" x2="23" y2="23"></line>',"cloud-rain":'<line x1="16" y1="13" x2="16" y2="21"></line><line x1="8" y1="13" x2="8" y2="21"></line><line x1="12" y1="15" x2="12" y2="23"></line><path d="M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25"></path>',"cloud-snow":'<path d="M20 17.58A5 5 0 0 0 18 8h-1.26A8 8 0 1 0 4 16.25"></path><line x1="8" y1="16" x2="8.01" y2="16"></line><line x1="8" y1="20" x2="8.01" y2="20"></line><line x1="12" y1="18" x2="12.01" y2="18"></line><line x1="12" y1="22" x2="12.01" y2="22"></line><line x1="16" y1="16" x2="16.01" y2="16"></line><line x1="16" y1="20" x2="16.01" y2="20"></line>',cloud:'<path d="M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z"></path>',code:'<polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline>',codepen:'<polygon points="12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2"></polygon><line x1="12" y1="22" x2="12" y2="15.5"></line><polyline points="22 8.5 12 15.5 2 8.5"></polyline><polyline points="2 15.5 12 8.5 22 15.5"></polyline><line x1="12" y1="2" x2="12" y2="8.5"></line>',codesandbox:'<path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="7.5 4.21 12 6.81 16.5 4.21"></polyline><polyline points="7.5 19.79 7.5 14.6 3 12"></polyline><polyline points="21 12 16.5 14.6 16.5 19.79"></polyline><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line>',coffee:'<path d="M18 8h1a4 4 0 0 1 0 8h-1"></path><path d="M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z"></path><line x1="6" y1="1" x2="6" y2="4"></line><line x1="10" y1="1" x2="10" y2="4"></line><line x1="14" y1="1" x2="14" y2="4"></line>',columns:'<path d="M12 3h7a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-7m0-18H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h7m0-18v18"></path>',command:'<path d="M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z"></path>',compass:'<circle cx="12" cy="12" r="10"></circle><polygon points="16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76"></polygon>',copy:'<rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>',"corner-down-left":'<polyline points="9 10 4 15 9 20"></polyline><path d="M20 4v7a4 4 0 0 1-4 4H4"></path>',"corner-down-right":'<polyline points="15 10 20 15 15 20"></polyline><path d="M4 4v7a4 4 0 0 0 4 4h12"></path>',"corner-left-down":'<polyline points="14 15 9 20 4 15"></polyline><path d="M20 4h-7a4 4 0 0 0-4 4v12"></path>',"corner-left-up":'<polyline points="14 9 9 4 4 9"></polyline><path d="M20 20h-7a4 4 0 0 1-4-4V4"></path>',"corner-right-down":'<polyline points="10 15 15 20 20 15"></polyline><path d="M4 4h7a4 4 0 0 1 4 4v12"></path>',"corner-right-up":'<polyline points="10 9 15 4 20 9"></polyline><path d="M4 20h7a4 4 0 0 0 4-4V4"></path>',"corner-up-left":'<polyline points="9 14 4 9 9 4"></polyline><path d="M20 20v-7a4 4 0 0 0-4-4H4"></path>',"corner-up-right":'<polyline points="15 14 20 9 15 4"></polyline><path d="M4 20v-7a4 4 0 0 1 4-4h12"></path>',cpu:'<rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect><rect x="9" y="9" width="6" height="6"></rect><line x1="9" y1="1" x2="9" y2="4"></line><line x1="15" y1="1" x2="15" y2="4"></line><line x1="9" y1="20" x2="9" y2="23"></line><line x1="15" y1="20" x2="15" y2="23"></line><line x1="20" y1="9" x2="23" y2="9"></line><line x1="20" y1="14" x2="23" y2="14"></line><line x1="1" y1="9" x2="4" y2="9"></line><line x1="1" y1="14" x2="4" y2="14"></line>',"credit-card":'<rect x="1" y="4" width="22" height="16" rx="2" ry="2"></rect><line x1="1" y1="10" x2="23" y2="10"></line>',crop:'<path d="M6.13 1L6 16a2 2 0 0 0 2 2h15"></path><path d="M1 6.13L16 6a2 2 0 0 1 2 2v15"></path>',crosshair:'<circle cx="12" cy="12" r="10"></circle><line x1="22" y1="12" x2="18" y2="12"></line><line x1="6" y1="12" x2="2" y2="12"></line><line x1="12" y1="6" x2="12" y2="2"></line><line x1="12" y1="22" x2="12" y2="18"></line>',database:'<ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"></path><path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"></path>',delete:'<path d="M21 4H8l-7 8 7 8h13a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2z"></path><line x1="18" y1="9" x2="12" y2="15"></line><line x1="12" y1="9" x2="18" y2="15"></line>',disc:'<circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="3"></circle>',"divide-circle":'<line x1="8" y1="12" x2="16" y2="12"></line><line x1="12" y1="16" x2="12" y2="16"></line><line x1="12" y1="8" x2="12" y2="8"></line><circle cx="12" cy="12" r="10"></circle>',"divide-square":'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="8" y1="12" x2="16" y2="12"></line><line x1="12" y1="16" x2="12" y2="16"></line><line x1="12" y1="8" x2="12" y2="8"></line>',divide:'<circle cx="12" cy="6" r="2"></circle><line x1="5" y1="12" x2="19" y2="12"></line><circle cx="12" cy="18" r="2"></circle>',"dollar-sign":'<line x1="12" y1="1" x2="12" y2="23"></line><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path>',"download-cloud":'<polyline points="8 17 12 21 16 17"></polyline><line x1="12" y1="12" x2="12" y2="21"></line><path d="M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29"></path>',download:'<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line>',dribbble:'<circle cx="12" cy="12" r="10"></circle><path d="M8.56 2.75c4.37 6.03 6.02 9.42 8.03 17.72m2.54-15.38c-3.72 4.35-8.94 5.66-16.88 5.85m19.5 1.9c-3.5-.93-6.63-.82-8.94 0-2.58.92-5.01 2.86-7.44 6.32"></path>',droplet:'<path d="M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z"></path>',"edit-2":'<path d="M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"></path>',"edit-3":'<path d="M12 20h9"></path><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"></path>',edit:'<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path>',"external-link":'<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>',"eye-off":'<path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path><line x1="1" y1="1" x2="23" y2="23"></line>',eye:'<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path><circle cx="12" cy="12" r="3"></circle>',facebook:'<path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"></path>',"fast-forward":'<polygon points="13 19 22 12 13 5 13 19"></polygon><polygon points="2 19 11 12 2 5 2 19"></polygon>',feather:'<path d="M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z"></path><line x1="16" y1="8" x2="2" y2="22"></line><line x1="17.5" y1="15" x2="9" y2="15"></line>',figma:'<path d="M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z"></path><path d="M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z"></path><path d="M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z"></path><path d="M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z"></path><path d="M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z"></path>',"file-minus":'<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="9" y1="15" x2="15" y2="15"></line>',"file-plus":'<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="12" y1="18" x2="12" y2="12"></line><line x1="9" y1="15" x2="15" y2="15"></line>',"file-text":'<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline>',file:'<path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>',film:'<rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18"></rect><line x1="7" y1="2" x2="7" y2="22"></line><line x1="17" y1="2" x2="17" y2="22"></line><line x1="2" y1="12" x2="22" y2="12"></line><line x1="2" y1="7" x2="7" y2="7"></line><line x1="2" y1="17" x2="7" y2="17"></line><line x1="17" y1="17" x2="22" y2="17"></line><line x1="17" y1="7" x2="22" y2="7"></line>',filter:'<polygon points="22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"></polygon>',flag:'<path d="M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"></path><line x1="4" y1="22" x2="4" y2="15"></line>',"folder-minus":'<path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path><line x1="9" y1="14" x2="15" y2="14"></line>',"folder-plus":'<path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path><line x1="12" y1="11" x2="12" y2="17"></line><line x1="9" y1="14" x2="15" y2="14"></line>',folder:'<path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path>',framer:'<path d="M5 16V9h14V2H5l14 14h-7m-7 0l7 7v-7m-7 0h7"></path>',frown:'<circle cx="12" cy="12" r="10"></circle><path d="M16 16s-1.5-2-4-2-4 2-4 2"></path><line x1="9" y1="9" x2="9.01" y2="9"></line><line x1="15" y1="9" x2="15.01" y2="9"></line>',gift:'<polyline points="20 12 20 22 4 22 4 12"></polyline><rect x="2" y="7" width="20" height="5"></rect><line x1="12" y1="22" x2="12" y2="7"></line><path d="M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z"></path><path d="M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z"></path>',"git-branch":'<line x1="6" y1="3" x2="6" y2="15"></line><circle cx="18" cy="6" r="3"></circle><circle cx="6" cy="18" r="3"></circle><path d="M18 9a9 9 0 0 1-9 9"></path>',"git-commit":'<circle cx="12" cy="12" r="4"></circle><line x1="1.05" y1="12" x2="7" y2="12"></line><line x1="17.01" y1="12" x2="22.96" y2="12"></line>',"git-merge":'<circle cx="18" cy="18" r="3"></circle><circle cx="6" cy="6" r="3"></circle><path d="M6 21V9a9 9 0 0 0 9 9"></path>',"git-pull-request":'<circle cx="18" cy="18" r="3"></circle><circle cx="6" cy="6" r="3"></circle><path d="M13 6h3a2 2 0 0 1 2 2v7"></path><line x1="6" y1="9" x2="6" y2="21"></line>',github:'<path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path>',gitlab:'<path d="M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z"></path>',globe:'<circle cx="12" cy="12" r="10"></circle><line x1="2" y1="12" x2="22" y2="12"></line><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"></path>',grid:'<rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect>',"hard-drive":'<line x1="22" y1="12" x2="2" y2="12"></line><path d="M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"></path><line x1="6" y1="16" x2="6.01" y2="16"></line><line x1="10" y1="16" x2="10.01" y2="16"></line>',hash:'<line x1="4" y1="9" x2="20" y2="9"></line><line x1="4" y1="15" x2="20" y2="15"></line><line x1="10" y1="3" x2="8" y2="21"></line><line x1="16" y1="3" x2="14" y2="21"></line>',headphones:'<path d="M3 18v-6a9 9 0 0 1 18 0v6"></path><path d="M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z"></path>',heart:'<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path>',"help-circle":'<circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line>',hexagon:'<path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path>',home:'<path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline>',image:'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline>',inbox:'<polyline points="22 12 16 12 14 15 10 15 8 12 2 12"></polyline><path d="M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"></path>',info:'<circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line>',instagram:'<rect x="2" y="2" width="20" height="20" rx="5" ry="5"></rect><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"></path><line x1="17.5" y1="6.5" x2="17.51" y2="6.5"></line>',italic:'<line x1="19" y1="4" x2="10" y2="4"></line><line x1="14" y1="20" x2="5" y2="20"></line><line x1="15" y1="4" x2="9" y2="20"></line>',key:'<path d="M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4"></path>',layers:'<polygon points="12 2 2 7 12 12 22 7 12 2"></polygon><polyline points="2 17 12 22 22 17"></polyline><polyline points="2 12 12 17 22 12"></polyline>',layout:'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line>',"life-buoy":'<circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="4"></circle><line x1="4.93" y1="4.93" x2="9.17" y2="9.17"></line><line x1="14.83" y1="14.83" x2="19.07" y2="19.07"></line><line x1="14.83" y1="9.17" x2="19.07" y2="4.93"></line><line x1="14.83" y1="9.17" x2="18.36" y2="5.64"></line><line x1="4.93" y1="19.07" x2="9.17" y2="14.83"></line>',"link-2":'<path d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"></path><line x1="8" y1="12" x2="16" y2="12"></line>',link:'<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>',linkedin:'<path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect x="2" y="9" width="4" height="12"></rect><circle cx="4" cy="4" r="2"></circle>',list:'<line x1="8" y1="6" x2="21" y2="6"></line><line x1="8" y1="12" x2="21" y2="12"></line><line x1="8" y1="18" x2="21" y2="18"></line><line x1="3" y1="6" x2="3.01" y2="6"></line><line x1="3" y1="12" x2="3.01" y2="12"></line><line x1="3" y1="18" x2="3.01" y2="18"></line>',loader:'<line x1="12" y1="2" x2="12" y2="6"></line><line x1="12" y1="18" x2="12" y2="22"></line><line x1="4.93" y1="4.93" x2="7.76" y2="7.76"></line><line x1="16.24" y1="16.24" x2="19.07" y2="19.07"></line><line x1="2" y1="12" x2="6" y2="12"></line><line x1="18" y1="12" x2="22" y2="12"></line><line x1="4.93" y1="19.07" x2="7.76" y2="16.24"></line><line x1="16.24" y1="7.76" x2="19.07" y2="4.93"></line>',lock:'<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path>',"log-in":'<path d="M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4"></path><polyline points="10 17 15 12 10 7"></polyline><line x1="15" y1="12" x2="3" y2="12"></line>',"log-out":'<path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"></path><polyline points="16 17 21 12 16 7"></polyline><line x1="21" y1="12" x2="9" y2="12"></line>',mail:'<path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline>',"map-pin":'<path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path><circle cx="12" cy="10" r="3"></circle>',map:'<polygon points="1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6"></polygon><line x1="8" y1="2" x2="8" y2="18"></line><line x1="16" y1="6" x2="16" y2="22"></line>',"maximize-2":'<polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" y1="3" x2="14" y2="10"></line><line x1="3" y1="21" x2="10" y2="14"></line>',maximize:'<path d="M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3"></path>',meh:'<circle cx="12" cy="12" r="10"></circle><line x1="8" y1="15" x2="16" y2="15"></line><line x1="9" y1="9" x2="9.01" y2="9"></line><line x1="15" y1="9" x2="15.01" y2="9"></line>',menu:'<line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>',"message-circle":'<path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"></path>',"message-square":'<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>',"mic-off":'<line x1="1" y1="1" x2="23" y2="23"></line><path d="M9 9v3a3 3 0 0 0 5.12 2.12M15 9.34V4a3 3 0 0 0-5.94-.6"></path><path d="M17 16.95A7 7 0 0 1 5 12v-2m14 0v2a7 7 0 0 1-.11 1.23"></path><line x1="12" y1="19" x2="12" y2="23"></line><line x1="8" y1="23" x2="16" y2="23"></line>',mic:'<path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"></path><path d="M19 10v2a7 7 0 0 1-14 0v-2"></path><line x1="12" y1="19" x2="12" y2="23"></line><line x1="8" y1="23" x2="16" y2="23"></line>',"minimize-2":'<polyline points="4 14 10 14 10 20"></polyline><polyline points="20 10 14 10 14 4"></polyline><line x1="14" y1="10" x2="21" y2="3"></line><line x1="3" y1="21" x2="10" y2="14"></line>',minimize:'<path d="M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3"></path>',"minus-circle":'<circle cx="12" cy="12" r="10"></circle><line x1="8" y1="12" x2="16" y2="12"></line>',"minus-square":'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="8" y1="12" x2="16" y2="12"></line>',minus:'<line x1="5" y1="12" x2="19" y2="12"></line>',monitor:'<rect x="2" y="3" width="20" height="14" rx="2" ry="2"></rect><line x1="8" y1="21" x2="16" y2="21"></line><line x1="12" y1="17" x2="12" y2="21"></line>',moon:'<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>',"more-horizontal":'<circle cx="12" cy="12" r="1"></circle><circle cx="19" cy="12" r="1"></circle><circle cx="5" cy="12" r="1"></circle>',"more-vertical":'<circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="5" r="1"></circle><circle cx="12" cy="19" r="1"></circle>',"mouse-pointer":'<path d="M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z"></path><path d="M13 13l6 6"></path>',move:'<polyline points="5 9 2 12 5 15"></polyline><polyline points="9 5 12 2 15 5"></polyline><polyline points="15 19 12 22 9 19"></polyline><polyline points="19 9 22 12 19 15"></polyline><line x1="2" y1="12" x2="22" y2="12"></line><line x1="12" y1="2" x2="12" y2="22"></line>',music:'<path d="M9 18V5l12-2v13"></path><circle cx="6" cy="18" r="3"></circle><circle cx="18" cy="16" r="3"></circle>',"navigation-2":'<polygon points="12 2 19 21 12 17 5 21 12 2"></polygon>',navigation:'<polygon points="3 11 22 2 13 21 11 13 3 11"></polygon>',octagon:'<polygon points="7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"></polygon>',package:'<line x1="16.5" y1="9.4" x2="7.5" y2="4.21"></line><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line>',paperclip:'<path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"></path>',"pause-circle":'<circle cx="12" cy="12" r="10"></circle><line x1="10" y1="15" x2="10" y2="9"></line><line x1="14" y1="15" x2="14" y2="9"></line>',pause:'<rect x="6" y="4" width="4" height="16"></rect><rect x="14" y="4" width="4" height="16"></rect>',"pen-tool":'<path d="M12 19l7-7 3 3-7 7-3-3z"></path><path d="M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z"></path><path d="M2 2l7.586 7.586"></path><circle cx="11" cy="11" r="2"></circle>',percent:'<line x1="19" y1="5" x2="5" y2="19"></line><circle cx="6.5" cy="6.5" r="2.5"></circle><circle cx="17.5" cy="17.5" r="2.5"></circle>',"phone-call":'<path d="M15.05 5A5 5 0 0 1 19 8.95M15.05 1A9 9 0 0 1 23 8.94m-1 7.98v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path>',"phone-forwarded":'<polyline points="19 1 23 5 19 9"></polyline><line x1="15" y1="5" x2="23" y2="5"></line><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path>',"phone-incoming":'<polyline points="16 2 16 8 22 8"></polyline><line x1="23" y1="1" x2="16" y2="8"></line><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path>',"phone-missed":'<line x1="23" y1="1" x2="17" y2="7"></line><line x1="17" y1="1" x2="23" y2="7"></line><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path>',"phone-off":'<path d="M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91"></path><line x1="23" y1="1" x2="1" y2="23"></line>',"phone-outgoing":'<polyline points="23 7 23 1 17 1"></polyline><line x1="16" y1="8" x2="23" y2="1"></line><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path>',phone:'<path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path>',"pie-chart":'<path d="M21.21 15.89A10 10 0 1 1 8 2.83"></path><path d="M22 12A10 10 0 0 0 12 2v10z"></path>',"play-circle":'<circle cx="12" cy="12" r="10"></circle><polygon points="10 8 16 12 10 16 10 8"></polygon>',play:'<polygon points="5 3 19 12 5 21 5 3"></polygon>',"plus-circle":'<circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="16"></line><line x1="8" y1="12" x2="16" y2="12"></line>',"plus-square":'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="12" y1="8" x2="12" y2="16"></line><line x1="8" y1="12" x2="16" y2="12"></line>',plus:'<line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line>',pocket:'<path d="M4 3h16a2 2 0 0 1 2 2v6a10 10 0 0 1-10 10A10 10 0 0 1 2 11V5a2 2 0 0 1 2-2z"></path><polyline points="8 10 12 14 16 10"></polyline>',power:'<path d="M18.36 6.64a9 9 0 1 1-12.73 0"></path><line x1="12" y1="2" x2="12" y2="12"></line>',printer:'<polyline points="6 9 6 2 18 2 18 9"></polyline><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"></path><rect x="6" y="14" width="12" height="8"></rect>',radio:'<circle cx="12" cy="12" r="2"></circle><path d="M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14"></path>',"refresh-ccw":'<polyline points="1 4 1 10 7 10"></polyline><polyline points="23 20 23 14 17 14"></polyline><path d="M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15"></path>',"refresh-cw":'<polyline points="23 4 23 10 17 10"></polyline><polyline points="1 20 1 14 7 14"></polyline><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"></path>',repeat:'<polyline points="17 1 21 5 17 9"></polyline><path d="M3 11V9a4 4 0 0 1 4-4h14"></path><polyline points="7 23 3 19 7 15"></polyline><path d="M21 13v2a4 4 0 0 1-4 4H3"></path>',rewind:'<polygon points="11 19 2 12 11 5 11 19"></polygon><polygon points="22 19 13 12 22 5 22 19"></polygon>',"rotate-ccw":'<polyline points="1 4 1 10 7 10"></polyline><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"></path>',"rotate-cw":'<polyline points="23 4 23 10 17 10"></polyline><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"></path>',rss:'<path d="M4 11a9 9 0 0 1 9 9"></path><path d="M4 4a16 16 0 0 1 16 16"></path><circle cx="5" cy="19" r="1"></circle>',save:'<path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"></path><polyline points="17 21 17 13 7 13 7 21"></polyline><polyline points="7 3 7 8 15 8"></polyline>',scissors:'<circle cx="6" cy="6" r="3"></circle><circle cx="6" cy="18" r="3"></circle><line x1="20" y1="4" x2="8.12" y2="15.88"></line><line x1="14.47" y1="14.48" x2="20" y2="20"></line><line x1="8.12" y1="8.12" x2="12" y2="12"></line>',search:'<circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>',send:'<line x1="22" y1="2" x2="11" y2="13"></line><polygon points="22 2 15 22 11 13 2 9 22 2"></polygon>',server:'<rect x="2" y="2" width="20" height="8" rx="2" ry="2"></rect><rect x="2" y="14" width="20" height="8" rx="2" ry="2"></rect><line x1="6" y1="6" x2="6.01" y2="6"></line><line x1="6" y1="18" x2="6.01" y2="18"></line>',settings:'<circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path>',"share-2":'<circle cx="18" cy="5" r="3"></circle><circle cx="6" cy="12" r="3"></circle><circle cx="18" cy="19" r="3"></circle><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"></line><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"></line>',share:'<path d="M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"></path><polyline points="16 6 12 2 8 6"></polyline><line x1="12" y1="2" x2="12" y2="15"></line>',"shield-off":'<path d="M19.69 14a6.9 6.9 0 0 0 .31-2V5l-8-3-3.16 1.18"></path><path d="M4.73 4.73L4 5v7c0 6 8 10 8 10a20.29 20.29 0 0 0 5.62-4.38"></path><line x1="1" y1="1" x2="23" y2="23"></line>',shield:'<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path>',"shopping-bag":'<path d="M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"></path><line x1="3" y1="6" x2="21" y2="6"></line><path d="M16 10a4 4 0 0 1-8 0"></path>',"shopping-cart":'<circle cx="9" cy="21" r="1"></circle><circle cx="20" cy="21" r="1"></circle><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path>',shuffle:'<polyline points="16 3 21 3 21 8"></polyline><line x1="4" y1="20" x2="21" y2="3"></line><polyline points="21 16 21 21 16 21"></polyline><line x1="15" y1="15" x2="21" y2="21"></line><line x1="4" y1="4" x2="9" y2="9"></line>',sidebar:'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="3" x2="9" y2="21"></line>',"skip-back":'<polygon points="19 20 9 12 19 4 19 20"></polygon><line x1="5" y1="19" x2="5" y2="5"></line>',"skip-forward":'<polygon points="5 4 15 12 5 20 5 4"></polygon><line x1="19" y1="5" x2="19" y2="19"></line>',slack:'<path d="M14.5 10c-.83 0-1.5-.67-1.5-1.5v-5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5z"></path><path d="M20.5 10H19V8.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"></path><path d="M9.5 14c.83 0 1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5S8 21.33 8 20.5v-5c0-.83.67-1.5 1.5-1.5z"></path><path d="M3.5 14H5v1.5c0 .83-.67 1.5-1.5 1.5S2 16.33 2 15.5 2.67 14 3.5 14z"></path><path d="M14 14.5c0-.83.67-1.5 1.5-1.5h5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-5c-.83 0-1.5-.67-1.5-1.5z"></path><path d="M15.5 19H14v1.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"></path><path d="M10 9.5C10 8.67 9.33 8 8.5 8h-5C2.67 8 2 8.67 2 9.5S2.67 11 3.5 11h5c.83 0 1.5-.67 1.5-1.5z"></path><path d="M8.5 5H10V3.5C10 2.67 9.33 2 8.5 2S7 2.67 7 3.5 7.67 5 8.5 5z"></path>',slash:'<circle cx="12" cy="12" r="10"></circle><line x1="4.93" y1="4.93" x2="19.07" y2="19.07"></line>',sliders:'<line x1="4" y1="21" x2="4" y2="14"></line><line x1="4" y1="10" x2="4" y2="3"></line><line x1="12" y1="21" x2="12" y2="12"></line><line x1="12" y1="8" x2="12" y2="3"></line><line x1="20" y1="21" x2="20" y2="16"></line><line x1="20" y1="12" x2="20" y2="3"></line><line x1="1" y1="14" x2="7" y2="14"></line><line x1="9" y1="8" x2="15" y2="8"></line><line x1="17" y1="16" x2="23" y2="16"></line>',smartphone:'<rect x="5" y="2" width="14" height="20" rx="2" ry="2"></rect><line x1="12" y1="18" x2="12.01" y2="18"></line>',smile:'<circle cx="12" cy="12" r="10"></circle><path d="M8 14s1.5 2 4 2 4-2 4-2"></path><line x1="9" y1="9" x2="9.01" y2="9"></line><line x1="15" y1="9" x2="15.01" y2="9"></line>',speaker:'<rect x="4" y="2" width="16" height="20" rx="2" ry="2"></rect><circle cx="12" cy="14" r="4"></circle><line x1="12" y1="6" x2="12.01" y2="6"></line>',square:'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>',star:'<polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>',"stop-circle":'<circle cx="12" cy="12" r="10"></circle><rect x="9" y="9" width="6" height="6"></rect>',sun:'<circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>',sunrise:'<path d="M17 18a5 5 0 0 0-10 0"></path><line x1="12" y1="2" x2="12" y2="9"></line><line x1="4.22" y1="10.22" x2="5.64" y2="11.64"></line><line x1="1" y1="18" x2="3" y2="18"></line><line x1="21" y1="18" x2="23" y2="18"></line><line x1="18.36" y1="11.64" x2="19.78" y2="10.22"></line><line x1="23" y1="22" x2="1" y2="22"></line><polyline points="8 6 12 2 16 6"></polyline>',sunset:'<path d="M17 18a5 5 0 0 0-10 0"></path><line x1="12" y1="9" x2="12" y2="2"></line><line x1="4.22" y1="10.22" x2="5.64" y2="11.64"></line><line x1="1" y1="18" x2="3" y2="18"></line><line x1="21" y1="18" x2="23" y2="18"></line><line x1="18.36" y1="11.64" x2="19.78" y2="10.22"></line><line x1="23" y1="22" x2="1" y2="22"></line><polyline points="16 5 12 9 8 5"></polyline>',table:'<path d="M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18"></path>',tablet:'<rect x="4" y="2" width="16" height="20" rx="2" ry="2"></rect><line x1="12" y1="18" x2="12.01" y2="18"></line>',tag:'<path d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"></path><line x1="7" y1="7" x2="7.01" y2="7"></line>',target:'<circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="6"></circle><circle cx="12" cy="12" r="2"></circle>',terminal:'<polyline points="4 17 10 11 4 5"></polyline><line x1="12" y1="19" x2="20" y2="19"></line>',thermometer:'<path d="M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z"></path>',"thumbs-down":'<path d="M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17"></path>',"thumbs-up":'<path d="M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3"></path>',"toggle-left":'<rect x="1" y="5" width="22" height="14" rx="7" ry="7"></rect><circle cx="8" cy="12" r="3"></circle>',"toggle-right":'<rect x="1" y="5" width="22" height="14" rx="7" ry="7"></rect><circle cx="16" cy="12" r="3"></circle>',tool:'<path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"></path>',"trash-2":'<polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path><line x1="10" y1="11" x2="10" y2="17"></line><line x1="14" y1="11" x2="14" y2="17"></line>',trash:'<polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path>',trello:'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><rect x="7" y="7" width="3" height="9"></rect><rect x="14" y="7" width="3" height="5"></rect>',"trending-down":'<polyline points="23 18 13.5 8.5 8.5 13.5 1 6"></polyline><polyline points="17 18 23 18 23 12"></polyline>',"trending-up":'<polyline points="23 6 13.5 15.5 8.5 10.5 1 18"></polyline><polyline points="17 6 23 6 23 12"></polyline>',triangle:'<path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path>',truck:'<rect x="1" y="3" width="15" height="13"></rect><polygon points="16 8 20 8 23 11 23 16 16 16 16 8"></polygon><circle cx="5.5" cy="18.5" r="2.5"></circle><circle cx="18.5" cy="18.5" r="2.5"></circle>',tv:'<rect x="2" y="7" width="20" height="15" rx="2" ry="2"></rect><polyline points="17 2 12 7 7 2"></polyline>',twitch:'<path d="M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7"></path>',twitter:'<path d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z"></path>',type:'<polyline points="4 7 4 4 20 4 20 7"></polyline><line x1="9" y1="20" x2="15" y2="20"></line><line x1="12" y1="4" x2="12" y2="20"></line>',umbrella:'<path d="M23 12a11.05 11.05 0 0 0-22 0zm-5 7a3 3 0 0 1-6 0v-7"></path>',underline:'<path d="M6 3v7a6 6 0 0 0 6 6 6 6 0 0 0 6-6V3"></path><line x1="4" y1="21" x2="20" y2="21"></line>',unlock:'<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 9.9-1"></path>',"upload-cloud":'<polyline points="16 16 12 12 8 16"></polyline><line x1="12" y1="12" x2="12" y2="21"></line><path d="M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3"></path><polyline points="16 16 12 12 8 16"></polyline>',upload:'<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" y1="3" x2="12" y2="15"></line>',"user-check":'<path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="8.5" cy="7" r="4"></circle><polyline points="17 11 19 13 23 9"></polyline>',"user-minus":'<path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="8.5" cy="7" r="4"></circle><line x1="23" y1="11" x2="17" y2="11"></line>',"user-plus":'<path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="8.5" cy="7" r="4"></circle><line x1="20" y1="8" x2="20" y2="14"></line><line x1="23" y1="11" x2="17" y2="11"></line>',"user-x":'<path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="8.5" cy="7" r="4"></circle><line x1="18" y1="8" x2="23" y2="13"></line><line x1="23" y1="8" x2="18" y2="13"></line>',user:'<path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle>',users:'<path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path>',"video-off":'<path d="M16 16v1a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2m5.66 0H14a2 2 0 0 1 2 2v3.34l1 1L23 7v10"></path><line x1="1" y1="1" x2="23" y2="23"></line>',video:'<polygon points="23 7 16 12 23 17 23 7"></polygon><rect x="1" y="5" width="15" height="14" rx="2" ry="2"></rect>',voicemail:'<circle cx="5.5" cy="11.5" r="4.5"></circle><circle cx="18.5" cy="11.5" r="4.5"></circle><line x1="5.5" y1="16" x2="18.5" y2="16"></line>',"volume-1":'<polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><path d="M15.54 8.46a5 5 0 0 1 0 7.07"></path>',"volume-2":'<polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><path d="M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07"></path>',"volume-x":'<polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><line x1="23" y1="9" x2="17" y2="15"></line><line x1="17" y1="9" x2="23" y2="15"></line>',volume:'<polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon>',watch:'<circle cx="12" cy="12" r="7"></circle><polyline points="12 9 12 12 13.5 13.5"></polyline><path d="M16.51 17.35l-.35 3.83a2 2 0 0 1-2 1.82H9.83a2 2 0 0 1-2-1.82l-.35-3.83m.01-10.7l.35-3.83A2 2 0 0 1 9.83 1h4.35a2 2 0 0 1 2 1.82l.35 3.83"></path>',"wifi-off":'<line x1="1" y1="1" x2="23" y2="23"></line><path d="M16.72 11.06A10.94 10.94 0 0 1 19 12.55"></path><path d="M5 12.55a10.94 10.94 0 0 1 5.17-2.39"></path><path d="M10.71 5.05A16 16 0 0 1 22.58 9"></path><path d="M1.42 9a15.91 15.91 0 0 1 4.7-2.88"></path><path d="M8.53 16.11a6 6 0 0 1 6.95 0"></path><line x1="12" y1="20" x2="12.01" y2="20"></line>',wifi:'<path d="M5 12.55a11 11 0 0 1 14.08 0"></path><path d="M1.42 9a16 16 0 0 1 21.16 0"></path><path d="M8.53 16.11a6 6 0 0 1 6.95 0"></path><line x1="12" y1="20" x2="12.01" y2="20"></line>',wind:'<path d="M9.59 4.59A2 2 0 1 1 11 8H2m10.59 11.41A2 2 0 1 0 14 16H2m15.73-8.27A2.5 2.5 0 1 1 19.5 12H2"></path>',"x-circle":'<circle cx="12" cy="12" r="10"></circle><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line>',"x-octagon":'<polygon points="7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"></polygon><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line>',"x-square":'<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="9" x2="15" y2="15"></line><line x1="15" y1="9" x2="9" y2="15"></line>',x:'<line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line>',youtube:'<path d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"></path><polygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"></polygon>',"zap-off":'<polyline points="12.41 6.75 13 2 10.57 4.92"></polyline><polyline points="18.57 12.91 21 10 15.66 10"></polyline><polyline points="8 8 3 14 12 14 11 22 16 16"></polyline><line x1="1" y1="1" x2="23" y2="23"></line>',zap:'<polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon>',"zoom-in":'<circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="11" y1="8" x2="11" y2="14"></line><line x1="8" y1="11" x2="14" y2="11"></line>',"zoom-out":'<circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="8" y1="11" x2="14" y2="11"></line>'}},"./node_modules/classnames/dedupe.js":function(e,t,r){var n,i;(function(){"use strict";var a=function(){function s(){}s.prototype=Object.create(null);function o(m,v){for(var y=v.length,b=0;b<y;++b)h(m,v[b])}var c={}.hasOwnProperty;function l(m,v){m[v]=!0}function u(m,v){for(var y in v)c.call(v,y)&&(m[y]=!!v[y])}var f=/\s+/;function d(m,v){for(var y=v.split(f),b=y.length,x=0;x<b;++x)m[y[x]]=!0}function h(m,v){if(v){var y=typeof v;y==="string"?d(m,v):Array.isArray(v)?o(m,v):y==="object"?u(m,v):y==="number"&&l(m,v)}}function p(){for(var m=arguments.length,v=Array(m),y=0;y<m;y++)v[y]=arguments[y];var b=new s;o(b,v);var x=[];for(var E in b)b[E]&&x.push(E);return x.join(" ")}return p}();typeof e!="undefined"&&e.exports?e.exports=a:(n=[],i=function(){return a}.apply(t,n),i!==void 0&&(e.exports=i))})()},"./node_modules/core-js/es/array/from.js":function(e,t,r){r("./node_modules/core-js/modules/es.string.iterator.js"),r("./node_modules/core-js/modules/es.array.from.js");var n=r("./node_modules/core-js/internals/path.js");e.exports=n.Array.from},"./node_modules/core-js/internals/a-function.js":function(e,t){e.exports=function(r){if(typeof r!="function")throw TypeError(String(r)+" is not a function");return r}},"./node_modules/core-js/internals/an-object.js":function(e,t,r){var n=r("./node_modules/core-js/internals/is-object.js");e.exports=function(i){if(!n(i))throw TypeError(String(i)+" is not an object");return i}},"./node_modules/core-js/internals/array-from.js":function(e,t,r){"use strict";var n=r("./node_modules/core-js/internals/bind-context.js"),i=r("./node_modules/core-js/internals/to-object.js"),a=r("./node_modules/core-js/internals/call-with-safe-iteration-closing.js"),s=r("./node_modules/core-js/internals/is-array-iterator-method.js"),o=r("./node_modules/core-js/internals/to-length.js"),c=r("./node_modules/core-js/internals/create-property.js"),l=r("./node_modules/core-js/internals/get-iterator-method.js");e.exports=function(f){var d=i(f),h=typeof this=="function"?this:Array,p=arguments.length,m=p>1?arguments[1]:void 0,v=m!==void 0,y=0,b=l(d),x,E,_,k;if(v&&(m=n(m,p>2?arguments[2]:void 0,2)),b!=null&&!(h==Array&&s(b)))for(k=b.call(d),E=new h;!(_=k.next()).done;y++)c(E,y,v?a(k,m,[_.value,y],!0):_.value);else for(x=o(d.length),E=new h(x);x>y;y++)c(E,y,v?m(d[y],y):d[y]);return E.length=y,E}},"./node_modules/core-js/internals/array-includes.js":function(e,t,r){var n=r("./node_modules/core-js/internals/to-indexed-object.js"),i=r("./node_modules/core-js/internals/to-length.js"),a=r("./node_modules/core-js/internals/to-absolute-index.js");e.exports=function(s){return function(o,c,l){var u=n(o),f=i(u.length),d=a(l,f),h;if(s&&c!=c){for(;f>d;)if(h=u[d++],h!=h)return!0}else for(;f>d;d++)if((s||d in u)&&u[d]===c)return s||d||0;return!s&&-1}}},"./node_modules/core-js/internals/bind-context.js":function(e,t,r){var n=r("./node_modules/core-js/internals/a-function.js");e.exports=function(i,a,s){if(n(i),a===void 0)return i;switch(s){case 0:return function(){return i.call(a)};case 1:return function(o){return i.call(a,o)};case 2:return function(o,c){return i.call(a,o,c)};case 3:return function(o,c,l){return i.call(a,o,c,l)}}return function(){return i.apply(a,arguments)}}},"./node_modules/core-js/internals/call-with-safe-iteration-closing.js":function(e,t,r){var n=r("./node_modules/core-js/internals/an-object.js");e.exports=function(i,a,s,o){try{return o?a(n(s)[0],s[1]):a(s)}catch(l){var c=i.return;throw c!==void 0&&n(c.call(i)),l}}},"./node_modules/core-js/internals/check-correctness-of-iteration.js":function(e,t,r){var n=r("./node_modules/core-js/internals/well-known-symbol.js"),i=n("iterator"),a=!1;try{var s=0,o={next:function(){return{done:!!s++}},return:function(){a=!0}};o[i]=function(){return this},Array.from(o,function(){throw 2})}catch(c){}e.exports=function(c,l){if(!l&&!a)return!1;var u=!1;try{var f={};f[i]=function(){return{next:function(){return{done:u=!0}}}},c(f)}catch(d){}return u}},"./node_modules/core-js/internals/classof-raw.js":function(e,t){var r={}.toString;e.exports=function(n){return r.call(n).slice(8,-1)}},"./node_modules/core-js/internals/classof.js":function(e,t,r){var n=r("./node_modules/core-js/internals/classof-raw.js"),i=r("./node_modules/core-js/internals/well-known-symbol.js"),a=i("toStringTag"),s=n(function(){return arguments}())=="Arguments",o=function(c,l){try{return c[l]}catch(u){}};e.exports=function(c){var l,u,f;return c===void 0?"Undefined":c===null?"Null":typeof(u=o(l=Object(c),a))=="string"?u:s?n(l):(f=n(l))=="Object"&&typeof l.callee=="function"?"Arguments":f}},"./node_modules/core-js/internals/copy-constructor-properties.js":function(e,t,r){var n=r("./node_modules/core-js/internals/has.js"),i=r("./node_modules/core-js/internals/own-keys.js"),a=r("./node_modules/core-js/internals/object-get-own-property-descriptor.js"),s=r("./node_modules/core-js/internals/object-define-property.js");e.exports=function(o,c){for(var l=i(c),u=s.f,f=a.f,d=0;d<l.length;d++){var h=l[d];n(o,h)||u(o,h,f(c,h))}}},"./node_modules/core-js/internals/correct-prototype-getter.js":function(e,t,r){var n=r("./node_modules/core-js/internals/fails.js");e.exports=!n(function(){function i(){}return i.prototype.constructor=null,Object.getPrototypeOf(new i)!==i.prototype})},"./node_modules/core-js/internals/create-iterator-constructor.js":function(e,t,r){"use strict";var n=r("./node_modules/core-js/internals/iterators-core.js").IteratorPrototype,i=r("./node_modules/core-js/internals/object-create.js"),a=r("./node_modules/core-js/internals/create-property-descriptor.js"),s=r("./node_modules/core-js/internals/set-to-string-tag.js"),o=r("./node_modules/core-js/internals/iterators.js"),c=function(){return this};e.exports=function(l,u,f){var d=u+" Iterator";return l.prototype=i(n,{next:a(1,f)}),s(l,d,!1,!0),o[d]=c,l}},"./node_modules/core-js/internals/create-property-descriptor.js":function(e,t){e.exports=function(r,n){return{enumerable:!(r&1),configurable:!(r&2),writable:!(r&4),value:n}}},"./node_modules/core-js/internals/create-property.js":function(e,t,r){"use strict";var n=r("./node_modules/core-js/internals/to-primitive.js"),i=r("./node_modules/core-js/internals/object-define-property.js"),a=r("./node_modules/core-js/internals/create-property-descriptor.js");e.exports=function(s,o,c){var l=n(o);l in s?i.f(s,l,a(0,c)):s[l]=c}},"./node_modules/core-js/internals/define-iterator.js":function(e,t,r){"use strict";var n=r("./node_modules/core-js/internals/export.js"),i=r("./node_modules/core-js/internals/create-iterator-constructor.js"),a=r("./node_modules/core-js/internals/object-get-prototype-of.js"),s=r("./node_modules/core-js/internals/object-set-prototype-of.js"),o=r("./node_modules/core-js/internals/set-to-string-tag.js"),c=r("./node_modules/core-js/internals/hide.js"),l=r("./node_modules/core-js/internals/redefine.js"),u=r("./node_modules/core-js/internals/well-known-symbol.js"),f=r("./node_modules/core-js/internals/is-pure.js"),d=r("./node_modules/core-js/internals/iterators.js"),h=r("./node_modules/core-js/internals/iterators-core.js"),p=h.IteratorPrototype,m=h.BUGGY_SAFARI_ITERATORS,v=u("iterator"),y="keys",b="values",x="entries",E=function(){return this};e.exports=function(_,k,w,A,S,T,P){i(w,k,A);var O=function(G){if(G===S&&ee)return ee;if(!m&&G in Q)return Q[G];switch(G){case y:return function(){return new w(this,G)};case b:return function(){return new w(this,G)};case x:return function(){return new w(this,G)}}return function(){return new w(this)}},j=k+" Iterator",D=!1,Q=_.prototype,de=Q[v]||Q["@@iterator"]||S&&Q[S],ee=!m&&de||O(S),J=k=="Array"&&Q.entries||de,Pe,me,F;if(J&&(Pe=a(J.call(new _)),p!==Object.prototype&&Pe.next&&(!f&&a(Pe)!==p&&(s?s(Pe,p):typeof Pe[v]!="function"&&c(Pe,v,E)),o(Pe,j,!0,!0),f&&(d[j]=E))),S==b&&de&&de.name!==b&&(D=!0,ee=function(){return de.call(this)}),(!f||P)&&Q[v]!==ee&&c(Q,v,ee),d[k]=ee,S)if(me={values:O(b),keys:T?ee:O(y),entries:O(x)},P)for(F in me)(m||D||!(F in Q))&&l(Q,F,me[F]);else n({target:k,proto:!0,forced:m||D},me);return me}},"./node_modules/core-js/internals/descriptors.js":function(e,t,r){var n=r("./node_modules/core-js/internals/fails.js");e.exports=!n(function(){return Object.defineProperty({},"a",{get:function(){return 7}}).a!=7})},"./node_modules/core-js/internals/document-create-element.js":function(e,t,r){var n=r("./node_modules/core-js/internals/global.js"),i=r("./node_modules/core-js/internals/is-object.js"),a=n.document,s=i(a)&&i(a.createElement);e.exports=function(o){return s?a.createElement(o):{}}},"./node_modules/core-js/internals/enum-bug-keys.js":function(e,t){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},"./node_modules/core-js/internals/export.js":function(e,t,r){var n=r("./node_modules/core-js/internals/global.js"),i=r("./node_modules/core-js/internals/object-get-own-property-descriptor.js").f,a=r("./node_modules/core-js/internals/hide.js"),s=r("./node_modules/core-js/internals/redefine.js"),o=r("./node_modules/core-js/internals/set-global.js"),c=r("./node_modules/core-js/internals/copy-constructor-properties.js"),l=r("./node_modules/core-js/internals/is-forced.js");e.exports=function(u,f){var d=u.target,h=u.global,p=u.stat,m,v,y,b,x,E;if(h?v=n:p?v=n[d]||o(d,{}):v=(n[d]||{}).prototype,v)for(y in f){if(x=f[y],u.noTargetGet?(E=i(v,y),b=E&&E.value):b=v[y],m=l(h?y:d+(p?".":"#")+y,u.forced),!m&&b!==void 0){if(typeof x==typeof b)continue;c(x,b)}(u.sham||b&&b.sham)&&a(x,"sham",!0),s(v,y,x,u)}}},"./node_modules/core-js/internals/fails.js":function(e,t){e.exports=function(r){try{return!!r()}catch(n){return!0}}},"./node_modules/core-js/internals/function-to-string.js":function(e,t,r){var n=r("./node_modules/core-js/internals/shared.js");e.exports=n("native-function-to-string",Function.toString)},"./node_modules/core-js/internals/get-iterator-method.js":function(e,t,r){var n=r("./node_modules/core-js/internals/classof.js"),i=r("./node_modules/core-js/internals/iterators.js"),a=r("./node_modules/core-js/internals/well-known-symbol.js"),s=a("iterator");e.exports=function(o){if(o!=null)return o[s]||o["@@iterator"]||i[n(o)]}},"./node_modules/core-js/internals/global.js":function(e,t,r){(function(n){var i="object",a=function(s){return s&&s.Math==Math&&s};e.exports=a(typeof globalThis==i&&globalThis)||a(typeof window==i&&window)||a(typeof self==i&&self)||a(typeof n==i&&n)||Function("return this")()}).call(this,r("./node_modules/webpack/buildin/global.js"))},"./node_modules/core-js/internals/has.js":function(e,t){var r={}.hasOwnProperty;e.exports=function(n,i){return r.call(n,i)}},"./node_modules/core-js/internals/hidden-keys.js":function(e,t){e.exports={}},"./node_modules/core-js/internals/hide.js":function(e,t,r){var n=r("./node_modules/core-js/internals/descriptors.js"),i=r("./node_modules/core-js/internals/object-define-property.js"),a=r("./node_modules/core-js/internals/create-property-descriptor.js");e.exports=n?function(s,o,c){return i.f(s,o,a(1,c))}:function(s,o,c){return s[o]=c,s}},"./node_modules/core-js/internals/html.js":function(e,t,r){var n=r("./node_modules/core-js/internals/global.js"),i=n.document;e.exports=i&&i.documentElement},"./node_modules/core-js/internals/ie8-dom-define.js":function(e,t,r){var n=r("./node_modules/core-js/internals/descriptors.js"),i=r("./node_modules/core-js/internals/fails.js"),a=r("./node_modules/core-js/internals/document-create-element.js");e.exports=!n&&!i(function(){return Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a!=7})},"./node_modules/core-js/internals/indexed-object.js":function(e,t,r){var n=r("./node_modules/core-js/internals/fails.js"),i=r("./node_modules/core-js/internals/classof-raw.js"),a="".split;e.exports=n(function(){return!Object("z").propertyIsEnumerable(0)})?function(s){return i(s)=="String"?a.call(s,""):Object(s)}:Object},"./node_modules/core-js/internals/internal-state.js":function(e,t,r){var n=r("./node_modules/core-js/internals/native-weak-map.js"),i=r("./node_modules/core-js/internals/global.js"),a=r("./node_modules/core-js/internals/is-object.js"),s=r("./node_modules/core-js/internals/hide.js"),o=r("./node_modules/core-js/internals/has.js"),c=r("./node_modules/core-js/internals/shared-key.js"),l=r("./node_modules/core-js/internals/hidden-keys.js"),u=i.WeakMap,f,d,h,p=function(_){return h(_)?d(_):f(_,{})},m=function(_){return function(k){var w;if(!a(k)||(w=d(k)).type!==_)throw TypeError("Incompatible receiver, "+_+" required");return w}};if(n){var v=new u,y=v.get,b=v.has,x=v.set;f=function(_,k){return x.call(v,_,k),k},d=function(_){return y.call(v,_)||{}},h=function(_){return b.call(v,_)}}else{var E=c("state");l[E]=!0,f=function(_,k){return s(_,E,k),k},d=function(_){return o(_,E)?_[E]:{}},h=function(_){return o(_,E)}}e.exports={set:f,get:d,has:h,enforce:p,getterFor:m}},"./node_modules/core-js/internals/is-array-iterator-method.js":function(e,t,r){var n=r("./node_modules/core-js/internals/well-known-symbol.js"),i=r("./node_modules/core-js/internals/iterators.js"),a=n("iterator"),s=Array.prototype;e.exports=function(o){return o!==void 0&&(i.Array===o||s[a]===o)}},"./node_modules/core-js/internals/is-forced.js":function(e,t,r){var n=r("./node_modules/core-js/internals/fails.js"),i=/#|\.prototype\./,a=function(u,f){var d=o[s(u)];return d==l?!0:d==c?!1:typeof f=="function"?n(f):!!f},s=a.normalize=function(u){return String(u).replace(i,".").toLowerCase()},o=a.data={},c=a.NATIVE="N",l=a.POLYFILL="P";e.exports=a},"./node_modules/core-js/internals/is-object.js":function(e,t){e.exports=function(r){return typeof r=="object"?r!==null:typeof r=="function"}},"./node_modules/core-js/internals/is-pure.js":function(e,t){e.exports=!1},"./node_modules/core-js/internals/iterators-core.js":function(e,t,r){"use strict";var n=r("./node_modules/core-js/internals/object-get-prototype-of.js"),i=r("./node_modules/core-js/internals/hide.js"),a=r("./node_modules/core-js/internals/has.js"),s=r("./node_modules/core-js/internals/well-known-symbol.js"),o=r("./node_modules/core-js/internals/is-pure.js"),c=s("iterator"),l=!1,u=function(){return this},f,d,h;[].keys&&(h=[].keys(),"next"in h?(d=n(n(h)),d!==Object.prototype&&(f=d)):l=!0),f==null&&(f={}),!o&&!a(f,c)&&i(f,c,u),e.exports={IteratorPrototype:f,BUGGY_SAFARI_ITERATORS:l}},"./node_modules/core-js/internals/iterators.js":function(e,t){e.exports={}},"./node_modules/core-js/internals/native-symbol.js":function(e,t,r){var n=r("./node_modules/core-js/internals/fails.js");e.exports=!!Object.getOwnPropertySymbols&&!n(function(){return!String(Symbol())})},"./node_modules/core-js/internals/native-weak-map.js":function(e,t,r){var n=r("./node_modules/core-js/internals/global.js"),i=r("./node_modules/core-js/internals/function-to-string.js"),a=n.WeakMap;e.exports=typeof a=="function"&&/native code/.test(i.call(a))},"./node_modules/core-js/internals/object-create.js":function(e,t,r){var n=r("./node_modules/core-js/internals/an-object.js"),i=r("./node_modules/core-js/internals/object-define-properties.js"),a=r("./node_modules/core-js/internals/enum-bug-keys.js"),s=r("./node_modules/core-js/internals/hidden-keys.js"),o=r("./node_modules/core-js/internals/html.js"),c=r("./node_modules/core-js/internals/document-create-element.js"),l=r("./node_modules/core-js/internals/shared-key.js"),u=l("IE_PROTO"),f="prototype",d=function(){},h=function(){var p=c("iframe"),m=a.length,v="<",y="script",b=">",x="java"+y+":",E;for(p.style.display="none",o.appendChild(p),p.src=String(x),E=p.contentWindow.document,E.open(),E.write(v+y+b+"document.F=Object"+v+"/"+y+b),E.close(),h=E.F;m--;)delete h[f][a[m]];return h()};e.exports=Object.create||function(m,v){var y;return m!==null?(d[f]=n(m),y=new d,d[f]=null,y[u]=m):y=h(),v===void 0?y:i(y,v)},s[u]=!0},"./node_modules/core-js/internals/object-define-properties.js":function(e,t,r){var n=r("./node_modules/core-js/internals/descriptors.js"),i=r("./node_modules/core-js/internals/object-define-property.js"),a=r("./node_modules/core-js/internals/an-object.js"),s=r("./node_modules/core-js/internals/object-keys.js");e.exports=n?Object.defineProperties:function(c,l){a(c);for(var u=s(l),f=u.length,d=0,h;f>d;)i.f(c,h=u[d++],l[h]);return c}},"./node_modules/core-js/internals/object-define-property.js":function(e,t,r){var n=r("./node_modules/core-js/internals/descriptors.js"),i=r("./node_modules/core-js/internals/ie8-dom-define.js"),a=r("./node_modules/core-js/internals/an-object.js"),s=r("./node_modules/core-js/internals/to-primitive.js"),o=Object.defineProperty;t.f=n?o:function(l,u,f){if(a(l),u=s(u,!0),a(f),i)try{return o(l,u,f)}catch(d){}if("get"in f||"set"in f)throw TypeError("Accessors not supported");return"value"in f&&(l[u]=f.value),l}},"./node_modules/core-js/internals/object-get-own-property-descriptor.js":function(e,t,r){var n=r("./node_modules/core-js/internals/descriptors.js"),i=r("./node_modules/core-js/internals/object-property-is-enumerable.js"),a=r("./node_modules/core-js/internals/create-property-descriptor.js"),s=r("./node_modules/core-js/internals/to-indexed-object.js"),o=r("./node_modules/core-js/internals/to-primitive.js"),c=r("./node_modules/core-js/internals/has.js"),l=r("./node_modules/core-js/internals/ie8-dom-define.js"),u=Object.getOwnPropertyDescriptor;t.f=n?u:function(d,h){if(d=s(d),h=o(h,!0),l)try{return u(d,h)}catch(p){}if(c(d,h))return a(!i.f.call(d,h),d[h])}},"./node_modules/core-js/internals/object-get-own-property-names.js":function(e,t,r){var n=r("./node_modules/core-js/internals/object-keys-internal.js"),i=r("./node_modules/core-js/internals/enum-bug-keys.js"),a=i.concat("length","prototype");t.f=Object.getOwnPropertyNames||function(o){return n(o,a)}},"./node_modules/core-js/internals/object-get-own-property-symbols.js":function(e,t){t.f=Object.getOwnPropertySymbols},"./node_modules/core-js/internals/object-get-prototype-of.js":function(e,t,r){var n=r("./node_modules/core-js/internals/has.js"),i=r("./node_modules/core-js/internals/to-object.js"),a=r("./node_modules/core-js/internals/shared-key.js"),s=r("./node_modules/core-js/internals/correct-prototype-getter.js"),o=a("IE_PROTO"),c=Object.prototype;e.exports=s?Object.getPrototypeOf:function(l){return l=i(l),n(l,o)?l[o]:typeof l.constructor=="function"&&l instanceof l.constructor?l.constructor.prototype:l instanceof Object?c:null}},"./node_modules/core-js/internals/object-keys-internal.js":function(e,t,r){var n=r("./node_modules/core-js/internals/has.js"),i=r("./node_modules/core-js/internals/to-indexed-object.js"),a=r("./node_modules/core-js/internals/array-includes.js"),s=r("./node_modules/core-js/internals/hidden-keys.js"),o=a(!1);e.exports=function(c,l){var u=i(c),f=0,d=[],h;for(h in u)!n(s,h)&&n(u,h)&&d.push(h);for(;l.length>f;)n(u,h=l[f++])&&(~o(d,h)||d.push(h));return d}},"./node_modules/core-js/internals/object-keys.js":function(e,t,r){var n=r("./node_modules/core-js/internals/object-keys-internal.js"),i=r("./node_modules/core-js/internals/enum-bug-keys.js");e.exports=Object.keys||function(s){return n(s,i)}},"./node_modules/core-js/internals/object-property-is-enumerable.js":function(e,t,r){"use strict";var n={}.propertyIsEnumerable,i=Object.getOwnPropertyDescriptor,a=i&&!n.call({1:2},1);t.f=a?function(o){var c=i(this,o);return!!c&&c.enumerable}:n},"./node_modules/core-js/internals/object-set-prototype-of.js":function(e,t,r){var n=r("./node_modules/core-js/internals/validate-set-prototype-of-arguments.js");e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var i=!1,a={},s;try{s=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set,s.call(a,[]),i=a instanceof Array}catch(o){}return function(c,l){return n(c,l),i?s.call(c,l):c.__proto__=l,c}}():void 0)},"./node_modules/core-js/internals/own-keys.js":function(e,t,r){var n=r("./node_modules/core-js/internals/global.js"),i=r("./node_modules/core-js/internals/object-get-own-property-names.js"),a=r("./node_modules/core-js/internals/object-get-own-property-symbols.js"),s=r("./node_modules/core-js/internals/an-object.js"),o=n.Reflect;e.exports=o&&o.ownKeys||function(l){var u=i.f(s(l)),f=a.f;return f?u.concat(f(l)):u}},"./node_modules/core-js/internals/path.js":function(e,t,r){e.exports=r("./node_modules/core-js/internals/global.js")},"./node_modules/core-js/internals/redefine.js":function(e,t,r){var n=r("./node_modules/core-js/internals/global.js"),i=r("./node_modules/core-js/internals/shared.js"),a=r("./node_modules/core-js/internals/hide.js"),s=r("./node_modules/core-js/internals/has.js"),o=r("./node_modules/core-js/internals/set-global.js"),c=r("./node_modules/core-js/internals/function-to-string.js"),l=r("./node_modules/core-js/internals/internal-state.js"),u=l.get,f=l.enforce,d=String(c).split("toString");i("inspectSource",function(h){return c.call(h)}),(e.exports=function(h,p,m,v){var y=v?!!v.unsafe:!1,b=v?!!v.enumerable:!1,x=v?!!v.noTargetGet:!1;if(typeof m=="function"&&(typeof p=="string"&&!s(m,"name")&&a(m,"name",p),f(m).source=d.join(typeof p=="string"?p:"")),h===n){b?h[p]=m:o(p,m);return}else y?!x&&h[p]&&(b=!0):delete h[p];b?h[p]=m:a(h,p,m)})(Function.prototype,"toString",function(){return typeof this=="function"&&u(this).source||c.call(this)})},"./node_modules/core-js/internals/require-object-coercible.js":function(e,t){e.exports=function(r){if(r==null)throw TypeError("Can't call method on "+r);return r}},"./node_modules/core-js/internals/set-global.js":function(e,t,r){var n=r("./node_modules/core-js/internals/global.js"),i=r("./node_modules/core-js/internals/hide.js");e.exports=function(a,s){try{i(n,a,s)}catch(o){n[a]=s}return s}},"./node_modules/core-js/internals/set-to-string-tag.js":function(e,t,r){var n=r("./node_modules/core-js/internals/object-define-property.js").f,i=r("./node_modules/core-js/internals/has.js"),a=r("./node_modules/core-js/internals/well-known-symbol.js"),s=a("toStringTag");e.exports=function(o,c,l){o&&!i(o=l?o:o.prototype,s)&&n(o,s,{configurable:!0,value:c})}},"./node_modules/core-js/internals/shared-key.js":function(e,t,r){var n=r("./node_modules/core-js/internals/shared.js"),i=r("./node_modules/core-js/internals/uid.js"),a=n("keys");e.exports=function(s){return a[s]||(a[s]=i(s))}},"./node_modules/core-js/internals/shared.js":function(e,t,r){var n=r("./node_modules/core-js/internals/global.js"),i=r("./node_modules/core-js/internals/set-global.js"),a=r("./node_modules/core-js/internals/is-pure.js"),s="__core-js_shared__",o=n[s]||i(s,{});(e.exports=function(c,l){return o[c]||(o[c]=l!==void 0?l:{})})("versions",[]).push({version:"3.1.3",mode:a?"pure":"global",copyright:"\xA9 2019 Denis Pushkarev (zloirock.ru)"})},"./node_modules/core-js/internals/string-at.js":function(e,t,r){var n=r("./node_modules/core-js/internals/to-integer.js"),i=r("./node_modules/core-js/internals/require-object-coercible.js");e.exports=function(a,s,o){var c=String(i(a)),l=n(s),u=c.length,f,d;return l<0||l>=u?o?"":void 0:(f=c.charCodeAt(l),f<55296||f>56319||l+1===u||(d=c.charCodeAt(l+1))<56320||d>57343?o?c.charAt(l):f:o?c.slice(l,l+2):(f-55296<<10)+(d-56320)+65536)}},"./node_modules/core-js/internals/to-absolute-index.js":function(e,t,r){var n=r("./node_modules/core-js/internals/to-integer.js"),i=Math.max,a=Math.min;e.exports=function(s,o){var c=n(s);return c<0?i(c+o,0):a(c,o)}},"./node_modules/core-js/internals/to-indexed-object.js":function(e,t,r){var n=r("./node_modules/core-js/internals/indexed-object.js"),i=r("./node_modules/core-js/internals/require-object-coercible.js");e.exports=function(a){return n(i(a))}},"./node_modules/core-js/internals/to-integer.js":function(e,t){var r=Math.ceil,n=Math.floor;e.exports=function(i){return isNaN(i=+i)?0:(i>0?n:r)(i)}},"./node_modules/core-js/internals/to-length.js":function(e,t,r){var n=r("./node_modules/core-js/internals/to-integer.js"),i=Math.min;e.exports=function(a){return a>0?i(n(a),9007199254740991):0}},"./node_modules/core-js/internals/to-object.js":function(e,t,r){var n=r("./node_modules/core-js/internals/require-object-coercible.js");e.exports=function(i){return Object(n(i))}},"./node_modules/core-js/internals/to-primitive.js":function(e,t,r){var n=r("./node_modules/core-js/internals/is-object.js");e.exports=function(i,a){if(!n(i))return i;var s,o;if(a&&typeof(s=i.toString)=="function"&&!n(o=s.call(i))||typeof(s=i.valueOf)=="function"&&!n(o=s.call(i))||!a&&typeof(s=i.toString)=="function"&&!n(o=s.call(i)))return o;throw TypeError("Can't convert object to primitive value")}},"./node_modules/core-js/internals/uid.js":function(e,t){var r=0,n=Math.random();e.exports=function(i){return"Symbol(".concat(i===void 0?"":i,")_",(++r+n).toString(36))}},"./node_modules/core-js/internals/validate-set-prototype-of-arguments.js":function(e,t,r){var n=r("./node_modules/core-js/internals/is-object.js"),i=r("./node_modules/core-js/internals/an-object.js");e.exports=function(a,s){if(i(a),!n(s)&&s!==null)throw TypeError("Can't set "+String(s)+" as a prototype")}},"./node_modules/core-js/internals/well-known-symbol.js":function(e,t,r){var n=r("./node_modules/core-js/internals/global.js"),i=r("./node_modules/core-js/internals/shared.js"),a=r("./node_modules/core-js/internals/uid.js"),s=r("./node_modules/core-js/internals/native-symbol.js"),o=n.Symbol,c=i("wks");e.exports=function(l){return c[l]||(c[l]=s&&o[l]||(s?o:a)("Symbol."+l))}},"./node_modules/core-js/modules/es.array.from.js":function(e,t,r){var n=r("./node_modules/core-js/internals/export.js"),i=r("./node_modules/core-js/internals/array-from.js"),a=r("./node_modules/core-js/internals/check-correctness-of-iteration.js"),s=!a(function(o){Array.from(o)});n({target:"Array",stat:!0,forced:s},{from:i})},"./node_modules/core-js/modules/es.string.iterator.js":function(e,t,r){"use strict";var n=r("./node_modules/core-js/internals/string-at.js"),i=r("./node_modules/core-js/internals/internal-state.js"),a=r("./node_modules/core-js/internals/define-iterator.js"),s="String Iterator",o=i.set,c=i.getterFor(s);a(String,"String",function(l){o(this,{type:s,string:String(l),index:0})},function(){var u=c(this),f=u.string,d=u.index,h;return d>=f.length?{value:void 0,done:!0}:(h=n(f,d,!0),u.index+=h.length,{value:h,done:!1})})},"./node_modules/webpack/buildin/global.js":function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(n){typeof window=="object"&&(r=window)}e.exports=r},"./src/default-attrs.json":function(e){e.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":function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=Object.assign||function(h){for(var p=1;p<arguments.length;p++){var m=arguments[p];for(var v in m)Object.prototype.hasOwnProperty.call(m,v)&&(h[v]=m[v])}return h},i=function(){function h(p,m){for(var v=0;v<m.length;v++){var y=m[v];y.enumerable=y.enumerable||!1,y.configurable=!0,"value"in y&&(y.writable=!0),Object.defineProperty(p,y.key,y)}}return function(p,m,v){return m&&h(p.prototype,m),v&&h(p,v),p}}(),a=r("./node_modules/classnames/dedupe.js"),s=l(a),o=r("./src/default-attrs.json"),c=l(o);function l(h){return h&&h.__esModule?h:{default:h}}function u(h,p){if(!(h instanceof p))throw new TypeError("Cannot call a class as a function")}var f=function(){function h(p,m){var v=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[];u(this,h),this.name=p,this.contents=m,this.tags=v,this.attrs=n({},c.default,{class:"feather feather-"+p})}return i(h,[{key:"toSvg",value:function(){var m=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},v=n({},this.attrs,m,{class:(0,s.default)(this.attrs.class,m.class)});return"<svg "+d(v)+">"+this.contents+"</svg>"}},{key:"toString",value:function(){return this.contents}}]),h}();function d(h){return Object.keys(h).map(function(p){return p+'="'+h[p]+'"'}).join(" ")}t.default=f},"./src/icons.js":function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r("./src/icon.js"),i=l(n),a=r("./dist/icons.json"),s=l(a),o=r("./src/tags.json"),c=l(o);function l(u){return u&&u.__esModule?u:{default:u}}t.default=Object.keys(s.default).map(function(u){return new i.default(u,s.default[u],c.default[u])}).reduce(function(u,f){return u[f.name]=f,u},{})},"./src/index.js":function(e,t,r){"use strict";var n=r("./src/icons.js"),i=l(n),a=r("./src/to-svg.js"),s=l(a),o=r("./src/replace.js"),c=l(o);function l(u){return u&&u.__esModule?u:{default:u}}e.exports={icons:i.default,toSvg:s.default,replace:c.default}},"./src/replace.js":function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=Object.assign||function(d){for(var h=1;h<arguments.length;h++){var p=arguments[h];for(var m in p)Object.prototype.hasOwnProperty.call(p,m)&&(d[m]=p[m])}return d},i=r("./node_modules/classnames/dedupe.js"),a=c(i),s=r("./src/icons.js"),o=c(s);function c(d){return d&&d.__esModule?d:{default:d}}function l(){var d=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 h=document.querySelectorAll("[data-feather]");Array.from(h).forEach(function(p){return u(p,d)})}function u(d){var h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},p=f(d),m=p["data-feather"];if(delete p["data-feather"],o.default[m]===void 0){console.warn("feather: '"+m+"' is not a valid icon");return}var v=o.default[m].toSvg(n({},h,p,{class:(0,a.default)(h.class,p.class)})),y=new DOMParser().parseFromString(v,"image/svg+xml"),b=y.querySelector("svg");d.parentNode.replaceChild(b,d)}function f(d){return Array.from(d.attributes).reduce(function(h,p){return h[p.name]=p.value,h},{})}t.default=l},"./src/tags.json":function(e){e.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":function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r("./src/icons.js"),i=a(n);function a(o){return o&&o.__esModule?o:{default:o}}function s(o){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(console.warn("feather.toSvg() is deprecated. Please use feather.icons[name].toSvg() instead."),!o)throw new Error("The required `key` (icon name) parameter is missing.");if(!i.default[o])throw new Error("No icon matching '"+o+"'. See the complete list of icons at https://feathericons.com");return i.default[o].toSvg(c)}t.default=s},0:function(e,t,r){r("./node_modules/core-js/es/array/from.js"),e.exports=r("./src/index.js")}})})});var jH={};XP(jH,{default:()=>Jd});module.exports=ZP(jH);g();g();var Jo=ze(d1(),1),Sp=ze(_1(),1),Jw=ze(S1(),1),du=ze(uw(),1),tu=ze(hw(),1),Qw=ze(xw(),1),Jr=ze(Ew(),1),e2=ze(Pw(),1),_e=class e extends Error{constructor(t){super(t),this.caller=""}toJSON(){return{code:this.code,data:this.data,caller:this.caller,message:this.message,stack:this.stack}}fromJSON(t){let r=new e(t.message);return r.code=t.code,r.data=t.data,r.caller=t.caller,r.stack=t.stack,r}get isIsomorphicGitError(){return!0}},Qo=class e extends _e{constructor(t){super(`Modifying the index is not possible because you have unmerged files: ${t.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=e.code,this.data={filepaths:t}}};Qo.code="UnmergedPathsError";var le=class e extends _e{constructor(t){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: ${t}`),this.code=this.name=e.code,this.data={message:t}}};le.code="InternalError";var cs=class e extends _e{constructor(t){super(`The filepath "${t}" contains unsafe character sequences`),this.code=this.name=e.code,this.data={filepath:t}}};cs.code="UnsafeFilepathError";var Ir=class{constructor(t){this.buffer=t,this._start=0}eof(){return this._start>=this.buffer.length}tell(){return this._start}seek(t){this._start=t}slice(t){let r=this.buffer.slice(this._start,this._start+t);return this._start+=t,r}toString(t,r){let n=this.buffer.toString(t,this._start,this._start+r);return this._start+=r,n}write(t,r,n){let i=this.buffer.write(t,this._start,r,n);return this._start+=r,i}copy(t,r,n){let i=t.copy(this.buffer,this._start,r,n);return this._start+=i,i}readUInt8(){let t=this.buffer.readUInt8(this._start);return this._start+=1,t}writeUInt8(t){let r=this.buffer.writeUInt8(t,this._start);return this._start+=1,r}readUInt16BE(){let t=this.buffer.readUInt16BE(this._start);return this._start+=2,t}writeUInt16BE(t){let r=this.buffer.writeUInt16BE(t,this._start);return this._start+=2,r}readUInt32BE(){let t=this.buffer.readUInt32BE(this._start);return this._start+=4,t}writeUInt32BE(t){let r=this.buffer.writeUInt32BE(t,this._start);return this._start+=4,r}};function hu(e,t){return-(e<t)||+(e>t)}function t2(e,t){return hu(e.path,t.path)}function r2(e){let t=e>0?e>>12:0;t!==4&&t!==8&&t!==10&&t!==14&&(t=8);let r=e&511;return r&73?r=493:r=420,t!==8&&(r=0),(t<<12)+r}var _n=2**32;function Rw(e,t,r,n){if(e!==void 0&&t!==void 0)return[e,t];r===void 0&&(r=n.valueOf());let i=Math.floor(r/1e3),a=(r-i*1e3)*1e6;return[i,a]}function us(e){let[t,r]=Rw(e.ctimeSeconds,e.ctimeNanoseconds,e.ctimeMs,e.ctime),[n,i]=Rw(e.mtimeSeconds,e.mtimeNanoseconds,e.mtimeMs,e.mtime);return{ctimeSeconds:t%_n,ctimeNanoseconds:r%_n,mtimeSeconds:n%_n,mtimeNanoseconds:i%_n,dev:e.dev%_n,ino:e.ino%_n,mode:r2(e.mode%_n),uid:e.uid%_n,gid:e.gid%_n,size:e.size>-1?e.size%_n:0}}function J6(e){let t="";for(let r of new Uint8Array(e))r<16&&(t+="0"),t+=r.toString(16);return t}var tp=null;async function Gn(e){return tp===null&&(tp=await eM()),tp?n2(e):Q6(e)}function Q6(e){return new Sp.default().update(e).digest("hex")}async function n2(e){let t=await crypto.subtle.digest("SHA-1",e);return J6(t)}async function eM(){try{if(await n2(new Uint8Array([]))==="da39a3ee5e6b4b0d3255bfef95601890afd80709")return!0}catch(e){}return!1}function tM(e){return{assumeValid:!!(e&32768),extended:!!(e&16384),stage:(e&12288)>>12,nameLength:e&4095}}function rM(e){let t=e.flags;return t.extended=!1,t.nameLength=Math.min(Buffer.from(e.path).length,4095),(t.assumeValid?32768:0)+(t.extended?16384:0)+((t.stage&3)<<12)+(t.nameLength&4095)}var fp=class e{constructor(t,r){this._dirty=!1,this._unmergedPaths=r||new Set,this._entries=t||new Map}_addEntry(t){if(t.flags.stage===0)t.stages=[t],this._entries.set(t.path,t),this._unmergedPaths.delete(t.path);else{let r=this._entries.get(t.path);r||(this._entries.set(t.path,t),r=t),r.stages[t.flags.stage]=t,this._unmergedPaths.add(t.path)}}static async from(t){if(Buffer.isBuffer(t))return e.fromBuffer(t);if(t===null)return new e(null);throw new le("invalid type passed to GitIndex.from")}static async fromBuffer(t){if(t.length===0)throw new le("Index file is empty (.git/index)");let r=new e,n=new Ir(t),i=n.toString("utf8",4);if(i!=="DIRC")throw new le(`Invalid dircache magic file number: ${i}`);let a=await Gn(t.slice(0,-20)),s=t.slice(-20).toString("hex");if(s!==a)throw new le(`Invalid checksum in GitIndex buffer: expected ${s} but saw ${a}`);let o=n.readUInt32BE();if(o!==2)throw new le(`Unsupported dircache version: ${o}`);let c=n.readUInt32BE(),l=0;for(;!n.eof()&&l<c;){let u={};u.ctimeSeconds=n.readUInt32BE(),u.ctimeNanoseconds=n.readUInt32BE(),u.mtimeSeconds=n.readUInt32BE(),u.mtimeNanoseconds=n.readUInt32BE(),u.dev=n.readUInt32BE(),u.ino=n.readUInt32BE(),u.mode=n.readUInt32BE(),u.uid=n.readUInt32BE(),u.gid=n.readUInt32BE(),u.size=n.readUInt32BE(),u.oid=n.slice(20).toString("hex");let f=n.readUInt16BE();u.flags=tM(f);let d=t.indexOf(0,n.tell()+1)-n.tell();if(d<1)throw new le(`Got a path length of: ${d}`);if(u.path=n.toString("utf8",d),u.path.includes("..\\")||u.path.includes("../"))throw new cs(u.path);let h=8-(n.tell()-12)%8;for(h===0&&(h=8);h--;){let p=n.readUInt8();if(p!==0)throw new le(`Expected 1-8 null characters but got '${p}' after ${u.path}`);if(n.eof())throw new le("Unexpected end of file")}u.stages=[],r._addEntry(u),l++}return r}get unmergedPaths(){return[...this._unmergedPaths]}get entries(){return[...this._entries.values()].sort(t2)}get entriesMap(){return this._entries}get entriesFlat(){return[...this.entries].flatMap(t=>t.stages.length>1?t.stages.filter(r=>r):t)}*[Symbol.iterator](){for(let t of this.entries)yield t}insert({filepath:t,stats:r,oid:n,stage:i=0}){r||(r={ctimeSeconds:0,ctimeNanoseconds:0,mtimeSeconds:0,mtimeNanoseconds:0,dev:0,ino:0,mode:0,uid:0,gid:0,size:0}),r=us(r);let a=Buffer.from(t),s={ctimeSeconds:r.ctimeSeconds,ctimeNanoseconds:r.ctimeNanoseconds,mtimeSeconds:r.mtimeSeconds,mtimeNanoseconds:r.mtimeNanoseconds,dev:r.dev,ino:r.ino,mode:r.mode||33188,uid:r.uid,gid:r.gid,size:r.size,path:t,oid:n,flags:{assumeValid:!1,extended:!1,stage:i,nameLength:a.length<4095?a.length:4095},stages:[]};this._addEntry(s),this._dirty=!0}delete({filepath:t}){if(this._entries.has(t))this._entries.delete(t);else for(let r of this._entries.keys())r.startsWith(t+"/")&&this._entries.delete(r);this._unmergedPaths.has(t)&&this._unmergedPaths.delete(t),this._dirty=!0}clear(){this._entries.clear(),this._dirty=!0}has({filepath:t}){return this._entries.has(t)}render(){return this.entries.map(t=>`${t.mode.toString(8)} ${t.oid} ${t.path}`).join(` +`)}static async _entryToBuffer(t){let r=Buffer.from(t.path),n=Math.ceil((62+r.length+1)/8)*8,i=Buffer.alloc(n),a=new Ir(i),s=us(t);return a.writeUInt32BE(s.ctimeSeconds),a.writeUInt32BE(s.ctimeNanoseconds),a.writeUInt32BE(s.mtimeSeconds),a.writeUInt32BE(s.mtimeNanoseconds),a.writeUInt32BE(s.dev),a.writeUInt32BE(s.ino),a.writeUInt32BE(s.mode),a.writeUInt32BE(s.uid),a.writeUInt32BE(s.gid),a.writeUInt32BE(s.size),a.write(t.oid,20,"hex"),a.writeUInt16BE(rM(t)),a.write(t.path,r.length,"utf8"),i}async toObject(){let t=Buffer.alloc(12),r=new Ir(t);r.write("DIRC",4,"utf8"),r.writeUInt32BE(2),r.writeUInt32BE(this.entriesFlat.length);let n=[];for(let o of this.entries)if(n.push(e._entryToBuffer(o)),o.stages.length>1)for(let c of o.stages)c&&c!==o&&n.push(e._entryToBuffer(c));n=await Promise.all(n);let i=Buffer.concat(n),a=Buffer.concat([t,i]),s=await Gn(a);return Buffer.concat([a,Buffer.from(s,"hex")])}};function ru(e,t,r=!0,n=!0){let i=us(e),a=us(t);return r&&i.mode!==a.mode||i.mtimeSeconds!==a.mtimeSeconds||i.ctimeSeconds!==a.ctimeSeconds||i.uid!==a.uid||i.gid!==a.gid||n&&i.ino!==a.ino||i.size!==a.size}var rp=null,os=Symbol("IndexCache");function nM(){return{map:new Map,stats:new Map}}async function iM(e,t,r){let n=await e.lstat(t),i=await e.read(t),a=await fp.from(i);r.map.set(t,a),r.stats.set(t,n)}async function aM(e,t,r){let n=r.stats.get(t);if(n===void 0)return!0;let i=await e.lstat(t);return n===null||i===null?!1:ru(n,i)}var mt=class{static async acquire({fs:t,gitdir:r,cache:n,allowUnmerged:i=!0},a){n[os]||(n[os]=nM());let s=`${r}/index`;rp===null&&(rp=new Jo.default({maxPending:1/0}));let o,c=[];return await rp.acquire(s,async()=>{await aM(t,s,n[os])&&await iM(t,s,n[os]);let l=n[os].map.get(s);if(c=l.unmergedPaths,c.length&&!i)throw new Qo(c);if(o=await a(l),l._dirty){let u=await l.toObject();await t.write(s,u),n[os].stats.set(s,await t.lstat(s)),l._dirty=!1}}),o}};function nu(e){let t=Math.max(e.lastIndexOf("/"),e.lastIndexOf("\\"));return t>-1&&(e=e.slice(t+1)),e}function fs(e){let t=Math.max(e.lastIndexOf("/"),e.lastIndexOf("\\"));return t===-1?".":t===0?"/":e.slice(0,t)}function i2(e){let t=new Map,r=function(i){if(!t.has(i)){let a={type:"tree",fullpath:i,basename:nu(i),metadata:{},children:[]};t.set(i,a),a.parent=r(fs(i)),a.parent&&a.parent!==a&&a.parent.children.push(a)}return t.get(i)},n=function(i,a){if(!t.has(i)){let s={type:"blob",fullpath:i,basename:nu(i),metadata:a,parent:r(fs(i)),children:[]};s.parent&&s.parent.children.push(s),t.set(i,s)}return t.get(i)};r(".");for(let i of e)n(i.path,i);return t}function sM(e){switch(e){case 16384:return"tree";case 33188:return"blob";case 33261:return"blob";case 40960:return"blob";case 57344:return"commit"}throw new le(`Unexpected GitTree entry mode: ${e.toString(8)}`)}var dp=class{constructor({fs:t,gitdir:r,cache:n}){this.treePromise=mt.acquire({fs:t,gitdir:r,cache:n},async function(a){return i2(a.entries)});let i=this;this.ConstructEntry=class{constructor(s){this._fullpath=s,this._type=!1,this._mode=!1,this._stat=!1,this._oid=!1}async type(){return i.type(this)}async mode(){return i.mode(this)}async stat(){return i.stat(this)}async content(){return i.content(this)}async oid(){return i.oid(this)}}}async readdir(t){let r=t._fullpath,i=(await this.treePromise).get(r);if(!i||i.type==="blob")return null;if(i.type!=="tree")throw new Error(`ENOTDIR: not a directory, scandir '${r}'`);let a=i.children.map(s=>s.fullpath);return a.sort(hu),a}async type(t){return t._type===!1&&await t.stat(),t._type}async mode(t){return t._mode===!1&&await t.stat(),t._mode}async stat(t){if(t._stat===!1){let n=(await this.treePromise).get(t._fullpath);if(!n)throw new Error(`ENOENT: no such file or directory, lstat '${t._fullpath}'`);let i=n.type==="tree"?{}:us(n.metadata);t._type=n.type==="tree"?"tree":sM(i.mode),t._mode=i.mode,n.type==="tree"?t._stat=void 0:t._stat=i}return t._stat}async content(t){}async oid(t){if(t._oid===!1){let n=(await this.treePromise).get(t._fullpath);t._oid=n.metadata.oid}return t._oid}},pu=Symbol("GitWalkSymbol");function mu(){let e=Object.create(null);return Object.defineProperty(e,pu,{value:function({fs:t,gitdir:r,cache:n}){return new dp({fs:t,gitdir:r,cache:n})}}),Object.freeze(e),e}var Ne=class e extends _e{constructor(t){super(`Could not find ${t}.`),this.code=this.name=e.code,this.data={what:t}}};Ne.code="NotFoundError";var Gt=class e extends _e{constructor(t,r,n,i){super(`Object ${t} ${i?`at ${i}`:""}was anticipated to be a ${n} but it is a ${r}.`),this.code=this.name=e.code,this.data={oid:t,actual:r,expected:n,filepath:i}}};Gt.code="ObjectTypeError";var bi=class e extends _e{constructor(t){super(`Expected a 40-char hex object id but saw "${t}".`),this.code=this.name=e.code,this.data={value:t}}};bi.code="InvalidOidError";var el=class e extends _e{constructor(t){super(`Could not find a fetch refspec for remote "${t}". Make sure the config file has an entry like the following: +[remote "${t}"] + fetch = +refs/heads/*:refs/remotes/origin/* +`),this.code=this.name=e.code,this.data={remote:t}}};el.code="NoRefspecError";var iu=class e{constructor(t){if(this.refs=new Map,this.parsedConfig=[],t){let r=null;this.parsedConfig=t.trim().split(` +`).map(n=>{if(/^\s*#/.test(n))return{line:n,comment:!0};let i=n.indexOf(" ");if(n.startsWith("^")){let a=n.slice(1);return this.refs.set(r+"^{}",a),{line:n,ref:r,peeled:a}}else{let a=n.slice(0,i);return r=n.slice(i+1),this.refs.set(r,a),{line:n,ref:r,oid:a}}})}return this}static from(t){return new e(t)}delete(t){this.parsedConfig=this.parsedConfig.filter(r=>r.ref!==t),this.refs.delete(t)}toString(){return this.parsedConfig.map(({line:t})=>t).join(` +`)+` +`}},au=class e{constructor({remotePath:t,localPath:r,force:n,matchPrefix:i}){Object.assign(this,{remotePath:t,localPath:r,force:n,matchPrefix:i})}static from(t){let[r,n,i,a,s]=t.match(/^(\+?)(.*?)(\*?):(.*?)(\*?)$/).slice(1),o=r==="+",c=i==="*";if(c!==(s==="*"))throw new le("Invalid refspec");return new e({remotePath:n,localPath:a,force:o,matchPrefix:c})}translate(t){if(this.matchPrefix){if(t.startsWith(this.remotePath))return this.localPath+t.replace(this.remotePath,"")}else if(t===this.remotePath)return this.localPath;return null}reverseTranslate(t){if(this.matchPrefix){if(t.startsWith(this.localPath))return this.remotePath+t.replace(this.localPath,"")}else if(t===this.localPath)return this.remotePath;return null}},hp=class e{constructor(t=[]){this.rules=t}static from(t){let r=[];for(let n of t)r.push(au.from(n));return new e(r)}add(t){let r=au.from(t);this.rules.push(r)}translate(t){let r=[];for(let n of this.rules)for(let i of t){let a=n.translate(i);a&&r.push([i,a])}return r}translateOne(t){let r=null;for(let n of this.rules){let i=n.translate(t);i&&(r=i)}return r}localNamespaces(){return this.rules.filter(t=>t.matchPrefix).map(t=>t.localPath.replace(/\/$/,""))}};function oM(e,t){let r=e.replace(/\^\{\}$/,""),n=t.replace(/\^\{\}$/,""),i=-(r<n)||+(r>n);return i===0?e.endsWith("^{}")?1:-1:i}var Mw=new Map;function Ow(e){let t=Mw.get(e);return t||(t=lM(e),Mw.set(e,t)),t}function lM(e){return e=e.split("/./").join("/").replace(/\/{2,}/g,"/"),e==="/."?"/":e==="./"||(e.startsWith("./")&&(e=e.slice(2)),e.endsWith("/.")&&(e=e.slice(0,-2)),e.length>1&&e.endsWith("/")&&(e=e.slice(0,-1)),e==="")?".":e}function $(...e){return Ow(e.map(Ow).join("/"))}var cM=e=>{e=e.toLowerCase();let t=parseInt(e);return e.endsWith("k")&&(t*=1024),e.endsWith("m")&&(t*=1024*1024),e.endsWith("g")&&(t*=1024*1024*1024),t},Ko=e=>{if(e=e.trim().toLowerCase(),e==="true"||e==="yes"||e==="on")return!0;if(e==="false"||e==="no"||e==="off")return!1;throw Error(`Expected 'true', 'false', 'yes', 'no', 'on', or 'off', but got ${e}`)},Iw={core:{filemode:Ko,bare:Ko,logallrefupdates:Ko,symlinks:Ko,ignorecase:Ko,bigFileThreshold:cM}},uM=/^\[([A-Za-z0-9-.]+)(?: "(.*)")?\]$/,fM=/^[A-Za-z0-9-.]+$/,dM=/^([A-Za-z][A-Za-z-]*)(?: *= *(.*))?$/,hM=/^[A-Za-z][A-Za-z-]*$/,pM=/^(.*?)( *[#;].*)$/,mM=e=>{let t=uM.exec(e);if(t!=null){let[r,n]=t.slice(1);return[r,n]}return null},gM=e=>{let t=dM.exec(e);if(t!=null){let[r,n="true"]=t.slice(1),i=vM(n),a=yM(i);return[r,a]}return null},vM=e=>{let t=pM.exec(e);if(t==null)return e;let[r,n]=t.slice(1);return Fw(r)&&Fw(n)?`${r}${n}`:r},Fw=e=>(e.match(/(?:^|[^\\])"/g)||[]).length%2!==0,yM=e=>e.split("").reduce((t,r,n,i)=>{let a=r==='"'&&i[n-1]!=="\\",s=r==="\\"&&i[n+1]==='"';return a||s?t:t+r},""),$w=e=>e!=null?e.toLowerCase():null,pp=(e,t,r)=>[$w(e),t,$w(r)].filter(n=>n!=null).join("."),Lw=e=>{let t=e.split("."),r=t.shift(),n=t.pop(),i=t.length?t.join("."):void 0;return{section:r,subsection:i,name:n,path:pp(r,i,n),sectionPath:pp(r,i,null)}},wM=(e,t)=>e.reduce((r,n,i)=>t(n)?i:r,-1),mp=class e{constructor(t){let r=null,n=null;this.parsedConfig=t?t.split(` +`).map(i=>{let a=null,s=null,o=i.trim(),c=mM(o),l=c!=null;if(l)[r,n]=c;else{let f=gM(o);f!=null&&([a,s]=f)}let u=pp(r,n,a);return{line:i,isSection:l,section:r,subsection:n,name:a,value:s,path:u}}):[]}static from(t){return new e(t)}async get(t,r=!1){let n=Lw(t).path,i=this.parsedConfig.filter(a=>a.path===n).map(({section:a,name:s,value:o})=>{let c=Iw[a]&&Iw[a][s];return c?c(o):o});return r?i:i.pop()}async getall(t){return this.get(t,!0)}async getSubsections(t){return this.parsedConfig.filter(r=>r.section===t&&r.isSection).map(r=>r.subsection)}async deleteSection(t,r){this.parsedConfig=this.parsedConfig.filter(n=>!(n.section===t&&n.subsection===r))}async append(t,r){return this.set(t,r,!0)}async set(t,r,n=!1){let{section:i,subsection:a,name:s,path:o,sectionPath:c}=Lw(t),l=wM(this.parsedConfig,u=>u.path===o);if(r==null)l!==-1&&this.parsedConfig.splice(l,1);else if(l!==-1){let u=this.parsedConfig[l],f=Object.assign({},u,{name:s,value:r,modified:!0});n?this.parsedConfig.splice(l+1,0,f):this.parsedConfig[l]=f}else{let u=this.parsedConfig.findIndex(d=>d.path===c),f={section:i,subsection:a,name:s,value:r,modified:!0,path:o};if(fM.test(i)&&hM.test(s))if(u>=0)this.parsedConfig.splice(u+1,0,f);else{let d={section:i,subsection:a,modified:!0,path:c};this.parsedConfig.push(d,f)}}}toString(){return this.parsedConfig.map(({line:t,section:r,subsection:n,name:i,value:a,modified:s=!1})=>s?i!=null&&a!=null?typeof a=="string"&&/[#;]/.test(a)?` ${i} = "${a}"`:` ${i} = ${a}`:n!=null?`[${r} "${n}"]`:`[${r}]`:t).join(` +`)}},We=class{static async get({fs:t,gitdir:r}){let n=await t.read(`${r}/config`,{encoding:"utf8"});return mp.from(n)}static async save({fs:t,gitdir:r,config:n}){await t.write(`${r}/config`,n.toString(),{encoding:"utf8"})}},Qc=e=>[`${e}`,`refs/${e}`,`refs/tags/${e}`,`refs/heads/${e}`,`refs/remotes/${e}`,`refs/remotes/${e}/HEAD`],bM=["config","description","index","shallow","commondir"],np;async function vi(e,t){return np===void 0&&(np=new Jo.default),np.acquire(e,t)}var q=class e{static async updateRemoteRefs({fs:t,gitdir:r,remote:n,refs:i,symrefs:a,tags:s,refspecs:o=void 0,prune:c=!1,pruneTags:l=!1}){for(let v of i.values())if(!v.match(/[0-9a-f]{40}/))throw new bi(v);let u=await We.get({fs:t,gitdir:r});if(!o){if(o=await u.getall(`remote.${n}.fetch`),o.length===0)throw new el(n);o.unshift(`+HEAD:refs/remotes/${n}/HEAD`)}let f=hp.from(o),d=new Map;if(l){let v=await e.listRefs({fs:t,gitdir:r,filepath:"refs/tags"});await e.deleteRefs({fs:t,gitdir:r,refs:v.map(y=>`refs/tags/${y}`)})}if(s){for(let v of i.keys())if(v.startsWith("refs/tags")&&!v.endsWith("^{}")&&!await e.exists({fs:t,gitdir:r,ref:v})){let y=i.get(v);d.set(v,y)}}let h=f.translate([...i.keys()]);for(let[v,y]of h){let b=i.get(v);d.set(y,b)}let p=f.translate([...a.keys()]);for(let[v,y]of p){let b=a.get(v),x=f.translateOne(b);x&&d.set(y,`ref: ${x}`)}let m=[];if(c){for(let v of f.localNamespaces()){let y=(await e.listRefs({fs:t,gitdir:r,filepath:v})).map(b=>`${v}/${b}`);for(let b of y)d.has(b)||m.push(b)}m.length>0&&await e.deleteRefs({fs:t,gitdir:r,refs:m})}for(let[v,y]of d)await vi(v,async()=>t.write($(r,v),`${y.trim()} +`,"utf8"));return{pruned:m}}static async writeRef({fs:t,gitdir:r,ref:n,value:i}){if(!i.match(/[0-9a-f]{40}/))throw new bi(i);await vi(n,async()=>t.write($(r,n),`${i.trim()} +`,"utf8"))}static async writeSymbolicRef({fs:t,gitdir:r,ref:n,value:i}){await vi(n,async()=>t.write($(r,n),`ref: ${i.trim()} +`,"utf8"))}static async deleteRef({fs:t,gitdir:r,ref:n}){return e.deleteRefs({fs:t,gitdir:r,refs:[n]})}static async deleteRefs({fs:t,gitdir:r,refs:n}){await Promise.all(n.map(o=>t.rm($(r,o))));let i=await vi("packed-refs",async()=>t.read(`${r}/packed-refs`,{encoding:"utf8"})),a=iu.from(i),s=a.refs.size;for(let o of n)a.refs.has(o)&&a.delete(o);a.refs.size<s&&(i=a.toString(),await vi("packed-refs",async()=>t.write(`${r}/packed-refs`,i,{encoding:"utf8"})))}static async resolve({fs:t,gitdir:r,ref:n,depth:i=void 0}){if(i!==void 0&&(i--,i===-1))return n;if(n.startsWith("ref: "))return n=n.slice(5),e.resolve({fs:t,gitdir:r,ref:n,depth:i});if(n.length===40&&/[0-9a-f]{40}/.test(n))return n;let a=await e.packedRefs({fs:t,gitdir:r}),s=Qc(n).filter(o=>!bM.includes(o));for(let o of s){let c=await vi(o,async()=>await t.read(`${r}/${o}`,{encoding:"utf8"})||a.get(o));if(c)return e.resolve({fs:t,gitdir:r,ref:c.trim(),depth:i})}throw new Ne(n)}static async exists({fs:t,gitdir:r,ref:n}){try{return await e.expand({fs:t,gitdir:r,ref:n}),!0}catch(i){return!1}}static async expand({fs:t,gitdir:r,ref:n}){if(n.length===40&&/[0-9a-f]{40}/.test(n))return n;let i=await e.packedRefs({fs:t,gitdir:r}),a=Qc(n);for(let s of a)if(await vi(s,async()=>t.exists(`${r}/${s}`))||i.has(s))return s;throw new Ne(n)}static async expandAgainstMap({ref:t,map:r}){let n=Qc(t);for(let i of n)if(await r.has(i))return i;throw new Ne(t)}static resolveAgainstMap({ref:t,fullref:r=t,depth:n=void 0,map:i}){if(n!==void 0&&(n--,n===-1))return{fullref:r,oid:t};if(t.startsWith("ref: "))return t=t.slice(5),e.resolveAgainstMap({ref:t,fullref:r,depth:n,map:i});if(t.length===40&&/[0-9a-f]{40}/.test(t))return{fullref:r,oid:t};let a=Qc(t);for(let s of a){let o=i.get(s);if(o)return e.resolveAgainstMap({ref:o.trim(),fullref:s,depth:n,map:i})}throw new Ne(t)}static async packedRefs({fs:t,gitdir:r}){let n=await vi("packed-refs",async()=>t.read(`${r}/packed-refs`,{encoding:"utf8"}));return iu.from(n).refs}static async listRefs({fs:t,gitdir:r,filepath:n}){let i=e.packedRefs({fs:t,gitdir:r}),a=null;try{a=await t.readdirDeep(`${r}/${n}`),a=a.map(s=>s.replace(`${r}/${n}/`,""))}catch(s){a=[]}for(let s of(await i).keys())s.startsWith(n)&&(s=s.replace(n+"/",""),a.includes(s)||a.push(s));return a.sort(oM),a}static async listBranches({fs:t,gitdir:r,remote:n}){return n?e.listRefs({fs:t,gitdir:r,filepath:`refs/remotes/${n}`}):e.listRefs({fs:t,gitdir:r,filepath:"refs/heads"})}static async listTags({fs:t,gitdir:r}){return(await e.listRefs({fs:t,gitdir:r,filepath:"refs/tags"})).filter(i=>!i.endsWith("^{}"))}};function _M(e,t){return hu(Dw(e),Dw(t))}function Dw(e){return e.mode==="040000"?e.path+"/":e.path}function a2(e){switch(e){case"040000":return"tree";case"100644":return"blob";case"100755":return"blob";case"120000":return"blob";case"160000":return"commit"}throw new le(`Unexpected GitTree entry mode: ${e}`)}function xM(e){let t=[],r=0;for(;r<e.length;){let n=e.indexOf(32,r);if(n===-1)throw new le(`GitTree: Error parsing buffer at byte location ${r}: Could not find the next space character.`);let i=e.indexOf(0,r);if(i===-1)throw new le(`GitTree: Error parsing buffer at byte location ${r}: Could not find the next null character.`);let a=e.slice(r,n).toString("utf8");a==="40000"&&(a="040000");let s=a2(a),o=e.slice(n+1,i).toString("utf8");if(o.includes("\\")||o.includes("/"))throw new cs(o);let c=e.slice(i+1,i+21).toString("hex");r=i+21,t.push({mode:a,path:o,oid:c,type:s})}return t}function SM(e){if(typeof e=="number"&&(e=e.toString(8)),e.match(/^0?4.*/))return"040000";if(e.match(/^1006.*/))return"100644";if(e.match(/^1007.*/))return"100755";if(e.match(/^120.*/))return"120000";if(e.match(/^160.*/))return"160000";throw new le(`Could not understand file mode: ${e}`)}function EM(e){return!e.oid&&e.sha&&(e.oid=e.sha),e.mode=SM(e.mode),e.type||(e.type=a2(e.mode)),e}var er=class e{constructor(t){if(Buffer.isBuffer(t))this._entries=xM(t);else if(Array.isArray(t))this._entries=t.map(EM);else throw new le("invalid type passed to GitTree constructor");this._entries.sort(t2)}static from(t){return new e(t)}render(){return this._entries.map(t=>`${t.mode} ${t.type} ${t.oid} ${t.path}`).join(` +`)}toObject(){let t=[...this._entries];return t.sort(_M),Buffer.concat(t.map(r=>{let n=Buffer.from(r.mode.replace(/^0/,"")),i=Buffer.from(" "),a=Buffer.from(r.path,"utf8"),s=Buffer.from([0]),o=Buffer.from(r.oid,"hex");return Buffer.concat([n,i,a,s,o])}))}entries(){return this._entries}*[Symbol.iterator](){for(let t of this._entries)yield t}},_i=class{static wrap({type:t,object:r}){return Buffer.concat([Buffer.from(`${t} ${r.byteLength.toString()}\0`),Buffer.from(r)])}static unwrap(t){let r=t.indexOf(32),n=t.indexOf(0),i=t.slice(0,r).toString("utf8"),a=t.slice(r+1,n).toString("utf8"),s=t.length-(n+1);if(parseInt(a)!==s)throw new le(`Length mismatch: expected ${a} bytes but got ${s} instead.`);return{type:i,object:Buffer.from(t.slice(n+1))}}};async function AM({fs:e,gitdir:t,oid:r}){let n=`objects/${r.slice(0,2)}/${r.slice(2)}`,i=await e.read(`${t}/${n}`);return i?{object:i,format:"deflated",source:n}:null}function kM(e,t){let r=new Ir(e),n=Nw(r);if(n!==t.byteLength)throw new le(`applyDelta expected source buffer to be ${n} bytes but the provided buffer was ${t.length} bytes`);let i=Nw(r),a,s=Bw(r,t);if(s.byteLength===i)a=s;else{a=Buffer.alloc(i);let o=new Ir(a);for(o.copy(s);!r.eof();)o.copy(Bw(r,t));let c=o.tell();if(i!==c)throw new le(`applyDelta expected target buffer to be ${i} bytes but the resulting buffer was ${c} bytes`)}return a}function Nw(e){let t=0,r=0,n=null;do n=e.readUInt8(),t|=(n&127)<<r,r+=7;while(n&128);return t}function jw(e,t,r){let n=0,i=0;for(;r--;)t&1&&(n|=e.readUInt8()<<i),t>>=1,i+=8;return n}function Bw(e,t){let r=e.readUInt8(),n=128,i=15,a=112;if(r&n){let s=jw(e,r&i,4),o=jw(e,(r&a)>>4,3);return o===0&&(o=65536),t.slice(s,s+o)}else return e.slice(r)}function TM(e){let t=[e];return{next(){return Promise.resolve({done:t.length===0,value:t.pop()})},return(){return t=[],{}},[Symbol.asyncIterator](){return this}}}function s2(e){return e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]?e[Symbol.iterator]():e.next?e:TM(e)}var su=class{constructor(t){if(typeof Buffer=="undefined")throw new Error("Missing Buffer dependency");this.stream=s2(t),this.buffer=null,this.cursor=0,this.undoCursor=0,this.started=!1,this._ended=!1,this._discardedBytes=0}eof(){return this._ended&&this.cursor===this.buffer.length}tell(){return this._discardedBytes+this.cursor}async byte(){if(!this.eof()&&(this.started||await this._init(),!(this.cursor===this.buffer.length&&(await this._loadnext(),this._ended))))return this._moveCursor(1),this.buffer[this.undoCursor]}async chunk(){if(!this.eof()&&(this.started||await this._init(),!(this.cursor===this.buffer.length&&(await this._loadnext(),this._ended))))return this._moveCursor(this.buffer.length),this.buffer.slice(this.undoCursor,this.cursor)}async read(t){if(!this.eof())return this.started||await this._init(),this.cursor+t>this.buffer.length&&(this._trim(),await this._accumulate(t)),this._moveCursor(t),this.buffer.slice(this.undoCursor,this.cursor)}async skip(t){this.eof()||(this.started||await this._init(),this.cursor+t>this.buffer.length&&(this._trim(),await this._accumulate(t)),this._moveCursor(t))}async undo(){this.cursor=this.undoCursor}async _next(){this.started=!0;let{done:t,value:r}=await this.stream.next();return t&&(this._ended=!0,!r)?Buffer.alloc(0):(r&&(r=Buffer.from(r)),r)}_trim(){this.buffer=this.buffer.slice(this.undoCursor),this.cursor-=this.undoCursor,this._discardedBytes+=this.undoCursor,this.undoCursor=0}_moveCursor(t){this.undoCursor=this.cursor,this.cursor+=t,this.cursor>this.buffer.length&&(this.cursor=this.buffer.length)}async _accumulate(t){if(this._ended)return;let r=[this.buffer];for(;this.cursor+t>CM(r);){let n=await this._next();if(this._ended)break;r.push(n)}this.buffer=Buffer.concat(r)}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 CM(e){return e.reduce((t,r)=>t+r.length,0)}async function PM(e,t){let r=new su(e),n=await r.read(4);if(n=n.toString("utf8"),n!=="PACK")throw new le(`Invalid PACK header '${n}'`);let i=await r.read(4);if(i=i.readUInt32BE(0),i!==2)throw new le(`Invalid packfile version: ${i}`);let a=await r.read(4);if(a=a.readUInt32BE(0),!(a<1))for(;!r.eof()&&a--;){let s=r.tell(),{type:o,length:c,ofs:l,reference:u}=await RM(r),f=new du.default.Inflate;for(;!f.result;){let d=await r.chunk();if(!d)break;if(f.push(d,!1),f.err)throw new le(`Pako error: ${f.msg}`);if(f.result){if(f.result.length!==c)throw new le("Inflated object size is different from that stated in packfile.");await r.undo(),await r.read(d.length-f.strm.avail_in);let h=r.tell();await t({data:f.result,type:o,num:a,offset:s,end:h,reference:u,ofs:l})}}}}async function RM(e){let t=await e.byte(),r=t>>4&7,n=t&15;if(t&128){let s=4;do t=await e.byte(),n|=(t&127)<<s,s+=7;while(t&128)}let i,a;if(r===6){let s=0;i=0;let o=[];do t=await e.byte(),i|=(t&127)<<s,s+=7,o.push(t);while(t&128);a=Buffer.from(o)}return r===7&&(a=await e.read(20)),{type:r,length:n,ofs:i,reference:a}}var ip=!1;async function o2(e){return ip===null&&(ip=OM()),ip?MM(e):du.default.inflate(e)}async function MM(e){let t=new DecompressionStream("deflate"),r=new Blob([e]).stream().pipeThrough(t);return new Uint8Array(await new Response(r).arrayBuffer())}function OM(){try{if(new DecompressionStream("deflate"))return!0}catch(e){}return!1}function IM(e){let t=[],r=0,n=0;do{r=e.readUInt8();let i=r&127;t.push(i),n=r&128}while(n);return t.reduce((i,a)=>i+1<<7|a,-1)}function FM(e,t){let r=t,n=4,i=null;do i=e.readUInt8(),r|=(i&127)<<n,n+=7;while(i&128);return r}var tl=class e{constructor(t){Object.assign(this,t),this.offsetCache={}}static async fromIdx({idx:t,getExternalRefDelta:r}){let n=new Ir(t);if(n.slice(4).toString("hex")!=="ff744f63")return;let a=n.readUInt32BE();if(a!==2)throw new le(`Unable to read version ${a} packfile IDX. (Only version 2 supported)`);if(t.byteLength>2048*1024*1024)throw new le("To keep implementation simple, I haven't implemented the layer 5 feature needed to support packfiles > 2GB in size.");n.seek(n.tell()+4*255);let s=n.readUInt32BE(),o=[];for(let u=0;u<s;u++){let f=n.slice(20).toString("hex");o[u]=f}n.seek(n.tell()+4*s);let c=new Map;for(let u=0;u<s;u++)c.set(o[u],n.readUInt32BE());let l=n.slice(20).toString("hex");return new e({hashes:o,crcs:{},offsets:c,packfileSha:l,getExternalRefDelta:r})}static async fromPack({pack:t,getExternalRefDelta:r,onProgress:n}){let i={1:"commit",2:"tree",3:"blob",4:"tag",6:"ofs-delta",7:"ref-delta"},a={},s=t.slice(-20).toString("hex"),o=[],c={},l=new Map,u=null,f=null;await PM([t],async({data:v,type:y,reference:b,offset:x,num:E})=>{u===null&&(u=E);let _=Math.floor((u-E)*100/u);_!==f&&n&&await n({phase:"Receiving objects",loaded:u-E,total:u}),f=_,y=i[y],["commit","tree","blob","tag"].includes(y)?a[x]={type:y,offset:x}:y==="ofs-delta"?a[x]={type:y,offset:x}:y==="ref-delta"&&(a[x]={type:y,offset:x})});let d=Object.keys(a).map(Number);for(let[v,y]of d.entries()){let b=v+1===d.length?t.byteLength-20:d[v+1],x=a[y],E=Jw.default.buf(t.slice(y,b))>>>0;x.end=b,x.crc=E}let h=new e({pack:Promise.resolve(t),packfileSha:s,crcs:c,hashes:o,offsets:l,getExternalRefDelta:r});f=null;let p=0,m=[0,0,0,0,0,0,0,0,0,0,0,0];for(let v in a){v=Number(v);let y=Math.floor(p*100/u);y!==f&&n&&await n({phase:"Resolving deltas",loaded:p,total:u}),p++,f=y;let b=a[v];if(!b.oid)try{h.readDepth=0,h.externalReadDepth=0;let{type:x,object:E}=await h.readSlice({start:v});m[h.readDepth]+=1;let _=await Gn(_i.wrap({type:x,object:E}));b.oid=_,o.push(_),l.set(_,v),c[_]=b.crc}catch(x){continue}}return o.sort(),h}async toBuffer(){let t=[],r=(l,u)=>{t.push(Buffer.from(l,u))};r("ff744f63","hex"),r("00000002","hex");let n=new Ir(Buffer.alloc(256*4));for(let l=0;l<256;l++){let u=0;for(let f of this.hashes)parseInt(f.slice(0,2),16)<=l&&u++;n.writeUInt32BE(u)}t.push(n.buffer);for(let l of this.hashes)r(l,"hex");let i=new Ir(Buffer.alloc(this.hashes.length*4));for(let l of this.hashes)i.writeUInt32BE(this.crcs[l]);t.push(i.buffer);let a=new Ir(Buffer.alloc(this.hashes.length*4));for(let l of this.hashes)a.writeUInt32BE(this.offsets.get(l));t.push(a.buffer),r(this.packfileSha,"hex");let s=Buffer.concat(t),o=await Gn(s),c=Buffer.alloc(20);return c.write(o,"hex"),Buffer.concat([s,c])}async load({pack:t}){this.pack=t}async unload(){this.pack=null}async read({oid:t}){if(!this.offsets.get(t)){if(this.getExternalRefDelta)return this.externalReadDepth++,this.getExternalRefDelta(t);throw new le(`Could not read object ${t} from packfile`)}let r=this.offsets.get(t);return this.readSlice({start:r})}async readSlice({start:t}){if(this.offsetCache[t])return Object.assign({},this.offsetCache[t]);this.readDepth++;let r={16:"commit",32:"tree",48:"blob",64:"tag",96:"ofs_delta",112:"ref_delta"};if(!this.pack)throw new le("Tried to read from a GitPackIndex with no packfile loaded into memory");let n=(await this.pack).slice(t),i=new Ir(n),a=i.readUInt8(),s=a&112,o=r[s];if(o===void 0)throw new le("Unrecognized type: 0b"+s.toString(2));let c=a&15,l=c;a&128&&(l=FM(i,c));let f=null,d=null;if(o==="ofs_delta"){let p=IM(i),m=t-p;({object:f,type:o}=await this.readSlice({start:m}))}if(o==="ref_delta"){let p=i.slice(20).toString("hex");({object:f,type:o}=await this.read({oid:p}))}let h=n.slice(i.tell());if(d=Buffer.from(await o2(h)),d.byteLength!==l)throw new le(`Packfile told us object would have length ${l} but it had length ${d.byteLength}`);return f&&(d=Buffer.from(kM(d,f))),this.readDepth>3&&(this.offsetCache[t]={type:o,object:d}),{type:o,format:"content",object:d}}},eu=Symbol("PackfileCache");async function $M({fs:e,filename:t,getExternalRefDelta:r,emitter:n,emitterPrefix:i}){let a=await e.read(t);return tl.fromIdx({idx:a,getExternalRefDelta:r})}function Ep({fs:e,cache:t,filename:r,getExternalRefDelta:n,emitter:i,emitterPrefix:a}){t[eu]||(t[eu]=new Map);let s=t[eu].get(r);return s||(s=$M({fs:e,filename:r,getExternalRefDelta:n,emitter:i,emitterPrefix:a}),t[eu].set(r,s)),s}async function LM({fs:e,cache:t,gitdir:r,oid:n,format:i="content",getExternalRefDelta:a}){let s=await e.readdir($(r,"objects/pack"));s=s.filter(o=>o.endsWith(".idx"));for(let o of s){let c=`${r}/objects/pack/${o}`,l=await Ep({fs:e,cache:t,filename:c,getExternalRefDelta:a});if(l.error)throw new le(l.error);if(l.offsets.has(n)){if(!l.pack){let f=c.replace(/idx$/,"pack");l.pack=e.read(f)}let u=await l.read({oid:n,getExternalRefDelta:a});return u.format="content",u.source=`objects/pack/${o.replace(/idx$/,"pack")}`,u}}return null}async function qe({fs:e,cache:t,gitdir:r,oid:n,format:i="content"}){let a=u=>qe({fs:e,cache:t,gitdir:r,oid:u}),s;if(n==="4b825dc642cb6eb9a060e54bf8d69288fbee4904"&&(s={format:"wrapped",object:Buffer.from("tree 0\0")}),s||(s=await AM({fs:e,gitdir:r,oid:n})),!s){if(s=await LM({fs:e,cache:t,gitdir:r,oid:n,getExternalRefDelta:a}),!s)throw new Ne(n);return s}if(i==="deflated"||(s.format==="deflated"&&(s.object=Buffer.from(await o2(s.object)),s.format="wrapped"),i==="wrapped"))return s;let o=await Gn(s.object);if(o!==n)throw new le(`SHA check failed! Expected ${n}, computed ${o}`);let{object:c,type:l}=_i.unwrap(s.object);if(s.type=l,s.object=c,s.format="content",i==="content")return s;throw new le(`invalid requested format "${i}"`)}var Qr=class e extends _e{constructor(t,r,n=!0){super(`Failed to create ${t} at ${r} because it already exists.${n?` (Hint: use 'force: true' parameter to overwrite existing ${t}.)`:""}`),this.code=this.name=e.code,this.data={noun:t,where:r,canForce:n}}};Qr.code="AlreadyExistsError";var rl=class e extends _e{constructor(t,r,n){super(`Found multiple ${t} matching "${r}" (${n.join(", ")}). Use a longer abbreviation length to disambiguate them.`),this.code=this.name=e.code,this.data={nouns:t,short:r,matches:n}}};rl.code="AmbiguousError";var nl=class e extends _e{constructor(t){super(`Your local changes to the following files would be overwritten by checkout: ${t.join(", ")}`),this.code=this.name=e.code,this.data={filepaths:t}}};nl.code="CheckoutConflictError";var il=class e extends _e{constructor(t,r){super(`Failed to checkout "${t}" because commit ${r} is not available locally. Do a git fetch to make the branch available locally.`),this.code=this.name=e.code,this.data={ref:t,oid:r}}};il.code="CommitNotFetchedError";var al=class e extends _e{constructor(){super("Empty response from git server."),this.code=this.name=e.code,this.data={}}};al.code="EmptyServerResponseError";var sl=class e extends _e{constructor(){super("A simple fast-forward merge was not possible."),this.code=this.name=e.code,this.data={}}};sl.code="FastForwardError";var ol=class e extends _e{constructor(t,r){super(`One or more branches were not updated: ${t}`),this.code=this.name=e.code,this.data={prettyDetails:t,result:r}}};ol.code="GitPushError";var ds=class e extends _e{constructor(t,r,n){super(`HTTP Error: ${t} ${r}`),this.code=this.name=e.code,this.data={statusCode:t,statusMessage:r,response:n}}};ds.code="HttpError";var xi=class e extends _e{constructor(t){let r="invalid filepath";t==="leading-slash"||t==="trailing-slash"?r='"filepath" parameter should not include leading or trailing directory separators because these can cause problems on some platforms.':t==="directory"&&(r='"filepath" should not be a directory.'),super(r),this.code=this.name=e.code,this.data={reason:t}}};xi.code="InvalidFilepathError";var zn=class e extends _e{constructor(t,r){super(`"${t}" would be an invalid git reference. (Hint: a valid alternative would be "${r}".)`),this.code=this.name=e.code,this.data={ref:t,suggestion:r}}};zn.code="InvalidRefNameError";var ll=class e extends _e{constructor(t){super(`Maximum search depth of ${t} exceeded.`),this.code=this.name=e.code,this.data={depth:t}}};ll.code="MaxDepthError";var hs=class e extends _e{constructor(){super("Merges with conflicts are not supported yet."),this.code=this.name=e.code,this.data={}}};hs.code="MergeNotSupportedError";var ps=class e extends _e{constructor(t,r,n,i){super(`Automatic merge failed with one or more merge conflicts in the following files: ${t.toString()}. Fix conflicts then commit the result.`),this.code=this.name=e.code,this.data={filepaths:t,bothModified:r,deleteByUs:n,deleteByTheirs:i}}};ps.code="MergeConflictError";var zt=class e extends _e{constructor(t){super(`No name was provided for ${t} in the argument or in the .git/config file.`),this.code=this.name=e.code,this.data={role:t}}};zt.code="MissingNameError";var Qt=class e extends _e{constructor(t){super(`The function requires a "${t}" parameter but none was provided.`),this.code=this.name=e.code,this.data={parameter:t}}};Qt.code="MissingParameterError";var cl=class e extends _e{constructor(t){super('There are multiple errors that were thrown by the method. Please refer to the "errors" property to see more'),this.code=this.name=e.code,this.data={errors:t},this.errors=t}};cl.code="MultipleGitError";var la=class e extends _e{constructor(t,r){super(`Expected "${t}" but received "${r}".`),this.code=this.name=e.code,this.data={expected:t,actual:r}}};la.code="ParseError";var ms=class e extends _e{constructor(t){let r="";t==="not-fast-forward"?r=" because it was not a simple fast-forward":t==="tag-exists"&&(r=" because tag already exists"),super(`Push rejected${r}. Use "force: true" to override.`),this.code=this.name=e.code,this.data={reason:t}}};ms.code="PushRejectedError";var yi=class e extends _e{constructor(t,r){super(`Remote does not support the "${t}" so the "${r}" parameter cannot be used.`),this.code=this.name=e.code,this.data={capability:t,parameter:r}}};yi.code="RemoteCapabilityError";var ul=class e extends _e{constructor(t,r){super(`Remote did not reply using the "smart" HTTP protocol. Expected "001e# service=git-upload-pack" but received: ${t}`),this.code=this.name=e.code,this.data={preview:t,response:r}}};ul.code="SmartHttpError";var fl=class e extends _e{constructor(t,r,n){super(`Git remote "${t}" uses an unrecognized transport protocol: "${r}"`),this.code=this.name=e.code,this.data={url:t,transport:r,suggestion:n}}};fl.code="UnknownTransportError";var dl=class e extends _e{constructor(t){super(`Cannot parse remote URL: "${t}"`),this.code=this.name=e.code,this.data={url:t}}};dl.code="UrlParseError";var gs=class e extends _e{constructor(){super("The operation was canceled."),this.code=this.name=e.code,this.data={}}};gs.code="UserCanceledError";var hl=class e extends _e{constructor(t){super(`Could not merge index: Entry for '${t}' is not up to date. Either reset the index entry to HEAD, or stage your unstaged changes.`),this.code=this.name=e.code,this.data={filepath:t}}};hl.code="IndexResetError";var pl=class e extends _e{constructor(t){super(`"${t}" does not point to any commit. You're maybe working on a repository with no commits yet. `),this.code=this.name=e.code,this.data={ref:t}}};pl.code="NoCommitError";var gl=Object.freeze({__proto__:null,AlreadyExistsError:Qr,AmbiguousError:rl,CheckoutConflictError:nl,CommitNotFetchedError:il,EmptyServerResponseError:al,FastForwardError:sl,GitPushError:ol,HttpError:ds,InternalError:le,InvalidFilepathError:xi,InvalidOidError:bi,InvalidRefNameError:zn,MaxDepthError:ll,MergeNotSupportedError:hs,MergeConflictError:ps,MissingNameError:zt,MissingParameterError:Qt,MultipleGitError:cl,NoRefspecError:el,NotFoundError:Ne,ObjectTypeError:Gt,ParseError:la,PushRejectedError:ms,RemoteCapabilityError:yi,SmartHttpError:ul,UnknownTransportError:fl,UnsafeFilepathError:cs,UrlParseError:dl,UserCanceledError:gs,UnmergedPathsError:Qo,IndexResetError:hl,NoCommitError:pl});function gp({name:e,email:t,timestamp:r,timezoneOffset:n}){return n=DM(n),`${e} <${t}> ${r} ${n}`}function DM(e){let t=NM(jM(e));e=Math.abs(e);let r=Math.floor(e/60);e-=r*60;let n=String(r),i=String(e);return n.length<2&&(n="0"+n),i.length<2&&(i="0"+i),(t===-1?"-":"+")+n+i}function NM(e){return Math.sign(e)||(Object.is(e,-0)?-1:1)}function jM(e){return e===0?e:-e}function Un(e){return e=e.replace(/\r/g,""),e=e.replace(/^\n+/,""),e=e.replace(/\n+$/,"")+` +`,e}function ou(e){let[,t,r,n,i]=e.match(/^(.*) <(.*)> (.*) (.*)$/);return{name:t,email:r,timestamp:Number(n),timezoneOffset:BM(i)}}function BM(e){let[,t,r,n]=e.match(/(\+|-)(\d\d)(\d\d)/);return n=(t==="+"?1:-1)*(Number(r)*60+Number(n)),HM(n)}function HM(e){return e===0?e:-e}var pr=class e{constructor(t){if(typeof t=="string")this._tag=t;else if(Buffer.isBuffer(t))this._tag=t.toString("utf8");else if(typeof t=="object")this._tag=e.render(t);else throw new le("invalid type passed to GitAnnotatedTag constructor")}static from(t){return new e(t)}static render(t){return`object ${t.object} +type ${t.type} +tag ${t.tag} +tagger ${gp(t.tagger)} + +${t.message} +${t.gpgsig?t.gpgsig:""}`}justHeaders(){return this._tag.slice(0,this._tag.indexOf(` + +`))}message(){let t=this.withoutSignature();return t.slice(t.indexOf(` + +`)+2)}parse(){return Object.assign(this.headers(),{message:this.message(),gpgsig:this.gpgsig()})}render(){return this._tag}headers(){let t=this.justHeaders().split(` +`),r=[];for(let i of t)i[0]===" "?r[r.length-1]+=` +`+i.slice(1):r.push(i);let n={};for(let i of r){let a=i.slice(0,i.indexOf(" ")),s=i.slice(i.indexOf(" ")+1);Array.isArray(n[a])?n[a].push(s):n[a]=s}return n.tagger&&(n.tagger=ou(n.tagger)),n.committer&&(n.committer=ou(n.committer)),n}withoutSignature(){let t=Un(this._tag);return t.indexOf(` +-----BEGIN PGP SIGNATURE-----`)===-1?t:t.slice(0,t.lastIndexOf(` +-----BEGIN PGP SIGNATURE-----`))}gpgsig(){if(this._tag.indexOf(` +-----BEGIN PGP SIGNATURE-----`)===-1)return;let t=this._tag.slice(this._tag.indexOf("-----BEGIN PGP SIGNATURE-----"),this._tag.indexOf("-----END PGP SIGNATURE-----")+27);return Un(t)}payload(){return this.withoutSignature()+` +`}toObject(){return Buffer.from(this._tag,"utf8")}static async sign(t,r,n){let i=t.payload(),{signature:a}=await r({payload:i,secretKey:n});a=Un(a);let s=i+a;return e.from(s)}};function ap(e){return e.trim().split(` +`).map(t=>" "+t).join(` +`)+` +`}function UM(e){return e.split(` +`).map(t=>t.replace(/^ /,"")).join(` +`)}var tr=class e{constructor(t){if(typeof t=="string")this._commit=t;else if(Buffer.isBuffer(t))this._commit=t.toString("utf8");else if(typeof t=="object")this._commit=e.render(t);else throw new le("invalid type passed to GitCommit constructor")}static fromPayloadSignature({payload:t,signature:r}){let n=e.justHeaders(t),i=e.justMessage(t),a=Un(n+` +gpgsig`+ap(r)+` +`+i);return new e(a)}static from(t){return new e(t)}toObject(){return Buffer.from(this._commit,"utf8")}headers(){return this.parseHeaders()}message(){return e.justMessage(this._commit)}parse(){return Object.assign({message:this.message()},this.headers())}static justMessage(t){return Un(t.slice(t.indexOf(` + +`)+2))}static justHeaders(t){return t.slice(0,t.indexOf(` + +`))}parseHeaders(){let t=e.justHeaders(this._commit).split(` +`),r=[];for(let i of t)i[0]===" "?r[r.length-1]+=` +`+i.slice(1):r.push(i);let n={parent:[]};for(let i of r){let a=i.slice(0,i.indexOf(" ")),s=i.slice(i.indexOf(" ")+1);Array.isArray(n[a])?n[a].push(s):n[a]=s}return n.author&&(n.author=ou(n.author)),n.committer&&(n.committer=ou(n.committer)),n}static renderHeaders(t){let r="";if(t.tree?r+=`tree ${t.tree} +`:r+=`tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 +`,t.parent){if(t.parent.length===void 0)throw new le("commit 'parent' property should be an array");for(let a of t.parent)r+=`parent ${a} +`}let n=t.author;r+=`author ${gp(n)} +`;let i=t.committer||t.author;return r+=`committer ${gp(i)} +`,t.gpgsig&&(r+="gpgsig"+ap(t.gpgsig)),r}static render(t){return e.renderHeaders(t)+` +`+Un(t.message)}render(){return this._commit}withoutSignature(){let t=Un(this._commit);if(t.indexOf(` +gpgsig`)===-1)return t;let r=t.slice(0,t.indexOf(` +gpgsig`)),n=t.slice(t.indexOf(`-----END PGP SIGNATURE----- +`)+28);return Un(r+` +`+n)}isolateSignature(){let t=this._commit.slice(this._commit.indexOf("-----BEGIN PGP SIGNATURE-----"),this._commit.indexOf("-----END PGP SIGNATURE-----")+27);return UM(t)}static async sign(t,r,n){let i=t.withoutSignature(),a=e.justMessage(t._commit),{signature:s}=await r({payload:i,secretKey:n});s=Un(s);let c=e.justHeaders(t._commit)+` +gpgsig`+ap(s)+` +`+a;return e.from(c)}};async function vs({fs:e,cache:t,gitdir:r,oid:n}){if(n==="4b825dc642cb6eb9a060e54bf8d69288fbee4904")return{tree:er.from([]),oid:n};let{type:i,object:a}=await qe({fs:e,cache:t,gitdir:r,oid:n});if(i==="tag")return n=pr.from(a).parse().object,vs({fs:e,cache:t,gitdir:r,oid:n});if(i==="commit")return n=tr.from(a).parse().tree,vs({fs:e,cache:t,gitdir:r,oid:n});if(i!=="tree")throw new Gt(n,i,"tree");return{tree:er.from(a),oid:n}}var vp=class{constructor({fs:t,gitdir:r,ref:n,cache:i}){this.fs=t,this.cache=i,this.gitdir=r,this.mapPromise=(async()=>{let s=new Map,o;try{o=await q.resolve({fs:t,gitdir:r,ref:n})}catch(l){l instanceof Ne&&(o="4b825dc642cb6eb9a060e54bf8d69288fbee4904")}let c=await vs({fs:t,cache:this.cache,gitdir:r,oid:o});return c.type="tree",c.mode="40000",s.set(".",c),s})();let a=this;this.ConstructEntry=class{constructor(o){this._fullpath=o,this._type=!1,this._mode=!1,this._stat=!1,this._content=!1,this._oid=!1}async type(){return a.type(this)}async mode(){return a.mode(this)}async stat(){return a.stat(this)}async content(){return a.content(this)}async oid(){return a.oid(this)}}}async readdir(t){let r=t._fullpath,{fs:n,cache:i,gitdir:a}=this,s=await this.mapPromise,o=s.get(r);if(!o)throw new Error(`No obj for ${r}`);let c=o.oid;if(!c)throw new Error(`No oid for obj ${JSON.stringify(o)}`);if(o.type!=="tree")return null;let{type:l,object:u}=await qe({fs:n,cache:i,gitdir:a,oid:c});if(l!==o.type)throw new Gt(c,l,o.type);let f=er.from(u);for(let d of f)s.set($(r,d.path),d);return f.entries().map(d=>$(r,d.path))}async type(t){if(t._type===!1){let r=await this.mapPromise,{type:n}=r.get(t._fullpath);t._type=n}return t._type}async mode(t){if(t._mode===!1){let r=await this.mapPromise,{mode:n}=r.get(t._fullpath);t._mode=r2(parseInt(n,8))}return t._mode}async stat(t){}async content(t){if(t._content===!1){let r=await this.mapPromise,{fs:n,cache:i,gitdir:a}=this,o=r.get(t._fullpath).oid,{type:c,object:l}=await qe({fs:n,cache:i,gitdir:a,oid:o});c!=="blob"?t._content=void 0:t._content=new Uint8Array(l)}return t._content}async oid(t){if(t._oid===!1){let n=(await this.mapPromise).get(t._fullpath);t._oid=n.oid}return t._oid}};function wi({ref:e="HEAD"}={}){let t=Object.create(null);return Object.defineProperty(t,pu,{value:function({fs:r,gitdir:n,cache:i}){return new vp({fs:r,gitdir:n,ref:e,cache:i})}}),Object.freeze(t),t}var yp=class{constructor({fs:t,dir:r,gitdir:n,cache:i}){this.fs=t,this.cache=i,this.dir=r,this.gitdir=n;let a=this;this.ConstructEntry=class{constructor(o){this._fullpath=o,this._type=!1,this._mode=!1,this._stat=!1,this._content=!1,this._oid=!1}async type(){return a.type(this)}async mode(){return a.mode(this)}async stat(){return a.stat(this)}async content(){return a.content(this)}async oid(){return a.oid(this)}}}async readdir(t){let r=t._fullpath,{fs:n,dir:i}=this,a=await n.readdir($(i,r));return a===null?null:a.map(s=>$(r,s))}async type(t){return t._type===!1&&await t.stat(),t._type}async mode(t){return t._mode===!1&&await t.stat(),t._mode}async stat(t){if(t._stat===!1){let{fs:r,dir:n}=this,i=await r.lstat(`${n}/${t._fullpath}`);if(!i)throw new Error(`ENOENT: no such file or directory, lstat '${t._fullpath}'`);let a=i.isDirectory()?"tree":"blob";a==="blob"&&!i.isFile()&&!i.isSymbolicLink()&&(a="special"),t._type=a,i=us(i),t._mode=i.mode,i.size===-1&&t._actualSize&&(i.size=t._actualSize),t._stat=i}return t._stat}async content(t){if(t._content===!1){let{fs:r,dir:n,gitdir:i}=this;if(await t.type()==="tree")t._content=void 0;else{let s=await(await We.get({fs:r,gitdir:i})).get("core.autocrlf"),o=await r.read(`${n}/${t._fullpath}`,{autocrlf:s});t._actualSize=o.length,t._stat&&t._stat.size===-1&&(t._stat.size=t._actualSize),t._content=new Uint8Array(o)}}return t._content}async oid(t){if(t._oid===!1){let{fs:r,gitdir:n,cache:i}=this,a;await mt.acquire({fs:r,gitdir:n,cache:i},async function(s){let o=s.entriesMap.get(t._fullpath),c=await t.stat(),u=await(await We.get({fs:r,gitdir:n})).get("core.filemode"),f=typeof process!="undefined"?process.platform!=="win32":!0;!o||ru(c,o,u,f)?await t.content()===void 0?a=void 0:(a=await Gn(_i.wrap({type:"blob",object:await t.content()})),o&&a===o.oid&&(!u||c.mode===o.mode)&&ru(c,o,u,f)&&s.insert({filepath:t._fullpath,stats:c,oid:a})):a=o.oid}),t._oid=a}return t._oid}};function gu(){let e=Object.create(null);return Object.defineProperty(e,pu,{value:function({fs:t,dir:r,gitdir:n,cache:i}){return new yp({fs:t,dir:r,gitdir:n,cache:i})}}),Object.freeze(e),e}function GM(e,t){let r=t-e;return Array.from({length:r},(n,i)=>e+i)}var l2=typeof Array.prototype.flat=="undefined"?e=>e.reduce((t,r)=>t.concat(r),[]):e=>e.flat(),wp=class{constructor(){this.value=null}consider(t){t!=null&&(this.value===null?this.value=t:t<this.value&&(this.value=t))}reset(){this.value=null}};function*zM(e){let t=new wp,r,n=[],i=e.length;for(let a=0;a<i;a++)n[a]=e[a].next().value,n[a]!==void 0&&t.consider(n[a]);if(t.value!==null)for(;;){let a=[];r=t.value,t.reset();for(let s=0;s<i;s++)n[s]!==void 0&&n[s]===r?(a[s]=n[s],n[s]=e[s].next().value):a[s]=null,n[s]!==void 0&&t.consider(n[s]);if(yield a,t.value===null)return}}async function ys({fs:e,cache:t,dir:r,gitdir:n,trees:i,map:a=async(c,l)=>l,reduce:s=async(c,l)=>{let u=l2(l);return c!==void 0&&u.unshift(c),u},iterate:o=(c,l)=>Promise.all([...l].map(c))}){let c=i.map(h=>h[pu]({fs:e,dir:r,gitdir:n,cache:t})),l=new Array(c.length).fill("."),u=GM(0,c.length),f=async h=>{u.map(v=>{h[v]=h[v]&&new c[v].ConstructEntry(h[v])});let m=(await Promise.all(u.map(v=>h[v]?c[v].readdir(h[v]):[]))).map(v=>v===null?[]:v).map(v=>v[Symbol.iterator]());return{entries:h,children:zM(m)}},d=async h=>{let{entries:p,children:m}=await f(h),v=p.find(b=>b&&b._fullpath)._fullpath,y=await a(v,p);if(y!==null){let b=await o(d,m);return b=b.filter(x=>x!==void 0),s(y,b)}};return d(l)}async function bp(e,t){let r=await e.readdir(t);r==null?await e.rm(t):r.length?await Promise.all(r.map(n=>{let i=$(t,n);return e.lstat(i).then(a=>{if(a)return a.isDirectory()?bp(e,i):e.rm(i)})})).then(()=>e.rmdir(t)):await e.rmdir(t)}function VM(e){return WM(e)&&Hw(e.then)&&Hw(e.catch)}function WM(e){return e&&typeof e=="object"}function Hw(e){return typeof e=="function"}function Uw(e){return VM((r=>{try{return r.readFile().catch(n=>n)}catch(n){return n}})(e))}var Gw=["readFile","writeFile","mkdir","rmdir","unlink","stat","lstat","readdir","readlink","symlink"];function zw(e,t){if(Uw(t))for(let r of Gw)e[`_${r}`]=t[r].bind(t);else for(let r of Gw)e[`_${r}`]=(0,tu.default)(t[r].bind(t));Uw(t)?t.rm?e._rm=t.rm.bind(t):t.rmdir.length>1?e._rm=t.rmdir.bind(t):e._rm=bp.bind(null,e):t.rm?e._rm=(0,tu.default)(t.rm.bind(t)):t.rmdir.length>2?e._rm=(0,tu.default)(t.rmdir.bind(t)):e._rm=bp.bind(null,e)}var X=class{constructor(t){if(typeof t._original_unwrapped_fs!="undefined")return t;let r=Object.getOwnPropertyDescriptor(t,"promises");r&&r.enumerable?zw(this,t.promises):zw(this,t),this._original_unwrapped_fs=t}async exists(t,r={}){try{return await this._stat(t),!0}catch(n){if(n.code==="ENOENT"||n.code==="ENOTDIR")return!1;throw console.log('Unhandled error in "FileSystem.exists()" function',n),n}}async read(t,r={}){try{let n=await this._readFile(t,r);if(r.autocrlf==="true")try{n=new TextDecoder("utf8",{fatal:!0}).decode(n),n=n.replace(/\r\n/g,` +`),n=new TextEncoder().encode(n)}catch(i){}return typeof n!="string"&&(n=Buffer.from(n)),n}catch(n){return null}}async write(t,r,n={}){try{await this._writeFile(t,r,n);return}catch(i){await this.mkdir(fs(t)),await this._writeFile(t,r,n)}}async mkdir(t,r=!1){try{await this._mkdir(t);return}catch(n){if(n===null||n.code==="EEXIST")return;if(r)throw n;if(n.code==="ENOENT"){let i=fs(t);if(i==="."||i==="/"||i===t)throw n;await this.mkdir(i),await this.mkdir(t,!0)}}}async rm(t){try{await this._unlink(t)}catch(r){if(r.code!=="ENOENT")throw r}}async rmdir(t,r){try{r&&r.recursive?await this._rm(t,r):await this._rmdir(t)}catch(n){if(n.code!=="ENOENT")throw n}}async readdir(t){try{let r=await this._readdir(t);return r.sort(hu),r}catch(r){return r.code==="ENOTDIR"?null:[]}}async readdirDeep(t){let r=await this._readdir(t);return(await Promise.all(r.map(async i=>{let a=t+"/"+i;return(await this._stat(a)).isDirectory()?this.readdirDeep(a):a}))).reduce((i,a)=>i.concat(a),[])}async lstat(t){try{return await this._lstat(t)}catch(r){if(r.code==="ENOENT")return null;throw r}}async readlink(t,r={encoding:"buffer"}){try{let n=await this._readlink(t,r);return Buffer.isBuffer(n)?n:Buffer.from(n)}catch(n){if(n.code==="ENOENT")return null;throw n}}async writelink(t,r){return this._symlink(r.toString("utf8"),t)}};function C(e,t){if(t===void 0)throw new Qt(e)}async function lu(e,t){return!e&&!t?!1:e&&!t||!e&&t?!0:!(await e.type()==="tree"&&await t.type()==="tree"||await e.type()===await t.type()&&await e.mode()===await t.mode()&&await e.oid()===await t.oid())}async function qM({fs:e,dir:t,gitdir:r=$(t,".git"),commit:n="HEAD",cache:i={}}){try{C("fs",e),C("dir",t),C("gitdir",r);let a=new X(e),s=[wi({ref:n}),gu(),mu()],o=[];await mt.acquire({fs:a,gitdir:r,cache:i},async function(l){o=l.unmergedPaths});let c=await ys({fs:a,cache:i,dir:t,gitdir:r,trees:s,map:async function(l,[u,f,d]){let h=!await lu(f,d),p=o.includes(l),m=!await lu(d,u);if(h||p)return u?{path:l,mode:await u.mode(),oid:await u.oid(),type:await u.type(),content:await u.content()}:void 0;if(m)return!1;throw new hl(l)}});await mt.acquire({fs:a,gitdir:r,cache:i},async function(l){for(let u of c)if(u!==!1){if(!u){await a.rmdir(`${t}/${u.path}`,{recursive:!0}),l.delete({filepath:u.path});continue}if(u.type==="blob"){let f=new TextDecoder().decode(u.content);await a.write(`${t}/${u.path}`,f,{mode:u.mode}),l.insert({filepath:u.path,oid:u.oid,stage:0})}}})}catch(a){throw a.caller="git.abortMerge",a}}var ws=class{static async isIgnored({fs:t,dir:r,gitdir:n=$(r,".git"),filepath:i}){if(nu(i)===".git")return!0;if(i===".")return!1;let a="",s=$(n,"info","exclude");await t.exists(s)&&(a=await t.read(s,"utf8"));let o=[{gitignore:$(r,".gitignore"),filepath:i}],c=i.split("/").filter(Boolean);for(let u=1;u<c.length;u++){let f=c.slice(0,u).join("/"),d=c.slice(u).join("/");o.push({gitignore:$(r,f,".gitignore"),filepath:d})}let l=!1;for(let u of o){let f;try{f=await t.read(u.gitignore,"utf8")}catch(p){if(p.code==="NOENT")continue}let d=(0,Qw.default)().add(a);d.add(f);let h=fs(u.filepath);if(h!=="."&&d.ignores(h))return!0;l?l=!d.test(u.filepath).unignored:l=d.test(u.filepath).ignored}return l}};async function YM({fs:e,gitdir:t,object:r,format:n,oid:i}){if(n!=="deflated")throw new le("GitObjectStoreLoose expects objects to write to be in deflated format");let a=`objects/${i.slice(0,2)}/${i.slice(2)}`,s=`${t}/${a}`;await e.exists(s)||await e.write(s,r)}var sp=null;async function c2(e){return sp===null&&(sp=ZM()),sp?XM(e):du.default.deflate(e)}async function XM(e){let t=new CompressionStream("deflate"),r=new Blob([e]).stream().pipeThrough(t);return new Uint8Array(await new Response(r).arrayBuffer())}function ZM(){try{return new CompressionStream("deflate").writable.close(),new Blob([]).stream().cancel(),!0}catch(e){return!1}}async function mr({fs:e,gitdir:t,type:r,object:n,format:i="content",oid:a=void 0,dryRun:s=!1}){return i!=="deflated"&&(i!=="wrapped"&&(n=_i.wrap({type:r,object:n})),a=await Gn(n),n=Buffer.from(await c2(n))),s||await YM({fs:e,gitdir:t,object:n,format:"deflated",oid:a}),a}function KM(e){let t;for(;~(t=e.indexOf(92));)e[t]=47;return e}async function JM({fs:e,dir:t,gitdir:r=$(t,".git"),filepath:n,cache:i={},force:a=!1,parallel:s=!0}){try{C("fs",e),C("dir",t),C("gitdir",r),C("filepath",n);let o=new X(e);await mt.acquire({fs:o,gitdir:r,cache:i},async c=>_p({dir:t,gitdir:r,fs:o,filepath:n,index:c,force:a,parallel:s}))}catch(o){throw o.caller="git.add",o}}async function _p({dir:e,gitdir:t,fs:r,filepath:n,index:i,force:a,parallel:s}){n=Array.isArray(n)?n:[n];let o=n.map(async f=>{if(!a&&await ws.isIgnored({fs:r,dir:e,gitdir:t,filepath:f}))return;let d=await r.lstat($(e,f));if(!d)throw new Ne(f);if(d.isDirectory()){let h=await r.readdir($(e,f));if(s){let p=h.map(m=>_p({dir:e,gitdir:t,fs:r,filepath:[$(f,m)],index:i,force:a,parallel:s}));await Promise.all(p)}else for(let p of h)await _p({dir:e,gitdir:t,fs:r,filepath:[$(f,p)],index:i,force:a,parallel:s})}else{let p=await(await We.get({fs:r,gitdir:t})).get("core.autocrlf"),m=d.isSymbolicLink()?await r.readlink($(e,f)).then(KM):await r.read($(e,f),{autocrlf:p});if(m===null)throw new Ne(f);let v=await mr({fs:r,gitdir:t,type:"blob",object:m});i.insert({filepath:f,stats:d,oid:v})}}),c=await Promise.allSettled(o),l=c.filter(f=>f.status==="rejected").map(f=>f.reason);if(l.length>1)throw new cl(l);if(l.length===1)throw l[0];return c.filter(f=>f.status==="fulfilled"&&f.value).map(f=>f.value)}async function ml({fs:e,gitdir:t,path:r}){return(await We.get({fs:e,gitdir:t})).get(r)}function u2(e,...t){for(let r of t)if(r)for(let n of Object.keys(r)){let i=r[n];i!==void 0&&(e[n]=i)}return e}async function ca({fs:e,gitdir:t,author:r,commit:n}){let i=Math.floor(Date.now()/1e3),a={name:await ml({fs:e,gitdir:t,path:"user.name"}),email:await ml({fs:e,gitdir:t,path:"user.email"})||"",timestamp:i,timezoneOffset:new Date(i*1e3).getTimezoneOffset()},s=u2({},a,n?n.author:void 0,r);if(s.name!==void 0)return s}async function bs({fs:e,gitdir:t,author:r,committer:n,commit:i}){let a=Math.floor(Date.now()/1e3),s={name:await ml({fs:e,gitdir:t,path:"user.name"}),email:await ml({fs:e,gitdir:t,path:"user.email"})||"",timestamp:a,timezoneOffset:new Date(a*1e3).getTimezoneOffset()},o=u2({},s,i?i.committer:void 0,r,n);if(o.name!==void 0)return o}async function f2({fs:e,cache:t,gitdir:r,oid:n}){let{type:i,object:a}=await qe({fs:e,cache:t,gitdir:r,oid:n});if(i==="tag")return n=pr.from(a).parse().object,f2({fs:e,cache:t,gitdir:r,oid:n});if(i!=="commit")throw new Gt(n,i,"commit");return{commit:tr.from(a),oid:n}}async function cu({fs:e,cache:t,gitdir:r,oid:n}){let{commit:i,oid:a}=await f2({fs:e,cache:t,gitdir:r,oid:n});return{oid:a,commit:i.parse(),payload:i.withoutSignature()}}async function vu({fs:e,cache:t,onSign:r,gitdir:n,message:i,author:a,committer:s,signingKey:o,amend:c=!1,dryRun:l=!1,noUpdateBranch:u=!1,ref:f,parent:d,tree:h}){let p=!1;f||(f=await q.resolve({fs:e,gitdir:n,ref:"HEAD",depth:2}));let m,v;try{m=await q.resolve({fs:e,gitdir:n,ref:f}),v=await cu({fs:e,gitdir:n,oid:m,cache:{}})}catch(x){p=!0}if(c&&p)throw new pl(f);let y=c?await ca({fs:e,gitdir:n,author:a,commit:v.commit}):await ca({fs:e,gitdir:n,author:a});if(!y)throw new zt("author");let b=c?await bs({fs:e,gitdir:n,author:y,committer:s,commit:v.commit}):await bs({fs:e,gitdir:n,author:y,committer:s});if(!b)throw new zt("committer");return mt.acquire({fs:e,gitdir:n,cache:t,allowUnmerged:!1},async function(x){let _=i2(x.entries).get(".");if(h||(h=await d2({fs:e,gitdir:n,inode:_,dryRun:l})),d?d=await Promise.all(d.map(A=>q.resolve({fs:e,gitdir:n,ref:A}))):c?d=v.commit.parent:d=m?[m]:[],!i)if(c)i=v.commit.message;else throw new Qt("message");let k=tr.from({tree:h,parent:d,author:y,committer:b,message:i});o&&(k=await tr.sign(k,r,o));let w=await mr({fs:e,gitdir:n,type:"commit",object:k.toObject(),dryRun:l});return!u&&!l&&await q.writeRef({fs:e,gitdir:n,ref:f,value:w}),w})}async function d2({fs:e,gitdir:t,inode:r,dryRun:n}){let i=r.children;for(let c of i)c.type==="tree"&&(c.metadata.mode="040000",c.metadata.oid=await d2({fs:e,gitdir:t,inode:c,dryRun:n}));let a=i.map(c=>({mode:c.metadata.mode,path:c.basename,oid:c.metadata.oid,type:c.type})),s=er.from(a);return await mr({fs:e,gitdir:t,type:"tree",object:s.toObject(),dryRun:n})}async function vl({fs:e,cache:t,gitdir:r,oid:n,filepath:i}){if(i.startsWith("/"))throw new xi("leading-slash");if(i.endsWith("/"))throw new xi("trailing-slash");let a=n,s=await vs({fs:e,cache:t,gitdir:r,oid:n}),o=s.tree;if(i==="")n=s.oid;else{let c=i.split("/");n=await h2({fs:e,cache:t,gitdir:r,tree:o,pathArray:c,oid:a,filepath:i})}return n}async function h2({fs:e,cache:t,gitdir:r,tree:n,pathArray:i,oid:a,filepath:s}){let o=i.shift();for(let c of n)if(c.path===o){if(i.length===0)return c.oid;{let{type:l,object:u}=await qe({fs:e,cache:t,gitdir:r,oid:c.oid});if(l!=="tree")throw new Gt(a,l,"tree",s);return n=er.from(u),h2({fs:e,cache:t,gitdir:r,tree:n,pathArray:i,oid:a,filepath:s})}}throw new Ne(`file or directory found at "${a}:${s}"`)}async function Ss({fs:e,cache:t,gitdir:r,oid:n,filepath:i=void 0}){i!==void 0&&(n=await vl({fs:e,cache:t,gitdir:r,oid:n,filepath:i}));let{tree:a,oid:s}=await vs({fs:e,cache:t,gitdir:r,oid:n});return{oid:s,tree:a.entries()}}async function Ap({fs:e,gitdir:t,tree:r}){let n=er.from(r).toObject();return await mr({fs:e,gitdir:t,type:"tree",object:n,format:"content"})}async function QM({fs:e,cache:t,onSign:r,gitdir:n,ref:i,oid:a,note:s,force:o,author:c,committer:l,signingKey:u}){let f;try{f=await q.resolve({gitdir:n,fs:e,ref:i})}catch(y){if(!(y instanceof Ne))throw y}let h=(await Ss({fs:e,cache:t,gitdir:n,oid:f||"4b825dc642cb6eb9a060e54bf8d69288fbee4904"})).tree;if(o)h=h.filter(y=>y.path!==a);else for(let y of h)if(y.path===a)throw new Qr("note",a);typeof s=="string"&&(s=Buffer.from(s,"utf8"));let p=await mr({fs:e,gitdir:n,type:"blob",object:s,format:"content"});h.push({mode:"100644",path:a,oid:p,type:"blob"});let m=await Ap({fs:e,gitdir:n,tree:h});return await vu({fs:e,cache:t,onSign:r,gitdir:n,ref:i,tree:m,parent:f&&[f],message:`Note added by 'isomorphic-git addNote' +`,author:c,committer:l,signingKey:u})}async function eO({fs:e,onSign:t,dir:r,gitdir:n=$(r,".git"),ref:i="refs/notes/commits",oid:a,note:s,force:o,author:c,committer:l,signingKey:u,cache:f={}}){try{C("fs",e),C("gitdir",n),C("oid",a),C("note",s),u&&C("onSign",t);let d=new X(e),h=await ca({fs:d,gitdir:n,author:c});if(!h)throw new zt("author");let p=await bs({fs:d,gitdir:n,author:h,committer:l});if(!p)throw new zt("committer");return await QM({fs:new X(d),cache:f,onSign:t,gitdir:n,ref:i,oid:a,note:s,force:o,author:h,committer:p,signingKey:u})}catch(d){throw d.caller="git.addNote",d}}async function p2({fs:e,gitdir:t,remote:r,url:n,force:i}){if(r!==Jr.default.clean(r))throw new zn(r,Jr.default.clean(r));let a=await We.get({fs:e,gitdir:t});if(!i&&(await a.getSubsections("remote")).includes(r)&&n!==await a.get(`remote.${r}.url`))throw new Qr("remote",r);await a.set(`remote.${r}.url`,n),await a.set(`remote.${r}.fetch`,`+refs/heads/*:refs/remotes/${r}/*`),await We.save({fs:e,gitdir:t,config:a})}async function tO({fs:e,dir:t,gitdir:r=$(t,".git"),remote:n,url:i,force:a=!1}){try{return C("fs",e),C("gitdir",r),C("remote",n),C("url",i),await p2({fs:new X(e),gitdir:r,remote:n,url:i,force:a})}catch(s){throw s.caller="git.addRemote",s}}async function rO({fs:e,cache:t,onSign:r,gitdir:n,ref:i,tagger:a,message:s=i,gpgsig:o,object:c,signingKey:l,force:u=!1}){if(i=i.startsWith("refs/tags/")?i:`refs/tags/${i}`,!u&&await q.exists({fs:e,gitdir:n,ref:i}))throw new Qr("tag",i);let f=await q.resolve({fs:e,gitdir:n,ref:c||"HEAD"}),{type:d}=await qe({fs:e,cache:t,gitdir:n,oid:f}),h=pr.from({object:f,type:d,tag:i.replace("refs/tags/",""),tagger:a,message:s,gpgsig:o});l&&(h=await pr.sign(h,r,l));let p=await mr({fs:e,gitdir:n,type:"tag",object:h.toObject()});await q.writeRef({fs:e,gitdir:n,ref:i,value:p})}async function nO({fs:e,onSign:t,dir:r,gitdir:n=$(r,".git"),ref:i,tagger:a,message:s=i,gpgsig:o,object:c,signingKey:l,force:u=!1,cache:f={}}){try{C("fs",e),C("gitdir",n),C("ref",i),l&&C("onSign",t);let d=new X(e),h=await ca({fs:d,gitdir:n,author:a});if(!h)throw new zt("tagger");return await rO({fs:d,cache:f,onSign:t,gitdir:n,ref:i,tagger:h,message:s,gpgsig:o,object:c,signingKey:l,force:u})}catch(d){throw d.caller="git.annotatedTag",d}}async function iO({fs:e,gitdir:t,ref:r,object:n,checkout:i=!1,force:a=!1}){if(r!==Jr.default.clean(r))throw new zn(r,Jr.default.clean(r));let s=`refs/heads/${r}`;if(!a&&await q.exists({fs:e,gitdir:t,ref:s}))throw new Qr("branch",r,!1);let o;try{o=await q.resolve({fs:e,gitdir:t,ref:n||"HEAD"})}catch(c){}o&&await q.writeRef({fs:e,gitdir:t,ref:s,value:o}),i&&await q.writeSymbolicRef({fs:e,gitdir:t,ref:"HEAD",value:s})}async function aO({fs:e,dir:t,gitdir:r=$(t,".git"),ref:n,object:i,checkout:a=!1,force:s=!1}){try{return C("fs",e),C("gitdir",r),C("ref",n),await iO({fs:new X(e),gitdir:r,ref:n,object:i,checkout:a,force:s})}catch(o){throw o.caller="git.branch",o}}var m2=(e,t)=>e==="."||t==null||t.length===0||t==="."?!0:t.length>=e.length?t.startsWith(e):e.startsWith(t);async function kp({fs:e,cache:t,onProgress:r,onPostCheckout:n,dir:i,gitdir:a,remote:s,ref:o,filepaths:c,noCheckout:l,noUpdateHead:u,dryRun:f,force:d,track:h=!0}){let p;if(n)try{p=await q.resolve({fs:e,gitdir:a,ref:"HEAD"})}catch(v){p="0000000000000000000000000000000000000000"}let m;try{m=await q.resolve({fs:e,gitdir:a,ref:o})}catch(v){if(o==="HEAD")throw v;let y=`${s}/${o}`;if(m=await q.resolve({fs:e,gitdir:a,ref:y}),h){let b=await We.get({fs:e,gitdir:a});await b.set(`branch.${o}.remote`,s),await b.set(`branch.${o}.merge`,`refs/heads/${o}`),await We.save({fs:e,gitdir:a,config:b})}await q.writeRef({fs:e,gitdir:a,ref:`refs/heads/${o}`,value:m})}if(!l){let v;try{v=await sO({fs:e,cache:t,onProgress:r,dir:i,gitdir:a,ref:o,force:d,filepaths:c})}catch(_){throw _ instanceof Ne&&_.data.what===m?new il(o,m):_}let y=v.filter(([_])=>_==="conflict").map(([_,k])=>k);if(y.length>0)throw new nl(y);let b=v.filter(([_])=>_==="error").map(([_,k])=>k);if(b.length>0)throw new le(b.join(", "));if(f){n&&await n({previousHead:p,newHead:m,type:c!=null&&c.length>0?"file":"branch"});return}let x=0,E=v.length;await mt.acquire({fs:e,gitdir:a,cache:t},async function(_){await Promise.all(v.filter(([k])=>k==="delete"||k==="delete-index").map(async function([k,w]){let A=`${i}/${w}`;k==="delete"&&await e.rm(A),_.delete({filepath:w}),r&&await r({phase:"Updating workdir",loaded:++x,total:E})}))}),await mt.acquire({fs:e,gitdir:a,cache:t},async function(_){for(let[k,w]of v)if(k==="rmdir"||k==="rmdir-index"){let A=`${i}/${w}`;try{k==="rmdir-index"&&_.delete({filepath:w}),await e.rmdir(A),r&&await r({phase:"Updating workdir",loaded:++x,total:E})}catch(S){if(S.code==="ENOTEMPTY")console.log(`Did not delete ${w} because directory is not empty`);else throw S}}}),await Promise.all(v.filter(([_])=>_==="mkdir"||_==="mkdir-index").map(async function([_,k]){let w=`${i}/${k}`;await e.mkdir(w),r&&await r({phase:"Updating workdir",loaded:++x,total:E})})),await mt.acquire({fs:e,gitdir:a,cache:t},async function(_){await Promise.all(v.filter(([k])=>k==="create"||k==="create-index"||k==="update"||k==="mkdir-index").map(async function([k,w,A,S,T]){let P=`${i}/${w}`;try{if(k!=="create-index"&&k!=="mkdir-index"){let{object:j}=await qe({fs:e,cache:t,gitdir:a,oid:A});if(T&&await e.rm(P),S===33188)await e.write(P,j);else if(S===33261)await e.write(P,j,{mode:511});else if(S===40960)await e.writelink(P,j);else throw new le(`Invalid mode 0o${S.toString(8)} detected in blob ${A}`)}let O=await e.lstat(P);S===33261&&(O.mode=493),k==="mkdir-index"&&(O.mode=57344),_.insert({filepath:w,stats:O,oid:A}),r&&await r({phase:"Updating workdir",loaded:++x,total:E})}catch(O){console.log(O)}}))}),n&&await n({previousHead:p,newHead:m,type:c!=null&&c.length>0?"file":"branch"})}if(!u){let v=await q.expand({fs:e,gitdir:a,ref:o});v.startsWith("refs/heads")?await q.writeSymbolicRef({fs:e,gitdir:a,ref:"HEAD",value:v}):await q.writeRef({fs:e,gitdir:a,ref:"HEAD",value:m})}}async function sO({fs:e,cache:t,onProgress:r,dir:n,gitdir:i,ref:a,force:s,filepaths:o}){let c=0;return ys({fs:e,cache:t,dir:n,gitdir:i,trees:[wi({ref:a}),gu(),mu()],map:async function(l,[u,f,d]){if(l===".")return;if(o&&!o.some(p=>m2(l,p)))return null;switch(r&&await r({phase:"Analyzing workdir",loaded:++c}),[!!d,!!u,!!f].map(Number).join("")){case"000":return;case"001":return s&&o&&o.includes(l)?["delete",l]:void 0;case"010":switch(await u.type()){case"tree":return["mkdir",l];case"blob":return["create",l,await u.oid(),await u.mode()];case"commit":return["mkdir-index",l,await u.oid(),await u.mode()];default:return["error",`new entry Unhandled type ${await u.type()}`]}case"011":switch(`${await u.type()}-${await f.type()}`){case"tree-tree":return;case"tree-blob":case"blob-tree":return["conflict",l];case"blob-blob":return await u.oid()!==await f.oid()?s?["update",l,await u.oid(),await u.mode(),await u.mode()!==await f.mode()]:["conflict",l]:await u.mode()!==await f.mode()?s?["update",l,await u.oid(),await u.mode(),!0]:["conflict",l]:["create-index",l,await u.oid(),await u.mode()];case"commit-tree":return;case"commit-blob":return["conflict",l];default:return["error",`new entry Unhandled type ${u.type}`]}case"100":return["delete-index",l];case"101":switch(await d.type()){case"tree":return["rmdir",l];case"blob":return await d.oid()!==await f.oid()?s?["delete",l]:["conflict",l]:["delete",l];case"commit":return["rmdir-index",l];default:return["error",`delete entry Unhandled type ${await d.type()}`]}case"110":case"111":switch(`${await d.type()}-${await u.type()}`){case"tree-tree":return;case"blob-blob":{if(await d.oid()===await u.oid()&&await d.mode()===await u.mode()&&!s)return;if(f){if(await f.oid()!==await d.oid()&&await f.oid()!==await u.oid())return s?["update",l,await u.oid(),await u.mode(),await u.mode()!==await f.mode()]:["conflict",l]}else if(s)return["update",l,await u.oid(),await u.mode(),await u.mode()!==await d.mode()];return await u.mode()!==await d.mode()?["update",l,await u.oid(),await u.mode(),!0]:await u.oid()!==await d.oid()?["update",l,await u.oid(),await u.mode(),!1]:void 0}case"tree-blob":return["update-dir-to-blob",l,await u.oid()];case"blob-tree":return["update-blob-to-tree",l];case"commit-commit":return["mkdir-index",l,await u.oid(),await u.mode()];default:return["error",`update entry Unhandled type ${await d.type()}-${await u.type()}`]}}},reduce:async function(l,u){return u=l2(u),l?l&&l[0]==="rmdir"?(u.push(l),u):(u.unshift(l),u):u}})}async function oO({fs:e,onProgress:t,onPostCheckout:r,dir:n,gitdir:i=$(n,".git"),remote:a="origin",ref:s,filepaths:o,noCheckout:c=!1,noUpdateHead:l=s===void 0,dryRun:u=!1,force:f=!1,track:d=!0,cache:h={}}){try{C("fs",e),C("dir",n),C("gitdir",i);let p=s||"HEAD";return await kp({fs:new X(e),cache:h,onProgress:t,onPostCheckout:r,dir:n,gitdir:i,remote:a,ref:p,filepaths:o,noCheckout:c,noUpdateHead:l,dryRun:u,force:f,track:d})}catch(p){throw p.caller="git.checkout",p}}var lO=new RegExp("^refs/(heads/|tags/|remotes/)?(.*)");function oa(e){let t=lO.exec(e);return t?t[1]==="remotes/"&&e.endsWith("/HEAD")?t[2].slice(0,-5):t[2]:e}async function fa({fs:e,gitdir:t,fullname:r=!1,test:n=!1}){let i=await q.resolve({fs:e,gitdir:t,ref:"HEAD",depth:2});if(n)try{await q.resolve({fs:e,gitdir:t,ref:i})}catch(a){return}if(i.startsWith("refs/"))return r?i:oa(i)}function cO(e){return e=e.replace(/^git@([^:]+):/,"https://$1/"),e=e.replace(/^ssh:\/\//,"https://"),e}function g2({username:e="",password:t=""}){return`Basic ${Buffer.from(`${e}:${t}`).toString("base64")}`}async function yl(e,t){let r=s2(e);for(;;){let{value:n,done:i}=await r.next();if(n&&await t(n),i)break}r.return&&r.return()}async function uu(e){let t=0,r=[];await yl(e,a=>{r.push(a),t+=a.byteLength});let n=new Uint8Array(t),i=0;for(let a of r)n.set(a,i),i+=a.byteLength;return n}function Vw(e){let t=e.match(/^https?:\/\/([^/]+)@/);if(t==null)return{url:e,auth:{}};t=t[1];let[r,n]=t.split(":");return e=e.replace(`${t}@`,""),{url:e,auth:{username:r,password:n}}}function xp(e,t){let r=t.toString(16);return"0".repeat(e-r.length)+r}var Ve=class{static flush(){return Buffer.from("0000","utf8")}static delim(){return Buffer.from("0001","utf8")}static encode(t){typeof t=="string"&&(t=Buffer.from(t));let r=t.length+4,n=xp(4,r);return Buffer.concat([Buffer.from(n,"utf8"),t])}static streamReader(t){let r=new su(t);return async function(){try{let i=await r.read(4);if(i==null)return!0;if(i=parseInt(i.toString("utf8"),16),i===0||i===1)return null;let a=await r.read(i-4);return a==null?!0:a}catch(i){return t.error=i,!0}}}};async function Ww(e){let t={},r;for(;r=await e(),r!==!0;){if(r===null)continue;r=r.toString("utf8").replace(/\n$/,"");let n=r.indexOf("=");if(n>-1){let i=r.slice(0,n),a=r.slice(n+1);t[i]=a}else t[r]=!0}return{protocolVersion:2,capabilities2:t}}async function qw(e,{service:t}){let r=new Set,n=new Map,i=new Map,a=Ve.streamReader(e),s=await a();for(;s===null;)s=await a();if(s===!0)throw new al;if(s.includes("version 2"))return Ww(a);if(s.toString("utf8").replace(/\n$/,"")!==`# service=${t}`)throw new la(`# service=${t}\\n`,s.toString("utf8"));let o=await a();for(;o===null;)o=await a();if(o===!0)return{capabilities:r,refs:n,symrefs:i};if(o=o.toString("utf8"),o.includes("version 2"))return Ww(a);let[c,l]=op(o,"\0","\\x00");if(l.split(" ").map(u=>r.add(u)),c!=="0000000000000000000000000000000000000000 capabilities^{}"){let[u,f]=op(c," "," ");for(n.set(f,u);;){let d=await a();if(d===!0)break;if(d!==null){let[h,p]=op(d.toString("utf8")," "," ");n.set(p,h)}}}for(let u of r)if(u.startsWith("symref=")){let f=u.match(/symref=([^:]+):(.*)/);f.length===3&&i.set(f[1],f[2])}return{protocolVersion:1,capabilities:r,refs:n,symrefs:i}}function op(e,t,r){let n=e.trim().split(t);if(n.length!==2)throw new la(`Two strings separated by '${r}'`,e.toString("utf8"));return n}var Yw=(e,t)=>e.endsWith("?")?`${e}${t}`:`${e}/${t.replace(/^https?:\/\//,"")}`,Xw=(e,t)=>{(t.username||t.password)&&(e.Authorization=g2(t)),t.headers&&Object.assign(e,t.headers)},lp=async e=>{try{let t=Buffer.from(await uu(e.body)),r=t.toString("utf8");return{preview:r.length<256?r:r.slice(0,256)+"...",response:r,data:t}}catch(t){return{}}},_s=class{static async capabilities(){return["discover","connect"]}static async discover({http:t,onProgress:r,onAuth:n,onAuthSuccess:i,onAuthFailure:a,corsProxy:s,service:o,url:c,headers:l,protocolVersion:u}){let{url:f,auth:d}=Vw(c),h=s?Yw(s,f):f;(d.username||d.password)&&(l.Authorization=g2(d)),u===2&&(l["Git-Protocol"]="version=2");let p,m,v=!1;do if(p=await t.request({onProgress:r,method:"GET",url:`${h}/info/refs?service=${o}`,headers:l}),m=!1,p.statusCode===401||p.statusCode===203){let y=v?a:n;if(y){if(d=await y(f,{...d,headers:{...l}}),d&&d.cancel)throw new gs;d&&(Xw(l,d),v=!0,m=!0)}}else p.statusCode===200&&v&&i&&await i(f,d);while(m);if(p.statusCode!==200){let{response:y}=await lp(p);throw new ds(p.statusCode,p.statusMessage,y)}if(p.headers["content-type"]===`application/x-${o}-advertisement`){let y=await qw(p.body,{service:o});return y.auth=d,y}else{let{preview:y,response:b,data:x}=await lp(p);try{let E=await qw([x],{service:o});return E.auth=d,E}catch(E){throw new ul(y,b)}}}static async connect({http:t,onProgress:r,corsProxy:n,service:i,url:a,auth:s,body:o,headers:c}){let l=Vw(a);l&&(a=l.url),n&&(a=Yw(n,a)),c["content-type"]=`application/x-${i}-request`,c.accept=`application/x-${i}-result`,Xw(c,s);let u=await t.request({onProgress:r,method:"POST",url:`${a}/${i}`,body:o,headers:c});if(u.statusCode!==200){let{response:f}=lp(u);throw new ds(u.statusCode,u.statusMessage,f)}return u}};function uO({url:e}){if(e.startsWith("git@"))return{transport:"ssh",address:e};let t=e.match(/(\w+)(:\/\/|::)(.*)/);if(t!==null){if(t[2]==="://")return{transport:t[1],address:t[0]};if(t[2]==="::")return{transport:t[1],address:t[3]}}}var xs=class{static getRemoteHelperFor({url:t}){let r=new Map;r.set("http",_s),r.set("https",_s);let n=uO({url:t});if(!n)throw new dl(t);if(r.has(n.transport))return r.get(n.transport);throw new fl(t,n.transport,n.transport==="ssh"?cO(t):void 0)}},sa=null,ua=class{static async read({fs:t,gitdir:r}){sa===null&&(sa=new Jo.default);let n=$(r,"shallow"),i=new Set;return await sa.acquire(n,async function(){let a=await t.read(n,{encoding:"utf8"});if(a===null||a.trim()==="")return i;a.trim().split(` +`).map(s=>i.add(s))}),i}static async write({fs:t,gitdir:r,oids:n}){sa===null&&(sa=new Jo.default);let i=$(r,"shallow");if(n.size>0){let a=[...n].join(` +`)+` +`;await sa.acquire(i,async function(){await t.write(i,a,{encoding:"utf8"})})}else await sa.acquire(i,async function(){await t.rm(i)})}};async function fO({fs:e,gitdir:t,oid:r}){let n=`objects/${r.slice(0,2)}/${r.slice(2)}`;return e.exists(`${t}/${n}`)}async function dO({fs:e,cache:t,gitdir:r,oid:n,getExternalRefDelta:i}){let a=await e.readdir($(r,"objects/pack"));a=a.filter(s=>s.endsWith(".idx"));for(let s of a){let o=`${r}/objects/pack/${s}`,c=await Ep({fs:e,cache:t,filename:o,getExternalRefDelta:i});if(c.error)throw new le(c.error);if(c.offsets.has(n))return!0}return!1}async function Zw({fs:e,cache:t,gitdir:r,oid:n,format:i="content"}){let a=o=>qe({fs:e,cache:t,gitdir:r,oid:o}),s=await fO({fs:e,gitdir:r,oid:n});return s||(s=await dO({fs:e,cache:t,gitdir:r,oid:n,getExternalRefDelta:a})),s}function hO(e){let i="5041434b"+"00000002"+"00000000";return e.slice(0,12).toString("hex")===i}function v2(e,t){let r=e.map(n=>n.split("=",1)[0]);return t.filter(n=>{let i=n.split("=",1)[0];return r.includes(i)})}var yu={name:"isomorphic-git",version:"1.27.1",agent:"git/isomorphic-git@1.27.1"},ls=class{constructor(){this._queue=[]}write(t){if(this._ended)throw Error("You cannot write to a FIFO that has already been ended!");if(this._waiting){let r=this._waiting;this._waiting=null,r({value:t})}else this._queue.push(t)}end(){if(this._ended=!0,this._waiting){let t=this._waiting;this._waiting=null,t({done:!0})}}destroy(t){this.error=t,this.end()}async next(){if(this._queue.length>0)return{value:this._queue.shift()};if(this._ended)return{done:!0};if(this._waiting)throw Error("You cannot call read until the previous call to read has returned!");return new Promise(t=>{this._waiting=t})}};function pO(e){let t=e.indexOf("\r"),r=e.indexOf(` +`);return t===-1&&r===-1?-1:t===-1?r+1:r===-1?t+1:r===t+1?r+1:Math.min(t,r)+1}function y2(e){let t=new ls,r="";return(async()=>(await yl(e,n=>{for(n=n.toString("utf8"),r+=n;;){let i=pO(r);if(i===-1)break;t.write(r.slice(0,i)),r=r.slice(i)}}),r.length>0&&t.write(r),t.end()))(),t}var fu=class{static demux(t){let r=Ve.streamReader(t),n=new ls,i=new ls,a=new ls,s=async function(){let o=await r();if(o===null)return s();if(o===!0){n.end(),a.end(),t.error?i.destroy(t.error):i.end();return}switch(o[0]){case 1:{i.write(o.slice(1));break}case 2:{a.write(o.slice(1));break}case 3:{let c=o.slice(1);a.write(c),n.end(),a.end(),i.destroy(new Error(c.toString("utf8")));return}default:n.write(o)}s()};return s(),{packetlines:n,packfile:i,progress:a}}};async function mO(e){let{packetlines:t,packfile:r,progress:n}=fu.demux(e),i=[],a=[],s=[],o=!1,c=!1;return new Promise((l,u)=>{yl(t,f=>{let d=f.toString("utf8").trim();if(d.startsWith("shallow")){let h=d.slice(-41).trim();h.length!==40&&u(new bi(h)),i.push(h)}else if(d.startsWith("unshallow")){let h=d.slice(-41).trim();h.length!==40&&u(new bi(h)),a.push(h)}else if(d.startsWith("ACK")){let[,h,p]=d.split(" ");s.push({oid:h,status:p}),p||(c=!0)}else d.startsWith("NAK")?(o=!0,c=!0):(c=!0,o=!0);c&&(e.error?u(e.error):l({shallows:i,unshallows:a,acks:s,nak:o,packfile:r,progress:n}))}).finally(()=>{c||(e.error?u(e.error):l({shallows:i,unshallows:a,acks:s,nak:o,packfile:r,progress:n}))})})}function gO({capabilities:e=[],wants:t=[],haves:r=[],shallows:n=[],depth:i=null,since:a=null,exclude:s=[]}){let o=[];t=[...new Set(t)];let c=` ${e.join(" ")}`;for(let l of t)o.push(Ve.encode(`want ${l}${c} +`)),c="";for(let l of n)o.push(Ve.encode(`shallow ${l} +`));i!==null&&o.push(Ve.encode(`deepen ${i} +`)),a!==null&&o.push(Ve.encode(`deepen-since ${Math.floor(a.valueOf()/1e3)} +`));for(let l of s)o.push(Ve.encode(`deepen-not ${l} +`));o.push(Ve.flush());for(let l of r)o.push(Ve.encode(`have ${l} +`));return o.push(Ve.encode(`done +`)),o}async function Tp({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,gitdir:c,ref:l,remoteRef:u,remote:f,url:d,corsProxy:h,depth:p=null,since:m=null,exclude:v=[],relative:y=!1,tags:b=!1,singleBranch:x=!1,headers:E={},prune:_=!1,pruneTags:k=!1}){let w=l||await fa({fs:e,gitdir:c,test:!0}),A=await We.get({fs:e,gitdir:c}),S=f||w&&await A.get(`branch.${w}.remote`)||"origin",T=d||await A.get(`remote.${S}.url`);if(typeof T=="undefined")throw new Qt("remote OR url");let P=u||w&&await A.get(`branch.${w}.merge`)||l||"HEAD";h===void 0&&(h=await A.get("http.corsProxy"));let O=xs.getRemoteHelperFor({url:T}),j=await O.discover({http:r,onAuth:a,onAuthSuccess:s,onAuthFailure:o,corsProxy:h,service:"git-upload-pack",url:T,headers:E,protocolVersion:1}),D=j.auth,Q=j.refs;if(Q.size===0)return{defaultBranch:null,fetchHead:null,fetchHeadDescription:null};if(p!==null&&!j.capabilities.has("shallow"))throw new yi("shallow","depth");if(m!==null&&!j.capabilities.has("deepen-since"))throw new yi("deepen-since","since");if(v.length>0&&!j.capabilities.has("deepen-not"))throw new yi("deepen-not","exclude");if(y===!0&&!j.capabilities.has("deepen-relative"))throw new yi("deepen-relative","relative");let{oid:de,fullref:ee}=q.resolveAgainstMap({ref:P,map:Q});for(let U of Q.keys())U===ee||U==="HEAD"||U.startsWith("refs/heads/")||b&&U.startsWith("refs/tags/")||Q.delete(U);let J=v2([...j.capabilities],["multi_ack_detailed","no-done","side-band-64k","ofs-delta",`agent=${yu.agent}`]);y&&J.push("deepen-relative");let Pe=x?[de]:Q.values(),me=x?[w]:await q.listRefs({fs:e,gitdir:c,filepath:"refs"}),F=[];for(let U of me)try{U=await q.expand({fs:e,gitdir:c,ref:U});let Le=await q.resolve({fs:e,gitdir:c,ref:U});await Zw({fs:e,cache:t,gitdir:c,oid:Le})&&F.push(Le)}catch(Le){}F=[...new Set(F)];let G=await ua.read({fs:e,gitdir:c}),N=j.capabilities.has("shallow")?[...G]:[],Me=gO({capabilities:J,wants:Pe,haves:F,shallows:N,depth:p,since:m,exclude:v}),Dt=Buffer.from(await uu(Me)),_t=await O.connect({http:r,onProgress:n,corsProxy:h,service:"git-upload-pack",url:T,auth:D,body:[Dt],headers:E}),Ee=await mO(_t.body);_t.headers&&(Ee.headers=_t.headers);for(let U of Ee.shallows)if(!G.has(U))try{let{object:Le}=await qe({fs:e,cache:t,gitdir:c,oid:U}),L=new tr(Le),Y=await Promise.all(L.headers().parent.map(De=>Zw({fs:e,cache:t,gitdir:c,oid:De})));Y.length===0||Y.every(De=>De)||G.add(U)}catch(Le){G.add(U)}for(let U of Ee.unshallows)G.delete(U);if(await ua.write({fs:e,gitdir:c,oids:G}),x){let U=new Map([[ee,de]]),Le=new Map,L=10,Y=ee;for(;L--;){let vt=j.symrefs.get(Y);if(vt===void 0)break;Le.set(Y,vt),Y=vt}let ye=Q.get(Y);ye&&U.set(Y,ye);let{pruned:De}=await q.updateRemoteRefs({fs:e,gitdir:c,remote:S,refs:U,symrefs:Le,tags:b,prune:_});_&&(Ee.pruned=De)}else{let{pruned:U}=await q.updateRemoteRefs({fs:e,gitdir:c,remote:S,refs:Q,symrefs:j.symrefs,tags:b,prune:_,pruneTags:k});_&&(Ee.pruned=U)}if(Ee.HEAD=j.symrefs.get("HEAD"),Ee.HEAD===void 0){let{oid:U}=q.resolveAgainstMap({ref:"HEAD",map:Q});for(let[Le,L]of Q.entries())if(Le!=="HEAD"&&L===U){Ee.HEAD=Le;break}}let st=ee.startsWith("refs/tags")?"tag":"branch";if(Ee.FETCH_HEAD={oid:de,description:`${st} '${oa(ee)}' of ${T}`},n||i){let U=y2(Ee.progress);yl(U,async Le=>{if(i&&await i(Le),n){let L=Le.match(/([^:]*).*\((\d+?)\/(\d+?)\)/);L&&await n({phase:L[1].trim(),loaded:parseInt(L[2],10),total:parseInt(L[3],10)})}})}let ot=Buffer.from(await uu(Ee.packfile));if(_t.body.error)throw _t.body.error;let Ct=ot.slice(-20).toString("hex"),$e={defaultBranch:Ee.HEAD,fetchHead:Ee.FETCH_HEAD.oid,fetchHeadDescription:Ee.FETCH_HEAD.description};if(Ee.headers&&($e.headers=Ee.headers),_&&($e.pruned=Ee.pruned),Ct!==""&&!hO(ot)){$e.packfile=`objects/pack/pack-${Ct}.pack`;let U=$(c,$e.packfile);await e.write(U,ot);let Le=Y=>qe({fs:e,cache:t,gitdir:c,oid:Y}),L=await tl.fromPack({pack:ot,getExternalRefDelta:Le,onProgress:n});await e.write(U.replace(/\.pack$/,".idx"),await L.toBuffer())}return $e}async function w2({fs:e,bare:t=!1,dir:r,gitdir:n=t?r:$(r,".git"),defaultBranch:i="master"}){if(await e.exists(n+"/config"))return;let a=["hooks","info","objects/info","objects/pack","refs/heads","refs/tags"];a=a.map(s=>n+"/"+s);for(let s of a)await e.mkdir(s);await e.write(n+"/config",`[core] + repositoryformatversion = 0 + filemode = false + bare = ${t} +`+(t?"":` logallrefupdates = true +`)+` symlinks = false + ignorecase = true +`),await e.write(n+"/HEAD",`ref: refs/heads/${i} +`)}async function vO({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,onPostCheckout:c,dir:l,gitdir:u,url:f,corsProxy:d,ref:h,remote:p,depth:m,since:v,exclude:y,relative:b,singleBranch:x,noCheckout:E,noTags:_,headers:k}){try{if(await w2({fs:e,gitdir:u}),await p2({fs:e,gitdir:u,remote:p,url:f,force:!1}),d){let S=await We.get({fs:e,gitdir:u});await S.set("http.corsProxy",d),await We.save({fs:e,gitdir:u,config:S})}let{defaultBranch:w,fetchHead:A}=await Tp({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,gitdir:u,ref:h,remote:p,corsProxy:d,depth:m,since:v,exclude:y,relative:b,singleBranch:x,headers:k,tags:!_});if(A===null)return;h=h||w,h=h.replace("refs/heads/",""),await kp({fs:e,cache:t,onProgress:n,onPostCheckout:c,dir:l,gitdir:u,ref:h,remote:p,noCheckout:E})}catch(w){throw await e.rmdir(u,{recursive:!0,maxRetries:10}).catch(()=>{}),w}}async function yO({fs:e,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,onPostCheckout:o,dir:c,gitdir:l=$(c,".git"),url:u,corsProxy:f=void 0,ref:d=void 0,remote:h="origin",depth:p=void 0,since:m=void 0,exclude:v=[],relative:y=!1,singleBranch:b=!1,noCheckout:x=!1,noTags:E=!1,headers:_={},cache:k={}}){try{return C("fs",e),C("http",t),C("gitdir",l),x||C("dir",c),C("url",u),await vO({fs:new X(e),cache:k,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,onPostCheckout:o,dir:c,gitdir:l,url:u,corsProxy:f,ref:d,remote:h,depth:p,since:m,exclude:v,relative:y,singleBranch:b,noCheckout:x,noTags:E,headers:_})}catch(w){throw w.caller="git.clone",w}}async function wO({fs:e,onSign:t,dir:r,gitdir:n=$(r,".git"),message:i,author:a,committer:s,signingKey:o,amend:c=!1,dryRun:l=!1,noUpdateBranch:u=!1,ref:f,parent:d,tree:h,cache:p={}}){try{C("fs",e),c||C("message",i),o&&C("onSign",t);let m=new X(e);return await vu({fs:m,cache:p,onSign:t,gitdir:n,message:i,author:a,committer:s,signingKey:o,amend:c,dryRun:l,noUpdateBranch:u,ref:f,parent:d,tree:h})}catch(m){throw m.caller="git.commit",m}}async function bO({fs:e,dir:t,gitdir:r=$(t,".git"),fullname:n=!1,test:i=!1}){try{return C("fs",e),C("gitdir",r),await fa({fs:new X(e),gitdir:r,fullname:n,test:i})}catch(a){throw a.caller="git.currentBranch",a}}async function _O({fs:e,gitdir:t,ref:r}){if(r=r.startsWith("refs/heads/")?r:`refs/heads/${r}`,!await q.exists({fs:e,gitdir:t,ref:r}))throw new Ne(r);let i=await q.expand({fs:e,gitdir:t,ref:r}),a=await fa({fs:e,gitdir:t,fullname:!0});if(i===a){let c=await q.resolve({fs:e,gitdir:t,ref:i});await q.writeRef({fs:e,gitdir:t,ref:"HEAD",value:c})}await q.deleteRef({fs:e,gitdir:t,ref:i});let s=oa(r),o=await We.get({fs:e,gitdir:t});await o.deleteSection("branch",s),await We.save({fs:e,gitdir:t,config:o})}async function xO({fs:e,dir:t,gitdir:r=$(t,".git"),ref:n}){try{return C("fs",e),C("ref",n),await _O({fs:new X(e),gitdir:r,ref:n})}catch(i){throw i.caller="git.deleteBranch",i}}async function SO({fs:e,dir:t,gitdir:r=$(t,".git"),ref:n}){try{C("fs",e),C("ref",n),await q.deleteRef({fs:new X(e),gitdir:r,ref:n})}catch(i){throw i.caller="git.deleteRef",i}}async function EO({fs:e,gitdir:t,remote:r}){let n=await We.get({fs:e,gitdir:t});await n.deleteSection("remote",r),await We.save({fs:e,gitdir:t,config:n})}async function AO({fs:e,dir:t,gitdir:r=$(t,".git"),remote:n}){try{return C("fs",e),C("remote",n),await EO({fs:new X(e),gitdir:r,remote:n})}catch(i){throw i.caller="git.deleteRemote",i}}async function kO({fs:e,gitdir:t,ref:r}){r=r.startsWith("refs/tags/")?r:`refs/tags/${r}`,await q.deleteRef({fs:e,gitdir:t,ref:r})}async function TO({fs:e,dir:t,gitdir:r=$(t,".git"),ref:n}){try{return C("fs",e),C("ref",n),await kO({fs:new X(e),gitdir:r,ref:n})}catch(i){throw i.caller="git.deleteTag",i}}async function CO({fs:e,gitdir:t,oid:r}){let n=r.slice(0,2);return(await e.readdir(`${t}/objects/${n}`)).map(a=>`${n}${a}`).filter(a=>a.startsWith(r))}async function PO({fs:e,cache:t,gitdir:r,oid:n,getExternalRefDelta:i}){let a=[],s=await e.readdir($(r,"objects/pack"));s=s.filter(o=>o.endsWith(".idx"));for(let o of s){let c=`${r}/objects/pack/${o}`,l=await Ep({fs:e,cache:t,filename:c,getExternalRefDelta:i});if(l.error)throw new le(l.error);for(let u of l.offsets.keys())u.startsWith(n)&&a.push(u)}return a}async function RO({fs:e,cache:t,gitdir:r,oid:n}){let i=o=>qe({fs:e,cache:t,gitdir:r,oid:o}),a=await CO({fs:e,gitdir:r,oid:n}),s=await PO({fs:e,cache:t,gitdir:r,oid:n,getExternalRefDelta:i});for(let o of s)a.indexOf(o)===-1&&a.push(o);if(a.length===1)return a[0];throw a.length>1?new rl("oids",n,a):new Ne(`an object matching "${n}"`)}async function MO({fs:e,dir:t,gitdir:r=$(t,".git"),oid:n,cache:i={}}){try{return C("fs",e),C("gitdir",r),C("oid",n),await RO({fs:new X(e),cache:i,gitdir:r,oid:n})}catch(a){throw a.caller="git.expandOid",a}}async function OO({fs:e,dir:t,gitdir:r=$(t,".git"),ref:n}){try{return C("fs",e),C("gitdir",r),C("ref",n),await q.expand({fs:new X(e),gitdir:r,ref:n})}catch(i){throw i.caller="git.expandRef",i}}async function Cp({fs:e,cache:t,gitdir:r,oids:n}){let i={},a=n.length,s=n.map((o,c)=>({index:c,oid:o}));for(;s.length;){let o=new Set;for(let{oid:l,index:u}of s)i[l]||(i[l]=new Set),i[l].add(u),i[l].size===a&&o.add(l);if(o.size>0)return[...o];let c=new Map;for(let{oid:l,index:u}of s)try{let{object:f}=await qe({fs:e,cache:t,gitdir:r,oid:l}),d=tr.from(f),{parent:h}=d.parseHeaders();for(let p of h)(!i[p]||!i[p].has(u))&&c.set(p+":"+u,{oid:p,index:u})}catch(f){}s=Array.from(c.values())}return[]}var cp=/^.*(\r?\n|$)/gm;function IO({branches:e,contents:t}){let r=e[1],n=e[2],i=t[0],a=t[1],s=t[2],o=a.match(cp),c=i.match(cp),l=s.match(cp),u=(0,e2.default)(o,c,l),f=7,d="",h=!0;for(let p of u)p.ok&&(d+=p.ok.join("")),p.conflict&&(h=!1,d+=`${"<".repeat(f)} ${r} +`,d+=p.conflict.a.join(""),d+=`${"=".repeat(f)} +`,d+=p.conflict.b.join(""),d+=`${">".repeat(f)} ${n} +`);return{cleanMerge:h,mergedText:d}}async function FO({fs:e,cache:t,dir:r,gitdir:n=$(r,".git"),index:i,ourOid:a,baseOid:s,theirOid:o,ourName:c="ours",baseName:l="base",theirName:u="theirs",dryRun:f=!1,abortOnConflict:d=!0,mergeDriver:h}){let p=wi({ref:a}),m=wi({ref:s}),v=wi({ref:o}),y=[],b=[],x=[],E=[],_=await ys({fs:e,cache:t,dir:r,gitdir:n,trees:[p,m,v],map:async function(k,[w,A,S]){let T=nu(k),P=await lu(w,A),O=await lu(S,A);switch(`${P}-${O}`){case"false-false":return{mode:await A.mode(),path:T,oid:await A.oid(),type:await A.type()};case"false-true":return S?{mode:await S.mode(),path:T,oid:await S.oid(),type:await S.type()}:void 0;case"true-false":return w?{mode:await w.mode(),path:T,oid:await w.oid(),type:await w.type()}:void 0;case"true-true":{if(w&&A&&S&&await w.type()==="blob"&&await A.type()==="blob"&&await S.type()==="blob")return $O({fs:e,gitdir:n,path:T,ours:w,base:A,theirs:S,ourName:c,baseName:l,theirName:u,mergeDriver:h}).then(async j=>{if(j.cleanMerge)d||i.insert({filepath:k,oid:j.mergeResult.oid,stage:0});else if(y.push(k),b.push(k),!d){let D=await A.oid(),Q=await w.oid(),de=await S.oid();i.delete({filepath:k}),i.insert({filepath:k,oid:D,stage:1}),i.insert({filepath:k,oid:Q,stage:2}),i.insert({filepath:k,oid:de,stage:3})}return j.mergeResult});if(A&&!w&&S&&await A.type()==="blob"&&await S.type()==="blob"){if(y.push(k),x.push(k),!d){let j=await A.oid(),D=await S.oid();i.delete({filepath:k}),i.insert({filepath:k,oid:j,stage:1}),i.insert({filepath:k,oid:D,stage:3})}return{mode:await S.mode(),oid:await S.oid(),type:"blob",path:T}}if(A&&w&&!S&&await A.type()==="blob"&&await w.type()==="blob"){if(y.push(k),E.push(k),!d){let j=await A.oid(),D=await w.oid();i.delete({filepath:k}),i.insert({filepath:k,oid:j,stage:1}),i.insert({filepath:k,oid:D,stage:2})}return{mode:await w.mode(),oid:await w.oid(),type:"blob",path:T}}if(A&&!w&&!S&&await A.type()==="blob")return;throw new hs}}},reduce:y.length!==0&&(!r||d)?void 0:async(k,w)=>{let A=w.filter(Boolean);if(k&&!(k&&k.type==="tree"&&A.length===0)){if(A.length>0){let T=new er(A).toObject(),P=await mr({fs:e,gitdir:n,type:"tree",object:T,dryRun:f});k.oid=P}return k}}});return y.length!==0?(r&&!d&&await ys({fs:e,cache:t,dir:r,gitdir:n,trees:[wi({ref:_.oid})],map:async function(k,[w]){let A=`${r}/${k}`;if(await w.type()==="blob"){let S=await w.mode(),T=new TextDecoder().decode(await w.content());await e.write(A,T,{mode:S})}return!0}}),new ps(y,b,x,E)):_.oid}async function $O({fs:e,gitdir:t,path:r,ours:n,base:i,theirs:a,ourName:s,theirName:o,baseName:c,dryRun:l,mergeDriver:u=IO}){let f="blob",d=await i.mode()===await n.mode()?await a.mode():await n.mode();if(await n.oid()===await a.oid())return{cleanMerge:!0,mergeResult:{mode:d,path:r,oid:await n.oid(),type:f}};if(await n.oid()===await i.oid())return{cleanMerge:!0,mergeResult:{mode:d,path:r,oid:await a.oid(),type:f}};if(await a.oid()===await i.oid())return{cleanMerge:!0,mergeResult:{mode:d,path:r,oid:await n.oid(),type:f}};let h=Buffer.from(await n.content()).toString("utf8"),p=Buffer.from(await i.content()).toString("utf8"),m=Buffer.from(await a.content()).toString("utf8"),{mergedText:v,cleanMerge:y}=await u({branches:[c,s,o],contents:[p,h,m],path:r}),b=await mr({fs:e,gitdir:t,type:"blob",object:Buffer.from(v,"utf8"),dryRun:l});return{cleanMerge:y,mergeResult:{mode:d,path:r,oid:b,type:f}}}async function b2({fs:e,cache:t,dir:r,gitdir:n,ours:i,theirs:a,fastForward:s=!0,fastForwardOnly:o=!1,dryRun:c=!1,noUpdateBranch:l=!1,abortOnConflict:u=!0,message:f,author:d,committer:h,signingKey:p,onSign:m,mergeDriver:v}){i===void 0&&(i=await fa({fs:e,gitdir:n,fullname:!0})),i=await q.expand({fs:e,gitdir:n,ref:i}),a=await q.expand({fs:e,gitdir:n,ref:a});let y=await q.resolve({fs:e,gitdir:n,ref:i}),b=await q.resolve({fs:e,gitdir:n,ref:a}),x=await Cp({fs:e,cache:t,gitdir:n,oids:[y,b]});if(x.length!==1)throw new hs;let E=x[0];if(E===b)return{oid:y,alreadyMerged:!0};if(s&&E===y)return!c&&!l&&await q.writeRef({fs:e,gitdir:n,ref:i,value:b}),{oid:b,fastForward:!0};{if(o)throw new sl;let _=await mt.acquire({fs:e,gitdir:n,cache:t,allowUnmerged:!1},async w=>FO({fs:e,cache:t,dir:r,gitdir:n,index:w,ourOid:y,theirOid:b,baseOid:E,ourName:oa(i),baseName:"base",theirName:oa(a),dryRun:c,abortOnConflict:u,mergeDriver:v}));if(_ instanceof ps)throw _;return f||(f=`Merge branch '${oa(a)}' into ${oa(i)}`),{oid:await vu({fs:e,cache:t,gitdir:n,message:f,ref:i,tree:_,parent:[y,b],author:d,committer:h,signingKey:p,onSign:m,dryRun:c,noUpdateBranch:l}),tree:_,mergeCommit:!0}}}async function _2({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,dir:c,gitdir:l,ref:u,url:f,remote:d,remoteRef:h,prune:p,pruneTags:m,fastForward:v,fastForwardOnly:y,corsProxy:b,singleBranch:x,headers:E,author:_,committer:k,signingKey:w}){try{if(!u){let T=await fa({fs:e,gitdir:l});if(!T)throw new Qt("ref");u=T}let{fetchHead:A,fetchHeadDescription:S}=await Tp({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,gitdir:l,corsProxy:b,ref:u,url:f,remote:d,remoteRef:h,singleBranch:x,headers:E,prune:p,pruneTags:m});await b2({fs:e,cache:t,gitdir:l,ours:u,theirs:A,fastForward:v,fastForwardOnly:y,message:`Merge ${S}`,author:_,committer:k,signingKey:w,dryRun:!1,noUpdateBranch:!1}),await kp({fs:e,cache:t,onProgress:n,dir:c,gitdir:l,ref:u,remote:d,noCheckout:!1})}catch(A){throw A.caller="git.pull",A}}async function LO({fs:e,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,dir:o,gitdir:c=$(o,".git"),ref:l,url:u,remote:f,remoteRef:d,corsProxy:h,singleBranch:p,headers:m={},cache:v={}}){try{C("fs",e),C("http",t),C("gitdir",c);let y={name:"",email:"",timestamp:Date.now(),timezoneOffset:0};return await _2({fs:new X(e),cache:v,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,dir:o,gitdir:c,ref:l,url:u,remote:f,remoteRef:d,fastForwardOnly:!0,corsProxy:h,singleBranch:p,headers:m,author:y,committer:y})}catch(y){throw y.caller="git.fastForward",y}}async function DO({fs:e,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,dir:o,gitdir:c=$(o,".git"),ref:l,remote:u,remoteRef:f,url:d,corsProxy:h,depth:p=null,since:m=null,exclude:v=[],relative:y=!1,tags:b=!1,singleBranch:x=!1,headers:E={},prune:_=!1,pruneTags:k=!1,cache:w={}}){try{return C("fs",e),C("http",t),C("gitdir",c),await Tp({fs:new X(e),cache:w,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,gitdir:c,ref:l,remote:u,remoteRef:f,url:d,corsProxy:h,depth:p,since:m,exclude:v,relative:y,tags:b,singleBranch:x,headers:E,prune:_,pruneTags:k})}catch(A){throw A.caller="git.fetch",A}}async function NO({fs:e,dir:t,gitdir:r=$(t,".git"),oids:n,cache:i={}}){try{return C("fs",e),C("gitdir",r),C("oids",n),await Cp({fs:new X(e),cache:i,gitdir:r,oids:n})}catch(a){throw a.caller="git.findMergeBase",a}}async function x2({fs:e,filepath:t}){if(await e.exists($(t,".git")))return t;{let r=fs(t);if(r===t)throw new Ne(`git root for ${t}`);return x2({fs:e,filepath:r})}}async function jO({fs:e,filepath:t}){try{return C("fs",e),C("filepath",t),await x2({fs:new X(e),filepath:t})}catch(r){throw r.caller="git.findRoot",r}}async function BO({fs:e,dir:t,gitdir:r=$(t,".git"),path:n}){try{return C("fs",e),C("gitdir",r),C("path",n),await ml({fs:new X(e),gitdir:r,path:n})}catch(i){throw i.caller="git.getConfig",i}}async function HO({fs:e,gitdir:t,path:r}){return(await We.get({fs:e,gitdir:t})).getall(r)}async function UO({fs:e,dir:t,gitdir:r=$(t,".git"),path:n}){try{return C("fs",e),C("gitdir",r),C("path",n),await HO({fs:new X(e),gitdir:r,path:n})}catch(i){throw i.caller="git.getConfigAll",i}}async function GO({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,url:a,headers:s={},forPush:o=!1}){try{C("http",e),C("url",a);let l=await xs.getRemoteHelperFor({url:a}).discover({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,service:o?"git-receive-pack":"git-upload-pack",url:a,headers:s,protocolVersion:1}),u={capabilities:[...l.capabilities]};for(let[f,d]of l.refs){let h=f.split("/"),p=h.pop(),m=u;for(let v of h)m[v]=m[v]||{},m=m[v];m[p]=d}for(let[f,d]of l.symrefs){let h=f.split("/"),p=h.pop(),m=u;for(let v of h)m[v]=m[v]||{},m=m[v];m[p]=d}return u}catch(c){throw c.caller="git.getRemoteInfo",c}}function S2(e,t,r,n){let i=[];for(let[a,s]of e.refs){if(t&&!a.startsWith(t))continue;if(a.endsWith("^{}")){if(n){let c=a.replace("^{}",""),l=i[i.length-1],u=l.ref===c?l:i.find(f=>f.ref===c);if(u===void 0)throw new Error("I did not expect this to happen");u.peeled=s}continue}let o={ref:a,oid:s};r&&e.symrefs.has(a)&&(o.target=e.symrefs.get(a)),i.push(o)}return i}async function zO({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,url:a,headers:s={},forPush:o=!1,protocolVersion:c=2}){try{C("http",e),C("url",a);let u=await xs.getRemoteHelperFor({url:a}).discover({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,service:o?"git-receive-pack":"git-upload-pack",url:a,headers:s,protocolVersion:c});if(u.protocolVersion===2)return{protocolVersion:u.protocolVersion,capabilities:u.capabilities2};let f={};for(let d of u.capabilities){let[h,p]=d.split("=");p?f[h]=p:f[h]=!0}return{protocolVersion:1,capabilities:f,refs:S2(u,void 0,!0,!0)}}catch(l){throw l.caller="git.getRemoteInfo2",l}}async function VO({type:e,object:t,format:r="content",oid:n=void 0}){return r!=="deflated"&&(r!=="wrapped"&&(t=_i.wrap({type:e,object:t})),n=await Gn(t)),{oid:n,object:t}}async function WO({object:e}){try{C("object",e),typeof e=="string"?e=Buffer.from(e,"utf8"):e=Buffer.from(e);let t="blob",{oid:r,object:n}=await VO({type:"blob",format:"content",object:e});return{oid:r,type:t,object:new Uint8Array(n),format:"wrapped"}}catch(t){throw t.caller="git.hashBlob",t}}async function qO({fs:e,cache:t,onProgress:r,dir:n,gitdir:i,filepath:a}){try{a=$(n,a);let s=await e.read(a),o=l=>qe({fs:e,cache:t,gitdir:i,oid:l}),c=await tl.fromPack({pack:s,getExternalRefDelta:o,onProgress:r});return await e.write(a.replace(/\.pack$/,".idx"),await c.toBuffer()),{oids:[...c.hashes]}}catch(s){throw s.caller="git.indexPack",s}}async function YO({fs:e,onProgress:t,dir:r,gitdir:n=$(r,".git"),filepath:i,cache:a={}}){try{return C("fs",e),C("dir",r),C("gitdir",r),C("filepath",i),await qO({fs:new X(e),cache:a,onProgress:t,dir:r,gitdir:n,filepath:i})}catch(s){throw s.caller="git.indexPack",s}}async function XO({fs:e,bare:t=!1,dir:r,gitdir:n=t?r:$(r,".git"),defaultBranch:i="master"}){try{return C("fs",e),C("gitdir",n),t||C("dir",r),await w2({fs:new X(e),bare:t,dir:r,gitdir:n,defaultBranch:i})}catch(a){throw a.caller="git.init",a}}async function E2({fs:e,cache:t,gitdir:r,oid:n,ancestor:i,depth:a}){let s=await ua.read({fs:e,gitdir:r});if(!n)throw new Qt("oid");if(!i)throw new Qt("ancestor");if(n===i)return!1;let o=[n],c=new Set,l=0;for(;o.length;){if(l++===a)throw new ll(a);let u=o.shift(),{type:f,object:d}=await qe({fs:e,cache:t,gitdir:r,oid:u});if(f!=="commit")throw new Gt(u,f,"commit");let h=tr.from(d).parse();for(let p of h.parent)if(p===i)return!0;if(!s.has(u))for(let p of h.parent)c.has(p)||(o.push(p),c.add(p))}return!1}async function ZO({fs:e,dir:t,gitdir:r=$(t,".git"),oid:n,ancestor:i,depth:a=-1,cache:s={}}){try{return C("fs",e),C("gitdir",r),C("oid",n),C("ancestor",i),await E2({fs:new X(e),cache:s,gitdir:r,oid:n,ancestor:i,depth:a})}catch(o){throw o.caller="git.isDescendent",o}}async function KO({fs:e,dir:t,gitdir:r=$(t,".git"),filepath:n}){try{return C("fs",e),C("dir",t),C("gitdir",r),C("filepath",n),ws.isIgnored({fs:new X(e),dir:t,gitdir:r,filepath:n})}catch(i){throw i.caller="git.isIgnored",i}}async function JO({fs:e,dir:t,gitdir:r=$(t,".git"),remote:n}){try{return C("fs",e),C("gitdir",r),q.listBranches({fs:new X(e),gitdir:r,remote:n})}catch(i){throw i.caller="git.listBranches",i}}async function QO({fs:e,gitdir:t,ref:r,cache:n}){if(r){let i=await q.resolve({gitdir:t,fs:e,ref:r}),a=[];return await A2({fs:e,cache:n,gitdir:t,oid:i,filenames:a,prefix:""}),a}else return mt.acquire({fs:e,gitdir:t,cache:n},async function(i){return i.entries.map(a=>a.path)})}async function A2({fs:e,cache:t,gitdir:r,oid:n,filenames:i,prefix:a}){let{tree:s}=await Ss({fs:e,cache:t,gitdir:r,oid:n});for(let o of s)o.type==="tree"?await A2({fs:e,cache:t,gitdir:r,oid:o.oid,filenames:i,prefix:$(a,o.path)}):i.push($(a,o.path))}async function e8({fs:e,dir:t,gitdir:r=$(t,".git"),ref:n,cache:i={}}){try{return C("fs",e),C("gitdir",r),await QO({fs:new X(e),cache:i,gitdir:r,ref:n})}catch(a){throw a.caller="git.listFiles",a}}async function t8({fs:e,cache:t,gitdir:r,ref:n}){let i;try{i=await q.resolve({gitdir:r,fs:e,ref:n})}catch(o){if(o instanceof Ne)return[]}return(await Ss({fs:e,cache:t,gitdir:r,oid:i})).tree.map(o=>({target:o.path,note:o.oid}))}async function r8({fs:e,dir:t,gitdir:r=$(t,".git"),ref:n="refs/notes/commits",cache:i={}}){try{return C("fs",e),C("gitdir",r),C("ref",n),await t8({fs:new X(e),cache:i,gitdir:r,ref:n})}catch(a){throw a.caller="git.listNotes",a}}async function n8({fs:e,gitdir:t}){let r=await We.get({fs:e,gitdir:t}),n=await r.getSubsections("remote");return Promise.all(n.map(async a=>{let s=await r.get(`remote.${a}.url`);return{remote:a,url:s}}))}async function i8({fs:e,dir:t,gitdir:r=$(t,".git")}){try{return C("fs",e),C("gitdir",r),await n8({fs:new X(e),gitdir:r})}catch(n){throw n.caller="git.listRemotes",n}}async function a8(e){let t=Ve.streamReader(e),r=[],n;for(;n=await t(),n!==!0;){if(n===null)continue;n=n.toString("utf8").replace(/\n$/,"");let[i,a,...s]=n.split(" "),o={ref:a,oid:i};for(let c of s){let[l,u]=c.split(":");l==="symref-target"?o.target=u:l==="peeled"&&(o.peeled=u)}r.push(o)}return r}async function s8({prefix:e,symrefs:t,peelTags:r}){let n=[];return n.push(Ve.encode(`command=ls-refs +`)),n.push(Ve.encode(`agent=${yu.agent} +`)),(r||t||e)&&n.push(Ve.delim()),r&&n.push(Ve.encode("peel")),t&&n.push(Ve.encode("symrefs")),e&&n.push(Ve.encode(`ref-prefix ${e}`)),n.push(Ve.flush()),n}async function o8({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,url:a,headers:s={},forPush:o=!1,protocolVersion:c=2,prefix:l,symrefs:u,peelTags:f}){try{C("http",e),C("url",a);let d=await _s.discover({http:e,onAuth:t,onAuthSuccess:r,onAuthFailure:n,corsProxy:i,service:o?"git-receive-pack":"git-upload-pack",url:a,headers:s,protocolVersion:c});if(d.protocolVersion===1)return S2(d,l,u,f);let h=await s8({prefix:l,symrefs:u,peelTags:f}),p=await _s.connect({http:e,auth:d.auth,headers:s,corsProxy:i,service:o?"git-receive-pack":"git-upload-pack",url:a,body:h});return a8(p.body)}catch(d){throw d.caller="git.listServerRefs",d}}async function l8({fs:e,dir:t,gitdir:r=$(t,".git")}){try{return C("fs",e),C("gitdir",r),q.listTags({fs:new X(e),gitdir:r})}catch(n){throw n.caller="git.listTags",n}}function c8(e,t){return e.committer.timestamp-t.committer.timestamp}var u8="e69de29bb2d1d6434b8b29ae775ad8c2e48c5391";async function Kw({fs:e,cache:t,gitdir:r,oid:n,fileId:i}){if(i===u8)return;let a=n,s,o=await vs({fs:e,cache:t,gitdir:r,oid:n}),c=o.tree;return i===o.oid?s=o.path:(s=await k2({fs:e,cache:t,gitdir:r,tree:c,fileId:i,oid:a}),Array.isArray(s)&&(s.length===0?s=void 0:s.length===1&&(s=s[0]))),s}async function k2({fs:e,cache:t,gitdir:r,tree:n,fileId:i,oid:a,filepaths:s=[],parentPath:o=""}){let c=n.entries().map(function(l){let u;return l.oid===i?(u=$(o,l.path),s.push(u)):l.type==="tree"&&(u=qe({fs:e,cache:t,gitdir:r,oid:l.oid}).then(function({object:f}){return k2({fs:e,cache:t,gitdir:r,tree:er.from(f),fileId:i,oid:a,filepaths:s,parentPath:$(o,l.path)})})),u});return await Promise.all(c),s}async function f8({fs:e,cache:t,gitdir:r,filepath:n,ref:i,depth:a,since:s,force:o,follow:c}){let l=typeof s=="undefined"?void 0:Math.floor(s.valueOf()/1e3),u=[],f=await ua.read({fs:e,gitdir:r}),d=await q.resolve({fs:e,gitdir:r,ref:i}),h=[await cu({fs:e,cache:t,gitdir:r,oid:d})],p,m,v;function y(b){v&&n&&u.push(b)}for(;h.length>0;){let b=h.pop();if(l!==void 0&&b.commit.committer.timestamp<=l)break;if(n){let x;try{x=await vl({fs:e,cache:t,gitdir:r,oid:b.commit.tree,filepath:n}),m&&p!==x&&u.push(m),p=x,m=b,v=!0}catch(E){if(E instanceof Ne){let _=c&&p;if(_&&(_=await Kw({fs:e,cache:t,gitdir:r,oid:b.commit.tree,fileId:p}),_))if(Array.isArray(_)){if(m){let k=await Kw({fs:e,cache:t,gitdir:r,oid:m.commit.tree,fileId:p});if(Array.isArray(k))if(_=_.filter(w=>k.indexOf(w)===-1),_.length===1)_=_[0],n=_,m&&u.push(m);else{_=!1,m&&u.push(m);break}}}else n=_,m&&u.push(m);if(!_){if(v&&p&&(u.push(m),!o))break;if(!o&&!c)throw E}m=b,v=!1}else throw E}}else u.push(b);if(a!==void 0&&u.length===a){y(b);break}if(!f.has(b.oid))for(let x of b.commit.parent){let E=await cu({fs:e,cache:t,gitdir:r,oid:x});h.map(_=>_.oid).includes(E.oid)||h.push(E)}h.length===0&&y(b),h.sort((x,E)=>c8(x.commit,E.commit))}return u}async function d8({fs:e,dir:t,gitdir:r=$(t,".git"),filepath:n,ref:i="HEAD",depth:a,since:s,force:o,follow:c,cache:l={}}){try{return C("fs",e),C("gitdir",r),C("ref",i),await f8({fs:new X(e),cache:l,gitdir:r,filepath:n,ref:i,depth:a,since:s,force:o,follow:c})}catch(u){throw u.caller="git.log",u}}async function h8({fs:e,onSign:t,dir:r,gitdir:n=$(r,".git"),ours:i,theirs:a,fastForward:s=!0,fastForwardOnly:o=!1,dryRun:c=!1,noUpdateBranch:l=!1,abortOnConflict:u=!0,message:f,author:d,committer:h,signingKey:p,cache:m={},mergeDriver:v}){try{C("fs",e),p&&C("onSign",t);let y=new X(e),b=await ca({fs:y,gitdir:n,author:d});if(!b&&(!o||!s))throw new zt("author");let x=await bs({fs:y,gitdir:n,author:b,committer:h});if(!x&&(!o||!s))throw new zt("committer");return await b2({fs:y,cache:m,dir:r,gitdir:n,ours:i,theirs:a,fastForward:s,fastForwardOnly:o,dryRun:c,noUpdateBranch:l,abortOnConflict:u,message:f,author:b,committer:x,signingKey:p,onSign:t,mergeDriver:v})}catch(y){throw y.caller="git.merge",y}}var p8={commit:16,tree:32,blob:48,tag:64,ofs_delta:96,ref_delta:112};async function T2({fs:e,cache:t,dir:r,gitdir:n=$(r,".git"),oids:i}){let a=new Sp.default,s=[];function o(u,f){let d=Buffer.from(u,f);s.push(d),a.update(d)}async function c({stype:u,object:f}){let d=p8[u],h=f.length,p=h>15?128:0,m=h&15;h=h>>>4;let v=(p|d|m).toString(16);for(o(v,"hex");p;)p=h>127?128:0,v=p|h&127,o(xp(2,v),"hex"),h=h>>>7;o(Buffer.from(await c2(f)))}o("PACK"),o("00000002","hex"),o(xp(8,i.length),"hex");for(let u of i){let{type:f,object:d}=await qe({fs:e,cache:t,gitdir:n,oid:u});await c({write:o,object:d,stype:f})}let l=a.digest();return s.push(l),s}async function m8({fs:e,cache:t,gitdir:r,oids:n,write:i}){let a=await T2({fs:e,cache:t,gitdir:r,oids:n}),s=Buffer.from(await uu(a)),c=`pack-${s.slice(-20).toString("hex")}.pack`;return i?(await e.write($(r,`objects/pack/${c}`),s),{filename:c}):{filename:c,packfile:new Uint8Array(s)}}async function g8({fs:e,dir:t,gitdir:r=$(t,".git"),oids:n,write:i=!1,cache:a={}}){try{return C("fs",e),C("gitdir",r),C("oids",n),await m8({fs:new X(e),cache:a,gitdir:r,oids:n,write:i})}catch(s){throw s.caller="git.packObjects",s}}async function v8({fs:e,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,dir:o,gitdir:c=$(o,".git"),ref:l,url:u,remote:f,remoteRef:d,prune:h=!1,pruneTags:p=!1,fastForward:m=!0,fastForwardOnly:v=!1,corsProxy:y,singleBranch:b,headers:x={},author:E,committer:_,signingKey:k,cache:w={}}){try{C("fs",e),C("gitdir",c);let A=new X(e),S=await ca({fs:A,gitdir:c,author:E});if(!S)throw new zt("author");let T=await bs({fs:A,gitdir:c,author:S,committer:_});if(!T)throw new zt("committer");return await _2({fs:A,cache:w,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,dir:o,gitdir:c,ref:l,url:u,remote:f,remoteRef:d,fastForward:m,fastForwardOnly:v,corsProxy:y,singleBranch:b,headers:x,author:S,committer:T,signingKey:k,prune:h,pruneTags:p})}catch(A){throw A.caller="git.pull",A}}async function y8({fs:e,cache:t,dir:r,gitdir:n=$(r,".git"),start:i,finish:a}){let s=await ua.read({fs:e,gitdir:n}),o=new Set,c=new Set;for(let f of i)o.add(await q.resolve({fs:e,gitdir:n,ref:f}));for(let f of a)try{let d=await q.resolve({fs:e,gitdir:n,ref:f});c.add(d)}catch(d){}let l=new Set;async function u(f){l.add(f);let{type:d,object:h}=await qe({fs:e,cache:t,gitdir:n,oid:f});if(d==="tag"){let m=pr.from(h).headers().object;return u(m)}if(d!=="commit")throw new Gt(f,d,"commit");if(!s.has(f)){let m=tr.from(h).headers().parent;for(f of m)!c.has(f)&&!l.has(f)&&await u(f)}}for(let f of o)await u(f);return l}async function up({fs:e,cache:t,dir:r,gitdir:n=$(r,".git"),oids:i}){let a=new Set;async function s(o){if(a.has(o))return;a.add(o);let{type:c,object:l}=await qe({fs:e,cache:t,gitdir:n,oid:o});if(c==="tag"){let f=pr.from(l).headers().object;await s(f)}else if(c==="commit"){let f=tr.from(l).headers().tree;await s(f)}else if(c==="tree"){let u=er.from(l);for(let f of u)f.type==="blob"&&a.add(f.oid),f.type==="tree"&&await s(f.oid)}}for(let o of i)await s(o);return a}async function w8(e){let t={},r="",n=Ve.streamReader(e),i=await n();for(;i!==!0;)i!==null&&(r+=i.toString("utf8")+` +`),i=await n();let a=r.toString("utf8").split(` +`);if(i=a.shift(),!i.startsWith("unpack "))throw new la('unpack ok" or "unpack [error message]',i);t.ok=i==="unpack ok",t.ok||(t.error=i.slice(7)),t.refs={};for(let s of a){if(s.trim()==="")continue;let o=s.slice(0,2),c=s.slice(3),l=c.indexOf(" ");l===-1&&(l=c.length);let u=c.slice(0,l),f=c.slice(l+1);t.refs[u]={ok:o==="ok",error:f}}return t}async function b8({capabilities:e=[],triplets:t=[]}){let r=[],n=`\0 ${e.join(" ")}`;for(let i of t)r.push(Ve.encode(`${i.oldoid} ${i.oid} ${i.fullRef}${n} +`)),n="";return r.push(Ve.flush()),r}async function _8({fs:e,cache:t,http:r,onProgress:n,onMessage:i,onAuth:a,onAuthSuccess:s,onAuthFailure:o,onPrePush:c,gitdir:l,ref:u,remoteRef:f,remote:d,url:h,force:p=!1,delete:m=!1,corsProxy:v,headers:y={}}){let b=u||await fa({fs:e,gitdir:l});if(typeof b=="undefined")throw new Qt("ref");let x=await We.get({fs:e,gitdir:l});d=d||await x.get(`branch.${b}.pushRemote`)||await x.get("remote.pushDefault")||await x.get(`branch.${b}.remote`)||"origin";let E=h||await x.get(`remote.${d}.pushurl`)||await x.get(`remote.${d}.url`);if(typeof E=="undefined")throw new Qt("remote OR url");let _=f||await x.get(`branch.${b}.merge`);if(typeof E=="undefined")throw new Qt("remoteRef");v===void 0&&(v=await x.get("http.corsProxy"));let k=await q.expand({fs:e,gitdir:l,ref:b}),w=m?"0000000000000000000000000000000000000000":await q.resolve({fs:e,gitdir:l,ref:k}),A=xs.getRemoteHelperFor({url:E}),S=await A.discover({http:r,onAuth:a,onAuthSuccess:s,onAuthFailure:o,corsProxy:v,service:"git-receive-pack",url:E,headers:y,protocolVersion:1}),T=S.auth,P;if(!_)P=k;else try{P=await q.expandAgainstMap({ref:_,map:S.refs})}catch(G){if(G instanceof Ne)P=_.startsWith("refs/")?_:`refs/heads/${_}`;else throw G}let O=S.refs.get(P)||"0000000000000000000000000000000000000000";if(c&&!await c({remote:d,url:E,localRef:{ref:m?"(delete)":k,oid:w},remoteRef:{ref:P,oid:O}}))throw new gs;let j=!S.capabilities.has("no-thin"),D=new Set;if(!m){let G=[...S.refs.values()],N=new Set;if(O!=="0000000000000000000000000000000000000000"){let Me=await Cp({fs:e,cache:t,gitdir:l,oids:[w,O]});for(let Dt of Me)G.push(Dt);j&&(N=await up({fs:e,cache:t,gitdir:l,oids:Me}))}if(!G.includes(w)){let Me=await y8({fs:e,cache:t,gitdir:l,start:[w],finish:G});D=await up({fs:e,cache:t,gitdir:l,oids:Me})}if(j){try{let Me=await q.resolve({fs:e,gitdir:l,ref:`refs/remotes/${d}/HEAD`,depth:2}),{oid:Dt}=await q.resolveAgainstMap({ref:Me.replace(`refs/remotes/${d}/`,""),fullref:Me,map:S.refs}),_t=[Dt];for(let Ee of await up({fs:e,cache:t,gitdir:l,oids:_t}))N.add(Ee)}catch(Me){}for(let Me of N)D.delete(Me)}if(w===O&&(p=!0),!p){if(k.startsWith("refs/tags")&&O!=="0000000000000000000000000000000000000000")throw new ms("tag-exists");if(w!=="0000000000000000000000000000000000000000"&&O!=="0000000000000000000000000000000000000000"&&!await E2({fs:e,cache:t,gitdir:l,oid:w,ancestor:O,depth:-1}))throw new ms("not-fast-forward")}}let Q=v2([...S.capabilities],["report-status","side-band-64k",`agent=${yu.agent}`]),de=await b8({capabilities:Q,triplets:[{oldoid:O,oid:w,fullRef:P}]}),ee=m?[]:await T2({fs:e,cache:t,gitdir:l,oids:[...D]}),J=await A.connect({http:r,onProgress:n,corsProxy:v,service:"git-receive-pack",url:E,auth:T,headers:y,body:[...de,...ee]}),{packfile:Pe,progress:me}=await fu.demux(J.body);if(i){let G=y2(me);yl(G,async N=>{await i(N)})}let F=await w8(Pe);if(J.headers&&(F.headers=J.headers),d&&F.ok&&F.refs[P].ok&&!k.startsWith("refs/tags")){let G=`refs/remotes/${d}/${P.replace("refs/heads","")}`;m?await q.deleteRef({fs:e,gitdir:l,ref:G}):await q.writeRef({fs:e,gitdir:l,ref:G,value:w})}if(F.ok&&Object.values(F.refs).every(G=>G.ok))return F;{let G=Object.entries(F.refs).filter(([N,Me])=>!Me.ok).map(([N,Me])=>` + - ${N}: ${Me.error}`).join("");throw new ol(G,F)}}async function x8({fs:e,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,onPrePush:o,dir:c,gitdir:l=$(c,".git"),ref:u,remoteRef:f,remote:d="origin",url:h,force:p=!1,delete:m=!1,corsProxy:v,headers:y={},cache:b={}}){try{return C("fs",e),C("http",t),C("gitdir",l),await _8({fs:new X(e),cache:b,http:t,onProgress:r,onMessage:n,onAuth:i,onAuthSuccess:a,onAuthFailure:s,onPrePush:o,gitdir:l,ref:u,remoteRef:f,remote:d,url:h,force:p,delete:m,corsProxy:v,headers:y})}catch(x){throw x.caller="git.push",x}}async function C2({fs:e,cache:t,gitdir:r,oid:n}){let{type:i,object:a}=await qe({fs:e,cache:t,gitdir:r,oid:n});if(i==="tag")return n=pr.from(a).parse().object,C2({fs:e,cache:t,gitdir:r,oid:n});if(i!=="blob")throw new Gt(n,i,"blob");return{oid:n,blob:new Uint8Array(a)}}async function P2({fs:e,cache:t,gitdir:r,oid:n,filepath:i=void 0}){return i!==void 0&&(n=await vl({fs:e,cache:t,gitdir:r,oid:n,filepath:i})),await C2({fs:e,cache:t,gitdir:r,oid:n})}async function wl({fs:e,dir:t,gitdir:r=$(t,".git"),oid:n,filepath:i,cache:a={}}){try{return C("fs",e),C("gitdir",r),C("oid",n),await P2({fs:new X(e),cache:a,gitdir:r,oid:n,filepath:i})}catch(s){throw s.caller="git.readBlob",s}}async function S8({fs:e,dir:t,gitdir:r=$(t,".git"),oid:n,cache:i={}}){try{return C("fs",e),C("gitdir",r),C("oid",n),await cu({fs:new X(e),cache:i,gitdir:r,oid:n})}catch(a){throw a.caller="git.readCommit",a}}async function E8({fs:e,cache:t,gitdir:r,ref:n="refs/notes/commits",oid:i}){let a=await q.resolve({gitdir:r,fs:e,ref:n}),{blob:s}=await P2({fs:e,cache:t,gitdir:r,oid:a,filepath:i});return s}async function A8({fs:e,dir:t,gitdir:r=$(t,".git"),ref:n="refs/notes/commits",oid:i,cache:a={}}){try{return C("fs",e),C("gitdir",r),C("ref",n),C("oid",i),await E8({fs:new X(e),cache:a,gitdir:r,ref:n,oid:i})}catch(s){throw s.caller="git.readNote",s}}async function k8({fs:e,dir:t,gitdir:r=$(t,".git"),oid:n,format:i="parsed",filepath:a=void 0,encoding:s=void 0,cache:o={}}){try{C("fs",e),C("gitdir",r),C("oid",n);let c=new X(e);a!==void 0&&(n=await vl({fs:c,cache:o,gitdir:r,oid:n,filepath:a}));let u=await qe({fs:c,cache:o,gitdir:r,oid:n,format:i==="parsed"?"content":i});if(u.oid=n,i==="parsed")switch(u.format="parsed",u.type){case"commit":u.object=tr.from(u.object).parse();break;case"tree":u.object=er.from(u.object).entries();break;case"blob":s?u.object=u.object.toString(s):(u.object=new Uint8Array(u.object),u.format="content");break;case"tag":u.object=pr.from(u.object).parse();break;default:throw new Gt(u.oid,u.type,"blob|commit|tag|tree")}else(u.format==="deflated"||u.format==="wrapped")&&(u.type=u.format);return u}catch(c){throw c.caller="git.readObject",c}}async function T8({fs:e,cache:t,gitdir:r,oid:n}){let{type:i,object:a}=await qe({fs:e,cache:t,gitdir:r,oid:n,format:"content"});if(i!=="tag")throw new Gt(n,i,"tag");let s=pr.from(a);return{oid:n,tag:s.parse(),payload:s.payload()}}async function C8({fs:e,dir:t,gitdir:r=$(t,".git"),oid:n,cache:i={}}){try{return C("fs",e),C("gitdir",r),C("oid",n),await T8({fs:new X(e),cache:i,gitdir:r,oid:n})}catch(a){throw a.caller="git.readTag",a}}async function P8({fs:e,dir:t,gitdir:r=$(t,".git"),oid:n,filepath:i=void 0,cache:a={}}){try{return C("fs",e),C("gitdir",r),C("oid",n),await Ss({fs:new X(e),cache:a,gitdir:r,oid:n,filepath:i})}catch(s){throw s.caller="git.readTree",s}}async function R8({fs:e,dir:t,gitdir:r=$(t,".git"),filepath:n,cache:i={}}){try{C("fs",e),C("gitdir",r),C("filepath",n),await mt.acquire({fs:new X(e),gitdir:r,cache:i},async function(a){a.delete({filepath:n})})}catch(a){throw a.caller="git.remove",a}}async function M8({fs:e,cache:t,onSign:r,gitdir:n,ref:i="refs/notes/commits",oid:a,author:s,committer:o,signingKey:c}){let l;try{l=await q.resolve({gitdir:n,fs:e,ref:i})}catch(p){if(!(p instanceof Ne))throw p}let f=(await Ss({fs:e,gitdir:n,oid:l||"4b825dc642cb6eb9a060e54bf8d69288fbee4904"})).tree;f=f.filter(p=>p.path!==a);let d=await Ap({fs:e,gitdir:n,tree:f});return await vu({fs:e,cache:t,onSign:r,gitdir:n,ref:i,tree:d,parent:l&&[l],message:`Note removed by 'isomorphic-git removeNote' +`,author:s,committer:o,signingKey:c})}async function O8({fs:e,onSign:t,dir:r,gitdir:n=$(r,".git"),ref:i="refs/notes/commits",oid:a,author:s,committer:o,signingKey:c,cache:l={}}){try{C("fs",e),C("gitdir",n),C("oid",a);let u=new X(e),f=await ca({fs:u,gitdir:n,author:s});if(!f)throw new zt("author");let d=await bs({fs:u,gitdir:n,author:f,committer:o});if(!d)throw new zt("committer");return await M8({fs:u,cache:l,onSign:t,gitdir:n,ref:i,oid:a,author:f,committer:d,signingKey:c})}catch(u){throw u.caller="git.removeNote",u}}async function I8({fs:e,gitdir:t,oldref:r,ref:n,checkout:i=!1}){if(n!==Jr.default.clean(n))throw new zn(n,Jr.default.clean(n));if(r!==Jr.default.clean(r))throw new zn(r,Jr.default.clean(r));let a=`refs/heads/${r}`,s=`refs/heads/${n}`;if(await q.exists({fs:e,gitdir:t,ref:s}))throw new Qr("branch",n,!1);let c=await q.resolve({fs:e,gitdir:t,ref:a,depth:1});await q.writeRef({fs:e,gitdir:t,ref:s,value:c}),await q.deleteRef({fs:e,gitdir:t,ref:a});let u=await fa({fs:e,gitdir:t,fullname:!0})===a;(i||u)&&await q.writeSymbolicRef({fs:e,gitdir:t,ref:"HEAD",value:s})}async function F8({fs:e,dir:t,gitdir:r=$(t,".git"),ref:n,oldref:i,checkout:a=!1}){try{return C("fs",e),C("gitdir",r),C("ref",n),C("oldref",i),await I8({fs:new X(e),gitdir:r,ref:n,oldref:i,checkout:a})}catch(s){throw s.caller="git.renameBranch",s}}async function R2({gitdir:e,type:t,object:r}){return Gn(_i.wrap({type:t,object:r}))}async function $8({fs:e,dir:t,gitdir:r=$(t,".git"),filepath:n,ref:i,cache:a={}}){try{C("fs",e),C("gitdir",r),C("filepath",n);let s=new X(e),o,c;try{o=await q.resolve({fs:s,gitdir:r,ref:i||"HEAD"})}catch(f){if(i)throw f}if(o)try{o=await vl({fs:s,cache:a,gitdir:r,oid:o,filepath:n})}catch(f){o=null}let l={ctime:new Date(0),mtime:new Date(0),dev:0,ino:0,mode:0,uid:0,gid:0,size:0},u=t&&await s.read($(t,n));u&&(c=await R2({gitdir:r,type:"blob",object:u}),o===c&&(l=await s.lstat($(t,n)))),await mt.acquire({fs:s,gitdir:r,cache:a},async function(f){f.delete({filepath:n}),o&&f.insert({filepath:n,stats:l,oid:o})})}catch(s){throw s.caller="git.reset",s}}async function L8({fs:e,dir:t,gitdir:r=$(t,".git"),ref:n,depth:i}){try{return C("fs",e),C("gitdir",r),C("ref",n),await q.resolve({fs:new X(e),gitdir:r,ref:n,depth:i})}catch(a){throw a.caller="git.resolveRef",a}}async function D8({fs:e,dir:t,gitdir:r=$(t,".git"),path:n,value:i,append:a=!1}){try{C("fs",e),C("gitdir",r),C("path",n);let s=new X(e),o=await We.get({fs:s,gitdir:r});a?await o.append(n,i):await o.set(n,i),await We.save({fs:s,gitdir:r,config:o})}catch(s){throw s.caller="git.setConfig",s}}async function N8({fs:e,dir:t,gitdir:r=$(t,".git"),filepath:n,cache:i={}}){try{C("fs",e),C("gitdir",r),C("filepath",n);let a=new X(e);if(await ws.isIgnored({fs:a,gitdir:r,dir:t,filepath:n}))return"ignored";let o=await j8({fs:a,cache:i,gitdir:r}),c=await M2({fs:a,cache:i,gitdir:r,tree:o,path:n}),l=await mt.acquire({fs:a,gitdir:r,cache:i},async function(m){for(let v of m)if(v.path===n)return v;return null}),u=await a.lstat($(t,n)),f=c!==null,d=l!==null,h=u!==null,p=async()=>{if(d&&!ru(l,u))return l.oid;{let m=await a.read($(t,n)),v=await R2({gitdir:r,type:"blob",object:m});return d&&l.oid===v&&u.size!==-1&&mt.acquire({fs:a,gitdir:r,cache:i},async function(y){y.insert({filepath:n,stats:u,oid:v})}),v}};if(!f&&!h&&!d)return"absent";if(!f&&!h&&d)return"*absent";if(!f&&h&&!d)return"*added";if(!f&&h&&d)return await p()===l.oid?"added":"*added";if(f&&!h&&!d)return"deleted";if(f&&!h&&d)return c===l.oid,"*deleted";if(f&&h&&!d)return await p()===c?"*undeleted":"*undeletemodified";if(f&&h&&d){let m=await p();return m===c?m===l.oid?"unmodified":"*unmodified":m===l.oid?"modified":"*modified"}}catch(a){throw a.caller="git.status",a}}async function M2({fs:e,cache:t,gitdir:r,tree:n,path:i}){typeof i=="string"&&(i=i.split("/"));let a=i.shift();for(let s of n)if(s.path===a){if(i.length===0)return s.oid;let{type:o,object:c}=await qe({fs:e,cache:t,gitdir:r,oid:s.oid});if(o==="tree"){let l=er.from(c);return M2({fs:e,cache:t,gitdir:r,tree:l,path:i})}if(o==="blob")throw new Gt(s.oid,o,"blob",i.join("/"))}return null}async function j8({fs:e,cache:t,gitdir:r}){let n;try{n=await q.resolve({fs:e,gitdir:r,ref:"HEAD"})}catch(a){if(a instanceof Ne)return[]}let{tree:i}=await Ss({fs:e,cache:t,gitdir:r,oid:n});return i}async function B8({fs:e,dir:t,gitdir:r=$(t,".git"),ref:n="HEAD",filepaths:i=["."],filter:a,cache:s={},ignored:o=!1}){try{C("fs",e),C("gitdir",r),C("ref",n);let c=new X(e);return await ys({fs:c,cache:s,dir:t,gitdir:r,trees:[wi({ref:n}),gu(),mu()],map:async function(l,[u,f,d]){if(!u&&!d&&f&&!o&&await ws.isIgnored({fs:c,dir:t,filepath:l})||!i.some(k=>m2(l,k)))return null;if(a&&!a(l))return;let[h,p,m]=await Promise.all([u&&u.type(),f&&f.type(),d&&d.type()]),v=[h,p,m].includes("blob");if((h==="tree"||h==="special")&&!v)return;if(h==="commit")return null;if((p==="tree"||p==="special")&&!v)return;if(m==="commit")return null;if((m==="tree"||m==="special")&&!v)return;let y=h==="blob"?await u.oid():void 0,b=m==="blob"?await d.oid():void 0,x;h!=="blob"&&p==="blob"&&m!=="blob"?x="42":p==="blob"&&(x=await f.oid());let E=[void 0,y,x,b],_=E.map(k=>E.indexOf(k));return _.shift(),[l,..._]}})}catch(c){throw c.caller="git.statusMatrix",c}}async function H8({fs:e,dir:t,gitdir:r=$(t,".git"),ref:n,object:i,force:a=!1}){try{C("fs",e),C("gitdir",r),C("ref",n);let s=new X(e);if(n===void 0)throw new Qt("ref");n=n.startsWith("refs/tags/")?n:`refs/tags/${n}`;let o=await q.resolve({fs:s,gitdir:r,ref:i||"HEAD"});if(!a&&await q.exists({fs:s,gitdir:r,ref:n}))throw new Qr("tag",n);await q.writeRef({fs:s,gitdir:r,ref:n,value:o})}catch(s){throw s.caller="git.tag",s}}async function U8({fs:e,dir:t,gitdir:r=$(t,".git"),cache:n={},filepath:i,oid:a,mode:s,add:o,remove:c,force:l}){try{C("fs",e),C("gitdir",r),C("filepath",i);let u=new X(e);if(c)return await mt.acquire({fs:u,gitdir:r,cache:n},async function(d){let h;if(!l&&(h=await u.lstat($(t,i)),h)){if(h.isDirectory())throw new xi("directory");return}d.has({filepath:i})&&d.delete({filepath:i})});let f;if(!a){if(f=await u.lstat($(t,i)),!f)throw new Ne(`file at "${i}" on disk and "remove" not set`);if(f.isDirectory())throw new xi("directory")}return await mt.acquire({fs:u,gitdir:r,cache:n},async function(d){if(!o&&!d.has({filepath:i}))throw new Ne(`file at "${i}" in index and "add" not set`);let h={ctime:new Date(0),mtime:new Date(0),dev:0,ino:0,mode:s,uid:0,gid:0,size:0};if(!a){h=f;let p=h.isSymbolicLink()?await u.readlink($(t,i)):await u.read($(t,i));a=await mr({fs:u,gitdir:r,type:"blob",format:"content",object:p})}return d.insert({filepath:i,oid:a,stats:h}),a})}catch(u){throw u.caller="git.updateIndex",u}}function G8(){try{return yu.version}catch(e){throw e.caller="git.version",e}}async function z8({fs:e,dir:t,gitdir:r=$(t,".git"),trees:n,map:i,reduce:a,iterate:s,cache:o={}}){try{return C("fs",e),C("gitdir",r),C("trees",n),await ys({fs:new X(e),cache:o,dir:t,gitdir:r,trees:n,map:i,reduce:a,iterate:s})}catch(c){throw c.caller="git.walk",c}}async function V8({fs:e,dir:t,gitdir:r=$(t,".git"),blob:n}){try{return C("fs",e),C("gitdir",r),C("blob",n),await mr({fs:new X(e),gitdir:r,type:"blob",object:n,format:"content"})}catch(i){throw i.caller="git.writeBlob",i}}async function W8({fs:e,gitdir:t,commit:r}){let n=tr.from(r).toObject();return await mr({fs:e,gitdir:t,type:"commit",object:n,format:"content"})}async function q8({fs:e,dir:t,gitdir:r=$(t,".git"),commit:n}){try{return C("fs",e),C("gitdir",r),C("commit",n),await W8({fs:new X(e),gitdir:r,commit:n})}catch(i){throw i.caller="git.writeCommit",i}}async function Y8({fs:e,dir:t,gitdir:r=$(t,".git"),type:n,object:i,format:a="parsed",oid:s,encoding:o=void 0}){try{let c=new X(e);if(a==="parsed"){switch(n){case"commit":i=tr.from(i).toObject();break;case"tree":i=er.from(i).toObject();break;case"blob":i=Buffer.from(i,o);break;case"tag":i=pr.from(i).toObject();break;default:throw new Gt(s||"",n,"blob|commit|tag|tree")}a="content"}return s=await mr({fs:c,gitdir:r,type:n,object:i,oid:s,format:a}),s}catch(c){throw c.caller="git.writeObject",c}}async function X8({fs:e,dir:t,gitdir:r=$(t,".git"),ref:n,value:i,force:a=!1,symbolic:s=!1}){try{C("fs",e),C("gitdir",r),C("ref",n),C("value",i);let o=new X(e);if(n!==Jr.default.clean(n))throw new zn(n,Jr.default.clean(n));if(!a&&await q.exists({fs:o,gitdir:r,ref:n}))throw new Qr("ref",n);s?await q.writeSymbolicRef({fs:o,gitdir:r,ref:n,value:i}):(i=await q.resolve({fs:o,gitdir:r,ref:i}),await q.writeRef({fs:o,gitdir:r,ref:n,value:i}))}catch(o){throw o.caller="git.writeRef",o}}async function Z8({fs:e,gitdir:t,tag:r}){let n=pr.from(r).toObject();return await mr({fs:e,gitdir:t,type:"tag",object:n,format:"content"})}async function K8({fs:e,dir:t,gitdir:r=$(t,".git"),tag:n}){try{return C("fs",e),C("gitdir",r),C("tag",n),await Z8({fs:new X(e),gitdir:r,tag:n})}catch(i){throw i.caller="git.writeTag",i}}async function J8({fs:e,dir:t,gitdir:r=$(t,".git"),tree:n}){try{return C("fs",e),C("gitdir",r),C("tree",n),await Ap({fs:new X(e),gitdir:r,tree:n})}catch(i){throw i.caller="git.writeTree",i}}var Q8={Errors:gl,STAGE:mu,TREE:wi,WORKDIR:gu,add:JM,abortMerge:qM,addNote:eO,addRemote:tO,annotatedTag:nO,branch:aO,checkout:oO,clone:yO,commit:wO,getConfig:BO,getConfigAll:UO,setConfig:D8,currentBranch:bO,deleteBranch:xO,deleteRef:SO,deleteRemote:AO,deleteTag:TO,expandOid:MO,expandRef:OO,fastForward:LO,fetch:DO,findMergeBase:NO,findRoot:jO,getRemoteInfo:GO,getRemoteInfo2:zO,hashBlob:WO,indexPack:YO,init:XO,isDescendent:ZO,isIgnored:KO,listBranches:JO,listFiles:e8,listNotes:r8,listRemotes:i8,listServerRefs:o8,listTags:l8,log:d8,merge:h8,packObjects:g8,pull:v8,push:x8,readBlob:wl,readCommit:S8,readNote:A8,readObject:k8,readTag:C8,readTree:P8,remove:R8,removeNote:O8,renameBranch:F8,resetIndex:$8,updateIndex:U8,resolveRef:L8,status:N8,statusMatrix:B8,tag:H8,version:G8,walk:z8,writeBlob:V8,writeCommit:q8,writeObject:Y8,writeRef:X8,writeTag:K8,writeTree:J8},ie=Q8;var OP=ze(require("path")),Ce=require("obsidian");g();var Sa=require("obsidian");g();var qg=require("child_process"),yT=ze(_u()),Zn=ze(require("fs/promises")),Xn=require("obsidian"),Be=ze(require("path")),Vl=require("path");g();var $u=ze(D2(),1),Mu=ze(_u(),1),c_=require("child_process"),W_=ze(Rp(),1),Cs=ze(Rp(),1),yx=require("node:events"),Iu=Object.defineProperty,yI=Object.defineProperties,wI=Object.getOwnPropertyDescriptor,bI=Object.getOwnPropertyDescriptors,Zp=Object.getOwnPropertyNames,N2=Object.getOwnPropertySymbols,vb=Object.prototype.hasOwnProperty,_I=Object.prototype.propertyIsEnumerable,j2=(e,t,r)=>t in e?Iu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Fr=(e,t)=>{for(var r in t||(t={}))vb.call(t,r)&&j2(e,r,t[r]);if(N2)for(var r of N2(t))_I.call(t,r)&&j2(e,r,t[r]);return e},xl=(e,t)=>yI(e,bI(t)),W=(e,t)=>function(){return e&&(t=(0,e[Zp(e)[0]])(e=0)),t},xI=(e,t)=>function(){return t||(0,e[Zp(e)[0]])((t={exports:{}}).exports,t),t.exports},rt=(e,t)=>{for(var r in t)Iu(e,r,{get:t[r],enumerable:!0})},SI=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Zp(t))!vb.call(e,i)&&i!==r&&Iu(e,i,{get:()=>t[i],enumerable:!(n=wI(t,i))||n.enumerable});return e},Ke=e=>SI(Iu({},"__esModule",{value:!0}),e),_l=(e,t,r)=>new Promise((n,i)=>{var a=c=>{try{o(r.next(c))}catch(l){i(l)}},s=c=>{try{o(r.throw(c))}catch(l){i(l)}},o=c=>c.done?n(c.value):Promise.resolve(c.value).then(a,s);o((r=r.apply(e,t)).next())});function EI(...e){let t=new String(e);return Fu.set(t,e),t}function Pu(e){return e instanceof String&&Fu.has(e)}function B2(e){return Fu.get(e)||[]}var Fu,kl=W({"src/lib/args/pathspec.ts"(){"use strict";Fu=new WeakMap}}),wr,Ei=W({"src/lib/errors/git-error.ts"(){"use strict";wr=class extends Error{constructor(e,t){super(t),this.task=e,Object.setPrototypeOf(this,new.target.prototype)}}}}),Tl,Rs=W({"src/lib/errors/git-response-error.ts"(){"use strict";Ei(),Tl=class extends wr{constructor(e,t){super(void 0,t||String(e)),this.git=e}}}}),yb,wb=W({"src/lib/errors/task-configuration-error.ts"(){"use strict";Ei(),yb=class extends wr{constructor(e){super(void 0,e)}}}});function bb(e){return typeof e=="function"?e:ga}function _b(e){return typeof e=="function"&&e!==ga}function xb(e,t){let r=e.indexOf(t);return r<=0?[e,""]:[e.substr(0,r),e.substr(r+1)]}function Sb(e,t=0){return Eb(e)&&e.length>t?e[t]:void 0}function ma(e,t=0){if(Eb(e)&&e.length>t)return e[e.length-1-t]}function Eb(e){return!!(e&&typeof e.length=="number")}function Cl(e="",t=!0,r=` +`){return e.split(r).reduce((n,i)=>{let a=t?i.trim():i;return a&&n.push(a),n},[])}function Kp(e,t){return Cl(e,!0).map(r=>t(r))}function Jp(e){return(0,$u.exists)(e,$u.FOLDER)}function ke(e,t){return Array.isArray(e)?e.includes(t)||e.push(t):e.add(t),t}function Ab(e,t){return Array.isArray(e)&&!e.includes(t)&&e.push(t),e}function Lu(e,t){if(Array.isArray(e)){let r=e.indexOf(t);r>=0&&e.splice(r,1)}else e.delete(t);return t}function xn(e){return Array.isArray(e)?e:[e]}function kb(e){return e.replace(/[\s-]+(.)/g,(t,r)=>r.toUpperCase())}function Tb(e){return xn(e).map(String)}function Ie(e,t=0){if(e==null)return t;let r=parseInt(e,10);return isNaN(r)?t:r}function Sl(e,t){let r=[];for(let n=0,i=e.length;n<i;n++)r.push(t,e[n]);return r}function El(e){return(Array.isArray(e)?Buffer.concat(e):e).toString("utf-8")}function Cb(e,t){return Object.assign({},...t.map(r=>r in e?{[r]:e[r]}:{}))}function Dp(e=0){return new Promise(t=>setTimeout(t,e))}function Np(e){if(e!==!1)return e}var Ps,ga,Pl,Du=W({"src/lib/utils/util.ts"(){"use strict";Ps="\0",ga=()=>{},Pl=Object.prototype.toString.call.bind(Object.prototype.toString)}});function Sn(e,t,r){return t(e)?e:arguments.length>2?r:void 0}function Qp(e,t){let r=Pu(e)?"string":typeof e;return/number|string|boolean/.test(r)&&(!t||!t.includes(r))}function em(e){return!!e&&Pl(e)==="[object Object]"}function Pb(e){return typeof e=="function"}var Rl,Pt,Rb,Ru,tm,Mb=W({"src/lib/utils/argument-filters.ts"(){"use strict";Du(),kl(),Rl=e=>Array.isArray(e),Pt=e=>typeof e=="string",Rb=e=>Array.isArray(e)&&e.every(Pt),Ru=e=>Pt(e)||Array.isArray(e)&&e.every(Pt),tm=e=>e==null||"number|boolean|function".includes(typeof e)?!1:Array.isArray(e)||typeof e=="string"||typeof e.length=="number"}}),jp,AI=W({"src/lib/utils/exit-codes.ts"(){"use strict";jp=(e=>(e[e.SUCCESS=0]="SUCCESS",e[e.ERROR=1]="ERROR",e[e.NOT_FOUND=-2]="NOT_FOUND",e[e.UNCLEAN=128]="UNCLEAN",e))(jp||{})}}),Al,kI=W({"src/lib/utils/git-output-streams.ts"(){"use strict";Al=class{constructor(e,t){this.stdOut=e,this.stdErr=t}asStrings(){return new Al(this.stdOut.toString("utf8"),this.stdErr.toString("utf8"))}}}}),ce,Si,TI=W({"src/lib/utils/line-parser.ts"(){"use strict";ce=class{constructor(e,t){this.matches=[],this.parse=(r,n)=>(this.resetMatches(),this._regExp.every((i,a)=>this.addMatch(i,a,r(a)))?this.useMatches(n,this.prepareMatches())!==!1:!1),this._regExp=Array.isArray(e)?e:[e],t&&(this.useMatches=t)}useMatches(e,t){throw new Error("LineParser:useMatches not implemented")}resetMatches(){this.matches.length=0}prepareMatches(){return this.matches}addMatch(e,t,r){let n=r&&e.exec(r);return n&&this.pushMatch(t,n),!!n}pushMatch(e,t){this.matches.push(...t.slice(1))}},Si=class extends ce{addMatch(e,t,r){return/^remote:\s/.test(String(r))&&super.addMatch(e,t,r)}pushMatch(e,t){(e>0||t.length>1)&&super.pushMatch(e,t)}}}});function Ob(...e){let t=process.cwd(),r=Object.assign(Fr({baseDir:t},Ib),...e.filter(n=>typeof n=="object"&&n));return r.baseDir=r.baseDir||t,r.trimmed=r.trimmed===!0,r}var Ib,CI=W({"src/lib/utils/simple-git-options.ts"(){"use strict";Ib={binary:"git",maxConcurrentProcesses:5,config:[],trimmed:!1}}});function rm(e,t=[]){return em(e)?Object.keys(e).reduce((r,n)=>{let i=e[n];return Pu(i)?r.push(i):Qp(i,["boolean"])?r.push(n+"="+i):r.push(n),r},t):t}function rr(e,t=0,r=!1){let n=[];for(let i=0,a=t<0?e.length:t;i<a;i++)"string|number".includes(typeof e[i])&&n.push(String(e[i]));return rm(nm(e),n),r||n.push(...PI(e)),n}function PI(e){let t=typeof ma(e)=="function";return Sn(ma(e,t?1:0),Rl,[])}function nm(e){let t=Pb(ma(e));return Sn(ma(e,t?1:0),em)}function Je(e,t=!0){let r=bb(ma(e));return t||_b(r)?r:void 0}var RI=W({"src/lib/utils/task-options.ts"(){"use strict";Mb(),Du(),kl()}});function Bp(e,t){return e(t.stdOut,t.stdErr)}function ir(e,t,r,n=!0){return xn(r).forEach(i=>{for(let a=Cl(i,n),s=0,o=a.length;s<o;s++){let c=(l=0)=>{if(!(s+l>=o))return a[s+l]};t.some(({parse:l})=>l(c,e))}}),e}var MI=W({"src/lib/utils/task-parser.ts"(){"use strict";Du()}}),Fb={};rt(Fb,{ExitCodes:()=>jp,GitOutputStreams:()=>Al,LineParser:()=>ce,NOOP:()=>ga,NULL:()=>Ps,RemoteLineParser:()=>Si,append:()=>ke,appendTaskOptions:()=>rm,asArray:()=>xn,asCamelCase:()=>kb,asFunction:()=>bb,asNumber:()=>Ie,asStringArray:()=>Tb,bufferToString:()=>El,callTaskParser:()=>Bp,createInstanceConfig:()=>Ob,delay:()=>Dp,filterArray:()=>Rl,filterFunction:()=>Pb,filterHasLength:()=>tm,filterPlainObject:()=>em,filterPrimitives:()=>Qp,filterString:()=>Pt,filterStringArray:()=>Rb,filterStringOrStringArray:()=>Ru,filterType:()=>Sn,first:()=>Sb,folderExists:()=>Jp,forEachLineWithContent:()=>Kp,getTrailingOptions:()=>rr,including:()=>Ab,isUserFunction:()=>_b,last:()=>ma,objectToString:()=>Pl,orVoid:()=>Np,parseStringResponse:()=>ir,pick:()=>Cb,prefixedArray:()=>Sl,remove:()=>Lu,splitOn:()=>xb,toLinesWithContent:()=>Cl,trailingFunctionArgument:()=>Je,trailingOptionsArgument:()=>nm});var oe=W({"src/lib/utils/index.ts"(){"use strict";Mb(),AI(),kI(),TI(),CI(),RI(),MI(),Du()}}),$b={};rt($b,{CheckRepoActions:()=>Hp,checkIsBareRepoTask:()=>Db,checkIsRepoRootTask:()=>Lb,checkIsRepoTask:()=>OI});function OI(e){switch(e){case"bare":return Db();case"root":return Lb()}return{commands:["rev-parse","--is-inside-work-tree"],format:"utf-8",onError:Nu,parser:im}}function Lb(){return{commands:["rev-parse","--git-dir"],format:"utf-8",onError:Nu,parser(t){return/^\.(git)?$/.test(t.trim())}}}function Db(){return{commands:["rev-parse","--is-bare-repository"],format:"utf-8",onError:Nu,parser:im}}function II(e){return/(Not a git repository|Kein Git-Repository)/i.test(String(e))}var Hp,Nu,im,Nb=W({"src/lib/tasks/check-is-repo.ts"(){"use strict";oe(),Hp=(e=>(e.BARE="bare",e.IN_TREE="tree",e.IS_REPO_ROOT="root",e))(Hp||{}),Nu=({exitCode:e},t,r,n)=>{if(e===128&&II(t))return r(Buffer.from("false"));n(t)},im=e=>e.trim()==="true"}});function FI(e,t){let r=new jb(e),n=e?Hb:Bb;return Cl(t).forEach(i=>{let a=i.replace(n,"");r.paths.push(a),(Ub.test(a)?r.folders:r.files).push(a)}),r}var jb,Bb,Hb,Ub,$I=W({"src/lib/responses/CleanSummary.ts"(){"use strict";oe(),jb=class{constructor(e){this.dryRun=e,this.paths=[],this.files=[],this.folders=[]}},Bb=/^[a-z]+\s*/i,Hb=/^[a-z]+\s+[a-z]+\s*/i,Ub=/\/$/}}),Up={};rt(Up,{EMPTY_COMMANDS:()=>ju,adhocExecTask:()=>Gb,configurationErrorTask:()=>nr,isBufferTask:()=>Vb,isEmptyTask:()=>Wb,straightThroughBufferTask:()=>zb,straightThroughStringTask:()=>Vt});function Gb(e){return{commands:ju,format:"empty",parser:e}}function nr(e){return{commands:ju,format:"empty",parser(){throw typeof e=="string"?new yb(e):e}}}function Vt(e,t=!1){return{commands:e,format:"utf-8",parser(r){return t?String(r).trim():r}}}function zb(e){return{commands:e,format:"buffer",parser(t){return t}}}function Vb(e){return e.format==="buffer"}function Wb(e){return e.format==="empty"||!e.commands.length}var ju,tt=W({"src/lib/tasks/task.ts"(){"use strict";wb(),ju=[]}}),qb={};rt(qb,{CONFIG_ERROR_INTERACTIVE_MODE:()=>am,CONFIG_ERROR_MODE_REQUIRED:()=>sm,CONFIG_ERROR_UNKNOWN_OPTION:()=>om,CleanOptions:()=>Au,cleanTask:()=>Yb,cleanWithOptionsTask:()=>LI,isCleanOptionsArray:()=>DI});function LI(e,t){let{cleanMode:r,options:n,valid:i}=NI(e);return r?i.options?(n.push(...t),n.some(HI)?nr(am):Yb(r,n)):nr(om+JSON.stringify(e)):nr(sm)}function Yb(e,t){return{commands:["clean",`-${e}`,...t],format:"utf-8",parser(n){return FI(e==="n",n)}}}function DI(e){return Array.isArray(e)&&e.every(t=>lm.has(t))}function NI(e){let t,r=[],n={cleanMode:!1,options:!0};return e.replace(/[^a-z]i/g,"").split("").forEach(i=>{jI(i)?(t=i,n.cleanMode=!0):n.options=n.options&&BI(r[r.length]=`-${i}`)}),{cleanMode:t,options:r,valid:n}}function jI(e){return e==="f"||e==="n"}function BI(e){return/^-[a-z]$/i.test(e)&&lm.has(e.charAt(1))}function HI(e){return/^-[^\-]/.test(e)?e.indexOf("i")>0:e==="--interactive"}var am,sm,om,Au,lm,Xb=W({"src/lib/tasks/clean.ts"(){"use strict";$I(),oe(),tt(),am="Git clean interactive mode is not supported",sm='Git clean mode parameter ("n" or "f") is required',om="Git clean unknown option found in: ",Au=(e=>(e.DRY_RUN="n",e.FORCE="f",e.IGNORED_INCLUDED="x",e.IGNORED_ONLY="X",e.EXCLUDING="e",e.QUIET="q",e.RECURSIVE="d",e))(Au||{}),lm=new Set(["i",...Tb(Object.values(Au))])}});function UI(e){let t=new Kb;for(let r of Zb(e))t.addValue(r.file,String(r.key),r.value);return t}function GI(e,t){let r=null,n=[],i=new Map;for(let a of Zb(e,t))a.key===t&&(n.push(r=a.value),i.has(a.file)||i.set(a.file,[]),i.get(a.file).push(r));return{key:t,paths:Array.from(i.keys()),scopes:i,value:r,values:n}}function zI(e){return e.replace(/^(file):/,"")}function*Zb(e,t=null){let r=e.split("\0");for(let n=0,i=r.length-1;n<i;){let a=zI(r[n++]),s=r[n++],o=t;if(s.includes(` +`)){let c=xb(s,` +`);o=c[0],s=c[1]}yield{file:a,key:o,value:s}}}var Kb,VI=W({"src/lib/responses/ConfigList.ts"(){"use strict";oe(),Kb=class{constructor(){this.files=[],this.values=Object.create(null)}get all(){return this._all||(this._all=this.files.reduce((e,t)=>Object.assign(e,this.values[t]),{})),this._all}addFile(e){if(!(e in this.values)){let t=ma(this.files);this.values[e]=t?Object.create(this.values[t]):{},this.files.push(e)}return this.values[e]}addValue(e,t,r){let n=this.addFile(e);n.hasOwnProperty(t)?Array.isArray(n[t])?n[t].push(r):n[t]=[n[t],r]:n[t]=r,this._all=void 0}}}});function Mp(e,t){return typeof e=="string"&&Gp.hasOwnProperty(e)?e:t}function WI(e,t,r,n){let i=["config",`--${n}`];return r&&i.push("--add"),i.push(e,t),{commands:i,format:"utf-8",parser(a){return a}}}function qI(e,t){let r=["config","--null","--show-origin","--get-all",e];return t&&r.splice(1,0,`--${t}`),{commands:r,format:"utf-8",parser(n){return GI(n,e)}}}function YI(e){let t=["config","--list","--show-origin","--null"];return e&&t.push(`--${e}`),{commands:t,format:"utf-8",parser(r){return UI(r)}}}function XI(){return{addConfig(e,t,...r){return this._runTask(WI(e,t,r[0]===!0,Mp(r[1],"local")),Je(arguments))},getConfig(e,t){return this._runTask(qI(e,Mp(t,void 0)),Je(arguments))},listConfig(...e){return this._runTask(YI(Mp(e[0],void 0)),Je(arguments))}}}var Gp,Jb=W({"src/lib/tasks/config.ts"(){"use strict";VI(),oe(),Gp=(e=>(e.system="system",e.global="global",e.local="local",e.worktree="worktree",e))(Gp||{})}});function ZI(e){return Qb.has(e)}var Op,Qb,e_=W({"src/lib/tasks/diff-name-status.ts"(){"use strict";Op=(e=>(e.ADDED="A",e.COPIED="C",e.DELETED="D",e.MODIFIED="M",e.RENAMED="R",e.CHANGED="T",e.UNMERGED="U",e.UNKNOWN="X",e.BROKEN="B",e))(Op||{}),Qb=new Set(Object.values(Op))}});function KI(...e){return new r_().param(...e)}function JI(e){let t=new Set,r={};return Kp(e,n=>{let[i,a,s]=n.split(Ps);t.add(i),(r[i]=r[i]||[]).push({line:Ie(a),path:i,preview:s})}),{paths:t,results:r}}function QI(){return{grep(e){let t=Je(arguments),r=rr(arguments);for(let i of t_)if(r.includes(i))return this._runTask(nr(`git.grep: use of "${i}" is not supported.`),t);typeof e=="string"&&(e=KI().param(e));let n=["grep","--null","-n","--full-name",...r,...e];return this._runTask({commands:n,format:"utf-8",parser(i){return JI(i)}},t)}}}var t_,bl,H2,r_,n_=W({"src/lib/tasks/grep.ts"(){"use strict";oe(),tt(),t_=["-h"],bl=Symbol("grepQuery"),r_=class{constructor(){this[H2]=[]}*[(H2=bl,Symbol.iterator)](){for(let e of this[bl])yield e}and(...e){return e.length&&this[bl].push("--and","(",...Sl(e,"-e"),")"),this}param(...e){return this[bl].push(...Sl(e,"-e")),this}}}}),i_={};rt(i_,{ResetMode:()=>ku,getResetMode:()=>tF,resetTask:()=>eF});function eF(e,t){let r=["reset"];return a_(e)&&r.push(`--${e}`),r.push(...t),Vt(r)}function tF(e){if(a_(e))return e;switch(typeof e){case"string":case"undefined":return"soft"}}function a_(e){return s_.includes(e)}var ku,s_,o_=W({"src/lib/tasks/reset.ts"(){"use strict";tt(),ku=(e=>(e.MIXED="mixed",e.SOFT="soft",e.HARD="hard",e.MERGE="merge",e.KEEP="keep",e))(ku||{}),s_=Array.from(Object.values(ku))}});function rF(){return(0,Mu.default)("simple-git")}function U2(e,t,r){return!t||!String(t).replace(/\s*/,"")?r?(n,...i)=>{e(n,...i),r(n,...i)}:e:(n,...i)=>{e(`%s ${n}`,t,...i),r&&r(n,...i)}}function nF(e,t,{namespace:r}){if(typeof e=="string")return e;let n=t&&t.namespace||"";return n.startsWith(r)?n.substr(r.length+1):n||r}function cm(e,t,r,n=rF()){let i=e&&`[${e}]`||"",a=[],s=typeof t=="string"?n.extend(t):t,o=nF(Sn(t,Pt),s,n);return l(r);function c(u,f){return ke(a,cm(e,o.replace(/^[^:]+/,u),f,n))}function l(u){let f=u&&`[${u}]`||"",d=s&&U2(s,f)||ga,h=U2(n,`${i} ${f}`,d);return Object.assign(s?d:h,{label:e,sibling:c,info:h,step:l})}}var l_=W({"src/lib/git-logger.ts"(){"use strict";oe(),Mu.default.formatters.L=e=>String(tm(e)?e.length:"-"),Mu.default.formatters.B=e=>Buffer.isBuffer(e)?e.toString("utf8"):Pl(e)}}),Su,zp,iF=W({"src/lib/runners/tasks-pending-queue.ts"(){"use strict";Ei(),l_(),Su=class{constructor(e="GitExecutor"){this.logLabel=e,this._queue=new Map}withProgress(e){return this._queue.get(e)}createProgress(e){let t=Su.getName(e.commands[0]),r=cm(this.logLabel,t);return{task:e,logger:r,name:t}}push(e){let t=this.createProgress(e);return t.logger("Adding task to the queue, commands = %o",e.commands),this._queue.set(e,t),t}fatal(e){for(let[t,{logger:r}]of Array.from(this._queue.entries()))t===e.task?(r.info("Failed %o",e),r("Fatal exception, any as-yet un-started tasks run through this executor will not be attempted")):r.info("A fatal exception occurred in a previous task, the queue has been purged: %o",e.message),this.complete(t);if(this._queue.size!==0)throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`)}complete(e){this.withProgress(e)&&this._queue.delete(e)}attempt(e){let t=this.withProgress(e);if(!t)throw new wr(void 0,"TasksPendingQueue: attempt called for an unknown task");return t.logger("Starting task"),t}static getName(e="empty"){return`task:${e}:${++Su.counter}`}},zp=Su,zp.counter=0}});function pa(e,t){return{method:Sb(e.commands)||"",commands:t}}function aF(e,t){return r=>{t("[ERROR] child process exception %o",r),e.push(Buffer.from(String(r.stack),"ascii"))}}function G2(e,t,r,n){return i=>{r("%s received %L bytes",t,i),n("%B",i),e.push(i)}}var Vp,sF=W({"src/lib/runners/git-executor-chain.ts"(){"use strict";Ei(),tt(),oe(),iF(),Vp=class{constructor(e,t,r){this._executor=e,this._scheduler=t,this._plugins=r,this._chain=Promise.resolve(),this._queue=new zp}get cwd(){return this._cwd||this._executor.cwd}set cwd(e){this._cwd=e}get env(){return this._executor.env}get outputHandler(){return this._executor.outputHandler}chain(){return this}push(e){return this._queue.push(e),this._chain=this._chain.then(()=>this.attemptTask(e))}attemptTask(e){return _l(this,null,function*(){let t=yield this._scheduler.next(),r=()=>this._queue.complete(e);try{let{logger:n}=this._queue.attempt(e);return yield Wb(e)?this.attemptEmptyTask(e,n):this.attemptRemoteTask(e,n)}catch(n){throw this.onFatalException(e,n)}finally{r(),t()}})}onFatalException(e,t){let r=t instanceof wr?Object.assign(t,{task:e}):new wr(e,t&&String(t));return this._chain=Promise.resolve(),this._queue.fatal(r),r}attemptRemoteTask(e,t){return _l(this,null,function*(){let r=this._plugins.exec("spawn.binary","",pa(e,e.commands)),n=this._plugins.exec("spawn.args",[...e.commands],pa(e,e.commands)),i=yield this.gitResponse(e,r,n,this.outputHandler,t.step("SPAWN")),a=yield this.handleTaskData(e,n,i,t.step("HANDLE"));return t("passing response to task's parser as a %s",e.format),Vb(e)?Bp(e.parser,a):Bp(e.parser,a.asStrings())})}attemptEmptyTask(e,t){return _l(this,null,function*(){return t("empty task bypassing child process to call to task's parser"),e.parser(this)})}handleTaskData(e,t,r,n){let{exitCode:i,rejection:a,stdOut:s,stdErr:o}=r;return new Promise((c,l)=>{n("Preparing to handle process response exitCode=%d stdOut=",i);let{error:u}=this._plugins.exec("task.error",{error:a},Fr(Fr({},pa(e,t)),r));if(u&&e.onError)return n.info("exitCode=%s handling with custom error handler"),e.onError(r,u,f=>{n.info("custom error handler treated as success"),n("custom error returned a %s",Pl(f)),c(new Al(Array.isArray(f)?Buffer.concat(f):f,Buffer.concat(o)))},l);if(u)return n.info("handling as error: exitCode=%s stdErr=%s rejection=%o",i,o.length,a),l(u);n.info("retrieving task output complete"),c(new Al(Buffer.concat(s),Buffer.concat(o)))})}gitResponse(e,t,r,n,i){return _l(this,null,function*(){let a=i.sibling("output"),s=this._plugins.exec("spawn.options",{cwd:this.cwd,env:this.env,windowsHide:!0},pa(e,e.commands));return new Promise(o=>{let c=[],l=[];i.info("%s %o",t,r),i("%O",s);let u=this._beforeSpawn(e,r);if(u)return o({stdOut:c,stdErr:l,exitCode:9901,rejection:u});this._plugins.exec("spawn.before",void 0,xl(Fr({},pa(e,r)),{kill(d){u=d||u}}));let f=(0,c_.spawn)(t,r,s);f.stdout.on("data",G2(c,"stdOut",i,a.step("stdOut"))),f.stderr.on("data",G2(l,"stdErr",i,a.step("stdErr"))),f.on("error",aF(l,i)),n&&(i("Passing child process stdOut/stdErr to custom outputHandler"),n(t,f.stdout,f.stderr,[...r])),this._plugins.exec("spawn.after",void 0,xl(Fr({},pa(e,r)),{spawned:f,close(d,h){o({stdOut:c,stdErr:l,exitCode:d,rejection:u||h})},kill(d){f.killed||(u=d,f.kill("SIGINT"))}}))})})}_beforeSpawn(e,t){let r;return this._plugins.exec("spawn.before",void 0,xl(Fr({},pa(e,t)),{kill(n){r=n||r}})),r}}}}),u_={};rt(u_,{GitExecutor:()=>f_});var f_,oF=W({"src/lib/runners/git-executor.ts"(){"use strict";sF(),f_=class{constructor(e,t,r){this.cwd=e,this._scheduler=t,this._plugins=r,this._chain=new Vp(this,this._scheduler,this._plugins)}chain(){return new Vp(this,this._scheduler,this._plugins)}push(e){return this._chain.push(e)}}}});function lF(e,t,r=ga){let n=a=>{r(null,a)},i=a=>{(a==null?void 0:a.task)===e&&r(a instanceof Tl?cF(a):a,void 0)};t.then(n,i)}function cF(e){let t=n=>{console.warn(`simple-git deprecation notice: accessing GitResponseError.${n} should be GitResponseError.git.${n}, this will no longer be available in version 3`),t=ga};return Object.create(e,Object.getOwnPropertyNames(e.git).reduce(r,{}));function r(n,i){return i in e||(n[i]={enumerable:!1,configurable:!1,get(){return t(i),e.git[i]}}),n}}var uF=W({"src/lib/task-callback.ts"(){"use strict";Rs(),oe()}});function z2(e,t){return Gb(r=>{if(!Jp(e))throw new Error(`Git.cwd: cannot change to non-directory "${e}"`);return(t||r).cwd=e})}var fF=W({"src/lib/tasks/change-working-directory.ts"(){"use strict";oe(),tt()}});function Ip(e){let t=["checkout",...e];return t[1]==="-b"&&t.includes("-B")&&(t[1]=Lu(t,"-B")),Vt(t)}function dF(){return{checkout(){return this._runTask(Ip(rr(arguments,1)),Je(arguments))},checkoutBranch(e,t){return this._runTask(Ip(["-b",e,t,...rr(arguments)]),Je(arguments))},checkoutLocalBranch(e){return this._runTask(Ip(["-b",e,...rr(arguments)]),Je(arguments))}}}var hF=W({"src/lib/tasks/checkout.ts"(){"use strict";oe(),tt()}});function pF(){return{count:0,garbage:0,inPack:0,packs:0,prunePackable:0,size:0,sizeGarbage:0,sizePack:0}}function mF(){return{countObjects(){return this._runTask({commands:["count-objects","--verbose"],format:"utf-8",parser(e){return ir(pF(),[d_],e)}})}}}var d_,gF=W({"src/lib/tasks/count-objects.ts"(){"use strict";oe(),d_=new ce(/([a-z-]+): (\d+)$/,(e,[t,r])=>{let n=kb(t);e.hasOwnProperty(n)&&(e[n]=Ie(r))})}});function vF(e){return ir({author:null,branch:"",commit:"",root:!1,summary:{changes:0,insertions:0,deletions:0}},h_,e)}var h_,yF=W({"src/lib/parsers/parse-commit.ts"(){"use strict";oe(),h_=[new ce(/^\[([^\s]+)( \([^)]+\))? ([^\]]+)/,(e,[t,r,n])=>{e.branch=t,e.commit=n,e.root=!!r}),new ce(/\s*Author:\s(.+)/i,(e,[t])=>{let r=t.split("<"),n=r.pop();!n||!n.includes("@")||(e.author={email:n.substr(0,n.length-1),name:r.join("<").trim()})}),new ce(/(\d+)[^,]*(?:,\s*(\d+)[^,]*)(?:,\s*(\d+))/g,(e,[t,r,n])=>{e.summary.changes=parseInt(t,10)||0,e.summary.insertions=parseInt(r,10)||0,e.summary.deletions=parseInt(n,10)||0}),new ce(/^(\d+)[^,]*(?:,\s*(\d+)[^(]+\(([+-]))?/,(e,[t,r,n])=>{e.summary.changes=parseInt(t,10)||0;let i=parseInt(r,10)||0;n==="-"?e.summary.deletions=i:n==="+"&&(e.summary.insertions=i)})]}});function wF(e,t,r){return{commands:["-c","core.abbrev=40","commit",...Sl(e,"-m"),...t,...r],format:"utf-8",parser:vF}}function bF(){return{commit(t,...r){let n=Je(arguments),i=e(t)||wF(xn(t),xn(Sn(r[0],Ru,[])),[...Sn(r[1],Rl,[]),...rr(arguments,0,!0)]);return this._runTask(i,n)}};function e(t){return!Ru(t)&&nr("git.commit: requires the commit message to be supplied as a string/string[]")}}var _F=W({"src/lib/tasks/commit.ts"(){"use strict";yF(),oe(),tt()}});function xF(){return{firstCommit(){return this._runTask(Vt(["rev-list","--max-parents=0","HEAD"],!0),Je(arguments))}}}var SF=W({"src/lib/tasks/first-commit.ts"(){"use strict";oe(),tt()}});function EF(e,t){let r=["hash-object",e];return t&&r.push("-w"),Vt(r,!0)}var AF=W({"src/lib/tasks/hash-object.ts"(){"use strict";tt()}});function kF(e,t,r){let n=String(r).trim(),i;if(i=p_.exec(n))return new Tu(e,t,!1,i[1]);if(i=m_.exec(n))return new Tu(e,t,!0,i[1]);let a="",s=n.split(" ");for(;s.length;)if(s.shift()==="in"){a=s.join(" ");break}return new Tu(e,t,/^re/i.test(n),a)}var Tu,p_,m_,TF=W({"src/lib/responses/InitSummary.ts"(){"use strict";Tu=class{constructor(e,t,r,n){this.bare=e,this.path=t,this.existing=r,this.gitDir=n}},p_=/^Init.+ repository in (.+)$/,m_=/^Rein.+ in (.+)$/}});function CF(e){return e.includes(um)}function PF(e=!1,t,r){let n=["init",...r];return e&&!CF(n)&&n.splice(1,0,um),{commands:n,format:"utf-8",parser(i){return kF(n.includes("--bare"),t,i)}}}var um,RF=W({"src/lib/tasks/init.ts"(){"use strict";TF(),um="--bare"}});function fm(e){for(let t=0;t<e.length;t++){let r=dm.exec(e[t]);if(r)return`--${r[1]}`}return""}function MF(e){return dm.test(e)}var dm,Ml=W({"src/lib/args/log-format.ts"(){"use strict";dm=/^--(stat|numstat|name-only|name-status)(=|$)/}}),g_,OF=W({"src/lib/responses/DiffSummary.ts"(){"use strict";g_=class{constructor(){this.changed=0,this.deletions=0,this.insertions=0,this.files=[]}}}});function v_(e=""){let t=y_[e];return r=>ir(new g_,t,r,!1)}var Fp,V2,W2,q2,y_,w_=W({"src/lib/parsers/parse-diff-summary.ts"(){"use strict";Ml(),OF(),e_(),oe(),Fp=[new ce(/^(.+)\s+\|\s+(\d+)(\s+[+\-]+)?$/,(e,[t,r,n=""])=>{e.files.push({file:t.trim(),changes:Ie(r),insertions:n.replace(/[^+]/g,"").length,deletions:n.replace(/[^-]/g,"").length,binary:!1})}),new ce(/^(.+) \|\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/,(e,[t,r,n])=>{e.files.push({file:t.trim(),before:Ie(r),after:Ie(n),binary:!0})}),new ce(/(\d+) files? changed\s*((?:, \d+ [^,]+){0,2})/,(e,[t,r])=>{let n=/(\d+) i/.exec(r),i=/(\d+) d/.exec(r);e.changed=Ie(t),e.insertions=Ie(n==null?void 0:n[1]),e.deletions=Ie(i==null?void 0:i[1])})],V2=[new ce(/(\d+)\t(\d+)\t(.+)$/,(e,[t,r,n])=>{let i=Ie(t),a=Ie(r);e.changed++,e.insertions+=i,e.deletions+=a,e.files.push({file:n,changes:i+a,insertions:i,deletions:a,binary:!1})}),new ce(/-\t-\t(.+)$/,(e,[t])=>{e.changed++,e.files.push({file:t,after:0,before:0,binary:!0})})],W2=[new ce(/(.+)$/,(e,[t])=>{e.changed++,e.files.push({file:t,changes:0,insertions:0,deletions:0,binary:!1})})],q2=[new ce(/([ACDMRTUXB])([0-9]{0,3})\t(.[^\t]*)(\t(.[^\t]*))?$/,(e,[t,r,n,i,a])=>{e.changed++,e.files.push({file:a!=null?a:n,changes:0,insertions:0,deletions:0,binary:!1,status:Np(ZI(t)&&t),from:Np(!!a&&n!==a&&n),similarity:Ie(r)})})],y_={"":Fp,"--stat":Fp,"--numstat":V2,"--name-status":q2,"--name-only":W2}}});function IF(e,t){return t.reduce((r,n,i)=>(r[n]=e[i]||"",r),Object.create({diff:null}))}function b_(e=mm,t=__,r=""){let n=v_(r);return function(i){let a=Cl(i.trim(),!1,hm).map(function(s){let o=s.split(pm),c=IF(o[0].split(e),t);return o.length>1&&o[1].trim()&&(c.diff=n(o[1])),c});return{all:a,latest:a.length&&a[0]||null,total:a.length}}}var hm,pm,mm,__,x_=W({"src/lib/parsers/parse-list-log-summary.ts"(){"use strict";oe(),w_(),Ml(),hm="\xF2\xF2\xF2\xF2\xF2\xF2 ",pm=" \xF2\xF2",mm=" \xF2 ",__=["hash","date","message","refs","author_name","author_email"]}}),S_={};rt(S_,{diffSummaryTask:()=>FF,validateLogFormatConfig:()=>Bu});function FF(e){let t=fm(e),r=["diff"];return t===""&&(t="--stat",r.push("--stat=4096")),r.push(...e),Bu(r)||{commands:r,format:"utf-8",parser:v_(t)}}function Bu(e){let t=e.filter(MF);if(t.length>1)return nr(`Summary flags are mutually exclusive - pick one of ${t.join(",")}`);if(t.length&&e.includes("-z"))return nr(`Summary flag ${t} parsing is not compatible with null termination option '-z'`)}var gm=W({"src/lib/tasks/diff.ts"(){"use strict";Ml(),w_(),tt()}});function $F(e,t){let r=[],n=[];return Object.keys(e).forEach(i=>{r.push(i),n.push(String(e[i]))}),[r,n.join(t)]}function LF(e){return Object.keys(e).reduce((t,r)=>(r in Wp||(t[r]=e[r]),t),{})}function E_(e={},t=[]){let r=Sn(e.splitter,Pt,mm),n=!Qp(e.format)&&e.format?e.format:{hash:"%H",date:e.strictDate===!1?"%ai":"%aI",message:"%s",refs:"%D",body:e.multiLine?"%B":"%b",author_name:e.mailMap!==!1?"%aN":"%an",author_email:e.mailMap!==!1?"%aE":"%ae"},[i,a]=$F(n,r),s=[],o=[`--pretty=format:${hm}${a}${pm}`,...t],c=e.n||e["max-count"]||e.maxCount;if(c&&o.push(`--max-count=${c}`),e.from||e.to){let l=e.symmetric!==!1?"...":"..";s.push(`${e.from||""}${l}${e.to||""}`)}return Pt(e.file)&&o.push("--follow",EI(e.file)),rm(LF(e),o),{fields:i,splitter:r,commands:[...o,...s]}}function DF(e,t,r){let n=b_(e,t,fm(r));return{commands:["log",...r],format:"utf-8",parser:n}}function NF(){return{log(...r){let n=Je(arguments),i=E_(nm(arguments),Sn(arguments[0],Rl)),a=t(...r)||Bu(i.commands)||e(i);return this._runTask(a,n)}};function e(r){return DF(r.splitter,r.fields,r.commands)}function t(r,n){return Pt(r)&&Pt(n)&&nr("git.log(string, string) should be replaced with git.log({ from: string, to: string })")}}var Wp,A_=W({"src/lib/tasks/log.ts"(){"use strict";Ml(),kl(),x_(),oe(),tt(),gm(),Wp=(e=>(e[e["--pretty"]=0]="--pretty",e[e["max-count"]=1]="max-count",e[e.maxCount=2]="maxCount",e[e.n=3]="n",e[e.file=4]="file",e[e.format=5]="format",e[e.from=6]="from",e[e.to=7]="to",e[e.splitter=8]="splitter",e[e.symmetric=9]="symmetric",e[e.mailMap=10]="mailMap",e[e.multiLine=11]="multiLine",e[e.strictDate=12]="strictDate",e))(Wp||{})}}),Cu,k_,jF=W({"src/lib/responses/MergeSummary.ts"(){"use strict";Cu=class{constructor(e,t=null,r){this.reason=e,this.file=t,this.meta=r}toString(){return`${this.file}:${this.reason}`}},k_=class{constructor(){this.conflicts=[],this.merges=[],this.result="success"}get failed(){return this.conflicts.length>0}get reason(){return this.result}toString(){return this.conflicts.length?`CONFLICTS: ${this.conflicts.join(", ")}`:"OK"}}}}),qp,T_,BF=W({"src/lib/responses/PullSummary.ts"(){"use strict";qp=class{constructor(){this.remoteMessages={all:[]},this.created=[],this.deleted=[],this.files=[],this.deletions={},this.insertions={},this.summary={changes:0,deletions:0,insertions:0}}},T_=class{constructor(){this.remote="",this.hash={local:"",remote:""},this.branch={local:"",remote:""},this.message=""}toString(){return this.message}}}});function $p(e){return e.objects=e.objects||{compressing:0,counting:0,enumerating:0,packReused:0,reused:{count:0,delta:0},total:{count:0,delta:0}}}function Y2(e){let t=/^\s*(\d+)/.exec(e),r=/delta (\d+)/i.exec(e);return{count:Ie(t&&t[1]||"0"),delta:Ie(r&&r[1]||"0")}}var C_,HF=W({"src/lib/parsers/parse-remote-objects.ts"(){"use strict";oe(),C_=[new Si(/^remote:\s*(enumerating|counting|compressing) objects: (\d+),/i,(e,[t,r])=>{let n=t.toLowerCase(),i=$p(e.remoteMessages);Object.assign(i,{[n]:Ie(r)})}),new Si(/^remote:\s*(enumerating|counting|compressing) objects: \d+% \(\d+\/(\d+)\),/i,(e,[t,r])=>{let n=t.toLowerCase(),i=$p(e.remoteMessages);Object.assign(i,{[n]:Ie(r)})}),new Si(/total ([^,]+), reused ([^,]+), pack-reused (\d+)/i,(e,[t,r,n])=>{let i=$p(e.remoteMessages);i.total=Y2(t),i.reused=Y2(r),i.packReused=Ie(n)})]}});function P_(e,t){return ir({remoteMessages:new M_},R_,t)}var R_,M_,O_=W({"src/lib/parsers/parse-remote-messages.ts"(){"use strict";oe(),HF(),R_=[new Si(/^remote:\s*(.+)$/,(e,[t])=>(e.remoteMessages.all.push(t.trim()),!1)),...C_,new Si([/create a (?:pull|merge) request/i,/\s(https?:\/\/\S+)$/],(e,[t])=>{e.remoteMessages.pullRequestUrl=t}),new Si([/found (\d+) vulnerabilities.+\(([^)]+)\)/i,/\s(https?:\/\/\S+)$/],(e,[t,r,n])=>{e.remoteMessages.vulnerabilities={count:Ie(t),summary:r,url:n}})],M_=class{constructor(){this.all=[]}}}});function UF(e,t){let r=ir(new T_,I_,[e,t]);return r.message&&r}var X2,Z2,K2,J2,I_,Q2,vm,F_=W({"src/lib/parsers/parse-pull.ts"(){"use strict";BF(),oe(),O_(),X2=/^\s*(.+?)\s+\|\s+\d+\s*(\+*)(-*)/,Z2=/(\d+)\D+((\d+)\D+\(\+\))?(\D+(\d+)\D+\(-\))?/,K2=/^(create|delete) mode \d+ (.+)/,J2=[new ce(X2,(e,[t,r,n])=>{e.files.push(t),r&&(e.insertions[t]=r.length),n&&(e.deletions[t]=n.length)}),new ce(Z2,(e,[t,,r,,n])=>r!==void 0||n!==void 0?(e.summary.changes=+t||0,e.summary.insertions=+r||0,e.summary.deletions=+n||0,!0):!1),new ce(K2,(e,[t,r])=>{ke(e.files,r),ke(t==="create"?e.created:e.deleted,r)})],I_=[new ce(/^from\s(.+)$/i,(e,[t])=>void(e.remote=t)),new ce(/^fatal:\s(.+)$/,(e,[t])=>void(e.message=t)),new ce(/([a-z0-9]+)\.\.([a-z0-9]+)\s+(\S+)\s+->\s+(\S+)$/,(e,[t,r,n,i])=>{e.branch.local=n,e.hash.local=t,e.branch.remote=i,e.hash.remote=r})],Q2=(e,t)=>ir(new qp,J2,[e,t]),vm=(e,t)=>Object.assign(new qp,Q2(e,t),P_(e,t))}}),eb,$_,tb,GF=W({"src/lib/parsers/parse-merge.ts"(){"use strict";jF(),oe(),F_(),eb=[new ce(/^Auto-merging\s+(.+)$/,(e,[t])=>{e.merges.push(t)}),new ce(/^CONFLICT\s+\((.+)\): Merge conflict in (.+)$/,(e,[t,r])=>{e.conflicts.push(new Cu(t,r))}),new ce(/^CONFLICT\s+\((.+\/delete)\): (.+) deleted in (.+) and/,(e,[t,r,n])=>{e.conflicts.push(new Cu(t,r,{deleteRef:n}))}),new ce(/^CONFLICT\s+\((.+)\):/,(e,[t])=>{e.conflicts.push(new Cu(t,null))}),new ce(/^Automatic merge failed;\s+(.+)$/,(e,[t])=>{e.result=t})],$_=(e,t)=>Object.assign(tb(e,t),vm(e,t)),tb=e=>ir(new k_,eb,e)}});function rb(e){return e.length?{commands:["merge",...e],format:"utf-8",parser(t,r){let n=$_(t,r);if(n.failed)throw new Tl(n);return n}}:nr("Git.merge requires at least one option")}var zF=W({"src/lib/tasks/merge.ts"(){"use strict";Rs(),GF(),tt()}});function VF(e,t,r){let n=r.includes("deleted"),i=r.includes("tag")||/^refs\/tags/.test(e),a=!r.includes("new");return{deleted:n,tag:i,branch:!i,new:!a,alreadyUpdated:a,local:e,remote:t}}var nb,L_,ib,WF=W({"src/lib/parsers/parse-push.ts"(){"use strict";oe(),O_(),nb=[new ce(/^Pushing to (.+)$/,(e,[t])=>{e.repo=t}),new ce(/^updating local tracking ref '(.+)'/,(e,[t])=>{e.ref=xl(Fr({},e.ref||{}),{local:t})}),new ce(/^[=*-]\s+([^:]+):(\S+)\s+\[(.+)]$/,(e,[t,r,n])=>{e.pushed.push(VF(t,r,n))}),new ce(/^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/,(e,[t,r,n])=>{e.branch=xl(Fr({},e.branch||{}),{local:t,remote:r,remoteName:n})}),new ce(/^([^:]+):(\S+)\s+([a-z0-9]+)\.\.([a-z0-9]+)$/,(e,[t,r,n,i])=>{e.update={head:{local:t,remote:r},hash:{from:n,to:i}}})],L_=(e,t)=>{let r=ib(e,t),n=P_(e,t);return Fr(Fr({},r),n)},ib=(e,t)=>ir({pushed:[]},nb,[e,t])}}),D_={};rt(D_,{pushTagsTask:()=>qF,pushTask:()=>ym});function qF(e={},t){return ke(t,"--tags"),ym(e,t)}function ym(e={},t){let r=["push",...t];return e.branch&&r.splice(1,0,e.branch),e.remote&&r.splice(1,0,e.remote),Lu(r,"-v"),ke(r,"--verbose"),ke(r,"--porcelain"),{commands:r,format:"utf-8",parser:L_}}var N_=W({"src/lib/tasks/push.ts"(){"use strict";WF(),oe()}});function YF(){return{showBuffer(){let e=["show",...rr(arguments,1)];return e.includes("--binary")||e.splice(1,0,"--binary"),this._runTask(zb(e),Je(arguments))},show(){let e=["show",...rr(arguments,1)];return this._runTask(Vt(e),Je(arguments))}}}var XF=W({"src/lib/tasks/show.ts"(){"use strict";oe(),tt()}}),ab,j_,ZF=W({"src/lib/responses/FileStatusSummary.ts"(){"use strict";ab=/^(.+)\0(.+)$/,j_=class{constructor(e,t,r){if(this.path=e,this.index=t,this.working_dir=r,t==="R"||r==="R"){let n=ab.exec(e)||[null,e,e];this.from=n[2]||"",this.path=n[1]||""}}}}});function sb(e){let[t,r]=e.split(Ps);return{from:r||t,to:t}}function yr(e,t,r){return[`${e}${t}`,r]}function Lp(e,...t){return t.map(r=>yr(e,r,(n,i)=>ke(n.conflicted,i)))}function KF(e,t){let r=t.trim();switch(" "){case r.charAt(2):return n(r.charAt(0),r.charAt(1),r.substr(3));case r.charAt(1):return n(" ",r.charAt(0),r.substr(2));default:return}function n(i,a,s){let o=`${i}${a}`,c=B_.get(o);c&&c(e,s),o!=="##"&&o!=="!!"&&e.files.push(new j_(s,i,a))}}var ob,B_,H_,JF=W({"src/lib/responses/StatusSummary.ts"(){"use strict";oe(),ZF(),ob=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=!1,this.isClean=()=>!this.files.length}},B_=new Map([yr(" ","A",(e,t)=>ke(e.created,t)),yr(" ","D",(e,t)=>ke(e.deleted,t)),yr(" ","M",(e,t)=>ke(e.modified,t)),yr("A"," ",(e,t)=>ke(e.created,t)&&ke(e.staged,t)),yr("A","M",(e,t)=>ke(e.created,t)&&ke(e.staged,t)&&ke(e.modified,t)),yr("D"," ",(e,t)=>ke(e.deleted,t)&&ke(e.staged,t)),yr("M"," ",(e,t)=>ke(e.modified,t)&&ke(e.staged,t)),yr("M","M",(e,t)=>ke(e.modified,t)&&ke(e.staged,t)),yr("R"," ",(e,t)=>{ke(e.renamed,sb(t))}),yr("R","M",(e,t)=>{let r=sb(t);ke(e.renamed,r),ke(e.modified,r.to)}),yr("!","!",(e,t)=>{ke(e.ignored=e.ignored||[],t)}),yr("?","?",(e,t)=>ke(e.not_added,t)),...Lp("A","A","U"),...Lp("D","D","U"),...Lp("U","A","D","U"),["##",(e,t)=>{let r=/ahead (\d+)/,n=/behind (\d+)/,i=/^(.+?(?=(?:\.{3}|\s|$)))/,a=/\.{3}(\S*)/,s=/\son\s([\S]+)$/,o;o=r.exec(t),e.ahead=o&&+o[1]||0,o=n.exec(t),e.behind=o&&+o[1]||0,o=i.exec(t),e.current=o&&o[1],o=a.exec(t),e.tracking=o&&o[1],o=s.exec(t),e.current=o&&o[1]||e.current,e.detached=/\(no branch\)/.test(t)}]]),H_=function(e){let t=e.split(Ps),r=new ob;for(let n=0,i=t.length;n<i;){let a=t[n++].trim();a&&(a.charAt(0)==="R"&&(a+=Ps+(t[n++]||"")),KF(r,a))}return r}}});function QF(e){return{format:"utf-8",commands:["status","--porcelain","-b","-u","--null",...e.filter(r=>!U_.includes(r))],parser(r){return H_(r)}}}var U_,e4=W({"src/lib/tasks/status.ts"(){"use strict";JF(),U_=["--null","-z"]}});function Ou(e=0,t=0,r=0,n="",i=!0){return Object.defineProperty({major:e,minor:t,patch:r,agent:n,installed:i},"toString",{value(){return`${this.major}.${this.minor}.${this.patch}`},configurable:!1,enumerable:!1})}function t4(){return Ou(0,0,0,"",!1)}function r4(){return{version(){return this._runTask({commands:["--version"],format:"utf-8",parser:n4,onError(e,t,r,n){if(e.exitCode===-2)return r(Buffer.from(wm));n(t)}})}}}function n4(e){return e===wm?t4():ir(Ou(0,0,0,e),G_,e)}var wm,G_,i4=W({"src/lib/tasks/version.ts"(){"use strict";oe(),wm="installed=false",G_=[new ce(/version (\d+)\.(\d+)\.(\d+)(?:\s*\((.+)\))?/,(e,[t,r,n,i=""])=>{Object.assign(e,Ou(Ie(t),Ie(r),Ie(n),i))}),new ce(/version (\d+)\.(\d+)\.(\D+)(.+)?$/,(e,[t,r,n,i=""])=>{Object.assign(e,Ou(Ie(t),Ie(r),n,i))})]}}),z_={};rt(z_,{SimpleGitApi:()=>Yp});var Yp,a4=W({"src/lib/simple-git-api.ts"(){"use strict";uF(),fF(),hF(),gF(),_F(),Jb(),SF(),n_(),AF(),RF(),A_(),zF(),N_(),XF(),e4(),tt(),i4(),oe(),Yp=class{constructor(e){this._executor=e}_runTask(e,t){let r=this._executor.chain(),n=r.push(e);return t&&lF(e,n,t),Object.create(this,{then:{value:n.then.bind(n)},catch:{value:n.catch.bind(n)},_executor:{value:r}})}add(e){return this._runTask(Vt(["add",...xn(e)]),Je(arguments))}cwd(e){let t=Je(arguments);return typeof e=="string"?this._runTask(z2(e,this._executor),t):typeof(e==null?void 0:e.path)=="string"?this._runTask(z2(e.path,e.root&&this._executor||void 0),t):this._runTask(nr("Git.cwd: workingDirectory must be supplied as a string"),t)}hashObject(e,t){return this._runTask(EF(e,t===!0),Je(arguments))}init(e){return this._runTask(PF(e===!0,this._executor.cwd,rr(arguments)),Je(arguments))}merge(){return this._runTask(rb(rr(arguments)),Je(arguments))}mergeFromTo(e,t){return Pt(e)&&Pt(t)?this._runTask(rb([e,t,...rr(arguments)]),Je(arguments,!1)):this._runTask(nr("Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings"))}outputHandler(e){return this._executor.outputHandler=e,this}push(){let e=ym({remote:Sn(arguments[0],Pt),branch:Sn(arguments[1],Pt)},rr(arguments));return this._runTask(e,Je(arguments))}stash(){return this._runTask(Vt(["stash",...rr(arguments)]),Je(arguments))}status(){return this._runTask(QF(rr(arguments)),Je(arguments))}},Object.assign(Yp.prototype,dF(),bF(),XI(),mF(),xF(),QI(),NF(),YF(),r4())}}),V_={};rt(V_,{Scheduler:()=>q_});var lb,q_,s4=W({"src/lib/runners/scheduler.ts"(){"use strict";oe(),l_(),lb=(()=>{let e=0;return()=>{e++;let{promise:t,done:r}=(0,W_.createDeferred)();return{promise:t,done:r,id:e}}})(),q_=class{constructor(e=2){this.concurrency=e,this.logger=cm("","scheduler"),this.pending=[],this.running=[],this.logger("Constructed, concurrency=%s",e)}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}let e=ke(this.running,this.pending.shift());this.logger("Attempting id=%s",e.id),e.done(()=>{this.logger("Completing id=",e.id),Lu(this.running,e),this.schedule()})}next(){let{promise:e,id:t}=ke(this.pending,lb());return this.logger("Scheduling id=%s",t),this.schedule(),e}}}}),Y_={};rt(Y_,{applyPatchTask:()=>o4});function o4(e,t){return Vt(["apply",...t,...e])}var l4=W({"src/lib/tasks/apply-patch.ts"(){"use strict";tt()}});function c4(e,t){return{branch:e,hash:t,success:!0}}function u4(e){return{branch:e,hash:null,success:!1}}var X_,f4=W({"src/lib/responses/BranchDeleteSummary.ts"(){"use strict";X_=class{constructor(){this.all=[],this.branches={},this.errors=[]}get success(){return!this.errors.length}}}});function Z_(e,t){return t===1&&Xp.test(e)}var cb,Xp,ub,Hu,d4=W({"src/lib/parsers/parse-branch-delete.ts"(){"use strict";f4(),oe(),cb=/(\S+)\s+\(\S+\s([^)]+)\)/,Xp=/^error[^']+'([^']+)'/m,ub=[new ce(cb,(e,[t,r])=>{let n=c4(t,r);e.all.push(n),e.branches[t]=n}),new ce(Xp,(e,[t])=>{let r=u4(t);e.errors.push(r),e.all.push(r),e.branches[t]=r})],Hu=(e,t)=>ir(new X_,ub,[e,t])}}),K_,h4=W({"src/lib/responses/BranchSummary.ts"(){"use strict";K_=class{constructor(){this.all=[],this.branches={},this.current="",this.detached=!1}push(e,t,r,n,i){e==="*"&&(this.detached=t,this.current=r),this.all.push(r),this.branches[r]={current:e==="*",linkedWorkTree:e==="+",name:r,commit:n,label:i}}}}});function fb(e){return e?e.charAt(0):""}function J_(e){return ir(new K_,Q_,e)}var Q_,p4=W({"src/lib/parsers/parse-branch.ts"(){"use strict";h4(),oe(),Q_=[new ce(/^([*+]\s)?\((?:HEAD )?detached (?:from|at) (\S+)\)\s+([a-z0-9]+)\s(.*)$/,(e,[t,r,n,i])=>{e.push(fb(t),!0,r,n,i)}),new ce(new RegExp("^([*+]\\s)?(\\S+)\\s+([a-z0-9]+)\\s?(.*)$","s"),(e,[t,r,n,i])=>{e.push(fb(t),!1,r,n,i)})]}}),ex={};rt(ex,{branchLocalTask:()=>g4,branchTask:()=>m4,containsDeleteBranchCommand:()=>tx,deleteBranchTask:()=>y4,deleteBranchesTask:()=>v4});function tx(e){let t=["-d","-D","--delete"];return e.some(r=>t.includes(r))}function m4(e){let t=tx(e),r=["branch",...e];return r.length===1&&r.push("-a"),r.includes("-v")||r.splice(1,0,"-v"),{format:"utf-8",commands:r,parser(n,i){return t?Hu(n,i).all[0]:J_(n)}}}function g4(){return{format:"utf-8",commands:["branch","-v"],parser:J_}}function v4(e,t=!1){return{format:"utf-8",commands:["branch","-v",t?"-D":"-d",...e],parser(r,n){return Hu(r,n)},onError({exitCode:r,stdOut:n},i,a,s){if(!Z_(String(i),r))return s(i);a(n)}}}function y4(e,t=!1){let r={format:"utf-8",commands:["branch","-v",t?"-D":"-d",e],parser(n,i){return Hu(n,i).branches[e]},onError({exitCode:n,stdErr:i,stdOut:a},s,o,c){if(!Z_(String(s),n))return c(s);throw new Tl(r.parser(El(a),El(i)),String(s))}};return r}var w4=W({"src/lib/tasks/branch.ts"(){"use strict";Rs(),d4(),p4(),oe()}}),rx,b4=W({"src/lib/responses/CheckIgnore.ts"(){"use strict";rx=e=>e.split(/\n/g).map(t=>t.trim()).filter(t=>!!t)}}),nx={};rt(nx,{checkIgnoreTask:()=>_4});function _4(e){return{commands:["check-ignore",...e],format:"utf-8",parser:rx}}var x4=W({"src/lib/tasks/check-ignore.ts"(){"use strict";b4()}}),ix={};rt(ix,{cloneMirrorTask:()=>E4,cloneTask:()=>ax});function S4(e){return/^--upload-pack(=|$)/.test(e)}function ax(e,t,r){let n=["clone",...r];return Pt(e)&&n.push(e),Pt(t)&&n.push(t),n.find(S4)?nr("git.fetch: potential exploit argument blocked."):Vt(n)}function E4(e,t,r){return ke(r,"--mirror"),ax(e,t,r)}var A4=W({"src/lib/tasks/clone.ts"(){"use strict";tt(),oe()}});function k4(e,t){return ir({raw:e,remote:null,branches:[],tags:[],updated:[],deleted:[]},sx,[e,t])}var sx,T4=W({"src/lib/parsers/parse-fetch.ts"(){"use strict";oe(),sx=[new ce(/From (.+)$/,(e,[t])=>{e.remote=t}),new ce(/\* \[new branch]\s+(\S+)\s*-> (.+)$/,(e,[t,r])=>{e.branches.push({name:t,tracking:r})}),new ce(/\* \[new tag]\s+(\S+)\s*-> (.+)$/,(e,[t,r])=>{e.tags.push({name:t,tracking:r})}),new ce(/- \[deleted]\s+\S+\s*-> (.+)$/,(e,[t])=>{e.deleted.push({tracking:t})}),new ce(/\s*([^.]+)\.\.(\S+)\s+(\S+)\s*-> (.+)$/,(e,[t,r,n,i])=>{e.updated.push({name:n,tracking:i,to:r,from:t})})]}}),ox={};rt(ox,{fetchTask:()=>P4});function C4(e){return/^--upload-pack(=|$)/.test(e)}function P4(e,t,r){let n=["fetch",...r];return e&&t&&n.push(e,t),n.find(C4)?nr("git.fetch: potential exploit argument blocked."):{commands:n,format:"utf-8",parser:k4}}var R4=W({"src/lib/tasks/fetch.ts"(){"use strict";T4(),tt()}});function M4(e){return ir({moves:[]},lx,e)}var lx,O4=W({"src/lib/parsers/parse-move.ts"(){"use strict";oe(),lx=[new ce(/^Renaming (.+) to (.+)$/,(e,[t,r])=>{e.moves.push({from:t,to:r})})]}}),cx={};rt(cx,{moveTask:()=>I4});function I4(e,t){return{commands:["mv","-v",...xn(e),t],format:"utf-8",parser:M4}}var F4=W({"src/lib/tasks/move.ts"(){"use strict";O4(),oe()}}),ux={};rt(ux,{pullTask:()=>$4});function $4(e,t,r){let n=["pull",...r];return e&&t&&n.splice(1,0,e,t),{commands:n,format:"utf-8",parser(i,a){return vm(i,a)},onError(i,a,s,o){let c=UF(El(i.stdOut),El(i.stdErr));if(c)return o(new Tl(c));o(a)}}}var L4=W({"src/lib/tasks/pull.ts"(){"use strict";Rs(),F_(),oe()}});function D4(e){let t={};return fx(e,([r])=>t[r]={name:r}),Object.values(t)}function N4(e){let t={};return fx(e,([r,n,i])=>{t.hasOwnProperty(r)||(t[r]={name:r,refs:{fetch:"",push:""}}),i&&n&&(t[r].refs[i.replace(/[^a-z]/g,"")]=n)}),Object.values(t)}function fx(e,t){Kp(e,r=>t(r.split(/\s+/)))}var j4=W({"src/lib/responses/GetRemoteSummary.ts"(){"use strict";oe()}}),dx={};rt(dx,{addRemoteTask:()=>B4,getRemotesTask:()=>H4,listRemotesTask:()=>U4,remoteTask:()=>G4,removeRemoteTask:()=>z4});function B4(e,t,r){return Vt(["remote","add",...r,e,t])}function H4(e){let t=["remote"];return e&&t.push("-v"),{commands:t,format:"utf-8",parser:e?N4:D4}}function U4(e){let t=[...e];return t[0]!=="ls-remote"&&t.unshift("ls-remote"),Vt(t)}function G4(e){let t=[...e];return t[0]!=="remote"&&t.unshift("remote"),Vt(t)}function z4(e){return Vt(["remote","remove",e])}var V4=W({"src/lib/tasks/remote.ts"(){"use strict";j4(),tt()}}),hx={};rt(hx,{stashListTask:()=>W4});function W4(e={},t){let r=E_(e),n=["stash","list",...r.commands,...t],i=b_(r.splitter,r.fields,fm(n));return Bu(n)||{commands:n,format:"utf-8",parser:i}}var q4=W({"src/lib/tasks/stash-list.ts"(){"use strict";Ml(),x_(),gm(),A_()}}),px={};rt(px,{addSubModuleTask:()=>Y4,initSubModuleTask:()=>X4,subModuleTask:()=>Uu,updateSubModuleTask:()=>Z4});function Y4(e,t){return Uu(["add",e,t])}function X4(e){return Uu(["init",...e])}function Uu(e){let t=[...e];return t[0]!=="submodule"&&t.unshift("submodule"),Vt(t)}function Z4(e){return Uu(["update",...e])}var K4=W({"src/lib/tasks/sub-module.ts"(){"use strict";tt()}});function J4(e,t){let r=isNaN(e),n=isNaN(t);return r!==n?r?1:-1:r?mx(e,t):0}function mx(e,t){return e===t?0:e>t?1:-1}function Q4(e){return e.trim()}function Eu(e){return typeof e=="string"&&parseInt(e.replace(/^\D+/g,""),10)||0}var db,gx,e$=W({"src/lib/responses/TagList.ts"(){"use strict";db=class{constructor(e,t){this.all=e,this.latest=t}},gx=function(e,t=!1){let r=e.split(` +`).map(Q4).filter(Boolean);t||r.sort(function(i,a){let s=i.split("."),o=a.split(".");if(s.length===1||o.length===1)return J4(Eu(s[0]),Eu(o[0]));for(let c=0,l=Math.max(s.length,o.length);c<l;c++){let u=mx(Eu(s[c]),Eu(o[c]));if(u)return u}return 0});let n=t?r[0]:[...r].reverse().find(i=>i.indexOf(".")>=0);return new db(r,n)}}}),vx={};rt(vx,{addAnnotatedTagTask:()=>n$,addTagTask:()=>r$,tagListTask:()=>t$});function t$(e=[]){let t=e.some(r=>/^--sort=/.test(r));return{format:"utf-8",commands:["tag","-l",...e],parser(r){return gx(r,t)}}}function r$(e){return{format:"utf-8",commands:["tag",e],parser(){return{name:e}}}}function n$(e,t){return{format:"utf-8",commands:["tag","-a","-m",t,e],parser(){return{name:e}}}}var i$=W({"src/lib/tasks/tag.ts"(){"use strict";e$()}}),a$=xI({"src/git.js"(e,t){"use strict";var{GitExecutor:r}=(oF(),Ke(u_)),{SimpleGitApi:n}=(a4(),Ke(z_)),{Scheduler:i}=(s4(),Ke(V_)),{configurationErrorTask:a}=(tt(),Ke(Up)),{asArray:s,filterArray:o,filterPrimitives:c,filterString:l,filterStringOrStringArray:u,filterType:f,getTrailingOptions:d,trailingFunctionArgument:h,trailingOptionsArgument:p}=(oe(),Ke(Fb)),{applyPatchTask:m}=(l4(),Ke(Y_)),{branchTask:v,branchLocalTask:y,deleteBranchesTask:b,deleteBranchTask:x}=(w4(),Ke(ex)),{checkIgnoreTask:E}=(x4(),Ke(nx)),{checkIsRepoTask:_}=(Nb(),Ke($b)),{cloneTask:k,cloneMirrorTask:w}=(A4(),Ke(ix)),{cleanWithOptionsTask:A,isCleanOptionsArray:S}=(Xb(),Ke(qb)),{diffSummaryTask:T}=(gm(),Ke(S_)),{fetchTask:P}=(R4(),Ke(ox)),{moveTask:O}=(F4(),Ke(cx)),{pullTask:j}=(L4(),Ke(ux)),{pushTagsTask:D}=(N_(),Ke(D_)),{addRemoteTask:Q,getRemotesTask:de,listRemotesTask:ee,remoteTask:J,removeRemoteTask:Pe}=(V4(),Ke(dx)),{getResetMode:me,resetTask:F}=(o_(),Ke(i_)),{stashListTask:G}=(q4(),Ke(hx)),{addSubModuleTask:N,initSubModuleTask:Me,subModuleTask:Dt,updateSubModuleTask:_t}=(K4(),Ke(px)),{addAnnotatedTagTask:Ee,addTagTask:st,tagListTask:ot}=(i$(),Ke(vx)),{straightThroughBufferTask:Ct,straightThroughStringTask:$e}=(tt(),Ke(Up));function U(L,Y){this._plugins=Y,this._executor=new r(L.baseDir,new i(L.maxConcurrentProcesses),Y),this._trimmed=L.trimmed}(U.prototype=Object.create(n.prototype)).constructor=U,U.prototype.customBinary=function(L){return this._plugins.reconfigure("binary",L),this},U.prototype.env=function(L,Y){return arguments.length===1&&typeof L=="object"?this._executor.env=L:(this._executor.env=this._executor.env||{})[L]=Y,this},U.prototype.stashList=function(L){return this._runTask(G(p(arguments)||{},o(L)&&L||[]),h(arguments))};function Le(L,Y,ye,De){return typeof ye!="string"?a(`git.${L}() requires a string 'repoPath'`):Y(ye,f(De,l),d(arguments))}U.prototype.clone=function(){return this._runTask(Le("clone",k,...arguments),h(arguments))},U.prototype.mirror=function(){return this._runTask(Le("mirror",w,...arguments),h(arguments))},U.prototype.mv=function(L,Y){return this._runTask(O(L,Y),h(arguments))},U.prototype.checkoutLatestTag=function(L){var Y=this;return this.pull(function(){Y.tags(function(ye,De){Y.checkout(De.latest,L)})})},U.prototype.pull=function(L,Y,ye,De){return this._runTask(j(f(L,l),f(Y,l),d(arguments)),h(arguments))},U.prototype.fetch=function(L,Y){return this._runTask(P(f(L,l),f(Y,l),d(arguments)),h(arguments))},U.prototype.silent=function(L){return 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"),this},U.prototype.tags=function(L,Y){return this._runTask(ot(d(arguments)),h(arguments))},U.prototype.rebase=function(){return this._runTask($e(["rebase",...d(arguments)]),h(arguments))},U.prototype.reset=function(L){return this._runTask(F(me(L),d(arguments)),h(arguments))},U.prototype.revert=function(L){let Y=h(arguments);return typeof L!="string"?this._runTask(a("Commit must be a string"),Y):this._runTask($e(["revert",...d(arguments,0,!0),L]),Y)},U.prototype.addTag=function(L){let Y=typeof L=="string"?st(L):a("Git.addTag requires a tag name");return this._runTask(Y,h(arguments))},U.prototype.addAnnotatedTag=function(L,Y){return this._runTask(Ee(L,Y),h(arguments))},U.prototype.deleteLocalBranch=function(L,Y,ye){return this._runTask(x(L,typeof Y=="boolean"?Y:!1),h(arguments))},U.prototype.deleteLocalBranches=function(L,Y,ye){return this._runTask(b(L,typeof Y=="boolean"?Y:!1),h(arguments))},U.prototype.branch=function(L,Y){return this._runTask(v(d(arguments)),h(arguments))},U.prototype.branchLocal=function(L){return this._runTask(y(),h(arguments))},U.prototype.raw=function(L){let Y=!Array.isArray(L),ye=[].slice.call(Y?arguments:L,0);for(let vt=0;vt<ye.length&&Y;vt++)if(!c(ye[vt])){ye.splice(vt,ye.length-vt);break}ye.push(...d(arguments,0,!0));var De=h(arguments);return ye.length?this._runTask($e(ye,this._trimmed),De):this._runTask(a("Raw: must supply one or more command to execute"),De)},U.prototype.submoduleAdd=function(L,Y,ye){return this._runTask(N(L,Y),h(arguments))},U.prototype.submoduleUpdate=function(L,Y){return this._runTask(_t(d(arguments,!0)),h(arguments))},U.prototype.submoduleInit=function(L,Y){return this._runTask(Me(d(arguments,!0)),h(arguments))},U.prototype.subModule=function(L,Y){return this._runTask(Dt(d(arguments)),h(arguments))},U.prototype.listRemote=function(){return this._runTask(ee(d(arguments)),h(arguments))},U.prototype.addRemote=function(L,Y,ye){return this._runTask(Q(L,Y,d(arguments)),h(arguments))},U.prototype.removeRemote=function(L,Y){return this._runTask(Pe(L),h(arguments))},U.prototype.getRemotes=function(L,Y){return this._runTask(de(L===!0),h(arguments))},U.prototype.remote=function(L,Y){return this._runTask(J(d(arguments)),h(arguments))},U.prototype.tag=function(L,Y){let ye=d(arguments);return ye[0]!=="tag"&&ye.unshift("tag"),this._runTask($e(ye),h(arguments))},U.prototype.updateServerInfo=function(L){return this._runTask($e(["update-server-info"]),h(arguments))},U.prototype.pushTags=function(L,Y){let ye=D({remote:f(L,l)},d(arguments));return this._runTask(ye,h(arguments))},U.prototype.rm=function(L){return this._runTask($e(["rm","-f",...s(L)]),h(arguments))},U.prototype.rmKeepLocal=function(L){return this._runTask($e(["rm","--cached",...s(L)]),h(arguments))},U.prototype.catFile=function(L,Y){return this._catFile("utf-8",arguments)},U.prototype.binaryCatFile=function(){return this._catFile("buffer",arguments)},U.prototype._catFile=function(L,Y){var ye=h(Y),De=["cat-file"],vt=Y[0];if(typeof vt=="string")return this._runTask(a("Git.catFile: options must be supplied as an array of strings"),ye);Array.isArray(vt)&&De.push.apply(De,vt);let za=L==="buffer"?Ct(De):$e(De);return this._runTask(za,ye)},U.prototype.diff=function(L,Y){let ye=l(L)?a("git.diff: supplying options as a single string is no longer supported, switch to an array of strings"):$e(["diff",...d(arguments)]);return this._runTask(ye,h(arguments))},U.prototype.diffSummary=function(){return this._runTask(T(d(arguments,1)),h(arguments))},U.prototype.applyPatch=function(L){let Y=u(L)?m(s(L),d([].slice.call(arguments,1))):a("git.applyPatch requires one or more string patches as the first argument");return this._runTask(Y,h(arguments))},U.prototype.revparse=function(){let L=["rev-parse",...d(arguments,!0)];return this._runTask($e(L,!0),h(arguments))},U.prototype.clean=function(L,Y,ye){let De=S(L),vt=De&&L.join("")||f(L,l)||"",za=d([].slice.call(arguments,De?1:0));return this._runTask(A(vt,za),h(arguments))},U.prototype.exec=function(L){let Y={commands:[],format:"utf-8",parser(){typeof L=="function"&&L()}};return this._runTask(Y)},U.prototype.clearQueue=function(){return this},U.prototype.checkIgnore=function(L,Y){return this._runTask(E(s(f(L,u,[]))),h(arguments))},U.prototype.checkIsRepo=function(L,Y){return this._runTask(_(f(L,l)),h(arguments))},t.exports=U}});kl();Ei();var s$=class extends wr{constructor(e,t){super(void 0,t),this.config=e}};Ei();Ei();var Vn=class extends wr{constructor(e,t,r){super(e,r),this.task=e,this.plugin=t,Object.setPrototypeOf(this,new.target.prototype)}};Rs();wb();Nb();Xb();Jb();e_();n_();o_();function o$(e){return e?[{type:"spawn.before",action(n,i){e.aborted&&i.kill(new Vn(void 0,"abort","Abort already signaled"))}},{type:"spawn.after",action(n,i){function a(){i.kill(new Vn(void 0,"abort","Abort signal received"))}e.addEventListener("abort",a),i.spawned.on("close",()=>e.removeEventListener("abort",a))}}]:void 0}function l$(e){return typeof e=="string"&&e.trim().toLowerCase()==="-c"}function c$(e,t){if(l$(e)&&/^\s*protocol(.[a-z]+)?.allow/.test(t))throw new Vn(void 0,"unsafe","Configuring protocol.allow is not permitted without enabling allowUnsafeExtProtocol")}function u$(e,t){if(/^\s*--(upload|receive)-pack/.test(e))throw new Vn(void 0,"unsafe","Use of --upload-pack or --receive-pack is not permitted without enabling allowUnsafePack");if(t==="clone"&&/^\s*-u\b/.test(e))throw new Vn(void 0,"unsafe","Use of clone with option -u is not permitted without enabling allowUnsafePack");if(t==="push"&&/^\s*--exec\b/.test(e))throw new Vn(void 0,"unsafe","Use of push with option --exec is not permitted without enabling allowUnsafePack")}function f$({allowUnsafeProtocolOverride:e=!1,allowUnsafePack:t=!1}={}){return{type:"spawn.args",action(r,n){return r.forEach((i,a)=>{let s=a<r.length?r[a+1]:"";e||c$(i,s),t||u$(i,n.method)}),r}}}oe();function d$(e){let t=Sl(e,"-c");return{type:"spawn.args",action(r){return[...t,...r]}}}oe();var hb=(0,Cs.deferred)().promise;function h$({onClose:e=!0,onExit:t=50}={}){function r(){let i=-1,a={close:(0,Cs.deferred)(),closeTimeout:(0,Cs.deferred)(),exit:(0,Cs.deferred)(),exitTimeout:(0,Cs.deferred)()},s=Promise.race([e===!1?hb:a.closeTimeout.promise,t===!1?hb:a.exitTimeout.promise]);return n(e,a.close,a.closeTimeout),n(t,a.exit,a.exitTimeout),{close(o){i=o,a.close.done()},exit(o){i=o,a.exit.done()},get exitCode(){return i},result:s}}function n(i,a,s){i!==!1&&(i===!0?a.promise:a.promise.then(()=>Dp(i))).then(s.done)}return{type:"spawn.after",action(i,a){return _l(this,arguments,function*(s,{spawned:o,close:c}){var l,u;let f=r(),d=!0,h=()=>void(d=!1);(l=o.stdout)==null||l.on("data",h),(u=o.stderr)==null||u.on("data",h),o.on("error",h),o.on("close",p=>f.close(p)),o.on("exit",p=>f.exit(p));try{yield f.result,d&&(yield Dp(50)),c(f.exitCode)}catch(p){c(f.exitCode,p)}})}}}oe();var p$="Invalid value supplied for custom binary, requires a single string or an array containing either one or two strings",pb="Invalid value supplied for custom binary, restricted characters must be removed or supply the unsafe.allowUnsafeCustomBinary option";function m$(e){return!e||!/^([a-z]:)?([a-z0-9/.\\_-]+)$/i.test(e)}function mb(e,t){if(e.length<1||e.length>2)throw new Vn(void 0,"binary",p$);if(e.some(m$))if(t)console.warn(pb);else throw new Vn(void 0,"binary",pb);let[n,i]=e;return{binary:n,prefix:i}}function g$(e,t=["git"],r=!1){let n=mb(xn(t),r);e.on("binary",i=>{n=mb(xn(i),r)}),e.append("spawn.binary",()=>n.binary),e.append("spawn.args",i=>n.prefix?[n.prefix,...i]:i)}Ei();function v$(e){return!!(e.exitCode&&e.stdErr.length)}function y$(e){return Buffer.concat([...e.stdOut,...e.stdErr])}function w$(e=!1,t=v$,r=y$){return(n,i)=>!e&&n||!t(i)?n:r(i)}function gb(e){return{type:"task.error",action(t,r){let n=e(t.error,{stdErr:r.stdErr,stdOut:r.stdOut,exitCode:r.exitCode});return Buffer.isBuffer(n)?{error:new wr(void 0,n.toString("utf-8"))}:{error:n}}}}oe();var b$=class{constructor(){this.plugins=new Set,this.events=new yx.EventEmitter}on(e,t){this.events.on(e,t)}reconfigure(e,t){this.events.emit(e,t)}append(e,t){let r=ke(this.plugins,{type:e,action:t});return()=>this.plugins.delete(r)}add(e){let t=[];return xn(e).forEach(r=>r&&this.plugins.add(ke(t,r))),()=>{t.forEach(r=>this.plugins.delete(r))}}exec(e,t,r){let n=t,i=Object.freeze(Object.create(r));for(let a of this.plugins)a.type===e&&(n=a.action(n,i));return n}};oe();function _$(e){let t="--progress",r=["checkout","clone","fetch","pull","push"];return[{type:"spawn.args",action(a,s){return r.includes(s.method)?Ab(a,t):a}},{type:"spawn.after",action(a,s){var o;s.commands.includes(t)&&((o=s.spawned.stderr)==null||o.on("data",c=>{let l=/^([\s\S]+?):\s*(\d+)% \((\d+)\/(\d+)\)/.exec(c.toString("utf8"));l&&e({method:s.method,stage:x$(l[1]),progress:Ie(l[2]),processed:Ie(l[3]),total:Ie(l[4])})}))}}]}function x$(e){return String(e.toLowerCase().split(" ",1))||"unknown"}oe();function S$(e){let t=Cb(e,["uid","gid"]);return{type:"spawn.options",action(r){return Fr(Fr({},t),r)}}}function E$({block:e,stdErr:t=!0,stdOut:r=!0}){if(e>0)return{type:"spawn.after",action(n,i){var a,s;let o;function c(){o&&clearTimeout(o),o=setTimeout(u,e)}function l(){var f,d;(f=i.spawned.stdout)==null||f.off("data",c),(d=i.spawned.stderr)==null||d.off("data",c),i.spawned.off("exit",l),i.spawned.off("close",l),o&&clearTimeout(o)}function u(){l(),i.kill(new Vn(void 0,"timeout","block timeout reached"))}r&&((a=i.spawned.stdout)==null||a.on("data",c)),t&&((s=i.spawned.stderr)==null||s.on("data",c)),i.spawned.on("exit",l),i.spawned.on("close",l),c()}}}kl();function A$(){return{type:"spawn.args",action(e){let t=[],r;function n(i){(r=r||[]).push(...i)}for(let i=0;i<e.length;i++){let a=e[i];if(Pu(a)){n(B2(a));continue}if(a==="--"){n(e.slice(i+1).flatMap(s=>Pu(s)&&B2(s)||s));break}t.push(a)}return r?[...t,"--",...r.map(String)]:t}}}oe();var k$=a$();function T$(e,t){var r;let n=new b$,i=Ob(e&&(typeof e=="string"?{baseDir:e}:e)||{},t);if(!Jp(i.baseDir))throw new s$(i,"Cannot use simple-git on a directory that does not exist");return Array.isArray(i.config)&&n.add(d$(i.config)),n.add(f$(i.unsafe)),n.add(A$()),n.add(h$(i.completion)),i.abort&&n.add(o$(i.abort)),i.progress&&n.add(_$(i.progress)),i.timeout&&n.add(E$(i.timeout)),i.spawnOptions&&n.add(S$(i.spawnOptions)),n.add(gb(w$(!0))),i.errors&&n.add(gb(i.errors)),g$(n,i.binary,(r=i.unsafe)==null?void 0:r.allowUnsafeCustomBinary),new k$(i,n)}Rs();var wx=T$;g();var bx=require("obsidian"),Gu="YYYY-MM-DD",bm=`${Gu} HH:mm`,_m=`${Gu} HH:mm:ss`,zu=40,Ms="conflict-files-obsidian-git.md",ar={commitMessage:"vault backup: {{date}}",commitDateFormat:_m,autoSaveInterval:0,autoPushInterval:0,autoPullInterval:0,autoPullOnBoot:!1,disablePush:!1,pullBeforePush:!0,disablePopups:!1,disablePopupsForNoChanges:!1,listChangedFilesInMessageBody:!1,showStatusBar:!0,updateSubmodules:!1,syncMethod:"merge",customMessageOnAutoBackup:!1,autoBackupAfterFileChange:!1,treeStructure:!1,refreshSourceControl:bx.Platform.isDesktopApp,basePath:"",differentIntervalCommitAndPush:!1,changedFilesInStatusBar:!1,showedMobileNotice:!1,refreshSourceControlTimer:7e3,showBranchStatusBar:!0,setLastSaveToLastCommit:!1,submoduleRecurseCheckout:!1,gitDir:"",showFileMenu:!0,authorInHistoryView:"hide",dateInHistoryView:!1,diffStyle:"split",lineAuthor:{show:!1,followMovement:"inactive",authorDisplay:"initials",showCommitHash:!1,dateTimeFormatOptions:"date",dateTimeFormatCustomString:bm,dateTimeTimezone:"viewer-local",coloringMaxAge:"1y",colorNew:{r:255,g:150,b:150},colorOld:{r:120,g:160,b:255},textColorCss:"var(--text-muted)",ignoreWhitespace:!1,gutterSpacingFallbackLength:5}},St={type:"git-view",name:"Source Control",icon:"git-pull-request"},$r={type:"git-history-view",name:"History",icon:"history"},Ai={type:"split-diff-view",name:"Diff view",icon:"diff"},ki={type:"diff-view",name:"Diff View",icon:"git-pull-request"},Vu="C:\\Program Files\\Git\\cmd\\git.exe",Wu="git_credentials_input",Os="obsidian_askpass.sh",_x=`#!/bin/sh + +PROMPT="$1" +TEMP_FILE="$OBSIDIAN_GIT_CREDENTIALS_INPUT" + +cleanup() { + rm -f "$TEMP_FILE" "$TEMP_FILE.response" +} +trap cleanup EXIT + +echo "$PROMPT" > "$TEMP_FILE" + +while [ ! -e "$TEMP_FILE.response" ]; do + if [ ! -e "$TEMP_FILE" ]; then + echo "Trigger file got removed: Abort" >&2 + exit 1 + fi + sleep 0.1 +done + +RESPONSE=$(cat "$TEMP_FILE.response") + +echo "$RESPONSE" +`,xx=["3dm","3ds","3g2","3gp","7z","a","aac","adp","afdesign","afphoto","afpub","ai","aif","aiff","alz","ape","apk","appimage","ar","arj","asf","au","avi","bak","baml","bh","bin","bk","bmp","btif","bz2","bzip2","cab","caf","cgm","class","cmx","cpio","cr2","cur","dat","dcm","deb","dex","djvu","dll","dmg","dng","doc","docm","docx","dot","dotm","dra","DS_Store","dsk","dts","dtshd","dvb","dwg","dxf","ecelp4800","ecelp7470","ecelp9600","egg","eol","eot","epub","exe","f4v","fbs","fh","fla","flac","flatpak","fli","flv","fpx","fst","fvt","g3","gh","gif","graffle","gz","gzip","h261","h263","h264","icns","ico","ief","img","ipa","iso","jar","jpeg","jpg","jpgv","jpm","jxr","key","ktx","lha","lib","lvp","lz","lzh","lzma","lzo","m3u","m4a","m4v","mar","mdi","mht","mid","midi","mj2","mka","mkv","mmr","mng","mobi","mov","movie","mp3","mp4","mp4a","mpeg","mpg","mpga","mxu","nef","npx","numbers","nupkg","o","odp","ods","odt","oga","ogg","ogv","otf","ott","pages","pbm","pcx","pdb","pdf","pea","pgm","pic","png","pnm","pot","potm","potx","ppa","ppam","ppm","pps","ppsm","ppsx","ppt","pptm","pptx","psd","pya","pyc","pyo","pyv","qt","rar","ras","raw","resources","rgb","rip","rlc","rmf","rmvb","rpm","rtf","rz","s3m","s7z","scpt","sgi","shar","snap","sil","sketch","slk","smv","snk","so","stl","suo","sub","swf","tar","tbz","tbz2","tga","tgz","thmx","tif","tiff","tlz","ttc","ttf","txz","udf","uvh","uvi","uvm","uvp","uvs","uvu","viv","vob","war","wav","wax","wbmp","wdp","weba","webm","webp","whl","wim","wm","wma","wmv","wmx","woff","woff2","wrm","wvx","xbm","xif","xla","xlam","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xm","xmind","xpi","xpm","xwd","xz","z","zip","zipx"];g();var Sx=require("obsidian"),C$={options:[],placeholder:"",allowEmpty:!1,onlySelection:!1,initialValue:void 0},Fe=class extends Sx.SuggestModal{constructor(t,r){super(t.app),this.config={...C$,...r},this.setPlaceholder(this.config.placeholder)}openAndGetResult(){return new Promise(t=>{this.resolve=t,this.open(),this.config.initialValue!=null&&(this.inputEl.value=this.config.initialValue,this.inputEl.dispatchEvent(new Event("input")))})}onClose(){new Promise(t=>setTimeout(t,10)).then(()=>{this.resolve&&this.resolve(void 0)})}getSuggestions(t){return this.config.onlySelection?this.config.options:this.config.allowEmpty?[t.length>0?t:" ",...this.config.options]:[t.length>0?t:"...",...this.config.options]}renderSuggestion(t,r){r.setText(t)}onChooseSuggestion(t,r){if(this.resolve){let n;this.config.allowEmpty&&t===" "?n="":t==="..."?n=void 0:n=t,this.resolve(n)}}};g();function Ex(e,t){let r=Object.assign({},e.lineAuthor,t.lineAuthor);return Object.assign({},e,t,{lineAuthor:r})}var Is=class extends Error{constructor(r){super("No network connection available");this.originalError=r}};g();var sT=ze(Ux()),oT=ze(aT()),ba=require("obsidian");var Ug=(e,t)=>e==="."||t==null||t.length===0||t==="."?!0:t.length>=e.length?t.startsWith(e):e.startsWith(t);function rn(e,t){let r;if(t){if(t.button===0||t.button===1){let n=ba.Keymap.isModEvent(t);r=e.workspace.getLeaf(n)}}else r=e.workspace.getLeaf(!1);return r}function kn(e,t,r,n,i){if(t.button==2){let a=e.vault.getAbstractFileByPath(r);if(a!=null){let s=new ba.Menu;e.workspace.trigger("file-menu",s,a,i,n),s.showAtPosition({x:t.pageX,y:t.pageY})}else{let s=new ba.Menu;e.workspace.trigger("obsidian-git:menu",s,r,i,n),s.showAtPosition({x:t.pageX,y:t.pageY})}}}function Oi(e){throw new Error("Impossible branch: "+e)}function Gg(e){return`rgb(${e.r},${e.g},${e.b})`}function lT(e){var a;let t=(a=sT.fromString(e))==null?void 0:a.toRgbaArray();if(t===void 0)return;let[r,n,i]=t;return{r,g:n,b:i}}function cT(e){return e.diff(ba.moment.unix(0),"seconds")}function uT(e){if(e.length!==0)return e.slice().sort()[Math.floor(e.length/2)]}function fT(e,t){return(0,oT.default)(e,t,{strict:!0})}function zl(e,t){return new Proxy(e,{get(r,n){return n==="length"?Math.min(t,r.length):r[n]}})}function dT(e,t,r){return e.length<=t?new Array(t-e.length).fill(r).join("")+e:e.substring(e.length-t)}function hT(e,t){if(t<=0)return e;let r=new Array(t).fill(" ").join(""),n=e.substring(t,e.length);return r+n}function zg(e,t,r){return e<=t&&t<=r}function Ii(e){let[t,...r]=e.split("/");return[t,r.length===0?void 0:r.join("/")]}function Tn(e){return e.endsWith("/")?e:e.split("/").last().replace(/\.md$/,"")}function pT(e){return e===1?"1 minute":`${e} minutes`}function Rj(e){let t=e.lastIndexOf(".");return e.substring(t+1)}function zs(e){if(e.endsWith(".md"))return!1;let t=Rj(e);return xx.includes(t)}function Vg(e){return(e.startsWith("https://github.com/")||e.startsWith("https://gitlab.com/"))&&(e.endsWith(".git")||(e=e+".git")),e}g();var mT=require("obsidian"),Vs=class{constructor(t){this.plugin=t,this.app=t.app}getRelativeVaultPath(t){return this.plugin.settings.basePath?this.plugin.settings.basePath+"/"+t:t}getRelativeRepoPath(t,r=!0){return r&&this.plugin.settings.basePath.length>0?t.substring(this.plugin.settings.basePath.length+1):t}unload(){}_getTreeStructure(t,r=0){let n=[];for(t=[...t];t.length>0;){let i=t.first(),a=i.path.substring(r);if(a.contains("/")){let s=a.substring(0,a.indexOf("/")),o=t.filter(l=>l.path.substring(r).startsWith(s+"/"));o.forEach(l=>t.remove(l));let c=i.path.substring(0,a.indexOf("/")+r);n.push({title:s,path:c,vaultPath:this.getRelativeVaultPath(c),children:this._getTreeStructure(o,(r>0?r+s.length:s.length)+1)})}else n.push({title:a,data:i,path:i.path,vaultPath:this.getRelativeVaultPath(i.path)}),t.remove(i)}return n}simplify(t){var r,n,i,a;for(let s of t){for(;;){let o=((r=s.children)==null?void 0:r.length)==1,c=((i=(n=s.children)==null?void 0:n.first())==null?void 0:i.data)==null;if(!(s.children!=null&&o&&c))break;let l=s.children.first();s.title+="/"+l.title,s.data=l.data,s.path=l.path,s.vaultPath=l.vaultPath,s.children=l.children}s.children!=null&&this.simplify(s.children),(a=s.children)==null||a.sort((o,c)=>{let l=(c.data==null?1:0)-(o.data==null?1:0);return l!=0?l:o.title.localeCompare(c.title)})}return t.sort((s,o)=>{let c=(o.data==null?1:0)-(s.data==null?1:0);return c!=0?c:s.title.localeCompare(o.title)})}getTreeStructure(t){let r=this._getTreeStructure(t);return this.simplify(r)}async formatCommitMessage(t){let r;if(t.includes("{{numFiles}}")){r=await this.status();let n=r.staged.length;t=t.replace("{{numFiles}}",String(n))}if(t.includes("{{hostname}}")){let n=this.plugin.localStorage.getHostname()||"";t=t.replace("{{hostname}}",n)}if(t.includes("{{files}}")){r=r!=null?r:await this.status();let n={},i="";if(r.staged.length<100){r.staged.forEach(s=>{s.index in n?n[s.index].push(s.path):n[s.index]=[s.path]});let a=[];for(let[s,o]of Object.entries(n))a.push(s+" "+o.join(" "));i=a.join(", ")}else i="Too many files to list";t=t.replace("{{files}}",i)}if(t=t.replace("{{date}}",(0,mT.moment)().format(this.plugin.settings.commitDateFormat)),this.plugin.settings.listChangedFilesInMessageBody){let n=r!=null?r:await this.status(),i="";n.staged.length<100?i=n.staged.map(a=>a.path).join(` +`):i="Too many files to list",t=t+` + +Affected files: +`+i}return t}};var Te=class extends Vs{constructor(r){super(r);this.useDefaultWindowsGitPath=!1}async setGitInstance(r=!1){if(this.isGitInstalled()){let n=this.app.vault.adapter,i=n.getBasePath(),a=i;this.plugin.settings.basePath&&(await n.exists((0,Xn.normalizePath)(this.plugin.settings.basePath))?a=Be.join(i,this.plugin.settings.basePath):r||new Xn.Notice("ObsidianGit: Base path does not exist")),this.absoluteRepoPath=a,this.git=wx({baseDir:a,binary:this.plugin.localStorage.getGitPath()||(this.useDefaultWindowsGitPath?Vu:void 0),config:["core.quotepath=off"],unsafe:{allowUnsafeCustomBinary:!0}});let s=this.plugin.localStorage.getPATHPaths(),o=this.plugin.localStorage.getEnvVars(),c=this.plugin.settings.gitDir;if(s.length>0){let f=process.env.PATH+":"+s.join(":");process.env.PATH=f}c&&(process.env.GIT_DIR=c);for(let f of o){let[d,h]=f.split("=");process.env[d]=h}if(yT.default.enable("simple-git"),await this.git.checkIsRepo()){let f=await this.git.revparse("--show-cdup"),d=(0,Vl.resolve)(a+Vl.sep+f);this.absoluteRepoPath=d,await this.git.cwd(d)}let l=Be.join(i,this.app.vault.configDir,"plugins","obsidian-git"),u=Be.join(l,Os);process.env.SSH_ASKPASS==null&&(process.env.SSH_ASKPASS=u),process.env.OBSIDIAN_GIT_CREDENTIALS_INPUT=Be.join(l,Wu),process.env.SSH_ASKPASS==u&&this.askpass().catch(f=>this.plugin.displayError(f))}}getRelativeVaultPath(r){let i=this.app.vault.adapter.getBasePath(),a=Be.join(this.absoluteRepoPath,r),s=Be.relative(i,a);return Xn.Platform.isWin&&(s=s.replace(/\\/g,"/")),s}getRelativeRepoPath(r,n=!0){if(n){let a=this.plugin.app.vault.adapter.getBasePath(),s=this.absoluteRepoPath,o=Be.join(a,r),c=Be.relative(s,o);return Xn.Platform.isWin&&(c=c.replace(/\\/g,"/")),c}return r}async askpass(){let r=this.app.vault.adapter,n=r.getBasePath(),i=Be.join(n,this.app.vault.configDir,"plugins","obsidian-git"),a=this.app.vault.configDir+"/plugins/obsidian-git/";await Zn.writeFile(Be.join(i,Os),_x),await Zn.chmod(Be.join(i,Os),493),this.watchAbortController=new AbortController;let{signal:s}=this.watchAbortController;try{let o=Zn.watch(i,{signal:s});for await(let c of o){if(c.filename!=Wu)continue;let l=a+Wu;if(!await r.exists(l))continue;let u=await r.read(l),f;u.length>60&&(f=new Xn.Notice(u,999999));let d=await new Fe(this.plugin,{allowEmpty:!0,placeholder:u.length>60?"Enter a response to the message.":u}).openAndGetResult();f==null||f.hide(),await r.exists(l)&&await r.write(`${l}.response`,d!=null?d:"")}}catch(o){this.plugin.displayError(o),await Zn.rm(Be.join(i,Os),{force:!0}),await Zn.rm(Be.join(i,`${Os}.response`),{force:!0}),await new Promise(c=>setTimeout(c,5e3)),this.plugin.log("Retry watch for ask pass"),await this.askpass()}}unload(){var r;(r=this.watchAbortController)==null||r.abort()}async status(){this.plugin.setPluginState({gitAction:1});let r=await this.git.status();this.plugin.setPluginState({gitAction:0});let n=r.files.map(i=>{let a=this.formatPath(i);return{path:a.path,from:a.from,index:i.index==="?"?"U":i.index,workingDir:i.working_dir==="?"?"U":i.working_dir,vaultPath:this.getRelativeVaultPath(a.path)}});return{all:n,changed:n.filter(i=>i.workingDir!==" "),staged:n.filter(i=>i.index!==" "&&i.index!="U"),conflicted:r.conflicted.map(i=>this.formatPath({path:i}).path)}}async submoduleAwareHeadRevisonInContainingDirectory(r){let n=this.getRelativeRepoPath(r),a=["-C",Be.dirname(n),"rev-parse","HEAD"],s=this.git.raw(a);return s.catch(o=>console.warn("obsidian-git: rev-parse error:",o)),s}async getSubmodulePaths(){return new Promise(r=>{this.git.outputHandler((n,i,a,s)=>{if(!(s.contains("submodule")&&s.contains("foreach")))return;let o="",c=this.app.vault.adapter.getBasePath()+(this.plugin.settings.basePath?"/"+this.plugin.settings.basePath:"");i.on("data",l=>{o+=l.toString("utf8")}),i.on("end",()=>{let u=o.split(` +`).map(f=>{let d=f.match(/'([^']*)'/);if(d!=null)return c+"/"+d[1]+Vl.sep}).filter(f=>!!f);u.reverse(),r(u)})}),this.git.subModule(["foreach","--recursive",""]).then(()=>{this.git.outputHandler(()=>{})},n=>this.plugin.displayError(n))})}formatPath(r,n=!1){function i(a){if(a!=null)return a.startsWith('"')&&a.endsWith('"')?a.substring(1,a.length-1):a}return n?{from:i(r.from),path:i(r.path)}:{path:i(r.path)}}async blame(r,n,i){if(r=this.getRelativeRepoPath(r),!await this.isTracked(r))return"untracked";let a=await this.getSubmoduleOfFile(r),s=a?["-C",a.submodule]:[],o=a?a.relativeFilepath:r;s.push("blame","--porcelain"),i&&s.push("-w");let c=`-C${zu}`;switch(n){case"inactive":break;case"same-commit":s.push("-C",c);break;case"all-commits":s.push("-C","-C",c);break;default:Oi(n)}s.push("--",o);let l=await this.git.raw(s);return Mj(l)}async isTracked(r){let n=await this.getSubmoduleOfFile(r),i=n?["-C",n.submodule]:[],a=n?n.relativeFilepath:r;return i.push("ls-files","--",a),this.git.raw(i).then(s=>s.trim()!=="")}async commitAll({message:r}){if(this.plugin.settings.updateSubmodules){this.plugin.setPluginState({gitAction:4});let i=await this.getSubmodulePaths();for(let a of i)await this.git.cwd({path:a,root:!1}).add("-A"),await this.git.cwd({path:a,root:!1}).commit(await this.formatCommitMessage(r))}this.plugin.setPluginState({gitAction:3}),await this.git.add("-A"),this.plugin.setPluginState({gitAction:4});let n=await this.git.commit(await this.formatCommitMessage(r));return this.app.workspace.trigger("obsidian-git:head-change"),n.summary.changes}async commit({message:r,amend:n}){this.plugin.setPluginState({gitAction:4});let i=(await this.git.commit(await this.formatCommitMessage(r),n?["--amend"]:[])).summary.changes;return this.app.workspace.trigger("obsidian-git:head-change"),this.plugin.setPluginState({gitAction:0}),i}async stage(r,n){this.plugin.setPluginState({gitAction:3}),r=this.getRelativeRepoPath(r,n),await this.git.add(["--",r]),this.plugin.setPluginState({gitAction:0})}async stageAll({dir:r}){this.plugin.setPluginState({gitAction:3}),await this.git.add(r!=null?r:"-A"),this.plugin.setPluginState({gitAction:0})}async unstageAll({dir:r}){this.plugin.setPluginState({gitAction:3}),await this.git.reset(r!=null?["--",r]:[]),this.plugin.setPluginState({gitAction:0})}async unstage(r,n){this.plugin.setPluginState({gitAction:3}),r=this.getRelativeRepoPath(r,n),await this.git.reset(["--",r]),this.plugin.setPluginState({gitAction:0})}async discard(r){this.plugin.setPluginState({gitAction:3}),await this.isTracked(r)?await this.git.checkout(["--",r]):await this.app.vault.adapter.rmdir(this.getRelativeVaultPath(r),!0),this.plugin.setPluginState({gitAction:0})}async hashObject(r){r=this.getRelativeRepoPath(r);let n=await this.getSubmoduleOfFile(r),i=n?["-C",n.submodule]:[],a=n?n.relativeFilepath:r;return i.push("hash-object","--",a),this.git.raw(i)}async discardAll({dir:r}){return this.discard(r!=null?r:".")}async pull(){this.plugin.setPluginState({gitAction:2});try{this.plugin.settings.updateSubmodules&&await this.git.subModule(["update","--remote","--merge","--recursive"]);let r=await this.branchInfo(),n=await this.git.revparse([r.current]);if(!r.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();let i=await this.git.revparse([r.tracking]);if(n!==i){if(this.plugin.settings.syncMethod==="merge"||this.plugin.settings.syncMethod==="rebase")try{switch(this.plugin.settings.syncMethod){case"merge":await this.git.merge([r.tracking]);break;case"rebase":await this.git.rebase([r.tracking])}}catch(o){this.plugin.displayError(`Pull failed (${this.plugin.settings.syncMethod}): ${"message"in o?o.message:o}`);return}else if(this.plugin.settings.syncMethod==="reset")try{await this.git.raw(["update-ref",`refs/heads/${r.current}`,i]),await this.unstageAll({})}catch(o){this.plugin.displayError(`Sync failed (${this.plugin.settings.syncMethod}): ${"message"in o?o.message:o}`)}this.app.workspace.trigger("obsidian-git:head-change");let a=await this.git.revparse([r.current]);return(await this.git.diff([`${n}..${a}`,"--name-only"])).split(/\r\n|\r|\n/).filter(o=>o.length>0).map(o=>({path:o,workingDir:"P",vaultPath:this.getRelativeVaultPath(o)}))}else return[]}catch(r){this.convertErrors(r)}}async push(){this.plugin.setPluginState({gitAction:5});try{if(this.plugin.settings.updateSubmodules){let s=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`]);console.log(s)}let r=await this.git.status(),n=r.tracking,i=r.current;if(!n&&this.plugin.settings.updateSubmodules){this.plugin.log("No tracking branch found. Ignoring push of main repo and updating submodules only.");return}let a=(await this.git.diffSummary([i,n,"--"])).changed;return await this.git.env({...process.env,OBSIDIAN_GIT:1}).push(),a}catch(r){this.convertErrors(r)}}async getUnpushedCommits(){let r=await this.git.status(),n=r.tracking,i=r.current;return n==null||i==null?0:(await this.git.diffSummary([i,n,"--"])).changed}async canPush(){if(this.plugin.settings.updateSubmodules===!0)return!0;let r=await this.git.status(),n=r.tracking,i=r.current;return n?(await this.git.diffSummary([i,n,"--"])).changed!==0:!1}async checkRequirements(){return this.isGitInstalled()?await this.git.checkIsRepo()?"valid":"missing-repo":"missing-git"}async branchInfo(){let r=await this.git.status(),n=await this.git.branch(["--no-color"]);return{current:r.current||void 0,tracking:r.tracking||void 0,branches:n.all}}async getRemoteUrl(r){try{return await this.git.remote(["get-url",r])||void 0}catch(n){if(String(n).contains(r))return;throw n}}async log(r,n=!0,i,a){let s;r&&(s=this.getRelativeRepoPath(r,n));let o={file:s,maxCount:i,"--diff-merges":"first-parent","--name-status":null};return a&&(o[a]=null),(await this.git.log(o)).all.map(l=>{var u,f,d,h;return{...l,author:{name:l.author_name,email:l.author_email},refs:l.refs.split(", ").filter(p=>p.length>0),diff:{...l.diff,files:(f=(u=l.diff)==null?void 0:u.files.map(p=>({...p,status:p.status,path:p.file,hash:l.hash,vaultPath:this.getRelativeVaultPath(p.file),fromPath:p.from,fromVaultPath:p.from!=null?this.getRelativeVaultPath(p.from):void 0,binary:p.binary})))!=null?f:[]},fileName:(h=(d=l.diff)==null?void 0:d.files.first())==null?void 0:h.file}})}async show(r,n,i=!0){let a=this.getRelativeRepoPath(n,i);return this.git.show([r+":"+a])}async checkout(r,n){if(n&&(r=`${n}/${r}`),await this.git.checkout(r),this.plugin.settings.submoduleRecurseCheckout){let i=await this.getSubmodulePaths();for(let a of i){let s=await this.git.cwd({path:a,root:!1}).branch();Object.keys(s.branches).includes(r)&&await this.git.cwd({path:a,root:!1}).checkout(r)}}}async createBranch(r){await this.git.checkout(["-b",r])}async deleteBranch(r,n){await this.git.branch([n?"-D":"-d",r])}async branchIsMerged(r){return!(await this.git.branch(["--no-merged"])).all.contains(r)}async init(){await this.git.init(!1)}async clone(r,n,i){await this.git.clone(r,Be.join(this.app.vault.adapter.getBasePath(),n),i?["--depth",`${i}`]:[])}async setConfig(r,n){n==null?await this.git.raw(["config","--local","--unset",r]):await this.git.addConfig(r,n)}async getConfig(r){let i=(await this.git.listConfig("local")).all[r];if(typeof i=="string"||i==null)return i;throw new Error("Config value is not a string")}async fetch(r){await this.git.fetch(r!=null?[r]:[])}async setRemote(r,n){(await this.getRemotes()).includes(r)?await this.git.remote(["set-url",r,n]):await this.git.remote(["add",r,n])}async getRemoteBranches(r){let n=await this.git.branch(["-r","--list",`${r}*`]),i=[];for(let a in n.branches)i.push(n.branches[a].name);return i}async getRemotes(){let r=await this.git.remote([]);return r?r.trim().split(` +`):[]}async removeRemote(r){await this.git.removeRemote(r)}async updateUpstreamBranch(r){try{await this.git.branch(["--set-upstream-to",r])}catch(n){try{await this.git.branch(["--set-upstream",r])}catch(i){await this.git.push(["--set-upstream",...Ii(r)])}}}updateGitPath(r){return this.setGitInstance()}updateBasePath(r){return this.setGitInstance(!0)}async getDiffString(r,n=!1,i){return n?await this.git.diff(["--cached","--",r]):i?await this.git.show([`${i}`,"--",r]):await this.git.diff(["--",r])}async diff(r,n,i){return await this.git.diff([`${n}..${i}`,"--",r])}async rawCommand(r){let n=r.split(" ");return await this.git.raw(n[0],...n.slice(1))}async getSubmoduleOfFile(r){if(!await this.app.vault.adapter.exists(Be.dirname(r)))return;let n=await this.git.raw(["-C",Be.dirname(r),"rev-parse","--show-toplevel"],c=>c&&console.warn("get-submodule-of-file",c==null?void 0:c.message));if(n=n.trim(),(await this.git.raw(["-C",Be.dirname(r),"rev-parse","--show-superproject-working-tree"],c=>c&&console.warn("get-submodule-of-file",c==null?void 0:c.message))).trim()==="")return;let s=this.app.vault.adapter.getFullPath(Be.normalize(r)),o=Be.relative(n,s);return{submodule:n,relativeFilepath:o}}async getLastCommitTime(){let r=await this.git.log({n:1});if(r!=null&&r.latest!=null)return new Date(r.latest.date)}isGitInstalled(){let r=this.plugin.localStorage.getGitPath(),n=(0,qg.spawnSync)(r||"git",["--version"],{stdio:"ignore"});if(n.error)if(Xn.Platform.isWin&&!r){this.plugin.log(`Git not found in PATH. Checking standard installation path(${Vu}) of Git for Windows.`);let i=(0,qg.spawnSync)(Vu,["--version"],{stdio:"ignore"});if(i.error)return console.error(i.error),!1;this.useDefaultWindowsGitPath=!0}else return console.error(n.error),!1;else this.useDefaultWindowsGitPath=!1;return!0}convertErrors(r){if(r instanceof wr){let n=String(r.message);if(n.contains("Could not resolve host")||n.contains("Unable to resolve host")||n.match(/ssh: connect to host .*? port .*?: Operation timed out/)!=null||n.match(/ssh: connect to host .*? port .*?: Network is unreachable/)!=null||n.match(/ssh: connect to host .*? port .*?: Undefined error: 0/)!=null)throw new Is(n)}throw r}async isFileTrackedByLFS(r){try{return(await this.git.raw(["check-attr","filter",r])).includes("filter: lfs")}catch(n){let i=n instanceof Error?n.message:String(n);return this.plugin.displayError(`Error checking LFS status: ${i}`),!1}}},wT={hash:"000000",isZeroCommit:!0,summary:""};function Mj(e){let r=e.replace(`\r +`,` +`).split(` +`),n={commits:new Map,hashPerLine:[void 0],originalFileLineNrPerLine:[void 0],finalFileLineNrPerLine:[void 0],groupSizePerStartingLine:new Map},i=1;for(let a=0;a<r.length;){if(gT(r[a])){let s=r[a].split(" "),o=Oj(s,i,n);for(a++;gT(r[a]);a++){let c=r[a].split(" ");Ij(c,n,i)}Fj(n.commits.get(o)),i+=1}else if(!(r[a]===""&&a===r.length-1))throw Error(`Expected non-whitespace line or EOF, but found: ${r[a]}`);a++}return n}function Oj(e,t,r){let n=e[0];if(r.hashPerLine.push(n),r.originalFileLineNrPerLine.push(parseInt(e[1])),r.finalFileLineNrPerLine.push(parseInt(e[2])),e.length>=4&&r.groupSizePerStartingLine.set(t,parseInt(e[3])),parseInt(e[2])!==t)throw Error(`git-blame output is out of order: ${t} vs ${e[2]}`);return n}function Ij(e,t,r){let n=e[0],i=e.slice(1).join(" "),a=t.hashPerLine[r],s=t.commits.get(a)||{hash:a,author:{},committer:{},previous:{}};switch(n){case"summary":s.summary=i;break;case"author":s.author.name=i;break;case"author-mail":s.author.email=vT(i);break;case"author-time":s.author.epochSeconds=parseInt(i);break;case"author-tz":s.author.tz=i;break;case"committer":s.committer.name=i;break;case"committer-mail":s.committer.email=vT(i);break;case"committer-time":s.committer.epochSeconds=parseInt(i);break;case"committer-tz":s.committer.tz=i;break;case"previous":s.previous.commitHash=i;break;case"filename":s.previous.filename=i;break}t.commits.set(a,s)}function Fj(e){if(e.summary===void 0)throw Error(`Summary not provided for commit: ${e.hash}`);Wg(e.author)&&(e.author=void 0),Wg(e.committer)&&(e.committer=void 0),Wg(e.previous)&&(e.previous=void 0),e.isZeroCommit=!!e.hash.match(/^0*$/)}function Wg(e){return!e||Object.keys(e).length===0}function gT(e){return e.length>0&&e[0].trim()===e[0]}function vT(e){let t=e.startsWith("<")?e.substring(1):e;return t.endsWith(">")?t.substring(0,t.length-1):t}g();var eC=require("@codemirror/state");g();var IT=require("@codemirror/state"),Xf=require("obsidian");g();var Yg=class{constructor(){this.eventsPerFilepath=new Map;this.startRemoveStalesSubscribersInterval()}ifFilepathDefinedTransformSubscribers(t,r){if(t)return this.ensureInitialized(t),r(this.eventsPerFilepath.get(t))}forEachSubscriber(t){this.eventsPerFilepath.forEach(r=>r.forEach(t))}ensureInitialized(t){this.eventsPerFilepath.get(t)||this.eventsPerFilepath.set(t,new Set)}startRemoveStalesSubscribersInterval(){this.removeStalesSubscribersTimer=window.setInterval(()=>this==null?void 0:this.forEachSubscriber(t=>t==null?void 0:t.removeIfStale()),6e4)}clear(){window.clearInterval(this.removeStalesSubscribersTimer),this.eventsPerFilepath.clear()}},Ws=new Yg;g();var Wf=require("@codemirror/state"),CT=ze(Xg());g();var V=require("obsidian");g();g();function nn(){}nn.prototype={diff:function(t,r){var n,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=i.callback;typeof i=="function"&&(a=i,i={});var s=this;function o(E){return E=s.postProcess(E,i),a?(setTimeout(function(){a(E)},0),!0):E}t=this.castInput(t,i),r=this.castInput(r,i),t=this.removeEmpty(this.tokenize(t,i)),r=this.removeEmpty(this.tokenize(r,i));var c=r.length,l=t.length,u=1,f=c+l;i.maxEditLength!=null&&(f=Math.min(f,i.maxEditLength));var d=(n=i.timeout)!==null&&n!==void 0?n:1/0,h=Date.now()+d,p=[{oldPos:-1,lastComponent:void 0}],m=this.extractCommon(p[0],r,t,0,i);if(p[0].oldPos+1>=l&&m+1>=c)return o(bT(s,p[0].lastComponent,r,t,s.useLongestToken));var v=-1/0,y=1/0;function b(){for(var E=Math.max(v,-u);E<=Math.min(y,u);E+=2){var _=void 0,k=p[E-1],w=p[E+1];k&&(p[E-1]=void 0);var A=!1;if(w){var S=w.oldPos-E;A=w&&0<=S&&S<c}var T=k&&k.oldPos+1<l;if(!A&&!T){p[E]=void 0;continue}if(!T||A&&k.oldPos<w.oldPos?_=s.addToPath(w,!0,!1,0,i):_=s.addToPath(k,!1,!0,1,i),m=s.extractCommon(_,r,t,E,i),_.oldPos+1>=l&&m+1>=c)return o(bT(s,_.lastComponent,r,t,s.useLongestToken));p[E]=_,_.oldPos+1>=l&&(y=Math.min(y,E-1)),m+1>=c&&(v=Math.max(v,E+1))}u++}if(a)(function E(){setTimeout(function(){if(u>f||Date.now()>h)return a();b()||E()},0)})();else for(;u<=f&&Date.now()<=h;){var x=b();if(x)return x}},addToPath:function(t,r,n,i,a){var s=t.lastComponent;return s&&!a.oneChangePerToken&&s.added===r&&s.removed===n?{oldPos:t.oldPos+i,lastComponent:{count:s.count+1,added:r,removed:n,previousComponent:s.previousComponent}}:{oldPos:t.oldPos+i,lastComponent:{count:1,added:r,removed:n,previousComponent:s}}},extractCommon:function(t,r,n,i,a){for(var s=r.length,o=n.length,c=t.oldPos,l=c-i,u=0;l+1<s&&c+1<o&&this.equals(n[c+1],r[l+1],a);)l++,c++,u++,a.oneChangePerToken&&(t.lastComponent={count:1,previousComponent:t.lastComponent,added:!1,removed:!1});return u&&!a.oneChangePerToken&&(t.lastComponent={count:u,previousComponent:t.lastComponent,added:!1,removed:!1}),t.oldPos=c,l},equals:function(t,r,n){return n.comparator?n.comparator(t,r):t===r||n.ignoreCase&&t.toLowerCase()===r.toLowerCase()},removeEmpty:function(t){for(var r=[],n=0;n<t.length;n++)t[n]&&r.push(t[n]);return r},castInput:function(t){return t},tokenize:function(t){return Array.from(t)},join:function(t){return t.join("")},postProcess:function(t){return t}};function bT(e,t,r,n,i){for(var a=[],s;t;)a.push(t),s=t.previousComponent,delete t.previousComponent,t=s;a.reverse();for(var o=0,c=a.length,l=0,u=0;o<c;o++){var f=a[o];if(f.removed)f.value=e.join(n.slice(u,u+f.count)),u+=f.count;else{if(!f.added&&i){var d=r.slice(l,l+f.count);d=d.map(function(h,p){var m=n[u+p];return m.length>h.length?m:h}),f.value=e.join(d)}else f.value=e.join(r.slice(l,l+f.count));l+=f.count,f.added||(u+=f.count)}}return a}var JW=new nn;function _T(e,t){var r;for(r=0;r<e.length&&r<t.length;r++)if(e[r]!=t[r])return e.slice(0,r);return e.slice(0,r)}function xT(e,t){var r;if(!e||!t||e[e.length-1]!=t[t.length-1])return"";for(r=0;r<e.length&&r<t.length;r++)if(e[e.length-(r+1)]!=t[t.length-(r+1)])return e.slice(-r);return e.slice(-r)}function Kg(e,t,r){if(e.slice(0,t.length)!=t)throw Error("string ".concat(JSON.stringify(e)," doesn't start with prefix ").concat(JSON.stringify(t),"; this is a bug"));return r+e.slice(t.length)}function Jg(e,t,r){if(!t)return e+r;if(e.slice(-t.length)!=t)throw Error("string ".concat(JSON.stringify(e)," doesn't end with suffix ").concat(JSON.stringify(t),"; this is a bug"));return e.slice(0,-t.length)+r}function Wl(e,t){return Kg(e,t,"")}function Df(e,t){return Jg(e,t,"")}function ST(e,t){return t.slice(0,$j(e,t))}function $j(e,t){var r=0;e.length>t.length&&(r=e.length-t.length);var n=t.length;e.length<t.length&&(n=e.length);var i=Array(n),a=0;i[0]=0;for(var s=1;s<n;s++){for(t[s]==t[a]?i[s]=i[a]:i[s]=a;a>0&&t[s]!=t[a];)a=i[a];t[s]==t[a]&&a++}a=0;for(var o=r;o<e.length;o++){for(;a>0&&e[o]!=t[a];)a=i[a];e[o]==t[a]&&a++}return a}var Nf="a-zA-Z0-9_\\u{C0}-\\u{FF}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}",Lj=new RegExp("[".concat(Nf,"]+|\\s+|[^").concat(Nf,"]"),"ug"),Bf=new nn;Bf.equals=function(e,t,r){return r.ignoreCase&&(e=e.toLowerCase(),t=t.toLowerCase()),e.trim()===t.trim()};Bf.tokenize=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r;if(t.intlSegmenter){if(t.intlSegmenter.resolvedOptions().granularity!="word")throw new Error('The segmenter passed must have a granularity of "word"');r=Array.from(t.intlSegmenter.segment(e),function(a){return a.segment})}else r=e.match(Lj)||[];var n=[],i=null;return r.forEach(function(a){/\s/.test(a)?i==null?n.push(a):n.push(n.pop()+a):/\s/.test(i)?n[n.length-1]==i?n.push(n.pop()+a):n.push(i+a):n.push(a),i=a}),n};Bf.join=function(e){return e.map(function(t,r){return r==0?t:t.replace(/^\s+/,"")}).join("")};Bf.postProcess=function(e,t){if(!e||t.oneChangePerToken)return e;var r=null,n=null,i=null;return e.forEach(function(a){a.added?n=a:a.removed?i=a:((n||i)&&ET(r,i,n,a),r=a,n=null,i=null)}),(n||i)&&ET(r,i,n,null),e};function ET(e,t,r,n){if(t&&r){var i=t.value.match(/^\s*/)[0],a=t.value.match(/\s*$/)[0],s=r.value.match(/^\s*/)[0],o=r.value.match(/\s*$/)[0];if(e){var c=_T(i,s);e.value=Jg(e.value,s,c),t.value=Wl(t.value,c),r.value=Wl(r.value,c)}if(n){var l=xT(a,o);n.value=Kg(n.value,o,l),t.value=Df(t.value,l),r.value=Df(r.value,l)}}else if(r)e&&(r.value=r.value.replace(/^\s*/,"")),n&&(n.value=n.value.replace(/^\s*/,""));else if(e&&n){var u=n.value.match(/^\s*/)[0],f=t.value.match(/^\s*/)[0],d=t.value.match(/\s*$/)[0],h=_T(u,f);t.value=Wl(t.value,h);var p=xT(Wl(u,h),d);t.value=Df(t.value,p),n.value=Kg(n.value,u,p),e.value=Jg(e.value,u,u.slice(0,u.length-p.length))}else if(n){var m=n.value.match(/^\s*/)[0],v=t.value.match(/\s*$/)[0],y=ST(v,m);t.value=Df(t.value,y)}else if(e){var b=e.value.match(/\s*$/)[0],x=t.value.match(/^\s*/)[0],E=ST(b,x);t.value=Wl(t.value,E)}}var Dj=new nn;Dj.tokenize=function(e){var t=new RegExp("(\\r?\\n)|[".concat(Nf,"]+|[^\\S\\n\\r]+|[^").concat(Nf,"]"),"ug");return e.match(t)||[]};var Hf=new nn;Hf.tokenize=function(e,t){t.stripTrailingCr&&(e=e.replace(/\r\n/g,` +`));var r=[],n=e.split(/(\n|\r\n)/);n[n.length-1]||n.pop();for(var i=0;i<n.length;i++){var a=n[i];i%2&&!t.newlineIsToken?r[r.length-1]+=a:r.push(a)}return r};Hf.equals=function(e,t,r){return r.ignoreWhitespace?((!r.newlineIsToken||!e.includes(` +`))&&(e=e.trim()),(!r.newlineIsToken||!t.includes(` +`))&&(t=t.trim())):r.ignoreNewlineAtEof&&!r.newlineIsToken&&(e.endsWith(` +`)&&(e=e.slice(0,-1)),t.endsWith(` +`)&&(t=t.slice(0,-1))),nn.prototype.equals.call(this,e,t,r)};function AT(e,t,r){return Hf.diff(e,t,r)}var Nj=new nn;Nj.tokenize=function(e){return e.split(/(\S.+?[.!?])(?=\s+|$)/)};var jj=new nn;jj.tokenize=function(e){return e.split(/([{}:;,]|\s+)/)};function kT(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function jf(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?kT(Object(r),!0).forEach(function(n){Uj(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):kT(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function Bj(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Hj(e){var t=Bj(e,"string");return typeof t=="symbol"?t:t+""}function Qg(e){"@babel/helpers - typeof";return Qg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Qg(e)}function Uj(e,t,r){return t=Hj(t),t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Zg(e){return Gj(e)||zj(e)||Vj(e)||Wj()}function Gj(e){if(Array.isArray(e))return e0(e)}function zj(e){if(typeof Symbol!="undefined"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Vj(e,t){if(e){if(typeof e=="string")return e0(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return e0(e,t)}}function e0(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function Wj(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ql=new nn;ql.useLongestToken=!0;ql.tokenize=Hf.tokenize;ql.castInput=function(e,t){var r=t.undefinedReplacement,n=t.stringifyReplacer,i=n===void 0?function(a,s){return typeof s=="undefined"?r:s}:n;return typeof e=="string"?e:JSON.stringify(t0(e,null,null,i),i," ")};ql.equals=function(e,t,r){return nn.prototype.equals.call(ql,e.replace(/,([\r\n])/g,"$1"),t.replace(/,([\r\n])/g,"$1"),r)};function t0(e,t,r,n,i){t=t||[],r=r||[],n&&(e=n(i,e));var a;for(a=0;a<t.length;a+=1)if(t[a]===e)return r[a];var s;if(Object.prototype.toString.call(e)==="[object Array]"){for(t.push(e),s=new Array(e.length),r.push(s),a=0;a<e.length;a+=1)s[a]=t0(e[a],t,r,n,i);return t.pop(),r.pop(),s}if(e&&e.toJSON&&(e=e.toJSON()),Qg(e)==="object"&&e!==null){t.push(e),s={},r.push(s);var o=[],c;for(c in e)Object.prototype.hasOwnProperty.call(e,c)&&o.push(c);for(o.sort(),a=0;a<o.length;a+=1)c=o[a],s[c]=t0(e[c],t,r,n,c);t.pop(),r.pop()}else s=e;return s}var r0=new nn;r0.tokenize=function(e){return e.slice()};r0.join=r0.removeEmpty=function(e){return e};function TT(e,t,r,n,i,a,s){if(s||(s={}),typeof s=="function"&&(s={callback:s}),typeof s.context=="undefined"&&(s.context=4),s.newlineIsToken)throw new Error("newlineIsToken may not be used with patch-generation functions, only with diffing functions");if(s.callback){var o=s,c=o.callback;AT(r,n,jf(jf({},s),{},{callback:function(f){var d=l(f);c(d)}}))}else return l(AT(r,n,s));function l(u){if(!u)return;u.push({value:"",lines:[]});function f(A){return A.map(function(S){return" "+S})}for(var d=[],h=0,p=0,m=[],v=1,y=1,b=function(){var S=u[x],T=S.lines||Yj(S.value);if(S.lines=T,S.added||S.removed){var P;if(!h){var O=u[x-1];h=v,p=y,O&&(m=s.context>0?f(O.lines.slice(-s.context)):[],h-=m.length,p-=m.length)}(P=m).push.apply(P,Zg(T.map(function(ee){return(S.added?"+":"-")+ee}))),S.added?y+=T.length:v+=T.length}else{if(h)if(T.length<=s.context*2&&x<u.length-2){var j;(j=m).push.apply(j,Zg(f(T)))}else{var D,Q=Math.min(T.length,s.context);(D=m).push.apply(D,Zg(f(T.slice(0,Q))));var de={oldStart:h,oldLines:v-h+Q,newStart:p,newLines:y-p+Q,lines:m};d.push(de),h=0,p=0,m=[]}v+=T.length,y+=T.length}},x=0;x<u.length;x++)b();for(var E=0,_=d;E<_.length;E++)for(var k=_[E],w=0;w<k.lines.length;w++)k.lines[w].endsWith(` +`)?k.lines[w]=k.lines[w].slice(0,-1):(k.lines.splice(w+1,0,"\\ No newline at end of file"),w++);return{oldFileName:e,newFileName:t,oldHeader:i,newHeader:a,hunks:d}}}function n0(e){if(Array.isArray(e))return e.map(n0).join(` +`);var t=[];e.oldFileName==e.newFileName&&t.push("Index: "+e.oldFileName),t.push("==================================================================="),t.push("--- "+e.oldFileName+(typeof e.oldHeader=="undefined"?"":" "+e.oldHeader)),t.push("+++ "+e.newFileName+(typeof e.newHeader=="undefined"?"":" "+e.newHeader));for(var r=0;r<e.hunks.length;r++){var n=e.hunks[r];n.oldLines===0&&(n.oldStart-=1),n.newLines===0&&(n.newStart-=1),t.push("@@ -"+n.oldStart+","+n.oldLines+" +"+n.newStart+","+n.newLines+" @@"),t.push.apply(t,n.lines)}return t.join(` +`)+` +`}function qj(e,t,r,n,i,a,s){var o;if(typeof s=="function"&&(s={callback:s}),(o=s)!==null&&o!==void 0&&o.callback){var l=s,u=l.callback;TT(e,t,r,n,i,a,jf(jf({},s),{},{callback:function(d){d?u(n0(d)):u()}}))}else{var c=TT(e,t,r,n,i,a,s);return c?n0(c):void 0}}function Uf(e,t,r,n,i,a){return qj(e,e,t,r,n,i,a)}function Yj(e){var t=e.endsWith(` +`),r=e.split(` +`).map(function(n){return n+` +`});return t?r.pop():r.push(r.pop().slice(0,-1)),r}var _a=require("obsidian");g();var Fi=require("obsidian"),Gf=class{constructor(t,r){this.plugin=r;this.promises={};this.adapter=t.adapter,this.vault=t,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(t,r){var n;if(this.maybeLog("Read: "+t+JSON.stringify(r)),r=="utf8"||r.encoding=="utf8"){let i=this.vault.getAbstractFileByPath(t);return i instanceof Fi.TFile?(this.maybeLog("Reuse"),this.vault.read(i)):this.adapter.read(t)}else{if(t.endsWith(this.gitDir+"/index"))return this.plugin.settings.basePath!=this.lastBasePath?(this.clearIndex(),this.lastBasePath=this.plugin.settings.basePath,this.adapter.readBinary(t)):(n=this.index)!=null?n:this.adapter.readBinary(t);let i=this.vault.getAbstractFileByPath(t);return i instanceof Fi.TFile?(this.maybeLog("Reuse"),this.vault.readBinary(i)):this.adapter.readBinary(t)}}async writeFile(t,r){if(this.maybeLog("Write: "+t),typeof r=="string"){let n=this.vault.getAbstractFileByPath(t);return n instanceof Fi.TFile?this.vault.modify(n,r):this.adapter.write(t,r)}else if(t.endsWith(this.gitDir+"/index"))this.index=r,this.indexmtime=Date.now();else{let n=this.vault.getAbstractFileByPath(t);return n instanceof Fi.TFile?this.vault.modifyBinary(n,r):this.adapter.writeBinary(t,r)}}async readdir(t){t==="."&&(t="/");let r=await this.adapter.list(t),n=[...r.files,...r.folders],i;return t!=="/"?i=n.map(a=>(0,Fi.normalizePath)(a.substring(t.length))):i=n,i}async mkdir(t){return this.adapter.mkdir(t)}async rmdir(t,r){var n,i;return this.adapter.rmdir(t,(i=(n=r==null?void 0:r.options)==null?void 0:n.recursive)!=null?i:!1)}async stat(t){if(t.endsWith(this.gitDir+"/index")){if(this.index!==void 0&&this.indexctime!=null&&this.indexmtime!=null)return{isFile:()=>!0,isDirectory:()=>!1,isSymbolicLink:()=>!1,size:this.index.length,type:"file",ctimeMs:this.indexctime,mtimeMs:this.indexmtime};{let n=await this.adapter.stat(t);if(n==null)throw{code:"ENOENT"};return this.indexctime=n.ctime,this.indexmtime=n.mtime,{ctimeMs:n.ctime,mtimeMs:n.mtime,size:n.size,type:"file",isFile:()=>!0,isDirectory:()=>!1,isSymbolicLink:()=>!1}}}t==="."&&(t="/");let r=this.vault.getAbstractFileByPath(t);if(this.maybeLog("Stat: "+t),r instanceof Fi.TFile)return this.maybeLog("Reuse stat"),{ctimeMs:r.stat.ctime,mtimeMs:r.stat.mtime,size:r.stat.size,type:"file",isFile:()=>!0,isDirectory:()=>!1,isSymbolicLink:()=>!1};{let n=await this.adapter.stat(t);if(n)return{ctimeMs:n.ctime,mtimeMs:n.mtime,size:n.size,type:n.type==="folder"?"directory":n.type,isFile:()=>n.type==="file",isDirectory:()=>n.type==="folder",isSymbolicLink:()=>!1};throw{code:"ENOENT"}}}async unlink(t){return this.adapter.remove(t)}async lstat(t){return this.stat(t)}async readlink(t){throw new Error(`readlink of (${t}) is not implemented.`)}async symlink(t){throw new Error(`symlink of (${t}) is not implemented.`)}async saveAndClear(){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(t){}};var an=class extends Vs{constructor(r){super(r);this.FILE=0;this.HEAD=1;this.WORKDIR=2;this.STAGE=3;this.status_mapping={"000":" ","003":"AD","020":"??","022":"A ","023":"AM",100:"D ",101:" D",103:"MD",110:"DA",111:" ",113:"MM",120:"DA",121:" M",122:"M ",123:"MM"};this.noticeLength=999999;this.fs=new Gf(this.app.vault,this.plugin)}getRepo(){return{fs:this.fs,dir:this.plugin.settings.basePath,gitdir:this.plugin.settings.gitDir||void 0,onAuth:()=>{var r,n;return{username:(r=this.plugin.localStorage.getUsername())!=null?r:void 0,password:(n=this.plugin.localStorage.getPassword())!=null?n:void 0}},onAuthFailure:async()=>{new _a.Notice("Authentication failed. Please try with different credentials");let r=await new Fe(this.plugin,{placeholder:"Specify your username"}).openAndGetResult();if(r){let n=await new Fe(this.plugin,{placeholder:"Specify your password/personal access token"}).openAndGetResult();if(n)return this.plugin.localStorage.setUsername(r),this.plugin.localStorage.setPassword(n),{username:r,password:n}}return{cancel:!0}},http:{async request({url:r,method:n,headers:i,body:a}){let s;a&&(s=(await Jj(a)).buffer);let o=await(0,_a.requestUrl)({url:r,method:n,headers:i,body:s,throw:!1});return{url:r,method:n,headers:o.headers,body:[new Uint8Array(o.arrayBuffer)],statusCode:o.status,statusMessage:o.status.toString()}}}}}async wrapFS(r){try{let n=await r;return await this.fs.saveAndClear(),n}catch(n){throw await this.fs.saveAndClear(),n}}async status(){let r,n=window.setTimeout(()=>{r=new _a.Notice("This takes longer: Getting status",this.noticeLength)},2e4);try{this.plugin.setPluginState({gitAction:1});let i=(await this.wrapFS(ie.statusMatrix({...this.getRepo()}))).map(c=>this.getFileStatusResult(c)),a=i.filter(c=>c.workingDir!==" "),s=i.filter(c=>c.index!==" "&&c.index!=="U"),o=[];return window.clearTimeout(n),r==null||r.hide(),{all:i,changed:a,staged:s,conflicted:o}}catch(i){throw window.clearTimeout(n),r==null||r.hide(),this.plugin.displayError(i),i}}async commitAll({message:r,status:n,unstagedFiles:i}){try{return await this.checkAuthorInfo(),await this.stageAll({status:n,unstagedFiles:i}),this.commit({message:r})}catch(a){throw this.plugin.displayError(a),a}}async commit({message:r}){try{await this.checkAuthorInfo(),this.plugin.setPluginState({gitAction:4});let n=await this.formatCommitMessage(r),i=this.plugin.localStorage.getConflict(),a;if(i){let s=await this.branchInfo();a=[s.current,s.tracking]}await this.wrapFS(ie.commit({...this.getRepo(),message:n,parent:a})),this.plugin.localStorage.setConflict(!1);return}catch(n){throw this.plugin.displayError(n),n}}async stage(r,n){let i=this.getRelativeRepoPath(r,n),a;n?a=r:a=this.getRelativeVaultPath(r);try{this.plugin.setPluginState({gitAction:3}),await this.app.vault.adapter.exists(a)?await this.wrapFS(ie.add({...this.getRepo(),filepath:i})):await this.wrapFS(ie.remove({...this.getRepo(),filepath:i}))}catch(s){throw this.plugin.displayError(s),s}}async stageAll({dir:r,status:n,unstagedFiles:i}){try{if(n)await Promise.all(n.changed.map(a=>a.workingDir!=="D"?this.wrapFS(ie.add({...this.getRepo(),filepath:a.path})):ie.remove({...this.getRepo(),filepath:a.path})));else{let a=i!=null?i:await this.getUnstagedFiles(r!=null?r:".");await Promise.all(a.map(({path:s,deleted:o})=>o?ie.remove({...this.getRepo(),filepath:s}):this.wrapFS(ie.add({...this.getRepo(),filepath:s}))))}}catch(a){throw this.plugin.displayError(a),a}}async unstage(r,n){try{this.plugin.setPluginState({gitAction:3}),r=this.getRelativeRepoPath(r,n),await this.wrapFS(ie.resetIndex({...this.getRepo(),filepath:r}))}catch(i){throw this.plugin.displayError(i),i}}async unstageAll({dir:r,status:n}){try{let i;n?i=n.staged.map(a=>a.path):i=(await this.getStagedFiles(r!=null?r:".")).map(({path:s})=>s),await this.wrapFS(Promise.all(i.map(a=>ie.resetIndex({...this.getRepo(),filepath:a}))))}catch(i){throw this.plugin.displayError(i),i}}async discard(r){try{this.plugin.setPluginState({gitAction:3}),await this.wrapFS(ie.checkout({...this.getRepo(),filepaths:[r],force:!0}))}catch(n){throw this.plugin.displayError(n),n}}async discardAll({dir:r,status:n}){let i=[];n?r!=null?i=n.changed.filter(a=>a.path.startsWith(r)).map(a=>a.path):i=n.changed.map(a=>a.path):i=(await this.getUnstagedFiles(r)).map(({path:a})=>a);try{await this.wrapFS(ie.checkout({...this.getRepo(),filepaths:i,force:!0}))}catch(a){throw this.plugin.displayError(a),a}}getProgressText(r,n){let i=`${r} progress:`;return n.phase&&(i=`${i} ${n.phase}:`),n.loaded&&(i=`${i} ${n.loaded}`,n.total&&(i=`${i} of ${n.total}`)),i}resolveRef(r){return this.wrapFS(ie.resolveRef({...this.getRepo(),ref:r}))}async pull(){let r=this.showNotice("Initializing pull");try{this.plugin.setPluginState({gitAction:2});let n=await this.resolveRef("HEAD");await this.fetch();let i=await this.branchInfo();await this.checkAuthorInfo(),(await this.wrapFS(ie.merge({...this.getRepo(),ours:i.current,theirs:i.tracking,abortOnConflict:!1}))).alreadyMerged||await this.wrapFS(ie.checkout({...this.getRepo(),ref:i.current,onProgress:c=>{r!==void 0&&(r.noticeEl.innerText=this.getProgressText("Checkout",c))},remote:i.remote})),r==null||r.hide();let s=await this.resolveRef("HEAD"),o=await this.getFileChangesCount(n,s);return this.showNotice("Finished pull",!1),o.map(c=>({path:c.path,workingDir:"P",index:"P",vaultPath:this.getRelativeVaultPath(c.path)}))}catch(n){throw r==null||r.hide(),n instanceof gl.MergeConflictError&&await this.plugin.handleConflict(n.data.filepaths.map(i=>this.getRelativeVaultPath(i))),this.plugin.displayError(n),n}}async push(){if(!await this.canPush())return 0;let r=this.showNotice("Initializing push");try{this.plugin.setPluginState({gitAction:1});let n=await this.branchInfo(),i=n.tracking,a=n.current,s=(await this.getFileChangesCount(a,i)).length;return this.plugin.setPluginState({gitAction:5}),await this.wrapFS(ie.push({...this.getRepo(),onProgress:o=>{r!==void 0&&(r.noticeEl.innerText=this.getProgressText("Pushing",o))}})),r==null||r.hide(),s}catch(n){throw r==null||r.hide(),this.plugin.displayError(n),n}}async getUnpushedCommits(){let r=await this.branchInfo(),n=r.tracking,i=r.current;if(n==null||i==null)return 0;let a=await this.resolveRef(i),s=await this.resolveRef(n);return(await this.getFileChangesCount(a,s)).length}async canPush(){let r=await this.branchInfo(),n=r.tracking,i=r.current,a=await this.resolveRef(i),s=await this.resolveRef(n);return a!=s}async checkRequirements(){return await this.plugin.app.vault.adapter.exists(`${this.getRepo().dir}/.git/HEAD`)?"valid":"missing-repo"}async branchInfo(){var r,n;try{let i=await ie.currentBranch(this.getRepo())||"",a=await ie.listBranches(this.getRepo()),s=(r=await this.getConfig(`branch.${i}.remote`))!=null?r:"origin",o=(n=await this.getConfig(`branch.${i}.merge`))==null?void 0:n.split("refs/heads")[1],c=o?s+o:void 0;return{current:i,tracking:c,branches:a,remote:s}}catch(i){throw this.plugin.displayError(i),i}}async getCurrentRemote(){var i;let r=await ie.currentBranch(this.getRepo())||"";return(i=await this.getConfig(`branch.${r}.remote`))!=null?i:"origin"}async checkout(r,n){try{return this.wrapFS(ie.checkout({...this.getRepo(),ref:r,force:!!n,remote:n}))}catch(i){throw this.plugin.displayError(i),i}}async createBranch(r){try{await this.wrapFS(ie.branch({...this.getRepo(),ref:r,checkout:!0}))}catch(n){throw this.plugin.displayError(n),n}}async deleteBranch(r){try{await this.wrapFS(ie.deleteBranch({...this.getRepo(),ref:r}))}catch(n){throw this.plugin.displayError(n),n}}branchIsMerged(r){return Promise.resolve(!0)}async init(){try{await this.wrapFS(ie.init(this.getRepo()))}catch(r){throw this.plugin.displayError(r),r}}async clone(r,n,i){let a=this.showNotice("Initializing clone");try{await this.wrapFS(ie.clone({...this.getRepo(),dir:n,url:r,depth:i,onProgress:s=>{a!==void 0&&(a.noticeEl.innerText=this.getProgressText("Cloning",s))}})),a==null||a.hide()}catch(s){throw a==null||a.hide(),this.plugin.displayError(s),s}}async setConfig(r,n){try{return this.wrapFS(ie.setConfig({...this.getRepo(),path:r,value:n}))}catch(i){throw this.plugin.displayError(i),i}}async getConfig(r){try{return this.wrapFS(ie.getConfig({...this.getRepo(),path:r}))}catch(n){throw this.plugin.displayError(n),n}}async fetch(r){let n=this.showNotice("Initializing fetch");try{let i={...this.getRepo(),onProgress:a=>{n!==void 0&&(n.noticeEl.innerText=this.getProgressText("Fetching",a))},remote:r!=null?r:await this.getCurrentRemote()};await this.wrapFS(ie.fetch(i)),n==null||n.hide()}catch(i){throw this.plugin.displayError(i),n==null||n.hide(),i}}async setRemote(r,n){try{await this.wrapFS(ie.addRemote({...this.getRepo(),remote:r,url:n,force:!0}))}catch(i){throw this.plugin.displayError(i),i}}async getRemoteBranches(r){let n=[];return n.push(...await this.wrapFS(ie.listBranches({...this.getRepo(),remote:r}))),n.remove("HEAD"),n=n.map(i=>`${r}/${i}`),n}async getRemotes(){return(await this.wrapFS(ie.listRemotes({...this.getRepo()}))).map(r=>r.remote)}async removeRemote(r){await this.wrapFS(ie.deleteRemote({...this.getRepo(),remote:r}))}async getRemoteUrl(r){var n;return(n=(await this.wrapFS(ie.listRemotes({...this.getRepo()}))).filter(i=>i.remote==r)[0])==null?void 0:n.url}async log(r,n=!0,i,a){let s=await this.wrapFS(ie.log({...this.getRepo(),depth:i,ref:a}));return Promise.all(s.map(async o=>{let c=o.commit.message.split(` + +`);return{message:c[0],author:{name:o.commit.author.name,email:o.commit.author.email},body:c.slice(1).join(` + +`),date:new Date(o.commit.committer.timestamp).toDateString(),diff:{changed:0,files:(await this.getFileChangesCount(o.commit.parent.first(),o.oid)).map(l=>({path:l.path,status:l.type,vaultPath:this.getRelativeVaultPath(l.path),hash:o.oid}))},hash:o.oid,refs:[]}}))}updateBasePath(r){return this.getRepo().dir=r,Promise.resolve()}async updateUpstreamBranch(r){let[n,i]=Ii(r),a=await this.branchInfo();await this.wrapFS(ie.push({...this.getRepo(),remote:n,remoteRef:i})),await this.setConfig(`branch.${a.current}.merge`,`refs/heads/${i}`)}updateGitPath(r){return Promise.resolve()}async getFileChangesCount(r,n){return this.walkDifference({walkers:[ie.TREE({ref:r}),ie.TREE({ref:n})]})}async walkDifference({walkers:r,dir:n}){return await this.wrapFS(ie.walk({...this.getRepo(),trees:r,map:async function(a,[s,o]){if(!Ug(a,n))return null;if(await(s==null?void 0:s.type())==="tree"||await(o==null?void 0:o.type())==="tree")return;let c=await(s==null?void 0:s.oid()),l=await(o==null?void 0:o.oid()),u="equal";if(c!==l&&(u="M"),c===void 0&&(u="A"),l===void 0&&(u="D"),c===void 0&&l===void 0&&(console.log("Something weird happened:"),console.log(s),console.log(o)),u!=="equal")return{path:a,type:u}}}))}async getStagedFiles(r="."){return(await this.walkDifference({walkers:[ie.TREE({ref:"HEAD"}),ie.STAGE()],dir:r})).map(i=>({vaultPath:this.getRelativeVaultPath(i.path),path:i.path}))}async getUnstagedFiles(r="."){let n,i=window.setTimeout(()=>{n=new _a.Notice("This takes longer: Getting status",this.noticeLength)},2e4);try{let a=this.getRepo(),s=await this.wrapFS(ie.walk({...a,trees:[ie.WORKDIR(),ie.STAGE()],map:async function(o,[c,l]){if(!l&&c&&await ie.isIgnored({...a,filepath:o})||!Ug(o,r))return null;let[u,f]=await Promise.all([c&&c.type(),l&&l.type()]),d=[u,f].includes("blob");if((u==="tree"||u==="special")&&!d)return;if(f==="commit")return null;if((f==="tree"||f==="special")&&!d)return;let h=f==="blob"?await l.oid():void 0,p;return u==="blob"&&f!=="blob"?p="42":u==="blob"&&(p=await c.oid()),p?p!==h?{path:o,deleted:!1}:null:{path:o,deleted:!0}}}));return window.clearTimeout(i),n==null||n.hide(),s}catch(a){throw window.clearTimeout(i),n==null||n.hide(),this.plugin.displayError(a),a}}async getDiffString(r,n=!1,i){let a=this.getRelativeVaultPath(r),s=async(l,[u])=>{if(r==l){let f=await u.oid();return(await ie.readBlob({...this.getRepo(),oid:f})).blob}};if(i){let l=await wl({...this.getRepo(),filepath:r,oid:i}).then(h=>new TextDecoder().decode(h.blob)).catch(h=>{if(!(h instanceof ie.Errors.NotFoundError))throw h}),u=await ie.readCommit({...this.getRepo(),oid:i}),f=await wl({...this.getRepo(),filepath:r,oid:u.commit.parent.first()}).then(h=>new TextDecoder().decode(h.blob)).catch(h=>{if(!(h instanceof ie.Errors.NotFoundError))throw h});return Uf(a,f!=null?f:"",l!=null?l:"")}let o=(await ie.walk({...this.getRepo(),trees:[ie.STAGE()],map:s})).first(),c=new TextDecoder().decode(o);if(n){let l=await this.resolveRef("HEAD").then(f=>wl({...this.getRepo(),filepath:r,oid:f})).then(f=>new TextDecoder().decode(f.blob)).catch(f=>{if(!(f instanceof ie.Errors.NotFoundError))throw f});return Uf(a,l!=null?l:"",c)}else{let l;return await this.app.vault.adapter.exists(a)?l=await this.app.vault.adapter.read(a):l="",Uf(a,c,l)}}async getLastCommitTime(){let r=this.getRepo(),n=await this.resolveRef("HEAD"),a=(await ie.readCommit({...r,oid:n})).commit.committer.timestamp;return new Date(a*1e3)}getFileStatusResult(r){let n=this.status_mapping[`${r[this.HEAD]}${r[this.WORKDIR]}${r[this.STAGE]}`];return{index:n[0]=="?"?"U":n[0],workingDir:n[1]=="?"?"U":n[1],path:r[this.FILE],vaultPath:this.getRelativeVaultPath(r[this.FILE])}}async checkAuthorInfo(){let r=await this.getConfig("user.name"),n=await this.getConfig("user.email");if(!r||!n)throw Error("Git author name and email are not set. Please set both fields in the settings.")}showNotice(r,n=!0){if(!this.plugin.settings.disablePopups)return new _a.Notice(r,n?this.noticeLength:void 0)}};function Xj(e){let t=[e];return{next(){return Promise.resolve({done:t.length===0,value:t.pop()})},return(){return t=[],{}},[Symbol.asyncIterator](){return this}}}function Zj(e){return e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]?e[Symbol.iterator]():e.next?e:Xj(e)}async function Kj(e,t){let r=Zj(e);for(;;){let{value:n,done:i}=await r.next();if(n&&await t(n),i)break}r.return&&r.return()}async function Jj(e){let t=0,r=[];await Kj(e,a=>{r.push(a),t+=a.byteLength});let n=new Uint8Array(t),i=0;for(let a of r)n.set(a,i),i+=a.byteLength;return n}var Qj="https://momentjs.com/docs/#/parsing/string-format/",eB="https://publish.obsidian.md/git-doc/Line+Authoring",zf=class extends V.PluginSettingTab{constructor(r,n){super(r,n);this.plugin=n;this.lineAuthorColorSettings=new Map}get settings(){return this.plugin.settings}display(){let{containerEl:r}=this,n=this.plugin,i;n.settings.differentIntervalCommitAndPush?i="commit":i="commit-and-sync";let a=n.gitReady;r.empty(),a||(r.createEl("p",{text:"Git is not ready. When all settings are correct you can configure commit-sync, etc."}),r.createEl("br"));let s;if(a){new V.Setting(r).setName("Automatic").setHeading(),new V.Setting(r).setName("Split timers for automatic commit and sync").setDesc("Enable to use one interval for commit and another for sync.").addToggle(u=>u.setValue(n.settings.differentIntervalCommitAndPush).onChange(async f=>{n.settings.differentIntervalCommitAndPush=f,await n.saveSettings(),n.automaticsManager.reload("commit","push"),this.display()})),new V.Setting(r).setName(`Auto ${i} interval (minutes)`).setDesc(`${n.settings.differentIntervalCommitAndPush?"Commit":"Commit and sync"} changes every X minutes. Set to 0 (default) to disable. (See below setting for further configuration!)`).addText(u=>{u.inputEl.type="number",u.setValue(String(n.settings.autoSaveInterval)),u.setPlaceholder(String(ar.autoSaveInterval)),u.onChange(async f=>{n.settings.autoSaveInterval=Number(f),await n.saveSettings(),n.automaticsManager.reload("commit")})}),s=new V.Setting(r).setName(`Auto ${i} after stopping file edits`).setDesc(`Requires the ${i} interval not to be 0. + If turned on, do auto ${i} every ${pT(n.settings.autoSaveInterval)} after stopping file edits. + This also prevents auto ${i} while editing a file. If turned off, it's independent from the last file edit.`).addToggle(u=>u.setValue(n.settings.autoBackupAfterFileChange).onChange(async f=>{n.settings.autoBackupAfterFileChange=f,this.display(),await n.saveSettings(),n.automaticsManager.reload("commit")})),this.mayDisableSetting(s,n.settings.setLastSaveToLastCommit),s=new V.Setting(r).setName(`Auto ${i} after latest commit`).setDesc(`If turned on, sets last auto ${i} timestamp to the latest commit timestamp. This reduces the frequency of auto ${i} when doing manual commits.`).addToggle(u=>u.setValue(n.settings.setLastSaveToLastCommit).onChange(async f=>{n.settings.setLastSaveToLastCommit=f,await n.saveSettings(),n.automaticsManager.reload("commit"),this.display()})),this.mayDisableSetting(s,n.settings.autoBackupAfterFileChange),s=new V.Setting(r).setName("Auto push interval (minutes)").setDesc("Push commits every X minutes. Set to 0 (default) to disable.").addText(u=>{u.inputEl.type="number",u.setValue(String(n.settings.autoPushInterval)),u.setPlaceholder(String(ar.autoPushInterval)),u.onChange(async f=>{n.settings.autoPushInterval=Number(f),await n.saveSettings(),n.automaticsManager.reload("push")})}),this.mayDisableSetting(s,!n.settings.differentIntervalCommitAndPush),new V.Setting(r).setName("Auto pull interval (minutes)").setDesc("Pull changes every X minutes. Set to 0 (default) to disable.").addText(u=>{u.inputEl.type="number",u.setValue(String(n.settings.autoPullInterval)),u.setPlaceholder(String(ar.autoPullInterval)),u.onChange(async f=>{n.settings.autoPullInterval=Number(f),await n.saveSettings(),n.automaticsManager.reload("pull")})}),new V.Setting(r).setName(`Specify custom commit message on auto ${i}`).setDesc("You will get a pop up to specify your message.").addToggle(u=>u.setValue(n.settings.customMessageOnAutoBackup).onChange(async f=>{n.settings.customMessageOnAutoBackup=f,await n.saveSettings(),this.display()})),s=new V.Setting(r).setName(`Commit message on auto ${i}`).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(u=>u.setPlaceholder("vault backup: {{date}}").setValue(n.settings.autoCommitMessage).onChange(async f=>{n.settings.autoCommitMessage=f,await n.saveSettings()})),this.mayDisableSetting(s,n.settings.customMessageOnAutoBackup),new V.Setting(r).setName("Commit message").setHeading(),new V.Setting(r).setName("Commit message on manual 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(u=>u.setPlaceholder("vault backup: {{date}}").setValue(n.settings.commitMessage?n.settings.commitMessage:"").onChange(async f=>{n.settings.commitMessage=f,await n.saveSettings()}));let l=new V.Setting(r).setName("{{date}} placeholder format").addMomentFormat(u=>u.setDefaultFormat(n.settings.commitDateFormat).setValue(n.settings.commitDateFormat).onChange(async f=>{n.settings.commitDateFormat=f,await n.saveSettings()}));l.descEl.innerHTML=` + Specify custom date format. E.g. "${_m}. See <a href="https://momentjs.com">Moment.js</a> for more formats.`,new V.Setting(r).setName("{{hostname}} placeholder replacement").setDesc("Specify custom hostname for every device.").addText(u=>{var f;return u.setValue((f=n.localStorage.getHostname())!=null?f:"").onChange(d=>{n.localStorage.setHostname(d)})}),new V.Setting(r).setName("Preview commit message").addButton(u=>u.setButtonText("Preview").onClick(async()=>{let f=await n.gitManager.formatCommitMessage(n.settings.commitMessage);new V.Notice(`${f}`)})),new V.Setting(r).setName("List filenames affected by commit in the commit body").addToggle(u=>u.setValue(n.settings.listChangedFilesInMessageBody).onChange(async f=>{n.settings.listChangedFilesInMessageBody=f,await n.saveSettings()})),new V.Setting(r).setName("Pull").setHeading(),n.gitManager instanceof Te&&new V.Setting(r).setName("Merge strategy").setDesc("Decide how to integrate commits from your remote branch into your local branch.").addDropdown(u=>{let f={merge:"Merge",rebase:"Rebase",reset:"Other sync service (Only updates the HEAD without touching the working directory)"};u.addOptions(f),u.setValue(n.settings.syncMethod),u.onChange(async d=>{n.settings.syncMethod=d,await n.saveSettings()})}),new V.Setting(r).setName("Pull on startup").setDesc("Automatically pull commits when Obsidian starts.").addToggle(u=>u.setValue(n.settings.autoPullOnBoot).onChange(async f=>{n.settings.autoPullOnBoot=f,await n.saveSettings()})),new V.Setting(r).setName("Commit-and-sync").setDesc("Commit-and-sync with default settings means staging everything -> committing -> pulling -> pushing. Ideally this is a single action that you do regularly to keep your local and remote repository in sync.").setHeading(),s=new V.Setting(r).setName("Push on commit-and-sync").setDesc(`Most of the time you want to push after committing. Turning this off turns a commit-and-sync action into commit ${n.settings.pullBeforePush?"and pull ":""}only. It will still be called commit-and-sync.`).addToggle(u=>u.setValue(!n.settings.disablePush).onChange(async f=>{n.settings.disablePush=!f,this.display(),await n.saveSettings()})),new V.Setting(r).setName("Pull on commit-and-sync").setDesc(`On commit-and-sync, pull commits as well. Turning this off turns a commit-and-sync action into commit ${n.settings.disablePush?"":"and push "}only.`).addToggle(u=>u.setValue(n.settings.pullBeforePush).onChange(async f=>{n.settings.pullBeforePush=f,this.display(),await n.saveSettings()})),n.gitManager instanceof Te&&(new V.Setting(r).setName("Line author information").setHeading(),this.addLineAuthorInfoSettings())}new V.Setting(r).setName("History view").setHeading(),new V.Setting(r).setName("Show Author").setDesc("Show the author of the commit in the history view.").addDropdown(l=>{let u={hide:"Hide",full:"Full",initials:"Initials"};l.addOptions(u),l.setValue(n.settings.authorInHistoryView),l.onChange(async f=>{n.settings.authorInHistoryView=f,await n.saveSettings(),await n.refresh()})}),new V.Setting(r).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(l=>l.setValue(n.settings.dateInHistoryView).onChange(async u=>{n.settings.dateInHistoryView=u,await n.saveSettings(),await n.refresh()})),new V.Setting(r).setName("Source control view").setHeading(),new V.Setting(r).setName("Automatically refresh source control view on file changes").setDesc("On slower machines this may cause lags. If so, just disable this option.").addToggle(l=>l.setValue(n.settings.refreshSourceControl).onChange(async u=>{n.settings.refreshSourceControl=u,await n.saveSettings()})),new V.Setting(r).setName("Source control view refresh interval").setDesc("Milliseconds to wait after file change before refreshing the Source Control View.").addText(l=>{l.inputEl.type="number",l.setValue(String(n.settings.refreshSourceControlTimer)),l.setPlaceholder(String(ar.refreshSourceControlTimer)),l.onChange(async u=>{n.settings.refreshSourceControlTimer=Math.max(Number(u),500),await n.saveSettings(),n.setRefreshDebouncer()})}),new V.Setting(r).setName("Miscellaneous").setHeading(),n.gitManager instanceof Te&&new V.Setting(r).setName("Diff view style").setDesc('Set the style for the diff view. Note that the actual diff in "Split" mode is not generated by Git, but the editor itself instead so it may differ from the diff generated by Git. One advantage of this is that you can edit the text in that view.').addDropdown(l=>{let u={split:"Split",git_unified:"Unified"};l.addOptions(u),l.setValue(n.settings.diffStyle),l.onChange(async f=>{n.settings.diffStyle=f,await n.saveSettings()})}),new V.Setting(r).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(l=>l.setValue(n.settings.disablePopups).onChange(async u=>{n.settings.disablePopups=u,this.display(),await n.saveSettings()})),n.settings.disablePopups||new V.Setting(r).setName("Hide notifications for no changes").setDesc("Don't show notifications when there are no changes to commit or push.").addToggle(l=>l.setValue(n.settings.disablePopupsForNoChanges).onChange(async u=>{n.settings.disablePopupsForNoChanges=u,await n.saveSettings()})),new V.Setting(r).setName("Show status bar").setDesc("Obsidian must be restarted for the changes to take affect.").addToggle(l=>l.setValue(n.settings.showStatusBar).onChange(async u=>{n.settings.showStatusBar=u,await n.saveSettings()})),new V.Setting(r).setName("Show stage/unstage button in file menu").addToggle(l=>l.setValue(n.settings.showFileMenu).onChange(async u=>{n.settings.showFileMenu=u,await n.saveSettings()})),new V.Setting(r).setName("Show branch status bar").setDesc("Obsidian must be restarted for the changes to take affect.").addToggle(l=>l.setValue(n.settings.showBranchStatusBar).onChange(async u=>{n.settings.showBranchStatusBar=u,await n.saveSettings()})),new V.Setting(r).setName("Show the count of modified files in the status bar").addToggle(l=>l.setValue(n.settings.changedFilesInStatusBar).onChange(async u=>{n.settings.changedFilesInStatusBar=u,await n.saveSettings()})),n.gitManager instanceof an?new V.Setting(r).setName("Authentication/commit author").setHeading():new V.Setting(r).setName("Commit author").setHeading(),n.gitManager instanceof an&&new V.Setting(r).setName("Username on your git server. E.g. your username on GitHub").addText(l=>{var u;l.setValue((u=n.localStorage.getUsername())!=null?u:""),l.onChange(f=>{n.localStorage.setUsername(f)})}),n.gitManager instanceof an&&new V.Setting(r).setName("Password/Personal access token").setDesc("Type in your password. You won't be able to see it again.").addText(l=>{l.inputEl.autocapitalize="off",l.inputEl.autocomplete="off",l.inputEl.spellcheck=!1,l.onChange(u=>{n.localStorage.setPassword(u)})}),n.gitReady&&new V.Setting(r).setName("Author name for commit").addText(async l=>{var u;l.setValue((u=await n.gitManager.getConfig("user.name"))!=null?u:""),l.onChange(async f=>{await n.gitManager.setConfig("user.name",f==""?void 0:f)})}),n.gitReady&&new V.Setting(r).setName("Author email for commit").addText(async l=>{var u;l.setValue((u=await n.gitManager.getConfig("user.email"))!=null?u:""),l.onChange(async f=>{await n.gitManager.setConfig("user.email",f==""?void 0:f)})}),new V.Setting(r).setName("Advanced").setDesc("These settings usually don't need to be changed, but may be requried for special setups.").setHeading(),n.gitManager instanceof Te&&(new V.Setting(r).setName("Update submodules").setDesc('"Commit-and-sync" 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(l=>l.setValue(n.settings.updateSubmodules).onChange(async u=>{n.settings.updateSubmodules=u,await n.saveSettings()})),n.settings.updateSubmodules&&new V.Setting(r).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(l=>l.setValue(n.settings.submoduleRecurseCheckout).onChange(async u=>{n.settings.submoduleRecurseCheckout=u,await n.saveSettings()}))),n.gitManager instanceof Te&&new V.Setting(r).setName("Custom Git binary path").addText(l=>{var u;l.setValue((u=n.localStorage.getGitPath())!=null?u:""),l.setPlaceholder("git"),l.onChange(f=>{n.localStorage.setGitPath(f),n.gitManager.updateGitPath(f||"git").catch(d=>n.displayError(d))})}),n.gitManager instanceof Te&&new V.Setting(r).setName("Additional environment variables").setDesc("Use each line for a new environment variable in the format KEY=VALUE .").addTextArea(l=>{l.setPlaceholder("GIT_DIR=/path/to/git/dir"),l.setValue(n.localStorage.getEnvVars().join(` +`)),l.onChange(u=>{n.localStorage.setEnvVars(u.split(` +`))})}),n.gitManager instanceof Te&&new V.Setting(r).setName("Additional PATH environment variable paths").setDesc("Use each line for one path").addTextArea(l=>{l.setValue(n.localStorage.getPATHPaths().join(` +`)),l.onChange(u=>{n.localStorage.setPATHPaths(u.split(` +`))})}),n.gitManager instanceof Te&&new V.Setting(r).setName("Reload with new environment variables").setDesc("Removing previously added environment variables will not take effect until Obsidian is restarted.").addButton(l=>{l.setButtonText("Reload"),l.setCta(),l.onClick(async()=>{await n.gitManager.setGitInstance()})}),new V.Setting(r).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(l=>{l.setValue(n.settings.basePath),l.setPlaceholder("directory/directory-with-git-repo"),l.onChange(async u=>{n.settings.basePath=u,await n.saveSettings(),n.gitManager.updateBasePath(u||"").catch(f=>n.displayError(f))})}),new V.Setting(r).setName("Custom Git directory path (Instead of '.git')").setDesc('Requires restart of Obsidian to take effect. Use "\\" instead of "/" on Windows.').addText(l=>{l.setValue(n.settings.gitDir),l.setPlaceholder(".git"),l.onChange(async u=>{n.settings.gitDir=u,await n.saveSettings()})}),new V.Setting(r).setName("Disable on this device").setDesc("Disables the plugin on this device. This setting is not synced.").addToggle(l=>l.setValue(n.localStorage.getPluginDisabled()).onChange(u=>{n.localStorage.setPluginDisabled(u),u?n.unloadPlugin():n.init({fromReload:!0}).catch(f=>n.displayError(f)),new V.Notice("Obsidian must be restarted for the changes to take affect.")})),new V.Setting(r).setName("Support").setHeading(),new V.Setting(r).setName("Donate").setDesc("If you like this Plugin, consider donating to support continued development.").addButton(l=>{l.buttonEl.outerHTML="<a href='https://ko-fi.com/F1F195IQ5' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://cdn.ko-fi.com/cdn/kofi3.png?v=3' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>"});let o=r.createDiv();o.setAttr("align","center"),o.setAttr("style","margin: var(--size-4-2)");let c=o.createEl("button");if(c.setText("Copy Debug Information"),c.onclick=async()=>{await window.navigator.clipboard.writeText(JSON.stringify({settings:this.plugin.settings,pluginVersion:this.plugin.manifest.version},null,4)),new V.Notice("Debug information copied to clipboard. May contain sensitive information!")},V.Platform.isDesktopApp){let l=r.createDiv();l.setAttr("align","center"),l.setText(`Debugging and logging: +You can always see the logs of this and every other plugin by opening the console with`);let u=r.createDiv();u.setAttr("align","center"),u.addClass("obsidian-git-shortcuts"),V.Platform.isMacOS===!0?u.createEl("kbd",{text:"CMD (\u2318) + OPTION (\u2325) + I"}):u.createEl("kbd",{text:"CTRL + SHIFT + I"})}}mayDisableSetting(r,n){n&&(r.setDisabled(n),r.setClass("obsidian-git-disabled"))}configureLineAuthorShowStatus(r){this.settings.lineAuthor.show=r,this.plugin.saveSettings(),r?this.plugin.lineAuthoringFeature.activateFeature():this.plugin.lineAuthoringFeature.deactivateFeature()}async lineAuthorSettingHandler(r,n){this.settings.lineAuthor[r]=n,await this.plugin.saveSettings(),this.plugin.lineAuthoringFeature.refreshLineAuthorViews()}beforeSaveSettings(){let r=this.settings.lineAuthor;r.authorDisplay!=="hide"&&(r.lastShownAuthorDisplay=r.authorDisplay),r.dateTimeFormatOptions!=="hide"&&(r.lastShownDateTimeFormatOptions=r.dateTimeFormatOptions)}addLineAuthorInfoSettings(){let r=new V.Setting(this.containerEl).setName("Show commit authoring information next to each line");if(this.plugin.lineAuthoringFeature.isAvailableOnCurrentPlatform()||r.setDesc("Only available on desktop currently.").setDisabled(!0),r.descEl.innerHTML=` + <a href="${eB}">Feature guide and quick examples</a></br> + The commit hash, author name and authoring date can all be individually toggled.</br>Hide everything, to only show the age-colored sidebar.`,r.addToggle(n=>n.setValue(this.settings.lineAuthor.show).onChange(i=>{this.configureLineAuthorShowStatus(i),this.display()})),this.settings.lineAuthor.show){let n=new V.Setting(this.containerEl).setName("Follow movement and copies across files and commits").setDesc("").addDropdown(a=>{a.addOptions({inactive:"Do not follow (default)","same-commit":"Follow within same commit","all-commits":"Follow within all commits (maybe slow)"}),a.setValue(this.settings.lineAuthor.followMovement),a.onChange(s=>this.lineAuthorSettingHandler("followMovement",s))});if(n.descEl.innerHTML=` + By default (deactivated), each line only shows the newest commit where it was changed. + <br/> + With <i>same commit</i>, cut-copy-paste-ing of text is followed within the same commit and the original commit of authoring will be shown. + <br/> + With <i>all commits</i>, cut-copy-paste-ing text inbetween multiple commits will be detected. + <br/> + It uses <a href="https://git-scm.com/docs/git-blame">git-blame</a> and + for matches (at least ${zu} characters) within the same (or all) commit(s), <em>the originating</em> commit's information is shown.`,new V.Setting(this.containerEl).setName("Show commit hash").addToggle(a=>{a.setValue(this.settings.lineAuthor.showCommitHash),a.onChange(s=>this.lineAuthorSettingHandler("showCommitHash",s))}),new V.Setting(this.containerEl).setName("Author name display").setDesc("If and how the author is displayed").addDropdown(a=>{let s={hide:"Hide",initials:"Initials (default)","first name":"First name","last name":"Last name",full:"Full name"};a.addOptions(s),a.setValue(this.settings.lineAuthor.authorDisplay),a.onChange(async o=>this.lineAuthorSettingHandler("authorDisplay",o))}),new V.Setting(this.containerEl).setName("Authoring date display").setDesc("If and how the date and time of authoring the line is displayed").addDropdown(a=>{let s={hide:"Hide",date:"Date (default)",datetime:"Date and time","natural language":"Natural language",custom:"Custom"};a.addOptions(s),a.setValue(this.settings.lineAuthor.dateTimeFormatOptions),a.onChange(async o=>{await this.lineAuthorSettingHandler("dateTimeFormatOptions",o),this.display()})}),this.settings.lineAuthor.dateTimeFormatOptions==="custom"){let a=new V.Setting(this.containerEl);a.setName("Custom authoring date format").addText(s=>{s.setValue(this.settings.lineAuthor.dateTimeFormatCustomString),s.setPlaceholder("YYYY-MM-DD HH:mm"),s.onChange(async o=>{await this.lineAuthorSettingHandler("dateTimeFormatCustomString",o),a.descEl.innerHTML=this.previewCustomDateTimeDescriptionHtml(o)})}),a.descEl.innerHTML=this.previewCustomDateTimeDescriptionHtml(this.settings.lineAuthor.dateTimeFormatCustomString)}new V.Setting(this.containerEl).setName("Authoring date display timezone").addDropdown(a=>{let s={"viewer-local":"My local (default)","author-local":"Author's local",utc0000:"UTC+0000/Z"};a.addOptions(s),a.setValue(this.settings.lineAuthor.dateTimeTimezone),a.onChange(async o=>this.lineAuthorSettingHandler("dateTimeTimezone",o))}).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 + <a href="https://en.wikipedia.org/wiki/UTC%C2%B100:00">UTC\xB100:00</a>. + `;let i=new V.Setting(this.containerEl).setName("Oldest age in coloring");i.descEl.innerHTML=this.previewOldestAgeDescriptionHtml(this.settings.lineAuthor.coloringMaxAge)[0],i.addText(a=>{a.setPlaceholder("1y"),a.setValue(this.settings.lineAuthor.coloringMaxAge),a.onChange(async s=>{let[o,c]=this.previewOldestAgeDescriptionHtml(s);i.descEl.innerHTML=o,c&&(await this.lineAuthorSettingHandler("coloringMaxAge",s),this.refreshColorSettingsName("oldest"))})}),this.createColorSetting("newest"),this.createColorSetting("oldest"),new V.Setting(this.containerEl).setName("Text color").addText(a=>{a.setValue(this.settings.lineAuthor.textColorCss),a.onChange(async s=>{await this.lineAuthorSettingHandler("textColorCss",s)})}).descEl.innerHTML=` + The CSS color of the gutter text.<br/> + + It is higly recommended to use + <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties"> + CSS variables</a> + defined by themes + (e.g. <pre style="display:inline">var(--text-muted)</pre> or + <pre style="display:inline">var(--text-on-accent)</pre>, + because they automatically adapt to theme changes.<br/> + + See: <a href="https://github.com/obsidian-community/obsidian-theme-template/blob/main/obsidian.css"> + List of available CSS variables in Obsidian + <a/> + `,new V.Setting(this.containerEl).setName("Ignore whitespace and newlines in changes").addToggle(a=>{a.setValue(this.settings.lineAuthor.ignoreWhitespace),a.onChange(s=>this.lineAuthorSettingHandler("ignoreWhitespace",s))}).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. + <br> + 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(r){let n=new V.Setting(this.containerEl).setName("").addText(i=>{let a=i0(r,this.settings.lineAuthor),s=i0(r,ar.lineAuthor);i.setPlaceholder(Gg(s)),i.setValue(Gg(a)),i.onChange(async o=>{let c=lT(o);if(c!==void 0){let l=r==="newest"?"colorNew":"colorOld";await this.lineAuthorSettingHandler(l,c)}this.refreshColorSettingsDesc(r,c)})});this.lineAuthorColorSettings.set(r,n),this.refreshColorSettingsName(r),this.refreshColorSettingsDesc(r,i0(r,this.settings.lineAuthor))}refreshColorSettingsName(r){let n=this.lineAuthorColorSettings.get(r);if(n){let i=r==="oldest"?`oldest (${this.settings.lineAuthor.coloringMaxAge} or older)`:"newest";n.nameEl.innerText=`Color for ${i} commits`}}refreshColorSettingsDesc(r,n){let i=this.lineAuthorColorSettings.get(r);i&&(i.descEl.innerHTML=this.colorSettingPreviewDescHtml(r,this.settings.lineAuthor,n!==void 0))}colorSettingPreviewDescHtml(r,n,i){let a=i?a0(r,n):"rgba(127,127,127,0.3)",s=V.moment.unix(V.moment.now()/1e3).format("YYYY-MM-DD"),o=i?`abcdef Author Name ${s}`:"invalid color";return`Supports 'rgb(r,g,b)', 'hsl(h,s,l)', hex (#) and + named colors (e.g. 'black', 'purple'). Color preview: ${`<div + class="line-author-settings-preview" + style="background-color: ${a}; width: 30ch;" + >${o}</div>`}`}previewCustomDateTimeDescriptionHtml(r){let n=(0,V.moment)().format(r);return`<a href="${Qj}">Format string</a> to display the authoring date.</br>Currently: ${n}`}previewOldestAgeDescriptionHtml(r){let n=Vf(r);return[`The oldest age in the line author coloring. Everything older will have the same color. + </br>Smallest valid age is "1d". Currently: ${n!==void 0?`${n.asDays()} days`:"invalid!"}`,n]}};function i0(e,t){return e==="oldest"?t.colorOld:t.colorNew}function Vf(e){let t=V.moment.duration("P"+e.toUpperCase());return t.isValid()&&t.asDays()&&t.asDays()>=1?t:void 0}function PT(e,t,r){if(!(e===void 0||t===void 0||r===void 0))return`head${e}-obj${t}-path${r}`}var RT=Wf.Annotation.define();function MT(e,t,r){return r.update({annotations:RT.of({key:e,la:t,lineOffsetsFromUnsavedChanges:new Map})})}function tB(e){return e.annotation(RT)}var qs=Wf.StateField.define({create:e=>{},update:(e,t)=>{var r;return(r=tB(t))!=null?r:rB(t,e)},compare:(e,t)=>(e==null?void 0:e.key)===(t==null?void 0:t.key)});function qf(e){var a;let t=CT.sha256.create();if(!e)return t;let{la:r,key:n,lineOffsetsFromUnsavedChanges:i}=e;t.update(r==="untracked"?"t":"f"),t.update(n);for(let[s,o]of(a=i.entries())!=null?a:[])t.update([s,o]);return t}var Dr={get:void 0,save:void 0};function OT(e,t){Dr.get=e,Dr.save=t}function Yf(e){var t,r;return(r=(t=Vf(e.coloringMaxAge))==null?void 0:t.asDays())!=null?r:Vf(ar.lineAuthor.coloringMaxAge).asDays()}function rB(e,t){if(t)return e.changes.empty||e.changes.iterChanges((r,n,i,a)=>{var p;let s=e.startState.doc,{newDoc:o}=e,c=s.lineAt(r).number,l=s.lineAt(n).number,u=o.lineAt(i).number,f=o.lineAt(a).number,d=l-c+1,h=f-u+1;for(let m=u;m<=f;m++){let v=(p=t.lineOffsetsFromUnsavedChanges.get(m))!=null?p:0,y=f===m,b=h-d;y&&(v+=b),t.lineOffsetsFromUnsavedChanges.set(m,v)}}),t}var s0=class{constructor(t){this.state=t;this.subscribeMe()}notifyLineAuthoring(t,r){if(this.view===void 0){console.warn(`Git: View is not defined for editor cache key. Unforeseen situation. id: ${t}`);return}let n=this.view.state,i=MT(t,r,n);this.view.dispatch(i)}updateToNewState(t){let r=this.lastSeenPath&&this.filepath!=this.lastSeenPath;return this.state=t,r&&(this.unsubscribeMe(this.lastSeenPath),this.subscribeMe()),this}removeIfStale(){this.view.destroyed&&this.unsubscribeMe(this.lastSeenPath)}subscribeMe(){this.filepath!==void 0&&(Ws.ifFilepathDefinedTransformSubscribers(this.filepath,t=>t.add(this)),this.lastSeenPath=this.filepath)}unsubscribeMe(t){Ws.ifFilepathDefinedTransformSubscribers(t,r=>r.delete(this))}get filepath(){var t,r;return(r=(t=this.state.field(Xf.editorInfoField))==null?void 0:t.file)==null?void 0:r.path}get view(){return this.state.field(Xf.editorEditorField)}},FT=IT.StateField.define({create:e=>new s0(e),update:(e,t)=>e.updateToNewState(t.state),compare:(e,t)=>e===t});g();function $T(){Ys=void 0,o0=[],Zf=0,Jf.clear(),Qf.clear(),Xs.clear()}var Ys,Kf=()=>Ys;function LT(e,t){var i;let r=t.length;if(r<((i=Ys==null?void 0:Ys.length)!=null?i:0))return;Ys={gutter:e,length:r,text:t};let n=Dr.get();r!==n.gutterSpacingFallbackLength&&(n.gutterSpacingFallbackLength=r,Dr.save(n))}var o0=[],nB=15,Zf=0;function DT(e){o0[Zf]=e,Zf=(Zf+1)%nB}function NT(){return uT(o0)}var Jf=new Map,Qf=new Map,Xs=new Set;g();var KT=require("@codemirror/state"),JT=require("@codemirror/view");g();var f0=require("@codemirror/view"),qT=ze(Xg()),rd=require("obsidian");g();g();var ed={x:-10,y:-10};function jT(){ed.x===-10&&window.addEventListener("mousedown",e=>{ed.x=e.clientX,ed.y=e.clientY})}function BT(){for(let e of Xs)if(iB(e,ed))return e}function iB(e,t){let{x:r,y:n,width:i,height:a}=e.getBoundingClientRect();return r<=t.x&&t.x<=r+i&&n<=t.y&&t.y<=n+a}g();var Yl={};var HT="data-commit";function UT(e,t,r){if(t.hasFocus())return;let n=BT();if(!n)return;let i=sB(n);i&&(!i.isZeroCommit&&!i.isWaitingGutter&&aB(i,e),l0("showCommitHash",e),l0("authorDisplay",e),l0("dateTimeFormatOptions",e))}function aB(e,t){t.addItem(r=>r.setTitle("Copy commit hash").setIcon("copy").setSection("obs-git-line-author-copy").onClick(n=>navigator.clipboard.writeText(e.hash)))}function l0(e,t){var c,l;let r,n,i=Yl.plugin.settings.lineAuthor,a=i[e],s=typeof a=="boolean"?a:a!=="hide",o=ar.lineAuthor[e];if(e==="showCommitHash")r="Show commit hash",n=a;else if(e==="authorDisplay"){let u=(c=i.lastShownAuthorDisplay)!=null?c:o;r="Show author "+(s?a:u),n=s?"hide":u}else if(e==="dateTimeFormatOptions"){let u=(l=i.lastShownDateTimeFormatOptions)!=null?l:o;r="Show "+(s?a:u),r+=r.contains("date")?"":" date",n=s?"hide":u}else Oi(e);t.addItem(u=>u.setTitle(r).setSection("obs-git-line-author-configure").setChecked(s).onClick(f=>{var d,h;return(h=(d=Yl.plugin)==null?void 0:d.settingsTab)==null?void 0:h.lineAuthorSettingHandler(e,n)}))}function GT(e,t,r){r.setAttr(HT,JSON.stringify({hash:e.hash,isZeroCommit:e.isZeroCommit,isWaitingGutter:t}))}function sB(e){let t=e.getAttr(HT);return t?JSON.parse(t):void 0}g();function a0(e,t){return e==="oldest"?td(0,!1,t).color:td(void 0,!0,t).color}function td(e,t,r){let n=Yf(r),i=Date.now()/1e3,a=e!=null?e:0,o=(t?0:i-a)/60/60/24,c=Math.pow(Math.clamp(o/n,0,1),1/2.3),l=oB(),u=r.colorNew,f=r.colorOld,d=l?.4:1,h=c0(u.r,f.r,c)*d,p=c0(u.g,f.g,c)*d,m=c0(u.b,f.b,c)*d;return{color:`rgba(${h},${p},${m},${l?.75:.25})`,daysSinceCommit:o}}function c0(e,t,r){return e+(t-e)*r}function oB(){var e;return((e=window.app)==null?void 0:e.getTheme())==="obsidian"}function zT(e){document.body.style.setProperty("--obs-git-gutter-text",e.textColorCss)}g();function VT(e,t,r){let n;for(let i=t;i<=r;i++){let a=e.hashPerLine[i],s=e.commits.get(a);(!n||s.isZeroCommit||lB(s,n))&&(n=s)}return n}function lB(e,t){var i,a,s,o;let r=(a=(i=e.author)==null?void 0:i.epochSeconds)!=null?a:0,n=(o=(s=t.author)==null?void 0:s.epochSeconds)!=null?o:0;return r>n}var WT="-",cB="+",uB=3,fB="*",dB=/\S/g,hB="%",Zs=class e extends f0.GutterMarker{constructor(r){super();this.text=r}eq(r){return r instanceof e&&this.text===r.text}toDOM(){return document.createTextNode(this.text)}destroy(r){document.body.contains(r)||r.remove()}},u0=class extends f0.GutterMarker{constructor(r,n,i,a,s,o){super();this.lineAuthoring=r;this.startLine=n;this.endLine=i;this.key=a;this.settings=s;this.options=o;this.point=!1;this.elementClass="obs-git-blame-gutter"}eq(r){return this.key===(r==null?void 0:r.key)&&this.startLine===(r==null?void 0:r.startLine)&&this.endLine===(r==null?void 0:r.endLine)&&(this==null?void 0:this.options)===(r==null?void 0:r.options)}toDOM(){var r;return this.precomputedDomProvider=(r=this.precomputedDomProvider)!=null?r:this.computeDom(),this.precomputedDomProvider()}destroy(r){document.body.contains(r)||(r.remove(),Xs.delete(r))}computeDom(){let r=VT(this.lineAuthoring,this.startLine,this.endLine),n=r.isZeroCommit?"":this.renderNonZeroCommit(r);return!r.isZeroCommit&&this.options!=="waiting-for-result"?LT(this,n):n=this.adaptTextForFakeCommit(r,n,this.options),this.createHtmlNode(r,n,this.options==="waiting-for-result")}createHtmlNode(r,n,i){var l;let a=window.createDiv();a.innerText=n;let{color:s,daysSinceCommit:o}=td((l=r==null?void 0:r.author)==null?void 0:l.epochSeconds,r==null?void 0:r.isZeroCommit,this.settings);a.style.backgroundColor=s,GT(r,i,a);function c(){let u=a.cloneNode(!0);return Xs.add(u),i||DT(o),u}return c}renderNonZeroCommit(r){let n=this.settings.showCommitHash?this.renderHash(r):"",i=this.settings.authorDisplay==="hide"?"":`${this.renderAuthorName(r,this.settings.authorDisplay)}`,a=this.settings.dateTimeFormatOptions==="hide"?"":`${this.renderAuthoringDate(r,this.settings.dateTimeFormatOptions,this.settings.dateTimeFormatCustomString,this.settings.dateTimeTimezone)}`;return[n,i,a].filter(o=>o.length>=1).join(" ")}renderHash(r){return r.hash.substring(0,6)}renderAuthorName(r,n){var o,c,l,u;let i=(c=(o=r==null?void 0:r.author)==null?void 0:o.name)!=null?c:"",a=i.split(" ").filter(f=>f.length>=1),s;switch(n){case"initials":s=a.map(f=>f[0].toUpperCase()).join("");break;case"first name":s=(l=a.first())!=null?l:WT;break;case"last name":s=(u=a.last())!=null?u:WT;break;case"full":s=i;break;default:return Oi(n)}return fT(r==null?void 0:r.author,r==null?void 0:r.committer)||(s=s+fB),s}renderAuthoringDate(r,n,i,a){var l;let s="?";if(((l=r==null?void 0:r.author)==null?void 0:l.epochSeconds)===void 0)return s;let o;switch(n){case"date":o=Gu;break;case"datetime":o=bm;break;case"custom":o=i;break;case"natural language":o=u=>{let f=u.diff((0,rd.moment)());return rd.moment.duration(f).humanize(!0)};break;default:return Oi(n)}let c=rd.moment.unix(r.author.epochSeconds);switch(a){case"viewer-local":break;case"author-local":c=c.utcOffset(r.author.tz),typeof o=="string"&&(o+=" Z");break;case"utc0000":c=c.utc(),typeof o=="string"&&(o+="[Z]");break;default:return Oi(a)}return typeof o=="string"?c.format(o):o(c)}adaptTextForFakeCommit(r,n,i){var c,l,u,f;let a=(l=(c=Kf())==null?void 0:c.text)!=null?l:n,s=i!=="waiting-for-result"&&r.isZeroCommit?cB:hB;n=a.replace(dB,s);let o=(f=(u=Dr.get())==null?void 0:u.gutterSpacingFallbackLength)!=null?f:n.length;if(n=dT(n,o,s),i!=="waiting-for-result"&&r.isZeroCommit){let d=Math.min(o,uB);n=hT(n,o-d)}return n}};function xa(e,t,r,n,i,a){let s=qT.sha256.create();s.update(Object.values(i).join(",")),s.update(`s${t}-e${r}-k${n}-o${a}`);let o=s.hex(),c=Jf.get(o);if(c)return c;let l=new u0(e,t,r,n,i,a);return Jf.set(o,l),l}g();var YT=require("obsidian");function d0(){var t,r;let e=(r=(t=Dr.get())==null?void 0:t.gutterSpacingFallbackLength)!=null?r:ar.lineAuthor.gutterSpacingFallbackLength;return new Zs(Array(e).fill("-").join(""))}function h0(e){let{lineAuthoring:t,ageForInitialRender:r}=pB(e);return xa(t,1,1,"initialGutter"+r,e,"waiting-for-result")}function pB(e){var a;let t=(a=NT())!=null?a:Yf(e)*.25,r=(0,YT.moment)().add(-t,"days"),n={name:"",epochSeconds:cT(r),tz:"+0000"},i={hash:"waiting-for-result",author:n,committer:n,isZeroCommit:!1};return{lineAuthoring:{hashPerLine:[void 0,"waiting-for-result"],commits:new Map([["waiting-for-result",i]])},ageForInitialRender:t}}g();function XT(e,t){return xa({hashPerLine:[void 0,"000000"],commits:new Map([["000000",wT]])},1,1,e,t)}var p0=new Zs(""),QT=(0,JT.gutter)({class:"line-author-gutter-container",markers(e){let t=e.state.field(qs,!1);return mB(e,t)},lineMarkerChange(e){let t=qf(e.state.field(qs));return qf(e.startState.field(qs))!==t},renderEmptyElements:!0,initialSpacer:e=>(ZT(e),d0()),updateSpacer:(e,t)=>{var r,n;return ZT(t.view),(n=(r=Kf())==null?void 0:r.gutter)!=null?n:d0()}});function mB(e,t){let r=qf(t),n=e.state.doc,i=new Map;for(let u=1;u<=n.lines;u++){let f=n.line(u).from,d=e.lineBlockAt(f).to;i.set(u,[f,d]),r.update([f,d,0])}let a=Dr.get();r.update("s"+Object.values(Dr).join(","));let s=r.hex(),o=Qf.get(s);if(o)return o;let{result:c,allowCache:l}=gB(n,i,a,t);return l&&Qf.set(s,c),c}function gB(e,t,r,n){let i=!0,a=e.lines,s=[];function o(f,d,h){return s.push(h.range(f,d))}let c=vB(a,n),l=e.length===0,u=e.iterLines(a,a+1).next().value==="";for(let f=1;f<=a;f++){let[d,h]=t.get(f),p=e.lineAt(h).number;if(l){o(d,h,p0);continue}if(f===a&&u){o(d,h,p0);continue}if(n===void 0){o(d,h,h0(r)),i=!1;continue}let{key:m,la:v}=n;if(v==="untracked"){o(d,h,XT(v,r));continue}let y=v.hashPerLine.length-1,b=c[f],x=c[p];if(x&&x>y&&o(d,h,p0),b!==void 0&&zg(1,b,y)&&x!==void 0&&zg(1,x,y)){o(d,h,xa(v,b,x,m,r));continue}if(y<1){o(d,h,h0(r)),i=!1;continue}let E=Math.clamp(b!=null?b:f,1,y),_=Math.clamp(x!=null?x:p,1,y);o(d,h,xa(v,E,_,m+"computing",r,"waiting-for-result"))}return{result:KT.RangeSet.of(s,!0),allowCache:i}}function vB(e,t){if(!(t!=null&&t.lineOffsetsFromUnsavedChanges))return Array.from(new Array(e+1),i=>i);let r=[void 0],n=0;for(let i=1;i<=e;i++){let a=t.lineOffsetsFromUnsavedChanges.get(i);n+=a!=null?a:0,r[i]=a===void 0?i-n:void 0}return r}function ZT(e){e.dom.querySelectorAll(".cm-gutters").forEach(r=>{r!=null&&r.style&&(r.style.marginLeft||(r.style.marginLeft="unset"))})}var nd=class{constructor(t){this.plugin=t;this.lineAuthorings=new Map}async trackChanged(t){return this.trackChangedHelper(t).catch(r=>(console.warn("Git: Error in trackChanged."+r),Promise.reject(r)))}async trackChangedHelper(t){if(t){if(t.path===void 0){console.warn("Git: Attempted to track change of undefined filepath. Unforeseen situation.");return}return this.computeLineAuthorInfo(t.path)}}destroy(){this.lineAuthorings.clear(),Ws.clear(),$T()}async computeLineAuthorInfo(t){let r=this.plugin.lineAuthoringFeature.isAvailableOnCurrentPlatform().gitManager,n=await r.submoduleAwareHeadRevisonInContainingDirectory(t),i=await r.hashObject(t),a=PT(n,i,t);if(a!==void 0){if(!this.lineAuthorings.has(a)){let s=await r.blame(t,this.plugin.settings.lineAuthor.followMovement,this.plugin.settings.lineAuthor.ignoreWhitespace);this.lineAuthorings.set(a,s)}this.notifyComputationResultToSubscribers(t,a)}}notifyComputationResultToSubscribers(t,r){Ws.ifFilepathDefinedTransformSubscribers(t,n=>n.forEach(i=>i.notifyLineAuthoring(r,this.lineAuthorings.get(r))))}},tC=eC.Prec.high([FT,qs,QT]);var id=class{constructor(t){this.plg=t;this.codeMirrorExtensions=[];this.handleWorkspaceLeaf=t=>{if(!this.lineAuthorInfoProvider){console.warn("Git: undefined lineAuthorInfoProvider. Unexpected situation.");return}let r=t==null?void 0:t.view;!(r instanceof Sa.MarkdownView)||r.file==null||(r==null?void 0:r.allowNoFile)===!0||this.lineAuthorInfoProvider.trackChanged(r.file).catch(console.error)}}onLoadPlugin(){this.plg.registerEditorExtension(this.codeMirrorExtensions),OT(()=>this.plg.settings.lineAuthor,t=>{this.plg.settings.lineAuthor=t,this.plg.saveSettings()})}conditionallyActivateBySettings(){this.plg.settings.lineAuthor.show&&this.activateFeature()}activateFeature(){try{if(!this.isAvailableOnCurrentPlatform().available)return;zT(this.plg.settings.lineAuthor),this.lineAuthorInfoProvider=new nd(this.plg),this.createEventHandlers(),this.activateCodeMirrorExtensions(),console.log(this.plg.manifest.name+": Enabled line authoring.")}catch(t){console.warn("Git: Error while loading line authoring feature.",t),this.deactivateFeature()}}deactivateFeature(){var t;this.destroyEventHandlers(),this.deactivateCodeMirrorExtensions(),(t=this.lineAuthorInfoProvider)==null||t.destroy(),this.lineAuthorInfoProvider=void 0,console.log(this.plg.manifest.name+": Disabled line authoring.")}isAvailableOnCurrentPlatform(){return{available:this.plg.useSimpleGit&&Sa.Platform.isDesktopApp,gitManager:this.plg.gitManager instanceof Te?this.plg.gitManager:void 0}}refreshLineAuthorViews(){this.plg.settings.lineAuthor.show&&(this.deactivateFeature(),this.activateFeature())}activateCodeMirrorExtensions(){this.codeMirrorExtensions.push(tC),this.plg.app.workspace.updateOptions(),this.plg.app.workspace.iterateAllLeaves(this.handleWorkspaceLeaf)}deactivateCodeMirrorExtensions(){for(let t of this.codeMirrorExtensions)this.codeMirrorExtensions.remove(t);this.plg.app.workspace.updateOptions()}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(),jT(),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",t=>{var r;return void((r=this.lineAuthorInfoProvider)==null?void 0:r.trackChanged(t).catch(console.error))})}createWorkspaceLeafChangeEvent(){return this.plg.app.workspace.on("active-leaf-change",this.handleWorkspaceLeaf)}createFileRenameEvent(){return this.plg.app.vault.on("rename",(t,r)=>{var n;return t instanceof Sa.TFile&&((n=this.lineAuthorInfoProvider)==null?void 0:n.trackChanged(t))})}createVaultFileModificationHandler(){return this.plg.app.vault.on("modify",t=>{var r;return t instanceof Sa.TFile&&((r=this.lineAuthorInfoProvider)==null?void 0:r.trackChanged(t))})}createCssRefreshHandler(){return this.plg.app.workspace.on("css-change",()=>this.refreshLineAuthorViews())}createGutterContextMenuHandler(){return this.plg.app.workspace.on("editor-menu",UT)}};g();var ad=class{constructor(t){this.plugin=t;this.tasks=[]}addTask(t,r){this.tasks.push({task:t,onFinished:r!=null?r:()=>{}}),this.tasks.length===1&&this.handleTask()}handleTask(){if(this.tasks.length>0){let t=this.tasks[0];t.task().then(r=>{t.onFinished(r),this.tasks.shift(),this.handleTask()},r=>{this.plugin.displayError(r),t.onFinished(void 0),this.tasks.shift(),this.handleTask()})}}clear(){this.tasks=[]}};g();var Nr=require("obsidian");var sd=class{constructor(t,r){this.statusBarEl=t;this.plugin=r;this.messages=[];this.base="obsidian-git-statusbar-";this.statusBarEl.setAttribute("data-tooltip-position","top"),r.registerEvent(r.app.workspace.on("obsidian-git:refreshed",()=>{this.refreshCommitTimestamp().catch(console.error)}))}displayMessage(t,r){this.messages.push({message:`Git: ${t.slice(0,100)}`,timeout:r}),this.display()}display(){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()):this.currentMessage?Date.now()-this.lastMessageTimestamp>=this.currentMessage.timeout&&(this.currentMessage=null,this.lastMessageTimestamp=null):this.displayState()}displayState(){switch((this.statusBarEl.getText().length>3||!this.statusBarEl.hasChildNodes())&&(this.statusBarEl.empty(),this.conflictEl=this.statusBarEl.createDiv(),this.conflictEl.setAttribute("data-tooltip-position","top"),this.conflictEl.style.float="left",this.iconEl=this.statusBarEl.createDiv(),this.iconEl.style.float="left",this.textEl=this.statusBarEl.createDiv(),this.textEl.style.float="right",this.textEl.style.marginLeft="5px"),this.plugin.localStorage.getConflict()?((0,Nr.setIcon)(this.conflictEl,"alert-circle"),this.conflictEl.ariaLabel="You have merge conflicts. Resolve them and commit afterwards.",this.conflictEl.style.marginRight="5px",this.conflictEl.addClass(this.base+"conflict")):(this.conflictEl.empty(),this.conflictEl.style.marginRight=""),this.plugin.state.gitAction){case 0:this.displayFromNow();break;case 1:this.statusBarEl.ariaLabel="Checking repository status...",(0,Nr.setIcon)(this.iconEl,"refresh-cw"),this.statusBarEl.addClass(this.base+"status");break;case 3:this.statusBarEl.ariaLabel="Adding files...",(0,Nr.setIcon)(this.iconEl,"archive"),this.statusBarEl.addClass(this.base+"add");break;case 4:this.statusBarEl.ariaLabel="Committing changes...",(0,Nr.setIcon)(this.iconEl,"git-commit"),this.statusBarEl.addClass(this.base+"commit");break;case 5:this.statusBarEl.ariaLabel="Pushing changes...",(0,Nr.setIcon)(this.iconEl,"upload"),this.statusBarEl.addClass(this.base+"push");break;case 2:this.statusBarEl.ariaLabel="Pulling changes...",(0,Nr.setIcon)(this.iconEl,"download"),this.statusBarEl.addClass(this.base+"pull");break;default:this.statusBarEl.ariaLabel="Failed on initialization!",(0,Nr.setIcon)(this.iconEl,"alert-triangle"),this.statusBarEl.addClass(this.base+"failed-init");break}}displayFromNow(){var n;let t=this.lastCommitTimestamp,r=this.plugin.state.offlineMode;if(t){let i=(0,Nr.moment)(t).fromNow();this.statusBarEl.ariaLabel=`${r?"Offline: ":""}Last Commit: ${i}`,(n=this.unPushedCommits)!=null&&n&&(this.statusBarEl.ariaLabel+=` +(${this.unPushedCommits} unpushed commits)`)}else this.statusBarEl.ariaLabel=r?"Git is offline":"Git is ready";r?(0,Nr.setIcon)(this.iconEl,"globe"):(0,Nr.setIcon)(this.iconEl,"check"),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()}remove(){this.statusBarEl.remove()}};g();var ld=require("obsidian"),od=class extends ld.SuggestModal{constructor(r){super(r.app);this.plugin=r;this.resolve=null;this.setPlaceholder("Type your message and select optional the version with the added date.")}openAndGetResult(){return new Promise(r=>{this.resolve=r,this.open()})}onClose(){new Promise(r=>setTimeout(r,10)).then(()=>{this.resolve&&this.resolve(void 0)})}getSuggestions(r){let n=(0,ld.moment)().format(this.plugin.settings.commitDateFormat);return r==""&&(r="..."),[r,`${n}: ${r}`,`${r}: ${n}`]}renderSuggestion(r,n){n.innerText=r}onChooseSuggestion(r,n){this.resolve&&this.resolve(r)}};g();var rC=require("obsidian"),Xl=class{constructor(t){this.plugin=t}saveLastAuto(t,r){r==="backup"?this.plugin.localStorage.setLastAutoBackup(t.toString()):r==="pull"?this.plugin.localStorage.setLastAutoPull(t.toString()):r==="push"&&this.plugin.localStorage.setLastAutoPush(t.toString())}loadLastAuto(){var t,r,n;return{backup:new Date((t=this.plugin.localStorage.getLastAutoBackup())!=null?t:""),pull:new Date((r=this.plugin.localStorage.getLastAutoPull())!=null?r:""),push:new Date((n=this.plugin.localStorage.getLastAutoPush())!=null?n:"")}}async init(){await this.setUpAutoCommitAndSync();let t=this.loadLastAuto();if(this.plugin.settings.differentIntervalCommitAndPush&&this.plugin.settings.autoPushInterval>0){let r=this.diff(this.plugin.settings.autoPushInterval,t.push);this.startAutoPush(r)}if(this.plugin.settings.autoPullInterval>0){let r=this.diff(this.plugin.settings.autoPullInterval,t.pull);this.startAutoPull(r)}}unload(){this.clearAutoPull(),this.clearAutoPush(),this.clearAutoCommitAndSync()}reload(...t){t.contains("commit")&&(this.clearAutoCommitAndSync(),this.plugin.settings.autoSaveInterval>0&&this.startAutoCommitAndSync(this.plugin.settings.autoSaveInterval)),t.contains("push")&&(this.clearAutoPush(),this.plugin.settings.differentIntervalCommitAndPush&&this.plugin.settings.autoPushInterval>0&&this.startAutoPush(this.plugin.settings.autoPushInterval)),t.contains("pull")&&(this.clearAutoPull(),this.plugin.settings.autoPullInterval>0&&this.startAutoPull(this.plugin.settings.autoPullInterval))}async setUpAutoCommitAndSync(){if(this.plugin.settings.setLastSaveToLastCommit){this.clearAutoCommitAndSync();let t=await this.plugin.gitManager.getLastCommitTime();t&&this.saveLastAuto(t,"backup")}if(!this.timeoutIDCommitAndSync&&!this.plugin.autoCommitDebouncer){let t=this.loadLastAuto();if(this.plugin.settings.autoSaveInterval>0){let r=this.diff(this.plugin.settings.autoSaveInterval,t.backup);this.startAutoCommitAndSync(r)}}}startAutoCommitAndSync(t){let r=(t!=null?t:this.plugin.settings.autoSaveInterval)*6e4;this.plugin.settings.autoBackupAfterFileChange?t===0?this.doAutoCommitAndSync():this.plugin.autoCommitDebouncer=(0,rC.debounce)(()=>this.doAutoCommitAndSync(),r,!0):(r>2147483647&&(r=2147483647),this.timeoutIDCommitAndSync=window.setTimeout(()=>this.doAutoCommitAndSync(),r))}doAutoCommitAndSync(){this.plugin.promiseQueue.addTask(async()=>{if(this.plugin.settings.setLastSaveToLastCommit){let t=await this.plugin.gitManager.getLastCommitTime();if(t){this.saveLastAuto(t,"backup");let r=this.diff(this.plugin.settings.autoSaveInterval,t);if(r>0)return this.startAutoCommitAndSync(r),!1}}return this.plugin.settings.differentIntervalCommitAndPush?await this.plugin.commit({fromAuto:!0}):await this.plugin.commitAndSync(!0),!0},t=>{t!==!1&&(this.saveLastAuto(new Date,"backup"),this.startAutoCommitAndSync())})}startAutoPull(t){let r=(t!=null?t:this.plugin.settings.autoPullInterval)*6e4;r>2147483647&&(r=2147483647),this.timeoutIDPull=window.setTimeout(()=>this.doAutoPull(),r)}doAutoPull(){this.plugin.promiseQueue.addTask(()=>this.plugin.pullChangesFromRemote(),()=>{this.saveLastAuto(new Date,"pull"),this.startAutoPull()})}startAutoPush(t){let r=(t!=null?t:this.plugin.settings.autoPushInterval)*6e4;r>2147483647&&(r=2147483647),this.timeoutIDPush=window.setTimeout(()=>this.doAutoPush(),r)}doAutoPush(){this.plugin.promiseQueue.addTask(()=>this.plugin.push(),()=>{this.saveLastAuto(new Date,"push"),this.startAutoPush()})}clearAutoCommitAndSync(){var r;let t=!1;return this.timeoutIDCommitAndSync&&(window.clearTimeout(this.timeoutIDCommitAndSync),this.timeoutIDCommitAndSync=void 0,t=!0),this.plugin.autoCommitDebouncer&&((r=this.plugin.autoCommitDebouncer)==null||r.cancel(),this.plugin.autoCommitDebouncer=void 0,t=!0),t}clearAutoPull(){return this.timeoutIDPull?(window.clearTimeout(this.timeoutIDPull),this.timeoutIDPull=void 0,!0):!1}clearAutoPush(){return this.timeoutIDPush?(window.clearTimeout(this.timeoutIDPush),this.timeoutIDPush=void 0,!0):!1}diff(t,r){let i=t-Math.round((new Date().getTime()-r.getTime())/1e3/60);return Math.max(0,i)}};g();var Kl=require("obsidian");g();var Zl=require("obsidian");async function nC(e,t,r){let n=await aC(t,r);if(n.result==="failure"){new Zl.Notice(n.reason);return}let{isGitHub:i,branch:a,repo:s,user:o,filePath:c}=n;if(i){let l=e.getCursor("from").line+1,u=e.getCursor("to").line+1;l===u?window.open(`https://github.com/${o}/${s}/blob/${a}/${c}?plain=1#L${l}`):window.open(`https://github.com/${o}/${s}/blob/${a}/${c}?plain=1#L${l}-L${u}`)}else new Zl.Notice("It seems like you are not using GitHub")}async function iC(e,t){let r=await aC(e,t);if(r.result==="failure"){new Zl.Notice(r.reason);return}let{isGitHub:n,branch:i,repo:a,user:s,filePath:o}=r;n?window.open(`https://github.com/${s}/${a}/commits/${i}/${o}`):new Zl.Notice("It seems like you are not using GitHub")}async function aC(e,t){let r=await t.branchInfo(),n=r.tracking,i=r.current,a,s=t.getRelativeRepoPath(e.path);if(t instanceof Te){let c=await t.getSubmoduleOfFile(t.getRelativeRepoPath(e.path));if(c){s=c.relativeFilepath;let l=await t.git.cwd({path:c.submodule,root:!1}).status();if(n=l.tracking||void 0,i=l.current||void 0,n){let u=n.substring(0,n.indexOf("/")),f=await t.git.cwd({path:c.submodule,root:!1}).getConfig(`remote.${u}.url`,"local");if(f.value!=null)a=f.value;else return{result:"failure",reason:"Failed to get remote url of submodule"}}}}if(n==null)return{result:"failure",reason:"Remote branch is not configured"};if(i==null)return{result:"failure",reason:"Failed to get current branch name"};if(a==null){let c=n.substring(0,n.indexOf("/"));if(a=await t.getConfig(`remote.${c}.url`),a==null)return{result:"failure",reason:"Failed to get remote url"}}let o=a.match(/(?:^https:\/\/github\.com\/(.+)\/(.+?)(?:\.git)?$)|(?:^[a-zA-Z]+@github\.com:(.+)\/(.+?)(?:\.git)?$)/);if(o==null)return{result:"failure",reason:"Could not parse remote url"};{let[c,l,u,f,d]=o;return{result:"success",isGitHub:!!c,repo:u||d,user:l||f,branch:i,filePath:s}}}g();var sC=require("obsidian"),cd=class extends sC.FuzzySuggestModal{constructor(t,r){super(t.app),this.plugin=t,this.changedFiles=r,this.setPlaceholder("Not supported files will be opened by default app!")}getItems(){return this.changedFiles}getItemText(t){if(t.index=="U"&&t.workingDir=="U")return`Untracked | ${t.vaultPath}`;let r="",n="";return t.workingDir!=" "&&(r=`Working Dir: ${t.workingDir} `),t.index!=" "&&(n=`Index: ${t.index}`),`${r}${n} | ${t.vaultPath}`}onChooseItem(t,r){this.plugin.app.metadataCache.getFirstLinkpathDest(t.vaultPath,"")==null?this.app.openWithDefaultApp(t.vaultPath):this.plugin.app.workspace.openLinkText(t.vaultPath,"/")}};g();var oC=require("obsidian"),ud=class extends oC.Modal{constructor(r,n){super(r);this.content=n;this.resolve=null}openAndGetReslt(){return new Promise(r=>{this.resolve=r,this.open()})}onOpen(){let{contentEl:r,titleEl:n}=this;n.setText("Edit .gitignore");let i=r.createDiv(),a=i.createEl("textarea",{text:this.content,cls:["obsidian-git-textarea"],attr:{rows:10,cols:30,wrap:"off"}});i.createEl("button",{cls:["mod-cta","obsidian-git-center-button"],text:"Save"}).addEventListener("click",()=>{this.resolve(a.value),this.close()})}onClose(){let{contentEl:r}=this;r.empty(),this.resolve&&this.resolve(void 0)}};function lC(e){let t=e.app;e.addCommand({id:"edit-gitignore",name:"Edit .gitignore",callback:async()=>{let r=e.gitManager.getRelativeVaultPath(".gitignore");await t.vault.adapter.exists(r)||await t.vault.adapter.write(r,"");let n=await t.vault.adapter.read(r),a=await new ud(t,n).openAndGetReslt();a!==void 0&&(await t.vault.adapter.write(r,a),await e.refresh())}}),e.addCommand({id:"open-git-view",name:"Open source control view",callback:async()=>{var i;let r=t.workspace.getLeavesOfType(St.type),n;r.length===0?(n=(i=t.workspace.getRightLeaf(!1))!=null?i:t.workspace.getLeaf(),await n.setViewState({type:St.type})):n=r.first(),await t.workspace.revealLeaf(n),t.workspace.trigger("obsidian-git:refresh")}}),e.addCommand({id:"open-history-view",name:"Open history view",callback:async()=>{var i;let r=t.workspace.getLeavesOfType($r.type),n;r.length===0?(n=(i=t.workspace.getRightLeaf(!1))!=null?i:t.workspace.getLeaf(),await n.setViewState({type:$r.type})):n=r.first(),await t.workspace.revealLeaf(n),t.workspace.trigger("obsidian-git:refresh")}}),e.addCommand({id:"open-diff-view",name:"Open diff view",checkCallback:r=>{let n=t.workspace.getActiveFile();if(r)return n!==null;{let i=e.gitManager.getRelativeRepoPath(n.path,!0);e.tools.openDiff({aFile:i,aRef:""})}}}),e.addCommand({id:"view-file-on-github",name:"Open file on GitHub",editorCallback:(r,{file:n})=>{if(n)return nC(r,n,e.gitManager)}}),e.addCommand({id:"view-history-on-github",name:"Open file history on GitHub",editorCallback:(r,{file:n})=>{if(n)return iC(n,e.gitManager)}}),e.addCommand({id:"pull",name:"Pull",callback:()=>e.promiseQueue.addTask(()=>e.pullChangesFromRemote())}),e.addCommand({id:"fetch",name:"Fetch",callback:()=>e.promiseQueue.addTask(()=>e.fetch())}),e.addCommand({id:"switch-to-remote-branch",name:"Switch to remote branch",callback:()=>e.promiseQueue.addTask(()=>e.switchRemoteBranch())}),e.addCommand({id:"add-to-gitignore",name:"Add file to .gitignore",checkCallback:r=>{let n=t.workspace.getActiveFile();if(r)return n!==null;e.addFileToGitignore(n.path).catch(i=>e.displayError(i))}}),e.addCommand({id:"push",name:"Commit-and-sync",callback:()=>e.promiseQueue.addTask(()=>e.commitAndSync(!1))}),e.addCommand({id:"backup-and-close",name:"Commit-and-sync and then close Obsidian",callback:()=>e.promiseQueue.addTask(async()=>{await e.commitAndSync(!1),window.close()})}),e.addCommand({id:"commit-push-specified-message",name:"Commit-and-sync with specific message",callback:()=>e.promiseQueue.addTask(()=>e.commitAndSync(!1,!0))}),e.addCommand({id:"commit",name:"Commit all changes",callback:()=>e.promiseQueue.addTask(()=>e.commit({fromAuto:!1}))}),e.addCommand({id:"commit-specified-message",name:"Commit all changes with specific message",callback:()=>e.promiseQueue.addTask(()=>e.commit({fromAuto:!1,requestCustomMessage:!0}))}),e.addCommand({id:"commit-staged",name:"Commit staged",callback:()=>e.promiseQueue.addTask(()=>e.commit({fromAuto:!1,requestCustomMessage:!1,onlyStaged:!0}))}),Kl.Platform.isDesktopApp&&e.addCommand({id:"commit-amend-staged-specified-message",name:"Amend staged",callback:()=>e.promiseQueue.addTask(()=>e.commit({fromAuto:!1,requestCustomMessage:!0,onlyStaged:!0,amend:!0}))}),e.addCommand({id:"commit-staged-specified-message",name:"Commit staged with specific message",callback:()=>e.promiseQueue.addTask(()=>e.commit({fromAuto:!1,requestCustomMessage:!0,onlyStaged:!0}))}),e.addCommand({id:"push2",name:"Push",callback:()=>e.promiseQueue.addTask(()=>e.push())}),e.addCommand({id:"stage-current-file",name:"Stage current file",checkCallback:r=>{let n=t.workspace.getActiveFile();if(r)return n!==null;e.promiseQueue.addTask(()=>e.stageFile(n))}}),e.addCommand({id:"unstage-current-file",name:"Unstage current file",checkCallback:r=>{let n=t.workspace.getActiveFile();if(r)return n!==null;e.promiseQueue.addTask(()=>e.unstageFile(n))}}),e.addCommand({id:"edit-remotes",name:"Edit remotes",callback:()=>e.editRemotes().catch(r=>e.displayError(r))}),e.addCommand({id:"remove-remote",name:"Remove remote",callback:()=>e.removeRemote().catch(r=>e.displayError(r))}),e.addCommand({id:"set-upstream-branch",name:"Set upstream branch",callback:()=>e.setUpstreamBranch().catch(r=>e.displayError(r))}),e.addCommand({id:"delete-repo",name:"CAUTION: Delete repository",callback:async()=>{await t.vault.adapter.exists(`${e.settings.basePath}/.git`)?await new Fe(e,{options:["NO","YES"],placeholder:"Do you really want to delete the repository (.git directory)? plugin action cannot be undone.",onlySelection:!0}).openAndGetResult()==="YES"&&(await t.vault.adapter.rmdir(`${e.settings.basePath}/.git`,!0),new Kl.Notice("Successfully deleted repository. Reloading plugin..."),e.unloadPlugin(),await e.init({fromReload:!0})):new Kl.Notice("No repository found")}}),e.addCommand({id:"init-repo",name:"Initialize a new repo",callback:()=>e.createNewRepo().catch(r=>e.displayError(r))}),e.addCommand({id:"clone-repo",name:"Clone an existing remote repo",callback:()=>e.cloneNewRepo().catch(r=>e.displayError(r))}),e.addCommand({id:"list-changed-files",name:"List changed files",callback:async()=>{if(await e.isAllInitialized())try{let r=await e.updateCachedStatus();if(r.changed.length+r.staged.length>500){e.displayError("Too many changes to display");return}new cd(e,r.all).open()}catch(r){e.displayError(r)}}}),e.addCommand({id:"switch-branch",name:"Switch branch",callback:()=>{e.switchBranch().catch(r=>e.displayError(r))}}),e.addCommand({id:"create-branch",name:"Create new branch",callback:()=>{e.createBranch().catch(r=>e.displayError(r))}}),e.addCommand({id:"delete-branch",name:"Delete branch",callback:()=>{e.deleteBranch().catch(r=>e.displayError(r))}}),e.addCommand({id:"discard-all",name:"CAUTION: Discard all changes",callback:async()=>{if(!await e.isAllInitialized())return!1;await new Fe(e,{options:["NO","YES"],placeholder:"Do you want to discard all changes to tracked files? plugin action cannot be undone.",onlySelection:!0}).openAndGetResult()==="YES"&&e.promiseQueue.addTask(()=>e.discardAll())}}),e.addCommand({id:"raw-command",name:"Raw command",checkCallback:r=>{let n=e.gitManager;if(r)return n instanceof Te;e.tools.runRawCommand().catch(i=>e.displayError(i))}}),e.addCommand({id:"toggle-line-author-info",name:"Toggle line author information",callback:()=>{var r;return(r=e.settingsTab)==null?void 0:r.configureLineAuthorShowStatus(!e.settings.lineAuthor.show)}})}g();var fd=class{constructor(t){this.plugin=t;this.prefix=this.plugin.manifest.id+":",this.app=t.app}migrate(){let t=["password","hostname","conflict","lastAutoPull","lastAutoBackup","lastAutoPush","gitPath","pluginDisabled"];for(let r of t){let n=localStorage.getItem(this.prefix+r);this.app.loadLocalStorage(this.prefix+r)==null&&n!=null&&n!=null&&(this.app.saveLocalStorage(this.prefix+r,n),localStorage.removeItem(this.prefix+r))}}getPassword(){return this.app.loadLocalStorage(this.prefix+"password")}setPassword(t){return this.app.saveLocalStorage(this.prefix+"password",t)}getUsername(){return this.app.loadLocalStorage(this.prefix+"username")}setUsername(t){return this.app.saveLocalStorage(this.prefix+"username",t)}getHostname(){return this.app.loadLocalStorage(this.prefix+"hostname")}setHostname(t){return this.app.saveLocalStorage(this.prefix+"hostname",t)}getConflict(){return this.app.loadLocalStorage(this.prefix+"conflict")=="true"}setConflict(t){return this.app.saveLocalStorage(this.prefix+"conflict",`${t}`)}getLastAutoPull(){return this.app.loadLocalStorage(this.prefix+"lastAutoPull")}setLastAutoPull(t){return this.app.saveLocalStorage(this.prefix+"lastAutoPull",t)}getLastAutoBackup(){return this.app.loadLocalStorage(this.prefix+"lastAutoBackup")}setLastAutoBackup(t){return this.app.saveLocalStorage(this.prefix+"lastAutoBackup",t)}getLastAutoPush(){return this.app.loadLocalStorage(this.prefix+"lastAutoPush")}setLastAutoPush(t){return this.app.saveLocalStorage(this.prefix+"lastAutoPush",t)}getGitPath(){return this.app.loadLocalStorage(this.prefix+"gitPath")}setGitPath(t){return this.app.saveLocalStorage(this.prefix+"gitPath",t)}getPATHPaths(){var t,r;return(r=(t=this.app.loadLocalStorage(this.prefix+"PATHPaths"))==null?void 0:t.split(":"))!=null?r:[]}setPATHPaths(t){return this.app.saveLocalStorage(this.prefix+"PATHPaths",t.join(":"))}getEnvVars(){var t;return JSON.parse((t=this.app.loadLocalStorage(this.prefix+"envVars"))!=null?t:"[]")}setEnvVars(t){return this.app.saveLocalStorage(this.prefix+"envVars",JSON.stringify(t))}getPluginDisabled(){return this.app.loadLocalStorage(this.prefix+"pluginDisabled")=="true"}setPluginDisabled(t){return this.app.saveLocalStorage(this.prefix+"pluginDisabled",`${t}`)}};g();g();g();g();var He;(function(e){e.INSERT="insert",e.DELETE="delete",e.CONTEXT="context"})(He||(He={}));var cC={LINE_BY_LINE:"line-by-line",SIDE_BY_SIDE:"side-by-side"},uC={LINES:"lines",WORDS:"words",NONE:"none"},fC={WORD:"word",CHAR:"char"},Ea;(function(e){e.AUTO="auto",e.DARK="dark",e.LIGHT="light"})(Ea||(Ea={}));g();var yB=["-","[","]","/","{","}","(",")","*","+","?",".","\\","^","$","|"],wB=RegExp("["+yB.join("\\")+"]","g");function dC(e){return e.replace(wB,"\\$&")}function m0(e){return e&&e.replace(/\\/g,"/")}function hC(e){let t,r,n,i=0;for(t=0,n=e.length;t<n;t++)r=e.charCodeAt(t),i=(i<<5)-i+r,i|=0;return i}function pC(e,t){let r=e.split(".");return r.length>1?r[r.length-1]:t}function mC(e,t){return t.reduce((r,n)=>r||e.startsWith(n),!1)}var gC=["a/","b/","i/","w/","c/","o/"];function $i(e,t,r){let n=r!==void 0?[...gC,r]:gC,i=t?new RegExp(`^${dC(t)} "?(.+?)"?$`):new RegExp('^"?(.+?)"?$'),[,a=""]=i.exec(e)||[],s=n.find(c=>a.indexOf(c)===0);return(s?a.slice(s.length):a).replace(/\s+\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(?:\.\d+)? [+-]\d{4}.*$/,"")}function bB(e,t){return $i(e,"---",t)}function _B(e,t){return $i(e,"+++",t)}function vC(e,t={}){let r=[],n=null,i=null,a=null,s=null,o=null,c=null,l=null,u="--- ",f="+++ ",d="@@",h=/^old mode (\d{6})/,p=/^new mode (\d{6})/,m=/^deleted file mode (\d{6})/,v=/^new file mode (\d{6})/,y=/^copy from "?(.+)"?/,b=/^copy to "?(.+)"?/,x=/^rename from "?(.+)"?/,E=/^rename to "?(.+)"?/,_=/^similarity index (\d+)%/,k=/^dissimilarity index (\d+)%/,w=/^index ([\da-z]+)\.\.([\da-z]+)\s*(\d{6})?/,A=/^Binary files (.*) and (.*) differ/,S=/^GIT binary patch/,T=/^index ([\da-z]+),([\da-z]+)\.\.([\da-z]+)/,P=/^mode (\d{6}),(\d{6})\.\.(\d{6})/,O=/^new file mode (\d{6})/,j=/^deleted file mode (\d{6}),(\d{6})/,D=e.replace(/\\ No newline at end of file/g,"").replace(/\r\n?/g,` +`).split(` +`);function Q(){i!==null&&n!==null&&(n.blocks.push(i),i=null)}function de(){n!==null&&(!n.oldName&&c!==null&&(n.oldName=c),!n.newName&&l!==null&&(n.newName=l),n.newName&&(r.push(n),n=null)),c=null,l=null}function ee(){Q(),de(),n={blocks:[],deletedLines:0,addedLines:0}}function J(F){Q();let G;n!==null&&((G=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@.*/.exec(F))?(n.isCombined=!1,a=parseInt(G[1],10),o=parseInt(G[2],10)):(G=/^@@@ -(\d+)(?:,\d+)? -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@@.*/.exec(F))?(n.isCombined=!0,a=parseInt(G[1],10),s=parseInt(G[2],10),o=parseInt(G[3],10)):(F.startsWith(d)&&console.error("Failed to parse lines, starting in 0!"),a=0,o=0,n.isCombined=!1)),i={lines:[],oldStartLine:a,oldStartLine2:s,newStartLine:o,header:F}}function Pe(F){if(n===null||i===null||a===null||o===null)return;let G={content:F},N=n.isCombined?["+ "," +","++"]:["+"],Me=n.isCombined?["- "," -","--"]:["-"];mC(F,N)?(n.addedLines++,G.type=He.INSERT,G.oldNumber=void 0,G.newNumber=o++):mC(F,Me)?(n.deletedLines++,G.type=He.DELETE,G.oldNumber=a++,G.newNumber=void 0):(G.type=He.CONTEXT,G.oldNumber=a++,G.newNumber=o++),i.lines.push(G)}function me(F,G){let N=G;for(;N<D.length-3;){if(F.startsWith("diff"))return!1;if(D[N].startsWith(u)&&D[N+1].startsWith(f)&&D[N+2].startsWith(d))return!0;N++}return!1}return D.forEach((F,G)=>{if(!F||F.startsWith("*"))return;let N,Me=D[G-1],Dt=D[G+1],_t=D[G+2];if(F.startsWith("diff --git")||F.startsWith("diff --combined")){if(ee(),(N=/^diff --git "?([a-ciow]\/.+)"? "?([a-ciow]\/.+)"?/.exec(F))&&(c=$i(N[1],void 0,t.dstPrefix),l=$i(N[2],void 0,t.srcPrefix)),n===null)throw new Error("Where is my file !!!");n.isGitDiff=!0;return}if(F.startsWith("Binary files")&&!(n!=null&&n.isGitDiff)){if(ee(),(N=/^Binary files "?([a-ciow]\/.+)"? and "?([a-ciow]\/.+)"? differ/.exec(F))&&(c=$i(N[1],void 0,t.dstPrefix),l=$i(N[2],void 0,t.srcPrefix)),n===null)throw new Error("Where is my file !!!");n.isBinary=!0;return}if((!n||!n.isGitDiff&&n&&F.startsWith(u)&&Dt.startsWith(f)&&_t.startsWith(d))&&ee(),n!=null&&n.isTooBig)return;if(n&&(typeof t.diffMaxChanges=="number"&&n.addedLines+n.deletedLines>t.diffMaxChanges||typeof t.diffMaxLineLength=="number"&&F.length>t.diffMaxLineLength)){n.isTooBig=!0,n.addedLines=0,n.deletedLines=0,n.blocks=[],i=null;let st=typeof t.diffTooBigMessage=="function"?t.diffTooBigMessage(r.length):"Diff too big to be displayed";J(st);return}if(F.startsWith(u)&&Dt.startsWith(f)||F.startsWith(f)&&Me.startsWith(u)){if(n&&!n.oldName&&F.startsWith("--- ")&&(N=bB(F,t.srcPrefix))){n.oldName=N,n.language=pC(n.oldName,n.language);return}if(n&&!n.newName&&F.startsWith("+++ ")&&(N=_B(F,t.dstPrefix))){n.newName=N,n.language=pC(n.newName,n.language);return}}if(n&&(F.startsWith(d)||n.isGitDiff&&n.oldName&&n.newName&&!i)){J(F);return}if(i&&(F.startsWith("+")||F.startsWith("-")||F.startsWith(" "))){Pe(F);return}let Ee=!me(F,G);if(n===null)throw new Error("Where is my file !!!");(N=h.exec(F))?n.oldMode=N[1]:(N=p.exec(F))?n.newMode=N[1]:(N=m.exec(F))?(n.deletedFileMode=N[1],n.isDeleted=!0):(N=v.exec(F))?(n.newFileMode=N[1],n.isNew=!0):(N=y.exec(F))?(Ee&&(n.oldName=N[1]),n.isCopy=!0):(N=b.exec(F))?(Ee&&(n.newName=N[1]),n.isCopy=!0):(N=x.exec(F))?(Ee&&(n.oldName=N[1]),n.isRename=!0):(N=E.exec(F))?(Ee&&(n.newName=N[1]),n.isRename=!0):(N=A.exec(F))?(n.isBinary=!0,n.oldName=$i(N[1],void 0,t.srcPrefix),n.newName=$i(N[2],void 0,t.dstPrefix),J("Binary file")):S.test(F)?(n.isBinary=!0,J(F)):(N=_.exec(F))?n.unchangedPercentage=parseInt(N[1],10):(N=k.exec(F))?n.changedPercentage=parseInt(N[1],10):(N=w.exec(F))?(n.checksumBefore=N[1],n.checksumAfter=N[2],N[3]&&(n.mode=N[3])):(N=T.exec(F))?(n.checksumBefore=[N[2],N[3]],n.checksumAfter=N[1]):(N=P.exec(F))?(n.oldMode=[N[2],N[3]],n.newMode=N[1]):(N=O.exec(F))?(n.newFileMode=N[1],n.isNew=!0):(N=j.exec(F))&&(n.deletedFileMode=N[1],n.isDeleted=!0)}),Q(),de(),r}g();g();g();function Kn(){}Kn.prototype={diff:function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=n.callback;typeof n=="function"&&(i=n,n={}),this.options=n;var a=this;function s(m){return i?(setTimeout(function(){i(void 0,m)},0),!0):m}t=this.castInput(t),r=this.castInput(r),t=this.removeEmpty(this.tokenize(t)),r=this.removeEmpty(this.tokenize(r));var o=r.length,c=t.length,l=1,u=o+c;n.maxEditLength&&(u=Math.min(u,n.maxEditLength));var f=[{newPos:-1,components:[]}],d=this.extractCommon(f[0],r,t,0);if(f[0].newPos+1>=o&&d+1>=c)return s([{value:this.join(r),count:r.length}]);function h(){for(var m=-1*l;m<=l;m+=2){var v=void 0,y=f[m-1],b=f[m+1],x=(b?b.newPos:0)-m;y&&(f[m-1]=void 0);var E=y&&y.newPos+1<o,_=b&&0<=x&&x<c;if(!E&&!_){f[m]=void 0;continue}if(!E||_&&y.newPos<b.newPos?(v=EB(b),a.pushComponent(v.components,void 0,!0)):(v=y,v.newPos++,a.pushComponent(v.components,!0,void 0)),x=a.extractCommon(v,r,t,m),v.newPos+1>=o&&x+1>=c)return s(SB(a,v.components,r,t,a.useLongestToken));f[m]=v}l++}if(i)(function m(){setTimeout(function(){if(l>u)return i();h()||m()},0)})();else for(;l<=u;){var p=h();if(p)return p}},pushComponent:function(t,r,n){var i=t[t.length-1];i&&i.added===r&&i.removed===n?t[t.length-1]={count:i.count+1,added:r,removed:n}:t.push({count:1,added:r,removed:n})},extractCommon:function(t,r,n,i){for(var a=r.length,s=n.length,o=t.newPos,c=o-i,l=0;o+1<a&&c+1<s&&this.equals(r[o+1],n[c+1]);)o++,c++,l++;return l&&t.components.push({count:l}),t.newPos=o,c},equals:function(t,r){return this.options.comparator?this.options.comparator(t,r):t===r||this.options.ignoreCase&&t.toLowerCase()===r.toLowerCase()},removeEmpty:function(t){for(var r=[],n=0;n<t.length;n++)t[n]&&r.push(t[n]);return r},castInput:function(t){return t},tokenize:function(t){return t.split("")},join:function(t){return t.join("")}};function SB(e,t,r,n,i){for(var a=0,s=t.length,o=0,c=0;a<s;a++){var l=t[a];if(l.removed){if(l.value=e.join(n.slice(c,c+l.count)),c+=l.count,a&&t[a-1].added){var f=t[a-1];t[a-1]=t[a],t[a]=f}}else{if(!l.added&&i){var u=r.slice(o,o+l.count);u=u.map(function(h,p){var m=n[c+p];return m.length>h.length?m:h}),l.value=e.join(u)}else l.value=e.join(r.slice(o,o+l.count));o+=l.count,l.added||(c+=l.count)}}var d=t[s-1];return s>1&&typeof d.value=="string"&&(d.added||d.removed)&&e.equals("",d.value)&&(t[s-2].value+=d.value,t.pop()),t}function EB(e){return{newPos:e.newPos,components:e.components.slice(0)}}var AB=new Kn;function bC(e,t,r){return AB.diff(e,t,r)}var yC=/^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/,wC=/\S/,y0=new Kn;y0.equals=function(e,t){return this.options.ignoreCase&&(e=e.toLowerCase(),t=t.toLowerCase()),e===t||this.options.ignoreWhitespace&&!wC.test(e)&&!wC.test(t)};y0.tokenize=function(e){for(var t=e.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/),r=0;r<t.length-1;r++)!t[r+1]&&t[r+2]&&yC.test(t[r])&&yC.test(t[r+2])&&(t[r]+=t[r+2],t.splice(r+1,2),r--);return t};function _C(e,t,r){return y0.diff(e,t,r)}var xC=new Kn;xC.tokenize=function(e){var t=[],r=e.split(/(\n|\r\n)/);r[r.length-1]||r.pop();for(var n=0;n<r.length;n++){var i=r[n];n%2&&!this.options.newlineIsToken?t[t.length-1]+=i:(this.options.ignoreWhitespace&&(i=i.trim()),t.push(i))}return t};var kB=new Kn;kB.tokenize=function(e){return e.split(/(\S.+?[.!?])(?=\s+|$)/)};var TB=new Kn;TB.tokenize=function(e){return e.split(/([{}:;,]|\s+)/)};function dd(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?dd=function(t){return typeof t}:dd=function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},dd(e)}var CB=Object.prototype.toString,Jl=new Kn;Jl.useLongestToken=!0;Jl.tokenize=xC.tokenize;Jl.castInput=function(e){var t=this.options,r=t.undefinedReplacement,n=t.stringifyReplacer,i=n===void 0?function(a,s){return typeof s=="undefined"?r:s}:n;return typeof e=="string"?e:JSON.stringify(g0(e,null,null,i),i," ")};Jl.equals=function(e,t){return Kn.prototype.equals.call(Jl,e.replace(/,([\r\n])/g,"$1"),t.replace(/,([\r\n])/g,"$1"))};function g0(e,t,r,n,i){t=t||[],r=r||[],n&&(e=n(i,e));var a;for(a=0;a<t.length;a+=1)if(t[a]===e)return r[a];var s;if(CB.call(e)==="[object Array]"){for(t.push(e),s=new Array(e.length),r.push(s),a=0;a<e.length;a+=1)s[a]=g0(e[a],t,r,n,i);return t.pop(),r.pop(),s}if(e&&e.toJSON&&(e=e.toJSON()),dd(e)==="object"&&e!==null){t.push(e),s={},r.push(s);var o=[],c;for(c in e)e.hasOwnProperty(c)&&o.push(c);for(o.sort(),a=0;a<o.length;a+=1)c=o[a],s[c]=g0(e[c],t,r,n,c);t.pop(),r.pop()}else s=e;return s}var v0=new Kn;v0.tokenize=function(e){return e.slice()};v0.join=v0.removeEmpty=function(e){return e};g();function RB(e,t){if(e.length===0)return t.length;if(t.length===0)return e.length;let r=[],n;for(n=0;n<=t.length;n++)r[n]=[n];let i;for(i=0;i<=e.length;i++)r[0][i]=i;for(n=1;n<=t.length;n++)for(i=1;i<=e.length;i++)t.charAt(n-1)===e.charAt(i-1)?r[n][i]=r[n-1][i-1]:r[n][i]=Math.min(r[n-1][i-1]+1,Math.min(r[n][i-1]+1,r[n-1][i]+1));return r[t.length][e.length]}function Ks(e){return(t,r)=>{let n=e(t).trim(),i=e(r).trim();return RB(n,i)/(n.length+i.length)}}function Js(e){function t(n,i,a=new Map){let s=1/0,o;for(let c=0;c<n.length;++c)for(let l=0;l<i.length;++l){let u=JSON.stringify([n[c],i[l]]),f;a.has(u)&&(f=a.get(u))||(f=e(n[c],i[l]),a.set(u,f)),f<s&&(s=f,o={indexA:c,indexB:l,score:s})}return o}function r(n,i,a=0,s=new Map){let o=t(n,i,s);if(!o||n.length+i.length<3)return[[n,i]];let c=n.slice(0,o.indexA),l=i.slice(0,o.indexB),u=[n[o.indexA]],f=[i[o.indexB]],d=o.indexA+1,h=o.indexB+1,p=n.slice(d),m=i.slice(h),v=r(c,l,a+1,s),y=r(u,f,a+1,s),b=r(p,m,a+1,s),x=y;return(o.indexA>0||o.indexB>0)&&(x=v.concat(x)),(n.length>d||i.length>h)&&(x=x.concat(b)),x}return r}var Et={INSERTS:"d2h-ins",DELETES:"d2h-del",CONTEXT:"d2h-cntx",INFO:"d2h-info",INSERT_CHANGES:"d2h-ins d2h-change",DELETE_CHANGES:"d2h-del d2h-change"},Aa={matching:uC.NONE,matchWordsThreshold:.25,maxLineLengthHighlight:1e4,diffStyle:fC.WORD,colorScheme:Ea.LIGHT},Cn="/",SC=Ks(e=>e.value),MB=Js(SC);function b0(e){return e.indexOf("dev/null")!==-1}function OB(e){return e.replace(/(<ins[^>]*>((.|\n)*?)<\/ins>)/g,"")}function IB(e){return e.replace(/(<del[^>]*>((.|\n)*?)<\/del>)/g,"")}function Qs(e){switch(e){case He.CONTEXT:return Et.CONTEXT;case He.INSERT:return Et.INSERTS;case He.DELETE:return Et.DELETES}}function eo(e){switch(e){case Ea.DARK:return"d2h-dark-color-scheme";case Ea.AUTO:return"d2h-auto-color-scheme";case Ea.LIGHT:default:return"d2h-light-color-scheme"}}function FB(e){return e?2:1}function Li(e){return e.slice(0).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")}function jr(e,t,r=!0){let n=FB(t);return{prefix:e.substring(0,n),content:r?Li(e.substring(n)):e.substring(n)}}function ka(e){let t=m0(e.oldName),r=m0(e.newName);if(t!==r&&!b0(t)&&!b0(r)){let n=[],i=[],a=t.split(Cn),s=r.split(Cn),o=a.length,c=s.length,l=0,u=o-1,f=c-1;for(;l<u&&l<f&&a[l]===s[l];)n.push(s[l]),l+=1;for(;u>l&&f>l&&a[u]===s[f];)i.unshift(s[f]),u-=1,f-=1;let d=n.join(Cn),h=i.join(Cn),p=a.slice(l,u+1).join(Cn),m=s.slice(l,f+1).join(Cn);return d.length&&h.length?d+Cn+"{"+p+" \u2192 "+m+"}"+Cn+h:d.length?d+Cn+"{"+p+" \u2192 "+m+"}":h.length?"{"+p+" \u2192 "+m+"}"+Cn+h:t+" \u2192 "+r}else return b0(r)?t:r}function to(e){return`d2h-${hC(ka(e)).toString().slice(-6)}`}function ro(e){let t="file-changed";return e.isRename||e.isCopy?t="file-renamed":e.isNew?t="file-added":e.isDeleted?t="file-deleted":e.newName!==e.oldName&&(t="file-renamed"),t}function hd(e,t,r,n={}){let{matching:i,maxLineLengthHighlight:a,matchWordsThreshold:s,diffStyle:o}=Object.assign(Object.assign({},Aa),n),c=jr(e,r,!1),l=jr(t,r,!1);if(c.content.length>a||l.content.length>a)return{oldLine:{prefix:c.prefix,content:Li(c.content)},newLine:{prefix:l.prefix,content:Li(l.content)}};let u=o==="char"?bC(c.content,l.content):_C(c.content,l.content),f=[];if(o==="word"&&i==="words"){let h=u.filter(v=>v.removed),p=u.filter(v=>v.added);MB(p,h).forEach(v=>{v[0].length===1&&v[1].length===1&&SC(v[0][0],v[1][0])<s&&(f.push(v[0][0]),f.push(v[1][0]))})}let d=u.reduce((h,p)=>{let m=p.added?"ins":p.removed?"del":null,v=f.indexOf(p)>-1?' class="d2h-change"':"",y=Li(p.value);return m!==null?`${h}<${m}${v}>${y}</${m}>`:`${h}${y}`},"");return{oldLine:{prefix:c.prefix,content:OB(d)},newLine:{prefix:l.prefix,content:IB(d)}}}var EC="file-summary",$B="icon",LB={colorScheme:Aa.colorScheme},pd=class{constructor(t,r={}){this.hoganUtils=t,this.config=Object.assign(Object.assign({},LB),r)}render(t){let r=t.map(n=>this.hoganUtils.render(EC,"line",{fileHtmlId:to(n),oldName:n.oldName,newName:n.newName,fileName:ka(n),deletedLines:"-"+n.deletedLines,addedLines:"+"+n.addedLines},{fileIcon:this.hoganUtils.template($B,ro(n))})).join(` +`);return this.hoganUtils.render(EC,"wrapper",{colorScheme:eo(this.config.colorScheme),filesNumber:t.length,files:r})}};g();var x0=Object.assign(Object.assign({},Aa),{renderNothingWhenEmpty:!1,matchingMaxComparisons:2500,maxLineSizeInBlockForComparison:200}),Ql="generic",AC="line-by-line",DB="icon",NB="tag",ec=class{constructor(t,r={}){this.hoganUtils=t,this.config=Object.assign(Object.assign({},x0),r)}render(t){let r=t.map(n=>{let i;return n.blocks.length?i=this.generateFileHtml(n):i=this.generateEmptyDiff(),this.makeFileDiffHtml(n,i)}).join(` +`);return this.hoganUtils.render(Ql,"wrapper",{colorScheme:eo(this.config.colorScheme),content:r})}makeFileDiffHtml(t,r){if(this.config.renderNothingWhenEmpty&&Array.isArray(t.blocks)&&t.blocks.length===0)return"";let n=this.hoganUtils.template(AC,"file-diff"),i=this.hoganUtils.template(Ql,"file-path"),a=this.hoganUtils.template(DB,"file"),s=this.hoganUtils.template(NB,ro(t));return n.render({file:t,fileHtmlId:to(t),diffs:r,filePath:i.render({fileDiffName:ka(t)},{fileIcon:a,fileTag:s})})}generateEmptyDiff(){return this.hoganUtils.render(Ql,"empty-diff",{contentClass:"d2h-code-line",CSSLineClass:Et})}generateFileHtml(t){let r=Js(Ks(n=>jr(n.content,t.isCombined).content));return t.blocks.map(n=>{let i=this.hoganUtils.render(Ql,"block-header",{CSSLineClass:Et,blockHeader:t.isTooBig?n.header:Li(n.header),lineClass:"d2h-code-linenumber",contentClass:"d2h-code-line"});return this.applyLineGroupping(n).forEach(([a,s,o])=>{if(s.length&&o.length&&!a.length)this.applyRematchMatching(s,o,r).map(([c,l])=>{let{left:u,right:f}=this.processChangedLines(t,t.isCombined,c,l);i+=u,i+=f});else if(a.length)a.forEach(c=>{let{prefix:l,content:u}=jr(c.content,t.isCombined);i+=this.generateSingleLineHtml(t,{type:Et.CONTEXT,prefix:l,content:u,oldNumber:c.oldNumber,newNumber:c.newNumber})});else if(s.length||o.length){let{left:c,right:l}=this.processChangedLines(t,t.isCombined,s,o);i+=c,i+=l}else console.error("Unknown state reached while processing groups of lines",a,s,o)}),i}).join(` +`)}applyLineGroupping(t){let r=[],n=[],i=[];for(let a=0;a<t.lines.length;a++){let s=t.lines[a];(s.type!==He.INSERT&&i.length||s.type===He.CONTEXT&&n.length>0)&&(r.push([[],n,i]),n=[],i=[]),s.type===He.CONTEXT?r.push([[s],[],[]]):s.type===He.INSERT&&n.length===0?r.push([[],[],[s]]):s.type===He.INSERT&&n.length>0?i.push(s):s.type===He.DELETE&&n.push(s)}return(n.length||i.length)&&(r.push([[],n,i]),n=[],i=[]),r}applyRematchMatching(t,r,n){let i=t.length*r.length,a=Math.max.apply(null,[0].concat(t.concat(r).map(o=>o.content.length)));return i<this.config.matchingMaxComparisons&&a<this.config.maxLineSizeInBlockForComparison&&(this.config.matching==="lines"||this.config.matching==="words")?n(t,r):[[t,r]]}processChangedLines(t,r,n,i){let a={right:"",left:""},s=Math.max(n.length,i.length);for(let o=0;o<s;o++){let c=n[o],l=i[o],u=c!==void 0&&l!==void 0?hd(c.content,l.content,r,this.config):void 0,f=c!==void 0&&c.oldNumber!==void 0?Object.assign(Object.assign({},u!==void 0?{prefix:u.oldLine.prefix,content:u.oldLine.content,type:Et.DELETE_CHANGES}:Object.assign(Object.assign({},jr(c.content,r)),{type:Qs(c.type)})),{oldNumber:c.oldNumber,newNumber:c.newNumber}):void 0,d=l!==void 0&&l.newNumber!==void 0?Object.assign(Object.assign({},u!==void 0?{prefix:u.newLine.prefix,content:u.newLine.content,type:Et.INSERT_CHANGES}:Object.assign(Object.assign({},jr(l.content,r)),{type:Qs(l.type)})),{oldNumber:l.oldNumber,newNumber:l.newNumber}):void 0,{left:h,right:p}=this.generateLineHtml(t,f,d);a.left+=h,a.right+=p}return a}generateLineHtml(t,r,n){return{left:this.generateSingleLineHtml(t,r),right:this.generateSingleLineHtml(t,n)}}generateSingleLineHtml(t,r){if(r===void 0)return"";let n=this.hoganUtils.render(AC,"numbers",{oldNumber:r.oldNumber||"",newNumber:r.newNumber||""});return this.hoganUtils.render(Ql,"line",{type:r.type,lineClass:"d2h-code-linenumber",contentClass:"d2h-code-line",prefix:r.prefix===" "?" ":r.prefix,content:r.content,lineNumber:n,line:r,file:t})}};g();var S0=Object.assign(Object.assign({},Aa),{renderNothingWhenEmpty:!1,matchingMaxComparisons:2500,maxLineSizeInBlockForComparison:200}),tc="generic",jB="side-by-side",BB="icon",HB="tag",rc=class{constructor(t,r={}){this.hoganUtils=t,this.config=Object.assign(Object.assign({},S0),r)}render(t){let r=t.map(n=>{let i;return n.blocks.length?i=this.generateFileHtml(n):i=this.generateEmptyDiff(),this.makeFileDiffHtml(n,i)}).join(` +`);return this.hoganUtils.render(tc,"wrapper",{colorScheme:eo(this.config.colorScheme),content:r})}makeFileDiffHtml(t,r){if(this.config.renderNothingWhenEmpty&&Array.isArray(t.blocks)&&t.blocks.length===0)return"";let n=this.hoganUtils.template(jB,"file-diff"),i=this.hoganUtils.template(tc,"file-path"),a=this.hoganUtils.template(BB,"file"),s=this.hoganUtils.template(HB,ro(t));return n.render({file:t,fileHtmlId:to(t),diffs:r,filePath:i.render({fileDiffName:ka(t)},{fileIcon:a,fileTag:s})})}generateEmptyDiff(){return{right:"",left:this.hoganUtils.render(tc,"empty-diff",{contentClass:"d2h-code-side-line",CSSLineClass:Et})}}generateFileHtml(t){let r=Js(Ks(n=>jr(n.content,t.isCombined).content));return t.blocks.map(n=>{let i={left:this.makeHeaderHtml(n.header,t),right:this.makeHeaderHtml("")};return this.applyLineGroupping(n).forEach(([a,s,o])=>{if(s.length&&o.length&&!a.length)this.applyRematchMatching(s,o,r).map(([c,l])=>{let{left:u,right:f}=this.processChangedLines(t.isCombined,c,l);i.left+=u,i.right+=f});else if(a.length)a.forEach(c=>{let{prefix:l,content:u}=jr(c.content,t.isCombined),{left:f,right:d}=this.generateLineHtml({type:Et.CONTEXT,prefix:l,content:u,number:c.oldNumber},{type:Et.CONTEXT,prefix:l,content:u,number:c.newNumber});i.left+=f,i.right+=d});else if(s.length||o.length){let{left:c,right:l}=this.processChangedLines(t.isCombined,s,o);i.left+=c,i.right+=l}else console.error("Unknown state reached while processing groups of lines",a,s,o)}),i}).reduce((n,i)=>({left:n.left+i.left,right:n.right+i.right}),{left:"",right:""})}applyLineGroupping(t){let r=[],n=[],i=[];for(let a=0;a<t.lines.length;a++){let s=t.lines[a];(s.type!==He.INSERT&&i.length||s.type===He.CONTEXT&&n.length>0)&&(r.push([[],n,i]),n=[],i=[]),s.type===He.CONTEXT?r.push([[s],[],[]]):s.type===He.INSERT&&n.length===0?r.push([[],[],[s]]):s.type===He.INSERT&&n.length>0?i.push(s):s.type===He.DELETE&&n.push(s)}return(n.length||i.length)&&(r.push([[],n,i]),n=[],i=[]),r}applyRematchMatching(t,r,n){let i=t.length*r.length,a=Math.max.apply(null,[0].concat(t.concat(r).map(o=>o.content.length)));return i<this.config.matchingMaxComparisons&&a<this.config.maxLineSizeInBlockForComparison&&(this.config.matching==="lines"||this.config.matching==="words")?n(t,r):[[t,r]]}makeHeaderHtml(t,r){return this.hoganUtils.render(tc,"block-header",{CSSLineClass:Et,blockHeader:r!=null&&r.isTooBig?t:Li(t),lineClass:"d2h-code-side-linenumber",contentClass:"d2h-code-side-line"})}processChangedLines(t,r,n){let i={right:"",left:""},a=Math.max(r.length,n.length);for(let s=0;s<a;s++){let o=r[s],c=n[s],l=o!==void 0&&c!==void 0?hd(o.content,c.content,t,this.config):void 0,u=o!==void 0&&o.oldNumber!==void 0?Object.assign(Object.assign({},l!==void 0?{prefix:l.oldLine.prefix,content:l.oldLine.content,type:Et.DELETE_CHANGES}:Object.assign(Object.assign({},jr(o.content,t)),{type:Qs(o.type)})),{number:o.oldNumber}):void 0,f=c!==void 0&&c.newNumber!==void 0?Object.assign(Object.assign({},l!==void 0?{prefix:l.newLine.prefix,content:l.newLine.content,type:Et.INSERT_CHANGES}:Object.assign(Object.assign({},jr(c.content,t)),{type:Qs(c.type)})),{number:c.newNumber}):void 0,{left:d,right:h}=this.generateLineHtml(u,f);i.left+=d,i.right+=h}return i}generateLineHtml(t,r){return{left:this.generateSingleHtml(t),right:this.generateSingleHtml(r)}}generateSingleHtml(t){let r="d2h-code-side-linenumber",n="d2h-code-side-line";return this.hoganUtils.render(tc,"line",{type:(t==null?void 0:t.type)||`${Et.CONTEXT} d2h-emptyplaceholder`,lineClass:t!==void 0?r:`${r} d2h-code-side-emptyplaceholder`,contentClass:t!==void 0?n:`${n} d2h-code-side-emptyplaceholder`,prefix:(t==null?void 0:t.prefix)===" "?" ":t==null?void 0:t.prefix,content:t==null?void 0:t.content,lineNumber:t==null?void 0:t.number})}};g();var T0=ze(k0());g();var lt=ze(k0()),nt={};nt["file-summary-line"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b('<li class="d2h-file-list-line">'),n.b(` +`+r),n.b(' <span class="d2h-file-name-wrapper">'),n.b(` +`+r),n.b(n.rp("<fileIcon0",e,t," ")),n.b(' <a href="#'),n.b(n.v(n.f("fileHtmlId",e,t,0))),n.b('" class="d2h-file-name">'),n.b(n.v(n.f("fileName",e,t,0))),n.b("</a>"),n.b(` +`+r),n.b(' <span class="d2h-file-stats">'),n.b(` +`+r),n.b(' <span class="d2h-lines-added">'),n.b(n.v(n.f("addedLines",e,t,0))),n.b("</span>"),n.b(` +`+r),n.b(' <span class="d2h-lines-deleted">'),n.b(n.v(n.f("deletedLines",e,t,0))),n.b("</span>"),n.b(` +`+r),n.b(" </span>"),n.b(` +`+r),n.b(" </span>"),n.b(` +`+r),n.b("</li>"),n.fl()},partials:{"<fileIcon0":{name:"fileIcon",partials:{},subs:{}}},subs:{}});nt["file-summary-wrapper"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b('<div class="d2h-file-list-wrapper '),n.b(n.v(n.f("colorScheme",e,t,0))),n.b('">'),n.b(` +`+r),n.b(' <div class="d2h-file-list-header">'),n.b(` +`+r),n.b(' <span class="d2h-file-list-title">Files changed ('),n.b(n.v(n.f("filesNumber",e,t,0))),n.b(")</span>"),n.b(` +`+r),n.b(' <a class="d2h-file-switch d2h-hide">hide</a>'),n.b(` +`+r),n.b(' <a class="d2h-file-switch d2h-show">show</a>'),n.b(` +`+r),n.b(" </div>"),n.b(` +`+r),n.b(' <ol class="d2h-file-list">'),n.b(` +`+r),n.b(" "),n.b(n.t(n.f("files",e,t,0))),n.b(` +`+r),n.b(" </ol>"),n.b(` +`+r),n.b("</div>"),n.fl()},partials:{},subs:{}});nt["generic-block-header"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b("<tr>"),n.b(` +`+r),n.b(' <td class="'),n.b(n.v(n.f("lineClass",e,t,0))),n.b(" "),n.b(n.v(n.d("CSSLineClass.INFO",e,t,0))),n.b('"></td>'),n.b(` +`+r),n.b(' <td class="'),n.b(n.v(n.d("CSSLineClass.INFO",e,t,0))),n.b('">'),n.b(` +`+r),n.b(' <div class="'),n.b(n.v(n.f("contentClass",e,t,0))),n.b('">'),n.s(n.f("blockHeader",e,t,1),e,t,0,156,173,"{{ }}")&&(n.rs(e,t,function(i,a,s){s.b(s.t(s.f("blockHeader",i,a,0)))}),e.pop()),n.s(n.f("blockHeader",e,t,1),e,t,1,0,0,"")||n.b(" "),n.b("</div>"),n.b(` +`+r),n.b(" </td>"),n.b(` +`+r),n.b("</tr>"),n.fl()},partials:{},subs:{}});nt["generic-empty-diff"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b("<tr>"),n.b(` +`+r),n.b(' <td class="'),n.b(n.v(n.d("CSSLineClass.INFO",e,t,0))),n.b('">'),n.b(` +`+r),n.b(' <div class="'),n.b(n.v(n.f("contentClass",e,t,0))),n.b('">'),n.b(` +`+r),n.b(" File without changes"),n.b(` +`+r),n.b(" </div>"),n.b(` +`+r),n.b(" </td>"),n.b(` +`+r),n.b("</tr>"),n.fl()},partials:{},subs:{}});nt["generic-file-path"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b('<span class="d2h-file-name-wrapper">'),n.b(` +`+r),n.b(n.rp("<fileIcon0",e,t," ")),n.b(' <span class="d2h-file-name">'),n.b(n.v(n.f("fileDiffName",e,t,0))),n.b("</span>"),n.b(` +`+r),n.b(n.rp("<fileTag1",e,t," ")),n.b("</span>"),n.b(` +`+r),n.b('<label class="d2h-file-collapse">'),n.b(` +`+r),n.b(' <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed">'),n.b(` +`+r),n.b(" Viewed"),n.b(` +`+r),n.b("</label>"),n.fl()},partials:{"<fileIcon0":{name:"fileIcon",partials:{},subs:{}},"<fileTag1":{name:"fileTag",partials:{},subs:{}}},subs:{}});nt["generic-line"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b("<tr>"),n.b(` +`+r),n.b(' <td class="'),n.b(n.v(n.f("lineClass",e,t,0))),n.b(" "),n.b(n.v(n.f("type",e,t,0))),n.b('">'),n.b(` +`+r),n.b(" "),n.b(n.t(n.f("lineNumber",e,t,0))),n.b(` +`+r),n.b(" </td>"),n.b(` +`+r),n.b(' <td class="'),n.b(n.v(n.f("type",e,t,0))),n.b('">'),n.b(` +`+r),n.b(' <div class="'),n.b(n.v(n.f("contentClass",e,t,0))),n.b('">'),n.b(` +`+r),n.s(n.f("prefix",e,t,1),e,t,0,162,238,"{{ }}")&&(n.rs(e,t,function(i,a,s){s.b(' <span class="d2h-code-line-prefix">'),s.b(s.t(s.f("prefix",i,a,0))),s.b("</span>"),s.b(` +`+r)}),e.pop()),n.s(n.f("prefix",e,t,1),e,t,1,0,0,"")||(n.b(' <span class="d2h-code-line-prefix"> </span>'),n.b(` +`+r)),n.s(n.f("content",e,t,1),e,t,0,371,445,"{{ }}")&&(n.rs(e,t,function(i,a,s){s.b(' <span class="d2h-code-line-ctn">'),s.b(s.t(s.f("content",i,a,0))),s.b("</span>"),s.b(` +`+r)}),e.pop()),n.s(n.f("content",e,t,1),e,t,1,0,0,"")||(n.b(' <span class="d2h-code-line-ctn"><br></span>'),n.b(` +`+r)),n.b(" </div>"),n.b(` +`+r),n.b(" </td>"),n.b(` +`+r),n.b("</tr>"),n.fl()},partials:{},subs:{}});nt["generic-wrapper"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b('<div class="d2h-wrapper '),n.b(n.v(n.f("colorScheme",e,t,0))),n.b('">'),n.b(` +`+r),n.b(" "),n.b(n.t(n.f("content",e,t,0))),n.b(` +`+r),n.b("</div>"),n.fl()},partials:{},subs:{}});nt["icon-file-added"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b('<svg aria-hidden="true" class="d2h-icon d2h-added" height="16" title="added" version="1.1" viewBox="0 0 14 16"'),n.b(` +`+r),n.b(' width="14">'),n.b(` +`+r),n.b(' <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM6 9H3V7h3V4h2v3h3v2H8v3H6V9z"></path>'),n.b(` +`+r),n.b("</svg>"),n.fl()},partials:{},subs:{}});nt["icon-file-changed"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b('<svg aria-hidden="true" class="d2h-icon d2h-changed" height="16" title="modified" version="1.1"'),n.b(` +`+r),n.b(' viewBox="0 0 14 16" width="14">'),n.b(` +`+r),n.b(' <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z"></path>'),n.b(` +`+r),n.b("</svg>"),n.fl()},partials:{},subs:{}});nt["icon-file-deleted"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b('<svg aria-hidden="true" class="d2h-icon d2h-deleted" height="16" title="removed" version="1.1"'),n.b(` +`+r),n.b(' viewBox="0 0 14 16" width="14">'),n.b(` +`+r),n.b(' <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM11 9H3V7h8v2z"></path>'),n.b(` +`+r),n.b("</svg>"),n.fl()},partials:{},subs:{}});nt["icon-file-renamed"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b('<svg aria-hidden="true" class="d2h-icon d2h-moved" height="16" title="renamed" version="1.1"'),n.b(` +`+r),n.b(' viewBox="0 0 14 16" width="14">'),n.b(` +`+r),n.b(' <path d="M6 9H3V7h3V4l5 4-5 4V9z m8-7v12c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h12c0.55 0 1 0.45 1 1z m-1 0H1v12h12V2z"></path>'),n.b(` +`+r),n.b("</svg>"),n.fl()},partials:{},subs:{}});nt["icon-file"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b('<svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12">'),n.b(` +`+r),n.b(' <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path>'),n.b(` +`+r),n.b("</svg>"),n.fl()},partials:{},subs:{}});nt["line-by-line-file-diff"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b('<div id="'),n.b(n.v(n.f("fileHtmlId",e,t,0))),n.b('" class="d2h-file-wrapper" data-lang="'),n.b(n.v(n.d("file.language",e,t,0))),n.b('">'),n.b(` +`+r),n.b(' <div class="d2h-file-header">'),n.b(` +`+r),n.b(" "),n.b(n.t(n.f("filePath",e,t,0))),n.b(` +`+r),n.b(" </div>"),n.b(` +`+r),n.b(' <div class="d2h-file-diff">'),n.b(` +`+r),n.b(' <div class="d2h-code-wrapper">'),n.b(` +`+r),n.b(' <table class="d2h-diff-table">'),n.b(` +`+r),n.b(' <tbody class="d2h-diff-tbody">'),n.b(` +`+r),n.b(" "),n.b(n.t(n.f("diffs",e,t,0))),n.b(` +`+r),n.b(" </tbody>"),n.b(` +`+r),n.b(" </table>"),n.b(` +`+r),n.b(" </div>"),n.b(` +`+r),n.b(" </div>"),n.b(` +`+r),n.b("</div>"),n.fl()},partials:{},subs:{}});nt["line-by-line-numbers"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b('<div class="line-num1">'),n.b(n.v(n.f("oldNumber",e,t,0))),n.b("</div>"),n.b(` +`+r),n.b('<div class="line-num2">'),n.b(n.v(n.f("newNumber",e,t,0))),n.b("</div>"),n.fl()},partials:{},subs:{}});nt["side-by-side-file-diff"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b('<div id="'),n.b(n.v(n.f("fileHtmlId",e,t,0))),n.b('" class="d2h-file-wrapper" data-lang="'),n.b(n.v(n.d("file.language",e,t,0))),n.b('">'),n.b(` +`+r),n.b(' <div class="d2h-file-header">'),n.b(` +`+r),n.b(" "),n.b(n.t(n.f("filePath",e,t,0))),n.b(` +`+r),n.b(" </div>"),n.b(` +`+r),n.b(' <div class="d2h-files-diff">'),n.b(` +`+r),n.b(' <div class="d2h-file-side-diff">'),n.b(` +`+r),n.b(' <div class="d2h-code-wrapper">'),n.b(` +`+r),n.b(' <table class="d2h-diff-table">'),n.b(` +`+r),n.b(' <tbody class="d2h-diff-tbody">'),n.b(` +`+r),n.b(" "),n.b(n.t(n.d("diffs.left",e,t,0))),n.b(` +`+r),n.b(" </tbody>"),n.b(` +`+r),n.b(" </table>"),n.b(` +`+r),n.b(" </div>"),n.b(` +`+r),n.b(" </div>"),n.b(` +`+r),n.b(' <div class="d2h-file-side-diff">'),n.b(` +`+r),n.b(' <div class="d2h-code-wrapper">'),n.b(` +`+r),n.b(' <table class="d2h-diff-table">'),n.b(` +`+r),n.b(' <tbody class="d2h-diff-tbody">'),n.b(` +`+r),n.b(" "),n.b(n.t(n.d("diffs.right",e,t,0))),n.b(` +`+r),n.b(" </tbody>"),n.b(` +`+r),n.b(" </table>"),n.b(` +`+r),n.b(" </div>"),n.b(` +`+r),n.b(" </div>"),n.b(` +`+r),n.b(" </div>"),n.b(` +`+r),n.b("</div>"),n.fl()},partials:{},subs:{}});nt["tag-file-added"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b('<span class="d2h-tag d2h-added d2h-added-tag">ADDED</span>'),n.fl()},partials:{},subs:{}});nt["tag-file-changed"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b('<span class="d2h-tag d2h-changed d2h-changed-tag">CHANGED</span>'),n.fl()},partials:{},subs:{}});nt["tag-file-deleted"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b('<span class="d2h-tag d2h-deleted d2h-deleted-tag">DELETED</span>'),n.fl()},partials:{},subs:{}});nt["tag-file-renamed"]=new lt.Template({code:function(e,t,r){var n=this;return n.b(r=r||""),n.b('<span class="d2h-tag d2h-moved d2h-moved-tag">RENAMED</span>'),n.fl()},partials:{},subs:{}});var nc=class{constructor({compiledTemplates:t={},rawTemplates:r={}}){let n=Object.entries(r).reduce((i,[a,s])=>{let o=T0.compile(s,{asString:!1});return Object.assign(Object.assign({},i),{[a]:o})},{});this.preCompiledTemplates=Object.assign(Object.assign(Object.assign({},nt),t),n)}static compile(t){return T0.compile(t,{asString:!1})}render(t,r,n,i,a){let s=this.templateKey(t,r);try{return this.preCompiledTemplates[s].render(n,i,a)}catch(o){throw new Error(`Could not find template to render '${s}'`)}}template(t,r){return this.preCompiledTemplates[this.templateKey(t,r)]}templateKey(t,r){return`${t}-${r}`}};var GB=Object.assign(Object.assign(Object.assign({},x0),S0),{outputFormat:cC.LINE_BY_LINE,drawFileList:!0});function PC(e,t={}){let r=Object.assign(Object.assign({},GB),t),n=typeof e=="string"?vC(e,r):e,i=new nc(r),{colorScheme:a}=r,s={colorScheme:a},o=r.drawFileList?new pd(i,s).render(n):"",c=r.outputFormat==="side-by-side"?new rc(i,r).render(n):new ec(i,r).render(n);return o+c}var gd=require("obsidian");var Ta=class extends gd.ItemView{constructor(r,n){super(r);this.plugin=n;this.gettingDiff=!1;this.parser=new DOMParser,this.navigation=!0,this.gitRefreshRef=this.app.workspace.on("obsidian-git:status-changed",()=>{this.refresh().catch(console.error)})}getViewType(){return ki.type}getDisplayText(){var r;if(((r=this.state)==null?void 0:r.bFile)!=null){let n=this.state.bFile.split("/").last();return n!=null&&n.endsWith(".md")&&(n=n.slice(0,-3)),`Diff: ${n}`}return ki.name}getIcon(){return ki.icon}async setState(r,n){this.state=r,gd.Platform.isMobile&&(this.leaf.view.titleEl.textContent=this.getDisplayText()),await this.refresh()}getState(){return this.state}onClose(){return this.app.workspace.offref(this.gitRefreshRef),this.app.workspace.offref(this.gitViewRefreshRef),super.onClose()}async onOpen(){return await this.refresh(),super.onOpen()}async refresh(){var r;if((r=this.state)!=null&&r.bFile&&!this.gettingDiff&&this.plugin.gitManager){this.gettingDiff=!0;try{let n=await this.plugin.gitManager.getDiffString(this.state.bFile,this.state.aRef=="HEAD",this.state.bRef);this.contentEl.empty();let i=this.plugin.gitManager.getRelativeVaultPath(this.state.bFile);if(!n){if(this.plugin.gitManager instanceof Te&&await this.plugin.gitManager.isTracked(this.state.bFile))n=[`--- ${this.state.aFile}`,`+++ ${this.state.bFile}`,""].join(` +`);else if(await this.app.vault.adapter.exists(i)){let a=await this.app.vault.adapter.read(i);n=[...`--- /dev/null ++++ ${this.state.bFile} +@@ -0,0 +1,${a.split(` +`).length} @@`.split(` +`),...a.split(` +`).map(o=>`+${o}`)].join(` +`)}}if(n){let a=this.parser.parseFromString(PC(n),"text/html").querySelector(".d2h-file-diff");this.contentEl.append(a)}else{let a=this.contentEl.createDiv({cls:"obsidian-git-center"});a.createSpan({text:"\u26A0\uFE0F",attr:{style:"font-size: 2em"}}),a.createEl("br"),a.createSpan({text:"File not found: "+this.state.bFile})}}finally{this.gettingDiff=!1}}}};g();var W3=require("obsidian");g();g();g();var RC="5";typeof window!="undefined"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(RC);g();g();var no="[",Ca="[!",Pa="]",Di={};var ct=Symbol(),qt=Symbol("filename"),MC=Symbol("hmr");g();g();var zB=["allowfullscreen","async","autofocus","autoplay","checked","controls","default","disabled","formnovalidate","hidden","indeterminate","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","seamless","selected","webkitdirectory"];var oZ=[...zB,"formNoValidate","isMap","noModule","playsInline","readOnly","value","inert","volume","defaultValue","defaultChecked","srcObject"];var VB=["touchstart","touchmove"];function OC(e){return VB.includes(e)}g();g();g();var vd=!0;g();var z=!1;g();var sn=Array.isArray,ic=Array.from,C0=Object.keys,Mt=Object.defineProperty,Br=Object.getOwnPropertyDescriptor,P0=Object.getOwnPropertyDescriptors,R0=Object.prototype,IC=Array.prototype,Ra=Object.getPrototypeOf;function M0(e){return typeof e=="function"}var _r=()=>{};function yd(e){for(var t=0;t<e.length;t++)e[t]()}g();g();var xr=Symbol("$state"),Ma=Symbol("$state metadata"),wd=Symbol("legacy props"),FC=Symbol("");g();g();function bd(e){return e===this.v}function O0(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function io(e){return!O0(e,this.v)}g();function I0(){if(z){let e=new Error("bind_invalid_checkbox_value\nUsing `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\nhttps://svelte.dev/e/bind_invalid_checkbox_value");throw e.name="Svelte error",e}else throw new Error("https://svelte.dev/e/bind_invalid_checkbox_value")}function $C(){if(z){let e=new Error(`derived_references_self +A derived value cannot reference itself recursively +https://svelte.dev/e/derived_references_self`);throw e.name="Svelte error",e}else throw new Error("https://svelte.dev/e/derived_references_self")}function LC(e){if(z){let t=new Error(`effect_in_teardown +\`${e}\` cannot be used inside an effect cleanup function +https://svelte.dev/e/effect_in_teardown`);throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/effect_in_teardown")}function DC(){if(z){let e=new Error("effect_in_unowned_derived\nEffect cannot be created inside a `$derived` value that was not itself created inside an effect\nhttps://svelte.dev/e/effect_in_unowned_derived");throw e.name="Svelte error",e}else throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function NC(e){if(z){let t=new Error(`effect_orphan +\`${e}\` can only be used inside an effect (e.g. during component initialisation) +https://svelte.dev/e/effect_orphan`);throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/effect_orphan")}function jC(){if(z){let e=new Error(`effect_update_depth_exceeded +Maximum update depth exceeded. This can happen when a reactive block or effect repeatedly sets a new value. Svelte limits the number of nested updates to prevent infinite loops +https://svelte.dev/e/effect_update_depth_exceeded`);throw e.name="Svelte error",e}else throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function BC(){if(z){let e=new Error(`hydration_failed +Failed to hydrate the application +https://svelte.dev/e/hydration_failed`);throw e.name="Svelte error",e}else throw new Error("https://svelte.dev/e/hydration_failed")}function HC(e){if(z){let t=new Error(`props_invalid_value +Cannot do \`bind:${e}={undefined}\` when \`${e}\` has a fallback value +https://svelte.dev/e/props_invalid_value`);throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/props_invalid_value")}function UC(e){if(z){let t=new Error(`rune_outside_svelte +The \`${e}\` rune is only available inside \`.svelte\` and \`.svelte.js/ts\` files +https://svelte.dev/e/rune_outside_svelte`);throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/rune_outside_svelte")}function GC(){if(z){let e=new Error("state_descriptors_fixed\nProperty descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\nhttps://svelte.dev/e/state_descriptors_fixed");throw e.name="Svelte error",e}else throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function zC(){if(z){let e=new Error("state_prototype_fixed\nCannot set prototype of `$state` object\nhttps://svelte.dev/e/state_prototype_fixed");throw e.name="Svelte error",e}else throw new Error("https://svelte.dev/e/state_prototype_fixed")}function VC(){if(z){let e=new Error("state_unsafe_local_read\nReading state that was created inside the same derived is forbidden. Consider using `untrack` to read locally created state\nhttps://svelte.dev/e/state_unsafe_local_read");throw e.name="Svelte error",e}else throw new Error("https://svelte.dev/e/state_unsafe_local_read")}function WC(){if(z){let e=new Error("state_unsafe_mutation\nUpdating state inside a derived or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\nhttps://svelte.dev/e/state_unsafe_mutation");throw e.name="Svelte error",e}else throw new Error("https://svelte.dev/e/state_unsafe_mutation")}g();var Jn=!1,Qn=!1;g();g();g();var ac=null;function ei(e){let t=Error(),r=t.stack;if(r){let n=r.split(` +`),i=[` +`];for(let a=0;a<n.length;a++){let s=n[a];if(s!=="Error"){if(s.includes("validate_each_keys"))return null;s.includes("svelte/src/internal")||i.push(s)}}if(i.length===1)return null;Mt(t,"stack",{value:i.join(` +`)}),Mt(t,"name",{value:`${e}Error`})}return t}var Oa=new Set;function L0(e){Oa=e}function ut(e,t){var r={f:0,v:e,reactions:null,equals:bd,version:0};return z&&Qn&&(r.created=t!=null?t:ei("CreatedAt"),r.debug=null),r}function ft(e){return qB(ut(e))}function Ni(e,t=!1){var n,i;let r=ut(e);return t||(r.equals=io),Jn&&he!==null&&he.l!==null&&((i=(n=he.l).s)!=null?i:n.s=[]).push(r),r}function qB(e){return fe!==null&&fe.f&2&&(on===null?XC([e]):on.push(e)),e}function re(e,t){return fe!==null&&ji()&&fe.f&18&&(on===null||!on.includes(e))&&WC(),so(e,t)}function so(e,t){if(!e.equals(t)&&(e.v=t,e.version=_d(),z&&Qn&&(e.updated=ei("UpdatedAt")),YC(e,2048),ji()&&te!==null&&te.f&1024&&!(te.f&32)&&(At!==null&&At.includes(e)?(Xt(te,2048),oo(te)):ti===null?ZC([e]):ti.push(e)),z&&Oa.size>0)){let n=Array.from(Oa);var r=ri;ao(!0);try{for(let i of n)i.f&1024&&Xt(i,4096),Bi(i)&&Fa(i)}finally{ao(r)}Oa.clear()}return t}function YC(e,t){var r=e.reactions;if(r!==null)for(var n=ji(),i=r.length,a=0;a<i;a++){var s=r[a],o=s.f;if(!(o&2048)&&!(!n&&s===te)){if(z&&o&262144){Oa.add(s);continue}Xt(s,t),o&1280&&(o&2?YC(s,4096):oo(s))}}}g();g();g();var oc="font-weight: bold",lc="font-weight: normal";function KC(e,t,r){z?console.warn(`%c[svelte] hydration_attribute_changed +%cThe \`${e}\` attribute on \`${t}\` changed its value between server and client renders. The client value, \`${r}\`, will be ignored in favour of the server value +https://svelte.dev/e/hydration_attribute_changed`,oc,lc):console.warn("https://svelte.dev/e/hydration_attribute_changed")}function lo(e){z?console.warn(`%c[svelte] hydration_mismatch +%c${e?`Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${e}`:"Hydration failed because the initial UI does not match what was rendered on the server"} +https://svelte.dev/e/hydration_mismatch`,oc,lc):console.warn("https://svelte.dev/e/hydration_mismatch")}function JC(){z?console.warn(`%c[svelte] lifecycle_double_unmount +%cTried to unmount a component that was not mounted +https://svelte.dev/e/lifecycle_double_unmount`,oc,lc):console.warn("https://svelte.dev/e/lifecycle_double_unmount")}function D0(e,t){z?console.warn(`%c[svelte] ownership_invalid_mutation +%c${e?`${e} mutated a value owned by ${t}. This is strongly discouraged. Consider passing values to child components with \`bind:\`, or use a callback instead`:"Mutating a value outside the component that created it is strongly discouraged. Consider passing values to child components with `bind:`, or use a callback instead"} +https://svelte.dev/e/ownership_invalid_mutation`,oc,lc):console.warn("https://svelte.dev/e/ownership_invalid_mutation")}function xd(e){z?console.warn(`%c[svelte] state_proxy_equality_mismatch +%cReactive \`$state(...)\` proxies and the values they proxy have different identities. Because of this, comparisons with \`${e}\` will produce unexpected results +https://svelte.dev/e/state_proxy_equality_mismatch`,oc,lc):console.warn("https://svelte.dev/e/state_proxy_equality_mismatch")}var ae=!1;function or(e){ae=e}var ue;function Qe(e){if(e===null)throw lo(),Di;return ue=e}function Ot(){return Qe(It(ue))}function B(e){if(ae){if(It(ue)!==null)throw lo(),Di;ue=e}}function co(e=1){if(ae){for(var t=e,r=ue;t--;)r=It(r);ue=r}}function uo(){for(var e=0,t=ue;;){if(t.nodeType===8){var r=t.data;if(r===Pa){if(e===0)return t;e-=1}else(r===no||r===Ca)&&(e+=1)}var n=It(t);t.remove(),t=n}}g();g();g();var YB={},XB=/at (?:.+ \()?(.+):(\d+):(\d+)\)?$/,ZB=/@(.+):(\d+):(\d+)$/;function KB(){var r;let e=new Error().stack;if(!e)return null;let t=[];for(let n of e.split(` +`)){let i=(r=XB.exec(n))!=null?r:ZB.exec(n);i&&t.push({file:i[1],line:+i[2],column:+i[3]})}return t}function QC(){var t;let e=(t=KB())==null?void 0:t.slice(4);if(!e)return null;for(let r=0;r<e.length;r++){let n=e[r],i=YB[n.file];if(!i){if(r===0)return null;continue}for(let a of i){if(a.end==null)return null;if(a.start.line<n.line&&a.end.line>n.line)return a.component}}return null}var JB=Symbol("ADD_OWNER");function N0(e,t){if(t.owners!==null)for(;e;){if(e.owners===null){t.owners=null;break}for(let r of e.owners)t.owners.add(r);e=e.parent}}function e3(e,t){return e.owners===null?!0:e.owners.has(t)||e.parent!==null&&e3(e.parent,t)}function t3(e){var t,r;return(r=(t=e==null?void 0:e.owners)==null?void 0:t.values().next().value)!=null?r:t3(e.parent)}var QB=!1;function r3(e){if(QB)return;let t=QC();if(t&&!e3(e,t)){let r=t3(e);r[qt]!==t[qt]?D0(t[qt],r[qt]):D0()}}function be(e,t=null,r){var l,u;var n=null;if(z&&Qn&&(n=ei("CreatedAt")),typeof e!="object"||e===null||xr in e)return e;let i=Ra(e);if(i!==R0&&i!==IC)return e;var a=new Map,s=sn(e),o=ut(0);s&&a.set("length",ut(e.length,n));var c;if(z)if(c={parent:t,owners:null},r){let f=(u=(l=r.v)==null?void 0:l[Ma])==null?void 0:u.owners;c.owners=f?new Set(f):null}else c.owners=t===null?he!==null?new Set([he.function]):null:new Set;return new Proxy(e,{defineProperty(f,d,h){(!("value"in h)||h.configurable===!1||h.enumerable===!1||h.writable===!1)&&GC();var p=a.get(d);return p===void 0?(p=ut(h.value,n),a.set(d,p)):re(p,be(h.value,c)),!0},deleteProperty(f,d){var h=a.get(d);if(h===void 0)d in f&&a.set(d,ut(ct,n));else{if(s&&typeof d=="string"){var p=a.get("length"),m=Number(d);Number.isInteger(m)&&m<p.v&&re(p,m)}re(h,ct),n3(o)}return!0},get(f,d,h){var b;if(z&&d===Ma)return c;if(d===xr)return e;var p=a.get(d),m=d in f;if(p===void 0&&(!m||(b=Br(f,d))!=null&&b.writable)&&(p=ut(be(m?f[d]:ct,c),n),a.set(d,p)),p!==void 0){var v=R(p);if(z){var y=v==null?void 0:v[Ma];y&&(y==null?void 0:y.parent)!==c&&N0(c,y)}return v===ct?void 0:v}return Reflect.get(f,d,h)},getOwnPropertyDescriptor(f,d){var h=Reflect.getOwnPropertyDescriptor(f,d);if(h&&"value"in h){var p=a.get(d);p&&(h.value=R(p))}else if(h===void 0){var m=a.get(d),v=m==null?void 0:m.v;if(m!==void 0&&v!==ct)return{enumerable:!0,configurable:!0,value:v,writable:!0}}return h},has(f,d){var v;if(z&&d===Ma||d===xr)return!0;var h=a.get(d),p=h!==void 0&&h.v!==ct||Reflect.has(f,d);if(h!==void 0||te!==null&&(!p||(v=Br(f,d))!=null&&v.writable)){h===void 0&&(h=ut(p?be(f[d],c):ct,n),a.set(d,h));var m=R(h);if(m===ct)return!1}return p},set(f,d,h,p){var w;var m=a.get(d),v=d in f;if(s&&d==="length")for(var y=h;y<m.v;y+=1){var b=a.get(y+"");b!==void 0?re(b,ct):y in f&&(b=ut(ct,n),a.set(y+"",b))}if(m===void 0?(!v||(w=Br(f,d))!=null&&w.writable)&&(m=ut(void 0,n),re(m,be(h,c)),a.set(d,m)):(v=m.v!==ct,re(m,be(h,c))),z){var x=h==null?void 0:h[Ma];x&&(x==null?void 0:x.parent)!==c&&N0(c,x),r3(c)}var E=Reflect.getOwnPropertyDescriptor(f,d);if(E!=null&&E.set&&E.set.call(p,h),!v){if(s&&typeof d=="string"){var _=a.get("length"),k=Number(d);Number.isInteger(k)&&k>=_.v&&re(_,k+1)}n3(o)}return!0},ownKeys(f){R(o);var d=Reflect.ownKeys(f).filter(m=>{var v=a.get(m);return v===void 0||v.v!==ct});for(var[h,p]of a)p.v!==ct&&!(h in f)&&d.push(h);return d},setPrototypeOf(){zC()}})}function n3(e,t=1){re(e,e.v+t)}function Ed(e){return e!==null&&typeof e=="object"&&xr in e?e[xr]:e}function i3(){let e=Array.prototype,t=Array.__svelte_cleanup;t&&t();let{indexOf:r,lastIndexOf:n,includes:i}=e;e.indexOf=function(a,s){let o=r.call(this,a,s);if(o===-1){for(let c=s!=null?s:0;c<this.length;c+=1)if(Ed(this[c])===a){xd("array.indexOf(...)");break}}return o},e.lastIndexOf=function(a,s){let o=n.call(this,a,s!=null?s:this.length-1);if(o===-1){for(let c=0;c<=(s!=null?s:this.length-1);c+=1)if(Ed(this[c])===a){xd("array.lastIndexOf(...)");break}}return o},e.includes=function(a,s){let o=i.call(this,a,s);if(!o){for(let c=0;c<this.length;c+=1)if(Ed(this[c])===a){xd("array.includes(...)");break}}return o},Array.__svelte_cleanup=()=>{e.indexOf=r,e.lastIndexOf=n,e.includes=i}}var j0,a3,s3,o3;function Ad(){if(j0===void 0){j0=window,a3=document;var e=Element.prototype,t=Node.prototype;s3=Br(t,"firstChild").get,o3=Br(t,"nextSibling").get,e.__click=void 0,e.__className="",e.__attributes=null,e.__styles=null,e.__e=void 0,Text.prototype.__t=void 0,z&&(e.__svelte_meta=null,i3())}}function Vr(e=""){return document.createTextNode(e)}function kt(e){return s3.call(e)}function It(e){return o3.call(e)}function H(e,t){if(!ae)return kt(e);var r=kt(ue);if(r===null)r=ue.appendChild(Vr());else if(t&&r.nodeType!==3){var n=Vr();return r==null||r.before(n),Qe(n),n}return Qe(r),r}function cr(e,t){var i,a;if(!ae){var r=kt(e);return r instanceof Comment&&r.data===""?It(r):r}if(t&&((i=ue)==null?void 0:i.nodeType)!==3){var n=Vr();return(a=ue)==null||a.before(n),Qe(n),n}return ue}function Z(e,t=1,r=!1){let n=ae?ue:e;for(var i;t--;)i=n,n=It(n);if(!ae)return n;var a=n==null?void 0:n.nodeType;if(r&&a!==3){var s=Vr();return n===null?i==null||i.after(s):n.before(s),Qe(s),s}return Qe(n),n}function fo(e){e.textContent=""}g();function Ye(e){var i;var t=2050;te===null?t|=256:te.f|=1048576;var r=fe!==null&&fe.f&2?fe:null;let n={children:null,ctx:he,deps:null,equals:bd,f:t,fn:e,reactions:null,v:null,version:0,parent:r!=null?r:te};return z&&Qn&&(n.created=ei("CreatedAt")),r!==null&&((i=r.children)!=null?i:r.children=[]).push(n),n}function G0(e){let t=Ye(e);return t.equals=io,t}function H0(e){var t=e.children;if(t!==null){e.children=null;for(var r=0;r<t.length;r+=1){var n=t[r];n.f&2?cc(n):Ft(n)}}}var B0=[];function e7(e){for(var t=e.parent;t!==null;){if(!(t.f&2))return t;t=t.parent}return null}function z0(e){var t,r=te;if(it(e7(e)),z){let n=Oa;L0(new Set);try{B0.includes(e)&&$C(),B0.push(e),H0(e),t=kd(e)}finally{it(r),L0(n),B0.pop()}}else try{H0(e),t=kd(e)}finally{it(r)}return t}function V0(e){var t=z0(e),r=(ni||e.f&256)&&e.deps!==null?4096:1024;Xt(e,r),e.equals(t)||(e.v=t,e.version=_d())}function cc(e){H0(e),$a(e,0),Xt(e,16384),e.v=e.children=e.deps=e.ctx=e.reactions=null}function c3(e){te===null&&fe===null&&NC(e),fe!==null&&fe.f&256&&DC(),Cd&&LC(e)}function t7(e,t){var r=t.last;r===null?t.last=t.first=e:(r.next=e,e.prev=r,t.last=e)}function La(e,t,r,n=!0){var u;var i=(e&64)!==0,a=te;if(z)for(;a!==null&&a.f&262144;)a=a.parent;var s={ctx:he,deps:null,deriveds:null,nodes_start:null,nodes_end:null,f:e|2048,first:null,fn:t,last:null,next:null,parent:i?null:a,prev:null,teardown:null,transitions:null,version:0};if(z&&(s.component_function=zr),r){var o=ri;try{ao(!0),Fa(s),s.f|=32768}catch(f){throw Ft(s),f}finally{ao(o)}}else t!==null&&oo(s);var c=r&&s.deps===null&&s.first===null&&s.nodes_start===null&&s.teardown===null&&(s.f&1048576)===0;if(!c&&!i&&n&&(a!==null&&t7(s,a),fe!==null&&fe.f&2)){var l=fe;((u=l.children)!=null?u:l.children=[]).push(s)}return s}function qr(e){let t=La(8,null,!1);return Xt(t,1024),t.teardown=e,t}function $t(e){var i;c3("$effect");var t=te!==null&&(te.f&32)!==0&&he!==null&&!he.m;if(z&&Mt(e,"name",{value:"$effect"}),t){var r=he;((i=r.e)!=null?i:r.e=[]).push({fn:e,effect:te,reaction:fe})}else{var n=Sr(e);return n}}function X0(e){let t=La(64,e,!0);return()=>{Ft(t)}}function u3(e){let t=La(64,e,!0);return(r={})=>new Promise(n=>{r.outro?cn(t,()=>{Ft(t),n(void 0)}):(Ft(t),n(void 0))})}function Sr(e){return La(4,e,!1)}function lr(e){return La(8,e,!0)}function xe(e){return z&&Mt(e,"name",{value:"{expression}"}),ur(e)}function ur(e,t=0){return La(24|t,e,!0)}function Lt(e,t=!0){return La(40,e,!0,t)}function Z0(e){var t=e.teardown;if(t!==null){let r=Cd,n=fe;W0(!0),Tt(null);try{t.call(null)}finally{W0(r),Tt(n)}}}function K0(e){var t=e.deriveds;if(t!==null){e.deriveds=null;for(var r=0;r<t.length;r+=1)cc(t[r])}}function J0(e,t=!1){var r=e.first;for(e.first=e.last=null;r!==null;){var n=r.next;Ft(r,t),r=n}}function f3(e){for(var t=e.first;t!==null;){var r=t.next;t.f&32||Ft(t),t=r}}function Ft(e,t=!0){var r=!1;if((t||e.f&524288)&&e.nodes_start!==null){for(var n=e.nodes_start,i=e.nodes_end;n!==null;){var a=n===i?null:It(n);n.remove(),n=a}r=!0}J0(e,t&&!r),K0(e),$a(e,0),Xt(e,16384);var s=e.transitions;if(s!==null)for(let c of s)c.stop();Z0(e);var o=e.parent;o!==null&&o.first!==null&&Q0(e),z&&(e.component_function=null),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes_start=e.nodes_end=null}function Q0(e){var t=e.parent,r=e.prev,n=e.next;r!==null&&(r.next=n),n!==null&&(n.prev=r),t!==null&&(t.first===e&&(t.first=n),t.last===e&&(t.last=r))}function cn(e,t){var r=[];Td(e,r,!0),ev(r,()=>{Ft(e),t&&t()})}function ev(e,t){var r=e.length;if(r>0){var n=()=>--r||t();for(var i of e)i.out(n)}else t()}function Td(e,t,r){if(!(e.f&8192)){if(e.f^=8192,e.transitions!==null)for(let s of e.transitions)(s.is_global||r)&&t.push(s);for(var n=e.first;n!==null;){var i=n.next,a=(n.f&65536)!==0||(n.f&32)!==0;Td(n,t,a?r:!1),n=i}}}function Gi(e){d3(e,!0)}function d3(e,t){if(e.f&8192){Bi(e)&&Fa(e),e.f^=8192;for(var r=e.first;r!==null;){var n=r.next,i=(r.f&65536)!==0||(r.f&32)!==0;d3(r,i?t:!1),r=n}if(e.transitions!==null)for(let a of e.transitions)(a.is_global||t)&&a.in()}}g();var Pd=!1,p3=!1,tv=[],h3=[];function m3(){Pd=!1;let e=tv.slice();tv=[],yd(e)}function r7(){p3=!1;let e=h3.slice();h3=[],yd(e)}function fr(e){Pd||(Pd=!0,queueMicrotask(m3)),tv.push(e)}function g3(){Pd&&m3(),p3&&r7()}g();function uc(e){if(z){let t=new Error(`lifecycle_outside_component +\`${e}(...)\` can only be used during component initialisation +https://svelte.dev/e/lifecycle_outside_component`);throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/lifecycle_outside_component")}var x3=0,a7=1,v3=new WeakSet,Rd=!1,Md=x3,fc=!1,po=null,ri=!1,Cd=!1;function ao(e){ri=e}function W0(e){Cd=e}var Da=[],mo=0,dc=[],fe=null;function Tt(e){fe=e}var te=null;function it(e){te=e}var on=null;function XC(e){on=e}var At=null,Er=0,ti=null;function ZC(e){ti=e}var S3=1,ni=!1,sc=null;var he=null;var zr=null;function _d(){return++S3}function ji(){return!Jn||he!==null&&he.l===null}function Bi(e){var s,o,c,l;var t=e.f;if(t&2048)return!0;if(t&4096){var r=e.deps,n=(t&256)!==0;if(r!==null){var i;if(t&512){for(i=0;i<r.length;i++)((o=(s=r[i]).reactions)!=null?o:s.reactions=[]).push(e);e.f^=512}for(i=0;i<r.length;i++){var a=r[i];if(Bi(a)&&V0(a),n&&te!==null&&!ni&&!((c=a==null?void 0:a.reactions)!=null&&c.includes(e))&&((l=a.reactions)!=null?l:a.reactions=[]).push(e),a.version>e.version)return!0}}(!n||te!==null&&!ni)&&Xt(e,1024)}return!1}function y3(e,t){for(var r=t;r!==null;){if(r.f&128)try{r.fn(e);return}catch(n){r.f^=128}r=r.parent}throw Rd=!1,e}function w3(e){return(e.f&16384)===0&&(e.parent===null||(e.parent.f&128)===0)}function go(e,t,r,n){var u,f;if(Rd){if(r===null&&(Rd=!1),w3(t))throw e;return}if(r!==null&&(Rd=!0),!z||n===null||!(e instanceof Error)||v3.has(e)){y3(e,t);return}v3.add(e);let i=[],a=(u=t.fn)==null?void 0:u.name;a&&i.push(a);let s=n;for(;s!==null;){if(z){var o=(f=s.function)==null?void 0:f[qt];if(o){let d=o.split("/").pop();i.push(d)}}s=s.p}let c=/Firefox/.test(navigator.userAgent)?" ":" ";Mt(e,"message",{value:e.message+` +${i.map(d=>` +${c}in ${d}`).join("")} +`}),Mt(e,"component_stack",{value:i});let l=e.stack;if(l){let d=l.split(` +`),h=[];for(let p=0;p<d.length;p++){let m=d[p];m.includes("svelte/src/internal")||h.push(m)}Mt(e,"stack",{value:h.join(` +`)})}if(y3(e,t),w3(t))throw e}function kd(e){var d,h;var t=At,r=Er,n=ti,i=fe,a=ni,s=on,o=he,c=e.f;At=null,Er=0,ti=null,fe=c&96?null:e,ni=!ri&&(c&256)!==0,on=null,he=e.ctx;try{var l=(0,e.fn)(),u=e.deps;if(At!==null){var f;if($a(e,Er),u!==null&&Er>0)for(u.length=Er+At.length,f=0;f<At.length;f++)u[Er+f]=At[f];else e.deps=u=At;if(!ni)for(f=Er;f<u.length;f++)((h=(d=u[f]).reactions)!=null?h:d.reactions=[]).push(e)}else u!==null&&Er<u.length&&($a(e,Er),u.length=Er);return l}finally{At=t,Er=r,ti=n,fe=i,ni=a,on=s,he=o}}function s7(e,t){let r=t.reactions;if(r!==null){var n=r.indexOf(e);if(n!==-1){var i=r.length-1;i===0?r=t.reactions=null:(r[n]=r[i],r.pop())}}r===null&&t.f&2&&(At===null||!At.includes(t))&&(Xt(t,4096),t.f&768||(t.f^=512),$a(t,0))}function $a(e,t){var r=e.deps;if(r!==null)for(var n=t;n<r.length;n++)s7(e,r[n])}function Fa(e){var t=e.f;if(!(t&16384)){Xt(e,1024);var r=te,n=he;if(te=e,z){var i=zr;zr=e.component_function}try{t&16?f3(e):J0(e),K0(e),Z0(e);var a=kd(e);e.teardown=typeof a=="function"?a:null,e.version=S3,z&&dc.push(e)}catch(s){go(s,e,r,n||e.ctx)}finally{te=r,z&&(zr=i)}}}function b3(){console.error("Last ten effects were: ",dc.slice(-10).map(e=>e.fn)),dc=[]}function E3(){if(mo>1e3){mo=0;try{jC()}catch(e){if(z&&Mt(e,"stack",{value:""}),po!==null)if(z)try{go(e,po,null,null)}catch(t){throw b3(),t}else go(e,po,null,null);else throw z&&b3(),e}}mo++}function A3(e){var t=e.length;if(t!==0){E3();var r=ri;ri=!0;try{for(var n=0;n<t;n++){var i=e[n];i.f&1024||(i.f^=1024);var a=[];k3(i,a),o7(a)}}finally{ri=r}}}function o7(e){var t=e.length;if(t!==0)for(var r=0;r<t;r++){var n=e[r];if(!(n.f&24576))try{Bi(n)&&(Fa(n),n.deps===null&&n.first===null&&n.nodes_start===null&&(n.teardown===null?Q0(n):n.fn=null))}catch(i){go(i,n,null,n.ctx)}}}function l7(){if(fc=!1,mo>1001)return;let e=Da;Da=[],A3(e),fc||(mo=0,po=null,z&&(dc=[]))}function oo(e){Md===x3&&(fc||(fc=!0,queueMicrotask(l7))),po=e;for(var t=e;t.parent!==null;){t=t.parent;var r=t.f;if(r&96){if(!(r&1024))return;t.f^=1024}}Da.push(t)}function k3(e,t){var r=e.first,n=[];e:for(;r!==null;){var i=r.f,a=(i&32)!==0,s=a&&(i&1024)!==0,o=r.next;if(!s&&!(i&8192))if(i&8){if(a)r.f^=1024;else try{Bi(r)&&Fa(r)}catch(f){go(f,r,null,r.ctx)}var c=r.first;if(c!==null){r=c;continue}}else i&4&&n.push(r);if(o===null){let f=r.parent;for(;f!==null;){if(e===f)break e;var l=f.next;if(l!==null){r=l;continue e}f=f.parent}}r=o}for(var u=0;u<n.length;u++)c=n[u],t.push(c),k3(c,t)}function vo(e){var t=Md,r=Da;try{E3();let i=[];Md=a7,Da=i,fc=!1,A3(r);var n=e==null?void 0:e();return g3(),(Da.length>0||i.length>0)&&vo(),mo=0,po=null,z&&(dc=[]),n}finally{Md=t,Da=r}}function R(e){var f,d;var t=e.f,r=(t&2)!==0;if(r&&t&16384){var n=z0(e);return cc(e),n}if(sc!==null&&sc.add(e),fe!==null){on!==null&&on.includes(e)&&VC();var i=fe.deps;At===null&&i!==null&&i[Er]===e?Er++:At===null?At=[e]:At.push(e),ti!==null&&te!==null&&te.f&1024&&!(te.f&32)&&ti.includes(e)&&(Xt(te,2048),oo(te))}else if(r&&e.deps===null)for(var a=e,s=a.parent,o=a;s!==null;)if(s.f&2){var c=s;o=c,s=c.parent}else{var l=s;(f=l.deriveds)!=null&&f.includes(o)||((d=l.deriveds)!=null?d:l.deriveds=[]).push(o);break}if(r&&(a=e,Bi(a)&&V0(a)),z&&Qn&&ac!==null&&fe!==null&&ac.reaction===fe){if(e.debug)e.debug();else if(e.created){var u=ac.entries.get(e);u===void 0&&(u={read:[]},ac.entries.set(e,u)),u.read.push(ei("TracedAt"))}}return e.v}function Ue(e){let t=fe;try{return fe=null,e()}finally{fe=t}}var c7=-7169;function Xt(e,t){e.f=e.f&c7|t}function Xe(e,t=!1,r){he={p:he,c:null,e:null,m:!1,s:e,x:null,l:null},Jn&&!t&&(he.l={s:null,u:null,r1:[],r2:ut(!1)}),z&&(he.function=r,zr=r)}function Ze(e){var s,o;let t=he;if(t!==null){e!==void 0&&(t.x=e);let c=t.e;if(c!==null){var r=te,n=fe;t.e=null;try{for(var i=0;i<c.length;i++){var a=c[i];it(a.effect),Tt(a.reaction),Sr(a.fn)}}finally{it(r),Tt(n)}}he=t.p,z&&(zr=(o=(s=t.p)==null?void 0:s.function)!=null?o:null),t.m=!0}return e||{}}if(z){let e=function(t){if(!(t in globalThis)){let r;Object.defineProperty(globalThis,t,{configurable:!0,get:()=>{if(r!==void 0)return r;UC(t)},set:n=>{r=n}})}};e("$state"),e("$effect"),e("$derived"),e("$inspect"),e("$props"),e("$bindable")}g();var T3=new Map;function C3(e,t){var r=T3.get(e);r||(r=new Set,T3.set(e,r)),r.add(t)}g();g();g();g();g();g();function rv(e){ae&&kt(e)!==null&&fo(e)}var P3=!1;function nv(){P3||(P3=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{var t;if(!e.defaultPrevented)for(let r of e.target.elements)(t=r.__on_r)==null||t.call(r)})},{capture:!0}))}function Fd(e){var t=fe,r=te;Tt(null),it(null);try{return e()}finally{Tt(t),it(r)}}function iv(e,t,r,n=r){e.addEventListener(t,()=>Fd(r));let i=e.__on_r;i?e.__on_r=()=>{i(),n(!0)}:e.__on_r=()=>n(!0),nv()}var av=new Set,$d=new Set;function R3(e,t,r,n){function i(a){if(n.capture||yo.call(t,a),!a.cancelBubble)return Fd(()=>r.call(this,a))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?fr(()=>{t.addEventListener(e,i,n)}):t.addEventListener(e,i,n),i}function Ar(e,t,r,n,i){var a={capture:n,passive:i},s=R3(e,t,r,a);(t===document.body||t===window||t===document)&&qr(()=>{t.removeEventListener(e,s,a)})}function dt(e){for(var t=0;t<e.length;t++)av.add(e[t]);for(var r of $d)r(e)}function yo(e){var b;var t=this,r=t.ownerDocument,n=e.type,i=((b=e.composedPath)==null?void 0:b.call(e))||[],a=i[0]||e.target,s=0,o=e.__root;if(o){var c=i.indexOf(o);if(c!==-1&&(t===document||t===window)){e.__root=t;return}var l=i.indexOf(t);if(l===-1)return;c<=l&&(s=c)}if(a=i[s]||e.target,a!==t){Mt(e,"currentTarget",{configurable:!0,get(){return a||r}});var u=fe,f=te;Tt(null),it(null);try{for(var d,h=[];a!==null;){var p=a.assignedSlot||a.parentNode||a.host||null;try{var m=a["__"+n];if(m!==void 0&&!a.disabled)if(sn(m)){var[v,...y]=m;v.apply(a,[e,...y])}else m.call(a,e)}catch(x){d?h.push(x):d=x}if(e.cancelBubble||p===t||p===null)break;a=p}if(d){for(let x of h)queueMicrotask(()=>{throw x});throw d}}finally{e.__root=t,delete e.currentTarget,Tt(u),it(f)}}}g();var f7;function M3(){f7=void 0}g();g();function Ld(e){var t=document.createElement("template");return t.innerHTML=e,t.content}function Mn(e,t){var r=te;r.nodes_start===null&&(r.nodes_start=e,r.nodes_end=t)}function se(e,t){var r=(t&1)!==0,n=(t&2)!==0,i,a=!e.startsWith("<!>");return()=>{if(ae)return Mn(ue,null),ue;i===void 0&&(i=Ld(a?e:"<!>"+e),r||(i=kt(i)));var s=n?document.importNode(i,!0):i.cloneNode(!0);if(r){var o=kt(s),c=s.lastChild;Mn(o,c)}else Mn(s,s);return s}}function ii(){if(ae)return Mn(ue,null),ue;var e=document.createDocumentFragment(),t=document.createComment(""),r=Vr();return e.append(t,r),Mn(t,r),e}function ne(e,t){if(ae){te.nodes_end=ue,Ot();return}e!==null&&e.before(t)}var Dd=!0;function Oe(e,t){var n;var r=t==null?"":typeof t=="object"?t+"":t;r!==((n=e.__t)!=null?n:e.__t=e.nodeValue)&&(e.__t=r,e.nodeValue=r==null?"":r+"")}function zi(e,t){return O3(e,t)}function ov(e,t){var s;Ad(),t.intro=(s=t.intro)!=null?s:!1;let r=t.target,n=ae,i=ue;try{for(var a=kt(r);a&&(a.nodeType!==8||a.data!==no);)a=It(a);if(!a)throw Di;or(!0),Qe(a),Ot();let o=O3(e,{...t,anchor:a});if(ue===null||ue.nodeType!==8||ue.data!==Pa)throw lo(),Di;return or(!1),o}catch(o){if(o===Di)return t.recover===!1&&BC(),Ad(),fo(r),or(!1),zi(e,t);throw o}finally{or(n),Qe(i),M3()}}var wo=new Map;function O3(e,{target:t,anchor:r,props:n={},events:i,context:a,intro:s=!0}){Ad();var o=new Set,c=f=>{for(var d=0;d<f.length;d++){var h=f[d];if(!o.has(h)){o.add(h);var p=OC(h);t.addEventListener(h,yo,{passive:p});var m=wo.get(h);m===void 0?(document.addEventListener(h,yo,{passive:p}),wo.set(h,1)):wo.set(h,m+1)}}};c(ic(av)),$d.add(c);var l=void 0,u=u3(()=>{var f=r!=null?r:t.appendChild(Vr());return Lt(()=>{if(a){Xe({});var d=he;d.c=a}i&&(n.$$events=i),ae&&Mn(f,null),Dd=s,l=e(f,n)||{},Dd=!0,ae&&(te.nodes_end=ue),a&&Ze()}),()=>{var p;for(var d of o){t.removeEventListener(d,yo);var h=wo.get(d);--h===0?(document.removeEventListener(d,yo),wo.delete(d)):wo.set(d,h)}$d.delete(c),f!==r&&((p=f.parentNode)==null||p.removeChild(f))}});return sv.set(l,u),l}var sv=new WeakMap;function ai(e,t){let r=sv.get(e);return r?(sv.delete(e),r(t)):(z&&JC(),Promise.resolve())}g();g();g();g();function ge(e,t,r=!1){ae&&Ot();var n=e,i=null,a=null,s=ct,o=r?65536:0,c=!1;let l=(f,d=!0)=>{c=!0,u(d,f)},u=(f,d)=>{if(s===(s=f))return;let h=!1;if(ae){let p=n.data===Ca;!!s===p&&(n=uo(),Qe(n),or(!1),h=!0)}s?(i?Gi(i):d&&(i=Lt(()=>d(n))),a&&cn(a,()=>{a=null})):(a?Gi(a):d&&(a=Lt(()=>d(n))),i&&cn(i,()=>{i=null})),h&&or(!0)};ur(()=>{c=!1,t(l),c||u(null,null)},o),ae&&(n=ue)}g();g();g();var hc=null;function kr(e,t){return t}function w7(e,t,r,n){for(var i=[],a=t.length,s=0;s<a;s++)Td(t[s].e,i,!0);var o=a>0&&i.length===0&&r!==null;if(o){var c=r.parentNode;fo(c),c.append(r),n.clear(),Vi(e,t[0].prev,t[a-1].next)}ev(i,()=>{for(var l=0;l<a;l++){var u=t[l];o||(n.delete(u.k),Vi(e,u.prev,u.next)),Ft(u.e,!o)}})}function Tr(e,t,r,n,i,a=null){var s=e,o={flags:t,items:new Map,first:null},c=(t&4)!==0;if(c){var l=e;s=ae?Qe(kt(l)):l.appendChild(Vr())}ae&&Ot();var u=null,f=!1;ur(()=>{var d=r(),h=sn(d)?d:d==null?[]:ic(d),p=h.length;if(f&&p===0)return;f=p===0;let m=!1;if(ae){var v=s.data===Ca;v!==(p===0)&&(s=uo(),Qe(s),or(!1),m=!0)}if(ae){for(var y=null,b,x=0;x<p;x++){if(ue.nodeType===8&&ue.data===Pa){s=ue,m=!0,or(!1);break}var E=h[x],_=n(E,x);b=$3(ue,o,y,null,E,_,x,i,t,r),o.items.set(_,b),y=b}p>0&&Qe(uo())}if(!ae){var k=fe;b7(h,o,s,i,t,(k.f&8192)!==0,n,r)}a!==null&&(p===0?u?Gi(u):u=Lt(()=>a(s)):u!==null&&cn(u,()=>{u=null})),m&&or(!0),r()}),ae&&(s=ue)}function b7(e,t,r,n,i,a,s,o){var Q,de,ee,J;var c=(i&8)!==0,l=(i&3)!==0,u=e.length,f=t.items,d=t.first,h=d,p,m=null,v,y=[],b=[],x,E,_,k;if(c)for(k=0;k<u;k+=1)x=e[k],E=s(x,k),_=f.get(E),_!==void 0&&((Q=_.a)==null||Q.measure(),(v!=null?v:v=new Set).add(_));for(k=0;k<u;k+=1){if(x=e[k],E=s(x,k),_=f.get(E),_===void 0){var w=h?h.e.nodes_start:r;m=$3(w,t,m,m===null?t.first:m.next,x,E,k,n,i,o),f.set(E,m),y=[],b=[],h=m.next;continue}if(l&&_7(_,x,k,i),_.e.f&8192&&(Gi(_.e),c&&((de=_.a)==null||de.unfix(),(v!=null?v:v=new Set).delete(_))),_!==h){if(p!==void 0&&p.has(_)){if(y.length<b.length){var A=b[0],S;m=A.prev;var T=y[0],P=y[y.length-1];for(S=0;S<y.length;S+=1)I3(y[S],A,r);for(S=0;S<b.length;S+=1)p.delete(b[S]);Vi(t,T.prev,P.next),Vi(t,m,T),Vi(t,P,A),h=A,m=P,k-=1,y=[],b=[]}else p.delete(_),I3(_,h,r),Vi(t,_.prev,_.next),Vi(t,_,m===null?t.first:m.next),Vi(t,m,_),m=_;continue}for(y=[],b=[];h!==null&&h.k!==E;)(a||!(h.e.f&8192))&&(p!=null?p:p=new Set).add(h),b.push(h),h=h.next;if(h===null)continue;_=h}y.push(_),m=_,h=_.next}if(h!==null||p!==void 0){for(var O=p===void 0?[]:ic(p);h!==null;)(a||!(h.e.f&8192))&&O.push(h),h=h.next;var j=O.length;if(j>0){var D=i&4&&u===0?r:null;if(c){for(k=0;k<j;k+=1)(ee=O[k].a)==null||ee.measure();for(k=0;k<j;k+=1)(J=O[k].a)==null||J.fix()}w7(t,O,D,f)}}c&&fr(()=>{var Pe;if(v!==void 0)for(_ of v)(Pe=_.a)==null||Pe.apply()}),te.first=t.first&&t.first.e,te.last=m&&m.e}function _7(e,t,r,n){n&1&&so(e.v,t),n&2?so(e.i,r):e.i=r}function $3(e,t,r,n,i,a,s,o,c,l){var u=hc,f=(c&1)!==0,d=(c&16)===0,h=f?d?Ni(i):ut(i):i,p=c&2?ut(s):s;z&&f&&(h.debug=()=>{var v=typeof p=="number"?s:p.v;l()[v]});var m={i:p,v:h,k:a,a:null,e:null,prev:r,next:n};hc=m;try{return m.e=Lt(()=>o(e,h,p),ae),m.e.prev=r&&r.e,m.e.next=n&&n.e,r===null?t.first=m:(r.next=m,r.e.next=m.e),n!==null&&(n.prev=m,n.e.prev=m.e),m}finally{hc=u}}function I3(e,t,r){for(var n=e.next?e.next.e.nodes_start:r,i=t?t.e.nodes_start:r,a=e.e.nodes_start;a!==n;){var s=It(a);i.before(a),a=s}}function Vi(e,t,r){t===null?e.first=r:(t.next=r,t.e.next=r&&r.e),r!==null&&(r.prev=t,r.e.prev=t&&t.e)}g();g();g();g();g();g();function gt(e,t){fr(()=>{var i;var r=e.getRootNode(),n=r.host?r:(i=r.head)!=null?i:r.ownerDocument.head;if(!n.querySelector("#"+t.hash)){let a=document.createElement("style");a.id=t.hash,a.textContent=t.code,n.appendChild(a),z&&C3(t.hash,a)}})}g();g();g();g();g();function pe(e,t,r,n){var a;var i=(a=e.__attributes)!=null?a:e.__attributes={};if(ae&&(i[t]=e.getAttribute(t),t==="src"||t==="srcset"||t==="href"&&e.nodeName==="LINK")){n||k7(e,t,r!=null?r:"");return}i[t]!==(i[t]=r)&&(t==="style"&&"__styles"in e&&(e.__styles={}),t==="loading"&&(e[FC]=r),r==null?e.removeAttribute(t):typeof r!="string"&&A7(e).includes(t)?e[t]=r:e.setAttribute(t,r))}var D3=new Map;function A7(e){var t=D3.get(e.nodeName);if(t)return t;D3.set(e.nodeName,t=[]);for(var r,n=e,i=Element.prototype;i!==n;){r=P0(n);for(var a in r)r[a].set&&t.push(a);n=Ra(n)}return t}function k7(e,t,r){var n;z&&(t==="srcset"&&T7(e,r)||uv((n=e.getAttribute(t))!=null?n:"",r)||KC(t,e.outerHTML.replace(e.innerHTML,e.innerHTML&&"..."),String(r)))}function uv(e,t){return e===t?!0:new URL(e,document.baseURI).href===new URL(t,document.baseURI).href}function N3(e){return e.split(",").map(t=>t.trim().split(" ").filter(Boolean))}function T7(e,t){var r=N3(e.srcset),n=N3(t);return n.length===r.length&&n.every(([i,a],s)=>a===r[s][1]&&(uv(r[s][0],i)||uv(i,r[s][0])))}g();function at(e,t,r){if(r){if(e.classList.contains(t))return;e.classList.add(t)}else{if(!e.classList.contains(t))return;e.classList.remove(t)}}g();g();g();g();var C7=vd?()=>performance.now():()=>Date.now(),un={tick:e=>(vd?requestAnimationFrame:_r)(e),now:()=>C7(),tasks:new Set};function j3(){let e=un.now();un.tasks.forEach(t=>{t.c(e)||(un.tasks.delete(t),t.f())}),un.tasks.size!==0&&un.tick(j3)}function B3(e){let t;return un.tasks.size===0&&un.tick(j3),{promise:new Promise(r=>{un.tasks.add(t={c:e,f:r})}),abort(){un.tasks.delete(t)}}}function Nd(e,t){e.dispatchEvent(new CustomEvent(t))}function O7(e){if(e==="float")return"cssFloat";if(e==="offset")return"cssOffset";if(e.startsWith("--"))return e;let t=e.split("-");return t.length===1?t[0]:t[0]+t.slice(1).map(r=>r[0].toUpperCase()+r.slice(1)).join("")}function H3(e){let t={},r=e.split(";");for(let n of r){let[i,a]=n.split(":");if(!i||a===void 0)break;let s=O7(i.trim());t[s]=a.trim()}return t}var I7=e=>e;function fn(e,t,r,n){var b;var i=(e&1)!==0,a=(e&2)!==0,s=i&&a,o=(e&4)!==0,c=s?"both":i?"in":"out",l,u=t.inert,f,d;function h(){var _;var x=fe,E=te;Tt(null),it(null);try{return l!=null?l:l=r()(t,(_=n==null?void 0:n())!=null?_:{},{direction:c})}finally{Tt(x),it(E)}}var p={is_global:o,in(){var x;if(t.inert=u,!i){d==null||d.abort(),(x=d==null?void 0:d.reset)==null||x.call(d);return}a||f==null||f.abort(),Nd(t,"introstart"),f=fv(t,h(),d,1,()=>{Nd(t,"introend"),f==null||f.abort(),f=l=void 0})},out(x){if(!a){x==null||x(),l=void 0;return}t.inert=!0,Nd(t,"outrostart"),d=fv(t,h(),f,0,()=>{Nd(t,"outroend"),x==null||x()})},stop:()=>{f==null||f.abort(),d==null||d.abort()}},m=te;if(((b=m.transitions)!=null?b:m.transitions=[]).push(p),i&&Dd){var v=o;if(!v){for(var y=m.parent;y&&y.f&65536;)for(;(y=y.parent)&&!(y.f&16););v=!y||(y.f&32768)!==0}v&&Sr(()=>{Ue(()=>p.in())})}}function fv(e,t,r,n,i){var a=n===1;if(M0(t)){var s,o=!1;return fr(()=>{if(!o){var v=t({direction:a?"in":"out"});s=fv(e,v,r,n,i)}}),{abort:()=>{o=!0,s==null||s.abort()},deactivate:()=>s.deactivate(),reset:()=>s.reset(),t:()=>s.t()}}if(r==null||r.deactivate(),!(t!=null&&t.duration))return i(),{abort:_r,deactivate:_r,reset:_r,t:()=>n};let{delay:c=0,css:l,tick:u,easing:f=I7}=t;var d=[];if(a&&r===void 0&&(u&&u(0,1),l)){var h=H3(l(0,1));d.push(h,h)}var p=()=>1-n,m=e.animate(d,{duration:c});return m.onfinish=()=>{var A;var v=(A=r==null?void 0:r.t())!=null?A:1-n;r==null||r.abort();var y=n-v,b=t.duration*Math.abs(y),x=[];if(b>0){if(l)for(var E=Math.ceil(b/16.666666666666668),_=0;_<=E;_+=1){var k=v+y*f(_/E),w=l(k,1-k);x.push(H3(w))}p=()=>{var S=m.currentTime;return v+y*f(S/b)},u&&B3(()=>{if(m.playState!=="running")return!1;var S=p();return u(S,1-S),!0})}m=e.animate(x,{duration:b,fill:"forwards"}),m.onfinish=()=>{p=()=>n,u==null||u(n,1-n),i()}},{abort:()=>{m&&(m.cancel(),m.effect=null,m.onfinish=_r)},deactivate:()=>{i=_r},reset:()=>{n===0&&(u==null||u(1,0))},t:()=>p()}}g();g();function pv(e,t,r=t){var n=ji();iv(e,"input",i=>{z&&e.type==="checkbox"&&I0();var a=i?e.defaultValue:e.value;if(a=dv(e)?hv(a):a,r(a),n&&a!==(a=t())){var s=e.selectionStart,o=e.selectionEnd;e.value=a!=null?a:"",o!==null&&(e.selectionStart=s,e.selectionEnd=Math.min(o,e.value.length))}}),(ae&&e.defaultValue!==e.value||Ue(t)==null&&e.value)&&r(dv(e)?hv(e.value):e.value),lr(()=>{z&&e.type==="checkbox"&&I0();var i=t();dv(e)&&i===hv(e.value)||e.type==="date"&&!i&&!e.value||i!==e.value&&(e.value=i!=null?i:"")})}function dv(e){var t=e.type;return t==="number"||t==="range"}function hv(e){return e===""?null:+e}g();g();g();g();g();g();function U3(e,t){return e===t||(e==null?void 0:e[xr])===t}function Ge(e={},t,r,n){return Sr(()=>{var i,a;return lr(()=>{i=a,a=(n==null?void 0:n())||[],Ue(()=>{e!==r(...a)&&(t(e,...a),i&&U3(r(...i),e)&&t(null,...i))})}),()=>{fr(()=>{a&&U3(r(...a),e)&&t(null,...a)})}}),e}g();g();g();g();g();g();g();g();g();function mv(e){he===null&&uc("onMount"),Jn&&he.l!==null?B7(he).m.push(e):$t(()=>{let t=Ue(e);if(typeof t=="function")return t})}function G3(e){he===null&&uc("onDestroy"),mv(()=>()=>Ue(e))}function B7(e){var r;var t=e.l;return(r=t.u)!=null?r:t.u={a:[],b:[],m:[]}}var Bd=!1;function gv(e){var t=Bd;try{return Bd=!1,[e(),Bd]}finally{Bd=t}}function z3(e){for(var t=te,r=te;t!==null&&!(t.f&96);)t=t.parent;try{return it(t),e()}finally{it(r)}}function si(e,t,r,n){var w,A;var i=(r&1)!==0,a=!Jn||(r&2)!==0,s=(r&8)!==0,o=(r&16)!==0,c=!1,l;s?[l,c]=gv(()=>e[t]):l=e[t];var u=xr in e||wd in e,f=(A=(w=Br(e,t))==null?void 0:w.set)!=null?A:u&&s&&t in e?S=>e[t]=S:void 0,d=n,h=!0,p=!1,m=()=>(p=!0,h&&(h=!1,o?d=Ue(n):d=n),d);l===void 0&&n!==void 0&&(f&&a&&HC(t),l=m(),f&&f(l));var v;if(a)v=()=>{var S=e[t];return S===void 0?m():(h=!0,p=!1,S)};else{var y=z3(()=>(i?Ye:G0)(()=>e[t]));y.f|=131072,v=()=>{var S=R(y);return S!==void 0&&(d=void 0),S===void 0?d:S}}if(!(r&4))return v;if(f){var b=e.$$legacy;return function(S,T){return arguments.length>0?((!a||!T||b||c)&&f(T?v():S),S):v()}}var x=!1,E=!1,_=Ni(l),k=z3(()=>Ye(()=>{var S=v(),T=R(_);return x?(x=!1,E=!0,T):(E=!1,_.v=S)}));return i||(k.equals=io),function(S,T){if(sc!==null&&(x=E,v(),R(_)),arguments.length>0){let P=T?R(k):a&&s?be(S):S;return k.equals(P)||(x=!0,re(_,P),p&&d!==void 0&&(d=P),Ue(()=>R(k))),S}return R(k)}}g();g();g();g();function V3(e){return new vv(e)}var oi,Yr,vv=class{constructor(t){Pc(this,oi);Pc(this,Yr);var a,s;var r=new Map,n=(o,c)=>{var l=Ni(c);return r.set(o,l),l};let i=new Proxy({...t.props||{},$$events:{}},{get(o,c){var l;return R((l=r.get(c))!=null?l:n(c,Reflect.get(o,c)))},has(o,c){var l;return c===wd?!0:(R((l=r.get(c))!=null?l:n(c,Reflect.get(o,c))),Reflect.has(o,c))},set(o,c,l){var u;return re((u=r.get(c))!=null?u:n(c,l),l),Reflect.set(o,c,l)}});Rc(this,Yr,(t.hydrate?ov:zi)(t.component,{target:t.target,anchor:t.anchor,props:i,context:t.context,intro:(a=t.intro)!=null?a:!1,recover:t.recover})),(!((s=t==null?void 0:t.props)!=null&&s.$$host)||t.sync===!1)&&vo(),Rc(this,oi,i.$$events);for(let o of Object.keys(Bt(this,Yr)))o==="$set"||o==="$destroy"||o==="$on"||Mt(this,o,{get(){return Bt(this,Yr)[o]},set(c){Bt(this,Yr)[o]=c},enumerable:!0});Bt(this,Yr).$set=o=>{Object.assign(i,o)},Bt(this,Yr).$destroy=()=>{ai(Bt(this,Yr))}}$set(t){Bt(this,Yr).$set(t)}$on(t,r){Bt(this,oi)[t]=Bt(this,oi)[t]||[];let n=(...i)=>r.call(this,...i);return Bt(this,oi)[t].push(n),()=>{Bt(this,oi)[t]=Bt(this,oi)[t].filter(i=>i!==n)}}$destroy(){Bt(this,Yr).$destroy()}};oi=new WeakMap,Yr=new WeakMap;var Q7;typeof HTMLElement=="function"&&(Q7=class extends HTMLElement{constructor(t,r,n){super();Cr(this,"$$ctor");Cr(this,"$$s");Cr(this,"$$c");Cr(this,"$$cn",!1);Cr(this,"$$d",{});Cr(this,"$$r",!1);Cr(this,"$$p_d",{});Cr(this,"$$l",{});Cr(this,"$$l_u",new Map);Cr(this,"$$me");this.$$ctor=t,this.$$s=r,n&&this.attachShadow({mode:"open"})}addEventListener(t,r,n){if(this.$$l[t]=this.$$l[t]||[],this.$$l[t].push(r),this.$$c){let i=this.$$c.$on(t,r);this.$$l_u.set(r,i)}super.addEventListener(t,r,n)}removeEventListener(t,r,n){if(super.removeEventListener(t,r,n),this.$$c){let i=this.$$l_u.get(r);i&&(i(),this.$$l_u.delete(r))}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){let t=function(i){return a=>{let s=document.createElement("slot");i!=="default"&&(s.name=i),ne(a,s)}};if(await Promise.resolve(),!this.$$cn||this.$$c)return;let r={},n=e9(this);for(let i of this.$$s)i in n&&(i==="default"&&!this.$$d.children?(this.$$d.children=t(i),r.default=!0):r[i]=t(i));for(let i of this.attributes){let a=this.$$g_p(i.name);a in this.$$d||(this.$$d[a]=yv(a,i.value,this.$$p_d,"toProp"))}for(let i in this.$$p_d)!(i in this.$$d)&&this[i]!==void 0&&(this.$$d[i]=this[i],delete this[i]);this.$$c=V3({component:this.$$ctor,target:this.shadowRoot||this,props:{...this.$$d,$$slots:r,$$host:this}}),this.$$me=X0(()=>{lr(()=>{var i;this.$$r=!0;for(let a of C0(this.$$c)){if(!((i=this.$$p_d[a])!=null&&i.reflect))continue;this.$$d[a]=this.$$c[a];let s=yv(a,this.$$d[a],this.$$p_d,"toAttribute");s==null?this.removeAttribute(this.$$p_d[a].attribute||a):this.setAttribute(this.$$p_d[a].attribute||a,s)}this.$$r=!1})});for(let i in this.$$l)for(let a of this.$$l[i]){let s=this.$$c.$on(i,a);this.$$l_u.set(a,s)}this.$$l={}}}attributeChangedCallback(t,r,n){var i;this.$$r||(t=this.$$g_p(t),this.$$d[t]=yv(t,n,this.$$p_d,"toProp"),(i=this.$$c)==null||i.$set({[t]:this.$$d[t]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then(()=>{!this.$$cn&&this.$$c&&(this.$$c.$destroy(),this.$$me(),this.$$c=void 0)})}$$g_p(t){return C0(this.$$p_d).find(r=>this.$$p_d[r].attribute===t||!this.$$p_d[r].attribute&&r.toLowerCase()===t)||t}});function yv(e,t,r,n){var a;let i=(a=r[e])==null?void 0:a.type;if(t=i==="Boolean"&&typeof t!="boolean"?t!=null:t,!n||!r[e])return t;if(n==="toAttribute")switch(i){case"Object":case"Array":return t==null?null:JSON.stringify(t);case"Boolean":return t?"":null;case"Number":return t==null?null:t;default:return t}else switch(i){case"Object":case"Array":return t&&JSON.parse(t);case"Boolean":return t;case"Number":return t!=null?+t:t;default:return t}}function e9(e){let t={};return e.childNodes.forEach(r=>{t[r.slot||"default"]=!0}),t}g();g();g();function bo(e,t,r,n){function i(a){return a instanceof r?a:new r(function(s){s(a)})}return new(r||(r=Promise))(function(a,s){function o(u){try{l(n.next(u))}catch(f){s(f)}}function c(u){try{l(n.throw(u))}catch(f){s(f)}}function l(u){u.done?a(u.value):i(u.value).then(o,c)}l((n=n.apply(e,t||[])).next())})}var _v=require("obsidian");g();var wv=require("obsidian");g();function r9(e){let t=e-1;return t*t*t+1}function In(e,{delay:t=0,duration:r=400,easing:n=r9,axis:i="y"}={}){let a=getComputedStyle(e),s=+a.opacity,o=i==="y"?"height":"width",c=parseFloat(a[o]),l=i==="y"?["top","bottom"]:["left","right"],u=l.map(y=>`${y[0].toUpperCase()}${y.slice(1)}`),f=parseFloat(a[`padding${u[0]}`]),d=parseFloat(a[`padding${u[1]}`]),h=parseFloat(a[`margin${u[0]}`]),p=parseFloat(a[`margin${u[1]}`]),m=parseFloat(a[`border${u[0]}Width`]),v=parseFloat(a[`border${u[1]}Width`]);return{delay:t,duration:r,easing:n,css:y=>`overflow: hidden;opacity: ${Math.min(y*20,1)*s};${o}: ${y*c}px;padding-${l[0]}: ${y*f}px;padding-${l[1]}: ${y*d}px;margin-${l[0]}: ${y*h}px;margin-${l[1]}: ${y*p}px;border-${l[0]}-width: ${y*m}px;border-${l[1]}-width: ${y*v}px;`}}g();var pc=require("obsidian");var n9=se('<div data-icon="go-to-file" aria-label="Open File" class="clickable-icon"></div>'),i9=se('<main class="tree-item nav-file svelte-1wbh8tp"><div class="tree-item-self is-clickable nav-file-title svelte-1wbh8tp"><div class="tree-item-inner nav-file-title-content"> </div> <div class="git-tools"><div class="buttons"><!></div> <span class="type"> </span></div></div></main>'),a9={hash:"svelte-1wbh8tp",code:"main.svelte-1wbh8tp .nav-file-title:where(.svelte-1wbh8tp) {align-items:center;}"};function mc(e,t){Xe(t,!0),gt(e,a9);let r=be([]),n=Ye(()=>t.view.leaf.getRoot().side=="left"?"right":"left");$t(()=>{for(let y of r)y&&(0,pc.setIcon)(y,y.getAttr("data-icon"))});function i(y){y.stopPropagation(),zs(t.diff.path)?a(y):s(y)}function a(y){var b;y.stopPropagation();let x=t.view.app.vault.getAbstractFileByPath(t.diff.vaultPath);x instanceof pc.TFile&&((b=rn(t.view.app,y))===null||b===void 0||b.openFile(x).catch(E=>t.view.plugin.displayError(E)))}function s(y){var b;t.view.plugin.tools.openDiff({event:y,aFile:(b=t.diff.fromPath)!==null&&b!==void 0?b:t.diff.path,aRef:`${t.diff.hash}^`,bFile:t.diff.path,bRef:t.diff.hash})}var o=i9();o.__click=i;var c=H(o),l=H(c),u=H(l,!0);xe(()=>Oe(u,Tn(t.diff.vaultPath))),B(l);var f=Z(l,2),d=H(f),h=H(d);{var p=y=>{var b=n9();b.__click=a,Ge(b,x=>r[0]=x,()=>r==null?void 0:r[0]),Ar("auxclick",b,a),ne(y,b)};ge(h,y=>{t.view.app.vault.getAbstractFileByPath(t.diff.vaultPath)instanceof pc.TFile&&y(p)})}B(d);var m=Z(d,2),v=H(m,!0);B(m),B(f),B(c),B(o),xe(()=>{pe(c,"data-path",t.diff.vaultPath),pe(c,"data-tooltip-position",R(n)),pe(c,"aria-label",t.diff.vaultPath),pe(m,"data-type",t.diff.status),Oe(v,t.diff.status)}),Ar("auxclick",o,y=>{y.stopPropagation(),y.button==2?kn(t.view.app,y,t.diff.vaultPath,t.view.leaf,"git-history"):i(y)}),ne(e,o),Ze()}dt(["click"]);g();var s9=se("<div><!></div>"),o9=(e,t,r)=>t(R(r)),l9=se('<div class="tree-item-children nav-folder-children"><!></div>'),c9=se('<div class="tree-item nav-folder"><div class="tree-item-self is-clickable nav-folder-title"><div data-icon="folder" style="padding-right: 5px; display: flex; "></div> <div class="tree-item-icon nav-folder-collapse-indicator collapse-icon"><svg 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" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg></div> <div class="tree-item-inner nav-folder-title-content svelte-1lnl15d"> </div></div> <!></div>'),u9=se('<main class="svelte-1lnl15d"></main>'),f9={hash:"svelte-1lnl15d",code:"main.svelte-1lnl15d .nav-folder-title-content:where(.svelte-1lnl15d) {display:flex;align-items:center;}"};function gc(e,t){Xe(t,!0),gt(e,f9);let r=si(t,"topLevel",3,!1),n=be({}),i=Ye(()=>t.view.leaf.getRoot().side=="left"?"right":"left");function a(o){n[o.title]=!n[o.title]}var s=u9();Tr(s,21,()=>t.hierarchy.children,kr,(o,c)=>{var l=ii(),u=cr(l);{var f=h=>{var p=s9(),m=H(p);mc(m,{get diff(){return R(c).data},get view(){return t.view}}),B(p),ne(h,p)},d=h=>{var p=c9(),m=H(p);m.__click=[o9,a,c];var v=Z(H(m),2),y=Z(v,2),b=H(y,!0);B(y),B(m);var x=Z(m,2);{var E=_=>{var k=l9(),w=H(k);gc(w,{get hierarchy(){return R(c)},get plugin(){return t.plugin},get view(){return t.view}}),B(k),fn(3,k,()=>In,()=>({duration:150})),ne(_,k)};ge(x,_=>{n[R(c).title]||_(E)})}B(p),xe(()=>{at(p,"is-collapsed",n[R(c).title]),pe(m,"data-tooltip-position",R(i)),pe(m,"aria-label",R(c).vaultPath),at(v,"is-collapsed",n[R(c).title]),Oe(b,R(c).title)}),ne(h,p)};ge(u,h=>{R(c).data?h(f):h(d,!1)})}ne(o,l)}),B(s),xe(()=>at(s,"topLevel",r())),ne(e,s),Ze()}dt(["click"]);var d9=(e,t)=>re(t,!R(t)),h9=se('<div class="git-ref"> </div>'),p9=se('<div class="git-author"> </div>'),m9=se('<div class="git-date"> </div>'),g9=se('<div class="tree-item-children nav-folder-children"><!></div>'),v9=se('<main><div class="tree-item nav-folder"><div class="tree-item-self is-clickable nav-folder-title"><div class="tree-item-icon nav-folder-collapse-indicator collapse-icon"><svg 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" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg></div> <div><!> <!> <!> <div class="tree-item-inner nav-folder-title-content"> </div></div></div> <!></div></main>'),y9={hash:"svelte-45h",code:""};function bv(e,t){Xe(t,!0),gt(e,y9);let r=Ye(()=>({title:"",path:"",vaultPath:"",children:t.plugin.gitManager.getTreeStructure(t.log.diff.files)})),n=Ye(()=>t.view.leaf.getRoot().side=="left"?"right":"left"),i=ft(!0);function a(_){let k=_.author.name;if(t.plugin.settings.authorInHistoryView=="full")return k;if(t.plugin.settings.authorInHistoryView=="initials")return k.split(" ").filter(A=>A.length>0).map(A=>A[0].toUpperCase()).join("")}var s=v9(),o=H(s),c=H(o);xe(()=>{var _;return pe(c,"aria-label",`${t.log.refs.length>0?t.log.refs.join(", ")+` +`:""}${(_=t.log.author)==null?void 0:_.name} +${(0,wv.moment)(t.log.date).format(t.plugin.settings.commitDateFormat)} +${t.log.message}`)}),c.__click=[d9,i];var l=H(c),u=Z(l,2),f=H(u);{var d=_=>{var k=h9(),w=H(k,!0);xe(()=>Oe(w,t.log.refs.join(", "))),B(k),ne(_,k)};ge(f,_=>{t.log.refs.length>0&&_(d)})}var h=Z(f,2);{var p=_=>{var k=p9(),w=H(k,!0);xe(()=>Oe(w,a(t.log))),B(k),ne(_,k)};ge(h,_=>{var k;t.plugin.settings.authorInHistoryView!="hide"&&((k=t.log.author)!=null&&k.name)&&_(p)})}var m=Z(h,2);{var v=_=>{var k=m9(),w=H(k,!0);xe(()=>Oe(w,(0,wv.moment)(t.log.date).format(t.plugin.settings.commitDateFormat))),B(k),ne(_,k)};ge(m,_=>{t.plugin.settings.dateInHistoryView&&_(v)})}var y=Z(m,2),b=H(y,!0);B(y),B(u),B(c);var x=Z(c,2);{var E=_=>{var k=g9(),w=H(k);{var A=T=>{gc(T,{get hierarchy(){return R(r)},get plugin(){return t.plugin},get view(){return t.view},topLevel:!0})},S=T=>{var P=ii(),O=cr(P);Tr(O,17,()=>t.log.diff.files,kr,(j,D)=>{mc(j,{get view(){return t.view},get diff(){return R(D)}})}),ne(T,P)};ge(w,T=>{t.showTree?T(A):T(S,!1)})}B(k),fn(3,k,()=>In,()=>({duration:150})),ne(_,k)};ge(x,_=>{R(i)||_(E)})}B(o),B(s),xe(()=>{at(o,"is-collapsed",R(i)),pe(c,"data-tooltip-position",R(n)),at(l,"is-collapsed",R(i)),Oe(b,t.log.message)}),ne(e,s),Ze()}dt(["click"]);function w9(e,t){t().catch(console.error)}var b9=(e,t,r,n)=>{re(t,!R(t)),(0,_v.setIcon)(r[0],R(t)?"list":"folder"),n(n().settings.treeStructure=R(t),!0),n().saveSettings()},_9=se('<div class="tree-item nav-folder mod-root"></div>'),x9=se('<main><div class="nav-header"><div class="nav-buttons-container"><div id="layoutChange" class="clickable-icon nav-action-button" aria-label="Change Layout"></div> <div id="refresh" class="clickable-icon nav-action-button" data-icon="refresh-cw" aria-label="Refresh" style="margin: 1px;"></div></div></div> <div class="nav-files-container" style="position: relative;"><!></div> <div id="sentinel"></div> <div style="margin-bottom:40px"></div></main>'),S9={hash:"svelte-45h",code:""};function xv(e,t){Xe(t,!0),gt(e,S9);let r=si(t,"plugin",15),n=ft(!1),i=be([]),a=ft(void 0),s=ft(be(r().settings.treeStructure)),o,c;$t(()=>{c&&c.empty()}),o=t.view.app.workspace.on("obsidian-git:head-change",()=>void l().catch(console.error)),$t(()=>{i.forEach(x=>(0,_v.setIcon)(x,x.getAttr("data-icon")))}),G3(()=>{t.view.app.workspace.offref(o)}),mv(()=>{let x=new IntersectionObserver(_=>{_[0].isIntersecting&&!R(n)&&u().catch(console.error)}),E=document.querySelector("#sentinel");return E&&x.observe(E),()=>{x.disconnect()}}),l().catch(console.error);function l(){return bo(this,void 0,void 0,function*(){var x;if(!r().gitReady){re(a,void 0);return}re(n,!0);let E=r().gitManager instanceof Te,_;((x=R(a)===null||R(a)===void 0?void 0:R(a).length)!==null&&x!==void 0?x:0)==0?_=E?50:10:_=R(a).length,re(a,be(yield r().gitManager.log(void 0,!1,_))),re(n,!1)})}function u(){return bo(this,void 0,void 0,function*(){var x;if(!r().gitReady||R(a)===void 0)return;re(n,!0);let _=r().gitManager instanceof Te?50:10,k=yield r().gitManager.log(void 0,!1,_,(x=R(a).last())===null||x===void 0?void 0:x.hash);R(a).push(...k.slice(1)),re(n,!1)})}var f=x9(),d=H(f),h=H(d),p=H(h);p.__click=[b9,s,i,r],Ge(p,x=>i[0]=x,()=>i==null?void 0:i[0]);var m=Z(p,2);m.__click=[w9,l],Ge(m,x=>i[1]=x,()=>i==null?void 0:i[1]),B(h),B(d);var v=Z(d,2),y=H(v);{var b=x=>{var E=_9();Tr(E,21,()=>R(a),kr,(_,k)=>{bv(_,{get view(){return t.view},get showTree(){return R(s)},get log(){return R(k)},get plugin(){return r()}})}),B(E),ne(x,E)};ge(y,x=>{R(a)&&x(b)})}B(v),co(4),B(f),xe(()=>{pe(p,"data-icon",R(s)?"list":"folder"),at(m,"loading",R(n))}),ne(e,f),Ze()}dt(["click"]);var vc=class extends W3.ItemView{constructor(t,r){super(t),this.plugin=r,this.hoverPopover=null}getViewType(){return $r.type}getDisplayText(){return $r.name}getIcon(){return $r.icon}onClose(){return this._view&&ai(this._view),super.onClose()}reload(){this._view&&ai(this._view),this._view=zi(xv,{target:this.contentEl,props:{plugin:this.plugin,view:this}})}onOpen(){return this.reload(),super.onOpen()}};g();var q3=require("obsidian"),Hd=class extends q3.FuzzySuggestModal{constructor(r,n){super(r.app);this.branches=n;this.setPlaceholder("Select branch to checkout")}getItems(){return this.branches}getItemText(r){return r}onChooseItem(r,n){this.resolve(r)}openAndGetReslt(){return new Promise(r=>{this.resolve=r,this.open()})}onClose(){new Promise(r=>setTimeout(r,10)).then(()=>{this.resolve&&this.resolve(void 0)})}};g();var Q3=require("obsidian");g();var Ec=require("obsidian");g();var Y3=require("obsidian"),Wi=class extends Y3.Modal{constructor(r,n,i){super(r);this.deletion=n;this.filename=i;this.resolve=null}myOpen(){return this.open(),new Promise(r=>{this.resolve=r})}onOpen(){let{contentEl:r,titleEl:n}=this;n.setText(`${this.deletion?"Delete":"Discard"} this file?`),r.createEl("p").setText(`Do you really want to ${this.deletion?"delete":"discard the changes of"} "${this.filename}"`);let i=r.createDiv({cls:"modal-button-container"}),a=i.createEl("button",{cls:"mod-warning",text:this.deletion?"Delete":"Discard"});a.addEventListener("click",()=>{this.resolve&&this.resolve(!0),this.close()}),a.addEventListener("keypress",()=>{this.resolve&&this.resolve(!0),this.close()});let s=i.createEl("button",{text:"Cancel"});s.addEventListener("click",()=>(this.resolve&&this.resolve(!1),this.close())),s.addEventListener("keypress",()=>(this.resolve&&this.resolve(!1),this.close()))}onClose(){let{contentEl:r}=this;r.empty()}};g();var wc=require("obsidian");g();g();var E9=ze(X3()),qi=require("obsidian");function Na(e,t,r){let n=e.target;app.workspace.trigger("hover-link",{event:e,source:t.getViewType(),hoverParent:t,targetEl:n,linktext:r})}function A9(e,t){t.view.app.vault.getAbstractFileByPath(t.change.vaultPath)&&Na(e,t.view,t.change.vaultPath)}function k9(e,t){e.stopPropagation(),t.manager.stage(t.change.path,!1).catch(r=>t.view.plugin.displayError(r)).finally(()=>{t.view.app.workspace.trigger("obsidian-git:refresh")})}function T9(e,t){e.stopPropagation();let r=t.change.workingDir=="U";new Wi(t.view.app,r,t.change.vaultPath).myOpen().then(n=>{if(n===!0)return r?t.view.app.vault.adapter.remove(t.change.vaultPath).finally(()=>{t.view.app.workspace.trigger("obsidian-git:refresh")}):t.manager.discard(t.change.path).finally(()=>{t.view.app.workspace.trigger("obsidian-git:refresh")})},n=>t.view.plugin.displayError(n))}var C9=se('<div data-icon="go-to-file" aria-label="Open File" class="clickable-icon"></div>'),P9=se('<main class="tree-item nav-file svelte-1wbh8tp"><div class="tree-item-self is-clickable nav-file-title svelte-1wbh8tp"><div class="tree-item-inner nav-file-title-content"> </div> <div class="git-tools"><div class="buttons"><!> <div data-icon="undo" aria-label="Discard" class="clickable-icon"></div> <div data-icon="plus" aria-label="Stage" class="clickable-icon"></div></div> <div class="type"> </div></div></div></main>'),R9={hash:"svelte-1wbh8tp",code:"main.svelte-1wbh8tp .nav-file-title:where(.svelte-1wbh8tp) {align-items:center;}"};function bc(e,t){Xe(t,!0),gt(e,R9);let r=be([]),n=Ye(()=>t.view.leaf.getRoot().side=="left"?"right":"left");$t(()=>{for(let x of r)x&&(0,wc.setIcon)(x,x.getAttr("data-icon"))});function i(x){x.stopPropagation(),zs(t.change.path)?a(x):s(x)}function a(x){var E;x.stopPropagation();let _=t.view.app.vault.getAbstractFileByPath(t.change.vaultPath);_ instanceof wc.TFile&&((E=rn(t.view.app,x))===null||E===void 0||E.openFile(_).catch(k=>t.view.plugin.displayError(k)))}function s(x){x.stopPropagation(),t.view.plugin.tools.openDiff({aFile:t.change.path,aRef:"",event:x})}var o=P9();o.__mouseover=[A9,t],o.__click=i;var c=H(o),l=H(c),u=H(l,!0);xe(()=>Oe(u,Tn(t.change.vaultPath))),B(l);var f=Z(l,2),d=H(f),h=H(d);{var p=x=>{var E=C9();E.__click=a,Ge(E,_=>r[0]=_,()=>r==null?void 0:r[0]),Ar("auxclick",E,a),ne(x,E)};ge(h,x=>{t.view.app.vault.getAbstractFileByPath(t.change.vaultPath)instanceof wc.TFile&&x(p)})}var m=Z(h,2);m.__click=[T9,t],Ge(m,x=>r[1]=x,()=>r==null?void 0:r[1]);var v=Z(m,2);v.__click=[k9,t],Ge(v,x=>r[2]=x,()=>r==null?void 0:r[2]),B(d);var y=Z(d,2),b=H(y,!0);B(y),B(f),B(c),B(o),xe(()=>{pe(c,"data-path",t.change.vaultPath),pe(c,"data-tooltip-position",R(n)),pe(c,"aria-label",t.change.vaultPath),pe(y,"data-type",t.change.workingDir),Oe(b,t.change.workingDir)}),Ar("auxclick",o,x=>{x.stopPropagation(),x.button==2?kn(t.view.app,x,t.change.vaultPath,t.view.leaf,"git-source-control"):i(x)}),ne(e,o),Ze()}dt(["mouseover","click"]);g();var Z3=require("obsidian");function M9(e,t){t.view.app.vault.getAbstractFileByPath(t.change.vaultPath)&&Na(e,t.view,t.change.vaultPath)}var O9=se('<main class="tree-item nav-file svelte-1wbh8tp"><div class="tree-item-self is-clickable nav-file-title svelte-1wbh8tp"><div class="tree-item-inner nav-file-title-content"> </div> <div class="git-tools"><span class="type"> </span></div></div></main>'),I9={hash:"svelte-1wbh8tp",code:"main.svelte-1wbh8tp .nav-file-title:where(.svelte-1wbh8tp) {align-items:center;}"};function _c(e,t){Xe(t,!0),gt(e,I9);let r=Ye(()=>t.view.leaf.getRoot().side=="left"?"right":"left");function n(f){var d;f.stopPropagation();let h=t.view.app.vault.getAbstractFileByPath(t.change.vaultPath);h instanceof Z3.TFile&&((d=rn(t.view.app,f))===null||d===void 0||d.openFile(h).catch(p=>t.view.plugin.displayError(p)))}var i=O9();i.__mouseover=[M9,t],i.__click=n;var a=H(i),s=H(a),o=H(s,!0);xe(()=>Oe(o,Tn(t.change.vaultPath))),B(s);var c=Z(s,2),l=H(c),u=H(l,!0);B(l),B(c),B(a),B(i),xe(()=>{pe(a,"data-path",t.change.vaultPath),pe(a,"data-tooltip-position",R(r)),pe(a,"aria-label",t.change.vaultPath),pe(l,"data-type",t.change.workingDir),Oe(u,t.change.workingDir)}),Ar("auxclick",i,f=>{f.stopPropagation(),f.button==2?kn(t.view.app,f,t.change.vaultPath,t.view.leaf,"git-source-control"):n(f)}),ne(e,i),Ze()}dt(["mouseover","click"]);g();var xc=require("obsidian");function F9(e,t){t.view.app.vault.getFileByPath(t.change.vaultPath)&&Na(e,t.view,t.change.vaultPath)}function $9(e,t){e.stopPropagation(),t.manager.unstage(t.change.path,!1).catch(r=>t.view.plugin.displayError(r)).finally(()=>{t.view.app.workspace.trigger("obsidian-git:refresh")})}var L9=se('<div data-icon="go-to-file" aria-label="Open File" class="clickable-icon"></div>'),D9=se('<main class="tree-item nav-file svelte-1wbh8tp"><div class="tree-item-self is-clickable nav-file-title svelte-1wbh8tp"><div class="tree-item-inner nav-file-title-content"> </div> <div class="git-tools"><div class="buttons"><!> <div data-icon="minus" aria-label="Unstage" class="clickable-icon"></div></div> <div class="type"> </div></div></div></main>'),N9={hash:"svelte-1wbh8tp",code:"main.svelte-1wbh8tp .nav-file-title:where(.svelte-1wbh8tp) {align-items:center;}"};function Sc(e,t){Xe(t,!0),gt(e,N9);let r=be([]),n=Ye(()=>t.view.leaf.getRoot().side=="left"?"right":"left");$t(()=>{for(let b of r)b&&(0,xc.setIcon)(b,b.getAttr("data-icon"))});function i(b){b.stopPropagation(),zs(t.change.path)?a(b):s(b)}function a(b){var x;b.stopPropagation();let E=t.view.app.vault.getAbstractFileByPath(t.change.vaultPath);E instanceof xc.TFile&&((x=rn(t.view.app,b))===null||x===void 0||x.openFile(E).catch(_=>t.view.plugin.displayError(_)))}function s(b){b.stopPropagation(),t.view.plugin.tools.openDiff({aFile:t.change.path,aRef:"HEAD",bRef:"",event:b})}var o=D9();o.__mouseover=[F9,t],o.__click=i;var c=H(o),l=H(c),u=H(l,!0);xe(()=>Oe(u,Tn(t.change.vaultPath))),B(l);var f=Z(l,2),d=H(f),h=H(d);{var p=b=>{var x=L9();x.__click=a,Ge(x,E=>r[0]=E,()=>r==null?void 0:r[0]),ne(b,x)};ge(h,b=>{t.view.app.vault.getAbstractFileByPath(t.change.vaultPath)instanceof xc.TFile&&b(p)})}var m=Z(h,2);m.__click=[$9,t],Ge(m,b=>r[1]=b,()=>r==null?void 0:r[1]),B(d);var v=Z(d,2),y=H(v,!0);B(v),B(f),B(c),B(o),xe(()=>{pe(c,"data-path",t.change.vaultPath),pe(c,"data-tooltip-position",R(n)),pe(c,"aria-label",t.change.vaultPath),pe(v,"data-type",t.change.index),Oe(y,t.change.index)}),Ar("auxclick",o,b=>{b.stopPropagation(),b.button==2?kn(t.view.app,b,t.change.vaultPath,t.view.leaf,"git-source-control"):i(b)}),ne(e,o),Ze()}dt(["mouseover","click"]);g();g();var j9=se('<div class="tree-item nav-file"><div class="tree-item-self nav-file-title"><div class="tree-item-inner nav-file-title-content"> </div></div></div>'),B9=se("<main><!></main>");function ja(e,t){Xe(t,!0);var r=B9(),n=H(r);{var i=a=>{var s=j9(),o=H(s),c=H(o),l=H(c,!0);B(c),B(o),B(s),xe(()=>{pe(o,"aria-label","And "+(t.files.length-500)+" more files"),Oe(l,"And "+(t.files.length-500)+" more files")}),ne(a,s)};ge(n,a=>{t.files.length>500&&a(i)})}B(r),ne(e,r),Ze()}var U9=se("<div><!></div>"),G9=(e,t,r)=>t(R(r)),z9=(e,t,r)=>t(e,R(r).path),V9=se('<div data-icon="minus" aria-label="Unstage" class="clickable-icon"><svg width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-minus"><line x1="4" y1="9" x2="14" y2="9"></line></svg></div>'),W9=(e,t,r)=>t(e,R(r)),q9=(e,t,r)=>t(e,R(r).path),Y9=se('<div data-icon="undo" aria-label="Discard" class="clickable-icon"><svg 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" class="svg-icon lucide-undo"><path d="M3 7v6h6"></path><path d="M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13"></path></svg></div> <div data-icon="plus" aria-label="Stage" class="clickable-icon"><svg width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-plus"><line x1="9" y1="4" x2="9" y2="14"></line><line x1="4" y1="9" x2="14" y2="9"></line></svg></div>',1),X9=se('<div class="tree-item-children nav-folder-children"><!></div>'),Z9=se('<div class="tree-item nav-folder"><div class="tree-item-self is-clickable nav-folder-title svelte-hup5mn"><div data-icon="folder" style="padding-right: 5px; display: flex; "></div> <div class="tree-item-icon nav-folder-collapse-indicator collapse-icon"><svg 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" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg></div> <div class="tree-item-inner nav-folder-title-content"> </div> <div class="git-tools"><div class="buttons"><!> <div style="width:11px"></div></div></div></div> <!></div>'),K9=se('<main class="svelte-hup5mn"><!> <!></main>'),J9={hash:"svelte-hup5mn",code:"main.svelte-hup5mn .nav-folder-title:where(.svelte-hup5mn) {align-items:center;}"};function Ba(e,t){Xe(t,!0),gt(e,J9);var r,n;let i=si(t,"topLevel",3,!1),a=be({});for(let p of t.hierarchy.children)a[p.title]=((n=(r=p.children)===null||r===void 0?void 0:r.length)!==null&&n!==void 0?n:0)>100;let s=Ye(()=>t.view.leaf.getRoot().side=="left"?"right":"left");function o(p,m){p.stopPropagation(),t.plugin.gitManager.stageAll({dir:m}).catch(v=>t.plugin.displayError(v)).finally(()=>{t.view.app.workspace.trigger("obsidian-git:refresh")})}function c(p,m){p.stopPropagation(),t.plugin.gitManager.unstageAll({dir:m}).catch(v=>t.plugin.displayError(v)).finally(()=>{t.view.app.workspace.trigger("obsidian-git:refresh")})}function l(p,m){p.stopPropagation(),new Wi(t.view.app,!1,m.vaultPath).myOpen().then(v=>{if(v===!0)return t.plugin.gitManager.discardAll({dir:m.path,status:t.plugin.cachedStatus}).finally(()=>{t.view.app.workspace.trigger("obsidian-git:refresh")})},v=>t.plugin.displayError(v))}function u(p){a[p.title]=!a[p.title]}var f=K9(),d=H(f);Tr(d,17,()=>zl(t.hierarchy.children,500),kr,(p,m)=>{var v=ii(),y=cr(v);{var b=E=>{var _=U9(),k=H(_);{var w=S=>{Sc(S,{get change(){return R(m).data},get manager(){return t.plugin.gitManager},get view(){return t.view}})},A=S=>{var T=ii(),P=cr(T);{var O=D=>{bc(D,{get change(){return R(m).data},get manager(){return t.plugin.gitManager},get view(){return t.view}})},j=D=>{var Q=ii(),de=cr(Q);{var ee=J=>{_c(J,{get change(){return R(m).data},get view(){return t.view}})};ge(de,J=>{t.fileType==2&&J(ee)},!0)}ne(D,Q)};ge(P,D=>{t.fileType==1?D(O):D(j,!1)},!0)}ne(S,T)};ge(k,S=>{t.fileType==0?S(w):S(A,!1)})}B(_),ne(E,_)},x=E=>{var _=Z9();_.__click=[G9,u,m];var k=H(_),w=Z(H(k),2),A=Z(w,2),S=H(A,!0);B(A);var T=Z(A,2),P=H(T),O=H(P);{var j=ee=>{var J=V9();J.__click=[z9,c,m],ne(ee,J)},D=ee=>{var J=Y9(),Pe=cr(J);Pe.__click=[W9,l,m];var me=Z(Pe,2);me.__click=[q9,o,m],ne(ee,J)};ge(O,ee=>{t.fileType==0?ee(j):ee(D,!1)})}co(2),B(P),B(T),B(k);var Q=Z(k,2);{var de=ee=>{var J=X9(),Pe=H(J);Ba(Pe,{get hierarchy(){return R(m)},get plugin(){return t.plugin},get view(){return t.view},get fileType(){return t.fileType}}),B(J),fn(3,J,()=>In,()=>({duration:150})),ne(ee,J)};ge(Q,ee=>{a[R(m).title]||ee(de)})}B(_),xe(()=>{at(_,"is-collapsed",a[R(m).title]),pe(k,"data-tooltip-position",R(s)),pe(k,"aria-label",R(m).vaultPath),at(w,"is-collapsed",a[R(m).title]),Oe(S,R(m).title)}),Ar("auxclick",_,ee=>kn(t.view.app,ee,R(m).vaultPath,t.view.leaf,"git-source-control")),ne(E,_)};ge(y,E=>{R(m).data?E(b):E(x,!1)})}ne(p,v)});var h=Z(d,2);ja(h,{get files(){return t.hierarchy.children}}),B(f),xe(()=>at(f,"topLevel",i())),ne(e,f),Ze()}dt(["click"]);function Q9(e,t,r,n,i,a){return bo(this,void 0,void 0,function*(){if(re(t,!0),R(r)){if(yield n().tools.hasTooBigFiles(R(r).staged))return n().setPluginState({gitAction:0}),!1;n().promiseQueue.addTask(()=>n().gitManager.commit({message:R(i)}).then(()=>re(i,be(n().settings.commitMessage))).finally(a))}})}function eH(e,t,r,n,i,a){re(t,!0),R(r)&&n().promiseQueue.addTask(()=>n().commitAndSync(!1,!1,R(i)).then(()=>{re(i,be(n().settings.commitMessage))}).finally(a))}function K3(e,t,r,n,i){re(t,!0),r().promiseQueue.addTask(()=>r().gitManager.stageAll({status:R(n)}).finally(i))}function J3(e,t,r,n,i){re(t,!0),r().promiseQueue.addTask(()=>r().gitManager.unstageAll({status:R(n)}).finally(i))}function tH(e,t,r,n){re(t,!0),r().promiseQueue.addTask(()=>r().push().finally(n))}function rH(e,t,r,n){re(t,!0),r().promiseQueue.addTask(()=>r().pullChangesFromRemote().finally(n))}function nH(e,t,r){e.stopPropagation(),new Wi(t.view.app,!1,r().gitManager.getRelativeVaultPath("/")).myOpen().then(n=>{n===!0&&r().promiseQueue.addTask(()=>r().gitManager.discardAll({status:r().cachedStatus}).finally(()=>{t.view.app.workspace.trigger("obsidian-git:refresh")}))},console.error)}var iH=(e,t,r,n)=>{re(t,!R(t)),(0,Ec.setIcon)(r[6],R(t)?"list":"folder"),n().settings.treeStructure=R(t),n().saveSettings()},aH=(e,t)=>re(t,""),sH=se('<div class="git-commit-msg-clear-button svelte-11adhly"></div>'),oH=(e,t)=>re(t,!R(t)),lH=se("<!> <!>",1),cH=se('<div class="tree-item-children nav-folder-children"><!></div>'),uH=(e,t)=>re(t,!R(t)),fH=se("<!> <!>",1),dH=se('<div class="tree-item-children nav-folder-children"><!></div>'),hH=(e,t)=>re(t,!R(t)),pH=se("<!> <!>",1),mH=se('<div class="tree-item-children nav-folder-children"><!></div>'),gH=se('<div class="pulled nav-folder"><div class="tree-item-self is-clickable nav-folder-title svelte-11adhly"><div class="tree-item-icon nav-folder-collapse-indicator collapse-icon"><svg 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" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg></div> <div class="tree-item-inner nav-folder-title-content">Recently Pulled Files</div> <span class="tree-item-flair"> </span></div> <!></div>'),vH=se('<div class="tree-item nav-folder mod-root"><div class="staged tree-item nav-folder"><div class="tree-item-self is-clickable nav-folder-title svelte-11adhly"><div class="tree-item-icon nav-folder-collapse-indicator collapse-icon"><svg 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" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg></div> <div class="tree-item-inner nav-folder-title-content">Staged Changes</div> <div class="git-tools svelte-11adhly"><div class="buttons"><div data-icon="minus" aria-label="Unstage" class="clickable-icon"><svg width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-minus"><line x1="4" y1="9" x2="14" y2="9"></line></svg></div></div> <div class="files-count svelte-11adhly"> </div></div></div> <!></div> <div class="changes tree-item nav-folder"><div class="tree-item-self is-clickable nav-folder-title svelte-11adhly"><div class="tree-item-icon nav-folder-collapse-indicator collapse-icon"><svg 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" class="svg-icon right-triangle"><path d="M3 8L12 17L21 8"></path></svg></div> <div class="tree-item-inner nav-folder-title-content">Changes</div> <div class="git-tools svelte-11adhly"><div class="buttons"><div data-icon="undo" aria-label="Discard" class="clickable-icon"><svg 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" class="svg-icon lucide-undo"><path d="M3 7v6h6"></path><path d="M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13"></path></svg></div> <div data-icon="plus" aria-label="Stage" class="clickable-icon"><svg 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" class="svg-icon lucide-plus"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg></div></div> <div class="files-count svelte-11adhly"> </div></div></div> <!></div> <!></div>'),yH=se('<main class="svelte-11adhly"><div class="nav-header"><div class="nav-buttons-container"><div id="backup-btn" data-icon="arrow-up-circle" class="clickable-icon nav-action-button" aria-label="Commit-and-sync"></div> <div id="commit-btn" data-icon="check" class="clickable-icon nav-action-button" aria-label="Commit"></div> <div id="stage-all" class="clickable-icon nav-action-button" data-icon="plus-circle" aria-label="Stage all"></div> <div id="unstage-all" class="clickable-icon nav-action-button" data-icon="minus-circle" aria-label="Unstage all"></div> <div id="push" class="clickable-icon nav-action-button" data-icon="upload" aria-label="Push"></div> <div id="pull" class="clickable-icon nav-action-button" data-icon="download" aria-label="Pull"></div> <div id="layoutChange" class="clickable-icon nav-action-button" aria-label="Change Layout"></div> <div id="refresh" class="clickable-icon nav-action-button" data-icon="refresh-cw" aria-label="Refresh" style="margin: 1px;"></div></div></div> <div class="git-commit-msg svelte-11adhly"><textarea class="commit-msg-input svelte-11adhly" spellcheck="true" placeholder="Commit Message"></textarea> <!></div> <div class="nav-files-container" style="position: relative;"><!></div></main>'),wH={hash:"svelte-11adhly",code:`.commit-msg-input.svelte-11adhly {width:100%;overflow:hidden;resize:none;padding:7px 5px;background-color:var(--background-modifier-form-field);}.git-commit-msg.svelte-11adhly {position:relative;padding:0;width:calc(100% - var(--size-4-8));margin:4px auto;}main.svelte-11adhly .git-tools:where(.svelte-11adhly) .files-count:where(.svelte-11adhly) {padding-left:var(--size-2-1);width:11px;display:flex;align-items:center;justify-content:center;}.nav-folder-title.svelte-11adhly {align-items:center;}.git-commit-msg-clear-button.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: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,<svg viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M6 12C9.31371 12 12 9.31371 12 6C12 2.68629 9.31371 0 6 0C2.68629 0 0 2.68629 0 6C0 9.31371 2.68629 12 6 12ZM3.8705 3.09766L6.00003 5.22718L8.12955 3.09766L8.9024 3.8705L6.77287 6.00003L8.9024 8.12955L8.12955 8.9024L6.00003 6.77287L3.8705 8.9024L3.09766 8.12955L5.22718 6.00003L3.09766 3.8705L3.8705 3.09766Z' fill='currentColor'/></svg>");mask-repeat:no-repeat;-webkit-mask-image:url("data:image/svg+xml,<svg viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M6 12C9.31371 12 12 9.31371 12 6C12 2.68629 9.31371 0 6 0C2.68629 0 0 2.68629 0 6C0 9.31371 2.68629 12 6 12ZM3.8705 3.09766L6.00003 5.22718L8.12955 3.09766L8.9024 3.8705L6.77287 6.00003L8.9024 8.12955L8.12955 8.9024L6.00003 6.77287L3.8705 8.9024L3.09766 8.12955L5.22718 6.00003L3.09766 3.8705L3.8705 3.09766Z' fill='currentColor'/></svg>");-webkit-mask-repeat:no-repeat;}`};function Ev(e,t){Xe(t,!0),gt(e,wH);let r=si(t,"plugin",7),n=ft(!1),i=ft(void 0),a=ft(be([])),s=ft(be(r().settings.commitMessage)),o=be([]),c=ft(void 0),l=ft(void 0),u=ft(void 0),f=ft(!0),d=ft(!0),h=ft(!0),p=ft(0),m=ft(be(r().settings.treeStructure));t.view.registerEvent(t.view.app.workspace.on("obsidian-git:loading-status",()=>re(n,!0))),t.view.registerEvent(t.view.app.workspace.on("obsidian-git:status-changed",()=>void v().catch(console.error))),t.view.plugin.cachedStatus==null?t.view.plugin.refresh().catch(console.error):v().catch(console.error),$t(()=>{o.forEach(F=>(0,Ec.setIcon)(F,F.getAttr("data-icon")))}),$t(()=>{o.forEach(F=>{var G,N;!F||F.id!="push"||(Ec.Platform.isMobile?(F.removeClass("button-border"),R(p)>0&&F.addClass("button-border")):((G=F.firstElementChild)===null||G===void 0||G.removeAttribute("color"),R(p)>0&&((N=F.firstElementChild)===null||N===void 0||N.setAttr("color","var(--text-accent)"))))})});function v(){return bo(this,void 0,void 0,function*(){if(!r().gitReady){re(i,void 0);return}if(re(p,be(yield r().gitManager.getUnpushedCommits())),re(i,be(r().cachedStatus)),re(n,!1),r().lastPulledFiles&&r().lastPulledFiles!=R(a)&&(re(a,be(r().lastPulledFiles)),re(u,be({title:"",path:"",vaultPath:"",children:r().gitManager.getTreeStructure(R(a))}))),R(i)){let F=(G,N)=>G.vaultPath.split("/").last().localeCompare(Tn(N.vaultPath));R(i).changed.sort(F),R(i).staged.sort(F),re(c,be({title:"",path:"",vaultPath:"",children:r().gitManager.getTreeStructure(R(i).changed)})),re(l,be({title:"",path:"",vaultPath:"",children:r().gitManager.getTreeStructure(R(i).staged)}))}else re(c,void 0),re(l,void 0)})}function y(){t.view.app.workspace.trigger("obsidian-git:refresh")}let b=Ye(()=>(R(s).match(/\n/g)||[]).length+1||1);var x=yH(),E=H(x),_=H(E),k=H(_);k.__click=[eH,n,i,r,s,y],Ge(k,F=>o[0]=F,()=>o==null?void 0:o[0]);var w=Z(k,2);w.__click=[Q9,n,i,r,s,y],Ge(w,F=>o[1]=F,()=>o==null?void 0:o[1]);var A=Z(w,2);A.__click=[K3,n,r,i,y],Ge(A,F=>o[2]=F,()=>o==null?void 0:o[2]);var S=Z(A,2);S.__click=[J3,n,r,i,y],Ge(S,F=>o[3]=F,()=>o==null?void 0:o[3]);var T=Z(S,2);T.__click=[tH,n,r,y],Ge(T,F=>o[4]=F,()=>o==null?void 0:o[4]);var P=Z(T,2);P.__click=[rH,n,r,y],Ge(P,F=>o[5]=F,()=>o==null?void 0:o[5]);var O=Z(P,2);O.__click=[iH,m,o,r],Ge(O,F=>o[6]=F,()=>o==null?void 0:o[6]);var j=Z(O,2);j.__click=y,Ge(j,F=>o[7]=F,()=>o==null?void 0:o[7]),B(_),B(E);var D=Z(E,2),Q=H(D);rv(Q);var de=Z(Q,2);{var ee=F=>{var G=sH();G.__click=[aH,s],pe(G,"aria-label","Clear"),ne(F,G)};ge(de,F=>{R(s)&&F(ee)})}B(D);var J=Z(D,2),Pe=H(J);{var me=F=>{var G=vH(),N=H(G),Me=H(N);Me.__click=[oH,d];var Dt=H(Me),_t=Z(Dt,4),Ee=H(_t),st=H(Ee);st.__click=[J3,n,r,i,y],Ge(st,Nt=>o[8]=Nt,()=>o==null?void 0:o[8]),B(Ee);var ot=Z(Ee,2),Ct=H(ot,!0);B(ot),B(_t),B(Me);var $e=Z(Me,2);{var U=Nt=>{var Zt=cH(),li=H(Zt);{var Va=jt=>{Ba(jt,{get hierarchy(){return R(l)},get plugin(){return r()},get view(){return t.view},get fileType(){return 0},topLevel:!0})},Po=jt=>{var Yi=lH(),$n=cr(Yi);Tr($n,17,()=>zl(R(i).staged,500),kr,(Ro,Mo)=>{Sc(Ro,{get change(){return R(Mo)},get view(){return t.view},get manager(){return r().gitManager}})});var ci=Z($n,2);ja(ci,{get files(){return R(i).staged}}),ne(jt,Yi)};ge(li,jt=>{R(m)?jt(Va):jt(Po,!1)})}B(Zt),fn(3,Zt,()=>In,()=>({duration:150})),ne(Nt,Zt)};ge($e,Nt=>{R(d)&&Nt(U)})}B(N);var Le=Z(N,2),L=H(Le);L.__click=[uH,f];var Y=H(L),ye=Z(Y,4),De=H(ye),vt=H(De);vt.__click=[nH,t,r];var za=Z(vt,2);za.__click=[K3,n,r,i,y],Ge(za,Nt=>o[9]=Nt,()=>o==null?void 0:o[9]),B(De);var Lv=Z(De,2),IP=H(Lv,!0);B(Lv),B(ye),B(L);var FP=Z(L,2);{var $P=Nt=>{var Zt=dH(),li=H(Zt);{var Va=jt=>{Ba(jt,{get hierarchy(){return R(c)},get plugin(){return r()},get view(){return t.view},get fileType(){return 1},topLevel:!0})},Po=jt=>{var Yi=fH(),$n=cr(Yi);Tr($n,17,()=>zl(R(i).changed,500),kr,(Ro,Mo)=>{bc(Ro,{get change(){return R(Mo)},get view(){return t.view},get manager(){return r().gitManager}})});var ci=Z($n,2);ja(ci,{get files(){return R(i).changed}}),ne(jt,Yi)};ge(li,jt=>{R(m)?jt(Va):jt(Po,!1)})}B(Zt),fn(3,Zt,()=>In,()=>({duration:150})),ne(Nt,Zt)};ge(FP,Nt=>{R(f)&&Nt($P)})}B(Le);var LP=Z(Le,2);{var DP=Nt=>{var Zt=gH(),li=H(Zt);li.__click=[hH,h];var Va=Z(H(li),4),Po=H(Va,!0);B(Va),B(li);var jt=Z(li,2);{var Yi=$n=>{var ci=mH(),Ro=H(ci);{var Mo=Wa=>{Ba(Wa,{get hierarchy(){return R(u)},get plugin(){return r()},get view(){return t.view},get fileType(){return 2},topLevel:!0})},NP=Wa=>{var Dv=pH(),Nv=cr(Dv);Tr(Nv,17,()=>R(a),kr,(BP,HP)=>{_c(BP,{get change(){return R(HP)},get view(){return t.view}})});var jP=Z(Nv,2);ja(jP,{get files(){return R(a)}}),ne(Wa,Dv)};ge(Ro,Wa=>{R(m)?Wa(Mo):Wa(NP,!1)})}B(ci),fn(3,ci,()=>In,()=>({duration:150})),ne($n,ci)};ge(jt,$n=>{R(h)&&$n(Yi)})}B(Zt),xe(()=>{at(Zt,"is-collapsed",!R(h)),Oe(Po,R(a).length)}),ne(Nt,Zt)};ge(LP,Nt=>{R(a).length>0&&R(u)&&Nt(DP)})}B(G),xe(()=>{at(N,"is-collapsed",!R(d)),at(Dt,"is-collapsed",!R(d)),Oe(Ct,R(i).staged.length),at(Le,"is-collapsed",!R(f)),at(Y,"is-collapsed",!R(f)),Oe(IP,R(i).changed.length)}),ne(F,G)};ge(Pe,F=>{R(i)&&R(l)&&R(c)&&F(me)})}B(J),B(x),xe(()=>{pe(x,"data-type",St.type),pe(O,"data-icon",R(m)?"list":"folder"),at(j,"loading",R(n)),pe(Q,"rows",R(b))}),pv(Q,()=>R(s),F=>re(s,F)),ne(e,x),Ze()}dt(["click"]);var Ac=class extends Q3.ItemView{constructor(t,r){super(t),this.plugin=r,this.hoverPopover=null}getViewType(){return St.type}getDisplayText(){return St.name}getIcon(){return St.icon}onClose(){return this._view&&ai(this._view),super.onClose()}reload(){this._view&&ai(this._view),this._view=zi(Ev,{target:this.contentEl,props:{plugin:this.plugin,view:this}})}onOpen(){return this.reload(),super.onOpen()}};g();var Ud=class{constructor(t,r){this.statusBarEl=t;this.plugin=r;this.statusBarEl.addClass("mod-clickable"),this.statusBarEl.onClickEvent(n=>{this.plugin.switchBranch().catch(i=>r.displayError(i))})}async display(){if(this.plugin.gitReady){let t=await this.plugin.gitManager.branchInfo();t.current!=null?this.statusBarEl.setText(t.current):this.statusBarEl.empty()}else this.statusBarEl.empty()}remove(){this.statusBarEl.remove()}};g();var _o=require("obsidian");var kc=class{constructor(t){this.plugin=t}async hasTooBigFiles(t){let r=await this.plugin.gitManager.branchInfo(),n=r.tracking?Ii(r.tracking)[0]:null;if(!n)return!1;let i=await this.plugin.gitManager.getRemoteUrl(n);if(i!=null&&i.includes("github.com")){let a=[],s=this.plugin.gitManager;for(let o of t){let c=this.plugin.app.vault.getAbstractFileByPath(o.vaultPath),l=!1;if(c instanceof _o.TFile)c.stat.size>=1e8&&(l=!0);else{let u=await this.plugin.app.vault.adapter.stat(o.vaultPath);u&&u.size>=1e8&&(l=!0)}if(l){let u=!1;s instanceof Te&&(u=await s.isFileTrackedByLFS(o.path)),u||a.push(o)}}if(a.length>0)return this.plugin.displayError(`Aborted commit, because the following files are too big: +- ${a.map(o=>o.vaultPath).join(` +- `)} +Please remove them or add to .gitignore.`),!0}return!1}async writeAndOpenFile(t){t!==void 0&&await this.plugin.app.vault.adapter.write(Ms,t);let r=!1;this.plugin.app.workspace.iterateAllLeaves(n=>{n.getDisplayText()!=""&&Ms.startsWith(n.getDisplayText())&&(r=!0)}),r||await this.plugin.app.workspace.openLinkText(Ms,"/",!0)}openDiff({aFile:t,bFile:r,aRef:n,bRef:i,event:a}){var c,l;let s=this.plugin.settings.diffStyle;_o.Platform.isMobileApp&&(s="git_unified");let o={aFile:t,bFile:r!=null?r:t,aRef:n,bRef:i};s=="split"?(c=rn(this.plugin.app,a))==null||c.setViewState({type:Ai.type,active:!0,state:o}):s=="git_unified"&&((l=rn(this.plugin.app,a))==null||l.setViewState({type:ki.type,active:!0,state:o}))}async runRawCommand(){let t=this.plugin.gitManager;if(!(t instanceof Te))return;let n=await new Fe(this.plugin,{placeholder:"push origin master",allowEmpty:!1}).openAndGetResult();n!==void 0&&this.plugin.promiseQueue.addTask(async()=>{let i=new _o.Notice(`Running '${n}'...`,999999);try{let a=await t.rawCommand(n);a?(i.setMessage(a),window.setTimeout(()=>i.hide(),5e3)):i.hide()}catch(a){throw i.hide(),a}})}};g();var To=require("obsidian");var Xr=require("@codemirror/view"),ko=require("@codemirror/state");g();var Re=require("@codemirror/view"),Se=require("@codemirror/state");g();var Av="\u037C",eP=typeof Symbol=="undefined"?"__"+Av:Symbol.for(Av),kv=typeof Symbol=="undefined"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),tP=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:{},Gd=class{constructor(t,r){this.rules=[];let{finish:n}=r||{};function i(s){return/^@/.test(s)?[s]:s.split(/,\s*/)}function a(s,o,c,l){let u=[],f=/^@(\w+)\b/.exec(s[0]),d=f&&f[1]=="keyframes";if(f&&o==null)return c.push(s[0]+";");for(let h in o){let p=o[h];if(/&/.test(h))a(h.split(/,\s*/).map(m=>s.map(v=>m.replace(/&/,v))).reduce((m,v)=>m.concat(v)),p,c);else if(p&&typeof p=="object"){if(!f)throw new RangeError("The value of a property ("+h+") should be a primitive value.");a(i(h),p,u,d)}else p!=null&&u.push(h.replace(/_.*/,"").replace(/[A-Z]/g,m=>"-"+m.toLowerCase())+": "+p+";")}(u.length||d)&&c.push((n&&!f&&!l?s.map(n):s).join(", ")+" {"+u.join(" ")+"}")}for(let s in t)a(i(s),t[s],this.rules)}getRules(){return this.rules.join(` +`)}static newName(){let t=tP[eP]||1;return tP[eP]=t+1,Av+t.toString(36)}static mount(t,r,n){let i=t[kv],a=n&&n.nonce;i?a&&i.setNonce(a):i=new Tv(t,a),i.mount(Array.isArray(r)?r:[r],t)}},rP=new Map,Tv=class{constructor(t,r){let n=t.ownerDocument||t,i=n.defaultView;if(!t.head&&t.adoptedStyleSheets&&i.CSSStyleSheet){let a=rP.get(n);if(a)return t[kv]=a;this.sheet=new i.CSSStyleSheet,rP.set(n,this)}else this.styleTag=n.createElement("style"),r&&this.styleTag.setAttribute("nonce",r);this.modules=[],t[kv]=this}mount(t,r){let n=this.sheet,i=0,a=0;for(let s=0;s<t.length;s++){let o=t[s],c=this.modules.indexOf(o);if(c<a&&c>-1&&(this.modules.splice(c,1),a--,c=-1),c==-1){if(this.modules.splice(a++,0,o),n)for(let l=0;l<o.rules.length;l++)n.insertRule(o.rules[l],i++)}else{for(;a<c;)i+=this.modules[a++].rules.length;i+=o.rules.length,a++}}if(n)r.adoptedStyleSheets.indexOf(this.sheet)<0&&(r.adoptedStyleSheets=[this.sheet,...r.adoptedStyleSheets]);else{let s="";for(let c=0;c<this.modules.length;c++)s+=this.modules[c].getRules()+` +`;this.styleTag.textContent=s;let o=r.head||r;this.styleTag.parentNode!=o&&o.insertBefore(this.styleTag,o.firstChild)}}setNonce(t){this.styleTag&&this.styleTag.getAttribute("nonce")!=t&&this.styleTag.setAttribute("nonce",t)}};var bP=require("@codemirror/language"),bH=require("@lezer/highlight"),ht=class e{constructor(t,r,n,i){this.fromA=t,this.toA=r,this.fromB=n,this.toB=i}offset(t,r=t){return new e(this.fromA+t,this.toA+t,this.fromB+r,this.toB+r)}};function Ua(e,t,r,n,i,a){if(e==n)return[];let s=Fv(e,t,r,n,i,a),o=$v(e,t+s,r,n,i+s,a);t+=s,r-=o,i+=s,a-=o;let c=r-t,l=a-i;if(!c||!l)return[new ht(t,r,i,a)];if(c>l){let f=e.slice(t,r).indexOf(n.slice(i,a));if(f>-1)return[new ht(t,t+f,i,i),new ht(t+f+l,r,a,a)]}else if(l>c){let f=n.slice(i,a).indexOf(e.slice(t,r));if(f>-1)return[new ht(t,t,i,i+f),new ht(r,r,i+f+c,a)]}if(c==1||l==1)return[new ht(t,r,i,a)];let u=xP(e,t,r,n,i,a);if(u){let[f,d,h]=u;return Ua(e,t,f,n,i,d).concat(Ua(e,f+h,r,n,d+h,a))}return _H(e,t,r,n,i,a)}var Tc=1e9;function _H(e,t,r,n,i,a){let s=r-t,o=a-i;if(Tc<1e9&&Math.min(s,o)>Tc*16)return Math.min(s,o)>Tc*64?[new ht(t,r,i,a)]:nP(e,t,r,n,i,a);let c=Math.ceil((s+o)/2);Cv.reset(c),Pv.reset(c);let l=(h,p)=>e.charCodeAt(t+h)==n.charCodeAt(i+p),u=(h,p)=>e.charCodeAt(r-h-1)==n.charCodeAt(a-p-1),f=(s-o)%2!=0?Pv:null,d=f?null:Cv;for(let h=0;h<c;h++){if(h>Tc)return nP(e,t,r,n,i,a);let p=Cv.advance(h,s,o,c,f,!1,l)||Pv.advance(h,s,o,c,d,!0,u);if(p)return xH(e,t,r,t+p[0],n,i,a,i+p[1])}return[new ht(t,r,i,a)]}var Yd=class{constructor(){this.vec=[]}reset(t){this.len=t<<1;for(let r=0;r<this.len;r++)this.vec[r]=-1;this.vec[t+1]=0,this.start=this.end=0}advance(t,r,n,i,a,s,o){for(let c=-t+this.start;c<=t-this.end;c+=2){let l=i+c,u=c==-t||c!=t&&this.vec[l-1]<this.vec[l+1]?this.vec[l+1]:this.vec[l-1]+1,f=u-c;for(;u<r&&f<n&&o(u,f);)u++,f++;if(this.vec[l]=u,u>r)this.end+=2;else if(f>n)this.start+=2;else if(a){let d=i+(r-n)-c;if(d>=0&&d<this.len&&a.vec[d]!=-1)if(s){let h=a.vec[d];if(h>=r-u)return[h,i+h-d]}else{let h=r-a.vec[d];if(u>=h)return[u,f]}}}return null}},Cv=new Yd,Pv=new Yd;function xH(e,t,r,n,i,a,s,o){let c=!1;return!Eo(e,n)&&++n==r&&(c=!0),!Eo(i,o)&&++o==s&&(c=!0),c?[new ht(t,r,a,s)]:Ua(e,t,n,i,a,o).concat(Ua(e,n,r,i,o,s))}function _P(e,t){let r=1,n=Math.min(e,t);for(;r<n;)r=r<<1;return r}function Fv(e,t,r,n,i,a){if(t==r||t==a||e.charCodeAt(t)!=n.charCodeAt(i))return 0;let s=_P(r-t,a-i);for(let o=t,c=i;;){let l=o+s,u=c+s;if(l>r||u>a||e.slice(o,l)!=n.slice(c,u)){if(s==1)return o-t-(Eo(e,o)?0:1);s=s>>1}else{if(l==r||u==a)return l-t;o=l,c=u}}}function $v(e,t,r,n,i,a){if(t==r||i==a||e.charCodeAt(r-1)!=n.charCodeAt(a-1))return 0;let s=_P(r-t,a-i);for(let o=r,c=a;;){let l=o-s,u=c-s;if(l<t||u<i||e.slice(l,o)!=n.slice(u,c)){if(s==1)return r-o-(Eo(e,o)?0:1);s=s>>1}else{if(l==t||u==i)return r-l;o=l,c=u}}}function Rv(e,t,r,n,i,a,s,o){let c=n.slice(i,a),l=null;for(;;){if(l||s<o)return l;for(let u=t+s;;){Eo(e,u)||u++;let f=u+s;if(Eo(e,f)||(f+=f==u+1?1:-1),f>=r)break;let d=e.slice(u,f),h=-1;for(;(h=c.indexOf(d,h+1))!=-1;){let p=Fv(e,f,r,n,i+h+d.length,a),m=$v(e,t,u,n,i,i+h),v=d.length+p+m;(!l||l[2]<v)&&(l=[u-m,i+h-m,v])}u=f}if(o<0)return l;s=s>>1}}function xP(e,t,r,n,i,a){let s=r-t,o=a-i;if(s<o){let c=xP(n,i,a,e,t,r);return c&&[c[1],c[0],c[2]]}return s<4||o*2<s?null:Rv(e,t,r,n,i,a,Math.floor(s/4),-1)}function nP(e,t,r,n,i,a){let s=r-t,o=a-i,c;if(s<o){let d=Rv(n,i,a,e,t,r,Math.floor(s/6),50);c=d&&[d[1],d[0],d[2]]}else c=Rv(e,t,r,n,i,a,Math.floor(o/6),50);if(!c)return[new ht(t,r,i,a)];let[l,u,f]=c;return Ua(e,t,l,n,i,u).concat(Ua(e,l+f,r,n,u+f,a))}function SP(e,t){for(let r=1;r<e.length;r++){let n=e[r-1],i=e[r];n.toA>i.fromA-t&&n.toB>i.fromB-t&&(e[r-1]=new ht(n.fromA,i.toA,n.fromB,i.toB),e.splice(r--,1))}}function SH(e,t,r){for(;;){SP(r,1);let n=!1;for(let i=0;i<r.length;i++){let a=r[i],s,o;(s=Fv(e,a.fromA,a.toA,t,a.fromB,a.toB))&&(a=r[i]=new ht(a.fromA+s,a.toA,a.fromB+s,a.toB)),(o=$v(e,a.fromA,a.toA,t,a.fromB,a.toB))&&(a=r[i]=new ht(a.fromA,a.toA-o,a.fromB,a.toB-o));let c=a.toA-a.fromA,l=a.toB-a.fromB;if(c&&l)continue;let u=a.fromA-(i?r[i-1].toA:0),f=(i<r.length-1?r[i+1].fromA:e.length)-a.toA;if(!u||!f)continue;let d=c?e.slice(a.fromA,a.toA):t.slice(a.fromB,a.toB);u<=d.length&&e.slice(a.fromA-u,a.fromA)==d.slice(d.length-u)?(r[i]=new ht(a.fromA-u,a.toA-u,a.fromB-u,a.toB-u),n=!0):f<=d.length&&e.slice(a.toA,a.toA+f)==d.slice(0,f)&&(r[i]=new ht(a.fromA+f,a.toA+f,a.fromB+f,a.toB+f),n=!0)}if(!n)break}return r}function EH(e,t,r){for(let n=0,i=0;i<e.length;i++){let a=e[i],s=a.toA-a.fromA,o=a.toB-a.fromB;if(s&&o||s>3||o>3){let c=i==e.length-1?t.length:e[i+1].fromA,l=a.fromA-n,u=c-a.toA,f=aP(t,a.fromA,Math.min(l,5)),d=iP(t,a.toA,Math.min(u,5)),h=a.fromA-f,p=d-a.toA;if(!s||!o){let m=Math.max(s,o),[v,y,b]=s?[t,a.fromA,a.toA]:[r,a.fromB,a.toB];h&&p&&(m>h&&t.slice(f,a.fromA)==v.slice(b-h,b)?(a=e[i]=new ht(f,f+s,a.fromB-h,a.toB-h),f=a.fromA,d=iP(t,a.toA,Math.min(c-a.toA,5))):m>p&&t.slice(a.toA,d)==v.slice(y,y+p)&&(a=e[i]=new ht(d-s,d,a.fromB+p,a.toB+p),d=a.toA,f=aP(t,a.fromA,Math.min(a.fromA-n,5))),h=a.fromA-f,p=d-a.toA)}if(h||p)a=e[i]=new ht(a.fromA-h,a.toA+p,a.fromB-h,a.toB+p);else if(s){if(!o){let m=oP(t,a.fromA,a.toA),v,y=m<0?-1:sP(t,a.toA,a.fromA);m>-1&&(v=m-a.fromA)<=u&&t.slice(a.fromA,m)==t.slice(a.toA,a.toA+v)?a=e[i]=a.offset(v):y>-1&&(v=a.toA-y)<=l&&t.slice(a.fromA-v,a.fromA)==t.slice(y,a.toA)&&(a=e[i]=a.offset(-v))}}else{let m=oP(r,a.fromB,a.toB),v,y=m<0?-1:sP(r,a.toB,a.fromB);m>-1&&(v=m-a.fromB)<=u&&r.slice(a.fromB,m)==r.slice(a.toB,a.toB+v)?a=e[i]=a.offset(v):y>-1&&(v=a.toB-y)<=l&&r.slice(a.fromB-v,a.fromB)==r.slice(y,a.toB)&&(a=e[i]=a.offset(-v))}n=a.toA}}return SP(e,3),e}var Ha;try{Ha=new RegExp("[\\p{Alphabetic}\\p{Number}]","u")}catch(e){}function EP(e){return e>48&&e<58||e>64&&e<91||e>96&&e<123}function AP(e,t){if(t==e.length)return 0;let r=e.charCodeAt(t);return r<192?EP(r)?1:0:Ha?!TP(r)||t==e.length-1?Ha.test(String.fromCharCode(r))?1:0:Ha.test(e.slice(t,t+2))?2:0:0}function kP(e,t){if(!t)return 0;let r=e.charCodeAt(t-1);return r<192?EP(r)?1:0:Ha?!CP(r)||t==1?Ha.test(String.fromCharCode(r))?1:0:Ha.test(e.slice(t-2,t))?2:0:0}function iP(e,t,r){if(t==e.length||!kP(e,t))return t;for(let n=t,i=t+r;;){let a=AP(e,n);if(!a)return n;if(n+=a,n>i)return t}}function aP(e,t,r){if(!t||!AP(e,t))return t;for(let n=t,i=t-r;;){let a=kP(e,n);if(!a)return n;if(n-=a,n<i)return t}}function sP(e,t,r){for(;t!=r;t--)if(e.charCodeAt(t-1)==10)return t;return-1}function oP(e,t,r){for(;t!=r;t++)if(e.charCodeAt(t)==10)return t;return-1}var TP=e=>e>=55296&&e<=56319,CP=e=>e>=56320&&e<=57343;function Eo(e,t){return!t||t==e.length||!TP(e.charCodeAt(t-1))||!CP(e.charCodeAt(t))}function AH(e,t,r){var n;return Tc=((n=r==null?void 0:r.scanLimit)!==null&&n!==void 0?n:1e9)>>1,SH(e,t,Ua(e,0,e.length,t,0,t.length))}function PP(e,t,r){return EH(AH(e,t,r),e,t)}var Fn=Se.Facet.define({combine:e=>e[0]}),Mv=Se.StateEffect.define(),Ao=Se.StateField.define({create(e){return null},update(e,t){for(let r of t.effects)r.is(Mv)&&(e=r.value);return e}});var So=class e{constructor(t,r,n,i,a){this.changes=t,this.fromA=r,this.toA=n,this.fromB=i,this.toB=a}offset(t,r){return t||r?new e(this.changes,this.fromA+t,this.toA+t,this.fromB+r,this.toB+r):this}get endA(){return Math.max(this.fromA,this.toA-1)}get endB(){return Math.max(this.fromB,this.toB-1)}static build(t,r,n){return RP(PP(t.toString(),r.toString(),n),t,r,0,0)}static updateA(t,r,n,i,a){return dP(fP(t,i,!0,n.length),t,r,n,a)}static updateB(t,r,n,i,a){return dP(fP(t,i,!1,r.length),t,r,n,a)}};function lP(e,t,r,n){let i=r.lineAt(e),a=n.lineAt(t);return i.to==e&&a.to==t&&e<r.length&&t<n.length?[e+1,t+1]:[i.from,a.from]}function cP(e,t,r,n){let i=r.lineAt(e),a=n.lineAt(t);return i.from==e&&a.from==t?[e,t]:[i.to+1,a.to+1]}function RP(e,t,r,n,i){let a=[];for(let s=0;s<e.length;s++){let o=e[s],[c,l]=lP(o.fromA+n,o.fromB+i,t,r),[u,f]=cP(o.toA+n,o.toB+i,t,r),d=[o.offset(-c+n,-l+i)];for(;s<e.length-1;){let h=e[s+1],[p,m]=lP(h.fromA+n,h.fromB+i,t,r);if(p>u+1&&m>f+1)break;d.push(h.offset(-c+n,-l+i)),[u,f]=cP(h.toA+n,h.toB+i,t,r),s++}a.push(new So(d,c,Math.max(c,u),l,Math.max(l,f)))}return a}var zd=1e3;function uP(e,t,r,n){let i=0,a=e.length;for(;;){if(i==a){let u=0,f=0;i&&({toA:u,toB:f}=e[i-1]);let d=t-(r?u:f);return[u+d,f+d]}let s=i+a>>1,o=e[s],[c,l]=r?[o.fromA,o.toA]:[o.fromB,o.toB];if(c>t)a=s;else if(l<=t)i=s+1;else return n?[o.fromA,o.fromB]:[o.toA,o.toB]}}function fP(e,t,r,n){let i=[];return t.iterChangedRanges((a,s,o,c)=>{let l=0,u=r?t.length:n,f=0,d=r?n:t.length;a>zd&&([l,f]=uP(e,a-zd,r,!0)),s<t.length-zd&&([u,d]=uP(e,s+zd,r,!1));let h=c-o-(s-a),p,[m,v]=r?[h,0]:[0,h];i.length&&(p=i[i.length-1]).toA>=l?i[i.length-1]={fromA:p.fromA,fromB:p.fromB,toA:u,toB:d,diffA:p.diffA+m,diffB:p.diffB+v}:i.push({fromA:l,toA:u,fromB:f,toB:d,diffA:m,diffB:v})}),i}function dP(e,t,r,n,i){if(!e.length)return t;let a=[];for(let s=0,o=0,c=0,l=0;;s++){let u=s==e.length?null:e[s],f=u?u.fromA+o:r.length,d=u?u.fromB+c:n.length;for(;l<t.length;){let v=t[l];if(v.toA+o>f||v.toB+c>d)break;a.push(v.offset(o,c)),l++}if(!u)break;let h=u.toA+o+u.diffA,p=u.toB+c+u.diffB,m=PP(r.sliceString(f,h),n.sliceString(d,p),i);for(let v of RP(m,r,n,f,d))a.push(v);for(o+=u.diffA,c+=u.diffB;l<t.length;){let v=t[l];if(v.fromA+o>h&&v.fromB+c>p)break;l++}}return a}var kH={scanLimit:500},MP=Re.ViewPlugin.fromClass(class{constructor(e){({deco:this.deco,gutter:this.gutter}=mP(e))}update(e){(e.docChanged||e.viewportChanged||TH(e.startState,e.state)||CH(e.startState,e.state))&&({deco:this.deco,gutter:this.gutter}=mP(e.view))}},{decorations:e=>e.deco}),Vd=Se.Prec.low((0,Re.gutter)({class:"cm-changeGutter",markers:e=>{var t;return((t=e.plugin(MP))===null||t===void 0?void 0:t.gutter)||Se.RangeSet.empty}}));function TH(e,t){return e.field(Ao,!1)!=t.field(Ao,!1)}function CH(e,t){return e.facet(Fn)!=t.facet(Fn)}var hP=Re.Decoration.line({class:"cm-changedLine"}),PH=Re.Decoration.mark({class:"cm-changedText"}),RH=Re.Decoration.mark({tagName:"ins",class:"cm-insertedLine"}),MH=Re.Decoration.mark({tagName:"del",class:"cm-deletedLine"}),pP=new class extends Re.GutterMarker{constructor(){super(...arguments),this.elementClass="cm-changedLineGutter"}};function OH(e,t,r,n,i,a){let s=r?e.fromA:e.fromB,o=r?e.toA:e.toB,c=0;if(s!=o){i.add(s,s,hP),i.add(s,o,r?MH:RH),a&&a.add(s,s,pP);for(let l=t.iterRange(s,o-1),u=s;!l.next().done;){if(l.lineBreak){u++,i.add(u,u,hP),a&&a.add(u,u,pP);continue}let f=u+l.value.length;if(n)for(;c<e.changes.length;){let d=e.changes[c],h=s+(r?d.fromA:d.fromB),p=s+(r?d.toA:d.toB),m=Math.max(u,h),v=Math.min(f,p);if(m<v&&i.add(m,v,PH),p<f)c++;else break}u=f}}}function mP(e){let t=e.state.field(Ao),{side:r,highlightChanges:n,markGutter:i}=e.state.facet(Fn),a=r=="a",s=new Se.RangeSetBuilder,o=i?new Se.RangeSetBuilder:null,{from:c,to:l}=e.viewport;for(let u of t){if((a?u.fromA:u.fromB)>=l)break;(a?u.toA:u.toB)>c&&OH(u,e.state.doc,a,n,s,o)}return{deco:s.finish(),gutter:o&&o.finish()}}var xo=class extends Re.WidgetType{constructor(t){super(),this.height=t}eq(t){return this.height==t.height}toDOM(){let t=document.createElement("div");return t.className="cm-mergeSpacer",t.style.height=this.height+"px",t}updateDOM(t){return t.style.height=this.height+"px",!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}},Xd=Se.StateEffect.define({map:(e,t)=>e.map(t)}),Cc=Se.StateField.define({create:()=>Re.Decoration.none,update:(e,t)=>{for(let r of t.effects)if(r.is(Xd))return r.value;return e.map(t.changes)},provide:e=>Re.EditorView.decorations.from(e)}),Wd=.01;function gP(e,t){if(e.size!=t.size)return!1;let r=e.iter(),n=t.iter();for(;r.value;){if(r.from!=n.from||Math.abs(r.value.spec.widget.height-n.value.spec.widget.height)>1)return!1;r.next(),n.next()}return!0}function IH(e,t,r){let n=new Se.RangeSetBuilder,i=new Se.RangeSetBuilder,a=e.state.field(Cc).iter(),s=t.state.field(Cc).iter(),o=0,c=0,l=0,u=0,f=e.viewport,d=t.viewport;for(let v=0;;v++){let y=v<r.length?r[v]:null,b=y?y.fromA:e.state.doc.length,x=y?y.fromB:t.state.doc.length;if(o<b){let E=e.lineBlockAt(o).top+l,_=t.lineBlockAt(c).top+u,k=E-_;k<-Wd?(l-=k,n.add(o,o,Re.Decoration.widget({widget:new xo(-k),block:!0,side:-1}))):k>Wd&&(u+=k,i.add(c,c,Re.Decoration.widget({widget:new xo(k),block:!0,side:-1})))}if(b>o+1e3&&o<f.from&&b>f.from&&c<d.from&&x>d.from){let E=Math.min(f.from-o,d.from-c);o+=E,c+=E,v--}else if(y)o=y.toA,c=y.toB;else break;for(;a.value&&a.from<o;)l-=a.value.spec.widget.height,a.next();for(;s.value&&s.from<c;)u-=s.value.spec.widget.height,s.next()}for(;a.value;)l-=a.value.spec.widget.height,a.next();for(;s.value;)u-=s.value.spec.widget.height,s.next();let h=e.contentHeight+l-(t.contentHeight+u);h<Wd?n.add(e.state.doc.length,e.state.doc.length,Re.Decoration.widget({widget:new xo(-h),block:!0,side:1})):h>Wd&&i.add(t.state.doc.length,t.state.doc.length,Re.Decoration.widget({widget:new xo(h),block:!0,side:1}));let p=n.finish(),m=i.finish();gP(p,e.state.field(Cc))||e.dispatch({effects:Xd.of(p)}),gP(m,t.state.field(Cc))||t.dispatch({effects:Xd.of(m)})}var Ov=Se.StateEffect.define({map:(e,t)=>t.mapPos(e)}),Iv=class extends Re.WidgetType{constructor(t){super(),this.lines=t}eq(t){return this.lines==t.lines}toDOM(t){let r=document.createElement("div");return r.className="cm-collapsedLines",r.textContent=t.state.phrase("$ unchanged lines",this.lines),r.addEventListener("click",n=>{let i=t.posAtDOM(n.target);t.dispatch({effects:Ov.of(i)});let{side:a,sibling:s}=t.state.facet(Fn);s&&s().dispatch({effects:Ov.of(FH(i,t.state.field(Ao),a=="a"))})}),r}ignoreEvent(t){return t instanceof MouseEvent}get estimatedHeight(){return 27}};function FH(e,t,r){let n=0,i=0;for(let a=0;;a++){let s=a<t.length?t[a]:null;if(!s||(r?s.fromA:s.fromB)>=e)return i+(e-n);[n,i]=r?[s.toA,s.toB]:[s.toB,s.toA]}}var $H=Se.StateField.define({create(e){return Re.Decoration.none},update(e,t){e=e.map(t.changes);for(let r of t.effects)r.is(Ov)&&(e=e.update({filter:n=>n!=r.value}));return e},provide:e=>Re.EditorView.decorations.from(e)});function vP({margin:e=3,minSize:t=4}){return $H.init(r=>LH(r,e,t))}function LH(e,t,r){let n=new Se.RangeSetBuilder,i=e.facet(Fn).side=="a",a=e.field(Ao),s=1;for(let o=0;;o++){let c=o<a.length?a[o]:null,l=o?s+t:1,u=c?e.doc.lineAt(i?c.fromA:c.fromB).number-1-t:e.doc.lines,f=u-l+1;if(f>=r&&n.add(e.doc.line(l).from,e.doc.line(u).to,Re.Decoration.replace({widget:new Iv(f),block:!0})),!c)break;s=e.doc.lineAt(Math.min(e.doc.length,i?c.toA:c.toB)).number}return n.finish()}var DH=Re.EditorView.styleModule.of(new Gd({".cm-mergeView":{overflowY:"auto"},".cm-mergeViewEditors":{display:"flex",alignItems:"stretch"},".cm-mergeViewEditor":{flexGrow:1,flexBasis:0,overflow:"hidden"},".cm-merge-revert":{width:"1.6em",flexGrow:0,flexShrink:0,position:"relative"},".cm-merge-revert button":{position:"absolute",display:"block",width:"100%",boxSizing:"border-box",textAlign:"center",background:"none",border:"none",font:"inherit",cursor:"pointer"}})),NH=Re.EditorView.baseTheme({".cm-mergeView & .cm-scroller, .cm-mergeView &":{height:"auto !important",overflowY:"visible !important"},"&.cm-merge-a .cm-changedLine, .cm-deletedChunk":{backgroundColor:"rgba(160, 128, 100, .08)"},"&.cm-merge-b .cm-changedLine":{backgroundColor:"rgba(100, 160, 128, .08)"},"&light.cm-merge-a .cm-changedText, &light .cm-deletedChunk .cm-deletedText":{background:"linear-gradient(#ee443366, #ee443366) bottom/100% 2px no-repeat"},"&dark.cm-merge-a .cm-changedText, &dark .cm-deletedChunk .cm-deletedText":{background:"linear-gradient(#ffaa9966, #ffaa9966) bottom/100% 2px no-repeat"},"&light.cm-merge-b .cm-changedText":{background:"linear-gradient(#22bb2266, #22bb2266) bottom/100% 2px no-repeat"},"&dark.cm-merge-b .cm-changedText":{background:"linear-gradient(#88ff8866, #88ff8866) bottom/100% 2px no-repeat"},".cm-insertedLine, .cm-deletedLine":{textDecoration:"none"},".cm-deletedChunk":{paddingLeft:"6px","& .cm-chunkButtons":{position:"absolute",insetInlineEnd:"5px"},"& button":{border:"none",cursor:"pointer",color:"white",margin:"0 2px",borderRadius:"3px","&[name=accept]":{background:"#2a2"},"&[name=reject]":{background:"#d43"}}},".cm-collapsedLines":{padding:"5px 5px 5px 10px",cursor:"pointer","&:before":{content:'"\u299A"',marginInlineEnd:"7px"},"&:after":{content:'"\u299A"',marginInlineStart:"7px"}},"&light .cm-collapsedLines":{color:"#444",background:"linear-gradient(to bottom, transparent 0, #f3f3f3 30%, #f3f3f3 70%, transparent 100%)"},"&dark .cm-collapsedLines":{color:"#ddd",background:"linear-gradient(to bottom, transparent 0, #222 30%, #222 70%, transparent 100%)"},".cm-changeGutter":{width:"3px",paddingLeft:"1px"},"&light.cm-merge-a .cm-changedLineGutter, &light .cm-deletedLineGutter":{background:"#e43"},"&dark.cm-merge-a .cm-changedLineGutter, &dark .cm-deletedLineGutter":{background:"#fa9"},"&light.cm-merge-b .cm-changedLineGutter":{background:"#2b2"},"&dark.cm-merge-b .cm-changedLineGutter":{background:"#8f8"}}),yP=new Se.Compartment,qd=new Se.Compartment,Zd=class{constructor(t){this.revertDOM=null,this.revertToA=!1,this.revertToLeft=!1,this.measuring=-1,this.diffConf=t.diffConfig||kH;let r=[Se.Prec.low(MP),NH,DH,Cc,Re.EditorView.updateListener.of(f=>{this.measuring<0&&(f.heightChanged||f.viewportChanged)&&!f.transactions.some(d=>d.effects.some(h=>h.is(Xd)))&&this.measure()})],n=[Fn.of({side:"a",sibling:()=>this.b,highlightChanges:t.highlightChanges!==!1,markGutter:t.gutter!==!1})];t.gutter!==!1&&n.push(Vd);let i=Se.EditorState.create({doc:t.a.doc,selection:t.a.selection,extensions:[t.a.extensions||[],Re.EditorView.editorAttributes.of({class:"cm-merge-a"}),qd.of(n),r]}),a=[Fn.of({side:"b",sibling:()=>this.a,highlightChanges:t.highlightChanges!==!1,markGutter:t.gutter!==!1})];t.gutter!==!1&&a.push(Vd);let s=Se.EditorState.create({doc:t.b.doc,selection:t.b.selection,extensions:[t.b.extensions||[],Re.EditorView.editorAttributes.of({class:"cm-merge-b"}),qd.of(a),r]});this.chunks=So.build(i.doc,s.doc,this.diffConf);let o=[Ao.init(()=>this.chunks),yP.of(t.collapseUnchanged?vP(t.collapseUnchanged):[])];i=i.update({effects:Se.StateEffect.appendConfig.of(o)}).state,s=s.update({effects:Se.StateEffect.appendConfig.of(o)}).state,this.dom=document.createElement("div"),this.dom.className="cm-mergeView",this.editorDOM=this.dom.appendChild(document.createElement("div")),this.editorDOM.className="cm-mergeViewEditors";let c=t.orientation||"a-b",l=document.createElement("div");l.className="cm-mergeViewEditor";let u=document.createElement("div");u.className="cm-mergeViewEditor",this.editorDOM.appendChild(c=="a-b"?l:u),this.editorDOM.appendChild(c=="a-b"?u:l),this.a=new Re.EditorView({state:i,parent:l,root:t.root,dispatchTransactions:f=>this.dispatch(f,this.a)}),this.b=new Re.EditorView({state:s,parent:u,root:t.root,dispatchTransactions:f=>this.dispatch(f,this.b)}),this.setupRevertControls(!!t.revertControls,t.revertControls=="b-to-a",t.renderRevertControl),t.parent&&t.parent.appendChild(this.dom),this.scheduleMeasure()}dispatch(t,r){if(t.some(n=>n.docChanged)){let n=t[t.length-1],i=t.reduce((s,o)=>s.compose(o.changes),Se.ChangeSet.empty(t[0].startState.doc.length));this.chunks=r==this.a?So.updateA(this.chunks,n.newDoc,this.b.state.doc,i,this.diffConf):So.updateB(this.chunks,this.a.state.doc,n.newDoc,i,this.diffConf),r.update([...t,n.state.update({effects:Mv.of(this.chunks)})]);let a=r==this.a?this.b:this.a;a.update([a.state.update({effects:Mv.of(this.chunks)})]),this.scheduleMeasure()}else r.update(t)}reconfigure(t){if("diffConfig"in t&&(this.diffConf=t.diffConfig),"orientation"in t){let a=t.orientation!="b-a";if(a!=(this.editorDOM.firstChild==this.a.dom.parentNode)){let s=this.a.dom.parentNode,o=this.b.dom.parentNode;s.remove(),o.remove(),this.editorDOM.insertBefore(a?s:o,this.editorDOM.firstChild),this.editorDOM.appendChild(a?o:s),this.revertToLeft=!this.revertToLeft,this.revertDOM&&(this.revertDOM.textContent="")}}if("revertControls"in t||"renderRevertControl"in t){let a=!!this.revertDOM,s=this.revertToA,o=this.renderRevert;"revertControls"in t&&(a=!!t.revertControls,s=t.revertControls=="b-to-a"),"renderRevertControl"in t&&(o=t.renderRevertControl),this.setupRevertControls(a,s,o)}let r="highlightChanges"in t,n="gutter"in t,i="collapseUnchanged"in t;if(r||n||i){let a=[],s=[];if(r||n){let o=this.a.state.facet(Fn),c=n?t.gutter!==!1:o.markGutter,l=r?t.highlightChanges!==!1:o.highlightChanges;a.push(qd.reconfigure([Fn.of({side:"a",sibling:()=>this.b,highlightChanges:l,markGutter:c}),c?Vd:[]])),s.push(qd.reconfigure([Fn.of({side:"b",sibling:()=>this.a,highlightChanges:l,markGutter:c}),c?Vd:[]]))}if(i){let o=yP.reconfigure(t.collapseUnchanged?vP(t.collapseUnchanged):[]);a.push(o),s.push(o)}this.a.dispatch({effects:a}),this.b.dispatch({effects:s})}this.scheduleMeasure()}setupRevertControls(t,r,n){this.revertToA=r,this.revertToLeft=this.revertToA==(this.editorDOM.firstChild==this.a.dom.parentNode),this.renderRevert=n,!t&&this.revertDOM?(this.revertDOM.remove(),this.revertDOM=null):t&&!this.revertDOM?(this.revertDOM=this.editorDOM.insertBefore(document.createElement("div"),this.editorDOM.firstChild.nextSibling),this.revertDOM.addEventListener("mousedown",i=>this.revertClicked(i)),this.revertDOM.className="cm-merge-revert"):this.revertDOM&&(this.revertDOM.textContent="")}scheduleMeasure(){if(this.measuring<0){let t=this.dom.ownerDocument.defaultView||window;this.measuring=t.requestAnimationFrame(()=>{this.measuring=-1,this.measure()})}}measure(){IH(this.a,this.b,this.chunks),this.revertDOM&&this.updateRevertButtons()}updateRevertButtons(){let t=this.revertDOM,r=t.firstChild,n=this.a.viewport,i=this.b.viewport;for(let a=0;a<this.chunks.length;a++){let s=this.chunks[a];if(s.fromA>n.to||s.fromB>i.to)break;if(s.fromA<n.from||s.fromB<i.from)continue;let o=this.a.lineBlockAt(s.fromA).top+"px";for(;r&&+r.dataset.chunk<a;)r=wP(r);r&&r.dataset.chunk==String(a)?(r.style.top!=o&&(r.style.top=o),r=r.nextSibling):t.insertBefore(this.renderRevertButton(o,a),r)}for(;r;)r=wP(r)}renderRevertButton(t,r){let n;if(this.renderRevert)n=this.renderRevert();else{n=document.createElement("button");let i=this.a.state.phrase("Revert this chunk");n.setAttribute("aria-label",i),n.setAttribute("title",i),n.textContent=this.revertToLeft?"\u21DC":"\u21DD"}return n.style.top=t,n.setAttribute("data-chunk",String(r)),n}revertClicked(t){let r=t.target,n;for(;r&&r.parentNode!=this.revertDOM;)r=r.parentNode;if(r&&(n=this.chunks[r.dataset.chunk])){let[i,a,s,o,c,l]=this.revertToA?[this.b,this.a,n.fromB,n.toB,n.fromA,n.toA]:[this.a,this.b,n.fromA,n.toA,n.fromB,n.toB],u=i.state.sliceDoc(s,Math.max(s,o-1));s!=o&&l<=a.state.doc.length&&(u+=i.state.lineBreak),a.dispatch({changes:{from:c,to:Math.min(a.state.doc.length,l),insert:u},userEvent:"revert"}),t.preventDefault()}}destroy(){this.a.destroy(),this.b.destroy(),this.measuring>-1&&(this.dom.ownerDocument.defaultView||window).cancelAnimationFrame(this.measuring),this.dom.remove()}};function wP(e){let t=e.nextSibling;return e.remove(),t}var Co=require("@codemirror/commands"),Kd=require("@codemirror/search");var Ga=class extends To.ItemView{constructor(r,n){super(r);this.plugin=n;this.refreshing=!1;this.ignoreNextModification=!1;this.navigation=!0,this.registerEvent(this.app.workspace.on("obsidian-git:status-changed",()=>{this.mergeView?this.updateRefEditors().catch(console.error):this.createMergeView().catch(console.error)})),this.intervalRef=window.setInterval(()=>{this.mergeView&&this.updateRefEditors().catch(console.error)},30*1e3),this.registerEvent(this.app.vault.on("modify",i=>{this.state.bRef==null&&i.path===this.state.bFile&&(this.ignoreNextModification?this.ignoreNextModification=!1:this.updateModifiableEditor().catch(console.error))})),this.registerEvent(this.app.vault.on("delete",i=>{this.state.bRef==null&&i.path===this.state.bFile&&this.createMergeView().catch(console.error)})),this.registerEvent(this.app.vault.on("create",i=>{this.state.bRef==null&&i.path===this.state.bFile&&this.createMergeView().catch(console.error)})),this.registerEvent(this.app.vault.on("rename",(i,a)=>{this.state.bRef==null&&(i.path===this.state.bFile||a===this.state.bFile)&&this.createMergeView().catch(console.error)})),this.fileSaveDebouncer=(0,To.debounce)(i=>{let a=this.state.bFile;a&&(this.ignoreNextModification=!0,this.plugin.app.vault.adapter.write(a,i).catch(s=>this.plugin.displayError(s)))},1e3,!1)}getViewType(){return Ai.type}getDisplayText(){var r;if(((r=this.state)==null?void 0:r.bFile)!=null){let n=this.state.bFile.split("/").last();return n!=null&&n.endsWith(".md")&&(n=n.slice(0,-3)),`Diff: ${n}`}return Ai.name}getIcon(){return Ai.icon}async setState(r,n){this.state=r,To.Platform.isMobile&&(this.leaf.view.titleEl.textContent=this.getDisplayText()),await super.setState(r,n),await this.createMergeView()}getState(){return this.state}onClose(){return window.clearInterval(this.intervalRef),super.onClose()}async onOpen(){return await this.createMergeView(),super.onOpen()}async gitShow(r,n){try{return await this.plugin.gitManager.show(r,n,!1)}catch(i){if(i instanceof wr&&(i.message.includes("does not exist")||i.message.includes("unknown revision or path")||i.message.includes("exists on disk, but not in")||i.message.includes("fatal: bad object")))return i.message.includes("fatal: bad object")&&this.plugin.displayError(i.message),"";throw i}}async bShouldBeEditable(){if(this.state.bRef!=null)return!1;let r=this.plugin.gitManager.getRelativeVaultPath(this.state.bFile);return await this.app.vault.adapter.exists(r)}async updateModifiableEditor(){if(!this.mergeView||this.refreshing)return;let r=this.mergeView.b;this.refreshing=!0;let n=await this.app.vault.adapter.read(this.state.bFile);if(n!=r.state.doc.toString()){let i=r.state.update({changes:{from:0,to:r.state.doc.length,insert:n},annotations:[ko.Transaction.remote.of(!0)]});r.dispatch(i)}this.refreshing=!1}async updateRefEditors(){if(!this.mergeView||this.refreshing)return;let r=this.mergeView.a,n=this.mergeView.b;this.refreshing=!0;let i=await this.gitShow(this.state.aRef,this.state.aFile),a;if(this.state.bRef!=null&&(a=await this.gitShow(this.state.bRef,this.state.bFile)),i!=r.state.doc.toString()){let s=r.state.update({changes:{from:0,to:r.state.doc.length,insert:i}});r.dispatch(s)}if(a!=null&&a!=n.state.doc.toString()){let s=n.state.update({changes:{from:0,to:n.state.doc.length,insert:a}});n.dispatch(s)}this.refreshing=!1}async createMergeView(){var r,n,i;if((r=this.state)!=null&&r.aFile&&((n=this.state)!=null&&n.bFile)&&!this.refreshing&&this.plugin.gitManager){this.refreshing=!0,(i=this.mergeView)==null||i.destroy();let a=this.containerEl.children[1];a.empty(),this.contentEl.addClass("git-split-diff-view"),this.bIsEditable=await this.bShouldBeEditable();let s=await this.gitShow(this.state.aRef,this.state.aFile),o;if(this.state.bRef!=null)o=await this.gitShow(this.state.bRef,this.state.bFile);else{let p=this.plugin.gitManager.getRelativeVaultPath(this.state.bFile);await this.app.vault.adapter.exists(p)?o=await this.app.vault.adapter.read(p):o=""}let c=[(0,Xr.lineNumbers)(),(0,Kd.highlightSelectionMatches)(),(0,Xr.drawSelection)(),Xr.keymap.of([...Co.standardKeymap,Co.indentWithTab]),(0,Co.history)(),(0,Kd.search)(),Xr.EditorView.lineWrapping],l=this,u=Xr.ViewPlugin.define(p=>({update(m){if(m.docChanged&&!m.transactions.some(v=>v.annotation(ko.Transaction.remote))){let v=p.state.doc.toString();l.fileSaveDebouncer(v)}}})),f={doc:s,extensions:[...c,Xr.EditorView.editable.of(!1),ko.EditorState.readOnly.of(!0)]},d=[...c];this.bIsEditable?d.push(u):d.push(Xr.EditorView.editable.of(!1),ko.EditorState.readOnly.of(!0));let h={doc:o,extensions:d};a.addClasses(["cm-s-obsidian","mod-cm6","markdown-source-view","cm-content"]),this.mergeView=new Zd({b:h,a:f,diffConfig:{scanLimit:this.bIsEditable?1e3:1e4},parent:a}),this.refreshing=!1}}};var Jd=class extends Ce.Plugin{constructor(){super(...arguments);this.automaticsManager=new Xl(this);this.tools=new kc(this);this.localStorage=new fd(this);this.state={gitAction:0,offlineMode:!1};this.gitReady=!1;this.promiseQueue=new ad(this);this.intervalsToClear=[];this.lineAuthoringFeature=new id(this)}setPluginState(r){var n;this.state=Object.assign(this.state,r),(n=this.statusBar)==null||n.display()}async updateCachedStatus(){var r,n;return this.app.workspace.trigger("obsidian-git:loading-status"),this.cachedStatus=await this.gitManager.status(),this.cachedStatus.conflicted.length>0?(this.localStorage.setConflict(!0),await((r=this.branchBar)==null?void 0:r.display())):(this.localStorage.setConflict(!1),await((n=this.branchBar)==null?void 0:n.display())),this.app.workspace.trigger("obsidian-git:status-changed",this.cachedStatus),this.cachedStatus}async refresh(){if(!this.gitReady)return;let r=this.app.workspace.getLeavesOfType(St.type),n=this.app.workspace.getLeavesOfType($r.type);(this.settings.changedFilesInStatusBar||r.some(i=>{var a;return!((a=i.isDeferred)!=null&&a)})||n.some(i=>{var a;return!((a=i.isDeferred)!=null&&a)}))&&await this.updateCachedStatus().catch(i=>this.displayError(i)),this.app.workspace.trigger("obsidian-git:refreshed")}refreshUpdatedHead(){this.lineAuthoringFeature.refreshLineAuthorViews()}async onload(){console.log("loading "+this.manifest.name+" plugin: v"+this.manifest.version),Yl.plugin=this,this.localStorage.migrate(),await this.loadSettings(),await this.migrateSettings(),this.settingsTab=new zf(this.app,this),this.addSettingTab(this.settingsTab),this.localStorage.getPluginDisabled()||(this.registerStuff(),this.app.workspace.onLayoutReady(()=>this.init({fromReload:!1}).catch(r=>this.displayError(r))))}onExternalSettingsChange(){this.reloadSettings().catch(r=>this.displayError(r))}async reloadSettings(){let r=JSON.stringify(this.settings);await this.loadSettings();let n=JSON.stringify(this.settings);r!==n&&(this.log("Reloading settings"),this.unloadPlugin(),await this.init({fromReload:!0}),this.app.workspace.getLeavesOfType(St.type).forEach(i=>{var a;if(!((a=i.isDeferred)!=null&&a))return i.view.reload()}),this.app.workspace.getLeavesOfType($r.type).forEach(i=>{var a;if(!((a=i.isDeferred)!=null&&a))return i.view.reload()}))}registerStuff(){this.registerEvent(this.app.workspace.on("obsidian-git:refresh",()=>{this.refresh().catch(r=>this.displayError(r))})),this.registerEvent(this.app.workspace.on("obsidian-git:head-change",()=>{this.refreshUpdatedHead()})),this.registerEvent(this.app.workspace.on("file-menu",(r,n,i)=>{this.handleFileMenu(r,n,i,"file-manu")})),this.registerEvent(this.app.workspace.on("obsidian-git:menu",(r,n,i)=>{this.handleFileMenu(r,n,i,"obsidian-git:menu")})),this.registerEvent(this.app.workspace.on("active-leaf-change",r=>{this.onActiveLeafChange(r)})),this.registerEvent(this.app.vault.on("modify",()=>{var r;this.debRefresh(),(r=this.autoCommitDebouncer)==null||r.call(this)})),this.registerEvent(this.app.vault.on("delete",()=>{var r;this.debRefresh(),(r=this.autoCommitDebouncer)==null||r.call(this)})),this.registerEvent(this.app.vault.on("create",()=>{var r;this.debRefresh(),(r=this.autoCommitDebouncer)==null||r.call(this)})),this.registerEvent(this.app.vault.on("rename",()=>{var r;this.debRefresh(),(r=this.autoCommitDebouncer)==null||r.call(this)})),this.registerView(St.type,r=>new Ac(r,this)),this.registerView($r.type,r=>new vc(r,this)),this.registerView(ki.type,r=>new Ta(r,this)),this.registerView(Ai.type,r=>new Ga(r,this)),this.addRibbonIcon("git-pull-request","Open Git source control",async()=>{var i;let r=this.app.workspace.getLeavesOfType(St.type),n;r.length===0?(n=(i=this.app.workspace.getRightLeaf(!1))!=null?i:this.app.workspace.getLeaf(),await n.setViewState({type:St.type})):n=r.first(),await this.app.workspace.revealLeaf(n)}),this.registerHoverLinkSource(St.type,{display:"Git View",defaultMod:!0}),this.lineAuthoringFeature.onLoadPlugin(),this.setRefreshDebouncer(),lC(this)}setRefreshDebouncer(){var r;(r=this.debRefresh)==null||r.cancel(),this.debRefresh=(0,Ce.debounce)(()=>{this.settings.refreshSourceControl&&this.refresh().catch(console.error)},this.settings.refreshSourceControlTimer,!0)}async addFileToGitignore(r){return await this.app.vault.adapter.append(this.gitManager.getRelativeVaultPath(".gitignore"),` +`+this.gitManager.getRelativeRepoPath(r,!0)),this.refresh()}handleFileMenu(r,n,i,a){if(!this.gitReady||!this.settings.showFileMenu||!n)return;let s;if(typeof n=="string"?s=n:s=n.path,i=="file-explorer-context-menu"&&(r.addItem(o=>{o.setTitle("Git: Stage").setIcon("plus-circle").setSection("action").onClick(c=>{this.promiseQueue.addTask(async()=>{n instanceof Ce.TFile?await this.gitManager.stage(n.path,!0):await this.gitManager.stageAll({dir:this.gitManager.getRelativeRepoPath(s,!0)}),this.displayMessage(`Staged ${s}`)})})}),r.addItem(o=>{o.setTitle("Git: Unstage").setIcon("minus-circle").setSection("action").onClick(c=>{this.promiseQueue.addTask(async()=>{n instanceof Ce.TFile?await this.gitManager.unstage(n.path,!0):await this.gitManager.unstageAll({dir:this.gitManager.getRelativeRepoPath(s,!0)}),this.displayMessage(`Unstaged ${s}`)})})}),r.addItem(o=>{o.setTitle("Git: Add to .gitignore").setIcon("file-x").setSection("action").onClick(c=>{this.addFileToGitignore(s).catch(l=>this.displayError(l))})})),i=="git-source-control"){r.addItem(c=>{c.setTitle("Git: Add to .gitignore").setIcon("file-x").setSection("action").onClick(l=>{this.addFileToGitignore(s).catch(u=>this.displayError(u))})});let o=this.app.vault.adapter;a==="obsidian-git:menu"&&o instanceof Ce.FileSystemAdapter&&(r.addItem(c=>{c.setTitle("Open in default app").setIcon("arrow-up-right").setSection("action").onClick(l=>{this.app.openWithDefaultApp(s)})}),r.addItem(c=>{c.setTitle("Show in system explorer").setIcon("arrow-up-right").setSection("action").onClick(l=>{window.electron.shell.showItemInFolder(OP.join(o.getBasePath(),s))})}))}}async migrateSettings(){this.settings.mergeOnPull!=null&&(this.settings.syncMethod=this.settings.mergeOnPull?"merge":"rebase",this.settings.mergeOnPull=void 0,await this.saveSettings()),this.settings.autoCommitMessage===void 0&&(this.settings.autoCommitMessage=this.settings.commitMessage,await this.saveSettings()),this.settings.gitPath!=null&&(this.localStorage.setGitPath(this.settings.gitPath),this.settings.gitPath=void 0,await this.saveSettings()),this.settings.username!=null&&(this.localStorage.setPassword(this.settings.username),this.settings.username=void 0,await this.saveSettings())}unloadPlugin(){var r,n;this.gitReady=!1,this.lineAuthoringFeature.deactivateFeature(),this.automaticsManager.unload(),(r=this.branchBar)==null||r.remove(),(n=this.statusBar)==null||n.remove(),this.gitManager.unload(),this.promiseQueue.clear();for(let i of this.intervalsToClear)window.clearInterval(i);this.intervalsToClear=[],this.debRefresh.cancel()}onunload(){this.unloadPlugin(),console.log("unloading "+this.manifest.name+" plugin")}async loadSettings(){let r=await this.loadData();r==null&&(r={showedMobileNotice:!0}),this.settings=Ex(ar,r)}async saveSettings(){var r;(r=this.settingsTab)==null||r.beforeSaveSettings(),await this.saveData(this.settings)}get useSimpleGit(){return Ce.Platform.isDesktopApp}async init({fromReload:r=!1}){var n;if(this.settings.showStatusBar){let i=this.addStatusBarItem();this.statusBar=new sd(i,this),this.intervalsToClear.push(window.setInterval(()=>{var a;return(a=this.statusBar)==null?void 0:a.display()},1e3))}try{this.useSimpleGit?(this.gitManager=new Te(this),await this.gitManager.setGitInstance()):this.gitManager=new an(this);let i=await this.gitManager.checkRequirements();switch(i){case"missing-git":this.displayError(`Cannot run git command. Trying to run: '${this.localStorage.getGitPath()||"git"}' .`);break;case"missing-repo":new Ce.Notice("Can't find a valid git repository. Please create one via the given command or clone an existing repo.",1e4);break;case"valid":if(this.gitReady=!0,this.setPluginState({gitAction:0}),Ce.Platform.isDesktop&&this.settings.showBranchStatusBar){let a=this.addStatusBarItem();this.branchBar=new Ud(a,this),this.intervalsToClear.push(window.setInterval(()=>{var s;return void((s=this.branchBar)==null?void 0:s.display().catch(console.error))},6e4))}await((n=this.branchBar)==null?void 0:n.display()),this.lineAuthoringFeature.conditionallyActivateBySettings(),this.app.workspace.trigger("obsidian-git:refresh"),this.app.workspace.trigger("obsidian-git:head-change"),!r&&this.settings.autoPullOnBoot&&this.promiseQueue.addTask(()=>this.pullChangesFromRemote()),await this.automaticsManager.init();break;default:this.log("Something weird happened. The 'checkRequirements' result is "+i)}}catch(i){this.displayError(i),console.error(i)}}async createNewRepo(){try{await this.gitManager.init(),new Ce.Notice("Initialized new repo"),await this.init({fromReload:!0})}catch(r){this.displayError(r)}}async cloneNewRepo(){let n=await new Fe(this,{placeholder:"Enter remote URL"}).openAndGetResult();if(n){let i="Vault Root",a=await new Fe(this,{options:this.gitManager instanceof an?[i]:[],placeholder:"Enter directory for clone. It needs to be empty or not existent.",allowEmpty:this.gitManager instanceof an}).openAndGetResult();if(a==null)return;if(a===i&&(a="."),a=(0,Ce.normalizePath)(a),a==="/"&&(a="."),a==="."){let f=await new Fe(this,{options:["NO","YES"],placeholder:`Does your remote repo contain a ${this.app.vault.configDir} directory at the root?`,onlySelection:!0}).openAndGetResult();if(f===void 0){new Ce.Notice("Aborted clone");return}else if(f==="YES"){let d="DELETE ALL YOUR LOCAL CONFIG AND PLUGINS";if(await new Fe(this,{options:["Abort clone",d],placeholder:`To avoid conflicts, the local ${this.app.vault.configDir} directory needs to be deleted.`,onlySelection:!0}).openAndGetResult()===d)await this.app.vault.adapter.rmdir(this.app.vault.configDir,!0);else{new Ce.Notice("Aborted clone");return}}}let s=await new Fe(this,{placeholder:"Specify depth of clone. Leave empty for full clone.",allowEmpty:!0}).openAndGetResult(),o;if(s!==""&&(o=parseInt(s),isNaN(o))){new Ce.Notice("Invalid depth. Aborting clone.");return}new Ce.Notice(`Cloning new repo into "${a}"`);let c=this.settings.basePath,l=a&&a!==".";l&&(this.settings.basePath=a);try{await this.gitManager.clone(Vg(n),a,o),new Ce.Notice("Cloned new repo."),new Ce.Notice("Please restart Obsidian"),l&&await this.saveSettings()}catch(u){this.displayError(u),this.settings.basePath=c,await this.saveSettings()}}}async isAllInitialized(){return this.gitReady||await this.init({fromReload:!0}),this.gitReady}async pullChangesFromRemote(){if(!await this.isAllInitialized())return;let r=await this.pull();if(r!==!1){if(r||this.displayMessage("Pull: Everything is up-to-date"),this.gitManager instanceof Te){let n=await this.updateCachedStatus();n.conflicted.length>0&&(this.displayError(`You have conflicts in ${n.conflicted.length} ${n.conflicted.length==1?"file":"files"}`),await this.handleConflict(n.conflicted))}this.app.workspace.trigger("obsidian-git:refresh"),this.setPluginState({gitAction:0})}}async commitAndSync(r,n=!1,i){!await this.isAllInitialized()||(this.settings.syncMethod=="reset"&&this.settings.pullBeforePush&&await this.pull(),!await this.commit({fromAuto:r,requestCustomMessage:n,commitMessage:i}))||(this.settings.syncMethod!="reset"&&this.settings.pullBeforePush&&await this.pull(),this.settings.disablePush||(await this.remotesAreSet()&&await this.gitManager.canPush()?await this.push():this.displayMessage("No commits to push")),this.setPluginState({gitAction:0}))}async commit({fromAuto:r,requestCustomMessage:n=!1,onlyStaged:i=!1,commitMessage:a,amend:s=!1}){if(!await this.isAllInitialized())return!1;try{let o=this.localStorage.getConflict(),c,l,u;if(this.gitManager instanceof Te){if(await this.mayDeleteConflictFile(),l=await this.updateCachedStatus(),l.conflicted.length==0&&(o=!1),r&&l.conflicted.length>0)return this.displayError(`Did not commit, because you have conflicts in ${l.conflicted.length} ${l.conflicted.length==1?"file":"files"}. Please resolve them and commit per command.`),await this.handleConflict(l.conflicted),!1;c=[...l.changed,...l.staged]}else{if(r&&o)return this.displayError("Did not commit, because you have conflicts. Please resolve them and commit per command."),!1;if(o)await this.mayDeleteConflictFile(),l=await this.updateCachedStatus(),c=[...l.changed,...l.staged];else{let f=this.gitManager;i?c=await f.getStagedFiles():(u=await f.getUnstagedFiles(),c=u.map(({path:d})=>({vaultPath:this.gitManager.getRelativeVaultPath(d),path:d})))}}if(await this.tools.hasTooBigFiles(c))return this.setPluginState({gitAction:0}),!1;if(c.length!==0||o){let f=a!=null?a:a=r?this.settings.autoCommitMessage:this.settings.commitMessage;if(r&&this.settings.customMessageOnAutoBackup||n){!this.settings.disablePopups&&r&&new Ce.Notice("Auto backup: Please enter a custom commit message. Leave empty to abort");let p=await new od(this).openAndGetResult();if(p!=null&&p!=""&&p!="...")f=p;else return this.setPluginState({gitAction:0}),!1}let d;i?d=await this.gitManager.commit({message:f,amend:s}):d=await this.gitManager.commitAll({message:f,status:l,unstagedFiles:u,amend:s}),this.gitManager instanceof Te&&await this.updateCachedStatus();let h=!1;d===void 0&&(h=!0,d=c.length),this.displayMessage(`Committed${h?" approx.":""} ${d} ${d==1?"file":"files"}`)}else this.displayMessage("No changes to commit");return this.app.workspace.trigger("obsidian-git:refresh"),!0}catch(o){return this.displayError(o),!1}}async push(){if(!await this.isAllInitialized()||!await this.remotesAreSet())return!1;let r=this.localStorage.getConflict();try{this.gitManager instanceof Te&&await this.mayDeleteConflictFile();let n;if(this.gitManager instanceof Te&&(n=await this.updateCachedStatus()).conflicted.length>0)return this.displayError(`Cannot push. You have conflicts in ${n.conflicted.length} ${n.conflicted.length==1?"file":"files"}`),await this.handleConflict(n.conflicted),!1;if(this.gitManager instanceof an&&r)return this.displayError("Cannot push. You have conflicts"),!1;this.log("Pushing....");let i=await this.gitManager.push();return i!==void 0&&(i>0?this.displayMessage(`Pushed ${i} ${i==1?"file":"files"} to remote`):this.displayMessage("No commits to push")),this.setPluginState({offlineMode:!1}),this.app.workspace.trigger("obsidian-git:refresh"),!0}catch(n){return n instanceof Is?this.handleNoNetworkError(n):this.displayError(n),!1}}async pull(){if(!await this.remotesAreSet())return!1;try{this.log("Pulling....");let r=await this.gitManager.pull()||[];return this.setPluginState({offlineMode:!1}),r.length>0&&(this.displayMessage(`Pulled ${r.length} ${r.length==1?"file":"files"} from remote`),this.lastPulledFiles=r),r.length}catch(r){return this.displayError(r),!1}}async fetch(){if(await this.remotesAreSet())try{await this.gitManager.fetch(),this.displayMessage("Fetched from remote"),this.setPluginState({offlineMode:!1}),this.app.workspace.trigger("obsidian-git:refresh")}catch(r){this.displayError(r)}}async mayDeleteConflictFile(){let r=this.app.vault.getAbstractFileByPath(Ms);r&&(this.app.workspace.iterateAllLeaves(n=>{var i;n.view instanceof Ce.MarkdownView&&((i=n.view.file)==null?void 0:i.path)==r.path&&n.detach()}),await this.app.vault.delete(r))}async stageFile(r){return await this.isAllInitialized()?(await this.gitManager.stage(r.path,!0),this.displayMessage(`Staged ${r.path}`),this.app.workspace.trigger("obsidian-git:refresh"),this.setPluginState({gitAction:0}),!0):!1}async unstageFile(r){return await this.isAllInitialized()?(await this.gitManager.unstage(r.path,!0),this.displayMessage(`Unstaged ${r.path}`),this.app.workspace.trigger("obsidian-git:refresh"),this.setPluginState({gitAction:0}),!0):!1}async switchBranch(){var i;if(!await this.isAllInitialized())return;let r=await this.gitManager.branchInfo(),n=await new Hd(this,r.branches).openAndGetReslt();if(n!=null)return await this.gitManager.checkout(n),this.displayMessage(`Switched to ${n}`),this.app.workspace.trigger("obsidian-git:refresh"),await((i=this.branchBar)==null?void 0:i.display()),n}async switchRemoteBranch(){var a;if(!await this.isAllInitialized())return;let r=await this.selectRemoteBranch()||"",[n,i]=Ii(r);if(i!=null&&n!=null)return await this.gitManager.checkout(i,n),this.displayMessage(`Switched to ${r}`),await((a=this.branchBar)==null?void 0:a.display()),r}async createBranch(){var n;if(!await this.isAllInitialized())return;let r=await new Fe(this,{placeholder:"Create new branch"}).openAndGetResult();if(r!=null)return await this.gitManager.createBranch(r),this.displayMessage(`Created new branch ${r}`),await((n=this.branchBar)==null?void 0:n.display()),r}async deleteBranch(){var i;if(!await this.isAllInitialized())return;let r=await this.gitManager.branchInfo();r.current&&r.branches.remove(r.current);let n=await new Fe(this,{options:r.branches,placeholder:"Delete branch",onlySelection:!0}).openAndGetResult();if(n!=null){let a=!1;if(!await this.gitManager.branchIsMerged(n)){let o=await new Fe(this,{options:["YES","NO"],placeholder:"This branch isn't merged into HEAD. Force delete?",onlySelection:!0}).openAndGetResult();if(o!=="YES")return;a=o==="YES"}return await this.gitManager.deleteBranch(n,a),this.displayMessage(`Deleted branch ${n}`),await((i=this.branchBar)==null?void 0:i.display()),n}}async remotesAreSet(){return this.settings.updateSubmodules||(await this.gitManager.branchInfo()).tracking?!0:(new Ce.Notice("No upstream branch is set. Please select one."),await this.setUpstreamBranch())}async setUpstreamBranch(){let r=await this.selectRemoteBranch();return r==null?(this.displayError("Aborted. No upstream-branch is set!",1e4),this.setPluginState({gitAction:0}),!1):(await this.gitManager.updateUpstreamBranch(r),this.displayMessage(`Set upstream branch to ${r}`),this.setPluginState({gitAction:0}),!0)}async discardAll(){await this.gitManager.discardAll({status:this.cachedStatus}),new Ce.Notice("All local changes have been discarded. New files remain untouched."),this.app.workspace.trigger("obsidian-git:refresh")}async handleConflict(r){this.localStorage.setConflict(!0);let n;r!==void 0&&(n=["# 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","",...r.map(i=>{let a=this.app.vault.getAbstractFileByPath(i);return a instanceof Ce.TFile?`- [[${this.app.metadataCache.fileToLinktext(a,"/")}]]`:`- Not a file: ${i}`}),` +# 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 +\`\`\``]),await this.tools.writeAndOpenFile(n==null?void 0:n.join(` +`))}async editRemotes(){if(!await this.isAllInitialized())return;let r=await this.gitManager.getRemotes(),i=await new Fe(this,{options:r,placeholder:"Select or create a new remote by typing its name and selecting it"}).openAndGetResult();if(i){let a=await this.gitManager.getRemoteUrl(i),o=await new Fe(this,{initialValue:a}).openAndGetResult();if(o)return await this.gitManager.setRemote(i,Vg(o)),i}}async selectRemoteBranch(){let r=await this.gitManager.getRemotes(),n;r.length===0&&(n=await this.editRemotes(),n==null&&(r=await this.gitManager.getRemotes()));let i=new Fe(this,{options:r,placeholder:"Select or create a new remote by typing its name and selecting it"}),a=n!=null?n:await i.openAndGetResult();if(a){this.displayMessage("Fetching remote branches"),await this.gitManager.fetch(a);let s=await this.gitManager.getRemoteBranches(a);return await new Fe(this,{options:s,placeholder:"Select or create a new remote branch by typing its name and selecting it"}).openAndGetResult()}}async removeRemote(){if(!await this.isAllInitialized())return;let r=await this.gitManager.getRemotes(),i=await new Fe(this,{options:r,placeholder:"Select a remote"}).openAndGetResult();i&&await this.gitManager.removeRemote(i)}onActiveLeafChange(r){var s,o;let n=r==null?void 0:r.view;if(!(n!=null&&n.getState().file)&&!(n instanceof Ta||n instanceof Ga))return;let i=this.app.workspace.getLeavesOfType(St.type).first(),a=this.app.workspace.getLeavesOfType($r.type).first();if((s=i==null?void 0:i.view.containerEl.querySelector("div.nav-file-title.is-active"))==null||s.removeClass("is-active"),(o=a==null?void 0:a.view.containerEl.querySelector("div.nav-file-title.is-active"))==null||o.removeClass("is-active"),(r==null?void 0:r.view)instanceof Ta||(r==null?void 0:r.view)instanceof Ga){let c=r.view.state.bFile;this.lastDiffViewState=r.view.getState();let l;i&&r.view.state.aRef=="HEAD"?l=i.view.containerEl.querySelector(`div.staged div.nav-file-title[data-path='${c}']`):i&&r.view.state.aRef==""?l=i.view.containerEl.querySelector(`div.changes div.nav-file-title[data-path='${c}']`):a&&(l=a.view.containerEl.querySelector(`div.nav-file-title[data-path='${c}']`)),l==null||l.addClass("is-active")}else this.lastDiffViewState=void 0}handleNoNetworkError(r){this.state.offlineMode?this.log("Encountered network error, but already in offline mode"):this.displayError("Git: Going into offline mode. Future network errors will no longer be displayed.",2e3),this.setPluginState({gitAction:0,offlineMode:!0})}displayMessage(r,n=4*1e3){var i;(i=this.statusBar)==null||i.displayMessage(r.toLowerCase(),n),this.settings.disablePopups||(!this.settings.disablePopupsForNoChanges||!r.startsWith("No changes"))&&new Ce.Notice(r,5*1e3),this.log(r)}displayError(r,n=10*1e3){var a;if(r instanceof gl.UserCanceledError){new Ce.Notice("Aborted");return}let i;r instanceof Error?i=r:i=new Error(String(r)),this.setPluginState({gitAction:0}),new Ce.Notice(i.message,n),console.error(`${this.manifest.id}:`,i.stack),(a=this.statusBar)==null||a.displayMessage(i.message.toLowerCase(),n)}log(...r){console.log(`${this.manifest.id}:`,...r)}}; +/*! Bundled license information: + +ieee754/index.js: + (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> *) + +buffer/index.js: + (*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh <https://feross.org> + * @license MIT + *) + +safe-buffer/index.js: + (*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> *) + +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 + *) +*/ + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-git/manifest.json b/.obsidian/plugins/obsidian-git/manifest.json new file mode 100644 index 0000000..563cdfc --- /dev/null +++ b/.obsidian/plugins/obsidian-git/manifest.json @@ -0,0 +1,10 @@ +{ + "author": "Vinzent", + "authorUrl": "https://github.com/Vinzent03", + "id": "obsidian-git", + "name": "Git", + "description": "Integrate Git version control with automatic backup and other advanced features.", + "isDesktopOnly": false, + "fundingUrl": "https://ko-fi.com/vinzent", + "version": "2.32.1" +} diff --git a/.obsidian/plugins/obsidian-git/obsidian_askpass.sh b/.obsidian/plugins/obsidian-git/obsidian_askpass.sh new file mode 100755 index 0000000..2e5eb5d --- /dev/null +++ b/.obsidian/plugins/obsidian-git/obsidian_askpass.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +PROMPT="$1" +TEMP_FILE="$OBSIDIAN_GIT_CREDENTIALS_INPUT" + +cleanup() { + rm -f "$TEMP_FILE" "$TEMP_FILE.response" +} +trap cleanup EXIT + +echo "$PROMPT" > "$TEMP_FILE" + +while [ ! -e "$TEMP_FILE.response" ]; do + if [ ! -e "$TEMP_FILE" ]; then + echo "Trigger file got removed: Abort" >&2 + exit 1 + fi + sleep 0.1 +done + +RESPONSE=$(cat "$TEMP_FILE.response") + +echo "$RESPONSE" diff --git a/.obsidian/plugins/obsidian-git/styles.css b/.obsidian/plugins/obsidian-git/styles.css new file mode 100644 index 0000000..f0a7c38 --- /dev/null +++ b/.obsidian/plugins/obsidian-git/styles.css @@ -0,0 +1,576 @@ +@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-disabled { + opacity: 0.5; +} + +.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; +} + +.is-active .git-tools .buttons > * { + color: var(--nav-item-color-active); +} + +.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; + } +} + +.git-unified-diff-view, +.git-split-diff-view .cm-deletedLine .cm-changedText { + background-color: #ee443330; +} + +.git-unified-diff-view, +.git-split-diff-view .cm-insertedLine .cm-changedText { + background-color: #22bb2230; +} diff --git a/.obsidian/plugins/obsidian-importer/main.js b/.obsidian/plugins/obsidian-importer/main.js new file mode 100644 index 0000000..295585b --- /dev/null +++ b/.obsidian/plugins/obsidian-importer/main.js @@ -0,0 +1,228 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var hd=Object.create;var vi=Object.defineProperty;var gd=Object.getOwnPropertyDescriptor;var yd=Object.getOwnPropertyNames;var bd=Object.getPrototypeOf,xd=Object.prototype.hasOwnProperty;var Y=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports),Se=(n,t)=>{for(var e in t)vi(n,e,{get:t[e],enumerable:!0})},is=(n,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of yd(t))!xd.call(n,r)&&r!==e&&vi(n,r,{get:()=>t[r],enumerable:!(i=gd(t,r))||i.enumerable});return n};var rs=(n,t,e)=>(e=n!=null?hd(bd(n)):{},is(t||!n||!n.__esModule?vi(e,"default",{value:n,enumerable:!0}):e,n)),wd=n=>is(vi({},"__esModule",{value:!0}),n);var Do=Y((Mx,Ml)=>{"use strict";Ml.exports=sh;function sh(n,t){for(var e=new Array(arguments.length-1),i=0,r=2,o=!0;r<arguments.length;)e[i++]=arguments[r++];return new Promise(function(s,l){e[i]=function(p){if(o)if(o=!1,p)l(p);else{for(var m=new Array(arguments.length-1),y=0;y<m.length;)m[y++]=arguments[y];s.apply(null,m)}};try{n.apply(t||null,e)}catch(c){o&&(o=!1,l(c))}})}});var jl=Y(Ul=>{"use strict";var zi=Ul;zi.length=function(t){var e=t.length;if(!e)return 0;for(var i=0;--e%4>1&&t.charAt(e)==="=";)++i;return Math.ceil(t.length*3)/4-i};var wn=new Array(64),Bl=new Array(123);for(Ye=0;Ye<64;)Bl[wn[Ye]=Ye<26?Ye+65:Ye<52?Ye+71:Ye<62?Ye-4:Ye-59|43]=Ye++;var Ye;zi.encode=function(t,e,i){for(var r=null,o=[],a=0,s=0,l;e<i;){var c=t[e++];switch(s){case 0:o[a++]=wn[c>>2],l=(c&3)<<4,s=1;break;case 1:o[a++]=wn[l|c>>4],l=(c&15)<<2,s=2;break;case 2:o[a++]=wn[l|c>>6],o[a++]=wn[c&63],s=0;break}a>8191&&((r||(r=[])).push(String.fromCharCode.apply(String,o)),a=0)}return s&&(o[a++]=wn[l],o[a++]=61,s===1&&(o[a++]=61)),r?(a&&r.push(String.fromCharCode.apply(String,o.slice(0,a))),r.join("")):String.fromCharCode.apply(String,o.slice(0,a))};var $l="invalid encoding";zi.decode=function(t,e,i){for(var r=i,o=0,a,s=0;s<t.length;){var l=t.charCodeAt(s++);if(l===61&&o>1)break;if((l=Bl[l])===void 0)throw Error($l);switch(o){case 0:a=l,o=1;break;case 1:e[i++]=a<<2|(l&48)>>4,a=l,o=2;break;case 2:e[i++]=(a&15)<<4|(l&60)>>2,a=l,o=3;break;case 3:e[i++]=(a&3)<<6|l,o=0;break}}if(o===1)throw Error($l);return i-r};zi.test=function(t){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(t)}});var ql=Y((Bx,Hl)=>{"use strict";Hl.exports=Gi;function Gi(){this._listeners={}}Gi.prototype.on=function(t,e,i){return(this._listeners[t]||(this._listeners[t]=[])).push({fn:e,ctx:i||this}),this};Gi.prototype.off=function(t,e){if(t===void 0)this._listeners={};else if(e===void 0)this._listeners[t]=[];else for(var i=this._listeners[t],r=0;r<i.length;)i[r].fn===e?i.splice(r,1):++r;return this};Gi.prototype.emit=function(t){var e=this._listeners[t];if(e){for(var i=[],r=1;r<arguments.length;)i.push(arguments[r++]);for(r=0;r<e.length;)e[r].fn.apply(e[r++].ctx,i)}return this}});var Kl=Y((Ux,Vl)=>{"use strict";Vl.exports=Wl(Wl);function Wl(n){return typeof Float32Array!="undefined"?function(){var t=new Float32Array([-0]),e=new Uint8Array(t.buffer),i=e[3]===128;function r(l,c,p){t[0]=l,c[p]=e[0],c[p+1]=e[1],c[p+2]=e[2],c[p+3]=e[3]}function o(l,c,p){t[0]=l,c[p]=e[3],c[p+1]=e[2],c[p+2]=e[1],c[p+3]=e[0]}n.writeFloatLE=i?r:o,n.writeFloatBE=i?o:r;function a(l,c){return e[0]=l[c],e[1]=l[c+1],e[2]=l[c+2],e[3]=l[c+3],t[0]}function s(l,c){return e[3]=l[c],e[2]=l[c+1],e[1]=l[c+2],e[0]=l[c+3],t[0]}n.readFloatLE=i?a:s,n.readFloatBE=i?s:a}():function(){function t(i,r,o,a){var s=r<0?1:0;if(s&&(r=-r),r===0)i(1/r>0?0:2147483648,o,a);else if(isNaN(r))i(2143289344,o,a);else if(r>34028234663852886e22)i((s<<31|2139095040)>>>0,o,a);else if(r<11754943508222875e-54)i((s<<31|Math.round(r/1401298464324817e-60))>>>0,o,a);else{var l=Math.floor(Math.log(r)/Math.LN2),c=Math.round(r*Math.pow(2,-l)*8388608)&8388607;i((s<<31|l+127<<23|c)>>>0,o,a)}}n.writeFloatLE=t.bind(null,Zl),n.writeFloatBE=t.bind(null,Yl);function e(i,r,o){var a=i(r,o),s=(a>>31)*2+1,l=a>>>23&255,c=a&8388607;return l===255?c?NaN:s*(1/0):l===0?s*1401298464324817e-60*c:s*Math.pow(2,l-150)*(c+8388608)}n.readFloatLE=e.bind(null,zl),n.readFloatBE=e.bind(null,Gl)}(),typeof Float64Array!="undefined"?function(){var t=new Float64Array([-0]),e=new Uint8Array(t.buffer),i=e[7]===128;function r(l,c,p){t[0]=l,c[p]=e[0],c[p+1]=e[1],c[p+2]=e[2],c[p+3]=e[3],c[p+4]=e[4],c[p+5]=e[5],c[p+6]=e[6],c[p+7]=e[7]}function o(l,c,p){t[0]=l,c[p]=e[7],c[p+1]=e[6],c[p+2]=e[5],c[p+3]=e[4],c[p+4]=e[3],c[p+5]=e[2],c[p+6]=e[1],c[p+7]=e[0]}n.writeDoubleLE=i?r:o,n.writeDoubleBE=i?o:r;function a(l,c){return e[0]=l[c],e[1]=l[c+1],e[2]=l[c+2],e[3]=l[c+3],e[4]=l[c+4],e[5]=l[c+5],e[6]=l[c+6],e[7]=l[c+7],t[0]}function s(l,c){return e[7]=l[c],e[6]=l[c+1],e[5]=l[c+2],e[4]=l[c+3],e[3]=l[c+4],e[2]=l[c+5],e[1]=l[c+6],e[0]=l[c+7],t[0]}n.readDoubleLE=i?a:s,n.readDoubleBE=i?s:a}():function(){function t(i,r,o,a,s,l){var c=a<0?1:0;if(c&&(a=-a),a===0)i(0,s,l+r),i(1/a>0?0:2147483648,s,l+o);else if(isNaN(a))i(0,s,l+r),i(2146959360,s,l+o);else if(a>17976931348623157e292)i(0,s,l+r),i((c<<31|2146435072)>>>0,s,l+o);else{var p;if(a<22250738585072014e-324)p=a/5e-324,i(p>>>0,s,l+r),i((c<<31|p/4294967296)>>>0,s,l+o);else{var m=Math.floor(Math.log(a)/Math.LN2);m===1024&&(m=1023),p=a*Math.pow(2,-m),i(p*4503599627370496>>>0,s,l+r),i((c<<31|m+1023<<20|p*1048576&1048575)>>>0,s,l+o)}}}n.writeDoubleLE=t.bind(null,Zl,0,4),n.writeDoubleBE=t.bind(null,Yl,4,0);function e(i,r,o,a,s){var l=i(a,s+r),c=i(a,s+o),p=(c>>31)*2+1,m=c>>>20&2047,y=4294967296*(c&1048575)+l;return m===2047?y?NaN:p*(1/0):m===0?p*5e-324*y:p*Math.pow(2,m-1075)*(y+4503599627370496)}n.readDoubleLE=e.bind(null,zl,0,4),n.readDoubleBE=e.bind(null,Gl,4,0)}(),n}function Zl(n,t,e){t[e]=n&255,t[e+1]=n>>>8&255,t[e+2]=n>>>16&255,t[e+3]=n>>>24}function Yl(n,t,e){t[e]=n>>>24,t[e+1]=n>>>16&255,t[e+2]=n>>>8&255,t[e+3]=n&255}function zl(n,t){return(n[t]|n[t+1]<<8|n[t+2]<<16|n[t+3]<<24)>>>0}function Gl(n,t){return(n[t]<<24|n[t+1]<<16|n[t+2]<<8|n[t+3])>>>0}});var Co=Y((exports,module)=>{"use strict";module.exports=inquire;function inquire(moduleName){try{var mod=eval("quire".replace(/^/,"re"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(n){}return null}});var Jl=Y(Xl=>{"use strict";var Io=Xl;Io.length=function(t){for(var e=0,i=0,r=0;r<t.length;++r)i=t.charCodeAt(r),i<128?e+=1:i<2048?e+=2:(i&64512)===55296&&(t.charCodeAt(r+1)&64512)===56320?(++r,e+=4):e+=3;return e};Io.read=function(t,e,i){var r=i-e;if(r<1)return"";for(var o=null,a=[],s=0,l;e<i;)l=t[e++],l<128?a[s++]=l:l>191&&l<224?a[s++]=(l&31)<<6|t[e++]&63:l>239&&l<365?(l=((l&7)<<18|(t[e++]&63)<<12|(t[e++]&63)<<6|t[e++]&63)-65536,a[s++]=55296+(l>>10),a[s++]=56320+(l&1023)):a[s++]=(l&15)<<12|(t[e++]&63)<<6|t[e++]&63,s>8191&&((o||(o=[])).push(String.fromCharCode.apply(String,a)),s=0);return o?(s&&o.push(String.fromCharCode.apply(String,a.slice(0,s))),o.join("")):String.fromCharCode.apply(String,a.slice(0,s))};Io.write=function(t,e,i){for(var r=i,o,a,s=0;s<t.length;++s)o=t.charCodeAt(s),o<128?e[i++]=o:o<2048?(e[i++]=o>>6|192,e[i++]=o&63|128):(o&64512)===55296&&((a=t.charCodeAt(s+1))&64512)===56320?(o=65536+((o&1023)<<10)+(a&1023),++s,e[i++]=o>>18|240,e[i++]=o>>12&63|128,e[i++]=o>>6&63|128,e[i++]=o&63|128):(e[i++]=o>>12|224,e[i++]=o>>6&63|128,e[i++]=o&63|128);return i-r}});var ec=Y((Hx,Ql)=>{"use strict";Ql.exports=lh;function lh(n,t,e){var i=e||8192,r=i>>>1,o=null,a=i;return function(l){if(l<1||l>r)return n(l);a+l>i&&(o=n(i),a=0);var c=t.call(o,a,a+=l);return a&7&&(a=(a|7)+1),c}}});var nc=Y((qx,tc)=>{"use strict";tc.exports=ge;var ei=et();function ge(n,t){this.lo=n>>>0,this.hi=t>>>0}var Jt=ge.zero=new ge(0,0);Jt.toNumber=function(){return 0};Jt.zzEncode=Jt.zzDecode=function(){return this};Jt.length=function(){return 1};var ch=ge.zeroHash="\0\0\0\0\0\0\0\0";ge.fromNumber=function(t){if(t===0)return Jt;var e=t<0;e&&(t=-t);var i=t>>>0,r=(t-i)/4294967296>>>0;return e&&(r=~r>>>0,i=~i>>>0,++i>4294967295&&(i=0,++r>4294967295&&(r=0))),new ge(i,r)};ge.from=function(t){if(typeof t=="number")return ge.fromNumber(t);if(ei.isString(t))if(ei.Long)t=ei.Long.fromString(t);else return ge.fromNumber(parseInt(t,10));return t.low||t.high?new ge(t.low>>>0,t.high>>>0):Jt};ge.prototype.toNumber=function(t){if(!t&&this.hi>>>31){var e=~this.lo+1>>>0,i=~this.hi>>>0;return e||(i=i+1>>>0),-(e+i*4294967296)}return this.lo+this.hi*4294967296};ge.prototype.toLong=function(t){return ei.Long?new ei.Long(this.lo|0,this.hi|0,Boolean(t)):{low:this.lo|0,high:this.hi|0,unsigned:Boolean(t)}};var Ot=String.prototype.charCodeAt;ge.fromHash=function(t){return t===ch?Jt:new ge((Ot.call(t,0)|Ot.call(t,1)<<8|Ot.call(t,2)<<16|Ot.call(t,3)<<24)>>>0,(Ot.call(t,4)|Ot.call(t,5)<<8|Ot.call(t,6)<<16|Ot.call(t,7)<<24)>>>0)};ge.prototype.toHash=function(){return String.fromCharCode(this.lo&255,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,this.hi&255,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)};ge.prototype.zzEncode=function(){var t=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^t)>>>0,this.lo=(this.lo<<1^t)>>>0,this};ge.prototype.zzDecode=function(){var t=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^t)>>>0,this.hi=(this.hi>>>1^t)>>>0,this};ge.prototype.length=function(){var t=this.lo,e=(this.lo>>>28|this.hi<<4)>>>0,i=this.hi>>>24;return i===0?e===0?t<16384?t<128?1:2:t<2097152?3:4:e<16384?e<128?5:6:e<2097152?7:8:i<128?9:10}});var et=Y(Fo=>{"use strict";var H=Fo;H.asPromise=Do();H.base64=jl();H.EventEmitter=ql();H.float=Kl();H.inquire=Co();H.utf8=Jl();H.pool=ec();H.LongBits=nc();H.isNode=Boolean(typeof global!="undefined"&&global&&global.process&&global.process.versions&&global.process.versions.node);H.global=H.isNode&&global||typeof window!="undefined"&&window||typeof self!="undefined"&&self||Fo;H.emptyArray=Object.freeze?Object.freeze([]):[];H.emptyObject=Object.freeze?Object.freeze({}):{};H.isInteger=Number.isInteger||function(t){return typeof t=="number"&&isFinite(t)&&Math.floor(t)===t};H.isString=function(t){return typeof t=="string"||t instanceof String};H.isObject=function(t){return t&&typeof t=="object"};H.isset=H.isSet=function(t,e){var i=t[e];return i!=null&&t.hasOwnProperty(e)?typeof i!="object"||(Array.isArray(i)?i.length:Object.keys(i).length)>0:!1};H.Buffer=function(){try{var n=H.inquire("buffer").Buffer;return n.prototype.utf8Write?n:null}catch(t){return null}}();H._Buffer_from=null;H._Buffer_allocUnsafe=null;H.newBuffer=function(t){return typeof t=="number"?H.Buffer?H._Buffer_allocUnsafe(t):new H.Array(t):H.Buffer?H._Buffer_from(t):typeof Uint8Array=="undefined"?t:new Uint8Array(t)};H.Array=typeof Uint8Array!="undefined"?Uint8Array:Array;H.Long=H.global.dcodeIO&&H.global.dcodeIO.Long||H.global.Long||H.inquire("long");H.key2Re=/^true|false|0|1$/;H.key32Re=/^-?(?:0|[1-9][0-9]*)$/;H.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;H.longToHash=function(t){return t?H.LongBits.from(t).toHash():H.LongBits.zeroHash};H.longFromHash=function(t,e){var i=H.LongBits.fromHash(t);return H.Long?H.Long.fromBits(i.lo,i.hi,e):i.toNumber(Boolean(e))};function ic(n,t,e){for(var i=Object.keys(t),r=0;r<i.length;++r)(n[i[r]]===void 0||!e)&&(n[i[r]]=t[i[r]]);return n}H.merge=ic;H.lcFirst=function(t){return t.charAt(0).toLowerCase()+t.substring(1)};function rc(n){function t(e,i){if(!(this instanceof t))return new t(e,i);Object.defineProperty(this,"message",{get:function(){return e}}),Error.captureStackTrace?Error.captureStackTrace(this,t):Object.defineProperty(this,"stack",{value:new Error().stack||""}),i&&ic(this,i)}return t.prototype=Object.create(Error.prototype,{constructor:{value:t,writable:!0,enumerable:!1,configurable:!0},name:{get:function(){return n},set:void 0,enumerable:!1,configurable:!0},toString:{value:function(){return this.name+": "+this.message},writable:!0,enumerable:!1,configurable:!0}}),t}H.newError=rc;H.ProtocolError=rc("ProtocolError");H.oneOfGetter=function(t){for(var e={},i=0;i<t.length;++i)e[t[i]]=1;return function(){for(var r=Object.keys(this),o=r.length-1;o>-1;--o)if(e[r[o]]===1&&this[r[o]]!==void 0&&this[r[o]]!==null)return r[o]}};H.oneOfSetter=function(t){return function(e){for(var i=0;i<t.length;++i)t[i]!==e&&delete this[t[i]]}};H.toJSONOptions={longs:String,enums:String,bytes:String,json:!0};H._configure=function(){var n=H.Buffer;if(!n){H._Buffer_from=H._Buffer_allocUnsafe=null;return}H._Buffer_from=n.from!==Uint8Array.from&&n.from||function(e,i){return new n(e,i)},H._Buffer_allocUnsafe=n.allocUnsafe||function(e){return new n(e)}}});var Ki=Y((Zx,lc)=>{"use strict";lc.exports=X;var $e=et(),Lo,Vi=$e.LongBits,oc=$e.base64,ac=$e.utf8;function ti(n,t,e){this.fn=n,this.len=t,this.next=void 0,this.val=e}function Mo(){}function ph(n){this.head=n.head,this.tail=n.tail,this.len=n.len,this.next=n.states}function X(){this.len=0,this.head=new ti(Mo,0,0),this.tail=this.head,this.states=null}var sc=function(){return $e.Buffer?function(){return(X.create=function(){return new Lo})()}:function(){return new X}};X.create=sc();X.alloc=function(t){return new $e.Array(t)};$e.Array!==Array&&(X.alloc=$e.pool(X.alloc,$e.Array.prototype.subarray));X.prototype._push=function(t,e,i){return this.tail=this.tail.next=new ti(t,e,i),this.len+=e,this};function $o(n,t,e){t[e]=n&255}function uh(n,t,e){for(;n>127;)t[e++]=n&127|128,n>>>=7;t[e]=n}function Bo(n,t){this.len=n,this.next=void 0,this.val=t}Bo.prototype=Object.create(ti.prototype);Bo.prototype.fn=uh;X.prototype.uint32=function(t){return this.len+=(this.tail=this.tail.next=new Bo((t=t>>>0)<128?1:t<16384?2:t<2097152?3:t<268435456?4:5,t)).len,this};X.prototype.int32=function(t){return t<0?this._push(Uo,10,Vi.fromNumber(t)):this.uint32(t)};X.prototype.sint32=function(t){return this.uint32((t<<1^t>>31)>>>0)};function Uo(n,t,e){for(;n.hi;)t[e++]=n.lo&127|128,n.lo=(n.lo>>>7|n.hi<<25)>>>0,n.hi>>>=7;for(;n.lo>127;)t[e++]=n.lo&127|128,n.lo=n.lo>>>7;t[e++]=n.lo}X.prototype.uint64=function(t){var e=Vi.from(t);return this._push(Uo,e.length(),e)};X.prototype.int64=X.prototype.uint64;X.prototype.sint64=function(t){var e=Vi.from(t).zzEncode();return this._push(Uo,e.length(),e)};X.prototype.bool=function(t){return this._push($o,1,t?1:0)};function Po(n,t,e){t[e]=n&255,t[e+1]=n>>>8&255,t[e+2]=n>>>16&255,t[e+3]=n>>>24}X.prototype.fixed32=function(t){return this._push(Po,4,t>>>0)};X.prototype.sfixed32=X.prototype.fixed32;X.prototype.fixed64=function(t){var e=Vi.from(t);return this._push(Po,4,e.lo)._push(Po,4,e.hi)};X.prototype.sfixed64=X.prototype.fixed64;X.prototype.float=function(t){return this._push($e.float.writeFloatLE,4,t)};X.prototype.double=function(t){return this._push($e.float.writeDoubleLE,8,t)};var fh=$e.Array.prototype.set?function(t,e,i){e.set(t,i)}:function(t,e,i){for(var r=0;r<t.length;++r)e[i+r]=t[r]};X.prototype.bytes=function(t){var e=t.length>>>0;if(!e)return this._push($o,1,0);if($e.isString(t)){var i=X.alloc(e=oc.length(t));oc.decode(t,i,0),t=i}return this.uint32(e)._push(fh,e,t)};X.prototype.string=function(t){var e=ac.length(t);return e?this.uint32(e)._push(ac.write,e,t):this._push($o,1,0)};X.prototype.fork=function(){return this.states=new ph(this),this.head=this.tail=new ti(Mo,0,0),this.len=0,this};X.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new ti(Mo,0,0),this.len=0),this};X.prototype.ldelim=function(){var t=this.head,e=this.tail,i=this.len;return this.reset().uint32(i),i&&(this.tail.next=t.next,this.tail=e,this.len+=i),this};X.prototype.finish=function(){for(var t=this.head.next,e=this.constructor.alloc(this.len),i=0;t;)t.fn(t.val,e,i),i+=t.len,t=t.next;return e};X._configure=function(n){Lo=n,X.create=sc(),Lo._configure()}});var uc=Y((Yx,pc)=>{"use strict";pc.exports=tt;var cc=Ki();(tt.prototype=Object.create(cc.prototype)).constructor=tt;var Dt=et();function tt(){cc.call(this)}tt._configure=function(){tt.alloc=Dt._Buffer_allocUnsafe,tt.writeBytesBuffer=Dt.Buffer&&Dt.Buffer.prototype instanceof Uint8Array&&Dt.Buffer.prototype.set.name==="set"?function(t,e,i){e.set(t,i)}:function(t,e,i){if(t.copy)t.copy(e,i,0,t.length);else for(var r=0;r<t.length;)e[i++]=t[r++]}};tt.prototype.bytes=function(t){Dt.isString(t)&&(t=Dt._Buffer_from(t,"base64"));var e=t.length>>>0;return this.uint32(e),e&&this._push(tt.writeBytesBuffer,e,t),this};function dh(n,t,e){n.length<40?Dt.utf8.write(n,t,e):t.utf8Write?t.utf8Write(n,e):t.write(n,e)}tt.prototype.string=function(t){var e=Dt.Buffer.byteLength(t);return this.uint32(e),e&&this._push(dh,e,t),this};tt._configure()});var Ji=Y((zx,gc)=>{"use strict";gc.exports=se;var ze=et(),Ho,mc=ze.LongBits,mh=ze.utf8;function Ge(n,t){return RangeError("index out of range: "+n.pos+" + "+(t||1)+" > "+n.len)}function se(n){this.buf=n,this.pos=0,this.len=n.length}var fc=typeof Uint8Array!="undefined"?function(t){if(t instanceof Uint8Array||Array.isArray(t))return new se(t);throw Error("illegal buffer")}:function(t){if(Array.isArray(t))return new se(t);throw Error("illegal buffer")},hc=function(){return ze.Buffer?function(e){return(se.create=function(r){return ze.Buffer.isBuffer(r)?new Ho(r):fc(r)})(e)}:fc};se.create=hc();se.prototype._slice=ze.Array.prototype.subarray||ze.Array.prototype.slice;se.prototype.uint32=function(){var t=4294967295;return function(){if(t=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(t=(t|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return t;if((this.pos+=5)>this.len)throw this.pos=this.len,Ge(this,10);return t}}();se.prototype.int32=function(){return this.uint32()|0};se.prototype.sint32=function(){var t=this.uint32();return t>>>1^-(t&1)|0};function jo(){var n=new mc(0,0),t=0;if(this.len-this.pos>4){for(;t<4;++t)if(n.lo=(n.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return n;if(n.lo=(n.lo|(this.buf[this.pos]&127)<<28)>>>0,n.hi=(n.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return n;t=0}else{for(;t<3;++t){if(this.pos>=this.len)throw Ge(this);if(n.lo=(n.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return n}return n.lo=(n.lo|(this.buf[this.pos++]&127)<<t*7)>>>0,n}if(this.len-this.pos>4){for(;t<5;++t)if(n.hi=(n.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return n}else for(;t<5;++t){if(this.pos>=this.len)throw Ge(this);if(n.hi=(n.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return n}throw Error("invalid varint encoding")}se.prototype.bool=function(){return this.uint32()!==0};function Xi(n,t){return(n[t-4]|n[t-3]<<8|n[t-2]<<16|n[t-1]<<24)>>>0}se.prototype.fixed32=function(){if(this.pos+4>this.len)throw Ge(this,4);return Xi(this.buf,this.pos+=4)};se.prototype.sfixed32=function(){if(this.pos+4>this.len)throw Ge(this,4);return Xi(this.buf,this.pos+=4)|0};function dc(){if(this.pos+8>this.len)throw Ge(this,8);return new mc(Xi(this.buf,this.pos+=4),Xi(this.buf,this.pos+=4))}se.prototype.float=function(){if(this.pos+4>this.len)throw Ge(this,4);var t=ze.float.readFloatLE(this.buf,this.pos);return this.pos+=4,t};se.prototype.double=function(){if(this.pos+8>this.len)throw Ge(this,4);var t=ze.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,t};se.prototype.bytes=function(){var t=this.uint32(),e=this.pos,i=this.pos+t;if(i>this.len)throw Ge(this,t);if(this.pos+=t,Array.isArray(this.buf))return this.buf.slice(e,i);if(e===i){var r=ze.Buffer;return r?r.alloc(0):new this.buf.constructor(0)}return this._slice.call(this.buf,e,i)};se.prototype.string=function(){var t=this.bytes();return mh.read(t,0,t.length)};se.prototype.skip=function(t){if(typeof t=="number"){if(this.pos+t>this.len)throw Ge(this,t);this.pos+=t}else do if(this.pos>=this.len)throw Ge(this);while(this.buf[this.pos++]&128);return this};se.prototype.skipType=function(n){switch(n){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(n=this.uint32()&7)!==4;)this.skipType(n);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+n+" at offset "+this.pos)}return this};se._configure=function(n){Ho=n,se.create=hc(),Ho._configure();var t=ze.Long?"toLong":"toNumber";ze.merge(se.prototype,{int64:function(){return jo.call(this)[t](!1)},uint64:function(){return jo.call(this)[t](!0)},sint64:function(){return jo.call(this).zzDecode()[t](!1)},fixed64:function(){return dc.call(this)[t](!0)},sfixed64:function(){return dc.call(this)[t](!1)}})}});var wc=Y((Gx,xc)=>{"use strict";xc.exports=Qt;var bc=Ji();(Qt.prototype=Object.create(bc.prototype)).constructor=Qt;var yc=et();function Qt(n){bc.call(this,n)}Qt._configure=function(){yc.Buffer&&(Qt.prototype._slice=yc.Buffer.prototype.slice)};Qt.prototype.string=function(){var t=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+t,this.len)):this.buf.toString("utf-8",this.pos,this.pos=Math.min(this.pos+t,this.len))};Qt._configure()});var Ec=Y((Vx,vc)=>{"use strict";vc.exports=ni;var qo=et();(ni.prototype=Object.create(qo.EventEmitter.prototype)).constructor=ni;function ni(n,t,e){if(typeof n!="function")throw TypeError("rpcImpl must be a function");qo.EventEmitter.call(this),this.rpcImpl=n,this.requestDelimited=Boolean(t),this.responseDelimited=Boolean(e)}ni.prototype.rpcCall=function n(t,e,i,r,o){if(!r)throw TypeError("request must be specified");var a=this;if(!o)return qo.asPromise(n,a,t,e,i,r);if(!a.rpcImpl){setTimeout(function(){o(Error("already ended"))},0);return}try{return a.rpcImpl(t,e[a.requestDelimited?"encodeDelimited":"encode"](r).finish(),function(l,c){if(l)return a.emit("error",l,t),o(l);if(c===null){a.end(!0);return}if(!(c instanceof i))try{c=i[a.responseDelimited?"decodeDelimited":"decode"](c)}catch(p){return a.emit("error",p,t),o(p)}return a.emit("data",c,t),o(null,c)})}catch(s){a.emit("error",s,t),setTimeout(function(){o(s)},0);return}};ni.prototype.end=function(t){return this.rpcImpl&&(t||this.rpcImpl(null,null,null),this.rpcImpl=null,this.emit("end").off()),this}});var Wo=Y(_c=>{"use strict";var hh=_c;hh.Service=Ec()});var Zo=Y((Xx,Tc)=>{"use strict";Tc.exports={}});var Nc=Y(kc=>{"use strict";var Oe=kc;Oe.build="minimal";Oe.Writer=Ki();Oe.BufferWriter=uc();Oe.Reader=Ji();Oe.BufferReader=wc();Oe.util=et();Oe.rpc=Wo();Oe.roots=Zo();Oe.configure=Ac;function Ac(){Oe.util._configure(),Oe.Writer._configure(Oe.BufferWriter),Oe.Reader._configure(Oe.BufferReader)}Ac()});var Rc=Y((Qx,Sc)=>{"use strict";Sc.exports=Yo;function Yo(n,t){typeof n=="string"&&(t=n,n=void 0);var e=[];function i(o){if(typeof o!="string"){var a=r();if(Yo.verbose&&console.log("codegen: "+a),a="return "+a,o){for(var s=Object.keys(o),l=new Array(s.length+1),c=new Array(s.length),p=0;p<s.length;)l[p]=s[p],c[p]=o[s[p++]];return l[p]=a,Function.apply(null,l).apply(null,c)}return Function(a)()}for(var m=new Array(arguments.length-1),y=0;y<m.length;)m[y]=arguments[++y];if(y=0,o=o.replace(/%([%dfijs])/g,function(E,d){var f=m[y++];switch(d){case"d":case"f":return String(Number(f));case"i":return String(Math.floor(f));case"j":return JSON.stringify(f);case"s":return String(f)}return"%"}),y!==m.length)throw Error("parameter count mismatch");return e.push(o),i}function r(o){return"function "+(o||t||"")+"("+(n&&n.join(",")||"")+`){ + `+e.join(` + `)+` +}`}return i.toString=r,i}Yo.verbose=!1});var Dc=Y((ew,Oc)=>{"use strict";Oc.exports=ii;var gh=Do(),yh=Co(),zo=yh("fs");function ii(n,t,e){return typeof t=="function"?(e=t,t={}):t||(t={}),e?!t.xhr&&zo&&zo.readFile?zo.readFile(n,function(r,o){return r&&typeof XMLHttpRequest!="undefined"?ii.xhr(n,t,e):r?e(r):e(null,t.binary?o:o.toString("utf8"))}):ii.xhr(n,t,e):gh(ii,this,n,t)}ii.xhr=function(t,e,i){var r=new XMLHttpRequest;r.onreadystatechange=function(){if(r.readyState===4){if(r.status!==0&&r.status!==200)return i(Error("status "+r.status));if(e.binary){var a=r.response;if(!a){a=[];for(var s=0;s<r.responseText.length;++s)a.push(r.responseText.charCodeAt(s)&255)}return i(null,typeof Uint8Array!="undefined"?new Uint8Array(a):a)}return i(null,r.responseText)}},e.binary&&("overrideMimeType"in r&&r.overrideMimeType("text/plain; charset=x-user-defined"),r.responseType="arraybuffer"),r.open("GET",t),r.send()}});var Fc=Y(Ic=>{"use strict";var Vo=Ic,Cc=Vo.isAbsolute=function(t){return/^(?:\/|\w+:)/.test(t)},Go=Vo.normalize=function(t){t=t.replace(/\\/g,"/").replace(/\/{2,}/g,"/");var e=t.split("/"),i=Cc(t),r="";i&&(r=e.shift()+"/");for(var o=0;o<e.length;)e[o]===".."?o>0&&e[o-1]!==".."?e.splice(--o,2):i?e.splice(o,1):++o:e[o]==="."?e.splice(o,1):++o;return r+e.join("/")};Vo.resolve=function(t,e,i){return i||(e=Go(e)),Cc(e)?e:(i||(t=Go(t)),(t=t.replace(/(?:\/|^)[^/]+$/,"")).length?Go(t+"/"+e):e)}});var en=Y(Lc=>{"use strict";var ri=Lc,bh=ye(),xh=["double","float","int32","uint32","sint32","fixed32","sfixed32","int64","uint64","sint64","fixed64","sfixed64","bool","string","bytes"];function oi(n,t){var e=0,i={};for(t|=0;e<n.length;)i[xh[e+t]]=n[e++];return i}ri.basic=oi([1,5,0,0,0,5,5,0,0,0,1,1,0,2,2]);ri.defaults=oi([0,0,0,0,0,0,0,0,0,0,0,0,!1,"",bh.emptyArray,null]);ri.long=oi([0,0,0,1,1],7);ri.mapKey=oi([0,0,0,5,5,0,0,0,1,1,0,2],2);ri.packed=oi([1,5,0,0,0,5,5,0,0,0,1,1,0])});var Ct=Y((iw,$c)=>{"use strict";$c.exports=Be;var Qi=tn();((Be.prototype=Object.create(Qi.prototype)).constructor=Be).className="Field";var Pc=Ve(),Mc=en(),pe=ye(),Ko,wh=/^required|optional|repeated$/;Be.fromJSON=function(t,e){return new Be(t,e.id,e.type,e.rule,e.extend,e.options,e.comment)};function Be(n,t,e,i,r,o,a){if(pe.isObject(i)?(a=r,o=i,i=r=void 0):pe.isObject(r)&&(a=o,o=r,r=void 0),Qi.call(this,n,o),!pe.isInteger(t)||t<0)throw TypeError("id must be a non-negative integer");if(!pe.isString(e))throw TypeError("type must be a string");if(i!==void 0&&!wh.test(i=i.toString().toLowerCase()))throw TypeError("rule must be a string rule");if(r!==void 0&&!pe.isString(r))throw TypeError("extend must be a string");i==="proto3_optional"&&(i="optional"),this.rule=i&&i!=="optional"?i:void 0,this.type=e,this.id=t,this.extend=r||void 0,this.required=i==="required",this.optional=!this.required,this.repeated=i==="repeated",this.map=!1,this.message=null,this.partOf=null,this.typeDefault=null,this.defaultValue=null,this.long=pe.Long?Mc.long[e]!==void 0:!1,this.bytes=e==="bytes",this.resolvedType=null,this.extensionField=null,this.declaringField=null,this._packed=null,this.comment=a}Object.defineProperty(Be.prototype,"packed",{get:function(){return this._packed===null&&(this._packed=this.getOption("packed")!==!1),this._packed}});Be.prototype.setOption=function(t,e,i){return t==="packed"&&(this._packed=null),Qi.prototype.setOption.call(this,t,e,i)};Be.prototype.toJSON=function(t){var e=t?Boolean(t.keepComments):!1;return pe.toObject(["rule",this.rule!=="optional"&&this.rule||void 0,"type",this.type,"id",this.id,"extend",this.extend,"options",this.options,"comment",e?this.comment:void 0])};Be.prototype.resolve=function(){if(this.resolved)return this;if((this.typeDefault=Mc.defaults[this.type])===void 0?(this.resolvedType=(this.declaringField?this.declaringField.parent:this.parent).lookupTypeOrEnum(this.type),this.resolvedType instanceof Ko?this.typeDefault=null:this.typeDefault=this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]):this.options&&this.options.proto3_optional&&(this.typeDefault=null),this.options&&this.options.default!=null&&(this.typeDefault=this.options.default,this.resolvedType instanceof Pc&&typeof this.typeDefault=="string"&&(this.typeDefault=this.resolvedType.values[this.typeDefault])),this.options&&((this.options.packed===!0||this.options.packed!==void 0&&this.resolvedType&&!(this.resolvedType instanceof Pc))&&delete this.options.packed,Object.keys(this.options).length||(this.options=void 0)),this.long)this.typeDefault=pe.Long.fromNumber(this.typeDefault,this.type.charAt(0)==="u"),Object.freeze&&Object.freeze(this.typeDefault);else if(this.bytes&&typeof this.typeDefault=="string"){var t;pe.base64.test(this.typeDefault)?pe.base64.decode(this.typeDefault,t=pe.newBuffer(pe.base64.length(this.typeDefault)),0):pe.utf8.write(this.typeDefault,t=pe.newBuffer(pe.utf8.length(this.typeDefault)),0),this.typeDefault=t}return this.map?this.defaultValue=pe.emptyObject:this.repeated?this.defaultValue=pe.emptyArray:this.defaultValue=this.typeDefault,this.parent instanceof Ko&&(this.parent.ctor.prototype[this.name]=this.defaultValue),Qi.prototype.resolve.call(this)};Be.d=function(t,e,i,r){return typeof e=="function"?e=pe.decorateType(e).name:e&&typeof e=="object"&&(e=pe.decorateEnum(e).name),function(a,s){pe.decorateType(a.constructor).add(new Be(s,t,e,i,{default:r}))}};Be._configure=function(t){Ko=t}});var vn=Y((rw,jc)=>{"use strict";jc.exports=Ue;var tr=tn();((Ue.prototype=Object.create(tr.prototype)).constructor=Ue).className="OneOf";var Bc=Ct(),er=ye();function Ue(n,t,e,i){if(Array.isArray(t)||(e=t,t=void 0),tr.call(this,n,e),!(t===void 0||Array.isArray(t)))throw TypeError("fieldNames must be an Array");this.oneof=t||[],this.fieldsArray=[],this.comment=i}Ue.fromJSON=function(t,e){return new Ue(t,e.oneof,e.options,e.comment)};Ue.prototype.toJSON=function(t){var e=t?Boolean(t.keepComments):!1;return er.toObject(["options",this.options,"oneof",this.oneof,"comment",e?this.comment:void 0])};function Uc(n){if(n.parent)for(var t=0;t<n.fieldsArray.length;++t)n.fieldsArray[t].parent||n.parent.add(n.fieldsArray[t])}Ue.prototype.add=function(t){if(!(t instanceof Bc))throw TypeError("field must be a Field");return t.parent&&t.parent!==this.parent&&t.parent.remove(t),this.oneof.push(t.name),this.fieldsArray.push(t),t.partOf=this,Uc(this),this};Ue.prototype.remove=function(t){if(!(t instanceof Bc))throw TypeError("field must be a Field");var e=this.fieldsArray.indexOf(t);if(e<0)throw Error(t+" is not a member of "+this);return this.fieldsArray.splice(e,1),e=this.oneof.indexOf(t.name),e>-1&&this.oneof.splice(e,1),t.partOf=null,this};Ue.prototype.onAdd=function(t){tr.prototype.onAdd.call(this,t);for(var e=this,i=0;i<this.oneof.length;++i){var r=t.get(this.oneof[i]);r&&!r.partOf&&(r.partOf=e,e.fieldsArray.push(r))}Uc(this)};Ue.prototype.onRemove=function(t){for(var e=0,i;e<this.fieldsArray.length;++e)(i=this.fieldsArray[e]).parent&&i.parent.remove(i);tr.prototype.onRemove.call(this,t)};Ue.d=function(){for(var t=new Array(arguments.length),e=0;e<arguments.length;)t[e]=arguments[e++];return function(r,o){er.decorateType(r.constructor).add(new Ue(o,t)),Object.defineProperty(r,o,{get:er.oneOfGetter(t),set:er.oneOfSetter(t)})}}});var Tn=Y((ow,Zc)=>{"use strict";Zc.exports=J;var Xo=tn();((J.prototype=Object.create(Xo.prototype)).constructor=J).className="Namespace";var Hc=Ct(),nr=ye(),vh=vn(),En,ai,_n;J.fromJSON=function(t,e){return new J(t,e.options).addJSON(e.nested)};function qc(n,t){if(n&&n.length){for(var e={},i=0;i<n.length;++i)e[n[i].name]=n[i].toJSON(t);return e}}J.arrayToJSON=qc;J.isReservedId=function(t,e){if(t){for(var i=0;i<t.length;++i)if(typeof t[i]!="string"&&t[i][0]<=e&&t[i][1]>e)return!0}return!1};J.isReservedName=function(t,e){if(t){for(var i=0;i<t.length;++i)if(t[i]===e)return!0}return!1};function J(n,t){Xo.call(this,n,t),this.nested=void 0,this._nestedArray=null}function Wc(n){return n._nestedArray=null,n}Object.defineProperty(J.prototype,"nestedArray",{get:function(){return this._nestedArray||(this._nestedArray=nr.toArray(this.nested))}});J.prototype.toJSON=function(t){return nr.toObject(["options",this.options,"nested",qc(this.nestedArray,t)])};J.prototype.addJSON=function(t){var e=this;if(t)for(var i=Object.keys(t),r=0,o;r<i.length;++r)o=t[i[r]],e.add((o.fields!==void 0?En.fromJSON:o.values!==void 0?_n.fromJSON:o.methods!==void 0?ai.fromJSON:o.id!==void 0?Hc.fromJSON:J.fromJSON)(i[r],o));return this};J.prototype.get=function(t){return this.nested&&this.nested[t]||null};J.prototype.getEnum=function(t){if(this.nested&&this.nested[t]instanceof _n)return this.nested[t].values;throw Error("no such enum: "+t)};J.prototype.add=function(t){if(!(t instanceof Hc&&t.extend!==void 0||t instanceof En||t instanceof vh||t instanceof _n||t instanceof ai||t instanceof J))throw TypeError("object must be a valid nested object");if(!this.nested)this.nested={};else{var e=this.get(t.name);if(e)if(e instanceof J&&t instanceof J&&!(e instanceof En||e instanceof ai)){for(var i=e.nestedArray,r=0;r<i.length;++r)t.add(i[r]);this.remove(e),this.nested||(this.nested={}),t.setOptions(e.options,!0)}else throw Error("duplicate name '"+t.name+"' in "+this)}return this.nested[t.name]=t,t.onAdd(this),Wc(this)};J.prototype.remove=function(t){if(!(t instanceof Xo))throw TypeError("object must be a ReflectionObject");if(t.parent!==this)throw Error(t+" is not a member of "+this);return delete this.nested[t.name],Object.keys(this.nested).length||(this.nested=void 0),t.onRemove(this),Wc(this)};J.prototype.define=function(t,e){if(nr.isString(t))t=t.split(".");else if(!Array.isArray(t))throw TypeError("illegal path");if(t&&t.length&&t[0]==="")throw Error("path must be relative");for(var i=this;t.length>0;){var r=t.shift();if(i.nested&&i.nested[r]){if(i=i.nested[r],!(i instanceof J))throw Error("path conflicts with non-namespace objects")}else i.add(i=new J(r))}return e&&i.addJSON(e),i};J.prototype.resolveAll=function(){for(var t=this.nestedArray,e=0;e<t.length;)t[e]instanceof J?t[e++].resolveAll():t[e++].resolve();return this.resolve()};J.prototype.lookup=function(t,e,i){if(typeof e=="boolean"?(i=e,e=void 0):e&&!Array.isArray(e)&&(e=[e]),nr.isString(t)&&t.length){if(t===".")return this.root;t=t.split(".")}else if(!t.length)return this;if(t[0]==="")return this.root.lookup(t.slice(1),e);var r=this.get(t[0]);if(r){if(t.length===1){if(!e||e.indexOf(r.constructor)>-1)return r}else if(r instanceof J&&(r=r.lookup(t.slice(1),e,!0)))return r}else for(var o=0;o<this.nestedArray.length;++o)if(this._nestedArray[o]instanceof J&&(r=this._nestedArray[o].lookup(t,e,!0)))return r;return this.parent===null||i?null:this.parent.lookup(t,e)};J.prototype.lookupType=function(t){var e=this.lookup(t,[En]);if(!e)throw Error("no such type: "+t);return e};J.prototype.lookupEnum=function(t){var e=this.lookup(t,[_n]);if(!e)throw Error("no such Enum '"+t+"' in "+this);return e};J.prototype.lookupTypeOrEnum=function(t){var e=this.lookup(t,[En,_n]);if(!e)throw Error("no such Type or Enum '"+t+"' in "+this);return e};J.prototype.lookupService=function(t){var e=this.lookup(t,[ai]);if(!e)throw Error("no such Service '"+t+"' in "+this);return e};J._configure=function(n,t,e){En=n,ai=t,_n=e}});var ir=Y((aw,Yc)=>{"use strict";Yc.exports=dt;var Jo=Ct();((dt.prototype=Object.create(Jo.prototype)).constructor=dt).className="MapField";var Eh=en(),si=ye();function dt(n,t,e,i,r,o){if(Jo.call(this,n,t,i,void 0,void 0,r,o),!si.isString(e))throw TypeError("keyType must be a string");this.keyType=e,this.resolvedKeyType=null,this.map=!0}dt.fromJSON=function(t,e){return new dt(t,e.id,e.keyType,e.type,e.options,e.comment)};dt.prototype.toJSON=function(t){var e=t?Boolean(t.keepComments):!1;return si.toObject(["keyType",this.keyType,"type",this.type,"id",this.id,"extend",this.extend,"options",this.options,"comment",e?this.comment:void 0])};dt.prototype.resolve=function(){if(this.resolved)return this;if(Eh.mapKey[this.keyType]===void 0)throw Error("invalid key type: "+this.keyType);return Jo.prototype.resolve.call(this)};dt.d=function(t,e,i){return typeof i=="function"?i=si.decorateType(i).name:i&&typeof i=="object"&&(i=si.decorateEnum(i).name),function(o,a){si.decorateType(o.constructor).add(new dt(a,t,e,i))}}});var rr=Y((sw,zc)=>{"use strict";zc.exports=nn;var Qo=tn();((nn.prototype=Object.create(Qo.prototype)).constructor=nn).className="Method";var An=ye();function nn(n,t,e,i,r,o,a,s,l){if(An.isObject(r)?(a=r,r=o=void 0):An.isObject(o)&&(a=o,o=void 0),!(t===void 0||An.isString(t)))throw TypeError("type must be a string");if(!An.isString(e))throw TypeError("requestType must be a string");if(!An.isString(i))throw TypeError("responseType must be a string");Qo.call(this,n,a),this.type=t||"rpc",this.requestType=e,this.requestStream=r?!0:void 0,this.responseType=i,this.responseStream=o?!0:void 0,this.resolvedRequestType=null,this.resolvedResponseType=null,this.comment=s,this.parsedOptions=l}nn.fromJSON=function(t,e){return new nn(t,e.type,e.requestType,e.responseType,e.requestStream,e.responseStream,e.options,e.comment,e.parsedOptions)};nn.prototype.toJSON=function(t){var e=t?Boolean(t.keepComments):!1;return An.toObject(["type",this.type!=="rpc"&&this.type||void 0,"requestType",this.requestType,"requestStream",this.requestStream,"responseType",this.responseType,"responseStream",this.responseStream,"options",this.options,"comment",e?this.comment:void 0,"parsedOptions",this.parsedOptions])};nn.prototype.resolve=function(){return this.resolved?this:(this.resolvedRequestType=this.parent.lookupType(this.requestType),this.resolvedResponseType=this.parent.lookupType(this.responseType),Qo.prototype.resolve.call(this))}});var or=Y((lw,Vc)=>{"use strict";Vc.exports=je;var It=Tn();((je.prototype=Object.create(It.prototype)).constructor=je).className="Service";var ea=rr(),li=ye(),_h=Wo();function je(n,t){It.call(this,n,t),this.methods={},this._methodsArray=null}je.fromJSON=function(t,e){var i=new je(t,e.options);if(e.methods)for(var r=Object.keys(e.methods),o=0;o<r.length;++o)i.add(ea.fromJSON(r[o],e.methods[r[o]]));return e.nested&&i.addJSON(e.nested),i.comment=e.comment,i};je.prototype.toJSON=function(t){var e=It.prototype.toJSON.call(this,t),i=t?Boolean(t.keepComments):!1;return li.toObject(["options",e&&e.options||void 0,"methods",It.arrayToJSON(this.methodsArray,t)||{},"nested",e&&e.nested||void 0,"comment",i?this.comment:void 0])};Object.defineProperty(je.prototype,"methodsArray",{get:function(){return this._methodsArray||(this._methodsArray=li.toArray(this.methods))}});function Gc(n){return n._methodsArray=null,n}je.prototype.get=function(t){return this.methods[t]||It.prototype.get.call(this,t)};je.prototype.resolveAll=function(){for(var t=this.methodsArray,e=0;e<t.length;++e)t[e].resolve();return It.prototype.resolve.call(this)};je.prototype.add=function(t){if(this.get(t.name))throw Error("duplicate name '"+t.name+"' in "+this);return t instanceof ea?(this.methods[t.name]=t,t.parent=this,Gc(this)):It.prototype.add.call(this,t)};je.prototype.remove=function(t){if(t instanceof ea){if(this.methods[t.name]!==t)throw Error(t+" is not a member of "+this);return delete this.methods[t.name],t.parent=null,Gc(this)}return It.prototype.remove.call(this,t)};je.prototype.create=function(t,e,i){for(var r=new _h.Service(t,e,i),o=0,a;o<this.methodsArray.length;++o){var s=li.lcFirst((a=this._methodsArray[o]).resolve().name).replace(/[^$\w_]/g,"");r[s]=li.codegen(["r","c"],li.isReserved(s)?s+"_":s)("return this.rpcCall(m,q,s,r,c)")({m:a,q:a.resolvedRequestType.ctor,s:a.resolvedResponseType.ctor})}return r}});var ar=Y((cw,Kc)=>{"use strict";Kc.exports=nt;var Th=et();function nt(n){if(n)for(var t=Object.keys(n),e=0;e<t.length;++e)this[t[e]]=n[t[e]]}nt.create=function(t){return this.$type.create(t)};nt.encode=function(t,e){return this.$type.encode(t,e)};nt.encodeDelimited=function(t,e){return this.$type.encodeDelimited(t,e)};nt.decode=function(t){return this.$type.decode(t)};nt.decodeDelimited=function(t){return this.$type.decodeDelimited(t)};nt.verify=function(t){return this.$type.verify(t)};nt.fromObject=function(t){return this.$type.fromObject(t)};nt.toObject=function(t,e){return this.$type.toObject(t,e)};nt.prototype.toJSON=function(){return this.$type.toObject(this,Th.toJSONOptions)}});var ta=Y((pw,Jc)=>{"use strict";Jc.exports=Nh;var Ah=Ve(),mt=en(),Xc=ye();function kh(n){return"missing required '"+n.name+"'"}function Nh(n){var t=Xc.codegen(["r","l"],n.name+"$decode")("if(!(r instanceof Reader))")("r=Reader.create(r)")("var c=l===undefined?r.len:r.pos+l,m=new this.ctor"+(n.fieldsArray.filter(function(s){return s.map}).length?",k,value":""))("while(r.pos<c){")("var t=r.uint32()");n.group&&t("if((t&7)===4)")("break"),t("switch(t>>>3){");for(var e=0;e<n.fieldsArray.length;++e){var i=n._fieldsArray[e].resolve(),r=i.resolvedType instanceof Ah?"int32":i.type,o="m"+Xc.safeProp(i.name);t("case %i: {",i.id),i.map?(t("if(%s===util.emptyObject)",o)("%s={}",o)("var c2 = r.uint32()+r.pos"),mt.defaults[i.keyType]!==void 0?t("k=%j",mt.defaults[i.keyType]):t("k=null"),mt.defaults[r]!==void 0?t("value=%j",mt.defaults[r]):t("value=null"),t("while(r.pos<c2){")("var tag2=r.uint32()")("switch(tag2>>>3){")("case 1: k=r.%s(); break",i.keyType)("case 2:"),mt.basic[r]===void 0?t("value=types[%i].decode(r,r.uint32())",e):t("value=r.%s()",r),t("break")("default:")("r.skipType(tag2&7)")("break")("}")("}"),mt.long[i.keyType]!==void 0?t('%s[typeof k==="object"?util.longToHash(k):k]=value',o):t("%s[k]=value",o)):i.repeated?(t("if(!(%s&&%s.length))",o,o)("%s=[]",o),mt.packed[r]!==void 0&&t("if((t&7)===2){")("var c2=r.uint32()+r.pos")("while(r.pos<c2)")("%s.push(r.%s())",o,r)("}else"),mt.basic[r]===void 0?t(i.resolvedType.group?"%s.push(types[%i].decode(r))":"%s.push(types[%i].decode(r,r.uint32()))",o,e):t("%s.push(r.%s())",o,r)):mt.basic[r]===void 0?t(i.resolvedType.group?"%s=types[%i].decode(r)":"%s=types[%i].decode(r,r.uint32())",o,e):t("%s=r.%s()",o,r),t("break")("}")}for(t("default:")("r.skipType(t&7)")("break")("}")("}"),e=0;e<n._fieldsArray.length;++e){var a=n._fieldsArray[e];a.required&&t("if(!m.hasOwnProperty(%j))",a.name)("throw util.ProtocolError(%j,{instance:m})",kh(a))}return t("return m")}});var ra=Y((uw,Qc)=>{"use strict";Qc.exports=Oh;var Sh=Ve(),na=ye();function He(n,t){return n.name+": "+t+(n.repeated&&t!=="array"?"[]":n.map&&t!=="object"?"{k:"+n.keyType+"}":"")+" expected"}function ia(n,t,e,i){if(t.resolvedType)if(t.resolvedType instanceof Sh){n("switch(%s){",i)("default:")("return%j",He(t,"enum value"));for(var r=Object.keys(t.resolvedType.values),o=0;o<r.length;++o)n("case %i:",t.resolvedType.values[r[o]]);n("break")("}")}else n("{")("var e=types[%i].verify(%s);",e,i)("if(e)")("return%j+e",t.name+".")("}");else switch(t.type){case"int32":case"uint32":case"sint32":case"fixed32":case"sfixed32":n("if(!util.isInteger(%s))",i)("return%j",He(t,"integer"));break;case"int64":case"uint64":case"sint64":case"fixed64":case"sfixed64":n("if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))",i,i,i,i)("return%j",He(t,"integer|Long"));break;case"float":case"double":n('if(typeof %s!=="number")',i)("return%j",He(t,"number"));break;case"bool":n('if(typeof %s!=="boolean")',i)("return%j",He(t,"boolean"));break;case"string":n("if(!util.isString(%s))",i)("return%j",He(t,"string"));break;case"bytes":n('if(!(%s&&typeof %s.length==="number"||util.isString(%s)))',i,i,i)("return%j",He(t,"buffer"));break}return n}function Rh(n,t,e){switch(t.keyType){case"int32":case"uint32":case"sint32":case"fixed32":case"sfixed32":n("if(!util.key32Re.test(%s))",e)("return%j",He(t,"integer key"));break;case"int64":case"uint64":case"sint64":case"fixed64":case"sfixed64":n("if(!util.key64Re.test(%s))",e)("return%j",He(t,"integer|Long key"));break;case"bool":n("if(!util.key2Re.test(%s))",e)("return%j",He(t,"boolean key"));break}return n}function Oh(n){var t=na.codegen(["m"],n.name+"$verify")('if(typeof m!=="object"||m===null)')("return%j","object expected"),e=n.oneofsArray,i={};e.length&&t("var p={}");for(var r=0;r<n.fieldsArray.length;++r){var o=n._fieldsArray[r].resolve(),a="m"+na.safeProp(o.name);if(o.optional&&t("if(%s!=null&&m.hasOwnProperty(%j)){",a,o.name),o.map)t("if(!util.isObject(%s))",a)("return%j",He(o,"object"))("var k=Object.keys(%s)",a)("for(var i=0;i<k.length;++i){"),Rh(t,o,"k[i]"),ia(t,o,r,a+"[k[i]]")("}");else if(o.repeated)t("if(!Array.isArray(%s))",a)("return%j",He(o,"array"))("for(var i=0;i<%s.length;++i){",a),ia(t,o,r,a+"[i]")("}");else{if(o.partOf){var s=na.safeProp(o.partOf.name);i[o.partOf.name]===1&&t("if(p%s===1)",s)("return%j",o.partOf.name+": multiple values"),i[o.partOf.name]=1,t("p%s=1",s)}ia(t,o,r,a)}o.optional&&t("}")}return t("return null")}});var sa=Y(tp=>{"use strict";var ep=tp,ci=Ve(),it=ye();function oa(n,t,e,i){var r=!1;if(t.resolvedType)if(t.resolvedType instanceof ci){n("switch(d%s){",i);for(var o=t.resolvedType.values,a=Object.keys(o),s=0;s<a.length;++s)o[a[s]]===t.typeDefault&&!r&&(n("default:")('if(typeof(d%s)==="number"){m%s=d%s;break}',i,i,i),t.repeated||n("break"),r=!0),n("case%j:",a[s])("case %i:",o[a[s]])("m%s=%j",i,o[a[s]])("break");n("}")}else n('if(typeof d%s!=="object")',i)("throw TypeError(%j)",t.fullName+": object expected")("m%s=types[%i].fromObject(d%s)",i,e,i);else{var l=!1;switch(t.type){case"double":case"float":n("m%s=Number(d%s)",i,i);break;case"uint32":case"fixed32":n("m%s=d%s>>>0",i,i);break;case"int32":case"sint32":case"sfixed32":n("m%s=d%s|0",i,i);break;case"uint64":l=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":n("if(util.Long)")("(m%s=util.Long.fromValue(d%s)).unsigned=%j",i,i,l)('else if(typeof d%s==="string")',i)("m%s=parseInt(d%s,10)",i,i)('else if(typeof d%s==="number")',i)("m%s=d%s",i,i)('else if(typeof d%s==="object")',i)("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)",i,i,i,l?"true":"");break;case"bytes":n('if(typeof d%s==="string")',i)("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)",i,i,i)("else if(d%s.length >= 0)",i)("m%s=d%s",i,i);break;case"string":n("m%s=String(d%s)",i,i);break;case"bool":n("m%s=Boolean(d%s)",i,i);break}}return n}ep.fromObject=function(t){var e=t.fieldsArray,i=it.codegen(["d"],t.name+"$fromObject")("if(d instanceof this.ctor)")("return d");if(!e.length)return i("return new this.ctor");i("var m=new this.ctor");for(var r=0;r<e.length;++r){var o=e[r].resolve(),a=it.safeProp(o.name);o.map?(i("if(d%s){",a)('if(typeof d%s!=="object")',a)("throw TypeError(%j)",o.fullName+": object expected")("m%s={}",a)("for(var ks=Object.keys(d%s),i=0;i<ks.length;++i){",a),oa(i,o,r,a+"[ks[i]]")("}")("}")):o.repeated?(i("if(d%s){",a)("if(!Array.isArray(d%s))",a)("throw TypeError(%j)",o.fullName+": array expected")("m%s=[]",a)("for(var i=0;i<d%s.length;++i){",a),oa(i,o,r,a+"[i]")("}")("}")):(o.resolvedType instanceof ci||i("if(d%s!=null){",a),oa(i,o,r,a),o.resolvedType instanceof ci||i("}"))}return i("return m")};function aa(n,t,e,i){if(t.resolvedType)t.resolvedType instanceof ci?n("d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s",i,e,i,i,e,i,i):n("d%s=types[%i].toObject(m%s,o)",i,e,i);else{var r=!1;switch(t.type){case"double":case"float":n("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s",i,i,i,i);break;case"uint64":r=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":n('if(typeof m%s==="number")',i)("d%s=o.longs===String?String(m%s):m%s",i,i,i)("else")("d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s",i,i,i,i,r?"true":"",i);break;case"bytes":n("d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s",i,i,i,i,i);break;default:n("d%s=m%s",i,i);break}}return n}ep.toObject=function(t){var e=t.fieldsArray.slice().sort(it.compareFieldsById);if(!e.length)return it.codegen()("return {}");for(var i=it.codegen(["m","o"],t.name+"$toObject")("if(!o)")("o={}")("var d={}"),r=[],o=[],a=[],s=0;s<e.length;++s)e[s].partOf||(e[s].resolve().repeated?r:e[s].map?o:a).push(e[s]);if(r.length){for(i("if(o.arrays||o.defaults){"),s=0;s<r.length;++s)i("d%s=[]",it.safeProp(r[s].name));i("}")}if(o.length){for(i("if(o.objects||o.defaults){"),s=0;s<o.length;++s)i("d%s={}",it.safeProp(o[s].name));i("}")}if(a.length){for(i("if(o.defaults){"),s=0;s<a.length;++s){var l=a[s],c=it.safeProp(l.name);if(l.resolvedType instanceof ci)i("d%s=o.enums===String?%j:%j",c,l.resolvedType.valuesById[l.typeDefault],l.typeDefault);else if(l.long)i("if(util.Long){")("var n=new util.Long(%i,%i,%j)",l.typeDefault.low,l.typeDefault.high,l.typeDefault.unsigned)("d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n",c)("}else")("d%s=o.longs===String?%j:%i",c,l.typeDefault.toString(),l.typeDefault.toNumber());else if(l.bytes){var p="["+Array.prototype.slice.call(l.typeDefault).join(",")+"]";i("if(o.bytes===String)d%s=%j",c,String.fromCharCode.apply(String,l.typeDefault))("else{")("d%s=%s",c,p)("if(o.bytes!==Array)d%s=util.newBuffer(d%s)",c,c)("}")}else i("d%s=%j",c,l.typeDefault)}i("}")}var m=!1;for(s=0;s<e.length;++s){var l=e[s],y=t._fieldsArray.indexOf(l),c=it.safeProp(l.name);l.map?(m||(m=!0,i("var ks2")),i("if(m%s&&(ks2=Object.keys(m%s)).length){",c,c)("d%s={}",c)("for(var j=0;j<ks2.length;++j){"),aa(i,l,y,c+"[ks2[j]]")("}")):l.repeated?(i("if(m%s&&m%s.length){",c,c)("d%s=[]",c)("for(var j=0;j<m%s.length;++j){",c),aa(i,l,y,c+"[j]")("}")):(i("if(m%s!=null&&m.hasOwnProperty(%j)){",c,l.name),aa(i,l,y,c),l.partOf&&i("if(o.oneofs)")("d%s=%j",it.safeProp(l.partOf.name),l.name)),i("}")}return i("return d")}});var la=Y(np=>{"use strict";var Dh=np,Ch=ar();Dh[".google.protobuf.Any"]={fromObject:function(n){if(n&&n["@type"]){var t=n["@type"].substring(n["@type"].lastIndexOf("/")+1),e=this.lookup(t);if(e){var i=n["@type"].charAt(0)==="."?n["@type"].slice(1):n["@type"];return i.indexOf("/")===-1&&(i="/"+i),this.create({type_url:i,value:e.encode(e.fromObject(n)).finish()})}}return this.fromObject(n)},toObject:function(n,t){var e="type.googleapis.com/",i="",r="";if(t&&t.json&&n.type_url&&n.value){r=n.type_url.substring(n.type_url.lastIndexOf("/")+1),i=n.type_url.substring(0,n.type_url.lastIndexOf("/")+1);var o=this.lookup(r);o&&(n=o.decode(n.value))}if(!(n instanceof this.ctor)&&n instanceof Ch){var a=n.$type.toObject(n,t),s=n.$type.fullName[0]==="."?n.$type.fullName.slice(1):n.$type.fullName;return i===""&&(i=e),r=i+s,a["@type"]=r,a}return this.toObject(n,t)}}});var cr=Y((mw,rp)=>{"use strict";rp.exports=ne;var Ke=Tn();((ne.prototype=Object.create(Ke.prototype)).constructor=ne).className="Type";var Ih=Ve(),ua=vn(),sr=Ct(),Fh=ir(),Lh=or(),ca=ar(),pa=Ji(),Ph=Ki(),ve=ye(),Mh=fa(),$h=ta(),Bh=ra(),ip=sa(),Uh=la();function ne(n,t){Ke.call(this,n,t),this.fields={},this.oneofs=void 0,this.extensions=void 0,this.reserved=void 0,this.group=void 0,this._fieldsById=null,this._fieldsArray=null,this._oneofsArray=null,this._ctor=null}Object.defineProperties(ne.prototype,{fieldsById:{get:function(){if(this._fieldsById)return this._fieldsById;this._fieldsById={};for(var n=Object.keys(this.fields),t=0;t<n.length;++t){var e=this.fields[n[t]],i=e.id;if(this._fieldsById[i])throw Error("duplicate id "+i+" in "+this);this._fieldsById[i]=e}return this._fieldsById}},fieldsArray:{get:function(){return this._fieldsArray||(this._fieldsArray=ve.toArray(this.fields))}},oneofsArray:{get:function(){return this._oneofsArray||(this._oneofsArray=ve.toArray(this.oneofs))}},ctor:{get:function(){return this._ctor||(this.ctor=ne.generateConstructor(this)())},set:function(n){var t=n.prototype;t instanceof ca||((n.prototype=new ca).constructor=n,ve.merge(n.prototype,t)),n.$type=n.prototype.$type=this,ve.merge(n,ca,!0),this._ctor=n;for(var e=0;e<this.fieldsArray.length;++e)this._fieldsArray[e].resolve();var i={};for(e=0;e<this.oneofsArray.length;++e)i[this._oneofsArray[e].resolve().name]={get:ve.oneOfGetter(this._oneofsArray[e].oneof),set:ve.oneOfSetter(this._oneofsArray[e].oneof)};e&&Object.defineProperties(n.prototype,i)}}});ne.generateConstructor=function(t){for(var e=ve.codegen(["p"],t.name),i=0,r;i<t.fieldsArray.length;++i)(r=t._fieldsArray[i]).map?e("this%s={}",ve.safeProp(r.name)):r.repeated&&e("this%s=[]",ve.safeProp(r.name));return e("if(p)for(var ks=Object.keys(p),i=0;i<ks.length;++i)if(p[ks[i]]!=null)")("this[ks[i]]=p[ks[i]]")};function lr(n){return n._fieldsById=n._fieldsArray=n._oneofsArray=null,delete n.encode,delete n.decode,delete n.verify,n}ne.fromJSON=function(t,e){var i=new ne(t,e.options);i.extensions=e.extensions,i.reserved=e.reserved;for(var r=Object.keys(e.fields),o=0;o<r.length;++o)i.add((typeof e.fields[r[o]].keyType!="undefined"?Fh.fromJSON:sr.fromJSON)(r[o],e.fields[r[o]]));if(e.oneofs)for(r=Object.keys(e.oneofs),o=0;o<r.length;++o)i.add(ua.fromJSON(r[o],e.oneofs[r[o]]));if(e.nested)for(r=Object.keys(e.nested),o=0;o<r.length;++o){var a=e.nested[r[o]];i.add((a.id!==void 0?sr.fromJSON:a.fields!==void 0?ne.fromJSON:a.values!==void 0?Ih.fromJSON:a.methods!==void 0?Lh.fromJSON:Ke.fromJSON)(r[o],a))}return e.extensions&&e.extensions.length&&(i.extensions=e.extensions),e.reserved&&e.reserved.length&&(i.reserved=e.reserved),e.group&&(i.group=!0),e.comment&&(i.comment=e.comment),i};ne.prototype.toJSON=function(t){var e=Ke.prototype.toJSON.call(this,t),i=t?Boolean(t.keepComments):!1;return ve.toObject(["options",e&&e.options||void 0,"oneofs",Ke.arrayToJSON(this.oneofsArray,t),"fields",Ke.arrayToJSON(this.fieldsArray.filter(function(r){return!r.declaringField}),t)||{},"extensions",this.extensions&&this.extensions.length?this.extensions:void 0,"reserved",this.reserved&&this.reserved.length?this.reserved:void 0,"group",this.group||void 0,"nested",e&&e.nested||void 0,"comment",i?this.comment:void 0])};ne.prototype.resolveAll=function(){for(var t=this.fieldsArray,e=0;e<t.length;)t[e++].resolve();var i=this.oneofsArray;for(e=0;e<i.length;)i[e++].resolve();return Ke.prototype.resolveAll.call(this)};ne.prototype.get=function(t){return this.fields[t]||this.oneofs&&this.oneofs[t]||this.nested&&this.nested[t]||null};ne.prototype.add=function(t){if(this.get(t.name))throw Error("duplicate name '"+t.name+"' in "+this);if(t instanceof sr&&t.extend===void 0){if(this._fieldsById?this._fieldsById[t.id]:this.fieldsById[t.id])throw Error("duplicate id "+t.id+" in "+this);if(this.isReservedId(t.id))throw Error("id "+t.id+" is reserved in "+this);if(this.isReservedName(t.name))throw Error("name '"+t.name+"' is reserved in "+this);return t.parent&&t.parent.remove(t),this.fields[t.name]=t,t.message=this,t.onAdd(this),lr(this)}return t instanceof ua?(this.oneofs||(this.oneofs={}),this.oneofs[t.name]=t,t.onAdd(this),lr(this)):Ke.prototype.add.call(this,t)};ne.prototype.remove=function(t){if(t instanceof sr&&t.extend===void 0){if(!this.fields||this.fields[t.name]!==t)throw Error(t+" is not a member of "+this);return delete this.fields[t.name],t.parent=null,t.onRemove(this),lr(this)}if(t instanceof ua){if(!this.oneofs||this.oneofs[t.name]!==t)throw Error(t+" is not a member of "+this);return delete this.oneofs[t.name],t.parent=null,t.onRemove(this),lr(this)}return Ke.prototype.remove.call(this,t)};ne.prototype.isReservedId=function(t){return Ke.isReservedId(this.reserved,t)};ne.prototype.isReservedName=function(t){return Ke.isReservedName(this.reserved,t)};ne.prototype.create=function(t){return new this.ctor(t)};ne.prototype.setup=function(){for(var t=this.fullName,e=[],i=0;i<this.fieldsArray.length;++i)e.push(this._fieldsArray[i].resolve().resolvedType);this.encode=Mh(this)({Writer:Ph,types:e,util:ve}),this.decode=$h(this)({Reader:pa,types:e,util:ve}),this.verify=Bh(this)({types:e,util:ve}),this.fromObject=ip.fromObject(this)({types:e,util:ve}),this.toObject=ip.toObject(this)({types:e,util:ve});var r=Uh[t];if(r){var o=Object.create(this);o.fromObject=this.fromObject,this.fromObject=r.fromObject.bind(o),o.toObject=this.toObject,this.toObject=r.toObject.bind(o)}return this};ne.prototype.encode=function(t,e){return this.setup().encode(t,e)};ne.prototype.encodeDelimited=function(t,e){return this.encode(t,e&&e.len?e.fork():e).ldelim()};ne.prototype.decode=function(t,e){return this.setup().decode(t,e)};ne.prototype.decodeDelimited=function(t){return t instanceof pa||(t=pa.create(t)),this.decode(t,t.uint32())};ne.prototype.verify=function(t){return this.setup().verify(t)};ne.prototype.fromObject=function(t){return this.setup().fromObject(t)};ne.prototype.toObject=function(t,e){return this.setup().toObject(t,e)};ne.d=function(t){return function(i){ve.decorateType(i,t)}}});var fr=Y((hw,cp)=>{"use strict";cp.exports=Ce;var ur=Tn();((Ce.prototype=Object.create(ur.prototype)).constructor=Ce).className="Root";var ma=Ct(),ap=Ve(),jh=vn(),Ft=ye(),sp,da,pi;function Ce(n){ur.call(this,"",n),this.deferred=[],this.files=[]}Ce.fromJSON=function(t,e){return e||(e=new Ce),t.options&&e.setOptions(t.options),e.addJSON(t.nested)};Ce.prototype.resolvePath=Ft.path.resolve;Ce.prototype.fetch=Ft.fetch;function lp(){}Ce.prototype.load=function n(t,e,i){typeof e=="function"&&(i=e,e=void 0);var r=this;if(!i)return Ft.asPromise(n,r,t,e);var o=i===lp;function a(w,E){if(i){var d=i;if(i=null,o)throw w;d(w,E)}}function s(w){var E=w.lastIndexOf("google/protobuf/");if(E>-1){var d=w.substring(E);if(d in pi)return d}return null}function l(w,E){try{if(Ft.isString(E)&&E.charAt(0)==="{"&&(E=JSON.parse(E)),!Ft.isString(E))r.setOptions(E.options).addJSON(E.nested);else{da.filename=w;var d=da(E,r,e),f,g=0;if(d.imports)for(;g<d.imports.length;++g)(f=s(d.imports[g])||r.resolvePath(w,d.imports[g]))&&c(f);if(d.weakImports)for(g=0;g<d.weakImports.length;++g)(f=s(d.weakImports[g])||r.resolvePath(w,d.weakImports[g]))&&c(f,!0)}}catch(v){a(v)}!o&&!p&&a(null,r)}function c(w,E){if(w=s(w)||w,!(r.files.indexOf(w)>-1)){if(r.files.push(w),w in pi){o?l(w,pi[w]):(++p,setTimeout(function(){--p,l(w,pi[w])}));return}if(o){var d;try{d=Ft.fs.readFileSync(w).toString("utf8")}catch(f){E||a(f);return}l(w,d)}else++p,r.fetch(w,function(f,g){if(--p,!!i){if(f){E?p||a(null,r):a(f);return}l(w,g)}})}}var p=0;Ft.isString(t)&&(t=[t]);for(var m=0,y;m<t.length;++m)(y=r.resolvePath("",t[m]))&&c(y);if(o)return r;p||a(null,r)};Ce.prototype.loadSync=function(t,e){if(!Ft.isNode)throw Error("not supported");return this.load(t,e,lp)};Ce.prototype.resolveAll=function(){if(this.deferred.length)throw Error("unresolvable extensions: "+this.deferred.map(function(t){return"'extend "+t.extend+"' in "+t.parent.fullName}).join(", "));return ur.prototype.resolveAll.call(this)};var pr=/^[A-Z]/;function op(n,t){var e=t.parent.lookup(t.extend);if(e){var i=new ma(t.fullName,t.id,t.type,t.rule,void 0,t.options);return e.get(i.name)||(i.declaringField=t,t.extensionField=i,e.add(i)),!0}return!1}Ce.prototype._handleAdd=function(t){if(t instanceof ma)t.extend!==void 0&&!t.extensionField&&(op(this,t)||this.deferred.push(t));else if(t instanceof ap)pr.test(t.name)&&(t.parent[t.name]=t.values);else if(!(t instanceof jh)){if(t instanceof sp)for(var e=0;e<this.deferred.length;)op(this,this.deferred[e])?this.deferred.splice(e,1):++e;for(var i=0;i<t.nestedArray.length;++i)this._handleAdd(t._nestedArray[i]);pr.test(t.name)&&(t.parent[t.name]=t)}};Ce.prototype._handleRemove=function(t){if(t instanceof ma){if(t.extend!==void 0)if(t.extensionField)t.extensionField.parent.remove(t.extensionField),t.extensionField=null;else{var e=this.deferred.indexOf(t);e>-1&&this.deferred.splice(e,1)}}else if(t instanceof ap)pr.test(t.name)&&delete t.parent[t.name];else if(t instanceof ur){for(var i=0;i<t.nestedArray.length;++i)this._handleRemove(t._nestedArray[i]);pr.test(t.name)&&delete t.parent[t.name]}};Ce._configure=function(n,t,e){sp=n,da=t,pi=e}});var ye=Y((gw,up)=>{"use strict";var le=up.exports=et(),pp=Zo(),ha,ga;le.codegen=Rc();le.fetch=Dc();le.path=Fc();le.fs=le.inquire("fs");le.toArray=function(t){if(t){for(var e=Object.keys(t),i=new Array(e.length),r=0;r<e.length;)i[r]=t[e[r++]];return i}return[]};le.toObject=function(t){for(var e={},i=0;i<t.length;){var r=t[i++],o=t[i++];o!==void 0&&(e[r]=o)}return e};var Hh=/\\/g,qh=/"/g;le.isReserved=function(t){return/^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/.test(t)};le.safeProp=function(t){return!/^[$\w_]+$/.test(t)||le.isReserved(t)?'["'+t.replace(Hh,"\\\\").replace(qh,'\\"')+'"]':"."+t};le.ucFirst=function(t){return t.charAt(0).toUpperCase()+t.substring(1)};var Wh=/_([a-z])/g;le.camelCase=function(t){return t.substring(0,1)+t.substring(1).replace(Wh,function(e,i){return i.toUpperCase()})};le.compareFieldsById=function(t,e){return t.id-e.id};le.decorateType=function(t,e){if(t.$type)return e&&t.$type.name!==e&&(le.decorateRoot.remove(t.$type),t.$type.name=e,le.decorateRoot.add(t.$type)),t.$type;ha||(ha=cr());var i=new ha(e||t.name);return le.decorateRoot.add(i),i.ctor=t,Object.defineProperty(t,"$type",{value:i,enumerable:!1}),Object.defineProperty(t.prototype,"$type",{value:i,enumerable:!1}),i};var Zh=0;le.decorateEnum=function(t){if(t.$type)return t.$type;ga||(ga=Ve());var e=new ga("Enum"+Zh++,t);return le.decorateRoot.add(e),Object.defineProperty(t,"$type",{value:e,enumerable:!1}),e};le.setProperty=function(t,e,i){function r(o,a,s){var l=a.shift();if(l==="__proto__"||l==="prototype")return o;if(a.length>0)o[l]=r(o[l]||{},a,s);else{var c=o[l];c&&(s=[].concat(c).concat(s)),o[l]=s}return o}if(typeof t!="object")throw TypeError("dst must be an object");if(!e)throw TypeError("path must be specified");return e=e.split("."),r(t,e,i)};Object.defineProperty(le,"decorateRoot",{get:function(){return pp.decorated||(pp.decorated=new(fr()))}})});var tn=Y((yw,fp)=>{"use strict";fp.exports=Ie;Ie.className="ReflectionObject";var dr=ye(),mr;function Ie(n,t){if(!dr.isString(n))throw TypeError("name must be a string");if(t&&!dr.isObject(t))throw TypeError("options must be an object");this.options=t,this.parsedOptions=null,this.name=n,this.parent=null,this.resolved=!1,this.comment=null,this.filename=null}Object.defineProperties(Ie.prototype,{root:{get:function(){for(var n=this;n.parent!==null;)n=n.parent;return n}},fullName:{get:function(){for(var n=[this.name],t=this.parent;t;)n.unshift(t.name),t=t.parent;return n.join(".")}}});Ie.prototype.toJSON=function(){throw Error()};Ie.prototype.onAdd=function(t){this.parent&&this.parent!==t&&this.parent.remove(this),this.parent=t,this.resolved=!1;var e=t.root;e instanceof mr&&e._handleAdd(this)};Ie.prototype.onRemove=function(t){var e=t.root;e instanceof mr&&e._handleRemove(this),this.parent=null,this.resolved=!1};Ie.prototype.resolve=function(){return this.resolved?this:(this.root instanceof mr&&(this.resolved=!0),this)};Ie.prototype.getOption=function(t){if(this.options)return this.options[t]};Ie.prototype.setOption=function(t,e,i){return(!i||!this.options||this.options[t]===void 0)&&((this.options||(this.options={}))[t]=e),this};Ie.prototype.setParsedOption=function(t,e,i){this.parsedOptions||(this.parsedOptions=[]);var r=this.parsedOptions;if(i){var o=r.find(function(l){return Object.prototype.hasOwnProperty.call(l,t)});if(o){var a=o[t];dr.setProperty(a,i,e)}else o={},o[t]=dr.setProperty({},i,e),r.push(o)}else{var s={};s[t]=e,r.push(s)}return this};Ie.prototype.setOptions=function(t,e){if(t)for(var i=Object.keys(t),r=0;r<i.length;++r)this.setOption(i[r],t[i[r]],e);return this};Ie.prototype.toString=function(){var t=this.constructor.className,e=this.fullName;return e.length?t+" "+e:t};Ie._configure=function(n){mr=n}});var Ve=Y((bw,hp)=>{"use strict";hp.exports=rt;var dp=tn();((rt.prototype=Object.create(dp.prototype)).constructor=rt).className="Enum";var mp=Tn(),hr=ye();function rt(n,t,e,i,r,o){if(dp.call(this,n,e),t&&typeof t!="object")throw TypeError("values must be an object");if(this.valuesById={},this.values=Object.create(this.valuesById),this.comment=i,this.comments=r||{},this.valuesOptions=o,this.reserved=void 0,t)for(var a=Object.keys(t),s=0;s<a.length;++s)typeof t[a[s]]=="number"&&(this.valuesById[this.values[a[s]]=t[a[s]]]=a[s])}rt.fromJSON=function(t,e){var i=new rt(t,e.values,e.options,e.comment,e.comments);return i.reserved=e.reserved,i};rt.prototype.toJSON=function(t){var e=t?Boolean(t.keepComments):!1;return hr.toObject(["options",this.options,"valuesOptions",this.valuesOptions,"values",this.values,"reserved",this.reserved&&this.reserved.length?this.reserved:void 0,"comment",e?this.comment:void 0,"comments",e?this.comments:void 0])};rt.prototype.add=function(t,e,i,r){if(!hr.isString(t))throw TypeError("name must be a string");if(!hr.isInteger(e))throw TypeError("id must be an integer");if(this.values[t]!==void 0)throw Error("duplicate name '"+t+"' in "+this);if(this.isReservedId(e))throw Error("id "+e+" is reserved in "+this);if(this.isReservedName(t))throw Error("name '"+t+"' is reserved in "+this);if(this.valuesById[e]!==void 0){if(!(this.options&&this.options.allow_alias))throw Error("duplicate id "+e+" in "+this);this.values[t]=e}else this.valuesById[this.values[t]=e]=t;return r&&(this.valuesOptions===void 0&&(this.valuesOptions={}),this.valuesOptions[t]=r||null),this.comments[t]=i||null,this};rt.prototype.remove=function(t){if(!hr.isString(t))throw TypeError("name must be a string");var e=this.values[t];if(e==null)throw Error("name '"+t+"' does not exist in "+this);return delete this.valuesById[e],delete this.values[t],delete this.comments[t],this.valuesOptions&&delete this.valuesOptions[t],this};rt.prototype.isReservedId=function(t){return mp.isReservedId(this.reserved,t)};rt.prototype.isReservedName=function(t){return mp.isReservedName(this.reserved,t)}});var fa=Y((xw,yp)=>{"use strict";yp.exports=zh;var Yh=Ve(),ya=en(),ba=ye();function gp(n,t,e,i){return t.resolvedType.group?n("types[%i].encode(%s,w.uint32(%i)).uint32(%i)",e,i,(t.id<<3|3)>>>0,(t.id<<3|4)>>>0):n("types[%i].encode(%s,w.uint32(%i).fork()).ldelim()",e,i,(t.id<<3|2)>>>0)}function zh(n){for(var t=ba.codegen(["m","w"],n.name+"$encode")("if(!w)")("w=Writer.create()"),e,i,r=n.fieldsArray.slice().sort(ba.compareFieldsById),e=0;e<r.length;++e){var o=r[e].resolve(),a=n._fieldsArray.indexOf(o),s=o.resolvedType instanceof Yh?"int32":o.type,l=ya.basic[s];i="m"+ba.safeProp(o.name),o.map?(t("if(%s!=null&&Object.hasOwnProperty.call(m,%j)){",i,o.name)("for(var ks=Object.keys(%s),i=0;i<ks.length;++i){",i)("w.uint32(%i).fork().uint32(%i).%s(ks[i])",(o.id<<3|2)>>>0,8|ya.mapKey[o.keyType],o.keyType),l===void 0?t("types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()",a,i):t(".uint32(%i).%s(%s[ks[i]]).ldelim()",16|l,s,i),t("}")("}")):o.repeated?(t("if(%s!=null&&%s.length){",i,i),o.packed&&ya.packed[s]!==void 0?t("w.uint32(%i).fork()",(o.id<<3|2)>>>0)("for(var i=0;i<%s.length;++i)",i)("w.%s(%s[i])",s,i)("w.ldelim()"):(t("for(var i=0;i<%s.length;++i)",i),l===void 0?gp(t,o,a,i+"[i]"):t("w.uint32(%i).%s(%s[i])",(o.id<<3|l)>>>0,s,i)),t("}")):(o.optional&&t("if(%s!=null&&Object.hasOwnProperty.call(m,%j))",i,o.name),l===void 0?gp(t,o,a,i):t("w.uint32(%i).%s(%s)",(o.id<<3|l)>>>0,s,i))}return t("return w")}});var xp=Y((ww,bp)=>{"use strict";var V=bp.exports=Nc();V.build="light";function Gh(n,t,e){return typeof t=="function"?(e=t,t=new V.Root):t||(t=new V.Root),t.load(n,e)}V.load=Gh;function Vh(n,t){return t||(t=new V.Root),t.loadSync(n)}V.loadSync=Vh;V.encoder=fa();V.decoder=ta();V.verifier=ra();V.converter=sa();V.ReflectionObject=tn();V.Namespace=Tn();V.Root=fr();V.Enum=Ve();V.Type=cr();V.Field=Ct();V.OneOf=vn();V.MapField=ir();V.Service=or();V.Method=rr();V.Message=ar();V.wrappers=la();V.types=en();V.util=ye();V.ReflectionObject._configure(V.Root);V.Namespace._configure(V.Type,V.Service,V.Enum);V.Root._configure(V.Type);V.Field._configure(V.Type)});var wa=Y((vw,Ep)=>{"use strict";Ep.exports=vp;var xa=/[\s{}=;:[\],'"()<>]/g,Kh=/(?:"([^"\\]*(?:\\.[^"\\]*)*)")/g,Xh=/(?:'([^'\\]*(?:\\.[^'\\]*)*)')/g,Jh=/^ *[*/]+ */,Qh=/^\s*\*?\/*/,eg=/\n/g,tg=/\s/,ng=/\\(.?)/g,ig={0:"\0",r:"\r",n:` +`,t:" "};function wp(n){return n.replace(ng,function(t,e){switch(e){case"\\":case"":return e;default:return ig[e]||""}})}vp.unescape=wp;function vp(n,t){n=n.toString();var e=0,i=n.length,r=1,o=0,a={},s=[],l=null;function c(A){return Error("illegal "+A+" (line "+r+")")}function p(){var A=l==="'"?Xh:Kh;A.lastIndex=e-1;var D=A.exec(n);if(!D)throw c("string");return e=A.lastIndex,f(l),l=null,wp(D[1])}function m(A){return n.charAt(A)}function y(A,D,T){var k={type:n.charAt(A++),lineEmpty:!1,leading:T},b;t?b=2:b=3;var C=A-b,O;do if(--C<0||(O=n.charAt(C))===` +`){k.lineEmpty=!0;break}while(O===" "||O===" ");for(var S=n.substring(A,D).split(eg),M=0;M<S.length;++M)S[M]=S[M].replace(t?Qh:Jh,"").trim();k.text=S.join(` +`).trim(),a[r]=k,o=r}function w(A){var D=E(A),T=n.substring(A,D),k=/^\s*\/\//.test(T);return k}function E(A){for(var D=A;D<i&&m(D)!==` +`;)D++;return D}function d(){if(s.length>0)return s.shift();if(l)return p();var A,D,T,k,b,C=e===0;do{if(e===i)return null;for(A=!1;tg.test(T=m(e));)if(T===` +`&&(C=!0,++r),++e===i)return null;if(m(e)==="/"){if(++e===i)throw c("comment");if(m(e)==="/")if(t){if(k=e,b=!1,w(e-1)){b=!0;do if(e=E(e),e===i||(e++,!C))break;while(w(e))}else e=Math.min(i,E(e)+1);b&&(y(k,e,C),C=!0),r++,A=!0}else{for(b=m(k=e+1)==="/";m(++e)!==` +`;)if(e===i)return null;++e,b&&(y(k,e-1,C),C=!0),++r,A=!0}else if((T=m(e))==="*"){k=e+1,b=t||m(k)==="*";do{if(T===` +`&&++r,++e===i)throw c("comment");D=T,T=m(e)}while(D!=="*"||T!=="/");++e,b&&(y(k,e-2,C),C=!0),A=!0}else return"/"}}while(A);var O=e;xa.lastIndex=0;var S=xa.test(m(O++));if(!S)for(;O<i&&!xa.test(m(O));)++O;var M=n.substring(e,e=O);return(M==='"'||M==="'")&&(l=M),M}function f(A){s.push(A)}function g(){if(!s.length){var A=d();if(A===null)return null;f(A)}return s[0]}function v(A,D){var T=g(),k=T===A;if(k)return d(),!0;if(!D)throw c("token '"+T+"', '"+A+"' expected");return!1}function _(A){var D=null,T;return A===void 0?(T=a[r-1],delete a[r-1],T&&(t||T.type==="*"||T.lineEmpty)&&(D=T.leading?T.text:null)):(o<A&&g(),T=a[A],delete a[A],T&&!T.lineEmpty&&(t||T.type==="/")&&(D=T.leading?null:T.text)),D}return Object.defineProperty({next:d,peek:g,push:f,skip:v,cmnt:_},"line",{get:function(){return r}})}});var Sp=Y((Ew,Np)=>{"use strict";Np.exports=ht;ht.filename=null;ht.defaults={keepCase:!1};var rg=wa(),_p=fr(),Tp=cr(),Ap=Ct(),og=ir(),kp=vn(),ag=Ve(),sg=or(),lg=rr(),va=en(),Ea=ye(),cg=/^[1-9][0-9]*$/,pg=/^-?[1-9][0-9]*$/,ug=/^0[x][0-9a-fA-F]+$/,fg=/^-?0[x][0-9a-fA-F]+$/,dg=/^0[0-7]+$/,mg=/^-?0[0-7]+$/,hg=/^(?![eE])[0-9]*(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?$/,ot=/^[a-zA-Z_][a-zA-Z_0-9]*$/,at=/^(?:\.?[a-zA-Z_][a-zA-Z_0-9]*)(?:\.[a-zA-Z_][a-zA-Z_0-9]*)*$/,gg=/^(?:\.[a-zA-Z_][a-zA-Z_0-9]*)+$/;function ht(n,t,e){t instanceof _p||(e=t,t=new _p),e||(e=ht.defaults);var i=e.preferTrailingComment||!1,r=rg(n,e.alternateCommentMode||!1),o=r.next,a=r.push,s=r.peek,l=r.skip,c=r.cmnt,p=!0,m,y,w,E,d=!1,f=t,g=e.keepCase?function(x){return x}:Ea.camelCase;function v(x,N,I){var P=ht.filename;return I||(ht.filename=null),Error("illegal "+(N||"token")+" '"+x+"' ("+(P?P+", ":"")+"line "+r.line+")")}function _(){var x=[],N;do{if((N=o())!=='"'&&N!=="'")throw v(N);x.push(o()),l(N),N=s()}while(N==='"'||N==="'");return x.join("")}function A(x){var N=o();switch(N){case"'":case'"':return a(N),_();case"true":case"TRUE":return!0;case"false":case"FALSE":return!1}try{return T(N,!0)}catch(I){if(x&&at.test(N))return N;throw v(N,"value")}}function D(x,N){var I,P;do N&&((I=s())==='"'||I==="'")?x.push(_()):x.push([P=k(o()),l("to",!0)?k(o()):P]);while(l(",",!0));l(";")}function T(x,N){var I=1;switch(x.charAt(0)==="-"&&(I=-1,x=x.substring(1)),x){case"inf":case"INF":case"Inf":return I*(1/0);case"nan":case"NAN":case"Nan":case"NaN":return NaN;case"0":return 0}if(cg.test(x))return I*parseInt(x,10);if(ug.test(x))return I*parseInt(x,16);if(dg.test(x))return I*parseInt(x,8);if(hg.test(x))return I*parseFloat(x);throw v(x,"number",N)}function k(x,N){switch(x){case"max":case"MAX":case"Max":return 536870911;case"0":return 0}if(!N&&x.charAt(0)==="-")throw v(x,"id");if(pg.test(x))return parseInt(x,10);if(fg.test(x))return parseInt(x,16);if(mg.test(x))return parseInt(x,8);throw v(x,"id")}function b(){if(m!==void 0)throw v("package");if(m=o(),!at.test(m))throw v(m,"name");f=f.define(m),l(";")}function C(){var x=s(),N;switch(x){case"weak":N=w||(w=[]),o();break;case"public":o();default:N=y||(y=[]);break}x=_(),l(";"),N.push(x)}function O(){if(l("="),E=_(),d=E==="proto3",!d&&E!=="proto2")throw v(E,"syntax");l(";")}function S(x,N){switch(N){case"option":return U(x,N),l(";"),!0;case"message":return L(x,N),!0;case"enum":return z(x,N),!0;case"service":return pn(x,N),!0;case"extend":return u(x,N),!0}return!1}function M(x,N,I){var P=r.line;if(x&&(typeof x.comment!="string"&&(x.comment=c()),x.filename=ht.filename),l("{",!0)){for(var $;($=o())!=="}";)N($);l(";",!0)}else I&&I(),l(";"),x&&(typeof x.comment!="string"||i)&&(x.comment=c(P)||x.comment)}function L(x,N){if(!ot.test(N=o()))throw v(N,"type name");var I=new Tp(N);M(I,function($){if(!S(I,$))switch($){case"map":F(I,$);break;case"required":case"repeated":j(I,$);break;case"optional":d?j(I,"proto3_optional"):j(I,"optional");break;case"oneof":ee(I,$);break;case"extensions":D(I.extensions||(I.extensions=[]));break;case"reserved":D(I.reserved||(I.reserved=[]),!0);break;default:if(!d||!at.test($))throw v($);a($),j(I,"optional");break}}),x.add(I)}function j(x,N,I){var P=o();if(P==="group"){Z(x,N);return}for(;P.endsWith(".")||s().startsWith(".");)P+=o();if(!at.test(P))throw v(P,"type");var $=o();if(!ot.test($))throw v($,"name");$=g($),l("=");var W=new Ap($,k(o()),P,N,I);if(M(W,function(oe){if(oe==="option")U(W,oe),l(";");else throw v(oe)},function(){lt(W)}),N==="proto3_optional"){var ie=new kp("_"+$);W.setOption("proto3_optional",!0),ie.add(W),x.add(ie)}else x.add(W);!d&&W.repeated&&(va.packed[P]!==void 0||va.basic[P]===void 0)&&W.setOption("packed",!1,!0)}function Z(x,N){var I=o();if(!ot.test(I))throw v(I,"name");var P=Ea.lcFirst(I);I===P&&(I=Ea.ucFirst(I)),l("=");var $=k(o()),W=new Tp(I);W.group=!0;var ie=new Ap(P,$,I,N);ie.filename=ht.filename,M(W,function(oe){switch(oe){case"option":U(W,oe),l(";");break;case"required":case"repeated":j(W,oe);break;case"optional":d?j(W,"proto3_optional"):j(W,"optional");break;case"message":L(W,oe);break;case"enum":z(W,oe);break;default:throw v(oe)}}),x.add(W).add(ie)}function F(x){l("<");var N=o();if(va.mapKey[N]===void 0)throw v(N,"type");l(",");var I=o();if(!at.test(I))throw v(I,"type");l(">");var P=o();if(!ot.test(P))throw v(P,"name");l("=");var $=new og(g(P),k(o()),N,I);M($,function(ie){if(ie==="option")U($,ie),l(";");else throw v(ie)},function(){lt($)}),x.add($)}function ee(x,N){if(!ot.test(N=o()))throw v(N,"name");var I=new kp(g(N));M(I,function($){$==="option"?(U(I,$),l(";")):(a($),j(I,"optional"))}),x.add(I)}function z(x,N){if(!ot.test(N=o()))throw v(N,"name");var I=new ag(N);M(I,function($){switch($){case"option":U(I,$),l(";");break;case"reserved":D(I.reserved||(I.reserved=[]),!0);break;default:We(I,$)}}),x.add(I)}function We(x,N){if(!ot.test(N))throw v(N,"name");l("=");var I=k(o(),!0),P={options:void 0};P.setOption=function($,W){this.options===void 0&&(this.options={}),this.options[$]=W},M(P,function(W){if(W==="option")U(P,W),l(";");else throw v(W)},function(){lt(P)}),x.add(N,I,P.comment,P.options)}function U(x,N){var I=l("(",!0);if(!at.test(N=o()))throw v(N,"name");var P=N,$=P,W;I&&(l(")"),P="("+P+")",$=P,N=s(),gg.test(N)&&(W=N.slice(1),P+=N,o())),l("=");var ie=Ne(x,P);Q(x,$,ie,W)}function Ne(x,N){if(l("{",!0)){for(var I={};!l("}",!0);){if(!ot.test(R=o()))throw v(R,"name");if(R===null)throw v(R,"end of input");var P,$=R;if(l(":",!0),s()==="{")P=Ne(x,N+"."+R);else if(s()==="["){P=[];var W;if(l("[",!0)){do W=A(!0),P.push(W);while(l(",",!0));l("]"),typeof W!="undefined"&&G(x,N+"."+R,W)}}else P=A(!0),G(x,N+"."+R,P);var ie=I[$];ie&&(P=[].concat(ie).concat(P)),I[$]=P,l(",",!0),l(";",!0)}return I}var te=A(!0);return G(x,N,te),te}function G(x,N,I){x.setOption&&x.setOption(N,I)}function Q(x,N,I,P){x.setParsedOption&&x.setParsedOption(N,I,P)}function lt(x){if(l("[",!0)){do U(x,"option");while(l(",",!0));l("]")}return x}function pn(x,N){if(!ot.test(N=o()))throw v(N,"service name");var I=new sg(N);M(I,function($){if(!S(I,$))if($==="rpc")h(I,$);else throw v($)}),x.add(I)}function h(x,N){var I=c(),P=N;if(!ot.test(N=o()))throw v(N,"name");var $=N,W,ie,te,oe;if(l("("),l("stream",!0)&&(ie=!0),!at.test(N=o())||(W=N,l(")"),l("returns"),l("("),l("stream",!0)&&(oe=!0),!at.test(N=o())))throw v(N);te=N,l(")");var un=new lg($,P,W,te,ie,oe);un.comment=I,M(un,function(qt){if(qt==="option")U(un,qt),l(";");else throw v(qt)}),x.add(un)}function u(x,N){if(!at.test(N=o()))throw v(N,"reference");var I=N;M(null,function($){switch($){case"required":case"repeated":j(x,$,I);break;case"optional":d?j(x,"proto3_optional",I):j(x,"optional",I);break;default:if(!d||!at.test($))throw v($);a($),j(x,"optional",I);break}})}for(var R;(R=o())!==null;)switch(R){case"package":if(!p)throw v(R);b();break;case"import":if(!p)throw v(R);C();break;case"syntax":if(!p)throw v(R);O();break;case"option":U(f,R),l(";");break;default:if(S(f,R)){p=!1;continue}throw v(R)}return ht.filename=null,{package:m,imports:y,weakImports:w,syntax:E,root:t}}});var Dp=Y((_w,Op)=>{"use strict";Op.exports=Xe;var yg=/\/|\./;function Xe(n,t){yg.test(n)||(n="google/protobuf/"+n+".proto",t={nested:{google:{nested:{protobuf:{nested:t}}}}}),Xe[n]=t}Xe("any",{Any:{fields:{type_url:{type:"string",id:1},value:{type:"bytes",id:2}}}});var Rp;Xe("duration",{Duration:Rp={fields:{seconds:{type:"int64",id:1},nanos:{type:"int32",id:2}}}});Xe("timestamp",{Timestamp:Rp});Xe("empty",{Empty:{fields:{}}});Xe("struct",{Struct:{fields:{fields:{keyType:"string",type:"Value",id:1}}},Value:{oneofs:{kind:{oneof:["nullValue","numberValue","stringValue","boolValue","structValue","listValue"]}},fields:{nullValue:{type:"NullValue",id:1},numberValue:{type:"double",id:2},stringValue:{type:"string",id:3},boolValue:{type:"bool",id:4},structValue:{type:"Struct",id:5},listValue:{type:"ListValue",id:6}}},NullValue:{values:{NULL_VALUE:0}},ListValue:{fields:{values:{rule:"repeated",type:"Value",id:1}}}});Xe("wrappers",{DoubleValue:{fields:{value:{type:"double",id:1}}},FloatValue:{fields:{value:{type:"float",id:1}}},Int64Value:{fields:{value:{type:"int64",id:1}}},UInt64Value:{fields:{value:{type:"uint64",id:1}}},Int32Value:{fields:{value:{type:"int32",id:1}}},UInt32Value:{fields:{value:{type:"uint32",id:1}}},BoolValue:{fields:{value:{type:"bool",id:1}}},StringValue:{fields:{value:{type:"string",id:1}}},BytesValue:{fields:{value:{type:"bytes",id:1}}}});Xe("field_mask",{FieldMask:{fields:{paths:{rule:"repeated",type:"string",id:1}}}});Xe.get=function(t){return Xe[t]||null}});var Ip=Y((Tw,Cp)=>{"use strict";var Lt=Cp.exports=xp();Lt.build="full";Lt.tokenize=wa();Lt.parse=Sp();Lt.common=Dp();Lt.Root._configure(Lt.Type,Lt.parse,Lt.common)});var Lp=Y((Aw,Fp)=>{"use strict";Fp.exports=Ip()});var Df=Y(Rr=>{(function(n){n.parser=function(h,u){return new e(h,u)},n.SAXParser=e,n.SAXStream=c,n.createStream=l,n.MAX_BUFFER_LENGTH=64*1024;var t=["comment","sgmlDecl","textNode","tagName","doctype","procInstName","procInstBody","entity","attribName","attribValue","cdata","script"];n.EVENTS=["text","processinginstruction","sgmldeclaration","doctype","comment","opentagstart","attribute","opentag","closetag","opencdata","cdata","closecdata","error","end","ready","script","opennamespace","closenamespace"];function e(h,u){if(!(this instanceof e))return new e(h,u);var R=this;r(R),R.q=R.c="",R.bufferCheckPosition=n.MAX_BUFFER_LENGTH,R.opt=u||{},R.opt.lowercase=R.opt.lowercase||R.opt.lowercasetags,R.looseCase=R.opt.lowercase?"toLowerCase":"toUpperCase",R.tags=[],R.closed=R.closedRoot=R.sawRoot=!1,R.tag=R.error=null,R.strict=!!h,R.noscript=!!(h||R.opt.noscript),R.state=b.BEGIN,R.strictEntities=R.opt.strictEntities,R.ENTITIES=R.strictEntities?Object.create(n.XML_ENTITIES):Object.create(n.ENTITIES),R.attribList=[],R.opt.xmlns&&(R.ns=Object.create(E)),R.trackPosition=R.opt.position!==!1,R.trackPosition&&(R.position=R.line=R.column=0),O(R,"onready")}Object.create||(Object.create=function(h){function u(){}u.prototype=h;var R=new u;return R}),Object.keys||(Object.keys=function(h){var u=[];for(var R in h)h.hasOwnProperty(R)&&u.push(R);return u});function i(h){for(var u=Math.max(n.MAX_BUFFER_LENGTH,10),R=0,x=0,N=t.length;x<N;x++){var I=h[t[x]].length;if(I>u)switch(t[x]){case"textNode":M(h);break;case"cdata":S(h,"oncdata",h.cdata),h.cdata="";break;case"script":S(h,"onscript",h.script),h.script="";break;default:j(h,"Max buffer length exceeded: "+t[x])}R=Math.max(R,I)}var P=n.MAX_BUFFER_LENGTH-R;h.bufferCheckPosition=P+h.position}function r(h){for(var u=0,R=t.length;u<R;u++)h[t[u]]=""}function o(h){M(h),h.cdata!==""&&(S(h,"oncdata",h.cdata),h.cdata=""),h.script!==""&&(S(h,"onscript",h.script),h.script="")}e.prototype={end:function(){Z(this)},write:pn,resume:function(){return this.error=null,this},close:function(){return this.write(null)},flush:function(){o(this)}};var a;try{a=require("stream").Stream}catch(h){a=function(){}}a||(a=function(){});var s=n.EVENTS.filter(function(h){return h!=="error"&&h!=="end"});function l(h,u){return new c(h,u)}function c(h,u){if(!(this instanceof c))return new c(h,u);a.apply(this),this._parser=new e(h,u),this.writable=!0,this.readable=!0;var R=this;this._parser.onend=function(){R.emit("end")},this._parser.onerror=function(x){R.emit("error",x),R._parser.error=null},this._decoder=null,s.forEach(function(x){Object.defineProperty(R,"on"+x,{get:function(){return R._parser["on"+x]},set:function(N){if(!N)return R.removeAllListeners(x),R._parser["on"+x]=N,N;R.on(x,N)},enumerable:!0,configurable:!1})})}c.prototype=Object.create(a.prototype,{constructor:{value:c}}),c.prototype.write=function(h){if(typeof Buffer=="function"&&typeof Buffer.isBuffer=="function"&&Buffer.isBuffer(h)){if(!this._decoder){var u=require("string_decoder").StringDecoder;this._decoder=new u("utf8")}h=this._decoder.write(h)}return this._parser.write(h.toString()),this.emit("data",h),!0},c.prototype.end=function(h){return h&&h.length&&this.write(h),this._parser.end(),!0},c.prototype.on=function(h,u){var R=this;return!R._parser["on"+h]&&s.indexOf(h)!==-1&&(R._parser["on"+h]=function(){var x=arguments.length===1?[arguments[0]]:Array.apply(null,arguments);x.splice(0,0,h),R.emit.apply(R,x)}),a.prototype.on.call(R,h,u)};var p="[CDATA[",m="DOCTYPE",y="http://www.w3.org/XML/1998/namespace",w="http://www.w3.org/2000/xmlns/",E={xml:y,xmlns:w},d=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,f=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/,g=/[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,v=/[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/;function _(h){return h===" "||h===` +`||h==="\r"||h===" "}function A(h){return h==='"'||h==="'"}function D(h){return h===">"||_(h)}function T(h,u){return h.test(u)}function k(h,u){return!T(h,u)}var b=0;n.STATE={BEGIN:b++,BEGIN_WHITESPACE:b++,TEXT:b++,TEXT_ENTITY:b++,OPEN_WAKA:b++,SGML_DECL:b++,SGML_DECL_QUOTED:b++,DOCTYPE:b++,DOCTYPE_QUOTED:b++,DOCTYPE_DTD:b++,DOCTYPE_DTD_QUOTED:b++,COMMENT_STARTING:b++,COMMENT:b++,COMMENT_ENDING:b++,COMMENT_ENDED:b++,CDATA:b++,CDATA_ENDING:b++,CDATA_ENDING_2:b++,PROC_INST:b++,PROC_INST_BODY:b++,PROC_INST_ENDING:b++,OPEN_TAG:b++,OPEN_TAG_SLASH:b++,ATTRIB:b++,ATTRIB_NAME:b++,ATTRIB_NAME_SAW_WHITE:b++,ATTRIB_VALUE:b++,ATTRIB_VALUE_QUOTED:b++,ATTRIB_VALUE_CLOSED:b++,ATTRIB_VALUE_UNQUOTED:b++,ATTRIB_VALUE_ENTITY_Q:b++,ATTRIB_VALUE_ENTITY_U:b++,CLOSE_TAG:b++,CLOSE_TAG_SAW_WHITE:b++,SCRIPT:b++,SCRIPT_ENDING:b++},n.XML_ENTITIES={amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},n.ENTITIES={amp:"&",gt:">",lt:"<",quot:'"',apos:"'",AElig:198,Aacute:193,Acirc:194,Agrave:192,Aring:197,Atilde:195,Auml:196,Ccedil:199,ETH:208,Eacute:201,Ecirc:202,Egrave:200,Euml:203,Iacute:205,Icirc:206,Igrave:204,Iuml:207,Ntilde:209,Oacute:211,Ocirc:212,Ograve:210,Oslash:216,Otilde:213,Ouml:214,THORN:222,Uacute:218,Ucirc:219,Ugrave:217,Uuml:220,Yacute:221,aacute:225,acirc:226,aelig:230,agrave:224,aring:229,atilde:227,auml:228,ccedil:231,eacute:233,ecirc:234,egrave:232,eth:240,euml:235,iacute:237,icirc:238,igrave:236,iuml:239,ntilde:241,oacute:243,ocirc:244,ograve:242,oslash:248,otilde:245,ouml:246,szlig:223,thorn:254,uacute:250,ucirc:251,ugrave:249,uuml:252,yacute:253,yuml:255,copy:169,reg:174,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,ordf:170,laquo:171,not:172,shy:173,macr:175,deg:176,plusmn:177,sup1:185,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,times:215,divide:247,OElig:338,oelig:339,Scaron:352,scaron:353,Yuml:376,fnof:402,circ:710,tilde:732,Alpha:913,Beta:914,Gamma:915,Delta:916,Epsilon:917,Zeta:918,Eta:919,Theta:920,Iota:921,Kappa:922,Lambda:923,Mu:924,Nu:925,Xi:926,Omicron:927,Pi:928,Rho:929,Sigma:931,Tau:932,Upsilon:933,Phi:934,Chi:935,Psi:936,Omega:937,alpha:945,beta:946,gamma:947,delta:948,epsilon:949,zeta:950,eta:951,theta:952,iota:953,kappa:954,lambda:955,mu:956,nu:957,xi:958,omicron:959,pi:960,rho:961,sigmaf:962,sigma:963,tau:964,upsilon:965,phi:966,chi:967,psi:968,omega:969,thetasym:977,upsih:978,piv:982,ensp:8194,emsp:8195,thinsp:8201,zwnj:8204,zwj:8205,lrm:8206,rlm:8207,ndash:8211,mdash:8212,lsquo:8216,rsquo:8217,sbquo:8218,ldquo:8220,rdquo:8221,bdquo:8222,dagger:8224,Dagger:8225,bull:8226,hellip:8230,permil:8240,prime:8242,Prime:8243,lsaquo:8249,rsaquo:8250,oline:8254,frasl:8260,euro:8364,image:8465,weierp:8472,real:8476,trade:8482,alefsym:8501,larr:8592,uarr:8593,rarr:8594,darr:8595,harr:8596,crarr:8629,lArr:8656,uArr:8657,rArr:8658,dArr:8659,hArr:8660,forall:8704,part:8706,exist:8707,empty:8709,nabla:8711,isin:8712,notin:8713,ni:8715,prod:8719,sum:8721,minus:8722,lowast:8727,radic:8730,prop:8733,infin:8734,ang:8736,and:8743,or:8744,cap:8745,cup:8746,int:8747,there4:8756,sim:8764,cong:8773,asymp:8776,ne:8800,equiv:8801,le:8804,ge:8805,sub:8834,sup:8835,nsub:8836,sube:8838,supe:8839,oplus:8853,otimes:8855,perp:8869,sdot:8901,lceil:8968,rceil:8969,lfloor:8970,rfloor:8971,lang:9001,rang:9002,loz:9674,spades:9824,clubs:9827,hearts:9829,diams:9830},Object.keys(n.ENTITIES).forEach(function(h){var u=n.ENTITIES[h],R=typeof u=="number"?String.fromCharCode(u):u;n.ENTITIES[h]=R});for(var C in n.STATE)n.STATE[n.STATE[C]]=C;b=n.STATE;function O(h,u,R){h[u]&&h[u](R)}function S(h,u,R){h.textNode&&M(h),O(h,u,R)}function M(h){h.textNode=L(h.opt,h.textNode),h.textNode&&O(h,"ontext",h.textNode),h.textNode=""}function L(h,u){return h.trim&&(u=u.trim()),h.normalize&&(u=u.replace(/\s+/g," ")),u}function j(h,u){return M(h),h.trackPosition&&(u+=` +Line: `+h.line+` +Column: `+h.column+` +Char: `+h.c),u=new Error(u),h.error=u,O(h,"onerror",u),h}function Z(h){return h.sawRoot&&!h.closedRoot&&F(h,"Unclosed root tag"),h.state!==b.BEGIN&&h.state!==b.BEGIN_WHITESPACE&&h.state!==b.TEXT&&j(h,"Unexpected end"),M(h),h.c="",h.closed=!0,O(h,"onend"),e.call(h,h.strict,h.opt),h}function F(h,u){if(typeof h!="object"||!(h instanceof e))throw new Error("bad call to strictFail");h.strict&&j(h,u)}function ee(h){h.strict||(h.tagName=h.tagName[h.looseCase]());var u=h.tags[h.tags.length-1]||h,R=h.tag={name:h.tagName,attributes:{}};h.opt.xmlns&&(R.ns=u.ns),h.attribList.length=0,S(h,"onopentagstart",R)}function z(h,u){var R=h.indexOf(":"),x=R<0?["",h]:h.split(":"),N=x[0],I=x[1];return u&&h==="xmlns"&&(N="xmlns",I=""),{prefix:N,local:I}}function We(h){if(h.strict||(h.attribName=h.attribName[h.looseCase]()),h.attribList.indexOf(h.attribName)!==-1||h.tag.attributes.hasOwnProperty(h.attribName)){h.attribName=h.attribValue="";return}if(h.opt.xmlns){var u=z(h.attribName,!0),R=u.prefix,x=u.local;if(R==="xmlns")if(x==="xml"&&h.attribValue!==y)F(h,"xml: prefix must be bound to "+y+` +Actual: `+h.attribValue);else if(x==="xmlns"&&h.attribValue!==w)F(h,"xmlns: prefix must be bound to "+w+` +Actual: `+h.attribValue);else{var N=h.tag,I=h.tags[h.tags.length-1]||h;N.ns===I.ns&&(N.ns=Object.create(I.ns)),N.ns[x]=h.attribValue}h.attribList.push([h.attribName,h.attribValue])}else h.tag.attributes[h.attribName]=h.attribValue,S(h,"onattribute",{name:h.attribName,value:h.attribValue});h.attribName=h.attribValue=""}function U(h,u){if(h.opt.xmlns){var R=h.tag,x=z(h.tagName);R.prefix=x.prefix,R.local=x.local,R.uri=R.ns[x.prefix]||"",R.prefix&&!R.uri&&(F(h,"Unbound namespace prefix: "+JSON.stringify(h.tagName)),R.uri=x.prefix);var N=h.tags[h.tags.length-1]||h;R.ns&&N.ns!==R.ns&&Object.keys(R.ns).forEach(function(ns){S(h,"onopennamespace",{prefix:ns,uri:R.ns[ns]})});for(var I=0,P=h.attribList.length;I<P;I++){var $=h.attribList[I],W=$[0],ie=$[1],te=z(W,!0),oe=te.prefix,un=te.local,Yr=oe===""?"":R.ns[oe]||"",qt={name:W,value:ie,prefix:oe,local:un,uri:Yr};oe&&oe!=="xmlns"&&!Yr&&(F(h,"Unbound namespace prefix: "+JSON.stringify(oe)),qt.uri=oe),h.tag.attributes[W]=qt,S(h,"onattribute",qt)}h.attribList.length=0}h.tag.isSelfClosing=!!u,h.sawRoot=!0,h.tags.push(h.tag),S(h,"onopentag",h.tag),u||(!h.noscript&&h.tagName.toLowerCase()==="script"?h.state=b.SCRIPT:h.state=b.TEXT,h.tag=null,h.tagName=""),h.attribName=h.attribValue="",h.attribList.length=0}function Ne(h){if(!h.tagName){F(h,"Weird empty close tag."),h.textNode+="</>",h.state=b.TEXT;return}if(h.script){if(h.tagName!=="script"){h.script+="</"+h.tagName+">",h.tagName="",h.state=b.SCRIPT;return}S(h,"onscript",h.script),h.script=""}var u=h.tags.length,R=h.tagName;h.strict||(R=R[h.looseCase]());for(var x=R;u--;){var N=h.tags[u];if(N.name!==x)F(h,"Unexpected close tag");else break}if(u<0){F(h,"Unmatched closing tag: "+h.tagName),h.textNode+="</"+h.tagName+">",h.state=b.TEXT;return}h.tagName=R;for(var I=h.tags.length;I-- >u;){var P=h.tag=h.tags.pop();h.tagName=h.tag.name,S(h,"onclosetag",h.tagName);var $={};for(var W in P.ns)$[W]=P.ns[W];var ie=h.tags[h.tags.length-1]||h;h.opt.xmlns&&P.ns!==ie.ns&&Object.keys(P.ns).forEach(function(te){var oe=P.ns[te];S(h,"onclosenamespace",{prefix:te,uri:oe})})}u===0&&(h.closedRoot=!0),h.tagName=h.attribValue=h.attribName="",h.attribList.length=0,h.state=b.TEXT}function G(h){var u=h.entity,R=u.toLowerCase(),x,N="";return h.ENTITIES[u]?h.ENTITIES[u]:h.ENTITIES[R]?h.ENTITIES[R]:(u=R,u.charAt(0)==="#"&&(u.charAt(1)==="x"?(u=u.slice(2),x=parseInt(u,16),N=x.toString(16)):(u=u.slice(1),x=parseInt(u,10),N=x.toString(10))),u=u.replace(/^0+/,""),isNaN(x)||N.toLowerCase()!==u?(F(h,"Invalid character entity"),"&"+h.entity+";"):String.fromCodePoint(x))}function Q(h,u){u==="<"?(h.state=b.OPEN_WAKA,h.startTagPosition=h.position):_(u)||(F(h,"Non-whitespace before first tag."),h.textNode=u,h.state=b.TEXT)}function lt(h,u){var R="";return u<h.length&&(R=h.charAt(u)),R}function pn(h){var u=this;if(this.error)throw this.error;if(u.closed)return j(u,"Cannot write after close. Assign an onready handler.");if(h===null)return Z(u);typeof h=="object"&&(h=h.toString());for(var R=0,x="";x=lt(h,R++),u.c=x,!!x;)switch(u.trackPosition&&(u.position++,x===` +`?(u.line++,u.column=0):u.column++),u.state){case b.BEGIN:if(u.state=b.BEGIN_WHITESPACE,x==="\uFEFF")continue;Q(u,x);continue;case b.BEGIN_WHITESPACE:Q(u,x);continue;case b.TEXT:if(u.sawRoot&&!u.closedRoot){for(var N=R-1;x&&x!=="<"&&x!=="&";)x=lt(h,R++),x&&u.trackPosition&&(u.position++,x===` +`?(u.line++,u.column=0):u.column++);u.textNode+=h.substring(N,R-1)}x==="<"&&!(u.sawRoot&&u.closedRoot&&!u.strict)?(u.state=b.OPEN_WAKA,u.startTagPosition=u.position):(!_(x)&&(!u.sawRoot||u.closedRoot)&&F(u,"Text data outside of root node."),x==="&"?u.state=b.TEXT_ENTITY:u.textNode+=x);continue;case b.SCRIPT:x==="<"?u.state=b.SCRIPT_ENDING:u.script+=x;continue;case b.SCRIPT_ENDING:x==="/"?u.state=b.CLOSE_TAG:(u.script+="<"+x,u.state=b.SCRIPT);continue;case b.OPEN_WAKA:if(x==="!")u.state=b.SGML_DECL,u.sgmlDecl="";else if(!_(x))if(T(d,x))u.state=b.OPEN_TAG,u.tagName=x;else if(x==="/")u.state=b.CLOSE_TAG,u.tagName="";else if(x==="?")u.state=b.PROC_INST,u.procInstName=u.procInstBody="";else{if(F(u,"Unencoded <"),u.startTagPosition+1<u.position){var I=u.position-u.startTagPosition;x=new Array(I).join(" ")+x}u.textNode+="<"+x,u.state=b.TEXT}continue;case b.SGML_DECL:(u.sgmlDecl+x).toUpperCase()===p?(S(u,"onopencdata"),u.state=b.CDATA,u.sgmlDecl="",u.cdata=""):u.sgmlDecl+x==="--"?(u.state=b.COMMENT,u.comment="",u.sgmlDecl=""):(u.sgmlDecl+x).toUpperCase()===m?(u.state=b.DOCTYPE,(u.doctype||u.sawRoot)&&F(u,"Inappropriately located doctype declaration"),u.doctype="",u.sgmlDecl=""):x===">"?(S(u,"onsgmldeclaration",u.sgmlDecl),u.sgmlDecl="",u.state=b.TEXT):(A(x)&&(u.state=b.SGML_DECL_QUOTED),u.sgmlDecl+=x);continue;case b.SGML_DECL_QUOTED:x===u.q&&(u.state=b.SGML_DECL,u.q=""),u.sgmlDecl+=x;continue;case b.DOCTYPE:x===">"?(u.state=b.TEXT,S(u,"ondoctype",u.doctype),u.doctype=!0):(u.doctype+=x,x==="["?u.state=b.DOCTYPE_DTD:A(x)&&(u.state=b.DOCTYPE_QUOTED,u.q=x));continue;case b.DOCTYPE_QUOTED:u.doctype+=x,x===u.q&&(u.q="",u.state=b.DOCTYPE);continue;case b.DOCTYPE_DTD:u.doctype+=x,x==="]"?u.state=b.DOCTYPE:A(x)&&(u.state=b.DOCTYPE_DTD_QUOTED,u.q=x);continue;case b.DOCTYPE_DTD_QUOTED:u.doctype+=x,x===u.q&&(u.state=b.DOCTYPE_DTD,u.q="");continue;case b.COMMENT:x==="-"?u.state=b.COMMENT_ENDING:u.comment+=x;continue;case b.COMMENT_ENDING:x==="-"?(u.state=b.COMMENT_ENDED,u.comment=L(u.opt,u.comment),u.comment&&S(u,"oncomment",u.comment),u.comment=""):(u.comment+="-"+x,u.state=b.COMMENT);continue;case b.COMMENT_ENDED:x!==">"?(F(u,"Malformed comment"),u.comment+="--"+x,u.state=b.COMMENT):u.state=b.TEXT;continue;case b.CDATA:x==="]"?u.state=b.CDATA_ENDING:u.cdata+=x;continue;case b.CDATA_ENDING:x==="]"?u.state=b.CDATA_ENDING_2:(u.cdata+="]"+x,u.state=b.CDATA);continue;case b.CDATA_ENDING_2:x===">"?(u.cdata&&S(u,"oncdata",u.cdata),S(u,"onclosecdata"),u.cdata="",u.state=b.TEXT):x==="]"?u.cdata+="]":(u.cdata+="]]"+x,u.state=b.CDATA);continue;case b.PROC_INST:x==="?"?u.state=b.PROC_INST_ENDING:_(x)?u.state=b.PROC_INST_BODY:u.procInstName+=x;continue;case b.PROC_INST_BODY:if(!u.procInstBody&&_(x))continue;x==="?"?u.state=b.PROC_INST_ENDING:u.procInstBody+=x;continue;case b.PROC_INST_ENDING:x===">"?(S(u,"onprocessinginstruction",{name:u.procInstName,body:u.procInstBody}),u.procInstName=u.procInstBody="",u.state=b.TEXT):(u.procInstBody+="?"+x,u.state=b.PROC_INST_BODY);continue;case b.OPEN_TAG:T(f,x)?u.tagName+=x:(ee(u),x===">"?U(u):x==="/"?u.state=b.OPEN_TAG_SLASH:(_(x)||F(u,"Invalid character in tag name"),u.state=b.ATTRIB));continue;case b.OPEN_TAG_SLASH:x===">"?(U(u,!0),Ne(u)):(F(u,"Forward-slash in opening tag not followed by >"),u.state=b.ATTRIB);continue;case b.ATTRIB:if(_(x))continue;x===">"?U(u):x==="/"?u.state=b.OPEN_TAG_SLASH:T(d,x)?(u.attribName=x,u.attribValue="",u.state=b.ATTRIB_NAME):F(u,"Invalid attribute name");continue;case b.ATTRIB_NAME:x==="="?u.state=b.ATTRIB_VALUE:x===">"?(F(u,"Attribute without value"),u.attribValue=u.attribName,We(u),U(u)):_(x)?u.state=b.ATTRIB_NAME_SAW_WHITE:T(f,x)?u.attribName+=x:F(u,"Invalid attribute name");continue;case b.ATTRIB_NAME_SAW_WHITE:if(x==="=")u.state=b.ATTRIB_VALUE;else{if(_(x))continue;F(u,"Attribute without value"),u.tag.attributes[u.attribName]="",u.attribValue="",S(u,"onattribute",{name:u.attribName,value:""}),u.attribName="",x===">"?U(u):T(d,x)?(u.attribName=x,u.state=b.ATTRIB_NAME):(F(u,"Invalid attribute name"),u.state=b.ATTRIB)}continue;case b.ATTRIB_VALUE:if(_(x))continue;A(x)?(u.q=x,u.state=b.ATTRIB_VALUE_QUOTED):(F(u,"Unquoted attribute value"),u.state=b.ATTRIB_VALUE_UNQUOTED,u.attribValue=x);continue;case b.ATTRIB_VALUE_QUOTED:if(x!==u.q){x==="&"?u.state=b.ATTRIB_VALUE_ENTITY_Q:u.attribValue+=x;continue}We(u),u.q="",u.state=b.ATTRIB_VALUE_CLOSED;continue;case b.ATTRIB_VALUE_CLOSED:_(x)?u.state=b.ATTRIB:x===">"?U(u):x==="/"?u.state=b.OPEN_TAG_SLASH:T(d,x)?(F(u,"No whitespace between attributes"),u.attribName=x,u.attribValue="",u.state=b.ATTRIB_NAME):F(u,"Invalid attribute name");continue;case b.ATTRIB_VALUE_UNQUOTED:if(!D(x)){x==="&"?u.state=b.ATTRIB_VALUE_ENTITY_U:u.attribValue+=x;continue}We(u),x===">"?U(u):u.state=b.ATTRIB;continue;case b.CLOSE_TAG:if(u.tagName)x===">"?Ne(u):T(f,x)?u.tagName+=x:u.script?(u.script+="</"+u.tagName,u.tagName="",u.state=b.SCRIPT):(_(x)||F(u,"Invalid tagname in closing tag"),u.state=b.CLOSE_TAG_SAW_WHITE);else{if(_(x))continue;k(d,x)?u.script?(u.script+="</"+x,u.state=b.SCRIPT):F(u,"Invalid tagname in closing tag."):u.tagName=x}continue;case b.CLOSE_TAG_SAW_WHITE:if(_(x))continue;x===">"?Ne(u):F(u,"Invalid characters in closing tag");continue;case b.TEXT_ENTITY:case b.ATTRIB_VALUE_ENTITY_Q:case b.ATTRIB_VALUE_ENTITY_U:var P,$;switch(u.state){case b.TEXT_ENTITY:P=b.TEXT,$="textNode";break;case b.ATTRIB_VALUE_ENTITY_Q:P=b.ATTRIB_VALUE_QUOTED,$="attribValue";break;case b.ATTRIB_VALUE_ENTITY_U:P=b.ATTRIB_VALUE_UNQUOTED,$="attribValue";break}if(x===";")if(u.opt.unparsedEntities){var W=G(u);u.entity="",u.state=P,u.write(W)}else u[$]+=G(u),u.entity="",u.state=P;else T(u.entity.length?v:g,x)?u.entity+=x:(F(u,"Invalid character in entity name"),u[$]+="&"+u.entity+x,u.entity="",u.state=P);continue;default:throw new Error(u,"Unknown state: "+u.state)}return u.position>=u.bufferCheckPosition&&i(u),u}String.fromCodePoint||function(){var h=String.fromCharCode,u=Math.floor,R=function(){var x=16384,N=[],I,P,$=-1,W=arguments.length;if(!W)return"";for(var ie="";++$<W;){var te=Number(arguments[$]);if(!isFinite(te)||te<0||te>1114111||u(te)!==te)throw RangeError("Invalid code point: "+te);te<=65535?N.push(te):(te-=65536,I=(te>>10)+55296,P=te%1024+56320,N.push(I,P)),($+1===W||N.length>x)&&(ie+=h.apply(null,N),N.length=0)}return ie};Object.defineProperty?Object.defineProperty(String,"fromCodePoint",{value:R,configurable:!0,writable:!0}):String.fromCodePoint=R}()})(typeof Rr=="undefined"?Rr.sax={}:Rr)});var Lf=Y((o2,Ff)=>{var Cf=/[&<>"]/g,yy=RegExp(Cf.source),by={"&":"&","<":"<",">":">",'"':"""},xy=n=>{let t=String(n);return t&&yy.test(t)?t.replace(Cf,e=>by[e]):t},wy=(n,t)=>typeof n=="string"&&typeof t=="string"||n&&n[0].$name===t.$name,vy=(n,t)=>typeof n=="string"?n+t:n.concat(t),Ey=n=>n.reduce((t,e)=>{let i=t.length-1,r=t[i];return wy(r,e)?t[i]=vy(r,e):t.push(typeof e=="string"?e:[e]),t},[]),_y=(n,t,e)=>{let i=null,r={};return Object.keys(n).forEach(o=>{let a=Or(n[o])?n[o]:null;if(a)switch(o){case"$name":!t&&a&&(r.$name=a);break;case"$attrs":i=a;break;case"$markup":r.$markup=If(a);break;default:a&&(r[o]=e(a))}}),{stripped:r,$attrs:i}},Ty=n=>Array.isArray(n)&&n.length===1?n[0]:n,Ay=(n,t)=>Or(t)?n?Object.keys(t).length===1&&t.$name?Object.assign(t,n):Object.assign(t,{$attrs:n}):t:n,ky=n=>{if(!n)return;let t=Object.keys(n),[e]=t;return t.length===1&&e!=="$name"&&e!=="id"?n[t[0]]:n},Za=(n,t,e)=>{let i=e?l=>l:Ty,r=i(n);if(!Or(r))return null;if(typeof r!="object"||Array.isArray(r))return r;let{$attrs:o,stripped:a}=_y(r,t,i),s=Ay(o,a);return ky(s)},Ny=n=>{let t,e={},i=!0;return n.every(r=>(typeof r=="string"?t="$text":t=r[0].$name,e[t]?(i=!1,!1):(e[t]=!0,!0))),i},Ya=(n=[],t=[],e=!1)=>{let i=Array.isArray(n)?n:[n],r=Array.isArray(t)?t:[t],o=i.concat(r);return o.length===1&&!e?o[0]:o},If=(n,t)=>{let e=[];return n!==null&&typeof n=="object"&&n.constructor===Array?(n.forEach(i=>{e.push(Za(i,t))}),e):Za(n,t)},Sy=(n,t)=>{let e,i={};return Object.keys(n).forEach(r=>{r!=="$markup"&&(i[r]=n[r])}),n.$markup&&n.$markup.forEach(r=>{typeof r=="string"?i.$text=Ya(i.$text,r,t):typeof r=="object"&&(r.constructor===Array?e=r[0].$name:e=r.$name,i[e]=Ya(i[e],If(r,!0),t))}),i},Or=n=>n!=null&&(n.length==null||n.length!==0)&&(typeof n!="object"||Object.keys(n).length!==0);Ff.exports={condenseArray:Ey,escape:xy,isSomething:Or,moosh:Ya,objectifyMarkup:Sy,shouldObjectifyMarkup:Ny,simplifyNode:Za}});var $f=Y((a2,Mf)=>{var{EventEmitter:Ry}=require("events"),Oy=Df(),$t=Lf(),Dy=1,In=0,Bt=-1,Pf={preserveMarkup:In,simplifyNodes:!0,useArrays:In,lowercase:!0,trim:!0,normalize:!0,cdataAsText:!1,strict:!1},bi=function(t,e=Pf){let i=new Ry,r=[],o=Object.assign({},Pf,e),{preserveMarkup:a,simplifyNodes:s,useArrays:l,lowercase:c,trim:p,normalize:m,cdataAsText:y,strict:w}=o,E=null,d=null,f=Oy.createStream(w,{lowercase:c,trim:p,normalize:m,cdataAsText:y});return f.on("opentag",g=>{r.length===0&&!i.listeners(`tag:${g.name}`).length||(E={$name:g.name,$attrs:g.attributes},l>Bt&&(E.$markup=[]),r.push(E))}),f.on("text",g=>{E&&(l>Bt?E.$markup.push(g):E.$text?E.$text+=g:E.$text=g)}),f.on("opencdata",()=>{E&&(y||(d={$name:"$cdata",text:""},l>Bt?E.$markup.push(d):E.$cdata=d))}),f.on("cdata",g=>{E&&(d!==null?d.text+=g:l>Bt?E.$markup.push(g):E.$text?E.$text+=g:E.$text=g)}),f.on("closecdata",()=>{d=null}),f.on("script",g=>{E&&(E.$script=g)}),f.on("closetag",g=>{let v,_=null,A=l>In;r.length!==0&&(l>Bt&&(a<=Bt?(E.$markup=$t.condenseArray(E.$markup),E=$t.objectifyMarkup(E,A)):a===In&&(v=$t.condenseArray(E.$markup),$t.shouldObjectifyMarkup(v)&&(E.$markup=v,E=$t.objectifyMarkup(E,A)))),i.listeners(`tag:${g}`).length&&i.emit(`tag:${g}`,s?$t.simplifyNode(E,!1,l>In):E),r.pop(),r.length>0&&(_=r[r.length-1],l>Bt?_.$markup.push(E):_[g]||(_[g]=$t.simplifyNode(E,!0))),E=_)}),f.on("end",()=>{i.emit("end")}),f.on("error",g=>{i.emit("error",g)}),t.pipe(f),i.pause=function(){t.pause()},i.resume=function(){t.resume()},i};bi.ALWAYS=Dy;bi.SOMETIMES=In;bi.NEVER=Bt;bi.toXml=function(t,{indent:e="",selfClosing:i=!0,escape:r=$t.escape,nodeName:o}={}){let a=e?` +`:"";function s(l,c,p){let m="",y,w=c,E=p?a+p:"",d=p+e,f="";return l=l||"",l.constructor===Array?(l.forEach(g=>{m+=s(g,w,p)}),m):(!w&&l.$name&&(w=l.$name),w&&(m=`${E}<${w}`,l.$attrs&&typeof l.$attrs=="object"&&(y=Object.keys(l.$attrs),y.forEach(g=>{m+=` ${g}=${JSON.stringify(String(l.$attrs[g]))}`}))),l==null||l===""||(typeof l=="object"?(y=Object.keys(l),y.forEach(g=>{let v=l[g];switch(g){case"$name":case"$attrs":break;case"$text":case"$markup":f+=s(v,null,d);break;case"$script":f+=s(v,"script",d);break;case"$cdata":f+=`${E}<![CDATA[${v}]]>`;break;default:f+=s(v,g,d)}})):f+=E+r(l)),w?f?m+=`>${f}${a}${p}</${w}>`:i?m+="/>":m+=`></${w}>`:m+=f,m)}return s(t,o,"")};Mf.exports=bi});var I1={};Se(I1,{ATTACHMENT_EXTS:()=>Ln,AUTH_REDIRECT_URI:()=>$r,ImportContext:()=>Wr,ImporterModal:()=>wi,default:()=>Zr});module.exports=wd(I1);var Ht=require("obsidian");var st=require("obsidian");var wt=class{constructor(t){this.importer=t,this.app=t.app}};var Mn=class extends wt{constructor(e,i){super(e);this.scan=i.mergableDataObject,this.objects=this.scan.mergeableDataObjectData.mergeableDataObjectEntry}async format(){let e=[];for(let i of this.objects){if(!i.customMap)continue;let r=i.customMap.mapEntry[0].value.stringValue,o=await this.importer.database.get` + SELECT z_pk, zmedia, ztypeuti FROM ziccloudsyncingobject + WHERE zidentifier = ${r}`,a=await this.importer.resolveAttachment(o.Z_PK,"com.apple.notes.gallery");if(a||(a=await this.importer.resolveAttachment(o.ZMEDIA,o.ZTYPEUTI)),a)e.push(this.importer.app.fileManager.generateMarkdownLink(a,"/"));else return"**Cannot decode scan**"}return` +${e.join(` +`)} +`}};Mn.protobufType="ciofecaforensics.MergableDataProto";var $n=class extends wt{constructor(e,i){super(e);this.rowLocations={};this.columnLocations={};this.table=i.mergableDataObject;let r=this.table.mergeableDataObjectData;this.keys=r.mergeableDataObjectKeyItem,this.types=r.mergeableDataObjectTypeItem,this.uuids=r.mergeableDataObjectUuidItem.map(this.uuidToString),this.objects=r.mergeableDataObjectEntry}async parse(){let e=this.objects.find(r=>r.customMap&&this.types[r.customMap.type]=="com.apple.notes.ICTable");if(!e)return null;let i=null;for(let r of e.customMap.mapEntry){let o=this.objects[r.value.objectIndex];switch(this.keys[r.key]){case"crRows":[this.rowLocations,this.rowCount]=this.findLocations(o);break;case"crColumns":[this.columnLocations,this.columnCount]=this.findLocations(o);break;case"cellColumns":i=o;break}}return i?await this.computeCells(i):null}findLocations(e){let i=[],r={};for(let o of e.orderedSet.ordering.array.attachment)i.push(this.uuidToString(o.uuid));for(let o of e.orderedSet.ordering.contents.element){let a=this.getTargetUuid(o.key),s=this.getTargetUuid(o.value);r[s]=i.indexOf(a)}return[r,i.length]}async computeCells(e){let i=Array(this.rowCount).fill(0).map(()=>Array(this.columnCount));for(let r of e.dictionary.element){let o=this.columnLocations[this.getTargetUuid(r.key)],a=this.objects[r.value.objectIndex];for(let s of a.dictionary.element){let l=this.rowLocations[this.getTargetUuid(s.key)],c=this.objects[s.value.objectIndex];if(!(l in i)||!c)continue;let p=new Wt(this.importer,c);i[l][o]=await p.format(!0)}}return i}async format(){let e=await this.parse();if(!e)return"";let i=` +`;for(let r=0;r<e.length;r++)i+=`| ${e[r].join(" | ")} | +`,r==0&&(i+=`|${" -- |".repeat(e[0].length)} +`);return i+` +`}getTargetUuid(e){let r=this.objects[e.objectIndex].customMap.mapEntry[0].value.unsignedIntegerValue;return this.uuids[r]}uuidToString(e){return Buffer.from(e).toString("hex")}};$n.protobufType="ciofecaforensics.MergableDataProto";var vd=/(^\s+|(?:\s+)?\n(?:\s+)?|\s+$)/,zr=/applenotes:note\/([-0-9a-f]+)(?:\?ownerIdentifier=.*)?/,Ed=".AppleColorEmojiUI",as=[100,101,102,103],Wt=class extends wt{constructor(e,i){super(e);this.listNumber=0;this.listIndent=0;this.multiRun=0;this.note=i.note}parseTokens(){let e=0,i=0,r=0,o=[];for(;e<this.note.attributeRun.length;){let a,s="",l=!0;do a=this.note.attributeRun[e],r=r+a.length,s+=this.note.noteText.substring(i,r),i=r,l=e==this.note.attributeRun.length-1?!1:ss(a,this.note.attributeRun[e+1]),e++;while(l);for(let c of s.split(vd))c&&o.push({attr:a,fragment:c})}return o}async format(e=!1){var a;let i=this.parseTokens(),r=!e&&this.importer.omitFirstLine&&this.note.noteText.contains(` +`),o="";for(let s=0;s<i.length;s++){let{attr:l,fragment:c}=i[s];if(r)if(c.contains(` +`)||l.attachmentInfo)r=!1;else continue;l.fragment=c,l.atLineStart=s==0?!0:(a=i[s-1])==null?void 0:a.fragment.contains(` +`),o+=this.formatMultiRun(l),!/\S/.test(l.fragment)||this.multiRun==1?o+=l.fragment:l.attachmentInfo?o+=await this.formatAttachment(l):l.superscript||l.underlined||l.color||l.font||this.multiRun==2?o+=await this.formatHtmlAttr(l):o+=await this.formatAttr(l)}return this.multiRun!=0&&(o+=this.formatMultiRun({})),e&&o.replace(` +`,"<br>").replace("|","|"),o.trim()}formatMultiRun(e){var o,a,s,l,c,p;let i=(o=e.paragraphStyle)==null?void 0:o.styleType,r="";switch(this.multiRun){case 3:(((a=e.paragraphStyle)==null?void 0:a.indentAmount)==0&&!as.includes(i)||_d(e))&&(this.multiRun=0);break;case 1:i!=4&&(this.multiRun=0,r+="```\n");break;case 2:(s=e.paragraphStyle)!=null&&s.alignment||(this.multiRun=0,r+=`</p> +`);break}if(this.multiRun==0){if(i==4)this.multiRun=1,r+="\n```\n";else if(as.includes(i))this.multiRun=3,(l=e.paragraphStyle)!=null&&l.indentAmount&&(r+=` +- +`);else if((c=e.paragraphStyle)!=null&&c.alignment){this.multiRun=2;let m=this.convertAlign((p=e==null?void 0:e.paragraphStyle)==null?void 0:p.alignment);r+=` +<p style="text-align:${m};margin:0">`}}return r}async formatHtmlAttr(e){var r,o;e.strikethrough&&(e.fragment=`<s>${e.fragment}</s>`),e.underlined&&(e.fragment=`<u>${e.fragment}</u>`),e.superscript==1&&(e.fragment=`<sup>${e.fragment}</sup>`),e.superscript==-1&&(e.fragment=`<sub>${e.fragment}</sub>`);let i="";switch(e.fontWeight){case 1:e.fragment=`<b>${e.fragment}</b>`;break;case 2:e.fragment=`<i>${e.fragment}</i>`;break;case 3:e.fragment=`<b><i>${e.fragment}</i></b>`;break}return(r=e.font)!=null&&r.fontName&&e.font.fontName!==Ed&&(i+=`font-family:${e.font.fontName};`),(o=e.font)!=null&&o.pointSize&&(i+=`font-size:${e.font.pointSize}pt;`),e.color&&(i+=`color:${this.convertColor(e.color)};`),e.link&&!zr.test(e.link)?(i&&(i=` style="${i}"`),e.fragment=`<a href="${e.link}" rel="noopener" class="external-link" target="_blank"${i}>${e.fragment}</a>`):i&&(e.link&&(e.fragment=await this.getInternalLink(e.link,e.fragment)),e.fragment=`<span style="${i}">${e.fragment}</span>`),e.atLineStart?this.formatParagraph(e):e.fragment}async formatAttr(e){switch(e.fontWeight){case 1:e.fragment=`**${e.fragment}**`;break;case 2:e.fragment=`*${e.fragment}*`;break;case 3:e.fragment=`***${e.fragment}***`;break}return e.strikethrough&&(e.fragment=`~~${e.fragment}~~`),e.link&&e.link!=e.fragment&&(zr.test(e.link)?e.fragment=await this.getInternalLink(e.link,e.fragment):e.fragment=`[${e.fragment}](${e.link})`),e.atLineStart?this.formatParagraph(e):e.fragment}formatParagraph(e){var a,s,l,c,p,m;let i=" ".repeat(((a=e.paragraphStyle)==null?void 0:a.indentAmount)||0),r=(s=e.paragraphStyle)==null?void 0:s.styleType,o=(l=e.paragraphStyle)!=null&&l.blockquote?"> ":"";switch(this.listNumber!=0&&(r!==102||this.listIndent!==((c=e.paragraphStyle)==null?void 0:c.indentAmount))&&(this.listIndent=((p=e.paragraphStyle)==null?void 0:p.indentAmount)||0,this.listNumber=0),r){case 0:return`${o}# ${e.fragment}`;case 1:return`${o}## ${e.fragment}`;case 2:return`${o}### ${e.fragment}`;case 101:case 100:return`${o}${i}- ${e.fragment}`;case 102:return this.listNumber++,`${o}${i}${this.listNumber}. ${e.fragment}`;case 103:let y=(m=e.paragraphStyle.checklist)!=null&&m.done?"[x]":"[ ]";return`${o}${i}- ${y} ${e.fragment}`}return this.multiRun==3&&(o+=i),`${o}${e.fragment}`}async formatAttachment(e){var l,c,p;let i,r,o;switch((l=e.attachmentInfo)==null?void 0:l.typeUti){case"com.apple.notes.inlinetextattachment.hashtag":case"com.apple.notes.inlinetextattachment.mention":return i=await this.importer.database.get` + SELECT zalttext FROM ziccloudsyncingobject + WHERE zidentifier = ${e.attachmentInfo.attachmentIdentifier}`,i.ZALTTEXT;case"com.apple.notes.inlinetextattachment.link":return i=await this.importer.database.get` + SELECT ztokencontentidentifier FROM ziccloudsyncingobject + WHERE zidentifier = ${e.attachmentInfo.attachmentIdentifier}`,await this.getInternalLink(i.ZTOKENCONTENTIDENTIFIER);case"com.apple.notes.table":return i=await this.importer.database.get` + SELECT hex(zmergeabledata1) as zhexdata FROM ziccloudsyncingobject + WHERE zidentifier = ${e.attachmentInfo.attachmentIdentifier}`,o=this.importer.decodeData(i.zhexdata,$n),await o.format();case"public.url":return i=await this.importer.database.get` + SELECT ztitle, zurlstring FROM ziccloudsyncingobject + WHERE zidentifier = ${e.attachmentInfo.attachmentIdentifier}`,`[**${i.ZTITLE}**](${i.ZURLSTRING})`;case"com.apple.notes.gallery":return i=await this.importer.database.get` + SELECT hex(zmergeabledata1) as zhexdata FROM ziccloudsyncingobject + WHERE zidentifier = ${e.attachmentInfo.attachmentIdentifier}`,o=this.importer.decodeData(i.zhexdata,Mn),await o.format();case"com.apple.paper.doc.scan":case"com.apple.drawing":case"com.apple.drawing.2":case"com.apple.paper":i=await this.importer.database.get` + SELECT z_pk, zhandwritingsummary + FROM (SELECT *, NULL AS zhandwritingsummary FROM ziccloudsyncingobject) + WHERE zidentifier = ${e.attachmentInfo.attachmentIdentifier}`,r=i==null?void 0:i.Z_PK;break;default:i=await this.importer.database.get` + SELECT zmedia FROM ziccloudsyncingobject + WHERE zidentifier = ${(c=e.attachmentInfo)==null?void 0:c.attachmentIdentifier}`,r=i==null?void 0:i.ZMEDIA;break}if(!r)return` **(unknown attachment: ${(p=e.attachmentInfo)==null?void 0:p.typeUti})** `;let a=await this.importer.resolveAttachment(r,e.attachmentInfo.typeUti),s=a?` +${this.app.fileManager.generateMarkdownLink(a,"/")} +`:" **(error reading attachment)**";return this.importer.includeHandwriting&&i.ZHANDWRITINGSUMMARY&&(s=` +> [!Handwriting]- +> ${i.ZHANDWRITINGSUMMARY.replace(` +`,` +> `)}${s}`),s}async getInternalLink(e,i=void 0){let r=e.match(zr)[1],o=await this.importer.database.get` + SELECT z_pk FROM ziccloudsyncingobject + WHERE zidentifier = ${r.toUpperCase()}`,a=await this.importer.resolveNote(o.Z_PK);return a?this.app.fileManager.generateMarkdownLink(a,this.importer.rootFolder.path,void 0,i):"(unknown file link)"}convertColor(e){let i="#";for(let r of Object.values(e))i+=Math.floor(r*255).toString(16);return i}convertAlign(e){switch(e){default:return"left";case 1:return"center";case 2:return"right";case 3:return"justify"}}};Wt.protobufType="ciofecaforensics.Document";function _d(n){return n.attachmentInfo?!n.attachmentInfo.typeUti.includes("com.apple.notes.inlinetextattachment"):!1}function ss(n,t){var e,i;if(!t||n.$type!=t.$type)return!1;for(let r of n.$type.fieldsArray)if(r.name!="length"){if((e=n[r.name])!=null&&e.$type&&((i=t[r.name])!=null&&i.$type)){if(!ss(n[r.name],t[r.name]))return!1}else if(n[r.name]!=t[r.name])return!1}return!0}var ls={nested:{ciofecaforensics:{nested:{Color:{fields:{red:{type:"float",id:1},green:{type:"float",id:2},blue:{type:"float",id:3},alpha:{type:"float",id:4}}},AttachmentInfo:{fields:{attachmentIdentifier:{type:"string",id:1},typeUti:{type:"string",id:2}}},Font:{fields:{fontName:{type:"string",id:1},pointSize:{type:"float",id:2},fontHints:{type:"int32",id:3}}},ParagraphStyle:{fields:{styleType:{type:"int32",id:1,options:{default:-1}},alignment:{type:"int32",id:2},indentAmount:{type:"int32",id:4},checklist:{type:"Checklist",id:5},blockquote:{type:"int32",id:8}}},Checklist:{fields:{uuid:{type:"bytes",id:1},done:{type:"int32",id:2}}},DictionaryElement:{fields:{key:{type:"ObjectID",id:1},value:{type:"ObjectID",id:2}}},Dictionary:{fields:{element:{rule:"repeated",type:"DictionaryElement",id:1,options:{packed:!1}}}},ObjectID:{fields:{unsignedIntegerValue:{type:"uint64",id:2},stringValue:{type:"string",id:4},objectIndex:{type:"int32",id:6}}},RegisterLatest:{fields:{contents:{type:"ObjectID",id:2}}},MapEntry:{fields:{key:{type:"int32",id:1},value:{type:"ObjectID",id:2}}},AttributeRun:{fields:{length:{type:"int32",id:1},paragraphStyle:{type:"ParagraphStyle",id:2},font:{type:"Font",id:3},fontWeight:{type:"int32",id:5},underlined:{type:"int32",id:6},strikethrough:{type:"int32",id:7},superscript:{type:"int32",id:8},link:{type:"string",id:9},color:{type:"Color",id:10},attachmentInfo:{type:"AttachmentInfo",id:12}}},NoteStoreProto:{fields:{document:{type:"Document",id:2}}},Document:{fields:{version:{type:"int32",id:2},note:{type:"Note",id:3}}},Note:{fields:{noteText:{type:"string",id:2},attributeRun:{rule:"repeated",type:"AttributeRun",id:5,options:{packed:!1}}}},MergableDataProto:{fields:{mergableDataObject:{type:"MergableDataObject",id:2}}},MergableDataObject:{fields:{version:{type:"int32",id:2},mergeableDataObjectData:{type:"MergeableDataObjectData",id:3}}},MergeableDataObjectData:{fields:{mergeableDataObjectEntry:{rule:"repeated",type:"MergeableDataObjectEntry",id:3,options:{packed:!1}},mergeableDataObjectKeyItem:{rule:"repeated",type:"string",id:4},mergeableDataObjectTypeItem:{rule:"repeated",type:"string",id:5},mergeableDataObjectUuidItem:{rule:"repeated",type:"bytes",id:6}}},MergeableDataObjectEntry:{fields:{registerLatest:{type:"RegisterLatest",id:1},list:{type:"List",id:5},dictionary:{type:"Dictionary",id:6},unknownMessage:{type:"UnknownMergeableDataObjectEntryMessage",id:9},note:{type:"Note",id:10},customMap:{type:"MergeableDataObjectMap",id:13},orderedSet:{type:"OrderedSet",id:16}}},UnknownMergeableDataObjectEntryMessage:{fields:{unknownEntry:{type:"UnknownMergeableDataObjectEntryMessageEntry",id:1}}},UnknownMergeableDataObjectEntryMessageEntry:{fields:{unknownInt1:{type:"int32",id:1},unknownInt2:{type:"int64",id:2}}},MergeableDataObjectMap:{fields:{type:{type:"int32",id:1},mapEntry:{rule:"repeated",type:"MapEntry",id:3,options:{packed:!1}}}},OrderedSet:{fields:{ordering:{type:"OrderedSetOrdering",id:1},elements:{type:"Dictionary",id:2}}},OrderedSetOrdering:{fields:{array:{type:"OrderedSetOrderingArray",id:1},contents:{type:"Dictionary",id:2}}},OrderedSetOrderingArray:{fields:{contents:{type:"Note",id:1},attachment:{rule:"repeated",type:"OrderedSetOrderingArrayAttachment",id:2,options:{packed:!1}}}},OrderedSetOrderingArrayAttachment:{fields:{index:{type:"int32",id:1},uuid:{type:"bytes",id:2}}},List:{fields:{listEntry:{rule:"repeated",type:"ListEntry",id:1,options:{packed:!1}}}},ListEntry:{fields:{id:{type:"ObjectID",id:2},details:{type:"ListEntryDetails",id:3},additionalDetails:{type:"ListEntryDetails",id:4}}},ListEntryDetails:{fields:{listEntryDetailsKey:{type:"ListEntryDetailsKey",id:1},id:{type:"ObjectID",id:2}}},ListEntryDetailsKey:{fields:{listEntryDetailsTypeIndex:{type:"int32",id:1},listEntryDetailsKey:{type:"int32",id:2}}}}}}};var De=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],Ss=1440,Td=0,Ad=4,kd=9,Nd=5,Sd=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],Rd=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],Od=[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],Dd=[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,112,112],Cd=[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],Id=[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],vt=15;function Xr(){let n=this,t,e,i,r,o,a;function s(c,p,m,y,w,E,d,f,g,v,_){let A,D,T,k,b,C,O,S,M,L,j,Z,F,ee,z;L=0,b=m;do i[c[p+L]]++,L++,b--;while(b!==0);if(i[0]==m)return d[0]=-1,f[0]=0,0;for(S=f[0],C=1;C<=vt&&i[C]===0;C++);for(O=C,S<C&&(S=C),b=vt;b!==0&&i[b]===0;b--);for(T=b,S>b&&(S=b),f[0]=S,ee=1<<C;C<b;C++,ee<<=1)if((ee-=i[C])<0)return-3;if((ee-=i[b])<0)return-3;for(i[b]+=ee,a[1]=C=0,L=1,F=2;--b!==0;)a[F]=C+=i[L],F++,L++;b=0,L=0;do(C=c[p+L])!==0&&(_[a[C]++]=b),L++;while(++b<m);for(m=a[T],a[0]=b=0,L=0,k=-1,Z=-S,o[0]=0,j=0,z=0;O<=T;O++)for(A=i[O];A--!==0;){for(;O>Z+S;){if(k++,Z+=S,z=T-Z,z=z>S?S:z,(D=1<<(C=O-Z))>A+1&&(D-=A+1,F=O,C<z))for(;++C<z&&!((D<<=1)<=i[++F]);)D-=i[F];if(z=1<<C,v[0]+z>Ss)return-3;o[k]=j=v[0],v[0]+=z,k!==0?(a[k]=b,r[0]=C,r[1]=S,C=b>>>Z-S,r[2]=j-o[k-1]-C,g.set(r,(o[k-1]+C)*3)):d[0]=j}for(r[1]=O-Z,L>=m?r[0]=128+64:_[L]<y?(r[0]=_[L]<256?0:32+64,r[2]=_[L++]):(r[0]=E[_[L]-y]+16+64,r[2]=w[_[L++]-y]),D=1<<O-Z,C=b>>>Z;C<z;C+=D)g.set(r,(j+C)*3);for(C=1<<O-1;b&C;C>>>=1)b^=C;for(b^=C,M=(1<<Z)-1;(b&M)!=a[k];)k--,Z-=S,M=(1<<Z)-1}return ee!==0&&T!=1?-5:0}function l(c){let p;for(t||(t=[],e=[],i=new Int32Array(vt+1),r=[],o=new Int32Array(vt),a=new Int32Array(vt+1)),e.length<c&&(e=[]),p=0;p<c;p++)e[p]=0;for(p=0;p<vt+1;p++)i[p]=0;for(p=0;p<3;p++)r[p]=0;o.set(i.subarray(0,vt),0),a.set(i.subarray(0,vt+1),0)}n.inflate_trees_bits=function(c,p,m,y,w){let E;return l(19),t[0]=0,E=s(c,0,19,19,null,null,m,p,y,t,e),E==-3?w.msg="oversubscribed dynamic bit lengths tree":(E==-5||p[0]===0)&&(w.msg="incomplete dynamic bit lengths tree",E=-3),E},n.inflate_trees_dynamic=function(c,p,m,y,w,E,d,f,g){let v;return l(288),t[0]=0,v=s(m,0,c,257,Od,Dd,E,y,f,t,e),v!=0||y[0]===0?(v==-3?g.msg="oversubscribed literal/length tree":v!=-4&&(g.msg="incomplete literal/length tree",v=-3),v):(l(288),v=s(m,c,p,0,Cd,Id,d,w,f,t,e),v!=0||w[0]===0&&c>257?(v==-3?g.msg="oversubscribed distance tree":v==-5?(g.msg="incomplete distance tree",v=-3):v!=-4&&(g.msg="empty distance tree with lengths",v=-3),v):0)}}Xr.inflate_trees_fixed=function(n,t,e,i){return n[0]=kd,t[0]=Nd,e[0]=Sd,i[0]=Rd,0};var Ei=0,cs=1,ps=2,us=3,fs=4,ds=5,ms=6,Gr=7,hs=8,_i=9;function Fd(){let n=this,t,e=0,i,r=0,o=0,a=0,s=0,l=0,c=0,p=0,m,y=0,w,E=0;function d(f,g,v,_,A,D,T,k){let b,C,O,S,M,L,j,Z,F,ee,z,We,U,Ne,G,Q;j=k.next_in_index,Z=k.avail_in,M=T.bitb,L=T.bitk,F=T.write,ee=F<T.read?T.read-F-1:T.end-F,z=De[f],We=De[g];do{for(;L<20;)Z--,M|=(k.read_byte(j++)&255)<<L,L+=8;if(b=M&z,C=v,O=_,Q=(O+b)*3,(S=C[Q])===0){M>>=C[Q+1],L-=C[Q+1],T.win[F++]=C[Q+2],ee--;continue}do{if(M>>=C[Q+1],L-=C[Q+1],S&16){for(S&=15,U=C[Q+2]+(M&De[S]),M>>=S,L-=S;L<15;)Z--,M|=(k.read_byte(j++)&255)<<L,L+=8;b=M&We,C=A,O=D,Q=(O+b)*3,S=C[Q];do if(M>>=C[Q+1],L-=C[Q+1],S&16){for(S&=15;L<S;)Z--,M|=(k.read_byte(j++)&255)<<L,L+=8;if(Ne=C[Q+2]+(M&De[S]),M>>=S,L-=S,ee-=U,F>=Ne)G=F-Ne,F-G>0&&2>F-G?(T.win[F++]=T.win[G++],T.win[F++]=T.win[G++],U-=2):(T.win.set(T.win.subarray(G,G+2),F),F+=2,G+=2,U-=2);else{G=F-Ne;do G+=T.end;while(G<0);if(S=T.end-G,U>S){if(U-=S,F-G>0&&S>F-G)do T.win[F++]=T.win[G++];while(--S!==0);else T.win.set(T.win.subarray(G,G+S),F),F+=S,G+=S,S=0;G=0}}if(F-G>0&&U>F-G)do T.win[F++]=T.win[G++];while(--U!==0);else T.win.set(T.win.subarray(G,G+U),F),F+=U,G+=U,U=0;break}else if(!(S&64))b+=C[Q+2],b+=M&De[S],Q=(O+b)*3,S=C[Q];else return k.msg="invalid distance code",U=k.avail_in-Z,U=L>>3<U?L>>3:U,Z+=U,j-=U,L-=U<<3,T.bitb=M,T.bitk=L,k.avail_in=Z,k.total_in+=j-k.next_in_index,k.next_in_index=j,T.write=F,-3;while(!0);break}if(S&64)return S&32?(U=k.avail_in-Z,U=L>>3<U?L>>3:U,Z+=U,j-=U,L-=U<<3,T.bitb=M,T.bitk=L,k.avail_in=Z,k.total_in+=j-k.next_in_index,k.next_in_index=j,T.write=F,1):(k.msg="invalid literal/length code",U=k.avail_in-Z,U=L>>3<U?L>>3:U,Z+=U,j-=U,L-=U<<3,T.bitb=M,T.bitk=L,k.avail_in=Z,k.total_in+=j-k.next_in_index,k.next_in_index=j,T.write=F,-3);if(b+=C[Q+2],b+=M&De[S],Q=(O+b)*3,(S=C[Q])===0){M>>=C[Q+1],L-=C[Q+1],T.win[F++]=C[Q+2],ee--;break}}while(!0)}while(ee>=258&&Z>=10);return U=k.avail_in-Z,U=L>>3<U?L>>3:U,Z+=U,j-=U,L-=U<<3,T.bitb=M,T.bitk=L,k.avail_in=Z,k.total_in+=j-k.next_in_index,k.next_in_index=j,T.write=F,0}n.init=function(f,g,v,_,A,D){t=Ei,c=f,p=g,m=v,y=_,w=A,E=D,i=null},n.proc=function(f,g,v){let _,A,D,T=0,k=0,b=0,C,O,S,M;for(b=g.next_in_index,C=g.avail_in,T=f.bitb,k=f.bitk,O=f.write,S=O<f.read?f.read-O-1:f.end-O;;)switch(t){case Ei:if(S>=258&&C>=10&&(f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,v=d(c,p,m,y,w,E,f,g),b=g.next_in_index,C=g.avail_in,T=f.bitb,k=f.bitk,O=f.write,S=O<f.read?f.read-O-1:f.end-O,v!=0)){t=v==1?Gr:_i;break}o=c,i=m,r=y,t=cs;case cs:for(_=o;k<_;){if(C!==0)v=0;else return f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v);C--,T|=(g.read_byte(b++)&255)<<k,k+=8}if(A=(r+(T&De[_]))*3,T>>>=i[A+1],k-=i[A+1],D=i[A],D===0){a=i[A+2],t=ms;break}if(D&16){s=D&15,e=i[A+2],t=ps;break}if(!(D&64)){o=D,r=A/3+i[A+2];break}if(D&32){t=Gr;break}return t=_i,g.msg="invalid literal/length code",v=-3,f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v);case ps:for(_=s;k<_;){if(C!==0)v=0;else return f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v);C--,T|=(g.read_byte(b++)&255)<<k,k+=8}e+=T&De[_],T>>=_,k-=_,o=p,i=w,r=E,t=us;case us:for(_=o;k<_;){if(C!==0)v=0;else return f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v);C--,T|=(g.read_byte(b++)&255)<<k,k+=8}if(A=(r+(T&De[_]))*3,T>>=i[A+1],k-=i[A+1],D=i[A],D&16){s=D&15,l=i[A+2],t=fs;break}if(!(D&64)){o=D,r=A/3+i[A+2];break}return t=_i,g.msg="invalid distance code",v=-3,f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v);case fs:for(_=s;k<_;){if(C!==0)v=0;else return f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v);C--,T|=(g.read_byte(b++)&255)<<k,k+=8}l+=T&De[_],T>>=_,k-=_,t=ds;case ds:for(M=O-l;M<0;)M+=f.end;for(;e!==0;){if(S===0&&(O==f.end&&f.read!==0&&(O=0,S=O<f.read?f.read-O-1:f.end-O),S===0&&(f.write=O,v=f.inflate_flush(g,v),O=f.write,S=O<f.read?f.read-O-1:f.end-O,O==f.end&&f.read!==0&&(O=0,S=O<f.read?f.read-O-1:f.end-O),S===0)))return f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v);f.win[O++]=f.win[M++],S--,M==f.end&&(M=0),e--}t=Ei;break;case ms:if(S===0&&(O==f.end&&f.read!==0&&(O=0,S=O<f.read?f.read-O-1:f.end-O),S===0&&(f.write=O,v=f.inflate_flush(g,v),O=f.write,S=O<f.read?f.read-O-1:f.end-O,O==f.end&&f.read!==0&&(O=0,S=O<f.read?f.read-O-1:f.end-O),S===0)))return f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v);v=0,f.win[O++]=a,S--,t=Ei;break;case Gr:if(k>7&&(k-=8,C++,b--),f.write=O,v=f.inflate_flush(g,v),O=f.write,S=O<f.read?f.read-O-1:f.end-O,f.read!=f.write)return f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v);t=hs;case hs:return v=1,f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v);case _i:return v=-3,f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v);default:return v=-2,f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v)}},n.free=function(){}}var gs=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],fn=0,Vr=1,ys=2,bs=3,xs=4,ws=5,Ti=6,Ai=7,vs=8,Zt=9;function Ld(n,t){let e=this,i=fn,r=0,o=0,a=0,s,l=[0],c=[0],p=new Fd,m=0,y=new Int32Array(Ss*3),w=0,E=new Xr;e.bitk=0,e.bitb=0,e.win=new Uint8Array(t),e.end=t,e.read=0,e.write=0,e.reset=function(d,f){f&&(f[0]=w),i==Ti&&p.free(d),i=fn,e.bitk=0,e.bitb=0,e.read=e.write=0},e.reset(n,null),e.inflate_flush=function(d,f){let g,v,_;return v=d.next_out_index,_=e.read,g=(_<=e.write?e.write:e.end)-_,g>d.avail_out&&(g=d.avail_out),g!==0&&f==-5&&(f=0),d.avail_out-=g,d.total_out+=g,d.next_out.set(e.win.subarray(_,_+g),v),v+=g,_+=g,_==e.end&&(_=0,e.write==e.end&&(e.write=0),g=e.write-_,g>d.avail_out&&(g=d.avail_out),g!==0&&f==-5&&(f=0),d.avail_out-=g,d.total_out+=g,d.next_out.set(e.win.subarray(_,_+g),v),v+=g,_+=g),d.next_out_index=v,e.read=_,f},e.proc=function(d,f){let g,v,_,A,D,T,k,b;for(A=d.next_in_index,D=d.avail_in,v=e.bitb,_=e.bitk,T=e.write,k=T<e.read?e.read-T-1:e.end-T;;){let C,O,S,M,L,j,Z,F;switch(i){case fn:for(;_<3;){if(D!==0)f=0;else return e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);D--,v|=(d.read_byte(A++)&255)<<_,_+=8}switch(g=v&7,m=g&1,g>>>1){case 0:v>>>=3,_-=3,g=_&7,v>>>=g,_-=g,i=Vr;break;case 1:C=[],O=[],S=[[]],M=[[]],Xr.inflate_trees_fixed(C,O,S,M),p.init(C[0],O[0],S[0],0,M[0],0),v>>>=3,_-=3,i=Ti;break;case 2:v>>>=3,_-=3,i=bs;break;case 3:return v>>>=3,_-=3,i=Zt,d.msg="invalid block type",f=-3,e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f)}break;case Vr:for(;_<32;){if(D!==0)f=0;else return e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);D--,v|=(d.read_byte(A++)&255)<<_,_+=8}if((~v>>>16&65535)!=(v&65535))return i=Zt,d.msg="invalid stored block lengths",f=-3,e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);r=v&65535,v=_=0,i=r!==0?ys:m!==0?Ai:fn;break;case ys:if(D===0||k===0&&(T==e.end&&e.read!==0&&(T=0,k=T<e.read?e.read-T-1:e.end-T),k===0&&(e.write=T,f=e.inflate_flush(d,f),T=e.write,k=T<e.read?e.read-T-1:e.end-T,T==e.end&&e.read!==0&&(T=0,k=T<e.read?e.read-T-1:e.end-T),k===0)))return e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);if(f=0,g=r,g>D&&(g=D),g>k&&(g=k),e.win.set(d.read_buf(A,g),T),A+=g,D-=g,T+=g,k-=g,(r-=g)!==0)break;i=m!==0?Ai:fn;break;case bs:for(;_<14;){if(D!==0)f=0;else return e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);D--,v|=(d.read_byte(A++)&255)<<_,_+=8}if(o=g=v&16383,(g&31)>29||(g>>5&31)>29)return i=Zt,d.msg="too many length or distance symbols",f=-3,e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);if(g=258+(g&31)+(g>>5&31),!s||s.length<g)s=[];else for(b=0;b<g;b++)s[b]=0;v>>>=14,_-=14,a=0,i=xs;case xs:for(;a<4+(o>>>10);){for(;_<3;){if(D!==0)f=0;else return e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);D--,v|=(d.read_byte(A++)&255)<<_,_+=8}s[gs[a++]]=v&7,v>>>=3,_-=3}for(;a<19;)s[gs[a++]]=0;if(l[0]=7,g=E.inflate_trees_bits(s,l,c,y,d),g!=0)return f=g,f==-3&&(s=null,i=Zt),e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);a=0,i=ws;case ws:for(;g=o,!(a>=258+(g&31)+(g>>5&31));){let ee,z;for(g=l[0];_<g;){if(D!==0)f=0;else return e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);D--,v|=(d.read_byte(A++)&255)<<_,_+=8}if(g=y[(c[0]+(v&De[g]))*3+1],z=y[(c[0]+(v&De[g]))*3+2],z<16)v>>>=g,_-=g,s[a++]=z;else{for(b=z==18?7:z-14,ee=z==18?11:3;_<g+b;){if(D!==0)f=0;else return e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);D--,v|=(d.read_byte(A++)&255)<<_,_+=8}if(v>>>=g,_-=g,ee+=v&De[b],v>>>=b,_-=b,b=a,g=o,b+ee>258+(g&31)+(g>>5&31)||z==16&&b<1)return s=null,i=Zt,d.msg="invalid bit length repeat",f=-3,e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);z=z==16?s[b-1]:0;do s[b++]=z;while(--ee!==0);a=b}}if(c[0]=-1,L=[],j=[],Z=[],F=[],L[0]=9,j[0]=6,g=o,g=E.inflate_trees_dynamic(257+(g&31),1+(g>>5&31),s,L,j,Z,F,y,d),g!=0)return g==-3&&(s=null,i=Zt),f=g,e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);p.init(L[0],j[0],y,Z[0],y,F[0]),i=Ti;case Ti:if(e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,(f=p.proc(e,d,f))!=1)return e.inflate_flush(d,f);if(f=0,p.free(d),A=d.next_in_index,D=d.avail_in,v=e.bitb,_=e.bitk,T=e.write,k=T<e.read?e.read-T-1:e.end-T,m===0){i=fn;break}i=Ai;case Ai:if(e.write=T,f=e.inflate_flush(d,f),T=e.write,k=T<e.read?e.read-T-1:e.end-T,e.read!=e.write)return e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);i=vs;case vs:return f=1,e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);case Zt:return f=-3,e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);default:return f=-2,e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f)}}},e.free=function(d){e.reset(d,null),e.win=null,y=null},e.set_dictionary=function(d,f,g){e.win.set(d.subarray(f,f+g),0),e.read=e.write=g},e.sync_point=function(){return i==Vr?1:0}}var Pd=32,Md=8,$d=0,Es=1,_s=2,Ts=3,As=4,ks=5,Kr=6,Bn=7,Ns=12,Et=13,Bd=[0,0,255,255];function Ud(){let n=this;n.mode=0,n.method=0,n.was=[0],n.need=0,n.marker=0,n.wbits=0;function t(e){return!e||!e.istate?-2:(e.total_in=e.total_out=0,e.msg=null,e.istate.mode=Bn,e.istate.blocks.reset(e,null),0)}n.inflateEnd=function(e){return n.blocks&&n.blocks.free(e),n.blocks=null,0},n.inflateInit=function(e,i){return e.msg=null,n.blocks=null,i<8||i>15?(n.inflateEnd(e),-2):(n.wbits=i,e.istate.blocks=new Ld(e,1<<i),t(e),0)},n.inflate=function(e,i){let r,o;if(!e||!e.istate||!e.next_in)return-2;let a=e.istate;for(i=i==Ad?-5:0,r=-5;;)switch(a.mode){case $d:if(e.avail_in===0)return r;if(r=i,e.avail_in--,e.total_in++,((a.method=e.read_byte(e.next_in_index++))&15)!=Md){a.mode=Et,e.msg="unknown compression method",a.marker=5;break}if((a.method>>4)+8>a.wbits){a.mode=Et,e.msg="invalid win size",a.marker=5;break}a.mode=Es;case Es:if(e.avail_in===0)return r;if(r=i,e.avail_in--,e.total_in++,o=e.read_byte(e.next_in_index++)&255,((a.method<<8)+o)%31!==0){a.mode=Et,e.msg="incorrect header check",a.marker=5;break}if(!(o&Pd)){a.mode=Bn;break}a.mode=_s;case _s:if(e.avail_in===0)return r;r=i,e.avail_in--,e.total_in++,a.need=(e.read_byte(e.next_in_index++)&255)<<24&4278190080,a.mode=Ts;case Ts:if(e.avail_in===0)return r;r=i,e.avail_in--,e.total_in++,a.need+=(e.read_byte(e.next_in_index++)&255)<<16&16711680,a.mode=As;case As:if(e.avail_in===0)return r;r=i,e.avail_in--,e.total_in++,a.need+=(e.read_byte(e.next_in_index++)&255)<<8&65280,a.mode=ks;case ks:return e.avail_in===0?r:(r=i,e.avail_in--,e.total_in++,a.need+=e.read_byte(e.next_in_index++)&255,a.mode=Kr,2);case Kr:return a.mode=Et,e.msg="need dictionary",a.marker=0,-2;case Bn:if(r=a.blocks.proc(e,r),r==-3){a.mode=Et,a.marker=0;break}if(r==0&&(r=i),r!=1)return r;r=i,a.blocks.reset(e,a.was),a.mode=Ns;case Ns:return e.avail_in=0,1;case Et:return-3;default:return-2}},n.inflateSetDictionary=function(e,i,r){let o=0,a=r;if(!e||!e.istate||e.istate.mode!=Kr)return-2;let s=e.istate;return a>=1<<s.wbits&&(a=(1<<s.wbits)-1,o=r-a),s.blocks.set_dictionary(i,o,a),s.mode=Bn,0},n.inflateSync=function(e){let i,r,o,a,s;if(!e||!e.istate)return-2;let l=e.istate;if(l.mode!=Et&&(l.mode=Et,l.marker=0),(i=e.avail_in)===0)return-5;for(r=e.next_in_index,o=l.marker;i!==0&&o<4;)e.read_byte(r)==Bd[o]?o++:e.read_byte(r)!==0?o=0:o=4-o,r++,i--;return e.total_in+=r-e.next_in_index,e.next_in_index=r,e.avail_in=i,l.marker=o,o!=4?-3:(a=e.total_in,s=e.total_out,t(e),e.total_in=a,e.total_out=s,l.mode=Bn,0)},n.inflateSyncPoint=function(e){return!e||!e.istate||!e.istate.blocks?-2:e.istate.blocks.sync_point()}}function Rs(){}Rs.prototype={inflateInit(n){let t=this;return t.istate=new Ud,n||(n=15),t.istate.inflateInit(t,n)},inflate(n){let t=this;return t.istate?t.istate.inflate(t,n):-2},inflateEnd(){let n=this;if(!n.istate)return-2;let t=n.istate.inflateEnd(n);return n.istate=null,t},inflateSync(){let n=this;return n.istate?n.istate.inflateSync(n):-2},inflateSetDictionary(n,t){let e=this;return e.istate?e.istate.inflateSetDictionary(e,n,t):-2},read_byte(n){return this.next_in[n]},read_buf(n,t){return this.next_in.subarray(n,n+t)}};function Os(n){let t=this,e=new Rs,i=n&&n.chunkSize?Math.floor(n.chunkSize*2):128*1024,r=Td,o=new Uint8Array(i),a=!1;e.inflateInit(),e.next_out=o,t.append=function(s,l){let c=[],p,m,y=0,w=0,E=0;if(s.length!==0){e.next_in_index=0,e.next_in=s,e.avail_in=s.length;do{if(e.next_out_index=0,e.avail_out=i,e.avail_in===0&&!a&&(e.next_in_index=0,a=!0),p=e.inflate(r),a&&p===-5){if(e.avail_in!==0)throw new Error("inflating: bad input")}else if(p!==0&&p!==1)throw new Error("inflating: "+e.msg);if((a||p===1)&&e.avail_in===s.length)throw new Error("inflating: bad input");e.next_out_index&&(e.next_out_index===i?c.push(new Uint8Array(o)):c.push(o.subarray(0,e.next_out_index))),E+=e.next_out_index,l&&e.next_in_index>0&&e.next_in_index!=y&&(l(e.next_in_index),y=e.next_in_index)}while(e.avail_in>0||e.avail_out===0);return c.length>1?(m=new Uint8Array(E),c.forEach(function(d){m.set(d,w),w+=d.length})):m=c[0]?new Uint8Array(c[0]):new Uint8Array,m}},t.flush=function(){e.inflateEnd()}}var Ds="/",db=new Date(2107,11,31),mb=new Date(1980,0,1),_e=void 0,dn="undefined",ki="function";var Un=class{constructor(t){return class extends TransformStream{constructor(e,i){let r=new t(i);super({transform(o,a){a.enqueue(r.append(o))},flush(o){let a=r.flush();a&&o.enqueue(a)}})}}}};var jd=64,Cs=2;try{typeof navigator!=dn&&navigator.hardwareConcurrency&&(Cs=navigator.hardwareConcurrency)}catch(n){}var Hd={chunkSize:512*1024,maxWorkers:Cs,terminateWorkerTimeout:5e3,useWebWorkers:!0,useCompressionStream:!0,workerScripts:_e,CompressionStreamNative:typeof CompressionStream!=dn&&CompressionStream,DecompressionStreamNative:typeof DecompressionStream!=dn&&DecompressionStream},Tt=Object.assign({},Hd);function Jr(){return Tt}function Is(n){return Math.max(n.chunkSize,jd)}function Ni(n){let{baseURL:t,chunkSize:e,maxWorkers:i,terminateWorkerTimeout:r,useCompressionStream:o,useWebWorkers:a,Deflate:s,Inflate:l,CompressionStream:c,DecompressionStream:p,workerScripts:m}=n;if(_t("baseURL",t),_t("chunkSize",e),_t("maxWorkers",i),_t("terminateWorkerTimeout",r),_t("useCompressionStream",o),_t("useWebWorkers",a),s&&(Tt.CompressionStream=new Un(s)),l&&(Tt.DecompressionStream=new Un(l)),_t("CompressionStream",c),_t("DecompressionStream",p),m!==_e){let{deflate:y,inflate:w}=m;if((y||w)&&(Tt.workerScripts||(Tt.workerScripts={})),y){if(!Array.isArray(y))throw new Error("workerScripts.deflate must be an array");Tt.workerScripts.deflate=y}if(w){if(!Array.isArray(w))throw new Error("workerScripts.inflate must be an array");Tt.workerScripts.inflate=w}}}function _t(n,t){t!==_e&&(Tt[n]=t)}var Fs=[];for(let n=0;n<256;n++){let t=n;for(let e=0;e<8;e++)t&1?t=t>>>1^3988292384:t=t>>>1;Fs[n]=t}var ct=class{constructor(t){this.crc=t||-1}append(t){let e=this.crc|0;for(let i=0,r=t.length|0;i<r;i++)e=e>>>8^Fs[(e^t[i])&255];this.crc=e}get(){return~this.crc}};var jn=class extends TransformStream{constructor(){let t,e=new ct;super({transform(i,r){e.append(i),r.enqueue(i)},flush(){let i=new Uint8Array(4);new DataView(i.buffer).setUint32(0,e.get()),t.value=i}}),t=this}};function Ls(n){if(typeof TextEncoder=="undefined"){n=unescape(encodeURIComponent(n));let t=new Uint8Array(n.length);for(let e=0;e<t.length;e++)t[e]=n.charCodeAt(e);return t}else return new TextEncoder().encode(n)}var Te={concat(n,t){if(n.length===0||t.length===0)return n.concat(t);let e=n[n.length-1],i=Te.getPartial(e);return i===32?n.concat(t):Te._shiftRight(t,i,e|0,n.slice(0,n.length-1))},bitLength(n){let t=n.length;if(t===0)return 0;let e=n[t-1];return(t-1)*32+Te.getPartial(e)},clamp(n,t){if(n.length*32<t)return n;n=n.slice(0,Math.ceil(t/32));let e=n.length;return t=t&31,e>0&&t&&(n[e-1]=Te.partial(t,n[e-1]&2147483648>>t-1,1)),n},partial(n,t,e){return n===32?t:(e?t|0:t<<32-n)+n*1099511627776},getPartial(n){return Math.round(n/1099511627776)||32},_shiftRight(n,t,e,i){for(i===void 0&&(i=[]);t>=32;t-=32)i.push(e),e=0;if(t===0)return i.concat(n);for(let a=0;a<n.length;a++)i.push(e|n[a]>>>t),e=n[a]<<32-t;let r=n.length?n[n.length-1]:0,o=Te.getPartial(r);return i.push(Te.partial(t+o&31,t+o>32?e:i.pop(),1)),i}},Hn={bytes:{fromBits(n){let e=Te.bitLength(n)/8,i=new Uint8Array(e),r;for(let o=0;o<e;o++)o&3||(r=n[o/4]),i[o]=r>>>24,r<<=8;return i},toBits(n){let t=[],e,i=0;for(e=0;e<n.length;e++)i=i<<8|n[e],(e&3)===3&&(t.push(i),i=0);return e&3&&t.push(Te.partial(8*(e&3),i)),t}}},Ps={};Ps.sha1=class{constructor(n){let t=this;t.blockSize=512,t._init=[1732584193,4023233417,2562383102,271733878,3285377520],t._key=[1518500249,1859775393,2400959708,3395469782],n?(t._h=n._h.slice(0),t._buffer=n._buffer.slice(0),t._length=n._length):t.reset()}reset(){let n=this;return n._h=n._init.slice(0),n._buffer=[],n._length=0,n}update(n){let t=this;typeof n=="string"&&(n=Hn.utf8String.toBits(n));let e=t._buffer=Te.concat(t._buffer,n),i=t._length,r=t._length=i+Te.bitLength(n);if(r>9007199254740991)throw new Error("Cannot hash more than 2^53 - 1 bits");let o=new Uint32Array(e),a=0;for(let s=t.blockSize+i-(t.blockSize+i&t.blockSize-1);s<=r;s+=t.blockSize)t._block(o.subarray(16*a,16*(a+1))),a+=1;return e.splice(0,16*a),t}finalize(){let n=this,t=n._buffer,e=n._h;t=Te.concat(t,[Te.partial(1,1)]);for(let i=t.length+2;i&15;i++)t.push(0);for(t.push(Math.floor(n._length/4294967296)),t.push(n._length|0);t.length;)n._block(t.splice(0,16));return n.reset(),e}_f(n,t,e,i){if(n<=19)return t&e|~t&i;if(n<=39)return t^e^i;if(n<=59)return t&e|t&i|e&i;if(n<=79)return t^e^i}_S(n,t){return t<<n|t>>>32-n}_block(n){let t=this,e=t._h,i=Array(80);for(let c=0;c<16;c++)i[c]=n[c];let r=e[0],o=e[1],a=e[2],s=e[3],l=e[4];for(let c=0;c<=79;c++){c>=16&&(i[c]=t._S(1,i[c-3]^i[c-8]^i[c-14]^i[c-16]));let p=t._S(5,r)+t._f(c,o,a,s)+l+i[c]+t._key[Math.floor(c/20)]|0;l=s,s=a,a=t._S(30,o),o=r,r=p}e[0]=e[0]+r|0,e[1]=e[1]+o|0,e[2]=e[2]+a|0,e[3]=e[3]+s|0,e[4]=e[4]+l|0}};var Qr={};Qr.aes=class{constructor(n){let t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]],t._tables[0][0][0]||t._precompute();let e=t._tables[0][4],i=t._tables[1],r=n.length,o,a,s,l=1;if(r!==4&&r!==6&&r!==8)throw new Error("invalid aes key size");for(t._key=[a=n.slice(0),s=[]],o=r;o<4*r+28;o++){let c=a[o-1];(o%r===0||r===8&&o%r===4)&&(c=e[c>>>24]<<24^e[c>>16&255]<<16^e[c>>8&255]<<8^e[c&255],o%r===0&&(c=c<<8^c>>>24^l<<24,l=l<<1^(l>>7)*283)),a[o]=a[o-r]^c}for(let c=0;o;c++,o--){let p=a[c&3?o:o-4];o<=4||c<4?s[c]=p:s[c]=i[0][e[p>>>24]]^i[1][e[p>>16&255]]^i[2][e[p>>8&255]]^i[3][e[p&255]]}}encrypt(n){return this._crypt(n,0)}decrypt(n){return this._crypt(n,1)}_precompute(){let n=this._tables[0],t=this._tables[1],e=n[4],i=t[4],r=[],o=[],a,s,l,c;for(let p=0;p<256;p++)o[(r[p]=p<<1^(p>>7)*283)^p]=p;for(let p=a=0;!e[p];p^=s||1,a=o[a]||1){let m=a^a<<1^a<<2^a<<3^a<<4;m=m>>8^m&255^99,e[p]=m,i[m]=p,c=r[l=r[s=r[p]]];let y=c*16843009^l*65537^s*257^p*16843008,w=r[m]*257^m*16843008;for(let E=0;E<4;E++)n[E][p]=w=w<<24^w>>>8,t[E][m]=y=y<<24^y>>>8}for(let p=0;p<5;p++)n[p]=n[p].slice(0),t[p]=t[p].slice(0)}_crypt(n,t){if(n.length!==4)throw new Error("invalid aes block size");let e=this._key[t],i=e.length/4-2,r=[0,0,0,0],o=this._tables[t],a=o[0],s=o[1],l=o[2],c=o[3],p=o[4],m=n[0]^e[0],y=n[t?3:1]^e[1],w=n[2]^e[2],E=n[t?1:3]^e[3],d=4,f,g,v;for(let _=0;_<i;_++)f=a[m>>>24]^s[y>>16&255]^l[w>>8&255]^c[E&255]^e[d],g=a[y>>>24]^s[w>>16&255]^l[E>>8&255]^c[m&255]^e[d+1],v=a[w>>>24]^s[E>>16&255]^l[m>>8&255]^c[y&255]^e[d+2],E=a[E>>>24]^s[m>>16&255]^l[y>>8&255]^c[w&255]^e[d+3],d+=4,m=f,y=g,w=v;for(let _=0;_<4;_++)r[t?3&-_:_]=p[m>>>24]<<24^p[y>>16&255]<<16^p[w>>8&255]<<8^p[E&255]^e[d++],f=m,m=y,y=w,w=E,E=f;return r}};var Ms={getRandomValues(n){let t=new Uint32Array(n.buffer),e=i=>{let r=987654321,o=4294967295;return function(){return r=36969*(r&65535)+(r>>16)&o,i=18e3*(i&65535)+(i>>16)&o,(((r<<16)+i&o)/4294967296+.5)*(Math.random()>.5?1:-1)}};for(let i=0,r;i<n.length;i+=4){let o=e((r||Math.random())*4294967296);r=o()*987654071,t[i/4]=o()*4294967296|0}return n}},eo={};eo.ctrGladman=class{constructor(n,t){this._prf=n,this._initIv=t,this._iv=t}reset(){this._iv=this._initIv}update(n){return this.calculate(this._prf,n,this._iv)}incWord(n){if((n>>24&255)===255){let t=n>>16&255,e=n>>8&255,i=n&255;t===255?(t=0,e===255?(e=0,i===255?i=0:++i):++e):++t,n=0,n+=t<<16,n+=e<<8,n+=i}else n+=1<<24;return n}incCounter(n){(n[0]=this.incWord(n[0]))===0&&(n[1]=this.incWord(n[1]))}calculate(n,t,e){let i;if(!(i=t.length))return[];let r=Te.bitLength(t);for(let o=0;o<i;o+=4){this.incCounter(e);let a=n.encrypt(e);t[o]^=a[0],t[o+1]^=a[1],t[o+2]^=a[2],t[o+3]^=a[3]}return Te.clamp(t,r)}};var At={importKey(n){return new At.hmacSha1(Hn.bytes.toBits(n))},pbkdf2(n,t,e,i){if(e=e||1e4,i<0||e<0)throw new Error("invalid params to pbkdf2");let r=(i>>5)+1<<2,o,a,s,l,c,p=new ArrayBuffer(r),m=new DataView(p),y=0,w=Te;for(t=Hn.bytes.toBits(t),c=1;y<(r||1);c++){for(o=a=n.encrypt(w.concat(t,[c])),s=1;s<e;s++)for(a=n.encrypt(a),l=0;l<a.length;l++)o[l]^=a[l];for(s=0;y<(r||1)&&s<o.length;s++)m.setInt32(y,o[s]),y+=4}return p.slice(0,i/8)}};At.hmacSha1=class{constructor(n){let t=this,e=t._hash=Ps.sha1,i=[[],[]];t._baseHash=[new e,new e];let r=t._baseHash[0].blockSize/32;n.length>r&&(n=new e().update(n).finalize());for(let o=0;o<r;o++)i[0][o]=n[o]^909522486,i[1][o]=n[o]^1549556828;t._baseHash[0].update(i[0]),t._baseHash[1].update(i[1]),t._resultHash=new e(t._baseHash[0])}reset(){let n=this;n._resultHash=new n._hash(n._baseHash[0]),n._updated=!1}update(n){let t=this;t._updated=!0,t._resultHash.update(n)}digest(){let n=this,t=n._resultHash.finalize(),e=new n._hash(n._baseHash[1]).update(t).finalize();return n.reset(),e}encrypt(n){if(this._updated)throw new Error("encrypt on already updated hmac called!");return this.update(n),this.digest(n)}};var qd=typeof crypto!="undefined"&&typeof crypto.getRandomValues=="function",kt="Invalid password",Yt="Invalid signature",pt="zipjs-abort-check-password";function Si(n){return qd?crypto.getRandomValues(n):Ms.getRandomValues(n)}var mn=16,Wd="raw",Us={name:"PBKDF2"},Zd={name:"HMAC"},Yd="SHA-1",zd=Object.assign({hash:Zd},Us),to=Object.assign({iterations:1e3,hash:{name:Yd}},Us),Gd=["deriveBits"],Wn=[8,12,16],qn=[16,24,32],Nt=10,Vd=[0,0,0,0],js="undefined",Hs="function",Di=typeof crypto!=js,zn=Di&&crypto.subtle,qs=Di&&typeof zn!=js,Je=Hn.bytes,Kd=Qr.aes,Xd=eo.ctrGladman,Jd=At.hmacSha1,$s=Di&&qs&&typeof zn.importKey==Hs,Bs=Di&&qs&&typeof zn.deriveBits==Hs,Ri=class extends TransformStream{constructor({password:t,signed:e,encryptionStrength:i,checkPasswordOnly:r}){super({start(){Object.assign(this,{ready:new Promise(o=>this.resolveReady=o),password:t,signed:e,strength:i-1,pending:new Uint8Array})},async transform(o,a){let s=this,{password:l,strength:c,resolveReady:p,ready:m}=s;l?(await Qd(s,c,l,Fe(o,0,Wn[c]+2)),o=Fe(o,Wn[c]+2),r?a.error(new Error(pt)):p()):await m;let y=new Uint8Array(o.length-Nt-(o.length-Nt)%mn);a.enqueue(Ws(s,o,y,0,Nt,!0))},async flush(o){let{signed:a,ctr:s,hmac:l,pending:c,ready:p}=this;await p;let m=Fe(c,0,c.length-Nt),y=Fe(c,c.length-Nt),w=new Uint8Array;if(m.length){let E=Yn(Je,m);l.update(E);let d=s.update(E);w=Zn(Je,d)}if(a){let E=Fe(Zn(Je,l.digest()),0,Nt);for(let d=0;d<Nt;d++)if(E[d]!=y[d])throw new Error(Yt)}o.enqueue(w)}})}},Oi=class extends TransformStream{constructor({password:t,encryptionStrength:e}){let i;super({start(){Object.assign(this,{ready:new Promise(r=>this.resolveReady=r),password:t,strength:e-1,pending:new Uint8Array})},async transform(r,o){let a=this,{password:s,strength:l,resolveReady:c,ready:p}=a,m=new Uint8Array;s?(m=await em(a,l,s),c()):await p;let y=new Uint8Array(m.length+r.length-r.length%mn);y.set(m,0),o.enqueue(Ws(a,r,y,m.length,0))},async flush(r){let{ctr:o,hmac:a,pending:s,ready:l}=this;await l;let c=new Uint8Array;if(s.length){let p=o.update(Yn(Je,s));a.update(p),c=Zn(Je,p)}i.signature=Zn(Je,a.digest()).slice(0,Nt),r.enqueue(no(c,i.signature))}}),i=this}};function Ws(n,t,e,i,r,o){let{ctr:a,hmac:s,pending:l}=n,c=t.length-r;l.length&&(t=no(l,t),e=im(e,c-c%mn));let p;for(p=0;p<=c-mn;p+=mn){let m=Yn(Je,Fe(t,p,p+mn));o&&s.update(m);let y=a.update(m);o||s.update(y),e.set(Zn(Je,y),p+i)}return n.pending=Fe(t,p),e}async function Qd(n,t,e,i){let r=await Zs(n,t,e,Fe(i,0,Wn[t])),o=Fe(i,Wn[t]);if(r[0]!=o[0]||r[1]!=o[1])throw new Error(kt)}async function em(n,t,e){let i=Si(new Uint8Array(Wn[t])),r=await Zs(n,t,e,i);return no(i,r)}async function Zs(n,t,e,i){n.password=null;let r=Ls(e),o=await tm(Wd,r,zd,!1,Gd),a=await nm(Object.assign({salt:i},to),o,8*(qn[t]*2+2)),s=new Uint8Array(a),l=Yn(Je,Fe(s,0,qn[t])),c=Yn(Je,Fe(s,qn[t],qn[t]*2)),p=Fe(s,qn[t]*2);return Object.assign(n,{keys:{key:l,authentication:c,passwordVerification:p},ctr:new Xd(new Kd(l),Array.from(Vd)),hmac:new Jd(c)}),p}async function tm(n,t,e,i,r){if($s)try{return await zn.importKey(n,t,e,i,r)}catch(o){return $s=!1,At.importKey(t)}else return At.importKey(t)}async function nm(n,t,e){if(Bs)try{return await zn.deriveBits(n,t,e)}catch(i){return Bs=!1,At.pbkdf2(t,n.salt,to.iterations,e)}else return At.pbkdf2(t,n.salt,to.iterations,e)}function no(n,t){let e=n;return n.length+t.length&&(e=new Uint8Array(n.length+t.length),e.set(n,0),e.set(t,n.length)),e}function im(n,t){if(t&&t>n.length){let e=n;n=new Uint8Array(t),n.set(e,0)}return n}function Fe(n,t,e){return n.subarray(t,e)}function Zn(n,t){return n.fromBits(t)}function Yn(n,t){return n.toBits(t)}var hn=12,Ci=class extends TransformStream{constructor({password:t,passwordVerification:e,checkPasswordOnly:i}){super({start(){Object.assign(this,{password:t,passwordVerification:e}),Vs(this,t)},transform(r,o){let a=this;if(a.password){let s=Ys(a,r.subarray(0,hn));if(a.password=null,s[hn-1]!=a.passwordVerification)throw new Error(kt);r=r.subarray(hn)}i?o.error(new Error(pt)):o.enqueue(Ys(a,r))}})}},Ii=class extends TransformStream{constructor({password:t,passwordVerification:e}){super({start(){Object.assign(this,{password:t,passwordVerification:e}),Vs(this,t)},transform(i,r){let o=this,a,s;if(o.password){o.password=null;let l=Si(new Uint8Array(hn));l[hn-1]=o.passwordVerification,a=new Uint8Array(i.length+l.length),a.set(zs(o,l),0),s=hn}else a=new Uint8Array(i.length),s=0;a.set(zs(o,i),s),r.enqueue(a)}})}};function Ys(n,t){let e=new Uint8Array(t.length);for(let i=0;i<t.length;i++)e[i]=Ks(n)^t[i],io(n,e[i]);return e}function zs(n,t){let e=new Uint8Array(t.length);for(let i=0;i<t.length;i++)e[i]=Ks(n)^t[i],io(n,t[i]);return e}function Vs(n,t){let e=[305419896,591751049,878082192];Object.assign(n,{keys:e,crcKey0:new ct(e[0]),crcKey2:new ct(e[2])});for(let i=0;i<t.length;i++)io(n,t.charCodeAt(i))}function io(n,t){let[e,i,r]=n.keys;n.crcKey0.append([t]),e=~n.crcKey0.get(),i=Gs(Math.imul(Gs(i+Xs(e)),134775813)+1),n.crcKey2.append([i>>>24]),r=~n.crcKey2.get(),n.keys=[e,i,r]}function Ks(n){let t=n.keys[2]|2;return Xs(Math.imul(t,t^1)>>>8)}function Xs(n){return n&255}function Gs(n){return n&4294967295}var Js="deflate-raw",Fi=class extends TransformStream{constructor(t,{chunkSize:e,CompressionStream:i,CompressionStreamNative:r}){super({});let{compressed:o,encrypted:a,useCompressionStream:s,zipCrypto:l,signed:c,level:p}=t,m=this,y,w,E=Qs(super.readable);(!a||l)&&c&&(y=new jn,E=Qe(E,y)),o&&(E=tl(E,s,{level:p,chunkSize:e},r,i)),a&&(l?E=Qe(E,new Ii(t)):(w=new Oi(t),E=Qe(E,w))),el(m,E,async()=>{let d;a&&!l&&(d=w.signature),(!a||l)&&c&&(d=new DataView(y.value.buffer).getUint32(0)),m.signature=d})}},Li=class extends TransformStream{constructor(t,{chunkSize:e,DecompressionStream:i,DecompressionStreamNative:r}){super({});let{zipCrypto:o,encrypted:a,signed:s,signature:l,compressed:c,useCompressionStream:p}=t,m,y,w=Qs(super.readable);a&&(o?w=Qe(w,new Ci(t)):(y=new Ri(t),w=Qe(w,y))),c&&(w=tl(w,p,{chunkSize:e},r,i)),(!a||o)&&s&&(m=new jn,w=Qe(w,m)),el(this,w,async()=>{if((!a||o)&&s){let E=new DataView(m.value.buffer);if(l!=E.getUint32(0,!1))throw new Error(Yt)}})}};function Qs(n){return Qe(n,new TransformStream({transform(t,e){t&&t.length&&e.enqueue(t)}}))}function el(n,t,e){t=Qe(t,new TransformStream({flush:e})),Object.defineProperty(n,"readable",{get(){return t}})}function tl(n,t,e,i,r){try{let o=t&&i?i:r;n=Qe(n,new o(Js,e))}catch(o){if(t)n=Qe(n,new r(Js,e));else throw o}return n}function Qe(n,t){return n.pipeThrough(t)}var nl="message",il="start",rl="pull",ro="data",ol="ack",al="close",sl="deflate",Mi="inflate";var Pi=class extends TransformStream{constructor(t,e){super({});let i=this,{codecType:r}=t,o;r.startsWith(sl)?o=Fi:r.startsWith(Mi)&&(o=Li);let a=0,s=new o(t,e),l=super.readable,c=new TransformStream({transform(p,m){p&&p.length&&(a+=p.length,m.enqueue(p))},flush(){let{signature:p}=s;Object.assign(i,{signature:p,size:a})}});Object.defineProperty(i,"readable",{get(){return l.pipeThrough(s).pipeThrough(c)}})}};var rm=typeof Worker!=dn;var gn=class{constructor(t,{readable:e,writable:i},{options:r,config:o,streamOptions:a,useWebWorkers:s,transferStreams:l,scripts:c},p){let{signal:m}=a;return Object.assign(t,{busy:!0,readable:e.pipeThrough(new ao(e,a,o),{signal:m}),writable:i,options:Object.assign({},r),scripts:c,transferStreams:l,terminate(){let{worker:y,busy:w}=t;y&&!w&&(y.terminate(),t.interface=null)},onTaskFinished(){t.busy=!1,p(t)}}),(s&&rm?am:om)(t,o)}},ao=class extends TransformStream{constructor(t,{onstart:e,onprogress:i,size:r,onend:o},{chunkSize:a}){let s=0;super({start(){e&&oo(e,r)},async transform(l,c){s+=l.length,i&&await oo(i,s,r),c.enqueue(l)},flush(){t.size=s,o&&oo(o,s)}},{highWaterMark:1,size:()=>a})}};async function oo(n,...t){try{await n(...t)}catch(e){}}function om(n,t){return{run:()=>sm(n,t)}}function am(n,{baseURL:t,chunkSize:e}){return n.interface||Object.assign(n,{worker:pm(n.scripts[0],t,n),interface:{run:()=>lm(n,{chunkSize:e})}}),n.interface}async function sm({options:n,readable:t,writable:e,onTaskFinished:i},r){let o=new Pi(n,r);try{await t.pipeThrough(o).pipeTo(e,{preventClose:!0,preventAbort:!0});let{signature:a,size:s}=o;return{signature:a,size:s}}finally{i()}}async function lm(n,t){let e,i,r=new Promise((y,w)=>{e=y,i=w});Object.assign(n,{reader:null,writer:null,resolveResult:e,rejectResult:i,result:r});let{readable:o,options:a,scripts:s}=n,{writable:l,closed:c}=cm(n.writable);so({type:il,scripts:s.slice(1),options:a,config:t,readable:o,writable:l},n)||Object.assign(n,{reader:o.getReader(),writer:l.getWriter()});let m=await r;try{await l.getWriter().close()}catch(y){}return await c,m}function cm(n){let t=n.getWriter(),e,i=new Promise(o=>e=o);return{writable:new WritableStream({async write(o){await t.ready,await t.write(o)},close(){t.releaseLock(),e()},abort(o){return t.abort(o)}}),closed:i}}var ll=!0,cl=!0;function pm(n,t,e){let i={type:"module"},r,o;typeof n==ki&&(n=n());try{r=new URL(n,t)}catch(a){r=n}if(ll)try{o=new Worker(r)}catch(a){ll=!1,o=new Worker(r,i)}else o=new Worker(r,i);return o.addEventListener(nl,a=>um(a,e)),o}function so(n,{worker:t,writer:e,onTaskFinished:i,transferStreams:r}){try{let{value:o,readable:a,writable:s}=n,l=[];if(o&&(n.value=o.buffer,l.push(n.value)),r&&cl?(a&&l.push(a),s&&l.push(s)):n.readable=n.writable=null,l.length)try{return t.postMessage(n,l),!0}catch(c){cl=!1,n.readable=n.writable=null,t.postMessage(n)}else t.postMessage(n)}catch(o){throw e&&e.releaseLock(),i(),o}}async function um({data:n},t){let{type:e,value:i,messageId:r,result:o,error:a}=n,{reader:s,writer:l,resolveResult:c,rejectResult:p,onTaskFinished:m}=t;try{if(a){let{message:w,stack:E,code:d,name:f}=a,g=new Error(w);Object.assign(g,{stack:E,code:d,name:f}),y(g)}else{if(e==rl){let{value:w,done:E}=await s.read();so({type:ro,value:w,done:E,messageId:r},t)}e==ro&&(await l.ready,await l.write(new Uint8Array(i)),so({type:ol,messageId:r},t)),e==al&&y(null,o)}}catch(w){y(w)}function y(w,E){w?p(w):c(E),l&&l.releaseLock(),m()}}var zt=[],lo=[];var pl=0;async function fl(n,t){let{options:e,config:i}=t,{transferStreams:r,useWebWorkers:o,useCompressionStream:a,codecType:s,compressed:l,signed:c,encrypted:p}=e,{workerScripts:m,maxWorkers:y,terminateWorkerTimeout:w}=i;t.transferStreams=r||r===_e;let E=!l&&!c&&!p&&!t.transferStreams;t.useWebWorkers=!E&&(o||o===_e&&i.useWebWorkers),t.scripts=t.useWebWorkers&&m?m[s]:[],e.useCompressionStream=a||a===_e&&i.useCompressionStream;let d,f=zt.find(v=>!v.busy);if(f)ul(f),d=new gn(f,n,t,g);else if(zt.length<y){let v={indexWorker:pl};pl++,zt.push(v),d=new gn(v,n,t,g)}else d=await new Promise(v=>lo.push({resolve:v,stream:n,workerOptions:t}));return d.run();function g(v){if(lo.length){let[{resolve:_,stream:A,workerOptions:D}]=lo.splice(0,1);_(new gn(v,A,D,g))}else v.worker?(ul(v),Number.isFinite(w)&&w>=0&&(v.terminateTimeout=setTimeout(()=>{zt=zt.filter(_=>_!=v),v.terminate()},w))):zt=zt.filter(_=>_!=v)}}function ul(n){let{terminateTimeout:t}=n;t&&(clearTimeout(t),n.terminateTimeout=null)}var fm="Writer iterator completed too soon";var dm="Content-Type";var mm=64*1024,dl="writable",Gn=class{constructor(){this.size=0}init(){this.initialized=!0}},yn=class extends Gn{get readable(){let t=this,{chunkSize:e=mm}=t,i=new ReadableStream({start(){this.chunkOffset=0},async pull(r){let{offset:o=0,size:a,diskNumberStart:s}=i,{chunkOffset:l}=this;r.enqueue(await xe(t,o+l,Math.min(e,a-l),s)),l+e>a?r.close():this.chunkOffset+=e}});return i}};var St=class extends yn{constructor(t){super(),Object.assign(this,{blob:t,size:t.size})}async readUint8Array(t,e){let i=this,r=t+e,a=await(t||r<i.size?i.blob.slice(t,r):i.blob).arrayBuffer();return a.byteLength>e&&(a=a.slice(t,r)),new Uint8Array(a)}},Vn=class extends Gn{constructor(t){super();let e=this,i=new TransformStream,r=[];t&&r.push([dm,t]),Object.defineProperty(e,dl,{get(){return i.writable}}),e.blob=new Response(i.readable,{headers:r}).blob()}getData(){return this.blob}};var $i=class extends Vn{constructor(t){super(t),Object.assign(this,{encoding:t,utf8:!t||t.toLowerCase()=="utf-8"})}async getData(){let{encoding:t,utf8:e}=this,i=await super.getData();if(i.text&&e)return i.text();{let r=new FileReader;return new Promise((o,a)=>{Object.assign(r,{onload:({target:s})=>o(s.result),onerror:()=>a(r.error)}),r.readAsText(i,t)})}}};var co=class extends yn{constructor(t){super(),this.readers=t}async init(){let t=this,{readers:e}=t;t.lastDiskNumber=0,t.lastDiskOffset=0,await Promise.all(e.map(async(i,r)=>{await i.init(),r!=e.length-1&&(t.lastDiskOffset+=i.size),t.size+=i.size})),super.init()}async readUint8Array(t,e,i=0){let r=this,{readers:o}=this,a,s=i;s==-1&&(s=o.length-1);let l=t;for(;l>=o[s].size;)l-=o[s].size,s++;let c=o[s],p=c.size;if(l+e<=p)a=await xe(c,l,e);else{let m=p-l;a=new Uint8Array(e),a.set(await xe(c,l,m)),a.set(await r.readUint8Array(t+m,e-m,i),m)}return r.lastDiskNumber=Math.max(s,r.lastDiskNumber),a}},Bi=class extends Gn{constructor(t,e=4294967295){super();let i=this;Object.assign(i,{diskNumber:0,diskOffset:0,size:0,maxSize:e,availableSize:e});let r,o,a,s=new WritableStream({async write(p){let{availableSize:m}=i;if(a)p.length>=m?(await l(p.slice(0,m)),await c(),i.diskOffset+=r.size,i.diskNumber++,a=null,await this.write(p.slice(m))):await l(p);else{let{value:y,done:w}=await t.next();if(w&&!y)throw new Error(fm);r=y,r.size=0,r.maxSize&&(i.maxSize=r.maxSize),i.availableSize=i.maxSize,await Kn(r),o=y.writable,a=o.getWriter(),await this.write(p)}},async close(){await a.ready,await c()}});Object.defineProperty(i,dl,{get(){return s}});async function l(p){let m=p.length;m&&(await a.ready,await a.write(p),r.size+=m,i.size+=m,i.availableSize-=m)}async function c(){o.size=r.size,await a.close()}}};async function Kn(n,t){n.init&&!n.initialized&&await n.init(t)}function ml(n){return Array.isArray(n)&&(n=new co(n)),n instanceof ReadableStream&&(n={readable:n}),n}function hl(n){n.writable===_e&&typeof n.next==ki&&(n=new Bi(n)),n instanceof WritableStream&&(n={writable:n});let{writable:t}=n;return t.size===_e&&(t.size=0),n instanceof Bi||Object.assign(n,{diskNumber:0,diskOffset:0,availableSize:1/0,maxSize:1/0}),n}function xe(n,t,e,i){return n.readUint8Array(t,e,i)}var gl="\0\u263A\u263B\u2665\u2666\u2663\u2660\u2022\u25D8\u25CB\u25D9\u2642\u2640\u266A\u266B\u263C\u25BA\u25C4\u2195\u203C\xB6\xA7\u25AC\u21A8\u2191\u2193\u2192\u2190\u221F\u2194\u25B2\u25BC !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u2302\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0 ".split(""),hm=gl.length==256;function yl(n){if(hm){let t="";for(let e=0;e<n.length;e++)t+=gl[n[e]];return t}else return new TextDecoder().decode(n)}function Ui(n,t){return t&&t.trim().toLowerCase()=="cp437"?yl(n):new TextDecoder(t).decode(n)}var po="filename",uo="rawFilename",fo="comment",mo="rawComment",ho="uncompressedSize",go="compressedSize",yo="offset",ji="diskNumberStart",bo="lastModDate",xo="rawLastModDate",wo="lastAccessDate",bl="rawLastAccessDate",vo="creationDate",xl="rawCreationDate",gm="internalFileAttribute",ym="externalFileAttribute",bm="msDosCompatible",xm="zip64",wm=[po,uo,go,ho,bo,xo,fo,mo,wo,vo,yo,ji,ji,gm,ym,bm,xm,"directory","bitFlag","encrypted","signature","filenameUTF8","commentUTF8","compressionMethod","version","versionMadeBy","extraField","rawExtraField","extraFieldZip64","extraFieldUnicodePath","extraFieldUnicodeComment","extraFieldAES","extraFieldNTFS","extraFieldExtendedTimestamp"],Xn=class{constructor(t){wm.forEach(e=>this[e]=t[e])}};var To="File format is not recognized",Pm="End of central directory not found",Mm="End of Zip64 central directory not found",$m="End of Zip64 central directory locator not found",Bm="Central directory header not found",Um="Local file header not found",jm="Zip64 extra field not found",Hm="File contains encrypted entry",qm="Encryption method not supported",kl="Compression method not supported",Nl="Split zip file",Sl="utf-8",Rl="cp437",Wm=[[ho,4294967295],[go,4294967295],[yo,4294967295],[ji,65535]],Zm={[65535]:{getValue:ae,bytes:4},[4294967295]:{getValue:qi,bytes:8}},Vt=class{constructor(t,e={}){Object.assign(this,{reader:ml(t),options:e,config:Jr()})}async*getEntriesGenerator(t={}){let e=this,{reader:i}=e,{config:r}=e;if(await Kn(i),(i.size===_e||!i.readUint8Array)&&(i=new St(await new Response(i.readable).blob()),await Kn(i)),i.size<22)throw new Error(To);i.chunkSize=Is(r);let o=await Km(i,101010256,i.size,22,65535*16);if(!o){let O=await xe(i,0,4),S=he(O);throw ae(S)==134695760?new Error(Nl):new Error(Pm)}let a=he(o),s=ae(a,12),l=ae(a,16),c=o.offset,p=me(a,20),m=c+22+p,y=me(a,4),w=i.lastDiskNumber||0,E=me(a,6),d=me(a,8),f=0,g=0;if(l==4294967295||s==4294967295||d==65535||E==65535){let O=await xe(i,o.offset-20,20),S=he(O);if(ae(S,0)!=117853008)throw new Error(Mm);l=qi(S,8);let M=await xe(i,l,56,-1),L=he(M),j=o.offset-20-56;if(ae(L,0)!=101075792&&l!=j){let Z=l;l=j,f=l-Z,M=await xe(i,l,56,-1),L=he(M)}if(ae(L,0)!=101075792)throw new Error($m);y==65535&&(y=ae(L,16)),E==65535&&(E=ae(L,20)),d==65535&&(d=qi(L,32)),s==4294967295&&(s=qi(L,40)),l-=s}if(w!=y)throw new Error(Nl);if(l<0||l>=i.size)throw new Error(To);let v=0,_=await xe(i,l,s,E),A=he(_);if(s){let O=o.offset-s;if(ae(A,v)!=33639248&&l!=O){let S=l;l=O,f=l-S,_=await xe(i,l,s,E),A=he(_)}}let D=o.offset-l-(i.lastDiskOffset||0);if(s!=D&&D>=0&&(s=D,_=await xe(i,l,s,E),A=he(_)),l<0||l>=i.size)throw new Error(To);let T=Le(e,t,"filenameEncoding"),k=Le(e,t,"commentEncoding");for(let O=0;O<d;O++){let S=new ko(i,r,e.options);if(ae(A,v)!=33639248)throw new Error(Bm);Dl(S,A,v+6);let M=Boolean(S.bitFlag.languageEncodingFlag),L=v+46,j=L+S.filenameLength,Z=j+S.extraFieldLength,F=me(A,v+4),ee=(F&0)==0,z=_.subarray(L,j),We=me(A,v+32),U=Z+We,Ne=_.subarray(Z,U),G=M,Q=M,lt=ee&&(bn(A,v+38)&16)==16,pn=ae(A,v+42)+f;Object.assign(S,{versionMadeBy:F,msDosCompatible:ee,compressedSize:0,uncompressedSize:0,commentLength:We,directory:lt,offset:pn,diskNumberStart:me(A,v+34),internalFileAttribute:me(A,v+36),externalFileAttribute:ae(A,v+38),rawFilename:z,filenameUTF8:G,commentUTF8:Q,rawExtraField:_.subarray(j,Z)});let[h,u]=await Promise.all([Ui(z,G?Sl:T||Rl),Ui(Ne,Q?Sl:k||Rl)]);Object.assign(S,{rawComment:Ne,filename:h,comment:u,directory:lt||h.endsWith(Ds)}),g=Math.max(pn,g),await Cl(S,S,A,v+6);let R=new Xn(S);R.getData=(N,I)=>S.getData(N,R,I),v=U;let{onprogress:x}=t;if(x)try{await x(O+1,d,new Xn(S))}catch(N){}yield R}let b=Le(e,t,"extractPrependedData"),C=Le(e,t,"extractAppendedData");return b&&(e.prependedData=g>0?await xe(i,0,g):new Uint8Array),e.comment=p?await xe(i,c+22,p):new Uint8Array,C&&(e.appendedData=m<i.size?await xe(i,m,i.size-m):new Uint8Array),!0}async getEntries(t={}){let e=[];for await(let i of this.getEntriesGenerator(t))e.push(i);return e}async close(){}};var ko=class{constructor(t,e,i){Object.assign(this,{reader:t,config:e,options:i})}async getData(t,e,i={}){let r=this,{reader:o,offset:a,diskNumberStart:s,extraFieldAES:l,compressionMethod:c,config:p,bitFlag:m,signature:y,rawLastModDate:w,uncompressedSize:E,compressedSize:d}=r,f=r.localDirectory={},g=await xe(o,a,30,s),v=he(g),_=Le(r,i,"password");if(_=_&&_.length&&_,l&&l.originalCompressionMethod!=99)throw new Error(kl);if(c!=0&&c!=8)throw new Error(kl);if(ae(v,0)!=67324752)throw new Error(Um);Dl(f,v,4),f.rawExtraField=f.extraFieldLength?await xe(o,a+30+f.filenameLength,f.extraFieldLength,s):new Uint8Array,await Cl(r,f,v,4),Object.assign(e,{lastAccessDate:f.lastAccessDate,creationDate:f.creationDate});let A=r.encrypted&&f.encrypted,D=A&&!l;if(A){if(!D&&l.strength===_e)throw new Error(qm);if(!_)throw new Error(Hm)}let T=a+30+f.filenameLength+f.extraFieldLength,k=d,b=o.readable;Object.assign(b,{diskNumberStart:s,offset:T,size:k});let C=Le(r,i,"signal"),O=Le(r,i,"checkPasswordOnly");O&&(t=new WritableStream),t=hl(t),await Kn(t,E);let{writable:S}=t,{onstart:M,onprogress:L,onend:j}=i,Z={options:{codecType:Mi,password:_,zipCrypto:D,encryptionStrength:l&&l.strength,signed:Le(r,i,"checkSignature"),passwordVerification:D&&(m.dataDescriptor?w>>>8&255:y>>>24&255),signature:y,compressed:c!=0,encrypted:A,useWebWorkers:Le(r,i,"useWebWorkers"),useCompressionStream:Le(r,i,"useCompressionStream"),transferStreams:Le(r,i,"transferStreams"),checkPasswordOnly:O},config:p,streamOptions:{signal:C,size:k,onstart:M,onprogress:L,onend:j}},F=0;try{({outputSize:F}=await fl({readable:b,writable:S},Z))}catch(ee){if(!O||ee.message!=pt)throw ee}finally{let ee=Le(r,i,"preventClose");S.size+=F,!ee&&!S.locked&&await S.getWriter().close()}return O?void 0:t.getData?t.getData():S}};function Dl(n,t,e){let i=n.rawBitFlag=me(t,e+2),r=(i&1)==1,o=ae(t,e+6);Object.assign(n,{encrypted:r,version:me(t,e),bitFlag:{level:(i&6)>>1,dataDescriptor:(i&8)==8,languageEncodingFlag:(i&2048)==2048},rawLastModDate:o,lastModDate:Xm(o),filenameLength:me(t,e+22),extraFieldLength:me(t,e+24)})}async function Cl(n,t,e,i){let{rawExtraField:r}=t,o=t.extraField=new Map,a=he(new Uint8Array(r)),s=0;try{for(;s<r.length;){let d=me(a,s),f=me(a,s+2);o.set(d,{type:d,data:r.slice(s+4,s+4+f)}),s+=4+f}}catch(d){}let l=me(e,i+4);Object.assign(t,{signature:ae(e,i+10),uncompressedSize:ae(e,i+18),compressedSize:ae(e,i+14)});let c=o.get(1);c&&(Ym(c,t),t.extraFieldZip64=c);let p=o.get(28789);p&&(await Ol(p,po,uo,t,n),t.extraFieldUnicodePath=p);let m=o.get(25461);m&&(await Ol(m,fo,mo,t,n),t.extraFieldUnicodeComment=m);let y=o.get(39169);y?(zm(y,t,l),t.extraFieldAES=y):t.compressionMethod=l;let w=o.get(10);w&&(Gm(w,t),t.extraFieldNTFS=w);let E=o.get(21589);E&&(Vm(E,t),t.extraFieldExtendedTimestamp=E)}function Ym(n,t){t.zip64=!0;let e=he(n.data),i=Wm.filter(([r,o])=>t[r]==o);for(let r=0,o=0;r<i.length;r++){let[a,s]=i[r];if(t[a]==s){let l=Zm[s];t[a]=n[a]=l.getValue(e,o),o+=l.bytes}else if(n[a])throw new Error(jm)}}async function Ol(n,t,e,i,r){let o=he(n.data),a=new ct;a.append(r[e]);let s=he(new Uint8Array(4));s.setUint32(0,a.get(),!0);let l=ae(o,1);Object.assign(n,{version:bn(o,0),[t]:Ui(n.data.subarray(5)),valid:!r.bitFlag.languageEncodingFlag&&l==ae(s,0)}),n.valid&&(i[t]=n[t],i[t+"UTF8"]=!0)}function zm(n,t,e){let i=he(n.data),r=bn(i,4);Object.assign(n,{vendorVersion:bn(i,0),vendorId:bn(i,2),strength:r,originalCompressionMethod:e,compressionMethod:me(i,5)}),t.compressionMethod=n.compressionMethod}function Gm(n,t){let e=he(n.data),i=4,r;try{for(;i<n.data.length&&!r;){let o=me(e,i),a=me(e,i+2);o==1&&(r=n.data.slice(i+4,i+4+a)),i+=4+a}}catch(o){}try{if(r&&r.length==24){let o=he(r),a=o.getBigUint64(0,!0),s=o.getBigUint64(8,!0),l=o.getBigUint64(16,!0);Object.assign(n,{rawLastModDate:a,rawLastAccessDate:s,rawCreationDate:l});let c=Ao(a),p=Ao(s),m=Ao(l),y={lastModDate:c,lastAccessDate:p,creationDate:m};Object.assign(n,y),Object.assign(t,y)}}catch(o){}}function Vm(n,t){let e=he(n.data),i=bn(e,0),r=[],o=[];(i&1)==1&&(r.push(bo),o.push(xo)),(i&2)==2&&(r.push(wo),o.push(bl)),(i&4)==4&&(r.push(vo),o.push(xl));let a=1;r.forEach((s,l)=>{if(n.data.length>=a+4){let c=ae(e,a);t[s]=n[s]=new Date(c*1e3);let p=o[l];n[p]=c}a+=4})}async function Km(n,t,e,i,r){let o=new Uint8Array(4),a=he(o);Jm(a,0,t);let s=i+r;return await l(i)||await l(Math.min(s,e));async function l(c){let p=e-c,m=await xe(n,p,c);for(let y=m.length-i;y>=0;y--)if(m[y]==o[0]&&m[y+1]==o[1]&&m[y+2]==o[2]&&m[y+3]==o[3])return{offset:p+y,buffer:m.slice(y,y+i).buffer}}}function Le(n,t,e){return t[e]===_e?n.options[e]:t[e]}function Xm(n){let t=(n&4294901760)>>16,e=n&65535;try{return new Date(1980+((t&65024)>>9),((t&480)>>5)-1,t&31,(e&63488)>>11,(e&2016)>>5,(e&31)*2,0)}catch(i){}}function Ao(n){return new Date(Number(n/BigInt(1e4)-BigInt(116444736e5)))}function bn(n,t){return n.getUint8(t)}function me(n,t){return n.getUint16(t,!0)}function ae(n,t){return n.getUint32(t,!0)}function qi(n,t){return Number(n.getBigUint64(t,!0))}function Jm(n,t,e){n.setUint32(t,e,!0)}function he(n){return new DataView(n.buffer)}Ni({Inflate:Os});var Kt=require("obsidian");function Il(n){let t=()=>URL.createObjectURL(new Blob([`const{Array:e,Object:t,Number:n,Math:r,Error:s,Uint8Array:i,Uint16Array:o,Uint32Array:c,Int32Array:f,Map:a,DataView:l,Promise:u,TextEncoder:w,crypto:h,postMessage:d,TransformStream:p,ReadableStream:y,WritableStream:m,CompressionStream:b,DecompressionStream:g}=self;class k{constructor(e){return class extends p{constructor(t,n){const r=new e(n);super({transform(e,t){t.enqueue(r.append(e))},flush(e){const t=r.flush();t&&e.enqueue(t)}})}}}}const v=[];for(let e=0;256>e;e++){let t=e;for(let e=0;8>e;e++)1&t?t=t>>>1^3988292384:t>>>=1;v[e]=t}class S{constructor(e){this.t=e||-1}append(e){let t=0|this.t;for(let n=0,r=0|e.length;r>n;n++)t=t>>>8^v[255&(t^e[n])];this.t=t}get(){return~this.t}}class z extends p{constructor(){let e;const t=new S;super({transform(e,n){t.append(e),n.enqueue(e)},flush(){const n=new i(4);new l(n.buffer).setUint32(0,t.get()),e.value=n}}),e=this}}const C={concat(e,t){if(0===e.length||0===t.length)return e.concat(t);const n=e[e.length-1],r=C.i(n);return 32===r?e.concat(t):C.o(t,r,0|n,e.slice(0,e.length-1))},l(e){const t=e.length;if(0===t)return 0;const n=e[t-1];return 32*(t-1)+C.i(n)},u(e,t){if(32*e.length<t)return e;const n=(e=e.slice(0,r.ceil(t/32))).length;return t&=31,n>0&&t&&(e[n-1]=C.h(t,e[n-1]&2147483648>>t-1,1)),e},h:(e,t,n)=>32===e?t:(n?0|t:t<<32-e)+1099511627776*e,i:e=>r.round(e/1099511627776)||32,o(e,t,n,r){for(void 0===r&&(r=[]);t>=32;t-=32)r.push(n),n=0;if(0===t)return r.concat(e);for(let s=0;s<e.length;s++)r.push(n|e[s]>>>t),n=e[s]<<32-t;const s=e.length?e[e.length-1]:0,i=C.i(s);return r.push(C.h(t+i&31,t+i>32?n:r.pop(),1)),r}},x={p:{m(e){const t=C.l(e)/8,n=new i(t);let r;for(let s=0;t>s;s++)0==(3&s)&&(r=e[s/4]),n[s]=r>>>24,r<<=8;return n},g(e){const t=[];let n,r=0;for(n=0;n<e.length;n++)r=r<<8|e[n],3==(3&n)&&(t.push(r),r=0);return 3&n&&t.push(C.h(8*(3&n),r)),t}}},_=class{constructor(e){const t=this;t.blockSize=512,t.k=[1732584193,4023233417,2562383102,271733878,3285377520],t.v=[1518500249,1859775393,2400959708,3395469782],e?(t.S=e.S.slice(0),t.C=e.C.slice(0),t._=e._):t.reset()}reset(){const e=this;return e.S=e.k.slice(0),e.C=[],e._=0,e}update(e){const t=this;"string"==typeof e&&(e=x.A.g(e));const n=t.C=C.concat(t.C,e),r=t._,i=t._=r+C.l(e);if(i>9007199254740991)throw new s("Cannot hash more than 2^53 - 1 bits");const o=new c(n);let f=0;for(let e=t.blockSize+r-(t.blockSize+r&t.blockSize-1);i>=e;e+=t.blockSize)t.I(o.subarray(16*f,16*(f+1))),f+=1;return n.splice(0,16*f),t}D(){const e=this;let t=e.C;const n=e.S;t=C.concat(t,[C.h(1,1)]);for(let e=t.length+2;15&e;e++)t.push(0);for(t.push(r.floor(e._/4294967296)),t.push(0|e._);t.length;)e.I(t.splice(0,16));return e.reset(),n}V(e,t,n,r){return e>19?e>39?e>59?e>79?void 0:t^n^r:t&n|t&r|n&r:t^n^r:t&n|~t&r}P(e,t){return t<<e|t>>>32-e}I(t){const n=this,s=n.S,i=e(80);for(let e=0;16>e;e++)i[e]=t[e];let o=s[0],c=s[1],f=s[2],a=s[3],l=s[4];for(let e=0;79>=e;e++){16>e||(i[e]=n.P(1,i[e-3]^i[e-8]^i[e-14]^i[e-16]));const t=n.P(5,o)+n.V(e,c,f,a)+l+i[e]+n.v[r.floor(e/20)]|0;l=a,a=f,f=n.P(30,c),c=o,o=t}s[0]=s[0]+o|0,s[1]=s[1]+c|0,s[2]=s[2]+f|0,s[3]=s[3]+a|0,s[4]=s[4]+l|0}},A={getRandomValues(e){const t=new c(e.buffer),n=e=>{let t=987654321;const n=4294967295;return()=>(t=36969*(65535&t)+(t>>16)&n,(((t<<16)+(e=18e3*(65535&e)+(e>>16)&n)&n)/4294967296+.5)*(r.random()>.5?1:-1))};for(let s,i=0;i<e.length;i+=4){const e=n(4294967296*(s||r.random()));s=987654071*e(),t[i/4]=4294967296*e()|0}return e}},I={importKey:e=>new I.R(x.p.g(e)),B(e,t,n,r){if(n=n||1e4,0>r||0>n)throw new s("invalid params to pbkdf2");const i=1+(r>>5)<<2;let o,c,f,a,u;const w=new ArrayBuffer(i),h=new l(w);let d=0;const p=C;for(t=x.p.g(t),u=1;(i||1)>d;u++){for(o=c=e.encrypt(p.concat(t,[u])),f=1;n>f;f++)for(c=e.encrypt(c),a=0;a<c.length;a++)o[a]^=c[a];for(f=0;(i||1)>d&&f<o.length;f++)h.setInt32(d,o[f]),d+=4}return w.slice(0,r/8)},R:class{constructor(e){const t=this,n=t.M=_,r=[[],[]];t.K=[new n,new n];const s=t.K[0].blockSize/32;e.length>s&&(e=(new n).update(e).D());for(let t=0;s>t;t++)r[0][t]=909522486^e[t],r[1][t]=1549556828^e[t];t.K[0].update(r[0]),t.K[1].update(r[1]),t.U=new n(t.K[0])}reset(){const e=this;e.U=new e.M(e.K[0]),e.N=!1}update(e){this.N=!0,this.U.update(e)}digest(){const e=this,t=e.U.D(),n=new e.M(e.K[1]).update(t).D();return e.reset(),n}encrypt(e){if(this.N)throw new s("encrypt on already updated hmac called!");return this.update(e),this.digest(e)}}},D=void 0!==h&&"function"==typeof h.getRandomValues,V="Invalid password",P="Invalid signature",R="zipjs-abort-check-password";function B(e){return D?h.getRandomValues(e):A.getRandomValues(e)}const E=16,M={name:"PBKDF2"},K=t.assign({hash:{name:"HMAC"}},M),U=t.assign({iterations:1e3,hash:{name:"SHA-1"}},M),N=["deriveBits"],O=[8,12,16],T=[16,24,32],W=10,j=[0,0,0,0],H="undefined",L="function",F=typeof h!=H,q=F&&h.subtle,G=F&&typeof q!=H,J=x.p,Q=class{constructor(e){const t=this;t.O=[[[],[],[],[],[]],[[],[],[],[],[]]],t.O[0][0][0]||t.T();const n=t.O[0][4],r=t.O[1],i=e.length;let o,c,f,a=1;if(4!==i&&6!==i&&8!==i)throw new s("invalid aes key size");for(t.v=[c=e.slice(0),f=[]],o=i;4*i+28>o;o++){let e=c[o-1];(o%i==0||8===i&&o%i==4)&&(e=n[e>>>24]<<24^n[e>>16&255]<<16^n[e>>8&255]<<8^n[255&e],o%i==0&&(e=e<<8^e>>>24^a<<24,a=a<<1^283*(a>>7))),c[o]=c[o-i]^e}for(let e=0;o;e++,o--){const t=c[3&e?o:o-4];f[e]=4>=o||4>e?t:r[0][n[t>>>24]]^r[1][n[t>>16&255]]^r[2][n[t>>8&255]]^r[3][n[255&t]]}}encrypt(e){return this.W(e,0)}decrypt(e){return this.W(e,1)}T(){const e=this.O[0],t=this.O[1],n=e[4],r=t[4],s=[],i=[];let o,c,f,a;for(let e=0;256>e;e++)i[(s[e]=e<<1^283*(e>>7))^e]=e;for(let l=o=0;!n[l];l^=c||1,o=i[o]||1){let i=o^o<<1^o<<2^o<<3^o<<4;i=i>>8^255&i^99,n[l]=i,r[i]=l,a=s[f=s[c=s[l]]];let u=16843009*a^65537*f^257*c^16843008*l,w=257*s[i]^16843008*i;for(let n=0;4>n;n++)e[n][l]=w=w<<24^w>>>8,t[n][i]=u=u<<24^u>>>8}for(let n=0;5>n;n++)e[n]=e[n].slice(0),t[n]=t[n].slice(0)}W(e,t){if(4!==e.length)throw new s("invalid aes block size");const n=this.v[t],r=n.length/4-2,i=[0,0,0,0],o=this.O[t],c=o[0],f=o[1],a=o[2],l=o[3],u=o[4];let w,h,d,p=e[0]^n[0],y=e[t?3:1]^n[1],m=e[2]^n[2],b=e[t?1:3]^n[3],g=4;for(let e=0;r>e;e++)w=c[p>>>24]^f[y>>16&255]^a[m>>8&255]^l[255&b]^n[g],h=c[y>>>24]^f[m>>16&255]^a[b>>8&255]^l[255&p]^n[g+1],d=c[m>>>24]^f[b>>16&255]^a[p>>8&255]^l[255&y]^n[g+2],b=c[b>>>24]^f[p>>16&255]^a[y>>8&255]^l[255&m]^n[g+3],g+=4,p=w,y=h,m=d;for(let e=0;4>e;e++)i[t?3&-e:e]=u[p>>>24]<<24^u[y>>16&255]<<16^u[m>>8&255]<<8^u[255&b]^n[g++],w=p,p=y,y=m,m=b,b=w;return i}},X=class{constructor(e,t){this.j=e,this.H=t,this.L=t}reset(){this.L=this.H}update(e){return this.F(this.j,e,this.L)}q(e){if(255==(e>>24&255)){let t=e>>16&255,n=e>>8&255,r=255&e;255===t?(t=0,255===n?(n=0,255===r?r=0:++r):++n):++t,e=0,e+=t<<16,e+=n<<8,e+=r}else e+=1<<24;return e}G(e){0===(e[0]=this.q(e[0]))&&(e[1]=this.q(e[1]))}F(e,t,n){let r;if(!(r=t.length))return[];const s=C.l(t);for(let s=0;r>s;s+=4){this.G(n);const r=e.encrypt(n);t[s]^=r[0],t[s+1]^=r[1],t[s+2]^=r[2],t[s+3]^=r[3]}return C.u(t,s)}},Y=I.R;let Z=F&&G&&typeof q.importKey==L,$=F&&G&&typeof q.deriveBits==L;class ee extends p{constructor({password:e,signed:n,encryptionStrength:r,checkPasswordOnly:o}){super({start(){t.assign(this,{ready:new u((e=>this.J=e)),password:e,signed:n,X:r-1,pending:new i})},async transform(e,t){const n=this,{password:r,X:c,J:f,ready:a}=n;r?(await(async(e,t,n,r)=>{const i=await re(e,t,n,ie(r,0,O[t])),o=ie(r,O[t]);if(i[0]!=o[0]||i[1]!=o[1])throw new s(V)})(n,c,r,ie(e,0,O[c]+2)),e=ie(e,O[c]+2),o?t.error(new s(R)):f()):await a;const l=new i(e.length-W-(e.length-W)%E);t.enqueue(ne(n,e,l,0,W,!0))},async flush(e){const{signed:t,Y:n,Z:r,pending:o,ready:c}=this;await c;const f=ie(o,0,o.length-W),a=ie(o,o.length-W);let l=new i;if(f.length){const e=ce(J,f);r.update(e);const t=n.update(e);l=oe(J,t)}if(t){const e=ie(oe(J,r.digest()),0,W);for(let t=0;W>t;t++)if(e[t]!=a[t])throw new s(P)}e.enqueue(l)}})}}class te extends p{constructor({password:e,encryptionStrength:n}){let r;super({start(){t.assign(this,{ready:new u((e=>this.J=e)),password:e,X:n-1,pending:new i})},async transform(e,t){const n=this,{password:r,X:s,J:o,ready:c}=n;let f=new i;r?(f=await(async(e,t,n)=>{const r=B(new i(O[t]));return se(r,await re(e,t,n,r))})(n,s,r),o()):await c;const a=new i(f.length+e.length-e.length%E);a.set(f,0),t.enqueue(ne(n,e,a,f.length,0))},async flush(e){const{Y:t,Z:n,pending:s,ready:o}=this;await o;let c=new i;if(s.length){const e=t.update(ce(J,s));n.update(e),c=oe(J,e)}r.signature=oe(J,n.digest()).slice(0,W),e.enqueue(se(c,r.signature))}}),r=this}}function ne(e,t,n,r,s,o){const{Y:c,Z:f,pending:a}=e,l=t.length-s;let u;for(a.length&&(t=se(a,t),n=((e,t)=>{if(t&&t>e.length){const n=e;(e=new i(t)).set(n,0)}return e})(n,l-l%E)),u=0;l-E>=u;u+=E){const e=ce(J,ie(t,u,u+E));o&&f.update(e);const s=c.update(e);o||f.update(s),n.set(oe(J,s),u+r)}return e.pending=ie(t,u),n}async function re(n,r,s,o){n.password=null;const c=(e=>{if(void 0===w){const t=new i((e=unescape(encodeURIComponent(e))).length);for(let n=0;n<t.length;n++)t[n]=e.charCodeAt(n);return t}return(new w).encode(e)})(s),f=await(async(e,t,n,r,s)=>{if(!Z)return I.importKey(t);try{return await q.importKey("raw",t,n,!1,s)}catch(e){return Z=!1,I.importKey(t)}})(0,c,K,0,N),a=await(async(e,t,n)=>{if(!$)return I.B(t,e.salt,U.iterations,n);try{return await q.deriveBits(e,t,n)}catch(r){return $=!1,I.B(t,e.salt,U.iterations,n)}})(t.assign({salt:o},U),f,8*(2*T[r]+2)),l=new i(a),u=ce(J,ie(l,0,T[r])),h=ce(J,ie(l,T[r],2*T[r])),d=ie(l,2*T[r]);return t.assign(n,{keys:{key:u,$:h,passwordVerification:d},Y:new X(new Q(u),e.from(j)),Z:new Y(h)}),d}function se(e,t){let n=e;return e.length+t.length&&(n=new i(e.length+t.length),n.set(e,0),n.set(t,e.length)),n}function ie(e,t,n){return e.subarray(t,n)}function oe(e,t){return e.m(t)}function ce(e,t){return e.g(t)}class fe extends p{constructor({password:e,passwordVerification:n,checkPasswordOnly:r}){super({start(){t.assign(this,{password:e,passwordVerification:n}),we(this,e)},transform(e,t){const n=this;if(n.password){const t=le(n,e.subarray(0,12));if(n.password=null,t[11]!=n.passwordVerification)throw new s(V);e=e.subarray(12)}r?t.error(new s(R)):t.enqueue(le(n,e))}})}}class ae extends p{constructor({password:e,passwordVerification:n}){super({start(){t.assign(this,{password:e,passwordVerification:n}),we(this,e)},transform(e,t){const n=this;let r,s;if(n.password){n.password=null;const t=B(new i(12));t[11]=n.passwordVerification,r=new i(e.length+t.length),r.set(ue(n,t),0),s=12}else r=new i(e.length),s=0;r.set(ue(n,e),s),t.enqueue(r)}})}}function le(e,t){const n=new i(t.length);for(let r=0;r<t.length;r++)n[r]=de(e)^t[r],he(e,n[r]);return n}function ue(e,t){const n=new i(t.length);for(let r=0;r<t.length;r++)n[r]=de(e)^t[r],he(e,t[r]);return n}function we(e,n){const r=[305419896,591751049,878082192];t.assign(e,{keys:r,ee:new S(r[0]),te:new S(r[2])});for(let t=0;t<n.length;t++)he(e,n.charCodeAt(t))}function he(e,t){let[n,s,i]=e.keys;e.ee.append([t]),n=~e.ee.get(),s=ye(r.imul(ye(s+pe(n)),134775813)+1),e.te.append([s>>>24]),i=~e.te.get(),e.keys=[n,s,i]}function de(e){const t=2|e.keys[2];return pe(r.imul(t,1^t)>>>8)}function pe(e){return 255&e}function ye(e){return 4294967295&e}const me="deflate-raw";class be extends p{constructor(e,{chunkSize:t,CompressionStream:n,CompressionStreamNative:r}){super({});const{compressed:s,encrypted:i,useCompressionStream:o,zipCrypto:c,signed:f,level:a}=e,u=this;let w,h,d=ke(super.readable);i&&!c||!f||(w=new z,d=ze(d,w)),s&&(d=Se(d,o,{level:a,chunkSize:t},r,n)),i&&(c?d=ze(d,new ae(e)):(h=new te(e),d=ze(d,h))),ve(u,d,(async()=>{let e;i&&!c&&(e=h.signature),i&&!c||!f||(e=new l(w.value.buffer).getUint32(0)),u.signature=e}))}}class ge extends p{constructor(e,{chunkSize:t,DecompressionStream:n,DecompressionStreamNative:r}){super({});const{zipCrypto:i,encrypted:o,signed:c,signature:f,compressed:a,useCompressionStream:u}=e;let w,h,d=ke(super.readable);o&&(i?d=ze(d,new fe(e)):(h=new ee(e),d=ze(d,h))),a&&(d=Se(d,u,{chunkSize:t},r,n)),o&&!i||!c||(w=new z,d=ze(d,w)),ve(this,d,(async()=>{if((!o||i)&&c){const e=new l(w.value.buffer);if(f!=e.getUint32(0,!1))throw new s(P)}}))}}function ke(e){return ze(e,new p({transform(e,t){e&&e.length&&t.enqueue(e)}}))}function ve(e,n,r){n=ze(n,new p({flush:r})),t.defineProperty(e,"readable",{get:()=>n})}function Se(e,t,n,r,s){try{e=ze(e,new(t&&r?r:s)(me,n))}catch(r){if(!t)throw r;e=ze(e,new s(me,n))}return e}function ze(e,t){return e.pipeThrough(t)}const Ce="data";class xe extends p{constructor(e,n){super({});const r=this,{codecType:s}=e;let i;s.startsWith("deflate")?i=be:s.startsWith("inflate")&&(i=ge);let o=0;const c=new i(e,n),f=super.readable,a=new p({transform(e,t){e&&e.length&&(o+=e.length,t.enqueue(e))},flush(){const{signature:e}=c;t.assign(r,{signature:e,size:o})}});t.defineProperty(r,"readable",{get:()=>f.pipeThrough(c).pipeThrough(a)})}}const _e=new a,Ae=new a;let Ie=0;async function De(e){try{const{options:t,scripts:r,config:s}=e;r&&r.length&&importScripts.apply(void 0,r),self.initCodec&&self.initCodec(),s.CompressionStreamNative=self.CompressionStream,s.DecompressionStreamNative=self.DecompressionStream,self.Deflate&&(s.CompressionStream=new k(self.Deflate)),self.Inflate&&(s.DecompressionStream=new k(self.Inflate));const i={highWaterMark:1,size:()=>s.chunkSize},o=e.readable||new y({async pull(e){const t=new u((e=>_e.set(Ie,e)));Ve({type:"pull",messageId:Ie}),Ie=(Ie+1)%n.MAX_SAFE_INTEGER;const{value:r,done:s}=await t;e.enqueue(r),s&&e.close()}},i),c=e.writable||new m({async write(e){let t;const r=new u((e=>t=e));Ae.set(Ie,t),Ve({type:Ce,value:e,messageId:Ie}),Ie=(Ie+1)%n.MAX_SAFE_INTEGER,await r}},i),f=new xe(t,s);await o.pipeThrough(f).pipeTo(c,{preventClose:!0,preventAbort:!0});try{await c.getWriter().close()}catch(e){}const{signature:a,size:l}=f;Ve({type:"close",result:{signature:a,size:l}})}catch(e){Pe(e)}}function Ve(e){let{value:t}=e;if(t)if(t.length)try{t=new i(t),e.value=t.buffer,d(e,[e.value])}catch(t){d(e)}else d(e);else d(e)}function Pe(e){const{message:t,stack:n,code:r,name:s}=e;d({error:{message:t,stack:n,code:r,name:s}})}addEventListener("message",(({data:e})=>{const{type:t,messageId:n,value:r,done:s}=e;try{if("start"==t&&De(e),t==Ce){const e=_e.get(n);_e.delete(n),e({value:new i(r),done:s})}if("ack"==t){const e=Ae.get(n);Ae.delete(n),e()}}catch(e){Pe(e)}}));const Re=-2;function Be(t){return Ee(t.map((([t,n])=>new e(t).fill(n,0,t))))}function Ee(t){return t.reduce(((t,n)=>t.concat(e.isArray(n)?Ee(n):n)),[])}const Me=[0,1,2,3].concat(...Be([[2,4],[2,5],[4,6],[4,7],[8,8],[8,9],[16,10],[16,11],[32,12],[32,13],[64,14],[64,15],[2,0],[1,16],[1,17],[2,18],[2,19],[4,20],[4,21],[8,22],[8,23],[16,24],[16,25],[32,26],[32,27],[64,28],[64,29]]));function Ke(){const e=this;function t(e,t){let n=0;do{n|=1&e,e>>>=1,n<<=1}while(--t>0);return n>>>1}e.ne=n=>{const s=e.re,i=e.ie.se,o=e.ie.oe;let c,f,a,l=-1;for(n.ce=0,n.fe=573,c=0;o>c;c++)0!==s[2*c]?(n.ae[++n.ce]=l=c,n.le[c]=0):s[2*c+1]=0;for(;2>n.ce;)a=n.ae[++n.ce]=2>l?++l:0,s[2*a]=1,n.le[a]=0,n.ue--,i&&(n.we-=i[2*a+1]);for(e.he=l,c=r.floor(n.ce/2);c>=1;c--)n.de(s,c);a=o;do{c=n.ae[1],n.ae[1]=n.ae[n.ce--],n.de(s,1),f=n.ae[1],n.ae[--n.fe]=c,n.ae[--n.fe]=f,s[2*a]=s[2*c]+s[2*f],n.le[a]=r.max(n.le[c],n.le[f])+1,s[2*c+1]=s[2*f+1]=a,n.ae[1]=a++,n.de(s,1)}while(n.ce>=2);n.ae[--n.fe]=n.ae[1],(t=>{const n=e.re,r=e.ie.se,s=e.ie.pe,i=e.ie.ye,o=e.ie.me;let c,f,a,l,u,w,h=0;for(l=0;15>=l;l++)t.be[l]=0;for(n[2*t.ae[t.fe]+1]=0,c=t.fe+1;573>c;c++)f=t.ae[c],l=n[2*n[2*f+1]+1]+1,l>o&&(l=o,h++),n[2*f+1]=l,f>e.he||(t.be[l]++,u=0,i>f||(u=s[f-i]),w=n[2*f],t.ue+=w*(l+u),r&&(t.we+=w*(r[2*f+1]+u)));if(0!==h){do{for(l=o-1;0===t.be[l];)l--;t.be[l]--,t.be[l+1]+=2,t.be[o]--,h-=2}while(h>0);for(l=o;0!==l;l--)for(f=t.be[l];0!==f;)a=t.ae[--c],a>e.he||(n[2*a+1]!=l&&(t.ue+=(l-n[2*a+1])*n[2*a],n[2*a+1]=l),f--)}})(n),((e,n,r)=>{const s=[];let i,o,c,f=0;for(i=1;15>=i;i++)s[i]=f=f+r[i-1]<<1;for(o=0;n>=o;o++)c=e[2*o+1],0!==c&&(e[2*o]=t(s[c]++,c))})(s,e.he,n.be)}}function Ue(e,t,n,r,s){const i=this;i.se=e,i.pe=t,i.ye=n,i.oe=r,i.me=s}Ke.ge=[0,1,2,3,4,5,6,7].concat(...Be([[2,8],[2,9],[2,10],[2,11],[4,12],[4,13],[4,14],[4,15],[8,16],[8,17],[8,18],[8,19],[16,20],[16,21],[16,22],[16,23],[32,24],[32,25],[32,26],[31,27],[1,28]])),Ke.ke=[0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224,0],Ke.ve=[0,1,2,3,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096,6144,8192,12288,16384,24576],Ke.Se=e=>256>e?Me[e]:Me[256+(e>>>7)],Ke.ze=[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],Ke.Ce=[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],Ke.xe=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],Ke._e=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];const Ne=Be([[144,8],[112,9],[24,7],[8,8]]);Ue.Ae=Ee([12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,19,275,147,403,83,339,211,467,51,307,179,435,115,371,243,499,11,267,139,395,75,331,203,459,43,299,171,427,107,363,235,491,27,283,155,411,91,347,219,475,59,315,187,443,123,379,251,507,7,263,135,391,71,327,199,455,39,295,167,423,103,359,231,487,23,279,151,407,87,343,215,471,55,311,183,439,119,375,247,503,15,271,143,399,79,335,207,463,47,303,175,431,111,367,239,495,31,287,159,415,95,351,223,479,63,319,191,447,127,383,255,511,0,64,32,96,16,80,48,112,8,72,40,104,24,88,56,120,4,68,36,100,20,84,52,116,3,131,67,195,35,163,99,227].map(((e,t)=>[e,Ne[t]])));const Oe=Be([[30,5]]);function Te(e,t,n,r,s){const i=this;i.Ie=e,i.De=t,i.Ve=n,i.Pe=r,i.Re=s}Ue.Be=Ee([0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30,1,17,9,25,5,21,13,29,3,19,11,27,7,23].map(((e,t)=>[e,Oe[t]]))),Ue.Ee=new Ue(Ue.Ae,Ke.ze,257,286,15),Ue.Me=new Ue(Ue.Be,Ke.Ce,0,30,15),Ue.Ke=new Ue(null,Ke.xe,0,19,7);const We=[new Te(0,0,0,0,0),new Te(4,4,8,4,1),new Te(4,5,16,8,1),new Te(4,6,32,32,1),new Te(4,4,16,16,2),new Te(8,16,32,32,2),new Te(8,16,128,128,2),new Te(8,32,128,256,2),new Te(32,128,258,1024,2),new Te(32,258,258,4096,2)],je=["need dictionary","stream end","","","stream error","data error","","buffer error","",""],He=113,Le=666,Fe=262;function qe(e,t,n,r){const s=e[2*t],i=e[2*n];return i>s||s==i&&r[t]<=r[n]}function Ge(){const e=this;let t,n,s,c,f,a,l,u,w,h,d,p,y,m,b,g,k,v,S,z,C,x,_,A,I,D,V,P,R,B,E,M,K;const U=new Ke,N=new Ke,O=new Ke;let T,W,j,H,L,F;function q(){let t;for(t=0;286>t;t++)E[2*t]=0;for(t=0;30>t;t++)M[2*t]=0;for(t=0;19>t;t++)K[2*t]=0;E[512]=1,e.ue=e.we=0,W=j=0}function G(e,t){let n,r=-1,s=e[1],i=0,o=7,c=4;0===s&&(o=138,c=3),e[2*(t+1)+1]=65535;for(let f=0;t>=f;f++)n=s,s=e[2*(f+1)+1],++i<o&&n==s||(c>i?K[2*n]+=i:0!==n?(n!=r&&K[2*n]++,K[32]++):i>10?K[36]++:K[34]++,i=0,r=n,0===s?(o=138,c=3):n==s?(o=6,c=3):(o=7,c=4))}function J(t){e.Ue[e.pending++]=t}function Q(e){J(255&e),J(e>>>8&255)}function X(e,t){let n;const r=t;F>16-r?(n=e,L|=n<<F&65535,Q(L),L=n>>>16-F,F+=r-16):(L|=e<<F&65535,F+=r)}function Y(e,t){const n=2*e;X(65535&t[n],65535&t[n+1])}function Z(e,t){let n,r,s=-1,i=e[1],o=0,c=7,f=4;for(0===i&&(c=138,f=3),n=0;t>=n;n++)if(r=i,i=e[2*(n+1)+1],++o>=c||r!=i){if(f>o)do{Y(r,K)}while(0!=--o);else 0!==r?(r!=s&&(Y(r,K),o--),Y(16,K),X(o-3,2)):o>10?(Y(18,K),X(o-11,7)):(Y(17,K),X(o-3,3));o=0,s=r,0===i?(c=138,f=3):r==i?(c=6,f=3):(c=7,f=4)}}function $(){16==F?(Q(L),L=0,F=0):8>F||(J(255&L),L>>>=8,F-=8)}function ee(t,n){let s,i,o;if(e.Ne[W]=t,e.Oe[W]=255&n,W++,0===t?E[2*n]++:(j++,t--,E[2*(Ke.ge[n]+256+1)]++,M[2*Ke.Se(t)]++),0==(8191&W)&&V>2){for(s=8*W,i=C-k,o=0;30>o;o++)s+=M[2*o]*(5+Ke.Ce[o]);if(s>>>=3,j<r.floor(W/2)&&s<r.floor(i/2))return!0}return W==T-1}function te(t,n){let r,s,i,o,c=0;if(0!==W)do{r=e.Ne[c],s=e.Oe[c],c++,0===r?Y(s,t):(i=Ke.ge[s],Y(i+256+1,t),o=Ke.ze[i],0!==o&&(s-=Ke.ke[i],X(s,o)),r--,i=Ke.Se(r),Y(i,n),o=Ke.Ce[i],0!==o&&(r-=Ke.ve[i],X(r,o)))}while(W>c);Y(256,t),H=t[513]}function ne(){F>8?Q(L):F>0&&J(255&L),L=0,F=0}function re(t,n,r){X(0+(r?1:0),3),((t,n)=>{ne(),H=8,Q(n),Q(~n),e.Ue.set(u.subarray(t,t+n),e.pending),e.pending+=n})(t,n)}function se(n){((t,n,r)=>{let s,i,o=0;V>0?(U.ne(e),N.ne(e),o=(()=>{let t;for(G(E,U.he),G(M,N.he),O.ne(e),t=18;t>=3&&0===K[2*Ke._e[t]+1];t--);return e.ue+=14+3*(t+1),t})(),s=e.ue+3+7>>>3,i=e.we+3+7>>>3,i>s||(s=i)):s=i=n+5,n+4>s||-1==t?i==s?(X(2+(r?1:0),3),te(Ue.Ae,Ue.Be)):(X(4+(r?1:0),3),((e,t,n)=>{let r;for(X(e-257,5),X(t-1,5),X(n-4,4),r=0;n>r;r++)X(K[2*Ke._e[r]+1],3);Z(E,e-1),Z(M,t-1)})(U.he+1,N.he+1,o+1),te(E,M)):re(t,n,r),q(),r&&ne()})(0>k?-1:k,C-k,n),k=C,t.Te()}function ie(){let e,n,r,s;do{if(s=w-_-C,0===s&&0===C&&0===_)s=f;else if(-1==s)s--;else if(C>=f+f-Fe){u.set(u.subarray(f,f+f),0),x-=f,C-=f,k-=f,e=y,r=e;do{n=65535&d[--r],d[r]=f>n?0:n-f}while(0!=--e);e=f,r=e;do{n=65535&h[--r],h[r]=f>n?0:n-f}while(0!=--e);s+=f}if(0===t.We)return;e=t.je(u,C+_,s),_+=e,3>_||(p=255&u[C],p=(p<<g^255&u[C+1])&b)}while(Fe>_&&0!==t.We)}function oe(e){let t,n,r=I,s=C,i=A;const o=C>f-Fe?C-(f-Fe):0;let c=B;const a=l,w=C+258;let d=u[s+i-1],p=u[s+i];R>A||(r>>=2),c>_&&(c=_);do{if(t=e,u[t+i]==p&&u[t+i-1]==d&&u[t]==u[s]&&u[++t]==u[s+1]){s+=2,t++;do{}while(u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&w>s);if(n=258-(w-s),s=w-258,n>i){if(x=e,i=n,n>=c)break;d=u[s+i-1],p=u[s+i]}}}while((e=65535&h[e&a])>o&&0!=--r);return i>_?_:i}e.le=[],e.be=[],e.ae=[],E=[],M=[],K=[],e.de=(t,n)=>{const r=e.ae,s=r[n];let i=n<<1;for(;i<=e.ce&&(i<e.ce&&qe(t,r[i+1],r[i],e.le)&&i++,!qe(t,s,r[i],e.le));)r[n]=r[i],n=i,i<<=1;r[n]=s},e.He=(t,S,x,W,j,G)=>(W||(W=8),j||(j=8),G||(G=0),t.Le=null,-1==S&&(S=6),1>j||j>9||8!=W||9>x||x>15||0>S||S>9||0>G||G>2?Re:(t.Fe=e,a=x,f=1<<a,l=f-1,m=j+7,y=1<<m,b=y-1,g=r.floor((m+3-1)/3),u=new i(2*f),h=[],d=[],T=1<<j+6,e.Ue=new i(4*T),s=4*T,e.Ne=new o(T),e.Oe=new i(T),V=S,P=G,(t=>(t.qe=t.Ge=0,t.Le=null,e.pending=0,e.Je=0,n=He,c=0,U.re=E,U.ie=Ue.Ee,N.re=M,N.ie=Ue.Me,O.re=K,O.ie=Ue.Ke,L=0,F=0,H=8,q(),(()=>{w=2*f,d[y-1]=0;for(let e=0;y-1>e;e++)d[e]=0;D=We[V].De,R=We[V].Ie,B=We[V].Ve,I=We[V].Pe,C=0,k=0,_=0,v=A=2,z=0,p=0})(),0))(t))),e.Qe=()=>42!=n&&n!=He&&n!=Le?Re:(e.Oe=null,e.Ne=null,e.Ue=null,d=null,h=null,u=null,e.Fe=null,n==He?-3:0),e.Xe=(e,t,n)=>{let r=0;return-1==t&&(t=6),0>t||t>9||0>n||n>2?Re:(We[V].Re!=We[t].Re&&0!==e.qe&&(r=e.Ye(1)),V!=t&&(V=t,D=We[V].De,R=We[V].Ie,B=We[V].Ve,I=We[V].Pe),P=n,r)},e.Ze=(e,t,r)=>{let s,i=r,o=0;if(!t||42!=n)return Re;if(3>i)return 0;for(i>f-Fe&&(i=f-Fe,o=r-i),u.set(t.subarray(o,o+i),0),C=i,k=i,p=255&u[0],p=(p<<g^255&u[1])&b,s=0;i-3>=s;s++)p=(p<<g^255&u[s+2])&b,h[s&l]=d[p],d[p]=s;return 0},e.Ye=(r,i)=>{let o,w,m,I,R;if(i>4||0>i)return Re;if(!r.$e||!r.et&&0!==r.We||n==Le&&4!=i)return r.Le=je[4],Re;if(0===r.tt)return r.Le=je[7],-5;var B;if(t=r,I=c,c=i,42==n&&(w=8+(a-8<<4)<<8,m=(V-1&255)>>1,m>3&&(m=3),w|=m<<6,0!==C&&(w|=32),w+=31-w%31,n=He,J((B=w)>>8&255),J(255&B)),0!==e.pending){if(t.Te(),0===t.tt)return c=-1,0}else if(0===t.We&&I>=i&&4!=i)return t.Le=je[7],-5;if(n==Le&&0!==t.We)return r.Le=je[7],-5;if(0!==t.We||0!==_||0!=i&&n!=Le){switch(R=-1,We[V].Re){case 0:R=(e=>{let n,r=65535;for(r>s-5&&(r=s-5);;){if(1>=_){if(ie(),0===_&&0==e)return 0;if(0===_)break}if(C+=_,_=0,n=k+r,(0===C||C>=n)&&(_=C-n,C=n,se(!1),0===t.tt))return 0;if(C-k>=f-Fe&&(se(!1),0===t.tt))return 0}return se(4==e),0===t.tt?4==e?2:0:4==e?3:1})(i);break;case 1:R=(e=>{let n,r=0;for(;;){if(Fe>_){if(ie(),Fe>_&&0==e)return 0;if(0===_)break}if(3>_||(p=(p<<g^255&u[C+2])&b,r=65535&d[p],h[C&l]=d[p],d[p]=C),0===r||(C-r&65535)>f-Fe||2!=P&&(v=oe(r)),3>v)n=ee(0,255&u[C]),_--,C++;else if(n=ee(C-x,v-3),_-=v,v>D||3>_)C+=v,v=0,p=255&u[C],p=(p<<g^255&u[C+1])&b;else{v--;do{C++,p=(p<<g^255&u[C+2])&b,r=65535&d[p],h[C&l]=d[p],d[p]=C}while(0!=--v);C++}if(n&&(se(!1),0===t.tt))return 0}return se(4==e),0===t.tt?4==e?2:0:4==e?3:1})(i);break;case 2:R=(e=>{let n,r,s=0;for(;;){if(Fe>_){if(ie(),Fe>_&&0==e)return 0;if(0===_)break}if(3>_||(p=(p<<g^255&u[C+2])&b,s=65535&d[p],h[C&l]=d[p],d[p]=C),A=v,S=x,v=2,0!==s&&D>A&&f-Fe>=(C-s&65535)&&(2!=P&&(v=oe(s)),5>=v&&(1==P||3==v&&C-x>4096)&&(v=2)),3>A||v>A)if(0!==z){if(n=ee(0,255&u[C-1]),n&&se(!1),C++,_--,0===t.tt)return 0}else z=1,C++,_--;else{r=C+_-3,n=ee(C-1-S,A-3),_-=A-1,A-=2;do{++C>r||(p=(p<<g^255&u[C+2])&b,s=65535&d[p],h[C&l]=d[p],d[p]=C)}while(0!=--A);if(z=0,v=2,C++,n&&(se(!1),0===t.tt))return 0}}return 0!==z&&(n=ee(0,255&u[C-1]),z=0),se(4==e),0===t.tt?4==e?2:0:4==e?3:1})(i)}if(2!=R&&3!=R||(n=Le),0==R||2==R)return 0===t.tt&&(c=-1),0;if(1==R){if(1==i)X(2,3),Y(256,Ue.Ae),$(),9>1+H+10-F&&(X(2,3),Y(256,Ue.Ae),$()),H=7;else if(re(0,0,!1),3==i)for(o=0;y>o;o++)d[o]=0;if(t.Te(),0===t.tt)return c=-1,0}}return 4!=i?0:1}}function Je(){const e=this;e.nt=0,e.rt=0,e.We=0,e.qe=0,e.tt=0,e.Ge=0}function Qe(e){const t=new Je,n=(o=e&&e.chunkSize?e.chunkSize:65536)+5*(r.floor(o/16383)+1);var o;const c=new i(n);let f=e?e.level:-1;void 0===f&&(f=-1),t.He(f),t.$e=c,this.append=(e,r)=>{let o,f,a=0,l=0,u=0;const w=[];if(e.length){t.nt=0,t.et=e,t.We=e.length;do{if(t.rt=0,t.tt=n,o=t.Ye(0),0!=o)throw new s("deflating: "+t.Le);t.rt&&(t.rt==n?w.push(new i(c)):w.push(c.subarray(0,t.rt))),u+=t.rt,r&&t.nt>0&&t.nt!=a&&(r(t.nt),a=t.nt)}while(t.We>0||0===t.tt);return w.length>1?(f=new i(u),w.forEach((e=>{f.set(e,l),l+=e.length}))):f=w[0]?new i(w[0]):new i,f}},this.flush=()=>{let e,r,o=0,f=0;const a=[];do{if(t.rt=0,t.tt=n,e=t.Ye(4),1!=e&&0!=e)throw new s("deflating: "+t.Le);n-t.tt>0&&a.push(c.slice(0,t.rt)),f+=t.rt}while(t.We>0||0===t.tt);return t.Qe(),r=new i(f),a.forEach((e=>{r.set(e,o),o+=e.length})),r}}Je.prototype={He(e,t){const n=this;return n.Fe=new Ge,t||(t=15),n.Fe.He(n,e,t)},Ye(e){const t=this;return t.Fe?t.Fe.Ye(t,e):Re},Qe(){const e=this;if(!e.Fe)return Re;const t=e.Fe.Qe();return e.Fe=null,t},Xe(e,t){const n=this;return n.Fe?n.Fe.Xe(n,e,t):Re},Ze(e,t){const n=this;return n.Fe?n.Fe.Ze(n,e,t):Re},je(e,t,n){const r=this;let s=r.We;return s>n&&(s=n),0===s?0:(r.We-=s,e.set(r.et.subarray(r.nt,r.nt+s),t),r.nt+=s,r.qe+=s,s)},Te(){const e=this;let t=e.Fe.pending;t>e.tt&&(t=e.tt),0!==t&&(e.$e.set(e.Fe.Ue.subarray(e.Fe.Je,e.Fe.Je+t),e.rt),e.rt+=t,e.Fe.Je+=t,e.Ge+=t,e.tt-=t,e.Fe.pending-=t,0===e.Fe.pending&&(e.Fe.Je=0))}};const Xe=-2,Ye=-3,Ze=-5,$e=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],et=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],tt=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],nt=[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],rt=[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,112,112],st=[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],it=[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];function ot(){let e,t,n,r,s,i;function o(e,t,o,c,f,a,l,u,w,h,d){let p,y,m,b,g,k,v,S,z,C,x,_,A,I,D;C=0,g=o;do{n[e[t+C]]++,C++,g--}while(0!==g);if(n[0]==o)return l[0]=-1,u[0]=0,0;for(S=u[0],k=1;15>=k&&0===n[k];k++);for(v=k,k>S&&(S=k),g=15;0!==g&&0===n[g];g--);for(m=g,S>g&&(S=g),u[0]=S,I=1<<k;g>k;k++,I<<=1)if(0>(I-=n[k]))return Ye;if(0>(I-=n[g]))return Ye;for(n[g]+=I,i[1]=k=0,C=1,A=2;0!=--g;)i[A]=k+=n[C],A++,C++;g=0,C=0;do{0!==(k=e[t+C])&&(d[i[k]++]=g),C++}while(++g<o);for(o=i[m],i[0]=g=0,C=0,b=-1,_=-S,s[0]=0,x=0,D=0;m>=v;v++)for(p=n[v];0!=p--;){for(;v>_+S;){if(b++,_+=S,D=m-_,D=D>S?S:D,(y=1<<(k=v-_))>p+1&&(y-=p+1,A=v,D>k))for(;++k<D&&(y<<=1)>n[++A];)y-=n[A];if(D=1<<k,h[0]+D>1440)return Ye;s[b]=x=h[0],h[0]+=D,0!==b?(i[b]=g,r[0]=k,r[1]=S,k=g>>>_-S,r[2]=x-s[b-1]-k,w.set(r,3*(s[b-1]+k))):l[0]=x}for(r[1]=v-_,o>C?d[C]<c?(r[0]=256>d[C]?0:96,r[2]=d[C++]):(r[0]=a[d[C]-c]+16+64,r[2]=f[d[C++]-c]):r[0]=192,y=1<<v-_,k=g>>>_;D>k;k+=y)w.set(r,3*(x+k));for(k=1<<v-1;0!=(g&k);k>>>=1)g^=k;for(g^=k,z=(1<<_)-1;(g&z)!=i[b];)b--,_-=S,z=(1<<_)-1}return 0!==I&&1!=m?Ze:0}function c(o){let c;for(e||(e=[],t=[],n=new f(16),r=[],s=new f(15),i=new f(16)),t.length<o&&(t=[]),c=0;o>c;c++)t[c]=0;for(c=0;16>c;c++)n[c]=0;for(c=0;3>c;c++)r[c]=0;s.set(n.subarray(0,15),0),i.set(n.subarray(0,16),0)}this.st=(n,r,s,i,f)=>{let a;return c(19),e[0]=0,a=o(n,0,19,19,null,null,s,r,i,e,t),a==Ye?f.Le="oversubscribed dynamic bit lengths tree":a!=Ze&&0!==r[0]||(f.Le="incomplete dynamic bit lengths tree",a=Ye),a},this.it=(n,r,s,i,f,a,l,u,w)=>{let h;return c(288),e[0]=0,h=o(s,0,n,257,nt,rt,a,i,u,e,t),0!=h||0===i[0]?(h==Ye?w.Le="oversubscribed literal/length tree":-4!=h&&(w.Le="incomplete literal/length tree",h=Ye),h):(c(288),h=o(s,n,r,0,st,it,l,f,u,e,t),0!=h||0===f[0]&&n>257?(h==Ye?w.Le="oversubscribed distance tree":h==Ze?(w.Le="incomplete distance tree",h=Ye):-4!=h&&(w.Le="empty distance tree with lengths",h=Ye),h):0)}}function ct(){const e=this;let t,n,r,s,i=0,o=0,c=0,f=0,a=0,l=0,u=0,w=0,h=0,d=0;function p(e,t,n,r,s,i,o,c){let f,a,l,u,w,h,d,p,y,m,b,g,k,v,S,z;d=c.nt,p=c.We,w=o.ot,h=o.ct,y=o.write,m=y<o.read?o.read-y-1:o.end-y,b=$e[e],g=$e[t];do{for(;20>h;)p--,w|=(255&c.ft(d++))<<h,h+=8;if(f=w&b,a=n,l=r,z=3*(l+f),0!==(u=a[z]))for(;;){if(w>>=a[z+1],h-=a[z+1],0!=(16&u)){for(u&=15,k=a[z+2]+(w&$e[u]),w>>=u,h-=u;15>h;)p--,w|=(255&c.ft(d++))<<h,h+=8;for(f=w&g,a=s,l=i,z=3*(l+f),u=a[z];;){if(w>>=a[z+1],h-=a[z+1],0!=(16&u)){for(u&=15;u>h;)p--,w|=(255&c.ft(d++))<<h,h+=8;if(v=a[z+2]+(w&$e[u]),w>>=u,h-=u,m-=k,v>y){S=y-v;do{S+=o.end}while(0>S);if(u=o.end-S,k>u){if(k-=u,y-S>0&&u>y-S)do{o.lt[y++]=o.lt[S++]}while(0!=--u);else o.lt.set(o.lt.subarray(S,S+u),y),y+=u,S+=u,u=0;S=0}}else S=y-v,y-S>0&&2>y-S?(o.lt[y++]=o.lt[S++],o.lt[y++]=o.lt[S++],k-=2):(o.lt.set(o.lt.subarray(S,S+2),y),y+=2,S+=2,k-=2);if(y-S>0&&k>y-S)do{o.lt[y++]=o.lt[S++]}while(0!=--k);else o.lt.set(o.lt.subarray(S,S+k),y),y+=k,S+=k,k=0;break}if(0!=(64&u))return c.Le="invalid distance code",k=c.We-p,k=k>h>>3?h>>3:k,p+=k,d-=k,h-=k<<3,o.ot=w,o.ct=h,c.We=p,c.qe+=d-c.nt,c.nt=d,o.write=y,Ye;f+=a[z+2],f+=w&$e[u],z=3*(l+f),u=a[z]}break}if(0!=(64&u))return 0!=(32&u)?(k=c.We-p,k=k>h>>3?h>>3:k,p+=k,d-=k,h-=k<<3,o.ot=w,o.ct=h,c.We=p,c.qe+=d-c.nt,c.nt=d,o.write=y,1):(c.Le="invalid literal/length code",k=c.We-p,k=k>h>>3?h>>3:k,p+=k,d-=k,h-=k<<3,o.ot=w,o.ct=h,c.We=p,c.qe+=d-c.nt,c.nt=d,o.write=y,Ye);if(f+=a[z+2],f+=w&$e[u],z=3*(l+f),0===(u=a[z])){w>>=a[z+1],h-=a[z+1],o.lt[y++]=a[z+2],m--;break}}else w>>=a[z+1],h-=a[z+1],o.lt[y++]=a[z+2],m--}while(m>=258&&p>=10);return k=c.We-p,k=k>h>>3?h>>3:k,p+=k,d-=k,h-=k<<3,o.ot=w,o.ct=h,c.We=p,c.qe+=d-c.nt,c.nt=d,o.write=y,0}e.init=(e,i,o,c,f,a)=>{t=0,u=e,w=i,r=o,h=c,s=f,d=a,n=null},e.ut=(e,y,m)=>{let b,g,k,v,S,z,C,x=0,_=0,A=0;for(A=y.nt,v=y.We,x=e.ot,_=e.ct,S=e.write,z=S<e.read?e.read-S-1:e.end-S;;)switch(t){case 0:if(z>=258&&v>=10&&(e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,m=p(u,w,r,h,s,d,e,y),A=y.nt,v=y.We,x=e.ot,_=e.ct,S=e.write,z=S<e.read?e.read-S-1:e.end-S,0!=m)){t=1==m?7:9;break}c=u,n=r,o=h,t=1;case 1:for(b=c;b>_;){if(0===v)return e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);m=0,v--,x|=(255&y.ft(A++))<<_,_+=8}if(g=3*(o+(x&$e[b])),x>>>=n[g+1],_-=n[g+1],k=n[g],0===k){f=n[g+2],t=6;break}if(0!=(16&k)){a=15&k,i=n[g+2],t=2;break}if(0==(64&k)){c=k,o=g/3+n[g+2];break}if(0!=(32&k)){t=7;break}return t=9,y.Le="invalid literal/length code",m=Ye,e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);case 2:for(b=a;b>_;){if(0===v)return e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);m=0,v--,x|=(255&y.ft(A++))<<_,_+=8}i+=x&$e[b],x>>=b,_-=b,c=w,n=s,o=d,t=3;case 3:for(b=c;b>_;){if(0===v)return e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);m=0,v--,x|=(255&y.ft(A++))<<_,_+=8}if(g=3*(o+(x&$e[b])),x>>=n[g+1],_-=n[g+1],k=n[g],0!=(16&k)){a=15&k,l=n[g+2],t=4;break}if(0==(64&k)){c=k,o=g/3+n[g+2];break}return t=9,y.Le="invalid distance code",m=Ye,e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);case 4:for(b=a;b>_;){if(0===v)return e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);m=0,v--,x|=(255&y.ft(A++))<<_,_+=8}l+=x&$e[b],x>>=b,_-=b,t=5;case 5:for(C=S-l;0>C;)C+=e.end;for(;0!==i;){if(0===z&&(S==e.end&&0!==e.read&&(S=0,z=S<e.read?e.read-S-1:e.end-S),0===z&&(e.write=S,m=e.wt(y,m),S=e.write,z=S<e.read?e.read-S-1:e.end-S,S==e.end&&0!==e.read&&(S=0,z=S<e.read?e.read-S-1:e.end-S),0===z)))return e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);e.lt[S++]=e.lt[C++],z--,C==e.end&&(C=0),i--}t=0;break;case 6:if(0===z&&(S==e.end&&0!==e.read&&(S=0,z=S<e.read?e.read-S-1:e.end-S),0===z&&(e.write=S,m=e.wt(y,m),S=e.write,z=S<e.read?e.read-S-1:e.end-S,S==e.end&&0!==e.read&&(S=0,z=S<e.read?e.read-S-1:e.end-S),0===z)))return e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);m=0,e.lt[S++]=f,z--,t=0;break;case 7:if(_>7&&(_-=8,v++,A--),e.write=S,m=e.wt(y,m),S=e.write,z=S<e.read?e.read-S-1:e.end-S,e.read!=e.write)return e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);t=8;case 8:return m=1,e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);case 9:return m=Ye,e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);default:return m=Xe,e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m)}},e.ht=()=>{}}ot.dt=(e,t,n,r)=>(e[0]=9,t[0]=5,n[0]=et,r[0]=tt,0);const ft=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];function at(e,t){const n=this;let r,s=0,o=0,c=0,a=0;const l=[0],u=[0],w=new ct;let h=0,d=new f(4320);const p=new ot;n.ct=0,n.ot=0,n.lt=new i(t),n.end=t,n.read=0,n.write=0,n.reset=(e,t)=>{t&&(t[0]=0),6==s&&w.ht(e),s=0,n.ct=0,n.ot=0,n.read=n.write=0},n.reset(e,null),n.wt=(e,t)=>{let r,s,i;return s=e.rt,i=n.read,r=(i>n.write?n.end:n.write)-i,r>e.tt&&(r=e.tt),0!==r&&t==Ze&&(t=0),e.tt-=r,e.Ge+=r,e.$e.set(n.lt.subarray(i,i+r),s),s+=r,i+=r,i==n.end&&(i=0,n.write==n.end&&(n.write=0),r=n.write-i,r>e.tt&&(r=e.tt),0!==r&&t==Ze&&(t=0),e.tt-=r,e.Ge+=r,e.$e.set(n.lt.subarray(i,i+r),s),s+=r,i+=r),e.rt=s,n.read=i,t},n.ut=(e,t)=>{let i,f,y,m,b,g,k,v;for(m=e.nt,b=e.We,f=n.ot,y=n.ct,g=n.write,k=g<n.read?n.read-g-1:n.end-g;;){let S,z,C,x,_,A,I,D;switch(s){case 0:for(;3>y;){if(0===b)return n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);t=0,b--,f|=(255&e.ft(m++))<<y,y+=8}switch(i=7&f,h=1&i,i>>>1){case 0:f>>>=3,y-=3,i=7&y,f>>>=i,y-=i,s=1;break;case 1:S=[],z=[],C=[[]],x=[[]],ot.dt(S,z,C,x),w.init(S[0],z[0],C[0],0,x[0],0),f>>>=3,y-=3,s=6;break;case 2:f>>>=3,y-=3,s=3;break;case 3:return f>>>=3,y-=3,s=9,e.Le="invalid block type",t=Ye,n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t)}break;case 1:for(;32>y;){if(0===b)return n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);t=0,b--,f|=(255&e.ft(m++))<<y,y+=8}if((~f>>>16&65535)!=(65535&f))return s=9,e.Le="invalid stored block lengths",t=Ye,n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);o=65535&f,f=y=0,s=0!==o?2:0!==h?7:0;break;case 2:if(0===b)return n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);if(0===k&&(g==n.end&&0!==n.read&&(g=0,k=g<n.read?n.read-g-1:n.end-g),0===k&&(n.write=g,t=n.wt(e,t),g=n.write,k=g<n.read?n.read-g-1:n.end-g,g==n.end&&0!==n.read&&(g=0,k=g<n.read?n.read-g-1:n.end-g),0===k)))return n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);if(t=0,i=o,i>b&&(i=b),i>k&&(i=k),n.lt.set(e.je(m,i),g),m+=i,b-=i,g+=i,k-=i,0!=(o-=i))break;s=0!==h?7:0;break;case 3:for(;14>y;){if(0===b)return n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);t=0,b--,f|=(255&e.ft(m++))<<y,y+=8}if(c=i=16383&f,(31&i)>29||(i>>5&31)>29)return s=9,e.Le="too many length or distance symbols",t=Ye,n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);if(i=258+(31&i)+(i>>5&31),!r||r.length<i)r=[];else for(v=0;i>v;v++)r[v]=0;f>>>=14,y-=14,a=0,s=4;case 4:for(;4+(c>>>10)>a;){for(;3>y;){if(0===b)return n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);t=0,b--,f|=(255&e.ft(m++))<<y,y+=8}r[ft[a++]]=7&f,f>>>=3,y-=3}for(;19>a;)r[ft[a++]]=0;if(l[0]=7,i=p.st(r,l,u,d,e),0!=i)return(t=i)==Ye&&(r=null,s=9),n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);a=0,s=5;case 5:for(;i=c,258+(31&i)+(i>>5&31)>a;){let o,w;for(i=l[0];i>y;){if(0===b)return n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);t=0,b--,f|=(255&e.ft(m++))<<y,y+=8}if(i=d[3*(u[0]+(f&$e[i]))+1],w=d[3*(u[0]+(f&$e[i]))+2],16>w)f>>>=i,y-=i,r[a++]=w;else{for(v=18==w?7:w-14,o=18==w?11:3;i+v>y;){if(0===b)return n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);t=0,b--,f|=(255&e.ft(m++))<<y,y+=8}if(f>>>=i,y-=i,o+=f&$e[v],f>>>=v,y-=v,v=a,i=c,v+o>258+(31&i)+(i>>5&31)||16==w&&1>v)return r=null,s=9,e.Le="invalid bit length repeat",t=Ye,n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);w=16==w?r[v-1]:0;do{r[v++]=w}while(0!=--o);a=v}}if(u[0]=-1,_=[],A=[],I=[],D=[],_[0]=9,A[0]=6,i=c,i=p.it(257+(31&i),1+(i>>5&31),r,_,A,I,D,d,e),0!=i)return i==Ye&&(r=null,s=9),t=i,n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);w.init(_[0],A[0],d,I[0],d,D[0]),s=6;case 6:if(n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,1!=(t=w.ut(n,e,t)))return n.wt(e,t);if(t=0,w.ht(e),m=e.nt,b=e.We,f=n.ot,y=n.ct,g=n.write,k=g<n.read?n.read-g-1:n.end-g,0===h){s=0;break}s=7;case 7:if(n.write=g,t=n.wt(e,t),g=n.write,k=g<n.read?n.read-g-1:n.end-g,n.read!=n.write)return n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);s=8;case 8:return t=1,n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);case 9:return t=Ye,n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);default:return t=Xe,n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t)}}},n.ht=e=>{n.reset(e,null),n.lt=null,d=null},n.yt=(e,t,r)=>{n.lt.set(e.subarray(t,t+r),0),n.read=n.write=r},n.bt=()=>1==s?1:0}const lt=13,ut=[0,0,255,255];function wt(){const e=this;function t(e){return e&&e.gt?(e.qe=e.Ge=0,e.Le=null,e.gt.mode=7,e.gt.kt.reset(e,null),0):Xe}e.mode=0,e.method=0,e.vt=[0],e.St=0,e.marker=0,e.zt=0,e.Ct=t=>(e.kt&&e.kt.ht(t),e.kt=null,0),e.xt=(n,r)=>(n.Le=null,e.kt=null,8>r||r>15?(e.Ct(n),Xe):(e.zt=r,n.gt.kt=new at(n,1<<r),t(n),0)),e._t=(e,t)=>{let n,r;if(!e||!e.gt||!e.et)return Xe;const s=e.gt;for(t=4==t?Ze:0,n=Ze;;)switch(s.mode){case 0:if(0===e.We)return n;if(n=t,e.We--,e.qe++,8!=(15&(s.method=e.ft(e.nt++)))){s.mode=lt,e.Le="unknown compression method",s.marker=5;break}if(8+(s.method>>4)>s.zt){s.mode=lt,e.Le="invalid win size",s.marker=5;break}s.mode=1;case 1:if(0===e.We)return n;if(n=t,e.We--,e.qe++,r=255&e.ft(e.nt++),((s.method<<8)+r)%31!=0){s.mode=lt,e.Le="incorrect header check",s.marker=5;break}if(0==(32&r)){s.mode=7;break}s.mode=2;case 2:if(0===e.We)return n;n=t,e.We--,e.qe++,s.St=(255&e.ft(e.nt++))<<24&4278190080,s.mode=3;case 3:if(0===e.We)return n;n=t,e.We--,e.qe++,s.St+=(255&e.ft(e.nt++))<<16&16711680,s.mode=4;case 4:if(0===e.We)return n;n=t,e.We--,e.qe++,s.St+=(255&e.ft(e.nt++))<<8&65280,s.mode=5;case 5:return 0===e.We?n:(n=t,e.We--,e.qe++,s.St+=255&e.ft(e.nt++),s.mode=6,2);case 6:return s.mode=lt,e.Le="need dictionary",s.marker=0,Xe;case 7:if(n=s.kt.ut(e,n),n==Ye){s.mode=lt,s.marker=0;break}if(0==n&&(n=t),1!=n)return n;n=t,s.kt.reset(e,s.vt),s.mode=12;case 12:return e.We=0,1;case lt:return Ye;default:return Xe}},e.At=(e,t,n)=>{let r=0,s=n;if(!e||!e.gt||6!=e.gt.mode)return Xe;const i=e.gt;return s<1<<i.zt||(s=(1<<i.zt)-1,r=n-s),i.kt.yt(t,r,s),i.mode=7,0},e.It=e=>{let n,r,s,i,o;if(!e||!e.gt)return Xe;const c=e.gt;if(c.mode!=lt&&(c.mode=lt,c.marker=0),0===(n=e.We))return Ze;for(r=e.nt,s=c.marker;0!==n&&4>s;)e.ft(r)==ut[s]?s++:s=0!==e.ft(r)?0:4-s,r++,n--;return e.qe+=r-e.nt,e.nt=r,e.We=n,c.marker=s,4!=s?Ye:(i=e.qe,o=e.Ge,t(e),e.qe=i,e.Ge=o,c.mode=7,0)},e.Dt=e=>e&&e.gt&&e.gt.kt?e.gt.kt.bt():Xe}function ht(){}function dt(e){const t=new ht,n=e&&e.chunkSize?r.floor(2*e.chunkSize):131072,o=new i(n);let c=!1;t.xt(),t.$e=o,this.append=(e,r)=>{const f=[];let a,l,u=0,w=0,h=0;if(0!==e.length){t.nt=0,t.et=e,t.We=e.length;do{if(t.rt=0,t.tt=n,0!==t.We||c||(t.nt=0,c=!0),a=t._t(0),c&&a===Ze){if(0!==t.We)throw new s("inflating: bad input")}else if(0!==a&&1!==a)throw new s("inflating: "+t.Le);if((c||1===a)&&t.We===e.length)throw new s("inflating: bad input");t.rt&&(t.rt===n?f.push(new i(o)):f.push(o.subarray(0,t.rt))),h+=t.rt,r&&t.nt>0&&t.nt!=u&&(r(t.nt),u=t.nt)}while(t.We>0||0===t.tt);return f.length>1?(l=new i(h),f.forEach((e=>{l.set(e,w),w+=e.length}))):l=f[0]?new i(f[0]):new i,l}},this.flush=()=>{t.Ct()}}ht.prototype={xt(e){const t=this;return t.gt=new wt,e||(e=15),t.gt.xt(t,e)},_t(e){const t=this;return t.gt?t.gt._t(t,e):Xe},Ct(){const e=this;if(!e.gt)return Xe;const t=e.gt.Ct(e);return e.gt=null,t},It(){const e=this;return e.gt?e.gt.It(e):Xe},At(e,t){const n=this;return n.gt?n.gt.At(n,e,t):Xe},ft(e){return this.et[e]},je(e,t){return this.et.subarray(e,e+t)}},self.initCodec=()=>{self.Deflate=Qe,self.Inflate=dt}; +`],{type:"text/javascript"}));n({workerScripts:{inflate:[t],deflate:[t]}})}Il(Ni);var K=Kt.Platform.isDesktopApp?window.require("node:original-fs"):null,Pe=Kt.Platform.isDesktopApp?K.promises:null,Xt=Kt.Platform.isDesktopApp?window.require("node:os"):null,q=Kt.Platform.isDesktopApp?window.require("node:path"):null,Jn=Kt.Platform.isDesktopApp?window.require("node:url"):null,Fl=Kt.Platform.isDesktopApp?window.require("node:zlib"):null;function Zi(n,t=0,e=n.byteLength){return n.buffer.slice(n.byteOffset+t,n.byteOffset+t+e)}var Me=class{constructor(t){this.type="file";this.filepath=t;let e=this.name=q.basename(t);this.fullpath=e;let i=q.extname(e);this.extension=i.substring(1).toLowerCase(),this.basename=q.basename(e,i)}async readText(){return Pe.readFile(this.filepath,"utf8")}async read(){let t=await Pe.readFile(this.filepath);return Zi(t)}async readZip(t){let e=null;try{e=await Pe.open(this.filepath,"r");let i=await e.stat();return await t(new Vt(new No(e,i.size)))}finally{await(e==null?void 0:e.close())}}createReadStream(){return K.createReadStream(this.filepath)}toString(){return this.filepath}},ut=class{constructor(t){this.type="folder";this.filepath=t,this.name=q.basename(t)}async list(){let{filepath:t}=this,e=await Pe.readdir(t,{withFileTypes:!0}),i=[];for(let r of e)r.isFile()?i.push(new Me(q.join(t,r.name))):r.isDirectory()&&i.push(new ut(q.join(t,r.name)));return i}toString(){return this.filepath}},Wi=class{constructor(t){this.type="file";this.file=t;let e=this.name=t.name;this.fullpath=e;let{basename:i,extension:r}=re(e);this.basename=i,this.extension=r}readText(){let{file:t}=this;return t.text?t.text():new Promise((e,i)=>{let r=new FileReader;r.addEventListener("load",()=>e(r.result)),r.addEventListener("error",i),r.readAsText(this.file)})}async read(){let{file:t}=this;return t.arrayBuffer?t.arrayBuffer():new Promise((e,i)=>{let r=new FileReader;r.addEventListener("load",()=>e(r.result)),r.addEventListener("error",i),r.readAsArrayBuffer(this.file)})}async readZip(t){return t(new Vt(new St(this.file)))}toString(){return this.file.toString()}};async function So(n,t){let e=[];for(let i of n)try{i.type==="folder"?e.push(...await So(await i.list(),t)):i.type==="file"&&(!t||t(i))&&e.push(i)}catch(r){console.log("Skipping path: ",i.name,r)}return e}function re(n){let t=Math.max(n.lastIndexOf("/"),n.lastIndexOf("\\")),e=n,i="";t>=0&&(e=n.substring(t+1),i=n.substring(0,t));let[r,o]=Ro(e);return{parent:i,name:e,basename:r,extension:o}}function Ro(n){let t=n.lastIndexOf("."),e=n,i="";return t>0&&(e=n.substring(0,t),i=n.substring(t+1).toLowerCase()),[e,i]}var No=class extends yn{constructor(e,i){super(e);this.fd=e,this.size=i}async readUint8Array(e,i){let r=Buffer.alloc(i),o=await this.fd.read(r,0,i,e);return new Uint8Array(Zi(r,0,o.bytesRead))}};var Ll=require("obsidian"),Qm=/[\/\?<>\\:\*\|"]/g,eh=/[\x00-\x1f\x80-\x9f]/g,th=/^\.+$/,nh=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,ih=/[\. ]+$/,rh=/^\./,oh=/[\[\]#|^]/g;function Ze(n){return n.replace(Qm,"").replace(eh,"").replace(th,"").replace(nh,"").replace(ih,"").replace(rh,"").replace(oh,"")}function xn(n){let t=[];for(let e=0;e<n;e++)t.push((Math.random()*16|0).toString(16));return t.join("")}function ft(n){return new DOMParser().parseFromString(n,"text/html").documentElement}function ah(n){return n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength)}function Oo(n){return ah(new TextEncoder().encode(n))}function Yi(n){return Object.isEmpty(n)?"":`--- +`+(0,Ll.stringifyYaml)(n)+`--- +`}function Qn(n,t,e="..."){return n.length<t?n:n.substring(0,t)+e}var Re=require("obsidian");var Pl=300,ce=class{constructor(t,e){this.files=[];this.outputLocation="";this.notAvailable=!1;this.outputFolder=null;this.app=t,this.vault=t.vault,this.modal=e,this.init()}registerAuthCallback(t){this.modal.plugin.registerAuthCallback(t)}addFileChooserSetting(t,e,i=!1){let r=new Re.Setting(this.modal.contentEl).setName("Files to import").setDesc("Pick the files that you want to import.").addButton(a=>a.setButtonText(i?"Choose files":"Choose file").onClick(async()=>{if(Re.Platform.isDesktopApp){let s=["openFile","dontAddToRecent"];i&&s.push("multiSelections");let l=window.electron.remote.dialog.showOpenDialogSync({title:"Pick files to import",properties:s,filters:[{name:t,extensions:e}]});l&&l.length>0&&(this.files=l.map(c=>new Me(c)),o())}else{let s=createEl("input");s.type="file",s.accept=e.map(l=>"."+l.toLowerCase()).join(","),s.addEventListener("change",()=>{if(!s.files)return;let l=Array.from(s.files);l.length>0&&(this.files=l.map(c=>new Wi(c)).filter(c=>e.contains(c.extension)),o())}),s.click()}}));i&&Re.Platform.isDesktopApp&&r.addButton(a=>a.setButtonText("Choose folders").onClick(async()=>{if(Re.Platform.isDesktopApp){let s=window.electron.remote.dialog.showOpenDialogSync({title:"Pick folders to import",properties:["openDirectory","multiSelections","dontAddToRecent"]});if(s&&s.length>0){r.setDesc("Reading folders...");let l=s.map(c=>new ut(c));this.files=await So(l,c=>e.contains(c.extension)),o()}}}));let o=()=>{let a=document.createDocumentFragment(),s=this.files.length,l=this.files.map(c=>c.name).join(", ");l.length>Pl&&(l=l.substring(0,Pl)+"..."),a.createEl("span",{text:`These ${s} files will be imported: `}),a.createEl("br"),a.createEl("span",{cls:"u-pop",text:l}),r.setDesc(a)}}addOutputLocationSetting(t){this.outputLocation=t,new Re.Setting(this.modal.contentEl).setName("Output folder").setDesc("Choose a folder in the vault to put the imported files. Leave empty to output to vault root.").addText(e=>e.setValue(t).onChange(i=>{this.outputLocation=i,this.outputFolder=null}))}async getOutputFolder(){if(this.outputFolder)return this.outputFolder;let{vault:t}=this.app,e=this.outputLocation;e===""&&(e="/");let i=t.getAbstractFileByPath(e);return(i===null||!(i instanceof Re.TFolder))&&(await t.createFolder(e),i=t.getAbstractFileByPath(e)),i instanceof Re.TFolder?(this.outputFolder=i,i):null}async getAvailablePathForAttachment(t,e){let i=await this.getOutputFolder(),r=i?{parent:i}:null,{basename:o,extension:a}=re(t),s=await this.vault.getAvailablePathForAttachments(o,a,r),l=re(s),c=l.extension?"."+l.extension:"."+a,p=1,m=s;for(;e.includes(m)||this.vault.getAbstractFileByPath(m);)m=q.join(l.parent,`${l.name} ${p}${c}`),p++;return m}async createFolders(t){let e=t.split("/").map(o=>o.replace(/^\.+/,"")).join("/"),i=(0,Re.normalizePath)(e),r=this.vault.getAbstractFileByPathInsensitive(i);if(r&&r instanceof Re.TFolder)return r;if(await this.vault.createFolder(i),r=this.vault.getAbstractFileByPathInsensitive(i),!(r instanceof Re.TFolder))throw new Error(`Failed to create folder at "${t}"`);return r}async saveAsMarkdownFile(t,e,i){let r=Ze(e);return await this.app.fileManager.createNewMarkdownFile(t,r,i)}};var Zp=rs(Lp());var ka=require("obsidian");var Pp=n=>{let e=gr.execSync(`${n} --version`).toString().toString().match(/(\d+)\.(\d+).(\d+)/);return(e==null?void 0:e[1])>3||(e==null?void 0:e[2])>32},Mp=n=>{let t=[];if(!n)return t;let e=[],i=0,r=-1,o={};for(;i<n.length;){let a="";if(n[i]==="'")for(i++;i<n.length;)if(n[i]!=="'"){let s=n.indexOf("'",i);a+=n.substring(i,s),i=s}else if(n[i+1]==="'")a+=n[i],i+=2;else{i++;break}else if(n[i]==="N")a=null,i+=4;else{let s=Math.min(...[n.indexOf(",",i),n.indexOf(` +`,i)].filter(l=>l>0),n.length-1);a=parseFloat(n.substring(i,s)),i=s}r==-1?e.push(a):(o[e[r]]=a,r++),(n[i]==` +`||e.length<r)&&(r!==-1&&t.push(o),r=0,o={}),i++}return t};function $p(n){for(var t=n[0],e=1,i=arguments.length;e<i;e++)t+=arguments[e]+n[e];return t}var{isArray:bg}=Array,yr=class extends String{},Bp=(n,...t)=>{let e=[n[0]],i=[e];for(let r=0;r<t.length;r++)t[r]instanceof yr?e[e.length-1]+=t[r]+n[r+1]:(bg(t[r])?(e.push(...t[r].slice(1).map(o=>",")),i.push(...t[r].length?t[r]:[""])):i.push(t[r]),e.push(n[r+1]));return i},Up=n=>new yr(n);var ui=(n,t)=>{let e="SQLITE_ERROR",i=new Error(e+": "+t);return i.code=e,n(i),""},jp=(...n)=>Up($p(...n)),{from:xg}=Array,wg=/'/g,vg=n=>n.toString(16).padStart(2,"0"),Eg=n=>`x'${xg(n,vg).join("")}'`,_g=n=>{switch(typeof n){case"string":return"'"+n.replace(wg,"''")+"'";case"number":if(!isFinite(n))return;case"boolean":return+n;case"object":case"undefined":switch(!0){case!n:return"NULL";case n instanceof Date:return"'"+n.toISOString()+"'";case n instanceof Buffer:case n instanceof ArrayBuffer:n=new Uint8Array(n);case n instanceof Uint8Array:case n instanceof Uint8ClampedArray:return Eg(n)}}},_a=(n,t)=>{let[e,...i]=Bp(...t),r=[e[0]];for(let a=0;a<i.length;a++){let s=_g(i[a]);if(s===void 0)return ui(n,"incompatible "+typeof s+"value");r.push(s,e[a+1])}let o=r.join("").trim();return o.length?o:ui(n,"empty query")};var Ta=ka.Platform.isDesktopApp?window.require("node:crypto"):null,gr=ka.Platform.isDesktopApp?window.require("node:child_process"):null,Na=Ta==null?void 0:Ta.randomUUID(),Tg=`[{"_":"${Na}"}] +`,Ag=`'_' +'${Na}' +`,{isArray:kg}=Array,{parse:qp}=JSON,{defineProperty:Ng}=Object,Sg=()=>{},Rg=(n,t,e,i,r,o)=>{let a=[],{stdout:s,stderr:l}=gr.spawn(i,r,o).on("close",p=>{if(c||p!==0){p!==0&&ui(t,"busy DB or query too slow");return}let m=a.join("").trim();if(e==="query")n(m);else{let y=qp(m||"[]");n(e==="get"&&kg(y)?y.shift():y)}});s.on("data",p=>{a.push(p)});let c=!1;l.on("data",p=>{c=!0,ui(t,"".trim.call(p))})},Og=(n,t,e)=>{let i=Pp(n),r=i?Tg:Ag,{stdin:o,stdout:a,stderr:s}=gr.spawn(n,t);i?o.write(`.mode json +`):o.write(`.mode quote +.headers on +`),e&&o.write(`.timeout ${e} +`);let l=Promise.resolve();return(c,p,m,y,w)=>{m==="close"?(o.write(`.quit +`),l=null):l&&(l=l.then(()=>new Promise(E=>{let d="",f=_=>{d+=_;let A=!1;for(;d.endsWith(r);)A=!0,d=d.slice(0,-r.length);if(A){for(v();d.startsWith(r);)d=d.slice(r.length);if(m==="query")c(d);else{let D=i?qp(d||"[]"):Mp(d);c(m==="get"?D.shift():D)}}},g=_=>{v(),p(new Error(_))},v=()=>{E(),a.removeListener("data",f),s.removeListener("data",g)};a.on("data",f),s.once("data",g),o.write(`${w[w.length-1]}; +`),o.write(`SELECT '${Na}' as _; +`)})))}},Aa=(n,t,e,i,r)=>(...o)=>new Promise((a,s)=>{let l=_a(s,o);l.length&&(n==="get"&&/^SELECT\s+/i.test(l)&&!/\s+LIMIT\s+\d+$/i.test(l)&&(l+=" LIMIT 1"),e(a,s,n,t,i.concat(l),r))}),Hp="";function Sa(n,t={}){n===":memory:"&&(n=Hp||(Hp=q.join(Xt.tmpdir(),randomUUID())));let e=t.timeout||0,i=t.bin||"sqlite3",r=[n,"-bail"],o={timeout:e};t.readonly&&r.push("-readonly"),e&&r.push("-cmd",".timeout "+e);let a=r.concat("-json"),s=t.exec||(t.persistent?Og(i,r,e):Rg);return{transaction(){let l=[];return Ng((...c)=>{l.push(c)},"commit",{value(){return new Promise((c,p)=>{let m=["BEGIN TRANSACTION"];for(let y of l){let w=_a(p,y);if(!w.length)return;m.push(w)}m.push("COMMIT"),s(c,p,"query",i,r.concat(m.join(";")),o)})}})},query:Aa("query",i,s,r,o),get:Aa("get",i,s,a,o),all:Aa("all",i,s,a,o),close:t.persistent?()=>s(null,null,"close"):Sg,raw:jp}}var Ra="Library/Group Containers/group.com.apple.notes",Wp="NoteStore.sqlite",Dg=978307200,br=class extends ce{constructor(){super(...arguments);this.owners={};this.resolvedAccounts={};this.resolvedFiles={};this.resolvedFolders={};this.multiAccount=!1;this.noteCount=0;this.parsedNotes=0;this.omitFirstLine=!0;this.importTrashed=!1;this.includeHandwriting=!1;this.trashFolders=[]}init(){if(!st.Platform.isMacOS||!st.Platform.isDesktop){this.modal.contentEl.createEl("p",{text:"Due to platform limitations, Apple Notes cannot be exported from this device. Open your vault on a Mac to export from Apple Notes."}),this.notAvailable=!0;return}this.addOutputLocationSetting("Apple Notes"),new st.Setting(this.modal.contentEl).setName("Import recently deleted notes").setDesc('Import notes in the "Recently Deleted" folder. Unlike in Apple Notes, they will not be automatically removed after a set amount of time.').addToggle(e=>e.setValue(!1).onChange(async i=>this.importTrashed=i)),new st.Setting(this.modal.contentEl).setName("Omit first line").setDesc("Don't include the first line in the text, since Apple Notes uses it as the title. It will still be used as the note name.").addToggle(e=>e.setValue(!0).onChange(async i=>this.omitFirstLine=i)),new st.Setting(this.modal.contentEl).setName("Include handwriting text").setDesc("When Apple Notes has detected handwriting in drawings, include it as text before the drawing.").addToggle(e=>e.setValue(!1).onChange(async i=>this.includeHandwriting=i))}async getNotesDatabase(){let e=q.join(Xt.homedir(),Ra),i=window.electron.remote.dialog.showOpenDialogSync({defaultPath:e,properties:["openDirectory"],message:'Select the "group.com.apple.notes" folder to allow Obsidian to read Apple Notes data.'});if(!(i!=null&&i.includes(e)))return new st.Notice("Data import failed. Ensure you have selected the correct Apple Notes data folder."),null;let r=q.join(e,Wp),o=q.join(Xt.tmpdir(),Wp);return await Pe.copyFile(r,o),await Pe.copyFile(r+"-shm",o+"-shm"),await Pe.copyFile(r+"-wal",o+"-wal"),new Sa(o,{readonly:!0,persistent:!0})}async import(e){if(this.ctx=e,this.protobufRoot=Zp.Root.fromJSON(ls),this.rootFolder=await this.getOutputFolder(),!this.rootFolder){new st.Notice("Please select a location to export to.");return}if(this.database=await this.getNotesDatabase(),!this.database)return;this.keys=Object.fromEntries((await this.database.all`SELECT z_ent, z_name FROM z_primarykey`).map(a=>[a.Z_NAME,a.Z_ENT]));let i=await this.database.all` + SELECT z_pk FROM ziccloudsyncingobject WHERE z_ent = ${this.keys.ICAccount} + `,r=await this.database.all` + SELECT z_pk, ztitle2 FROM ziccloudsyncingobject WHERE z_ent = ${this.keys.ICFolder} + `;for(let a of i)await this.resolveAccount(a.Z_PK);for(let a of r)try{await this.resolveFolder(a.Z_PK)}catch(s){this.ctx.reportFailed(a.ZTITLE2,s==null?void 0:s.message),console.error(s)}let o=await this.database.all` + SELECT + z_pk, zfolder, ztitle1 FROM ziccloudsyncingobject + WHERE + z_ent = ${this.keys.ICNote} + AND ztitle1 IS NOT NULL + AND zfolder NOT IN (${this.trashFolders}) + `;this.noteCount=o.length;for(let a of o)try{await this.resolveNote(a.Z_PK)}catch(s){this.ctx.reportFailed(a.ZTITLE1,s==null?void 0:s.message),console.error(s)}this.database.close()}async resolveAccount(e){!this.multiAccount&&Object.keys(this.resolvedAccounts).length&&(this.multiAccount=!0);let i=await this.database.get` + SELECT zname, zidentifier FROM ziccloudsyncingobject + WHERE z_ent = ${this.keys.ICAccount} AND z_pk = ${e} + `;this.resolvedAccounts[e]={name:i.ZNAME,uuid:i.ZIDENTIFIER,path:q.join(Xt.homedir(),Ra,"Accounts",i.ZIDENTIFIER)}}async resolveFolder(e){var a;if(e in this.resolvedFiles)return this.resolvedFolders[e];let i=await this.database.get` + SELECT ztitle2, zparent, zidentifier, zfoldertype, zowner + FROM ziccloudsyncingobject + WHERE z_ent = ${this.keys.ICFolder} AND z_pk = ${e} + `,r;if(i.ZFOLDERTYPE==3)return null;if(!this.importTrashed&&i.ZFOLDERTYPE==1)return this.trashFolders.push(e),null;if(i.ZPARENT!==null)r=((a=await this.resolveFolder(i.ZPARENT))==null?void 0:a.path)+"/";else if(this.multiAccount){let s=this.resolvedAccounts[i.ZOWNER].name;r=`${this.rootFolder.path}/${s}/`}else r=`${this.rootFolder.path}/`;i.ZIDENTIFIER.startsWith("DefaultFolder")||(r+=Ze(i.ZTITLE2));let o=await this.createFolders(r);return this.resolvedFolders[e]=o,this.owners[e]=i.ZOWNER,o}async resolveNote(e){if(e in this.resolvedFiles)return this.resolvedFiles[e];let i=await this.database.get` + SELECT + nd.z_pk, hex(nd.zdata) as zhexdata, zcso.ztitle1, zfolder, + zcreationdate1, zcreationdate2, zcreationdate3, zmodificationdate1, zispasswordprotected + FROM + zicnotedata AS nd, + (SELECT + *, NULL AS zcreationdate3, NULL AS zcreationdate2, + NULL AS zispasswordprotected FROM ziccloudsyncingobject + ) AS zcso + WHERE + zcso.z_pk = nd.znote + AND zcso.z_pk = ${e} + `;if(i.ZISPASSWORDPROTECTED)return this.ctx.reportSkipped(i.ZTITLE1,"note is password protected"),null;let r=this.resolvedFolders[i.ZFOLDER]||this.rootFolder,o=`${i.ZTITLE1}.md`,a=await this.saveAsMarkdownFile(r,o,"");this.ctx.status(`Importing note ${o}`),this.resolvedFiles[e]=a,this.owners[e]=this.owners[i.ZFOLDER];let s=this.decodeData(i.zhexdata,Wt);return this.vault.modify(a,await s.format(),{ctime:this.decodeTime(i.ZCREATIONDATE3||i.ZCREATIONDATE2||i.ZCREATIONDATE1),mtime:this.decodeTime(i.ZMODIFICATIONDATE1)}),this.parsedNotes++,this.ctx.reportProgress(this.parsedNotes,this.noteCount),a}async resolveAttachment(e,i){if(e in this.resolvedFiles)return this.resolvedFiles[e];let r,o,a,s,l;switch(i){case"com.apple.paper.doc.scan":s=await this.database.get` + SELECT + zidentifier, zfallbackpdfgeneration, zcreationdate, zmodificationdate, znote + FROM + (SELECT *, NULL AS zfallbackpdfgeneration FROM ziccloudsyncingobject) + WHERE + z_ent = ${this.keys.ICAttachment} + AND z_pk = ${e} + `,r=q.join("FallbackPDFs",s.ZIDENTIFIER,s.ZFALLBACKPDFGENERATION||"","FallbackPDF.pdf"),o="Scan",a="pdf";break;case"com.apple.notes.gallery":s=await this.database.get` + SELECT + zidentifier, zsizeheight, zsizewidth, zcreationdate, zmodificationdate, znote + FROM ziccloudsyncingobject + WHERE + z_ent = ${this.keys.ICAttachment} + AND z_pk = ${e} + `,r=q.join("Previews",`${s.ZIDENTIFIER}-1-${s.ZSIZEWIDTH}x${s.ZSIZEHEIGHT}-0.jpeg`),o="Scan Page",a="jpg";break;case"com.apple.paper":s=await this.database.get` + SELECT + zidentifier, zfallbackimagegeneration, zcreationdate, zmodificationdate, + znote, zhandwritingsummary + FROM + (SELECT *, NULL AS zfallbackimagegeneration FROM ziccloudsyncingobject) + WHERE + z_ent = ${this.keys.ICAttachment} + AND z_pk = ${e} + `,s.ZFALLBACKIMAGEGENERATION?r=q.join("FallbackImages",s.ZIDENTIFIER,s.ZFALLBACKIMAGEGENERATION,"FallbackImage.png"):r=q.join("FallbackImages",`${s.ZIDENTIFIER}.jpg`),o="Drawing",a="png";break;default:s=await this.database.get` + SELECT + a.zidentifier, a.zfilename, + a.zgeneration1, b.zcreationdate, b.zmodificationdate, b.znote + FROM + (SELECT *, NULL AS zgeneration1 FROM ziccloudsyncingobject) AS a, + ziccloudsyncingobject AS b + WHERE + a.z_ent = ${this.keys.ICMedia} + AND a.z_pk = ${e} + AND a.z_pk = b.zmedia + `,r=q.join("Media",s.ZIDENTIFIER,s.ZGENERATION1||"",s.ZFILENAME),[o,a]=Ro(s.ZFILENAME);break}try{let c=await this.getAttachmentSource(this.resolvedAccounts[this.owners[s.ZNOTE]],r),p=await this.getAvailablePathForAttachment(`${o}.${a}`,[]);l=await this.vault.createBinary(p,c,{ctime:this.decodeTime(s.ZCREATIONDATE),mtime:this.decodeTime(s.ZMODIFICATIONDATE)})}catch(c){return this.ctx.reportFailed(r),console.error(c),null}return this.resolvedFiles[e]=l,this.ctx.reportAttachmentSuccess(this.resolvedFiles[e].path),l}decodeData(e,i){let r=Fl.gunzipSync(Buffer.from(e,"hex")),o=this.protobufRoot.lookupType(i.protobufType).decode(r);return new i(this,o)}decodeTime(e){return!e||e<1?new Date().getTime():Math.floor((e+Dg)*1e3)}async getAttachmentSource(e,i){try{return await Pe.readFile(q.join(e.path,i))}catch(r){return await Pe.readFile(q.join(Xt.homedir(),Ra,i))}}};var kn=require("obsidian");var fi=class{constructor(t,e){this.type="file";this.entry=e,this.fullpath=t.fullpath+"/"+e.filename;let{parent:i,name:r,basename:o,extension:a}=re(e.filename);this.parent=i,this.name=r,this.basename=o,this.extension=a}async readText(){return this.entry.getData(new $i)}async read(){return(await this.entry.getData(new Vn)).arrayBuffer()}get filepath(){return this.entry.filename}get size(){return this.entry.uncompressedSize}get ctime(){return this.entry.creationDate}get mtime(){return this.entry.lastModDate}async readZip(t){return t(new Vt(new St(new Blob([await this.read()]))))}};async function gt(n,t){await n.readZip(async e=>{let r=(await e.getEntries()).filter(o=>!o.directory&&!!o.getData).map(o=>new fi(n,o));return t(e,r)})}var xr=class extends ce{constructor(){super(...arguments);this.attachmentMap={}}init(){this.addFileChooserSetting("Bear2bk",["bear2bk"]),this.addOutputLocationSetting("Bear")}async import(e){let{files:i}=this;if(i.length===0){new kn.Notice("Please pick at least one file to import.");return}let r=await this.getOutputFolder();if(!r){new kn.Notice("Please select a location to export to.");return}let o=r,a=new RegExp("\\[[^\\]]*\\]\\((assets/[^\\)]+)\\)","gm"),s=await this.createFolders(`${r.path}/archive`),l=await this.createFolders(`${r.path}/trash`);for(let c of i){if(e.isCancelled())return;e.status("Processing "+c.name),await gt(c,async(p,m)=>{let y=await this.collectMetadata(e,m);for(let w of m){if(e.isCancelled())return;let{fullpath:E,filepath:d,parent:f,name:g,extension:v}=w;if(!(g==="info.json"||g==="tags.json")){e.status("Processing "+g);try{if(v==="md"||v==="markdown"){let _=re(f).basename;e.status("Importing note "+_);let A=await w.readText();A=this.removeMarkdownHeader(_,A);let D=[...A.matchAll(a)];if(D.length>0)for(let O of D){let[S,M]=O,L=q.join(f,decodeURI(M)),j=await this.getAttachmentStoragePath(L);j=encodeURI(j);let Z=S.replace(M,j);A=A.replace(S,Z)}let T=(0,kn.normalizePath)(_),k=y[f],b=o;k!=null&&k.archived?b=s:k!=null&&k.trashed&&(b=l);let C=await this.saveAsMarkdownFile(b,T,A);k!=null&&k.ctime&&(k!=null&&k.mtime)&&await this.modifFileTimestamps(k,C),e.reportNoteSuccess(_)}else if(d.match(/\/assets\//g)){e.status("Importing asset "+w.name);let _=await this.getAttachmentStoragePath(w.filepath),A=await w.read();await this.vault.createBinary(_,A),e.reportAttachmentSuccess(w.fullpath)}else e.reportSkipped(E,"unknown type of file")}catch(_){e.reportFailed(E,_)}}}})}}async modifFileTimestamps(e,i){let r={ctime:e.ctime,mtime:e.mtime};await this.vault.append(i,"",r)}async collectMetadata(e,i){let r={};for(let o of i){if(e.isCancelled())return r;if(o.name!=="info.json")continue;let a=await o.readText(),l=JSON.parse(a)["net.shinyfrog.bear"],c=Date.parse(l.creationDate),p=Date.parse(l.modificationDate);r[o.parent]={ctime:isNaN(c)?void 0:c,mtime:isNaN(p)?void 0:p,archived:l.archived===1,trashed:l.trashed===1}}return r}async getAttachmentStoragePath(e){let i=(0,kn.normalizePath)(e);if(this.attachmentMap[i])return this.attachmentMap[i];let r=Object.values(this.attachmentMap),o=await this.getAvailablePathForAttachment(i,r);return o=o.replace(/:/g,""),this.attachmentMap[i]=o,o}removeMarkdownHeader(e,i){if(!i.startsWith("# "))return i;let r=i.indexOf(` +`),o=r>0?i.substring(2,r):i.substring(2);return o=o.trim(),o!==e.trim()&&o!==""?i:r>0?i.substring(r+1):""}};var xi=require("obsidian");var Bf=require("obsidian");var Yp=require("obsidian");var zp=n=>({...n,created:di(n.created),statusupdated:di(n.statusupdated),updated:di(n.updated),duedate:di(n.duedate),taskflag:n.taskflag==="true",reminderdate:n.reminder?di(n.reminder.reminderdate):void 0,sortweight:n.sortweight}),di=n=>n?(0,Yp.moment)(n,"YYYYMMDDThhmmssZ").toDate():void 0;var Gp=/highlight-(?:text|source)-([a-z0-9]+)/;function Cg(n){n.addRule("highlightedCodeBlock",{filter:function(t){var e=t.firstChild;return t.nodeName==="DIV"&&Gp.test(t.className)&&e&&e.nodeName==="PRE"},replacement:function(t,e,i){var r=e.className||"",o=(r.match(Gp)||[null,""])[1];return` + +`+i.fence+o+` +`+e.firstChild.textContent+` +`+i.fence+` + +`}})}function Ig(n){n.addRule("strikethrough",{filter:["del","s","strike"],replacement:function(t){return"~"+t+"~"}})}var Fg=Array.prototype.indexOf,Lg=Array.prototype.every,Nn={};Nn.tableCell={filter:["th","td"],replacement:function(n,t){return Da(Kp(t))?n:Oa(n,t)}};Nn.tableRow={filter:"tr",replacement:function(n,t){let e=Kp(t);if(Da(e))return n;var i="",r={left:":--",right:"--:",center:":-:"};if(Pg(t)){let l=Xp(e);for(var o=0;o<l;o++){let c=l>=t.childNodes.length?null:t.childNodes[o];var a="---",s=c?(c.getAttribute("align")||"").toLowerCase():"";s&&(a=r[s]||a),c?i+=Oa(a,t.childNodes[o]):i+=Oa(a,null,o)}}return` +`+n+(i?` +`+i:"")}};Nn.table={filter:function(n){return n.nodeName==="TABLE"},replacement:function(n,t){if(Da(t))return n;n=n.replace(/\n+/g,` +`);var e=n.trim().split(` +`);e.length>=2&&(e=e[1]);var i=e.indexOf("| ---")===0,r=Xp(t),o="";return r&&!i&&(o="|"+" |".repeat(r)+` +|`+" --- |".repeat(r)),` + +`+o+n+` + +`}};Nn.tableSection={filter:["thead","tbody","tfoot"],replacement:function(n){return n}};function Pg(n){var t=n.parentNode;return t.nodeName==="THEAD"||t.firstChild===n&&(t.nodeName==="TABLE"||Mg(t))&&Lg.call(n.childNodes,function(e){return e.nodeName==="TH"})}function Mg(n){var t=n.previousSibling;return n.nodeName==="TBODY"&&(!t||t.nodeName==="THEAD"&&/^\s*$/i.test(t.textContent))}function Oa(n,t=null,e=null){e===null&&(e=Fg.call(t.parentNode.childNodes,t));var i=" ";e===0&&(i="| ");let r=n.trim().replace(/\n\r/g,"<br>").replace(/\n/g,"<br>");for(r=r.replace(/\|+/g,"\\|");r.length<3;)r+=" ";return t&&(r=$g(r,t," ")),i+r+" |"}function Vp(n){if(!n.childNodes)return!1;for(let t=0;t<n.childNodes.length;t++){let e=n.childNodes[t];if(e.nodeName==="TABLE"||Vp(e))return!0}return!1}function Da(n){return!!(!n||!n.rows||n.rows.length===1&&n.rows[0].childNodes.length<=1||Vp(n))}function Kp(n){let t=n.parentNode;for(;t.nodeName!=="TABLE";)if(t=t.parentNode,!t)return null;return t}function $g(n,t,e){let i=t.getAttribute("colspan")||1;for(let r=1;r<i;r++)n+=" | "+e.repeat(3);return n}function Xp(n){let t=0;for(let e=0;e<n.rows.length;e++){let r=n.rows[e].childNodes.length;r>t&&(t=r)}return t}function Bg(n){n.keep(function(e){return e.nodeName==="TABLE"});for(var t in Nn)n.addRule(t,Nn[t])}function Ug(n){n.addRule("taskListItems",{filter:function(t){return t.type==="checkbox"&&t.parentNode.nodeName==="LI"},replacement:function(t,e){return(e.checked?"[x]":"[ ]")+" "}})}function Jp(n){n.use([Cg,Ig,Bg,Ug])}var ue=n=>{let t={get(e,i){return e[i]}};return new Proxy(n.attributes,t)};var Qp="\n```\n",Ca=n=>{let t=ue(n),e="-en-codeblock:true";return t.style&&t.style.value.indexOf(e)>=0},jg=n=>{let t=ue(n),e="padding-left:",i=0;return t.style&&t.style.value.indexOf(e)>=0&&(i=Math.floor(t.style.value.split(e)[1].split("px")[0]/20)),i},Ia=n=>n.replace(/\\(.)/g,"$1"),eu=(n,t)=>{let e=jg(t);return n=`${" ".repeat(e)}${n}`,Ca(t)?(n=Ia(n),`${Qp}${n}${Qp}`):t.parentElement&&Ca(t.parentElement)&&t.parentElement.firstElementChild===t?`${n}`:t.parentElement&&Ca(t.parentElement)?` +${n}`:t.isBlock?` +${n} +`:n};var wr="\n```\n",Hg="-en-codeblock:true",qg=/\b(Courier|Mono|Consolas|Console|Inconsolata|Pitch|Monaco|monospace)\b/,tu=n=>{var o,a;if(n.nodeType!==1)return null;let t=n.childNodes,e=t.length;if(e>1)return"mixed";if(e===1){let s=tu(t[0]);if(s)return s}let i=ue(n);if(n.tagName==="FONT")return(o=i.face)==null?void 0:o.value;let r=(a=i.style)==null?void 0:a.value;if(r){let s=r.match(/font-family:([^;]+)/);if(s)return s[1]}return null},mi=n=>{var r;let e=(r=ue(n).style)==null?void 0:r.value;if(e&&e.includes(Hg))return!0;let i=tu(n);return!!i&&qg.test(i)},nu=(n,t)=>{if(mi(t)){let e=t.previousSibling,i=e&&e.tagName===t.tagName&&mi(e),r=t.nextSibling,o=r&&r.tagName===t.tagName&&mi(r);return i||o?(n=i?` +${n}`:`${wr}${n}`,n=o?`${n} +`:`${n}${wr}`,n):(n=Ia(n),n.trim()?`${wr}${n}${wr}`:n)}return t.parentElement&&mi(t.parentElement)&&t.parentElement.firstElementChild===t?n:t.parentElement&&mi(t.parentElement)?` +${n}`:t.isBlock?` +${n} +`:n};var qe=n=>t=>t.nodeName===n||t.nodeName.toLowerCase()===n;var iu={filter:qe("IMG"),replacement:(n,t)=>{let e=ue(t);if(!e.src)return"";let i=e.src.value,r=t.width||"",o=t.height||"",a=i;B.sanitizeResourceNameSpaces?a=a.replace(/ /g,B.replacementChar):B.urlEncodeFileNamesAndLinks&&(a=encodeURI(a));let s=r||o?` =${r}x${o}`:"";if(B.keepImageSize)return s=r||o?`|${r||0}x${o||0}`:"",a.startsWith("./")?`![[${a}${s}]]`:``;if(!i.match(/^[a-z]+:/))return`![[${a}]]`;let l=e.src.value.split("/");return`![${l[l.length-1]}](${a})`}};var fe=class{constructor(){this.noteIdNameMap={},this.noteIdNameTOCMap={}}static getInstance(){return fe.instance||(fe.instance=new fe),fe.instance}addItemToMap(t){this.noteIdNameMap[t.url]={...this.noteIdNameMap[t.url],title:t.title,noteName:this.currentNoteName,notebookName:this.currentNotebookName,uniqueEnd:t.uniqueEnd}}addItemToTOCMap(t){this.noteIdNameTOCMap[t.url]={...this.noteIdNameMap[t.url],title:t.title,noteName:this.currentNoteName,notebookName:this.currentNotebookName,uniqueEnd:t.uniqueEnd}}getNoteIdNameMap(){return this.noteIdNameMap}getNoteIdNameTOCMap(){return this.noteIdNameTOCMap}getAllNoteIdNameMap(){return{...this.noteIdNameMap,...this.noteIdNameTOCMap}}getNoteIdNameMapByNoteTitle(t){return Object.values(this.getAllNoteIdNameMap()).filter(e=>e.title===t)}setCurrentNotebookName(t){this.currentNotebookName=t}getCurrentNotebookName(){return this.currentNotebookName}setCurrentNotebookFullpath(t){this.currentNotebookFullpath=t}setCurrentNoteName(t){this.currentNoteName=t}getCurrentNoteName(){return this.currentNoteName}getCurrentNotePath(){return this.currentNotePath}setCurrentNotePath(t){this.currentNotePath=t}getCurrentNotebookFullpath(){return this.currentNotebookFullpath}};var ru=require("obsidian");var Sn=n=>n.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");var Wg={"application/andrew-inset":"ez","application/applixware":"aw","application/atom+xml":"atom","application/atomcat+xml":"atomcat","application/atomdeleted+xml":"atomdeleted","application/atomsvc+xml":"atomsvc","application/atsc-dwd+xml":"dwd","application/atsc-held+xml":"held","application/atsc-rsat+xml":"rsat","application/bdoc":"bdoc","application/calendar+xml":"xcs","application/ccxml+xml":"ccxml","application/cdfx+xml":"cdfx","application/cdmi-capability":"cdmia","application/cdmi-container":"cdmic","application/cdmi-domain":"cdmid","application/cdmi-object":"cdmio","application/cdmi-queue":"cdmiq","application/cpl+xml":"cpl","application/cu-seeme":"cu","application/dash+xml":"mpd","application/dash-patch+xml":"mpp","application/davmount+xml":"davmount","application/docbook+xml":"dbk","application/dssc+der":"dssc","application/dssc+xml":"xdssc","application/ecmascript":"es","application/emma+xml":"emma","application/emotionml+xml":"emotionml","application/epub+zip":"epub","application/exi":"exi","application/express":"exp","application/fdt+xml":"fdt","application/font-tdpfr":"pfr","application/geo+json":"geojson","application/gml+xml":"gml","application/gpx+xml":"gpx","application/gxf":"gxf","application/gzip":"gz","application/hjson":"hjson","application/hyperstudio":"stk","application/inkml+xml":"ink","application/ipfix":"ipfix","application/its+xml":"its","application/java-archive":"jar","application/java-serialized-object":"ser","application/java-vm":"class","application/javascript":"js","application/json":"json","application/json5":"json5","application/jsonml+json":"jsonml","application/ld+json":"jsonld","application/lgr+xml":"lgr","application/lost+xml":"lostxml","application/mac-binhex40":"hqx","application/mac-compactpro":"cpt","application/mads+xml":"mads","application/manifest+json":"webmanifest","application/marc":"mrc","application/marcxml+xml":"mrcx","application/mathematica":"ma","application/mathml+xml":"mathml","application/mbox":"mbox","application/media-policy-dataset+xml":"mpf","application/mediaservercontrol+xml":"mscml","application/metalink+xml":"metalink","application/metalink4+xml":"meta4","application/mets+xml":"mets","application/mmt-aei+xml":"maei","application/mmt-usd+xml":"musd","application/mods+xml":"mods","application/mp21":"m21","application/mp4":"mp4s","application/msword":"doc","application/mxf":"mxf","application/n-quads":"nq","application/n-triples":"nt","application/node":"cjs","application/octet-stream":"bin","application/oda":"oda","application/oebps-package+xml":"opf","application/ogg":"ogx","application/omdoc+xml":"omdoc","application/onenote":"onetoc","application/oxps":"oxps","application/p2p-overlay+xml":"relo","application/patch-ops-error+xml":"xer","application/pdf":"pdf","application/pgp-encrypted":"pgp","application/pgp-keys":"asc","application/pgp-signature":"asc","application/pics-rules":"prf","application/pkcs10":"p10","application/pkcs7-mime":"p7m","application/pkcs7-signature":"p7s","application/pkcs8":"p8","application/pkix-attr-cert":"ac","application/pkix-cert":"cer","application/pkix-crl":"crl","application/pkix-pkipath":"pkipath","application/pkixcmp":"pki","application/pls+xml":"pls","application/postscript":"ai","application/provenance+xml":"provx","application/prs.cww":"cww","application/pskc+xml":"pskcxml","application/raml+yaml":"raml","application/rdf+xml":"rdf","application/reginfo+xml":"rif","application/relax-ng-compact-syntax":"rnc","application/resource-lists+xml":"rl","application/resource-lists-diff+xml":"rld","application/rls-services+xml":"rs","application/route-apd+xml":"rapd","application/route-s-tsid+xml":"sls","application/route-usd+xml":"rusd","application/rpki-ghostbusters":"gbr","application/rpki-manifest":"mft","application/rpki-roa":"roa","application/rsd+xml":"rsd","application/rss+xml":"rss","application/rtf":"rtf","application/sbml+xml":"sbml","application/scvp-cv-request":"scq","application/scvp-cv-response":"scs","application/scvp-vp-request":"spq","application/scvp-vp-response":"spp","application/sdp":"sdp","application/senml+xml":"senmlx","application/sensml+xml":"sensmlx","application/set-payment-initiation":"setpay","application/set-registration-initiation":"setreg","application/shf+xml":"shf","application/sieve":"siv","application/smil+xml":"smi","application/sparql-query":"rq","application/sparql-results+xml":"srx","application/srgs":"gram","application/srgs+xml":"grxml","application/sru+xml":"sru","application/ssdl+xml":"ssdl","application/ssml+xml":"ssml","application/swid+xml":"swidtag","application/tei+xml":"tei","application/thraud+xml":"tfi","application/timestamped-data":"tsd","application/toml":"toml","application/trig":"trig","application/ttml+xml":"ttml","application/ubjson":"ubj","application/urc-ressheet+xml":"rsheet","application/urc-targetdesc+xml":"td","application/vnd.1000minds.decision-model+xml":"1km","application/vnd.3gpp.pic-bw-large":"plb","application/vnd.3gpp.pic-bw-small":"psb","application/vnd.3gpp.pic-bw-var":"pvb","application/vnd.3gpp2.tcap":"tcap","application/vnd.3m.post-it-notes":"pwn","application/vnd.accpac.simply.aso":"aso","application/vnd.accpac.simply.imp":"imp","application/vnd.acucobol":"acu","application/vnd.acucorp":"atc","application/vnd.adobe.air-application-installer-package+zip":"air","application/vnd.adobe.formscentral.fcdt":"fcdt","application/vnd.adobe.fxp":"fxp","application/vnd.adobe.xdp+xml":"xdp","application/vnd.adobe.xfdf":"xfdf","application/vnd.age":"age","application/vnd.ahead.space":"ahead","application/vnd.airzip.filesecure.azf":"azf","application/vnd.airzip.filesecure.azs":"azs","application/vnd.amazon.ebook":"azw","application/vnd.americandynamics.acc":"acc","application/vnd.amiga.ami":"ami","application/vnd.android.package-archive":"apk","application/vnd.anser-web-certificate-issue-initiation":"cii","application/vnd.anser-web-funds-transfer-initiation":"fti","application/vnd.antix.game-component":"atx","application/vnd.apple.installer+xml":"mpkg","application/vnd.apple.keynote":"key","application/vnd.apple.mpegurl":"m3u8","application/vnd.apple.numbers":"numbers","application/vnd.apple.pages":"pages","application/vnd.apple.pkpass":"pkpass","application/vnd.aristanetworks.swi":"swi","application/vnd.astraea-software.iota":"iota","application/vnd.audiograph":"aep","application/vnd.balsamiq.bmml+xml":"bmml","application/vnd.blueice.multipass":"mpm","application/vnd.bmi":"bmi","application/vnd.businessobjects":"rep","application/vnd.chemdraw+xml":"cdxml","application/vnd.chipnuts.karaoke-mmd":"mmd","application/vnd.cinderella":"cdy","application/vnd.citationstyles.style+xml":"csl","application/vnd.claymore":"cla","application/vnd.cloanto.rp9":"rp9","application/vnd.clonk.c4group":"c4g","application/vnd.cluetrust.cartomobile-config":"c11amc","application/vnd.cluetrust.cartomobile-config-pkg":"c11amz","application/vnd.commonspace":"csp","application/vnd.contact.cmsg":"cdbcmsg","application/vnd.cosmocaller":"cmc","application/vnd.crick.clicker":"clkx","application/vnd.crick.clicker.keyboard":"clkk","application/vnd.crick.clicker.palette":"clkp","application/vnd.crick.clicker.template":"clkt","application/vnd.crick.clicker.wordbank":"clkw","application/vnd.criticaltools.wbs+xml":"wbs","application/vnd.ctc-posml":"pml","application/vnd.cups-ppd":"ppd","application/vnd.curl.car":"car","application/vnd.curl.pcurl":"pcurl","application/vnd.dart":"dart","application/vnd.data-vision.rdz":"rdz","application/vnd.dbf":"dbf","application/vnd.dece.data":"uvf","application/vnd.dece.ttml+xml":"uvt","application/vnd.dece.unspecified":"uvx","application/vnd.dece.zip":"uvz","application/vnd.denovo.fcselayout-link":"fe_launch","application/vnd.dna":"dna","application/vnd.dolby.mlp":"mlp","application/vnd.dpgraph":"dpg","application/vnd.dreamfactory":"dfac","application/vnd.ds-keypoint":"kpxx","application/vnd.dvb.ait":"ait","application/vnd.dvb.service":"svc","application/vnd.dynageo":"geo","application/vnd.ecowin.chart":"mag","application/vnd.enliven":"nml","application/vnd.epson.esf":"esf","application/vnd.epson.msf":"msf","application/vnd.epson.quickanime":"qam","application/vnd.epson.salt":"slt","application/vnd.epson.ssf":"ssf","application/vnd.eszigno3+xml":"es3","application/vnd.ezpix-album":"ez2","application/vnd.ezpix-package":"ez3","application/vnd.fdf":"fdf","application/vnd.fdsn.mseed":"mseed","application/vnd.fdsn.seed":"seed","application/vnd.flographit":"gph","application/vnd.fluxtime.clip":"ftc","application/vnd.framemaker":"fm","application/vnd.frogans.fnc":"fnc","application/vnd.frogans.ltf":"ltf","application/vnd.fsc.weblaunch":"fsc","application/vnd.fujitsu.oasys":"oas","application/vnd.fujitsu.oasys2":"oa2","application/vnd.fujitsu.oasys3":"oa3","application/vnd.fujitsu.oasysgp":"fg5","application/vnd.fujitsu.oasysprs":"bh2","application/vnd.fujixerox.ddd":"ddd","application/vnd.fujixerox.docuworks":"xdw","application/vnd.fujixerox.docuworks.binder":"xbd","application/vnd.fuzzysheet":"fzs","application/vnd.genomatix.tuxedo":"txd","application/vnd.geogebra.file":"ggb","application/vnd.geogebra.tool":"ggt","application/vnd.geometry-explorer":"gex","application/vnd.geonext":"gxt","application/vnd.geoplan":"g2w","application/vnd.geospace":"g3w","application/vnd.gmx":"gmx","application/vnd.google-apps.document":"gdoc","application/vnd.google-apps.presentation":"gslides","application/vnd.google-apps.spreadsheet":"gsheet","application/vnd.google-earth.kml+xml":"kml","application/vnd.google-earth.kmz":"kmz","application/vnd.grafeq":"gqf","application/vnd.groove-account":"gac","application/vnd.groove-help":"ghf","application/vnd.groove-identity-message":"gim","application/vnd.groove-injector":"grv","application/vnd.groove-tool-message":"gtm","application/vnd.groove-tool-template":"tpl","application/vnd.groove-vcard":"vcg","application/vnd.hal+xml":"hal","application/vnd.handheld-entertainment+xml":"zmm","application/vnd.hbci":"hbci","application/vnd.hhe.lesson-player":"les","application/vnd.hp-hpgl":"hpgl","application/vnd.hp-hpid":"hpid","application/vnd.hp-hps":"hps","application/vnd.hp-jlyt":"jlt","application/vnd.hp-pcl":"pcl","application/vnd.hp-pclxl":"pclxl","application/vnd.hydrostatix.sof-data":"sfd-hdstx","application/vnd.ibm.minipay":"mpy","application/vnd.ibm.modcap":"afp","application/vnd.ibm.rights-management":"irm","application/vnd.ibm.secure-container":"sc","application/vnd.iccprofile":"icc","application/vnd.igloader":"igl","application/vnd.immervision-ivp":"ivp","application/vnd.immervision-ivu":"ivu","application/vnd.insors.igm":"igm","application/vnd.intercon.formnet":"xpw","application/vnd.intergeo":"i2g","application/vnd.intu.qbo":"qbo","application/vnd.intu.qfx":"qfx","application/vnd.ipunplugged.rcprofile":"rcprofile","application/vnd.irepository.package+xml":"irp","application/vnd.is-xpr":"xpr","application/vnd.isac.fcs":"fcs","application/vnd.jam":"jam","application/vnd.jcp.javame.midlet-rms":"rms","application/vnd.jisp":"jisp","application/vnd.joost.joda-archive":"joda","application/vnd.kahootz":"ktz","application/vnd.kde.karbon":"karbon","application/vnd.kde.kchart":"chrt","application/vnd.kde.kformula":"kfo","application/vnd.kde.kivio":"flw","application/vnd.kde.kontour":"kon","application/vnd.kde.kpresenter":"kpr","application/vnd.kde.kspread":"ksp","application/vnd.kde.kword":"kwd","application/vnd.kenameaapp":"htke","application/vnd.kidspiration":"kia","application/vnd.kinar":"kne","application/vnd.koan":"skp","application/vnd.kodak-descriptor":"sse","application/vnd.las.las+xml":"lasxml","application/vnd.llamagraphics.life-balance.desktop":"lbd","application/vnd.llamagraphics.life-balance.exchange+xml":"lbe","application/vnd.lotus-1-2-3":"123","application/vnd.lotus-approach":"apr","application/vnd.lotus-freelance":"pre","application/vnd.lotus-notes":"nsf","application/vnd.lotus-organizer":"org","application/vnd.lotus-screencam":"scm","application/vnd.lotus-wordpro":"lwp","application/vnd.macports.portpkg":"portpkg","application/vnd.mapbox-vector-tile":"mvt","application/vnd.mcd":"mcd","application/vnd.medcalcdata":"mc1","application/vnd.mediastation.cdkey":"cdkey","application/vnd.mfer":"mwf","application/vnd.mfmp":"mfm","application/vnd.micrografx.flo":"flo","application/vnd.micrografx.igx":"igx","application/vnd.mif":"mif","application/vnd.mobius.daf":"daf","application/vnd.mobius.dis":"dis","application/vnd.mobius.mbk":"mbk","application/vnd.mobius.mqy":"mqy","application/vnd.mobius.msl":"msl","application/vnd.mobius.plc":"plc","application/vnd.mobius.txf":"txf","application/vnd.mophun.application":"mpn","application/vnd.mophun.certificate":"mpc","application/vnd.mozilla.xul+xml":"xul","application/vnd.ms-artgalry":"cil","application/vnd.ms-cab-compressed":"cab","application/vnd.ms-excel":"xls","application/vnd.ms-excel.addin.macroenabled.12":"xlam","application/vnd.ms-excel.sheet.binary.macroenabled.12":"xlsb","application/vnd.ms-excel.sheet.macroenabled.12":"xlsm","application/vnd.ms-excel.template.macroenabled.12":"xltm","application/vnd.ms-fontobject":"eot","application/vnd.ms-htmlhelp":"chm","application/vnd.ms-ims":"ims","application/vnd.ms-lrm":"lrm","application/vnd.ms-officetheme":"thmx","application/vnd.ms-outlook":"msg","application/vnd.ms-pki.seccat":"cat","application/vnd.ms-pki.stl":"stl","application/vnd.ms-powerpoint":"ppt","application/vnd.ms-powerpoint.addin.macroenabled.12":"ppam","application/vnd.ms-powerpoint.presentation.macroenabled.12":"pptm","application/vnd.ms-powerpoint.slide.macroenabled.12":"sldm","application/vnd.ms-powerpoint.slideshow.macroenabled.12":"ppsm","application/vnd.ms-powerpoint.template.macroenabled.12":"potm","application/vnd.ms-project":"mpp","application/vnd.ms-word.document.macroenabled.12":"docm","application/vnd.ms-word.template.macroenabled.12":"dotm","application/vnd.ms-works":"wps","application/vnd.ms-wpl":"wpl","application/vnd.ms-xpsdocument":"xps","application/vnd.mseq":"mseq","application/vnd.musician":"mus","application/vnd.muvee.style":"msty","application/vnd.mynfc":"taglet","application/vnd.neurolanguage.nlu":"nlu","application/vnd.nitf":"ntf","application/vnd.noblenet-directory":"nnd","application/vnd.noblenet-sealer":"nns","application/vnd.noblenet-web":"nnw","application/vnd.nokia.n-gage.ac+xml":"ac","application/vnd.nokia.n-gage.data":"ngdat","application/vnd.nokia.n-gage.symbian.install":"n-gage","application/vnd.nokia.radio-preset":"rpst","application/vnd.nokia.radio-presets":"rpss","application/vnd.novadigm.edm":"edm","application/vnd.novadigm.edx":"edx","application/vnd.novadigm.ext":"ext","application/vnd.oasis.opendocument.chart":"odc","application/vnd.oasis.opendocument.chart-template":"otc","application/vnd.oasis.opendocument.database":"odb","application/vnd.oasis.opendocument.formula":"odf","application/vnd.oasis.opendocument.formula-template":"odft","application/vnd.oasis.opendocument.graphics":"odg","application/vnd.oasis.opendocument.graphics-template":"otg","application/vnd.oasis.opendocument.image":"odi","application/vnd.oasis.opendocument.image-template":"oti","application/vnd.oasis.opendocument.presentation":"odp","application/vnd.oasis.opendocument.presentation-template":"otp","application/vnd.oasis.opendocument.spreadsheet":"ods","application/vnd.oasis.opendocument.spreadsheet-template":"ots","application/vnd.oasis.opendocument.text":"odt","application/vnd.oasis.opendocument.text-master":"odm","application/vnd.oasis.opendocument.text-template":"ott","application/vnd.oasis.opendocument.text-web":"oth","application/vnd.olpc-sugar":"xo","application/vnd.oma.dd2+xml":"dd2","application/vnd.openblox.game+xml":"obgx","application/vnd.openofficeorg.extension":"oxt","application/vnd.openstreetmap.data+xml":"osm","application/vnd.openxmlformats-officedocument.presentationml.presentation":"pptx","application/vnd.openxmlformats-officedocument.presentationml.slide":"sldx","application/vnd.openxmlformats-officedocument.presentationml.slideshow":"ppsx","application/vnd.openxmlformats-officedocument.presentationml.template":"potx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.template":"xltx","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"docx","application/vnd.openxmlformats-officedocument.wordprocessingml.template":"dotx","application/vnd.osgeo.mapguide.package":"mgp","application/vnd.osgi.dp":"dp","application/vnd.osgi.subsystem":"esa","application/vnd.palm":"pdb","application/vnd.pawaafile":"paw","application/vnd.pg.format":"str","application/vnd.pg.osasli":"ei6","application/vnd.picsel":"efif","application/vnd.pmi.widget":"wg","application/vnd.pocketlearn":"plf","application/vnd.powerbuilder6":"pbd","application/vnd.previewsystems.box":"box","application/vnd.proteus.magazine":"mgz","application/vnd.publishare-delta-tree":"qps","application/vnd.pvi.ptid1":"ptid","application/vnd.quark.quarkxpress":"qxd","application/vnd.rar":"rar","application/vnd.realvnc.bed":"bed","application/vnd.recordare.musicxml":"mxl","application/vnd.recordare.musicxml+xml":"musicxml","application/vnd.rig.cryptonote":"cryptonote","application/vnd.rim.cod":"cod","application/vnd.rn-realmedia":"rm","application/vnd.rn-realmedia-vbr":"rmvb","application/vnd.route66.link66+xml":"link66","application/vnd.sailingtracker.track":"st","application/vnd.seemail":"see","application/vnd.sema":"sema","application/vnd.semd":"semd","application/vnd.semf":"semf","application/vnd.shana.informed.formdata":"ifm","application/vnd.shana.informed.formtemplate":"itp","application/vnd.shana.informed.interchange":"iif","application/vnd.shana.informed.package":"ipk","application/vnd.simtech-mindmapper":"twd","application/vnd.smaf":"mmf","application/vnd.smart.teacher":"teacher","application/vnd.software602.filler.form+xml":"fo","application/vnd.solent.sdkm+xml":"sdkm","application/vnd.spotfire.dxp":"dxp","application/vnd.spotfire.sfs":"sfs","application/vnd.stardivision.calc":"sdc","application/vnd.stardivision.draw":"sda","application/vnd.stardivision.impress":"sdd","application/vnd.stardivision.math":"smf","application/vnd.stardivision.writer":"sdw","application/vnd.stardivision.writer-global":"sgl","application/vnd.stepmania.package":"smzip","application/vnd.stepmania.stepchart":"sm","application/vnd.sun.wadl+xml":"wadl","application/vnd.sun.xml.calc":"sxc","application/vnd.sun.xml.calc.template":"stc","application/vnd.sun.xml.draw":"sxd","application/vnd.sun.xml.draw.template":"std","application/vnd.sun.xml.impress":"sxi","application/vnd.sun.xml.impress.template":"sti","application/vnd.sun.xml.math":"sxm","application/vnd.sun.xml.writer":"sxw","application/vnd.sun.xml.writer.global":"sxg","application/vnd.sun.xml.writer.template":"stw","application/vnd.sus-calendar":"sus","application/vnd.svd":"svd","application/vnd.symbian.install":"sis","application/vnd.syncml+xml":"xsm","application/vnd.syncml.dm+wbxml":"bdm","application/vnd.syncml.dm+xml":"xdm","application/vnd.syncml.dmddf+xml":"ddf","application/vnd.tao.intent-module-archive":"tao","application/vnd.tcpdump.pcap":"pcap","application/vnd.tmobile-livetv":"tmo","application/vnd.trid.tpt":"tpt","application/vnd.triscape.mxs":"mxs","application/vnd.trueapp":"tra","application/vnd.ufdl":"ufd","application/vnd.uiq.theme":"utz","application/vnd.umajin":"umj","application/vnd.unity":"unityweb","application/vnd.uoml+xml":"uoml","application/vnd.vcx":"vcx","application/vnd.visio":"vsd","application/vnd.visionary":"vis","application/vnd.vsf":"vsf","application/vnd.wap.wbxml":"wbxml","application/vnd.wap.wmlc":"wmlc","application/vnd.wap.wmlscriptc":"wmlsc","application/vnd.webturbo":"wtb","application/vnd.wolfram.player":"nbp","application/vnd.wordperfect":"wpd","application/vnd.wqd":"wqd","application/vnd.wt.stf":"stf","application/vnd.xara":"xar","application/vnd.xfdl":"xfdl","application/vnd.yamaha.hv-dic":"hvd","application/vnd.yamaha.hv-script":"hvs","application/vnd.yamaha.hv-voice":"hvp","application/vnd.yamaha.openscoreformat":"osf","application/vnd.yamaha.openscoreformat.osfpvg+xml":"osfpvg","application/vnd.yamaha.smaf-audio":"saf","application/vnd.yamaha.smaf-phrase":"spf","application/vnd.yellowriver-custom-menu":"cmp","application/vnd.zul":"zir","application/vnd.zzazz.deck+xml":"zaz","application/voicexml+xml":"vxml","application/wasm":"wasm","application/watcherinfo+xml":"wif","application/widget":"wgt","application/winhlp":"hlp","application/wsdl+xml":"wsdl","application/wspolicy+xml":"wspolicy","application/x-7z-compressed":"7z","application/x-abiword":"abw","application/x-ace-compressed":"ace","application/x-apple-diskimage":"dmg","application/x-arj":"arj","application/x-authorware-bin":"aab","application/x-authorware-map":"aam","application/x-authorware-seg":"aas","application/x-bcpio":"bcpio","application/x-bdoc":"bdoc","application/x-bittorrent":"torrent","application/x-blorb":"blb","application/x-bzip":"bz","application/x-bzip2":"bz2","application/x-cbr":"cbr","application/x-cdlink":"vcd","application/x-cfs-compressed":"cfs","application/x-chat":"chat","application/x-chess-pgn":"pgn","application/x-chrome-extension":"crx","application/x-cocoa":"cco","application/x-conference":"nsc","application/x-cpio":"cpio","application/x-csh":"csh","application/x-debian-package":"deb","application/x-dgc-compressed":"dgc","application/x-director":"dir","application/x-doom":"wad","application/x-dtbncx+xml":"ncx","application/x-dtbook+xml":"dtb","application/x-dtbresource+xml":"res","application/x-dvi":"dvi","application/x-envoy":"evy","application/x-eva":"eva","application/x-font-bdf":"bdf","application/x-font-ghostscript":"gsf","application/x-font-linux-psf":"psf","application/x-font-pcf":"pcf","application/x-font-snf":"snf","application/x-font-type1":"pfa","application/x-freearc":"arc","application/x-futuresplash":"spl","application/x-gca-compressed":"gca","application/x-glulx":"ulx","application/x-gnumeric":"gnumeric","application/x-gramps-xml":"gramps","application/x-gtar":"gtar","application/x-hdf":"hdf","application/x-httpd-php":"php","application/x-install-instructions":"install","application/x-iso9660-image":"iso","application/x-iwork-keynote-sffkey":"key","application/x-iwork-numbers-sffnumbers":"numbers","application/x-iwork-pages-sffpages":"pages","application/x-java-archive-diff":"jardiff","application/x-java-jnlp-file":"jnlp","application/x-keepass2":"kdbx","application/x-latex":"latex","application/x-lua-bytecode":"luac","application/x-lzh-compressed":"lzh","application/x-makeself":"run","application/x-mie":"mie","application/x-mobipocket-ebook":"prc","application/x-ms-application":"application","application/x-ms-shortcut":"lnk","application/x-ms-wmd":"wmd","application/x-ms-wmz":"wmz","application/x-ms-xbap":"xbap","application/x-msaccess":"mdb","application/x-msbinder":"obd","application/x-mscardfile":"crd","application/x-msclip":"clp","application/x-msdos-program":"exe","application/x-msdownload":"exe","application/x-msmediaview":"mvb","application/x-msmetafile":"wmf","application/x-msmoney":"mny","application/x-mspublisher":"pub","application/x-msschedule":"scd","application/x-msterminal":"trm","application/x-mswrite":"wri","application/x-netcdf":"nc","application/x-ns-proxy-autoconfig":"pac","application/x-nzb":"nzb","application/x-perl":"pl","application/x-pilot":"prc","application/x-pkcs12":"p12","application/x-pkcs7-certificates":"p7b","application/x-pkcs7-certreqresp":"p7r","application/x-rar-compressed":"rar","application/x-redhat-package-manager":"rpm","application/x-research-info-systems":"ris","application/x-sea":"sea","application/x-sh":"sh","application/x-shar":"shar","application/x-shockwave-flash":"swf","application/x-silverlight-app":"xap","application/x-sql":"sql","application/x-stuffit":"sit","application/x-stuffitx":"sitx","application/x-subrip":"srt","application/x-sv4cpio":"sv4cpio","application/x-sv4crc":"sv4crc","application/x-t3vm-image":"t3","application/x-tads":"gam","application/x-tar":"tar","application/x-tcl":"tcl","application/x-tex":"tex","application/x-tex-tfm":"tfm","application/x-texinfo":"texinfo","application/x-tgif":"obj","application/x-ustar":"ustar","application/x-virtualbox-hdd":"hdd","application/x-virtualbox-ova":"ova","application/x-virtualbox-ovf":"ovf","application/x-virtualbox-vbox":"vbox","application/x-virtualbox-vbox-extpack":"vbox-extpack","application/x-virtualbox-vdi":"vdi","application/x-virtualbox-vhd":"vhd","application/x-virtualbox-vmdk":"vmdk","application/x-wais-source":"src","application/x-web-app-manifest+json":"webapp","application/x-x509-ca-cert":"der","application/x-xfig":"fig","application/x-xliff+xml":"xlf","application/x-xpinstall":"xpi","application/x-xz":"xz","application/x-zmachine":"z1","application/xaml+xml":"xaml","application/xcap-att+xml":"xav","application/xcap-caps+xml":"xca","application/xcap-diff+xml":"xdf","application/xcap-el+xml":"xel","application/xcap-ns+xml":"xns","application/xenc+xml":"xenc","application/xhtml+xml":"xhtml","application/xliff+xml":"xlf","application/xml":"xml","application/xml-dtd":"dtd","application/xop+xml":"xop","application/xproc+xml":"xpl","application/xslt+xml":"xsl","application/xspf+xml":"xspf","application/xv+xml":"mxml","application/yang":"yang","application/yin+xml":"yin","application/zip":"zip","audio/3gpp":"3gpp","audio/adpcm":"adp","audio/amr":"amr","audio/basic":"au","audio/midi":"mid","audio/mobile-xmf":"mxmf","audio/mp3":"mp3","audio/mp4":"m4a","audio/mpeg":"mpga","audio/ogg":"oga","audio/s3m":"s3m","audio/silk":"sil","audio/vnd.dece.audio":"uva","audio/vnd.digital-winds":"eol","audio/vnd.dra":"dra","audio/vnd.dts":"dts","audio/vnd.dts.hd":"dtshd","audio/vnd.lucent.voice":"lvp","audio/vnd.ms-playready.media.pya":"pya","audio/vnd.nuera.ecelp4800":"ecelp4800","audio/vnd.nuera.ecelp7470":"ecelp7470","audio/vnd.nuera.ecelp9600":"ecelp9600","audio/vnd.rip":"rip","audio/wav":"wav","audio/wave":"wav","audio/webm":"weba","audio/x-aac":"aac","audio/x-aiff":"aif","audio/x-caf":"caf","audio/x-flac":"flac","audio/x-m4a":"m4a","audio/x-matroska":"mka","audio/x-mpegurl":"m3u","audio/x-ms-wax":"wax","audio/x-ms-wma":"wma","audio/x-pn-realaudio":"ram","audio/x-pn-realaudio-plugin":"rmp","audio/x-realaudio":"ra","audio/x-wav":"wav","audio/xm":"xm","chemical/x-cdx":"cdx","chemical/x-cif":"cif","chemical/x-cmdf":"cmdf","chemical/x-cml":"cml","chemical/x-csml":"csml","chemical/x-xyz":"xyz","font/collection":"ttc","font/otf":"otf","font/ttf":"ttf","font/woff":"woff","font/woff2":"woff2","image/aces":"exr","image/apng":"apng","image/avci":"avci","image/avcs":"avcs","image/avif":"avif","image/bmp":"bmp","image/cgm":"cgm","image/dicom-rle":"drle","image/emf":"emf","image/fits":"fits","image/g3fax":"g3","image/gif":"gif","image/heic":"heic","image/heic-sequence":"heics","image/heif":"heif","image/heif-sequence":"heifs","image/hej2k":"hej2","image/hsj2":"hsj2","image/ief":"ief","image/jls":"jls","image/jp2":"jp2","image/jpeg":"jpeg","image/jph":"jph","image/jphc":"jhc","image/jpm":"jpm","image/jpx":"jpx","image/jxr":"jxr","image/jxra":"jxra","image/jxrs":"jxrs","image/jxs":"jxs","image/jxsc":"jxsc","image/jxsi":"jxsi","image/jxss":"jxss","image/ktx":"ktx","image/ktx2":"ktx2","image/png":"png","image/prs.btif":"btif","image/prs.pti":"pti","image/sgi":"sgi","image/svg+xml":"svg","image/t38":"t38","image/tiff":"tif","image/tiff-fx":"tfx","image/vnd.adobe.photoshop":"psd","image/vnd.airzip.accelerator.azv":"azv","image/vnd.dece.graphic":"uvi","image/vnd.djvu":"djvu","image/vnd.dvb.subtitle":"sub","image/vnd.dwg":"dwg","image/vnd.dxf":"dxf","image/vnd.fastbidsheet":"fbs","image/vnd.fpx":"fpx","image/vnd.fst":"fst","image/vnd.fujixerox.edmics-mmr":"mmr","image/vnd.fujixerox.edmics-rlc":"rlc","image/vnd.microsoft.icon":"ico","image/vnd.ms-dds":"dds","image/vnd.ms-modi":"mdi","image/vnd.ms-photo":"wdp","image/vnd.net-fpx":"npx","image/vnd.pco.b16":"b16","image/vnd.tencent.tap":"tap","image/vnd.valve.source.texture":"vtf","image/vnd.wap.wbmp":"wbmp","image/vnd.xiff":"xif","image/vnd.zbrush.pcx":"pcx","image/webp":"webp","image/wmf":"wmf","image/x-3ds":"3ds","image/x-cmu-raster":"ras","image/x-cmx":"cmx","image/x-freehand":"fh","image/x-icon":"ico","image/x-jng":"jng","image/x-mrsid-image":"sid","image/x-ms-bmp":"bmp","image/x-pcx":"pcx","image/x-pict":"pic","image/x-portable-anymap":"pnm","image/x-portable-bitmap":"pbm","image/x-portable-graymap":"pgm","image/x-portable-pixmap":"ppm","image/x-rgb":"rgb","image/x-tga":"tga","image/x-xbitmap":"xbm","image/x-xpixmap":"xpm","image/x-xwindowdump":"xwd","message/disposition-notification":"disposition-notification","message/global":"u8msg","message/global-delivery-status":"u8dsn","message/global-disposition-notification":"u8mdn","message/global-headers":"u8hdr","message/rfc822":"eml","message/vnd.wfa.wsc":"wsc","model/3mf":"3mf","model/gltf+json":"gltf","model/gltf-binary":"glb","model/iges":"igs","model/mesh":"msh","model/mtl":"mtl","model/obj":"obj","model/step+xml":"stpx","model/step+zip":"stpz","model/step-xml+zip":"stpxz","model/stl":"stl","model/vnd.collada+xml":"dae","model/vnd.dwf":"dwf","model/vnd.gdl":"gdl","model/vnd.gtw":"gtw","model/vnd.mts":"mts","model/vnd.opengex":"ogex","model/vnd.parasolid.transmit.binary":"x_b","model/vnd.parasolid.transmit.text":"x_t","model/vnd.sap.vds":"vds","model/vnd.usdz+zip":"usdz","model/vnd.valve.source.compiled-map":"bsp","model/vnd.vtu":"vtu","model/vrml":"wrl","model/x3d+binary":"x3db","model/x3d+fastinfoset":"x3db","model/x3d+vrml":"x3dv","model/x3d+xml":"x3d","model/x3d-vrml":"x3dv","text/cache-manifest":"appcache","text/calendar":"ics","text/coffeescript":"coffee","text/css":"css","text/csv":"csv","text/html":"html","text/jade":"jade","text/jsx":"jsx","text/less":"less","text/markdown":"markdown","text/mathml":"mml","text/mdx":"mdx","text/n3":"n3","text/plain":"txt","text/prs.lines.tag":"dsc","text/richtext":"rtx","text/rtf":"rtf","text/sgml":"sgml","text/shex":"shex","text/slim":"slim","text/spdx":"spdx","text/stylus":"stylus","text/tab-separated-values":"tsv","text/troff":"t","text/turtle":"ttl","text/uri-list":"uri","text/vcard":"vcard","text/vnd.curl":"curl","text/vnd.curl.dcurl":"dcurl","text/vnd.curl.mcurl":"mcurl","text/vnd.curl.scurl":"scurl","text/vnd.dvb.subtitle":"sub","text/vnd.familysearch.gedcom":"ged","text/vnd.fly":"fly","text/vnd.fmi.flexstor":"flx","text/vnd.graphviz":"gv","text/vnd.in3d.3dml":"3dml","text/vnd.in3d.spot":"spot","text/vnd.sun.j2me.app-descriptor":"jad","text/vnd.wap.wml":"wml","text/vnd.wap.wmlscript":"wmls","text/vtt":"vtt","text/x-asm":"s","text/x-c":"c","text/x-component":"htc","text/x-fortran":"f","text/x-handlebars-template":"hbs","text/x-java-source":"java","text/x-lua":"lua","text/x-markdown":"mkd","text/x-nfo":"nfo","text/x-opml":"opml","text/x-org":"org","text/x-pascal":"p","text/x-processing":"pde","text/x-sass":"sass","text/x-scss":"scss","text/x-setext":"etx","text/x-sfv":"sfv","text/x-suse-ymp":"ymp","text/x-uuencode":"uu","text/x-vcalendar":"vcs","text/x-vcard":"vcf","text/xml":"xml","text/yaml":"yaml","video/3gpp":"3gp","video/3gpp2":"3g2","video/h261":"h261","video/h263":"h263","video/h264":"h264","video/iso.segment":"m4s","video/jpeg":"jpgv","video/jpm":"jpm","video/mj2":"mj2","video/mp2t":"ts","video/mp4":"mp4","video/mpeg":"mpeg","video/ogg":"ogv","video/quicktime":"qt","video/vnd.dece.hd":"uvh","video/vnd.dece.mobile":"uvm","video/vnd.dece.pd":"uvp","video/vnd.dece.sd":"uvs","video/vnd.dece.video":"uvv","video/vnd.dvb.file":"dvb","video/vnd.fvt":"fvt","video/vnd.mpegurl":"mxu","video/vnd.ms-playready.media.pyv":"pyv","video/vnd.uvvu.mp4":"uvu","video/vnd.vivo":"viv","video/webm":"webm","video/x-f4v":"f4v","video/x-fli":"fli","video/x-flv":"flv","video/x-m4v":"m4v","video/x-matroska":"mkv","video/x-mng":"mng","video/x-ms-asf":"asf","video/x-ms-vob":"vob","video/x-ms-wm":"wm","video/x-ms-wmv":"wmv","video/x-ms-wmx":"wmx","video/x-ms-wvx":"wvx","video/x-msvideo":"avi","video/x-sgi-movie":"movie","video/x-smv":"smv","x-conference/x-cooltalk":"ice"},Zg=/^\s*([^;\s]*)(?:;|\s|$)/;function vr(n){if(!n||typeof n!="string")return"";let t=Zg.exec(n);return t&&Wg[t[1].toLowerCase()]||""}var Rn=n=>Ze(n).replace(/[\[\]\#\^]/g,""),hi=(n,t)=>K.readdirSync(n).filter(i=>{let r=i.split(".").slice(0,-1).join("."),o=Sn(t),a=r.match(new RegExp(`${o}\\.\\d+`));return r===t||a}).length,ou=(n,t)=>{let e=B.useUniqueUnknownFileNames?"unknown_filename"+(Math.random().toString(16)+"0000000").slice(2,10):"unknown_filename",i=Gg(t),r=e;if(t["resource-attributes"]&&t["resource-attributes"]["file-name"]){let s=t["resource-attributes"]["file-name"].substr(0,50);r=re(s).basename}r=r.replace(/[/\\?%*:|"<>\[\]\+]/g,"-"),B.sanitizeResourceNameSpaces&&(r=r.replace(/ /g,B.replacementChar));let o=hi(n,r);return{fileName:`${o>0?`${r}.${o}`:r}.${i}`,extension:i,index:o}},Fa=n=>Rn(n.title?`${n.title.toString()}`:"Untitled"),au=(n,t,e="md")=>`${La(n,t)}.${e}`,Yg=n=>{if(!(n["resource-attributes"]&&n["resource-attributes"]["file-name"]))return"";let t=n["resource-attributes"]["file-name"].split(".");return t.length>1?t[t.length-1]:void 0},zg=n=>{let t=n.mime;return t&&vr(t)||""},Gg=n=>{let t="dat";return Yg(n)||zg(n)||t},Vg=(n,t)=>(0,ru.moment)(n.created).format("YYYYMMDDHHmm"),La=(n,t)=>{let e;if(B.isZettelkastenNeeded||B.useZettelIdAsFilename){let i=Vg(t,n),r=hi(n,i),o=" ";e=r!==0?`${i}.${r}`:i,B.useZettelIdAsFilename||(e+=Fa(t)!=="Untitled"?`${o}${Fa(t)}`:"")}else{let i=Fa(t),r=hi(n,i);e=r===0?i:`${i}.${r}`}return e};var su=n=>n==="Table of Contents";var Kg=n=>n.replace(/\[|\]/g,""),Xg=n=>n.replace(/\\/g,""),cu={filter:qe("A"),replacement:(n,t)=>{let e=ue(t);if(!e.href)return"";let i=Er(B).turndown(Kg(t.innerHTML));i=Xg(i);let r="",o=i.match(/^(#{1,6} )(.*)/);o&&(r=o[1],i=o[2]);let a=e.href.value,s=e.type?e.type.value:void 0,l=B.urlEncodeFileNamesAndLinks?encodeURI(a):a;if(s==="file")return`![[${l}]]`;if(a.match(/^(https?:|www\.|file:|ftp:|mailto:)/))return r+e0(i,a);if(a.startsWith("evernote://")){let c=Rn(i),p=fe.getInstance(),m=xn(6);return su(p.getCurrentNoteName())?p.addItemToTOCMap({url:a,title:c,uniqueEnd:m}):p.addItemToMap({url:a,title:c,uniqueEnd:m}),r+`[[${a}]]`}return r+`[[${l}${i===l?"":`|${i}`}]]`}},Jg={"&":"&","<":"<",">":">",""":'"',"'":"'"},pu=/&(?:amp|lt|gt|quot|#39);/g,Qg=RegExp(pu.source);function lu(n){return n&&Qg.test(n)?n.replace(pu,t=>Jg[t]):n}var e0=(n,t)=>!n||lu(n)===lu(t)?B.generateNakedUrls?t:`<${t}>`:`[${n}](${t})`;var we={bold:"**",italic:"_",highlight:"==",strikethrough:"~~"};var t0="-evernote-highlight:true;",n0="--en-highlight",i0="bold",r0="italic",uu={filter:qe("SPAN"),replacement:(n,t)=>{let e=ue(t);if(e.style&&n.trim()!==""){let i=e.style.value;if(n!=="<YARLE_NEWLINE_PLACEHOLDER>"){let r=i.includes(i0),o=i.includes(r0);if(r&&!o)return`${we.bold}${n}${we.bold}`;if(!r&&o)return`${we.italic}${n}${we.italic}`;if(r&&o)return`${we.italic}${we.bold}${n}${we.bold}${we.italic}`}return i.includes(t0)||i.includes(n0)?`${we.highlight}${n}${we.highlight}`:n}return n}};var fu={filter:["del","s","strike"],replacement:n=>`${we.strikethrough}${n}${we.strikethrough}`};var du={filter:qe("EN-TODO"),replacement:(n,t)=>{var r,o;let e=ue(t);return`${((o=(r=t.parentElement)==null?void 0:r.nodeName)==null?void 0:o.toUpperCase())==="LI"?"":"- "}${e.checked&&e.checked.value==="true"?"[x]":"[ ]"} ${n}`}};var mu={filter:qe("BR"),replacement:(n,t)=>"<YARLE_NEWLINE_PLACEHOLDER>"};var o0=n=>{let t=ue(n),e="--en-task-group:true";return t.style&&t.style.value.indexOf(e)>=0},a0=n=>{let t=ue(n),e="--en-id:";return t.style.value.split(e)[1].split(";")[0]},hu={filter:qe("DIV"),replacement:(n,t)=>o0(t)?`<YARLE-EN-V10-TASK>${a0(t)}</YARLE-EN-V10-TASK>`:B.monospaceIsCodeBlock?nu(n,t):eu(n,t)};var gu={filter:["i"],replacement:n=>n.trim()!==""?`${we.italic}${n}${we.italic}`:n};var _r="- [ ]",Tr="- [x]";var yu=" ",bu={filter:"li",replacement:(n,t,e)=>{let i=m=>{let y=ue(m),w="--en-checked:true;";return y.style&&y.style.value.indexOf(w)>=0},r=m=>{let y=ue(m),w="--en-checked:false;";return y.style&&y.style.value.indexOf(w)>=0},o=n.match(/^\n*/)[0].length||0,a=yu.repeat(o),s=n.replace(/^\n+/,"").replace(/\n+$/,` +`).replace(/\n/gm,` +${yu}`),l=o>0?a:i(t)?`${Tr} `:r(t)?`${_r} `:"* ",c=t.parentNode;if(c.nodeName==="OL"){let m=c.getAttribute("start"),y=Array.prototype.indexOf.call(c.children,t);l=`${m?Number(m)+y:y+1}. `}let p;return p=l+s+(t.nextSibling&&!/\n$/.test(s)?` +`:""),p}};var Er=n=>{let t=new window.TurndownService({br:"",...n.turndownOptions,blankReplacement:(e,i)=>i.isBlock?` + +`:"",keepReplacement:(e,i)=>i.isBlock?` +${i.outerHTML} +`:i.outerHTML,defaultReplacement:(e,i)=>i.isBlock?` +${e} +`:e});return t.use(Jp),t.addRule("span",uu),t.addRule("strikethrough",fu),t.addRule("evernote task items",du),t.addRule("wikistyle links",cu),t.addRule("images",iu),t.addRule("list",bu),t.addRule("italic",gu),n.keepMDCharactersOfENNotes&&(t.escape=e=>e),t.addRule("divBlock",hu),n.keepOriginalAmountOfNewlines&&t.addRule("newline",mu),t};var xu=n=>{n.replaceWith(...Array.from(n.children))},wu=n=>{let t=n.parentElement;t.replaceWith(...Array.from(t.childNodes)),t.append(...Array.from(n.childNodes)),n.appendChild(t)},s0=n=>(Array.from(n.querySelectorAll("span>en-todo")).forEach(wu),Array.from(n.querySelectorAll("a>en-todo")).forEach(wu),n),l0=n=>{let t=n.replace(/<li>/g,"<li><div>");return t=t.replace(/<\/li>/g,"</div></li>"),t=t.replace(/<li><div>(\s)*<div>/g,"<li><div>"),t=t.replace(/<\/div>(\s)*<\/div><\/li>/g,"</div></li>"),t},c0=n=>{var o;let t=Array.from(n.getElementsByTagName("ul")),e=Array.from(n.getElementsByTagName("ol")),i=t.concat(e);i.forEach(a=>{a.parentElement.tagName==="LI"&&a.parentElement.replaceWith(a),a.previousElementSibling&&a.previousElementSibling.tagName==="LI"&&a.previousElementSibling.appendChild(a)});for(let a of i){let s=a.parentElement;(s==null?void 0:s.tagName)==="DIV"&&((o=s==null?void 0:s.parentElement)==null?void 0:o.tagName)==="UL"&&xu(s),((s==null?void 0:s.tagName)==="UL"||(s==null?void 0:s.tagName)==="OL")&&(s==null?void 0:s.childNodes.length)===1&&xu(s)}let r=Array.from(n.getElementsByTagName("li"));for(let a of r){let s=a.firstElementChild;if(s&&s.tagName==="DIV"){let l=Array.from(s.childNodes);s.replaceWith(...l)}}return n},vu=(n,{htmlContent:t})=>{let e=t.replace(/<!DOCTYPE en-note [^>]*>/,"<!DOCTYPE html>").replace(/(<a [^>]*)\/>/,"$1></a>").replace(/<div[^\/\<]*\/>/g,""),i=new DOMParser().parseFromString(l0(e),"text/html").getElementsByTagName("en-note").item(0),r=Er(n).turndown(s0(c0(i))),o=new RegExp("<YARLE_NEWLINE_PLACEHOLDER>","g");return r=r.replace(o,""),r&&r!=="undefined"?{content:r}:{content:""}};var df=rs(require("crypto"));var yt=require("obsidian");var Eu=(n,t)=>({createdAt:p0(n),updatedAt:u0(n),sourceUrl:f0(n),location:d0(n),reminderTime:m0(n),reminderOrder:h0(n),reminderDoneTime:g0(n),notebookName:t});var p0=n=>!B.skipCreationTime&&n.created?(0,yt.moment)(n.created).format(B.dateFormat):"",u0=n=>!B.skipUpdateTime&&n.updated?(0,yt.moment)(n.updated).format(B.dateFormat):"",f0=n=>!B.skipSourceUrl&&n["note-attributes"]?n["note-attributes"]["source-url"]:"",d0=n=>!B.skipLocation&&n["note-attributes"]&&n["note-attributes"].longitude?`${n["note-attributes"].latitude},${n["note-attributes"].longitude}`:"",m0=n=>!B.skipReminderTime&&n["note-attributes"]&&n["note-attributes"]["reminder-time"]?(0,yt.moment)(n["note-attributes"]["reminder-time"]).format(B.dateFormat):"",h0=n=>!B.skipReminderOrder&&n["note-attributes"]&&n["note-attributes"]["reminder-order"]?n["note-attributes"]["reminder-order"]:"",g0=n=>!B.skipReminderDoneTime&&n["note-attributes"]&&n["note-attributes"]["reminder-done-time"]?(0,yt.moment)(n["note-attributes"]["reminder-done-time"]).format(B.dateFormat):"",_u=n=>({tags:y0(n)}),y0=n=>{if(!B.skipTags&&n.tag){let t=Array.isArray(n.tag)?n.tag:[n.tag],e=B.nestedTags;return t.map(r=>{let o=r.toString().replace(/^#/,"");e&&(o=o.replace(new RegExp(Sn(e.separatorInEN),"g"),e.replaceSeparatorWith));let a=e&&e.replaceSpaceWith||"-";return o=o.replace(/ /g,a),`${B.useHashTags?"#":""}${o}`}).join(" ")}return""},Pa;try{Pa=window.require("btime")}catch(n){}var Ar=(n,t)=>{let e=(0,yt.moment)(t.created).valueOf();e>0&&Pa&&Pa.btime(n,e);let r=(0,yt.moment)(t.updated).valueOf()/1e3;try{K.utimesSync(n,r,r)}catch(o){}},Tu=n=>n["resource-attributes"]&&n["resource-attributes"].timestamp?(0,yt.moment)(n["resource-attributes"].timestamp):(0,yt.moment)();var Au=(n,t,e)=>{let i=n.lastIndexOf(t);return i<0?n:n.substring(0,i)+e+n.substring(i+t.length)};var Ae={mdPath:"",resourcePath:""},Nr=249,ku=(n,t)=>La(n,t).replace(/\s/g,"_"),Nu=(n,t)=>{if(n.length<=11)throw Error("FATAL: note folder directory path exceeds the OS limitation. Please pick a destination closer to the root folder.");return`${$a()}${q.sep}${n}`.length<Nr?n:`${n.slice(0,Nr-11)}_${t}.md`},b0=(n,t,e)=>{let r=fe.getInstance().getNoteIdNameMapByNoteTitle(Rn(n.title))[0]||{uniqueEnd:xn(6)};if(t.length<=11)throw Error("FATAL: note folder directory path exceeds the OS limitation. Please pick a destination closer to the root folder.");return`${e.slice(0,Nr-11)}_${r.uniqueEnd}.md`},x0=(n,t,e)=>{let i=au(n,t,e),r=`${n}${q.sep}${Rn(i)}`;return r.length<Nr?r:b0(t,i,r)},Su=n=>x0(Ae.mdPath,n,"md");var w0=n=>{K.existsSync(n)&&(K.rmSync?K.rmSync(n,{recursive:!0,force:!0}):K.rmdirSync(n,{recursive:!0})),K.mkdirSync(n)},Ru=n=>{let t=`${q.sep}${B.resourcesDir}`;return B.haveGlobalResources?`..${t}`:B.haveEnexLevelResources?`.${t}`:`.${t}${q.sep}${ku(Ae.mdPath,n)}.resources`},Ma=n=>B.haveGlobalResources?q.resolve(Ae.resourcePath,"..","..",B.resourcesDir):B.haveEnexLevelResources?Ae.resourcePath:`${Ae.resourcePath}${q.sep}${ku(Ae.mdPath,n)}.resources`,kr=new Map,Ou=n=>{let t=Ma(n);kr.has(t)||kr.set(t,0);let e=kr.get(t)||0;(B.haveEnexLevelResources||B.haveGlobalResources)&&e>=1||(w0(t),kr.set(t,e+1))},Du=n=>{let t=n.split("@@@"),e=t.pop();return e||(e=n),{notebookName:e,notebookFolderNames:t}},Cu=n=>{if(!(n instanceof Me))throw new Error("Evernote import currently only works on desktop");let{notebookName:t}=Du(n.basename);return{fullpath:Au(n.fullpath,n.basename,t||n.basename),basename:t}},Iu=(n,t)=>{let{notebookFolderNames:e}=Du(n.basename);return K.mkdirSync(q.join(t.outputDir,...e),{recursive:!0}),[t.outputDir,...e].join(t.pathSeparator)},Fu=(n,t)=>{let e=n.basename;Pu(e,t)},Lu=(n,t)=>{let e=n.basename;Pu(e,t)},Pu=(n,t)=>{let e=q.isAbsolute(t.outputDir)?t.outputDir:`${process.cwd()}${q.sep}${t.outputDir}`;Ae.mdPath=`${e}${q.sep}`,Ae.resourcePath=`${e}${q.sep}${t.resourcesDir}`,t.skipEnexFileNameFromOutputPath||(Ae.mdPath=`${Ae.mdPath}${n}`,Ae.resourcePath=`${e}${q.sep}${n}${q.sep}${t.resourcesDir}`),K.mkdirSync(Ae.mdPath,{recursive:!0}),!t.haveEnexLevelResources&&!t.haveGlobalResources&&K.mkdirSync(Ae.resourcePath,{recursive:!0}),console.log(`path ${Ae.mdPath} created`)},$a=()=>Ae.mdPath;var Mu=n=>!!n.resource,$u=n=>n["note-attributes"]&&(n["note-attributes"]["source-application"]==="webclipper.evernote"||n["note-attributes"].source==="web.clip7");var Ba={};Se(Ba,{CONTENT_PLACEHOLDER:()=>v0,END_BLOCK:()=>_0,START_BLOCK:()=>E0});var v0="{content}",E0="{content-block}",_0="{end-content-block}";var Pt=({template:n,check:t,startBlockPlaceholder:e,endBlockPlaceholder:i,valuePlaceholder:r,value:o})=>{if(o&&t())return n.replace(new RegExp(`${e}`,"g"),"").replace(new RegExp(`${i}`,"g"),"").replace(new RegExp(`${r}`,"g"),o);let a=`${e}([\\d\\D])(?:.|(\r +|\r| +))*?(?=${i})${i}`;return n.replace(new RegExp(a,"g"),"")};var Mt=(n,t,e,i)=>({template:n,check:t,startBlockPlaceholder:e.START_BLOCK,endBlockPlaceholder:e.END_BLOCK,valuePlaceholder:e.CONTENT_PLACEHOLDER,value:i});var Bu=(n,t,e)=>{let i=Mt(t,e,Ba,n.content);return Pt(i)};var gi={};Se(gi,{CONTENT_PLACEHOLDER:()=>T0,END_BLOCK:()=>k0,START_BLOCK:()=>A0});var T0="{tags}",A0="{tags-block}",k0="{end-tags-block}";var Uu=(n,t,e)=>{let i=Mt(t,e,gi,n.tags);return Pt(i)};var Ua={};Se(Ua,{CONTENT_PLACEHOLDER:()=>N0,END_BLOCK:()=>R0,START_BLOCK:()=>S0});var N0="{title}",S0="{title-block}",R0="{end-title-block}";var ju=(n,t,e)=>{let i=Mt(t,e,Ua,n.title);return Pt(i)};var rn={};Se(rn,{CONTENT_PLACEHOLDER:()=>O0,END_BLOCK:()=>C0,START_BLOCK:()=>D0});var O0="{created-at}",D0="{created-at-block}",C0="{end-created-at-block}";var Ee=(n,t,e)=>n.replace(new RegExp(`${t.CONTENT_PLACEHOLDER}`,"g"),e||"").replace(new RegExp(`${t.START_BLOCK}`,"g"),"").replace(new RegExp(`${t.END_BLOCK}`,"g"),"");var Hu=(n,t)=>Ee(t,rn,n.createdAt);var on={};Se(on,{CONTENT_PLACEHOLDER:()=>I0,END_BLOCK:()=>L0,START_BLOCK:()=>F0});var I0="{updated-at}",F0="{updated-at-block}",L0="{end-updated-at-block}";var qu=(n,t)=>Ee(t,on,n.updatedAt);var an={};Se(an,{CONTENT_PLACEHOLDER:()=>P0,END_BLOCK:()=>$0,START_BLOCK:()=>M0});var P0="{source-url}",M0="{source-url-block}",$0="{end-source-url-block}";var Wu=(n,t)=>Ee(t,an,n.sourceUrl);var sn={};Se(sn,{CONTENT_PLACEHOLDER:()=>B0,END_BLOCK:()=>j0,START_BLOCK:()=>U0});var B0="{location}",U0="{location-block}",j0="{end-location-block}";var Zu=(n,t)=>Ee(t,sn,n.location);var ln={};Se(ln,{CONTENT_PLACEHOLDER:()=>H0,END_BLOCK:()=>W0,START_BLOCK:()=>q0});var H0="{notebook}",q0="{notebook-block}",W0="{end-notebook-block}";var Yu=(n,t)=>Ee(t,ln,n.notebookName);var On={};Se(On,{CONTENT_PLACEHOLDER:()=>Z0,END_BLOCK:()=>z0,START_BLOCK:()=>Y0});var Z0="{reminder-time}",Y0="{reminder-time-block}",z0="{end-reminder-time-block}";var zu=(n,t)=>Ee(t,On,n.reminderTime);var Dn={};Se(Dn,{CONTENT_PLACEHOLDER:()=>G0,END_BLOCK:()=>K0,START_BLOCK:()=>V0});var G0="{reminder-order}",V0="{reminder-order-block}",K0="{end-reminder-order-block}";var Gu=(n,t)=>Ee(t,Dn,n.reminderOrder);var Cn={};Se(Cn,{CONTENT_PLACEHOLDER:()=>X0,END_BLOCK:()=>Q0,START_BLOCK:()=>J0});var X0="{reminder-done-time}",J0="{reminder-done-time-block}",Q0="{end-reminder-done-time-block}";var Vu=(n,t)=>Ee(t,Cn,n.reminderDoneTime);var yi={};Se(yi,{CONTENT_PLACEHOLDER:()=>ey,END_BLOCK:()=>ny,START_BLOCK:()=>ty});var ey="{tags-yaml-list}",ty="{tags-yaml-list-block}",ny="{end-tags-yaml-list-block}";var Ku=(n,t,e)=>{let i;n.tags&&(i=` +`+n.tags.split(" ").map(o=>` - ${o.replace(/^#/,"")}`).join(` +`));let r=Mt(t,e,yi,i);return Pt(r)};var ja="{metadata-block}",Ha="{end-metadata-block}";var Xu=`\r? +?`;var de=(n,t)=>n.replace(new RegExp(`${t.START_BLOCK}(?<=${t.START_BLOCK})(.*)(?=${t.END_BLOCK})${t.END_BLOCK}${Xu}`,"g"),"");var Ju=n=>de(n,rn);var Qu=n=>de(n,on);var ef=n=>de(n,an);var tf=n=>de(n,ln);var nf=n=>de(n,sn);var Sr={};Se(Sr,{CONTENT_PLACEHOLDER:()=>ry,END_BLOCK:()=>ay,START_BLOCK:()=>oy});var ry="{link-to-original}",oy="{link-to-original-block}",ay="{end-link-to-original-block}";var rf=n=>de(n,Sr);var of=n=>de(n,On);var af=n=>de(n,Cn);var sf=n=>de(n,Dn);var lf=(n,t)=>{let e=t.currentTemplate;return e=ju(n,e,()=>n.title),e=Uu(n,e,()=>!t.skipTags),e=Ku(n,e,()=>!t.skipTags),e=Bu(n,e,()=>n.content),e=rf(e),e=!t.skipCreationTime&&n.createdAt?Hu(n,e):Ju(e),e=!t.skipUpdateTime&&n.updatedAt?qu(n,e):Qu(e),e=!t.skipSourceUrl&&n.sourceUrl?Wu(n,e):ef(e),e=!t.skipLocation&&n.location?Zu(n,e):nf(e),e=t.isNotebookNameNeeded&&n.notebookName?Yu(n,e):tf(e),e=!t.skipReminderTime&&n.reminderTime?zu(n,e):of(e),e=!t.skipReminderOrder&&n.reminderOrder?Gu(n,e):sf(e),e=!t.skipReminderDoneTime&&n.reminderDoneTime?Vu(n,e):af(e),e=e.replace(ja,"").replace(Ha,""),e};var cf=(n,t,e)=>{try{K.writeFileSync(n,t),Ar(n,e)}catch(i){throw console.error("Cannot write file ",i),i}};var pf=(n,t)=>{let e=Su(t);fe.getInstance().setCurrentNotePath(e),cf(e,n,t),console.log(`Note saved to ${e}`)};var mf=n=>{let t=new RegExp(`\\${q.sep}`,"g"),e=Ru(n).replace(t,B.pathSeparator||"/");return{absoluteResourceWorkDir:Ma(n),relativeResourceWorkDir:e}},hf=n=>{let t={},e=n.content,{absoluteResourceWorkDir:i,relativeResourceWorkDir:r}=mf(n);if(console.log(`relative resource work dir: ${r}`),console.log(`absolute resource work dir: ${i}`),Ou(n),Array.isArray(n.resource))for(let o of n.resource)t={...t,...ff(i,o)};else t={...t,...ff(i,n.resource)};for(let o of Object.keys(t))e=sy(e,t,o,r);return e},sy=(n,t,e,i)=>{let r=`${i}${B.pathSeparator}${t[e].fileName.replace(/ /g," ")}`;console.log(`mediaReference src ${r} added`);let o,a=`<en-media ([^>]*)hash="${e}".([^>]*)>`,s=new RegExp(a,"g"),l=n.match(s),c=l&&l.length>0&&l[0].split("type=");if(c&&c.length>1&&c[1].startsWith('"image')){let p=l[0].match(/width="(\w+)"/),m=p?` width="${p[1]}"`:"",y=l[0].match(/height="(\w+)"/),w=y?` height="${y[1]}"`:"";o=n.replace(s,`<img src="${r}"${m}${w} alt="${t[e].fileName}">`)}else o=n.replace(s,`<a href="${r}" type="file">${t[e].fileName}</a>`);return o},ff=(n,t)=>{let e={},i=t.data.$text,r=Tu(t),a=ou(n,t).fileName,s=`${n}${q.sep}${a}`;console.log(t),console.log(i);let l=Buffer.from(i,"base64");K.writeFileSync(s,l);let c=r.valueOf()/1e3;try{K.utimesSync(s,c,c)}catch(p){}if(t.recognition&&a){let p=t.recognition.match(/[a-f0-9]{32}/);console.log(`resource ${a} added with hash ${p}`),e[p]={fileName:a,alreadyUsed:!1}}else{let p=df.default.createHash("md5");p.update(l);let m=p.digest("hex");e[m]={fileName:a,alreadyUsed:!1}}return e},gf=(n,t)=>{if(t.indexOf('src="data:')<0)return t;let{absoluteResourceWorkDir:e,relativeResourceWorkDir:i}=mf(n);return K.mkdirSync(e,{recursive:!0}),t.replace(/src="data:([^;,]*)(;base64)?,([^"]*)"/g,(r,o,a,s)=>{let l=ly(o,a===";base64",s,e,n);return`src="${`${i}${B.pathSeparator}${l}`}"`})},ly=(n,t,e,i,r)=>{let o="embedded",a=cy(n)||".dat",s=hi(i,o),l=s<1?`${o}.${a}`:`${o}.${s}.${a}`,c=`${i}${q.sep}${l}`;return t||(e=decodeURIComponent(e)),K.writeFileSync(c,e,t?"base64":void 0),Ar(c,r),console.log(`data url resource ${l} added`),l},cy=n=>n.split("/").pop().split("+")[0];var yf=(n,t)=>{let e=new Date;fe.getInstance().setCurrentNoteName(n.title),Array.isArray(n.content)&&(n.content=n.content.join(""));let r={title:n.title,content:n.content,htmlContent:n.content,originalContent:n.content};console.log(`Converting for note "${r.title}" started at ${e}...`);try{Mu(n)&&(r.htmlContent=hf(n)),r.htmlContent=gf(n,r.htmlContent),r={...r,...vu(B,r)},r={...r,...Eu(n,t)},r={...r,..._u(n)};let o=lf(r,B);pf(o,n)}catch(o){throw console.error(`Failed to convert note: ${r.title}`,o),o}finally{let o=new Date,a=(o.getTime()-e.getTime())/1e3;console.log(`Conversion for note "${r.title}" finished at ${o}. Took ${a} seconds`)}};var wf=require("obsidian");var bf=n=>n.taskstatus==="open"?_r:Tr;var py="\u{1F53C}",uy="\u{1F53D}",fy="\u{1F4C5}",dy="\u23F3",vf=(n,t)=>{let e=bf(n),i=n.title?` ${n.title}`:"",r=B.obsidianTaskTag!==""?` ${B.obsidianTaskTag}`:"",o=n.duedate&&!isNaN(n.duedate.getTime())?` ${fy} ${xf(n.duedate)}`:"",a=n.reminderdate?` ${dy} ${xf(n.reminderdate)}`:"",s=n.taskflag?` ${py}`:` ${uy}`;return`${e}${r}${i}${o}${a}${s}`},xf=n=>(0,wf.moment)(n).format("YYYY-MM-DD").toString();var Wa=(n,t,e)=>{let i=K.readdirSync(n);return t=t||[],i.forEach(r=>{K.statSync(`${n}${q.sep}${r}`).isDirectory()?t=Wa(`${n}${q.sep}${r}`,t,e):(e&&q.extname(r)==`.${e}`||!e)&&t.push(q.join(n,"/",r))}),t};var Ef=(n,t)=>{let i=fe.getInstance().getAllNoteIdNameMap(),r=Object.entries(i);if(r.length===0)return;console.log("About to update links...");let o=[];for(let a of t)Wa(a,o,"");for(let a of t){console.log(`Notebook: ${a}`);let l=K.readdirSync(a).filter(c=>q.extname(c).toLowerCase()===".md");console.log(`${l.length} files to check for links`);for(let c of l){let p=q.join(a,c),m=K.readFileSync(p,"utf8"),y=m;for(let[w,E]of r){let d=E.uniqueEnd,f=E.title;o.find(D=>D.includes(d))&&(f=Nu(f,d));let g=E.notebookName,v=n.urlEncodeFileNamesAndLinks?encodeURI(f):f,_=v;g&&!a.endsWith(g)&&(_=`${g}/${v}`);let A=new RegExp(Sn(w),"g");y=y.replace(A,_)}m!==y&&(console.log(`File written: ${p}`),K.writeFileSync(p,y))}}console.log("Link update complete.")};var _f=n=>cn(rn,n);var Tf=n=>cn(sn,n),Af=n=>cn(ln,n);var kf=n=>cn(an,n),Nf=n=>cn(gi,n)||cn(yi,n);var Sf=n=>cn(on,n),cn=(n,t)=>t.includes(n.START_BLOCK)&&t.includes(n.CONTENT_PLACEHOLDER)&&t.includes(n.END_BLOCK);var Rf=`--- +`,my=`{source-url-block}source: {source-url}{end-source-url-block} +`,hy=`{tags-yaml-list-block} +tags: {tags-yaml-list} + +{end-tags-yaml-list-block}`,gy=`{content-block}{content}{end-content-block} +`,Of=Rf+hy+my+Rf+gy;var Cy=Bf.Platform.isDesktopApp?$f():null,Dr={enexSources:[],currentTemplate:"",outputDir:"./mdNotes",isMetadataNeeded:!1,isNotebookNameNeeded:!1,isZettelkastenNeeded:!1,useZettelIdAsFilename:!1,plainTextNotesOnly:!1,skipWebClips:!1,useHashTags:!0,nestedTags:{separatorInEN:"_",replaceSeparatorWith:"/",replaceSpaceWith:"-"},obsidianTaskTag:"",urlEncodeFileNamesAndLinks:!1,sanitizeResourceNameSpaces:!1,replacementChar:"_",pathSeparator:"/",resourcesDir:"_resources",turndownOptions:{headingStyle:"atx"}},Iy="@@@",B={...Dr};function Fy(n){return n==null?n:JSON.parse(JSON.stringify(n))}function Uf(n,...t){for(let e of t)for(let i of Object.keys(e)){let r=e[i],o=n[i];!Array.isArray(r)&&typeof r=="object"&&!Array.isArray(o)&&typeof o=="object"?n[i]=Uf({},o,r):n[i]=Fy(r)}return n}var Ly=n=>{B=Uf({},Dr,n);let t=B.templateFile?K.readFileSync(B.templateFile,"utf-8"):Of;t=B.currentTemplate?B.currentTemplate:t,B.skipCreationTime=!_f(t),B.skipLocation=!Tf(t),B.skipSourceUrl=!kf(t),B.skipTags=!Nf(t),B.skipUpdateTime=!Sf(t),B.isNotebookNameNeeded=Af(t),B.currentTemplate=t,console.log(`Current config is: ${JSON.stringify(B,null,4)}`),console.log(`Path separator:${q.sep}`)},Py=async(n,t,e)=>{if(!(t instanceof Me))throw new Error("Evernote import currently only works on desktop");let i=fe.getInstance();e.status("Processing "+t.name),console.log(`Getting stream from ${t}`);let r=t.createReadStream(),o={},a=i.getCurrentNotebookName();return new Promise((s,l)=>{let c=y=>(e.reportFailed(i.getCurrentNotebookFullpath(),y),l(y)),p=Cy(r),m=null;p.on("tag:note-attributes",y=>{m=y}),p.on("tag:note",y=>{if(e.isCancelled()){r.close();return}if(n.skipWebClips&&$u(y))e.reportSkipped(y.title);else{e.status("Importing note "+y.title),m&&(y["note-attributes"]=m);try{yf(y,a),e.reportNoteSuccess(a+"/"+y.title)}catch(E){return e.reportFailed(y.title||t,E),s()}}m=null;let w=i.getCurrentNotePath();if(w)for(let E of Object.keys(o)){let d=`<YARLE-EN-V10-TASK>${E}</YARLE-EN-V10-TASK>`,f=K.readFileSync(w,"utf8"),g=new Map([...o[E]].sort()),v=f.replace(d,[...g.values()].join(` +`));K.writeFileSync(w,v)}}),p.on("tag:task",y=>{let w=zp(y);o[w.taskgroupnotelevelid]||(o[w.taskgroupnotelevelid]=new Map),o[w.taskgroupnotelevelid].set(w.sortweight,vf(w,a))}),p.on("end",s),p.on("error",c),r.on("error",c)})};async function jf(n,t){Ly(n);let e=[],i=n.outputDir;for(let r of n.enexSources){if(t.isCancelled())return;let o,a=fe.getInstance();r.basename.includes(Iy)?(n.outputDir=Iu(r,n),o=Cu(r),Lu(o,n),a.setCurrentNotebookName(o.basename),a.setCurrentNotebookFullpath(o.fullpath)):(Fu(r,n),a.setCurrentNotebookName(r.basename),a.setCurrentNotebookFullpath(r.fullpath)),await Py(n,r,t),e.push($a()),n.outputDir=i}t.isCancelled()||await Ef(n,e)}var Cr=class extends ce{init(){this.addFileChooserSetting("Evernote",["enex"],!0),this.addOutputLocationSetting("Evernote")}async import(t){let{files:e}=this;if(e.length===0){new xi.Notice("Please pick at least one file to import.");return}let i=await this.getOutputFolder();if(!i){new xi.Notice("Please select a location to export to.");return}let{app:r}=this,o=r.vault.adapter;if(!(o instanceof xi.FileSystemAdapter))return;let a={...Dr,enexSources:e,outputDir:q.join(o.getBasePath(),i.path)};await jf(a,t)}};var ke=require("obsidian");var Ir=class extends ce{init(){this.addFileChooserSetting("HTML",["htm","html"],!0),this.addAttachmentSizeLimit(0),this.addMinimumImageSize(65),this.addOutputLocationSetting("HTML import")}addAttachmentSizeLimit(e){this.attachmentSizeLimit=e*10**6,new ke.Setting(this.modal.contentEl).setName("Attachment size limit (MB)").setDesc("Set 0 to disable.").addText(i=>i.then(({inputEl:r})=>{r.type="number",r.step="0.1"}).setValue(e.toString()).onChange(r=>{let o=["+","-"].includes(r)?0:Number(r);if(Number.isNaN(o)||o<0){i.setValue((this.attachmentSizeLimit/10**6).toString());return}this.attachmentSizeLimit=o*10**6}))}addMinimumImageSize(e){this.minimumImageSize=e,new ke.Setting(this.modal.contentEl).setName("Minimum image size (px)").setDesc("Set 0 to disable.").addText(i=>i.then(({inputEl:r})=>r.type="number").setValue(e.toString()).onChange(r=>{let o=["+","-"].includes(r)?0:Number(r);if(!Number.isInteger(o)||o<0){i.setValue(this.minimumImageSize.toString());return}this.minimumImageSize=o}))}async import(e){let{files:i}=this;if(i.length===0){new ke.Notice("Please pick at least one file to import.");return}let r=await this.getOutputFolder();if(!r){new ke.Notice("Please select a location to export to.");return}let o=new Map;e.reportProgress(0,i.length);for(let c=0;c<i.length;c++){if(e.isCancelled())return;let p=i[c],m=await this.processFile(e,r,p);m&&o.set(p instanceof Me?Jn.pathToFileURL(p.filepath).href:p.name,{file:p,tFile:m}),e.reportProgress(c+1,i.length)}let{metadataCache:a}=this.app,s,l=new Promise(c=>{s=c});a.onCleanCache(async()=>{for(let[c,{file:p,tFile:m}]of o){if(e.isCancelled())break;try{let y=await this.app.vault.cachedRead(m),w=a.computeMetadataAsync?await a.computeMetadataAsync(Oo(y)):a.getFileCache(m);if(!w)continue;let E=[];if(w.links)for(let{link:d,position:f,displayText:g}of w.links){let{path:v,subpath:_}=(0,ke.parseLinktext)(d),A;if(Jn){let T=new URL(encodeURI(v),c);T.hash="",T.search="",A=decodeURIComponent(T.href)}else A=re(v.replace(/#/gu,"%23")).name;let D=o.get(A);if(D){let T=this.app.fileManager.generateMarkdownLink(D.tFile,m.path,_,g);E.push({from:f.start.offset,to:f.end.offset,text:T})}}E.sort((d,f)=>f.from-d.from);for(let d of E)y=y.substring(0,d.from)+d.text+y.substring(d.to);await this.vault.modify(m,y)}catch(y){e.reportFailed(p.fullpath,y)}}s()}),await l}async processFile(e,i,r){e.status("Processing "+r.name);try{let o=await r.readText(),a=ft(o);My(a);let s=r instanceof Me?Jn.pathToFileURL(r.filepath):void 0,l=new Map,c=new Map;for(let y of a.findAll("img, audio, video")){if(e.isCancelled())return;let w=y.getAttribute("src");if(w)try{let E=new URL(w.startsWith("//")?`https:${w}`:w,s),d=E.href,f=l.get(d);l.has(d)||(e.status("Downloading attachment for "+r.name),f=await this.downloadAttachment(i,y,E),l.set(d,f),f?(c.set(f.path,f),e.reportAttachmentSuccess(f.name)):e.reportSkipped(w)),f&&(y.setAttribute("src",f.path.replace(/ /g,"%20")),y instanceof HTMLImageElement||y.replaceWith(createEl("img",{attr:{src:f.path.replace(/ /g,"%20"),alt:y.getAttr("alt")}})))}catch(E){e.reportFailed(w,E)}}let p=(0,ke.htmlToMarkdown)(a),m=await this.saveAsMarkdownFile(i,r.basename,p);if(!Object.isEmpty(l)){let{metadataCache:y}=this.app,w;y.computeMetadataAsync?w=await y.computeMetadataAsync(Oo(p)):w=await new Promise(d=>{let f=y.getFileCache(m);if(f)return d(f);let g=y.on("changed",(v,_,A)=>{v===m&&(y.offref(g),d(A))})});let E=[];if(w.embeds){for(let{link:d,position:f}of w.embeds)if(c.has(d)){let g=this.app.fileManager.generateMarkdownLink(c.get(d),m.path);E.push({from:f.start.offset,to:f.end.offset,text:g})}}E.sort((d,f)=>f.from-d.from);for(let d of E)p=p.substring(0,d.from)+d.text+p.substring(d.to);await this.vault.modify(m,p)}return e.reportNoteSuccess(r.fullpath),m}catch(o){e.reportFailed(r.fullpath,o)}return null}async downloadAttachment(e,i,r){let o="",a="",s;switch(r.protocol){case"file:":let p=Jn.fileURLToPath(r.href);({basename:o,extension:a}=re(p)),s=Zi(await Pe.readFile(p));break;case"https:":case"http:":let m=await By(r),y=$y(r);o=y.basename,s=m.data,a=vr(m.mime)||y.extension;break;default:throw new Error(r.href)}if(!this.filterAttachmentSize(s)||i instanceof HTMLImageElement&&!await this.filterImageSize(s))return null;if(!a)if(i instanceof HTMLImageElement)a="png";else if(i instanceof HTMLAudioElement)a="mp3";else if(i instanceof HTMLVideoElement)a="mp4";else return null;let l=await this.createFolders((0,ke.normalizePath)(e.path+"/Attachments")),c=await this.vault.getAvailablePath(l.getParentPrefix()+o,a);return await this.vault.createBinary(c,s)}filterAttachmentSize(e){let{byteLength:i}=e;return!this.attachmentSizeLimit||i<=this.attachmentSizeLimit}async filterImageSize(e){if(!this.minimumImageSize)return!0;let i;try{i=await Uy(e)}catch(a){return!0}let{height:r,width:o}=i;return o>=this.minimumImageSize&&r>=this.minimumImageSize}};function Hf(n,t){let e=n.getAttribute(t);e!==null&&n.setAttribute(t,e.replace(/ /gu,"%20"))}function My(n){n.findAll("a").forEach(t=>Hf(t,"href")),n.findAll("audio, img, video").forEach(t=>Hf(t,"src"))}function $y(n){return re((0,ke.normalizePath)(decodeURIComponent(n.pathname)))}async function By(n){var e,i;try{let r=await fetch(n,{mode:"cors",referrerPolicy:"no-referrer"});if(r.ok)return{data:await r.arrayBuffer(),mime:(e=r.headers.get("Content-Type"))!=null?e:""}}catch(r){}let t=await(0,ke.requestUrl)(n.href);return{data:t.arrayBuffer,mime:(i=t.headers["Content-Type"])!=null?i:""}}async function Uy(n){let t=new Image,e=URL.createObjectURL(new Blob([n]));try{return await new Promise((i,r)=>{t.addEventListener("error",({error:o})=>r(o),{once:!0,passive:!0}),t.addEventListener("load",()=>i({height:t.naturalHeight,width:t.naturalWidth}),{once:!0,passive:!0}),t.src=e})}finally{URL.revokeObjectURL(e)}}var Fn=require("obsidian");var jy=/(#[^ ^#]*)/g,Hy=/[\\:*?<>\"|!@#$%^&()+=\`\'~;,.]/g;function za(n){let t=n.replace(Hy,"");return t=t.split(" ").join("-"),isNaN(t[0])||(t="_"+t),t}function Ga(n){return n.replace(jy,t=>"#"+za(t))}function qf(n){return n.charAt(0).toUpperCase()+n.slice(1).toLowerCase()}var qy=["zip"],Wy=["json"],Zy=["html","txt"],Fr=class extends ce{constructor(){super(...arguments);this.importArchived=!1;this.importTrashed=!1}init(){this.addFileChooserSetting("Notes & attachments",[...qy,...Wy,...Ln],!0),this.importArchivedSetting=new Fn.Setting(this.modal.contentEl).setName("Import archived notes").setDesc("If imported, files archived in Google Keep will be tagged as archived.").addToggle(e=>{e.setValue(this.importArchived),e.onChange(async i=>{this.importArchived=i})}),this.importTrashedSetting=new Fn.Setting(this.modal.contentEl).setName("Import deleted notes").setDesc("If imported, files deleted in Google Keep will be tagged as deleted. Deleted notes will only exist in your Google export if deleted recently.").addToggle(e=>{e.setValue(this.importTrashed),e.onChange(async i=>{this.importTrashed=i})}),this.addOutputLocationSetting("Google Keep")}async import(e){let{files:i}=this;if(i.length===0){new Fn.Notice("Please pick at least one file to import.");return}let r=await this.getOutputFolder();if(!r){new Fn.Notice("Please select a location to import your files to.");return}let o=`${r.path}/Assets`;for(let a of i){if(e.isCancelled())return;await this.handleFile(a,r,o,e)}}async handleFile(e,i,r,o){let{fullpath:a,name:s,extension:l}=e;o.status("Processing "+s);try{l==="zip"?await this.readZipEntries(e,i,r,o):l==="json"?await this.importKeepNote(e,i,o):Ln.contains(l)?(o.status("Importing attachment "+s),await this.copyFile(e,r),o.reportAttachmentSuccess(a)):!(e instanceof fi)&&!Zy.contains(l)&&o.reportSkipped(a)}catch(c){o.reportFailed(a,c)}}async readZipEntries(e,i,r,o){await gt(e,async(a,s)=>{for(let l of s){if(o.isCancelled())return;await this.handleFile(l,i,r,o)}})}async importKeepNote(e,i,r){let{fullpath:o,basename:a}=e;r.status("Importing note "+a);let s=await e.readText(),l=JSON.parse(s);if(!l||!l.userEditedTimestampUsec||!l.createdTimestampUsec){r.reportFailed(o,"Invalid Google Keep JSON");return}if(l.isArchived&&!this.importArchived){r.reportSkipped(o,"Archived note");return}if(l.isTrashed&&!this.importTrashed){r.reportSkipped(o,"Deleted note");return}await this.convertKeepJson(l,i,a),r.reportNoteSuccess(o)}async copyFile(e,i){let r=await this.createFolders(i),o=await e.read();await this.vault.createBinary(`${r.path}/${e.name}`,o)}async convertKeepJson(e,i,r){let o=[],a={};if(e.title){let c=e.title.split(` +`).filter(p=>p!==r);c.length>0&&(a.aliases=c)}let s=[];if(e.color&&e.color!=="DEFAULT"){let c=e.color.toLowerCase();c=qf(c),s.push(`Keep/Color/${c}`)}if(e.isPinned&&s.push("Keep/Pinned"),e.attachments&&s.push("Keep/Attachment"),e.isArchived&&s.push("Keep/Archived"),e.isTrashed&&s.push("Keep/Deleted"),e.labels)for(let c of e.labels)s.push(`Keep/Label/${c.name}`);if(s.length>0&&(a.tags=s.map(c=>za(c))),o.push(Yi(a)),e.textContent&&(o.push(` +`),o.push(Ga(e.textContent))),e.listContent){let c=[];for(let p of e.listContent){if(!p.text)continue;let m=`- [${p.isChecked?"X":" "}] ${p.text}`;c.push(Ga(m))}o.push(` + +`),o.push(c.join(` +`))}if(e.attachments){o.push(` + +`);for(let c of e.attachments)o.push(`![[${c.filePath}]]`)}let l=await this.saveAsMarkdownFile(i,r,o.join(""));await this.vault.append(l,"",{ctime:e.createdTimestampUsec/1e3,mtime:e.userEditedTimestampUsec/1e3})}};var xt=require("obsidian");var Va=require("obsidian");function Wf({info:n,vault:t,targetFolderPath:e,parentsInSubfolders:i}){let r=t.getAllLoadedFiles(),o=new Set,a=new Set(r.map(s=>s.name));i&&zy(n),Yy({info:n,pathDuplicateChecks:o,titleDuplicateChecks:a}),Gy({info:n,loadedFiles:r,titleDuplicateChecks:a,targetFolderPath:e})}function Yy({info:n,pathDuplicateChecks:t,titleDuplicateChecks:e}){for(let i of Object.values(n.idsToFileInfo)){let r=n.getPathForFile(i);if(t.has(`${r}${i.title}`)){let o=2;for(i.title=i.title+" "+o;t.has(`${r}${i.title}`);)o++,i.title=`${i.title.replace(/ \d+$/,"")} ${o}`}e.has(i.title+".md")&&(i.fullLinkPathNeeded=!0),t.add(`${r}${i.title}`),e.add(i.title+".md")}}function zy(n){let t=new Set(Object.values(n.idsToFileInfo).map(e=>e.parentIds).concat(Object.values(n.pathsToAttachmentInfo).map(e=>e.parentIds)).map(e=>e.length>0?e[e.length-1]:""));for(let e of Object.keys(n.idsToFileInfo))t.has(e)&&n.idsToFileInfo[e].parentIds.push(e)}function Gy({info:n,loadedFiles:t,titleDuplicateChecks:e,targetFolderPath:i}){var l;let r=new Set(t.filter(c=>!c.path.endsWith(".md")).map(c=>c.path)),o=n.attachmentPath,a=/^\.\//.test(o),s=(l=o.match(/\.\/(.*)/))==null?void 0:l[1];for(let c of Object.values(n.pathsToAttachmentInfo)){e.has(c.nameWithExtension)&&(c.fullLinkPathNeeded=!0);let p="";if(a?p=(0,Va.normalizePath)(`${i}${n.getPathForFile(c)}${s!=null?s:""}`):p=(0,Va.normalizePath)(o+"/"),p.endsWith("/")||(p+="/"),r.has(p+c.nameWithExtension)){let m=2,{basename:y,extension:w}=re(c.path);for(;r.has(`${p}${y} ${m}.${w}`);)m++;c.nameWithExtension=`${y} ${m}.${w}`}c.targetParentFolder=p,r.add(p+c.nameWithExtension),e.add(c.nameWithExtension)}}var Pn=require("obsidian");var Zf=n=>n.replace(/-/g,"").replace(/[ -]?[a-z0-9]{32}(\.|$)/,"$1"),bt=n=>{var t;return(t=n.replace(/-/g,"").match(/([a-z0-9]{32})(\?|\.|$)/))==null?void 0:t[1]},Ka=n=>{let{parent:t}=re(n);return t.split("/").map(e=>bt(e)).filter(e=>e)};function Xa(n){return n.hour()===0&&n.minute()===0?n.format("YYYY-MM-DD"):n.format("YYYY-MM-DDTHH:mm")}function Yf(n){return n.replace(/^(\.\.\/)+/,"")}function zf(n){let t=/#\d*?(?:[-_/a-z]|[^\x00-\x7F])/gi;if(!t.test(n))return n;let e=n.split(` +`);for(let i=0;i<e.length;i++){let r=e[i].match(t);if(!r)continue;let o=e[i];for(let a of r)new RegExp(`\\[\\[[^\\]]*${a}(?:.*[^\\]])?\\]\\]|\\[[^\\]]*${a}[^\\]]*\\]\\([^\\)]*\\)|\\[[^\\]]*\\]\\([^\\)]*${a}[^\\)]*\\)|\\\\${a}|\`[^\`]*${a}[^\`]*\``).test(o)||(o=o.replace(a,"\\"+a));e[i]=o}return n=e.join(` +`),n}function Ja(n){n.replaceWith(...Array.from(n.childNodes))}async function id(n,t){var p;let e=await t.readText(),i=ft(e),r=i.find("div[class=page-body]");if(r===null)throw new Error("page body was not found");let o=Vf(n,r);nd(n,o,!0);let a={},s=i.find("table[class=properties] > tbody");if(s){let m=Vf(n,s);nd(n,m,!1),m1(s);for(let y of Array.from(s.rows)){let w=Vy(y);w&&(w.title=="Tags"&&(w.title="tags",typeof w.content=="string"?w.content=w.content.replace(/ /g,"-"):w.content instanceof Array&&(w.content=w.content.map(E=>E.replace(/ /g,"-")))),a[w.title]=w.content)}}o1(r,["strong","em","mark","del"]),n1(r),Xy(r),u1(r),e1(r),p1(r),ad(r),ed(r,"div.indented"),ed(r,"details"),f1(r),td(r,"ul"),td(r,"ol"),d1(r),c1(r),i1(r);let l=(0,Pn.htmlToMarkdown)(r.innerHTML);n.singleLineBreaks&&(l=l.replace(/\n\n(?!>)/g,` +`)),l=zf(l),l=Ky(l);let c=(p=i.find("p[class*=page-description]"))==null?void 0:p.textContent;return c&&(l=c+` + +`+l),Yi(a)+l}var Gf={checkbox:["checkbox"],date:["created_time","last_edited_time","date"],list:["file","multi_select","relation"],number:["number","auto_increment_id"],text:["email","person","phone_number","text","url","status","select","formula","rollup","last_edited_by","created_by"]};function Vy(n){var a,s,l,c,p,m;let t=(a=n.className.match(/property-row-(.*)/))==null?void 0:a[1];if(!t)throw new Error("property type not found for: "+n);let e=(0,Pn.htmlToMarkdown)((s=n.cells[0].textContent)!=null?s:""),i=n.cells[1],r=Object.keys(Gf).find(y=>Gf[y].includes(t));if(!r)throw new Error("type not found for: "+i);let o="";switch(r){case"checkbox":o=i.innerHTML.includes("checkbox-on");break;case"number":if(o=Number(i.textContent),isNaN(o))return;break;case"date":ad(i);let y=i.getElementsByTagName("time");if(y.length===0)o="";else if(y.length===1)o=Xa((0,Pn.moment)((l=y.item(0))==null?void 0:l.textContent));else{let d=[];for(let f=0;f<y.length;f++)d.push(Xa((0,Pn.moment)((c=y.item(f))==null?void 0:c.textContent)));o=d.join(" - ")}if(o.length===0)return;break;case"list":let w=i.children,E=[];for(let d=0;d<w.length;d++){let f=(p=w.item(d))==null?void 0:p.textContent;f&&E.push(f)}if(o=E,o.length===0)return;break;case"text":if(o=(m=i.textContent)!=null?m:"",o.length===0)return;break}return{title:e,content:o}}function Vf(n,t){var i,r;let e=[];for(let o of t.findAll("a")){let a=Yf(decodeURI((i=o.getAttribute("href"))!=null?i:"")),s=bt(a),l=Object.keys(n.pathsToAttachmentInfo).find(c=>c.includes(a));s&&a.endsWith(".html")?e.push({type:"relation",a:o,id:s}):l?e.push({type:"attachment",a:o,path:l}):s&&a.startsWith("#")&&((r=o.parentElement)!=null&&r.classList.contains("table_of_contents-item"))&&e.push({type:"toc-item",a:o,id:s})}return e}function Ky(n){let t=/\[\[[^\]]*(\\\\)\|[^\]]*\]\]/,e=n.match(new RegExp(t,"g"));return e==null||e.forEach(i=>{n=n.replace(i,i.replace(/\\\\\|/g,"\\|"))}),n}function Xy(n){r1(n,"style"),rd(n,"span.notion-text-equation-token");let t=n.ownerDocument,e=n.findAll("figure.equation");for(let r of e){let o=r.find("annotation");if(!o)continue;let a=t.createElement("div");a.className="annotation",a.appendText(`$$${Kf(o.textContent)}$$`),r.replaceWith(a)}let i=n.findAll("span.notion-text-equation-token");for(let r of i){let o=r.find("annotation");o&&r.replaceWith(`$${Kf(o.textContent,!0)}$`)}}function Kf(n,t=!1){var i;let e=new RegExp(/^(?:\s|\\\\|\\\s)*(.*?)[\s\\]*$/,"s");return(i=n==null?void 0:n.replace(e,"$1").replace(/[\r\n]+/g,t?" ":` +`))!=null?i:""}function Jy(n){var e;let t=(e=n.match(/^[^\.\?\!\n]*[\.\?\!]?/))==null?void 0:e[0];return t!=null?t:""}function Qy(n){var t;return!!/callout|bookmark/.test((t=n.getAttribute("class"))!=null?t:"")}function e1(n){var e;let t=n.ownerDocument;for(let i of n.findAll("figure.callout")){let r=(e=i.lastElementChild)==null?void 0:e.childNodes;if(!r)continue;let o=t.createElement("blockquote");o.append(...Array.from(r)),t1(o),i.replaceWith(o)}}function t1(n){var o,a,s;let t=n.firstChild,e=(o=t==null?void 0:t.nodeName)!=null?o:"",i=n.ownerDocument.createElement("p"),r="";e=="#text"?r=(a=t==null?void 0:t.textContent)!=null?a:"":e=="P"?r=t.innerHTML:["EM","STRONG","DEL","MARK"].includes(e)?r=t.outerHTML:n.prepend(i),r=r.replace(/<br>/g,"<br>"),i.innerHTML=`[!important] ${r}`,(s=n.firstChild)==null||s.replaceWith(i)}function n1(n){var t,e,i;for(let r of n.findAll("a.bookmark.source")){let o=r.getAttribute("href"),a=(t=r.find("div.bookmark-title"))==null?void 0:t.textContent,s=Jy((i=(e=r.find("div.bookmark-description"))==null?void 0:e.textContent)!=null?i:""),l=`> [!info] ${a} +> ${s} +> [${o}](${o}) +`;r.nextElementSibling&&Qy(r.nextElementSibling)&&(l+=` +`),r.replaceWith(l)}}function i1(n){var t,e,i;for(let r of n.findAll("span[class=user]"))r.innerText=(t=r.textContent)!=null?t:"";for(let r of n.findAll("td div[class*=checkbox]")){let o=createSpan();o.setText(r.hasClass("checkbox-on")?"X":""),r.replaceWith(o)}for(let r of n.findAll("table span[class*=selected-value]"))((e=r.parentElement)==null?void 0:e.lastElementChild)!==r&&r.setText(r.textContent+", ");for(let r of n.findAll("a[href]"))if(!/^(https?:\/\/|www\.)/.test(r.href)){let o=createSpan();o.setText((i=r.textContent)!=null?i:""),r.replaceWith(o)}}function r1(n,t){for(let e of n.findAll(t))e.remove()}function o1(n,t){for(let e of t)a1(n,e);for(let e of t)s1(n,e);for(let e of t)rd(n,e);for(let e of t)l1(n,e)}function a1(n,t){for(let e of n.findAll(t)){if(!e.parentElement||e.parentElement.tagName===t.toUpperCase())continue;let i=e.find(t);for(;i;)Ja(i),i=e.find(t)}}function s1(n,t){let e=n.findAll(t);if(!e)return;let i=new RegExp(`</${t}>( *)<${t}>`,"g");for(let r of e){if(!r||!r.parentElement)continue;let o=r.parentElement,a=o==null?void 0:o.innerHTML;o.innerHTML=a==null?void 0:a.replace(i,"$1")}}function rd(n,t){let e=n.findAll(t);if(e)for(let i of e){let r=i.previousSibling;(r==null?void 0:r.nodeName)=="BR"&&(r==null||r.remove())}}function l1(n,t){let e=n.innerHTML,i=e.match(new RegExp(`<${t}>.*?</${t}>`,"sg"));if(i){for(let r of i.filter(o=>o.includes("<br>")))e=e.replace(r,r.split("<br>").join(`</${t}><br><${t}>`));n.innerHTML=e}}function Xf(n){var t;return Number((t=n==null?void 0:n.classList[1].slice(-1))!=null?t:-1)}function od(n,t){let e=Xf(n),i=Xf(t);if(e>i&&t.childElementCount==1){let r=createEl("ul");r.append(n),t.append(r)}else if(e>i&&t.childElementCount==2){let r=t.lastElementChild;r==null||r.append(n)}else if(e==i){let r=t.parentElement;r==null||r.append(n)}else e<i&&(t=t.parentElement.parentElement,od(n,t))}function Jf(n){var e;let t=createEl("li");return t.className=n.className,t.append((e=n.firstElementChild)!=null?e:""),t}function c1(n){let t=n.find(".table_of_contents"),e=t==null?void 0:t.children;if(!t||e.length==0)return;let i=createEl("ul"),r=Jf(e[0]);i.append(r);let o=r;for(let a=1;a<e.length;a++)r=Jf(e[a]),od(r,o),o=r;t.replaceWith(i)}function p1(n){n.innerHTML=n.innerHTML.replace(/(?:\n|<br ?\/>)/g,"<br>");for(let t of n.findAll("code"))for(let e of t.findAll("br"))e.replaceWith(` +`)}function u1(n){var t;for(let e of n.findAll("link"))e.innerText=(t=e.textContent)!=null?t:""}function ad(n){var t,e;for(let i of n.findAll("time"))i.textContent=(e=(t=i.textContent)==null?void 0:t.replace(/@/g,""))!=null?e:""}var Qf={"1.875em":"h1","1.5em":"h2","1.25em":"h3"};function f1(n){var e;let t=n.findAll("summary");for(let i of t){let r=i.getAttribute("style");if(r){for(let o of Object.keys(Qf))if(r.includes(o)){i.replaceWith(createEl(Qf[o],{text:(e=i.textContent)!=null?e:""}));break}}}}function ed(n,t){let e=n.findAll(t);for(let i of e)Ja(i)}function td(n,t){for(let e of n.findAll(t)){let i=[],r=[],o=e;for(;o.tagName===t.toUpperCase();){i.push(o);for(let s=0;s<o.children.length;s++)r.push(o.children[s]);if(!o.nextElementSibling||o.getAttribute("class")!==o.nextElementSibling.getAttribute("class"))break;o=o.nextElementSibling}let a=n.createEl(t);for(let s of r)a.appendChild(s);i[0].replaceWith(a),i.slice(1).forEach(s=>s.remove())}}function d1(n){for(let t of n.findAll(".checkbox.checkbox-on"))t.replaceWith("[x] ");for(let t of n.findAll(".checkbox.checkbox-off"))t.replaceWith("[ ] ")}function m1(n){var e;let t=n.findAll("a");if(t.length===0)return n;for(let i of t){let r=createSpan();r.setText((e=i.getAttribute("href"))!=null?e:""),i.replaceWith(r)}}function nd(n,t,e){var i,r,o;for(let a of t){let s=createSpan(),l="";switch(a.type){case"relation":let c=n.idsToFileInfo[a.id];if(c){let y=a.a.closest("table");l=`[[${c.fullLinkPathNeeded?`${n.getPathForFile(c)}${c.title}${y?"\\":""}|${c.title}`:c.title}]]`}else{console.warn("missing relation data for id: "+a.id);let{basename:y}=re(decodeURI((i=a.a.getAttribute("href"))!=null?i:""));l=`[[${Zf(y)}]]`}break;case"attachment":let p=n.pathsToAttachmentInfo[a.path];if(!p){console.warn("missing attachment data for: "+a.path);continue}l=`${e?"!":""}[[${p.fullLinkPathNeeded?p.targetParentFolder+p.nameWithExtension+"|"+p.nameWithExtension:p.nameWithExtension}]]`;break;case"toc-item":l=(r=a.a.textContent)!=null?r:"";let m=(o=l.endsWith("]"))!=null?o:!1;l=`[[#${l+(m?" ":"")}]]`}s.setText(l),a.a.replaceWith(s)}}var Lr=class{constructor(t,e){this.idsToFileInfo={};this.pathsToAttachmentInfo={};this.attachmentPath=t,this.singleLineBreaks=e}getPathForFile(t){let{idsToFileInfo:e}=this,i=t.path.split("/");return t.parentIds.map(r=>{var o,a,s;return(s=(o=e[r])==null?void 0:o.title)!=null?s:(a=i.find(l=>l.contains(r)))==null?void 0:a.replace(` ${r}`,"")}).filter(r=>r).map(r=>r.replace(/[\. ]+$/,"")).join("/")+"/"}};async function ld(n,t){var i,r;let{filepath:e}=t;if(t.extension==="html"){let o=await t.readText(),a=ft(o),l=a.find("body").children,c;for(let E=0;E<l.length&&(c=bt((i=l[E].getAttr("id"))!=null?i:""),!c);E++);if(!c)throw new Error("no id found for: "+e);let p=sd(a,"property-row-created_time"),m=sd(a,"property-row-last_edited_time"),y=((r=a.find("title"))==null?void 0:r.textContent)||"Untitled",w=h1(Ze(y.replace(/\n/g," ").replace(/[:\/]/g,"-").replace(/#/g,"").trim()));n.idsToFileInfo[c]={path:e,parentIds:Ka(e),ctime:p,mtime:m,title:w,fullLinkPathNeeded:!1}}else n.pathsToAttachmentInfo[e]={path:e,parentIds:Ka(e),nameWithExtension:Ze(decodeURIComponent(t.name)),targetParentFolder:"",fullLinkPathNeeded:!1}}function h1(n){if(n.length<200)return n;let t=n.split(" "),e=[],i=0,r=0,o=!1;for(;i<200;){if(!t[r]){o=!0;break}e.push(t[r]),i+=t[r].length+1}let a=e.join(" ");return o||(a+="..."),a}function g1(n){let t=n.startsWith("@")?n.substr(1).trim():n.trim(),e=new Date(t);return isNaN(e.getTime())?null:e}function sd(n,t){let e=n.querySelector(`tr.${t}`);if(e){let i=e.querySelector("time");return i&&i.textContent?g1(i.textContent):null}return null}var Pr=class extends ce{init(){this.parentsInSubfolders=!0,this.addFileChooserSetting("Exported Notion",["zip"]),this.addOutputLocationSetting("Notion"),new xt.Setting(this.modal.contentEl).setName("Save parent pages in subfolders").setDesc("Places the parent database pages in the same folder as the nested content.").addToggle(e=>e.setValue(this.parentsInSubfolders).onChange(i=>this.parentsInSubfolders=i)),new xt.Setting(this.modal.contentEl).setName("Single line breaks").setDesc("Separate Notion blocks with only one line break (default is 2).").addToggle(e=>e.setValue(this.singleLineBreaks).onChange(i=>{this.singleLineBreaks=i}))}async import(e){var w;let{vault:i,parentsInSubfolders:r,files:o}=this;if(o.length===0){new xt.Notice("Please pick at least one file to import.");return}let a=await this.getOutputFolder();if(!a){new xt.Notice("Please select a location to export to.");return}let s=a.path;s=(0,xt.normalizePath)(s),s!=null&&s.endsWith("/")||(s+="/");let l=new Lr((w=i.getConfig("attachmentFolderPath"))!=null?w:"",this.singleLineBreaks);e.status("Looking for files to import");let c=0;if(await Qa(e,o,async E=>{try{await ld(l,E),c=Object.keys(l.idsToFileInfo).length+Object.keys(l.pathsToAttachmentInfo).length,e.reportProgress(0,c)}catch(d){e.reportSkipped(E.fullpath)}}),e.isCancelled())return;e.status("Resolving links and de-duplicating files"),Wf({vault:i,info:l,targetFolderPath:s,parentsInSubfolders:r});let p=new Set([s]),m=Object.values(l.idsToFileInfo).map(E=>s+l.getPathForFile(E)).concat(Object.values(l.pathsToAttachmentInfo).map(E=>E.targetParentFolder));for(let E of m)p.add(E);for(let E of p){if(e.isCancelled())return;await this.createFolders(E)}let y=0;e.status("Starting import"),await Qa(e,o,async E=>{y++,e.reportProgress(y,c);try{if(E.extension==="html"){let d=bt(E.name);if(!d)throw new Error("ids not found for "+E.filepath);let f=l.idsToFileInfo[d];if(!f)throw new Error("file info not found for "+E.filepath);e.status(`Importing note ${f.title}`);let g=await id(l,E),v={};f.ctime&&(v.ctime=f.ctime.getTime(),v.mtime=f.ctime.getTime()),f.mtime&&(v.mtime=f.mtime.getTime());let _=`${s}${l.getPathForFile(f)}${f.title}.md`;await i.create(_,g,v),e.reportNoteSuccess(E.fullpath)}else{let d=l.pathsToAttachmentInfo[E.filepath];if(!d)throw new Error("attachment info not found for "+E.filepath);e.status(`Importing attachment ${E.name}`);let f=await E.read();await i.createBinary(`${d.targetParentFolder}${d.nameWithExtension}`,f),e.reportAttachmentSuccess(E.fullpath)}}catch(d){if(d.message==="page body was not found"){e.reportSkipped(E.fullpath,"page body was not found");return}e.reportFailed(E.fullpath,d)}})}};async function Qa(n,t,e){for(let i of t){if(n.isCancelled())return;try{await gt(i,async(r,o)=>{for(let a of o){if(n.isCancelled())return;if(a.extension==="md"&&bt(a.name))throw new xt.Notice("Notion Markdown export detected. Please export Notion data to HTML instead."),n.cancel(),new Error("Notion importer uses only HTML exports. Please use the correct format.");if(!(a.extension==="csv"&&bt(a.name))&&a.name!=="index.html")if(a.extension==="zip"&&a.parent==="")try{await Qa(n,[a],e)}catch(s){n.reportFailed(a.fullpath)}else await e(a)}})}catch(r){n.reportFailed(i.fullpath)}}}var be=require("obsidian");var es="onenote-importer-refresh-token",cd="66553851-08fa-44f2-8bb1-1436f121a73d",pd=["user.read","notes.read"],y1=/<(object|iframe)([^>]*)\/>/g,ud=/(<\/p>)\s*(<p[^>]*>)|\n \n/g,ts=5,b1=new RegExp(/^data:[\w\d]+\/[\w\d]+;base64,/),Mr=class extends ce{constructor(){super(...arguments);this.importPreviouslyImported=!1;this.importIncompatibleAttachments=!1;this.selectedIds=[];this.notebooks=[];this.graphData={state:xn(32),accessToken:""};this.attachmentDownloadPauseCounter=0;this.rememberMe=!1}async init(){this.addOutputLocationSetting("OneNote"),new be.Setting(this.modal.contentEl).setName("Import incompatible attachments").setDesc("Imports incompatible attachments which cannot be embedded in Obsidian, such as .exe files.").addToggle(r=>r.setValue(!1).onChange(o=>this.importIncompatibleAttachments=o)),new be.Setting(this.modal.contentEl).setName("Skip previously imported").setDesc("If enabled, notes imported previously by this plugin will be skipped.").addToggle(r=>r.setValue(!0).onChange(o=>this.importPreviouslyImported=!o));let e=!1;if(this.retrieveRefreshToken())try{await this.updateAccessToken(),e=!0}catch(r){}this.microsoftAccountSetting=new be.Setting(this.modal.contentEl).setName("Sign in with your Microsoft account").setDesc("You need to sign in to import your OneNote data.").addButton(r=>r.setCta().setButtonText("Sign in").onClick(()=>{this.registerAuthCallback(this.authenticateUser.bind(this));let o=new URLSearchParams({client_id:cd,scope:"offline_access "+pd.join(" "),response_type:"code",redirect_uri:$r,response_mode:"query",state:this.graphData.state});window.open(`https://login.microsoftonline.com/common/oauth2/v2.0/authorize?${o.toString()}`)})),this.microsoftAccountSetting.settingEl.toggle(!e);let i=new be.Setting(this.modal.contentEl).setName("Remember me").setDesc("If checked, you will be automatically logged in for subsequent imports.").addToggle(r=>{r.onChange(o=>{this.rememberMe=o,o&&this.refreshToken?this.storeRefreshToken(this.refreshToken):this.clearStoredRefreshToken()})});i.settingEl.toggle(!e),this.switchUserSetting=new be.Setting(this.modal.contentEl).addButton(r=>r.setCta().setButtonText("Switch user").onClick(()=>{this.microsoftAccountSetting.settingEl.show(),i.settingEl.show(),this.clearStoredRefreshToken(),this.switchUserSetting.settingEl.hide(),this.contentArea.empty()})),this.loadingArea=this.modal.contentEl.createDiv({text:"Loading notebooks..."}),this.loadingArea.hide(),this.contentArea=this.modal.contentEl.createDiv(),this.contentArea.hide(),e?(await this.setSwitchUser(),await this.showSectionPickerUI()):this.switchUserSetting.settingEl.hide()}async authenticateUser(e){try{if(e.state!==this.graphData.state)throw new Error(`An incorrect state was returned. +Expected state: ${this.graphData.state} +Returned state: ${e.state}`);await this.updateAccessToken(e.code),await this.setSwitchUser(),await this.showSectionPickerUI()}catch(i){console.error("An error occurred while we were trying to sign you in. Error details: ",i),this.modal.contentEl.createEl("div",{text:"An error occurred while trying to sign you in."}).createEl("details",{text:i}).createEl("summary",{text:"Click here to show error details"})}}async setSwitchUser(){let e=await this.fetchResource("https://graph.microsoft.com/v1.0/me","json");this.switchUserSetting.setDesc(`Signed in as ${e.displayName} (${e.mail}). If that's not the correct account, sign in again.`),this.switchUserSetting.settingEl.show(),this.microsoftAccountSetting.settingEl.hide()}async updateAccessToken(e){let i=new URLSearchParams({client_id:cd,scope:"offline_access "+pd.join(" "),redirect_uri:$r});if(e)i.set("code",e),i.set("grant_type","authorization_code");else{let o=this.retrieveRefreshToken();if(!o)throw new Error("Missing token required for authentication. Please try logging in again.");i.set("refresh_token",o),i.set("grant_type","refresh_token")}let r=await(0,be.requestUrl)({method:"POST",url:"https://login.microsoftonline.com/common/oauth2/v2.0/token",contentType:"application/x-www-form-urlencoded",body:i.toString()}).json;if(!r.access_token)throw new Error(`Unexpected data was returned instead of an access token. Error details: ${r}`);r.refresh_token&&this.storeRefreshToken(r.refresh_token),this.graphData.accessToken=r.access_token}storeRefreshToken(e){this.refreshToken=e,this.rememberMe&&localStorage.setItem(es,e)}retrieveRefreshToken(){return this.refreshToken?this.refreshToken:localStorage.getItem(es)}clearStoredRefreshToken(){localStorage.removeItem(es)}async showSectionPickerUI(){var o,a;this.loadingArea.show(),this.selectedIds=[];let e="https://graph.microsoft.com/v1.0/me/onenote/notebooks",i=new URLSearchParams({$expand:"sections($select=id,displayName),sectionGroups($expand=sections,sectionGroups)",$select:"id,displayName,lastModifiedDateTime",$orderby:"lastModifiedDateTime DESC"}),r=`${e}?${i.toString()}`;try{this.notebooks=(await this.fetchResource(r,"json")).value,this.contentArea.empty(),this.contentArea.createEl("h4",{text:"Choose data to import"});for(let s of this.notebooks){if(((o=s.sectionGroups)==null?void 0:o.length)!==0)for(let c of s.sectionGroups)await this.fetchNestedSectionGroups(c);let l=this.contentArea.createDiv();new be.Setting(l).setName(s.displayName).setDesc(`Last edited on: ${be.moment.utc(s.lastModifiedDateTime).format("Do MMMM YYYY")}. Contains ${(a=s.sections)==null?void 0:a.length} sections.`).addButton(c=>c.setCta().setButtonText("Select all").onClick(()=>{l.querySelectorAll('input[type="checkbox"]:not(:checked)').forEach(p=>p.click())})),this.renderHierarchy(s,l)}}catch(s){this.showContentAreaErrorMessage()}this.loadingArea.hide(),this.contentArea.show()}async fetchNestedSectionGroups(e){if(e.sectionGroups=(await this.fetchResource(e.sectionGroupsUrl+"?$expand=sectionGroups($expand=sections),sections","json")).value,e.sectionGroups)for(let i=0;i<e.sectionGroups.length;i++)await this.fetchNestedSectionGroups(e.sectionGroups[i])}renderHierarchy(e,i){if(e.sectionGroups)for(let r of e.sectionGroups){let o=i.createDiv({attr:{style:"padding-inline-start: 1em; padding-top: 8px"}});o.createEl("strong",{text:r.displayName}),this.renderHierarchy(r,o)}if(e.sections){let r=i.createEl("ul",{attr:{style:"padding-inline-start: 1em;"}});for(let o of e.sections){let s=r.createEl("li",{cls:"task-list-item"}).createEl("label"),l=s.createEl("input");l.type="checkbox",s.appendChild(document.createTextNode(o.displayName)),s.createEl("br"),l.addEventListener("change",()=>{if(l.checked)this.selectedIds.push(o.id);else{let c=this.selectedIds.findIndex(p=>p===o.id);c!==-1&&this.selectedIds.splice(c,1)}})}}}showContentAreaErrorMessage(){this.contentArea.empty(),this.contentArea.createEl("p",{text:"Microsoft OneNote has limited how fast notes can be imported. Please try again in 30 minutes to continue importing."}),this.contentArea.show(),this.loadingArea.hide()}async import(e){let i=new Set,r=await this.modal.plugin.loadData();r.importers.onenote||(r.importers.onenote={previouslyImportedIDs:[]});for(let c of r.importers.onenote.previouslyImportedIDs)i.add(c);if(!await this.getOutputFolder()){new be.Notice("Please select a location to export to.");return}if(!this.graphData.accessToken){new be.Notice("Please sign in to your Microsoft Account.");return}e.status("Starting OneNote import");let a=0,s=0,l=0;for(let c of this.selectedIds){e.reportProgress(s,a);let p=`https://graph.microsoft.com/v1.0/me/onenote/sections/${c}/pages`,m=new URLSearchParams({$select:"id,title,createdDateTime,lastModifiedDateTime,level,order,contentUrl",$orderby:"order",pagelevel:"true"}),y=`${p}?${m.toString()}`,w=null;try{w=(await this.fetchResource(y,"json")).value}catch(E){e.status("Microsoft OneNote has limited how fast notes can be imported. Please try again in 30 minutes to continue importing.");return}if(w){a+=w.length,this.insertPagesToSection(w,c),e.reportProgress(s,a);for(let E=0;E<w.length;E++){if(e.isCancelled())return;let d=w[E];if(d.title||(d.title=`Untitled-${(0,be.moment)().format("YYYYMMDDHHmmss")}`),!this.importPreviouslyImported&&d.id&&i.has(d.id)){e.reportSkipped(d.title,"it was previously imported");continue}try{e.status(`Importing note ${d.title}`),await this.processFile(e,await this.fetchResource(`https://graph.microsoft.com/v1.0/me/onenote/pages/${d.id}/content?includeInkML=true`,"text"),d),d.id&&(i.add(d.id),r.importers.onenote.previouslyImportedIDs=Array.from(i),await this.modal.plugin.saveData(r)),s++,l=0}catch(f){if(l++,e.reportFailed(d.title,f.toString()),l>5){e.status("Microsoft OneNote has limited how fast notes can be imported. Please try again in 30 minutes to continue importing.");return}}e.reportProgress(s,a)}}}}insertPagesToSection(e,i,r){if(!r){for(let o of this.notebooks)this.insertPagesToSection(e,i,o);return}if(r.sectionGroups){let o=r.sectionGroups;for(let a of o)this.insertPagesToSection(e,i,a)}if(r.sections){let o=r;for(let a of o.sections)a.id===i&&(a.pages=e)}}async processFile(e,i,r){var o,a;try{let s=this.convertFormat(i),l=await this.getOutputFolder(),c=this.getEntityPathNoParent(r.id,l.name),p;await this.vault.adapter.exists(c)?p=this.vault.getAbstractFileByPath(c):p=await this.vault.createFolder(c);let m=this.convertTags(ft(s.html)),y=await this.getAllAttachments(e,m.replace(ud,"<br />")),w=this.styledElementToHTML(y);w=this.convertInternalLinks(w),w=this.convertDrawings(w);let E=(0,be.htmlToMarkdown)(w).trim().replace(ud," "),d=await this.saveAsMarkdownFile(p,r.title,E),f=r!=null&&r.lastModifiedDateTime?Date.parse(r.lastModifiedDateTime):null,g=r!=null&&r.createdDateTime?Date.parse(r.createdDateTime):null,v={ctime:(o=g!=null?g:f)!=null?o:Date.now(),mtime:(a=f!=null?f:g)!=null?a:Date.now()};await this.vault.append(d,"",v),e.reportNoteSuccess(r.title)}catch(s){e.reportFailed(r.title,s)}}convertFormat(e){let i={html:"",inkml:""},r=e.split(` +`,1)[0];e.slice(0,-2);let o=e.split(r);if(o.shift(),o.length===2)for(let a of o){let l=a.split(` +`).find(p=>p.includes("Content-Type")).split(";")[0].split(":")[1].trim(),c=a.split(` +`).slice(2).join(` +`).trim();l==="text/html"?i.html=c:l==="application/inkml+xml"&&(i.inkml=c)}else throw new Error("The input string is incorrect and may be missing data. Inputted string: "+e);return i}convertTags(e){var r,o;let i=Array.from(e.querySelectorAll("[data-tag]"));for(let a of i)if((r=a.getAttribute("data-tag"))!=null&&r.contains("to-do")){let l=a.getAttribute("data-tag")==="to-do:completed"?"[x]":"[ ]";a.innerHTML=`- ${l} ${a.innerHTML}`}else{let s=(o=a.getAttribute("data-tag"))==null?void 0:o.split(",");s==null||s.forEach(l=>{a.innerHTML=a.innerHTML+` #${l.replace(":","-")} `})}return e.outerHTML}convertInternalLinks(e){let i=e.findAll("a");for(let r of i)if(r.href.startsWith("onenote:")){let o=r.href.indexOf("#")+1,a=r.href.indexOf("&",o);r.href=r.href.slice(o,a)}return e}getEntityPathNoParent(e,i){for(let r of this.notebooks){let o=this.getEntityPath(e,`${i}/${r.displayName}`,r);if(o)return o}return null}getEntityPath(e,i,r){let o=null;if("sectionGroups"in r&&r.sectionGroups){let a=this.searchSectionGroups(e,i,r.sectionGroups);a!==null&&(o=a)}if("sections"in r&&r.sections){let a=this.searchSectionGroups(e,i,r.sections);a!==null&&(o=a)}if("pages"in r&&r.pages){let a=this.searchPages(e,i,r);a!==null&&(o=a)}return o}searchPages(e,i,r){var a;let o=null;for(let s=0;s<r.pages.length;s++){let l=r.pages[s],c=(a=l.contentUrl.split("page-id=")[1])==null?void 0:a.split("}")[0];if(l.id===e||c===e){if(l.level===0)r.pages[s+1]&&r.pages[s+1].level!==0?o=`${i}/${l.title}`:o=i;else{o=i;for(let p=r.pages.indexOf(l)-1;p>=0;p--)if(r.pages[p].level===l.level-1){o+="/"+r.pages[p].title;break}}break}}return o}searchSectionGroups(e,i,r){let o=null;for(let a of r)if(a.id===e)o=`${i}/${a.displayName}`;else{let s=this.getEntityPath(e,`${i}/${a.displayName}`,a);if(s){o=s;break}}return o}async getAllAttachments(e,i){var l,c,p,m;let r=ft(i.replace(y1,"<$1$2></$1>")),o=r.findAll("object"),a=r.findAll("img"),s=r.findAll("iframe");for(let y of o){for(;y.firstChild;)(l=y.parentNode)==null||l.insertBefore(y.firstChild,y.nextSibling);let w=y.getAttribute("data-attachment").split("."),E=w[w.length-1];if(!(!Ln.contains(E)&&!this.importIncompatibleAttachments)){let d=y.getAttribute("data-attachment"),f=y.getAttribute("data"),g=await this.fetchAttachment(e,d,f),v=document.createElement("p");v.innerText=`![[${g}]]`,(c=y.parentNode)==null||c.replaceChild(v,y)}}for(let y=0;y<a.length;y++){let w=a[y],d=w.getAttribute("data-fullres-src-type").split("/")[1],g=`Exported image ${(0,be.moment)().format("YYYYMMDDHHmmss")}-${y}.${d}`,v=w.getAttribute("data-fullres-src"),_=await this.fetchAttachment(e,g,v);_&&(w.src=encodeURI(_),!w.alt||b1.test(w.alt)?w.alt="Exported image":w.alt=w.alt.replace(/[\r\n]+/gm,""))}for(let y of s)if(y.src.contains("youtube.com")||y.src.contains("youtu.be")){let w=document.createTextNode(``);(p=y.parentNode)==null||p.replaceChild(w,y)}else{let w=document.createElement("a");w.href=y.src,(m=y.parentNode)==null||m.replaceChild(w,y)}return r}async fetchAttachment(e,i,r){this.attachmentDownloadPauseCounter===7&&await new Promise(o=>{e.status("Pausing attachment download to avoid rate limiting."),this.attachmentDownloadPauseCounter=0,setTimeout(o,3e3)}),this.attachmentDownloadPauseCounter++,e.status("Downloading attachment "+i);try{let o=await this.getAvailablePathForAttachment(i,[]),a=await this.fetchResource(r,"file");return await this.app.vault.createBinary(o,a),e.reportAttachmentSuccess(i),o}catch(o){e.reportFailed(i),console.error(o)}}styledElementToHTML(e){let i={"font-weight:bold":"b","font-style:italic":"i","text-decoration:underline":"u","text-decoration:line-through":"s","background-color":"mark"};e.findAll("cite").forEach(l=>l.innerHTML="> "+l.innerHTML+"<br>");let o=!1,a=document.createElement("pre");return e.querySelectorAll("*").forEach(l=>{let c=l.getAttribute("style")||"",p=Object.keys(i).find(m=>c.includes(m));if(c!=null&&c.contains("font-family:Consolas"))o?a.innerHTML=a.innerHTML.slice(0,-3)+l.innerHTML+"\n```":(o=!0,l.replaceWith(a),a.innerHTML="```\n"+l.innerHTML+"\n```");else if(l.nodeName==="BR"&&o)a.innerHTML=a.innerHTML.slice(0,-3)+"\n```";else if(p){let m=i[p],y=document.createElement(m);y.innerHTML=l.innerHTML,l.replaceWith(y)}}),e}convertDrawings(e){var o;let i=document.createTreeWalker(e,NodeFilter.SHOW_COMMENT),r=!1;for(;i.nextNode();)((o=i.currentNode.nodeValue)==null?void 0:o.trim())==="InkNode is not supported"&&(r=!0);if(r){let a=document.createTextNode("> [!caution] This page contained a drawing which was not converted.");e.insertBefore(a,e.firstChild)}else for(let a=0;a<e.children.length;a++){let s=e.children[a];s instanceof HTMLElement&&this.convertDrawings(s)}return e}async fetchResource(e,i="json",r=0){try{let o=await fetch(e,{headers:{Authorization:`Bearer ${this.graphData.accessToken}`}}),a;if(o.ok)switch(i){case"text":a=await o.text();break;case"file":a=await o.arrayBuffer();break;default:a=await o.json(),"@odata.nextLink"in a&&a.value.push(...(await this.fetchResource(a["@odata.nextLink"],"json")).value);break}else{let s=null,l=await o.json();if(l.hasOwnProperty("error")&&(s=l.error),!s){if(console.log("An error has occurred while fetching an resource:",l),r<ts)return this.fetchResource(e,i,r+1);throw new Error("Unexpected error retrieving resource")}if(console.log("An error has occurred while fetching an resource:",s),s.code==="40001"&&r<ts)return await this.updateAccessToken(),this.fetchResource(e,i,r+1);if(s.code==="20166"){let c=+!o.headers.get("Retry-After")*1e3||15e3;if(console.log(`Rate limit exceeded, waiting for: ${c} ms`),r<ts)return await new Promise(p=>setTimeout(p,c)),this.fetchResource(e,i,r+1);throw new Error("Exceeded maximum retry attempts")}}return a}catch(o){throw console.error(`An internal error occurred while trying to fetch '${e}'. Error details: `,o),o}}};var Ut=require("obsidian");var fd=require("obsidian"),x1=/[\?<>\\:\*\|"]/g,w1=/[\x00-\x1f\x80-\x9f]/g,v1=/^\.+$/,E1=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,_1=/[\. ]+$/,T1=/^\./,A1=/\[/g,k1=/\]/g;function Br(n){return n.replace(x1,"").replace(w1,"").replace(v1,"").replace(E1,"").replace(_1,"").replace(A1,"").replace(k1,"").replace(T1,"")}function Ur(n,t){let e="MMMM Do, YYYY",i=(0,fd.moment)(n,e);return i.format(e)!==n?n:i.isValid()?i.format(t):n}var jr=require("obsidian"),N1=["POMO","word-count","date","slider","encrypt","TaoOfRoam","orphans","count","character-count","comment-button","query","streak","attr-table","mentions","search","roam/render","calc"],S1=new RegExp(`\\{\\{(\\[\\[)?(${N1.join("|")})(\\]\\])?.*?\\}\\}(\\})?`,"g"),R1=/{{pdf:|{{\[\[pdf|{{\[\[audio|{{audio:|{{video:|{{\[\[video/,dd=/https:\/\/firebasestorage(.*?)\?alt(.*?)\)/,O1=/https:\/\/firebasestorage(.*?)\?alt(.*?)/,D1=/(?<=\(\()\b(.*?)\b(?=\)\))/g,Hr=class extends ce{constructor(){super(...arguments);this.downloadAttachments=!1;this.fileDateYAML=!1;this.titleYAML=!1;this.newestTimestamp=0;this.oldestTimestamp=0}init(){this.addFileChooserSetting("Roam (.json)",["json"]),this.addOutputLocationSetting("Roam"),this.userDNPFormat=this.getUserDNPFormat(),new Ut.Setting(this.modal.contentEl).setName("Import settings").setHeading(),new Ut.Setting(this.modal.contentEl).setName("Download all attachments").setDesc("If enabled, all attachments uploaded to Roam will be downloaded to your attachments folder.").addToggle(e=>{e.setValue(this.downloadAttachments),e.onChange(async i=>{this.downloadAttachments=i})}),new Ut.Setting(this.modal.contentEl).setName("Add YAML created/update date").setDesc("If enabled, notes will have the create-time and edit-time from Roam added as properties.").addToggle(e=>{e.setValue(this.fileDateYAML),e.onChange(async i=>{this.fileDateYAML=i})}),new Ut.Setting(this.modal.contentEl).setName("Add YAML title").setDesc("If enabled, notes will have the full title added as a property (regardless of illegal file name characters).").addToggle(e=>{e.setValue(this.titleYAML),e.onChange(async i=>{this.titleYAML=i})})}async import(e){this.progress=e;let{files:i}=this;if(i.length===0){new Ut.Notice("Please pick at least one file to import.");return}let r=await this.getOutputFolder();if(!r){new Ut.Notice("Please select a location to export to.");return}for(let o of i){if(e.isCancelled())return;let a=Ze(o.basename),s=`${r.path}/${a}`,l=`${r.path}/${a}/Attachments`;await this.createFolders(s),await this.createFolders(l);let c=await o.readText(),p=JSON.parse(c),[m,y]=this.preprocess(p),w=new Map;for(let g in p){let v=p[g],_=Ur(Br(v.title),this.userDNPFormat).trim();if(_===""){e.reportFailed(v.uid,"Title is empty"),console.error("Cannot import data with an empty title",v);continue}let A=`${s}/${_}.md`,D=this.titleYAML?v.title:"",T=0,k=0;if(this.fileDateYAML){let C=v["create-time"],O=v["edit-time"];typeof C=="number"&&(T=C),typeof O=="number"&&(k=O)}let b=await this.jsonToMarkdown(s,l,v,"",!1,D,T,k);w.set(A,b)}for(let g of y.values()){let v=await this.roamMarkupScrubber(s,l,g.blockString,!0),_=await this.extractAndProcessBlockReferences(w,m,s,v),A=`${s}/${g.pageName}.md`,D=w.get(A);if(D){let T=D.split(` +`),k=T.findIndex(b=>b.contains("* "+v));k!==-1&&(T[k]=T[k].replace(v,_)),w.set(A,T.join(` +`))}}let{vault:E}=this,d=w.size,f=1;for(let[g,v]of w.entries()){if(e.isCancelled())return;try{let{parent:_}=re(g);await this.createFolders(_);let A=E.getAbstractFileByPath(g);A?await E.modify(A,v):await E.create(g,v),e.reportNoteSuccess(g),e.reportProgress(f,d)}catch(_){console.error("Error saving Markdown to file:",g,_),e.reportFailed(g)}f++}}}getUserDNPFormat(){let e=this.app.internalPlugins.getPluginById("daily-notes").instance;return e?e.options.format||"YYYY-MM-DD":(console.log('Daily note plugin is not enabled. Roam import defaulting to "YYYY-MM-DD" format.'),"YYYY-MM-DD")}preprocess(e){let i=new Map,r=new Map,o=this.userDNPFormat;function a(s,l){if(l.uid){let c=new Date(s.uid);if(!isNaN(c.getTime())){let y=Ur(s.title,o);s.title=y}let p={pageName:Br(s.title),blockString:l.string};/.*?(\(\(.*?\)\)).*?/g.test(l.string)&&r.set(l.uid,p),i.set(l.uid,p)}if(l.children)for(let c of l.children)a(s,c)}for(let s of e)if(s.children)for(let l of s.children)a(s,l);return[i,r]}async roamMarkupScrubber(e,i,r,o=!1){return r=r.replace(S1,""),r.substring(0,8)==":hiccup "&&r.includes(":hr")?"---":(r=r.replace(/\[\[(.*?)\]\]/g,(a,s)=>`[[${Ur(Br(s),this.userDNPFormat)}]]`),r=r.replace(/\[\[(.*\/.*)\]\]/g,(a,s)=>`[[${e}/${s}|${s}]]`),r=r.replace(/\[.+?\]\((\(.+?\)\))\)/g,"$1"),r=r.replace(/\[(.+?)\]\(\[\[(.+?)\]\]\)/g,"[[$2|$1]]"),r=r.replace(/\[\[>\]\]/g,">"),r=r.replace(/{{TODO}}|{{\[\[TODO\]\]}}/g,"[ ]"),r=r.replace(/{{DONE}}|{{\[\[DONE\]\]}}/g,"[x]"),r=r.replace("::",":"),r=r.replace(/{{.*?\bvideo\b.*?(\bhttp.*?\byoutu.*?)}}/g,""),r=r.replace(/(https?:\/\/twitter\.com\/(?:#!\/)?\w+\/status\/\d+(?:\?[\w=&-]+)?)/g,""),r=r.replace(/\_\_(.+?)\_\_/g,"*$1*"),r=r.replace(/\^\^(.+?)\^\^/g,"==$1=="),r=r.replace(/{{\[{0,2}embed.*?(\(\(.*?\)\)).*?}}/g,"$1"),r=r.replace(/{{\[{0,2}embed.*?(\[\[.*?\]\]).*?}}/g,"$1"),this.downloadAttachments&&!o&&r.includes("firebasestorage")&&(r=await this.downloadFirebaseFile(r,i)),r)}async jsonToMarkdown(e,i,r,o="",a=!1,s,l,c){let p=[],m=[],y=r["edit-time"],w=r["create-time"];if(this.newestTimestamp<this.oldestTimestamp&&(this.oldestTimestamp=this.newestTimestamp),this.newestTimestamp=!y||c>y?c:y,w!==void 0?l>10?this.oldestTimestamp=Math.min(l,w):this.oldestTimestamp=w:this.oldestTimestamp=l,"string"in r&&r.string){let E=r.heading?"#".repeat(r.heading)+" ":"",d=await this.roamMarkupScrubber(e,i,r.string);p.push(`${a?o+"* ":o}${E}${d}`)}if(r.children)for(let E of r.children)p.push(await this.jsonToMarkdown(e,i,E,o+" ",!0,"",this.oldestTimestamp,this.newestTimestamp));if((this.fileDateYAML||this.titleYAML)&&!a){let E=this.oldestTimestamp;if(m.push("---"),this.titleYAML&&m.push(`title: "${s}"`),this.fileDateYAML){let d="YYYY-MM-DD HH:mm:ss",f=this.newestTimestamp?(0,jr.moment)(this.newestTimestamp).format(d):(0,jr.moment)(new Date).format(d),g=E?(0,jr.moment)(E).format(d):f;m.push("created: "+g),m.push("updated: "+f)}m.push("---"),p.unshift(m.join(` +`))}return p.join(` +`)}async modifySourceBlockString(e,i,r,o){if(!i.blockString.endsWith("^"+o)){let a=`${r}/${i.pageName}.md`,s=e.get(a);if(s){let l=s.split(` +`),c=l.findIndex(p=>p.contains("* "+i.blockString));if(c!==-1){let p=i.blockString+" ^"+o;l[c]=l[c].replace(i.blockString,p),i.blockString=i.blockString+" ^"+o}e.set(a,l.join(` +`))}}}async extractAndProcessBlockReferences(e,i,r,o){let a=o.match(D1);if(!a)return o;let s=[];for(let p of a)try{let m=i.get(p);if(!m){s.push(p);continue}let y=m.blockString.replace(/\[\[|\]\]/g,""),w=`[[${r}/${m.pageName}#^${p}|${y}]]`;await this.modifySourceBlockString(e,m,r,p),s.push(w)}catch(m){s.push(p)}let l=0;return o.replace(/\(\(\b.*?\b\)\)/g,()=>s[l++])}async downloadFirebaseFile(e,i){let{progress:r,vault:o}=this,a="";try{let s,l;if(R1.test(e)?(s=e.match(/https:\/\/firebasestorage(.*?)\?alt(.*?)\}/),l=e.match(/{{.*https:\/\/firebasestorage.*?alt=media&.*?(?=\s|$)/)):dd.test(e)?(s=e.match(dd),l=e.match(/!\[.*https:\/\/firebasestorage.*?alt=media&.*?(?=\s|$)/)):(s=e.match(O1),l=e.match(/https:\/\/firebasestorage.*?alt=media&.*?(?=\s|$)/)),s&&l){let c="https://firebasestorage"+s[1],p=decodeURIComponent(c.split("/").last()||"");if(p){let d=p.split("/");d.length>1&&(d.splice(-1,1),this.createFolders(`${i}/${d.join("/")}`))}else{let d=Math.floor(Date.now()/1e3),f=c.slice(-5).match(/(.*?)\.(.+)/);if(!f)return r.reportSkipped(s[1],"Unexpected file extension"),e;p=`${d}.${f[2]}`}let m=`${i}/${p}`;if(o.getAbstractFileByPath(m))return r.reportSkipped(s[1],"File already exists"),e;a=s[0].slice(0,-1);let E=await(await fetch(a,{})).arrayBuffer();return await o.createBinary(m,E),r.reportAttachmentSuccess(a),e.replace(l[0],`![[${m}]]`)}}catch(s){console.error(s),r.reportFailed(a,s)}return e}};var jt=require("obsidian");var md=/!\[\]\(assets\/([^)]*)\)/g,qr=class extends ce{init(){jt.Platform.isMacOS||this.modal.contentEl.createEl("p",{text:"Due to platform limitations, only textpack and zip files can be imported from this device. Open your vault on a Mac to import textbundle files."});let e=jt.Platform.isMacOS?["textbundle","textpack","zip"]:["textpack","zip"];this.addFileChooserSetting("Textbundle",e,!0),this.addOutputLocationSetting("Textbundle")}async import(e){let{files:i}=this;if(i.length===0){new jt.Notice("Please pick at least one file to import.");return}let r=await this.getOutputFolder();if(!r){new jt.Notice("Please select a location to export to.");return}this.attachmentsFolderPath=await this.createFolders(`${r.path}/assets`);for(let o of i)if(o.extension==="textpack")await gt(o,async(a,s)=>{await this.process(e,o.name,s)});else if(o.extension==="zip")await gt(o,async(a,s)=>{let l=this.groupFilesByTextbundle(o.name,s);for(let c of l)await this.process(e,o.name,c)});else{let s=await new ut(`${o.toString()}/`).list();await this.process(e,o.name,s)}}groupFilesByTextbundle(e,i){let r={},o=e+"/",a=".textbundle";for(let s of i){if(!s.fullpath.startsWith(o)){console.log("Skipping",s.fullpath);continue}let l=s.fullpath.slice(o.length);if(l.startsWith("._")||l.startsWith("__MACOSX")){console.log("Skipping",s.fullpath);continue}let c=l.indexOf(a);if(c===-1){console.log("Skipping",s.fullpath);continue}let p=l.slice(0,c)+".textbundle";if(l.slice(c+a.length+1).startsWith("._")){console.log("Skipping",s.fullpath);continue}p in r?r[p].push(s):r[p]=[s]}return Object.values(r)}async process(e,i,r){let o=r.find(a=>a.name==="info.json");if(o){let a=await o.readText(),s=JSON.parse(a);if(s.hasOwnProperty("type")&&s.type!=="net.daringfireball.markdown"){e.reportSkipped(i,"The textbundle does not contain markdown");return}}for(let a of r)if(!a.name.startsWith("._"))try{if(a.type==="file"&&(a.extension==="md"||a.extension==="markdown")){let s="parent"in a?a.parent:i;s=s.replace(/.textbundle$/,"");let l=await a.readText();l.match(md)&&(l=l.replace(md,`![[${this.attachmentsFolderPath.path}/$1]]`));let c=(0,jt.normalizePath)(s),p=await this.getOutputFolder();await this.saveAsMarkdownFile(p,c,l),e.reportNoteSuccess(s)}else if(a.type==="file"&&a.fullpath.contains("assets/"))await this.importAsset(e,a);else if(a.type==="folder"){let{basename:s}=re(a.toString());if(s!=="assets")continue;let c=await new ut(`${a.toString()}/`).list();for(let p of c)await this.importAsset(e,p)}else a.name!=="info.json"&&e.reportSkipped(a.name,"the file is not a media or markdown file.")}catch(s){e.reportFailed(a.name,s)}}async importAsset(e,i){if(i.type==="folder"){e.reportSkipped(i.name);return}let r=`${this.attachmentsFolderPath.path}/${i.name}`;this.vault.getAbstractFileByPath(r)&&e.reportSkipped(i.name,"the file already exists.");let a=await i.read();await this.vault.createBinary(r,a),e.reportAttachmentSuccess(i.name)}};var $r="obsidian://importer-auth/",Ln=["png","webp","jpg","jpeg","gif","bmp","svg","mpg","m4a","webm","wav","ogv","3gp","mov","mp4","mkv","pdf"],Wr=class{constructor(t){this.notes=0;this.attachments=0;this.skipped=[];this.failed=[];this.maxFileNameLength=100;this.cancelled=!1;this.el=t,t.empty(),this.statusEl=t.createDiv("importer-status"),this.progressBarEl=t.createDiv("importer-progress-bar",e=>{this.progressBarInnerEl=e.createDiv("importer-progress-bar-inner")}),t.createDiv("importer-stats-container",e=>{e.createDiv("importer-stat mod-imported",i=>{this.importedCountEl=i.createDiv({cls:"importer-stat-count",text:"0"}),i.createDiv({cls:"importer-stat-name",text:"imported"})}),e.createDiv("importer-stat mod-attachments",i=>{this.attachmentCountEl=i.createDiv({cls:"importer-stat-count",text:"0"}),i.createDiv({cls:"importer-stat-name",text:"attachments"})}),e.createDiv("importer-stat mod-remaining",i=>{this.remainingCountEl=i.createDiv({cls:"importer-stat-count",text:"0"}),i.createDiv({cls:"importer-stat-name",text:"remaining"})}),e.createDiv("importer-stat mod-skipped",i=>{this.skippedCountEl=i.createDiv({cls:"importer-stat-count",text:"0"}),i.createDiv({cls:"importer-stat-name",text:"skipped"})}),e.createDiv("importer-stat mod-failed",i=>{this.failedCountEl=i.createDiv({cls:"importer-stat-count",text:"0"}),i.createDiv({cls:"importer-stat-name",text:"failed"})})}),this.importLogEl=t.createDiv("importer-log"),this.importLogEl.hide()}status(t){this.statusEl.setText(t.trim()+"...")}reportNoteSuccess(t){this.notes++,this.importedCountEl.setText(this.notes.toString())}reportAttachmentSuccess(t){this.attachments++,this.attachmentCountEl.setText(this.attachments.toString())}reportSkipped(t,e){let{importLogEl:i}=this;this.skipped.push(t),this.skippedCountEl.setText(this.skipped.length.toString()),console.log("Import skipped",t,e),this.importLogEl.createDiv("list-item",r=>{r.createSpan({cls:"importer-error",text:"Skipped: "}),r.createSpan({text:`"${Qn(t,this.maxFileNameLength)}"`+(e?` because ${Qn(String(e),this.maxFileNameLength)}`:"")})}),i.scrollTop=i.scrollHeight,i.show()}reportFailed(t,e){let{importLogEl:i}=this;this.failed.push(t),this.failedCountEl.setText(this.failed.length.toString()),console.log("Import failed",t,e),this.importLogEl.createDiv("list-item",r=>{r.createSpan({cls:"importer-error",text:"Failed: "}),r.createSpan({text:`"${Qn(t,this.maxFileNameLength)}"`+(e?` because ${Qn(String(e),this.maxFileNameLength)}`:"")})}),i.scrollTop=i.scrollHeight,i.show()}reportProgress(t,e){e<=0||(console.log("Current progress:",(100*t/e).toFixed(1)+"%"),this.remainingCountEl.setText((e-t).toString()),this.importedCountEl.setText(t.toString()),this.progressBarInnerEl.style.width=(100*t/e).toFixed(1)+"%")}cancel(){this.cancelled=!0,this.progressBarEl.hide(),this.statusEl.hide()}hideStatus(){this.progressBarEl.hide(),this.statusEl.hide()}isCancelled(){return this.cancelled}},C1={importers:{onenote:{previouslyImportedIDs:[]}}},Zr=class extends Ht.Plugin{async onload(){this.importers={"apple-notes":{name:"Apple Notes",optionText:"Apple Notes",importer:br,helpPermalink:"import/apple-notes"},bear:{name:"Bear",optionText:"Bear (.bear2bk)",importer:xr,helpPermalink:"import/bear"},evernote:{name:"Evernote",optionText:"Evernote (.enex)",importer:Cr,helpPermalink:"import/evernote"},keep:{name:"Google Keep",optionText:"Google Keep (.zip/.json)",importer:Fr,helpPermalink:"import/google-keep"},html:{name:"HTML files",optionText:"HTML (.html)",importer:Ir,helpPermalink:"import/html"},onenote:{name:"Microsoft OneNote",optionText:"Microsoft OneNote",importer:Mr,helpPermalink:"import/onenote"},notion:{name:"Notion",optionText:"Notion (.zip)",importer:Pr,helpPermalink:"import/notion",formatDescription:"Export your Notion workspace to HTML format."},"roam-json":{name:"Roam Research",optionText:"Roam Research (.json)",importer:Hr,helpPermalink:"import/roam",formatDescription:"Export your Roam Research workspace to JSON format."},textbundle:{name:"Textbundle files",optionText:"Textbundle (.textbundle, .textpack)",importer:qr,helpPermalink:"import/textbundle"}},this.addRibbonIcon("lucide-import","Open Importer",()=>{new wi(this.app,this).open()}),this.addCommand({id:"open-modal",name:"Open importer",callback:()=>{new wi(this.app,this).open()}}),this.registerObsidianProtocolHandler("importer-auth",e=>{if(this.authCallback){this.authCallback(e),this.authCallback=void 0;return}new Ht.Notice("Unexpected auth event. Please restart the auth process.")})}onunload(){}async loadData(){return Object.assign({},C1,await super.loadData())}async saveData(e){await super.saveData(e)}registerAuthCallback(e){this.authCallback=e}},wi=class extends Ht.Modal{constructor(e,i){super(e);this.current=null;this.plugin=i,this.titleEl.setText("Import data into Obsidian"),this.modalEl.addClass("mod-importer");let r=Object.keys(i.importers);r.length>0&&(this.selectedId=r[0],this.updateContent())}updateContent(){let{contentEl:e,selectedId:i}=this,r=this.plugin.importers,o=r[i];e.empty();let a=new DocumentFragment;if(a.createSpan({text:"The format to be imported."}),o.formatDescription&&(a.createEl("br"),a.createSpan({text:o.formatDescription})),a.createEl("br"),a.createEl("a",{text:`Learn more about importing from ${o.name}.`,href:`https://help.obsidian.md/${o.helpPermalink}`}),new Ht.Setting(e).setName("File format").setDesc(a).addDropdown(s=>{for(let l in r)r.hasOwnProperty(l)&&s.addOption(l,r[l].optionText);s.onChange(l=>{r.hasOwnProperty(l)&&(this.selectedId=l,this.updateContent())}),s.setValue(this.selectedId)}),i&&r.hasOwnProperty(i)){let s=this.importer=new o.importer(this.app,this);if(s.notAvailable)return;e.createDiv("modal-button-container",l=>{l.createEl("button",{cls:"mod-cta",text:"Import"},c=>{c.addEventListener("click",async()=>{this.current&&this.current.cancel(),e.empty();let p=e.createDiv(),m=this.current=new Wr(p),y=e.createDiv("modal-button-container"),w=y.createEl("button",{cls:"mod-danger",text:"Stop"},E=>{E.addEventListener("click",()=>{m.cancel(),w.detach()})});try{await s.import(m)}finally{this.current===m&&(this.current=null),y.createEl("button",{text:"Upload more"},E=>{E.addEventListener("click",()=>this.updateContent())}),w.detach(),y.createEl("button",{cls:"mod-cta",text:"Done"},E=>{E.addEventListener("click",()=>this.close())}),m.hideStatus()}})})})}}onClose(){let{contentEl:e,current:i}=this;e.empty(),i&&i.cancel()}}; +/*! Bundled license information: + +sax/lib/sax.js: + (*! http://mths.be/fromcodepoint v0.1.0 by @mathias *) +*/ + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-importer/manifest.json b/.obsidian/plugins/obsidian-importer/manifest.json new file mode 100644 index 0000000..8f6bfe3 --- /dev/null +++ b/.obsidian/plugins/obsidian-importer/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "obsidian-importer", + "name": "Importer", + "version": "1.6.19", + "minAppVersion": "0.15.0", + "description": "Import data from Notion, Evernote, Apple Notes, Microsoft OneNote, Google Keep, Bear, Roam, and HTML files.", + "author": "Obsidian", + "authorUrl": "https://obsidian.md", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/obsidian-importer/styles.css b/.obsidian/plugins/obsidian-importer/styles.css new file mode 100644 index 0000000..6f9b809 --- /dev/null +++ b/.obsidian/plugins/obsidian-importer/styles.css @@ -0,0 +1,87 @@ +.modal.mod-importer { + max-height: var(--modal-height); + padding: var(--size-4-4) 0 0 0; + position: relative; + overflow: hidden; +} +.modal.mod-importer .modal-title { + padding: 0 var(--size-4-4); +} +.modal.mod-importer .modal-content { + overflow: auto; + padding: var(--size-4-4); + margin-bottom: calc(var(--input-height) + var(--size-4-8)); + border-top: var(--border-width) solid var(--background-modifier-border); +} +.modal.mod-importer .modal-button-container { + margin: 0 0 0 calc(var(--size-4-4) * -1); + padding: var(--size-4-4); + gap: var(--size-4-2); + position: absolute; + bottom: 0; + background-color: var(--background-primary); + border-top: var(--border-width) solid var(--background-modifier-border); + width: 100%; +} + +.importer-progress-bar { + width: 100%; + height: 8px; + background-color: var(--background-secondary); + overflow: hidden; + box-shadow: inset 0px 0px 0px 1px var(--background-modifier-border); + border-radius: var(--radius-s); +} + +.importer-progress-bar-inner { + width: 0; + height: 100%; + background-color: var(--interactive-accent); +} + +.importer-status { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + padding: var(--size-4-2) 0; +} + +.importer-stats-container { + display: flex; + justify-content: space-evenly; + margin-top: var(--size-4-5); + margin-bottom: var(--size-4-5); +} + +.importer-stat { + text-align: center; +} + +.importer-stat-count { + font-size: var(--font-ui-large); +} + +.importer-log { + overflow: auto; + flex-grow: 1; + font-family: var(--font-monospace); + font-size: var(--font-ui-smaller); + color: var(--text-muted); + border: 1px solid var(--background-modifier-border); + padding: var(--size-4-4); + background-color: var(--background-secondary); + border-radius: var(--radius-s); + max-height: 300px; + user-select: text; +} + +.importer-log .list-item { + display: inline-block; + line-height: var(--line-height-normal); + white-space: pre; + margin: var(--size-2-1); +} + +.importer-error { + color: var(--text-error); +} diff --git a/.obsidian/plugins/obsidian-kanban/main.js b/.obsidian/plugins/obsidian-kanban/main.js new file mode 100644 index 0000000..9090d50 --- /dev/null +++ b/.obsidian/plugins/obsidian-kanban/main.js @@ -0,0 +1,153 @@ +var sF=Object.create;var Vs=Object.defineProperty;var lF=Object.getOwnPropertyDescriptor;var uF=Object.getOwnPropertyNames;var cF=Object.getPrototypeOf,dF=Object.prototype.hasOwnProperty;var fF=(e,t,r)=>t in e?Vs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var hF=(e,t)=>()=>(e&&(t=e(e=0)),t);var wn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Rf=(e,t)=>{for(var r in t)Vs(e,r,{get:t[r],enumerable:!0})},av=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of uF(t))!dF.call(e,i)&&i!==r&&Vs(e,i,{get:()=>t[i],enumerable:!(n=lF(t,i))||n.enumerable});return e};var Ct=(e,t,r)=>(r=e!=null?sF(cF(e)):{},av(t||!e||!e.__esModule?Vs(r,"default",{value:e,enumerable:!0}):r,e)),ov=e=>av(Vs({},"__esModule",{value:!0}),e);var ur=(e,t,r)=>(fF(e,typeof t!="symbol"?t+"":t,r),r);var ln=wn((hi,Zv)=>{"use strict";Object.defineProperty(hi,"__esModule",{value:!0});function Qr(e){return typeof e=="object"&&!("toString"in e)?Object.prototype.toString.call(e).slice(8,-1):e}var eI=typeof process=="object"&&!0;function Vr(e,t){if(!e)throw eI?new Error("Invariant failed"):new Error(t())}hi.invariant=Vr;var nh=Object.prototype.hasOwnProperty,tI=Array.prototype.splice,nI=Object.prototype.toString;function Ua(e){return nI.call(e).slice(8,-1)}var bu=Object.assign||function(e,t){return rh(t).forEach(function(r){nh.call(t,r)&&(e[r]=t[r])}),e},rh=typeof Object.getOwnPropertySymbols=="function"?function(e){return Object.keys(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.keys(e)};function sa(e){return Array.isArray(e)?bu(e.constructor(e.length),e):Ua(e)==="Map"?new Map(e):Ua(e)==="Set"?new Set(e):e&&typeof e=="object"?bu(Object.create(Object.getPrototypeOf(e)),e):e}var Gv=function(){function e(){this.commands=bu({},rI),this.update=this.update.bind(this),this.update.extend=this.extend=this.extend.bind(this),this.update.isEquals=function(t,r){return t===r},this.update.newContext=function(){return new e().update}}return Object.defineProperty(e.prototype,"isEquals",{get:function(){return this.update.isEquals},set:function(t){this.update.isEquals=t},enumerable:!0,configurable:!0}),e.prototype.extend=function(t,r){this.commands[t]=r},e.prototype.update=function(t,r){var n=this,i=typeof r=="function"?{$apply:r}:r;Array.isArray(t)&&Array.isArray(i)||Vr(!Array.isArray(i),function(){return"update(): You provided an invalid spec to update(). The spec may not contain an array except as the value of $set, $push, $unshift, $splice or any custom command allowing an array value."}),Vr(typeof i=="object"&&i!==null,function(){return"update(): You provided an invalid spec to update(). The spec and every included key path must be plain objects containing one of the "+("following commands: "+Object.keys(n.commands).join(", ")+".")});var a=t;return rh(i).forEach(function(o){if(nh.call(n.commands,o)){var s=t===a;a=n.commands[o](i[o],a,i,t),s&&n.isEquals(a,t)&&(a=t)}else{var u=Ua(t)==="Map"?n.update(t.get(o),i[o]):n.update(t[o],i[o]),l=Ua(a)==="Map"?a.get(o):a[o];(!n.isEquals(u,l)||typeof u=="undefined"&&!nh.call(t,o))&&(a===t&&(a=sa(t)),Ua(a)==="Map"?a.set(o,u):a[o]=u)}}),a},e}();hi.Context=Gv;var rI={$push:function(e,t,r){return jv(t,r,"$push"),e.length?t.concat(e):t},$unshift:function(e,t,r){return jv(t,r,"$unshift"),e.length?e.concat(t):t},$splice:function(e,t,r,n){return iI(t,r),e.forEach(function(i){Jv(i),t===n&&i.length&&(t=sa(n)),tI.apply(t,i)}),t},$set:function(e,t,r){return oI(r),e},$toggle:function(e,t){zs(e,"$toggle");var r=e.length?sa(t):t;return e.forEach(function(n){r[n]=!t[n]}),r},$unset:function(e,t,r,n){return zs(e,"$unset"),e.forEach(function(i){Object.hasOwnProperty.call(t,i)&&(t===n&&(t=sa(n)),delete t[i])}),t},$add:function(e,t,r,n){return qv(t,"$add"),zs(e,"$add"),Ua(t)==="Map"?e.forEach(function(i){var a=i[0],o=i[1];t===n&&t.get(a)!==o&&(t=sa(n)),t.set(a,o)}):e.forEach(function(i){t===n&&!t.has(i)&&(t=sa(n)),t.add(i)}),t},$remove:function(e,t,r,n){return qv(t,"$remove"),zs(e,"$remove"),e.forEach(function(i){t===n&&t.has(i)&&(t=sa(n)),t.delete(i)}),t},$merge:function(e,t,r,n){return sI(t,e),rh(e).forEach(function(i){e[i]!==t[i]&&(t===n&&(t=sa(n)),t[i]=e[i])}),t},$apply:function(e,t){return aI(e),e(t)}},ih=new Gv;hi.isEquals=ih.update.isEquals;hi.extend=ih.extend;hi.default=ih.update;hi.default.default=Zv.exports=bu(hi.default,hi);function jv(e,t,r){Vr(Array.isArray(e),function(){return"update(): expected target of "+Qr(r)+" to be an array; got "+Qr(e)+"."}),zs(t[r],r)}function zs(e,t){Vr(Array.isArray(e),function(){return"update(): expected spec of "+Qr(t)+" to be an array; got "+Qr(e)+". Did you forget to wrap your parameter in an array?"})}function iI(e,t){Vr(Array.isArray(e),function(){return"Expected $splice target to be an array; got "+Qr(e)}),Jv(t.$splice)}function Jv(e){Vr(Array.isArray(e),function(){return"update(): expected spec of $splice to be an array of arrays; got "+Qr(e)+". Did you forget to wrap your parameters in an array?"})}function aI(e){Vr(typeof e=="function",function(){return"update(): expected spec of $apply to be a function; got "+Qr(e)+"."})}function oI(e){Vr(Object.keys(e).length===1,function(){return"Cannot have more than one key in an object with $set"})}function sI(e,t){Vr(t&&typeof t=="object",function(){return"update(): $merge expects a spec of type 'object'; got "+Qr(t)}),Vr(e&&typeof e=="object",function(){return"update(): $merge expects a target of type 'object'; got "+Qr(e)})}function qv(e,t){var r=Ua(e);Vr(r==="Map"||r==="Set",function(){return"update(): "+Qr(t)+" expects a target of type Set or Map; got "+Qr(r)})}});var tw=wn((JB,ew)=>{"use strict";var lI=function(t){return uI(t)&&!cI(t)};function uI(e){return!!e&&typeof e=="object"}function cI(e){var t=Object.prototype.toString.call(e);return t==="[object RegExp]"||t==="[object Date]"||hI(e)}var dI=typeof Symbol=="function"&&Symbol.for,fI=dI?Symbol.for("react.element"):60103;function hI(e){return e.$$typeof===fI}function mI(e){return Array.isArray(e)?[]:{}}function Ks(e,t){return t.clone!==!1&&t.isMergeableObject(e)?Mo(mI(e),e,t):e}function pI(e,t,r){return e.concat(t).map(function(n){return Ks(n,r)})}function gI(e,t){if(!t.customMerge)return Mo;var r=t.customMerge(e);return typeof r=="function"?r:Mo}function yI(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter(function(t){return Object.propertyIsEnumerable.call(e,t)}):[]}function Qv(e){return Object.keys(e).concat(yI(e))}function Xv(e,t){try{return t in e}catch(r){return!1}}function vI(e,t){return Xv(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))}function wI(e,t,r){var n={};return r.isMergeableObject(e)&&Qv(e).forEach(function(i){n[i]=Ks(e[i],r)}),Qv(t).forEach(function(i){vI(e,i)||(Xv(e,i)&&r.isMergeableObject(t[i])?n[i]=gI(i,r)(e[i],t[i],r):n[i]=Ks(t[i],r))}),n}function Mo(e,t,r){r=r||{},r.arrayMerge=r.arrayMerge||pI,r.isMergeableObject=r.isMergeableObject||lI,r.cloneUnlessOtherwiseSpecified=Ks;var n=Array.isArray(t),i=Array.isArray(e),a=n===i;return a?n?r.arrayMerge(e,t,r):wI(e,t,r):Ks(t,r)}Mo.all=function(t,r){if(!Array.isArray(t))throw new Error("first argument should be an array");return t.reduce(function(n,i){return Mo(n,i,r)},{})};var bI=Mo;ew.exports=bI});var Db=wn((FU,Ch)=>{"use strict";var JA=Object.prototype.hasOwnProperty,cr="~";function al(){}Object.create&&(al.prototype=Object.create(null),new al().__proto__||(cr=!1));function ZA(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function bb(e,t,r,n,i){if(typeof r!="function")throw new TypeError("The listener must be a function");var a=new ZA(r,n||e,i),o=cr?cr+t:t;return e._events[o]?e._events[o].fn?e._events[o]=[e._events[o],a]:e._events[o].push(a):(e._events[o]=a,e._eventsCount++),e}function Ru(e,t){--e._eventsCount===0?e._events=new al:delete e._events[t]}function Xn(){this._events=new al,this._eventsCount=0}Xn.prototype.eventNames=function(){var t=[],r,n;if(this._eventsCount===0)return t;for(n in r=this._events)JA.call(r,n)&&t.push(cr?n.slice(1):n);return Object.getOwnPropertySymbols?t.concat(Object.getOwnPropertySymbols(r)):t};Xn.prototype.listeners=function(t){var r=cr?cr+t:t,n=this._events[r];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,a=n.length,o=new Array(a);i<a;i++)o[i]=n[i].fn;return o};Xn.prototype.listenerCount=function(t){var r=cr?cr+t:t,n=this._events[r];return n?n.fn?1:n.length:0};Xn.prototype.emit=function(t,r,n,i,a,o){var s=cr?cr+t:t;if(!this._events[s])return!1;var u=this._events[s],l=arguments.length,c,d;if(u.fn){switch(u.once&&this.removeListener(t,u.fn,void 0,!0),l){case 1:return u.fn.call(u.context),!0;case 2:return u.fn.call(u.context,r),!0;case 3:return u.fn.call(u.context,r,n),!0;case 4:return u.fn.call(u.context,r,n,i),!0;case 5:return u.fn.call(u.context,r,n,i,a),!0;case 6:return u.fn.call(u.context,r,n,i,a,o),!0}for(d=1,c=new Array(l-1);d<l;d++)c[d-1]=arguments[d];u.fn.apply(u.context,c)}else{var m=u.length,h;for(d=0;d<m;d++)switch(u[d].once&&this.removeListener(t,u[d].fn,void 0,!0),l){case 1:u[d].fn.call(u[d].context);break;case 2:u[d].fn.call(u[d].context,r);break;case 3:u[d].fn.call(u[d].context,r,n);break;case 4:u[d].fn.call(u[d].context,r,n,i);break;default:if(!c)for(h=1,c=new Array(l-1);h<l;h++)c[h-1]=arguments[h];u[d].fn.apply(u[d].context,c)}}return!0};Xn.prototype.on=function(t,r,n){return bb(this,t,r,n,!1)};Xn.prototype.once=function(t,r,n){return bb(this,t,r,n,!0)};Xn.prototype.removeListener=function(t,r,n,i){var a=cr?cr+t:t;if(!this._events[a])return this;if(!r)return Ru(this,a),this;var o=this._events[a];if(o.fn)o.fn===r&&(!i||o.once)&&(!n||o.context===n)&&Ru(this,a);else{for(var s=0,u=[],l=o.length;s<l;s++)(o[s].fn!==r||i&&!o[s].once||n&&o[s].context!==n)&&u.push(o[s]);u.length?this._events[a]=u.length===1?u[0]:u:Ru(this,a)}return this};Xn.prototype.removeAllListeners=function(t){var r;return t?(r=cr?cr+t:t,this._events[r]&&Ru(this,r)):(this._events=new al,this._eventsCount=0),this};Xn.prototype.off=Xn.prototype.removeListener;Xn.prototype.addListener=Xn.prototype.on;Xn.prefixed=cr;Xn.EventEmitter=Xn;typeof Ch!="undefined"&&(Ch.exports=Xn)});var Wu=wn(dn=>{"use strict";"use restrict";var Ih=32;dn.INT_BITS=Ih;dn.INT_MAX=2147483647;dn.INT_MIN=-1<<Ih-1;dn.sign=function(e){return(e>0)-(e<0)};dn.abs=function(e){var t=e>>Ih-1;return(e^t)-t};dn.min=function(e,t){return t^(e^t)&-(e<t)};dn.max=function(e,t){return e^(e^t)&-(e<t)};dn.isPow2=function(e){return!(e&e-1)&&!!e};dn.log2=function(e){var t,r;return t=(e>65535)<<4,e>>>=t,r=(e>255)<<3,e>>>=r,t|=r,r=(e>15)<<2,e>>>=r,t|=r,r=(e>3)<<1,e>>>=r,t|=r,t|e>>1};dn.log10=function(e){return e>=1e9?9:e>=1e8?8:e>=1e7?7:e>=1e6?6:e>=1e5?5:e>=1e4?4:e>=1e3?3:e>=100?2:e>=10?1:0};dn.popCount=function(e){return e=e-(e>>>1&1431655765),e=(e&858993459)+(e>>>2&858993459),(e+(e>>>4)&252645135)*16843009>>>24};function Fb(e){var t=32;return e&=-e,e&&t--,e&65535&&(t-=16),e&16711935&&(t-=8),e&252645135&&(t-=4),e&858993459&&(t-=2),e&1431655765&&(t-=1),t}dn.countTrailingZeros=Fb;dn.nextPow2=function(e){return e+=e===0,--e,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e+1};dn.prevPow2=function(e){return e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e-(e>>>1)};dn.parity=function(e){return e^=e>>>16,e^=e>>>8,e^=e>>>4,e&=15,27030>>>e&1};var ll=new Array(256);(function(e){for(var t=0;t<256;++t){var r=t,n=t,i=7;for(r>>>=1;r;r>>>=1)n<<=1,n|=r&1,--i;e[t]=n<<i&255}})(ll);dn.reverse=function(e){return ll[e&255]<<24|ll[e>>>8&255]<<16|ll[e>>>16&255]<<8|ll[e>>>24&255]};dn.interleave2=function(e,t){return e&=65535,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t&=65535,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1};dn.deinterleave2=function(e,t){return e=e>>>t&1431655765,e=(e|e>>>1)&858993459,e=(e|e>>>2)&252645135,e=(e|e>>>4)&16711935,e=(e|e>>>16)&65535,e<<16>>16};dn.interleave3=function(e,t,r){return e&=1023,e=(e|e<<16)&4278190335,e=(e|e<<8)&251719695,e=(e|e<<4)&3272356035,e=(e|e<<2)&1227133513,t&=1023,t=(t|t<<16)&4278190335,t=(t|t<<8)&251719695,t=(t|t<<4)&3272356035,t=(t|t<<2)&1227133513,e|=t<<1,r&=1023,r=(r|r<<16)&4278190335,r=(r|r<<8)&251719695,r=(r|r<<4)&3272356035,r=(r|r<<2)&1227133513,e|r<<2};dn.deinterleave3=function(e,t){return e=e>>>t&1227133513,e=(e|e>>>2)&3272356035,e=(e|e>>>4)&251719695,e=(e|e>>>8)&4278190335,e=(e|e>>>16)&1023,e<<22>>22};dn.nextCombination=function(e){var t=e|e-1;return t+1|(~t&-~t)-1>>>Fb(e)+1}});var Ob=wn((lW,Ab)=>{"use strict";function Ib(e,t,r){var n=e[r]|0;if(n<=0)return[];var i=new Array(n),a;if(r===e.length-1)for(a=0;a<n;++a)i[a]=t;else for(a=0;a<n;++a)i[a]=Ib(e,t,r+1);return i}function tO(e,t){var r,n;for(r=new Array(e),n=0;n<e;++n)r[n]=t;return r}function nO(e,t){switch(typeof t=="undefined"&&(t=0),typeof e){case"number":if(e>0)return tO(e|0,t);break;case"object":if(typeof e.length=="number")return Ib(e,t,0);break}return[]}Ab.exports=nO});var eD={};Rf(eD,{Buffer:()=>fe,INSPECT_MAX_BYTES:()=>$b,SlowBuffer:()=>mO,isBuffer:()=>Qb,kMaxLength:()=>uO});function Hb(){Oh=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,r=e.length;t<r;++t)wi[t]=e[t],Wr[e.charCodeAt(t)]=t;Wr[45]=62,Wr[95]=63}function iO(e){Oh||Hb();var t,r,n,i,a,o,s=e.length;if(s%4>0)throw new Error("Invalid string. Length must be a multiple of 4");a=e[s-2]==="="?2:e[s-1]==="="?1:0,o=new rO(s*3/4-a),n=a>0?s-4:s;var u=0;for(t=0,r=0;t<n;t+=4,r+=3)i=Wr[e.charCodeAt(t)]<<18|Wr[e.charCodeAt(t+1)]<<12|Wr[e.charCodeAt(t+2)]<<6|Wr[e.charCodeAt(t+3)],o[u++]=i>>16&255,o[u++]=i>>8&255,o[u++]=i&255;return a===2?(i=Wr[e.charCodeAt(t)]<<2|Wr[e.charCodeAt(t+1)]>>4,o[u++]=i&255):a===1&&(i=Wr[e.charCodeAt(t)]<<10|Wr[e.charCodeAt(t+1)]<<4|Wr[e.charCodeAt(t+2)]>>2,o[u++]=i>>8&255,o[u++]=i&255),o}function aO(e){return wi[e>>18&63]+wi[e>>12&63]+wi[e>>6&63]+wi[e&63]}function oO(e,t,r){for(var n,i=[],a=t;a<r;a+=3)n=(e[a]<<16)+(e[a+1]<<8)+e[a+2],i.push(aO(n));return i.join("")}function Lb(e){Oh||Hb();for(var t,r=e.length,n=r%3,i="",a=[],o=16383,s=0,u=r-n;s<u;s+=o)a.push(oO(e,s,s+o>u?u:s+o));return n===1?(t=e[r-1],i+=wi[t>>2],i+=wi[t<<4&63],i+="=="):n===2&&(t=(e[r-2]<<8)+e[r-1],i+=wi[t>>10],i+=wi[t>>4&63],i+=wi[t<<2&63],i+="="),a.push(i),a.join("")}function Ku(e,t,r,n,i){var a,o,s=i*8-n-1,u=(1<<s)-1,l=u>>1,c=-7,d=r?i-1:0,m=r?-1:1,h=e[t+d];for(d+=m,a=h&(1<<-c)-1,h>>=-c,c+=s;c>0;a=a*256+e[t+d],d+=m,c-=8);for(o=a&(1<<-c)-1,a>>=-c,c+=n;c>0;o=o*256+e[t+d],d+=m,c-=8);if(a===0)a=1-l;else{if(a===u)return o?NaN:(h?-1:1)*(1/0);o=o+Math.pow(2,n),a=a-l}return(h?-1:1)*o*Math.pow(2,a-n)}function Bb(e,t,r,n,i,a){var o,s,u,l=a*8-i-1,c=(1<<l)-1,d=c>>1,m=i===23?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:a-1,g=n?1:-1,y=t<0||t===0&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,o=c):(o=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-o))<1&&(o--,u*=2),o+d>=1?t+=m/u:t+=m*Math.pow(2,1-d),t*u>=2&&(o++,u/=2),o+d>=c?(s=0,o=c):o+d>=1?(s=(t*u-1)*Math.pow(2,i),o=o+d):(s=t*Math.pow(2,d-1)*Math.pow(2,i),o=0));i>=8;e[r+h]=s&255,h+=g,s/=256,i-=8);for(o=o<<i|s,l+=i;l>0;e[r+h]=o&255,h+=g,o/=256,l-=8);e[r+h-g]|=y*128}function Yu(){return fe.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function Wi(e,t){if(Yu()<t)throw new RangeError("Invalid typed array length");return fe.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t),e.__proto__=fe.prototype):(e===null&&(e=new fe(t)),e.length=t),e}function fe(e,t,r){if(!fe.TYPED_ARRAY_SUPPORT&&!(this instanceof fe))return new fe(e,t,r);if(typeof e=="number"){if(typeof t=="string")throw new Error("If encoding is specified then the first argument must be a string");return Lh(this,e)}return Ub(this,e,t,r)}function Ub(e,t,r,n){if(typeof t=="number")throw new TypeError('"value" argument must not be a number');return typeof ArrayBuffer!="undefined"&&t instanceof ArrayBuffer?fO(e,t,r,n):typeof t=="string"?dO(e,t,r):hO(e,t)}function Wb(e){if(typeof e!="number")throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function cO(e,t,r,n){return Wb(t),t<=0?Wi(e,t):r!==void 0?typeof n=="string"?Wi(e,t).fill(r,n):Wi(e,t).fill(r):Wi(e,t)}function Lh(e,t){if(Wb(t),e=Wi(e,t<0?0:Ph(t)|0),!fe.TYPED_ARRAY_SUPPORT)for(var r=0;r<t;++r)e[r]=0;return e}function dO(e,t,r){if((typeof r!="string"||r==="")&&(r="utf8"),!fe.isEncoding(r))throw new TypeError('"encoding" must be a valid string encoding');var n=Yb(t,r)|0;e=Wi(e,n);var i=e.write(t,r);return i!==n&&(e=e.slice(0,i)),e}function Ah(e,t){var r=t.length<0?0:Ph(t.length)|0;e=Wi(e,r);for(var n=0;n<r;n+=1)e[n]=t[n]&255;return e}function fO(e,t,r,n){if(t.byteLength,r<0||t.byteLength<r)throw new RangeError("'offset' is out of bounds");if(t.byteLength<r+(n||0))throw new RangeError("'length' is out of bounds");return r===void 0&&n===void 0?t=new Uint8Array(t):n===void 0?t=new Uint8Array(t,r):t=new Uint8Array(t,r,n),fe.TYPED_ARRAY_SUPPORT?(e=t,e.__proto__=fe.prototype):e=Ah(e,t),e}function hO(e,t){if(bi(t)){var r=Ph(t.length)|0;return e=Wi(e,r),e.length===0||t.copy(e,0,0,r),e}if(t){if(typeof ArrayBuffer!="undefined"&&t.buffer instanceof ArrayBuffer||"length"in t)return typeof t.length!="number"||OO(t.length)?Wi(e,0):Ah(e,t);if(t.type==="Buffer"&&Vb(t.data))return Ah(e,t.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function Ph(e){if(e>=Yu())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+Yu().toString(16)+" bytes");return e|0}function mO(e){return+e!=e&&(e=0),fe.alloc(+e)}function bi(e){return!!(e!=null&&e._isBuffer)}function Yb(e,t){if(bi(e))return e.length;if(typeof ArrayBuffer!="undefined"&&typeof ArrayBuffer.isView=="function"&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;typeof e!="string"&&(e=""+e);var r=e.length;if(r===0)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return zu(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return r*2;case"hex":return r>>>1;case"base64":return Zb(e).length;default:if(n)return zu(e).length;t=(""+t).toLowerCase(),n=!0}}function pO(e,t,r){var n=!1;if((t===void 0||t<0)&&(t=0),t>this.length||((r===void 0||r>this.length)&&(r=this.length),r<=0)||(r>>>=0,t>>>=0,r<=t))return"";for(e||(e="utf8");;)switch(e){case"hex":return xO(this,t,r);case"utf8":case"utf-8":return jb(this,t,r);case"ascii":return EO(this,t,r);case"latin1":case"binary":return kO(this,t,r);case"base64":return DO(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return CO(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function Ga(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function zb(e,t,r,n,i){if(e.length===0)return-1;if(typeof r=="string"?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0)if(i)r=0;else return-1;if(typeof t=="string"&&(t=fe.from(t,n)),bi(t))return t.length===0?-1:Nb(e,t,r,n,i);if(typeof t=="number")return t=t&255,fe.TYPED_ARRAY_SUPPORT&&typeof Uint8Array.prototype.indexOf=="function"?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):Nb(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function Nb(e,t,r,n,i){var a=1,o=e.length,s=t.length;if(n!==void 0&&(n=String(n).toLowerCase(),n==="ucs2"||n==="ucs-2"||n==="utf16le"||n==="utf-16le")){if(e.length<2||t.length<2)return-1;a=2,o/=2,s/=2,r/=2}function u(h,g){return a===1?h[g]:h.readUInt16BE(g*a)}var l;if(i){var c=-1;for(l=r;l<o;l++)if(u(e,l)===u(t,c===-1?0:l-c)){if(c===-1&&(c=l),l-c+1===s)return c*a}else c!==-1&&(l-=l-c),c=-1}else for(r+s>o&&(r=o-s),l=r;l>=0;l--){for(var d=!0,m=0;m<s;m++)if(u(e,l+m)!==u(t,m)){d=!1;break}if(d)return l}return-1}function gO(e,t,r,n){r=Number(r)||0;var i=e.length-r;n?(n=Number(n),n>i&&(n=i)):n=i;var a=t.length;if(a%2!==0)throw new TypeError("Invalid hex string");n>a/2&&(n=a/2);for(var o=0;o<n;++o){var s=parseInt(t.substr(o*2,2),16);if(isNaN(s))return o;e[r+o]=s}return o}function yO(e,t,r,n){return Gu(zu(t,e.length-r),e,r,n)}function Kb(e,t,r,n){return Gu(IO(t),e,r,n)}function vO(e,t,r,n){return Kb(e,t,r,n)}function wO(e,t,r,n){return Gu(Zb(t),e,r,n)}function bO(e,t,r,n){return Gu(AO(t,e.length-r),e,r,n)}function DO(e,t,r){return t===0&&r===e.length?Lb(e):Lb(e.slice(t,r))}function jb(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i<r;){var a=e[i],o=null,s=a>239?4:a>223?3:a>191?2:1;if(i+s<=r){var u,l,c,d;switch(s){case 1:a<128&&(o=a);break;case 2:u=e[i+1],(u&192)===128&&(d=(a&31)<<6|u&63,d>127&&(o=d));break;case 3:u=e[i+1],l=e[i+2],(u&192)===128&&(l&192)===128&&(d=(a&15)<<12|(u&63)<<6|l&63,d>2047&&(d<55296||d>57343)&&(o=d));break;case 4:u=e[i+1],l=e[i+2],c=e[i+3],(u&192)===128&&(l&192)===128&&(c&192)===128&&(d=(a&15)<<18|(u&63)<<12|(l&63)<<6|c&63,d>65535&&d<1114112&&(o=d))}}o===null?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|o&1023),n.push(o),i+=s}return SO(n)}function SO(e){var t=e.length;if(t<=Rb)return String.fromCharCode.apply(String,e);for(var r="",n=0;n<t;)r+=String.fromCharCode.apply(String,e.slice(n,n+=Rb));return r}function EO(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;i<r;++i)n+=String.fromCharCode(e[i]&127);return n}function kO(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;i<r;++i)n+=String.fromCharCode(e[i]);return n}function xO(e,t,r){var n=e.length;(!t||t<0)&&(t=0),(!r||r<0||r>n)&&(r=n);for(var i="",a=t;a<r;++a)i+=FO(e[a]);return i}function CO(e,t,r){for(var n=e.slice(t,r),i="",a=0;a<n.length;a+=2)i+=String.fromCharCode(n[a]+n[a+1]*256);return i}function Pn(e,t,r){if(e%1!==0||e<0)throw new RangeError("offset is not uint");if(e+t>r)throw new RangeError("Trying to access beyond buffer length")}function gr(e,t,r,n,i,a){if(!bi(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||t<a)throw new RangeError('"value" argument is out of bounds');if(r+n>e.length)throw new RangeError("Index out of range")}function ju(e,t,r,n){t<0&&(t=65535+t+1);for(var i=0,a=Math.min(e.length-r,2);i<a;++i)e[r+i]=(t&255<<8*(n?i:1-i))>>>(n?i:1-i)*8}function qu(e,t,r,n){t<0&&(t=4294967295+t+1);for(var i=0,a=Math.min(e.length-r,4);i<a;++i)e[r+i]=t>>>(n?i:3-i)*8&255}function qb(e,t,r,n,i,a){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function Gb(e,t,r,n,i){return i||qb(e,t,r,4),Bb(e,t,r,n,23,4),r+4}function Jb(e,t,r,n,i){return i||qb(e,t,r,8),Bb(e,t,r,n,52,8),r+8}function MO(e){if(e=TO(e).replace(_O,""),e.length<2)return"";for(;e.length%4!==0;)e=e+"=";return e}function TO(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function FO(e){return e<16?"0"+e.toString(16):e.toString(16)}function zu(e,t){t=t||1/0;for(var r,n=e.length,i=null,a=[],o=0;o<n;++o){if(r=e.charCodeAt(o),r>55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&a.push(239,191,189);continue}else if(o+1===n){(t-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&a.push(239,191,189),i=r;continue}r=(i-55296<<10|r-56320)+65536}else i&&(t-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;a.push(r)}else if(r<2048){if((t-=2)<0)break;a.push(r>>6|192,r&63|128)}else if(r<65536){if((t-=3)<0)break;a.push(r>>12|224,r>>6&63|128,r&63|128)}else if(r<1114112){if((t-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,r&63|128)}else throw new Error("Invalid code point")}return a}function IO(e){for(var t=[],r=0;r<e.length;++r)t.push(e.charCodeAt(r)&255);return t}function AO(e,t){for(var r,n,i,a=[],o=0;o<e.length&&!((t-=2)<0);++o)r=e.charCodeAt(o),n=r>>8,i=r%256,a.push(i),a.push(n);return a}function Zb(e){return iO(MO(e))}function Gu(e,t,r,n){for(var i=0;i<n&&!(i+r>=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function OO(e){return e!==e}function Qb(e){return e!=null&&(!!e._isBuffer||Xb(e)||LO(e))}function Xb(e){return!!e.constructor&&typeof e.constructor.isBuffer=="function"&&e.constructor.isBuffer(e)}function LO(e){return typeof e.readFloatLE=="function"&&typeof e.slice=="function"&&Xb(e.slice(0,0))}var wi,Wr,rO,Oh,sO,Vb,$b,Pb,lO,uO,Rb,_O,tD=hF(()=>{wi=[],Wr=[],rO=typeof Uint8Array!="undefined"?Uint8Array:Array,Oh=!1;sO={}.toString,Vb=Array.isArray||function(e){return sO.call(e)=="[object Array]"};$b=50,Pb=window;fe.TYPED_ARRAY_SUPPORT=Pb.TYPED_ARRAY_SUPPORT!==void 0?Pb.TYPED_ARRAY_SUPPORT:!0;lO=Yu(),uO=lO;fe.poolSize=8192;fe._augment=function(e){return e.__proto__=fe.prototype,e};fe.from=function(e,t,r){return Ub(null,e,t,r)};fe.TYPED_ARRAY_SUPPORT&&(fe.prototype.__proto__=Uint8Array.prototype,fe.__proto__=Uint8Array);fe.alloc=function(e,t,r){return cO(null,e,t,r)};fe.allocUnsafe=function(e){return Lh(null,e)};fe.allocUnsafeSlow=function(e){return Lh(null,e)};fe.isBuffer=Qb;fe.compare=function(t,r){if(!bi(t)||!bi(r))throw new TypeError("Arguments must be Buffers");if(t===r)return 0;for(var n=t.length,i=r.length,a=0,o=Math.min(n,i);a<o;++a)if(t[a]!==r[a]){n=t[a],i=r[a];break}return n<i?-1:i<n?1:0};fe.isEncoding=function(t){switch(String(t).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!0;default:return!1}};fe.concat=function(t,r){if(!Vb(t))throw new TypeError('"list" argument must be an Array of Buffers');if(t.length===0)return fe.alloc(0);var n;if(r===void 0)for(r=0,n=0;n<t.length;++n)r+=t[n].length;var i=fe.allocUnsafe(r),a=0;for(n=0;n<t.length;++n){var o=t[n];if(!bi(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(i,a),a+=o.length}return i};fe.byteLength=Yb;fe.prototype._isBuffer=!0;fe.prototype.swap16=function(){var t=this.length;if(t%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var r=0;r<t;r+=2)Ga(this,r,r+1);return this};fe.prototype.swap32=function(){var t=this.length;if(t%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var r=0;r<t;r+=4)Ga(this,r,r+3),Ga(this,r+1,r+2);return this};fe.prototype.swap64=function(){var t=this.length;if(t%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var r=0;r<t;r+=8)Ga(this,r,r+7),Ga(this,r+1,r+6),Ga(this,r+2,r+5),Ga(this,r+3,r+4);return this};fe.prototype.toString=function(){var t=this.length|0;return t===0?"":arguments.length===0?jb(this,0,t):pO.apply(this,arguments)};fe.prototype.equals=function(t){if(!bi(t))throw new TypeError("Argument must be a Buffer");return this===t?!0:fe.compare(this,t)===0};fe.prototype.inspect=function(){var t="",r=$b;return this.length>0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),"<Buffer "+t+">"};fe.prototype.compare=function(t,r,n,i,a){if(!bi(t))throw new TypeError("Argument must be a Buffer");if(r===void 0&&(r=0),n===void 0&&(n=t?t.length:0),i===void 0&&(i=0),a===void 0&&(a=this.length),r<0||n>t.length||i<0||a>this.length)throw new RangeError("out of range index");if(i>=a&&r>=n)return 0;if(i>=a)return-1;if(r>=n)return 1;if(r>>>=0,n>>>=0,i>>>=0,a>>>=0,this===t)return 0;for(var o=a-i,s=n-r,u=Math.min(o,s),l=this.slice(i,a),c=t.slice(r,n),d=0;d<u;++d)if(l[d]!==c[d]){o=l[d],s=c[d];break}return o<s?-1:s<o?1:0};fe.prototype.includes=function(t,r,n){return this.indexOf(t,r,n)!==-1};fe.prototype.indexOf=function(t,r,n){return zb(this,t,r,n,!0)};fe.prototype.lastIndexOf=function(t,r,n){return zb(this,t,r,n,!1)};fe.prototype.write=function(t,r,n,i){if(r===void 0)i="utf8",n=this.length,r=0;else if(n===void 0&&typeof r=="string")i=r,n=this.length,r=0;else if(isFinite(r))r=r|0,isFinite(n)?(n=n|0,i===void 0&&(i="utf8")):(i=n,n=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");var a=this.length-r;if((n===void 0||n>a)&&(n=a),t.length>0&&(n<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var o=!1;;)switch(i){case"hex":return gO(this,t,r,n);case"utf8":case"utf-8":return yO(this,t,r,n);case"ascii":return Kb(this,t,r,n);case"latin1":case"binary":return vO(this,t,r,n);case"base64":return wO(this,t,r,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return bO(this,t,r,n);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0}};fe.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};Rb=4096;fe.prototype.slice=function(t,r){var n=this.length;t=~~t,r=r===void 0?n:~~r,t<0?(t+=n,t<0&&(t=0)):t>n&&(t=n),r<0?(r+=n,r<0&&(r=0)):r>n&&(r=n),r<t&&(r=t);var i;if(fe.TYPED_ARRAY_SUPPORT)i=this.subarray(t,r),i.__proto__=fe.prototype;else{var a=r-t;i=new fe(a,void 0);for(var o=0;o<a;++o)i[o]=this[o+t]}return i};fe.prototype.readUIntLE=function(t,r,n){t=t|0,r=r|0,n||Pn(t,r,this.length);for(var i=this[t],a=1,o=0;++o<r&&(a*=256);)i+=this[t+o]*a;return i};fe.prototype.readUIntBE=function(t,r,n){t=t|0,r=r|0,n||Pn(t,r,this.length);for(var i=this[t+--r],a=1;r>0&&(a*=256);)i+=this[t+--r]*a;return i};fe.prototype.readUInt8=function(t,r){return r||Pn(t,1,this.length),this[t]};fe.prototype.readUInt16LE=function(t,r){return r||Pn(t,2,this.length),this[t]|this[t+1]<<8};fe.prototype.readUInt16BE=function(t,r){return r||Pn(t,2,this.length),this[t]<<8|this[t+1]};fe.prototype.readUInt32LE=function(t,r){return r||Pn(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+this[t+3]*16777216};fe.prototype.readUInt32BE=function(t,r){return r||Pn(t,4,this.length),this[t]*16777216+(this[t+1]<<16|this[t+2]<<8|this[t+3])};fe.prototype.readIntLE=function(t,r,n){t=t|0,r=r|0,n||Pn(t,r,this.length);for(var i=this[t],a=1,o=0;++o<r&&(a*=256);)i+=this[t+o]*a;return a*=128,i>=a&&(i-=Math.pow(2,8*r)),i};fe.prototype.readIntBE=function(t,r,n){t=t|0,r=r|0,n||Pn(t,r,this.length);for(var i=r,a=1,o=this[t+--i];i>0&&(a*=256);)o+=this[t+--i]*a;return a*=128,o>=a&&(o-=Math.pow(2,8*r)),o};fe.prototype.readInt8=function(t,r){return r||Pn(t,1,this.length),this[t]&128?(255-this[t]+1)*-1:this[t]};fe.prototype.readInt16LE=function(t,r){r||Pn(t,2,this.length);var n=this[t]|this[t+1]<<8;return n&32768?n|4294901760:n};fe.prototype.readInt16BE=function(t,r){r||Pn(t,2,this.length);var n=this[t+1]|this[t]<<8;return n&32768?n|4294901760:n};fe.prototype.readInt32LE=function(t,r){return r||Pn(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24};fe.prototype.readInt32BE=function(t,r){return r||Pn(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]};fe.prototype.readFloatLE=function(t,r){return r||Pn(t,4,this.length),Ku(this,t,!0,23,4)};fe.prototype.readFloatBE=function(t,r){return r||Pn(t,4,this.length),Ku(this,t,!1,23,4)};fe.prototype.readDoubleLE=function(t,r){return r||Pn(t,8,this.length),Ku(this,t,!0,52,8)};fe.prototype.readDoubleBE=function(t,r){return r||Pn(t,8,this.length),Ku(this,t,!1,52,8)};fe.prototype.writeUIntLE=function(t,r,n,i){if(t=+t,r=r|0,n=n|0,!i){var a=Math.pow(2,8*n)-1;gr(this,t,r,n,a,0)}var o=1,s=0;for(this[r]=t&255;++s<n&&(o*=256);)this[r+s]=t/o&255;return r+n};fe.prototype.writeUIntBE=function(t,r,n,i){if(t=+t,r=r|0,n=n|0,!i){var a=Math.pow(2,8*n)-1;gr(this,t,r,n,a,0)}var o=n-1,s=1;for(this[r+o]=t&255;--o>=0&&(s*=256);)this[r+o]=t/s&255;return r+n};fe.prototype.writeUInt8=function(t,r,n){return t=+t,r=r|0,n||gr(this,t,r,1,255,0),fe.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[r]=t&255,r+1};fe.prototype.writeUInt16LE=function(t,r,n){return t=+t,r=r|0,n||gr(this,t,r,2,65535,0),fe.TYPED_ARRAY_SUPPORT?(this[r]=t&255,this[r+1]=t>>>8):ju(this,t,r,!0),r+2};fe.prototype.writeUInt16BE=function(t,r,n){return t=+t,r=r|0,n||gr(this,t,r,2,65535,0),fe.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=t&255):ju(this,t,r,!1),r+2};fe.prototype.writeUInt32LE=function(t,r,n){return t=+t,r=r|0,n||gr(this,t,r,4,4294967295,0),fe.TYPED_ARRAY_SUPPORT?(this[r+3]=t>>>24,this[r+2]=t>>>16,this[r+1]=t>>>8,this[r]=t&255):qu(this,t,r,!0),r+4};fe.prototype.writeUInt32BE=function(t,r,n){return t=+t,r=r|0,n||gr(this,t,r,4,4294967295,0),fe.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=t&255):qu(this,t,r,!1),r+4};fe.prototype.writeIntLE=function(t,r,n,i){if(t=+t,r=r|0,!i){var a=Math.pow(2,8*n-1);gr(this,t,r,n,a-1,-a)}var o=0,s=1,u=0;for(this[r]=t&255;++o<n&&(s*=256);)t<0&&u===0&&this[r+o-1]!==0&&(u=1),this[r+o]=(t/s>>0)-u&255;return r+n};fe.prototype.writeIntBE=function(t,r,n,i){if(t=+t,r=r|0,!i){var a=Math.pow(2,8*n-1);gr(this,t,r,n,a-1,-a)}var o=n-1,s=1,u=0;for(this[r+o]=t&255;--o>=0&&(s*=256);)t<0&&u===0&&this[r+o+1]!==0&&(u=1),this[r+o]=(t/s>>0)-u&255;return r+n};fe.prototype.writeInt8=function(t,r,n){return t=+t,r=r|0,n||gr(this,t,r,1,127,-128),fe.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[r]=t&255,r+1};fe.prototype.writeInt16LE=function(t,r,n){return t=+t,r=r|0,n||gr(this,t,r,2,32767,-32768),fe.TYPED_ARRAY_SUPPORT?(this[r]=t&255,this[r+1]=t>>>8):ju(this,t,r,!0),r+2};fe.prototype.writeInt16BE=function(t,r,n){return t=+t,r=r|0,n||gr(this,t,r,2,32767,-32768),fe.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=t&255):ju(this,t,r,!1),r+2};fe.prototype.writeInt32LE=function(t,r,n){return t=+t,r=r|0,n||gr(this,t,r,4,2147483647,-2147483648),fe.TYPED_ARRAY_SUPPORT?(this[r]=t&255,this[r+1]=t>>>8,this[r+2]=t>>>16,this[r+3]=t>>>24):qu(this,t,r,!0),r+4};fe.prototype.writeInt32BE=function(t,r,n){return t=+t,r=r|0,n||gr(this,t,r,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),fe.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=t&255):qu(this,t,r,!1),r+4};fe.prototype.writeFloatLE=function(t,r,n){return Gb(this,t,r,!0,n)};fe.prototype.writeFloatBE=function(t,r,n){return Gb(this,t,r,!1,n)};fe.prototype.writeDoubleLE=function(t,r,n){return Jb(this,t,r,!0,n)};fe.prototype.writeDoubleBE=function(t,r,n){return Jb(this,t,r,!1,n)};fe.prototype.copy=function(t,r,n,i){if(n||(n=0),!i&&i!==0&&(i=this.length),r>=t.length&&(r=t.length),r||(r=0),i>0&&i<n&&(i=n),i===n||t.length===0||this.length===0)return 0;if(r<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-r<i-n&&(i=t.length-r+n);var a=i-n,o;if(this===t&&n<r&&r<i)for(o=a-1;o>=0;--o)t[o+r]=this[o+n];else if(a<1e3||!fe.TYPED_ARRAY_SUPPORT)for(o=0;o<a;++o)t[o+r]=this[o+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+a),r);return a};fe.prototype.fill=function(t,r,n,i){if(typeof t=="string"){if(typeof r=="string"?(i=r,r=0,n=this.length):typeof n=="string"&&(i=n,n=this.length),t.length===1){var a=t.charCodeAt(0);a<256&&(t=a)}if(i!==void 0&&typeof i!="string")throw new TypeError("encoding must be a string");if(typeof i=="string"&&!fe.isEncoding(i))throw new TypeError("Unknown encoding: "+i)}else typeof t=="number"&&(t=t&255);if(r<0||this.length<r||this.length<n)throw new RangeError("Out of range index");if(n<=r)return this;r=r>>>0,n=n===void 0?this.length:n>>>0,t||(t=0);var o;if(typeof t=="number")for(o=r;o<n;++o)this[o]=t;else{var s=bi(t)?t:zu(new fe(t,i).toString()),u=s.length;for(o=0;o<n-r;++o)this[o+r]=s[o%u]}return this};_O=/[^+\/0-9A-Za-z-_]/g});var nD=wn((uW,Ju)=>{var Ja=(tD(),ov(eD));if(Ja&&Ja.default){Ju.exports=Ja.default;for(let e in Ja)Ju.exports[e]=Ja[e]}else Ja&&(Ju.exports=Ja)});var Xu=wn(bt=>{"use strict";var pa=Wu(),Wn=Ob(),rD=nD().Buffer;window.__TYPEDARRAY_POOL||(window.__TYPEDARRAY_POOL={UINT8:Wn([32,0]),UINT16:Wn([32,0]),UINT32:Wn([32,0]),BIGUINT64:Wn([32,0]),INT8:Wn([32,0]),INT16:Wn([32,0]),INT32:Wn([32,0]),BIGINT64:Wn([32,0]),FLOAT:Wn([32,0]),DOUBLE:Wn([32,0]),DATA:Wn([32,0]),UINT8C:Wn([32,0]),BUFFER:Wn([32,0])});var PO=typeof Uint8ClampedArray!="undefined",NO=typeof BigUint64Array!="undefined",RO=typeof BigInt64Array!="undefined",Sn=window.__TYPEDARRAY_POOL;Sn.UINT8C||(Sn.UINT8C=Wn([32,0]));Sn.BIGUINT64||(Sn.BIGUINT64=Wn([32,0]));Sn.BIGINT64||(Sn.BIGINT64=Wn([32,0]));Sn.BUFFER||(Sn.BUFFER=Wn([32,0]));var Zu=Sn.DATA,Qu=Sn.BUFFER;bt.free=function(t){if(rD.isBuffer(t))Qu[pa.log2(t.length)].push(t);else{if(Object.prototype.toString.call(t)!=="[object ArrayBuffer]"&&(t=t.buffer),!t)return;var r=t.length||t.byteLength,n=pa.log2(r)|0;Zu[n].push(t)}};function iD(e){if(e){var t=e.length||e.byteLength,r=pa.log2(t);Zu[r].push(e)}}function HO(e){iD(e.buffer)}bt.freeUint8=bt.freeUint16=bt.freeUint32=bt.freeBigUint64=bt.freeInt8=bt.freeInt16=bt.freeInt32=bt.freeBigInt64=bt.freeFloat32=bt.freeFloat=bt.freeFloat64=bt.freeDouble=bt.freeUint8Clamped=bt.freeDataView=HO;bt.freeArrayBuffer=iD;bt.freeBuffer=function(t){Qu[pa.log2(t.length)].push(t)};bt.malloc=function(t,r){if(r===void 0||r==="arraybuffer")return yr(t);switch(r){case"uint8":return Nh(t);case"uint16":return aD(t);case"uint32":return oD(t);case"int8":return sD(t);case"int16":return lD(t);case"int32":return uD(t);case"float":case"float32":return cD(t);case"double":case"float64":return dD(t);case"uint8_clamped":return fD(t);case"bigint64":return mD(t);case"biguint64":return hD(t);case"buffer":return gD(t);case"data":case"dataview":return pD(t);default:return null}return null};function yr(t){var t=pa.nextPow2(t),r=pa.log2(t),n=Zu[r];return n.length>0?n.pop():new ArrayBuffer(t)}bt.mallocArrayBuffer=yr;function Nh(e){return new Uint8Array(yr(e),0,e)}bt.mallocUint8=Nh;function aD(e){return new Uint16Array(yr(2*e),0,e)}bt.mallocUint16=aD;function oD(e){return new Uint32Array(yr(4*e),0,e)}bt.mallocUint32=oD;function sD(e){return new Int8Array(yr(e),0,e)}bt.mallocInt8=sD;function lD(e){return new Int16Array(yr(2*e),0,e)}bt.mallocInt16=lD;function uD(e){return new Int32Array(yr(4*e),0,e)}bt.mallocInt32=uD;function cD(e){return new Float32Array(yr(4*e),0,e)}bt.mallocFloat32=bt.mallocFloat=cD;function dD(e){return new Float64Array(yr(8*e),0,e)}bt.mallocFloat64=bt.mallocDouble=dD;function fD(e){return PO?new Uint8ClampedArray(yr(e),0,e):Nh(e)}bt.mallocUint8Clamped=fD;function hD(e){return NO?new BigUint64Array(yr(8*e),0,e):null}bt.mallocBigUint64=hD;function mD(e){return RO?new BigInt64Array(yr(8*e),0,e):null}bt.mallocBigInt64=mD;function pD(e){return new DataView(yr(e),0,e)}bt.mallocDataView=pD;function gD(e){e=pa.nextPow2(e);var t=pa.log2(e),r=Qu[t];return r.length>0?r.pop():new rD(e)}bt.mallocBuffer=gD;bt.clearCache=function(){for(var t=0;t<32;++t)Sn.UINT8[t].length=0,Sn.UINT16[t].length=0,Sn.UINT32[t].length=0,Sn.INT8[t].length=0,Sn.INT16[t].length=0,Sn.INT32[t].length=0,Sn.FLOAT[t].length=0,Sn.DOUBLE[t].length=0,Sn.BIGUINT64[t].length=0,Sn.BIGINT64[t].length=0,Sn.UINT8C[t].length=0,Zu[t].length=0,Qu[t].length=0}});var DD=wn((dW,bD)=>{"use strict";bD.exports=BO;var tc=32;function BO(e,t){t<=4*tc?nc(0,t-1,e):rc(0,t-1,e)}function nc(e,t,r){for(var n=2*(e+1),i=e+1;i<=t;++i){for(var a=r[n++],o=r[n++],s=i,u=n-2;s-- >e;){var l=r[u-2],c=r[u-1];if(l<a)break;if(l===a&&c<o)break;r[u]=l,r[u+1]=c,u-=2}r[u]=a,r[u+1]=o}}function yD(e,t,r){e*=2,t*=2;var n=r[e],i=r[e+1];r[e]=r[t],r[e+1]=r[t+1],r[t]=n,r[t+1]=i}function vD(e,t,r){e*=2,t*=2,r[e]=r[t],r[e+1]=r[t+1]}function VO(e,t,r,n){e*=2,t*=2,r*=2;var i=n[e],a=n[e+1];n[e]=n[t],n[e+1]=n[t+1],n[t]=n[r],n[t+1]=n[r+1],n[r]=i,n[r+1]=a}function wD(e,t,r,n,i){e*=2,t*=2,i[e]=i[t],i[t]=r,i[e+1]=i[t+1],i[t+1]=n}function Yi(e,t,r){e*=2,t*=2;var n=r[e],i=r[t];return n<i?!1:n===i?r[e+1]>r[t+1]:!0}function ec(e,t,r,n){e*=2;var i=n[e];return i<t?!0:i===t?n[e+1]<r:!1}function rc(e,t,r){var n=(t-e+1)/6|0,i=e+n,a=t-n,o=e+t>>1,s=o-n,u=o+n,l=i,c=s,d=o,m=u,h=a,g=e+1,y=t-1,v=0;Yi(l,c,r)&&(v=l,l=c,c=v),Yi(m,h,r)&&(v=m,m=h,h=v),Yi(l,d,r)&&(v=l,l=d,d=v),Yi(c,d,r)&&(v=c,c=d,d=v),Yi(l,m,r)&&(v=l,l=m,m=v),Yi(d,m,r)&&(v=d,d=m,m=v),Yi(c,h,r)&&(v=c,c=h,h=v),Yi(c,d,r)&&(v=c,c=d,d=v),Yi(m,h,r)&&(v=m,m=h,h=v);for(var D=r[2*c],I=r[2*c+1],C=r[2*m],x=r[2*m+1],O=2*l,A=2*d,P=2*h,B=2*i,G=2*o,J=2*a,Q=0;Q<2;++Q){var oe=r[O+Q],te=r[A+Q],re=r[P+Q];r[B+Q]=oe,r[G+Q]=te,r[J+Q]=re}vD(s,e,r),vD(u,t,r);for(var ne=g;ne<=y;++ne)if(ec(ne,D,I,r))ne!==g&&yD(ne,g,r),++g;else if(!ec(ne,C,x,r))for(;;)if(ec(y,C,x,r)){ec(y,D,I,r)?(VO(ne,g,y,r),++g,--y):(yD(ne,y,r),--y);break}else{if(--y<ne)break;continue}wD(e,g-1,D,I,r),wD(t,y+1,C,x,r),g-2-e<=tc?nc(e,g-2,r):rc(e,g-2,r),t-(y+2)<=tc?nc(y+2,t,r):rc(y+2,t,r),y-g<=tc?nc(g,y,r):rc(g,y,r)}});var Rh=wn((fW,SD)=>{"use strict";SD.exports={init:UO,sweepBipartite:WO,sweepComplete:YO,scanBipartite:zO,scanComplete:KO};var En=Xu(),$O=Wu(),ic=DD(),Fr=1<<28,Qa=1024,Yn=En.mallocInt32(Qa),zi=En.mallocInt32(Qa),Ki=En.mallocInt32(Qa),Za=En.mallocInt32(Qa),Uo=En.mallocInt32(Qa),ul=En.mallocInt32(Qa),dt=En.mallocDouble(Qa*8);function UO(e){var t=$O.nextPow2(e);Yn.length<t&&(En.free(Yn),Yn=En.mallocInt32(t)),zi.length<t&&(En.free(zi),zi=En.mallocInt32(t)),Ki.length<t&&(En.free(Ki),Ki=En.mallocInt32(t)),Za.length<t&&(En.free(Za),Za=En.mallocInt32(t)),Uo.length<t&&(En.free(Uo),Uo=En.mallocInt32(t)),ul.length<t&&(En.free(ul),ul=En.mallocInt32(t));var r=8*t;dt.length<r&&(En.free(dt),dt=En.mallocDouble(r))}function Wo(e,t,r,n){var i=t[n],a=e[r-1];e[i]=a,t[a]=i}function Yo(e,t,r,n){e[r]=n,t[n]=r}function WO(e,t,r,n,i,a,o,s,u,l){for(var c=0,d=2*e,m=e-1,h=d-1,g=r;g<n;++g){var y=a[g],v=d*g;dt[c++]=i[v+m],dt[c++]=-(y+1),dt[c++]=i[v+h],dt[c++]=y}for(var g=o;g<s;++g){var y=l[g]+Fr,D=d*g;dt[c++]=u[D+m],dt[c++]=-y,dt[c++]=u[D+h],dt[c++]=y}var I=c>>>1;ic(dt,I);for(var C=0,x=0,g=0;g<I;++g){var O=dt[2*g+1]|0;if(O>=Fr)O=O-Fr|0,Wo(Ki,Za,x--,O);else if(O>=0)Wo(Yn,zi,C--,O);else if(O<=-Fr){O=-O-Fr|0;for(var A=0;A<C;++A){var P=t(Yn[A],O);if(P!==void 0)return P}Yo(Ki,Za,x++,O)}else{O=-O-1|0;for(var A=0;A<x;++A){var P=t(O,Ki[A]);if(P!==void 0)return P}Yo(Yn,zi,C++,O)}}}function YO(e,t,r,n,i,a,o,s,u,l){for(var c=0,d=2*e,m=e-1,h=d-1,g=r;g<n;++g){var y=a[g]+1<<1,v=d*g;dt[c++]=i[v+m],dt[c++]=-y,dt[c++]=i[v+h],dt[c++]=y}for(var g=o;g<s;++g){var y=l[g]+1<<1,D=d*g;dt[c++]=u[D+m],dt[c++]=-y|1,dt[c++]=u[D+h],dt[c++]=y|1}var I=c>>>1;ic(dt,I);for(var C=0,x=0,O=0,g=0;g<I;++g){var A=dt[2*g+1]|0,P=A&1;if(g<I-1&&A>>1===dt[2*g+3]>>1&&(P=2,g+=1),A<0){for(var B=-(A>>1)-1,G=0;G<O;++G){var J=t(Uo[G],B);if(J!==void 0)return J}if(P!==0)for(var G=0;G<C;++G){var J=t(Yn[G],B);if(J!==void 0)return J}if(P!==1)for(var G=0;G<x;++G){var J=t(Ki[G],B);if(J!==void 0)return J}P===0?Yo(Yn,zi,C++,B):P===1?Yo(Ki,Za,x++,B):P===2&&Yo(Uo,ul,O++,B)}else{var B=(A>>1)-1;P===0?Wo(Yn,zi,C--,B):P===1?Wo(Ki,Za,x--,B):P===2&&Wo(Uo,ul,O--,B)}}}function zO(e,t,r,n,i,a,o,s,u,l,c,d){var m=0,h=2*e,g=t,y=t+e,v=1,D=1;n?D=Fr:v=Fr;for(var I=i;I<a;++I){var C=I+v,x=h*I;dt[m++]=o[x+g],dt[m++]=-C,dt[m++]=o[x+y],dt[m++]=C}for(var I=u;I<l;++I){var C=I+D,O=h*I;dt[m++]=c[O+g],dt[m++]=-C}var A=m>>>1;ic(dt,A);for(var P=0,I=0;I<A;++I){var B=dt[2*I+1]|0;if(B<0){var C=-B,G=!1;if(C>=Fr?(G=!n,C-=Fr):(G=!!n,C-=1),G)Yo(Yn,zi,P++,C);else{var J=d[C],Q=h*C,oe=c[Q+t+1],te=c[Q+t+1+e];e:for(var re=0;re<P;++re){var ne=Yn[re],be=h*ne;if(!(te<o[be+t+1]||o[be+t+1+e]<oe)){for(var pe=t+2;pe<e;++pe)if(c[Q+pe+e]<o[be+pe]||o[be+pe+e]<c[Q+pe])continue e;var De=s[ne],Ce;if(n?Ce=r(J,De):Ce=r(De,J),Ce!==void 0)return Ce}}}}else Wo(Yn,zi,P--,B-v)}}function KO(e,t,r,n,i,a,o,s,u,l,c){for(var d=0,m=2*e,h=t,g=t+e,y=n;y<i;++y){var v=y+Fr,D=m*y;dt[d++]=a[D+h],dt[d++]=-v,dt[d++]=a[D+g],dt[d++]=v}for(var y=s;y<u;++y){var v=y+1,I=m*y;dt[d++]=l[I+h],dt[d++]=-v}var C=d>>>1;ic(dt,C);for(var x=0,y=0;y<C;++y){var O=dt[2*y+1]|0;if(O<0){var v=-O;if(v>=Fr)Yn[x++]=v-Fr;else{v-=1;var A=c[v],P=m*v,B=l[P+t+1],G=l[P+t+1+e];e:for(var J=0;J<x;++J){var Q=Yn[J],oe=o[Q];if(oe===A)break;var te=m*Q;if(!(G<a[te+t+1]||a[te+t+1+e]<B)){for(var re=t+2;re<e;++re)if(l[P+re+e]<a[te+re]||a[te+re+e]<l[P+re])continue e;var ne=r(oe,A);if(ne!==void 0)return ne}}}}else{for(var v=O-Fr,J=x-1;J>=0;--J)if(Yn[J]===v){for(var re=J+1;re<x;++re)Yn[re-1]=Yn[re];break}--x}}}});var _D=wn(Yh=>{"use strict";var Xa="d",jo="ax",ED="vv",Hh="fp",cl="es",ac="rs",Uh="re",dl="rb",kD="ri",zo="rp",oc="bs",Wh="be",fl="bb",xD="bi",Ko="bp",Bh="rv",Vh="Q",$h=[Xa,jo,ED,ac,Uh,dl,kD,oc,Wh,fl,xD];function jO(e,t,r){var n="bruteForce"+(e?"Red":"Blue")+(t?"Flip":"")+(r?"Full":""),i=["function ",n,"(",$h.join(),"){","var ",cl,"=2*",Xa,";"],a="for(var i="+ac+","+zo+"="+cl+"*"+ac+";i<"+Uh+";++i,"+zo+"+="+cl+"){var x0="+dl+"["+jo+"+"+zo+"],x1="+dl+"["+jo+"+"+zo+"+"+Xa+"],xi="+kD+"[i];",o="for(var j="+oc+","+Ko+"="+cl+"*"+oc+";j<"+Wh+";++j,"+Ko+"+="+cl+"){var y0="+fl+"["+jo+"+"+Ko+"],"+(r?"y1="+fl+"["+jo+"+"+Ko+"+"+Xa+"],":"")+"yi="+xD+"[j];";return e?i.push(a,Vh,":",o):i.push(o,Vh,":",a),r?i.push("if(y1<x0||x1<y0)continue;"):t?i.push("if(y0<=x0||x1<y0)continue;"):i.push("if(y0<x0||x1<y0)continue;"),i.push("for(var k="+jo+"+1;k<"+Xa+";++k){var r0="+dl+"[k+"+zo+"],r1="+dl+"[k+"+Xa+"+"+zo+"],b0="+fl+"[k+"+Ko+"],b1="+fl+"[k+"+Xa+"+"+Ko+"];if(r1<b0||b1<r0)continue "+Vh+";}var "+Bh+"="+ED+"("),t?i.push("yi,xi"):i.push("xi,yi"),i.push(");if("+Bh+"!==void 0)return "+Bh+";}}}"),{name:n,code:i.join("")}}function CD(e){var t="bruteForce"+(e?"Full":"Partial"),r=[],n=$h.slice();e||n.splice(3,0,Hh);var i=["function "+t+"("+n.join()+"){"];function a(u,l){var c=jO(u,l,e);r.push(c.code),i.push("return "+c.name+"("+$h.join()+");")}i.push("if("+Uh+"-"+ac+">"+Wh+"-"+oc+"){"),e?(a(!0,!1),i.push("}else{"),a(!1,!1)):(i.push("if("+Hh+"){"),a(!0,!0),i.push("}else{"),a(!0,!1),i.push("}}else{if("+Hh+"){"),a(!1,!0),i.push("}else{"),a(!1,!1),i.push("}")),i.push("}}return "+t);var o=r.join("")+i.join(""),s=new Function(o);return s()}Yh.partial=CD(!1);Yh.full=CD(!0)});var zh=wn((mW,MD)=>{"use strict";MD.exports=GO;var qO="for(var j=2*a,k=j*c,l=k,m=c,n=b,o=a+b,p=c;d>p;++p,k+=j){var _;if($)if(m===p)m+=1,l+=j;else{for(var s=0;j>s;++s){var t=e[k+s];e[k+s]=e[l],e[l++]=t}var u=f[p];f[p]=f[m],f[m++]=u}}return m";function GO(e,t){var r="abcdef".split("").concat(t),n=[];return e.indexOf("lo")>=0&&n.push("lo=e[k+n]"),e.indexOf("hi")>=0&&n.push("hi=e[k+o]"),r.push(qO.replace("_",n.join()).replace("$",e)),Function.apply(void 0,r)}});var ID=wn((pW,FD)=>{"use strict";FD.exports=XO;var JO=zh(),TD=JO("lo<p0",["p0"]),ZO=8;function QO(e,t,r,n,i,a){for(var o=2*e,s=o*(r+1)+t,u=r+1;u<n;++u,s+=o)for(var l=i[s],c=u,d=o*(u-1);c>r&&i[d+t]>l;--c,d-=o){for(var m=d,h=d+o,g=0;g<o;++g,++m,++h){var y=i[m];i[m]=i[h],i[h]=y}var v=a[c];a[c]=a[c-1],a[c-1]=v}}function XO(e,t,r,n,i,a){if(n<=r+1)return r;for(var o=r,s=n,u=n+r>>>1,l=2*e,c=u,d=i[l*u+t];o<s;){if(s-o<ZO){QO(e,t,o,s,i,a),d=i[l*u+t];break}var m=s-o,h=Math.random()*m+o|0,g=i[l*h+t],y=Math.random()*m+o|0,v=i[l*y+t],D=Math.random()*m+o|0,I=i[l*D+t];g<=v?I>=v?(c=y,d=v):g>=I?(c=h,d=g):(c=D,d=I):v>=I?(c=y,d=v):I>=g?(c=h,d=g):(c=D,d=I);for(var O=l*(s-1),A=l*c,C=0;C<l;++C,++O,++A){var x=i[O];i[O]=i[A],i[A]=x}var P=a[s-1];a[s-1]=a[c],a[c]=P,c=TD(e,t,o,s-1,i,a,d);for(var O=l*(s-1),A=l*c,C=0;C<l;++C,++O,++A){var x=i[O];i[O]=i[A],i[A]=x}var P=a[s-1];if(a[s-1]=a[c],a[c]=P,u<c){for(s=c-1;o<s&&i[l*(s-1)+t]===d;)s-=1;s+=1}else if(c<u)for(o=c+1;o<s&&i[l*o+t]===d;)o+=1;else break}return TD(e,t,r,u,i,a,i[l*u+t])}});var HD=wn((gW,RD)=>{"use strict";RD.exports=fL;var qo=Xu(),Kh=Wu(),PD=_D(),eL=PD.partial,tL=PD.full,ga=Rh(),nL=ID(),Go=zh(),AD=128,rL=1<<22,iL=1<<22,aL=Go("!(lo>=p0)&&!(p1>=hi)",["p0","p1"]),OD=Go("lo===p0",["p0"]),oL=Go("lo<p0",["p0"]),sL=Go("hi<=p0",["p0"]),LD=Go("lo<=p0&&p0<=hi",["p0"]),lL=Go("lo<p0&&p0<=hi",["p0"]),jh=6,qh=2,ND=1024,dr=qo.mallocInt32(ND),eo=qo.mallocDouble(ND);function uL(e,t){var r=8*Kh.log2(t+1)*(e+1)|0,n=Kh.nextPow2(jh*r);dr.length<n&&(qo.free(dr),dr=qo.mallocInt32(n));var i=Kh.nextPow2(qh*r);eo.length<i&&(qo.free(eo),eo=qo.mallocDouble(i))}function ti(e,t,r,n,i,a,o,s,u){var l=jh*e;dr[l]=t,dr[l+1]=r,dr[l+2]=n,dr[l+3]=i,dr[l+4]=a,dr[l+5]=o;var c=qh*e;eo[c]=s,eo[c+1]=u}function cL(e,t,r,n,i,a,o,s,u,l,c){var d=2*e,m=u*d,h=l[m+t];e:for(var g=i,y=i*d;g<a;++g,y+=d){var v=o[y+t],D=o[y+t+e];if(!(h<v||D<h)&&!(n&&h===v)){for(var I=s[g],C=t+1;C<e;++C){var v=o[y+C],D=o[y+C+e],x=l[m+C],O=l[m+C+e];if(D<x||O<v)continue e}var A;if(n?A=r(c,I):A=r(I,c),A!==void 0)return A}}}function dL(e,t,r,n,i,a,o,s,u,l){var c=2*e,d=s*c,m=u[d+t];e:for(var h=n,g=n*c;h<i;++h,g+=c){var y=o[h];if(y!==l){var v=a[g+t],D=a[g+t+e];if(!(m<v||D<m)){for(var I=t+1;I<e;++I){var v=a[g+I],D=a[g+I+e],C=u[d+I],x=u[d+I+e];if(D<C||x<v)continue e}var O=r(y,l);if(O!==void 0)return O}}}}function fL(e,t,r,n,i,a,o,s,u){uL(e,n+o);var l=0,c=2*e,d;for(ti(l++,0,0,n,0,o,r?16:0,-1/0,1/0),r||ti(l++,0,0,o,0,n,1,-1/0,1/0);l>0;){l-=1;var m=l*jh,h=dr[m],g=dr[m+1],y=dr[m+2],v=dr[m+3],D=dr[m+4],I=dr[m+5],C=l*qh,x=eo[C],O=eo[C+1],A=I&1,P=!!(I&16),B=i,G=a,J=s,Q=u;if(A&&(B=s,G=u,J=i,Q=a),!(I&2&&(y=oL(e,h,g,y,B,G,O),g>=y))&&!(I&4&&(g=sL(e,h,g,y,B,G,x),g>=y))){var oe=y-g,te=D-v;if(P){if(e*oe*(oe+te)<iL){if(d=ga.scanComplete(e,h,t,g,y,B,G,v,D,J,Q),d!==void 0)return d;continue}}else if(e*Math.min(oe,te)<AD){if(d=eL(e,h,t,A,g,y,B,G,v,D,J,Q),d!==void 0)return d;continue}else if(e*oe*te<rL){if(d=ga.scanBipartite(e,h,t,A,g,y,B,G,v,D,J,Q),d!==void 0)return d;continue}var re=aL(e,h,g,y,B,G,x,O);if(g<re)if(e*(re-g)<AD){if(d=tL(e,h+1,t,g,re,B,G,v,D,J,Q),d!==void 0)return d}else if(h===e-2){if(A?d=ga.sweepBipartite(e,t,v,D,J,Q,g,re,B,G):d=ga.sweepBipartite(e,t,g,re,B,G,v,D,J,Q),d!==void 0)return d}else ti(l++,h+1,g,re,v,D,A,-1/0,1/0),ti(l++,h+1,v,D,g,re,A^1,-1/0,1/0);if(re<y){var ne=nL(e,h,v,D,J,Q),be=J[c*ne+h],pe=OD(e,h,ne,D,J,Q,be);if(pe<D&&ti(l++,h,re,y,pe,D,(A|4)+(P?16:0),be,O),v<ne&&ti(l++,h,re,y,v,ne,(A|2)+(P?16:0),x,be),ne+1===pe){if(P?d=dL(e,h,t,re,y,B,G,ne,J,Q[ne]):d=cL(e,h,t,A,re,y,B,G,ne,J,Q[ne]),d!==void 0)return d}else if(ne<pe){var De;if(P){if(De=LD(e,h,re,y,B,G,be),re<De){var Ce=OD(e,h,re,De,B,G,be);if(h===e-2){if(re<Ce&&(d=ga.sweepComplete(e,t,re,Ce,B,G,ne,pe,J,Q),d!==void 0)||Ce<De&&(d=ga.sweepBipartite(e,t,Ce,De,B,G,ne,pe,J,Q),d!==void 0))return d}else re<Ce&&ti(l++,h+1,re,Ce,ne,pe,16,-1/0,1/0),Ce<De&&(ti(l++,h+1,Ce,De,ne,pe,0,-1/0,1/0),ti(l++,h+1,ne,pe,Ce,De,1,-1/0,1/0))}}else A?De=lL(e,h,re,y,B,G,be):De=LD(e,h,re,y,B,G,be),re<De&&(h===e-2?A?d=ga.sweepBipartite(e,t,ne,pe,J,Q,re,De,B,G):d=ga.sweepBipartite(e,t,re,De,B,G,ne,pe,J,Q):(ti(l++,h+1,re,De,ne,pe,A,-1/0,1/0),ti(l++,h+1,ne,pe,re,De,A^1,-1/0,1/0)))}}}}}});var UD=wn((yW,$D)=>{"use strict";$D.exports=yL;var ya=Xu(),sc=Rh(),hL=HD();function mL(e,t){for(var r=0;r<e;++r)if(!(t[r]<=t[r+e]))return!0;return!1}function BD(e,t,r,n){for(var i=0,a=0,o=0,s=e.length;o<s;++o){var u=e[o];if(!mL(t,u)){for(var l=0;l<2*t;++l)r[i++]=u[l];n[a++]=o}}return a}function lc(e,t,r,n){var i=e.length,a=t.length;if(!(i<=0||a<=0)){var o=e[0].length>>>1;if(!(o<=0)){var s,u=ya.mallocDouble(2*o*i),l=ya.mallocInt32(i);if(i=BD(e,o,u,l),i>0){if(o===1&&n)sc.init(i),s=sc.sweepComplete(o,r,0,i,u,l,0,i,u,l);else{var c=ya.mallocDouble(2*o*a),d=ya.mallocInt32(a);a=BD(t,o,c,d),a>0&&(sc.init(i+a),o===1?s=sc.sweepBipartite(o,r,0,i,u,l,0,a,c,d):s=hL(o,r,n,i,u,l,a,c,d),ya.free(c),ya.free(d))}ya.free(u),ya.free(l)}return s}}}var hl;function VD(e,t){hl.push([e,t])}function pL(e){return hl=[],lc(e,e,VD,!0),hl}function gL(e,t){return hl=[],lc(e,t,VD,!1),hl}function yL(e,t,r){var n;switch(arguments.length){case 1:return pL(e);case 2:return typeof t=="function"?lc(e,e,t,!0):gL(e,t);case 3:return lc(e,t,r,!1);default:throw new Error("box-intersect: Invalid arguments")}}});var o0=wn(gt=>{"use strict";Object.defineProperty(gt,"__esModule",{value:!0});var on=require("obsidian"),Zh="YYYY-MM-DD",Qh="gggg-[W]ww",jD="YYYY-MM",qD="YYYY-[Q]Q",GD="YYYY";function pl(e){var r,n;let t=window.app.plugins.getPlugin("periodic-notes");return t&&((n=(r=t.settings)==null?void 0:r[e])==null?void 0:n.enabled)}function gl(){var e,t,r,n;try{let{internalPlugins:i,plugins:a}=window.app;if(pl("daily")){let{format:l,folder:c,template:d}=((t=(e=a.getPlugin("periodic-notes"))==null?void 0:e.settings)==null?void 0:t.daily)||{};return{format:l||Zh,folder:(c==null?void 0:c.trim())||"",template:(d==null?void 0:d.trim())||""}}let{folder:o,format:s,template:u}=((n=(r=i.getPluginById("daily-notes"))==null?void 0:r.instance)==null?void 0:n.options)||{};return{format:s||Zh,folder:(o==null?void 0:o.trim())||"",template:(u==null?void 0:u.trim())||""}}catch(i){console.info("No custom daily note settings found!",i)}}function yl(){var e,t,r,n,i,a,o;try{let s=window.app.plugins,u=(e=s.getPlugin("calendar"))==null?void 0:e.options,l=(r=(t=s.getPlugin("periodic-notes"))==null?void 0:t.settings)==null?void 0:r.weekly;if(pl("weekly"))return{format:l.format||Qh,folder:((n=l.folder)==null?void 0:n.trim())||"",template:((i=l.template)==null?void 0:i.trim())||""};let c=u||{};return{format:c.weeklyNoteFormat||Qh,folder:((a=c.weeklyNoteFolder)==null?void 0:a.trim())||"",template:((o=c.weeklyNoteTemplate)==null?void 0:o.trim())||""}}catch(s){console.info("No custom weekly note settings found!",s)}}function vl(){var t,r,n,i;let e=window.app.plugins;try{let a=pl("monthly")&&((r=(t=e.getPlugin("periodic-notes"))==null?void 0:t.settings)==null?void 0:r.monthly)||{};return{format:a.format||jD,folder:((n=a.folder)==null?void 0:n.trim())||"",template:((i=a.template)==null?void 0:i.trim())||""}}catch(a){console.info("No custom monthly note settings found!",a)}}function wl(){var t,r,n,i;let e=window.app.plugins;try{let a=pl("quarterly")&&((r=(t=e.getPlugin("periodic-notes"))==null?void 0:t.settings)==null?void 0:r.quarterly)||{};return{format:a.format||qD,folder:((n=a.folder)==null?void 0:n.trim())||"",template:((i=a.template)==null?void 0:i.trim())||""}}catch(a){console.info("No custom quarterly note settings found!",a)}}function bl(){var t,r,n,i;let e=window.app.plugins;try{let a=pl("yearly")&&((r=(t=e.getPlugin("periodic-notes"))==null?void 0:t.settings)==null?void 0:r.yearly)||{};return{format:a.format||GD,folder:((n=a.folder)==null?void 0:n.trim())||"",template:((i=a.template)==null?void 0:i.trim())||""}}catch(a){console.info("No custom yearly note settings found!",a)}}function JD(...e){let t=[];for(let n=0,i=e.length;n<i;n++)t=t.concat(e[n].split("/"));let r=[];for(let n=0,i=t.length;n<i;n++){let a=t[n];!a||a==="."||r.push(a)}return t[0]===""&&r.unshift(""),r.join("/")}function ML(e){let t=e.substring(e.lastIndexOf("/")+1);return t.lastIndexOf(".")!=-1&&(t=t.substring(0,t.lastIndexOf("."))),t}async function TL(e){let t=e.replace(/\\/g,"/").split("/");if(t.pop(),t.length){let r=JD(...t);window.app.vault.getAbstractFileByPath(r)||await window.app.vault.createFolder(r)}}async function Dl(e,t){t.endsWith(".md")||(t+=".md");let r=on.normalizePath(JD(e,t));return await TL(r),r}async function Jo(e){let{metadataCache:t,vault:r}=window.app,n=on.normalizePath(e);if(n==="/")return Promise.resolve(["",null]);try{let i=t.getFirstLinkpathDest(n,""),a=await r.cachedRead(i),o=window.app.foldManager.load(i);return[a,o]}catch(i){return console.error(`Failed to read the daily note template '${n}'`,i),new on.Notice("Failed to read the daily note template"),["",null]}}function ni(e,t="day"){let r=e.clone().startOf(t).format();return`${t}-${r}`}function ZD(e){return e.replace(/\[[^\]]*\]/g,"")}function FL(e,t){if(t==="week"){let r=ZD(e);return/w{1,2}/i.test(r)&&(/M{1,4}/.test(r)||/D{1,4}/.test(r))}return!1}function Zo(e,t){return QD(e.basename,t)}function IL(e,t){return QD(ML(e),t)}function QD(e,t){let n={day:gl,week:yl,month:vl,quarter:wl,year:bl}[t]().format.split("/").pop(),i=window.moment(e,n,!0);if(!i.isValid())return null;if(FL(n,t)&&t==="week"){let a=ZD(n);if(/w{1,2}/i.test(a))return window.moment(e,n.replace(/M{1,4}/g,"").replace(/D{1,4}/g,""),!1)}return i}var Xh=class extends Error{};async function XD(e){let t=window.app,{vault:r}=t,n=window.moment,{template:i,format:a,folder:o}=gl(),[s,u]=await Jo(i),l=e.format(a),c=await Dl(o,l);try{let d=await r.create(c,s.replace(/{{\s*date\s*}}/gi,l).replace(/{{\s*time\s*}}/gi,n().format("HH:mm")).replace(/{{\s*title\s*}}/gi,l).replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(m,h,g,y,v,D)=>{let I=n(),C=e.clone().set({hour:I.get("hour"),minute:I.get("minute"),second:I.get("second")});return g&&C.add(parseInt(y,10),v),D?C.format(D.substring(1).trim()):C.format(a)}).replace(/{{\s*yesterday\s*}}/gi,e.clone().subtract(1,"day").format(a)).replace(/{{\s*tomorrow\s*}}/gi,e.clone().add(1,"d").format(a)));return t.foldManager.save(d,u),d}catch(d){console.error(`Failed to create file: '${c}'`,d),new on.Notice("Unable to create new file.")}}function AL(e,t){var r;return(r=t[ni(e,"day")])!=null?r:null}function OL(){let{vault:e}=window.app,{folder:t}=gl(),r=e.getAbstractFileByPath(on.normalizePath(t));if(!r)throw new Xh("Failed to find daily notes folder");let n={};return on.Vault.recurseChildren(r,i=>{if(i instanceof on.TFile){let a=Zo(i,"day");if(a){let o=ni(a,"day");n[o]=i}}}),n}var em=class extends Error{};function LL(){let{moment:e}=window,t=e.localeData()._week.dow,r=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"];for(;t;)r.push(r.shift()),t--;return r}function PL(e){return LL().indexOf(e.toLowerCase())}async function e0(e){let{vault:t}=window.app,{template:r,format:n,folder:i}=yl(),[a,o]=await Jo(r),s=e.format(n),u=await Dl(i,s);try{let l=await t.create(u,a.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(c,d,m,h,g,y)=>{let v=window.moment(),D=e.clone().set({hour:v.get("hour"),minute:v.get("minute"),second:v.get("second")});return m&&D.add(parseInt(h,10),g),y?D.format(y.substring(1).trim()):D.format(n)}).replace(/{{\s*title\s*}}/gi,s).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*(sunday|monday|tuesday|wednesday|thursday|friday|saturday)\s*:(.*?)}}/gi,(c,d,m)=>{let h=PL(d);return e.weekday(h).format(m.trim())}));return window.app.foldManager.save(l,o),l}catch(l){console.error(`Failed to create file: '${u}'`,l),new on.Notice("Unable to create new file.")}}function NL(e,t){var r;return(r=t[ni(e,"week")])!=null?r:null}function RL(){let e={};if(!n0())return e;let{vault:t}=window.app,{folder:r}=yl(),n=t.getAbstractFileByPath(on.normalizePath(r));if(!n)throw new em("Failed to find weekly notes folder");return on.Vault.recurseChildren(n,i=>{if(i instanceof on.TFile){let a=Zo(i,"week");if(a){let o=ni(a,"week");e[o]=i}}}),e}var tm=class extends Error{};async function t0(e){let{vault:t}=window.app,{template:r,format:n,folder:i}=vl(),[a,o]=await Jo(r),s=e.format(n),u=await Dl(i,s);try{let l=await t.create(u,a.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(c,d,m,h,g,y)=>{let v=window.moment(),D=e.clone().set({hour:v.get("hour"),minute:v.get("minute"),second:v.get("second")});return m&&D.add(parseInt(h,10),g),y?D.format(y.substring(1).trim()):D.format(n)}).replace(/{{\s*date\s*}}/gi,s).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,s));return window.app.foldManager.save(l,o),l}catch(l){console.error(`Failed to create file: '${u}'`,l),new on.Notice("Unable to create new file.")}}function HL(e,t){var r;return(r=t[ni(e,"month")])!=null?r:null}function BL(){let e={};if(!r0())return e;let{vault:t}=window.app,{folder:r}=vl(),n=t.getAbstractFileByPath(on.normalizePath(r));if(!n)throw new tm("Failed to find monthly notes folder");return on.Vault.recurseChildren(n,i=>{if(i instanceof on.TFile){let a=Zo(i,"month");if(a){let o=ni(a,"month");e[o]=i}}}),e}var nm=class extends Error{};async function VL(e){let{vault:t}=window.app,{template:r,format:n,folder:i}=wl(),[a,o]=await Jo(r),s=e.format(n),u=await Dl(i,s);try{let l=await t.create(u,a.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(c,d,m,h,g,y)=>{let v=window.moment(),D=e.clone().set({hour:v.get("hour"),minute:v.get("minute"),second:v.get("second")});return m&&D.add(parseInt(h,10),g),y?D.format(y.substring(1).trim()):D.format(n)}).replace(/{{\s*date\s*}}/gi,s).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,s));return window.app.foldManager.save(l,o),l}catch(l){console.error(`Failed to create file: '${u}'`,l),new on.Notice("Unable to create new file.")}}function $L(e,t){var r;return(r=t[ni(e,"quarter")])!=null?r:null}function UL(){let e={};if(!i0())return e;let{vault:t}=window.app,{folder:r}=wl(),n=t.getAbstractFileByPath(on.normalizePath(r));if(!n)throw new nm("Failed to find quarterly notes folder");return on.Vault.recurseChildren(n,i=>{if(i instanceof on.TFile){let a=Zo(i,"quarter");if(a){let o=ni(a,"quarter");e[o]=i}}}),e}var rm=class extends Error{};async function WL(e){let{vault:t}=window.app,{template:r,format:n,folder:i}=bl(),[a,o]=await Jo(r),s=e.format(n),u=await Dl(i,s);try{let l=await t.create(u,a.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi,(c,d,m,h,g,y)=>{let v=window.moment(),D=e.clone().set({hour:v.get("hour"),minute:v.get("minute"),second:v.get("second")});return m&&D.add(parseInt(h,10),g),y?D.format(y.substring(1).trim()):D.format(n)}).replace(/{{\s*date\s*}}/gi,s).replace(/{{\s*time\s*}}/gi,window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi,s));return window.app.foldManager.save(l,o),l}catch(l){console.error(`Failed to create file: '${u}'`,l),new on.Notice("Unable to create new file.")}}function YL(e,t){var r;return(r=t[ni(e,"year")])!=null?r:null}function zL(){let e={};if(!a0())return e;let{vault:t}=window.app,{folder:r}=bl(),n=t.getAbstractFileByPath(on.normalizePath(r));if(!n)throw new rm("Failed to find yearly notes folder");return on.Vault.recurseChildren(n,i=>{if(i instanceof on.TFile){let a=Zo(i,"year");if(a){let o=ni(a,"year");e[o]=i}}}),e}function KL(){var n,i;let{app:e}=window,t=e.internalPlugins.plugins["daily-notes"];if(t&&t.enabled)return!0;let r=e.plugins.getPlugin("periodic-notes");return r&&((i=(n=r.settings)==null?void 0:n.daily)==null?void 0:i.enabled)}function n0(){var r,n;let{app:e}=window;if(e.plugins.getPlugin("calendar"))return!0;let t=e.plugins.getPlugin("periodic-notes");return t&&((n=(r=t.settings)==null?void 0:r.weekly)==null?void 0:n.enabled)}function r0(){var r,n;let{app:e}=window,t=e.plugins.getPlugin("periodic-notes");return t&&((n=(r=t.settings)==null?void 0:r.monthly)==null?void 0:n.enabled)}function i0(){var r,n;let{app:e}=window,t=e.plugins.getPlugin("periodic-notes");return t&&((n=(r=t.settings)==null?void 0:r.quarterly)==null?void 0:n.enabled)}function a0(){var r,n;let{app:e}=window,t=e.plugins.getPlugin("periodic-notes");return t&&((n=(r=t.settings)==null?void 0:r.yearly)==null?void 0:n.enabled)}function jL(e){let t={day:gl,week:yl,month:vl,quarter:wl,year:bl}[e];return t()}function qL(e,t){return{day:XD,month:t0,week:e0}[e](t)}gt.DEFAULT_DAILY_NOTE_FORMAT=Zh;gt.DEFAULT_MONTHLY_NOTE_FORMAT=jD;gt.DEFAULT_QUARTERLY_NOTE_FORMAT=qD;gt.DEFAULT_WEEKLY_NOTE_FORMAT=Qh;gt.DEFAULT_YEARLY_NOTE_FORMAT=GD;gt.appHasDailyNotesPluginLoaded=KL;gt.appHasMonthlyNotesPluginLoaded=r0;gt.appHasQuarterlyNotesPluginLoaded=i0;gt.appHasWeeklyNotesPluginLoaded=n0;gt.appHasYearlyNotesPluginLoaded=a0;gt.createDailyNote=XD;gt.createMonthlyNote=t0;gt.createPeriodicNote=qL;gt.createQuarterlyNote=VL;gt.createWeeklyNote=e0;gt.createYearlyNote=WL;gt.getAllDailyNotes=OL;gt.getAllMonthlyNotes=BL;gt.getAllQuarterlyNotes=UL;gt.getAllWeeklyNotes=RL;gt.getAllYearlyNotes=zL;gt.getDailyNote=AL;gt.getDailyNoteSettings=gl;gt.getDateFromFile=Zo;gt.getDateFromPath=IL;gt.getDateUID=ni;gt.getMonthlyNote=HL;gt.getMonthlyNoteSettings=vl;gt.getPeriodicNoteSettings=jL;gt.getQuarterlyNote=$L;gt.getQuarterlyNoteSettings=wl;gt.getTemplateInfo=Jo;gt.getWeeklyNote=NL;gt.getWeeklyNoteSettings=yl;gt.getYearlyNote=YL;gt.getYearlyNoteSettings=bl});var Ic=wn(Ei=>{"use strict";Object.defineProperty(Ei,"__esModule",{value:!0});require("obsidian");var qi=class extends Error{},fm=class extends qi{constructor(t){super(`Invalid DateTime: ${t.toMessage()}`)}},hm=class extends qi{constructor(t){super(`Invalid Interval: ${t.toMessage()}`)}},mm=class extends qi{constructor(t){super(`Invalid Duration: ${t.toMessage()}`)}},ro=class extends qi{},yc=class extends qi{constructor(t){super(`Invalid unit ${t}`)}},vr=class extends qi{},Di=class extends qi{constructor(){super("Zone is an abstract class")}},_e="numeric",oi="short",Or="long",vc={year:_e,month:_e,day:_e},H0={year:_e,month:oi,day:_e},GL={year:_e,month:oi,day:_e,weekday:oi},B0={year:_e,month:Or,day:_e},V0={year:_e,month:Or,day:_e,weekday:Or},$0={hour:_e,minute:_e},U0={hour:_e,minute:_e,second:_e},W0={hour:_e,minute:_e,second:_e,timeZoneName:oi},Y0={hour:_e,minute:_e,second:_e,timeZoneName:Or},z0={hour:_e,minute:_e,hourCycle:"h23"},K0={hour:_e,minute:_e,second:_e,hourCycle:"h23"},j0={hour:_e,minute:_e,second:_e,hourCycle:"h23",timeZoneName:oi},q0={hour:_e,minute:_e,second:_e,hourCycle:"h23",timeZoneName:Or},G0={year:_e,month:_e,day:_e,hour:_e,minute:_e},J0={year:_e,month:_e,day:_e,hour:_e,minute:_e,second:_e},Z0={year:_e,month:oi,day:_e,hour:_e,minute:_e},Q0={year:_e,month:oi,day:_e,hour:_e,minute:_e,second:_e},JL={year:_e,month:oi,day:_e,weekday:oi,hour:_e,minute:_e},X0={year:_e,month:Or,day:_e,hour:_e,minute:_e,timeZoneName:oi},eS={year:_e,month:Or,day:_e,hour:_e,minute:_e,second:_e,timeZoneName:oi},tS={year:_e,month:Or,day:_e,weekday:Or,hour:_e,minute:_e,timeZoneName:Or},nS={year:_e,month:Or,day:_e,weekday:Or,hour:_e,minute:_e,second:_e,timeZoneName:Or},oo=class{get type(){throw new Di}get name(){throw new Di}get ianaName(){return this.name}get isUniversal(){throw new Di}offsetName(t,r){throw new Di}formatOffset(t,r){throw new Di}offset(t){throw new Di}equals(t){throw new Di}get isValid(){throw new Di}},im=null,wc=class e extends oo{static get instance(){return im===null&&(im=new e),im}get type(){return"system"}get name(){return new Intl.DateTimeFormat().resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(t,{format:r,locale:n}){return iS(t,r,n)}formatOffset(t,r){return _l(this.offset(t),r)}offset(t){return-new Date(t).getTimezoneOffset()}equals(t){return t.type==="system"}get isValid(){return!0}},pc={};function ZL(e){return pc[e]||(pc[e]=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",era:"short"})),pc[e]}var QL={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};function XL(e,t){let r=e.format(t).replace(/\u200E/g,""),n=/(\d+)\/(\d+)\/(\d+) (AD|BC),? (\d+):(\d+):(\d+)/.exec(r),[,i,a,o,s,u,l,c]=n;return[o,i,a,s,u,l,c]}function e2(e,t){let r=e.formatToParts(t),n=[];for(let i=0;i<r.length;i++){let{type:a,value:o}=r[i],s=QL[a];a==="era"?n[s]=o:kt(s)||(n[s]=parseInt(o,10))}return n}var uc={},Da=class e extends oo{static create(t){return uc[t]||(uc[t]=new e(t)),uc[t]}static resetCache(){uc={},pc={}}static isValidSpecifier(t){return this.isValidZone(t)}static isValidZone(t){if(!t)return!1;try{return new Intl.DateTimeFormat("en-US",{timeZone:t}).format(),!0}catch(r){return!1}}constructor(t){super(),this.zoneName=t,this.valid=e.isValidZone(t)}get type(){return"iana"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(t,{format:r,locale:n}){return iS(t,r,n,this.name)}formatOffset(t,r){return _l(this.offset(t),r)}offset(t){let r=new Date(t);if(isNaN(r))return NaN;let n=ZL(this.name),[i,a,o,s,u,l,c]=n.formatToParts?e2(n,r):XL(n,r);s==="BC"&&(i=-Math.abs(i)+1);let m=Mc({year:i,month:a,day:o,hour:u===24?0:u,minute:l,second:c,millisecond:0}),h=+r,g=h%1e3;return h-=g>=0?g:1e3+g,(m-h)/(60*1e3)}equals(t){return t.type==="iana"&&t.name===this.name}get isValid(){return this.valid}},s0={};function t2(e,t={}){let r=JSON.stringify([e,t]),n=s0[r];return n||(n=new Intl.ListFormat(e,t),s0[r]=n),n}var pm={};function gm(e,t={}){let r=JSON.stringify([e,t]),n=pm[r];return n||(n=new Intl.DateTimeFormat(e,t),pm[r]=n),n}var ym={};function n2(e,t={}){let r=JSON.stringify([e,t]),n=ym[r];return n||(n=new Intl.NumberFormat(e,t),ym[r]=n),n}var vm={};function r2(e,t={}){let{base:r,...n}=t,i=JSON.stringify([e,n]),a=vm[i];return a||(a=new Intl.RelativeTimeFormat(e,t),vm[i]=a),a}var xl=null;function i2(){return xl||(xl=new Intl.DateTimeFormat().resolvedOptions().locale,xl)}function a2(e){let t=e.indexOf("-x-");t!==-1&&(e=e.substring(0,t));let r=e.indexOf("-u-");if(r===-1)return[e];{let n,i;try{n=gm(e).resolvedOptions(),i=e}catch(s){let u=e.substring(0,r);n=gm(u).resolvedOptions(),i=u}let{numberingSystem:a,calendar:o}=n;return[i,a,o]}}function o2(e,t,r){return(r||t)&&(e.includes("-u-")||(e+="-u"),r&&(e+=`-ca-${r}`),t&&(e+=`-nu-${t}`)),e}function s2(e){let t=[];for(let r=1;r<=12;r++){let n=mt.utc(2009,r,1);t.push(e(n))}return t}function l2(e){let t=[];for(let r=1;r<=7;r++){let n=mt.utc(2016,11,13+r);t.push(e(n))}return t}function cc(e,t,r,n){let i=e.listingMode();return i==="error"?null:i==="en"?r(t):n(t)}function u2(e){return e.numberingSystem&&e.numberingSystem!=="latn"?!1:e.numberingSystem==="latn"||!e.locale||e.locale.startsWith("en")||new Intl.DateTimeFormat(e.intl).resolvedOptions().numberingSystem==="latn"}var wm=class{constructor(t,r,n){this.padTo=n.padTo||0,this.floor=n.floor||!1;let{padTo:i,floor:a,...o}=n;if(!r||Object.keys(o).length>0){let s={useGrouping:!1,...n};n.padTo>0&&(s.minimumIntegerDigits=n.padTo),this.inf=n2(t,s)}}format(t){if(this.inf){let r=this.floor?Math.floor(t):t;return this.inf.format(r)}else{let r=this.floor?Math.floor(t):Om(t,3);return Tn(r,this.padTo)}}},bm=class{constructor(t,r,n){this.opts=n,this.originalZone=void 0;let i;if(this.opts.timeZone)this.dt=t;else if(t.zone.type==="fixed"){let o=-1*(t.offset/60),s=o>=0?`Etc/GMT+${o}`:`Etc/GMT${o}`;t.offset!==0&&Da.create(s).valid?(i=s,this.dt=t):(i="UTC",this.dt=t.offset===0?t:t.setZone("UTC").plus({minutes:t.offset}),this.originalZone=t.zone)}else t.zone.type==="system"?this.dt=t:t.zone.type==="iana"?(this.dt=t,i=t.zone.name):(i="UTC",this.dt=t.setZone("UTC").plus({minutes:t.offset}),this.originalZone=t.zone);let a={...this.opts};a.timeZone=a.timeZone||i,this.dtf=gm(r,a)}format(){return this.originalZone?this.formatToParts().map(({value:t})=>t).join(""):this.dtf.format(this.dt.toJSDate())}formatToParts(){let t=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?t.map(r=>{if(r.type==="timeZoneName"){let n=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...r,value:n}}else return r}):t}resolvedOptions(){return this.dtf.resolvedOptions()}},Dm=class{constructor(t,r,n){this.opts={style:"long",...n},!r&&rS()&&(this.rtf=r2(t,n))}format(t,r){return this.rtf?this.rtf.format(t,r):x2(r,t,this.opts.numeric,this.opts.style!=="long")}formatToParts(t,r){return this.rtf?this.rtf.formatToParts(t,r):[]}},mn=class e{static fromOpts(t){return e.create(t.locale,t.numberingSystem,t.outputCalendar,t.defaultToEN)}static create(t,r,n,i=!1){let a=t||hn.defaultLocale,o=a||(i?"en-US":i2()),s=r||hn.defaultNumberingSystem,u=n||hn.defaultOutputCalendar;return new e(o,s,u,a)}static resetCache(){xl=null,pm={},ym={},vm={}}static fromObject({locale:t,numberingSystem:r,outputCalendar:n}={}){return e.create(t,r,n)}constructor(t,r,n,i){let[a,o,s]=a2(t);this.locale=a,this.numberingSystem=r||o||null,this.outputCalendar=n||s||null,this.intl=o2(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=i,this.fastNumbersCached=null}get fastNumbers(){return this.fastNumbersCached==null&&(this.fastNumbersCached=u2(this)),this.fastNumbersCached}listingMode(){let t=this.isEnglish(),r=(this.numberingSystem===null||this.numberingSystem==="latn")&&(this.outputCalendar===null||this.outputCalendar==="gregory");return t&&r?"en":"intl"}clone(t){return!t||Object.getOwnPropertyNames(t).length===0?this:e.create(t.locale||this.specifiedLocale,t.numberingSystem||this.numberingSystem,t.outputCalendar||this.outputCalendar,t.defaultToEN||!1)}redefaultToEN(t={}){return this.clone({...t,defaultToEN:!0})}redefaultToSystem(t={}){return this.clone({...t,defaultToEN:!1})}months(t,r=!1){return cc(this,t,sS,()=>{let n=r?{month:t,day:"numeric"}:{month:t},i=r?"format":"standalone";return this.monthsCache[i][t]||(this.monthsCache[i][t]=s2(a=>this.extract(a,n,"month"))),this.monthsCache[i][t]})}weekdays(t,r=!1){return cc(this,t,cS,()=>{let n=r?{weekday:t,year:"numeric",month:"long",day:"numeric"}:{weekday:t},i=r?"format":"standalone";return this.weekdaysCache[i][t]||(this.weekdaysCache[i][t]=l2(a=>this.extract(a,n,"weekday"))),this.weekdaysCache[i][t]})}meridiems(){return cc(this,void 0,()=>dS,()=>{if(!this.meridiemCache){let t={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[mt.utc(2016,11,13,9),mt.utc(2016,11,13,19)].map(r=>this.extract(r,t,"dayperiod"))}return this.meridiemCache})}eras(t){return cc(this,t,fS,()=>{let r={era:t};return this.eraCache[t]||(this.eraCache[t]=[mt.utc(-40,1,1),mt.utc(2017,1,1)].map(n=>this.extract(n,r,"era"))),this.eraCache[t]})}extract(t,r,n){let i=this.dtFormatter(t,r),a=i.formatToParts(),o=a.find(s=>s.type.toLowerCase()===n);return o?o.value:null}numberFormatter(t={}){return new wm(this.intl,t.forceSimple||this.fastNumbers,t)}dtFormatter(t,r={}){return new bm(t,this.intl,r)}relFormatter(t={}){return new Dm(this.intl,this.isEnglish(),t)}listFormatter(t={}){return t2(this.intl,t)}isEnglish(){return this.locale==="en"||this.locale.toLowerCase()==="en-us"||new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")}equals(t){return this.locale===t.locale&&this.numberingSystem===t.numberingSystem&&this.outputCalendar===t.outputCalendar}},am=null,Kr=class e extends oo{static get utcInstance(){return am===null&&(am=new e(0)),am}static instance(t){return t===0?e.utcInstance:new e(t)}static parseSpecifier(t){if(t){let r=t.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(r)return new e(Tc(r[1],r[2]))}return null}constructor(t){super(),this.fixed=t}get type(){return"fixed"}get name(){return this.fixed===0?"UTC":`UTC${_l(this.fixed,"narrow")}`}get ianaName(){return this.fixed===0?"Etc/UTC":`Etc/GMT${_l(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(t,r){return _l(this.fixed,r)}get isUniversal(){return!0}offset(){return this.fixed}equals(t){return t.type==="fixed"&&t.fixed===this.fixed}get isValid(){return!0}},Sm=class extends oo{constructor(t){super(),this.zoneName=t}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}};function ba(e,t){if(kt(e)||e===null)return t;if(e instanceof oo)return e;if(c2(e)){let r=e.toLowerCase();return r==="default"?t:r==="local"||r==="system"?wc.instance:r==="utc"||r==="gmt"?Kr.utcInstance:Kr.parseSpecifier(r)||Da.create(e)}else return ao(e)?Kr.instance(e):typeof e=="object"&&"offset"in e&&typeof e.offset=="function"?e:new Sm(e)}var l0=()=>Date.now(),u0="system",c0=null,d0=null,f0=null,h0=60,m0,hn=class{static get now(){return l0}static set now(t){l0=t}static set defaultZone(t){u0=t}static get defaultZone(){return ba(u0,wc.instance)}static get defaultLocale(){return c0}static set defaultLocale(t){c0=t}static get defaultNumberingSystem(){return d0}static set defaultNumberingSystem(t){d0=t}static get defaultOutputCalendar(){return f0}static set defaultOutputCalendar(t){f0=t}static get twoDigitCutoffYear(){return h0}static set twoDigitCutoffYear(t){h0=t%100}static get throwOnInvalid(){return m0}static set throwOnInvalid(t){m0=t}static resetCaches(){mn.resetCache(),Da.resetCache()}};function kt(e){return typeof e=="undefined"}function ao(e){return typeof e=="number"}function _c(e){return typeof e=="number"&&e%1===0}function c2(e){return typeof e=="string"}function d2(e){return Object.prototype.toString.call(e)==="[object Date]"}function rS(){try{return typeof Intl!="undefined"&&!!Intl.RelativeTimeFormat}catch(e){return!1}}function f2(e){return Array.isArray(e)?e:[e]}function p0(e,t,r){if(e.length!==0)return e.reduce((n,i)=>{let a=[t(i),i];return n&&r(n[0],a[0])===n[0]?n:a},null)[1]}function h2(e,t){return t.reduce((r,n)=>(r[n]=e[n],r),{})}function rs(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function ji(e,t,r){return _c(e)&&e>=t&&e<=r}function m2(e,t){return e-t*Math.floor(e/t)}function Tn(e,t=2){let r=e<0,n;return r?n="-"+(""+-e).padStart(t,"0"):n=(""+e).padStart(t,"0"),n}function wa(e){if(!(kt(e)||e===null||e===""))return parseInt(e,10)}function to(e){if(!(kt(e)||e===null||e===""))return parseFloat(e)}function Am(e){if(!(kt(e)||e===null||e==="")){let t=parseFloat("0."+e)*1e3;return Math.floor(t)}}function Om(e,t,r=!1){let n=10**t;return(r?Math.trunc:Math.round)(e*n)/n}function Fl(e){return e%4===0&&(e%100!==0||e%400===0)}function Cl(e){return Fl(e)?366:365}function bc(e,t){let r=m2(t-1,12)+1,n=e+(t-r)/12;return r===2?Fl(n)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][r-1]}function Mc(e){let t=Date.UTC(e.year,e.month-1,e.day,e.hour,e.minute,e.second,e.millisecond);return e.year<100&&e.year>=0&&(t=new Date(t),t.setUTCFullYear(e.year,e.month-1,e.day)),+t}function Dc(e){let t=(e+Math.floor(e/4)-Math.floor(e/100)+Math.floor(e/400))%7,r=e-1,n=(r+Math.floor(r/4)-Math.floor(r/100)+Math.floor(r/400))%7;return t===4||n===3?53:52}function Em(e){return e>99?e:e>hn.twoDigitCutoffYear?1900+e:2e3+e}function iS(e,t,r,n=null){let i=new Date(e),a={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};n&&(a.timeZone=n);let o={timeZoneName:t,...a},s=new Intl.DateTimeFormat(r,o).formatToParts(i).find(u=>u.type.toLowerCase()==="timezonename");return s?s.value:null}function Tc(e,t){let r=parseInt(e,10);Number.isNaN(r)&&(r=0);let n=parseInt(t,10)||0,i=r<0||Object.is(r,-0)?-n:n;return r*60+i}function aS(e){let t=Number(e);if(typeof e=="boolean"||e===""||Number.isNaN(t))throw new vr(`Invalid unit value ${e}`);return t}function Sc(e,t){let r={};for(let n in e)if(rs(e,n)){let i=e[n];if(i==null)continue;r[t(n)]=aS(i)}return r}function _l(e,t){let r=Math.trunc(Math.abs(e/60)),n=Math.trunc(Math.abs(e%60)),i=e>=0?"+":"-";switch(t){case"short":return`${i}${Tn(r,2)}:${Tn(n,2)}`;case"narrow":return`${i}${r}${n>0?`:${n}`:""}`;case"techie":return`${i}${Tn(r,2)}${Tn(n,2)}`;default:throw new RangeError(`Value format ${t} is out of range for property format`)}}function Fc(e){return h2(e,["hour","minute","second","millisecond"])}var p2=["January","February","March","April","May","June","July","August","September","October","November","December"],oS=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],g2=["J","F","M","A","M","J","J","A","S","O","N","D"];function sS(e){switch(e){case"narrow":return[...g2];case"short":return[...oS];case"long":return[...p2];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}var lS=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],uS=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],y2=["M","T","W","T","F","S","S"];function cS(e){switch(e){case"narrow":return[...y2];case"short":return[...uS];case"long":return[...lS];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}var dS=["AM","PM"],v2=["Before Christ","Anno Domini"],w2=["BC","AD"],b2=["B","A"];function fS(e){switch(e){case"narrow":return[...b2];case"short":return[...w2];case"long":return[...v2];default:return null}}function D2(e){return dS[e.hour<12?0:1]}function S2(e,t){return cS(t)[e.weekday-1]}function E2(e,t){return sS(t)[e.month-1]}function k2(e,t){return fS(t)[e.year<0?0:1]}function x2(e,t,r="always",n=!1){let i={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},a=["hours","minutes","seconds"].indexOf(e)===-1;if(r==="auto"&&a){let d=e==="days";switch(t){case 1:return d?"tomorrow":`next ${i[e][0]}`;case-1:return d?"yesterday":`last ${i[e][0]}`;case 0:return d?"today":`this ${i[e][0]}`}}let o=Object.is(t,-0)||t<0,s=Math.abs(t),u=s===1,l=i[e],c=n?u?l[1]:l[2]||l[1]:u?i[e][0]:e;return o?`${s} ${c} ago`:`in ${s} ${c}`}function g0(e,t){let r="";for(let n of e)n.literal?r+=n.val:r+=t(n.val);return r}var C2={D:vc,DD:H0,DDD:B0,DDDD:V0,t:$0,tt:U0,ttt:W0,tttt:Y0,T:z0,TT:K0,TTT:j0,TTTT:q0,f:G0,ff:Z0,fff:X0,ffff:tS,F:J0,FF:Q0,FFF:eS,FFFF:nS},Ir=class e{static create(t,r={}){return new e(t,r)}static parseFormat(t){let r=null,n="",i=!1,a=[];for(let o=0;o<t.length;o++){let s=t.charAt(o);s==="'"?(n.length>0&&a.push({literal:i||/^\s+$/.test(n),val:n}),r=null,n="",i=!i):i||s===r?n+=s:(n.length>0&&a.push({literal:/^\s+$/.test(n),val:n}),n=s,r=s)}return n.length>0&&a.push({literal:i||/^\s+$/.test(n),val:n}),a}static macroTokenToFormatOpts(t){return C2[t]}constructor(t,r){this.opts=r,this.loc=t,this.systemLoc=null}formatWithSystemDefault(t,r){return this.systemLoc===null&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(t,{...this.opts,...r}).format()}dtFormatter(t,r={}){return this.loc.dtFormatter(t,{...this.opts,...r})}formatDateTime(t,r){return this.dtFormatter(t,r).format()}formatDateTimeParts(t,r){return this.dtFormatter(t,r).formatToParts()}formatInterval(t,r){return this.dtFormatter(t.start,r).dtf.formatRange(t.start.toJSDate(),t.end.toJSDate())}resolvedOptions(t,r){return this.dtFormatter(t,r).resolvedOptions()}num(t,r=0){if(this.opts.forceSimple)return Tn(t,r);let n={...this.opts};return r>0&&(n.padTo=r),this.loc.numberFormatter(n).format(t)}formatDateTimeFromString(t,r){let n=this.loc.listingMode()==="en",i=this.loc.outputCalendar&&this.loc.outputCalendar!=="gregory",a=(h,g)=>this.loc.extract(t,h,g),o=h=>t.isOffsetFixed&&t.offset===0&&h.allowZ?"Z":t.isValid?t.zone.formatOffset(t.ts,h.format):"",s=()=>n?D2(t):a({hour:"numeric",hourCycle:"h12"},"dayperiod"),u=(h,g)=>n?E2(t,h):a(g?{month:h}:{month:h,day:"numeric"},"month"),l=(h,g)=>n?S2(t,h):a(g?{weekday:h}:{weekday:h,month:"long",day:"numeric"},"weekday"),c=h=>{let g=e.macroTokenToFormatOpts(h);return g?this.formatWithSystemDefault(t,g):h},d=h=>n?k2(t,h):a({era:h},"era"),m=h=>{switch(h){case"S":return this.num(t.millisecond);case"u":case"SSS":return this.num(t.millisecond,3);case"s":return this.num(t.second);case"ss":return this.num(t.second,2);case"uu":return this.num(Math.floor(t.millisecond/10),2);case"uuu":return this.num(Math.floor(t.millisecond/100));case"m":return this.num(t.minute);case"mm":return this.num(t.minute,2);case"h":return this.num(t.hour%12===0?12:t.hour%12);case"hh":return this.num(t.hour%12===0?12:t.hour%12,2);case"H":return this.num(t.hour);case"HH":return this.num(t.hour,2);case"Z":return o({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return o({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return o({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return t.zone.offsetName(t.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return t.zone.offsetName(t.ts,{format:"long",locale:this.loc.locale});case"z":return t.zoneName;case"a":return s();case"d":return i?a({day:"numeric"},"day"):this.num(t.day);case"dd":return i?a({day:"2-digit"},"day"):this.num(t.day,2);case"c":return this.num(t.weekday);case"ccc":return l("short",!0);case"cccc":return l("long",!0);case"ccccc":return l("narrow",!0);case"E":return this.num(t.weekday);case"EEE":return l("short",!1);case"EEEE":return l("long",!1);case"EEEEE":return l("narrow",!1);case"L":return i?a({month:"numeric",day:"numeric"},"month"):this.num(t.month);case"LL":return i?a({month:"2-digit",day:"numeric"},"month"):this.num(t.month,2);case"LLL":return u("short",!0);case"LLLL":return u("long",!0);case"LLLLL":return u("narrow",!0);case"M":return i?a({month:"numeric"},"month"):this.num(t.month);case"MM":return i?a({month:"2-digit"},"month"):this.num(t.month,2);case"MMM":return u("short",!1);case"MMMM":return u("long",!1);case"MMMMM":return u("narrow",!1);case"y":return i?a({year:"numeric"},"year"):this.num(t.year);case"yy":return i?a({year:"2-digit"},"year"):this.num(t.year.toString().slice(-2),2);case"yyyy":return i?a({year:"numeric"},"year"):this.num(t.year,4);case"yyyyyy":return i?a({year:"numeric"},"year"):this.num(t.year,6);case"G":return d("short");case"GG":return d("long");case"GGGGG":return d("narrow");case"kk":return this.num(t.weekYear.toString().slice(-2),2);case"kkkk":return this.num(t.weekYear,4);case"W":return this.num(t.weekNumber);case"WW":return this.num(t.weekNumber,2);case"o":return this.num(t.ordinal);case"ooo":return this.num(t.ordinal,3);case"q":return this.num(t.quarter);case"qq":return this.num(t.quarter,2);case"X":return this.num(Math.floor(t.ts/1e3));case"x":return this.num(t.ts);default:return c(h)}};return g0(e.parseFormat(r),m)}formatDurationFromString(t,r){let n=u=>{switch(u[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"M":return"month";case"y":return"year";default:return null}},i=u=>l=>{let c=n(l);return c?this.num(u.get(c),l.length):l},a=e.parseFormat(r),o=a.reduce((u,{literal:l,val:c})=>l?u:u.concat(c),[]),s=t.shiftTo(...o.map(n).filter(u=>u));return g0(a,i(s))}},Ar=class{constructor(t,r){this.reason=t,this.explanation=r}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}},hS=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function is(...e){let t=e.reduce((r,n)=>r+n.source,"");return RegExp(`^${t}$`)}function as(...e){return t=>e.reduce(([r,n,i],a)=>{let[o,s,u]=a(t,i);return[{...r,...o},s||n,u]},[{},null,1]).slice(0,2)}function os(e,...t){if(e==null)return[null,null];for(let[r,n]of t){let i=r.exec(e);if(i)return n(i)}return[null,null]}function mS(...e){return(t,r)=>{let n={},i;for(i=0;i<e.length;i++)n[e[i]]=wa(t[r+i]);return[n,null,r+i]}}var pS=/(?:(Z)|([+-]\d\d)(?::?(\d\d))?)/,_2=`(?:${pS.source}?(?:\\[(${hS.source})\\])?)?`,Lm=/(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/,gS=RegExp(`${Lm.source}${_2}`),Pm=RegExp(`(?:T${gS.source})?`),M2=/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,T2=/(\d{4})-?W(\d\d)(?:-?(\d))?/,F2=/(\d{4})-?(\d{3})/,I2=mS("weekYear","weekNumber","weekDay"),A2=mS("year","ordinal"),O2=/(\d{4})-(\d\d)-(\d\d)/,yS=RegExp(`${Lm.source} ?(?:${pS.source}|(${hS.source}))?`),L2=RegExp(`(?: ${yS.source})?`);function ts(e,t,r){let n=e[t];return kt(n)?r:wa(n)}function P2(e,t){return[{year:ts(e,t),month:ts(e,t+1,1),day:ts(e,t+2,1)},null,t+3]}function ss(e,t){return[{hours:ts(e,t,0),minutes:ts(e,t+1,0),seconds:ts(e,t+2,0),milliseconds:Am(e[t+3])},null,t+4]}function Il(e,t){let r=!e[t]&&!e[t+1],n=Tc(e[t+1],e[t+2]),i=r?null:Kr.instance(n);return[{},i,t+3]}function Al(e,t){let r=e[t]?Da.create(e[t]):null;return[{},r,t+1]}var N2=RegExp(`^T?${Lm.source}$`),R2=/^-?P(?:(?:(-?\d{1,20}(?:\.\d{1,20})?)Y)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20}(?:\.\d{1,20})?)W)?(?:(-?\d{1,20}(?:\.\d{1,20})?)D)?(?:T(?:(-?\d{1,20}(?:\.\d{1,20})?)H)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,20}))?S)?)?)$/;function H2(e){let[t,r,n,i,a,o,s,u,l]=e,c=t[0]==="-",d=u&&u[0]==="-",m=(h,g=!1)=>h!==void 0&&(g||h&&c)?-h:h;return[{years:m(to(r)),months:m(to(n)),weeks:m(to(i)),days:m(to(a)),hours:m(to(o)),minutes:m(to(s)),seconds:m(to(u),u==="-0"),milliseconds:m(Am(l),d)}]}var B2={GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function Nm(e,t,r,n,i,a,o){let s={year:t.length===2?Em(wa(t)):wa(t),month:oS.indexOf(r)+1,day:wa(n),hour:wa(i),minute:wa(a)};return o&&(s.second=wa(o)),e&&(s.weekday=e.length>3?lS.indexOf(e)+1:uS.indexOf(e)+1),s}var V2=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function $2(e){let[,t,r,n,i,a,o,s,u,l,c,d]=e,m=Nm(t,i,n,r,a,o,s),h;return u?h=B2[u]:l?h=0:h=Tc(c,d),[m,new Kr(h)]}function U2(e){return e.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}var W2=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,Y2=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,z2=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function y0(e){let[,t,r,n,i,a,o,s]=e;return[Nm(t,i,n,r,a,o,s),Kr.utcInstance]}function K2(e){let[,t,r,n,i,a,o,s]=e;return[Nm(t,s,r,n,i,a,o),Kr.utcInstance]}var j2=is(M2,Pm),q2=is(T2,Pm),G2=is(F2,Pm),J2=is(gS),vS=as(P2,ss,Il,Al),Z2=as(I2,ss,Il,Al),Q2=as(A2,ss,Il,Al),X2=as(ss,Il,Al);function eP(e){return os(e,[j2,vS],[q2,Z2],[G2,Q2],[J2,X2])}function tP(e){return os(U2(e),[V2,$2])}function nP(e){return os(e,[W2,y0],[Y2,y0],[z2,K2])}function rP(e){return os(e,[R2,H2])}var iP=as(ss);function aP(e){return os(e,[N2,iP])}var oP=is(O2,L2),sP=is(yS),lP=as(ss,Il,Al);function uP(e){return os(e,[oP,vS],[sP,lP])}var v0="Invalid Duration",wS={weeks:{days:7,hours:7*24,minutes:7*24*60,seconds:7*24*60*60,milliseconds:7*24*60*60*1e3},days:{hours:24,minutes:24*60,seconds:24*60*60,milliseconds:24*60*60*1e3},hours:{minutes:60,seconds:60*60,milliseconds:60*60*1e3},minutes:{seconds:60,milliseconds:60*1e3},seconds:{milliseconds:1e3}},cP={years:{quarters:4,months:12,weeks:52,days:365,hours:365*24,minutes:365*24*60,seconds:365*24*60*60,milliseconds:365*24*60*60*1e3},quarters:{months:3,weeks:13,days:91,hours:91*24,minutes:91*24*60,seconds:91*24*60*60,milliseconds:91*24*60*60*1e3},months:{weeks:4,days:30,hours:30*24,minutes:30*24*60,seconds:30*24*60*60,milliseconds:30*24*60*60*1e3},...wS},Yr=146097/400,Qo=146097/4800,dP={years:{quarters:4,months:12,weeks:Yr/7,days:Yr,hours:Yr*24,minutes:Yr*24*60,seconds:Yr*24*60*60,milliseconds:Yr*24*60*60*1e3},quarters:{months:3,weeks:Yr/28,days:Yr/4,hours:Yr*24/4,minutes:Yr*24*60/4,seconds:Yr*24*60*60/4,milliseconds:Yr*24*60*60*1e3/4},months:{weeks:Qo/7,days:Qo,hours:Qo*24,minutes:Qo*24*60,seconds:Qo*24*60*60,milliseconds:Qo*24*60*60*1e3},...wS},io=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],fP=io.slice(0).reverse();function va(e,t,r=!1){let n={values:r?t.values:{...e.values,...t.values||{}},loc:e.loc.clone(t.loc),conversionAccuracy:t.conversionAccuracy||e.conversionAccuracy,matrix:t.matrix||e.matrix};return new He(n)}function bS(e,t){var n;let r=(n=t.milliseconds)!=null?n:0;for(let i of fP.slice(1))t[i]&&(r+=t[i]*e[i].milliseconds);return r}function w0(e,t){let r=bS(e,t)<0?-1:1;io.reduceRight((n,i)=>{if(kt(t[i]))return n;if(n){let a=t[n]*r,o=e[i][n],s=Math.floor(a/o);t[i]+=s*r,t[n]-=s*o*r}return i},null),io.reduce((n,i)=>{if(kt(t[i]))return n;if(n){let a=t[n]%1;t[n]-=a,t[i]+=a*e[n][i]}return i},null)}function hP(e){let t={};for(let[r,n]of Object.entries(e))n!==0&&(t[r]=n);return t}var He=class e{constructor(t){let r=t.conversionAccuracy==="longterm"||!1,n=r?dP:cP;t.matrix&&(n=t.matrix),this.values=t.values,this.loc=t.loc||mn.create(),this.conversionAccuracy=r?"longterm":"casual",this.invalid=t.invalid||null,this.matrix=n,this.isLuxonDuration=!0}static fromMillis(t,r){return e.fromObject({milliseconds:t},r)}static fromObject(t,r={}){if(t==null||typeof t!="object")throw new vr(`Duration.fromObject: argument expected to be an object, got ${t===null?"null":typeof t}`);return new e({values:Sc(t,e.normalizeUnit),loc:mn.fromObject(r),conversionAccuracy:r.conversionAccuracy,matrix:r.matrix})}static fromDurationLike(t){if(ao(t))return e.fromMillis(t);if(e.isDuration(t))return t;if(typeof t=="object")return e.fromObject(t);throw new vr(`Unknown duration argument ${t} of type ${typeof t}`)}static fromISO(t,r){let[n]=rP(t);return n?e.fromObject(n,r):e.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static fromISOTime(t,r){let[n]=aP(t);return n?e.fromObject(n,r):e.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static invalid(t,r=null){if(!t)throw new vr("need to specify a reason the Duration is invalid");let n=t instanceof Ar?t:new Ar(t,r);if(hn.throwOnInvalid)throw new mm(n);return new e({invalid:n})}static normalizeUnit(t){let r={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[t&&t.toLowerCase()];if(!r)throw new yc(t);return r}static isDuration(t){return t&&t.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(t,r={}){let n={...r,floor:r.round!==!1&&r.floor!==!1};return this.isValid?Ir.create(this.loc,n).formatDurationFromString(this,t):v0}toHuman(t={}){if(!this.isValid)return v0;let r=io.map(n=>{let i=this.values[n];return kt(i)?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...t,unit:n.slice(0,-1)}).format(i)}).filter(n=>n);return this.loc.listFormatter({type:"conjunction",style:t.listStyle||"narrow",...t}).format(r)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let t="P";return this.years!==0&&(t+=this.years+"Y"),(this.months!==0||this.quarters!==0)&&(t+=this.months+this.quarters*3+"M"),this.weeks!==0&&(t+=this.weeks+"W"),this.days!==0&&(t+=this.days+"D"),(this.hours!==0||this.minutes!==0||this.seconds!==0||this.milliseconds!==0)&&(t+="T"),this.hours!==0&&(t+=this.hours+"H"),this.minutes!==0&&(t+=this.minutes+"M"),(this.seconds!==0||this.milliseconds!==0)&&(t+=Om(this.seconds+this.milliseconds/1e3,3)+"S"),t==="P"&&(t+="T0S"),t}toISOTime(t={}){if(!this.isValid)return null;let r=this.toMillis();return r<0||r>=864e5?null:(t={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...t,includeOffset:!1},mt.fromMillis(r,{zone:"UTC"}).toISOTime(t))}toJSON(){return this.toISO()}toString(){return this.toISO()}toMillis(){return this.isValid?bS(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(t){if(!this.isValid)return this;let r=e.fromDurationLike(t),n={};for(let i of io)(rs(r.values,i)||rs(this.values,i))&&(n[i]=r.get(i)+this.get(i));return va(this,{values:n},!0)}minus(t){if(!this.isValid)return this;let r=e.fromDurationLike(t);return this.plus(r.negate())}mapUnits(t){if(!this.isValid)return this;let r={};for(let n of Object.keys(this.values))r[n]=aS(t(this.values[n],n));return va(this,{values:r},!0)}get(t){return this[e.normalizeUnit(t)]}set(t){if(!this.isValid)return this;let r={...this.values,...Sc(t,e.normalizeUnit)};return va(this,{values:r})}reconfigure({locale:t,numberingSystem:r,conversionAccuracy:n,matrix:i}={}){let o={loc:this.loc.clone({locale:t,numberingSystem:r}),matrix:i,conversionAccuracy:n};return va(this,o)}as(t){return this.isValid?this.shiftTo(t).get(t):NaN}normalize(){if(!this.isValid)return this;let t=this.toObject();return w0(this.matrix,t),va(this,{values:t},!0)}rescale(){if(!this.isValid)return this;let t=hP(this.normalize().shiftToAll().toObject());return va(this,{values:t},!0)}shiftTo(...t){if(!this.isValid)return this;if(t.length===0)return this;t=t.map(o=>e.normalizeUnit(o));let r={},n={},i=this.toObject(),a;for(let o of io)if(t.indexOf(o)>=0){a=o;let s=0;for(let l in n)s+=this.matrix[l][o]*n[l],n[l]=0;ao(i[o])&&(s+=i[o]);let u=Math.trunc(s);r[o]=u,n[o]=(s*1e3-u*1e3)/1e3}else ao(i[o])&&(n[o]=i[o]);for(let o in n)n[o]!==0&&(r[a]+=o===a?n[o]:n[o]/this.matrix[a][o]);return w0(this.matrix,r),va(this,{values:r},!0)}shiftToAll(){return this.isValid?this.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds"):this}negate(){if(!this.isValid)return this;let t={};for(let r of Object.keys(this.values))t[r]=this.values[r]===0?0:-this.values[r];return va(this,{values:t},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(t){if(!this.isValid||!t.isValid||!this.loc.equals(t.loc))return!1;function r(n,i){return n===void 0||n===0?i===void 0||i===0:n===i}for(let n of io)if(!r(this.values[n],t.values[n]))return!1;return!0}},Xo="Invalid Interval";function mP(e,t){return!e||!e.isValid?ns.invalid("missing or invalid start"):!t||!t.isValid?ns.invalid("missing or invalid end"):t<e?ns.invalid("end before start",`The end of an interval must be after its start, but you had start=${e.toISO()} and end=${t.toISO()}`):null}var ns=class e{constructor(t){this.s=t.start,this.e=t.end,this.invalid=t.invalid||null,this.isLuxonInterval=!0}static invalid(t,r=null){if(!t)throw new vr("need to specify a reason the Interval is invalid");let n=t instanceof Ar?t:new Ar(t,r);if(hn.throwOnInvalid)throw new hm(n);return new e({invalid:n})}static fromDateTimes(t,r){let n=El(t),i=El(r),a=mP(n,i);return a==null?new e({start:n,end:i}):a}static after(t,r){let n=He.fromDurationLike(r),i=El(t);return e.fromDateTimes(i,i.plus(n))}static before(t,r){let n=He.fromDurationLike(r),i=El(t);return e.fromDateTimes(i.minus(n),i)}static fromISO(t,r){let[n,i]=(t||"").split("/",2);if(n&&i){let a,o;try{a=mt.fromISO(n,r),o=a.isValid}catch(l){o=!1}let s,u;try{s=mt.fromISO(i,r),u=s.isValid}catch(l){u=!1}if(o&&u)return e.fromDateTimes(a,s);if(o){let l=He.fromISO(i,r);if(l.isValid)return e.after(a,l)}else if(u){let l=He.fromISO(n,r);if(l.isValid)return e.before(s,l)}}return e.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static isInterval(t){return t&&t.isLuxonInterval||!1}get start(){return this.isValid?this.s:null}get end(){return this.isValid?this.e:null}get isValid(){return this.invalidReason===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}length(t="milliseconds"){return this.isValid?this.toDuration(t).get(t):NaN}count(t="milliseconds"){if(!this.isValid)return NaN;let r=this.start.startOf(t),n=this.end.startOf(t);return Math.floor(n.diff(r,t).get(t))+(n.valueOf()!==this.end.valueOf())}hasSame(t){return this.isValid?this.isEmpty()||this.e.minus(1).hasSame(this.s,t):!1}isEmpty(){return this.s.valueOf()===this.e.valueOf()}isAfter(t){return this.isValid?this.s>t:!1}isBefore(t){return this.isValid?this.e<=t:!1}contains(t){return this.isValid?this.s<=t&&this.e>t:!1}set({start:t,end:r}={}){return this.isValid?e.fromDateTimes(t||this.s,r||this.e):this}splitAt(...t){if(!this.isValid)return[];let r=t.map(El).filter(o=>this.contains(o)).sort(),n=[],{s:i}=this,a=0;for(;i<this.e;){let o=r[a]||this.e,s=+o>+this.e?this.e:o;n.push(e.fromDateTimes(i,s)),i=s,a+=1}return n}splitBy(t){let r=He.fromDurationLike(t);if(!this.isValid||!r.isValid||r.as("milliseconds")===0)return[];let{s:n}=this,i=1,a,o=[];for(;n<this.e;){let s=this.start.plus(r.mapUnits(u=>u*i));a=+s>+this.e?this.e:s,o.push(e.fromDateTimes(n,a)),n=a,i+=1}return o}divideEqually(t){return this.isValid?this.splitBy(this.length()/t).slice(0,t):[]}overlaps(t){return this.e>t.s&&this.s<t.e}abutsStart(t){return this.isValid?+this.e==+t.s:!1}abutsEnd(t){return this.isValid?+t.e==+this.s:!1}engulfs(t){return this.isValid?this.s<=t.s&&this.e>=t.e:!1}equals(t){return!this.isValid||!t.isValid?!1:this.s.equals(t.s)&&this.e.equals(t.e)}intersection(t){if(!this.isValid)return this;let r=this.s>t.s?this.s:t.s,n=this.e<t.e?this.e:t.e;return r>=n?null:e.fromDateTimes(r,n)}union(t){if(!this.isValid)return this;let r=this.s<t.s?this.s:t.s,n=this.e>t.e?this.e:t.e;return e.fromDateTimes(r,n)}static merge(t){let[r,n]=t.sort((i,a)=>i.s-a.s).reduce(([i,a],o)=>a?a.overlaps(o)||a.abutsStart(o)?[i,a.union(o)]:[i.concat([a]),o]:[i,o],[[],null]);return n&&r.push(n),r}static xor(t){let r=null,n=0,i=[],a=t.map(u=>[{time:u.s,type:"s"},{time:u.e,type:"e"}]),o=Array.prototype.concat(...a),s=o.sort((u,l)=>u.time-l.time);for(let u of s)n+=u.type==="s"?1:-1,n===1?r=u.time:(r&&+r!=+u.time&&i.push(e.fromDateTimes(r,u.time)),r=null);return e.merge(i)}difference(...t){return e.xor([this].concat(t)).map(r=>this.intersection(r)).filter(r=>r&&!r.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()} \u2013 ${this.e.toISO()})`:Xo}toLocaleString(t=vc,r={}){return this.isValid?Ir.create(this.s.loc.clone(r),t).formatInterval(this):Xo}toISO(t){return this.isValid?`${this.s.toISO(t)}/${this.e.toISO(t)}`:Xo}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:Xo}toISOTime(t){return this.isValid?`${this.s.toISOTime(t)}/${this.e.toISOTime(t)}`:Xo}toFormat(t,{separator:r=" \u2013 "}={}){return this.isValid?`${this.s.toFormat(t)}${r}${this.e.toFormat(t)}`:Xo}toDuration(t,r){return this.isValid?this.e.diff(this.s,t,r):He.invalid(this.invalidReason)}mapEndpoints(t){return e.fromDateTimes(t(this.s),t(this.e))}},es=class{static hasDST(t=hn.defaultZone){let r=mt.now().setZone(t).set({month:12});return!t.isUniversal&&r.offset!==r.set({month:6}).offset}static isValidIANAZone(t){return Da.isValidZone(t)}static normalizeZone(t){return ba(t,hn.defaultZone)}static months(t="long",{locale:r=null,numberingSystem:n=null,locObj:i=null,outputCalendar:a="gregory"}={}){return(i||mn.create(r,n,a)).months(t)}static monthsFormat(t="long",{locale:r=null,numberingSystem:n=null,locObj:i=null,outputCalendar:a="gregory"}={}){return(i||mn.create(r,n,a)).months(t,!0)}static weekdays(t="long",{locale:r=null,numberingSystem:n=null,locObj:i=null}={}){return(i||mn.create(r,n,null)).weekdays(t)}static weekdaysFormat(t="long",{locale:r=null,numberingSystem:n=null,locObj:i=null}={}){return(i||mn.create(r,n,null)).weekdays(t,!0)}static meridiems({locale:t=null}={}){return mn.create(t).meridiems()}static eras(t="short",{locale:r=null}={}){return mn.create(r,null,"gregory").eras(t)}static features(){return{relative:rS()}}};function b0(e,t){let r=i=>i.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),n=r(t)-r(e);return Math.floor(He.fromMillis(n).as("days"))}function pP(e,t,r){let n=[["years",(u,l)=>l.year-u.year],["quarters",(u,l)=>l.quarter-u.quarter+(l.year-u.year)*4],["months",(u,l)=>l.month-u.month+(l.year-u.year)*12],["weeks",(u,l)=>{let c=b0(u,l);return(c-c%7)/7}],["days",b0]],i={},a=e,o,s;for(let[u,l]of n)r.indexOf(u)>=0&&(o=u,i[u]=l(e,t),s=a.plus(i),s>t?(i[u]--,e=a.plus(i),e>t&&(s=e,i[u]--,e=a.plus(i))):e=s);return[e,i,s,o]}function gP(e,t,r,n){let[i,a,o,s]=pP(e,t,r),u=t-i,l=r.filter(d=>["hours","minutes","seconds","milliseconds"].indexOf(d)>=0);l.length===0&&(o<t&&(o=i.plus({[s]:1})),o!==i&&(a[s]=(a[s]||0)+u/(o-i)));let c=He.fromObject(a,n);return l.length>0?He.fromMillis(u,n).shiftTo(...l).plus(c):c}var Rm={arab:"[\u0660-\u0669]",arabext:"[\u06F0-\u06F9]",bali:"[\u1B50-\u1B59]",beng:"[\u09E6-\u09EF]",deva:"[\u0966-\u096F]",fullwide:"[\uFF10-\uFF19]",gujr:"[\u0AE6-\u0AEF]",hanidec:"[\u3007|\u4E00|\u4E8C|\u4E09|\u56DB|\u4E94|\u516D|\u4E03|\u516B|\u4E5D]",khmr:"[\u17E0-\u17E9]",knda:"[\u0CE6-\u0CEF]",laoo:"[\u0ED0-\u0ED9]",limb:"[\u1946-\u194F]",mlym:"[\u0D66-\u0D6F]",mong:"[\u1810-\u1819]",mymr:"[\u1040-\u1049]",orya:"[\u0B66-\u0B6F]",tamldec:"[\u0BE6-\u0BEF]",telu:"[\u0C66-\u0C6F]",thai:"[\u0E50-\u0E59]",tibt:"[\u0F20-\u0F29]",latn:"\\d"},D0={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},yP=Rm.hanidec.replace(/[\[|\]]/g,"").split("");function vP(e){let t=parseInt(e,10);if(isNaN(t)){t="";for(let r=0;r<e.length;r++){let n=e.charCodeAt(r);if(e[r].search(Rm.hanidec)!==-1)t+=yP.indexOf(e[r]);else for(let i in D0){let[a,o]=D0[i];n>=a&&n<=o&&(t+=n-a)}}return parseInt(t,10)}else return t}function ri({numberingSystem:e},t=""){return new RegExp(`${Rm[e||"latn"]}${t}`)}var wP="missing Intl.DateTimeFormat.formatToParts support";function Nt(e,t=r=>r){return{regex:e,deser:([r])=>t(vP(r))}}var bP="\xA0",DS=`[ ${bP}]`,SS=new RegExp(DS,"g");function DP(e){return e.replace(/\./g,"\\.?").replace(SS,DS)}function S0(e){return e.replace(/\./g,"").replace(SS," ").toLowerCase()}function ii(e,t){return e===null?null:{regex:RegExp(e.map(DP).join("|")),deser:([r])=>e.findIndex(n=>S0(r)===S0(n))+t}}function E0(e,t){return{regex:e,deser:([,r,n])=>Tc(r,n),groups:t}}function dc(e){return{regex:e,deser:([t])=>t}}function SP(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function EP(e,t){let r=ri(t),n=ri(t,"{2}"),i=ri(t,"{3}"),a=ri(t,"{4}"),o=ri(t,"{6}"),s=ri(t,"{1,2}"),u=ri(t,"{1,3}"),l=ri(t,"{1,6}"),c=ri(t,"{1,9}"),d=ri(t,"{2,4}"),m=ri(t,"{4,6}"),h=v=>({regex:RegExp(SP(v.val)),deser:([D])=>D,literal:!0}),y=(v=>{if(e.literal)return h(v);switch(v.val){case"G":return ii(t.eras("short"),0);case"GG":return ii(t.eras("long"),0);case"y":return Nt(l);case"yy":return Nt(d,Em);case"yyyy":return Nt(a);case"yyyyy":return Nt(m);case"yyyyyy":return Nt(o);case"M":return Nt(s);case"MM":return Nt(n);case"MMM":return ii(t.months("short",!0),1);case"MMMM":return ii(t.months("long",!0),1);case"L":return Nt(s);case"LL":return Nt(n);case"LLL":return ii(t.months("short",!1),1);case"LLLL":return ii(t.months("long",!1),1);case"d":return Nt(s);case"dd":return Nt(n);case"o":return Nt(u);case"ooo":return Nt(i);case"HH":return Nt(n);case"H":return Nt(s);case"hh":return Nt(n);case"h":return Nt(s);case"mm":return Nt(n);case"m":return Nt(s);case"q":return Nt(s);case"qq":return Nt(n);case"s":return Nt(s);case"ss":return Nt(n);case"S":return Nt(u);case"SSS":return Nt(i);case"u":return dc(c);case"uu":return dc(s);case"uuu":return Nt(r);case"a":return ii(t.meridiems(),0);case"kkkk":return Nt(a);case"kk":return Nt(d,Em);case"W":return Nt(s);case"WW":return Nt(n);case"E":case"c":return Nt(r);case"EEE":return ii(t.weekdays("short",!1),1);case"EEEE":return ii(t.weekdays("long",!1),1);case"ccc":return ii(t.weekdays("short",!0),1);case"cccc":return ii(t.weekdays("long",!0),1);case"Z":case"ZZ":return E0(new RegExp(`([+-]${s.source})(?::(${n.source}))?`),2);case"ZZZ":return E0(new RegExp(`([+-]${s.source})(${n.source})?`),2);case"z":return dc(/[a-z_+-/]{1,256}?/i);case" ":return dc(/[^\S\n\r]/);default:return h(v)}})(e)||{invalidReason:wP};return y.token=e,y}var kP={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour12:{numeric:"h","2-digit":"hh"},hour24:{numeric:"H","2-digit":"HH"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"},timeZoneName:{long:"ZZZZZ",short:"ZZZ"}};function xP(e,t,r){let{type:n,value:i}=e;if(n==="literal"){let u=/^\s+$/.test(i);return{literal:!u,val:u?" ":i}}let a=t[n],o=n;n==="hour"&&(t.hour12!=null?o=t.hour12?"hour12":"hour24":t.hourCycle!=null?t.hourCycle==="h11"||t.hourCycle==="h12"?o="hour12":o="hour24":o=r.hour12?"hour12":"hour24");let s=kP[o];if(typeof s=="object"&&(s=s[a]),s)return{literal:!1,val:s}}function CP(e){return[`^${e.map(r=>r.regex).reduce((r,n)=>`${r}(${n.source})`,"")}$`,e]}function _P(e,t,r){let n=e.match(t);if(n){let i={},a=1;for(let o in r)if(rs(r,o)){let s=r[o],u=s.groups?s.groups+1:1;!s.literal&&s.token&&(i[s.token.val[0]]=s.deser(n.slice(a,a+u))),a+=u}return[n,i]}else return[n,{}]}function MP(e){let t=a=>{switch(a){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}},r=null,n;return kt(e.z)||(r=Da.create(e.z)),kt(e.Z)||(r||(r=new Kr(e.Z)),n=e.Z),kt(e.q)||(e.M=(e.q-1)*3+1),kt(e.h)||(e.h<12&&e.a===1?e.h+=12:e.h===12&&e.a===0&&(e.h=0)),e.G===0&&e.y&&(e.y=-e.y),kt(e.u)||(e.S=Am(e.u)),[Object.keys(e).reduce((a,o)=>{let s=t(o);return s&&(a[s]=e[o]),a},{}),r,n]}var om=null;function TP(){return om||(om=mt.fromMillis(1555555555555)),om}function FP(e,t){if(e.literal)return e;let r=Ir.macroTokenToFormatOpts(e.val),n=xS(r,t);return n==null||n.includes(void 0)?e:n}function ES(e,t){return Array.prototype.concat(...e.map(r=>FP(r,t)))}function kS(e,t,r){let n=ES(Ir.parseFormat(r),e),i=n.map(o=>EP(o,e)),a=i.find(o=>o.invalidReason);if(a)return{input:t,tokens:n,invalidReason:a.invalidReason};{let[o,s]=CP(i),u=RegExp(o,"i"),[l,c]=_P(t,u,s),[d,m,h]=c?MP(c):[null,null,void 0];if(rs(c,"a")&&rs(c,"H"))throw new ro("Can't include meridiem when specifying 24-hour format");return{input:t,tokens:n,regex:u,rawMatches:l,matches:c,result:d,zone:m,specificOffset:h}}}function IP(e,t,r){let{result:n,zone:i,specificOffset:a,invalidReason:o}=kS(e,t,r);return[n,i,a,o]}function xS(e,t){if(!e)return null;let n=Ir.create(t,e).dtFormatter(TP()),i=n.formatToParts(),a=n.resolvedOptions();return i.map(o=>xP(o,e,a))}var CS=[0,31,59,90,120,151,181,212,243,273,304,334],_S=[0,31,60,91,121,152,182,213,244,274,305,335];function zr(e,t){return new Ar("unit out of range",`you specified ${t} (of type ${typeof t}) as a ${e}, which is invalid`)}function MS(e,t,r){let n=new Date(Date.UTC(e,t-1,r));e<100&&e>=0&&n.setUTCFullYear(n.getUTCFullYear()-1900);let i=n.getUTCDay();return i===0?7:i}function TS(e,t,r){return r+(Fl(e)?_S:CS)[t-1]}function FS(e,t){let r=Fl(e)?_S:CS,n=r.findIndex(a=>a<t),i=t-r[n];return{month:n+1,day:i}}function km(e){let{year:t,month:r,day:n}=e,i=TS(t,r,n),a=MS(t,r,n),o=Math.floor((i-a+10)/7),s;return o<1?(s=t-1,o=Dc(s)):o>Dc(t)?(s=t+1,o=1):s=t,{weekYear:s,weekNumber:o,weekday:a,...Fc(e)}}function k0(e){let{weekYear:t,weekNumber:r,weekday:n}=e,i=MS(t,1,4),a=Cl(t),o=r*7+n-i-3,s;o<1?(s=t-1,o+=Cl(s)):o>a?(s=t+1,o-=Cl(t)):s=t;let{month:u,day:l}=FS(s,o);return{year:s,month:u,day:l,...Fc(e)}}function sm(e){let{year:t,month:r,day:n}=e,i=TS(t,r,n);return{year:t,ordinal:i,...Fc(e)}}function x0(e){let{year:t,ordinal:r}=e,{month:n,day:i}=FS(t,r);return{year:t,month:n,day:i,...Fc(e)}}function AP(e){let t=_c(e.weekYear),r=ji(e.weekNumber,1,Dc(e.weekYear)),n=ji(e.weekday,1,7);return t?r?n?!1:zr("weekday",e.weekday):zr("week",e.week):zr("weekYear",e.weekYear)}function OP(e){let t=_c(e.year),r=ji(e.ordinal,1,Cl(e.year));return t?r?!1:zr("ordinal",e.ordinal):zr("year",e.year)}function IS(e){let t=_c(e.year),r=ji(e.month,1,12),n=ji(e.day,1,bc(e.year,e.month));return t?r?n?!1:zr("day",e.day):zr("month",e.month):zr("year",e.year)}function AS(e){let{hour:t,minute:r,second:n,millisecond:i}=e,a=ji(t,0,23)||t===24&&r===0&&n===0&&i===0,o=ji(r,0,59),s=ji(n,0,59),u=ji(i,0,999);return a?o?s?u?!1:zr("millisecond",i):zr("second",n):zr("minute",r):zr("hour",t)}var lm="Invalid DateTime",C0=864e13;function fc(e){return new Ar("unsupported zone",`the zone "${e.name}" is not supported`)}function um(e){return e.weekData===null&&(e.weekData=km(e.c)),e.weekData}function no(e,t){let r={ts:e.ts,zone:e.zone,c:e.c,o:e.o,loc:e.loc,invalid:e.invalid};return new mt({...r,...t,old:r})}function OS(e,t,r){let n=e-t*60*1e3,i=r.offset(n);if(t===i)return[n,t];n-=(i-t)*60*1e3;let a=r.offset(n);return i===a?[n,i]:[e-Math.min(i,a)*60*1e3,Math.max(i,a)]}function hc(e,t){e+=t*60*1e3;let r=new Date(e);return{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate(),hour:r.getUTCHours(),minute:r.getUTCMinutes(),second:r.getUTCSeconds(),millisecond:r.getUTCMilliseconds()}}function gc(e,t,r){return OS(Mc(e),t,r)}function _0(e,t){let r=e.o,n=e.c.year+Math.trunc(t.years),i=e.c.month+Math.trunc(t.months)+Math.trunc(t.quarters)*3,a={...e.c,year:n,month:i,day:Math.min(e.c.day,bc(n,i))+Math.trunc(t.days)+Math.trunc(t.weeks)*7},o=He.fromObject({years:t.years-Math.trunc(t.years),quarters:t.quarters-Math.trunc(t.quarters),months:t.months-Math.trunc(t.months),weeks:t.weeks-Math.trunc(t.weeks),days:t.days-Math.trunc(t.days),hours:t.hours,minutes:t.minutes,seconds:t.seconds,milliseconds:t.milliseconds}).as("milliseconds"),s=Mc(a),[u,l]=OS(s,r,e.zone);return o!==0&&(u+=o,l=e.zone.offset(u)),{ts:u,o:l}}function Sl(e,t,r,n,i,a){let{setZone:o,zone:s}=r;if(e&&Object.keys(e).length!==0||t){let u=t||s,l=mt.fromObject(e,{...r,zone:u,specificOffset:a});return o?l:l.setZone(s)}else return mt.invalid(new Ar("unparsable",`the input "${i}" can't be parsed as ${n}`))}function mc(e,t,r=!0){return e.isValid?Ir.create(mn.create("en-US"),{allowZ:r,forceSimple:!0}).formatDateTimeFromString(e,t):null}function cm(e,t){let r=e.c.year>9999||e.c.year<0,n="";return r&&e.c.year>=0&&(n+="+"),n+=Tn(e.c.year,r?6:4),t?(n+="-",n+=Tn(e.c.month),n+="-",n+=Tn(e.c.day)):(n+=Tn(e.c.month),n+=Tn(e.c.day)),n}function M0(e,t,r,n,i,a){let o=Tn(e.c.hour);return t?(o+=":",o+=Tn(e.c.minute),(e.c.millisecond!==0||e.c.second!==0||!r)&&(o+=":")):o+=Tn(e.c.minute),(e.c.millisecond!==0||e.c.second!==0||!r)&&(o+=Tn(e.c.second),(e.c.millisecond!==0||!n)&&(o+=".",o+=Tn(e.c.millisecond,3))),i&&(e.isOffsetFixed&&e.offset===0&&!a?o+="Z":e.o<0?(o+="-",o+=Tn(Math.trunc(-e.o/60)),o+=":",o+=Tn(Math.trunc(-e.o%60))):(o+="+",o+=Tn(Math.trunc(e.o/60)),o+=":",o+=Tn(Math.trunc(e.o%60)))),a&&(o+="["+e.zone.ianaName+"]"),o}var LS={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},LP={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},PP={ordinal:1,hour:0,minute:0,second:0,millisecond:0},PS=["year","month","day","hour","minute","second","millisecond"],NP=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],RP=["year","ordinal","hour","minute","second","millisecond"];function T0(e){let t={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[e.toLowerCase()];if(!t)throw new yc(e);return t}function F0(e,t){let r=ba(t.zone,hn.defaultZone),n=mn.fromObject(t),i=hn.now(),a,o;if(kt(e.year))a=i;else{for(let l of PS)kt(e[l])&&(e[l]=LS[l]);let s=IS(e)||AS(e);if(s)return mt.invalid(s);let u=r.offset(i);[a,o]=gc(e,u,r)}return new mt({ts:a,zone:r,loc:n,o})}function I0(e,t,r){let n=kt(r.round)?!0:r.round,i=(o,s)=>(o=Om(o,n||r.calendary?0:2,!0),t.loc.clone(r).relFormatter(r).format(o,s)),a=o=>r.calendary?t.hasSame(e,o)?0:t.startOf(o).diff(e.startOf(o),o).get(o):t.diff(e,o).get(o);if(r.unit)return i(a(r.unit),r.unit);for(let o of r.units){let s=a(o);if(Math.abs(s)>=1)return i(s,o)}return i(e>t?-0:0,r.units[r.units.length-1])}function A0(e){let t={},r;return e.length>0&&typeof e[e.length-1]=="object"?(t=e[e.length-1],r=Array.from(e).slice(0,e.length-1)):r=Array.from(e),[t,r]}var mt=class e{constructor(t){let r=t.zone||hn.defaultZone,n=t.invalid||(Number.isNaN(t.ts)?new Ar("invalid input"):null)||(r.isValid?null:fc(r));this.ts=kt(t.ts)?hn.now():t.ts;let i=null,a=null;if(!n)if(t.old&&t.old.ts===this.ts&&t.old.zone.equals(r))[i,a]=[t.old.c,t.old.o];else{let s=r.offset(this.ts);i=hc(this.ts,s),n=Number.isNaN(i.year)?new Ar("invalid input"):null,i=n?null:i,a=n?null:s}this._zone=r,this.loc=t.loc||mn.create(),this.invalid=n,this.weekData=null,this.c=i,this.o=a,this.isLuxonDateTime=!0}static now(){return new e({})}static local(){let[t,r]=A0(arguments),[n,i,a,o,s,u,l]=r;return F0({year:n,month:i,day:a,hour:o,minute:s,second:u,millisecond:l},t)}static utc(){let[t,r]=A0(arguments),[n,i,a,o,s,u,l]=r;return t.zone=Kr.utcInstance,F0({year:n,month:i,day:a,hour:o,minute:s,second:u,millisecond:l},t)}static fromJSDate(t,r={}){let n=d2(t)?t.valueOf():NaN;if(Number.isNaN(n))return e.invalid("invalid input");let i=ba(r.zone,hn.defaultZone);return i.isValid?new e({ts:n,zone:i,loc:mn.fromObject(r)}):e.invalid(fc(i))}static fromMillis(t,r={}){if(ao(t))return t<-C0||t>C0?e.invalid("Timestamp out of range"):new e({ts:t,zone:ba(r.zone,hn.defaultZone),loc:mn.fromObject(r)});throw new vr(`fromMillis requires a numerical input, but received a ${typeof t} with value ${t}`)}static fromSeconds(t,r={}){if(ao(t))return new e({ts:t*1e3,zone:ba(r.zone,hn.defaultZone),loc:mn.fromObject(r)});throw new vr("fromSeconds requires a numerical input")}static fromObject(t,r={}){t=t||{};let n=ba(r.zone,hn.defaultZone);if(!n.isValid)return e.invalid(fc(n));let i=hn.now(),a=kt(r.specificOffset)?n.offset(i):r.specificOffset,o=Sc(t,T0),s=!kt(o.ordinal),u=!kt(o.year),l=!kt(o.month)||!kt(o.day),c=u||l,d=o.weekYear||o.weekNumber,m=mn.fromObject(r);if((c||s)&&d)throw new ro("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(l&&s)throw new ro("Can't mix ordinal dates with month/day");let h=d||o.weekday&&!c,g,y,v=hc(i,a);h?(g=NP,y=LP,v=km(v)):s?(g=RP,y=PP,v=sm(v)):(g=PS,y=LS);let D=!1;for(let B of g){let G=o[B];kt(G)?D?o[B]=y[B]:o[B]=v[B]:D=!0}let I=h?AP(o):s?OP(o):IS(o),C=I||AS(o);if(C)return e.invalid(C);let x=h?k0(o):s?x0(o):o,[O,A]=gc(x,a,n),P=new e({ts:O,zone:n,o:A,loc:m});return o.weekday&&c&&t.weekday!==P.weekday?e.invalid("mismatched weekday",`you can't specify both a weekday of ${o.weekday} and a date of ${P.toISO()}`):P}static fromISO(t,r={}){let[n,i]=eP(t);return Sl(n,i,r,"ISO 8601",t)}static fromRFC2822(t,r={}){let[n,i]=tP(t);return Sl(n,i,r,"RFC 2822",t)}static fromHTTP(t,r={}){let[n,i]=nP(t);return Sl(n,i,r,"HTTP",r)}static fromFormat(t,r,n={}){if(kt(t)||kt(r))throw new vr("fromFormat requires an input string and a format");let{locale:i=null,numberingSystem:a=null}=n,o=mn.fromOpts({locale:i,numberingSystem:a,defaultToEN:!0}),[s,u,l,c]=IP(o,t,r);return c?e.invalid(c):Sl(s,u,n,`format ${r}`,t,l)}static fromString(t,r,n={}){return e.fromFormat(t,r,n)}static fromSQL(t,r={}){let[n,i]=uP(t);return Sl(n,i,r,"SQL",t)}static invalid(t,r=null){if(!t)throw new vr("need to specify a reason the DateTime is invalid");let n=t instanceof Ar?t:new Ar(t,r);if(hn.throwOnInvalid)throw new fm(n);return new e({invalid:n})}static isDateTime(t){return t&&t.isLuxonDateTime||!1}static parseFormatForOpts(t,r={}){let n=xS(t,mn.fromObject(r));return n?n.map(i=>i?i.val:null).join(""):null}static expandFormat(t,r={}){return ES(Ir.parseFormat(t),mn.fromObject(r)).map(i=>i.val).join("")}get(t){return this[t]}get isValid(){return this.invalid===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?um(this).weekYear:NaN}get weekNumber(){return this.isValid?um(this).weekNumber:NaN}get weekday(){return this.isValid?um(this).weekday:NaN}get ordinal(){return this.isValid?sm(this.c).ordinal:NaN}get monthShort(){return this.isValid?es.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?es.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?es.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?es.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return this.isOffsetFixed?!1:this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];let t=864e5,r=6e4,n=Mc(this.c),i=this.zone.offset(n-t),a=this.zone.offset(n+t),o=this.zone.offset(n-i*r),s=this.zone.offset(n-a*r);if(o===s)return[this];let u=n-o*r,l=n-s*r,c=hc(u,o),d=hc(l,s);return c.hour===d.hour&&c.minute===d.minute&&c.second===d.second&&c.millisecond===d.millisecond?[no(this,{ts:u}),no(this,{ts:l})]:[this]}get isInLeapYear(){return Fl(this.year)}get daysInMonth(){return bc(this.year,this.month)}get daysInYear(){return this.isValid?Cl(this.year):NaN}get weeksInWeekYear(){return this.isValid?Dc(this.weekYear):NaN}resolvedLocaleOptions(t={}){let{locale:r,numberingSystem:n,calendar:i}=Ir.create(this.loc.clone(t),t).resolvedOptions(this);return{locale:r,numberingSystem:n,outputCalendar:i}}toUTC(t=0,r={}){return this.setZone(Kr.instance(t),r)}toLocal(){return this.setZone(hn.defaultZone)}setZone(t,{keepLocalTime:r=!1,keepCalendarTime:n=!1}={}){if(t=ba(t,hn.defaultZone),t.equals(this.zone))return this;if(t.isValid){let i=this.ts;if(r||n){let a=t.offset(this.ts),o=this.toObject();[i]=gc(o,a,t)}return no(this,{ts:i,zone:t})}else return e.invalid(fc(t))}reconfigure({locale:t,numberingSystem:r,outputCalendar:n}={}){let i=this.loc.clone({locale:t,numberingSystem:r,outputCalendar:n});return no(this,{loc:i})}setLocale(t){return this.reconfigure({locale:t})}set(t){if(!this.isValid)return this;let r=Sc(t,T0),n=!kt(r.weekYear)||!kt(r.weekNumber)||!kt(r.weekday),i=!kt(r.ordinal),a=!kt(r.year),o=!kt(r.month)||!kt(r.day),s=a||o,u=r.weekYear||r.weekNumber;if((s||i)&&u)throw new ro("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(o&&i)throw new ro("Can't mix ordinal dates with month/day");let l;n?l=k0({...km(this.c),...r}):kt(r.ordinal)?(l={...this.toObject(),...r},kt(r.day)&&(l.day=Math.min(bc(l.year,l.month),l.day))):l=x0({...sm(this.c),...r});let[c,d]=gc(l,this.o,this.zone);return no(this,{ts:c,o:d})}plus(t){if(!this.isValid)return this;let r=He.fromDurationLike(t);return no(this,_0(this,r))}minus(t){if(!this.isValid)return this;let r=He.fromDurationLike(t).negate();return no(this,_0(this,r))}startOf(t){if(!this.isValid)return this;let r={},n=He.normalizeUnit(t);switch(n){case"years":r.month=1;case"quarters":case"months":r.day=1;case"weeks":case"days":r.hour=0;case"hours":r.minute=0;case"minutes":r.second=0;case"seconds":r.millisecond=0;break}if(n==="weeks"&&(r.weekday=1),n==="quarters"){let i=Math.ceil(this.month/3);r.month=(i-1)*3+1}return this.set(r)}endOf(t){return this.isValid?this.plus({[t]:1}).startOf(t).minus(1):this}toFormat(t,r={}){return this.isValid?Ir.create(this.loc.redefaultToEN(r)).formatDateTimeFromString(this,t):lm}toLocaleString(t=vc,r={}){return this.isValid?Ir.create(this.loc.clone(r),t).formatDateTime(this):lm}toLocaleParts(t={}){return this.isValid?Ir.create(this.loc.clone(t),t).formatDateTimeParts(this):[]}toISO({format:t="extended",suppressSeconds:r=!1,suppressMilliseconds:n=!1,includeOffset:i=!0,extendedZone:a=!1}={}){if(!this.isValid)return null;let o=t==="extended",s=cm(this,o);return s+="T",s+=M0(this,o,r,n,i,a),s}toISODate({format:t="extended"}={}){return this.isValid?cm(this,t==="extended"):null}toISOWeekDate(){return mc(this,"kkkk-'W'WW-c")}toISOTime({suppressMilliseconds:t=!1,suppressSeconds:r=!1,includeOffset:n=!0,includePrefix:i=!1,extendedZone:a=!1,format:o="extended"}={}){return this.isValid?(i?"T":"")+M0(this,o==="extended",r,t,n,a):null}toRFC2822(){return mc(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)}toHTTP(){return mc(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss 'GMT'")}toSQLDate(){return this.isValid?cm(this,!0):null}toSQLTime({includeOffset:t=!0,includeZone:r=!1,includeOffsetSpace:n=!0}={}){let i="HH:mm:ss.SSS";return(r||t)&&(n&&(i+=" "),r?i+="z":t&&(i+="ZZ")),mc(this,i,!0)}toSQL(t={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(t)}`:null}toString(){return this.isValid?this.toISO():lm}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(t={}){if(!this.isValid)return{};let r={...this.c};return t.includeConfig&&(r.outputCalendar=this.outputCalendar,r.numberingSystem=this.loc.numberingSystem,r.locale=this.loc.locale),r}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(t,r="milliseconds",n={}){if(!this.isValid||!t.isValid)return He.invalid("created by diffing an invalid DateTime");let i={locale:this.locale,numberingSystem:this.numberingSystem,...n},a=f2(r).map(He.normalizeUnit),o=t.valueOf()>this.valueOf(),s=o?this:t,u=o?t:this,l=gP(s,u,a,i);return o?l.negate():l}diffNow(t="milliseconds",r={}){return this.diff(e.now(),t,r)}until(t){return this.isValid?ns.fromDateTimes(this,t):this}hasSame(t,r){if(!this.isValid)return!1;let n=t.valueOf(),i=this.setZone(t.zone,{keepLocalTime:!0});return i.startOf(r)<=n&&n<=i.endOf(r)}equals(t){return this.isValid&&t.isValid&&this.valueOf()===t.valueOf()&&this.zone.equals(t.zone)&&this.loc.equals(t.loc)}toRelative(t={}){if(!this.isValid)return null;let r=t.base||e.fromObject({},{zone:this.zone}),n=t.padding?this<r?-t.padding:t.padding:0,i=["years","months","days","hours","minutes","seconds"],a=t.unit;return Array.isArray(t.unit)&&(i=t.unit,a=void 0),I0(r,this.plus(n),{...t,numeric:"always",units:i,unit:a})}toRelativeCalendar(t={}){return this.isValid?I0(t.base||e.fromObject({},{zone:this.zone}),this,{...t,numeric:"auto",units:["years","months","days"],calendary:!0}):null}static min(...t){if(!t.every(e.isDateTime))throw new vr("min requires all arguments be DateTimes");return p0(t,r=>r.valueOf(),Math.min)}static max(...t){if(!t.every(e.isDateTime))throw new vr("max requires all arguments be DateTimes");return p0(t,r=>r.valueOf(),Math.max)}static fromFormatExplain(t,r,n={}){let{locale:i=null,numberingSystem:a=null}=n,o=mn.fromOpts({locale:i,numberingSystem:a,defaultToEN:!0});return kS(o,t,r)}static fromStringExplain(t,r,n={}){return e.fromFormatExplain(t,r,n)}static get DATE_SHORT(){return vc}static get DATE_MED(){return H0}static get DATE_MED_WITH_WEEKDAY(){return GL}static get DATE_FULL(){return B0}static get DATE_HUGE(){return V0}static get TIME_SIMPLE(){return $0}static get TIME_WITH_SECONDS(){return U0}static get TIME_WITH_SHORT_OFFSET(){return W0}static get TIME_WITH_LONG_OFFSET(){return Y0}static get TIME_24_SIMPLE(){return z0}static get TIME_24_WITH_SECONDS(){return K0}static get TIME_24_WITH_SHORT_OFFSET(){return j0}static get TIME_24_WITH_LONG_OFFSET(){return q0}static get DATETIME_SHORT(){return G0}static get DATETIME_SHORT_WITH_SECONDS(){return J0}static get DATETIME_MED(){return Z0}static get DATETIME_MED_WITH_SECONDS(){return Q0}static get DATETIME_MED_WITH_WEEKDAY(){return JL}static get DATETIME_FULL(){return X0}static get DATETIME_FULL_WITH_SECONDS(){return eS}static get DATETIME_HUGE(){return tS}static get DATETIME_HUGE_WITH_SECONDS(){return nS}};function El(e){if(mt.isDateTime(e))return e;if(e&&e.valueOf&&ao(e.valueOf()))return mt.fromJSDate(e);if(e&&typeof e=="object")return mt.fromObject(e);throw new vr(`Unknown datetime argument: ${e}, of type ${typeof e}`)}var Hm={renderNullAs:"\\-",taskCompletionTracking:!1,taskCompletionUseEmojiShorthand:!1,taskCompletionText:"completion",taskCompletionDateFormat:"yyyy-MM-dd",recursiveSubTaskCompletion:!1,warnOnEmptyResult:!0,refreshEnabled:!0,refreshInterval:2500,defaultDateFormat:"MMMM dd, yyyy",defaultDateTimeFormat:"h:mm a - MMMM dd, yyyy",maxRecursiveRenderDepth:4,tableIdColumnName:"File",tableGroupColumnName:"Group",showResultCount:!0},HP={allowHtml:!0};({...Hm,...HP});var xm=class e{constructor(t){ur(this,"value");ur(this,"successful");this.value=t,this.successful=!0}map(t){return new e(t(this.value))}flatMap(t){return t(this.value)}mapErr(t){return this}bimap(t,r){return this.map(t)}orElse(t){return this.value}cast(){return this}orElseThrow(t){return this.value}},Cm=class e{constructor(t){ur(this,"error");ur(this,"successful");this.error=t,this.successful=!1}map(t){return this}flatMap(t){return this}mapErr(t){return new e(t(this.error))}bimap(t,r){return this.mapErr(r)}orElse(t){return t}cast(){return this}orElseThrow(t){throw t?new Error(t(this.error)):new Error(""+this.error)}},Ec;(function(e){function t(a){return new xm(a)}e.success=t;function r(a){return new Cm(a)}e.failure=r;function n(a,o,s){return a.successful?o.successful?s(a.value,o.value):r(o.error):r(a.error)}e.flatMap2=n;function i(a,o,s){return n(a,o,(u,l)=>t(s(u,l)))}e.map2=i})(Ec||(Ec={}));var BP=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"||typeof window!="undefined"?window:typeof self!="undefined"?self:{},kc={exports:{}};kc.exports;(function(e,t){(function(r,n){e.exports=n()})(typeof self!="undefined"?self:BP,function(){return function(r){var n={};function i(a){if(n[a])return n[a].exports;var o=n[a]={i:a,l:!1,exports:{}};return r[a].call(o.exports,o,o.exports,i),o.l=!0,o.exports}return i.m=r,i.c=n,i.d=function(a,o,s){i.o(a,o)||Object.defineProperty(a,o,{configurable:!1,enumerable:!0,get:s})},i.r=function(a){Object.defineProperty(a,"__esModule",{value:!0})},i.n=function(a){var o=a&&a.__esModule?function(){return a.default}:function(){return a};return i.d(o,"a",o),o},i.o=function(a,o){return Object.prototype.hasOwnProperty.call(a,o)},i.p="",i(i.s=0)}([function(r,n,i){function a(L){if(!(this instanceof a))return new a(L);this._=L}var o=a.prototype;function s(L,K){for(var ee=0;ee<L;ee++)K(ee)}function u(L,K,ee){return function(ue,de){s(de.length,function(ve){ue(de[ve],ve,de)})}(function(ue,de,ve){K=L(K,ue,de,ve)},ee),K}function l(L,K){return u(function(ee,ue,de,ve){return ee.concat([L(ue,de,ve)])},[],K)}function c(L,K){var ee={v:0,buf:K};return s(L,function(){var ue;ee={v:ee.v<<1|(ue=ee.buf,ue[0]>>7),buf:function(de){var ve=u(function(ge,M,H,q){return ge.concat(H===q.length-1?Buffer.from([M,0]).readUInt16BE(0):q.readUInt16BE(H))},[],de);return Buffer.from(l(function(ge){return(ge<<1&65535)>>8},ve))}(ee.buf)}}),ee}function d(){return typeof Buffer!="undefined"}function m(){if(!d())throw new Error("Buffer global does not exist; please use webpack if you need to parse Buffers in the browser.")}function h(L){m();var K=u(function(ve,ge){return ve+ge},0,L);if(K%8!=0)throw new Error("The bits ["+L.join(", ")+"] add up to "+K+" which is not an even number of bytes; the total should be divisible by 8");var ee,ue=K/8,de=(ee=function(ve){return ve>48},u(function(ve,ge){return ve||(ee(ge)?ge:ve)},null,L));if(de)throw new Error(de+" bit range requested exceeds 48 bit (6 byte) Number max.");return new a(function(ve,ge){var M=ue+ge;return M>ve.length?B(ge,ue.toString()+" bytes"):P(M,u(function(H,q){var ie=c(q,H.buf);return{coll:H.coll.concat(ie.v),buf:ie.buf}},{coll:[],buf:ve.slice(ge,M)},L).coll)})}function g(L,K){return new a(function(ee,ue){return m(),ue+K>ee.length?B(ue,K+" bytes for "+L):P(ue+K,ee.slice(ue,ue+K))})}function y(L,K){if(typeof(ee=K)!="number"||Math.floor(ee)!==ee||K<0||K>6)throw new Error(L+" requires integer length in range [0, 6].");var ee}function v(L){return y("uintBE",L),g("uintBE("+L+")",L).map(function(K){return K.readUIntBE(0,L)})}function D(L){return y("uintLE",L),g("uintLE("+L+")",L).map(function(K){return K.readUIntLE(0,L)})}function I(L){return y("intBE",L),g("intBE("+L+")",L).map(function(K){return K.readIntBE(0,L)})}function C(L){return y("intLE",L),g("intLE("+L+")",L).map(function(K){return K.readIntLE(0,L)})}function x(L){return L instanceof a}function O(L){return{}.toString.call(L)==="[object Array]"}function A(L){return d()&&Buffer.isBuffer(L)}function P(L,K){return{status:!0,index:L,value:K,furthest:-1,expected:[]}}function B(L,K){return O(K)||(K=[K]),{status:!1,index:-1,value:null,furthest:L,expected:K}}function G(L,K){if(!K||L.furthest>K.furthest)return L;var ee=L.furthest===K.furthest?function(ue,de){if(function(){if(a._supportsSet!==void 0)return a._supportsSet;var ae=typeof Set!="undefined";return a._supportsSet=ae,ae}()&&Array.from){for(var ve=new Set(ue),ge=0;ge<de.length;ge++)ve.add(de[ge]);var M=Array.from(ve);return M.sort(),M}for(var H={},q=0;q<ue.length;q++)H[ue[q]]=!0;for(var ie=0;ie<de.length;ie++)H[de[ie]]=!0;var ye=[];for(var ce in H)({}).hasOwnProperty.call(H,ce)&&ye.push(ce);return ye.sort(),ye}(L.expected,K.expected):K.expected;return{status:L.status,index:L.index,value:L.value,furthest:K.furthest,expected:ee}}var J={};function Q(L,K){if(A(L))return{offset:K,line:-1,column:-1};L in J||(J[L]={});for(var ee=J[L],ue=0,de=0,ve=0,ge=K;ge>=0;){if(ge in ee){ue=ee[ge].line,ve===0&&(ve=ee[ge].lineStart);break}(L.charAt(ge)===` +`||L.charAt(ge)==="\r"&&L.charAt(ge+1)!==` +`)&&(de++,ve===0&&(ve=ge+1)),ge--}var M=ue+de,H=K-ve;return ee[K]={line:M,lineStart:ve},{offset:K,line:M+1,column:H+1}}function oe(L){if(!x(L))throw new Error("not a parser: "+L)}function te(L,K){return typeof L=="string"?L.charAt(K):L[K]}function re(L){if(typeof L!="number")throw new Error("not a number: "+L)}function ne(L){if(typeof L!="function")throw new Error("not a function: "+L)}function be(L){if(typeof L!="string")throw new Error("not a string: "+L)}var pe=2,De=3,Ce=8,U=5*Ce,Je=4*Ce,it=" ";function N(L,K){return new Array(K+1).join(L)}function Ze(L,K,ee){var ue=K-L.length;return ue<=0?L:N(ee,ue)+L}function It(L,K,ee,ue){return{from:L-K>0?L-K:0,to:L+ee>ue?ue:L+ee}}function Mt(L,K){var ee,ue,de,ve,ge,M=K.index,H=M.offset,q=1;if(H===L.length)return"Got the end of the input";if(A(L)){var ie=H-H%Ce,ye=H-ie,ce=It(ie,U,Je+Ce,L.length),ae=l(function(Te){return l(function(Ue){return Ze(Ue.toString(16),2,"0")},Te)},function(Te,Ue){var We=Te.length,Ft=[],Hn=0;if(We<=Ue)return[Te.slice()];for(var Ot=0;Ot<We;Ot++)Ft[Hn]||Ft.push([]),Ft[Hn].push(Te[Ot]),(Ot+1)%Ue==0&&Hn++;return Ft}(L.slice(ce.from,ce.to).toJSON().data,Ce));ve=function(Te){return Te.from===0&&Te.to===1?{from:Te.from,to:Te.to}:{from:Te.from/Ce,to:Math.floor(Te.to/Ce)}}(ce),ue=ie/Ce,ee=3*ye,ye>=4&&(ee+=1),q=2,de=l(function(Te){return Te.length<=4?Te.join(" "):Te.slice(0,4).join(" ")+" "+Te.slice(4).join(" ")},ae),(ge=(8*(ve.to>0?ve.to-1:ve.to)).toString(16).length)<2&&(ge=2)}else{var Se=L.split(/\r\n|[\n\r\u2028\u2029]/);ee=M.column-1,ue=M.line-1,ve=It(ue,pe,De,Se.length),de=Se.slice(ve.from,ve.to),ge=ve.to.toString().length}var nt=ue-ve.from;return A(L)&&(ge=(8*(ve.to>0?ve.to-1:ve.to)).toString(16).length)<2&&(ge=2),u(function(Te,Ue,We){var Ft,Hn=We===nt,Ot=Hn?"> ":it;return Ft=A(L)?Ze((8*(ve.from+We)).toString(16),ge,"0"):Ze((ve.from+We+1).toString(),ge," "),[].concat(Te,[Ot+Ft+" | "+Ue],Hn?[it+N(" ",ge)+" | "+Ze("",ee," ")+N("^",q)]:[])},[],de).join(` +`)}function jt(L,K){return[` +`,"-- PARSING FAILED "+N("-",50),` + +`,Mt(L,K),` + +`,(ee=K.expected,ee.length===1?`Expected: + +`+ee[0]:`Expected one of the following: + +`+ee.join(", ")),` +`].join("");var ee}function vt(L){return L.flags!==void 0?L.flags:[L.global?"g":"",L.ignoreCase?"i":"",L.multiline?"m":"",L.unicode?"u":"",L.sticky?"y":""].join("")}function Wt(){for(var L=[].slice.call(arguments),K=L.length,ee=0;ee<K;ee+=1)oe(L[ee]);return a(function(ue,de){for(var ve,ge=new Array(K),M=0;M<K;M+=1){if(!(ve=G(L[M]._(ue,de),ve)).status)return ve;ge[M]=ve.value,de=ve.index}return G(P(de,ge),ve)})}function Tt(){var L=[].slice.call(arguments);if(L.length===0)throw new Error("seqMap needs at least one argument");var K=L.pop();return ne(K),Wt.apply(null,L).map(function(ee){return K.apply(null,ee)})}function Jt(){var L=[].slice.call(arguments),K=L.length;if(K===0)return jn("zero alternates");for(var ee=0;ee<K;ee+=1)oe(L[ee]);return a(function(ue,de){for(var ve,ge=0;ge<L.length;ge+=1)if((ve=G(L[ge]._(ue,de),ve)).status)return ve;return ve})}function en(L,K){return gn(L,K).or(xn([]))}function gn(L,K){return oe(L),oe(K),Tt(L,K.then(L).many(),function(ee,ue){return[ee].concat(ue)})}function yn(L){be(L);var K="'"+L+"'";return a(function(ee,ue){var de=ue+L.length,ve=ee.slice(ue,de);return ve===L?P(de,ve):B(ue,K)})}function vn(L,K){(function(de){if(!(de instanceof RegExp))throw new Error("not a regexp: "+de);for(var ve=vt(de),ge=0;ge<ve.length;ge++){var M=ve.charAt(ge);if(M!=="i"&&M!=="m"&&M!=="u"&&M!=="s")throw new Error('unsupported regexp flag "'+M+'": '+de)}})(L),arguments.length>=2?re(K):K=0;var ee=function(de){return RegExp("^(?:"+de.source+")",vt(de))}(L),ue=""+L;return a(function(de,ve){var ge=ee.exec(de.slice(ve));if(ge){if(0<=K&&K<=ge.length){var M=ge[0],H=ge[K];return P(ve+M.length,H)}return B(ve,"valid match group (0 to "+ge.length+") in "+ue)}return B(ve,ue)})}function xn(L){return a(function(K,ee){return P(ee,L)})}function jn(L){return a(function(K,ee){return B(ee,L)})}function sn(L){if(x(L))return a(function(K,ee){var ue=L._(K,ee);return ue.index=ee,ue.value="",ue});if(typeof L=="string")return sn(yn(L));if(L instanceof RegExp)return sn(vn(L));throw new Error("not a string, regexp, or parser: "+L)}function Rt(L){return oe(L),a(function(K,ee){var ue=L._(K,ee),de=K.slice(ee,ue.index);return ue.status?B(ee,'not "'+de+'"'):P(ee,null)})}function Vt(L){return ne(L),a(function(K,ee){var ue=te(K,ee);return ee<K.length&&L(ue)?P(ee+1,ue):B(ee,"a character/byte matching "+L)})}function Sr(L,K){arguments.length<2&&(K=L,L=void 0);var ee=a(function(ue,de){return ee._=K()._,ee._(ue,de)});return L?ee.desc(L):ee}function Rr(){return jn("fantasy-land/empty")}o.parse=function(L){if(typeof L!="string"&&!A(L))throw new Error(".parse must be called with a string or Buffer as its argument");var K,ee=this.skip(At)._(L,0);return K=ee.status?{status:!0,value:ee.value}:{status:!1,index:Q(L,ee.furthest),expected:ee.expected},delete J[L],K},o.tryParse=function(L){var K=this.parse(L);if(K.status)return K.value;var ee=jt(L,K),ue=new Error(ee);throw ue.type="ParsimmonError",ue.result=K,ue},o.assert=function(L,K){return this.chain(function(ee){return L(ee)?xn(ee):jn(K)})},o.or=function(L){return Jt(this,L)},o.trim=function(L){return this.wrap(L,L)},o.wrap=function(L,K){return Tt(L,this,K,function(ee,ue){return ue})},o.thru=function(L){return L(this)},o.then=function(L){return oe(L),Wt(this,L).map(function(K){return K[1]})},o.many=function(){var L=this;return a(function(K,ee){for(var ue=[],de=void 0;;){if(!(de=G(L._(K,ee),de)).status)return G(P(ee,ue),de);if(ee===de.index)throw new Error("infinite loop detected in .many() parser --- calling .many() on a parser which can accept zero characters is usually the cause");ee=de.index,ue.push(de.value)}})},o.tieWith=function(L){return be(L),this.map(function(K){if(function(de){if(!O(de))throw new Error("not an array: "+de)}(K),K.length){be(K[0]);for(var ee=K[0],ue=1;ue<K.length;ue++)be(K[ue]),ee+=L+K[ue];return ee}return""})},o.tie=function(){return this.tieWith("")},o.times=function(L,K){var ee=this;return arguments.length<2&&(K=L),re(L),re(K),a(function(ue,de){for(var ve=[],ge=void 0,M=void 0,H=0;H<L;H+=1){if(M=G(ge=ee._(ue,de),M),!ge.status)return M;de=ge.index,ve.push(ge.value)}for(;H<K&&(M=G(ge=ee._(ue,de),M),ge.status);H+=1)de=ge.index,ve.push(ge.value);return G(P(de,ve),M)})},o.result=function(L){return this.map(function(){return L})},o.atMost=function(L){return this.times(0,L)},o.atLeast=function(L){return Tt(this.times(L),this.many(),function(K,ee){return K.concat(ee)})},o.map=function(L){ne(L);var K=this;return a(function(ee,ue){var de=K._(ee,ue);return de.status?G(P(de.index,L(de.value)),de):de})},o.contramap=function(L){ne(L);var K=this;return a(function(ee,ue){var de=K.parse(L(ee.slice(ue)));return de.status?P(ue+ee.length,de.value):de})},o.promap=function(L,K){return ne(L),ne(K),this.contramap(L).map(K)},o.skip=function(L){return Wt(this,L).map(function(K){return K[0]})},o.mark=function(){return Tt(Bt,this,Bt,function(L,K,ee){return{start:L,value:K,end:ee}})},o.node=function(L){return Tt(Bt,this,Bt,function(K,ee,ue){return{name:L,value:ee,start:K,end:ue}})},o.sepBy=function(L){return en(this,L)},o.sepBy1=function(L){return gn(this,L)},o.lookahead=function(L){return this.skip(sn(L))},o.notFollowedBy=function(L){return this.skip(Rt(L))},o.desc=function(L){O(L)||(L=[L]);var K=this;return a(function(ee,ue){var de=K._(ee,ue);return de.status||(de.expected=L),de})},o.fallback=function(L){return this.or(xn(L))},o.ap=function(L){return Tt(L,this,function(K,ee){return K(ee)})},o.chain=function(L){var K=this;return a(function(ee,ue){var de=K._(ee,ue);return de.status?G(L(de.value)._(ee,de.index),de):de})},o.concat=o.or,o.empty=Rr,o.of=xn,o["fantasy-land/ap"]=o.ap,o["fantasy-land/chain"]=o.chain,o["fantasy-land/concat"]=o.concat,o["fantasy-land/empty"]=o.empty,o["fantasy-land/of"]=o.of,o["fantasy-land/map"]=o.map;var Bt=a(function(L,K){return P(K,Q(L,K))}),Hr=a(function(L,K){return K>=L.length?B(K,"any character/byte"):P(K+1,te(L,K))}),rn=a(function(L,K){return P(L.length,L.slice(K))}),At=a(function(L,K){return K<L.length?B(K,"EOF"):P(K,null)}),Z=vn(/[0-9]/).desc("a digit"),me=vn(/[0-9]*/).desc("optional digits"),Ie=vn(/[a-z]/i).desc("a letter"),at=vn(/[a-z]*/i).desc("optional letters"),Dt=vn(/\s*/).desc("optional whitespace"),Cn=vn(/\s+/).desc("whitespace"),_n=yn("\r"),Ht=yn(` +`),ar=yn(`\r +`),ht=Jt(ar,Ht,_n).desc("newline"),St=Jt(ht,At);a.all=rn,a.alt=Jt,a.any=Hr,a.cr=_n,a.createLanguage=function(L){var K={};for(var ee in L)({}).hasOwnProperty.call(L,ee)&&function(ue){K[ue]=Sr(function(){return L[ue](K)})}(ee);return K},a.crlf=ar,a.custom=function(L){return a(L(P,B))},a.digit=Z,a.digits=me,a.empty=Rr,a.end=St,a.eof=At,a.fail=jn,a.formatError=jt,a.index=Bt,a.isParser=x,a.lazy=Sr,a.letter=Ie,a.letters=at,a.lf=Ht,a.lookahead=sn,a.makeFailure=B,a.makeSuccess=P,a.newline=ht,a.noneOf=function(L){return Vt(function(K){return L.indexOf(K)<0}).desc("none of '"+L+"'")},a.notFollowedBy=Rt,a.of=xn,a.oneOf=function(L){for(var K=L.split(""),ee=0;ee<K.length;ee++)K[ee]="'"+K[ee]+"'";return Vt(function(ue){return L.indexOf(ue)>=0}).desc(K)},a.optWhitespace=Dt,a.Parser=a,a.range=function(L,K){return Vt(function(ee){return L<=ee&&ee<=K}).desc(L+"-"+K)},a.regex=vn,a.regexp=vn,a.sepBy=en,a.sepBy1=gn,a.seq=Wt,a.seqMap=Tt,a.seqObj=function(){for(var L,K={},ee=0,ue=(L=arguments,Array.prototype.slice.call(L)),de=ue.length,ve=0;ve<de;ve+=1){var ge=ue[ve];if(!x(ge)){if(O(ge)&&ge.length===2&&typeof ge[0]=="string"&&x(ge[1])){var M=ge[0];if(Object.prototype.hasOwnProperty.call(K,M))throw new Error("seqObj: duplicate key "+M);K[M]=!0,ee++;continue}throw new Error("seqObj arguments must be parsers or [string, parser] array pairs.")}}if(ee===0)throw new Error("seqObj expects at least one named parser, found zero");return a(function(H,q){for(var ie,ye={},ce=0;ce<de;ce+=1){var ae,Se;if(O(ue[ce])?(ae=ue[ce][0],Se=ue[ce][1]):(ae=null,Se=ue[ce]),!(ie=G(Se._(H,q),ie)).status)return ie;ae&&(ye[ae]=ie.value),q=ie.index}return G(P(q,ye),ie)})},a.string=yn,a.succeed=xn,a.takeWhile=function(L){return ne(L),a(function(K,ee){for(var ue=ee;ue<K.length&&L(te(K,ue));)ue++;return P(ue,K.slice(ee,ue))})},a.test=Vt,a.whitespace=Cn,a["fantasy-land/empty"]=Rr,a["fantasy-land/of"]=xn,a.Binary={bitSeq:h,bitSeqObj:function(L){m();var K={},ee=0,ue=l(function(ve){if(O(ve)){var ge=ve;if(ge.length!==2)throw new Error("["+ge.join(", ")+"] should be length 2, got length "+ge.length);if(be(ge[0]),re(ge[1]),Object.prototype.hasOwnProperty.call(K,ge[0]))throw new Error("duplicate key in bitSeqObj: "+ge[0]);return K[ge[0]]=!0,ee++,ge}return re(ve),[null,ve]},L);if(ee<1)throw new Error("bitSeqObj expects at least one named pair, got ["+L.join(", ")+"]");var de=l(function(ve){return ve[0]},ue);return h(l(function(ve){return ve[1]},ue)).map(function(ve){return u(function(ge,M){return M[0]!==null&&(ge[M[0]]=M[1]),ge},{},l(function(ge,M){return[ge,ve[M]]},de))})},byte:function(L){if(m(),re(L),L>255)throw new Error("Value specified to byte constructor ("+L+"=0x"+L.toString(16)+") is larger in value than a single byte.");var K=(L>15?"0x":"0x0")+L.toString(16);return a(function(ee,ue){var de=te(ee,ue);return de===L?P(ue+1,de):B(ue,K)})},buffer:function(L){return g("buffer",L).map(function(K){return Buffer.from(K)})},encodedString:function(L,K){return g("string",K).map(function(ee){return ee.toString(L)})},uintBE:v,uint8BE:v(1),uint16BE:v(2),uint32BE:v(4),uintLE:D,uint8LE:D(1),uint16LE:D(2),uint32LE:D(4),intBE:I,int8BE:I(1),int16BE:I(2),int32BE:I(4),intLE:C,int8LE:C(1),int16LE:C(2),int32LE:C(4),floatBE:g("floatBE",4).map(function(L){return L.readFloatBE(0)}),floatLE:g("floatLE",4).map(function(L){return L.readFloatLE(0)}),doubleBE:g("doubleBE",8).map(function(L){return L.readDoubleBE(0)}),doubleLE:g("doubleLE",8).map(function(L){return L.readDoubleLE(0)})},r.exports=a}])})})(kc,kc.exports);var W=kc.exports,Bm=()=>/[#*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\u26D3\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]|\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])?|[\uDFC3\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-\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]|\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(?:[\uDC08\uDC26](?:\u200D\u2B1B)?|[\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-\uDEB6](?:\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-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC15(?:\u200D\uD83E\uDDBA)?|\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-\uDDB3\uDDBC\uDDBD])|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD])|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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?)?)|\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])?|\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-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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-\uDDB3\uDDBC\uDDBD]|\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;function NS(e){return e==null?e:e.shiftToAll().normalize()}function O0(e){return e.includes("/")&&(e=e.substring(e.lastIndexOf("/")+1)),e.endsWith(".md")&&(e=e.substring(0,e.length-3)),e}W.alt(W.regex(new RegExp(Bm(),"")),W.regex(/[0-9\p{Letter}_-]+/u).map(e=>e.toLocaleLowerCase()),W.whitespace.map(e=>"-"),W.any.map(e=>"")).many().map(e=>e.join(""));var VP=W.alt(W.regex(new RegExp(Bm(),"")),W.regex(/[0-9\p{Letter}_-]+/u),W.whitespace.map(e=>" "),W.any.map(e=>" ")).many().map(e=>e.join("").split(/\s+/).join(" ").trim());function $P(e){return VP.tryParse(e)}function UP(e){return e=NS(e),e=He.fromObject(Object.fromEntries(Object.entries(e.toObject()).filter(([,t])=>t!=0))),e.toHuman()}var Ml;(function(e){function t(x,O=Hm,A=!1){let P=r(x);if(!P)return O.renderNullAs;switch(P.type){case"null":return O.renderNullAs;case"string":return P.value;case"number":case"boolean":return""+P.value;case"html":return P.value.outerHTML;case"widget":return P.value.markdown();case"link":return P.value.markdown();case"function":return"<function>";case"array":let B="";return A&&(B+="["),B+=P.value.map(G=>t(G,O,!0)).join(", "),A&&(B+="]"),B;case"object":return"{ "+Object.entries(P.value).map(G=>G[0]+": "+t(G[1],O,!0)).join(", ")+" }";case"date":return P.value.second==0&&P.value.hour==0&&P.value.minute==0?P.value.toFormat(O.defaultDateFormat):P.value.toFormat(O.defaultDateTimeFormat);case"duration":return UP(P.value)}}e.toString=t;function r(x){return m(x)?{type:"null",value:x}:l(x)?{type:"number",value:x}:u(x)?{type:"string",value:x}:g(x)?{type:"boolean",value:x}:d(x)?{type:"duration",value:x}:c(x)?{type:"date",value:x}:v(x)?{type:"widget",value:x}:h(x)?{type:"array",value:x}:y(x)?{type:"link",value:x}:C(x)?{type:"function",value:x}:D(x)?{type:"html",value:x}:I(x)?{type:"object",value:x}:void 0}e.wrapValue=r;function n(x,O){if(I(x)){let A={};for(let[P,B]of Object.entries(x))A[P]=n(B,O);return A}else if(h(x)){let A=[];for(let P of x)A.push(n(P,O));return A}else return O(x)}e.mapLeaves=n;function i(x,O,A){var G,J;if(x===void 0&&(x=null),O===void 0&&(O=null),x===null&&O===null)return 0;if(x===null)return-1;if(O===null)return 1;let P=r(x),B=r(O);if(P===void 0&&B===void 0)return 0;if(P===void 0)return-1;if(B===void 0)return 1;if(P.type!=B.type)return P.type.localeCompare(B.type);if(P.value===B.value)return 0;switch(P.type){case"string":return P.value.localeCompare(B.value);case"number":return P.value<B.value?-1:P.value==B.value?0:1;case"null":return 0;case"boolean":return P.value==B.value?0:P.value?1:-1;case"link":let Q=P.value,oe=B.value,te=A!=null?A:N=>N,re=te(Q.path).localeCompare(te(oe.path));if(re!=0)return re;let ne=Q.type.localeCompare(oe.type);return ne!=0?ne:Q.subpath&&!oe.subpath?1:!Q.subpath&&oe.subpath?-1:!Q.subpath&&!oe.subpath?0:((G=Q.subpath)!=null?G:"").localeCompare((J=oe.subpath)!=null?J:"");case"date":return P.value<B.value?-1:P.value.equals(B.value)?0:1;case"duration":return P.value<B.value?-1:P.value.equals(B.value)?0:1;case"array":let be=P.value,pe=B.value;for(let N=0;N<Math.min(be.length,pe.length);N++){let Ze=i(be[N],pe[N]);if(Ze!=0)return Ze}return be.length-pe.length;case"object":let De=P.value,Ce=B.value,U=Array.from(Object.keys(De)),Je=Array.from(Object.keys(Ce));U.sort(),Je.sort();let it=i(U,Je);if(it!=0)return it;for(let N of U){let Ze=i(De[N],Ce[N]);if(Ze!=0)return Ze}return 0;case"widget":case"html":case"function":return 0}}e.compareValue=i;function a(x){var O;return(O=r(x))==null?void 0:O.type}e.typeOf=a;function o(x){let O=r(x);if(!O)return!1;switch(O.type){case"number":return O.value!=0;case"string":return O.value.length>0;case"boolean":return O.value;case"link":return!!O.value.path;case"date":return O.value.toMillis()!=0;case"duration":return O.value.as("seconds")!=0;case"object":return Object.keys(O.value).length>0;case"array":return O.value.length>0;case"null":return!1;case"html":case"widget":case"function":return!0}}e.isTruthy=o;function s(x){if(x==null)return x;if(e.isArray(x))return[].concat(x.map(O=>s(O)));if(e.isObject(x)){let O={};for(let[A,P]of Object.entries(x))O[A]=s(P);return O}else return x}e.deepCopy=s;function u(x){return typeof x=="string"}e.isString=u;function l(x){return typeof x=="number"}e.isNumber=l;function c(x){return x instanceof mt}e.isDate=c;function d(x){return x instanceof He}e.isDuration=d;function m(x){return x==null}e.isNull=m;function h(x){return Array.isArray(x)}e.isArray=h;function g(x){return typeof x=="boolean"}e.isBoolean=g;function y(x){return x instanceof xc}e.isLink=y;function v(x){return x instanceof Tl}e.isWidget=v;function D(x){return typeof HTMLElement!="undefined"?x instanceof HTMLElement:!1}e.isHtml=D;function I(x){return typeof x=="object"&&!D(x)&&!v(x)&&!h(x)&&!d(x)&&!c(x)&&!y(x)&&x!==void 0&&!m(x)}e.isObject=I;function C(x){return typeof x=="function"}e.isFunction=C})(Ml||(Ml={}));var L0;(function(e){function t(i){return Ml.isObject(i)&&Object.keys(i).length==2&&"key"in i&&"rows"in i}e.isElementGroup=t;function r(i){for(let a of i)if(!t(a))return!1;return!0}e.isGrouping=r;function n(i){if(r(i)){let a=0;for(let o of i)a+=n(o.rows);return a}else return i.length}e.count=n})(L0||(L0={}));var xc=class e{constructor(t){ur(this,"path");ur(this,"display");ur(this,"subpath");ur(this,"embed");ur(this,"type");Object.assign(this,t)}static file(t,r=!1,n){return new e({path:t,embed:r,display:n,subpath:void 0,type:"file"})}static infer(t,r=!1,n){if(t.includes("#^")){let i=t.split("#^");return e.block(i[0],i[1],r,n)}else if(t.includes("#")){let i=t.split("#");return e.header(i[0],i[1],r,n)}else return e.file(t,r,n)}static header(t,r,n,i){return new e({path:t,embed:n,display:i,subpath:$P(r),type:"header"})}static block(t,r,n,i){return new e({path:t,embed:n,display:i,subpath:r,type:"block"})}static fromObject(t){return new e(t)}equals(t){return t==null||t==null?!1:this.path==t.path&&this.type==t.type&&this.subpath==t.subpath}toString(){return this.markdown()}toObject(){return{path:this.path,type:this.type,subpath:this.subpath,display:this.display,embed:this.embed}}withPath(t){return new e(Object.assign({},this,{path:t}))}withDisplay(t){return new e(Object.assign({},this,{display:t}))}withHeader(t){return e.header(this.path,t,this.embed,this.display)}toFile(){return e.file(this.path,this.embed,this.display)}toEmbed(){if(this.embed)return this;{let t=new e(this);return t.embed=!0,t}}fromEmbed(){if(this.embed){let t=new e(this);return t.embed=!1,t}else return this}markdown(){let t=(this.embed?"!":"")+"[["+this.obsidianLink();return this.display?t+="|"+this.display:(t+="|"+O0(this.path),(this.type=="header"||this.type=="block")&&(t+=" > "+this.subpath)),t+="]]",t}obsidianLink(){var r,n;let t=this.path.replaceAll("|","\\|");return this.type=="header"?t+"#"+((r=this.subpath)==null?void 0:r.replaceAll("|","\\|")):this.type=="block"?t+"#^"+((n=this.subpath)==null?void 0:n.replaceAll("|","\\|")):t}fileName(){return O0(this.path).replace(".md","")}},Tl=class{constructor(t){ur(this,"$widget");this.$widget=t}},_m=class extends Tl{constructor(r,n){super("dataview:list-pair");ur(this,"key");ur(this,"value");this.key=r,this.value=n}markdown(){return`${Ml.toString(this.key)}: ${Ml.toString(this.value)}`}},Mm=class extends Tl{constructor(r,n){super("dataview:external-link");ur(this,"url");ur(this,"display");this.url=r,this.display=n}markdown(){var r;return`[${(r=this.display)!=null?r:this.url}](${this.url})`}},P0;(function(e){function t(o,s){return new _m(o,s)}e.listPair=t;function r(o,s){return new Mm(o,s)}e.externalLink=r;function n(o){return o.$widget==="dataview:list-pair"}e.isListPair=n;function i(o){return o.$widget==="dataview:external-link"}e.isExternalLink=i;function a(o){return n(o)||i(o)}e.isBuiltin=a})(P0||(P0={}));var fn;(function(e){function t(m){return{type:"variable",name:m}}e.variable=t;function r(m){return{type:"literal",value:m}}e.literal=r;function n(m,h,g){return{type:"binaryop",left:m,op:h,right:g}}e.binaryOp=n;function i(m,h){return{type:"index",object:m,index:h}}e.index=i;function a(m){let h=m.split("."),g=e.variable(h[0]);for(let y=1;y<h.length;y++)g=e.index(g,e.literal(h[y]));return g}e.indexVariable=a;function o(m,h){return{type:"lambda",arguments:m,value:h}}e.lambda=o;function s(m,h){return{type:"function",func:m,arguments:h}}e.func=s;function u(m){return{type:"list",values:m}}e.list=u;function l(m){return{type:"object",values:m}}e.object=l;function c(m){return{type:"negated",child:m}}e.negate=c;function d(m){return m=="<="||m=="<"||m==">"||m==">="||m=="!="||m=="="}e.isCompareOp=d,e.NULL=e.literal(null)})(fn||(fn={}));var Si;(function(e){function t(c){return{type:"tag",tag:c}}e.tag=t;function r(c){return{type:"csv",path:c}}e.csv=r;function n(c){return{type:"folder",folder:c}}e.folder=n;function i(c,d){return{type:"link",file:c,direction:d?"incoming":"outgoing"}}e.link=i;function a(c,d,m){return{type:"binaryop",left:c,op:d,right:m}}e.binaryOp=a;function o(c,d){return{type:"binaryop",left:c,op:"&",right:d}}e.and=o;function s(c,d){return{type:"binaryop",left:c,op:"|",right:d}}e.or=s;function u(c){return{type:"negate",child:c}}e.negate=u;function l(){return{type:"empty"}}e.empty=l})(Si||(Si={}));var N0=new RegExp(Bm(),""),Tm={year:He.fromObject({years:1}),years:He.fromObject({years:1}),yr:He.fromObject({years:1}),yrs:He.fromObject({years:1}),month:He.fromObject({months:1}),months:He.fromObject({months:1}),mo:He.fromObject({months:1}),mos:He.fromObject({months:1}),week:He.fromObject({weeks:1}),weeks:He.fromObject({weeks:1}),wk:He.fromObject({weeks:1}),wks:He.fromObject({weeks:1}),w:He.fromObject({weeks:1}),day:He.fromObject({days:1}),days:He.fromObject({days:1}),d:He.fromObject({days:1}),hour:He.fromObject({hours:1}),hours:He.fromObject({hours:1}),hr:He.fromObject({hours:1}),hrs:He.fromObject({hours:1}),h:He.fromObject({hours:1}),minute:He.fromObject({minutes:1}),minutes:He.fromObject({minutes:1}),min:He.fromObject({minutes:1}),mins:He.fromObject({minutes:1}),m:He.fromObject({minutes:1}),second:He.fromObject({seconds:1}),seconds:He.fromObject({seconds:1}),sec:He.fromObject({seconds:1}),secs:He.fromObject({seconds:1}),s:He.fromObject({seconds:1})},Fm={now:()=>mt.local(),today:()=>mt.local().startOf("day"),yesterday:()=>mt.local().startOf("day").minus(He.fromObject({days:1})),tomorrow:()=>mt.local().startOf("day").plus(He.fromObject({days:1})),sow:()=>mt.local().startOf("week"),"start-of-week":()=>mt.local().startOf("week"),eow:()=>mt.local().endOf("week"),"end-of-week":()=>mt.local().endOf("week"),soy:()=>mt.local().startOf("year"),"start-of-year":()=>mt.local().startOf("year"),eoy:()=>mt.local().endOf("year"),"end-of-year":()=>mt.local().endOf("year"),som:()=>mt.local().startOf("month"),"start-of-month":()=>mt.local().startOf("month"),eom:()=>mt.local().endOf("month"),"end-of-month":()=>mt.local().endOf("month")},Im=["FROM","WHERE","LIMIT","GROUP","FLATTEN"];function WP(e){let t=-1;for(;(t=e.indexOf("|",t+1))>=0;)if(!(t>0&&e[t-1]=="\\"))return[e.substring(0,t).replace(/\\\|/g,"|"),e.substring(t+1)];return[e.replace(/\\\|/g,"|"),void 0]}function YP(e){let[t,r]=WP(e);return xc.infer(t,!1,r)}function kl(e,t,r){return W.seqMap(e,W.seq(W.optWhitespace,t,W.optWhitespace,e).many(),(n,i)=>{if(i.length==0)return n;let a=r(n,i[0][1],i[0][3]);for(let o=1;o<i.length;o++)a=r(a,i[o][1],i[o][3]);return a})}function zP(e,...t){return W.custom((r,n)=>(i,a)=>{let o=e._(i,a);if(!o.status)return o;for(let s of t){let u=s(o.value)._(i,o.index);if(!u.status)return o;o=u}return o})}var ai=W.createLanguage({number:e=>W.regexp(/-?[0-9]+(\.[0-9]+)?/).map(t=>Number.parseFloat(t)).desc("number"),string:e=>W.string('"').then(W.alt(e.escapeCharacter,W.noneOf('"\\')).atLeast(0).map(t=>t.join(""))).skip(W.string('"')).desc("string"),escapeCharacter:e=>W.string("\\").then(W.any).map(t=>t==='"'?'"':t==="\\"?"\\":"\\"+t),bool:e=>W.regexp(/true|false|True|False/).map(t=>t.toLowerCase()=="true").desc("boolean ('true' or 'false')"),tag:e=>W.seqMap(W.string("#"),W.alt(W.regexp(/[^\u2000-\u206F\u2E00-\u2E7F'!"#$%&()*+,.:;<=>?@^`{|}~\[\]\\\s]/).desc("text")).many(),(t,r)=>t+r.join("")).desc("tag ('#hello/stuff')"),identifier:e=>W.seqMap(W.alt(W.regexp(/\p{Letter}/u),W.regexp(N0).desc("text")),W.alt(W.regexp(/[0-9\p{Letter}_-]/u),W.regexp(N0).desc("text")).many(),(t,r)=>t+r.join("")).desc("variable identifier"),link:e=>W.regexp(/\[\[([^\[\]]*?)\]\]/u,1).map(t=>YP(t)).desc("file link"),embedLink:e=>W.seqMap(W.string("!").atMost(1),e.link,(t,r)=>(t.length>0&&(r.embed=!0),r)).desc("file link"),binaryPlusMinus:e=>W.regexp(/\+|-/).map(t=>t).desc("'+' or '-'"),binaryMulDiv:e=>W.regexp(/\*|\/|%/).map(t=>t).desc("'*' or '/' or '%'"),binaryCompareOp:e=>W.regexp(/>=|<=|!=|>|<|=/).map(t=>t).desc("'>=' or '<=' or '!=' or '=' or '>' or '<'"),binaryBooleanOp:e=>W.regexp(/and|or|&|\|/i).map(t=>t.toLowerCase()=="and"?"&":t.toLowerCase()=="or"?"|":t).desc("'and' or 'or'"),rootDate:e=>W.seqMap(W.regexp(/\d{4}/),W.string("-"),W.regexp(/\d{2}/),(t,r,n)=>mt.fromObject({year:Number.parseInt(t),month:Number.parseInt(n)})).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"),dateShorthand:e=>W.alt(...Object.keys(Fm).sort((t,r)=>r.length-t.length).map(W.string)),date:e=>zP(e.rootDate,t=>W.seqMap(W.string("-"),W.regexp(/\d{2}/),(r,n)=>t.set({day:Number.parseInt(n)})),t=>W.seqMap(W.string("T"),W.regexp(/\d{2}/),(r,n)=>t.set({hour:Number.parseInt(n)})),t=>W.seqMap(W.string(":"),W.regexp(/\d{2}/),(r,n)=>t.set({minute:Number.parseInt(n)})),t=>W.seqMap(W.string(":"),W.regexp(/\d{2}/),(r,n)=>t.set({second:Number.parseInt(n)})),t=>W.alt(W.seqMap(W.string("."),W.regexp(/\d{3}/),(r,n)=>t.set({millisecond:Number.parseInt(n)})),W.succeed(t)),t=>W.alt(W.seqMap(W.string("+").or(W.string("-")),W.regexp(/\d{1,2}(:\d{2})?/),(r,n)=>t.setZone("UTC"+r+n,{keepLocalTime:!0})),W.seqMap(W.string("Z"),()=>t.setZone("utc",{keepLocalTime:!0})),W.seqMap(W.string("["),W.regexp(/[0-9A-Za-z+-\/]+/u),W.string("]"),(r,n,i)=>t.setZone(n,{keepLocalTime:!0})))).assert(t=>t.isValid,"valid date").desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"),datePlus:e=>W.alt(e.dateShorthand.map(t=>Fm[t]()),e.date).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS] or in shorthand"),durationType:e=>W.alt(...Object.keys(Tm).sort((t,r)=>r.length-t.length).map(W.string)),duration:e=>W.seqMap(e.number,W.optWhitespace,e.durationType,(t,r,n)=>Tm[n].mapUnits(i=>i*t)).sepBy1(W.string(",").trim(W.optWhitespace).or(W.optWhitespace)).map(t=>t.reduce((r,n)=>r.plus(n))).desc("duration like 4hr2min"),rawNull:e=>W.string("null"),tagSource:e=>e.tag.map(t=>Si.tag(t)),csvSource:e=>W.seqMap(W.string("csv(").skip(W.optWhitespace),e.string,W.string(")"),(t,r,n)=>Si.csv(r)),linkIncomingSource:e=>e.link.map(t=>Si.link(t.path,!0)),linkOutgoingSource:e=>W.seqMap(W.string("outgoing(").skip(W.optWhitespace),e.link,W.string(")"),(t,r,n)=>Si.link(r.path,!1)),folderSource:e=>e.string.map(t=>Si.folder(t)),parensSource:e=>W.seqMap(W.string("("),W.optWhitespace,e.source,W.optWhitespace,W.string(")"),(t,r,n,i,a)=>n),negateSource:e=>W.seqMap(W.alt(W.string("-"),W.string("!")),e.atomSource,(t,r)=>Si.negate(r)),atomSource:e=>W.alt(e.parensSource,e.negateSource,e.linkOutgoingSource,e.linkIncomingSource,e.folderSource,e.tagSource,e.csvSource),binaryOpSource:e=>kl(e.atomSource,e.binaryBooleanOp.map(t=>t),Si.binaryOp),source:e=>e.binaryOpSource,variableField:e=>e.identifier.chain(t=>Im.includes(t.toUpperCase())?W.fail("Variable fields cannot be a keyword ("+Im.join(" or ")+")"):W.succeed(fn.variable(t))).desc("variable"),numberField:e=>e.number.map(t=>fn.literal(t)).desc("number"),stringField:e=>e.string.map(t=>fn.literal(t)).desc("string"),boolField:e=>e.bool.map(t=>fn.literal(t)).desc("boolean"),dateField:e=>W.seqMap(W.string("date("),W.optWhitespace,e.datePlus,W.optWhitespace,W.string(")"),(t,r,n,i,a)=>fn.literal(n)).desc("date"),durationField:e=>W.seqMap(W.string("dur("),W.optWhitespace,e.duration,W.optWhitespace,W.string(")"),(t,r,n,i,a)=>fn.literal(n)).desc("duration"),nullField:e=>e.rawNull.map(t=>fn.NULL),linkField:e=>e.link.map(t=>fn.literal(t)),listField:e=>e.field.sepBy(W.string(",").trim(W.optWhitespace)).wrap(W.string("[").skip(W.optWhitespace),W.optWhitespace.then(W.string("]"))).map(t=>fn.list(t)).desc("list ('[1, 2, 3]')"),objectField:e=>W.seqMap(e.identifier.or(e.string),W.string(":").trim(W.optWhitespace),e.field,(t,r,n)=>({name:t,value:n})).sepBy(W.string(",").trim(W.optWhitespace)).wrap(W.string("{").skip(W.optWhitespace),W.optWhitespace.then(W.string("}"))).map(t=>{let r={};for(let n of t)r[n.name]=n.value;return fn.object(r)}).desc("object ('{ a: 1, b: 2 }')"),atomInlineField:e=>W.alt(e.date,e.duration.map(t=>NS(t)),e.string,e.tag,e.embedLink,e.bool,e.number,e.rawNull),inlineFieldList:e=>e.atomInlineField.sepBy(W.string(",").trim(W.optWhitespace).lookahead(e.atomInlineField)),inlineField:e=>W.alt(W.seqMap(e.atomInlineField,W.string(",").trim(W.optWhitespace),e.inlineFieldList,(t,r,n)=>[t].concat(n)),e.atomInlineField),atomField:e=>W.alt(e.embedLink.map(t=>fn.literal(t)),e.negatedField,e.linkField,e.listField,e.objectField,e.lambdaField,e.parensField,e.boolField,e.numberField,e.stringField,e.dateField,e.durationField,e.nullField,e.variableField),indexField:e=>W.seqMap(e.atomField,W.alt(e.dotPostfix,e.indexPostfix,e.functionPostfix).many(),(t,r)=>{let n=t;for(let i of r)switch(i.type){case"dot":n=fn.index(n,fn.literal(i.field));break;case"index":n=fn.index(n,i.field);break;case"function":n=fn.func(n,i.fields);break}return n}),negatedField:e=>W.seqMap(W.string("!"),e.indexField,(t,r)=>fn.negate(r)).desc("negated field"),parensField:e=>W.seqMap(W.string("("),W.optWhitespace,e.field,W.optWhitespace,W.string(")"),(t,r,n,i,a)=>n),lambdaField:e=>W.seqMap(e.identifier.sepBy(W.string(",").trim(W.optWhitespace)).wrap(W.string("(").trim(W.optWhitespace),W.string(")").trim(W.optWhitespace)),W.string("=>").trim(W.optWhitespace),e.field,(t,r,n)=>({type:"lambda",arguments:t,value:n})),dotPostfix:e=>W.seqMap(W.string("."),e.identifier,(t,r)=>({type:"dot",field:r})),indexPostfix:e=>W.seqMap(W.string("["),W.optWhitespace,e.field,W.optWhitespace,W.string("]"),(t,r,n,i,a)=>({type:"index",field:n})),functionPostfix:e=>W.seqMap(W.string("("),W.optWhitespace,e.field.sepBy(W.string(",").trim(W.optWhitespace)),W.optWhitespace,W.string(")"),(t,r,n,i,a)=>({type:"function",fields:n})),binaryMulDivField:e=>kl(e.indexField,e.binaryMulDiv,fn.binaryOp),binaryPlusMinusField:e=>kl(e.binaryMulDivField,e.binaryPlusMinus,fn.binaryOp),binaryCompareField:e=>kl(e.binaryPlusMinusField,e.binaryCompareOp,fn.binaryOp),binaryBooleanField:e=>kl(e.binaryCompareField,e.binaryBooleanOp,fn.binaryOp),binaryOpField:e=>e.binaryBooleanField,field:e=>e.binaryOpField});function KP(e){try{return Ec.success(ai.field.tryParse(e))}catch(t){return Ec.failure(""+t)}}var Cc;(function(e){function t(n,i){return{name:n,field:i}}e.named=t;function r(n,i){return{field:n,direction:i}}e.sortBy=r})(Cc||(Cc={}));function jP(e){return W.custom((t,r)=>(n,i)=>{let a=e._(n,i);return a.status?Object.assign({},a,{value:[a.value,n.substring(i,a.index)]}):a})}function qP(e){return e.split(/[\r\n]+/).map(t=>t.trim()).join("")}function R0(e,t){return W.eof.map(e).or(W.whitespace.then(t))}var RS=W.createLanguage({queryType:e=>W.alt(W.regexp(/TABLE|LIST|TASK|CALENDAR/i)).map(t=>t.toLowerCase()).desc("query type ('TABLE', 'LIST', 'TASK', or 'CALENDAR')"),explicitNamedField:e=>W.seqMap(ai.field.skip(W.whitespace),W.regexp(/AS/i).skip(W.whitespace),ai.identifier.or(ai.string),(t,r,n)=>Cc.named(n,t)),comment:()=>W.Parser((e,t)=>{let r=e.substring(t);if(!r.startsWith("//"))return W.makeFailure(t,"Not a comment");r=r.split(` +`)[0];let n=r.substring(2).trim();return W.makeSuccess(t+r.length,n)}),namedField:e=>W.alt(e.explicitNamedField,jP(ai.field).map(([t,r])=>Cc.named(qP(r),t))),sortField:e=>W.seqMap(ai.field.skip(W.optWhitespace),W.regexp(/ASCENDING|DESCENDING|ASC|DESC/i).atMost(1),(t,r)=>{let n=r.length==0?"ascending":r[0].toLowerCase();return n=="desc"&&(n="descending"),n=="asc"&&(n="ascending"),{field:t,direction:n}}),headerClause:e=>e.queryType.chain(t=>{switch(t){case"table":return R0(()=>({type:t,fields:[],showId:!0}),W.seqMap(W.regexp(/WITHOUT\s+ID/i).skip(W.optWhitespace).atMost(1),W.sepBy(e.namedField,W.string(",").trim(W.optWhitespace)),(r,n)=>({type:t,fields:n,showId:r.length==0})));case"list":return R0(()=>({type:t,format:void 0,showId:!0}),W.seqMap(W.regexp(/WITHOUT\s+ID/i).skip(W.optWhitespace).atMost(1),ai.field.atMost(1),(r,n)=>({type:t,format:n.length==1?n[0]:void 0,showId:r.length==0})));case"task":return W.succeed({type:t});case"calendar":return W.whitespace.then(W.seqMap(e.namedField,r=>({type:t,showId:!0,field:r})));default:return W.fail(`Unrecognized query type '${t}'`)}}).desc("TABLE or LIST or TASK or CALENDAR"),fromClause:e=>W.seqMap(W.regexp(/FROM/i),W.whitespace,ai.source,(t,r,n)=>n),whereClause:e=>W.seqMap(W.regexp(/WHERE/i),W.whitespace,ai.field,(t,r,n)=>({type:"where",clause:n})).desc("WHERE <expression>"),sortByClause:e=>W.seqMap(W.regexp(/SORT/i),W.whitespace,e.sortField.sepBy1(W.string(",").trim(W.optWhitespace)),(t,r,n)=>({type:"sort",fields:n})).desc("SORT field [ASC/DESC]"),limitClause:e=>W.seqMap(W.regexp(/LIMIT/i),W.whitespace,ai.field,(t,r,n)=>({type:"limit",amount:n})).desc("LIMIT <value>"),flattenClause:e=>W.seqMap(W.regexp(/FLATTEN/i).skip(W.whitespace),e.namedField,(t,r)=>({type:"flatten",field:r})).desc("FLATTEN <value> [AS <name>]"),groupByClause:e=>W.seqMap(W.regexp(/GROUP BY/i).skip(W.whitespace),e.namedField,(t,r)=>({type:"group",field:r})).desc("GROUP BY <value> [AS <name>]"),clause:e=>W.alt(e.fromClause,e.whereClause,e.sortByClause,e.limitClause,e.groupByClause,e.flattenClause),query:e=>W.seqMap(e.headerClause.trim(dm),e.fromClause.trim(dm).atMost(1),e.clause.trim(dm).many(),(t,r,n)=>({header:t,source:r.length==0?Si.folder(""):r[0],operations:n,settings:Hm}))}),dm=W.alt(W.whitespace,RS.comment).many().map(e=>e.join("")),GP=e=>{var t;return e?(t=e.plugins.plugins.dataview)==null?void 0:t.api:window.DataviewAPI},JP=e=>e.plugins.enabledPlugins.has("dataview");Ei.DATE_SHORTHANDS=Fm;Ei.DURATION_TYPES=Tm;Ei.EXPRESSION=ai;Ei.KEYWORDS=Im;Ei.QUERY_LANGUAGE=RS;Ei.getAPI=GP;Ei.isPluginEnabled=JP;Ei.parseField=KP});var HS=wn((Vm,$m)=>{(function(e,t){typeof Vm=="object"&&typeof $m!="undefined"?$m.exports=t():typeof define=="function"&&define.amd?define(t):e.Mark=t()})(Vm,function(){"use strict";var e=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(s){return typeof s}:function(s){return s&&typeof Symbol=="function"&&s.constructor===Symbol&&s!==Symbol.prototype?"symbol":typeof s},t=function(s,u){if(!(s instanceof u))throw new TypeError("Cannot call a class as a function")},r=function(){function s(u,l){for(var c=0;c<l.length;c++){var d=l[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(u,d.key,d)}}return function(u,l,c){return l&&s(u.prototype,l),c&&s(u,c),u}}(),n=Object.assign||function(s){for(var u=1;u<arguments.length;u++){var l=arguments[u];for(var c in l)Object.prototype.hasOwnProperty.call(l,c)&&(s[c]=l[c])}return s},i=function(){function s(u){var l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],d=arguments.length>3&&arguments[3]!==void 0?arguments[3]:5e3;t(this,s),this.ctx=u,this.iframes=l,this.exclude=c,this.iframesTimeout=d}return r(s,[{key:"getContexts",value:function(){var l=void 0,c=[];return typeof this.ctx=="undefined"||!this.ctx?l=[]:NodeList.prototype.isPrototypeOf(this.ctx)?l=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?l=this.ctx:typeof this.ctx=="string"?l=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):l=[this.ctx],l.forEach(function(d){var m=c.filter(function(h){return h.contains(d)}).length>0;c.indexOf(d)===-1&&!m&&c.push(d)}),c}},{key:"getIframeContents",value:function(l,c){var d=arguments.length>2&&arguments[2]!==void 0?arguments[2]:function(){},m=void 0;try{var h=l.contentWindow;if(m=h.document,!h||!m)throw new Error("iframe inaccessible")}catch(g){d()}m&&c(m)}},{key:"isIframeBlank",value:function(l){var c="about:blank",d=l.getAttribute("src").trim(),m=l.contentWindow.location.href;return m===c&&d!==c&&d}},{key:"observeIframeLoad",value:function(l,c,d){var m=this,h=!1,g=null,y=function v(){if(!h){h=!0,activeWindow.clearTimeout(g);try{m.isIframeBlank(l)||(l.removeEventListener("load",v),m.getIframeContents(l,c,d))}catch(D){d()}}};l.addEventListener("load",y),g=activeWindow.setTimeout(y,this.iframesTimeout)}},{key:"onIframeReady",value:function(l,c,d){try{l.contentWindow.document.readyState==="complete"?this.isIframeBlank(l)?this.observeIframeLoad(l,c,d):this.getIframeContents(l,c,d):this.observeIframeLoad(l,c,d)}catch(m){d()}}},{key:"waitForIframes",value:function(l,c){var d=this,m=0;this.forEachIframe(l,function(){return!0},function(h){m++,d.waitForIframes(h.querySelector("html"),function(){--m||c()})},function(h){h||c()})}},{key:"forEachIframe",value:function(l,c,d){var m=this,h=arguments.length>3&&arguments[3]!==void 0?arguments[3]:function(){},g=l.querySelectorAll("iframe"),y=g.length,v=0;g=Array.prototype.slice.call(g);var D=function(){--y<=0&&h(v)};y||D(),g.forEach(function(I){s.matches(I,m.exclude)?D():m.onIframeReady(I,function(C){c(I)&&(v++,d(C)),D()},D)})}},{key:"createIterator",value:function(l,c,d){return document.createNodeIterator(l,c,d,!1)}},{key:"createInstanceOnIframe",value:function(l){return new s(l.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(l,c,d){var m=l.compareDocumentPosition(d),h=Node.DOCUMENT_POSITION_PRECEDING;if(m&h)if(c!==null){var g=c.compareDocumentPosition(d),y=Node.DOCUMENT_POSITION_FOLLOWING;if(g&y)return!0}else return!0;return!1}},{key:"getIteratorNode",value:function(l){var c=l.previousNode(),d=void 0;return c===null?d=l.nextNode():d=l.nextNode()&&l.nextNode(),{prevNode:c,node:d}}},{key:"checkIframeFilter",value:function(l,c,d,m){var h=!1,g=!1;return m.forEach(function(y,v){y.val===d&&(h=v,g=y.handled)}),this.compareNodeIframe(l,c,d)?(h===!1&&!g?m.push({val:d,handled:!0}):h!==!1&&!g&&(m[h].handled=!0),!0):(h===!1&&m.push({val:d,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(l,c,d,m){var h=this;l.forEach(function(g){g.handled||h.getIframeContents(g.val,function(y){h.createInstanceOnIframe(y).forEachNode(c,d,m)})})}},{key:"iterateThroughNodes",value:function(l,c,d,m,h){for(var g=this,y=this.createIterator(c,l,m),v=[],D=[],I=void 0,C=void 0,x=function(){var A=g.getIteratorNode(y);return C=A.prevNode,I=A.node,I};x();)this.iframes&&this.forEachIframe(c,function(O){return g.checkIframeFilter(I,C,O,v)},function(O){g.createInstanceOnIframe(O).forEachNode(l,function(A){return D.push(A)},m)}),D.push(I);D.forEach(function(O){d(O)}),this.iframes&&this.handleOpenIframes(v,l,d,m),h()}},{key:"forEachNode",value:function(l,c,d){var m=this,h=arguments.length>3&&arguments[3]!==void 0?arguments[3]:function(){},g=this.getContexts(),y=g.length;y||h(),g.forEach(function(v){var D=function(){m.iterateThroughNodes(l,v,c,d,function(){--y<=0&&h()})};m.iframes?m.waitForIframes(v,D):D()})}}],[{key:"matches",value:function(l,c){var d=typeof c=="string"?[c]:c,m=l.matches||l.matchesSelector||l.msMatchesSelector||l.mozMatchesSelector||l.oMatchesSelector||l.webkitMatchesSelector;if(m){var h=!1;return d.every(function(g){return m.call(l,g)?(h=!0,!1):!0}),h}else return!1}}]),s}(),a=function(){function s(u){t(this,s),this.ctx=u,this.ie=!1;var l=window.navigator.userAgent;(l.indexOf("MSIE")>-1||l.indexOf("Trident")>-1)&&(this.ie=!0)}return r(s,[{key:"log",value:function(l){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"debug",d=this.opt.log;this.opt.debug&&(typeof d=="undefined"?"undefined":e(d))==="object"&&typeof d[c]=="function"&&d[c]("mark.js: "+l)}},{key:"escapeStr",value:function(l){return l.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(l){return this.opt.wildcards!=="disabled"&&(l=this.setupWildcardsRegExp(l)),l=this.escapeStr(l),Object.keys(this.opt.synonyms).length&&(l=this.createSynonymsRegExp(l)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(l=this.setupIgnoreJoinersRegExp(l)),this.opt.diacritics&&(l=this.createDiacriticsRegExp(l)),l=this.createMergedBlanksRegExp(l),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(l=this.createJoinersRegExp(l)),this.opt.wildcards!=="disabled"&&(l=this.createWildcardsRegExp(l)),l=this.createAccuracyRegExp(l),l}},{key:"createSynonymsRegExp",value:function(l){var c=this.opt.synonyms,d=this.opt.caseSensitive?"":"i",m=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var h in c)if(c.hasOwnProperty(h)){var g=c[h],y=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(h):this.escapeStr(h),v=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(g):this.escapeStr(g);y!==""&&v!==""&&(l=l.replace(new RegExp("("+this.escapeStr(y)+"|"+this.escapeStr(v)+")","gm"+d),m+("("+this.processSynomyms(y)+"|")+(this.processSynomyms(v)+")")+m))}return l}},{key:"processSynomyms",value:function(l){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(l=this.setupIgnoreJoinersRegExp(l)),l}},{key:"setupWildcardsRegExp",value:function(l){return l=l.replace(/(?:\\)*\?/g,function(c){return c.charAt(0)==="\\"?"?":""}),l.replace(/(?:\\)*\*/g,function(c){return c.charAt(0)==="\\"?"*":""})}},{key:"createWildcardsRegExp",value:function(l){var c=this.opt.wildcards==="withSpaces";return l.replace(/\u0001/g,c?"[\\S\\s]?":"\\S?").replace(/\u0002/g,c?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(l){return l.replace(/[^(|)\\]/g,function(c,d,m){var h=m.charAt(d+1);return/[(|)\\]/.test(h)||h===""?c:c+"\0"})}},{key:"createJoinersRegExp",value:function(l){var c=[],d=this.opt.ignorePunctuation;return Array.isArray(d)&&d.length&&c.push(this.escapeStr(d.join(""))),this.opt.ignoreJoiners&&c.push("\\u00ad\\u200b\\u200c\\u200d"),c.length?l.split(/\u0000+/).join("["+c.join("")+"]*"):l}},{key:"createDiacriticsRegExp",value:function(l){var c=this.opt.caseSensitive?"":"i",d=this.opt.caseSensitive?["a\xE0\xE1\u1EA3\xE3\u1EA1\u0103\u1EB1\u1EAF\u1EB3\u1EB5\u1EB7\xE2\u1EA7\u1EA5\u1EA9\u1EAB\u1EAD\xE4\xE5\u0101\u0105","A\xC0\xC1\u1EA2\xC3\u1EA0\u0102\u1EB0\u1EAE\u1EB2\u1EB4\u1EB6\xC2\u1EA6\u1EA4\u1EA8\u1EAA\u1EAC\xC4\xC5\u0100\u0104","c\xE7\u0107\u010D","C\xC7\u0106\u010C","d\u0111\u010F","D\u0110\u010E","e\xE8\xE9\u1EBB\u1EBD\u1EB9\xEA\u1EC1\u1EBF\u1EC3\u1EC5\u1EC7\xEB\u011B\u0113\u0119","E\xC8\xC9\u1EBA\u1EBC\u1EB8\xCA\u1EC0\u1EBE\u1EC2\u1EC4\u1EC6\xCB\u011A\u0112\u0118","i\xEC\xED\u1EC9\u0129\u1ECB\xEE\xEF\u012B","I\xCC\xCD\u1EC8\u0128\u1ECA\xCE\xCF\u012A","l\u0142","L\u0141","n\xF1\u0148\u0144","N\xD1\u0147\u0143","o\xF2\xF3\u1ECF\xF5\u1ECD\xF4\u1ED3\u1ED1\u1ED5\u1ED7\u1ED9\u01A1\u1EDF\u1EE1\u1EDB\u1EDD\u1EE3\xF6\xF8\u014D","O\xD2\xD3\u1ECE\xD5\u1ECC\xD4\u1ED2\u1ED0\u1ED4\u1ED6\u1ED8\u01A0\u1EDE\u1EE0\u1EDA\u1EDC\u1EE2\xD6\xD8\u014C","r\u0159","R\u0158","s\u0161\u015B\u0219\u015F","S\u0160\u015A\u0218\u015E","t\u0165\u021B\u0163","T\u0164\u021A\u0162","u\xF9\xFA\u1EE7\u0169\u1EE5\u01B0\u1EEB\u1EE9\u1EED\u1EEF\u1EF1\xFB\xFC\u016F\u016B","U\xD9\xDA\u1EE6\u0168\u1EE4\u01AF\u1EEA\u1EE8\u1EEC\u1EEE\u1EF0\xDB\xDC\u016E\u016A","y\xFD\u1EF3\u1EF7\u1EF9\u1EF5\xFF","Y\xDD\u1EF2\u1EF6\u1EF8\u1EF4\u0178","z\u017E\u017C\u017A","Z\u017D\u017B\u0179"]:["a\xE0\xE1\u1EA3\xE3\u1EA1\u0103\u1EB1\u1EAF\u1EB3\u1EB5\u1EB7\xE2\u1EA7\u1EA5\u1EA9\u1EAB\u1EAD\xE4\xE5\u0101\u0105A\xC0\xC1\u1EA2\xC3\u1EA0\u0102\u1EB0\u1EAE\u1EB2\u1EB4\u1EB6\xC2\u1EA6\u1EA4\u1EA8\u1EAA\u1EAC\xC4\xC5\u0100\u0104","c\xE7\u0107\u010DC\xC7\u0106\u010C","d\u0111\u010FD\u0110\u010E","e\xE8\xE9\u1EBB\u1EBD\u1EB9\xEA\u1EC1\u1EBF\u1EC3\u1EC5\u1EC7\xEB\u011B\u0113\u0119E\xC8\xC9\u1EBA\u1EBC\u1EB8\xCA\u1EC0\u1EBE\u1EC2\u1EC4\u1EC6\xCB\u011A\u0112\u0118","i\xEC\xED\u1EC9\u0129\u1ECB\xEE\xEF\u012BI\xCC\xCD\u1EC8\u0128\u1ECA\xCE\xCF\u012A","l\u0142L\u0141","n\xF1\u0148\u0144N\xD1\u0147\u0143","o\xF2\xF3\u1ECF\xF5\u1ECD\xF4\u1ED3\u1ED1\u1ED5\u1ED7\u1ED9\u01A1\u1EDF\u1EE1\u1EDB\u1EDD\u1EE3\xF6\xF8\u014DO\xD2\xD3\u1ECE\xD5\u1ECC\xD4\u1ED2\u1ED0\u1ED4\u1ED6\u1ED8\u01A0\u1EDE\u1EE0\u1EDA\u1EDC\u1EE2\xD6\xD8\u014C","r\u0159R\u0158","s\u0161\u015B\u0219\u015FS\u0160\u015A\u0218\u015E","t\u0165\u021B\u0163T\u0164\u021A\u0162","u\xF9\xFA\u1EE7\u0169\u1EE5\u01B0\u1EEB\u1EE9\u1EED\u1EEF\u1EF1\xFB\xFC\u016F\u016BU\xD9\xDA\u1EE6\u0168\u1EE4\u01AF\u1EEA\u1EE8\u1EEC\u1EEE\u1EF0\xDB\xDC\u016E\u016A","y\xFD\u1EF3\u1EF7\u1EF9\u1EF5\xFFY\xDD\u1EF2\u1EF6\u1EF8\u1EF4\u0178","z\u017E\u017C\u017AZ\u017D\u017B\u0179"],m=[];return l.split("").forEach(function(h){d.every(function(g){if(g.indexOf(h)!==-1){if(m.indexOf(g)>-1)return!1;l=l.replace(new RegExp("["+g+"]","gm"+c),"["+g+"]"),m.push(g)}return!0})}),l}},{key:"createMergedBlanksRegExp",value:function(l){return l.replace(/[\s]+/gmi,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(l){var c=this,d="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xA1\xBF",m=this.opt.accuracy,h=typeof m=="string"?m:m.value,g=typeof m=="string"?[]:m.limiters,y="";switch(g.forEach(function(v){y+="|"+c.escapeStr(v)}),h){case"partially":default:return"()("+l+")";case"complementary":return y="\\s"+(y||this.escapeStr(d)),"()([^"+y+"]*"+l+"[^"+y+"]*)";case"exactly":return"(^|\\s"+y+")("+l+")(?=$|\\s"+y+")"}}},{key:"getSeparatedKeywords",value:function(l){var c=this,d=[];return l.forEach(function(m){c.opt.separateWordSearch?m.split(" ").forEach(function(h){h.trim()&&d.indexOf(h)===-1&&d.push(h)}):m.trim()&&d.indexOf(m)===-1&&d.push(m)}),{keywords:d.sort(function(m,h){return h.length-m.length}),length:d.length}}},{key:"isNumeric",value:function(l){return Number(parseFloat(l))==l}},{key:"checkRanges",value:function(l){var c=this;if(!Array.isArray(l)||Object.prototype.toString.call(l[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(l),[];var d=[],m=0;return l.sort(function(h,g){return h.start-g.start}).forEach(function(h){var g=c.callNoMatchOnInvalidRanges(h,m),y=g.start,v=g.end,D=g.valid;D&&(h.start=y,h.length=v-y,d.push(h),m=v)}),d}},{key:"callNoMatchOnInvalidRanges",value:function(l,c){var d=void 0,m=void 0,h=!1;return l&&typeof l.start!="undefined"?(d=parseInt(l.start,10),m=d+parseInt(l.length,10),this.isNumeric(l.start)&&this.isNumeric(l.length)&&m-c>0&&m-d>0?h=!0:(this.log("Ignoring invalid or overlapping range: "+(""+JSON.stringify(l))),this.opt.noMatch(l))):(this.log("Ignoring invalid range: "+JSON.stringify(l)),this.opt.noMatch(l)),{start:d,end:m,valid:h}}},{key:"checkWhitespaceRanges",value:function(l,c,d){var m=void 0,h=!0,g=d.length,y=c-g,v=parseInt(l.start,10)-y;return v=v>g?g:v,m=v+parseInt(l.length,10),m>g&&(m=g,this.log("End range automatically set to the max value of "+g)),v<0||m-v<0||v>g||m>g?(h=!1,this.log("Invalid range: "+JSON.stringify(l)),this.opt.noMatch(l)):d.substring(v,m).replace(/\s+/g,"")===""&&(h=!1,this.log("Skipping whitespace only range: "+JSON.stringify(l)),this.opt.noMatch(l)),{start:v,end:m,valid:h}}},{key:"getTextNodes",value:function(l){var c=this,d="",m=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,function(h){m.push({start:d.length,end:(d+=h.textContent).length,node:h})},function(h){return c.matchesExclude(h.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},function(){l({value:d,nodes:m})})}},{key:"matchesExclude",value:function(l){return i.matches(l,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(l,c,d){var m=this.opt.element?this.opt.element:"mark",h=l.splitText(c),g=h.splitText(d-c),y=document.createElement(m);return y.setAttribute("data-markjs","true"),this.opt.className&&y.setAttribute("class",this.opt.className),y.textContent=h.textContent,h.parentNode.replaceChild(y,h),g}},{key:"wrapRangeInMappedTextNode",value:function(l,c,d,m,h){var g=this;l.nodes.every(function(y,v){var D=l.nodes[v+1];if(typeof D=="undefined"||D.start>c){if(!m(y.node))return!1;var I=c-y.start,C=(d>y.end?y.end:d)-y.start,x=l.value.substr(0,y.start),O=l.value.substr(C+y.start);if(y.node=g.wrapRangeInTextNode(y.node,I,C),l.value=x+O,l.nodes.forEach(function(A,P){P>=v&&(l.nodes[P].start>0&&P!==v&&(l.nodes[P].start-=C),l.nodes[P].end-=C)}),d-=C,h(y.node.previousSibling,y.start),d>y.end)c=y.end;else return!1}return!0})}},{key:"wrapMatches",value:function(l,c,d,m,h){var g=this,y=c===0?0:c+1;this.getTextNodes(function(v){v.nodes.forEach(function(D){D=D.node;for(var I=void 0;(I=l.exec(D.textContent))!==null&&I[y]!=="";)if(d(I[y],D)){var C=I.index;if(y!==0)for(var x=1;x<y;x++)C+=I[x].length;D=g.wrapRangeInTextNode(D,C,C+I[y].length),m(D.previousSibling),l.lastIndex=0}}),h()})}},{key:"wrapMatchesAcrossElements",value:function(l,c,d,m,h){var g=this,y=c===0?0:c+1;this.getTextNodes(function(v){for(var D=void 0;(D=l.exec(v.value))!==null&&D[y]!=="";){var I=D.index;if(y!==0)for(var C=1;C<y;C++)I+=D[C].length;var x=I+D[y].length;g.wrapRangeInMappedTextNode(v,I,x,function(O){return d(D[y],O)},function(O,A){l.lastIndex=A,m(O)})}h()})}},{key:"wrapRangeFromIndex",value:function(l,c,d,m){var h=this;this.getTextNodes(function(g){var y=g.value.length;l.forEach(function(v,D){var I=h.checkWhitespaceRanges(v,y,g.value),C=I.start,x=I.end,O=I.valid;O&&h.wrapRangeInMappedTextNode(g,C,x,function(A){return c(A,v,g.value.substring(C,x),D)},function(A){d(A,v)})}),m()})}},{key:"unwrapMatches",value:function(l){for(var c=l.parentNode,d=document.createDocumentFragment();l.firstChild;)d.appendChild(l.removeChild(l.firstChild));c.replaceChild(d,l),this.ie?this.normalizeTextNode(c):c.normalize()}},{key:"normalizeTextNode",value:function(l){if(l){if(l.nodeType===3)for(;l.nextSibling&&l.nextSibling.nodeType===3;)l.nodeValue+=l.nextSibling.nodeValue,l.parentNode.removeChild(l.nextSibling);else this.normalizeTextNode(l.firstChild);this.normalizeTextNode(l.nextSibling)}}},{key:"markRegExp",value:function(l,c){var d=this;this.opt=c,this.log('Searching with expression "'+l+'"');var m=0,h="wrapMatches",g=function(v){m++,d.opt.each(v)};this.opt.acrossElements&&(h="wrapMatchesAcrossElements"),this[h](l,this.opt.ignoreGroups,function(y,v){return d.opt.filter(v,y,m)},g,function(){m===0&&d.opt.noMatch(l),d.opt.done(m)})}},{key:"mark",value:function(l,c){var d=this;this.opt=c;var m=0,h="wrapMatches",g=this.getSeparatedKeywords(typeof l=="string"?[l]:l),y=g.keywords,v=g.length,D=this.opt.caseSensitive?"":"i",I=function C(x){var O=new RegExp(d.createRegExp(x),"gm"+D),A=0;d.log('Searching with expression "'+O+'"'),d[h](O,1,function(P,B){return d.opt.filter(B,x,m,A)},function(P){A++,m++,d.opt.each(P)},function(){A===0&&d.opt.noMatch(x),y[v-1]===x?d.opt.done(m):C(y[y.indexOf(x)+1])})};this.opt.acrossElements&&(h="wrapMatchesAcrossElements"),v===0?this.opt.done(m):I(y[0])}},{key:"markRanges",value:function(l,c){var d=this;this.opt=c;var m=0,h=this.checkRanges(l);h&&h.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(h)),this.wrapRangeFromIndex(h,function(g,y,v,D){return d.opt.filter(g,y,v,D)},function(g,y){m++,d.opt.each(g,y)},function(){d.opt.done(m)})):this.opt.done(m)}},{key:"unmark",value:function(l){var c=this;this.opt=l;var d=this.opt.element?this.opt.element:"*";d+="[data-markjs]",this.opt.className&&(d+="."+this.opt.className),this.log('Removal selector "'+d+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,function(m){c.unwrapMatches(m)},function(m){var h=i.matches(m,d),g=c.matchesExclude(m);return!h||g?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}},{key:"opt",set:function(l){this._opt=n({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},l)},get:function(){return this._opt}},{key:"iterator",get:function(){return new i(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),s}();function o(s){var u=this,l=new a(s);return this.mark=function(c,d){return l.mark(c,d),u},this.markRegExp=function(c,d){return l.markRegExp(c,d),u},this.markRanges=function(c,d){return l.markRanges(c,d),u},this.unmark=function(c){return l.unmark(c),u},this}return o})});var Wm=wn((Um,ls)=>{(function(e,t){typeof Um=="object"&&typeof ls!="undefined"?ls.exports=t():typeof define=="function"&&define.amd?define(t):e.moment=t()})(Um,function(){"use strict";var e;function t(){return e.apply(null,arguments)}function r(f){e=f}function n(f){return f instanceof Array||Object.prototype.toString.call(f)==="[object Array]"}function i(f){return f!=null&&Object.prototype.toString.call(f)==="[object Object]"}function a(f,p){return Object.prototype.hasOwnProperty.call(f,p)}function o(f){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(f).length===0;var p;for(p in f)if(a(f,p))return!1;return!0}function s(f){return f===void 0}function u(f){return typeof f=="number"||Object.prototype.toString.call(f)==="[object Number]"}function l(f){return f instanceof Date||Object.prototype.toString.call(f)==="[object Date]"}function c(f,p){var w=[],S,F=f.length;for(S=0;S<F;++S)w.push(p(f[S],S));return w}function d(f,p){for(var w in p)a(p,w)&&(f[w]=p[w]);return a(p,"toString")&&(f.toString=p.toString),a(p,"valueOf")&&(f.valueOf=p.valueOf),f}function m(f,p,w,S){return Ry(f,p,w,S,!0).utc()}function h(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function g(f){return f._pf==null&&(f._pf=h()),f._pf}var y;Array.prototype.some?y=Array.prototype.some:y=function(f){var p=Object(this),w=p.length>>>0,S;for(S=0;S<w;S++)if(S in p&&f.call(this,p[S],S,p))return!0;return!1};function v(f){if(f._isValid==null){var p=g(f),w=y.call(p.parsedDateParts,function(F){return F!=null}),S=!isNaN(f._d.getTime())&&p.overflow<0&&!p.empty&&!p.invalidEra&&!p.invalidMonth&&!p.invalidWeekday&&!p.weekdayMismatch&&!p.nullInput&&!p.invalidFormat&&!p.userInvalidated&&(!p.meridiem||p.meridiem&&w);if(f._strict&&(S=S&&p.charsLeftOver===0&&p.unusedTokens.length===0&&p.bigHour===void 0),Object.isFrozen==null||!Object.isFrozen(f))f._isValid=S;else return S}return f._isValid}function D(f){var p=m(NaN);return f!=null?d(g(p),f):g(p).userInvalidated=!0,p}var I=t.momentProperties=[],C=!1;function x(f,p){var w,S,F,j=I.length;if(s(p._isAMomentObject)||(f._isAMomentObject=p._isAMomentObject),s(p._i)||(f._i=p._i),s(p._f)||(f._f=p._f),s(p._l)||(f._l=p._l),s(p._strict)||(f._strict=p._strict),s(p._tzm)||(f._tzm=p._tzm),s(p._isUTC)||(f._isUTC=p._isUTC),s(p._offset)||(f._offset=p._offset),s(p._pf)||(f._pf=g(p)),s(p._locale)||(f._locale=p._locale),j>0)for(w=0;w<j;w++)S=I[w],F=p[S],s(F)||(f[S]=F);return f}function O(f){x(this,f),this._d=new Date(f._d!=null?f._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),C===!1&&(C=!0,t.updateOffset(this),C=!1)}function A(f){return f instanceof O||f!=null&&f._isAMomentObject!=null}function P(f){t.suppressDeprecationWarnings===!1&&typeof console!="undefined"&&console.warn&&console.warn("Deprecation warning: "+f)}function B(f,p){var w=!0;return d(function(){if(t.deprecationHandler!=null&&t.deprecationHandler(null,f),w){var S=[],F,j,se,Pe=arguments.length;for(j=0;j<Pe;j++){if(F="",typeof arguments[j]=="object"){F+=` +[`+j+"] ";for(se in arguments[0])a(arguments[0],se)&&(F+=se+": "+arguments[0][se]+", ");F=F.slice(0,-2)}else F=arguments[j];S.push(F)}P(f+` +Arguments: `+Array.prototype.slice.call(S).join("")+` +`+new Error().stack),w=!1}return p.apply(this,arguments)},p)}var G={};function J(f,p){t.deprecationHandler!=null&&t.deprecationHandler(f,p),G[f]||(P(p),G[f]=!0)}t.suppressDeprecationWarnings=!1,t.deprecationHandler=null;function Q(f){return typeof Function!="undefined"&&f instanceof Function||Object.prototype.toString.call(f)==="[object Function]"}function oe(f){var p,w;for(w in f)a(f,w)&&(p=f[w],Q(p)?this[w]=p:this["_"+w]=p);this._config=f,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function te(f,p){var w=d({},f),S;for(S in p)a(p,S)&&(i(f[S])&&i(p[S])?(w[S]={},d(w[S],f[S]),d(w[S],p[S])):p[S]!=null?w[S]=p[S]:delete w[S]);for(S in f)a(f,S)&&!a(p,S)&&i(f[S])&&(w[S]=d({},w[S]));return w}function re(f){f!=null&&this.set(f)}var ne;Object.keys?ne=Object.keys:ne=function(f){var p,w=[];for(p in f)a(f,p)&&w.push(p);return w};var be={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function pe(f,p,w){var S=this._calendar[f]||this._calendar.sameElse;return Q(S)?S.call(p,w):S}function De(f,p,w){var S=""+Math.abs(f),F=p-S.length,j=f>=0;return(j?w?"+":"":"-")+Math.pow(10,Math.max(0,F)).toString().substr(1)+S}var Ce=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,U=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Je={},it={};function N(f,p,w,S){var F=S;typeof S=="string"&&(F=function(){return this[S]()}),f&&(it[f]=F),p&&(it[p[0]]=function(){return De(F.apply(this,arguments),p[1],p[2])}),w&&(it[w]=function(){return this.localeData().ordinal(F.apply(this,arguments),f)})}function Ze(f){return f.match(/\[[\s\S]/)?f.replace(/^\[|\]$/g,""):f.replace(/\\/g,"")}function It(f){var p=f.match(Ce),w,S;for(w=0,S=p.length;w<S;w++)it[p[w]]?p[w]=it[p[w]]:p[w]=Ze(p[w]);return function(F){var j="",se;for(se=0;se<S;se++)j+=Q(p[se])?p[se].call(F,f):p[se];return j}}function Mt(f,p){return f.isValid()?(p=jt(p,f.localeData()),Je[p]=Je[p]||It(p),Je[p](f)):f.localeData().invalidDate()}function jt(f,p){var w=5;function S(F){return p.longDateFormat(F)||F}for(U.lastIndex=0;w>=0&&U.test(f);)f=f.replace(U,S),U.lastIndex=0,w-=1;return f}var vt={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function Wt(f){var p=this._longDateFormat[f],w=this._longDateFormat[f.toUpperCase()];return p||!w?p:(this._longDateFormat[f]=w.match(Ce).map(function(S){return S==="MMMM"||S==="MM"||S==="DD"||S==="dddd"?S.slice(1):S}).join(""),this._longDateFormat[f])}var Tt="Invalid date";function Jt(){return this._invalidDate}var en="%d",gn=/\d{1,2}/;function yn(f){return this._ordinal.replace("%d",f)}var vn={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function xn(f,p,w,S){var F=this._relativeTime[w];return Q(F)?F(f,p,w,S):F.replace(/%d/i,f)}function jn(f,p){var w=this._relativeTime[f>0?"future":"past"];return Q(w)?w(p):w.replace(/%s/i,p)}var sn={};function Rt(f,p){var w=f.toLowerCase();sn[w]=sn[w+"s"]=sn[p]=f}function Vt(f){return typeof f=="string"?sn[f]||sn[f.toLowerCase()]:void 0}function Sr(f){var p={},w,S;for(S in f)a(f,S)&&(w=Vt(S),w&&(p[w]=f[S]));return p}var Rr={};function Bt(f,p){Rr[f]=p}function Hr(f){var p=[],w;for(w in f)a(f,w)&&p.push({unit:w,priority:Rr[w]});return p.sort(function(S,F){return S.priority-F.priority}),p}function rn(f){return f%4===0&&f%100!==0||f%400===0}function At(f){return f<0?Math.ceil(f)||0:Math.floor(f)}function Z(f){var p=+f,w=0;return p!==0&&isFinite(p)&&(w=At(p)),w}function me(f,p){return function(w){return w!=null?(at(this,f,w),t.updateOffset(this,p),this):Ie(this,f)}}function Ie(f,p){return f.isValid()?f._d["get"+(f._isUTC?"UTC":"")+p]():NaN}function at(f,p,w){f.isValid()&&!isNaN(w)&&(p==="FullYear"&&rn(f.year())&&f.month()===1&&f.date()===29?(w=Z(w),f._d["set"+(f._isUTC?"UTC":"")+p](w,f.month(),b(w,f.month()))):f._d["set"+(f._isUTC?"UTC":"")+p](w))}function Dt(f){return f=Vt(f),Q(this[f])?this[f]():this}function Cn(f,p){if(typeof f=="object"){f=Sr(f);var w=Hr(f),S,F=w.length;for(S=0;S<F;S++)this[w[S].unit](f[w[S].unit])}else if(f=Vt(f),Q(this[f]))return this[f](p);return this}var _n=/\d/,Ht=/\d\d/,ar=/\d{3}/,ht=/\d{4}/,St=/[+-]?\d{6}/,L=/\d\d?/,K=/\d\d\d\d?/,ee=/\d\d\d\d\d\d?/,ue=/\d{1,3}/,de=/\d{1,4}/,ve=/[+-]?\d{1,6}/,ge=/\d+/,M=/[+-]?\d+/,H=/Z|[+-]\d\d:?\d\d/gi,q=/Z|[+-]\d\d(?::?\d\d)?/gi,ie=/[+-]?\d+(\.\d{1,3})?/,ye=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,ce;ce={};function ae(f,p,w){ce[f]=Q(p)?p:function(S,F){return S&&w?w:p}}function Se(f,p){return a(ce,f)?ce[f](p._strict,p._locale):new RegExp(nt(f))}function nt(f){return Te(f.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(p,w,S,F,j){return w||S||F||j}))}function Te(f){return f.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var Ue={};function We(f,p){var w,S=p,F;for(typeof f=="string"&&(f=[f]),u(p)&&(S=function(j,se){se[p]=Z(j)}),F=f.length,w=0;w<F;w++)Ue[f[w]]=S}function Ft(f,p){We(f,function(w,S,F,j){F._w=F._w||{},p(w,F._w,F,j)})}function Hn(f,p,w){p!=null&&a(Ue,f)&&Ue[f](p,w._a,w,f)}var Ot=0,or=1,sr=2,Yt=3,Bn=4,Er=5,Gr=6,tu=7,z=8;function k(f,p){return(f%p+p)%p}var _;Array.prototype.indexOf?_=Array.prototype.indexOf:_=function(f){var p;for(p=0;p<this.length;++p)if(this[p]===f)return p;return-1};function b(f,p){if(isNaN(f)||isNaN(p))return NaN;var w=k(p,12);return f+=(p-w)/12,w===1?rn(f)?29:28:31-w%7%2}N("M",["MM",2],"Mo",function(){return this.month()+1}),N("MMM",0,0,function(f){return this.localeData().monthsShort(this,f)}),N("MMMM",0,0,function(f){return this.localeData().months(this,f)}),Rt("month","M"),Bt("month",8),ae("M",L),ae("MM",L,Ht),ae("MMM",function(f,p){return p.monthsShortRegex(f)}),ae("MMMM",function(f,p){return p.monthsRegex(f)}),We(["M","MM"],function(f,p){p[or]=Z(f)-1}),We(["MMM","MMMM"],function(f,p,w,S){var F=w._locale.monthsParse(f,S,w._strict);F!=null?p[or]=F:g(w).invalidMonth=f});var T="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),V="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Y=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,X=ye,le=ye;function he(f,p){return f?n(this._months)?this._months[f.month()]:this._months[(this._months.isFormat||Y).test(p)?"format":"standalone"][f.month()]:n(this._months)?this._months:this._months.standalone}function Me(f,p){return f?n(this._monthsShort)?this._monthsShort[f.month()]:this._monthsShort[Y.test(p)?"format":"standalone"][f.month()]:n(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function Ve(f,p,w){var S,F,j,se=f.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],S=0;S<12;++S)j=m([2e3,S]),this._shortMonthsParse[S]=this.monthsShort(j,"").toLocaleLowerCase(),this._longMonthsParse[S]=this.months(j,"").toLocaleLowerCase();return w?p==="MMM"?(F=_.call(this._shortMonthsParse,se),F!==-1?F:null):(F=_.call(this._longMonthsParse,se),F!==-1?F:null):p==="MMM"?(F=_.call(this._shortMonthsParse,se),F!==-1?F:(F=_.call(this._longMonthsParse,se),F!==-1?F:null)):(F=_.call(this._longMonthsParse,se),F!==-1?F:(F=_.call(this._shortMonthsParse,se),F!==-1?F:null))}function Le(f,p,w){var S,F,j;if(this._monthsParseExact)return Ve.call(this,f,p,w);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),S=0;S<12;S++){if(F=m([2e3,S]),w&&!this._longMonthsParse[S]&&(this._longMonthsParse[S]=new RegExp("^"+this.months(F,"").replace(".","")+"$","i"),this._shortMonthsParse[S]=new RegExp("^"+this.monthsShort(F,"").replace(".","")+"$","i")),!w&&!this._monthsParse[S]&&(j="^"+this.months(F,"")+"|^"+this.monthsShort(F,""),this._monthsParse[S]=new RegExp(j.replace(".",""),"i")),w&&p==="MMMM"&&this._longMonthsParse[S].test(f))return S;if(w&&p==="MMM"&&this._shortMonthsParse[S].test(f))return S;if(!w&&this._monthsParse[S].test(f))return S}}function Qe(f,p){var w;if(!f.isValid())return f;if(typeof p=="string"){if(/^\d+$/.test(p))p=Z(p);else if(p=f.localeData().monthsParse(p),!u(p))return f}return w=Math.min(f.date(),b(f.year(),p)),f._d["set"+(f._isUTC?"UTC":"")+"Month"](p,w),f}function ot(f){return f!=null?(Qe(this,f),t.updateOffset(this,!0),this):Ie(this,"Month")}function qe(){return b(this.year(),this.month())}function yt(f){return this._monthsParseExact?(a(this,"_monthsRegex")||lt.call(this),f?this._monthsShortStrictRegex:this._monthsShortRegex):(a(this,"_monthsShortRegex")||(this._monthsShortRegex=X),this._monthsShortStrictRegex&&f?this._monthsShortStrictRegex:this._monthsShortRegex)}function st(f){return this._monthsParseExact?(a(this,"_monthsRegex")||lt.call(this),f?this._monthsStrictRegex:this._monthsRegex):(a(this,"_monthsRegex")||(this._monthsRegex=le),this._monthsStrictRegex&&f?this._monthsStrictRegex:this._monthsRegex)}function lt(){function f(se,Pe){return Pe.length-se.length}var p=[],w=[],S=[],F,j;for(F=0;F<12;F++)j=m([2e3,F]),p.push(this.monthsShort(j,"")),w.push(this.months(j,"")),S.push(this.months(j,"")),S.push(this.monthsShort(j,""));for(p.sort(f),w.sort(f),S.sort(f),F=0;F<12;F++)p[F]=Te(p[F]),w[F]=Te(w[F]);for(F=0;F<24;F++)S[F]=Te(S[F]);this._monthsRegex=new RegExp("^("+S.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+w.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+p.join("|")+")","i")}N("Y",0,0,function(){var f=this.year();return f<=9999?De(f,4):"+"+f}),N(0,["YY",2],0,function(){return this.year()%100}),N(0,["YYYY",4],0,"year"),N(0,["YYYYY",5],0,"year"),N(0,["YYYYYY",6,!0],0,"year"),Rt("year","y"),Bt("year",1),ae("Y",M),ae("YY",L,Ht),ae("YYYY",de,ht),ae("YYYYY",ve,St),ae("YYYYYY",ve,St),We(["YYYYY","YYYYYY"],Ot),We("YYYY",function(f,p){p[Ot]=f.length===2?t.parseTwoDigitYear(f):Z(f)}),We("YY",function(f,p){p[Ot]=t.parseTwoDigitYear(f)}),We("Y",function(f,p){p[Ot]=parseInt(f,10)});function qt(f){return rn(f)?366:365}t.parseTwoDigitYear=function(f){return Z(f)+(Z(f)>68?1900:2e3)};var On=me("FullYear",!0);function Vn(){return rn(this.year())}function ki(f,p,w,S,F,j,se){var Pe;return f<100&&f>=0?(Pe=new Date(f+400,p,w,S,F,j,se),isFinite(Pe.getFullYear())&&Pe.setFullYear(f)):Pe=new Date(f,p,w,S,F,j,se),Pe}function kr(f){var p,w;return f<100&&f>=0?(w=Array.prototype.slice.call(arguments),w[0]=f+400,p=new Date(Date.UTC.apply(null,w)),isFinite(p.getUTCFullYear())&&p.setUTCFullYear(f)):p=new Date(Date.UTC.apply(null,arguments)),p}function Jr(f,p,w){var S=7+p-w,F=(7+kr(f,0,S).getUTCDay()-p)%7;return-F+S-1}function My(f,p,w,S,F){var j=(7+w-S)%7,se=Jr(f,S,F),Pe=1+7*(p-1)+j+se,ut,$t;return Pe<=0?(ut=f-1,$t=qt(ut)+Pe):Pe>qt(f)?(ut=f+1,$t=Pe-qt(f)):(ut=f,$t=Pe),{year:ut,dayOfYear:$t}}function Ns(f,p,w){var S=Jr(f.year(),p,w),F=Math.floor((f.dayOfYear()-S-1)/7)+1,j,se;return F<1?(se=f.year()-1,j=F+xi(se,p,w)):F>xi(f.year(),p,w)?(j=F-xi(f.year(),p,w),se=f.year()+1):(se=f.year(),j=F),{week:j,year:se}}function xi(f,p,w){var S=Jr(f,p,w),F=Jr(f+1,p,w);return(qt(f)-S+F)/7}N("w",["ww",2],"wo","week"),N("W",["WW",2],"Wo","isoWeek"),Rt("week","w"),Rt("isoWeek","W"),Bt("week",5),Bt("isoWeek",5),ae("w",L),ae("ww",L,Ht),ae("W",L),ae("WW",L,Ht),Ft(["w","ww","W","WW"],function(f,p,w,S){p[S.substr(0,1)]=Z(f)});function j_(f){return Ns(f,this._week.dow,this._week.doy).week}var q_={dow:0,doy:6};function G_(){return this._week.dow}function J_(){return this._week.doy}function Z_(f){var p=this.localeData().week(this);return f==null?p:this.add((f-p)*7,"d")}function Q_(f){var p=Ns(this,1,4).week;return f==null?p:this.add((f-p)*7,"d")}N("d",0,"do","day"),N("dd",0,0,function(f){return this.localeData().weekdaysMin(this,f)}),N("ddd",0,0,function(f){return this.localeData().weekdaysShort(this,f)}),N("dddd",0,0,function(f){return this.localeData().weekdays(this,f)}),N("e",0,0,"weekday"),N("E",0,0,"isoWeekday"),Rt("day","d"),Rt("weekday","e"),Rt("isoWeekday","E"),Bt("day",11),Bt("weekday",11),Bt("isoWeekday",11),ae("d",L),ae("e",L),ae("E",L),ae("dd",function(f,p){return p.weekdaysMinRegex(f)}),ae("ddd",function(f,p){return p.weekdaysShortRegex(f)}),ae("dddd",function(f,p){return p.weekdaysRegex(f)}),Ft(["dd","ddd","dddd"],function(f,p,w,S){var F=w._locale.weekdaysParse(f,S,w._strict);F!=null?p.d=F:g(w).invalidWeekday=f}),Ft(["d","e","E"],function(f,p,w,S){p[S]=Z(f)});function X_(f,p){return typeof f!="string"?f:isNaN(f)?(f=p.weekdaysParse(f),typeof f=="number"?f:null):parseInt(f,10)}function e1(f,p){return typeof f=="string"?p.weekdaysParse(f)%7||7:isNaN(f)?null:f}function bf(f,p){return f.slice(p,7).concat(f.slice(0,p))}var t1="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Ty="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),n1="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),r1=ye,i1=ye,a1=ye;function o1(f,p){var w=n(this._weekdays)?this._weekdays:this._weekdays[f&&f!==!0&&this._weekdays.isFormat.test(p)?"format":"standalone"];return f===!0?bf(w,this._week.dow):f?w[f.day()]:w}function s1(f){return f===!0?bf(this._weekdaysShort,this._week.dow):f?this._weekdaysShort[f.day()]:this._weekdaysShort}function l1(f){return f===!0?bf(this._weekdaysMin,this._week.dow):f?this._weekdaysMin[f.day()]:this._weekdaysMin}function u1(f,p,w){var S,F,j,se=f.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],S=0;S<7;++S)j=m([2e3,1]).day(S),this._minWeekdaysParse[S]=this.weekdaysMin(j,"").toLocaleLowerCase(),this._shortWeekdaysParse[S]=this.weekdaysShort(j,"").toLocaleLowerCase(),this._weekdaysParse[S]=this.weekdays(j,"").toLocaleLowerCase();return w?p==="dddd"?(F=_.call(this._weekdaysParse,se),F!==-1?F:null):p==="ddd"?(F=_.call(this._shortWeekdaysParse,se),F!==-1?F:null):(F=_.call(this._minWeekdaysParse,se),F!==-1?F:null):p==="dddd"?(F=_.call(this._weekdaysParse,se),F!==-1||(F=_.call(this._shortWeekdaysParse,se),F!==-1)?F:(F=_.call(this._minWeekdaysParse,se),F!==-1?F:null)):p==="ddd"?(F=_.call(this._shortWeekdaysParse,se),F!==-1||(F=_.call(this._weekdaysParse,se),F!==-1)?F:(F=_.call(this._minWeekdaysParse,se),F!==-1?F:null)):(F=_.call(this._minWeekdaysParse,se),F!==-1||(F=_.call(this._weekdaysParse,se),F!==-1)?F:(F=_.call(this._shortWeekdaysParse,se),F!==-1?F:null))}function c1(f,p,w){var S,F,j;if(this._weekdaysParseExact)return u1.call(this,f,p,w);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),S=0;S<7;S++){if(F=m([2e3,1]).day(S),w&&!this._fullWeekdaysParse[S]&&(this._fullWeekdaysParse[S]=new RegExp("^"+this.weekdays(F,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[S]=new RegExp("^"+this.weekdaysShort(F,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[S]=new RegExp("^"+this.weekdaysMin(F,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[S]||(j="^"+this.weekdays(F,"")+"|^"+this.weekdaysShort(F,"")+"|^"+this.weekdaysMin(F,""),this._weekdaysParse[S]=new RegExp(j.replace(".",""),"i")),w&&p==="dddd"&&this._fullWeekdaysParse[S].test(f))return S;if(w&&p==="ddd"&&this._shortWeekdaysParse[S].test(f))return S;if(w&&p==="dd"&&this._minWeekdaysParse[S].test(f))return S;if(!w&&this._weekdaysParse[S].test(f))return S}}function d1(f){if(!this.isValid())return f!=null?this:NaN;var p=this._isUTC?this._d.getUTCDay():this._d.getDay();return f!=null?(f=X_(f,this.localeData()),this.add(f-p,"d")):p}function f1(f){if(!this.isValid())return f!=null?this:NaN;var p=(this.day()+7-this.localeData()._week.dow)%7;return f==null?p:this.add(f-p,"d")}function h1(f){if(!this.isValid())return f!=null?this:NaN;if(f!=null){var p=e1(f,this.localeData());return this.day(this.day()%7?p:p-7)}else return this.day()||7}function m1(f){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||Df.call(this),f?this._weekdaysStrictRegex:this._weekdaysRegex):(a(this,"_weekdaysRegex")||(this._weekdaysRegex=r1),this._weekdaysStrictRegex&&f?this._weekdaysStrictRegex:this._weekdaysRegex)}function p1(f){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||Df.call(this),f?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(a(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=i1),this._weekdaysShortStrictRegex&&f?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function g1(f){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||Df.call(this),f?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(a(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=a1),this._weekdaysMinStrictRegex&&f?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Df(){function f(lr,Fi){return Fi.length-lr.length}var p=[],w=[],S=[],F=[],j,se,Pe,ut,$t;for(j=0;j<7;j++)se=m([2e3,1]).day(j),Pe=Te(this.weekdaysMin(se,"")),ut=Te(this.weekdaysShort(se,"")),$t=Te(this.weekdays(se,"")),p.push(Pe),w.push(ut),S.push($t),F.push(Pe),F.push(ut),F.push($t);p.sort(f),w.sort(f),S.sort(f),F.sort(f),this._weekdaysRegex=new RegExp("^("+F.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+S.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+w.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+p.join("|")+")","i")}function Sf(){return this.hours()%12||12}function y1(){return this.hours()||24}N("H",["HH",2],0,"hour"),N("h",["hh",2],0,Sf),N("k",["kk",2],0,y1),N("hmm",0,0,function(){return""+Sf.apply(this)+De(this.minutes(),2)}),N("hmmss",0,0,function(){return""+Sf.apply(this)+De(this.minutes(),2)+De(this.seconds(),2)}),N("Hmm",0,0,function(){return""+this.hours()+De(this.minutes(),2)}),N("Hmmss",0,0,function(){return""+this.hours()+De(this.minutes(),2)+De(this.seconds(),2)});function Fy(f,p){N(f,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),p)})}Fy("a",!0),Fy("A",!1),Rt("hour","h"),Bt("hour",13);function Iy(f,p){return p._meridiemParse}ae("a",Iy),ae("A",Iy),ae("H",L),ae("h",L),ae("k",L),ae("HH",L,Ht),ae("hh",L,Ht),ae("kk",L,Ht),ae("hmm",K),ae("hmmss",ee),ae("Hmm",K),ae("Hmmss",ee),We(["H","HH"],Yt),We(["k","kk"],function(f,p,w){var S=Z(f);p[Yt]=S===24?0:S}),We(["a","A"],function(f,p,w){w._isPm=w._locale.isPM(f),w._meridiem=f}),We(["h","hh"],function(f,p,w){p[Yt]=Z(f),g(w).bigHour=!0}),We("hmm",function(f,p,w){var S=f.length-2;p[Yt]=Z(f.substr(0,S)),p[Bn]=Z(f.substr(S)),g(w).bigHour=!0}),We("hmmss",function(f,p,w){var S=f.length-4,F=f.length-2;p[Yt]=Z(f.substr(0,S)),p[Bn]=Z(f.substr(S,2)),p[Er]=Z(f.substr(F)),g(w).bigHour=!0}),We("Hmm",function(f,p,w){var S=f.length-2;p[Yt]=Z(f.substr(0,S)),p[Bn]=Z(f.substr(S))}),We("Hmmss",function(f,p,w){var S=f.length-4,F=f.length-2;p[Yt]=Z(f.substr(0,S)),p[Bn]=Z(f.substr(S,2)),p[Er]=Z(f.substr(F))});function v1(f){return(f+"").toLowerCase().charAt(0)==="p"}var w1=/[ap]\.?m?\.?/i,b1=me("Hours",!0);function D1(f,p,w){return f>11?w?"pm":"PM":w?"am":"AM"}var Ay={calendar:be,longDateFormat:vt,invalidDate:Tt,ordinal:en,dayOfMonthOrdinalParse:gn,relativeTime:vn,months:T,monthsShort:V,week:q_,weekdays:t1,weekdaysMin:n1,weekdaysShort:Ty,meridiemParse:w1},tn={},Rs={},Hs;function S1(f,p){var w,S=Math.min(f.length,p.length);for(w=0;w<S;w+=1)if(f[w]!==p[w])return w;return S}function Oy(f){return f&&f.toLowerCase().replace("_","-")}function E1(f){for(var p=0,w,S,F,j;p<f.length;){for(j=Oy(f[p]).split("-"),w=j.length,S=Oy(f[p+1]),S=S?S.split("-"):null;w>0;){if(F=nu(j.slice(0,w).join("-")),F)return F;if(S&&S.length>=w&&S1(j,S)>=w-1)break;w--}p++}return Hs}function k1(f){return f.match("^[^/\\\\]*$")!=null}function nu(f){var p=null,w;if(tn[f]===void 0&&typeof ls!="undefined"&&ls&&ls.exports&&k1(f))try{p=Hs._abbr,w=require,w("./locale/"+f),na(p)}catch(S){tn[f]=null}return tn[f]}function na(f,p){var w;return f&&(s(p)?w=Ci(f):w=Ef(f,p),w?Hs=w:typeof console!="undefined"&&console.warn&&console.warn("Locale "+f+" not found. Did you forget to load it?")),Hs._abbr}function Ef(f,p){if(p!==null){var w,S=Ay;if(p.abbr=f,tn[f]!=null)J("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),S=tn[f]._config;else if(p.parentLocale!=null)if(tn[p.parentLocale]!=null)S=tn[p.parentLocale]._config;else if(w=nu(p.parentLocale),w!=null)S=w._config;else return Rs[p.parentLocale]||(Rs[p.parentLocale]=[]),Rs[p.parentLocale].push({name:f,config:p}),null;return tn[f]=new re(te(S,p)),Rs[f]&&Rs[f].forEach(function(F){Ef(F.name,F.config)}),na(f),tn[f]}else return delete tn[f],null}function x1(f,p){if(p!=null){var w,S,F=Ay;tn[f]!=null&&tn[f].parentLocale!=null?tn[f].set(te(tn[f]._config,p)):(S=nu(f),S!=null&&(F=S._config),p=te(F,p),S==null&&(p.abbr=f),w=new re(p),w.parentLocale=tn[f],tn[f]=w),na(f)}else tn[f]!=null&&(tn[f].parentLocale!=null?(tn[f]=tn[f].parentLocale,f===na()&&na(f)):tn[f]!=null&&delete tn[f]);return tn[f]}function Ci(f){var p;if(f&&f._locale&&f._locale._abbr&&(f=f._locale._abbr),!f)return Hs;if(!n(f)){if(p=nu(f),p)return p;f=[f]}return E1(f)}function C1(){return ne(tn)}function kf(f){var p,w=f._a;return w&&g(f).overflow===-2&&(p=w[or]<0||w[or]>11?or:w[sr]<1||w[sr]>b(w[Ot],w[or])?sr:w[Yt]<0||w[Yt]>24||w[Yt]===24&&(w[Bn]!==0||w[Er]!==0||w[Gr]!==0)?Yt:w[Bn]<0||w[Bn]>59?Bn:w[Er]<0||w[Er]>59?Er:w[Gr]<0||w[Gr]>999?Gr:-1,g(f)._overflowDayOfYear&&(p<Ot||p>sr)&&(p=sr),g(f)._overflowWeeks&&p===-1&&(p=tu),g(f)._overflowWeekday&&p===-1&&(p=z),g(f).overflow=p),f}var _1=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,M1=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,T1=/Z|[+-]\d\d(?::?\d\d)?/,ru=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],xf=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],F1=/^\/?Date\((-?\d+)/i,I1=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,A1={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function Ly(f){var p,w,S=f._i,F=_1.exec(S)||M1.exec(S),j,se,Pe,ut,$t=ru.length,lr=xf.length;if(F){for(g(f).iso=!0,p=0,w=$t;p<w;p++)if(ru[p][1].exec(F[1])){se=ru[p][0],j=ru[p][2]!==!1;break}if(se==null){f._isValid=!1;return}if(F[3]){for(p=0,w=lr;p<w;p++)if(xf[p][1].exec(F[3])){Pe=(F[2]||" ")+xf[p][0];break}if(Pe==null){f._isValid=!1;return}}if(!j&&Pe!=null){f._isValid=!1;return}if(F[4])if(T1.exec(F[4]))ut="Z";else{f._isValid=!1;return}f._f=se+(Pe||"")+(ut||""),_f(f)}else f._isValid=!1}function O1(f,p,w,S,F,j){var se=[L1(f),V.indexOf(p),parseInt(w,10),parseInt(S,10),parseInt(F,10)];return j&&se.push(parseInt(j,10)),se}function L1(f){var p=parseInt(f,10);return p<=49?2e3+p:p<=999?1900+p:p}function P1(f){return f.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function N1(f,p,w){if(f){var S=Ty.indexOf(f),F=new Date(p[0],p[1],p[2]).getDay();if(S!==F)return g(w).weekdayMismatch=!0,w._isValid=!1,!1}return!0}function R1(f,p,w){if(f)return A1[f];if(p)return 0;var S=parseInt(w,10),F=S%100,j=(S-F)/100;return j*60+F}function Py(f){var p=I1.exec(P1(f._i)),w;if(p){if(w=O1(p[4],p[3],p[2],p[5],p[6],p[7]),!N1(p[1],w,f))return;f._a=w,f._tzm=R1(p[8],p[9],p[10]),f._d=kr.apply(null,f._a),f._d.setUTCMinutes(f._d.getUTCMinutes()-f._tzm),g(f).rfc2822=!0}else f._isValid=!1}function H1(f){var p=F1.exec(f._i);if(p!==null){f._d=new Date(+p[1]);return}if(Ly(f),f._isValid===!1)delete f._isValid;else return;if(Py(f),f._isValid===!1)delete f._isValid;else return;f._strict?f._isValid=!1:t.createFromInputFallback(f)}t.createFromInputFallback=B("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(f){f._d=new Date(f._i+(f._useUTC?" UTC":""))});function bo(f,p,w){return f!=null?f:p!=null?p:w}function B1(f){var p=new Date(t.now());return f._useUTC?[p.getUTCFullYear(),p.getUTCMonth(),p.getUTCDate()]:[p.getFullYear(),p.getMonth(),p.getDate()]}function Cf(f){var p,w,S=[],F,j,se;if(!f._d){for(F=B1(f),f._w&&f._a[sr]==null&&f._a[or]==null&&V1(f),f._dayOfYear!=null&&(se=bo(f._a[Ot],F[Ot]),(f._dayOfYear>qt(se)||f._dayOfYear===0)&&(g(f)._overflowDayOfYear=!0),w=kr(se,0,f._dayOfYear),f._a[or]=w.getUTCMonth(),f._a[sr]=w.getUTCDate()),p=0;p<3&&f._a[p]==null;++p)f._a[p]=S[p]=F[p];for(;p<7;p++)f._a[p]=S[p]=f._a[p]==null?p===2?1:0:f._a[p];f._a[Yt]===24&&f._a[Bn]===0&&f._a[Er]===0&&f._a[Gr]===0&&(f._nextDay=!0,f._a[Yt]=0),f._d=(f._useUTC?kr:ki).apply(null,S),j=f._useUTC?f._d.getUTCDay():f._d.getDay(),f._tzm!=null&&f._d.setUTCMinutes(f._d.getUTCMinutes()-f._tzm),f._nextDay&&(f._a[Yt]=24),f._w&&typeof f._w.d!="undefined"&&f._w.d!==j&&(g(f).weekdayMismatch=!0)}}function V1(f){var p,w,S,F,j,se,Pe,ut,$t;p=f._w,p.GG!=null||p.W!=null||p.E!=null?(j=1,se=4,w=bo(p.GG,f._a[Ot],Ns(Zt(),1,4).year),S=bo(p.W,1),F=bo(p.E,1),(F<1||F>7)&&(ut=!0)):(j=f._locale._week.dow,se=f._locale._week.doy,$t=Ns(Zt(),j,se),w=bo(p.gg,f._a[Ot],$t.year),S=bo(p.w,$t.week),p.d!=null?(F=p.d,(F<0||F>6)&&(ut=!0)):p.e!=null?(F=p.e+j,(p.e<0||p.e>6)&&(ut=!0)):F=j),S<1||S>xi(w,j,se)?g(f)._overflowWeeks=!0:ut!=null?g(f)._overflowWeekday=!0:(Pe=My(w,S,F,j,se),f._a[Ot]=Pe.year,f._dayOfYear=Pe.dayOfYear)}t.ISO_8601=function(){},t.RFC_2822=function(){};function _f(f){if(f._f===t.ISO_8601){Ly(f);return}if(f._f===t.RFC_2822){Py(f);return}f._a=[],g(f).empty=!0;var p=""+f._i,w,S,F,j,se,Pe=p.length,ut=0,$t,lr;for(F=jt(f._f,f._locale).match(Ce)||[],lr=F.length,w=0;w<lr;w++)j=F[w],S=(p.match(Se(j,f))||[])[0],S&&(se=p.substr(0,p.indexOf(S)),se.length>0&&g(f).unusedInput.push(se),p=p.slice(p.indexOf(S)+S.length),ut+=S.length),it[j]?(S?g(f).empty=!1:g(f).unusedTokens.push(j),Hn(j,S,f)):f._strict&&!S&&g(f).unusedTokens.push(j);g(f).charsLeftOver=Pe-ut,p.length>0&&g(f).unusedInput.push(p),f._a[Yt]<=12&&g(f).bigHour===!0&&f._a[Yt]>0&&(g(f).bigHour=void 0),g(f).parsedDateParts=f._a.slice(0),g(f).meridiem=f._meridiem,f._a[Yt]=$1(f._locale,f._a[Yt],f._meridiem),$t=g(f).era,$t!==null&&(f._a[Ot]=f._locale.erasConvertYear($t,f._a[Ot])),Cf(f),kf(f)}function $1(f,p,w){var S;return w==null?p:f.meridiemHour!=null?f.meridiemHour(p,w):(f.isPM!=null&&(S=f.isPM(w),S&&p<12&&(p+=12),!S&&p===12&&(p=0)),p)}function U1(f){var p,w,S,F,j,se,Pe=!1,ut=f._f.length;if(ut===0){g(f).invalidFormat=!0,f._d=new Date(NaN);return}for(F=0;F<ut;F++)j=0,se=!1,p=x({},f),f._useUTC!=null&&(p._useUTC=f._useUTC),p._f=f._f[F],_f(p),v(p)&&(se=!0),j+=g(p).charsLeftOver,j+=g(p).unusedTokens.length*10,g(p).score=j,Pe?j<S&&(S=j,w=p):(S==null||j<S||se)&&(S=j,w=p,se&&(Pe=!0));d(f,w||p)}function W1(f){if(!f._d){var p=Sr(f._i),w=p.day===void 0?p.date:p.day;f._a=c([p.year,p.month,w,p.hour,p.minute,p.second,p.millisecond],function(S){return S&&parseInt(S,10)}),Cf(f)}}function Y1(f){var p=new O(kf(Ny(f)));return p._nextDay&&(p.add(1,"d"),p._nextDay=void 0),p}function Ny(f){var p=f._i,w=f._f;return f._locale=f._locale||Ci(f._l),p===null||w===void 0&&p===""?D({nullInput:!0}):(typeof p=="string"&&(f._i=p=f._locale.preparse(p)),A(p)?new O(kf(p)):(l(p)?f._d=p:n(w)?U1(f):w?_f(f):z1(f),v(f)||(f._d=null),f))}function z1(f){var p=f._i;s(p)?f._d=new Date(t.now()):l(p)?f._d=new Date(p.valueOf()):typeof p=="string"?H1(f):n(p)?(f._a=c(p.slice(0),function(w){return parseInt(w,10)}),Cf(f)):i(p)?W1(f):u(p)?f._d=new Date(p):t.createFromInputFallback(f)}function Ry(f,p,w,S,F){var j={};return(p===!0||p===!1)&&(S=p,p=void 0),(w===!0||w===!1)&&(S=w,w=void 0),(i(f)&&o(f)||n(f)&&f.length===0)&&(f=void 0),j._isAMomentObject=!0,j._useUTC=j._isUTC=F,j._l=w,j._i=f,j._f=p,j._strict=S,Y1(j)}function Zt(f,p,w,S){return Ry(f,p,w,S,!1)}var K1=B("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var f=Zt.apply(null,arguments);return this.isValid()&&f.isValid()?f<this?this:f:D()}),j1=B("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var f=Zt.apply(null,arguments);return this.isValid()&&f.isValid()?f>this?this:f:D()});function Hy(f,p){var w,S;if(p.length===1&&n(p[0])&&(p=p[0]),!p.length)return Zt();for(w=p[0],S=1;S<p.length;++S)(!p[S].isValid()||p[S][f](w))&&(w=p[S]);return w}function q1(){var f=[].slice.call(arguments,0);return Hy("isBefore",f)}function G1(){var f=[].slice.call(arguments,0);return Hy("isAfter",f)}var J1=function(){return Date.now?Date.now():+new Date},Bs=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Z1(f){var p,w=!1,S,F=Bs.length;for(p in f)if(a(f,p)&&!(_.call(Bs,p)!==-1&&(f[p]==null||!isNaN(f[p]))))return!1;for(S=0;S<F;++S)if(f[Bs[S]]){if(w)return!1;parseFloat(f[Bs[S]])!==Z(f[Bs[S]])&&(w=!0)}return!0}function Q1(){return this._isValid}function X1(){return Zr(NaN)}function iu(f){var p=Sr(f),w=p.year||0,S=p.quarter||0,F=p.month||0,j=p.week||p.isoWeek||0,se=p.day||0,Pe=p.hour||0,ut=p.minute||0,$t=p.second||0,lr=p.millisecond||0;this._isValid=Z1(p),this._milliseconds=+lr+$t*1e3+ut*6e4+Pe*1e3*60*60,this._days=+se+j*7,this._months=+F+S*3+w*12,this._data={},this._locale=Ci(),this._bubble()}function au(f){return f instanceof iu}function Mf(f){return f<0?Math.round(-1*f)*-1:Math.round(f)}function eM(f,p,w){var S=Math.min(f.length,p.length),F=Math.abs(f.length-p.length),j=0,se;for(se=0;se<S;se++)(w&&f[se]!==p[se]||!w&&Z(f[se])!==Z(p[se]))&&j++;return j+F}function By(f,p){N(f,0,0,function(){var w=this.utcOffset(),S="+";return w<0&&(w=-w,S="-"),S+De(~~(w/60),2)+p+De(~~w%60,2)})}By("Z",":"),By("ZZ",""),ae("Z",q),ae("ZZ",q),We(["Z","ZZ"],function(f,p,w){w._useUTC=!0,w._tzm=Tf(q,f)});var tM=/([\+\-]|\d\d)/gi;function Tf(f,p){var w=(p||"").match(f),S,F,j;return w===null?null:(S=w[w.length-1]||[],F=(S+"").match(tM)||["-",0,0],j=+(F[1]*60)+Z(F[2]),j===0?0:F[0]==="+"?j:-j)}function Ff(f,p){var w,S;return p._isUTC?(w=p.clone(),S=(A(f)||l(f)?f.valueOf():Zt(f).valueOf())-w.valueOf(),w._d.setTime(w._d.valueOf()+S),t.updateOffset(w,!1),w):Zt(f).local()}function If(f){return-Math.round(f._d.getTimezoneOffset())}t.updateOffset=function(){};function nM(f,p,w){var S=this._offset||0,F;if(!this.isValid())return f!=null?this:NaN;if(f!=null){if(typeof f=="string"){if(f=Tf(q,f),f===null)return this}else Math.abs(f)<16&&!w&&(f=f*60);return!this._isUTC&&p&&(F=If(this)),this._offset=f,this._isUTC=!0,F!=null&&this.add(F,"m"),S!==f&&(!p||this._changeInProgress?Wy(this,Zr(f-S,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,t.updateOffset(this,!0),this._changeInProgress=null)),this}else return this._isUTC?S:If(this)}function rM(f,p){return f!=null?(typeof f!="string"&&(f=-f),this.utcOffset(f,p),this):-this.utcOffset()}function iM(f){return this.utcOffset(0,f)}function aM(f){return this._isUTC&&(this.utcOffset(0,f),this._isUTC=!1,f&&this.subtract(If(this),"m")),this}function oM(){if(this._tzm!=null)this.utcOffset(this._tzm,!1,!0);else if(typeof this._i=="string"){var f=Tf(H,this._i);f!=null?this.utcOffset(f):this.utcOffset(0,!0)}return this}function sM(f){return this.isValid()?(f=f?Zt(f).utcOffset():0,(this.utcOffset()-f)%60===0):!1}function lM(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function uM(){if(!s(this._isDSTShifted))return this._isDSTShifted;var f={},p;return x(f,this),f=Ny(f),f._a?(p=f._isUTC?m(f._a):Zt(f._a),this._isDSTShifted=this.isValid()&&eM(f._a,p.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function cM(){return this.isValid()?!this._isUTC:!1}function dM(){return this.isValid()?this._isUTC:!1}function Vy(){return this.isValid()?this._isUTC&&this._offset===0:!1}var fM=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,hM=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Zr(f,p){var w=f,S=null,F,j,se;return au(f)?w={ms:f._milliseconds,d:f._days,M:f._months}:u(f)||!isNaN(+f)?(w={},p?w[p]=+f:w.milliseconds=+f):(S=fM.exec(f))?(F=S[1]==="-"?-1:1,w={y:0,d:Z(S[sr])*F,h:Z(S[Yt])*F,m:Z(S[Bn])*F,s:Z(S[Er])*F,ms:Z(Mf(S[Gr]*1e3))*F}):(S=hM.exec(f))?(F=S[1]==="-"?-1:1,w={y:Ha(S[2],F),M:Ha(S[3],F),w:Ha(S[4],F),d:Ha(S[5],F),h:Ha(S[6],F),m:Ha(S[7],F),s:Ha(S[8],F)}):w==null?w={}:typeof w=="object"&&("from"in w||"to"in w)&&(se=mM(Zt(w.from),Zt(w.to)),w={},w.ms=se.milliseconds,w.M=se.months),j=new iu(w),au(f)&&a(f,"_locale")&&(j._locale=f._locale),au(f)&&a(f,"_isValid")&&(j._isValid=f._isValid),j}Zr.fn=iu.prototype,Zr.invalid=X1;function Ha(f,p){var w=f&&parseFloat(f.replace(",","."));return(isNaN(w)?0:w)*p}function $y(f,p){var w={};return w.months=p.month()-f.month()+(p.year()-f.year())*12,f.clone().add(w.months,"M").isAfter(p)&&--w.months,w.milliseconds=+p-+f.clone().add(w.months,"M"),w}function mM(f,p){var w;return f.isValid()&&p.isValid()?(p=Ff(p,f),f.isBefore(p)?w=$y(f,p):(w=$y(p,f),w.milliseconds=-w.milliseconds,w.months=-w.months),w):{milliseconds:0,months:0}}function Uy(f,p){return function(w,S){var F,j;return S!==null&&!isNaN(+S)&&(J(p,"moment()."+p+"(period, number) is deprecated. Please use moment()."+p+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),j=w,w=S,S=j),F=Zr(w,S),Wy(this,F,f),this}}function Wy(f,p,w,S){var F=p._milliseconds,j=Mf(p._days),se=Mf(p._months);f.isValid()&&(S=S==null?!0:S,se&&Qe(f,Ie(f,"Month")+se*w),j&&at(f,"Date",Ie(f,"Date")+j*w),F&&f._d.setTime(f._d.valueOf()+F*w),S&&t.updateOffset(f,j||se))}var pM=Uy(1,"add"),gM=Uy(-1,"subtract");function Yy(f){return typeof f=="string"||f instanceof String}function yM(f){return A(f)||l(f)||Yy(f)||u(f)||wM(f)||vM(f)||f===null||f===void 0}function vM(f){var p=i(f)&&!o(f),w=!1,S=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],F,j,se=S.length;for(F=0;F<se;F+=1)j=S[F],w=w||a(f,j);return p&&w}function wM(f){var p=n(f),w=!1;return p&&(w=f.filter(function(S){return!u(S)&&Yy(f)}).length===0),p&&w}function bM(f){var p=i(f)&&!o(f),w=!1,S=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"],F,j;for(F=0;F<S.length;F+=1)j=S[F],w=w||a(f,j);return p&&w}function DM(f,p){var w=f.diff(p,"days",!0);return w<-6?"sameElse":w<-1?"lastWeek":w<0?"lastDay":w<1?"sameDay":w<2?"nextDay":w<7?"nextWeek":"sameElse"}function SM(f,p){arguments.length===1&&(arguments[0]?yM(arguments[0])?(f=arguments[0],p=void 0):bM(arguments[0])&&(p=arguments[0],f=void 0):(f=void 0,p=void 0));var w=f||Zt(),S=Ff(w,this).startOf("day"),F=t.calendarFormat(this,S)||"sameElse",j=p&&(Q(p[F])?p[F].call(this,w):p[F]);return this.format(j||this.localeData().calendar(F,this,Zt(w)))}function EM(){return new O(this)}function kM(f,p){var w=A(f)?f:Zt(f);return this.isValid()&&w.isValid()?(p=Vt(p)||"millisecond",p==="millisecond"?this.valueOf()>w.valueOf():w.valueOf()<this.clone().startOf(p).valueOf()):!1}function xM(f,p){var w=A(f)?f:Zt(f);return this.isValid()&&w.isValid()?(p=Vt(p)||"millisecond",p==="millisecond"?this.valueOf()<w.valueOf():this.clone().endOf(p).valueOf()<w.valueOf()):!1}function CM(f,p,w,S){var F=A(f)?f:Zt(f),j=A(p)?p:Zt(p);return this.isValid()&&F.isValid()&&j.isValid()?(S=S||"()",(S[0]==="("?this.isAfter(F,w):!this.isBefore(F,w))&&(S[1]===")"?this.isBefore(j,w):!this.isAfter(j,w))):!1}function _M(f,p){var w=A(f)?f:Zt(f),S;return this.isValid()&&w.isValid()?(p=Vt(p)||"millisecond",p==="millisecond"?this.valueOf()===w.valueOf():(S=w.valueOf(),this.clone().startOf(p).valueOf()<=S&&S<=this.clone().endOf(p).valueOf())):!1}function MM(f,p){return this.isSame(f,p)||this.isAfter(f,p)}function TM(f,p){return this.isSame(f,p)||this.isBefore(f,p)}function FM(f,p,w){var S,F,j;if(!this.isValid())return NaN;if(S=Ff(f,this),!S.isValid())return NaN;switch(F=(S.utcOffset()-this.utcOffset())*6e4,p=Vt(p),p){case"year":j=ou(this,S)/12;break;case"month":j=ou(this,S);break;case"quarter":j=ou(this,S)/3;break;case"second":j=(this-S)/1e3;break;case"minute":j=(this-S)/6e4;break;case"hour":j=(this-S)/36e5;break;case"day":j=(this-S-F)/864e5;break;case"week":j=(this-S-F)/6048e5;break;default:j=this-S}return w?j:At(j)}function ou(f,p){if(f.date()<p.date())return-ou(p,f);var w=(p.year()-f.year())*12+(p.month()-f.month()),S=f.clone().add(w,"months"),F,j;return p-S<0?(F=f.clone().add(w-1,"months"),j=(p-S)/(S-F)):(F=f.clone().add(w+1,"months"),j=(p-S)/(F-S)),-(w+j)||0}t.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",t.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";function IM(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function AM(f){if(!this.isValid())return null;var p=f!==!0,w=p?this.clone().utc():this;return w.year()<0||w.year()>9999?Mt(w,p?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):Q(Date.prototype.toISOString)?p?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",Mt(w,"Z")):Mt(w,p?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function OM(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var f="moment",p="",w,S,F,j;return this.isLocal()||(f=this.utcOffset()===0?"moment.utc":"moment.parseZone",p="Z"),w="["+f+'("]',S=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",F="-MM-DD[T]HH:mm:ss.SSS",j=p+'[")]',this.format(w+S+F+j)}function LM(f){f||(f=this.isUtc()?t.defaultFormatUtc:t.defaultFormat);var p=Mt(this,f);return this.localeData().postformat(p)}function PM(f,p){return this.isValid()&&(A(f)&&f.isValid()||Zt(f).isValid())?Zr({to:this,from:f}).locale(this.locale()).humanize(!p):this.localeData().invalidDate()}function NM(f){return this.from(Zt(),f)}function RM(f,p){return this.isValid()&&(A(f)&&f.isValid()||Zt(f).isValid())?Zr({from:this,to:f}).locale(this.locale()).humanize(!p):this.localeData().invalidDate()}function HM(f){return this.to(Zt(),f)}function zy(f){var p;return f===void 0?this._locale._abbr:(p=Ci(f),p!=null&&(this._locale=p),this)}var Ky=B("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(f){return f===void 0?this.localeData():this.locale(f)});function jy(){return this._locale}var su=1e3,Do=60*su,lu=60*Do,qy=(365*400+97)*24*lu;function So(f,p){return(f%p+p)%p}function Gy(f,p,w){return f<100&&f>=0?new Date(f+400,p,w)-qy:new Date(f,p,w).valueOf()}function Jy(f,p,w){return f<100&&f>=0?Date.UTC(f+400,p,w)-qy:Date.UTC(f,p,w)}function BM(f){var p,w;if(f=Vt(f),f===void 0||f==="millisecond"||!this.isValid())return this;switch(w=this._isUTC?Jy:Gy,f){case"year":p=w(this.year(),0,1);break;case"quarter":p=w(this.year(),this.month()-this.month()%3,1);break;case"month":p=w(this.year(),this.month(),1);break;case"week":p=w(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":p=w(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":p=w(this.year(),this.month(),this.date());break;case"hour":p=this._d.valueOf(),p-=So(p+(this._isUTC?0:this.utcOffset()*Do),lu);break;case"minute":p=this._d.valueOf(),p-=So(p,Do);break;case"second":p=this._d.valueOf(),p-=So(p,su);break}return this._d.setTime(p),t.updateOffset(this,!0),this}function VM(f){var p,w;if(f=Vt(f),f===void 0||f==="millisecond"||!this.isValid())return this;switch(w=this._isUTC?Jy:Gy,f){case"year":p=w(this.year()+1,0,1)-1;break;case"quarter":p=w(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":p=w(this.year(),this.month()+1,1)-1;break;case"week":p=w(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":p=w(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":p=w(this.year(),this.month(),this.date()+1)-1;break;case"hour":p=this._d.valueOf(),p+=lu-So(p+(this._isUTC?0:this.utcOffset()*Do),lu)-1;break;case"minute":p=this._d.valueOf(),p+=Do-So(p,Do)-1;break;case"second":p=this._d.valueOf(),p+=su-So(p,su)-1;break}return this._d.setTime(p),t.updateOffset(this,!0),this}function $M(){return this._d.valueOf()-(this._offset||0)*6e4}function UM(){return Math.floor(this.valueOf()/1e3)}function WM(){return new Date(this.valueOf())}function YM(){var f=this;return[f.year(),f.month(),f.date(),f.hour(),f.minute(),f.second(),f.millisecond()]}function zM(){var f=this;return{years:f.year(),months:f.month(),date:f.date(),hours:f.hours(),minutes:f.minutes(),seconds:f.seconds(),milliseconds:f.milliseconds()}}function KM(){return this.isValid()?this.toISOString():null}function jM(){return v(this)}function qM(){return d({},g(this))}function GM(){return g(this).overflow}function JM(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}N("N",0,0,"eraAbbr"),N("NN",0,0,"eraAbbr"),N("NNN",0,0,"eraAbbr"),N("NNNN",0,0,"eraName"),N("NNNNN",0,0,"eraNarrow"),N("y",["y",1],"yo","eraYear"),N("y",["yy",2],0,"eraYear"),N("y",["yyy",3],0,"eraYear"),N("y",["yyyy",4],0,"eraYear"),ae("N",Af),ae("NN",Af),ae("NNN",Af),ae("NNNN",sT),ae("NNNNN",lT),We(["N","NN","NNN","NNNN","NNNNN"],function(f,p,w,S){var F=w._locale.erasParse(f,S,w._strict);F?g(w).era=F:g(w).invalidEra=f}),ae("y",ge),ae("yy",ge),ae("yyy",ge),ae("yyyy",ge),ae("yo",uT),We(["y","yy","yyy","yyyy"],Ot),We(["yo"],function(f,p,w,S){var F;w._locale._eraYearOrdinalRegex&&(F=f.match(w._locale._eraYearOrdinalRegex)),w._locale.eraYearOrdinalParse?p[Ot]=w._locale.eraYearOrdinalParse(f,F):p[Ot]=parseInt(f,10)});function ZM(f,p){var w,S,F,j=this._eras||Ci("en")._eras;for(w=0,S=j.length;w<S;++w){switch(typeof j[w].since){case"string":F=t(j[w].since).startOf("day"),j[w].since=F.valueOf();break}switch(typeof j[w].until){case"undefined":j[w].until=1/0;break;case"string":F=t(j[w].until).startOf("day").valueOf(),j[w].until=F.valueOf();break}}return j}function QM(f,p,w){var S,F,j=this.eras(),se,Pe,ut;for(f=f.toUpperCase(),S=0,F=j.length;S<F;++S)if(se=j[S].name.toUpperCase(),Pe=j[S].abbr.toUpperCase(),ut=j[S].narrow.toUpperCase(),w)switch(p){case"N":case"NN":case"NNN":if(Pe===f)return j[S];break;case"NNNN":if(se===f)return j[S];break;case"NNNNN":if(ut===f)return j[S];break}else if([se,Pe,ut].indexOf(f)>=0)return j[S]}function XM(f,p){var w=f.since<=f.until?1:-1;return p===void 0?t(f.since).year():t(f.since).year()+(p-f.offset)*w}function eT(){var f,p,w,S=this.localeData().eras();for(f=0,p=S.length;f<p;++f)if(w=this.clone().startOf("day").valueOf(),S[f].since<=w&&w<=S[f].until||S[f].until<=w&&w<=S[f].since)return S[f].name;return""}function tT(){var f,p,w,S=this.localeData().eras();for(f=0,p=S.length;f<p;++f)if(w=this.clone().startOf("day").valueOf(),S[f].since<=w&&w<=S[f].until||S[f].until<=w&&w<=S[f].since)return S[f].narrow;return""}function nT(){var f,p,w,S=this.localeData().eras();for(f=0,p=S.length;f<p;++f)if(w=this.clone().startOf("day").valueOf(),S[f].since<=w&&w<=S[f].until||S[f].until<=w&&w<=S[f].since)return S[f].abbr;return""}function rT(){var f,p,w,S,F=this.localeData().eras();for(f=0,p=F.length;f<p;++f)if(w=F[f].since<=F[f].until?1:-1,S=this.clone().startOf("day").valueOf(),F[f].since<=S&&S<=F[f].until||F[f].until<=S&&S<=F[f].since)return(this.year()-t(F[f].since).year())*w+F[f].offset;return this.year()}function iT(f){return a(this,"_erasNameRegex")||Of.call(this),f?this._erasNameRegex:this._erasRegex}function aT(f){return a(this,"_erasAbbrRegex")||Of.call(this),f?this._erasAbbrRegex:this._erasRegex}function oT(f){return a(this,"_erasNarrowRegex")||Of.call(this),f?this._erasNarrowRegex:this._erasRegex}function Af(f,p){return p.erasAbbrRegex(f)}function sT(f,p){return p.erasNameRegex(f)}function lT(f,p){return p.erasNarrowRegex(f)}function uT(f,p){return p._eraYearOrdinalRegex||ge}function Of(){var f=[],p=[],w=[],S=[],F,j,se=this.eras();for(F=0,j=se.length;F<j;++F)p.push(Te(se[F].name)),f.push(Te(se[F].abbr)),w.push(Te(se[F].narrow)),S.push(Te(se[F].name)),S.push(Te(se[F].abbr)),S.push(Te(se[F].narrow));this._erasRegex=new RegExp("^("+S.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+p.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+f.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+w.join("|")+")","i")}N(0,["gg",2],0,function(){return this.weekYear()%100}),N(0,["GG",2],0,function(){return this.isoWeekYear()%100});function uu(f,p){N(0,[f,f.length],0,p)}uu("gggg","weekYear"),uu("ggggg","weekYear"),uu("GGGG","isoWeekYear"),uu("GGGGG","isoWeekYear"),Rt("weekYear","gg"),Rt("isoWeekYear","GG"),Bt("weekYear",1),Bt("isoWeekYear",1),ae("G",M),ae("g",M),ae("GG",L,Ht),ae("gg",L,Ht),ae("GGGG",de,ht),ae("gggg",de,ht),ae("GGGGG",ve,St),ae("ggggg",ve,St),Ft(["gggg","ggggg","GGGG","GGGGG"],function(f,p,w,S){p[S.substr(0,2)]=Z(f)}),Ft(["gg","GG"],function(f,p,w,S){p[S]=t.parseTwoDigitYear(f)});function cT(f){return Zy.call(this,f,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function dT(f){return Zy.call(this,f,this.isoWeek(),this.isoWeekday(),1,4)}function fT(){return xi(this.year(),1,4)}function hT(){return xi(this.isoWeekYear(),1,4)}function mT(){var f=this.localeData()._week;return xi(this.year(),f.dow,f.doy)}function pT(){var f=this.localeData()._week;return xi(this.weekYear(),f.dow,f.doy)}function Zy(f,p,w,S,F){var j;return f==null?Ns(this,S,F).year:(j=xi(f,S,F),p>j&&(p=j),gT.call(this,f,p,w,S,F))}function gT(f,p,w,S,F){var j=My(f,p,w,S,F),se=kr(j.year,0,j.dayOfYear);return this.year(se.getUTCFullYear()),this.month(se.getUTCMonth()),this.date(se.getUTCDate()),this}N("Q",0,"Qo","quarter"),Rt("quarter","Q"),Bt("quarter",7),ae("Q",_n),We("Q",function(f,p){p[or]=(Z(f)-1)*3});function yT(f){return f==null?Math.ceil((this.month()+1)/3):this.month((f-1)*3+this.month()%3)}N("D",["DD",2],"Do","date"),Rt("date","D"),Bt("date",9),ae("D",L),ae("DD",L,Ht),ae("Do",function(f,p){return f?p._dayOfMonthOrdinalParse||p._ordinalParse:p._dayOfMonthOrdinalParseLenient}),We(["D","DD"],sr),We("Do",function(f,p){p[sr]=Z(f.match(L)[0])});var Qy=me("Date",!0);N("DDD",["DDDD",3],"DDDo","dayOfYear"),Rt("dayOfYear","DDD"),Bt("dayOfYear",4),ae("DDD",ue),ae("DDDD",ar),We(["DDD","DDDD"],function(f,p,w){w._dayOfYear=Z(f)});function vT(f){var p=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return f==null?p:this.add(f-p,"d")}N("m",["mm",2],0,"minute"),Rt("minute","m"),Bt("minute",14),ae("m",L),ae("mm",L,Ht),We(["m","mm"],Bn);var wT=me("Minutes",!1);N("s",["ss",2],0,"second"),Rt("second","s"),Bt("second",15),ae("s",L),ae("ss",L,Ht),We(["s","ss"],Er);var bT=me("Seconds",!1);N("S",0,0,function(){return~~(this.millisecond()/100)}),N(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),N(0,["SSS",3],0,"millisecond"),N(0,["SSSS",4],0,function(){return this.millisecond()*10}),N(0,["SSSSS",5],0,function(){return this.millisecond()*100}),N(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3}),N(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4}),N(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5}),N(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6}),Rt("millisecond","ms"),Bt("millisecond",16),ae("S",ue,_n),ae("SS",ue,Ht),ae("SSS",ue,ar);var ra,Xy;for(ra="SSSS";ra.length<=9;ra+="S")ae(ra,ge);function DT(f,p){p[Gr]=Z(("0."+f)*1e3)}for(ra="S";ra.length<=9;ra+="S")We(ra,DT);Xy=me("Milliseconds",!1),N("z",0,0,"zoneAbbr"),N("zz",0,0,"zoneName");function ST(){return this._isUTC?"UTC":""}function ET(){return this._isUTC?"Coordinated Universal Time":""}var we=O.prototype;we.add=pM,we.calendar=SM,we.clone=EM,we.diff=FM,we.endOf=VM,we.format=LM,we.from=PM,we.fromNow=NM,we.to=RM,we.toNow=HM,we.get=Dt,we.invalidAt=GM,we.isAfter=kM,we.isBefore=xM,we.isBetween=CM,we.isSame=_M,we.isSameOrAfter=MM,we.isSameOrBefore=TM,we.isValid=jM,we.lang=Ky,we.locale=zy,we.localeData=jy,we.max=j1,we.min=K1,we.parsingFlags=qM,we.set=Cn,we.startOf=BM,we.subtract=gM,we.toArray=YM,we.toObject=zM,we.toDate=WM,we.toISOString=AM,we.inspect=OM,typeof Symbol!="undefined"&&Symbol.for!=null&&(we[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),we.toJSON=KM,we.toString=IM,we.unix=UM,we.valueOf=$M,we.creationData=JM,we.eraName=eT,we.eraNarrow=tT,we.eraAbbr=nT,we.eraYear=rT,we.year=On,we.isLeapYear=Vn,we.weekYear=cT,we.isoWeekYear=dT,we.quarter=we.quarters=yT,we.month=ot,we.daysInMonth=qe,we.week=we.weeks=Z_,we.isoWeek=we.isoWeeks=Q_,we.weeksInYear=mT,we.weeksInWeekYear=pT,we.isoWeeksInYear=fT,we.isoWeeksInISOWeekYear=hT,we.date=Qy,we.day=we.days=d1,we.weekday=f1,we.isoWeekday=h1,we.dayOfYear=vT,we.hour=we.hours=b1,we.minute=we.minutes=wT,we.second=we.seconds=bT,we.millisecond=we.milliseconds=Xy,we.utcOffset=nM,we.utc=iM,we.local=aM,we.parseZone=oM,we.hasAlignedHourOffset=sM,we.isDST=lM,we.isLocal=cM,we.isUtcOffset=dM,we.isUtc=Vy,we.isUTC=Vy,we.zoneAbbr=ST,we.zoneName=ET,we.dates=B("dates accessor is deprecated. Use date instead.",Qy),we.months=B("months accessor is deprecated. Use month instead",ot),we.years=B("years accessor is deprecated. Use year instead",On),we.zone=B("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",rM),we.isDSTShifted=B("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",uM);function kT(f){return Zt(f*1e3)}function xT(){return Zt.apply(null,arguments).parseZone()}function ev(f){return f}var Lt=re.prototype;Lt.calendar=pe,Lt.longDateFormat=Wt,Lt.invalidDate=Jt,Lt.ordinal=yn,Lt.preparse=ev,Lt.postformat=ev,Lt.relativeTime=xn,Lt.pastFuture=jn,Lt.set=oe,Lt.eras=ZM,Lt.erasParse=QM,Lt.erasConvertYear=XM,Lt.erasAbbrRegex=aT,Lt.erasNameRegex=iT,Lt.erasNarrowRegex=oT,Lt.months=he,Lt.monthsShort=Me,Lt.monthsParse=Le,Lt.monthsRegex=st,Lt.monthsShortRegex=yt,Lt.week=j_,Lt.firstDayOfYear=J_,Lt.firstDayOfWeek=G_,Lt.weekdays=o1,Lt.weekdaysMin=l1,Lt.weekdaysShort=s1,Lt.weekdaysParse=c1,Lt.weekdaysRegex=m1,Lt.weekdaysShortRegex=p1,Lt.weekdaysMinRegex=g1,Lt.isPM=v1,Lt.meridiem=D1;function cu(f,p,w,S){var F=Ci(),j=m().set(S,p);return F[w](j,f)}function tv(f,p,w){if(u(f)&&(p=f,f=void 0),f=f||"",p!=null)return cu(f,p,w,"month");var S,F=[];for(S=0;S<12;S++)F[S]=cu(f,S,w,"month");return F}function Lf(f,p,w,S){typeof f=="boolean"?(u(p)&&(w=p,p=void 0),p=p||""):(p=f,w=p,f=!1,u(p)&&(w=p,p=void 0),p=p||"");var F=Ci(),j=f?F._week.dow:0,se,Pe=[];if(w!=null)return cu(p,(w+j)%7,S,"day");for(se=0;se<7;se++)Pe[se]=cu(p,(se+j)%7,S,"day");return Pe}function CT(f,p){return tv(f,p,"months")}function _T(f,p){return tv(f,p,"monthsShort")}function MT(f,p,w){return Lf(f,p,w,"weekdays")}function TT(f,p,w){return Lf(f,p,w,"weekdaysShort")}function FT(f,p,w){return Lf(f,p,w,"weekdaysMin")}na("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(f){var p=f%10,w=Z(f%100/10)===1?"th":p===1?"st":p===2?"nd":p===3?"rd":"th";return f+w}}),t.lang=B("moment.lang is deprecated. Use moment.locale instead.",na),t.langData=B("moment.langData is deprecated. Use moment.localeData instead.",Ci);var _i=Math.abs;function IT(){var f=this._data;return this._milliseconds=_i(this._milliseconds),this._days=_i(this._days),this._months=_i(this._months),f.milliseconds=_i(f.milliseconds),f.seconds=_i(f.seconds),f.minutes=_i(f.minutes),f.hours=_i(f.hours),f.months=_i(f.months),f.years=_i(f.years),this}function nv(f,p,w,S){var F=Zr(p,w);return f._milliseconds+=S*F._milliseconds,f._days+=S*F._days,f._months+=S*F._months,f._bubble()}function AT(f,p){return nv(this,f,p,1)}function OT(f,p){return nv(this,f,p,-1)}function rv(f){return f<0?Math.floor(f):Math.ceil(f)}function LT(){var f=this._milliseconds,p=this._days,w=this._months,S=this._data,F,j,se,Pe,ut;return f>=0&&p>=0&&w>=0||f<=0&&p<=0&&w<=0||(f+=rv(Pf(w)+p)*864e5,p=0,w=0),S.milliseconds=f%1e3,F=At(f/1e3),S.seconds=F%60,j=At(F/60),S.minutes=j%60,se=At(j/60),S.hours=se%24,p+=At(se/24),ut=At(iv(p)),w+=ut,p-=rv(Pf(ut)),Pe=At(w/12),w%=12,S.days=p,S.months=w,S.years=Pe,this}function iv(f){return f*4800/146097}function Pf(f){return f*146097/4800}function PT(f){if(!this.isValid())return NaN;var p,w,S=this._milliseconds;if(f=Vt(f),f==="month"||f==="quarter"||f==="year")switch(p=this._days+S/864e5,w=this._months+iv(p),f){case"month":return w;case"quarter":return w/3;case"year":return w/12}else switch(p=this._days+Math.round(Pf(this._months)),f){case"week":return p/7+S/6048e5;case"day":return p+S/864e5;case"hour":return p*24+S/36e5;case"minute":return p*1440+S/6e4;case"second":return p*86400+S/1e3;case"millisecond":return Math.floor(p*864e5)+S;default:throw new Error("Unknown unit "+f)}}function NT(){return this.isValid()?this._milliseconds+this._days*864e5+this._months%12*2592e6+Z(this._months/12)*31536e6:NaN}function Mi(f){return function(){return this.as(f)}}var RT=Mi("ms"),HT=Mi("s"),BT=Mi("m"),VT=Mi("h"),$T=Mi("d"),UT=Mi("w"),WT=Mi("M"),YT=Mi("Q"),zT=Mi("y");function KT(){return Zr(this)}function jT(f){return f=Vt(f),this.isValid()?this[f+"s"]():NaN}function Ba(f){return function(){return this.isValid()?this._data[f]:NaN}}var qT=Ba("milliseconds"),GT=Ba("seconds"),JT=Ba("minutes"),ZT=Ba("hours"),QT=Ba("days"),XT=Ba("months"),eF=Ba("years");function tF(){return At(this.days()/7)}var Ti=Math.round,Eo={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function nF(f,p,w,S,F){return F.relativeTime(p||1,!!w,f,S)}function rF(f,p,w,S){var F=Zr(f).abs(),j=Ti(F.as("s")),se=Ti(F.as("m")),Pe=Ti(F.as("h")),ut=Ti(F.as("d")),$t=Ti(F.as("M")),lr=Ti(F.as("w")),Fi=Ti(F.as("y")),ia=j<=w.ss&&["s",j]||j<w.s&&["ss",j]||se<=1&&["m"]||se<w.m&&["mm",se]||Pe<=1&&["h"]||Pe<w.h&&["hh",Pe]||ut<=1&&["d"]||ut<w.d&&["dd",ut];return w.w!=null&&(ia=ia||lr<=1&&["w"]||lr<w.w&&["ww",lr]),ia=ia||$t<=1&&["M"]||$t<w.M&&["MM",$t]||Fi<=1&&["y"]||["yy",Fi],ia[2]=p,ia[3]=+f>0,ia[4]=S,nF.apply(null,ia)}function iF(f){return f===void 0?Ti:typeof f=="function"?(Ti=f,!0):!1}function aF(f,p){return Eo[f]===void 0?!1:p===void 0?Eo[f]:(Eo[f]=p,f==="s"&&(Eo.ss=p-1),!0)}function oF(f,p){if(!this.isValid())return this.localeData().invalidDate();var w=!1,S=Eo,F,j;return typeof f=="object"&&(p=f,f=!1),typeof f=="boolean"&&(w=f),typeof p=="object"&&(S=Object.assign({},Eo,p),p.s!=null&&p.ss==null&&(S.ss=p.s-1)),F=this.localeData(),j=rF(this,!w,S,F),w&&(j=F.pastFuture(+this,j)),F.postformat(j)}var Nf=Math.abs;function ko(f){return(f>0)-(f<0)||+f}function du(){if(!this.isValid())return this.localeData().invalidDate();var f=Nf(this._milliseconds)/1e3,p=Nf(this._days),w=Nf(this._months),S,F,j,se,Pe=this.asSeconds(),ut,$t,lr,Fi;return Pe?(S=At(f/60),F=At(S/60),f%=60,S%=60,j=At(w/12),w%=12,se=f?f.toFixed(3).replace(/\.?0+$/,""):"",ut=Pe<0?"-":"",$t=ko(this._months)!==ko(Pe)?"-":"",lr=ko(this._days)!==ko(Pe)?"-":"",Fi=ko(this._milliseconds)!==ko(Pe)?"-":"",ut+"P"+(j?$t+j+"Y":"")+(w?$t+w+"M":"")+(p?lr+p+"D":"")+(F||S||f?"T":"")+(F?Fi+F+"H":"")+(S?Fi+S+"M":"")+(f?Fi+se+"S":"")):"P0D"}var xt=iu.prototype;xt.isValid=Q1,xt.abs=IT,xt.add=AT,xt.subtract=OT,xt.as=PT,xt.asMilliseconds=RT,xt.asSeconds=HT,xt.asMinutes=BT,xt.asHours=VT,xt.asDays=$T,xt.asWeeks=UT,xt.asMonths=WT,xt.asQuarters=YT,xt.asYears=zT,xt.valueOf=NT,xt._bubble=LT,xt.clone=KT,xt.get=jT,xt.milliseconds=qT,xt.seconds=GT,xt.minutes=JT,xt.hours=ZT,xt.days=QT,xt.weeks=tF,xt.months=XT,xt.years=eF,xt.humanize=oF,xt.toISOString=du,xt.toString=du,xt.toJSON=du,xt.locale=zy,xt.localeData=jy,xt.toIsoString=B("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",du),xt.lang=Ky,N("X",0,0,"unix"),N("x",0,0,"valueOf"),ae("x",M),ae("X",ie),We("X",function(f,p,w){w._d=new Date(parseFloat(f)*1e3)}),We("x",function(f,p,w){w._d=new Date(Z(f))});return t.version="2.29.4",r(Zt),t.fn=we,t.min=q1,t.max=G1,t.now=J1,t.utc=m,t.unix=kT,t.months=CT,t.isDate=l,t.locale=na,t.invalid=D,t.duration=Zr,t.isMoment=A,t.weekdays=MT,t.parseZone=xT,t.localeData=Ci,t.isDuration=au,t.monthsShort=_T,t.weekdaysMin=FT,t.defineLocale=Ef,t.updateLocale=x1,t.locales=C1,t.weekdaysShort=TT,t.normalizeUnits=Vt,t.relativeTimeRounding=iF,t.relativeTimeThreshold=aF,t.calendarFormat=DM,t.prototype=we,t.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},t})});var dx=wn((Fd,_g)=>{(function(t,r){typeof Fd=="object"&&typeof _g=="object"?_g.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Fd=="object"?Fd.Choices=r():t.Choices=r()})(window,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{enumerable:!0,get:a})},r.r=function(n){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},r.t=function(n,i){if(i&1&&(n=r(n)),i&8||i&4&&typeof n=="object"&&n&&n.__esModule)return n;var a=Object.create(null);if(r.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:n}),i&2&&typeof n!="string")for(var o in n)r.d(a,o,function(s){return n[s]}.bind(null,o));return a},r.n=function(n){var i=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="/public/assets/scripts/",r(r.s=4)}([function(e,t,r){"use strict";var n=function(x){return i(x)&&!a(x)};function i(C){return!!C&&typeof C=="object"}function a(C){var x=Object.prototype.toString.call(C);return x==="[object RegExp]"||x==="[object Date]"||u(C)}var o=typeof Symbol=="function"&&Symbol.for,s=o?Symbol.for("react.element"):60103;function u(C){return C.$$typeof===s}function l(C){return Array.isArray(C)?[]:{}}function c(C,x){return x.clone!==!1&&x.isMergeableObject(C)?D(l(C),C,x):C}function d(C,x,O){return C.concat(x).map(function(A){return c(A,O)})}function m(C,x){if(!x.customMerge)return D;var O=x.customMerge(C);return typeof O=="function"?O:D}function h(C){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(C).filter(function(x){return C.propertyIsEnumerable(x)}):[]}function g(C){return Object.keys(C).concat(h(C))}function y(C,x){try{return x in C&&!(Object.hasOwnProperty.call(C,x)&&Object.propertyIsEnumerable.call(C,x))}catch(O){return!1}}function v(C,x,O){var A={};return O.isMergeableObject(C)&&g(C).forEach(function(P){A[P]=c(C[P],O)}),g(x).forEach(function(P){y(C,P)||(!O.isMergeableObject(x[P])||!C[P]?A[P]=c(x[P],O):A[P]=m(P,O)(C[P],x[P],O))}),A}function D(C,x,O){O=O||{},O.arrayMerge=O.arrayMerge||d,O.isMergeableObject=O.isMergeableObject||n,O.cloneUnlessOtherwiseSpecified=c;var A=Array.isArray(x),P=Array.isArray(C),B=A===P;return B?A?O.arrayMerge(C,x,O):v(C,x,O):c(x,O)}D.all=function(x,O){if(!Array.isArray(x))throw new Error("first argument should be an array");return x.reduce(function(A,P){return D(A,P,O)},{})};var I=D;e.exports=I},function(e,t,r){"use strict";(function(n,i){var a=r(3),o;typeof self!="undefined"?o=self:typeof window!="undefined"?o=window:typeof n!="undefined"?o=n:o=i;var s=Object(a.a)(o);t.a=s}).call(this,r(5),r(6)(e))},function(e,t,r){(function(n,i){e.exports=i()})(this,function(){return function(n){var i={};function a(o){if(i[o])return i[o].exports;var s=i[o]={i:o,l:!1,exports:{}};return n[o].call(s.exports,s,s.exports,a),s.l=!0,s.exports}return a.m=n,a.c=i,a.d=function(o,s,u){a.o(o,s)||Object.defineProperty(o,s,{enumerable:!0,get:u})},a.r=function(o){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},a.t=function(o,s){if(1&s&&(o=a(o)),8&s||4&s&&typeof o=="object"&&o&&o.__esModule)return o;var u=Object.create(null);if(a.r(u),Object.defineProperty(u,"default",{enumerable:!0,value:o}),2&s&&typeof o!="string")for(var l in o)a.d(u,l,function(c){return o[c]}.bind(null,l));return u},a.n=function(o){var s=o&&o.__esModule?function(){return o.default}:function(){return o};return a.d(s,"a",s),s},a.o=function(o,s){return Object.prototype.hasOwnProperty.call(o,s)},a.p="",a(a.s=1)}([function(n,i){n.exports=function(a){return Array.isArray?Array.isArray(a):Object.prototype.toString.call(a)==="[object Array]"}},function(n,i,a){function o(m){return(o=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(h){return typeof h}:function(h){return h&&typeof Symbol=="function"&&h.constructor===Symbol&&h!==Symbol.prototype?"symbol":typeof h})(m)}function s(m,h){for(var g=0;g<h.length;g++){var y=h[g];y.enumerable=y.enumerable||!1,y.configurable=!0,"value"in y&&(y.writable=!0),Object.defineProperty(m,y.key,y)}}var u=a(2),l=a(8),c=a(0),d=function(){function m(v,D){var I=D.location,C=I===void 0?0:I,x=D.distance,O=x===void 0?100:x,A=D.threshold,P=A===void 0?.6:A,B=D.maxPatternLength,G=B===void 0?32:B,J=D.caseSensitive,Q=J!==void 0&&J,oe=D.tokenSeparator,te=oe===void 0?/ +/g:oe,re=D.findAllMatches,ne=re!==void 0&&re,be=D.minMatchCharLength,pe=be===void 0?1:be,De=D.id,Ce=De===void 0?null:De,U=D.keys,Je=U===void 0?[]:U,it=D.shouldSort,N=it===void 0||it,Ze=D.getFn,It=Ze===void 0?l:Ze,Mt=D.sortFn,jt=Mt===void 0?function(sn,Rt){return sn.score-Rt.score}:Mt,vt=D.tokenize,Wt=vt!==void 0&&vt,Tt=D.matchAllTokens,Jt=Tt!==void 0&&Tt,en=D.includeMatches,gn=en!==void 0&&en,yn=D.includeScore,vn=yn!==void 0&&yn,xn=D.verbose,jn=xn!==void 0&&xn;(function(sn,Rt){if(!(sn instanceof Rt))throw new TypeError("Cannot call a class as a function")})(this,m),this.options={location:C,distance:O,threshold:P,maxPatternLength:G,isCaseSensitive:Q,tokenSeparator:te,findAllMatches:ne,minMatchCharLength:pe,id:Ce,keys:Je,includeMatches:gn,includeScore:vn,shouldSort:N,getFn:It,sortFn:jt,verbose:jn,tokenize:Wt,matchAllTokens:Jt},this.setCollection(v)}var h,g,y;return h=m,(g=[{key:"setCollection",value:function(v){return this.list=v,v}},{key:"search",value:function(v){var D=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{limit:!1};this._log(`--------- +Search pattern: "`.concat(v,'"'));var I=this._prepareSearchers(v),C=I.tokenSearchers,x=I.fullSearcher,O=this._search(C,x),A=O.weights,P=O.results;return this._computeScore(A,P),this.options.shouldSort&&this._sort(P),D.limit&&typeof D.limit=="number"&&(P=P.slice(0,D.limit)),this._format(P)}},{key:"_prepareSearchers",value:function(){var v=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",D=[];if(this.options.tokenize)for(var I=v.split(this.options.tokenSeparator),C=0,x=I.length;C<x;C+=1)D.push(new u(I[C],this.options));return{tokenSearchers:D,fullSearcher:new u(v,this.options)}}},{key:"_search",value:function(){var v=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],D=arguments.length>1?arguments[1]:void 0,I=this.list,C={},x=[];if(typeof I[0]=="string"){for(var O=0,A=I.length;O<A;O+=1)this._analyze({key:"",value:I[O],record:O,index:O},{resultMap:C,results:x,tokenSearchers:v,fullSearcher:D});return{weights:null,results:x}}for(var P={},B=0,G=I.length;B<G;B+=1)for(var J=I[B],Q=0,oe=this.options.keys.length;Q<oe;Q+=1){var te=this.options.keys[Q];if(typeof te!="string"){if(P[te.name]={weight:1-te.weight||1},te.weight<=0||te.weight>1)throw new Error("Key weight has to be > 0 and <= 1");te=te.name}else P[te]={weight:1};this._analyze({key:te,value:this.options.getFn(J,te),record:J,index:B},{resultMap:C,results:x,tokenSearchers:v,fullSearcher:D})}return{weights:P,results:x}}},{key:"_analyze",value:function(v,D){var I=v.key,C=v.arrayIndex,x=C===void 0?-1:C,O=v.value,A=v.record,P=v.index,B=D.tokenSearchers,G=B===void 0?[]:B,J=D.fullSearcher,Q=J===void 0?[]:J,oe=D.resultMap,te=oe===void 0?{}:oe,re=D.results,ne=re===void 0?[]:re;if(O!=null){var be=!1,pe=-1,De=0;if(typeof O=="string"){this._log(` +Key: `.concat(I===""?"-":I));var Ce=Q.search(O);if(this._log('Full text: "'.concat(O,'", score: ').concat(Ce.score)),this.options.tokenize){for(var U=O.split(this.options.tokenSeparator),Je=[],it=0;it<G.length;it+=1){var N=G[it];this._log(` +Pattern: "`.concat(N.pattern,'"'));for(var Ze=!1,It=0;It<U.length;It+=1){var Mt=U[It],jt=N.search(Mt),vt={};jt.isMatch?(vt[Mt]=jt.score,be=!0,Ze=!0,Je.push(jt.score)):(vt[Mt]=1,this.options.matchAllTokens||Je.push(1)),this._log('Token: "'.concat(Mt,'", score: ').concat(vt[Mt]))}Ze&&(De+=1)}pe=Je[0];for(var Wt=Je.length,Tt=1;Tt<Wt;Tt+=1)pe+=Je[Tt];pe/=Wt,this._log("Token score average:",pe)}var Jt=Ce.score;pe>-1&&(Jt=(Jt+pe)/2),this._log("Score average:",Jt);var en=!this.options.tokenize||!this.options.matchAllTokens||De>=G.length;if(this._log(` +Check Matches: `.concat(en)),(be||Ce.isMatch)&&en){var gn=te[P];gn?gn.output.push({key:I,arrayIndex:x,value:O,score:Jt,matchedIndices:Ce.matchedIndices}):(te[P]={item:A,output:[{key:I,arrayIndex:x,value:O,score:Jt,matchedIndices:Ce.matchedIndices}]},ne.push(te[P]))}}else if(c(O))for(var yn=0,vn=O.length;yn<vn;yn+=1)this._analyze({key:I,arrayIndex:yn,value:O[yn],record:A,index:P},{resultMap:te,results:ne,tokenSearchers:G,fullSearcher:Q})}}},{key:"_computeScore",value:function(v,D){this._log(` + +Computing score: +`);for(var I=0,C=D.length;I<C;I+=1){for(var x=D[I].output,O=x.length,A=1,P=1,B=0;B<O;B+=1){var G=v?v[x[B].key].weight:1,J=(G===1?x[B].score:x[B].score||.001)*G;G!==1?P=Math.min(P,J):(x[B].nScore=J,A*=J)}D[I].score=P===1?A:P,this._log(D[I])}}},{key:"_sort",value:function(v){this._log(` + +Sorting....`),v.sort(this.options.sortFn)}},{key:"_format",value:function(v){var D=[];if(this.options.verbose){var I=[];this._log(` + +Output: + +`,JSON.stringify(v,function(J,Q){if(o(Q)==="object"&&Q!==null){if(I.indexOf(Q)!==-1)return;I.push(Q)}return Q})),I=null}var C=[];this.options.includeMatches&&C.push(function(J,Q){var oe=J.output;Q.matches=[];for(var te=0,re=oe.length;te<re;te+=1){var ne=oe[te];if(ne.matchedIndices.length!==0){var be={indices:ne.matchedIndices,value:ne.value};ne.key&&(be.key=ne.key),ne.hasOwnProperty("arrayIndex")&&ne.arrayIndex>-1&&(be.arrayIndex=ne.arrayIndex),Q.matches.push(be)}}}),this.options.includeScore&&C.push(function(J,Q){Q.score=J.score});for(var x=0,O=v.length;x<O;x+=1){var A=v[x];if(this.options.id&&(A.item=this.options.getFn(A.item,this.options.id)[0]),C.length){for(var P={item:A.item},B=0,G=C.length;B<G;B+=1)C[B](A,P);D.push(P)}else D.push(A.item)}return D}},{key:"_log",value:function(){var v;this.options.verbose&&(v=console).log.apply(v,arguments)}}])&&s(h.prototype,g),y&&s(h,y),m}();n.exports=d},function(n,i,a){function o(d,m){for(var h=0;h<m.length;h++){var g=m[h];g.enumerable=g.enumerable||!1,g.configurable=!0,"value"in g&&(g.writable=!0),Object.defineProperty(d,g.key,g)}}var s=a(3),u=a(4),l=a(7),c=function(){function d(y,v){var D=v.location,I=D===void 0?0:D,C=v.distance,x=C===void 0?100:C,O=v.threshold,A=O===void 0?.6:O,P=v.maxPatternLength,B=P===void 0?32:P,G=v.isCaseSensitive,J=G!==void 0&&G,Q=v.tokenSeparator,oe=Q===void 0?/ +/g:Q,te=v.findAllMatches,re=te!==void 0&&te,ne=v.minMatchCharLength,be=ne===void 0?1:ne;(function(pe,De){if(!(pe instanceof De))throw new TypeError("Cannot call a class as a function")})(this,d),this.options={location:I,distance:x,threshold:A,maxPatternLength:B,isCaseSensitive:J,tokenSeparator:oe,findAllMatches:re,minMatchCharLength:be},this.pattern=this.options.isCaseSensitive?y:y.toLowerCase(),this.pattern.length<=B&&(this.patternAlphabet=l(this.pattern))}var m,h,g;return m=d,(h=[{key:"search",value:function(y){if(this.options.isCaseSensitive||(y=y.toLowerCase()),this.pattern===y)return{isMatch:!0,score:0,matchedIndices:[[0,y.length-1]]};var v=this.options,D=v.maxPatternLength,I=v.tokenSeparator;if(this.pattern.length>D)return s(y,this.pattern,I);var C=this.options,x=C.location,O=C.distance,A=C.threshold,P=C.findAllMatches,B=C.minMatchCharLength;return u(y,this.pattern,this.patternAlphabet,{location:x,distance:O,threshold:A,findAllMatches:P,minMatchCharLength:B})}}])&&o(m.prototype,h),g&&o(m,g),d}();n.exports=c},function(n,i){var a=/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g;n.exports=function(o,s){var u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:/ +/g,l=new RegExp(s.replace(a,"\\$&").replace(u,"|")),c=o.match(l),d=!!c,m=[];if(d)for(var h=0,g=c.length;h<g;h+=1){var y=c[h];m.push([o.indexOf(y),y.length-1])}return{score:d?.5:1,isMatch:d,matchedIndices:m}}},function(n,i,a){var o=a(5),s=a(6);n.exports=function(u,l,c,d){for(var m=d.location,h=m===void 0?0:m,g=d.distance,y=g===void 0?100:g,v=d.threshold,D=v===void 0?.6:v,I=d.findAllMatches,C=I!==void 0&&I,x=d.minMatchCharLength,O=x===void 0?1:x,A=h,P=u.length,B=D,G=u.indexOf(l,A),J=l.length,Q=[],oe=0;oe<P;oe+=1)Q[oe]=0;if(G!==-1){var te=o(l,{errors:0,currentLocation:G,expectedLocation:A,distance:y});if(B=Math.min(te,B),(G=u.lastIndexOf(l,A+J))!==-1){var re=o(l,{errors:0,currentLocation:G,expectedLocation:A,distance:y});B=Math.min(re,B)}}G=-1;for(var ne=[],be=1,pe=J+P,De=1<<J-1,Ce=0;Ce<J;Ce+=1){for(var U=0,Je=pe;U<Je;)o(l,{errors:Ce,currentLocation:A+Je,expectedLocation:A,distance:y})<=B?U=Je:pe=Je,Je=Math.floor((pe-U)/2+U);pe=Je;var it=Math.max(1,A-Je+1),N=C?P:Math.min(A+Je,P)+J,Ze=Array(N+2);Ze[N+1]=(1<<Ce)-1;for(var It=N;It>=it;It-=1){var Mt=It-1,jt=c[u.charAt(Mt)];if(jt&&(Q[Mt]=1),Ze[It]=(Ze[It+1]<<1|1)&jt,Ce!==0&&(Ze[It]|=(ne[It+1]|ne[It])<<1|1|ne[It+1]),Ze[It]&De&&(be=o(l,{errors:Ce,currentLocation:Mt,expectedLocation:A,distance:y}))<=B){if(B=be,(G=Mt)<=A)break;it=Math.max(1,2*A-G)}}if(o(l,{errors:Ce+1,currentLocation:A,expectedLocation:A,distance:y})>B)break;ne=Ze}return{isMatch:G>=0,score:be===0?.001:be,matchedIndices:s(Q,O)}}},function(n,i){n.exports=function(a,o){var s=o.errors,u=s===void 0?0:s,l=o.currentLocation,c=l===void 0?0:l,d=o.expectedLocation,m=d===void 0?0:d,h=o.distance,g=h===void 0?100:h,y=u/a.length,v=Math.abs(m-c);return g?y+v/g:v?1:y}},function(n,i){n.exports=function(){for(var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,s=[],u=-1,l=-1,c=0,d=a.length;c<d;c+=1){var m=a[c];m&&u===-1?u=c:m||u===-1||((l=c-1)-u+1>=o&&s.push([u,l]),u=-1)}return a[c-1]&&c-u>=o&&s.push([u,c-1]),s}},function(n,i){n.exports=function(a){for(var o={},s=a.length,u=0;u<s;u+=1)o[a.charAt(u)]=0;for(var l=0;l<s;l+=1)o[a.charAt(l)]|=1<<s-l-1;return o}},function(n,i,a){var o=a(0);n.exports=function(s,u){return function l(c,d,m){if(d){var h=d.indexOf("."),g=d,y=null;h!==-1&&(g=d.slice(0,h),y=d.slice(h+1));var v=c[g];if(v!=null)if(y||typeof v!="string"&&typeof v!="number")if(o(v))for(var D=0,I=v.length;D<I;D+=1)l(v[D],y,m);else y&&l(v,y,m);else m.push(v.toString())}else m.push(c);return m}(s,u,[])}}])})},function(e,t,r){"use strict";r.d(t,"a",function(){return n});function n(i){var a,o=i.Symbol;return typeof o=="function"?o.observable?a=o.observable:(a=o("observable"),o.observable=a):a="@@observable",a}},function(e,t,r){e.exports=r(7)},function(e,t){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(n){typeof window=="object"&&(r=window)}e.exports=r},function(e,t){e.exports=function(r){if(!r.webpackPolyfill){var n=Object.create(r);n.children||(n.children=[]),Object.defineProperty(n,"loaded",{enumerable:!0,get:function(){return n.l}}),Object.defineProperty(n,"id",{enumerable:!0,get:function(){return n.i}}),Object.defineProperty(n,"exports",{enumerable:!0}),n.webpackPolyfill=1}return n}},function(e,t,r){"use strict";r.r(t);var n=r(2),i=r.n(n),a=r(0),o=r.n(a),s=r(1),u=function(){return Math.random().toString(36).substring(7).split("").join(".")},l={INIT:"@@redux/INIT"+u(),REPLACE:"@@redux/REPLACE"+u(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+u()}};function c(z){if(typeof z!="object"||z===null)return!1;for(var k=z;Object.getPrototypeOf(k)!==null;)k=Object.getPrototypeOf(k);return Object.getPrototypeOf(z)===k}function d(z,k,_){var b;if(typeof k=="function"&&typeof _=="function"||typeof _=="function"&&typeof arguments[3]=="function")throw new Error("It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function.");if(typeof k=="function"&&typeof _=="undefined"&&(_=k,k=void 0),typeof _!="undefined"){if(typeof _!="function")throw new Error("Expected the enhancer to be a function.");return _(d)(z,k)}if(typeof z!="function")throw new Error("Expected the reducer to be a function.");var T=z,V=k,Y=[],X=Y,le=!1;function he(){X===Y&&(X=Y.slice())}function Me(){if(le)throw new Error("You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.");return V}function Ve(qe){if(typeof qe!="function")throw new Error("Expected the listener to be a function.");if(le)throw new Error("You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api-reference/store#subscribe(listener) for more details.");var yt=!0;return he(),X.push(qe),function(){if(yt){if(le)throw new Error("You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api-reference/store#subscribe(listener) for more details.");yt=!1,he();var lt=X.indexOf(qe);X.splice(lt,1)}}}function Le(qe){if(!c(qe))throw new Error("Actions must be plain objects. Use custom middleware for async actions.");if(typeof qe.type=="undefined")throw new Error('Actions may not have an undefined "type" property. Have you misspelled a constant?');if(le)throw new Error("Reducers may not dispatch actions.");try{le=!0,V=T(V,qe)}finally{le=!1}for(var yt=Y=X,st=0;st<yt.length;st++){var lt=yt[st];lt()}return qe}function Qe(qe){if(typeof qe!="function")throw new Error("Expected the nextReducer to be a function.");T=qe,Le({type:l.REPLACE})}function ot(){var qe,yt=Ve;return qe={subscribe:function(lt){if(typeof lt!="object"||lt===null)throw new TypeError("Expected the observer to be an object.");function qt(){lt.next&<.next(Me())}qt();var On=yt(qt);return{unsubscribe:On}}},qe[s.a]=function(){return this},qe}return Le({type:l.INIT}),b={dispatch:Le,subscribe:Ve,getState:Me,replaceReducer:Qe},b[s.a]=ot,b}function m(z){typeof console!="undefined"&&typeof console.error=="function"&&console.error(z);try{throw new Error(z)}catch(k){}}function h(z,k){var _=k&&k.type,b=_&&'action "'+String(_)+'"'||"an action";return"Given "+b+', reducer "'+z+'" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.'}function g(z,k,_,b){var T=Object.keys(k),V=_&&_.type===l.INIT?"preloadedState argument passed to createStore":"previous state received by the reducer";if(T.length===0)return"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.";if(!c(z))return"The "+V+' has unexpected type of "'+{}.toString.call(z).match(/\s([a-z|A-Z]+)/)[1]+'". Expected argument to be an object with the following '+('keys: "'+T.join('", "')+'"');var Y=Object.keys(z).filter(function(X){return!k.hasOwnProperty(X)&&!b[X]});if(Y.forEach(function(X){b[X]=!0}),!(_&&_.type===l.REPLACE)&&Y.length>0)return"Unexpected "+(Y.length>1?"keys":"key")+" "+('"'+Y.join('", "')+'" found in '+V+". ")+"Expected to find one of the known reducer keys instead: "+('"'+T.join('", "')+'". Unexpected keys will be ignored.')}function y(z){Object.keys(z).forEach(function(k){var _=z[k],b=_(void 0,{type:l.INIT});if(typeof b=="undefined")throw new Error('Reducer "'+k+`" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);if(typeof _(void 0,{type:l.PROBE_UNKNOWN_ACTION()})=="undefined")throw new Error('Reducer "'+k+'" returned undefined when probed with a random type. '+("Don't try to handle "+l.INIT+' or other actions in "redux/*" ')+"namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.")})}function v(z){for(var k=Object.keys(z),_={},b=0;b<k.length;b++){var T=k[b];typeof z[T]=="function"&&(_[T]=z[T])}var V=Object.keys(_),Y,X;try{y(_)}catch(le){X=le}return function(he,Me){if(he===void 0&&(he={}),X)throw X;if(0)var Ve;for(var Le=!1,Qe={},ot=0;ot<V.length;ot++){var qe=V[ot],yt=_[qe],st=he[qe],lt=yt(st,Me);if(typeof lt=="undefined"){var qt=h(qe,Me);throw new Error(qt)}Qe[qe]=lt,Le=Le||lt!==st}return Le?Qe:he}}function D(z,k){return function(){return k(z.apply(this,arguments))}}function I(z,k){if(typeof z=="function")return D(z,k);if(typeof z!="object"||z===null)throw new Error("bindActionCreators expected an object or a function, instead received "+(z===null?"null":typeof z)+'. Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?');var _={};for(var b in z){var T=z[b];typeof T=="function"&&(_[b]=D(T,k))}return _}function C(z,k,_){return k in z?Object.defineProperty(z,k,{value:_,enumerable:!0,configurable:!0,writable:!0}):z[k]=_,z}function x(z,k){var _=Object.keys(z);return Object.getOwnPropertySymbols&&_.push.apply(_,Object.getOwnPropertySymbols(z)),k&&(_=_.filter(function(b){return Object.getOwnPropertyDescriptor(z,b).enumerable})),_}function O(z){for(var k=1;k<arguments.length;k++){var _=arguments[k]!=null?arguments[k]:{};k%2?x(_,!0).forEach(function(b){C(z,b,_[b])}):Object.getOwnPropertyDescriptors?Object.defineProperties(z,Object.getOwnPropertyDescriptors(_)):x(_).forEach(function(b){Object.defineProperty(z,b,Object.getOwnPropertyDescriptor(_,b))})}return z}function A(){for(var z=arguments.length,k=new Array(z),_=0;_<z;_++)k[_]=arguments[_];return k.length===0?function(b){return b}:k.length===1?k[0]:k.reduce(function(b,T){return function(){return b(T.apply(void 0,arguments))}})}function P(){for(var z=arguments.length,k=new Array(z),_=0;_<z;_++)k[_]=arguments[_];return function(b){return function(){var T=b.apply(void 0,arguments),V=function(){throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")},Y={getState:T.getState,dispatch:function(){return V.apply(void 0,arguments)}},X=k.map(function(le){return le(Y)});return V=A.apply(void 0,X)(T.dispatch),O({},T,{dispatch:V})}}}function B(){}var G=[];function J(z,k){switch(z===void 0&&(z=G),k.type){case"ADD_ITEM":{var _=[].concat(z,[{id:k.id,choiceId:k.choiceId,groupId:k.groupId,value:k.value,label:k.label,active:!0,highlighted:!1,customProperties:k.customProperties,placeholder:k.placeholder||!1,keyCode:null}]);return _.map(function(b){var T=b;return T.highlighted=!1,T})}case"REMOVE_ITEM":return z.map(function(b){var T=b;return T.id===k.id&&(T.active=!1),T});case"HIGHLIGHT_ITEM":return z.map(function(b){var T=b;return T.id===k.id&&(T.highlighted=k.highlighted),T});default:return z}}var Q=[];function oe(z,k){switch(z===void 0&&(z=Q),k.type){case"ADD_GROUP":return[].concat(z,[{id:k.id,value:k.value,active:k.active,disabled:k.disabled}]);case"CLEAR_CHOICES":return[];default:return z}}var te=[];function re(z,k){switch(z===void 0&&(z=te),k.type){case"ADD_CHOICE":return[].concat(z,[{id:k.id,elementId:k.elementId,groupId:k.groupId,value:k.value,label:k.label||k.value,disabled:k.disabled||!1,selected:!1,active:!0,score:9999,customProperties:k.customProperties,placeholder:k.placeholder||!1,keyCode:null}]);case"ADD_ITEM":return k.activateOptions?z.map(function(_){var b=_;return b.active=k.active,b}):k.choiceId>-1?z.map(function(_){var b=_;return b.id===parseInt(k.choiceId,10)&&(b.selected=!0),b}):z;case"REMOVE_ITEM":return k.choiceId>-1?z.map(function(_){var b=_;return b.id===parseInt(k.choiceId,10)&&(b.selected=!1),b}):z;case"FILTER_CHOICES":return z.map(function(_){var b=_;return b.active=k.results.some(function(T){var V=T.item,Y=T.score;return V.id===b.id?(b.score=Y,!0):!1}),b});case"ACTIVATE_CHOICES":return z.map(function(_){var b=_;return b.active=k.active,b});case"CLEAR_CHOICES":return te;default:return z}}var ne={loading:!1},be=function(k,_){switch(k===void 0&&(k=ne),_.type){case"SET_IS_LOADING":return{loading:_.isLoading};default:return k}},pe=be,De=function(k,_){return Math.floor(Math.random()*(_-k)+k)},Ce=function(k){return Array.from({length:k},function(){return De(0,36).toString(36)}).join("")},U=function(k,_){var b=k.id||k.name&&k.name+"-"+Ce(2)||Ce(4);return b=b.replace(/(:|\.|\[|\]|,)/g,""),b=_+"-"+b,b},Je=function(k){return Object.prototype.toString.call(k).slice(8,-1)},it=function(k,_){return _!=null&&Je(_)===k},N=function(k,_){return _===void 0&&(_=document.createElement("div")),k.nextSibling?k.parentNode.insertBefore(_,k.nextSibling):k.parentNode.appendChild(_),_.appendChild(k)},Ze=function(k,_,b){if(b===void 0&&(b=1),!(!(k instanceof Element)||typeof _!="string")){for(var T=(b>0?"next":"previous")+"ElementSibling",V=k[T];V;){if(V.matches(_))return V;V=V[T]}return V}},It=function(k,_,b){if(b===void 0&&(b=1),!k)return!1;var T;return b>0?T=_.scrollTop+_.offsetHeight>=k.offsetTop+k.offsetHeight:T=k.offsetTop>=_.scrollTop,T},Mt=function(k){return typeof k!="string"?k:k.replace(/&/g,"&").replace(/>/g,"&rt;").replace(/</g,"<").replace(/"/g,""")},jt=function(){var z=document.createElement("div");return function(k){var _=k.trim();z.innerHTML=_;for(var b=z.children[0];z.firstChild;)z.removeChild(z.firstChild);return b}}(),vt=function(k,_){var b=k.value,T=k.label,V=T===void 0?b:T,Y=_.value,X=_.label,le=X===void 0?Y:X;return V.localeCompare(le,[],{sensitivity:"base",ignorePunctuation:!0,numeric:!0})},Wt=function(k,_){return k.score-_.score},Tt=function(k,_,b){b===void 0&&(b=null);var T=new CustomEvent(_,{detail:b,bubbles:!0,cancelable:!0});return k.dispatchEvent(T)},Jt=function(k,_,b){return b===void 0&&(b="value"),k.some(function(T){return typeof _=="string"?T[b]===_.trim():T[b]===_})},en=function(k){return JSON.parse(JSON.stringify(k))},gn=function(k,_){var b=Object.keys(k).sort(),T=Object.keys(_).sort();return b.filter(function(V){return T.indexOf(V)<0})},yn=v({items:J,groups:oe,choices:re,general:pe}),vn=function(k,_){var b=k;if(_.type==="CLEAR_ALL")b=void 0;else if(_.type==="RESET_TO")return en(_.state);return yn(b,_)},xn=vn;function jn(z,k){for(var _=0;_<k.length;_++){var b=k[_];b.enumerable=b.enumerable||!1,b.configurable=!0,"value"in b&&(b.writable=!0),Object.defineProperty(z,b.key,b)}}function sn(z,k,_){return k&&jn(z.prototype,k),_&&jn(z,_),z}var Rt=function(){function z(){this._store=d(xn,window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__())}var k=z.prototype;return k.subscribe=function(b){this._store.subscribe(b)},k.dispatch=function(b){this._store.dispatch(b)},k.isLoading=function(){return this.state.general.loading},k.getChoiceById=function(b){return this.activeChoices.find(function(T){return T.id===parseInt(b,10)})},k.getGroupById=function(b){return this.groups.find(function(T){return T.id===b})},sn(z,[{key:"state",get:function(){return this._store.getState()}},{key:"items",get:function(){return this.state.items}},{key:"activeItems",get:function(){return this.items.filter(function(b){return b.active===!0})}},{key:"highlightedActiveItems",get:function(){return this.items.filter(function(b){return b.active&&b.highlighted})}},{key:"choices",get:function(){return this.state.choices}},{key:"activeChoices",get:function(){return this.choices.filter(function(b){return b.active===!0})}},{key:"selectableChoices",get:function(){return this.choices.filter(function(b){return b.disabled!==!0})}},{key:"searchableChoices",get:function(){return this.selectableChoices.filter(function(b){return b.placeholder!==!0})}},{key:"placeholderChoice",get:function(){return[].concat(this.choices).reverse().find(function(b){return b.placeholder===!0})}},{key:"groups",get:function(){return this.state.groups}},{key:"activeGroups",get:function(){var b=this.groups,T=this.choices;return b.filter(function(V){var Y=V.active===!0&&V.disabled===!1,X=T.some(function(le){return le.active===!0&&le.disabled===!1});return Y&&X},[])}}]),z}();function Vt(z,k){for(var _=0;_<k.length;_++){var b=k[_];b.enumerable=b.enumerable||!1,b.configurable=!0,"value"in b&&(b.writable=!0),Object.defineProperty(z,b.key,b)}}function Sr(z,k,_){return k&&Vt(z.prototype,k),_&&Vt(z,_),z}var Rr=function(){function z(_){var b=_.element,T=_.type,V=_.classNames;this.element=b,this.classNames=V,this.type=T,this.isActive=!1}var k=z.prototype;return k.getChild=function(b){return this.element.querySelector(b)},k.show=function(){return this.element.classList.add(this.classNames.activeState),this.element.setAttribute("aria-expanded","true"),this.isActive=!0,this},k.hide=function(){return this.element.classList.remove(this.classNames.activeState),this.element.setAttribute("aria-expanded","false"),this.isActive=!1,this},Sr(z,[{key:"distanceFromTopWindow",get:function(){return this.element.getBoundingClientRect().bottom}}]),z}(),Bt={containerOuter:"choices",containerInner:"choices__inner",input:"choices__input",inputCloned:"choices__input--cloned",list:"choices__list",listItems:"choices__list--multiple",listSingle:"choices__list--single",listDropdown:"choices__list--dropdown",item:"choices__item",itemSelectable:"choices__item--selectable",itemDisabled:"choices__item--disabled",itemChoice:"choices__item--choice",placeholder:"choices__placeholder",group:"choices__group",groupHeading:"choices__heading",button:"choices__button",activeState:"is-active",focusState:"is-focused",openState:"is-open",disabledState:"is-disabled",highlightedState:"is-highlighted",selectedState:"is-selected",flippedState:"is-flipped",loadingState:"is-loading",noResults:"has-no-results",noChoices:"has-no-choices"},Hr={items:[],choices:[],silent:!1,renderChoiceLimit:-1,maxItemCount:-1,addItems:!0,addItemFilter:null,removeItems:!0,removeItemButton:!1,editItems:!1,duplicateItemsAllowed:!0,delimiter:",",paste:!0,searchEnabled:!0,searchChoices:!0,searchFloor:1,searchResultLimit:4,searchFields:["label","value"],position:"auto",resetScrollPosition:!0,shouldSort:!0,shouldSortItems:!1,sorter:vt,placeholder:!0,placeholderValue:null,searchPlaceholderValue:null,prependValue:null,appendValue:null,renderSelectedChoices:"auto",loadingText:"Loading...",noResultsText:"No results found",noChoicesText:"No choices to choose from",itemSelectText:"Press to select",uniqueItemText:"Only unique values can be added",customAddItemText:"Only values matching specific conditions can be added",addItemText:function(k){return'Press Enter to add <b>"'+Mt(k)+'"</b>'},maxItemText:function(k){return"Only "+k+" values can be added"},valueComparer:function(k,_){return k===_},fuseOptions:{includeScore:!0},callbackOnInit:null,callbackOnCreateTemplates:null,classNames:Bt},rn={showDropdown:"showDropdown",hideDropdown:"hideDropdown",change:"change",choice:"choice",search:"search",addItem:"addItem",removeItem:"removeItem",highlightItem:"highlightItem",highlightChoice:"highlightChoice"},At={ADD_CHOICE:"ADD_CHOICE",FILTER_CHOICES:"FILTER_CHOICES",ACTIVATE_CHOICES:"ACTIVATE_CHOICES",CLEAR_CHOICES:"CLEAR_CHOICES",ADD_GROUP:"ADD_GROUP",ADD_ITEM:"ADD_ITEM",REMOVE_ITEM:"REMOVE_ITEM",HIGHLIGHT_ITEM:"HIGHLIGHT_ITEM",CLEAR_ALL:"CLEAR_ALL"},Z={BACK_KEY:46,DELETE_KEY:8,ENTER_KEY:13,A_KEY:65,ESC_KEY:27,UP_KEY:38,DOWN_KEY:40,PAGE_UP_KEY:33,PAGE_DOWN_KEY:34},me="text",Ie="select-one",at="select-multiple",Dt=4,Cn=function(){function z(_){var b=_.element,T=_.type,V=_.classNames,Y=_.position;this.element=b,this.classNames=V,this.type=T,this.position=Y,this.isOpen=!1,this.isFlipped=!1,this.isFocussed=!1,this.isDisabled=!1,this.isLoading=!1,this._onFocus=this._onFocus.bind(this),this._onBlur=this._onBlur.bind(this)}var k=z.prototype;return k.addEventListeners=function(){this.element.addEventListener("focus",this._onFocus),this.element.addEventListener("blur",this._onBlur)},k.removeEventListeners=function(){this.element.removeEventListener("focus",this._onFocus),this.element.removeEventListener("blur",this._onBlur)},k.shouldFlip=function(b){if(typeof b!="number")return!1;var T=!1;return this.position==="auto"?T=!window.matchMedia("(min-height: "+(b+1)+"px)").matches:this.position==="top"&&(T=!0),T},k.setActiveDescendant=function(b){this.element.setAttribute("aria-activedescendant",b)},k.removeActiveDescendant=function(){this.element.removeAttribute("aria-activedescendant")},k.open=function(b){this.element.classList.add(this.classNames.openState),this.element.setAttribute("aria-expanded","true"),this.isOpen=!0,this.shouldFlip(b)&&(this.element.classList.add(this.classNames.flippedState),this.isFlipped=!0)},k.close=function(){this.element.classList.remove(this.classNames.openState),this.element.setAttribute("aria-expanded","false"),this.removeActiveDescendant(),this.isOpen=!1,this.isFlipped&&(this.element.classList.remove(this.classNames.flippedState),this.isFlipped=!1)},k.focus=function(){this.isFocussed||this.element.focus()},k.addFocusState=function(){this.element.classList.add(this.classNames.focusState)},k.removeFocusState=function(){this.element.classList.remove(this.classNames.focusState)},k.enable=function(){this.element.classList.remove(this.classNames.disabledState),this.element.removeAttribute("aria-disabled"),this.type===Ie&&this.element.setAttribute("tabindex","0"),this.isDisabled=!1},k.disable=function(){this.element.classList.add(this.classNames.disabledState),this.element.setAttribute("aria-disabled","true"),this.type===Ie&&this.element.setAttribute("tabindex","-1"),this.isDisabled=!0},k.wrap=function(b){N(b,this.element)},k.unwrap=function(b){this.element.parentNode.insertBefore(b,this.element),this.element.parentNode.removeChild(this.element)},k.addLoadingState=function(){this.element.classList.add(this.classNames.loadingState),this.element.setAttribute("aria-busy","true"),this.isLoading=!0},k.removeLoadingState=function(){this.element.classList.remove(this.classNames.loadingState),this.element.removeAttribute("aria-busy"),this.isLoading=!1},k._onFocus=function(){this.isFocussed=!0},k._onBlur=function(){this.isFocussed=!1},z}();function _n(z,k){for(var _=0;_<k.length;_++){var b=k[_];b.enumerable=b.enumerable||!1,b.configurable=!0,"value"in b&&(b.writable=!0),Object.defineProperty(z,b.key,b)}}function Ht(z,k,_){return k&&_n(z.prototype,k),_&&_n(z,_),z}var ar=function(){function z(_){var b=_.element,T=_.type,V=_.classNames,Y=_.preventPaste;this.element=b,this.type=T,this.classNames=V,this.preventPaste=Y,this.isFocussed=this.element===document.activeElement,this.isDisabled=b.disabled,this._onPaste=this._onPaste.bind(this),this._onInput=this._onInput.bind(this),this._onFocus=this._onFocus.bind(this),this._onBlur=this._onBlur.bind(this)}var k=z.prototype;return k.addEventListeners=function(){this.element.addEventListener("paste",this._onPaste),this.element.addEventListener("input",this._onInput,{passive:!0}),this.element.addEventListener("focus",this._onFocus,{passive:!0}),this.element.addEventListener("blur",this._onBlur,{passive:!0})},k.removeEventListeners=function(){this.element.removeEventListener("input",this._onInput,{passive:!0}),this.element.removeEventListener("paste",this._onPaste),this.element.removeEventListener("focus",this._onFocus,{passive:!0}),this.element.removeEventListener("blur",this._onBlur,{passive:!0})},k.enable=function(){this.element.removeAttribute("disabled"),this.isDisabled=!1},k.disable=function(){this.element.setAttribute("disabled",""),this.isDisabled=!0},k.focus=function(){this.isFocussed||this.element.focus()},k.blur=function(){this.isFocussed&&this.element.blur()},k.clear=function(b){return b===void 0&&(b=!0),this.element.value&&(this.element.value=""),b&&this.setWidth(),this},k.setWidth=function(){var b=this.element,T=b.style,V=b.value,Y=b.placeholder;T.minWidth=Y.length+1+"ch",T.width=V.length+1+"ch"},k.setActiveDescendant=function(b){this.element.setAttribute("aria-activedescendant",b)},k.removeActiveDescendant=function(){this.element.removeAttribute("aria-activedescendant")},k._onInput=function(){this.type!==Ie&&this.setWidth()},k._onPaste=function(b){this.preventPaste&&b.preventDefault()},k._onFocus=function(){this.isFocussed=!0},k._onBlur=function(){this.isFocussed=!1},Ht(z,[{key:"placeholder",set:function(b){this.element.placeholder=b}},{key:"value",get:function(){return Mt(this.element.value)},set:function(b){this.element.value=b}}]),z}(),ht=function(){function z(_){var b=_.element;this.element=b,this.scrollPos=this.element.scrollTop,this.height=this.element.offsetHeight}var k=z.prototype;return k.clear=function(){this.element.innerHTML=""},k.append=function(b){this.element.appendChild(b)},k.getChild=function(b){return this.element.querySelector(b)},k.hasChildren=function(){return this.element.hasChildNodes()},k.scrollToTop=function(){this.element.scrollTop=0},k.scrollToChildElement=function(b,T){var V=this;if(b){var Y=this.element.offsetHeight,X=this.element.scrollTop+Y,le=b.offsetHeight,he=b.offsetTop+le,Me=T>0?this.element.scrollTop+he-X:b.offsetTop;activeWindow.requestAnimationFrame(function(){V._animateScroll(Me,T)})}},k._scrollDown=function(b,T,V){var Y=(V-b)/T,X=Y>1?Y:1;this.element.scrollTop=b+X},k._scrollUp=function(b,T,V){var Y=(b-V)/T,X=Y>1?Y:1;this.element.scrollTop=b-X},k._animateScroll=function(b,T){var V=this,Y=Dt,X=this.element.scrollTop,le=!1;T>0?(this._scrollDown(X,Y,b),X<b&&(le=!0)):(this._scrollUp(X,Y,b),X>b&&(le=!0)),le&&activeWindow.requestAnimationFrame(function(){V._animateScroll(b,T)})},z}();function St(z,k){for(var _=0;_<k.length;_++){var b=k[_];b.enumerable=b.enumerable||!1,b.configurable=!0,"value"in b&&(b.writable=!0),Object.defineProperty(z,b.key,b)}}function L(z,k,_){return k&&St(z.prototype,k),_&&St(z,_),z}var K=function(){function z(_){var b=_.element,T=_.classNames;if(this.element=b,this.classNames=T,!(b instanceof HTMLInputElement)&&!(b instanceof HTMLSelectElement))throw new TypeError("Invalid element passed");this.isDisabled=!1}var k=z.prototype;return k.conceal=function(){this.element.classList.add(this.classNames.input),this.element.hidden=!0,this.element.tabIndex=-1;var b=this.element.getAttribute("style");b&&this.element.setAttribute("data-choice-orig-style",b),this.element.setAttribute("data-choice","active")},k.reveal=function(){this.element.classList.remove(this.classNames.input),this.element.hidden=!1,this.element.removeAttribute("tabindex");var b=this.element.getAttribute("data-choice-orig-style");b?(this.element.removeAttribute("data-choice-orig-style"),this.element.setAttribute("style",b)):this.element.removeAttribute("style"),this.element.removeAttribute("data-choice"),this.element.value=this.element.value},k.enable=function(){this.element.removeAttribute("disabled"),this.element.disabled=!1,this.isDisabled=!1},k.disable=function(){this.element.setAttribute("disabled",""),this.element.disabled=!0,this.isDisabled=!0},k.triggerEvent=function(b,T){Tt(this.element,b,T)},L(z,[{key:"isActive",get:function(){return this.element.dataset.choice==="active"}},{key:"dir",get:function(){return this.element.dir}},{key:"value",get:function(){return this.element.value},set:function(b){this.element.value=b}}]),z}();function ee(z,k){for(var _=0;_<k.length;_++){var b=k[_];b.enumerable=b.enumerable||!1,b.configurable=!0,"value"in b&&(b.writable=!0),Object.defineProperty(z,b.key,b)}}function ue(z,k,_){return k&&ee(z.prototype,k),_&&ee(z,_),z}function de(z,k){z.prototype=Object.create(k.prototype),z.prototype.constructor=z,z.__proto__=k}var ve=function(z){de(k,z);function k(_){var b,T=_.element,V=_.classNames,Y=_.delimiter;return b=z.call(this,{element:T,classNames:V})||this,b.delimiter=Y,b}return ue(k,[{key:"value",get:function(){return this.element.value},set:function(b){var T=b.map(function(Y){var X=Y.value;return X}),V=T.join(this.delimiter);this.element.setAttribute("value",V),this.element.value=V}}]),k}(K);function ge(z,k){for(var _=0;_<k.length;_++){var b=k[_];b.enumerable=b.enumerable||!1,b.configurable=!0,"value"in b&&(b.writable=!0),Object.defineProperty(z,b.key,b)}}function M(z,k,_){return k&&ge(z.prototype,k),_&&ge(z,_),z}function H(z,k){z.prototype=Object.create(k.prototype),z.prototype.constructor=z,z.__proto__=k}var q=function(z){H(k,z);function k(b){var T,V=b.element,Y=b.classNames,X=b.template;return T=z.call(this,{element:V,classNames:Y})||this,T.template=X,T}var _=k.prototype;return _.appendDocFragment=function(T){this.element.innerHTML="",this.element.appendChild(T)},M(k,[{key:"placeholderOption",get:function(){return this.element.querySelector('option[value=""]')||this.element.querySelector("option[placeholder]")}},{key:"optionGroups",get:function(){return Array.from(this.element.getElementsByTagName("OPTGROUP"))}},{key:"options",get:function(){return Array.from(this.element.options)},set:function(T){var V=this,Y=document.createDocumentFragment(),X=function(he){var Me=V.template(he);Y.appendChild(Me)};T.forEach(function(le){return X(le)}),this.appendDocFragment(Y)}}]),k}(K),ie={containerOuter:function(k,_,b,T,V,Y){var X=k.containerOuter,le=Object.assign(document.createElement("div"),{className:X});return le.dataset.type=Y,_&&(le.dir=_),T&&(le.tabIndex=0),b&&(le.setAttribute("role",V?"combobox":"listbox"),V&&le.setAttribute("aria-autocomplete","list")),le.setAttribute("aria-haspopup","true"),le.setAttribute("aria-expanded","false"),le},containerInner:function(k){var _=k.containerInner;return Object.assign(document.createElement("div"),{className:_})},itemList:function(k,_){var b=k.list,T=k.listSingle,V=k.listItems;return Object.assign(document.createElement("div"),{className:b+" "+(_?T:V)})},placeholder:function(k,_){var b=k.placeholder;return Object.assign(document.createElement("div"),{className:b,innerHTML:_})},item:function(k,_,b){var T=k.item,V=k.button,Y=k.highlightedState,X=k.itemSelectable,le=k.placeholder,he=_.id,Me=_.value,Ve=_.label,Le=_.customProperties,Qe=_.active,ot=_.disabled,qe=_.highlighted,yt=_.placeholder,st=Object.assign(document.createElement("div"),{className:T,innerHTML:Ve});if(Object.assign(st.dataset,{item:"",id:he,value:Me,customProperties:Le}),Qe&&st.setAttribute("aria-selected","true"),ot&&st.setAttribute("aria-disabled","true"),yt&&st.classList.add(le),st.classList.add(qe?Y:X),b){ot&&st.classList.remove(X),st.dataset.deletable="";var lt="Remove item",qt=Object.assign(document.createElement("button"),{type:"button",className:V,innerHTML:lt});qt.setAttribute("aria-label",lt+": '"+Me+"'"),qt.dataset.button="",st.appendChild(qt)}return st},choiceList:function(k,_){var b=k.list,T=Object.assign(document.createElement("div"),{className:b});return _||T.setAttribute("aria-multiselectable","true"),T.setAttribute("role","listbox"),T},choiceGroup:function(k,_){var b=k.group,T=k.groupHeading,V=k.itemDisabled,Y=_.id,X=_.value,le=_.disabled,he=Object.assign(document.createElement("div"),{className:b+" "+(le?V:"")});return he.setAttribute("role","group"),Object.assign(he.dataset,{group:"",id:Y,value:X}),le&&he.setAttribute("aria-disabled","true"),he.appendChild(Object.assign(document.createElement("div"),{className:T,innerHTML:X})),he},choice:function(k,_,b){var T=k.item,V=k.itemChoice,Y=k.itemSelectable,X=k.selectedState,le=k.itemDisabled,he=k.placeholder,Me=_.id,Ve=_.value,Le=_.label,Qe=_.groupId,ot=_.elementId,qe=_.disabled,yt=_.selected,st=_.placeholder,lt=Object.assign(document.createElement("div"),{id:ot,innerHTML:Le,className:T+" "+V});return yt&<.classList.add(X),st&<.classList.add(he),lt.setAttribute("role",Qe>0?"treeitem":"option"),Object.assign(lt.dataset,{choice:"",id:Me,value:Ve,selectText:b}),qe?(lt.classList.add(le),lt.dataset.choiceDisabled="",lt.setAttribute("aria-disabled","true")):(lt.classList.add(Y),lt.dataset.choiceSelectable=""),lt},input:function(k,_){var b=k.input,T=k.inputCloned,V=Object.assign(document.createElement("input"),{type:"text",className:b+" "+T,autocomplete:"off",autocapitalize:"off",spellcheck:!1});return V.setAttribute("role","textbox"),V.setAttribute("aria-autocomplete","list"),V.setAttribute("aria-label",_),V},dropdown:function(k){var _=k.list,b=k.listDropdown,T=document.createElement("div");return T.classList.add(_,b),T.setAttribute("aria-expanded","false"),T},notice:function(k,_,b){var T=k.item,V=k.itemChoice,Y=k.noResults,X=k.noChoices;b===void 0&&(b="");var le=[T,V];return b==="no-choices"?le.push(X):b==="no-results"&&le.push(Y),Object.assign(document.createElement("div"),{innerHTML:_,className:le.join(" ")})},option:function(k){var _=k.label,b=k.value,T=k.customProperties,V=k.active,Y=k.disabled,X=new Option(_,b,!1,V);return T&&(X.dataset.customProperties=T),X.disabled=Y,X}},ye=ie,ce=function(k){var _=k.value,b=k.label,T=k.id,V=k.groupId,Y=k.disabled,X=k.elementId,le=k.customProperties,he=k.placeholder,Me=k.keyCode;return{type:At.ADD_CHOICE,value:_,label:b,id:T,groupId:V,disabled:Y,elementId:X,customProperties:le,placeholder:he,keyCode:Me}},ae=function(k){return{type:At.FILTER_CHOICES,results:k}},Se=function(k){return k===void 0&&(k=!0),{type:At.ACTIVATE_CHOICES,active:k}},nt=function(){return{type:At.CLEAR_CHOICES}},Te=function(k){var _=k.value,b=k.label,T=k.id,V=k.choiceId,Y=k.groupId,X=k.customProperties,le=k.placeholder,he=k.keyCode;return{type:At.ADD_ITEM,value:_,label:b,id:T,choiceId:V,groupId:Y,customProperties:X,placeholder:le,keyCode:he}},Ue=function(k,_){return{type:At.REMOVE_ITEM,id:k,choiceId:_}},We=function(k,_){return{type:At.HIGHLIGHT_ITEM,id:k,highlighted:_}},Ft=function(k){var _=k.value,b=k.id,T=k.active,V=k.disabled;return{type:At.ADD_GROUP,value:_,id:b,active:T,disabled:V}},Hn=function(){return{type:"CLEAR_ALL"}},Ot=function(k){return{type:"RESET_TO",state:k}},or=function(k){return{type:"SET_IS_LOADING",isLoading:k}};function sr(z,k){for(var _=0;_<k.length;_++){var b=k[_];b.enumerable=b.enumerable||!1,b.configurable=!0,"value"in b&&(b.writable=!0),Object.defineProperty(z,b.key,b)}}function Yt(z,k,_){return k&&sr(z.prototype,k),_&&sr(z,_),z}var Bn="-ms-scroll-limit"in document.documentElement.style&&"-ms-ime-align"in document.documentElement.style,Er={},Gr=function(){Yt(z,null,[{key:"defaults",get:function(){return Object.preventExtensions({get options(){return Er},get templates(){return ie}})}}]);function z(_,b){var T=this;_===void 0&&(_="[data-choice]"),b===void 0&&(b={}),this.config=o.a.all([Hr,z.defaults.options,b],{arrayMerge:function(Qe,ot){return[].concat(ot)}});var V=gn(this.config,Hr);V.length&&console.warn("Unknown config option(s) passed",V.join(", "));var Y=typeof _=="string"?document.querySelector(_):_;if(!(Y instanceof HTMLInputElement||Y instanceof HTMLSelectElement))throw TypeError("Expected one of the following types text|select-one|select-multiple");if(this._isTextElement=Y.type===me,this._isSelectOneElement=Y.type===Ie,this._isSelectMultipleElement=Y.type===at,this._isSelectElement=this._isSelectOneElement||this._isSelectMultipleElement,this.config.searchEnabled=this._isSelectMultipleElement||this.config.searchEnabled,["auto","always"].includes(this.config.renderSelectedChoices)||(this.config.renderSelectedChoices="auto"),b.addItemFilter&&typeof b.addItemFilter!="function"){var X=b.addItemFilter instanceof RegExp?b.addItemFilter:new RegExp(b.addItemFilter);this.config.addItemFilter=X.test.bind(X)}if(this._isTextElement?this.passedElement=new ve({element:Y,classNames:this.config.classNames,delimiter:this.config.delimiter}):this.passedElement=new q({element:Y,classNames:this.config.classNames,template:function(Qe){return T._templates.option(Qe)}}),this.initialised=!1,this._store=new Rt,this._initialState={},this._currentState={},this._prevState={},this._currentValue="",this._canSearch=this.config.searchEnabled,this._isScrollingOnIe=!1,this._highlightPosition=0,this._wasTap=!0,this._placeholderValue=this._generatePlaceholderValue(),this._baseId=U(this.passedElement.element,"choices-"),this._direction=this.passedElement.dir,!this._direction){var le=window.getComputedStyle(this.passedElement.element),he=le.direction,Me=window.getComputedStyle(document.documentElement),Ve=Me.direction;he!==Ve&&(this._direction=he)}if(this._idNames={itemChoice:"item-choice"},this._presetGroups=this.passedElement.optionGroups,this._presetOptions=this.passedElement.options,this._presetChoices=this.config.choices,this._presetItems=this.config.items,this.passedElement.value&&(this._presetItems=this._presetItems.concat(this.passedElement.value.split(this.config.delimiter))),this.passedElement.options&&this.passedElement.options.forEach(function(Le){T._presetChoices.push({value:Le.value,label:Le.innerHTML,selected:Le.selected,disabled:Le.disabled||Le.parentNode.disabled,placeholder:Le.value===""||Le.hasAttribute("placeholder"),customProperties:Le.getAttribute("data-custom-properties")})}),this._render=this._render.bind(this),this._onFocus=this._onFocus.bind(this),this._onBlur=this._onBlur.bind(this),this._onKeyUp=this._onKeyUp.bind(this),this._onKeyDown=this._onKeyDown.bind(this),this._onClick=this._onClick.bind(this),this._onTouchMove=this._onTouchMove.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onMouseDown=this._onMouseDown.bind(this),this._onMouseOver=this._onMouseOver.bind(this),this._onFormReset=this._onFormReset.bind(this),this._onAKey=this._onAKey.bind(this),this._onEnterKey=this._onEnterKey.bind(this),this._onEscapeKey=this._onEscapeKey.bind(this),this._onDirectionKey=this._onDirectionKey.bind(this),this._onDeleteKey=this._onDeleteKey.bind(this),this.passedElement.isActive){this.config.silent||console.warn("Trying to initialise Choices on element already initialised"),this.initialised=!0;return}this.init()}var k=z.prototype;return k.init=function(){if(!this.initialised){this._createTemplates(),this._createElements(),this._createStructure(),this._initialState=en(this._store.state),this._store.subscribe(this._render),this._render(),this._addEventListeners();var b=!this.config.addItems||this.passedElement.element.hasAttribute("disabled");b&&this.disable(),this.initialised=!0;var T=this.config.callbackOnInit;T&&typeof T=="function"&&T.call(this)}},k.destroy=function(){this.initialised&&(this._removeEventListeners(),this.passedElement.reveal(),this.containerOuter.unwrap(this.passedElement.element),this.clearStore(),this._isSelectElement&&(this.passedElement.options=this._presetOptions),this._templates=null,this.initialised=!1)},k.enable=function(){return this.passedElement.isDisabled&&this.passedElement.enable(),this.containerOuter.isDisabled&&(this._addEventListeners(),this.input.enable(),this.containerOuter.enable()),this},k.disable=function(){return this.passedElement.isDisabled||this.passedElement.disable(),this.containerOuter.isDisabled||(this._removeEventListeners(),this.input.disable(),this.containerOuter.disable()),this},k.highlightItem=function(b,T){if(T===void 0&&(T=!0),!b)return this;var V=b.id,Y=b.groupId,X=Y===void 0?-1:Y,le=b.value,he=le===void 0?"":le,Me=b.label,Ve=Me===void 0?"":Me,Le=X>=0?this._store.getGroupById(X):null;return this._store.dispatch(We(V,!0)),T&&this.passedElement.triggerEvent(rn.highlightItem,{id:V,value:he,label:Ve,groupValue:Le&&Le.value?Le.value:null}),this},k.unhighlightItem=function(b){if(!b)return this;var T=b.id,V=b.groupId,Y=V===void 0?-1:V,X=b.value,le=X===void 0?"":X,he=b.label,Me=he===void 0?"":he,Ve=Y>=0?this._store.getGroupById(Y):null;return this._store.dispatch(We(T,!1)),this.passedElement.triggerEvent(rn.highlightItem,{id:T,value:le,label:Me,groupValue:Ve&&Ve.value?Ve.value:null}),this},k.highlightAll=function(){var b=this;return this._store.items.forEach(function(T){return b.highlightItem(T)}),this},k.unhighlightAll=function(){var b=this;return this._store.items.forEach(function(T){return b.unhighlightItem(T)}),this},k.removeActiveItemsByValue=function(b){var T=this;return this._store.activeItems.filter(function(V){return V.value===b}).forEach(function(V){return T._removeItem(V)}),this},k.removeActiveItems=function(b){var T=this;return this._store.activeItems.filter(function(V){var Y=V.id;return Y!==b}).forEach(function(V){return T._removeItem(V)}),this},k.removeHighlightedItems=function(b){var T=this;return b===void 0&&(b=!1),this._store.highlightedActiveItems.forEach(function(V){T._removeItem(V),b&&T._triggerChange(V.value)}),this},k.showDropdown=function(b){var T=this;return this.dropdown.isActive?this:(activeWindow.requestAnimationFrame(function(){T.dropdown.show(),T.containerOuter.open(T.dropdown.distanceFromTopWindow),!b&&T._canSearch&&T.input.focus(),T.passedElement.triggerEvent(rn.showDropdown,{})}),this)},k.hideDropdown=function(b){var T=this;return this.dropdown.isActive?(activeWindow.requestAnimationFrame(function(){T.dropdown.hide(),T.containerOuter.close(),!b&&T._canSearch&&(T.input.removeActiveDescendant(),T.input.blur()),T.passedElement.triggerEvent(rn.hideDropdown,{})}),this):this},k.getValue=function(b){b===void 0&&(b=!1);var T=this._store.activeItems.reduce(function(V,Y){var X=b?Y.value:Y;return V.push(X),V},[]);return this._isSelectOneElement?T[0]:T},k.setValue=function(b){var T=this;return this.initialised?(b.forEach(function(V){return T._setChoiceOrItem(V)}),this):this},k.setChoiceByValue=function(b){var T=this;if(!this.initialised||this._isTextElement)return this;var V=Array.isArray(b)?b:[b];return V.forEach(function(Y){return T._findAndSelectChoiceByValue(Y)}),this},k.setChoices=function(b,T,V,Y){var X=this;if(b===void 0&&(b=[]),T===void 0&&(T="value"),V===void 0&&(V="label"),Y===void 0&&(Y=!1),!this.initialised)throw new ReferenceError("setChoices was called on a non-initialized instance of Choices");if(!this._isSelectElement)throw new TypeError("setChoices can't be used with INPUT based Choices");if(typeof T!="string"||!T)throw new TypeError("value parameter must be a name of 'value' field in passed objects");if(Y&&this.clearChoices(),typeof b=="function"){var le=b(this);if(typeof Promise=="function"&&le instanceof Promise)return new Promise(function(he){return activeWindow.requestAnimationFrame(he)}).then(function(){return X._handleLoadingState(!0)}).then(function(){return le}).then(function(he){return X.setChoices(he,T,V,Y)}).catch(function(he){X.config.silent||console.error(he)}).then(function(){return X._handleLoadingState(!1)}).then(function(){return X});if(!Array.isArray(le))throw new TypeError(".setChoices first argument function must return either array of choices or Promise, got: "+typeof le);return this.setChoices(le,T,V,!1)}if(!Array.isArray(b))throw new TypeError(".setChoices must be called either with array of choices with a function resulting into Promise of array of choices");return this.containerOuter.removeLoadingState(),this._startLoading(),b.forEach(function(he){he.choices?X._addGroup({id:parseInt(he.id,10)||null,group:he,valueKey:T,labelKey:V}):X._addChoice({value:he[T],label:he[V],isSelected:he.selected,isDisabled:he.disabled,customProperties:he.customProperties,placeholder:he.placeholder})}),this._stopLoading(),this},k.clearChoices=function(){return this._store.dispatch(nt()),this},k.clearStore=function(){return this._store.dispatch(Hn()),this},k.clearInput=function(){var b=!this._isSelectOneElement;return this.input.clear(b),!this._isTextElement&&this._canSearch&&(this._isSearching=!1,this._store.dispatch(Se(!0))),this},k._render=function(){if(!this._store.isLoading()){this._currentState=this._store.state;var b=this._currentState.choices!==this._prevState.choices||this._currentState.groups!==this._prevState.groups||this._currentState.items!==this._prevState.items,T=this._isSelectElement,V=this._currentState.items!==this._prevState.items;b&&(T&&this._renderChoices(),V&&this._renderItems(),this._prevState=this._currentState)}},k._renderChoices=function(){var b=this,T=this._store,V=T.activeGroups,Y=T.activeChoices,X=document.createDocumentFragment();if(this.choiceList.clear(),this.config.resetScrollPosition&&activeWindow.requestAnimationFrame(function(){return b.choiceList.scrollToTop()}),V.length>=1&&!this._isSearching){var le=Y.filter(function(Qe){return Qe.placeholder===!0&&Qe.groupId===-1});le.length>=1&&(X=this._createChoicesFragment(le,X)),X=this._createGroupsFragment(V,Y,X)}else Y.length>=1&&(X=this._createChoicesFragment(Y,X));if(X.childNodes&&X.childNodes.length>0){var he=this._store.activeItems,Me=this._canAddItem(he,this.input.value);Me.response?(this.choiceList.append(X),this._highlightChoice()):this.choiceList.append(this._getTemplate("notice",Me.notice))}else{var Ve,Le;this._isSearching?(Le=typeof this.config.noResultsText=="function"?this.config.noResultsText():this.config.noResultsText,Ve=this._getTemplate("notice",Le,"no-results")):(Le=typeof this.config.noChoicesText=="function"?this.config.noChoicesText():this.config.noChoicesText,Ve=this._getTemplate("notice",Le,"no-choices")),this.choiceList.append(Ve)}},k._renderItems=function(){var b=this._store.activeItems||[];this.itemList.clear();var T=this._createItemsFragment(b);T.childNodes&&this.itemList.append(T)},k._createGroupsFragment=function(b,T,V){var Y=this;V===void 0&&(V=document.createDocumentFragment());var X=function(he){return T.filter(function(Me){return Y._isSelectOneElement?Me.groupId===he.id:Me.groupId===he.id&&(Y.config.renderSelectedChoices==="always"||!Me.selected)})};return this.config.shouldSort&&b.sort(this.config.sorter),b.forEach(function(le){var he=X(le);if(he.length>=1){var Me=Y._getTemplate("choiceGroup",le);V.appendChild(Me),Y._createChoicesFragment(he,V,!0)}}),V},k._createChoicesFragment=function(b,T,V){var Y=this;T===void 0&&(T=document.createDocumentFragment()),V===void 0&&(V=!1);var X=this.config,le=X.renderSelectedChoices,he=X.searchResultLimit,Me=X.renderChoiceLimit,Ve=this._isSearching?Wt:this.config.sorter,Le=function(Vn){var ki=le==="auto"?Y._isSelectOneElement||!Vn.selected:!0;if(ki){var kr=Y._getTemplate("choice",Vn,Y.config.itemSelectText);T.appendChild(kr)}},Qe=b;le==="auto"&&!this._isSelectOneElement&&(Qe=b.filter(function(On){return!On.selected}));var ot=Qe.reduce(function(On,Vn){return Vn.placeholder?On.placeholderChoices.push(Vn):On.normalChoices.push(Vn),On},{placeholderChoices:[],normalChoices:[]}),qe=ot.placeholderChoices,yt=ot.normalChoices;(this.config.shouldSort||this._isSearching)&&yt.sort(Ve);var st=Qe.length,lt=this._isSelectOneElement?[].concat(qe,yt):yt;this._isSearching?st=he:Me&&Me>0&&!V&&(st=Me);for(var qt=0;qt<st;qt+=1)lt[qt]&&Le(lt[qt]);return T},k._createItemsFragment=function(b,T){var V=this;T===void 0&&(T=document.createDocumentFragment());var Y=this.config,X=Y.shouldSortItems,le=Y.sorter,he=Y.removeItemButton;X&&!this._isSelectOneElement&&b.sort(le),this._isTextElement?this.passedElement.value=b:this.passedElement.options=b;var Me=function(Le){var Qe=V._getTemplate("item",Le,he);T.appendChild(Qe)};return b.forEach(Me),T},k._triggerChange=function(b){b!=null&&this.passedElement.triggerEvent(rn.change,{value:b})},k._selectPlaceholderChoice=function(){var b=this._store.placeholderChoice;b&&(this._addItem({value:b.value,label:b.label,choiceId:b.id,groupId:b.groupId,placeholder:b.placeholder}),this._triggerChange(b.value))},k._handleButtonAction=function(b,T){if(!(!b||!T||!this.config.removeItems||!this.config.removeItemButton)){var V=T.parentNode.getAttribute("data-id"),Y=b.find(function(X){return X.id===parseInt(V,10)});this._removeItem(Y),this._triggerChange(Y.value),this._isSelectOneElement&&this._selectPlaceholderChoice()}},k._handleItemAction=function(b,T,V){var Y=this;if(V===void 0&&(V=!1),!(!b||!T||!this.config.removeItems||this._isSelectOneElement)){var X=T.getAttribute("data-id");b.forEach(function(le){le.id===parseInt(X,10)&&!le.highlighted?Y.highlightItem(le):!V&&le.highlighted&&Y.unhighlightItem(le)}),this.input.focus()}},k._handleChoiceAction=function(b,T){if(!(!b||!T)){var V=T.dataset.id,Y=this._store.getChoiceById(V);if(Y){var X=b[0]&&b[0].keyCode?b[0].keyCode:null,le=this.dropdown.isActive;if(Y.keyCode=X,this.passedElement.triggerEvent(rn.choice,{choice:Y}),!Y.selected&&!Y.disabled){var he=this._canAddItem(b,Y.value);he.response&&(this._addItem({value:Y.value,label:Y.label,choiceId:Y.id,groupId:Y.groupId,customProperties:Y.customProperties,placeholder:Y.placeholder,keyCode:Y.keyCode}),this._triggerChange(Y.value))}this.clearInput(),le&&this._isSelectOneElement&&(this.hideDropdown(!0),this.containerOuter.focus())}}},k._handleBackspace=function(b){if(!(!this.config.removeItems||!b)){var T=b[b.length-1],V=b.some(function(Y){return Y.highlighted});this.config.editItems&&!V&&T?(this.input.value=T.value,this.input.setWidth(),this._removeItem(T),this._triggerChange(T.value)):(V||this.highlightItem(T,!1),this.removeHighlightedItems(!0))}},k._startLoading=function(){this._store.dispatch(or(!0))},k._stopLoading=function(){this._store.dispatch(or(!1))},k._handleLoadingState=function(b){b===void 0&&(b=!0);var T=this.itemList.getChild("."+this.config.classNames.placeholder);b?(this.disable(),this.containerOuter.addLoadingState(),this._isSelectOneElement?T?T.innerHTML=this.config.loadingText:(T=this._getTemplate("placeholder",this.config.loadingText),this.itemList.append(T)):this.input.placeholder=this.config.loadingText):(this.enable(),this.containerOuter.removeLoadingState(),this._isSelectOneElement?T.innerHTML=this._placeholderValue||"":this.input.placeholder=this._placeholderValue||"")},k._handleSearch=function(b){if(!(!b||!this.input.isFocussed)){var T=this._store.choices,V=this.config,Y=V.searchFloor,X=V.searchChoices,le=T.some(function(Me){return!Me.active});if(b&&b.length>=Y){var he=X?this._searchChoices(b):0;this.passedElement.triggerEvent(rn.search,{value:b,resultCount:he})}else le&&(this._isSearching=!1,this._store.dispatch(Se(!0)))}},k._canAddItem=function(b,T){var V=!0,Y=typeof this.config.addItemText=="function"?this.config.addItemText(T):this.config.addItemText;if(!this._isSelectOneElement){var X=Jt(b,T);this.config.maxItemCount>0&&this.config.maxItemCount<=b.length&&(V=!1,Y=typeof this.config.maxItemText=="function"?this.config.maxItemText(this.config.maxItemCount):this.config.maxItemText),!this.config.duplicateItemsAllowed&&X&&V&&(V=!1,Y=typeof this.config.uniqueItemText=="function"?this.config.uniqueItemText(T):this.config.uniqueItemText),this._isTextElement&&this.config.addItems&&V&&typeof this.config.addItemFilter=="function"&&!this.config.addItemFilter(T)&&(V=!1,Y=typeof this.config.customAddItemText=="function"?this.config.customAddItemText(T):this.config.customAddItemText)}return{response:V,notice:Y}},k._searchChoices=function(b){var T=typeof b=="string"?b.trim():b,V=typeof this._currentValue=="string"?this._currentValue.trim():this._currentValue;if(T.length<1&&T===V+" ")return 0;var Y=this._store.searchableChoices,X=T,le=[].concat(this.config.searchFields),he=Object.assign(this.config.fuseOptions,{keys:le}),Me=new i.a(Y,he),Ve=Me.search(X);return this._currentValue=T,this._highlightPosition=0,this._isSearching=!0,this._store.dispatch(ae(Ve)),Ve.length},k._addEventListeners=function(){var b=document,T=b.documentElement;T.addEventListener("touchend",this._onTouchEnd,!0),this.containerOuter.element.addEventListener("keydown",this._onKeyDown,!0),this.containerOuter.element.addEventListener("mousedown",this._onMouseDown,!0),T.addEventListener("click",this._onClick,{passive:!0}),T.addEventListener("touchmove",this._onTouchMove,{passive:!0}),this.dropdown.element.addEventListener("mouseover",this._onMouseOver,{passive:!0}),this._isSelectOneElement&&(this.containerOuter.element.addEventListener("focus",this._onFocus,{passive:!0}),this.containerOuter.element.addEventListener("blur",this._onBlur,{passive:!0})),this.input.element.addEventListener("keyup",this._onKeyUp,{passive:!0}),this.input.element.addEventListener("focus",this._onFocus,{passive:!0}),this.input.element.addEventListener("blur",this._onBlur,{passive:!0}),this.input.element.form&&this.input.element.form.addEventListener("reset",this._onFormReset,{passive:!0}),this.input.addEventListeners()},k._removeEventListeners=function(){var b=document,T=b.documentElement;T.removeEventListener("touchend",this._onTouchEnd,!0),this.containerOuter.element.removeEventListener("keydown",this._onKeyDown,!0),this.containerOuter.element.removeEventListener("mousedown",this._onMouseDown,!0),T.removeEventListener("click",this._onClick),T.removeEventListener("touchmove",this._onTouchMove),this.dropdown.element.removeEventListener("mouseover",this._onMouseOver),this._isSelectOneElement&&(this.containerOuter.element.removeEventListener("focus",this._onFocus),this.containerOuter.element.removeEventListener("blur",this._onBlur)),this.input.element.removeEventListener("keyup",this._onKeyUp),this.input.element.removeEventListener("focus",this._onFocus),this.input.element.removeEventListener("blur",this._onBlur),this.input.element.form&&this.input.element.form.removeEventListener("reset",this._onFormReset),this.input.removeEventListeners()},k._onKeyDown=function(b){var T,V=b.target,Y=b.keyCode,X=b.ctrlKey,le=b.metaKey,he=this._store.activeItems,Me=this.input.isFocussed,Ve=this.dropdown.isActive,Le=this.itemList.hasChildren(),Qe=String.fromCharCode(Y),ot=Z.BACK_KEY,qe=Z.DELETE_KEY,yt=Z.ENTER_KEY,st=Z.A_KEY,lt=Z.ESC_KEY,qt=Z.UP_KEY,On=Z.DOWN_KEY,Vn=Z.PAGE_UP_KEY,ki=Z.PAGE_DOWN_KEY,kr=X||le;!this._isTextElement&&/[a-zA-Z0-9-_ ]/.test(Qe)&&this.showDropdown();var Jr=(T={},T[st]=this._onAKey,T[yt]=this._onEnterKey,T[lt]=this._onEscapeKey,T[qt]=this._onDirectionKey,T[Vn]=this._onDirectionKey,T[On]=this._onDirectionKey,T[ki]=this._onDirectionKey,T[qe]=this._onDeleteKey,T[ot]=this._onDeleteKey,T);Jr[Y]&&Jr[Y]({event:b,target:V,keyCode:Y,metaKey:le,activeItems:he,hasFocusedInput:Me,hasActiveDropdown:Ve,hasItems:Le,hasCtrlDownKeyPressed:kr})},k._onKeyUp=function(b){var T=b.target,V=b.keyCode,Y=this.input.value,X=this._store.activeItems,le=this._canAddItem(X,Y),he=Z.BACK_KEY,Me=Z.DELETE_KEY;if(this._isTextElement){var Ve=le.notice&&Y;if(Ve){var Le=this._getTemplate("notice",le.notice);this.dropdown.element.innerHTML=Le.outerHTML,this.showDropdown(!0)}else this.hideDropdown(!0)}else{var Qe=(V===he||V===Me)&&!T.value,ot=!this._isTextElement&&this._isSearching,qe=this._canSearch&&le.response;Qe&&ot?(this._isSearching=!1,this._store.dispatch(Se(!0))):qe&&this._handleSearch(this.input.value)}this._canSearch=this.config.searchEnabled},k._onAKey=function(b){var T=b.hasItems,V=b.hasCtrlDownKeyPressed;if(V&&T){this._canSearch=!1;var Y=this.config.removeItems&&!this.input.value&&this.input.element===document.activeElement;Y&&this.highlightAll()}},k._onEnterKey=function(b){var T=b.event,V=b.target,Y=b.activeItems,X=b.hasActiveDropdown,le=Z.ENTER_KEY,he=V.hasAttribute("data-button");if(this._isTextElement&&V.value){var Me=this.input.value,Ve=this._canAddItem(Y,Me);Ve.response&&(this.hideDropdown(!0),this._addItem({value:Me}),this._triggerChange(Me),this.clearInput())}if(he&&(this._handleButtonAction(Y,V),T.preventDefault()),X){var Le=this.dropdown.getChild("."+this.config.classNames.highlightedState);Le&&(Y[0]&&(Y[0].keyCode=le),this._handleChoiceAction(Y,Le)),T.preventDefault()}else this._isSelectOneElement&&(this.showDropdown(),T.preventDefault())},k._onEscapeKey=function(b){var T=b.hasActiveDropdown;T&&(this.hideDropdown(!0),this.containerOuter.focus())},k._onDirectionKey=function(b){var T=b.event,V=b.hasActiveDropdown,Y=b.keyCode,X=b.metaKey,le=Z.DOWN_KEY,he=Z.PAGE_UP_KEY,Me=Z.PAGE_DOWN_KEY;if(V||this._isSelectOneElement){this.showDropdown(),this._canSearch=!1;var Ve=Y===le||Y===Me?1:-1,Le=X||Y===Me||Y===he,Qe="[data-choice-selectable]",ot;if(Le)Ve>0?ot=this.dropdown.element.querySelector(Qe+":last-of-type"):ot=this.dropdown.element.querySelector(Qe);else{var qe=this.dropdown.element.querySelector("."+this.config.classNames.highlightedState);qe?ot=Ze(qe,Qe,Ve):ot=this.dropdown.element.querySelector(Qe)}ot&&(It(ot,this.choiceList.element,Ve)||this.choiceList.scrollToChildElement(ot,Ve),this._highlightChoice(ot)),T.preventDefault()}},k._onDeleteKey=function(b){var T=b.event,V=b.target,Y=b.hasFocusedInput,X=b.activeItems;Y&&!V.value&&!this._isSelectOneElement&&(this._handleBackspace(X),T.preventDefault())},k._onTouchMove=function(){this._wasTap&&(this._wasTap=!1)},k._onTouchEnd=function(b){var T=b||b.touches[0],V=T.target,Y=this._wasTap&&this.containerOuter.element.contains(V);if(Y){var X=V===this.containerOuter.element||V===this.containerInner.element;X&&(this._isTextElement?this.input.focus():this._isSelectMultipleElement&&this.showDropdown()),b.stopPropagation()}this._wasTap=!0},k._onMouseDown=function(b){var T=b.target;if(T instanceof HTMLElement){if(Bn&&this.choiceList.element.contains(T)){var V=this.choiceList.element.firstElementChild,Y=this._direction==="ltr"?b.offsetX>=V.offsetWidth:b.offsetX<V.offsetLeft;this._isScrollingOnIe=Y}if(T!==this.input.element){var X=T.closest("[data-button],[data-item],[data-choice]");if(X instanceof HTMLElement){var le=b.shiftKey,he=this._store.activeItems,Me=X.dataset;"button"in Me?this._handleButtonAction(he,X):"item"in Me?this._handleItemAction(he,X,le):"choice"in Me&&this._handleChoiceAction(he,X)}b.preventDefault()}}},k._onMouseOver=function(b){var T=b.target;T instanceof HTMLElement&&"choice"in T.dataset&&this._highlightChoice(T)},k._onClick=function(b){var T=b.target,V=this.containerOuter.element.contains(T);if(V)!this.dropdown.isActive&&!this.containerOuter.isDisabled?this._isTextElement?document.activeElement!==this.input.element&&this.input.focus():(this.showDropdown(),this.containerOuter.focus()):this._isSelectOneElement&&T!==this.input.element&&!this.dropdown.element.contains(T)&&this.hideDropdown();else{var Y=this._store.highlightedActiveItems.length>0;Y&&this.unhighlightAll(),this.containerOuter.removeFocusState(),this.hideDropdown(!0)}},k._onFocus=function(b){var T=this,V,Y=b.target,X=this.containerOuter.element.contains(Y);if(X){var le=(V={},V[me]=function(){Y===T.input.element&&T.containerOuter.addFocusState()},V[Ie]=function(){T.containerOuter.addFocusState(),Y===T.input.element&&T.showDropdown(!0)},V[at]=function(){Y===T.input.element&&(T.showDropdown(!0),T.containerOuter.addFocusState())},V);le[this.passedElement.element.type]()}},k._onBlur=function(b){var T=this,V=b.target,Y=this.containerOuter.element.contains(V);if(Y&&!this._isScrollingOnIe){var X,le=this._store.activeItems,he=le.some(function(Ve){return Ve.highlighted}),Me=(X={},X[me]=function(){V===T.input.element&&(T.containerOuter.removeFocusState(),he&&T.unhighlightAll(),T.hideDropdown(!0))},X[Ie]=function(){T.containerOuter.removeFocusState(),(V===T.input.element||V===T.containerOuter.element&&!T._canSearch)&&T.hideDropdown(!0)},X[at]=function(){V===T.input.element&&(T.containerOuter.removeFocusState(),T.hideDropdown(!0),he&&T.unhighlightAll())},X);Me[this.passedElement.element.type]()}else this._isScrollingOnIe=!1,this.input.element.focus()},k._onFormReset=function(){this._store.dispatch(Ot(this._initialState))},k._highlightChoice=function(b){var T=this;b===void 0&&(b=null);var V=Array.from(this.dropdown.element.querySelectorAll("[data-choice-selectable]"));if(V.length){var Y=b,X=Array.from(this.dropdown.element.querySelectorAll("."+this.config.classNames.highlightedState));X.forEach(function(le){le.classList.remove(T.config.classNames.highlightedState),le.setAttribute("aria-selected","false")}),Y?this._highlightPosition=V.indexOf(Y):(V.length>this._highlightPosition?Y=V[this._highlightPosition]:Y=V[V.length-1],Y||(Y=V[0])),Y.classList.add(this.config.classNames.highlightedState),Y.setAttribute("aria-selected","true"),this.passedElement.triggerEvent(rn.highlightChoice,{el:Y}),this.dropdown.isActive&&(this.input.setActiveDescendant(Y.id),this.containerOuter.setActiveDescendant(Y.id))}},k._addItem=function(b){var T=b.value,V=b.label,Y=V===void 0?null:V,X=b.choiceId,le=X===void 0?-1:X,he=b.groupId,Me=he===void 0?-1:he,Ve=b.customProperties,Le=Ve===void 0?null:Ve,Qe=b.placeholder,ot=Qe===void 0?!1:Qe,qe=b.keyCode,yt=qe===void 0?null:qe,st=typeof T=="string"?T.trim():T,lt=yt,qt=Le,On=this._store.items,Vn=Y||st,ki=le||-1,kr=Me>=0?this._store.getGroupById(Me):null,Jr=On?On.length+1:1;return this.config.prependValue&&(st=this.config.prependValue+st.toString()),this.config.appendValue&&(st+=this.config.appendValue.toString()),this._store.dispatch(Te({value:st,label:Vn,id:Jr,choiceId:ki,groupId:Me,customProperties:Le,placeholder:ot,keyCode:lt})),this._isSelectOneElement&&this.removeActiveItems(Jr),this.passedElement.triggerEvent(rn.addItem,{id:Jr,value:st,label:Vn,customProperties:qt,groupValue:kr&&kr.value?kr.value:void 0,keyCode:lt}),this},k._removeItem=function(b){if(!b||!it("Object",b))return this;var T=b.id,V=b.value,Y=b.label,X=b.choiceId,le=b.groupId,he=le>=0?this._store.getGroupById(le):null;return this._store.dispatch(Ue(T,X)),he&&he.value?this.passedElement.triggerEvent(rn.removeItem,{id:T,value:V,label:Y,groupValue:he.value}):this.passedElement.triggerEvent(rn.removeItem,{id:T,value:V,label:Y}),this},k._addChoice=function(b){var T=b.value,V=b.label,Y=V===void 0?null:V,X=b.isSelected,le=X===void 0?!1:X,he=b.isDisabled,Me=he===void 0?!1:he,Ve=b.groupId,Le=Ve===void 0?-1:Ve,Qe=b.customProperties,ot=Qe===void 0?null:Qe,qe=b.placeholder,yt=qe===void 0?!1:qe,st=b.keyCode,lt=st===void 0?null:st;if(!(typeof T=="undefined"||T===null)){var qt=this._store.choices,On=Y||T,Vn=qt?qt.length+1:1,ki=this._baseId+"-"+this._idNames.itemChoice+"-"+Vn;this._store.dispatch(ce({id:Vn,groupId:Le,elementId:ki,value:T,label:On,disabled:Me,customProperties:ot,placeholder:yt,keyCode:lt})),le&&this._addItem({value:T,label:On,choiceId:Vn,customProperties:ot,placeholder:yt,keyCode:lt})}},k._addGroup=function(b){var T=this,V=b.group,Y=b.id,X=b.valueKey,le=X===void 0?"value":X,he=b.labelKey,Me=he===void 0?"label":he,Ve=it("Object",V)?V.choices:Array.from(V.getElementsByTagName("OPTION")),Le=Y||Math.floor(new Date().valueOf()*Math.random()),Qe=V.disabled?V.disabled:!1;if(Ve){this._store.dispatch(Ft({value:V.label,id:Le,active:!0,disabled:Qe}));var ot=function(yt){var st=yt.disabled||yt.parentNode&&yt.parentNode.disabled;T._addChoice({value:yt[le],label:it("Object",yt)?yt[Me]:yt.innerHTML,isSelected:yt.selected,isDisabled:st,groupId:Le,customProperties:yt.customProperties,placeholder:yt.placeholder})};Ve.forEach(ot)}else this._store.dispatch(Ft({value:V.label,id:V.id,active:!1,disabled:V.disabled}))},k._getTemplate=function(b){var T;if(!b)return null;for(var V=this.config.classNames,Y=arguments.length,X=new Array(Y>1?Y-1:0),le=1;le<Y;le++)X[le-1]=arguments[le];return(T=this._templates[b]).call.apply(T,[this,V].concat(X))},k._createTemplates=function(){var b=this.config.callbackOnCreateTemplates,T={};b&&typeof b=="function"&&(T=b.call(this,jt)),this._templates=o()(ie,T)},k._createElements=function(){this.containerOuter=new Cn({element:this._getTemplate("containerOuter",this._direction,this._isSelectElement,this._isSelectOneElement,this.config.searchEnabled,this.passedElement.element.type),classNames:this.config.classNames,type:this.passedElement.element.type,position:this.config.position}),this.containerInner=new Cn({element:this._getTemplate("containerInner"),classNames:this.config.classNames,type:this.passedElement.element.type,position:this.config.position}),this.input=new ar({element:this._getTemplate("input",this._placeholderValue),classNames:this.config.classNames,type:this.passedElement.element.type,preventPaste:!this.config.paste}),this.choiceList=new ht({element:this._getTemplate("choiceList",this._isSelectOneElement)}),this.itemList=new ht({element:this._getTemplate("itemList",this._isSelectOneElement)}),this.dropdown=new Rr({element:this._getTemplate("dropdown"),classNames:this.config.classNames,type:this.passedElement.element.type})},k._createStructure=function(){this.passedElement.conceal(),this.containerInner.wrap(this.passedElement.element),this.containerOuter.wrap(this.containerInner.element),this._isSelectOneElement?this.input.placeholder=this.config.searchPlaceholderValue||"":this._placeholderValue&&(this.input.placeholder=this._placeholderValue,this.input.setWidth()),this.containerOuter.element.appendChild(this.containerInner.element),this.containerOuter.element.appendChild(this.dropdown.element),this.containerInner.element.appendChild(this.itemList.element),this._isTextElement||this.dropdown.element.appendChild(this.choiceList.element),this._isSelectOneElement?this.config.searchEnabled&&this.dropdown.element.insertBefore(this.input.element,this.dropdown.element.firstChild):this.containerInner.element.appendChild(this.input.element),this._isSelectElement&&(this._highlightPosition=0,this._isSearching=!1,this._startLoading(),this._presetGroups.length?this._addPredefinedGroups(this._presetGroups):this._addPredefinedChoices(this._presetChoices),this._stopLoading()),this._isTextElement&&this._addPredefinedItems(this._presetItems)},k._addPredefinedGroups=function(b){var T=this,V=this.passedElement.placeholderOption;V&&V.parentNode.tagName==="SELECT"&&this._addChoice({value:V.value,label:V.innerHTML,isSelected:V.selected,isDisabled:V.disabled,placeholder:!0}),b.forEach(function(Y){return T._addGroup({group:Y,id:Y.id||null})})},k._addPredefinedChoices=function(b){var T=this;this.config.shouldSort&&b.sort(this.config.sorter);var V=b.some(function(X){return X.selected}),Y=b.findIndex(function(X){return X.disabled===void 0||!X.disabled});b.forEach(function(X,le){var he=X.value,Me=X.label,Ve=X.customProperties,Le=X.placeholder;if(T._isSelectElement)if(X.choices)T._addGroup({group:X,id:X.id||null});else{var Qe=T._isSelectOneElement&&!V&&le===Y,ot=Qe?!0:X.selected,qe=X.disabled;T._addChoice({value:he,label:Me,isSelected:ot,isDisabled:qe,customProperties:Ve,placeholder:Le})}else T._addChoice({value:he,label:Me,isSelected:X.selected,isDisabled:X.disabled,customProperties:Ve,placeholder:Le})})},k._addPredefinedItems=function(b){var T=this;b.forEach(function(V){typeof V=="object"&&V.value&&T._addItem({value:V.value,label:V.label,choiceId:V.id,customProperties:V.customProperties,placeholder:V.placeholder}),typeof V=="string"&&T._addItem({value:V})})},k._setChoiceOrItem=function(b){var T=this,V=Je(b).toLowerCase(),Y={object:function(){b.value&&(T._isTextElement?T._addItem({value:b.value,label:b.label,choiceId:b.id,customProperties:b.customProperties,placeholder:b.placeholder}):T._addChoice({value:b.value,label:b.label,isSelected:!0,isDisabled:!1,customProperties:b.customProperties,placeholder:b.placeholder}))},string:function(){T._isTextElement?T._addItem({value:b}):T._addChoice({value:b,label:b,isSelected:!0,isDisabled:!1})}};Y[V]()},k._findAndSelectChoiceByValue=function(b){var T=this,V=this._store.choices,Y=V.find(function(X){return T.config.valueComparer(X.value,b)});Y&&!Y.selected&&this._addItem({value:Y.value,label:Y.label,choiceId:Y.id,groupId:Y.groupId,customProperties:Y.customProperties,placeholder:Y.placeholder,keyCode:Y.keyCode})},k._generatePlaceholderValue=function(){if(this._isSelectElement){var b=this.passedElement.placeholderOption;return b?b.text:!1}var T=this.config,V=T.placeholder,Y=T.placeholderValue,X=this.passedElement.element.dataset;if(V){if(Y)return Y;if(X.placeholder)return X.placeholder}return!1},z}(),tu=t.default=Gr}]).default})});var gC=wn((FZ,pC)=>{var IH=typeof Element!="undefined",AH=typeof Map=="function",OH=typeof Set=="function",LH=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function jd(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var r,n,i;if(Array.isArray(e)){if(r=e.length,r!=t.length)return!1;for(n=r;n--!==0;)if(!jd(e[n],t[n]))return!1;return!0}var a;if(AH&&e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(a=e.entries();!(n=a.next()).done;)if(!t.has(n.value[0]))return!1;for(a=e.entries();!(n=a.next()).done;)if(!jd(n.value[1],t.get(n.value[0])))return!1;return!0}if(OH&&e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(a=e.entries();!(n=a.next()).done;)if(!t.has(n.value[0]))return!1;return!0}if(LH&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(t)){if(r=e.length,r!=t.length)return!1;for(n=r;n--!==0;)if(e[n]!==t[n])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf&&typeof e.valueOf=="function"&&typeof t.valueOf=="function")return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString&&typeof e.toString=="function"&&typeof t.toString=="function")return e.toString()===t.toString();if(i=Object.keys(e),r=i.length,r!==Object.keys(t).length)return!1;for(n=r;n--!==0;)if(!Object.prototype.hasOwnProperty.call(t,i[n]))return!1;if(IH&&e instanceof Element)return!1;for(n=r;n--!==0;)if(!((i[n]==="_owner"||i[n]==="__v"||i[n]==="__o")&&e.$$typeof)&&!jd(e[i[n]],t[i[n]]))return!1;return!0}return e!==e&&t!==t}pC.exports=function(t,r){try{return jd(t,r)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}});var S_=wn((Gne,Dy)=>{(function(){var e;typeof Dy!="undefined"?e=Dy.exports=n:e=function(){return this||(0,eval)("this")}(),e.format=n,e.vsprintf=r,typeof console!="undefined"&&typeof console.log=="function"&&(e.printf=t);function t(){console.log(n.apply(null,arguments))}function r(i,a){return n.apply(null,[i].concat(a))}function n(i){for(var a=1,o=[].slice.call(arguments),s=0,u=i.length,l="",c,d=!1,m,h,g=!1,y,v=function(){return o[a++]},D=function(){for(var I="";/\d/.test(i[s]);)I+=i[s++],c=i[s];return I.length>0?parseInt(I):null};s<u;++s)if(c=i[s],d)switch(d=!1,c=="."?(g=!1,c=i[++s]):c=="0"&&i[s+1]=="."?(g=!0,s+=2,c=i[s]):g=!0,y=D(),c){case"b":l+=parseInt(v(),10).toString(2);break;case"c":m=v(),typeof m=="string"||m instanceof String?l+=m:l+=String.fromCharCode(parseInt(m,10));break;case"d":l+=parseInt(v(),10);break;case"f":h=String(parseFloat(v()).toFixed(y||6)),l+=g?h:h.replace(/^0/,"");break;case"j":l+=JSON.stringify(v());break;case"o":l+="0"+parseInt(v(),10).toString(8);break;case"s":l+=v();break;case"x":l+="0x"+parseInt(v(),10).toString(16);break;case"X":l+="0x"+parseInt(v(),10).toString(16).toUpperCase();break;default:l+=c;break}else c==="%"?d=!0:l+=c;return l}})()});var HB={};Rf(HB,{default:()=>wf});module.exports=ov(HB);function fu(e,t){let r=Object.keys(t).map(n=>mF(e,n,t[n]));return r.length===1?r[0]:function(){r.forEach(n=>n())}}function mF(e,t,r){let n=e[t],i=e.hasOwnProperty(t),a=r(n);return n&&Object.setPrototypeOf(a,n),Object.setPrototypeOf(o,a),e[t]=o,s;function o(...u){return a===n&&e[t]===o&&s(),a.apply(this,u)}function s(){e[t]===o&&(i?e[t]=n:delete e[t]),a!==n&&(a=n,Object.setPrototypeOf(o,n||Function))}}var Rn=require("obsidian");var Ws,Xe,cv,pF,Va,sv,dv,Hf,Wf,Bf,Vf,fv,Us={},hv=[],gF=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,pu=Array.isArray;function Ii(e,t){for(var r in t)e[r]=t[r];return e}function mv(e){var t=e.parentNode;t&&t.removeChild(e)}function xr(e,t,r){var n,i,a,o={};for(a in t)a=="key"?n=t[a]:a=="ref"?i=t[a]:o[a]=t[a];if(arguments.length>2&&(o.children=arguments.length>3?Ws.call(arguments,2):r),typeof e=="function"&&e.defaultProps!=null)for(a in e.defaultProps)o[a]===void 0&&(o[a]=e.defaultProps[a]);return $s(e,o,n,i,null)}function $s(e,t,r,n,i){var a={type:e,props:t,key:r,ref:n,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:i==null?++cv:i,__i:-1,__u:0};return i==null&&Xe.vnode!=null&&Xe.vnode(a),a}function Yf(){return{current:null}}function ct(e){return e.children}function Br(e,t){this.props=e,this.context=t}function $a(e,t){if(t==null)return e.__?$a(e.__,e.__i+1):null;for(var r;t<e.__k.length;t++)if((r=e.__k[t])!=null&&r.__e!=null)return r.__e;return typeof e.type=="function"?$a(e):null}function pv(e){var t,r;if((e=e.__)!=null&&e.__c!=null){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if((r=e.__k[t])!=null&&r.__e!=null){e.__e=e.__c.base=r.__e;break}return pv(e)}}function $f(e){(!e.__d&&(e.__d=!0)&&Va.push(e)&&!mu.__r++||sv!==Xe.debounceRendering)&&((sv=Xe.debounceRendering)||dv)(mu)}function mu(){var e,t,r,n,i,a,o,s;for(Va.sort(Hf);e=Va.shift();)e.__d&&(t=Va.length,n=void 0,a=(i=(r=e).__v).__e,o=[],s=[],r.__P&&((n=Ii({},i)).__v=i.__v+1,Xe.vnode&&Xe.vnode(n),zf(r.__P,n,i,r.__n,r.__P.ownerSVGElement!==void 0,32&i.__u?[a]:null,o,a==null?$a(i):a,!!(32&i.__u),s),n.__v=i.__v,n.__.__k[n.__i]=n,vv(o,n,s),n.__e!=a&&pv(n)),Va.length>t&&Va.sort(Hf));mu.__r=0}function gv(e,t,r,n,i,a,o,s,u,l,c){var d,m,h,g,y,v=n&&n.__k||hv,D=t.length;for(r.__d=u,yF(r,t,v),u=r.__d,d=0;d<D;d++)(h=r.__k[d])!=null&&typeof h!="boolean"&&typeof h!="function"&&(m=h.__i===-1?Us:v[h.__i]||Us,h.__i=d,zf(e,h,m,i,a,o,s,u,l,c),g=h.__e,h.ref&&m.ref!=h.ref&&(m.ref&&Kf(m.ref,null,h),c.push(h.ref,h.__c||g,h)),y==null&&g!=null&&(y=g),65536&h.__u||m.__k===h.__k?(u&&!u.isConnected&&(u=$a(m)),u=yv(h,u,e)):typeof h.type=="function"&&h.__d!==void 0?u=h.__d:g&&(u=g.nextSibling),h.__d=void 0,h.__u&=-196609);r.__d=u,r.__e=y}function yF(e,t,r){var n,i,a,o,s,u=t.length,l=r.length,c=l,d=0;for(e.__k=[],n=0;n<u;n++)o=n+d,(i=e.__k[n]=(i=t[n])==null||typeof i=="boolean"||typeof i=="function"?null:typeof i=="string"||typeof i=="number"||typeof i=="bigint"||i.constructor==String?$s(null,i,null,null,null):pu(i)?$s(ct,{children:i},null,null,null):i.constructor===void 0&&i.__b>0?$s(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i)!=null?(i.__=e,i.__b=e.__b+1,s=vF(i,r,o,c),i.__i=s,a=null,s!==-1&&(c--,(a=r[s])&&(a.__u|=131072)),a==null||a.__v===null?(s==-1&&d--,typeof i.type!="function"&&(i.__u|=65536)):s!==o&&(s===o+1?d++:s>o?c>u-o?d+=s-o:d--:s<o?s==o-1&&(d=s-o):d=0,s!==n+d&&(i.__u|=65536))):(a=r[o])&&a.key==null&&a.__e&&!(131072&a.__u)&&(a.__e==e.__d&&(e.__d=$a(a)),Uf(a,a,!1),r[o]=null,c--);if(c)for(n=0;n<l;n++)(a=r[n])!=null&&!(131072&a.__u)&&(a.__e==e.__d&&(e.__d=$a(a)),Uf(a,a))}function yv(e,t,r){var n,i;if(typeof e.type=="function"){for(n=e.__k,i=0;n&&i<n.length;i++)n[i]&&(n[i].__=e,t=yv(n[i],t,r));return t}e.__e!=t&&(r.insertBefore(e.__e,t||null),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType===8);return t}function fi(e,t){return t=t||[],e==null||typeof e=="boolean"||(pu(e)?e.some(function(r){fi(r,t)}):t.push(e)),t}function vF(e,t,r,n){var i=e.key,a=e.type,o=r-1,s=r+1,u=t[r];if(u===null||u&&i==u.key&&a===u.type&&!(131072&u.__u))return r;if(n>(u!=null&&!(131072&u.__u)?1:0))for(;o>=0||s<t.length;){if(o>=0){if((u=t[o])&&!(131072&u.__u)&&i==u.key&&a===u.type)return o;o--}if(s<t.length){if((u=t[s])&&!(131072&u.__u)&&i==u.key&&a===u.type)return s;s++}}return-1}function lv(e,t,r){t[0]==="-"?e.setProperty(t,r==null?"":r):e[t]=r==null?"":typeof r!="number"||gF.test(t)?r:r+"px"}function hu(e,t,r,n,i){var a;e:if(t==="style")if(typeof r=="string")e.style.cssText=r;else{if(typeof n=="string"&&(e.style.cssText=n=""),n)for(t in n)r&&t in r||lv(e.style,t,"");if(r)for(t in r)n&&r[t]===n[t]||lv(e.style,t,r[t])}else if(t[0]==="o"&&t[1]==="n")a=t!==(t=t.replace(/(PointerCapture)$|Capture$/i,"$1")),t=t.toLowerCase()in e||t==="onFocusOut"||t==="onFocusIn"?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=r,r?n?r.u=n.u:(r.u=Wf,e.addEventListener(t,a?Vf:Bf,a)):e.removeEventListener(t,a?Vf:Bf,a);else{if(i)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t in e)try{e[t]=r==null?"":r;break e}catch(o){}typeof r=="function"||(r==null||r===!1&&t[4]!=="-"?e.removeAttribute(t):e.setAttribute(t,r))}}function uv(e){return function(t){if(this.l){var r=this.l[t.type+e];if(t.t==null)t.t=Wf++;else if(t.t<r.u)return;return r(Xe.event?Xe.event(t):t)}}}function zf(e,t,r,n,i,a,o,s,u,l){var c,d,m,h,g,y,v,D,I,C,x,O,A,P,B,G=t.type;if(t.constructor!==void 0)return null;128&r.__u&&(u=!!(32&r.__u),a=[s=t.__e=r.__e]),(c=Xe.__b)&&c(t);e:if(typeof G=="function")try{if(D=t.props,I=(c=G.contextType)&&n[c.__c],C=c?I?I.props.value:c.__:n,r.__c?v=(d=t.__c=r.__c).__=d.__E:("prototype"in G&&G.prototype.render?t.__c=d=new G(D,C):(t.__c=d=new Br(D,C),d.constructor=G,d.render=bF),I&&I.sub(d),d.props=D,d.state||(d.state={}),d.context=C,d.__n=n,m=d.__d=!0,d.__h=[],d._sb=[]),d.__s==null&&(d.__s=d.state),G.getDerivedStateFromProps!=null&&(d.__s==d.state&&(d.__s=Ii({},d.__s)),Ii(d.__s,G.getDerivedStateFromProps(D,d.__s))),h=d.props,g=d.state,d.__v=t,m)G.getDerivedStateFromProps==null&&d.componentWillMount!=null&&d.componentWillMount(),d.componentDidMount!=null&&d.__h.push(d.componentDidMount);else{if(G.getDerivedStateFromProps==null&&D!==h&&d.componentWillReceiveProps!=null&&d.componentWillReceiveProps(D,C),!d.__e&&(d.shouldComponentUpdate!=null&&d.shouldComponentUpdate(D,d.__s,C)===!1||t.__v===r.__v)){for(t.__v!==r.__v&&(d.props=D,d.state=d.__s,d.__d=!1),t.__e=r.__e,t.__k=r.__k,t.__k.forEach(function(J){J&&(J.__=t)}),x=0;x<d._sb.length;x++)d.__h.push(d._sb[x]);d._sb=[],d.__h.length&&o.push(d);break e}d.componentWillUpdate!=null&&d.componentWillUpdate(D,d.__s,C),d.componentDidUpdate!=null&&d.__h.push(function(){d.componentDidUpdate(h,g,y)})}if(d.context=C,d.props=D,d.__P=e,d.__e=!1,O=Xe.__r,A=0,"prototype"in G&&G.prototype.render){for(d.state=d.__s,d.__d=!1,O&&O(t),c=d.render(d.props,d.state,d.context),P=0;P<d._sb.length;P++)d.__h.push(d._sb[P]);d._sb=[]}else do d.__d=!1,O&&O(t),c=d.render(d.props,d.state,d.context),d.state=d.__s;while(d.__d&&++A<25);d.state=d.__s,d.getChildContext!=null&&(n=Ii(Ii({},n),d.getChildContext())),m||d.getSnapshotBeforeUpdate==null||(y=d.getSnapshotBeforeUpdate(h,g)),gv(e,pu(B=c!=null&&c.type===ct&&c.key==null?c.props.children:c)?B:[B],t,r,n,i,a,o,s,u,l),d.base=t.__e,t.__u&=-161,d.__h.length&&o.push(d),v&&(d.__E=d.__=null)}catch(J){t.__v=null,u||a!=null?(t.__e=s,t.__u|=u?160:32,a[a.indexOf(s)]=null):(t.__e=r.__e,t.__k=r.__k),Xe.__e(J,t,r)}else a==null&&t.__v===r.__v?(t.__k=r.__k,t.__e=r.__e):t.__e=wF(r.__e,t,r,n,i,a,o,u,l);(c=Xe.diffed)&&c(t)}function vv(e,t,r){t.__d=void 0;for(var n=0;n<r.length;n++)Kf(r[n],r[++n],r[++n]);Xe.__c&&Xe.__c(t,e),e.some(function(i){try{e=i.__h,i.__h=[],e.some(function(a){a.call(i)})}catch(a){Xe.__e(a,i.__v)}})}function wF(e,t,r,n,i,a,o,s,u){var l,c,d,m,h,g,y,v=r.props,D=t.props,I=t.type;if(I==="svg"&&(i=!0),a!=null){for(l=0;l<a.length;l++)if((h=a[l])&&"setAttribute"in h==!!I&&(I?h.localName===I:h.nodeType===3)){e=h,a[l]=null;break}}if(e==null){if(I===null)return document.createTextNode(D);e=i?document.createElementNS("http://www.w3.org/2000/svg",I):document.createElement(I,D.is&&D),a=null,s=!1}if(I===null)v===D||s&&e.data===D||(e.data=D);else{if(a=a&&Ws.call(e.childNodes),v=r.props||Us,!s&&a!=null)for(v={},l=0;l<e.attributes.length;l++)v[(h=e.attributes[l]).name]=h.value;for(l in v)h=v[l],l=="children"||(l=="dangerouslySetInnerHTML"?d=h:l==="key"||l in D||hu(e,l,null,h,i));for(l in D)h=D[l],l=="children"?m=h:l=="dangerouslySetInnerHTML"?c=h:l=="value"?g=h:l=="checked"?y=h:l==="key"||s&&typeof h!="function"||v[l]===h||hu(e,l,h,v[l],i);if(c)s||d&&(c.__html===d.__html||c.__html===e.innerHTML)||(e.innerHTML=c.__html),t.__k=[];else if(d&&(e.innerHTML=""),gv(e,pu(m)?m:[m],t,r,n,i&&I!=="foreignObject",a,o,a?a[0]:r.__k&&$a(r,0),s,u),a!=null)for(l=a.length;l--;)a[l]!=null&&mv(a[l]);s||(l="value",g!==void 0&&(g!==e[l]||I==="progress"&&!g||I==="option"&&g!==v[l])&&hu(e,l,g,v[l],!1),l="checked",y!==void 0&&y!==e[l]&&hu(e,l,y,v[l],!1))}return e}function Kf(e,t,r){try{typeof e=="function"?e(t):e.current=t}catch(n){Xe.__e(n,r)}}function Uf(e,t,r){var n,i;if(Xe.unmount&&Xe.unmount(e),(n=e.ref)&&(n.current&&n.current!==e.__e||Kf(n,null,t)),(n=e.__c)!=null){if(n.componentWillUnmount)try{n.componentWillUnmount()}catch(a){Xe.__e(a,t)}n.base=n.__P=null}if(n=e.__k)for(i=0;i<n.length;i++)n[i]&&Uf(n[i],t,r||typeof e.type!="function");r||e.__e==null||mv(e.__e),e.__c=e.__=e.__e=e.__d=void 0}function bF(e,t,r){return this.constructor(e,r)}function xo(e,t,r){var n,i,a,o;Xe.__&&Xe.__(e,t),i=(n=typeof r=="function")?null:r&&r.__k||t.__k,a=[],o=[],zf(t,e=(!n&&r||t).__k=xr(ct,null,[e]),i||Us,Us,t.ownerSVGElement!==void 0,!n&&r?[r]:i?null:t.firstChild?Ws.call(t.childNodes):null,a,!n&&r?r:i?i.__e:t.firstChild,n,o),vv(a,e,o)}function jf(e,t){xo(e,t,jf)}function wv(e,t,r){var n,i,a,o,s=Ii({},e.props);for(a in e.type&&e.type.defaultProps&&(o=e.type.defaultProps),t)a=="key"?n=t[a]:a=="ref"?i=t[a]:s[a]=t[a]===void 0&&o!==void 0?o[a]:t[a];return arguments.length>2&&(s.children=arguments.length>3?Ws.call(arguments,2):r),$s(e.type,s,n||e.key,i||e.ref,null)}function aa(e,t){var r={__c:t="__cC"+fv++,__:e,Consumer:function(n,i){return n.children(i)},Provider:function(n){var i,a;return this.getChildContext||(i=[],(a={})[t]=this,this.getChildContext=function(){return a},this.shouldComponentUpdate=function(o){this.props.value!==o.value&&i.some(function(s){s.__e=!0,$f(s)})},this.sub=function(o){i.push(o);var s=o.componentWillUnmount;o.componentWillUnmount=function(){i.splice(i.indexOf(o),1),s&&s.call(o)}}),n.children}};return r.Provider.__=r.Consumer.contextType=r}Ws=hv.slice,Xe={__e:function(e,t,r,n){for(var i,a,o;t=t.__;)if((i=t.__c)&&!i.__)try{if((a=i.constructor)&&a.getDerivedStateFromError!=null&&(i.setState(a.getDerivedStateFromError(e)),o=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,n||{}),o=i.__d),o)return i.__E=i}catch(s){e=s}throw e}},cv=0,pF=function(e){return e!=null&&e.constructor==null},Br.prototype.setState=function(e,t){var r;r=this.__s!=null&&this.__s!==this.state?this.__s:this.__s=Ii({},this.state),typeof e=="function"&&(e=e(Ii({},r),this.props)),e&&Ii(r,e),e!=null&&this.__v&&(t&&this._sb.push(t),$f(this))},Br.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),$f(this))},Br.prototype.render=ct,Va=[],dv=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):activeWindow.setTimeout,Hf=function(e,t){return e.__v.__b-t.__v.__b},mu.__r=0,Wf=0,Bf=uv(!1),Vf=uv(!0),fv=0;var oa,Qt,qf,bv,Co=0,Mv=[],gu=[],an=Xe,Dv=an.__b,Sv=an.__r,Ev=an.diffed,kv=an.__c,xv=an.unmount,Cv=an.__;function _o(e,t){an.__h&&an.__h(Qt,e,Co||t),Co=0;var r=Qt.__H||(Qt.__H={__:[],__h:[]});return e>=r.__.length&&r.__.push({__V:gu}),r.__[e]}function Ne(e){return Co=1,Jf(Av,e)}function Jf(e,t,r){var n=_o(oa++,2);if(n.t=e,!n.__c&&(n.__=[r?r(t):Av(void 0,t),function(s){var u=n.__N?n.__N[0]:n.__[0],l=n.t(u,s);u!==l&&(n.__N=[l,n.__[1]],n.__c.setState({}))}],n.__c=Qt,!Qt.u)){var i=function(s,u,l){if(!n.__c.__H)return!0;var c=n.__c.__H.__.filter(function(m){return!!m.__c});if(c.every(function(m){return!m.__N}))return!a||a.call(this,s,u,l);var d=!1;return c.forEach(function(m){if(m.__N){var h=m.__[0];m.__=m.__N,m.__N=void 0,h!==m.__[0]&&(d=!0)}}),!(!d&&n.__c.props===s)&&(!a||a.call(this,s,u,l))};Qt.u=!0;var a=Qt.shouldComponentUpdate,o=Qt.componentWillUpdate;Qt.componentWillUpdate=function(s,u,l){if(this.__e){var c=a;a=void 0,i(s,u,l),a=c}o&&o.call(this,s,u,l)},Qt.shouldComponentUpdate=i}return n.__N||n.__}function Ae(e,t){var r=_o(oa++,3);!an.__s&&Zf(r.__H,t)&&(r.__=e,r.i=t,Qt.__H.__h.push(r))}function Ai(e,t){var r=_o(oa++,4);!an.__s&&Zf(r.__H,t)&&(r.__=e,r.i=t,Qt.__h.push(r))}function Fe(e){return Co=5,Re(function(){return{current:e}},[])}function Tv(e,t,r){Co=6,Ai(function(){return typeof e=="function"?(e(t()),function(){return e(null)}):e?(e.current=t(),function(){return e.current=null}):void 0},r==null?r:r.concat(e))}function Re(e,t){var r=_o(oa++,7);return Zf(r.__H,t)?(r.__V=e(),r.i=t,r.__h=e,r.__V):r.__}function Ye(e,t){return Co=8,Re(function(){return e},t)}function Ee(e){var t=Qt.context[e.__c],r=_o(oa++,9);return r.c=e,t?(r.__==null&&(r.__=!0,t.sub(Qt)),t.props.value):e.__}function Fv(e,t){an.useDebugValue&&an.useDebugValue(t?t(e):e)}function Iv(){var e=_o(oa++,11);if(!e.__){for(var t=Qt.__v;t!==null&&!t.__m&&t.__!==null;)t=t.__;var r=t.__m||(t.__m=[0,0]);e.__="P"+r[0]+"-"+r[1]++}return e.__}function DF(){for(var e;e=Mv.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(yu),e.__H.__h.forEach(Gf),e.__H.__h=[]}catch(t){e.__H.__h=[],an.__e(t,e.__v)}}an.__b=function(e){Qt=null,Dv&&Dv(e)},an.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),Cv&&Cv(e,t)},an.__r=function(e){Sv&&Sv(e),oa=0;var t=(Qt=e.__c).__H;t&&(qf===Qt?(t.__h=[],Qt.__h=[],t.__.forEach(function(r){r.__N&&(r.__=r.__N),r.__V=gu,r.__N=r.i=void 0})):(t.__h.forEach(yu),t.__h.forEach(Gf),t.__h=[],oa=0)),qf=Qt},an.diffed=function(e){Ev&&Ev(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(Mv.push(t)!==1&&bv===an.requestAnimationFrame||((bv=an.requestAnimationFrame)||SF)(DF)),t.__H.__.forEach(function(r){r.i&&(r.__H=r.i),r.__V!==gu&&(r.__=r.__V),r.i=void 0,r.__V=gu})),qf=Qt=null},an.__c=function(e,t){t.some(function(r){try{r.__h.forEach(yu),r.__h=r.__h.filter(function(n){return!n.__||Gf(n)})}catch(n){t.some(function(i){i.__h&&(i.__h=[])}),t=[],an.__e(n,r.__v)}}),kv&&kv(e,t)},an.unmount=function(e){xv&&xv(e);var t,r=e.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{yu(n)}catch(i){t=i}}),r.__H=void 0,t&&an.__e(t,r.__v))};var _v=typeof activeWindow.requestAnimationFrame=="function";function SF(e){var t,r=function(){activeWindow.clearTimeout(n),_v&&activeWindow.cancelAnimationFrame(t),activeWindow.setTimeout(e)},n=activeWindow.setTimeout(r,100);_v&&(t=activeWindow.requestAnimationFrame(r))}function yu(e){var t=Qt,r=e.__c;typeof r=="function"&&(e.__c=void 0,r()),Qt=t}function Gf(e){var t=Qt;e.__c=e.__(),Qt=t}function Zf(e,t){return!e||e.length!==t.length||t.some(function(r,n){return r!==e[n]})}function Av(e,t){return typeof t=="function"?t(e):t}function $v(e,t){for(var r in t)e[r]=t[r];return e}function Xf(e,t){for(var r in e)if(r!=="__source"&&!(r in t))return!0;for(var n in t)if(n!=="__source"&&e[n]!==t[n])return!0;return!1}function eh(e,t){this.props=e,this.context=t}function zt(e,t){function r(i){var a=this.props.ref,o=a==i.ref;return!o&&a&&(a.call?a(null):a.current=null),t?!t(this.props,i)||!o:Xf(this.props,i)}function n(i){return this.shouldComponentUpdate=r,xr(e,i)}return n.displayName="Memo("+(e.displayName||e.name)+")",n.prototype.isReactComponent=!0,n.__f=!0,n}(eh.prototype=new Br).isPureReactComponent=!0,eh.prototype.shouldComponentUpdate=function(e,t){return Xf(this.props,e)||Xf(this.state,t)};var Ov=Xe.__b;Xe.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),Ov&&Ov(e)};var EF=typeof Symbol!="undefined"&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function kF(e){function t(r){var n=$v({},r);return delete n.ref,e(n,r.ref||null)}return t.$$typeof=EF,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t}var Lv=function(e,t){return e==null?null:fi(fi(e).map(t))},xF={map:Lv,forEach:Lv,count:function(e){return e?fi(e).length:0},only:function(e){var t=fi(e);if(t.length!==1)throw"Children.only";return t[0]},toArray:fi},CF=Xe.__e;Xe.__e=function(e,t,r,n){if(e.then){for(var i,a=t;a=a.__;)if((i=a.__c)&&i.__c)return t.__e==null&&(t.__e=r.__e,t.__k=r.__k),i.__c(e,t)}CF(e,t,r,n)};var Pv=Xe.unmount;function Uv(e,t,r){return e&&(e.__c&&e.__c.__H&&(e.__c.__H.__.forEach(function(n){typeof n.__c=="function"&&n.__c()}),e.__c.__H=null),(e=$v({},e)).__c!=null&&(e.__c.__P===r&&(e.__c.__P=t),e.__c=null),e.__k=e.__k&&e.__k.map(function(n){return Uv(n,t,r)})),e}function Wv(e,t,r){return e&&r&&(e.__v=null,e.__k=e.__k&&e.__k.map(function(n){return Wv(n,t,r)}),e.__c&&e.__c.__P===t&&(e.__e&&r.appendChild(e.__e),e.__c.__e=!0,e.__c.__P=r)),e}function vu(){this.__u=0,this.t=null,this.__b=null}function Yv(e){var t=e.__.__c;return t&&t.__a&&t.__a(e)}function _F(e){var t,r,n;function i(a){if(t||(t=e()).then(function(o){r=o.default||o},function(o){n=o}),n)throw n;if(!r)throw t;return xr(r,a)}return i.displayName="Lazy",i.__f=!0,i}function Ys(){this.u=null,this.o=null}Xe.unmount=function(e){var t=e.__c;t&&t.__R&&t.__R(),t&&32&e.__u&&(e.type=null),Pv&&Pv(e)},(vu.prototype=new Br).__c=function(e,t){var r=t.__c,n=this;n.t==null&&(n.t=[]),n.t.push(r);var i=Yv(n.__v),a=!1,o=function(){a||(a=!0,r.__R=null,i?i(s):s())};r.__R=o;var s=function(){if(!--n.__u){if(n.state.__a){var u=n.state.__a;n.__v.__k[0]=Wv(u,u.__c.__P,u.__c.__O)}var l;for(n.setState({__a:n.__b=null});l=n.t.pop();)l.forceUpdate()}};n.__u++||32&t.__u||n.setState({__a:n.__b=n.__v.__k[0]}),e.then(o,o)},vu.prototype.componentWillUnmount=function(){this.t=[]},vu.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),n=this.__v.__k[0].__c;this.__v.__k[0]=Uv(this.__b,r,n.__O=n.__P)}this.__b=null}var i=t.__a&&xr(ct,null,e.fallback);return i&&(i.__u&=-33),[xr(ct,null,t.__a?null:e.children),i]};var Nv=function(e,t,r){if(++r[1]===r[0]&&e.o.delete(t),e.props.revealOrder&&(e.props.revealOrder[0]!=="t"||!e.o.size))for(r=e.u;r;){for(;r.length>3;)r.pop()();if(r[1]<r[0])break;e.u=r=r[2]}};function MF(e){return this.getChildContext=function(){return e.context},e.children}function TF(e){var t=this,r=e.i;t.componentWillUnmount=function(){xo(null,t.l),t.l=null,t.i=null},t.i&&t.i!==r&&t.componentWillUnmount(),t.l||(t.i=r,t.l={nodeType:1,parentNode:r,childNodes:[],appendChild:function(n){this.childNodes.push(n),t.i.appendChild(n)},insertBefore:function(n,i){this.childNodes.push(n),t.i.appendChild(n)},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),t.i.removeChild(n)}}),xo(xr(MF,{context:t.context},e.__v),t.l)}function Oi(e,t){var r=xr(TF,{__v:e,i:t});return r.containerInfo=t,r}(Ys.prototype=new Br).__a=function(e){var t=this,r=Yv(t.__v),n=t.o.get(e);return n[0]++,function(i){var a=function(){t.props.revealOrder?(n.push(i),Nv(t,e,n)):i()};r?r(a):a()}},Ys.prototype.render=function(e){this.u=null,this.o=new Map;var t=fi(e.children);e.revealOrder&&e.revealOrder[0]==="b"&&t.reverse();for(var r=t.length;r--;)this.o.set(t[r],this.u=[1,0,this.u]);return e.children},Ys.prototype.componentDidUpdate=Ys.prototype.componentDidMount=function(){var e=this;this.o.forEach(function(t,r){Nv(e,r,t)})};var zv=typeof Symbol!="undefined"&&Symbol.for&&Symbol.for("react.element")||60103,FF=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,IF=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,AF=/[A-Z0-9]/g,OF=typeof document!="undefined",LF=function(e){return(typeof Symbol!="undefined"&&typeof Symbol()=="symbol"?/fil|che|rad/:/fil|che|ra/).test(e)};function Li(e,t,r){return t.__k==null&&(t.textContent=""),xo(e,t),typeof r=="function"&&r(),e?e.__c:null}function PF(e,t,r){return jf(e,t),typeof r=="function"&&r(),e?e.__c:null}Br.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(e){Object.defineProperty(Br.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})});var Rv=Xe.event;function NF(){}function RF(){return this.cancelBubble}function HF(){return this.defaultPrevented}Xe.event=function(e){return Rv&&(e=Rv(e)),e.persist=NF,e.isPropagationStopped=RF,e.isDefaultPrevented=HF,e.nativeEvent=e};var th,BF={enumerable:!1,configurable:!0,get:function(){return this.class}},Hv=Xe.vnode;Xe.vnode=function(e){typeof e.type=="string"&&function(t){var r=t.props,n=t.type,i={};for(var a in r){var o=r[a];if(!(a==="value"&&"defaultValue"in r&&o==null||OF&&a==="children"&&n==="noscript"||a==="class"||a==="className")){var s=a.toLowerCase();a==="defaultValue"&&"value"in r&&r.value==null?a="value":a==="download"&&o===!0?o="":s==="translate"&&o==="no"?o=!1:s==="ondoubleclick"?a="ondblclick":s!=="onchange"||n!=="input"&&n!=="textarea"||LF(r.type)?s==="onfocus"?a="onfocusin":s==="onblur"?a="onfocusout":IF.test(a)?a=s:n.indexOf("-")===-1&&FF.test(a)?a=a.replace(AF,"-$&").toLowerCase():o===null&&(o=void 0):s=a="oninput",s==="oninput"&&i[a=s]&&(a="oninputCapture"),i[a]=o}}n=="select"&&i.multiple&&Array.isArray(i.value)&&(i.value=fi(r.children).forEach(function(u){u.props.selected=i.value.indexOf(u.props.value)!=-1})),n=="select"&&i.defaultValue!=null&&(i.value=fi(r.children).forEach(function(u){u.props.selected=i.multiple?i.defaultValue.indexOf(u.props.value)!=-1:i.defaultValue==u.props.value})),r.class&&!r.className?(i.class=r.class,Object.defineProperty(i,"className",BF)):(r.className&&!r.class||r.class&&r.className)&&(i.class=i.className=r.className),t.props=i}(e),e.$$typeof=zv,Hv&&Hv(e)};var Bv=Xe.__r;Xe.__r=function(e){Bv&&Bv(e),th=e.__c};var Vv=Xe.diffed;Xe.diffed=function(e){Vv&&Vv(e);var t=e.props,r=e.__e;r!=null&&e.type==="textarea"&&"value"in t&&t.value!==r.value&&(r.value=t.value==null?"":t.value),th=null};var VF={ReactCurrentDispatcher:{current:{readContext:function(e){return th.__n[e.__c].props.value}}}};function $F(e){return xr.bind(null,e)}function wu(e){return!!e&&e.$$typeof===zv}function UF(e){return wu(e)&&e.type===ct}function WF(e){return!!e&&!!e.displayName&&(typeof e.displayName=="string"||e.displayName instanceof String)&&e.displayName.startsWith("Memo(")}function YF(e){return wu(e)?wv.apply(null,arguments):e}function Pi(e){return!!e.__k&&(xo(null,e),!0)}function zF(e){return e&&(e.base||e.nodeType===1&&e)||null}var KF=function(e,t){return e(t)},jF=function(e,t){return e(t)},qF=ct;function Kv(e){e()}function GF(e){return e}function JF(){return[!1,Kv]}var ZF=Ai,QF=wu;function XF(e,t){var r=t(),n=Ne({h:{__:r,v:t}}),i=n[0].h,a=n[1];return Ai(function(){i.__=r,i.v=t,Qf(i)&&a({h:i})},[e,r,t]),Ae(function(){return Qf(i)&&a({h:i}),e(function(){Qf(i)&&a({h:i})})},[e]),r}function Qf(e){var t,r,n=e.v,i=e.__;try{var a=n();return!((t=i)===(r=a)&&(t!==0||1/t==1/r)||t!=t&&r!=r)}catch(o){return!0}}var $e={useState:Ne,useId:Iv,useReducer:Jf,useEffect:Ae,useLayoutEffect:Ai,useInsertionEffect:ZF,useTransition:JF,useDeferredValue:GF,useSyncExternalStore:XF,startTransition:Kv,useRef:Fe,useImperativeHandle:Tv,useMemo:Re,useCallback:Ye,useContext:Ee,useDebugValue:Fv,version:"17.0.2",Children:xF,render:Li,hydrate:PF,unmountComponentAtNode:Pi,createPortal:Oi,createElement:xr,createContext:aa,createFactory:$F,cloneElement:YF,createRef:Yf,Fragment:ct,isValidElement:wu,isElement:QF,isFragment:UF,isMemo:WF,findDOMNode:zF,Component:Br,PureComponent:eh,memo:zt,forwardRef:kF,flushSync:jF,unstable_batchedUpdates:KF,StrictMode:qF,Suspense:vu,SuspenseList:Ys,lazy:_F,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:VF};function Ge(e){if(typeof e=="string"||typeof e=="number")return""+e;let t="";if(Array.isArray(e))for(let r=0,n;r<e.length;r++)(n=Ge(e[r]))!==""&&(t+=(t&&" ")+n);else for(let r in e)e[r]&&(t+=(t&&" ")+r);return t}var Ss=Ct(ln());var Sh=Ct(ln()),da=require("obsidian");var rw=Ct(tw()),la=Ct(ln());function nw(e){return Object.prototype.toString.call(e)==="[object Object]"}function Ni(e){var t,r;return nw(e)===!1?!1:(t=e.constructor,t===void 0?!0:(r=t.prototype,!(nw(r)===!1||r.hasOwnProperty("isPrototypeOf")===!1)))}function DI(e,t){return e.length!==t.length?!1:e.every((r,n,i)=>n===i.length-1?r!==t[n]:r===t[n])}function SI(e,t){return e.length===t.length&&e.every((r,n)=>r===t[n])}function js(e,t){if(SI(e,t))return 2;if(!DI(e,t))return 3;let r=e.length-1;return e[r]<t[r]?1:0}function un(e,t){let r=t.length?t[0]:null;return r!==null&&e.children&&e.children[r]?un(e.children[r],t.slice(1)):e}function kI(e,t){let r=t;for(let n=e.length-1;n>=0;n--)r={children:{[e[n]]:r}};return r}function qs(e,t){let r=t;for(let n=e.length-2;n>=0;n--)r={children:{[e[n]]:r}};return r}function iw(e,t){let r=t?[e.last(),1,t]:[e.last(),1];return qs(e,{children:{$splice:[r]}})}function aw(e,t,r=0){return qs(e,{children:{$splice:[[e.last()+r,0,...t]]}})}function xI(e,t){return qs(e,{children:{$push:t}})}function CI(e,t){return qs(e,{children:{$unshift:t}})}function Ri(e,t,r,n,i){let a=n?n(un(e,t)):un(e,t),s=js(t,r)===1?-1:0,u=i==null?void 0:i(un(e,t)),l=iw(t,u),c=aw(r,Array.isArray(a)?a:[a],s),d=(0,rw.default)(l,c,{isMergeableObject:h=>Ni(h)||Array.isArray(h)});return(0,la.default)(e,d)}function mi(e,t,r){return(0,la.default)(e,iw(t,r))}function Xr(e,t,r){return(0,la.default)(e,aw(t,r))}function ah(e,t,r){return(0,la.default)(e,xI(t,r))}function ow(e,t,r){return(0,la.default)(e,CI(t,r))}function Du(e,t,r){return(0,la.default)(e,kI(t,r))}function oh(e,t,r){return(0,la.default)(e,qs(t,r))}var Gs=["MO","TU","WE","TH","FR","SA","SU"],Mn=function(){function e(t,r){if(r===0)throw new Error("Can't create weekday with n == 0");this.weekday=t,this.n=r}return e.fromStr=function(t){return new e(Gs.indexOf(t))},e.prototype.nth=function(t){return this.n===t?this:new e(this.weekday,t)},e.prototype.equals=function(t){return this.weekday===t.weekday&&this.n===t.n},e.prototype.toString=function(){var t=Gs[this.weekday];return this.n&&(t=(this.n>0?"+":"")+String(this.n)+t),t},e.prototype.getJsWeekday=function(){return this.weekday===6?0:this.weekday+1},e}();var Gt=function(e){return e!=null},Cr=function(e){return typeof e=="number"},sh=function(e){return typeof e=="string"&&Gs.includes(e)},$n=Array.isArray,$r=function(e,t){t===void 0&&(t=e),arguments.length===1&&(t=e,e=0);for(var r=[],n=e;n<t;n++)r.push(n);return r};var wt=function(e,t){var r=0,n=[];if($n(e))for(;r<t;r++)n[r]=[].concat(e);else for(;r<t;r++)n[r]=e;return n},sw=function(e){return $n(e)?e:[e]};function Wa(e,t,r){r===void 0&&(r=" ");var n=String(e);return t=t>>0,n.length>t?String(n):(t=t-n.length,t>r.length&&(r+=wt(r,t/r.length)),r.slice(0,t)+String(n))}var lw=function(e,t,r){var n=e.split(t);return r?n.slice(0,r).concat([n.slice(r).join(t)]):n},qn=function(e,t){var r=e%t;return r*t<0?r+t:r},Su=function(e,t){return{div:Math.floor(e/t),mod:qn(e,t)}},_r=function(e){return!Gt(e)||e.length===0},bn=function(e){return!_r(e)},Et=function(e,t){return bn(e)&&e.indexOf(t)!==-1};var pi=function(e,t,r,n,i,a){return n===void 0&&(n=0),i===void 0&&(i=0),a===void 0&&(a=0),new Date(Date.UTC(e,t-1,r,n,i,a))},_I=[31,28,31,30,31,30,31,31,30,31,30,31],cw=1e3*60*60*24,Eu=9999,dw=pi(1970,1,1),MI=[6,0,1,2,3,4,5];var To=function(e){return e%4===0&&e%100!==0||e%400===0},lh=function(e){return e instanceof Date},Ya=function(e){return lh(e)&&!isNaN(e.getTime())};var TI=function(e,t){var r=e.getTime(),n=t.getTime(),i=r-n;return Math.round(i/cw)},Js=function(e){return TI(e,dw)},ku=function(e){return new Date(dw.getTime()+e*cw)},FI=function(e){var t=e.getUTCMonth();return t===1&&To(e.getUTCFullYear())?29:_I[t]},Hi=function(e){return MI[e.getUTCDay()]},uh=function(e,t){var r=pi(e,t+1,1);return[Hi(r),FI(r)]},xu=function(e,t){return t=t||e,new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()))},Cu=function(e){var t=new Date(e.getTime());return t},ch=function(e){for(var t=[],r=0;r<e.length;r++)t.push(Cu(e[r]));return t},Bi=function(e){e.sort(function(t,r){return t.getTime()-r.getTime()})},Fo=function(e,t){t===void 0&&(t=!0);var r=new Date(e);return[Wa(r.getUTCFullYear().toString(),4,"0"),Wa(r.getUTCMonth()+1,2,"0"),Wa(r.getUTCDate(),2,"0"),"T",Wa(r.getUTCHours(),2,"0"),Wa(r.getUTCMinutes(),2,"0"),Wa(r.getUTCSeconds(),2,"0"),t?"Z":""].join("")},Zs=function(e){var t=/^(\d{4})(\d{2})(\d{2})(T(\d{2})(\d{2})(\d{2})Z?)?$/,r=t.exec(e);if(!r)throw new Error("Invalid UNTIL value: ".concat(e));return new Date(Date.UTC(parseInt(r[1],10),parseInt(r[2],10)-1,parseInt(r[3],10),parseInt(r[5],10)||0,parseInt(r[6],10)||0,parseInt(r[7],10)||0))},uw=function(e,t){var r=e.toLocaleString("sv-SE",{timeZone:t});return r.replace(" ","T")+"Z"},fw=function(e,t){var r=Intl.DateTimeFormat().resolvedOptions().timeZone,n=new Date(uw(e,r)),i=new Date(uw(e,t!=null?t:"UTC")),a=i.getTime()-n.getTime();return new Date(e.getTime()-a)};var II=function(){function e(t,r){this.minDate=null,this.maxDate=null,this._result=[],this.total=0,this.method=t,this.args=r,t==="between"?(this.maxDate=r.inc?r.before:new Date(r.before.getTime()-1),this.minDate=r.inc?r.after:new Date(r.after.getTime()+1)):t==="before"?this.maxDate=r.inc?r.dt:new Date(r.dt.getTime()-1):t==="after"&&(this.minDate=r.inc?r.dt:new Date(r.dt.getTime()+1))}return e.prototype.accept=function(t){++this.total;var r=this.minDate&&t<this.minDate,n=this.maxDate&&t>this.maxDate;if(this.method==="between"){if(r)return!0;if(n)return!1}else if(this.method==="before"){if(n)return!1}else if(this.method==="after")return r?!0:(this.add(t),!1);return this.add(t)},e.prototype.add=function(t){return this._result.push(t),!0},e.prototype.getValue=function(){var t=this._result;switch(this.method){case"all":case"between":return t;case"before":case"after":default:return t.length?t[t.length-1]:null}},e.prototype.clone=function(){return new e(this.method,this.args)},e}(),Vi=II;var dh=function(e,t){return dh=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[i]=n[i])},dh(e,t)};function Io(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");dh(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}var Un=function(){return Un=Object.assign||function(t){for(var r,n=1,i=arguments.length;n<i;n++){r=arguments[n];for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&(t[a]=r[a])}return t},Un.apply(this,arguments)};function Ao(e,t,r,n){function i(a){return a instanceof r?a:new r(function(o){o(a)})}return new(r||(r=Promise))(function(a,o){function s(c){try{l(n.next(c))}catch(d){o(d)}}function u(c){try{l(n.throw(c))}catch(d){o(d)}}function l(c){c.done?a(c.value):i(c.value).then(s,u)}l((n=n.apply(e,t||[])).next())})}function Oo(e,t){var r={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},n,i,a,o;return o={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(o[Symbol.iterator]=function(){return this}),o;function s(l){return function(c){return u([l,c])}}function u(l){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,l[0]&&(r=0)),r;)try{if(n=1,i&&(a=l[0]&2?i.return:l[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,l[1])).done)return a;switch(i=0,a&&(l=[l[0]&2,a.value]),l[0]){case 0:case 1:a=l;break;case 4:return r.label++,{value:l[1],done:!1};case 5:r.label++,i=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(a=r.trys,!(a=a.length>0&&a[a.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!a||l[1]>a[0]&&l[1]<a[3])){r.label=l[1];break}if(l[0]===6&&r.label<a[1]){r.label=a[1],a=l;break}if(a&&r.label<a[2]){r.label=a[2],r.ops.push(l);break}a[2]&&r.ops.pop(),r.trys.pop();continue}l=t.call(e,r)}catch(c){l=[6,c],i=0}finally{n=a=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}function AI(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),i,a=[],o;try{for(;(t===void 0||t-- >0)&&!(i=n.next()).done;)a.push(i.value)}catch(s){o={error:s}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(o)throw o.error}}return a}function hw(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(AI(arguments[t]));return e}function ke(e,t,r){if(r||arguments.length===2)for(var n=0,i=t.length,a;n<i;n++)(a||!(n in t))&&(a||(a=Array.prototype.slice.call(t,0,n)),a[n]=t[n]);return e.concat(a||Array.prototype.slice.call(t))}var OI=function(e){Io(t,e);function t(r,n,i){var a=e.call(this,r,n)||this;return a.iterator=i,a}return t.prototype.add=function(r){return this.iterator(r,this._result.length)?(this._result.push(r),!0):!1},t}(Vi),fh=OI;var LI={dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],tokens:{SKIP:/^[ \r\n\t]+|^\.$/,number:/^[1-9][0-9]*/,numberAsText:/^(one|two|three)/i,every:/^every/i,"day(s)":/^days?/i,"weekday(s)":/^weekdays?/i,"week(s)":/^weeks?/i,"hour(s)":/^hours?/i,"minute(s)":/^minutes?/i,"month(s)":/^months?/i,"year(s)":/^years?/i,on:/^(on|in)/i,at:/^(at)/i,the:/^the/i,first:/^first/i,second:/^second/i,third:/^third/i,nth:/^([1-9][0-9]*)(\.|th|nd|rd|st)/i,last:/^last/i,for:/^for/i,"time(s)":/^times?/i,until:/^(un)?til/i,monday:/^mo(n(day)?)?/i,tuesday:/^tu(e(s(day)?)?)?/i,wednesday:/^we(d(n(esday)?)?)?/i,thursday:/^th(u(r(sday)?)?)?/i,friday:/^fr(i(day)?)?/i,saturday:/^sa(t(urday)?)?/i,sunday:/^su(n(day)?)?/i,january:/^jan(uary)?/i,february:/^feb(ruary)?/i,march:/^mar(ch)?/i,april:/^apr(il)?/i,may:/^may/i,june:/^june?/i,july:/^july?/i,august:/^aug(ust)?/i,september:/^sep(t(ember)?)?/i,october:/^oct(ober)?/i,november:/^nov(ember)?/i,december:/^dec(ember)?/i,comma:/^(,\s*|(and|or)\s*)+/i}},za=LI;var mw=function(e,t){return e.indexOf(t)!==-1},PI=function(e){return e.toString()},NI=function(e,t,r){return"".concat(t," ").concat(r,", ").concat(e)},RI=function(){function e(t,r,n,i){if(r===void 0&&(r=PI),n===void 0&&(n=za),i===void 0&&(i=NI),this.text=[],this.language=n||za,this.gettext=r,this.dateFormatter=i,this.rrule=t,this.options=t.options,this.origOptions=t.origOptions,this.origOptions.bymonthday){var a=[].concat(this.options.bymonthday),o=[].concat(this.options.bynmonthday);a.sort(function(c,d){return c-d}),o.sort(function(c,d){return d-c}),this.bymonthday=a.concat(o),this.bymonthday.length||(this.bymonthday=null)}if(Gt(this.origOptions.byweekday)){var s=$n(this.origOptions.byweekday)?this.origOptions.byweekday:[this.origOptions.byweekday],u=String(s);this.byweekday={allWeeks:s.filter(function(c){return!c.n}),someWeeks:s.filter(function(c){return!!c.n}),isWeekdays:u.indexOf("MO")!==-1&&u.indexOf("TU")!==-1&&u.indexOf("WE")!==-1&&u.indexOf("TH")!==-1&&u.indexOf("FR")!==-1&&u.indexOf("SA")===-1&&u.indexOf("SU")===-1,isEveryDay:u.indexOf("MO")!==-1&&u.indexOf("TU")!==-1&&u.indexOf("WE")!==-1&&u.indexOf("TH")!==-1&&u.indexOf("FR")!==-1&&u.indexOf("SA")!==-1&&u.indexOf("SU")!==-1};var l=function(c,d){return c.weekday-d.weekday};this.byweekday.allWeeks.sort(l),this.byweekday.someWeeks.sort(l),this.byweekday.allWeeks.length||(this.byweekday.allWeeks=null),this.byweekday.someWeeks.length||(this.byweekday.someWeeks=null)}else this.byweekday=null}return e.isFullyConvertible=function(t){var r=!0;if(!(t.options.freq in e.IMPLEMENTED)||t.origOptions.until&&t.origOptions.count)return!1;for(var n in t.origOptions){if(mw(["dtstart","tzid","wkst","freq"],n))return!0;if(!mw(e.IMPLEMENTED[t.options.freq],n))return!1}return r},e.prototype.isFullyConvertible=function(){return e.isFullyConvertible(this.rrule)},e.prototype.toString=function(){var t=this.gettext;if(!(this.options.freq in e.IMPLEMENTED))return t("RRule error: Unable to fully convert this rrule to text");if(this.text=[t("every")],this[Oe.FREQUENCIES[this.options.freq]](),this.options.until){this.add(t("until"));var r=this.options.until;this.add(this.dateFormatter(r.getUTCFullYear(),this.language.monthNames[r.getUTCMonth()],r.getUTCDate()))}else this.options.count&&this.add(t("for")).add(this.options.count.toString()).add(this.plural(this.options.count)?t("times"):t("time"));return this.isFullyConvertible()||this.add(t("(~ approximate)")),this.text.join("")},e.prototype.HOURLY=function(){var t=this.gettext;this.options.interval!==1&&this.add(this.options.interval.toString()),this.add(this.plural(this.options.interval)?t("hours"):t("hour"))},e.prototype.MINUTELY=function(){var t=this.gettext;this.options.interval!==1&&this.add(this.options.interval.toString()),this.add(this.plural(this.options.interval)?t("minutes"):t("minute"))},e.prototype.DAILY=function(){var t=this.gettext;this.options.interval!==1&&this.add(this.options.interval.toString()),this.byweekday&&this.byweekday.isWeekdays?this.add(this.plural(this.options.interval)?t("weekdays"):t("weekday")):this.add(this.plural(this.options.interval)?t("days"):t("day")),this.origOptions.bymonth&&(this.add(t("in")),this._bymonth()),this.bymonthday?this._bymonthday():this.byweekday?this._byweekday():this.origOptions.byhour&&this._byhour()},e.prototype.WEEKLY=function(){var t=this.gettext;this.options.interval!==1&&this.add(this.options.interval.toString()).add(this.plural(this.options.interval)?t("weeks"):t("week")),this.byweekday&&this.byweekday.isWeekdays?this.options.interval===1?this.add(this.plural(this.options.interval)?t("weekdays"):t("weekday")):this.add(t("on")).add(t("weekdays")):this.byweekday&&this.byweekday.isEveryDay?this.add(this.plural(this.options.interval)?t("days"):t("day")):(this.options.interval===1&&this.add(t("week")),this.origOptions.bymonth&&(this.add(t("in")),this._bymonth()),this.bymonthday?this._bymonthday():this.byweekday&&this._byweekday(),this.origOptions.byhour&&this._byhour())},e.prototype.MONTHLY=function(){var t=this.gettext;this.origOptions.bymonth?(this.options.interval!==1&&(this.add(this.options.interval.toString()).add(t("months")),this.plural(this.options.interval)&&this.add(t("in"))),this._bymonth()):(this.options.interval!==1&&this.add(this.options.interval.toString()),this.add(this.plural(this.options.interval)?t("months"):t("month"))),this.bymonthday?this._bymonthday():this.byweekday&&this.byweekday.isWeekdays?this.add(t("on")).add(t("weekdays")):this.byweekday&&this._byweekday()},e.prototype.YEARLY=function(){var t=this.gettext;this.origOptions.bymonth?(this.options.interval!==1&&(this.add(this.options.interval.toString()),this.add(t("years"))),this._bymonth()):(this.options.interval!==1&&this.add(this.options.interval.toString()),this.add(this.plural(this.options.interval)?t("years"):t("year"))),this.bymonthday?this._bymonthday():this.byweekday&&this._byweekday(),this.options.byyearday&&this.add(t("on the")).add(this.list(this.options.byyearday,this.nth,t("and"))).add(t("day")),this.options.byweekno&&this.add(t("in")).add(this.plural(this.options.byweekno.length)?t("weeks"):t("week")).add(this.list(this.options.byweekno,void 0,t("and")))},e.prototype._bymonthday=function(){var t=this.gettext;this.byweekday&&this.byweekday.allWeeks?this.add(t("on")).add(this.list(this.byweekday.allWeeks,this.weekdaytext,t("or"))).add(t("the")).add(this.list(this.bymonthday,this.nth,t("or"))):this.add(t("on the")).add(this.list(this.bymonthday,this.nth,t("and")))},e.prototype._byweekday=function(){var t=this.gettext;this.byweekday.allWeeks&&!this.byweekday.isWeekdays&&this.add(t("on")).add(this.list(this.byweekday.allWeeks,this.weekdaytext)),this.byweekday.someWeeks&&(this.byweekday.allWeeks&&this.add(t("and")),this.add(t("on the")).add(this.list(this.byweekday.someWeeks,this.weekdaytext,t("and"))))},e.prototype._byhour=function(){var t=this.gettext;this.add(t("at")).add(this.list(this.origOptions.byhour,void 0,t("and")))},e.prototype._bymonth=function(){this.add(this.list(this.options.bymonth,this.monthtext,this.gettext("and")))},e.prototype.nth=function(t){t=parseInt(t.toString(),10);var r,n=this.gettext;if(t===-1)return n("last");var i=Math.abs(t);switch(i){case 1:case 21:case 31:r=i+n("st");break;case 2:case 22:r=i+n("nd");break;case 3:case 23:r=i+n("rd");break;default:r=i+n("th")}return t<0?r+" "+n("last"):r},e.prototype.monthtext=function(t){return this.language.monthNames[t-1]},e.prototype.weekdaytext=function(t){var r=Cr(t)?(t+1)%7:t.getJsWeekday();return(t.n?this.nth(t.n)+" ":"")+this.language.dayNames[r]},e.prototype.plural=function(t){return t%100!==1},e.prototype.add=function(t){return this.text.push(" "),this.text.push(t),this},e.prototype.list=function(t,r,n,i){var a=this;i===void 0&&(i=","),$n(t)||(t=[t]);var o=function(u,l,c){for(var d="",m=0;m<u.length;m++)m!==0&&(m===u.length-1?d+=" "+c+" ":d+=l+" "),d+=u[m];return d};r=r||function(u){return u.toString()};var s=function(u){return r&&r.call(a,u)};return n?o(t.map(s),i,n):t.map(s).join(i+" ")},e}(),gi=RI;var HI=function(){function e(t){this.done=!0,this.rules=t}return e.prototype.start=function(t){return this.text=t,this.done=!1,this.nextSymbol()},e.prototype.isDone=function(){return this.done&&this.symbol===null},e.prototype.nextSymbol=function(){var t,r;this.symbol=null,this.value=null;do{if(this.done)return!1;var n=void 0;t=null;for(var i in this.rules){n=this.rules[i];var a=n.exec(this.text);a&&(t===null||a[0].length>t[0].length)&&(t=a,r=i)}if(t!=null&&(this.text=this.text.substr(t[0].length),this.text===""&&(this.done=!0)),t==null){this.done=!0,this.symbol=null,this.value=null;return}}while(r==="SKIP");return this.symbol=r,this.value=t,!0},e.prototype.accept=function(t){if(this.symbol===t){if(this.value){var r=this.value;return this.nextSymbol(),r}return this.nextSymbol(),!0}return!1},e.prototype.acceptNumber=function(){return this.accept("number")},e.prototype.expect=function(t){if(this.accept(t))return!0;throw new Error("expected "+t+" but found "+this.symbol)},e}();function Qs(e,t){t===void 0&&(t=za);var r={},n=new HI(t.tokens);if(!n.start(e))return null;return i(),r;function i(){n.expect("every");var m=n.acceptNumber();if(m&&(r.interval=parseInt(m[0],10)),n.isDone())throw new Error("Unexpected end");switch(n.symbol){case"day(s)":r.freq=Oe.DAILY,n.nextSymbol()&&(o(),d());break;case"weekday(s)":r.freq=Oe.WEEKLY,r.byweekday=[Oe.MO,Oe.TU,Oe.WE,Oe.TH,Oe.FR],n.nextSymbol(),o(),d();break;case"week(s)":r.freq=Oe.WEEKLY,n.nextSymbol()&&(a(),o(),d());break;case"hour(s)":r.freq=Oe.HOURLY,n.nextSymbol()&&(a(),d());break;case"minute(s)":r.freq=Oe.MINUTELY,n.nextSymbol()&&(a(),d());break;case"month(s)":r.freq=Oe.MONTHLY,n.nextSymbol()&&(a(),d());break;case"year(s)":r.freq=Oe.YEARLY,n.nextSymbol()&&(a(),d());break;case"monday":case"tuesday":case"wednesday":case"thursday":case"friday":case"saturday":case"sunday":r.freq=Oe.WEEKLY;var h=n.symbol.substr(0,2).toUpperCase();if(r.byweekday=[Oe[h]],!n.nextSymbol())return;for(;n.accept("comma");){if(n.isDone())throw new Error("Unexpected end");var g=u();if(!g)throw new Error("Unexpected symbol "+n.symbol+", expected weekday");r.byweekday.push(Oe[g]),n.nextSymbol()}o(),c(),d();break;case"january":case"february":case"march":case"april":case"may":case"june":case"july":case"august":case"september":case"october":case"november":case"december":if(r.freq=Oe.YEARLY,r.bymonth=[s()],!n.nextSymbol())return;for(;n.accept("comma");){if(n.isDone())throw new Error("Unexpected end");var y=s();if(!y)throw new Error("Unexpected symbol "+n.symbol+", expected month");r.bymonth.push(y),n.nextSymbol()}a(),d();break;default:throw new Error("Unknown symbol")}}function a(){var m=n.accept("on"),h=n.accept("the");if(m||h)do{var g=l(),y=u(),v=s();if(g)y?(n.nextSymbol(),r.byweekday||(r.byweekday=[]),r.byweekday.push(Oe[y].nth(g))):(r.bymonthday||(r.bymonthday=[]),r.bymonthday.push(g),n.accept("day(s)"));else if(y)n.nextSymbol(),r.byweekday||(r.byweekday=[]),r.byweekday.push(Oe[y]);else if(n.symbol==="weekday(s)")n.nextSymbol(),r.byweekday||(r.byweekday=[Oe.MO,Oe.TU,Oe.WE,Oe.TH,Oe.FR]);else if(n.symbol==="week(s)"){n.nextSymbol();var D=n.acceptNumber();if(!D)throw new Error("Unexpected symbol "+n.symbol+", expected week number");for(r.byweekno=[parseInt(D[0],10)];n.accept("comma");){if(D=n.acceptNumber(),!D)throw new Error("Unexpected symbol "+n.symbol+"; expected monthday");r.byweekno.push(parseInt(D[0],10))}}else if(v)n.nextSymbol(),r.bymonth||(r.bymonth=[]),r.bymonth.push(v);else return}while(n.accept("comma")||n.accept("the")||n.accept("on"))}function o(){var m=n.accept("at");if(m)do{var h=n.acceptNumber();if(!h)throw new Error("Unexpected symbol "+n.symbol+", expected hour");for(r.byhour=[parseInt(h[0],10)];n.accept("comma");){if(h=n.acceptNumber(),!h)throw new Error("Unexpected symbol "+n.symbol+"; expected hour");r.byhour.push(parseInt(h[0],10))}}while(n.accept("comma")||n.accept("at"))}function s(){switch(n.symbol){case"january":return 1;case"february":return 2;case"march":return 3;case"april":return 4;case"may":return 5;case"june":return 6;case"july":return 7;case"august":return 8;case"september":return 9;case"october":return 10;case"november":return 11;case"december":return 12;default:return!1}}function u(){switch(n.symbol){case"monday":case"tuesday":case"wednesday":case"thursday":case"friday":case"saturday":case"sunday":return n.symbol.substr(0,2).toUpperCase();default:return!1}}function l(){switch(n.symbol){case"last":return n.nextSymbol(),-1;case"first":return n.nextSymbol(),1;case"second":return n.nextSymbol(),n.accept("last")?-2:2;case"third":return n.nextSymbol(),n.accept("last")?-3:3;case"nth":var m=parseInt(n.value[1],10);if(m<-366||m>366)throw new Error("Nth out of range: "+m);return n.nextSymbol(),n.accept("last")?-m:m;default:return!1}}function c(){n.accept("on"),n.accept("the");var m=l();if(m)for(r.bymonthday=[m],n.nextSymbol();n.accept("comma");){if(m=l(),!m)throw new Error("Unexpected symbol "+n.symbol+"; expected monthday");r.bymonthday.push(m),n.nextSymbol()}}function d(){if(n.symbol==="until"){var m=Date.parse(n.text);if(!m)throw new Error("Cannot parse until date:"+n.text);r.until=new Date(m)}else n.accept("for")&&(r.count=parseInt(n.value[0],10),n.expect("number"))}}var pt;(function(e){e[e.YEARLY=0]="YEARLY",e[e.MONTHLY=1]="MONTHLY",e[e.WEEKLY=2]="WEEKLY",e[e.DAILY=3]="DAILY",e[e.HOURLY=4]="HOURLY",e[e.MINUTELY=5]="MINUTELY",e[e.SECONDLY=6]="SECONDLY"})(pt||(pt={}));function Xs(e){return e<pt.HOURLY}var pw=function(e,t){return t===void 0&&(t=za),new Oe(Qs(e,t)||void 0)},Lo=["count","until","interval","byweekday","bymonthday","bymonth"];gi.IMPLEMENTED=[];gi.IMPLEMENTED[pt.HOURLY]=Lo;gi.IMPLEMENTED[pt.MINUTELY]=Lo;gi.IMPLEMENTED[pt.DAILY]=["byhour"].concat(Lo);gi.IMPLEMENTED[pt.WEEKLY]=Lo;gi.IMPLEMENTED[pt.MONTHLY]=Lo;gi.IMPLEMENTED[pt.YEARLY]=["byweekno","byyearday"].concat(Lo);var gw=function(e,t,r,n){return new gi(e,t,r,n).toString()},yw=gi.isFullyConvertible;var Po=function(){function e(t,r,n,i){this.hour=t,this.minute=r,this.second=n,this.millisecond=i||0}return e.prototype.getHours=function(){return this.hour},e.prototype.getMinutes=function(){return this.minute},e.prototype.getSeconds=function(){return this.second},e.prototype.getMilliseconds=function(){return this.millisecond},e.prototype.getTime=function(){return(this.hour*60*60+this.minute*60+this.second)*1e3+this.millisecond},e}();var vw=function(e){Io(t,e);function t(r,n,i,a,o,s,u){var l=e.call(this,a,o,s,u)||this;return l.year=r,l.month=n,l.day=i,l}return t.fromDate=function(r){return new this(r.getUTCFullYear(),r.getUTCMonth()+1,r.getUTCDate(),r.getUTCHours(),r.getUTCMinutes(),r.getUTCSeconds(),r.valueOf()%1e3)},t.prototype.getWeekday=function(){return Hi(new Date(this.getTime()))},t.prototype.getTime=function(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond)).getTime()},t.prototype.getDay=function(){return this.day},t.prototype.getMonth=function(){return this.month},t.prototype.getYear=function(){return this.year},t.prototype.addYears=function(r){this.year+=r},t.prototype.addMonths=function(r){if(this.month+=r,this.month>12){var n=Math.floor(this.month/12),i=qn(this.month,12);this.month=i,this.year+=n,this.month===0&&(this.month=12,--this.year)}},t.prototype.addWeekly=function(r,n){n>this.getWeekday()?this.day+=-(this.getWeekday()+1+(6-n))+r*7:this.day+=-(this.getWeekday()-n)+r*7,this.fixDay()},t.prototype.addDaily=function(r){this.day+=r,this.fixDay()},t.prototype.addHours=function(r,n,i){for(n&&(this.hour+=Math.floor((23-this.hour)/r)*r);;){this.hour+=r;var a=Su(this.hour,24),o=a.div,s=a.mod;if(o&&(this.hour=s,this.addDaily(o)),_r(i)||Et(i,this.hour))break}},t.prototype.addMinutes=function(r,n,i,a){for(n&&(this.minute+=Math.floor((1439-(this.hour*60+this.minute))/r)*r);;){this.minute+=r;var o=Su(this.minute,60),s=o.div,u=o.mod;if(s&&(this.minute=u,this.addHours(s,!1,i)),(_r(i)||Et(i,this.hour))&&(_r(a)||Et(a,this.minute)))break}},t.prototype.addSeconds=function(r,n,i,a,o){for(n&&(this.second+=Math.floor((86399-(this.hour*3600+this.minute*60+this.second))/r)*r);;){this.second+=r;var s=Su(this.second,60),u=s.div,l=s.mod;if(u&&(this.second=l,this.addMinutes(u,!1,i,a)),(_r(i)||Et(i,this.hour))&&(_r(a)||Et(a,this.minute))&&(_r(o)||Et(o,this.second)))break}},t.prototype.fixDay=function(){if(!(this.day<=28)){var r=uh(this.year,this.month-1)[1];if(!(this.day<=r))for(;this.day>r;){if(this.day-=r,++this.month,this.month===13&&(this.month=1,++this.year,this.year>Eu))return;r=uh(this.year,this.month-1)[1]}}},t.prototype.add=function(r,n){var i=r.freq,a=r.interval,o=r.wkst,s=r.byhour,u=r.byminute,l=r.bysecond;switch(i){case pt.YEARLY:return this.addYears(a);case pt.MONTHLY:return this.addMonths(a);case pt.WEEKLY:return this.addWeekly(a,o);case pt.DAILY:return this.addDaily(a);case pt.HOURLY:return this.addHours(a,n,s);case pt.MINUTELY:return this.addMinutes(a,n,s,u);case pt.SECONDLY:return this.addSeconds(a,n,s,u,l)}},t}(Po);function hh(e){for(var t=[],r=Object.keys(e),n=0,i=r;n<i.length;n++){var a=i[n];Et(Dw,a)||t.push(a),lh(e[a])&&!Ya(e[a])&&t.push(a)}if(t.length)throw new Error("Invalid options: "+t.join(", "));return Un({},e)}function ww(e){var t=Un(Un({},el),hh(e));if(Gt(t.byeaster)&&(t.freq=Oe.YEARLY),!(Gt(t.freq)&&Oe.FREQUENCIES[t.freq]))throw new Error("Invalid frequency: ".concat(t.freq," ").concat(e.freq));if(t.dtstart||(t.dtstart=new Date(new Date().setMilliseconds(0))),Gt(t.wkst)?Cr(t.wkst)||(t.wkst=t.wkst.weekday):t.wkst=Oe.MO.weekday,Gt(t.bysetpos)){Cr(t.bysetpos)&&(t.bysetpos=[t.bysetpos]);for(var r=0;r<t.bysetpos.length;r++){var n=t.bysetpos[r];if(n===0||!(n>=-366&&n<=366))throw new Error("bysetpos must be between 1 and 366, or between -366 and -1")}}if(!(t.byweekno||bn(t.byweekno)||bn(t.byyearday)||t.bymonthday||bn(t.bymonthday)||Gt(t.byweekday)||Gt(t.byeaster)))switch(t.freq){case Oe.YEARLY:t.bymonth||(t.bymonth=t.dtstart.getUTCMonth()+1),t.bymonthday=t.dtstart.getUTCDate();break;case Oe.MONTHLY:t.bymonthday=t.dtstart.getUTCDate();break;case Oe.WEEKLY:t.byweekday=[Hi(t.dtstart)];break}if(Gt(t.bymonth)&&!$n(t.bymonth)&&(t.bymonth=[t.bymonth]),Gt(t.byyearday)&&!$n(t.byyearday)&&Cr(t.byyearday)&&(t.byyearday=[t.byyearday]),!Gt(t.bymonthday))t.bymonthday=[],t.bynmonthday=[];else if($n(t.bymonthday)){for(var i=[],a=[],r=0;r<t.bymonthday.length;r++){var n=t.bymonthday[r];n>0?i.push(n):n<0&&a.push(n)}t.bymonthday=i,t.bynmonthday=a}else t.bymonthday<0?(t.bynmonthday=[t.bymonthday],t.bymonthday=[]):(t.bynmonthday=[],t.bymonthday=[t.bymonthday]);if(Gt(t.byweekno)&&!$n(t.byweekno)&&(t.byweekno=[t.byweekno]),!Gt(t.byweekday))t.bynweekday=null;else if(Cr(t.byweekday))t.byweekday=[t.byweekday],t.bynweekday=null;else if(sh(t.byweekday))t.byweekday=[Mn.fromStr(t.byweekday).weekday],t.bynweekday=null;else if(t.byweekday instanceof Mn)!t.byweekday.n||t.freq>Oe.MONTHLY?(t.byweekday=[t.byweekday.weekday],t.bynweekday=null):(t.bynweekday=[[t.byweekday.weekday,t.byweekday.n]],t.byweekday=null);else{for(var o=[],s=[],r=0;r<t.byweekday.length;r++){var u=t.byweekday[r];if(Cr(u)){o.push(u);continue}else if(sh(u)){o.push(Mn.fromStr(u).weekday);continue}!u.n||t.freq>Oe.MONTHLY?o.push(u.weekday):s.push([u.weekday,u.n])}t.byweekday=bn(o)?o:null,t.bynweekday=bn(s)?s:null}return Gt(t.byhour)?Cr(t.byhour)&&(t.byhour=[t.byhour]):t.byhour=t.freq<Oe.HOURLY?[t.dtstart.getUTCHours()]:null,Gt(t.byminute)?Cr(t.byminute)&&(t.byminute=[t.byminute]):t.byminute=t.freq<Oe.MINUTELY?[t.dtstart.getUTCMinutes()]:null,Gt(t.bysecond)?Cr(t.bysecond)&&(t.bysecond=[t.bysecond]):t.bysecond=t.freq<Oe.SECONDLY?[t.dtstart.getUTCSeconds()]:null,{parsedOptions:t}}function bw(e){var t=e.dtstart.getTime()%1e3;if(!Xs(e.freq))return[];var r=[];return e.byhour.forEach(function(n){e.byminute.forEach(function(i){e.bysecond.forEach(function(a){r.push(new Po(n,i,a,t))})})}),r}function nl(e){var t=e.split(` +`).map(BI).filter(function(r){return r!==null});return Un(Un({},t[0]),t[1])}function tl(e){var t={},r=/DTSTART(?:;TZID=([^:=]+?))?(?::|=)([^;\s]+)/i.exec(e);if(!r)return t;var n=r[1],i=r[2];return n&&(t.tzid=n),t.dtstart=Zs(i),t}function BI(e){if(e=e.replace(/^\s+|\s+$/,""),!e.length)return null;var t=/^([A-Z]+?)[:;]/.exec(e.toUpperCase());if(!t)return Sw(e);var r=t[1];switch(r.toUpperCase()){case"RRULE":case"EXRULE":return Sw(e);case"DTSTART":return tl(e);default:throw new Error("Unsupported RFC prop ".concat(r," in ").concat(e))}}function Sw(e){var t=e.replace(/^RRULE:/i,""),r=tl(t),n=e.replace(/^(?:RRULE|EXRULE):/i,"").split(";");return n.forEach(function(i){var a=i.split("="),o=a[0],s=a[1];switch(o.toUpperCase()){case"FREQ":r.freq=pt[s.toUpperCase()];break;case"WKST":r.wkst=Ur[s.toUpperCase()];break;case"COUNT":case"INTERVAL":case"BYSETPOS":case"BYMONTH":case"BYMONTHDAY":case"BYYEARDAY":case"BYWEEKNO":case"BYHOUR":case"BYMINUTE":case"BYSECOND":var u=VI(s),l=o.toLowerCase();r[l]=u;break;case"BYWEEKDAY":case"BYDAY":r.byweekday=$I(s);break;case"DTSTART":case"TZID":var c=tl(e);r.tzid=c.tzid,r.dtstart=c.dtstart;break;case"UNTIL":r.until=Zs(s);break;case"BYEASTER":r.byeaster=Number(s);break;default:throw new Error("Unknown RRULE property '"+o+"'")}}),r}function VI(e){if(e.indexOf(",")!==-1){var t=e.split(",");return t.map(Ew)}return Ew(e)}function Ew(e){return/^[+-]?\d+$/.test(e)?Number(e):e}function $I(e){var t=e.split(",");return t.map(function(r){if(r.length===2)return Ur[r];var n=r.match(/^([+-]?\d{1,2})([A-Z]{2})$/);if(!n||n.length<3)throw new SyntaxError("Invalid weekday string: ".concat(r));var i=Number(n[1]),a=n[2],o=Ur[a].weekday;return new Mn(o,i)})}var Ka=function(){function e(t,r){if(isNaN(t.getTime()))throw new RangeError("Invalid date passed to DateWithZone");this.date=t,this.tzid=r}return Object.defineProperty(e.prototype,"isUTC",{get:function(){return!this.tzid||this.tzid.toUpperCase()==="UTC"},enumerable:!1,configurable:!0}),e.prototype.toString=function(){var t=Fo(this.date.getTime(),this.isUTC);return this.isUTC?":".concat(t):";TZID=".concat(this.tzid,":").concat(t)},e.prototype.getTime=function(){return this.date.getTime()},e.prototype.rezonedDate=function(){return this.isUTC?this.date:fw(this.date,this.tzid)},e}();function rl(e){for(var t=[],r="",n=Object.keys(e),i=Object.keys(el),a=0;a<n.length;a++)if(n[a]!=="tzid"&&Et(i,n[a])){var o=n[a].toUpperCase(),s=e[n[a]],u="";if(!(!Gt(s)||$n(s)&&!s.length)){switch(o){case"FREQ":u=Oe.FREQUENCIES[e.freq];break;case"WKST":Cr(s)?u=new Mn(s).toString():u=s.toString();break;case"BYWEEKDAY":o="BYDAY",u=sw(s).map(function(h){return h instanceof Mn?h:$n(h)?new Mn(h[0],h[1]):new Mn(h)}).toString();break;case"DTSTART":r=UI(s,e.tzid);break;case"UNTIL":u=Fo(s,!e.tzid);break;default:if($n(s)){for(var l=[],c=0;c<s.length;c++)l[c]=String(s[c]);u=l.toString()}else u=String(s)}u&&t.push([o,u])}}var d=t.map(function(h){var g=h[0],y=h[1];return"".concat(g,"=").concat(y.toString())}).join(";"),m="";return d!==""&&(m="RRULE:".concat(d)),[r,m].filter(function(h){return!!h}).join(` +`)}function UI(e,t){return e?"DTSTART"+new Ka(new Date(e),t).toString():""}function WI(e,t){return Array.isArray(e)?!Array.isArray(t)||e.length!==t.length?!1:e.every(function(r,n){return r.getTime()===t[n].getTime()}):e instanceof Date?t instanceof Date&&e.getTime()===t.getTime():e===t}var kw=function(){function e(){this.all=!1,this.before=[],this.after=[],this.between=[]}return e.prototype._cacheAdd=function(t,r,n){r&&(r=r instanceof Date?Cu(r):ch(r)),t==="all"?this.all=r:(n._value=r,this[t].push(n))},e.prototype._cacheGet=function(t,r){var n=!1,i=r?Object.keys(r):[],a=function(c){for(var d=0;d<i.length;d++){var m=i[d];if(!WI(r[m],c[m]))return!0}return!1},o=this[t];if(t==="all")n=this.all;else if($n(o))for(var s=0;s<o.length;s++){var u=o[s];if(!(i.length&&a(u))){n=u._value;break}}if(!n&&this.all){for(var l=new Vi(t,r),s=0;s<this.all.length&&l.accept(this.all[s]);s++);n=l.getValue(),this._cacheAdd(t,n,r)}return $n(n)?ch(n):n instanceof Date?Cu(n):n},e}();var xw=ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke([],wt(1,31),!0),wt(2,28),!0),wt(3,31),!0),wt(4,30),!0),wt(5,31),!0),wt(6,30),!0),wt(7,31),!0),wt(8,31),!0),wt(9,30),!0),wt(10,31),!0),wt(11,30),!0),wt(12,31),!0),wt(1,7),!0),Cw=ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke([],wt(1,31),!0),wt(2,29),!0),wt(3,31),!0),wt(4,30),!0),wt(5,31),!0),wt(6,30),!0),wt(7,31),!0),wt(8,31),!0),wt(9,30),!0),wt(10,31),!0),wt(11,30),!0),wt(12,31),!0),wt(1,7),!0),YI=$r(1,29),zI=$r(1,30),ua=$r(1,31),Gn=$r(1,32),_w=ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke([],Gn,!0),zI,!0),Gn,!0),ua,!0),Gn,!0),ua,!0),Gn,!0),Gn,!0),ua,!0),Gn,!0),ua,!0),Gn,!0),Gn.slice(0,7),!0),Mw=ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke([],Gn,!0),YI,!0),Gn,!0),ua,!0),Gn,!0),ua,!0),Gn,!0),Gn,!0),ua,!0),Gn,!0),ua,!0),Gn,!0),Gn.slice(0,7),!0),KI=$r(-28,0),jI=$r(-29,0),ca=$r(-30,0),Jn=$r(-31,0),Tw=ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke([],Jn,!0),jI,!0),Jn,!0),ca,!0),Jn,!0),ca,!0),Jn,!0),Jn,!0),ca,!0),Jn,!0),ca,!0),Jn,!0),Jn.slice(0,7),!0),Fw=ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke(ke([],Jn,!0),KI,!0),Jn,!0),ca,!0),Jn,!0),ca,!0),Jn,!0),Jn,!0),ca,!0),Jn,!0),ca,!0),Jn,!0),Jn.slice(0,7),!0),Iw=[0,31,60,91,121,152,182,213,244,274,305,335,366],Aw=[0,31,59,90,120,151,181,212,243,273,304,334,365],mh=function(){for(var e=[],t=0;t<55;t++)e=e.concat($r(7));return e}();function Ow(e,t){var r=pi(e,1,1),n=To(e)?366:365,i=To(e+1)?366:365,a=Js(r),o=Hi(r),s=Un(Un({yearlen:n,nextyearlen:i,yearordinal:a,yearweekday:o},qI(e)),{wnomask:null});if(_r(t.byweekno))return s;s.wnomask=wt(0,n+7);var u,l,c=u=qn(7-o+t.wkst,7);c>=4?(c=0,l=s.yearlen+qn(o-t.wkst,7)):l=n-c;for(var d=Math.floor(l/7),m=qn(l,7),h=Math.floor(d+m/4),g=0;g<t.byweekno.length;g++){var y=t.byweekno[g];if(y<0&&(y+=h+1),y>0&&y<=h){var v=void 0;y>1?(v=c+(y-1)*7,c!==u&&(v-=7-u)):v=c;for(var D=0;D<7&&(s.wnomask[v]=1,v++,s.wdaymask[v]!==t.wkst);D++);}}if(Et(t.byweekno,1)){var v=c+h*7;if(c!==u&&(v-=7-u),v<n)for(var g=0;g<7&&(s.wnomask[v]=1,v+=1,s.wdaymask[v]!==t.wkst);g++);}if(c){var I=void 0;if(Et(t.byweekno,-1))I=-1;else{var C=Hi(pi(e-1,1,1)),x=qn(7-C.valueOf()+t.wkst,7),O=To(e-1)?366:365,A=void 0;x>=4?(x=0,A=O+qn(C-t.wkst,7)):A=n-c,I=Math.floor(52+qn(A,7)/4)}if(Et(t.byweekno,I))for(var v=0;v<c;v++)s.wnomask[v]=1}return s}function qI(e){var t=To(e)?366:365,r=pi(e,1,1),n=Hi(r);return t===365?{mmask:xw,mdaymask:Mw,nmdaymask:Fw,wdaymask:mh.slice(n),mrange:Aw}:{mmask:Cw,mdaymask:_w,nmdaymask:Tw,wdaymask:mh.slice(n),mrange:Iw}}function Lw(e,t,r,n,i,a){var o={lastyear:e,lastmonth:t,nwdaymask:[]},s=[];if(a.freq===Oe.YEARLY)if(_r(a.bymonth))s=[[0,r]];else for(var u=0;u<a.bymonth.length;u++)t=a.bymonth[u],s.push(n.slice(t-1,t+1));else a.freq===Oe.MONTHLY&&(s=[n.slice(t-1,t+1)]);if(_r(s))return o;o.nwdaymask=wt(0,r);for(var u=0;u<s.length;u++)for(var l=s[u],c=l[0],d=l[1]-1,m=0;m<a.bynweekday.length;m++){var h=void 0,g=a.bynweekday[m],y=g[0],v=g[1];v<0?(h=d+(v+1)*7,h-=qn(i[h]-y,7)):(h=c+(v-1)*7,h+=qn(7-i[h]+y,7)),c<=h&&h<=d&&(o.nwdaymask[h]=1)}return o}function Pw(e,t){t===void 0&&(t=0);var r=e%19,n=Math.floor(e/100),i=e%100,a=Math.floor(n/4),o=n%4,s=Math.floor((n+8)/25),u=Math.floor((n-s+1)/3),l=Math.floor(19*r+n-a-u+15)%30,c=Math.floor(i/4),d=i%4,m=Math.floor(32+2*o+2*c-l-d)%7,h=Math.floor((r+11*l+22*m)/451),g=Math.floor((l+m-7*h+114)/31),y=(l+m-7*h+114)%31+1,v=Date.UTC(e,g-1,y+t),D=Date.UTC(e,0,1);return[Math.ceil((v-D)/(1e3*60*60*24))]}var GI=function(){function e(t){this.options=t}return e.prototype.rebuild=function(t,r){var n=this.options;if(t!==this.lastyear&&(this.yearinfo=Ow(t,n)),bn(n.bynweekday)&&(r!==this.lastmonth||t!==this.lastyear)){var i=this.yearinfo,a=i.yearlen,o=i.mrange,s=i.wdaymask;this.monthinfo=Lw(t,r,a,o,s,n)}Gt(n.byeaster)&&(this.eastermask=Pw(t,n.byeaster))},Object.defineProperty(e.prototype,"lastyear",{get:function(){return this.monthinfo?this.monthinfo.lastyear:null},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"lastmonth",{get:function(){return this.monthinfo?this.monthinfo.lastmonth:null},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"yearlen",{get:function(){return this.yearinfo.yearlen},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"yearordinal",{get:function(){return this.yearinfo.yearordinal},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"mrange",{get:function(){return this.yearinfo.mrange},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"wdaymask",{get:function(){return this.yearinfo.wdaymask},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"mmask",{get:function(){return this.yearinfo.mmask},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"wnomask",{get:function(){return this.yearinfo.wnomask},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"nwdaymask",{get:function(){return this.monthinfo?this.monthinfo.nwdaymask:[]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"nextyearlen",{get:function(){return this.yearinfo.nextyearlen},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"mdaymask",{get:function(){return this.yearinfo.mdaymask},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"nmdaymask",{get:function(){return this.yearinfo.nmdaymask},enumerable:!1,configurable:!0}),e.prototype.ydayset=function(){return[$r(this.yearlen),0,this.yearlen]},e.prototype.mdayset=function(t,r){for(var n=this.mrange[r-1],i=this.mrange[r],a=wt(null,this.yearlen),o=n;o<i;o++)a[o]=o;return[a,n,i]},e.prototype.wdayset=function(t,r,n){for(var i=wt(null,this.yearlen+7),a=Js(pi(t,r,n))-this.yearordinal,o=a,s=0;s<7&&(i[a]=a,++a,this.wdaymask[a]!==this.options.wkst);s++);return[i,o,a]},e.prototype.ddayset=function(t,r,n){var i=wt(null,this.yearlen),a=Js(pi(t,r,n))-this.yearordinal;return i[a]=a,[i,a,a+1]},e.prototype.htimeset=function(t,r,n,i){var a=this,o=[];return this.options.byminute.forEach(function(s){o=o.concat(a.mtimeset(t,s,n,i))}),Bi(o),o},e.prototype.mtimeset=function(t,r,n,i){var a=this.options.bysecond.map(function(o){return new Po(t,r,o,i)});return Bi(a),a},e.prototype.stimeset=function(t,r,n,i){return[new Po(t,r,n,i)]},e.prototype.getdayset=function(t){switch(t){case pt.YEARLY:return this.ydayset.bind(this);case pt.MONTHLY:return this.mdayset.bind(this);case pt.WEEKLY:return this.wdayset.bind(this);case pt.DAILY:return this.ddayset.bind(this);default:return this.ddayset.bind(this)}},e.prototype.gettimeset=function(t){switch(t){case pt.HOURLY:return this.htimeset.bind(this);case pt.MINUTELY:return this.mtimeset.bind(this);case pt.SECONDLY:return this.stimeset.bind(this)}},e}(),Nw=GI;function Rw(e,t,r,n,i,a){for(var o=[],s=0;s<e.length;s++){var u=void 0,l=void 0,c=e[s];c<0?(u=Math.floor(c/t.length),l=qn(c,t.length)):(u=Math.floor((c-1)/t.length),l=qn(c-1,t.length));for(var d=[],m=r;m<n;m++){var h=a[m];Gt(h)&&d.push(h)}var g=void 0;u<0?g=d.slice(u)[0]:g=d[u];var y=t[l],v=ku(i.yearordinal+g),D=xu(v,y);Et(o,D)||o.push(D)}return Bi(o),o}function _u(e,t){var r=t.dtstart,n=t.freq,i=t.interval,a=t.until,o=t.bysetpos,s=t.count;if(s===0||i===0)return $i(e);var u=vw.fromDate(r),l=new Nw(t);l.rebuild(u.year,u.month);for(var c=QI(l,u,t);;){var d=l.getdayset(n)(u.year,u.month,u.day),m=d[0],h=d[1],g=d[2],y=ZI(m,h,g,l,t);if(bn(o))for(var v=Rw(o,c,h,g,l,m),D=0;D<v.length;D++){var I=v[D];if(a&&I>a)return $i(e);if(I>=r){var C=Hw(I,t);if(!e.accept(C)||s&&(--s,!s))return $i(e)}}else for(var D=h;D<g;D++){var x=m[D];if(Gt(x))for(var O=ku(l.yearordinal+x),A=0;A<c.length;A++){var P=c[A],I=xu(O,P);if(a&&I>a)return $i(e);if(I>=r){var C=Hw(I,t);if(!e.accept(C)||s&&(--s,!s))return $i(e)}}}if(t.interval===0||(u.add(t,y),u.year>Eu))return $i(e);Xs(n)||(c=l.gettimeset(n)(u.hour,u.minute,u.second,0)),l.rebuild(u.year,u.month)}}function JI(e,t,r){var n=r.bymonth,i=r.byweekno,a=r.byweekday,o=r.byeaster,s=r.bymonthday,u=r.bynmonthday,l=r.byyearday;return bn(n)&&!Et(n,e.mmask[t])||bn(i)&&!e.wnomask[t]||bn(a)&&!Et(a,e.wdaymask[t])||bn(e.nwdaymask)&&!e.nwdaymask[t]||o!==null&&!Et(e.eastermask,t)||(bn(s)||bn(u))&&!Et(s,e.mdaymask[t])&&!Et(u,e.nmdaymask[t])||bn(l)&&(t<e.yearlen&&!Et(l,t+1)&&!Et(l,-e.yearlen+t)||t>=e.yearlen&&!Et(l,t+1-e.yearlen)&&!Et(l,-e.nextyearlen+t-e.yearlen))}function Hw(e,t){return new Ka(e,t.tzid).rezonedDate()}function $i(e){return e.getValue()}function ZI(e,t,r,n,i){for(var a=!1,o=t;o<r;o++){var s=e[o];a=JI(n,s,i),a&&(e[s]=null)}return a}function QI(e,t,r){var n=r.freq,i=r.byhour,a=r.byminute,o=r.bysecond;return Xs(n)?bw(r):n>=Oe.HOURLY&&bn(i)&&!Et(i,t.hour)||n>=Oe.MINUTELY&&bn(a)&&!Et(a,t.minute)||n>=Oe.SECONDLY&&bn(o)&&!Et(o,t.second)?[]:e.gettimeset(n)(t.hour,t.minute,t.second,t.millisecond)}var Ur={MO:new Mn(0),TU:new Mn(1),WE:new Mn(2),TH:new Mn(3),FR:new Mn(4),SA:new Mn(5),SU:new Mn(6)},el={freq:pt.YEARLY,dtstart:null,interval:1,wkst:Ur.MO,count:null,until:null,tzid:null,bysetpos:null,bymonth:null,bymonthday:null,bynmonthday:null,byyearday:null,byweekno:null,byweekday:null,bynweekday:null,byhour:null,byminute:null,bysecond:null,byeaster:null},Dw=Object.keys(el),Oe=function(){function e(t,r){t===void 0&&(t={}),r===void 0&&(r=!1),this._cache=r?null:new kw,this.origOptions=hh(t);var n=ww(t).parsedOptions;this.options=n}return e.parseText=function(t,r){return Qs(t,r)},e.fromText=function(t,r){return pw(t,r)},e.fromString=function(t){return new e(e.parseString(t)||void 0)},e.prototype._iter=function(t){return _u(t,this.options)},e.prototype._cacheGet=function(t,r){return this._cache?this._cache._cacheGet(t,r):!1},e.prototype._cacheAdd=function(t,r,n){if(this._cache)return this._cache._cacheAdd(t,r,n)},e.prototype.all=function(t){if(t)return this._iter(new fh("all",{},t));var r=this._cacheGet("all");return r===!1&&(r=this._iter(new Vi("all",{})),this._cacheAdd("all",r)),r},e.prototype.between=function(t,r,n,i){if(n===void 0&&(n=!1),!Ya(t)||!Ya(r))throw new Error("Invalid date passed in to RRule.between");var a={before:r,after:t,inc:n};if(i)return this._iter(new fh("between",a,i));var o=this._cacheGet("between",a);return o===!1&&(o=this._iter(new Vi("between",a)),this._cacheAdd("between",o,a)),o},e.prototype.before=function(t,r){if(r===void 0&&(r=!1),!Ya(t))throw new Error("Invalid date passed in to RRule.before");var n={dt:t,inc:r},i=this._cacheGet("before",n);return i===!1&&(i=this._iter(new Vi("before",n)),this._cacheAdd("before",i,n)),i},e.prototype.after=function(t,r){if(r===void 0&&(r=!1),!Ya(t))throw new Error("Invalid date passed in to RRule.after");var n={dt:t,inc:r},i=this._cacheGet("after",n);return i===!1&&(i=this._iter(new Vi("after",n)),this._cacheAdd("after",i,n)),i},e.prototype.count=function(){return this.all().length},e.prototype.toString=function(){return rl(this.origOptions)},e.prototype.toText=function(t,r,n){return gw(this,t,r,n)},e.prototype.isFullyConvertibleToText=function(){return yw(this)},e.prototype.clone=function(){return new e(this.origOptions)},e.FREQUENCIES=["YEARLY","MONTHLY","WEEKLY","DAILY","HOURLY","MINUTELY","SECONDLY"],e.YEARLY=pt.YEARLY,e.MONTHLY=pt.MONTHLY,e.WEEKLY=pt.WEEKLY,e.DAILY=pt.DAILY,e.HOURLY=pt.HOURLY,e.MINUTELY=pt.MINUTELY,e.SECONDLY=pt.SECONDLY,e.MO=Ur.MO,e.TU=Ur.TU,e.WE=Ur.WE,e.TH=Ur.TH,e.FR=Ur.FR,e.SA=Ur.SA,e.SU=Ur.SU,e.parseString=nl,e.optionsToString=rl,e}();function Bw(e,t,r,n,i,a){var o={},s=e.accept;function u(m,h){r.forEach(function(g){g.between(m,h,!0).forEach(function(y){o[Number(y)]=!0})})}i.forEach(function(m){var h=new Ka(m,a).rezonedDate();o[Number(h)]=!0}),e.accept=function(m){var h=Number(m);return isNaN(h)?s.call(this,m):!o[h]&&(u(new Date(h-1),new Date(h+1)),!o[h])?(o[h]=!0,s.call(this,m)):!0},e.method==="between"&&(u(e.args.after,e.args.before),e.accept=function(m){var h=Number(m);return o[h]?!0:(o[h]=!0,s.call(this,m))});for(var l=0;l<n.length;l++){var c=new Ka(n[l],a).rezonedDate();if(!e.accept(new Date(c.getTime())))break}t.forEach(function(m){_u(e,m.options)});var d=e._result;switch(Bi(d),e.method){case"all":case"between":return d;case"before":return d.length&&d[d.length-1]||null;case"after":default:return d.length&&d[0]||null}}var Vw={dtstart:null,cache:!1,unfold:!1,forceset:!1,compatible:!1,tzid:null};function XI(e,t){var r=[],n=[],i=[],a=[],o=tl(e),s=o.dtstart,u=o.tzid,l=iA(e,t.unfold);return l.forEach(function(c){var d;if(c){var m=rA(c),h=m.name,g=m.parms,y=m.value;switch(h.toUpperCase()){case"RRULE":if(g.length)throw new Error("unsupported RRULE parm: ".concat(g.join(",")));r.push(nl(c));break;case"RDATE":var v=(d=/RDATE(?:;TZID=([^:=]+))?/i.exec(c))!==null&&d!==void 0?d:[],D=v[1];D&&!u&&(u=D),n=n.concat($w(y,g));break;case"EXRULE":if(g.length)throw new Error("unsupported EXRULE parm: ".concat(g.join(",")));i.push(nl(y));break;case"EXDATE":a=a.concat($w(y,g));break;case"DTSTART":break;default:throw new Error("unsupported property: "+h)}}}),{dtstart:s,tzid:u,rrulevals:r,rdatevals:n,exrulevals:i,exdatevals:a}}function eA(e,t){var r=XI(e,t),n=r.rrulevals,i=r.rdatevals,a=r.exrulevals,o=r.exdatevals,s=r.dtstart,u=r.tzid,l=t.cache===!1;if(t.compatible&&(t.forceset=!0,t.unfold=!0),t.forceset||n.length>1||i.length||a.length||o.length){var c=new gh(l);return c.dtstart(s),c.tzid(u||void 0),n.forEach(function(m){c.rrule(new Oe(ph(m,s,u),l))}),i.forEach(function(m){c.rdate(m)}),a.forEach(function(m){c.exrule(new Oe(ph(m,s,u),l))}),o.forEach(function(m){c.exdate(m)}),t.compatible&&t.dtstart&&c.rdate(s),c}var d=n[0]||{};return new Oe(ph(d,d.dtstart||t.dtstart||s,d.tzid||t.tzid||u),l)}function Mu(e,t){return t===void 0&&(t={}),eA(e,tA(t))}function ph(e,t,r){return Un(Un({},e),{dtstart:t,tzid:r})}function tA(e){var t=[],r=Object.keys(e),n=Object.keys(Vw);if(r.forEach(function(i){Et(n,i)||t.push(i)}),t.length)throw new Error("Invalid options: "+t.join(", "));return Un(Un({},Vw),e)}function nA(e){if(e.indexOf(":")===-1)return{name:"RRULE",value:e};var t=lw(e,":",1),r=t[0],n=t[1];return{name:r,value:n}}function rA(e){var t=nA(e),r=t.name,n=t.value,i=r.split(";");if(!i)throw new Error("empty property name");return{name:i[0].toUpperCase(),parms:i.slice(1),value:n}}function iA(e,t){if(t===void 0&&(t=!1),e=e&&e.trim(),!e)throw new Error("Invalid empty string");if(!t)return e.split(/\s/);for(var r=e.split(` +`),n=0;n<r.length;){var i=r[n]=r[n].replace(/\s+$/g,"");i?n>0&&i[0]===" "?(r[n-1]+=i.slice(1),r.splice(n,1)):n+=1:r.splice(n,1)}return r}function aA(e){e.forEach(function(t){if(!/(VALUE=DATE(-TIME)?)|(TZID=)/.test(t))throw new Error("unsupported RDATE/EXDATE parm: "+t)})}function $w(e,t){return aA(t),e.split(",").map(function(r){return Zs(r)})}function Uw(e){var t=this;return function(r){if(r!==void 0&&(t["_".concat(e)]=r),t["_".concat(e)]!==void 0)return t["_".concat(e)];for(var n=0;n<t._rrule.length;n++){var i=t._rrule[n].origOptions[e];if(i)return i}}}var gh=function(e){Io(t,e);function t(r){r===void 0&&(r=!1);var n=e.call(this,{},r)||this;return n.dtstart=Uw.apply(n,["dtstart"]),n.tzid=Uw.apply(n,["tzid"]),n._rrule=[],n._rdate=[],n._exrule=[],n._exdate=[],n}return t.prototype._iter=function(r){return Bw(r,this._rrule,this._exrule,this._rdate,this._exdate,this.tzid())},t.prototype.rrule=function(r){Ww(r,this._rrule)},t.prototype.exrule=function(r){Ww(r,this._exrule)},t.prototype.rdate=function(r){Yw(r,this._rdate)},t.prototype.exdate=function(r){Yw(r,this._exdate)},t.prototype.rrules=function(){return this._rrule.map(function(r){return Mu(r.toString())})},t.prototype.exrules=function(){return this._exrule.map(function(r){return Mu(r.toString())})},t.prototype.rdates=function(){return this._rdate.map(function(r){return new Date(r.getTime())})},t.prototype.exdates=function(){return this._exdate.map(function(r){return new Date(r.getTime())})},t.prototype.valueOf=function(){var r=[];return!this._rrule.length&&this._dtstart&&(r=r.concat(rl({dtstart:this._dtstart}))),this._rrule.forEach(function(n){r=r.concat(n.toString().split(` +`))}),this._exrule.forEach(function(n){r=r.concat(n.toString().split(` +`).map(function(i){return i.replace(/^RRULE:/,"EXRULE:")}).filter(function(i){return!/^DTSTART/.test(i)}))}),this._rdate.length&&r.push(zw("RDATE",this._rdate,this.tzid())),this._exdate.length&&r.push(zw("EXDATE",this._exdate,this.tzid())),r},t.prototype.toString=function(){return this.valueOf().join(` +`)},t.prototype.clone=function(){var r=new t(!!this._cache);return this._rrule.forEach(function(n){return r.rrule(n.clone())}),this._exrule.forEach(function(n){return r.exrule(n.clone())}),this._rdate.forEach(function(n){return r.rdate(new Date(n.getTime()))}),this._exdate.forEach(function(n){return r.exdate(new Date(n.getTime()))}),r},t}(Oe);function Ww(e,t){if(!(e instanceof Oe))throw new TypeError(String(e)+" is not RRule instance");Et(t.map(String),String(e))||t.push(e)}function Yw(e,t){if(!(e instanceof Date))throw new TypeError(String(e)+" is not Date instance");Et(t.map(Number),Number(e))||(t.push(e),Bi(t))}function zw(e,t,r){var n=!r||r.toUpperCase()==="UTC",i=n?"".concat(e,":"):"".concat(e,";TZID=").concat(r,":"),a=t.map(function(o){return Fo(o.valueOf(),n)}).join(",");return"".concat(i).concat(a)}var oA={},Kw=oA;var sA={},jw=sA;var lA={},qw=lA;var uA={"Open as kanban board":"\xD6ffne als Kanban-Board","Create new board":"Erstelle ein neues Board","Archive completed cards in active board":"Archiviere fertiggestellte Karten im aktiven Board","Error: current file is not a Kanban board":"Fehler: Momentan ge\xF6ffnete Datei ist kein Kanban-Board","Convert empty note to Kanban":"Konvertiere leere Notiz in ein Kanban-Board","Error: cannot create Kanban, the current note is not empty":"Fehler: Kanban konnte nicht erstellt werden, momentan ge\xF6ffnete Datei ist nicht leer","New kanban board":"Neues Kanban-Board","Untitled Kanban":"Unbenanntes Kanban","Toggle between Kanban and markdown mode":"Wechsle zwischen Kanban und Markdown Modus","Open as markdown":"\xD6ffne als Markdown","Open board settings":"\xD6ffne Board-Einstellungen","Archive completed cards":"Archiviere fertiggestellte Karten","Something went wrong":"Etwas ist schief gelaufen","You may wish to open as markdown and inspect or edit the file.":"Du kannst die Datei im Markdown Modus \xF6ffnen und \xFCberpr\xFCfen oder bearbeiten.","Are you sure you want to archive all completed cards on this board?":"Bist du dir sicher, dass du alle fertiggestellten Karten des Boards archivieren m\xF6chtest?",Complete:"Fertiggestellt",Archive:"Archiv","Invalid Kanban file: problems parsing frontmatter":"Fehlerhafte Kanban Datei: Probleme beim Parsen des Frontmatters","I don't know how to interpret this line:":"Ich wei\xDF nicht, wie ich diese Zeile interpretieren soll:",Untitled:"Unbenannt","Note: No template plugins are currently enabled.":"Beachte: Keine Template-Plugins sind derzeit aktiviert.",default:"Standard","Search...":"Suche...","These settings will take precedence over the default Kanban board settings.":"Diese Einstellung wird Vorrang vor der standard Kanban-Board Einstellung haben. ","Set the default Kanban board settings. Settings can be overridden on a board-by-board basis.":"Stelle standard Kanban-Board Einstellungen ein. Einstellungen k\xF6nnen auf einer Board-f\xFCr-Board Basis \xFCberschrieben werden.","Note template":"Notiz Vorlage","This template will be used when creating new notes from Kanban cards.":"Diese Vorlage wird beim Erstellen neuer Notizen aus Kanban-Karten verwendet.","No template":"Keine Vorlage","Note folder":"Notiz Ordner","Notes created from Kanban cards will be placed in this folder. If blank, they will be placed in the default location for this vault.":"Notizen, welche aus einer Kanban-Karte erstellt wurden, werden in diesem Ordner platziert. Falls leer, werden die Einstellungen des Vaults verwendet.","Default folder":"Standard Ordner","Maximum number of archived cards":"Maximale Anzahl archivierter Karten.","Archived cards can be viewed in markdown mode. This setting will begin removing old cards once the limit is reached. Setting this value to -1 will allow a board's archive to grow infinitely.":"Archivierte Karten k\xF6nnen im Markdown-Modus betrachtet werden. Diese Einstellung wird alte Karten l\xF6schen, sobald das Limit erreicht wird. Eine Einstellung von -1 setzt das Archiv auf eine unendliche Gr\xF6\xDFe.","Display card checkbox":"Zeige Karten Checkbox","When toggled, a checkbox will be displayed with each card":"Wenn aktiviert, wird eine Checkbox mit jeder Karte angezeigt.","Reset to default":"Zur\xFCcksetzen","Date & Time":"Datum & Uhrzeit","Date trigger":"Datums Ausl\xF6ser","When this is typed, it will trigger the date selector":"Wenn dies eingegeben wird, dann wird die Datumsauswahl angezeigt","Time trigger":"Uhrzeit Ausl\xF6ser","When this is typed, it will trigger the time selector":"Wenn dies eingegeben wird, dann wird die Uhrzeitsauswahl angezeigt","Date format":"Format des Datums","This format will be used when saving dates in markdown.":"Dieses Format wird verwendet, wenn ein Datum in Markdown gespeichert wird.","For more syntax, refer to":"F\xFCr mehr Syntax Informationen siehe","format reference":"Formatvorlage","Your current syntax looks like this":"Dein momentanes Format sieht so aus","Time format":"Format der Uhrzeit","Date display format":"Format der Datums Anzeige","This format will be used when displaying dates in Kanban cards.":"Dieses Format wird verwendet, wenn ein Datum in einer Kanban-Karte angezeigt wird.","Show relative date":"Zeige relatives Datum","Link dates to daily notes":"Verbinde Daten zu Daily Notes","When toggled, dates will link to daily notes. Eg. [[2021-04-26]]":"Wenn aktiviert, werden Daten mit Daily Notes verbunden. Zum Beispiel [[26.4.2021]]","Add date and time to archived cards":"F\xFCge Datum und Uhrzeit zu archivierten Notizen hinzu","When toggled, the current date and time will be added to the card title when it is archived. Eg. - [ ] 2021-05-14 10:00am My card title":"Wenn aktiviert, wird das momentane Datum und die momentane Zeit am Anfang einer Karte hinzugef\xFCgt, wenn sie archiviert wird. Zum Beispiel: - [ ] 14.05.2021 10:00 Mein Karten Titel","Archive date/time separator":"Datum/Uhrzeit Trenner f\xFCr das Archiv","This will be used to separate the archived date/time from the title":"Dies wird verwendet, um das Datum und die Uhrzeit archivierter Karten vom Titel zu trennen","Archive date/time format":"Format des Datums und der Uhrzeit f\xFCr das Archiv","Kanban Plugin":"Kanban Erweiterung","New line trigger":"Taste f\xFCr neue Zeile","Shift + Enter":"Umschalttaste + Enter",Enter:"Enter","Prepend / append new cards":"Neue Karten voranf\xFCgen / anh\xE4ngen","This setting controls whether new cards are added to the beginning or end of the list.":"Diese Einstellung gibt an ob neue Karten am Anfang oder am Ende einer Liste hinzugef\xFCgt werden.",Prepend:"Voranf\xFCgen",Append:"Anh\xE4ngen","Linked Page Metadata":"Metadaten f\xFCr verkn\xFCpfte (verlinkte) Notizen","Display metadata for the first note linked within a card. Specify which metadata keys to display below. An optional label can be provided, and labels can be hidden altogether.":"Zeigen Sie Metadaten f\xFCr die erste Notiz an, die innerhalb einer Karte verkn\xFCpft ist. Geben Sie an, welche Metadatenschl\xFCssel unten angezeigt werden sollen. Ein optionales Label kann hinzugef\xFCgt werden, es kann aber auch vollst\xE4ndig ausgeblendet werden.","Metadata key":"Metadatenschl\xFCssel","Display label":"Anzeigelabel","Hide label":"Label ausblenden","Drag to rearrange":"Zum Neuanordnen ziehen",Delete:"L\xF6schen","Add key":"Schl\xFCssel hinzuf\xFCgen","Field contains markdown":"Feld beinhaltet Markdown","More options":"Mehr optionen",Cancel:"Abbrechen",today:"heute",yesterday:"gestern",tomorrow:"morgen","Change date":"Ver\xE4ndere Datum","Change time":"Ver\xE4ndere Uhrzeit","Card title...":"Karten Titel...","Add card":"Karte hinzuf\xFCgen","Add a card":"F\xFCge eine Karte hinzu","Edit card":"Karte editieren","New note from card":"Neue Notiz aus Karte erstellen","Archive card":"Karte archivieren","Delete card":"Karte l\xF6schen","Edit date":"Datum editieren","Add date":"Datum hinzuf\xFCgen","Remove date":"Datum entfernen","Edit time":"Karte editieren","Add time":"Uhrzeit hinzuf\xFCgen","Remove time":"Uhrzeit entfernen","Duplicate card":"Karte duplizieren","Enter list title...":"Listen Titel eingeben..","Mark cards in this list as complete":"Markiere Karten in dieser Liste als fertiggestellt","Add list":"Liste hinzuf\xFCgen","Add a list":"F\xFCge eine Liste hinzu","Move list":"Liste verschieben",Close:"Schlie\xDFen","Are you sure you want to delete this list and all its cards?":"Bist du dir sicher, dass du diese Liste und alle ihre Karten l\xF6schen m\xF6chtest?","Yes, delete list":"Ja, l\xF6sche diese Liste","Are you sure you want to archive this list and all its cards?":"Bist du dir sicher, dass du diese Liste und alle ihre Karten archivieren m\xF6chtest?","Yes, archive list":"Ja, archiviere diese Liste","Are you sure you want to archive all cards in this list?":"Bist du dir sicher, dass du alle Karten in dieser Liste archivieren m\xF6chtest?","Yes, archive cards":"Ja, archiviere Karten","Edit list":"Editiere Liste","Archive cards":"Archiviere Karten","Archive list":"Archiviere List","Delete list":"L\xF6sche Liste"},Gw=uA;var cA={"Open as kanban board":"Open as kanban board","Create new board":"Create new board","Archive completed cards in active board":"Archive completed cards in active board","Error: current file is not a Kanban board":"Error: current file is not a Kanban board","Convert empty note to Kanban":"Convert empty note to Kanban","Error: cannot create Kanban, the current note is not empty":"Error: cannot create Kanban, the current note is not empty","New kanban board":"New kanban board","Untitled Kanban":"Untitled Kanban","Toggle between Kanban and markdown mode":"Toggle between Kanban and markdown mode","View as board":"View as board","View as list":"View as list","View as table":"View as table","Board view":"Board view","Open as markdown":"Open as markdown","Open board settings":"Open board settings","Archive completed cards":"Archive completed cards","Something went wrong":"Something went wrong","You may wish to open as markdown and inspect or edit the file.":"You may wish to open as markdown and inspect or edit the file.","Are you sure you want to archive all completed cards on this board?":"Are you sure you want to archive all completed cards on this board?",Complete:"Complete",Archive:"Archive","Invalid Kanban file: problems parsing frontmatter":"Invalid Kanban file: problems parsing frontmatter","I don't know how to interpret this line:":"I don't know how to interpret this line:",Untitled:"Untitled","Note: No template plugins are currently enabled.":"Note: No template plugins are currently enabled.",default:"default","Search...":"Search...","New line trigger":"New line trigger","Select whether Enter or Shift+Enter creates a new line. The opposite of what you choose will create and complete editing of cards and lists.":"Select whether Enter or Shift+Enter creates a new line. The opposite of what you choose will create and complete editing of cards and lists.","Shift + Enter":"Shift + Enter",Enter:"Enter","Prepend / append new cards":"Prepend / append new cards","This setting controls whether new cards are added to the beginning or end of the list.":"This setting controls whether new cards are added to the beginning or end of the list.",Prepend:"Prepend","Prepend (compact)":"Prepend (compact)",Append:"Append","These settings will take precedence over the default Kanban board settings.":"These settings will take precedence over the default Kanban board settings.","Set the default Kanban board settings. Settings can be overridden on a board-by-board basis.":"Set the default Kanban board settings. Settings can be overridden on a board-by-board basis.","Note template":"Note template","This template will be used when creating new notes from Kanban cards.":"This template will be used when creating new notes from Kanban cards.","No template":"No template","Note folder":"Note folder","Notes created from Kanban cards will be placed in this folder. If blank, they will be placed in the default location for this vault.":"Notes created from Kanban cards will be placed in this folder. If blank, they will be placed in the default location for this vault.","Default folder":"Default folder","List width":"List width","Expand lists to full width in list view":"Expand lists to full width in list view","Enter a number to set the list width in pixels.":"Enter a number to set the list width in pixels.","Maximum number of archived cards":"Maximum number of archived cards","Archived cards can be viewed in markdown mode. This setting will begin removing old cards once the limit is reached. Setting this value to -1 will allow a board's archive to grow infinitely.":"Archived cards can be viewed in markdown mode. This setting will begin removing old cards once the limit is reached. Setting this value to -1 will allow a board's archive to grow infinitely.","Display card checkbox":"Display card checkbox","When toggled, a checkbox will be displayed with each card":"When toggled, a checkbox will be displayed with each card","Reset to default":"Reset to default","Date & Time":"Date & Time","Date trigger":"Date trigger","When this is typed, it will trigger the date selector":"When this is typed, it will trigger the date selector","Time trigger":"Time trigger","When this is typed, it will trigger the time selector":"When this is typed, it will trigger the time selector","Date format":"Date format","This format will be used when saving dates in markdown.":"This format will be used when saving dates in markdown.","For more syntax, refer to":"For more syntax, refer to","format reference":"format reference","Your current syntax looks like this":"Your current syntax looks like this","Time format":"Time format","Date display format":"Date display format","This format will be used when displaying dates in Kanban cards.":"This format will be used when displaying dates in Kanban cards.","Show relative date":"Show relative date","When toggled, cards will display the distance between today and the card's date. eg. 'In 3 days', 'A month ago'. Relative dates will not be shown for dates from the Tasks and Dataview plugins.":"When toggled, cards will display the distance between today and the card's date. eg. 'In 3 days', 'A month ago'. Relative dates will not be shown for dates from the Tasks and Dataview plugins.","Move dates to card footer":"Move dates to card footer","When toggled, dates will be displayed in the card's footer instead of the card's body.":"When toggled, dates will be displayed in the card's footer instead of the card's body.","Move tags to card footer":"Move tags to card footer","When toggled, tags will be displayed in the card's footer instead of the card's body.":"When toggled, tags will be displayed in the card's footer instead of the card's body.","Move task data to card footer":"Move task data to card footer","When toggled, task data (from the Tasks plugin) will be displayed in the card's footer instead of the card's body.":"When toggled, task data (from the Tasks plugin) will be displayed in the card's footer instead of the card's body.","Inline metadata position":"Inline metadata position","Controls where the inline metadata (from the Dataview plugin) will be displayed.":"Controls where the inline metadata (from the Dataview plugin) will be displayed.","Card body":"Card body","Card footer":"Card footer","Merge with linked page metadata":"Merge with linked page metadata","Hide card counts in list titles":"Hide card counts in list titles","When toggled, card counts are hidden from the list title":"When toggled, card counts are hidden from the list title","Link dates to daily notes":"Link dates to daily notes","When toggled, dates will link to daily notes. Eg. [[2021-04-26]]":"When toggled, dates will link to daily notes. Eg. [[2021-04-26]]","Add date and time to archived cards":"Add date and time to archived cards","When toggled, the current date and time will be added to the card title when it is archived. Eg. - [ ] 2021-05-14 10:00am My card title":"When toggled, the current date and time will be added to the card title when it is archived. Eg. - [ ] 2021-05-14 10:00am My card title","Add archive date/time after card title":"Add archive date/time after card title","When toggled, the archived date/time will be added after the card title, e.g.- [ ] My card title 2021-05-14 10:00am. By default, it is inserted before the title.":"When toggled, the archived date/time will be added after the card title, e.g.- [ ] My card title 2021-05-14 10:00am. By default, it is inserted before the title.","Archive date/time separator":"Archive date/time separator","This will be used to separate the archived date/time from the title":"This will be used to separate the archived date/time from the title","Archive date/time format":"Archive date/time format","Kanban Plugin":"Kanban Plugin","Tag click action":"Tag click action","Search Kanban Board":"Search Kanban Board","Search Obsidian Vault":"Search Obsidian Vault","This setting controls whether clicking the tags displayed below the card title opens the Obsidian search or the Kanban board search.":"This setting controls whether clicking the tags displayed below the card title opens the Obsidian search or the Kanban board search.","Tag colors":"Tag colors","Set colors for tags displayed in cards.":"Set colors for tags displayed in cards.","Linked Page Metadata":"Linked Page Metadata","Inline Metadata":"Inline Metadata","Display metadata for the first note linked within a card. Specify which metadata keys to display below. An optional label can be provided, and labels can be hidden altogether.":"Display metadata for the first note linked within a card. Specify which metadata keys to display below. An optional label can be provided, and labels can be hidden altogether.","Board Header Buttons":"Board Header Buttons","Calendar: first day of week":"Calendar: first day of week","Override which day is used as the start of the week":"Override which day is used as the start of the week",Sunday:"Sunday",Monday:"Monday",Tuesday:"Tuesday",Wednesday:"Wednesday",Thursday:"Thursday",Friday:"Friday",Saturday:"Saturday","Background color":"Background color",Tag:"Tag","Text color":"Text color","Date is":"Date is",Today:"Today","After now":"After now","Before now":"Before now","Between now and":"Between now and","Display date colors":"Display date colors","Set colors for dates displayed in cards based on the rules below.":"Set colors for dates displayed in cards based on the rules below.","Add date color":"Add date color","Metadata key":"Metadata key","Display label":"Display label","Hide label":"Hide label","Drag to rearrange":"Drag to rearrange",Delete:"Delete","Add key":"Add key","Add tag":"Add tag","Field contains markdown":"Field contains markdown","Tag sort order":"Tag sort order","Set an explicit sort order for the specified tags.":"Set an explicit sort order for the specified tags.","Add tag color":"Add tag color",List:"List",Card:"Card",Date:"Date",Tags:"Tags",Priority:"Priority",Start:"Start",Created:"Created",Scheduled:"Scheduled",Due:"Due",Cancelled:"Cancelled",Recurrence:"Recurrence","Depends on":"Depends on",ID:"ID","More options":"More options",Cancel:"Cancel",Done:"Done",Save:"Save",today:"today",yesterday:"yesterday",tomorrow:"tomorrow","Change date":"Change date","Change time":"Change time","Card title...":"Card title...","Add card":"Add card","Add a card":"Add a card","Edit card":"Edit card","New note from card":"New note from card","Archive card":"Archive card","Delete card":"Delete card","Edit date":"Edit date","Add date":"Add date","Remove date":"Remove date","Edit time":"Edit time","Add time":"Add time","Remove time":"Remove time","Duplicate card":"Duplicate card","Split card":"Split card","Copy link to card":"Copy link to card","Insert card before":"Insert card before","Insert card after":"Insert card after","Add label":"Add label","Move to top":"Move to top","Move to bottom":"Move to bottom","Move to list":"Move to list","Enter list title...":"Enter list title...","Mark cards in this list as complete":"Mark cards in this list as complete","Add list":"Add list","Add a list":"Add a list","Move list":"Move list",Close:"Close","Are you sure you want to delete this list and all its cards?":"Are you sure you want to delete this list and all its cards?","Yes, delete list":"Yes, delete list","Are you sure you want to archive this list and all its cards?":"Are you sure you want to archive this list and all its cards?","Yes, archive list":"Yes, archive list","Are you sure you want to archive all cards in this list?":"Are you sure you want to archive all cards in this list?","Yes, archive cards":"Yes, archive cards","Edit list":"Edit list","Archive cards":"Archive cards","Archive list":"Archive list","Delete list":"Delete list","Insert list before":"Insert list before","Insert list after":"Insert list after","Sort by card text":"Sort by card text","Sort by date":"Sort by date","Sort by tags":"Sort by tags","Sort by":"Sort by","Unable to find":"Unable to find","Open in default app":"Open in default app",Submit:"Submit"},yh=cA;var dA={},Jw=dA;var fA={},Zw=fA;var hA={},Qw=hA;var mA={},Xw=mA;var pA={"Open as kanban board":"Apri come bacheca Kanban","Create new board":"Crea nuova bacheca","Archive completed cards in active board":"Archivia schede completate nella bacheca attiva","Error: current file is not a Kanban board":"Errore: il file corrente non \xE8 una bacheca Kanban","Convert empty note to Kanban":"Converti nota vuota in Kanban","Error: cannot create Kanban, the current note is not empty":"Errore: Impossibile creare Kanban, la nota corrente non \xE8 vuota","New kanban board":"Nuova bacheca Kanban","Untitled Kanban":"Kanban senza titolo","Open as markdown":"Apri come markdown","Open board settings":"Apri impostazioni bacheca","Archive completed cards":"Archivia schede completate",Complete:"Completato",Archive:"Archivio","Note: No template plugins are currently enabled.":"Nota: Nessun plugin dei modelli attualmente abilitato.",default:"predefinito","Search...":"Ricerca...","These settings will take precedence over the default Kanban board settings.":"Queste impostazioni avranno la precedenza sulle impostazioni predefinite della bacheca Kanban.","Set the default Kanban board settings. Settings can be overridden on a board-by-board basis.":"Impostazioni predefinite della bacheca Kanban. Le impostazioni possono essere sovrascritte per ogni bacheca.","Note template":"Nota modello","This template will be used when creating new notes from Kanban cards.":"Questo modello verr\xE0 utilizzato durante la creazione di nuove note dalle schede Kanban.","No template":"Nessun modello","Note folder":"Cartella delle note","Notes created from Kanban cards will be placed in this folder. If blank, they will be placed in the default location for this vault.":"Le note create dalle schede Kanban verranno inserite in questa cartella. Se vuota, verranno inserite nella posizione predefinita del vault.","Default folder":"Cartella predefinita","Maximum number of archived cards":"Numero massimo di schede archiviate","Archived cards can be viewed in markdown mode. This setting will begin removing old cards once the limit is reached. Setting this value to -1 will allow a board's archive to grow infinitely.":"Le schede archiviate possono essere visualizzate in modalit\xE0 Markdown. Le vecchie schede verranno rimosse una volta raggiunto il limite. Impostando il valore -1 il numero di schede archiviate sar\xE0 illimitato.","Display card checkbox":"Mostra casella di controllo","When toggled, a checkbox will be displayed with each card":"Se attiva, verr\xE0 visualizzata una casella di controllo per ogni scheda","Reset to default":"Ripristina predefiniti","Date & Time":"Data e ora","Date trigger":"Selettore data","When this is typed, it will trigger the date selector":"Digitando questo, verr\xE0 attivato il selettore della data","Time trigger":"Selettore ora","When this is typed, it will trigger the time selector":"Digitando questo, verr\xE0 attivato il selettore dell'ora","Date format":"Formato data","This format will be used when saving dates in markdown.":"Formato utilizzato per il salvataggio delle date in Markdown.","For more syntax, refer to":"Per maggiori informazioni, vedere","format reference":"formato di riferimento","Your current syntax looks like this":"Formato corrente","Time format":"Formato ora","Date display format":"Formato visualizzazione data","This format will be used when displaying dates in Kanban cards.":"Formato utilizzato per visualizzare le date nelle schede Kanban.","Show relative date":"Mostra data relativa","Link dates to daily notes":"Collega date alle Note del giorno","When toggled, dates will link to daily notes. Eg. [[2021-04-26]]":"Se attiva, le date verranno collegate alle Note del giorno. Eg. [[2021-04-26]]","Add date and time to archived cards":"Aggiungi data e ora alle schede archiviate","When toggled, the current date and time will be added to the card title when it is archived. Eg. - [ ] 2021-05-14 10:00am My card title":"Se attiva, la data e l'ora corrente verranno aggiunte all'inizio della scheda quando viene archiviata. Eg. - [ ] 2021-05-14 10:00am Mia scheda","Archive date/time separator":"Separatore data/ora dell'archivio","This will be used to separate the archived date/time from the title":"Verr\xE0 usato per separare data e ora dell'archiviazione dal titolo","Archive date/time format":"Formato data/ora dell'archivio","Kanban Plugin":"Plugin Kanban","More options":"Altre opzioni",Cancel:"Annulla",today:"oggi",yesterday:"ieri",tomorrow:"domani","Change date":"Modifica data","Change time":"Modifica ora","Card title...":"Titolo elemento...","Add card":"Aggiungi elemento","Add a card":"Aggiungi un'altra scheda","Edit card":"Modifica scheda","New note from card":"Nuova nota da scheda","Archive card":"Archivia scheda","Delete card":"Elimina scheda","Edit date":"Modifica data","Add date":"Aggiungi data","Remove date":"Rimuovi data","Edit time":"Modifica ora","Add time":"Aggiungi ora","Remove time":"Rimuovi ora","Enter list title...":"Inserisci titolo lista...","Mark cards in this list as complete":"Segna elementi della lista come completati","Add list":"Aggiungi lista","Add a list":"Aggiungi un'altra lista","Move list":"Sposta lista",Close:"Chiudi","Are you sure you want to delete this list and all its cards?":"Cancellare questa lista e tutte le sue schede?","Yes, delete list":"Cancella lista","Are you sure you want to archive this list and all its cards?":"Archiviare questa lista e tutte le sue schede?","Yes, archive list":"Archivia lista","Are you sure you want to archive all cards in this list?":"Archiviare tutte le schede in questa lista?","Yes, archive cards":"Archivia schede","Edit list":"Modifica lista","Archive cards":"Archivia schede","Archive list":"Archivia lista","Delete list":"Cancella lista"},eb=pA;var gA={"Open as kanban board":"\u30AB\u30F3\u30D0\u30F3\u30DC\u30FC\u30C9\u3068\u3057\u3066\u958B\u304F","Create new board":"\u30AB\u30F3\u30D0\u30F3\u30DC\u30FC\u30C9\u3092\u65B0\u898F\u4F5C\u6210","Archive completed cards in active board":"\u30A2\u30AF\u30C6\u30A3\u30D6\u30DC\u30FC\u30C9\u306E\u5B8C\u4E86\u3057\u305F\u30AB\u30FC\u30C9\u3092\u30A2\u30FC\u30AB\u30A4\u30D6","Error: current file is not a Kanban board":"\u30A8\u30E9\u30FC: \u73FE\u5728\u306E\u30D5\u30A1\u30A4\u30EB\u306F\u30AB\u30F3\u30D0\u30F3\u30DC\u30FC\u30C9\u3067\u306F\u3042\u308A\u307E\u305B\u3093","Convert empty note to Kanban":"\u7A7A\u306E\u30CE\u30FC\u30C8\u3092\u30AB\u30F3\u30D0\u30F3\u306B\u5909\u63DB","Error: cannot create Kanban, the current note is not empty":"\u30A8\u30E9\u30FC: \u73FE\u5728\u958B\u3044\u3066\u3044\u308B\u30CE\u30FC\u30C8\u306F\u7A7A\u3067\u3042\u308A\u3001\u30AB\u30F3\u30D0\u30F3\u3092\u4F5C\u6210\u3067\u304D\u307E\u305B\u3093","New kanban board":"\u65B0\u898F\u30AB\u30F3\u30D0\u30F3\u30DC\u30FC\u30C9","Untitled Kanban":"\u7121\u984C\u306E\u30AB\u30F3\u30D0\u30F3","Toggle between Kanban and markdown mode":"\u30AB\u30F3\u30D0\u30F3\u3068\u30DE\u30FC\u30AF\u30C0\u30A6\u30F3\u306E\u30E2\u30FC\u30C9\u3092\u5207\u308A\u66FF\u3048\u308B","Open as markdown":"\u30DE\u30FC\u30AF\u30C0\u30A6\u30F3\u3068\u3057\u3066\u958B\u304F","Open board settings":"\u30DC\u30FC\u30C9\u8A2D\u5B9A\u3092\u958B\u304F","Archive completed cards":"\u5B8C\u4E86\u3057\u305F\u30AB\u30FC\u30C9\u3092\u30A2\u30FC\u30AB\u30A4\u30D6","Something went wrong":"\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F","You may wish to open as markdown and inspect or edit the file.":"\u30DE\u30FC\u30AF\u30C0\u30A6\u30F3\u3068\u3057\u3066\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u3044\u3066\u8ABF\u67FB\u3059\u308B\u304B\u7DE8\u96C6\u3059\u308B\u3053\u3068\u3092\u304A\u3059\u3059\u3081\u3057\u307E\u3059\u3002","Are you sure you want to archive all completed cards on this board?":"\u3053\u306E\u30DC\u30FC\u30C9\u306B\u542B\u307E\u308C\u308B\u3059\u3079\u3066\u306E\u5B8C\u4E86\u3057\u305F\u30AB\u30FC\u30C9\u3092\u30A2\u30FC\u30AB\u30A4\u30D6\u3057\u307E\u3059\u304B\uFF1F",Complete:"\u5B8C\u4E86",Archive:"\u30A2\u30FC\u30AB\u30A4\u30D6","Invalid Kanban file: problems parsing frontmatter":"\u7121\u52B9\u306A\u30AB\u30F3\u30D0\u30F3\u30D5\u30A1\u30A4\u30EB: \u30D5\u30ED\u30F3\u30C8\u30DE\u30BF\u30FC\u306E\u30D1\u30FC\u30B9\u306B\u554F\u984C\u304C\u3042\u308A\u307E\u3059","I don't know how to interpret this line:":"\u3053\u306E\u884C\u3092\u3069\u3046\u89E3\u91C8\u3059\u308C\u3070\u3088\u3044\u304B\u5206\u304B\u308A\u307E\u305B\u3093",Untitled:"\u7121\u984C","Note: No template plugins are currently enabled.":"\u30CE\u30FC\u30C8: \u73FE\u5728\u3001\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u304C\u7121\u52B9\u5316\u3055\u308C\u3066\u3044\u307E\u3059",default:"\u30C7\u30D5\u30A9\u30EB\u30C8","Search...":"\u691C\u7D22\u2026","New line trigger":"\u6539\u884C\u30C8\u30EA\u30AC\u30FC","Shift + Enter":"Shift + Enter",Enter:"Enter","Prepend / append new cards":"\u5148\u982D\u307E\u305F\u306F\u672B\u5C3E\u306B\u65B0\u898F\u30AB\u30FC\u30C9\u3092\u8FFD\u52A0\u3059\u308B","This setting controls whether new cards are added to the beginning or end of the list.":"\u3053\u306E\u8A2D\u5B9A\u306B\u3088\u3063\u3066\u65B0\u898F\u30AB\u30FC\u30C9\u3092\u30EA\u30B9\u30C8\u306E\u5148\u982D\u307E\u305F\u306F\u672B\u5C3E\u306B\u8FFD\u52A0\u3059\u308B\u304B\u3092\u6C7A\u3081\u307E\u3059\u3002",Prepend:"\u5148\u982D\u306B\u8FFD\u52A0","Prepend (compact)":"\u5148\u982D\u306B\u8FFD\u52A0(\u30B3\u30F3\u30D1\u30AF\u30C8)",Append:"\u672B\u5C3E\u306B\u8FFD\u52A0","These settings will take precedence over the default Kanban board settings.":"\u3053\u308C\u3089\u306E\u8A2D\u5B9A\u306F\u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u30AB\u30F3\u30D0\u30F3\u8A2D\u5B9A\u3088\u308A\u512A\u5148\u3055\u308C\u307E\u3059\u3002","Set the default Kanban board settings. Settings can be overridden on a board-by-board basis.":"\u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u30AB\u30F3\u30D0\u30F3\u30DC\u30FC\u30C9\u8A2D\u5B9A\u3092\u30BB\u30C3\u30C8\u3057\u307E\u3059\u3002\u3053\u306E\u8A2D\u5B9A\u306F\u30DC\u30FC\u30C9\u6BCE\u306B\u4E0A\u66F8\u304D\u3067\u304D\u307E\u3059\u3002","Note template":"\u30CE\u30FC\u30C8\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8","This template will be used when creating new notes from Kanban cards.":"\u3053\u306E\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306F\u30AB\u30F3\u30D0\u30F3\u30AB\u30FC\u30C9\u304B\u3089\u30CE\u30FC\u30C8\u3092\u65B0\u898F\u4F5C\u6210\u3057\u305F\u969B\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002","No template":"\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u304C\u3042\u308A\u307E\u305B\u3093","Note folder":"\u30CE\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0","Notes created from Kanban cards will be placed in this folder. If blank, they will be placed in the default location for this vault.":"\u30AB\u30F3\u30D0\u30F3\u30AB\u30FC\u30C9\u304B\u3089\u4F5C\u6210\u3055\u308C\u305F\u30CE\u30FC\u30C8\u306F\u3053\u306E\u30D5\u30A9\u30EB\u30C0\u5185\u306B\u7F6E\u304B\u308C\u307E\u3059\u3002\u30D6\u30E9\u30F3\u30AF\u306E\u5834\u5408\u306B\u306F\u3001\u3053\u306E\u4FDD\u7BA1\u5EAB\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u306B\u7F6E\u304B\u308C\u307E\u3059\u3002","Default folder":"\u30C7\u30D5\u30A9\u30EB\u30C8\u30D5\u30A9\u30EB\u30C0","Maximum number of archived cards":"\u30A2\u30FC\u30AB\u30A4\u30D6\u3055\u308C\u305F\u30AB\u30FC\u30C9\u306E\u6700\u5927\u6570","Archived cards can be viewed in markdown mode. This setting will begin removing old cards once the limit is reached. Setting this value to -1 will allow a board's archive to grow infinitely.":"\u30A2\u30FC\u30AB\u30A4\u30D6\u3055\u308C\u305F\u30AB\u30FC\u30C9\u306F\u30DE\u30FC\u30AF\u30C0\u30A6\u30F3\u30E2\u30FC\u30C9\u3067\u95B2\u89A7\u3067\u304D\u307E\u3059\u3002\u3053\u306E\u8A2D\u5B9A\u306B\u3088\u308A\u6307\u5B9A\u3055\u308C\u305F\u30A2\u30FC\u30AB\u30A4\u30D6\u306E\u9650\u754C\u6570\u307E\u3067\u9054\u3057\u305F\u969B\u306B\u306F\u53E4\u3044\u30AB\u30FC\u30C9\u3092\u524A\u9664\u3057\u307E\u3059\u3002\u3053\u306E\u5024\u3092-1\u306B\u8A2D\u5B9A\u3059\u308B\u3068\u30DC\u30FC\u30C9\u306E\u30A2\u30FC\u30AB\u30A4\u30D6\u9650\u754C\u3092\u7121\u9650\u306B\u3057\u307E\u3059\u3002","Display card checkbox":"\u30AB\u30FC\u30C9\u306E\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u3092\u8868\u793A","When toggled, a checkbox will be displayed with each card":"\u6709\u52B9\u5316\u3059\u308B\u3068\u5404\u30AB\u30FC\u30C9\u306E\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002","Reset to default":"\u30C7\u30D5\u30A9\u30EB\u30C8\u306B\u30EA\u30BB\u30C3\u30C8","Date & Time":"\u65E5\u4ED8\u3068\u6642\u9593","Date trigger":"\u65E5\u4ED8\u30C8\u30EA\u30AC\u30FC","When this is typed, it will trigger the date selector":"\u3053\u306E\u8A2D\u5B9A\u306B\u5165\u529B\u3055\u308C\u305F\u6587\u5B57\u5217\u3067\u65E5\u4ED8\u30BB\u30EC\u30AF\u30BF\u30FC\u3092\u30C8\u30EA\u30AC\u30FC\u3057\u307E\u3059\u3002","Time trigger":"\u6642\u9593\u30C8\u30EA\u30AC\u30FC","When this is typed, it will trigger the time selector":"\u3053\u306E\u8A2D\u5B9A\u306B\u5165\u529B\u3055\u308C\u305F\u6587\u5B57\u5217\u3067\u6642\u9593\u30BB\u30EC\u30AF\u30BF\u30FC\u3092\u30C8\u30EA\u30AC\u30FC\u3057\u307E\u3059\u3002","Date format":"\u65E5\u4ED8\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8","This format will be used when saving dates in markdown.":"\u3053\u306E\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u306F\u30DE\u30FC\u30AF\u30C0\u30A6\u30F3\u3067\u65E5\u4ED8\u304C\u4FDD\u5B58\u3055\u308C\u308B\u969B\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002","For more syntax, refer to":"\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u306B\u3064\u3044\u3066\u306F\u3053\u3061\u3089\u3092\u53C2\u7167:","format reference":"\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u30EA\u30D5\u30A1\u30EC\u30F3\u30B9","Your current syntax looks like this":"\u73FE\u5728\u306E\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u306F\u6B21\u306E\u3088\u3046\u306B\u898B\u3048\u307E\u3059","Time format":"\u6642\u9593\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8","Date display format":"\u65E5\u4ED8\u8868\u793A\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8","This format will be used when displaying dates in Kanban cards.":"\u3053\u306E\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u306F\u30AB\u30F3\u30D0\u30F3\u30AB\u30FC\u30C9\u5185\u306B\u3066\u65E5\u4ED8\u306E\u8868\u793A\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002","Show relative date":"\u76F8\u5BFE\u65E5\u4ED8\u3092\u8868\u793A","Link dates to daily notes":"\u30C7\u30A4\u30EA\u30FC\u30CE\u30FC\u30C8\u306B\u65E5\u4ED8\u3092\u30EA\u30F3\u30AF","When toggled, dates will link to daily notes. Eg. [[2021-04-26]]":"\u6709\u52B9\u5316\u3059\u308B\u3068\u65E5\u4ED8\u304C\u30C7\u30A4\u30EA\u30FC\u30CE\u30FC\u30C8\u306B\u30EA\u30F3\u30AF\u3055\u308C\u307E\u3059\u3002 \u4F8B: [[2021-04-26]]","Add date and time to archived cards":"\u30A2\u30FC\u30AB\u30A4\u30D6\u3055\u308C\u305F\u30AB\u30FC\u30C9\u306B\u65E5\u4ED8\u3068\u6642\u9593\u3092\u8FFD\u52A0","When toggled, the current date and time will be added to the card title when it is archived. Eg. - [ ] 2021-05-14 10:00am My card title":"\u6709\u52B9\u5316\u3059\u308B\u3068\u30AB\u30FC\u30C9\u304C\u30A2\u30FC\u30AB\u30A4\u30D6\u3055\u308C\u305F\u969B\u306B\u73FE\u5728\u306E\u65E5\u4ED8\u3068\u6642\u9593\u304C\u30AB\u30FC\u30C9\u306E\u6700\u521D\u306B\u8FFD\u8A18\u3055\u308C\u308B\u3088\u3046\u306B\u306A\u308A\u307E\u3059\u3002\u4F8B: - [ ] 2021-05-14 10:00am \u30AB\u30FC\u30C9\u30BF\u30A4\u30C8\u30EB","Archive date/time separator":"\u65E5\u4ED8\u30FB\u6642\u9593\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC\u3092\u30A2\u30FC\u30AB\u30A4\u30D6","This will be used to separate the archived date/time from the title":"\u3053\u308C\u306F\u30A2\u30FC\u30AB\u30A4\u30D6\u3055\u308C\u305F\u65E5\u4ED8\u30FB\u6642\u9593\u3092\u30BF\u30A4\u30C8\u30EB\u304B\u3089\u5206\u96E2\u3059\u308B\u306E\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002","Archive date/time format":"\u65E5\u4ED8\u30FB\u6642\u9593\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u3092\u30A2\u30FC\u30AB\u30A4\u30D6","Kanban Plugin":"\u30AB\u30F3\u30D0\u30F3\u30D7\u30E9\u30B0\u30A4\u30F3","Linked Page Metadata":"\u30EA\u30F3\u30AF\u3055\u308C\u305F\u30DA\u30FC\u30B8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF","Display metadata for the first note linked within a card. Specify which metadata keys to display below. An optional label can be provided, and labels can be hidden altogether.":"\u30AB\u30FC\u30C9\u5185\u3067\u30EA\u30F3\u30AF\u3055\u308C\u3066\u3044\u308B\u6700\u521D\u306E\u30CE\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u8868\u793A\u3057\u307E\u3059\u3002\u4E0B\u306B\u8868\u793A\u3059\u308B\u30E1\u30BF\u30C7\u30FC\u30BF\u306E\u30AD\u30FC\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30AA\u30D7\u30B7\u30E7\u30F3\u3068\u3057\u3066\u30E9\u30D9\u30EB\u306E\u4ED8\u4E0E\u304C\u53EF\u80FD\u3067\u3042\u308A\u3001\u30E9\u30D9\u30EB\u306F\u5B8C\u5168\u306B\u975E\u8868\u793A\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002","Board Header Buttons":"\u30DC\u30FC\u30C9\u306E\u30D8\u30C3\u30C0\u30FC\u30DC\u30BF\u30F3","Calendar: first day of week":"\u30AB\u30EC\u30F3\u30C0\u30FC: \u9031\u306E\u59CB\u307E\u308A","Override which day is used as the start of the week":"\u9031\u306E\u59CB\u307E\u308A\u3068\u3057\u3066\u4F7F\u7528\u3059\u308B\u66DC\u65E5\u3092\u5909\u66F4\u3057\u307E\u3059\u3002",Sunday:"\u65E5\u66DC\u65E5",Monday:"\u6708\u66DC\u65E5",Tuesday:"\u706B\u66DC\u65E5",Wednesday:"\u6C34\u66DC\u65E5",Thursday:"\u6728\u66DC\u65E5",Friday:"\u91D1\u66DC\u65E5",Saturday:"\u571F\u66DC\u65E5","Metadata key":"\u30E1\u30BF\u30C7\u30FC\u30BF\u306E\u30AD\u30FC","Display label":"\u30E9\u30D9\u30EB\u3092\u8868\u793A","Hide label":"\u30E9\u30D9\u30EB\u3092\u96A0\u3059","Drag to rearrange":"\u30C9\u30E9\u30C3\u30B0\u3057\u3066\u4E26\u3079\u66FF\u3048\u308B",Delete:"\u524A\u9664","Add key":"\u30AD\u30FC\u3092\u8FFD\u52A0","Field contains markdown":"\u30D5\u30A3\u30FC\u30EB\u30C9\u306B\u30DE\u30FC\u30AF\u30C0\u30A6\u30F3\u3092\u542B\u307F\u307E\u3059","More options":"\u4ED6\u306E\u30AA\u30D7\u30B7\u30E7\u30F3",Cancel:"\u30AD\u30E3\u30F3\u30BB\u30EB",today:"\u4ECA\u65E5",yesterday:"\u6628\u65E5",tomorrow:"\u660E\u65E5","Change date":"\u65E5\u4ED8\u3092\u5909\u66F4","Change time":"\u6642\u9593\u3092\u5909\u66F4","Card title...":"\u30AB\u30FC\u30C9\u30BF\u30A4\u30C8\u30EB\u2026","Add card":"\u30AB\u30FC\u30C9\u3092\u8FFD\u52A0","Add a card":"\u30AB\u30FC\u30C9\u3092\u8FFD\u52A0","Edit card":"\u30AB\u30FC\u30C9\u3092\u7DE8\u96C6","New note from card":"\u30AB\u30FC\u30C9\u304B\u3089\u30CE\u30FC\u30C8\u3092\u65B0\u898F\u4F5C\u6210","Archive card":"\u30AB\u30FC\u30C9\u3092\u30A2\u30FC\u30AB\u30A4\u30D6","Delete card":"\u30AB\u30FC\u30C9\u3092\u524A\u9664","Edit date":"\u65E5\u4ED8\u3092\u7DE8\u96C6","Add date":"\u65E5\u4ED8\u3092\u8FFD\u52A0","Remove date":"\u65E5\u4ED8\u3092\u524A\u9664","Edit time":"\u6642\u9593\u3092\u7DE8\u96C6","Add time":"\u6642\u9593\u3092\u8FFD\u52A0","Remove time":"\u6642\u9593\u3092\u524A\u9664","Duplicate card":"\u30AB\u30FC\u30C9\u3092\u8907\u88FD","Split card":"\u30AB\u30FC\u30C9\u3092\u5206\u5272","Copy link to card":"\u30AB\u30FC\u30C9\u3078\u306E\u30EA\u30F3\u30AF\u3092\u30B3\u30D4\u30FC","Enter list title...":"\u30EA\u30B9\u30C8\u30BF\u30A4\u30C8\u30EB\u3092\u7DE8\u96C6\u2026","Mark cards in this list as complete":"\u3053\u306E\u30EA\u30B9\u30C8\u306B\u542B\u307E\u308C\u308B\u30AB\u30FC\u30C9\u3092\u5B8C\u4E86\u3068\u3057\u3066\u30DE\u30FC\u30AF\u3059\u308B","Add list":"\u30EA\u30B9\u30C8\u3092\u8FFD\u52A0","Add a list":"\u30EA\u30B9\u30C8\u3092\u8FFD\u52A0","Move list":"\u30EA\u30B9\u30C8\u3092\u79FB\u52D5",Close:"\u9589\u3058\u308B","Are you sure you want to delete this list and all its cards?":"\u3053\u306E\u30EA\u30B9\u30C8\u3068\u542B\u307E\u308C\u308B\u3059\u3079\u3066\u306E\u30AB\u30FC\u30C9\u3092\u524A\u9664\u3057\u307E\u3059\u304B\b\uFF1F","Yes, delete list":"\u306F\u3044\u3001\u30EA\u30B9\u30C8\u3092\u524A\u9664\u3057\u307E\u3059","Are you sure you want to archive this list and all its cards?":"\u3053\u306E\u30EA\u30B9\u30C8\u3068\u542B\u307E\u308C\u308B\u3059\u3079\u3066\u306E\u30AB\u30FC\u30C9\u3092\u30A2\u30FC\u30AB\u30A4\u30D6\u3057\u307E\u3059\u304B\uFF1F","Yes, archive list":"\u306F\u3044\u3001\u30EA\u30B9\u30C8\u3092\u30A2\u30FC\u30AB\u30A4\u30D6\u3057\u307E\u3059","Are you sure you want to archive all cards in this list?":"\u3053\u306E\u30EA\u30B9\u30C8\u306B\u542B\u307E\u308C\u308B\u3059\u3079\u3066\u306E\u30AB\u30FC\u30C9\u3092\u30A2\u30FC\u30AB\u30A4\u30D6\u3057\u307E\u3059\u304B\uFF1F","Yes, archive cards":"\u306F\u3044\u3001\u30AB\u30FC\u30C9\u3092\u30A2\u30FC\u30AB\u30A4\u30D6\u3057\u307E\u3059","Edit list":"\u30EA\u30B9\u30C8\u3092\u7DE8\u96C6","Archive cards":"\u30AB\u30FC\u30C9\u3092\u30A2\u30FC\u30AB\u30A4\u30D6","Archive list":"\u30EA\u30B9\u30C8\u3092\u30A2\u30FC\u30AB\u30A4\u30D6","Delete list":"\u30EA\u30B9\u30C8\u3092\u524A\u9664","Unable to find":"\u898B\u3064\u304B\u308A\u307E\u305B\u3093","Open in default app":"\u30C7\u30D5\u30A9\u30EB\u30C8\u30A2\u30D7\u30EA\u3067\u958B\u304F"},tb=gA;var yA={"Open as kanban board":"\uCE78\uBC18 \uBCF4\uB4DC\uB85C \uC5F4\uAE30","Create new board":"\uC0C8 \uBCF4\uB4DC \uB9CC\uB4E4\uAE30","Archive completed cards in active board":"\uD65C\uC131 \uBCF4\uB4DC\uC5D0\uC11C \uC644\uB8CC\uB41C \uCE74\uB4DC \uBCF4\uAD00","Error: current file is not a Kanban board":"\uC5D0\uB7EC: \uD604\uC7AC \uD30C\uC77C\uC740 \uCE78\uBC18 \uBCF4\uB4DC\uAC00 \uC544\uB2D9\uB2C8\uB2E4.","Convert empty note to Kanban":"\uBE48 \uB178\uD2B8\uB97C \uCE78\uBC18 \uBCF4\uB4DC\uB85C \uBCC0\uD658","Error: cannot create Kanban, the current note is not empty":"\uC5D0\uB7EC: \uCE78\uBC18\uC744 \uC0DD\uC131\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uD604\uC7AC \uB178\uD2B8\uAC00 \uBE44\uC5B4\uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.","New kanban board":"\uC0C8 \uBCF4\uB4DC \uB9CC\uB4E4\uAE30","Untitled Kanban":"\uC774\uB984 \uC5C6\uB294 \uBCF4\uB4DC","Toggle between Kanban and markdown mode":"\uCE78\uBC18 \uBAA8\uB4DC\uC640 \uB9C8\uD06C\uB2E4\uC6B4 \uBAA8\uB4DC \uC804\uD658","Open as markdown":"\uB9C8\uD06C\uB2E4\uC6B4\uC73C\uB85C \uC5F4\uAE30","Open board settings":"\uBCF4\uB4DC \uC124\uC815 \uC5F4\uAE30","Archive completed cards":"\uC644\uB8CC\uB41C \uCE74\uB4DC \uBCF4\uAD00","Something went wrong":"\uC54C \uC218 \uC5C6\uB294 \uBB38\uC81C\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.","You may wish to open as markdown and inspect or edit the file.":"\uB9C8\uD06C\uB2E4\uC6B4\uC73C\uB85C \uC5F4\uC5B4 \uD30C\uC77C\uC744 \uAC80\uC0AC\uD558\uAC70\uB098 \uD3B8\uC9D1\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","Are you sure you want to archive all completed cards on this board?":"\uC815\uB9D0 \uC774 \uBCF4\uB4DC\uC758 \uBAA8\uB4E0 \uC644\uB8CC\uB41C \uCE74\uB4DC\uB97C \uBCF4\uAD00\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?",Complete:"\uC644\uB8CC\uB428",Archive:"\uBCF4\uAD00\uB428","Invalid Kanban file: problems parsing frontmatter":"\uC798\uBABB\uB41C \uCE78\uBC18 \uD30C\uC77C: \uD504\uB860\uD2B8\uB9E4\uD130 \uD30C\uC2F1 \uBB38\uC81C\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.","I don't know how to interpret this line:":"\uC774 \uC904\uC744 \uD574\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4:",Untitled:"\uC81C\uBAA9 \uC5C6\uC74C","Note: No template plugins are currently enabled.":"\uB178\uD2B8: \uD604\uC7AC \uD15C\uD50C\uB9BF \uD50C\uB7EC\uADF8\uC778\uC774 \uD65C\uC131\uD654\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.",default:"\uAE30\uBCF8","Search...":"\uAC80\uC0C9\uD558\uAE30...","New line trigger":"\uC0C8 \uC904 \uB9CC\uB4E4\uAE30","Select whether Enter or Shift+Enter creates a new line. The opposite of what you choose will create and complete editing of cards and lists.":"Enter \uB610\uB294 Shift + Enter \uC911 \uC5B4\uB290 \uB2E8\uCD95\uD0A4\uB85C \uC0C8 \uC904\uB85C \uB118\uC5B4\uAC08\uC9C0 \uC120\uD0DD\uD569\uB2C8\uB2E4. \uC120\uD0DD\uD558\uC9C0 \uC54A\uC740 \uB2E8\uCD95\uD0A4 (\uB9CC\uC57D Enter\uB97C \uC120\uD0DD\uD588\uB2E4\uBA74 Shift + Enter) \uB294 \uC9C4\uD589\uC911\uC778 \uCE74\uB4DC \uB610\uB294 \uBAA9\uB85D\uC758 \uC0DD\uC131 \uBC0F \uC218\uC815\uC744 \uC644\uB8CC\uD569\uB2C8\uB2E4.","Shift + Enter":"Shift + Enter",Enter:"Enter","Prepend / append new cards":"\uC0C8\uB85C\uC6B4 \uCE74\uB4DC\uB97C \uCD94\uAC00\uD560 \uC704\uCE58","This setting controls whether new cards are added to the beginning or end of the list.":"\uC0C8\uB85C\uC6B4 \uCE74\uB4DC\uB97C \uCD94\uAC00\uD558\uB294 \uBC84\uD2BC\uC774 \uB9E8 \uC704\uC5D0 \uCD94\uAC00\uB420\uC9C0 \uB9E8 \uC544\uB798\uC5D0 \uCD94\uAC00\uB420\uC9C0 \uC124\uC815\uD569\uB2C8\uB2E4.",Prepend:"\uC0C1\uB2E8","Prepend (compact)":"\uC0C1\uB2E8 (\uC791\uC740 \uBC84\uD2BC)",Append:"\uD558\uB2E8","These settings will take precedence over the default Kanban board settings.":"\uC774 \uC124\uC815\uC740 \uAE30\uBCF8 \uCE78\uBC18 \uBCF4\uB4DC \uC124\uC815\uBCF4\uB2E4 \uC6B0\uC120\uD569\uB2C8\uB2E4.","Set the default Kanban board settings. Settings can be overridden on a board-by-board basis.":"\uAE30\uBCF8 \uCE78\uBC18 \uBCF4\uB4DC \uC124\uC815\uC744 \uC124\uC815\uD569\uB2C8\uB2E4. \uC124\uC815\uC740 \uBCF4\uB4DC\uBCC4\uB85C \uC7AC\uC815\uC758\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","Note template":"\uB178\uD2B8 \uD15C\uD50C\uB9BF","This template will be used when creating new notes from Kanban cards.":"\uC774 \uD15C\uD50C\uB9BF\uC740 \uCE78\uBC18 \uCE74\uB4DC\uC5D0\uC11C \uC0C8 \uB178\uD2B8\uB97C \uB9CC\uB4E4 \uB54C \uC0AC\uC6A9\uB429\uB2C8\uB2E4.","No template":"\uD15C\uD50C\uB9BF \uC5C6\uC74C","Note folder":"\uB178\uD2B8 \uD3F4\uB354","Notes created from Kanban cards will be placed in this folder. If blank, they will be placed in the default location for this vault.":"\uCE74\uB4DC\uC5D0\uC11C \uB9CC\uB4E0 \uB178\uD2B8\uB294 \uC774 \uD3F4\uB354\uC5D0 \uC800\uC7A5\uB429\uB2C8\uB2E4. \uB9CC\uC57D \uBE44\uC5B4\uC788\uB2E4\uBA74, \uAE30\uBCF8 \uC704\uCE58\uC5D0 \uC800\uC7A5\uB429\uB2C8\uB2E4.","Default folder":"\uAE30\uBCF8 \uD3F4\uB354","List width":"\uBAA9\uB85D \uB108\uBE44","Enter a number to set the list width in pixels.":"\uD53D\uC140 \uB2E8\uC704\uB85C \uBAA9\uB85D\uC758 \uB108\uBE44\uB97C \uC124\uC815\uD569\uB2C8\uB2E4.","Maximum number of archived cards":"\uBCF4\uAD00\uB41C \uCE74\uB4DC\uC758 \uCD5C\uB300 \uC218","Archived cards can be viewed in markdown mode. This setting will begin removing old cards once the limit is reached. Setting this value to -1 will allow a board's archive to grow infinitely.":"\uBCF4\uAD00\uB41C \uCE74\uB4DC\uB294 \uB9C8\uD06C\uB2E4\uC6B4 \uBAA8\uB4DC\uC5D0\uC11C \uBCFC \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774 \uC124\uC815\uC740 \uD55C\uB3C4\uC5D0 \uB3C4\uB2EC\uD558\uBA74 \uC774\uC804 \uCE74\uB4DC\uB97C \uC81C\uAC70\uD558\uAE30 \uC2DC\uC791\uD569\uB2C8\uB2E4. \uC774 \uAC12\uC744 -1\uB85C \uC124\uC815\uD558\uBA74 \uBCF4\uAD00\uD568\uC774 \uBB34\uD55C\uC815\uC73C\uB85C \uCEE4\uC9C8 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","Display card checkbox":"\uCE74\uB4DC\uC5D0 \uCCB4\uD06C\uBC15\uC2A4 \uD45C\uC2DC","When toggled, a checkbox will be displayed with each card":"\uD65C\uC131\uD654\uD558\uBA74 \uAC01 \uCE74\uB4DC\uC5D0 \uCCB4\uD06C\uBC15\uC2A4\uAC00 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","Reset to default":"\uAE30\uBCF8\uAC12\uC73C\uB85C \uCD08\uAE30\uD654","Date & Time":"\uB0A0\uC9DC \uBC0F \uC2DC\uAC04","Date trigger":"\uB0A0\uC9DC \uC120\uD0DD\uAE30 \uD2B8\uB9AC\uAC70","When this is typed, it will trigger the date selector":"\uC774 \uD14D\uC2A4\uD2B8\uB97C \uC785\uB825\uD558\uBA74 \uB0A0\uC9DC \uC120\uD0DD\uAE30\uAC00 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","Time trigger":"\uC2DC\uAC04 \uC120\uD0DD\uAE30 \uD2B8\uB9AC\uAC70","When this is typed, it will trigger the time selector":"\uC774 \uD14D\uC2A4\uD2B8\uB97C \uC785\uB825\uD558\uBA74 \uC2DC\uAC04 \uC120\uD0DD\uAE30\uAC00 \uD45C\uC2DC\uB429\uB2C8\uB2E4.","Date format":"\uB0A0\uC9DC \uD615\uC2DD","This format will be used when saving dates in markdown.":"\uC774 \uD615\uC2DD\uC740 \uB9C8\uD06C\uB2E4\uC6B4\uC5D0\uC11C \uB0A0\uC9DC\uB97C \uC800\uC7A5\uD560 \uB54C \uC0AC\uC6A9\uB429\uB2C8\uB2E4.","For more syntax, refer to":"\uC790\uC138\uD55C \uBB38\uBC95\uC740 \uB2E4\uC74C\uC744 \uCC38\uC870\uD558\uC138\uC694.","format reference":"\uD615\uC2DD \uCC38\uC870","Your current syntax looks like this":"\uD604\uC7AC \uBB38\uBC95\uC740 \uB2E4\uC74C\uACFC \uAC19\uC2B5\uB2C8\uB2E4.","Time format":"\uC2DC\uAC04 \uD615\uC2DD","Date display format":"\uB0A0\uC9DC \uD45C\uC2DC \uD615\uC2DD","This format will be used when displaying dates in Kanban cards.":"\uC774 \uD615\uC2DD\uC740 \uCE74\uBC18 \uBCF4\uB4DC\uC5D0\uC11C \uB0A0\uC9DC\uB97C \uD45C\uC2DC\uD560\uB54C \uC0AC\uC6A9\uB429\uB2C8\uB2E4.","Show relative date":"\uB0A0\uC9DC\uB97C \uC0C1\uB300\uC801\uC73C\uB85C \uD45C\uC2DC","Hide card counts in list titles":"\uBAA9\uB85D \uC81C\uBAA9\uC5D0 \uCE74\uB4DC \uC218 \uD45C\uC2DC \uC228\uAE30\uAE30","When toggled, card counts are hidden from the list title":"\uD65C\uC131\uD654\uD558\uBA74 \uBAA9\uB85D \uC81C\uBAA9\uC5D0 \uCD1D \uCE74\uB4DC \uC218\uAC00 \uD45C\uC2DC\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.","Link dates to daily notes":"\uC77C\uC77C \uB178\uD2B8\uC5D0 \uB0A0\uC9DC \uC5F0\uACB0","When toggled, dates will link to daily notes. Eg. [[2021-04-26]]":"\uD65C\uC131\uD654\uD558\uBA74 \uB0A0\uC9DC\uAC00 \uC77C\uC77C \uB178\uD2B8\uC5D0 \uC5F0\uACB0\uB429\uB2C8\uB2E4. \uC608: [[2021-04-26]]","Add date and time to archived cards":"\uBCF4\uAD00\uB41C \uCE74\uB4DC\uC5D0 \uB0A0\uC9DC\uC640 \uC2DC\uAC04 \uCD94\uAC00","When toggled, the current date and time will be added to the card title when it is archived. Eg. - [ ] 2021-05-14 10:00am My card title":"\uD65C\uC131\uD654\uD558\uBA74 \uCE74\uB4DC\uAC00 \uBCF4\uAD00\uB420 \uB54C \uD604\uC7AC \uB0A0\uC9DC\uC640 \uC2DC\uAC04\uC774 \uCE74\uB4DC \uC81C\uBAA9\uC5D0 \uCD94\uAC00\uB429\uB2C8\uB2E4. \uC608: - [ ] 2021-05-14 10:00am \uB0B4 \uCE74\uB4DC \uC81C\uBAA9","Add archive date/time after card title":"\uCE74\uB4DC \uC81C\uBAA9 \uB4A4\uC5D0 \uBCF4\uAD00\uB41C \uB0A0\uC9DC/\uC2DC\uAC04 \uCD94\uAC00","When toggled, the archived date/time will be added after the card title, e.g.- [ ] My card title 2021-05-14 10:00am. By default, it is inserted before the title.":"\uD65C\uC131\uD654\uD558\uBA74 \uCE74\uB4DC \uC81C\uBAA9 \uB4A4\uC5D0 \uBCF4\uAD00\uB41C \uB0A0\uC9DC/\uC2DC\uAC04\uC774 \uCD94\uAC00\uB429\uB2C8\uB2E4. \uC608: - [ ] \uB0B4 \uCE74\uB4DC \uC81C\uBAA9 2021-05-14 10:00am. \uAE30\uBCF8\uC801\uC73C\uB85C \uC81C\uBAA9 \uC55E\uC5D0 \uC0BD\uC785\uB429\uB2C8\uB2E4.","Archive date/time separator":"\uBCF4\uAD00\uB420 \uCE74\uB4DC\uC758 \uB0A0\uC9DC/\uC2DC\uAC04 \uAD6C\uBD84\uC790","This will be used to separate the archived date/time from the title":"\uC774 \uAD6C\uBD84\uC790\uB294 \uCE74\uB4DC \uC81C\uBAA9\uACFC \uBCF4\uAD00\uB41C \uB0A0\uC9DC/\uC2DC\uAC04\uC744 \uAD6C\uBD84\uD558\uB294\uB370 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.","Archive date/time format":"\uBCF4\uAD00\uB41C \uCE74\uB4DC\uC758 \uB0A0\uC9DC/\uC2DC\uAC04 \uD615\uC2DD","Kanban Plugin":"\uCE78\uBC18 \uD50C\uB7EC\uADF8\uC778","Tag colors":"\uD0DC\uADF8 \uC0C9\uC0C1 \uD45C\uC2DC","Set colors for tags displayed in cards.":"\uCE74\uB4DC \uC81C\uBAA9 \uC544\uB798\uC5D0 \uD45C\uC2DC\uB418\uB294 \uD0DC\uADF8\uC758 \uC0C9\uC0C1\uC744 \uC124\uC815\uD569\uB2C8\uB2E4.","Linked Page Metadata":"\uB9C1\uD06C\uB41C \uD398\uC774\uC9C0 \uBA54\uD0C0\uB370\uC774\uD130","Display metadata for the first note linked within a card. Specify which metadata keys to display below. An optional label can be provided, and labels can be hidden altogether.":"\uCE74\uB4DC \uB0B4\uC5D0\uC11C \uCCAB \uBC88\uC9F8\uB85C \uB9C1\uD06C\uB41C \uB178\uD2B8\uC758 \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uD45C\uC2DC\uD569\uB2C8\uB2E4. \uC544\uB798\uC5D0 \uD45C\uC2DC\uD560 \uBA54\uD0C0\uB370\uC774\uD130 \uD0A4\uB97C \uC9C0\uC815\uD569\uB2C8\uB2E4. \uC120\uD0DD\uC801\uC73C\uB85C \uB808\uC774\uBE14\uC744 \uC81C\uACF5\uD560 \uC218 \uC788\uC73C\uBA70, \uB808\uC774\uBE14\uC744 \uC644\uC804\uD788 \uC228\uAE38 \uC218 \uC788\uC2B5\uB2C8\uB2E4.","Board Header Buttons":"\uBCF4\uB4DC \uD5E4\uB354 \uBC84\uD2BC","Calendar: first day of week":"\uB2EC\uB825: \uCCAB \uBC88\uC9F8 \uC694\uC77C","Override which day is used as the start of the week":"\uD55C \uC8FC\uC758 \uC2DC\uC791\uC73C\uB85C \uC0AC\uC6A9\uB418\uB294 \uC694\uC77C\uC744 \uC7AC\uC815\uC758\uD569\uB2C8\uB2E4.",Sunday:"\uC77C\uC694\uC77C",Monday:"\uC6D4\uC694\uC77C",Tuesday:"\uD654\uC694\uC77C",Wednesday:"\uC218\uC694\uC77C",Thursday:"\uBAA9\uC694\uC77C",Friday:"\uAE08\uC694\uC77C",Saturday:"\uD1A0\uC694\uC77C","Background color":"\uBC30\uACBD \uC0C9\uC0C1",Tag:"\uD0DC\uADF8","Text color":"\uAE00\uC790 \uC0C9\uC0C1","Date is":"\uB0A0\uC9DC\uB294",Today:"\uC624\uB298","After now":"\uC774\uD6C4","Before now":"\uC774\uC804","Between now and":"\uACFC\uC758 \uC0AC\uC774","Display date colors":"\uB0A0\uC9DC \uC0C9\uC0C1 \uD45C\uC2DC","Set colors for dates displayed in cards based on the rules below.":"\uC544\uB798 \uCE74\uB4DC\uC5D0 \uD45C\uC2DC\uB41C \uB0A0\uC9DC\uC758 \uC0C9\uC0C1\uC744 \uC544\uB798\uC758 \uADDC\uCE59\uC5D0 \uB530\uB77C \uC124\uC815\uD558\uC138\uC694.","Add date color":"\uB0A0\uC9DC \uC0C9\uC0C1 \uCD94\uAC00","Metadata key":"\uBA54\uD0C0\uB370\uC774\uD130 \uD0A4","Display label":"\uD45C\uC2DC\uB420 \uB77C\uBCA8","Hide label":"\uB77C\uBCA8 \uC228\uAE30\uAE30","Drag to rearrange":"\uB4DC\uB798\uADF8\uD558\uC5EC \uC7AC\uC815\uB82C",Delete:"\uC0AD\uC81C","Add key":"\uD0A4 \uCD94\uAC00","Field contains markdown":"\uD544\uB4DC\uC5D0 \uB9C8\uD06C\uB2E4\uC6B4\uC774 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4.","Add tag color":"\uD0DC\uADF8 \uC0C9\uC0C1 \uCD94\uAC00","More options":"\uB354 \uB9CE\uC740 \uC635\uC158",Cancel:"\uCDE8\uC18C",today:"\uC624\uB298",yesterday:"\uC5B4\uC81C",tomorrow:"\uB0B4\uC77C","Change date":"\uB0A0\uC9DC \uBCC0\uACBD","Change time":"\uC2DC\uAC04 \uBCC0\uACBD","Card title...":"\uCE74\uB4DC \uC81C\uBAA9...","Add card":"\uCE74\uB4DC \uCD94\uAC00","Add a card":"\uCE74\uB4DC \uCD94\uAC00","Edit card":"\uCE74\uB4DC \uC218\uC815","New note from card":"\uCE74\uB4DC\uC5D0\uC11C \uC0C8 \uB178\uD2B8 \uB9CC\uB4E4\uAE30","Archive card":"\uCE74\uB4DC \uBCF4\uAD00","Delete card":"\uCE74\uB4DC \uC0AD\uC81C","Edit date":"\uB0A0\uC9DC \uC218\uC815","Add date":"\uB0A0\uC9DC \uCD94\uAC00","Remove date":"\uB0A0\uC9DC \uC0AD\uC81C","Edit time":"\uC2DC\uAC04 \uC218\uC815","Add time":"\uC2DC\uAC04 \uCD94\uAC00","Remove time":"\uC2DC\uAC04 \uC0AD\uC81C","Duplicate card":"\uCE74\uB4DC \uBCF5\uC81C","Split card":"\uCE74\uB4DC \uBD84\uD560","Copy link to card":"\uCE74\uB4DC \uB9C1\uD06C \uBCF5\uC0AC","Insert card before":"\uCE74\uB4DC \uC704\uC5D0 \uC0BD\uC785","Insert card after":"\uCE74\uB4DC \uC544\uB798\uC5D0 \uC0BD\uC785","Add label":"\uB77C\uBCA8 \uCD94\uAC00","Move to top":"\uB9E8 \uC704\uB85C \uC774\uB3D9","Move to bottom":"\uB9E8 \uC544\uB798\uB85C \uC774\uB3D9","Enter list title...":"\uBAA9\uB85D \uC81C\uBAA9 \uC785\uB825...","Mark cards in this list as complete":"\uC774 \uBAA9\uB85D\uC758 \uCE74\uB4DC\uB97C \uC644\uB8CC\uB428\uC73C\uB85C \uD45C\uC2DC","Add list":"\uBAA9\uB85D \uCD94\uAC00","Add a list":"\uBAA9\uB85D \uCD94\uAC00","Move list":"\uBAA9\uB85D \uC774\uB3D9",Close:"\uB2EB\uAE30","Are you sure you want to delete this list and all its cards?":"\uC815\uB9D0\uB85C \uC774 \uBAA9\uB85D\uACFC \uADF8 \uC548\uC758 \uBAA8\uB4E0 \uCE74\uB4DC\uB97C \uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?","Yes, delete list":"\uB124, \uBAA9\uB85D\uC744 \uC0AD\uC81C\uD569\uB2C8\uB2E4.","Are you sure you want to archive this list and all its cards?":"\uC815\uB9D0\uB85C \uC774 \uBAA9\uB85D\uACFC \uADF8 \uC548\uC758 \uBAA8\uB4E0 \uCE74\uB4DC\uB97C \uBCF4\uAD00\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?","Yes, archive list":"\uB124, \uBAA8\uB450 \uBCF4\uAD00\uD569\uB2C8\uB2E4.","Are you sure you want to archive all cards in this list?":"\uC815\uB9D0\uB85C \uC774 \uBAA9\uB85D\uC758 \uBAA8\uB4E0 \uCE74\uB4DC\uB97C \uBCF4\uAD00\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?","Yes, archive cards":"\uB124, \uBAA8\uB450 \uBCF4\uAD00\uD569\uB2C8\uB2E4.","Edit list":"\uBAA9\uB85D \uC218\uC815","Archive cards":"\uCE74\uB4DC \uBCF4\uAD00","Archive list":"\uBAA9\uB85D \uBCF4\uAD00","Delete list":"\uBAA9\uB85D \uC0AD\uC81C","Insert list before":"\uBAA9\uB85D\uC744 \uC67C\uCABD\uC5D0 \uC0DD\uC131","Insert list after":"\uBAA9\uB85D\uC744 \uC624\uB978\uCABD\uC5D0 \uC0DD\uC131","Sort by card text":"\uB0B4\uC6A9\uC73C\uB85C \uC815\uB82C","Sort by date":"\uB0A0\uC9DC\uC21C\uC73C\uB85C \uC815\uB82C","Unable to find":"\uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.","Open in default app":"\uAE30\uBCF8 \uC571\uC73C\uB85C \uC5F4\uAE30",Submit:"\uD655\uC778"},nb=yA;var vA={},rb=vA;var wA={},ib=wA;var bA={},ab=bA;var DA={},ob=DA;var SA={"Create new board":"Criar um novo quadro","Archive completed cards in active board":"Arquivar cart\xF5es conclu\xEDdos no quadro ativo","Error: current file is not a Kanban board":"Erro: o arquivo atual n\xE3o \xE9 um quadro Kanban","Convert empty note to Kanban":"Converter nota vazia em Kanban","Error: cannot create Kanban, the current note is not empty":"Erro: n\xE3o \xE9 poss\xEDvel criar o quadro Kanban, a nota atual n\xE3o est\xE1 vazia","Untitled Kanban":"Kanban sem t\xEDtulo","Toggle between Kanban and markdown mode":"Alternar entre os modos Kanban e Markdown","Open as markdown":"Abrir como markdown","Open board settings":"Abrir configura\xE7\xF5es do quadro Kanban","Archive completed cards":"Arquivar cart\xF5es conclu\xEDdos",Complete:"Conclu\xEDdo",Archive:"Arquivado","Note: No template plugins are currently enabled.":"Nota: N\xE3o h\xE1 plug-ins de modelo habilitados no momento.",default:"padr\xE3o","Search...":"Pesquisar...","These settings will take precedence over the default Kanban board settings.":"Essas configura\xE7\xF5es sobrescrever\xE3o as configura\xE7\xF5es padr\xE3o do quadro Kanban","Set the default Kanban board settings. Settings can be overridden on a board-by-board basis.":"Defina as configura\xE7\xF5es padr\xE3o do quadro Kanban. Cada quadro Kanban pode ter sua pr\xF3pria configura\xE7\xE3o.","Note template":"Modelo de nota","This template will be used when creating new notes from Kanban cards.":"Este modelo ser\xE1 usado quando uma nova nota Kanban for criada.","No template":"Sem modelo","Note folder":"Pasta de notas","Notes created from Kanban cards will be placed in this folder. If blank, they will be placed in the default location for this vault.":"As notas criadas pelos links dos cart\xF5es Kanban ser\xE3o colocadas nesta pasta. Se estiver em branco, ser\xE3o colocadas no local configurado como padr\xE3o deste cofre.","Default folder":"Pasta padr\xE3o","Maximum number of archived cards":"Quantidade m\xE1xima de cart\xF5es arquivados","Archived cards can be viewed in markdown mode. This setting will begin removing old cards once the limit is reached. Setting this value to -1 will allow a board's archive to grow infinitely.":"Os cart\xF5es arquivados podem ser vistos no modo Markdown. Esta configura\xE7\xE3o excluir\xE1 os cart\xF5es antigos assim que o limite for atingido. Inserir o valor -1 retira o limite para cart\xF5es arquivados.","Display card checkbox":"Exibe uma caixa de sele\xE7\xE3o do cart\xE3o","When toggled, a checkbox will be displayed with each card":"Quando ativada, uma caixa de sele\xE7\xE3o ser\xE1 exibida em cada cart\xE3o.","Reset to default":"Redefinir configura\xE7\xF5es padr\xE3o","Date & Time":"Data e Hora","Date trigger":"Gatilho de data","When this is typed, it will trigger the date selector":"Quando este caractere \xE9 digitado, o seletor de data \xE9 exibido.","Time trigger":"Gatilho de hora","When this is typed, it will trigger the time selector":"Quando este caractere \xE9 digitado, o seletor de hora \xE9 exibido.","Date format":"Formado da data","This format will be used when saving dates in markdown.":"Este formato ser\xE1 usado quando datas forem armazenadas no Markdown.","For more syntax, refer to":"Para mais informa\xE7\xF5es sobre esta sintaxe, consulte os","format reference":"modelos de formato.","Your current syntax looks like this":"Sua atual sintaxe est\xE1 assim","Time format":"Formato da hora","Date display format":"Formato de exibi\xE7\xE3o da data","This format will be used when displaying dates in Kanban cards.":"Este ser\xE1 o formato das datas exibido nos cart\xF5es do Kanban.","Show relative date":"Exibir datas relativas","Link dates to daily notes":"Vincular datas a notas di\xE1rias","When toggled, dates will link to daily notes. Eg. [[2021-04-26]]":"Ao ativar, as datas ser\xE3o vinculadas \xE0s notas di\xE1rias. Ex.: [[2021-04-26]]","Add date and time to archived cards":"Adicionar data e hora aos cart\xF5es arquivados","When toggled, the current date and time will be added to the card title when it is archived. Eg. - [ ] 2021-05-14 10:00am My card title":"Quando ativada, a data e a hora atuais ser\xE3o adicionadas ao in\xEDcio de um cart\xE3o quando ele for arquivado. Ex.: - [] 2021-05-14 10:00 T\xEDtulo do meu cart\xE3o","Archive date/time separator":"Separador de data/hora do arquivo","This will be used to separate the archived date/time from the title":"Isso ser\xE1 usado para separar a data/hora arquivada do t\xEDtulo.","Archive date/time format":"Formato de data/hora do arquivo","Kanban Plugin":"Plugin Kanban","Linked Page Metadata":"Metadados de p\xE1ginas 'lincadas'","Display metadata for the first note linked within a card. Specify which metadata keys to display below. An optional label can be provided, and labels can be hidden altogether.":"Exibe metadados para a primeira nota 'lincada' em um cart\xE3o. Especifique abaixo quais metadados ser\xE3o exibidos. Um r\xF3tulo opcional pode ser fornecido e os r\xF3tulos podem ser ocultados completamente.","Metadata key":"Metadado","Display label":"Descri\xE7\xE3o personalizada","Hide label":"Ocultar","Drag to rearrange":"Arraste para reorganizar",Delete:"Excluir","Add key":"Adicionar metadado","More options":"Mais op\xE7\xF5es",Cancel:"Cancelar",today:"hoje",yesterday:"ontem",tomorrow:"amanh\xE3","Change date":"Alterar data","Change time":"Mudar hora","Card title...":"T\xEDtulo do item...","Add card":"Adicionar Item","Add a card":"Adicione um cart\xE3o","Edit card":"Editar cart\xE3o","New note from card":"Nova nota do cart\xE3o","Archive card":"Arquivar cart\xE3o","Delete card":"Excluir cart\xE3o","Edit date":"Editar data","Add date":"Adicionar data","Remove date":"Remover data","Edit time":"Editar hora","Add time":"Adicionar hora","Remove time":"Remover hora","Duplicate card":"Duplicate card","Enter list title...":"Insira o t\xEDtulo da lista...","Mark cards in this list as complete":"Marcar os itens nesta lista como conclu\xEDdos","Add list":"Adicionar lista","Add a list":"Adicionar uma lista","Move list":"Mover lista",Close:"Fechar","Are you sure you want to delete this list and all its cards?":"Tem certeza de que deseja excluir esta lista e todos os seus cart\xF5es?","Yes, delete list":"Sim, excluir esta lista","Are you sure you want to archive this list and all its cards?":"Tem certeza de que deseja arquivar esta lista e todos os seus cart\xF5es?","Yes, archive list":"Sim, arquivar esta lista","Are you sure you want to archive all cards in this list?":"Tem certeza de que deseja arquivar todos os cart\xF5es desta lista?","Yes, archive cards":"Sim, arquivar cart\xF5es","Edit list":"Editar lista","Archive cards":"Arquivar cart\xF5es","Archive list":"Arquivar lista","Delete list":"Excluir lista"},sb=SA;var EA={},lb=EA;var kA={"Open as kanban board":"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043A\u0430\u043A Kanban-\u0434\u043E\u0441\u043A\u0443","Create new board":"\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u0443\u044E \u0434\u043E\u0441\u043A\u0443","Archive completed cards in active board":"\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0439 \u0434\u043E\u0441\u043A\u0435","Error: current file is not a Kanban board":"\u041E\u0448\u0438\u0431\u043A\u0430: \u0442\u0435\u043A\u0443\u0449\u0438\u0439 \u0444\u0430\u0439\u043B \u043D\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F Kanban-\u0434\u043E\u0441\u043A\u043E\u0439","Convert empty note to Kanban":"\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0443\u0441\u0442\u0443\u044E \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u0432 Kanban","Error: cannot create Kanban, the current note is not empty":"\u041E\u0448\u0438\u0431\u043A\u0430: \u043D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0441\u043E\u0437\u0434\u0430\u0442\u044C Kanban, \u0442\u0435\u043A\u0443\u0449\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430 \u043D\u0435 \u043F\u0443\u0441\u0442\u0430","New kanban board":"\u041D\u043E\u0432\u0430\u044F Kanban-\u0434\u043E\u0441\u043A\u0430","Untitled Kanban":"\u0411\u0435\u0437\u044B\u043C\u044F\u043D\u043D\u0430\u044F Kanban-\u0434\u043E\u0441\u043A\u0430","Toggle between Kanban and markdown mode":"\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043C\u0435\u0436\u0434\u0443 Kanban \u0438 markdown \u0440\u0435\u0436\u0438\u043C\u0430\u043C\u0438","Open as markdown":"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043A\u0430\u043A markdown","Open board settings":"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0434\u043E\u0441\u043A\u0438","Archive completed cards":"\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438","Something went wrong":"\u0427\u0442\u043E-\u0442\u043E \u043F\u043E\u0448\u043B\u043E \u043D\u0435 \u0442\u0430\u043A","You may wish to open as markdown and inspect or edit the file.":"\u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u0444\u0430\u0439\u043B \u043A\u0430\u043A markdown \u0438 \u043F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u0438\u043B\u0438 \u043E\u0442\u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0435\u0433\u043E.","Are you sure you want to archive all completed cards on this board?":"\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0432\u0441\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u0451\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u0439 \u0434\u043E\u0441\u043A\u0435?",Complete:"\u0412\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u043E",Archive:"\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C","Invalid Kanban file: problems parsing frontmatter":"\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0444\u0430\u0439\u043B Kanban: \u043D\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044F \u043F\u0430\u0440\u0441\u0438\u043D\u0433 frontmatter","I don't know how to interpret this line:":"\u042F \u043D\u0435 \u0437\u043D\u0430\u044E, \u043A\u0430\u043A \u0438\u043D\u0442\u0435\u0440\u043F\u0440\u0435\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u044D\u0442\u0443 \u0441\u0442\u0440\u043E\u043A\u0443:",Untitled:"\u0411\u0435\u0437 \u0438\u043C\u0435\u043D\u0438","Note: No template plugins are currently enabled.":"\u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435: \u0412 \u043D\u0430\u0441\u0442\u043E\u044F\u0449\u0435\u0435 \u0432\u0440\u0435\u043C\u044F \u043D\u0438 \u043E\u0434\u0438\u043D \u043F\u043B\u0430\u0433\u0438\u043D \u0448\u0430\u0431\u043B\u043E\u043D\u0430 \u043D\u0435 \u0432\u043A\u043B\u044E\u0447\u0435\u043D.",default:"\u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E","Search...":"\u041D\u0430\u0439\u0442\u0438...","New line trigger":"\u0422\u0440\u0438\u0433\u0433\u0435\u0440 \u043D\u043E\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438","Select whether Enter or Shift+Enter creates a new line. The opposite of what you choose will create and complete editing of cards and lists.":"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435, \u0431\u0443\u0434\u0435\u0442 \u043B\u0438 \u0441\u043E\u0437\u0434\u0430\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u043E\u0432\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E Enter \u0438\u043B\u0438 Shift+Enter. \u041F\u0440\u043E\u0442\u0438\u0432\u043E\u043F\u043E\u043B\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u0442\u043E\u043C\u0443, \u0447\u0442\u043E \u0432\u044B \u0432\u044B\u0431\u0435\u0440\u0435\u0442\u0435, \u043F\u043E\u0437\u0432\u043E\u043B\u0438\u0442 \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u0438 \u0441\u043F\u0438\u0441\u043A\u043E\u0432.","Shift + Enter":"Shift + Enter",Enter:"Enter","Prepend / append new cards":"\u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043D\u043E\u0432\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A","This setting controls whether new cards are added to the beginning or end of the list.":"\u042D\u0442\u0430 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u0443\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u043C \u043D\u043E\u0432\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A, \u0432 \u043D\u0430\u0447\u0430\u043B\u0435 \u0438\u043B\u0438 \u0432 \u043A\u043E\u043D\u0446\u0435 \u0441\u043F\u0438\u0441\u043A\u0430.",Prepend:"\u0412 \u043D\u0430\u0447\u0430\u043B\u0435","Prepend (compact)":"\u0412 \u043D\u0430\u0447\u0430\u043B\u0435 (\u043A\u043E\u043C\u043F\u0430\u043A\u0442\u043D\u043E)",Append:"\u0412 \u043A\u043E\u043D\u0446\u0435","These settings will take precedence over the default Kanban board settings.":"\u042D\u0442\u0438 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u043C\u0435\u0442\u044C \u043F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 \u043D\u0430\u0434 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430\u043C\u0438 \u0434\u043E\u0441\u043A\u0438 Kanban \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E.","Set the default Kanban board settings. Settings can be overridden on a board-by-board basis.":"\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0434\u043E\u0441\u043A\u0438 Kanban \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E. \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043C\u043E\u0436\u043D\u043E \u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0438\u0442\u044C \u0434\u043B\u044F \u043A\u0430\u0436\u0434\u043E\u0439 \u0434\u043E\u0441\u043A\u0438.","Note template":"\u0428\u0430\u0431\u043B\u043E\u043D \u0437\u0430\u043C\u0435\u0442\u043A\u0438","This template will be used when creating new notes from Kanban cards.":"\u042D\u0442\u043E\u0442 \u0448\u0430\u0431\u043B\u043E\u043D \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043F\u0440\u0438 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0438 \u043D\u043E\u0432\u044B\u0445 \u0437\u0430\u043C\u0435\u0442\u043E\u043A \u0438\u0437 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A Kanban.","No template":"\u041D\u0435\u0442 \u0448\u0430\u0431\u043B\u043E\u043D\u0430","Note folder":"\u0414\u0438\u0440\u0435\u043A\u0442\u043E\u0440\u0438\u044F \u0437\u0430\u043C\u0435\u0442\u043E\u043A","Notes created from Kanban cards will be placed in this folder. If blank, they will be placed in the default location for this vault.":"\u0412 \u044D\u0442\u0443 \u043F\u0430\u043F\u043A\u0443 \u0431\u0443\u0434\u0443\u0442 \u043F\u043E\u043C\u0435\u0449\u0435\u043D\u044B \u0437\u0430\u043C\u0435\u0442\u043A\u0438, \u0441\u043E\u0437\u0434\u0430\u043D\u043D\u044B\u0435 \u0438\u0437 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A Kanban. \u0415\u0441\u043B\u0438 \u043F\u043E\u043B\u0435 \u043F\u0443\u0441\u0442\u043E\u0435, \u043E\u043D\u0438 \u0431\u0443\u0434\u0443\u0442 \u043F\u043E\u043C\u0435\u0449\u0435\u043D\u044B \u0432 \u043F\u0430\u043F\u043A\u0443 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430.","Default folder":"\u0414\u0438\u0440\u0435\u043A\u0442\u043E\u0440\u0438\u044F \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E","List width":"\u0428\u0438\u0440\u0438\u043D\u0430 \u0441\u043F\u0438\u0441\u043A\u0430","Enter a number to set the list width in pixels.":"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0447\u0438\u0441\u043B\u043E, \u0447\u0442\u043E\u0431\u044B \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0448\u0438\u0440\u0438\u043D\u0443 \u0441\u043F\u0438\u0441\u043A\u0430 \u0432 \u043F\u0438\u043A\u0441\u0435\u043B\u044F\u0445.","Maximum number of archived cards":"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A","Archived cards can be viewed in markdown mode. This setting will begin removing old cards once the limit is reached. Setting this value to -1 will allow a board's archive to grow infinitely.":"\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u043C\u043E\u0436\u043D\u043E \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0432 \u0440\u0435\u0436\u0438\u043C\u0435 markdown. \u042D\u0442\u0430 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u043D\u0430\u0447\u043D\u0435\u0442 \u0443\u0434\u0430\u043B\u044F\u0442\u044C \u0441\u0442\u0430\u0440\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u043F\u043E\u0441\u043B\u0435 \u0434\u043E\u0441\u0442\u0438\u0436\u0435\u043D\u0438\u044F \u043B\u0438\u043C\u0438\u0442\u0430. \u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0430 \u044D\u0442\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043D\u0430 -1 \u043F\u043E\u0437\u0432\u043E\u043B\u0438\u0442 \u0430\u0440\u0445\u0438\u0432\u0443 \u0434\u043E\u0441\u043A\u0438 \u0440\u0430\u0441\u0442\u0438 \u0431\u0435\u0441\u043A\u043E\u043D\u0435\u0447\u043D\u043E.","Display card checkbox":"\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0444\u043B\u0430\u0436\u043E\u043A \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438","When toggled, a checkbox will be displayed with each card":"\u041A\u043E\u0433\u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043E, \u0434\u043B\u044F \u043A\u0430\u0436\u0434\u043E\u0439 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0431\u0443\u0434\u0435\u0442 \u043F\u043E\u043A\u0430\u0437\u0430\u043D \u0444\u043B\u0430\u0436\u043E\u043A","Reset to default":"\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438","Date & Time":"\u0414\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F","Date trigger":"\u0422\u0440\u0438\u0433\u0433\u0435\u0440 \u0434\u0430\u0442\u044B","When this is typed, it will trigger the date selector":"\u0412\u0432\u043E\u0434 \u0430\u043A\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442 \u0432\u044B\u0431\u043E\u0440 \u0434\u0430\u0442\u044B","Time trigger":"\u0422\u0440\u0438\u0433\u0433\u0435\u0440 \u0432\u0440\u0435\u043C\u0435\u043D\u0438","When this is typed, it will trigger the time selector":"\u0412\u0432\u043E\u0434 \u0430\u043A\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442 \u0432\u044B\u0431\u043E\u0440 \u0432\u0440\u0435\u043C\u0435\u043D\u0438","Date format":"\u0424\u043E\u0440\u043C\u0430\u0442 \u0434\u0430\u0442\u044B","This format will be used when saving dates in markdown.":"\u042D\u0442\u043E\u0442 \u0444\u043E\u0440\u043C\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D \u043F\u0440\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0438 \u0434\u0430\u0442 \u0432 markdown.","For more syntax, refer to":"\u041F\u043E\u043B\u043D\u044B\u0439 \u0441\u0438\u043D\u0442\u0430\u043A\u0441\u0438\u0441 \u0441\u043C\u043E\u0442\u0440\u0438\u0442\u0435 \u043D\u0430","format reference":"\u0441\u043F\u0440\u0430\u0432\u043A\u0430 \u043F\u043E \u0444\u043E\u0440\u043C\u0430\u0442\u0443","Your current syntax looks like this":"\u0412\u0430\u0448 \u0442\u0435\u043A\u0443\u0449\u0438\u0439 \u0441\u0438\u043D\u0442\u0430\u043A\u0441\u0438\u0441 \u0432\u044B\u0433\u043B\u044F\u0434\u0438\u0442 \u0442\u0430\u043A","Time format":"\u0424\u043E\u0440\u043C\u0430\u0442 \u0432\u0440\u0435\u043C\u0435\u043D\u0438","Date display format":"\u0424\u043E\u0440\u043C\u0430\u0442 \u043F\u043E\u043A\u0430\u0437\u0430 \u0434\u0430\u0442\u044B","This format will be used when displaying dates in Kanban cards.":"\u042D\u0442\u043E\u0442 \u0444\u043E\u0440\u043C\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D \u043F\u0440\u0438 \u043F\u043E\u043A\u0430\u0437\u0435 \u0434\u0430\u0442 \u0432 Kanban-\u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430\u0445.","Show relative date":"\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u0443\u044E \u0434\u0430\u0442\u0443","Hide card counts in list titles":"\u0421\u043A\u0440\u044B\u0442\u044C \u0441\u0447\u0451\u0442\u0447\u0438\u043A\u0438 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u0432 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430\u0445 \u0441\u043F\u0438\u0441\u043A\u0430","When toggled, card counts are hidden from the list title":"\u041A\u043E\u0433\u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043E, \u0441\u0447\u0451\u0442\u0447\u0438\u043A\u0438 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u0441\u043A\u0440\u044B\u0442\u044B \u0432 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430\u0445 \u0441\u043F\u0438\u0441\u043A\u0430","Link dates to daily notes":"\u0421\u0432\u044F\u0437\u044B\u0432\u0430\u0442\u044C \u0434\u0430\u0442\u044B \u0441 \u0435\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u044B\u043C\u0438 \u0437\u0430\u043C\u0435\u0442\u043A\u0430\u043C\u0438","When toggled, dates will link to daily notes. Eg. [[2021-04-26]]":"\u041A\u043E\u0433\u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043E, \u0434\u0430\u0442\u044B \u0431\u0443\u0434\u0443\u0442 \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043D\u0430 \u0435\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u044B\u0435 \u0437\u0430\u043C\u0435\u0442\u043A\u0438. \u041D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, [[2021-04-26]]","Add date and time to archived cards":"\u0414\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u0434\u0430\u0442\u0443 \u0438 \u0432\u0440\u0435\u043C\u044F \u043A \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u043C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430\u043C","When toggled, the current date and time will be added to the card title when it is archived. Eg. - [ ] 2021-05-14 10:00am My card title":"\u041A\u043E\u0433\u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043E, \u0442\u0435\u043A\u0443\u0449\u0438\u0435 \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F \u0431\u0443\u0434\u0443\u0442 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u043A \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0443 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438, \u043A\u043E\u0433\u0434\u0430 \u043E\u043D\u0430 \u0437\u0430\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u0430. \u041D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, - [ ] 2021-05-14 10:00am \u041C\u043E\u0439 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438","Add archive date/time after card title":"\u0414\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u0434\u0430\u0442\u0443/\u0432\u0440\u0435\u043C\u044F \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043F\u043E\u0441\u043B\u0435 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438","When toggled, the archived date/time will be added after the card title, e.g.- [ ] My card title 2021-05-14 10:00am. By default, it is inserted before the title.":"\u041A\u043E\u0433\u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043E, \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0431\u0443\u0434\u0435\u0442 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043E \u043F\u043E\u0441\u043B\u0435 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, - [ ] \u041C\u043E\u0439 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 2021-05-14 10:00am. \u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0438\u0442\u0441\u044F \u043F\u0435\u0440\u0435\u0434 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u043C.","Archive date/time separator":"\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u0430\u0442\u044B/\u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F","This will be used to separate the archived date/time from the title":"\u0411\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u043E\u0442\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0434\u0430\u0442\u044B/\u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043E\u0442 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430","Archive date/time format":"\u0424\u043E\u0440\u043C\u0430\u0442 \u0434\u0430\u0442\u044B/\u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F","Kanban Plugin":"\u041F\u043B\u0430\u0433\u0438\u043D Kanban","Tag colors":"\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0446\u0432\u0435\u0442\u0430 \u043C\u0435\u0442\u043E\u043A","Set colors for tags displayed in cards.":"\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0446\u0432\u0435\u0442\u0430 \u0434\u043B\u044F \u043C\u0435\u0442\u043E\u043A \u043F\u043E\u0434 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430\u043C\u0438 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A.","Linked Page Metadata":"\u041C\u0435\u0442\u0430\u0434\u0430\u043D\u043D\u044B\u0435 \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0445 \u0441\u0442\u0440\u0430\u043D\u0438\u0446","Display metadata for the first note linked within a card. Specify which metadata keys to display below. An optional label can be provided, and labels can be hidden altogether.":"\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0434\u043B\u044F \u043F\u0435\u0440\u0432\u043E\u0439 \u0437\u0430\u043C\u0435\u0442\u043A\u0438, \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u043E\u0439 \u0441 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u043E\u0439. \u041D\u0438\u0436\u0435 \u0443\u043A\u0430\u0436\u0438\u0442\u0435, \u043A\u0430\u043A\u0438\u0435 \u043A\u043B\u044E\u0447\u0438 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C. \u041C\u043E\u0436\u043D\u043E \u0443\u043A\u0430\u0437\u0430\u0442\u044C \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u0443\u044E \u043C\u0435\u0442\u043A\u0443, \u043B\u0438\u0431\u043E \u0441\u043A\u0440\u044B\u0442\u044C \u043C\u0435\u0442\u043A\u0438 \u043F\u043E\u043B\u043D\u043E\u0441\u0442\u044C\u044E.","Board Header Buttons":"\u041A\u043D\u043E\u043F\u043A\u0438 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430 \u0434\u043E\u0441\u043A\u0438","Calendar: first day of week":"\u041A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C: \u043F\u0435\u0440\u0432\u044B\u0439 \u0434\u0435\u043D\u044C \u043D\u0435\u0434\u0435\u043B\u0438","Override which day is used as the start of the week":"\u0423\u043A\u0430\u0436\u0438\u0442\u0435, \u043A\u0430\u043A\u043E\u0439 \u0434\u0435\u043D\u044C \u0434\u043E\u043B\u0436\u0435\u043D \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043A\u0430\u043A \u043D\u0430\u0447\u0430\u043B\u043E \u043D\u0435\u0434\u0435\u043B\u0438",Sunday:"\u0412\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435",Monday:"\u041F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A",Tuesday:"\u0412\u0442\u043E\u0440\u043D\u0438\u043A",Wednesday:"\u0421\u0440\u0435\u0434\u0430",Thursday:"\u0427\u0435\u0442\u0432\u0435\u0440\u0433",Friday:"\u041F\u044F\u0442\u043D\u0438\u0446\u0430",Saturday:"\u0421\u0443\u0431\u0431\u043E\u0442\u0430","Background color":"\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430",Tag:"\u041C\u0435\u0442\u043A\u0430","Text color":"\u0426\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430","Date is":"\u0414\u0430\u0442\u0430",Today:"\u0421\u0435\u0433\u043E\u0434\u043D\u044F","After now":"\u041F\u043E\u0441\u043B\u0435 \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u043C\u043E\u043C\u0435\u043D\u0442\u0430","Before now":"\u0414\u043E \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u043C\u043E\u043C\u0435\u043D\u0442\u0430","Between now and":"\u041C\u0435\u0436\u0434\u0443 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438","Display date colors":"\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0446\u0432\u0435\u0442\u0430 \u0434\u0430\u0442\u044B","Set colors for dates displayed in cards based on the rules below.":"\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0446\u0432\u0435\u0442\u0430 \u0434\u043B\u044F \u0434\u0430\u0442\u044B, \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u043C\u043E\u0439 \u043F\u043E\u0434 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u043E\u0439, \u0431\u0430\u0437\u0438\u0440\u0443\u044F\u0441\u044C \u043D\u0430 \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u0445 \u043D\u0438\u0436\u0435","Add date color":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0446\u0432\u0435\u0442 \u0434\u0430\u0442\u044B","Metadata key":"\u041A\u043B\u044E\u0447 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u043D\u044B\u0445","Display label":"\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u044F\u0440\u044B\u043B\u043A","Hide label":"\u0421\u043F\u0440\u044F\u0442\u0430\u0442\u044C \u044F\u0440\u043B\u044B\u043A","Drag to rearrange":"\u041F\u043E\u0442\u044F\u043D\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u043F\u0435\u0440\u0435\u0443\u043F\u043E\u0440\u044F\u0434\u043E\u0447\u0438\u0442\u044C",Delete:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C","Add key":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043B\u044E\u0447","Field contains markdown":"\u041F\u043E\u043B\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u0442 markdown","Add tag color":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0446\u0432\u0435\u0442 \u043C\u0435\u0442\u043A\u0438","More options":"\u0411\u043E\u043B\u044C\u0448\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A",Cancel:"\u041E\u0442\u043C\u0435\u043D\u0430",today:"\u0441\u0435\u0433\u043E\u0434\u043D\u044F",yesterday:"\u0432\u0447\u0435\u0440\u0430",tomorrow:"\u0437\u0430\u0432\u0442\u0440\u0430","Change date":"\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0434\u0430\u0442\u0443","Change time":"\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u0440\u0435\u043C\u044F","Card title...":"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438...","Add card":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0443","Add a card":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0443","Edit card":"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0443","New note from card":"\u041D\u043E\u0432\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430 \u0438\u0437 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438","Archive card":"\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0443","Delete card":"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0443","Edit date":"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0434\u0430\u0442\u0443","Add date":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0434\u0430\u0442\u0443","Remove date":"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0434\u0430\u0442\u0443","Edit time":"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0432\u0440\u0435\u043C\u044F","Add time":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432\u0440\u0435\u043C\u044F","Remove time":"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0440\u0435\u043C\u044F","Duplicate card":"\u0414\u0443\u0431\u043B\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0443","Split card":"\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0443","Copy link to card":"\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443 \u043D\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0443","Insert card before":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0443 \u0434\u043E","Insert card after":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0443 \u043F\u043E\u0441\u043B\u0435","Add label":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A","Move to top":"\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0432\u0432\u0435\u0440\u0445","Move to bottom":"\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0432\u043D\u0438\u0437","Enter list title...":"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0441\u043F\u0438\u0441\u043A\u0430...","Mark cards in this list as complete":"\u041E\u0442\u043C\u0435\u0442\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u043C \u0441\u043F\u0438\u0441\u043A\u0435 \u043A\u0430\u043A \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043D\u043D\u044B\u0435","Add list":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u043F\u0438\u0441\u043E\u043A","Add a list":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u043F\u0438\u0441\u043E\u043A","Move list":"\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0441\u043F\u0438\u0441\u043E\u043A",Close:"\u0417\u0430\u043A\u0440\u044B\u0442\u044C","Are you sure you want to delete this list and all its cards?":"\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u044D\u0442\u043E\u0442 \u0441\u043F\u0438\u0441\u043E\u043A \u0438 \u0432\u0441\u0435 \u0435\u0433\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438?","Yes, delete list":"\u0414\u0430, \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u043F\u0438\u0441\u043E\u043A","Are you sure you want to archive this list and all its cards?":"\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u044D\u0442\u043E\u0442 \u0441\u043F\u0438\u0441\u043E\u043A \u0438 \u0432\u0441\u0435 \u0435\u0433\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438?","Yes, archive list":"\u0414\u0430, \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043F\u0438\u0441\u043E\u043A","Are you sure you want to archive all cards in this list?":"\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0432\u0441\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u043C \u0441\u043F\u0438\u0441\u043A\u0435?","Yes, archive cards":"\u0414\u0430, \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438","Edit list":"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043F\u0438\u0441\u043E\u043A","Archive cards":"\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438","Archive list":"\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043F\u0438\u0441\u043E\u043A","Delete list":"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u043F\u0438\u0441\u043E\u043A","Insert list before":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0441\u043F\u0438\u0441\u043E\u043A \u0434\u043E","Insert list after":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0441\u043F\u0438\u0441\u043E\u043A \u043F\u043E\u0441\u043B\u0435","Sort by card text":"\u0421\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u043E \u0442\u0435\u043A\u0441\u0442\u0443 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438","Sort by date":"\u0421\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u043E \u0434\u0430\u0442\u0435","Unable to find":"\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043D\u0430\u0439\u0442\u0438","Open in default app":"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E",Submit:"\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C"},ub=kA;var xA={},cb=xA;var CA={},Tu=CA;var _A={"Open as kanban board":"\u6253\u5F00\u4E3A\u770B\u677F","Create new board":"\u521B\u5EFA\u65B0\u770B\u677F","Archive completed cards in active board":"\u5728\u5F53\u524D\u770B\u677F\u4E2D\u5F52\u6863\u5DF2\u5B8C\u6210\u5361\u7247","Error: current file is not a Kanban board":"\u9519\u8BEF\uFF1A\u5F53\u524D\u6587\u4EF6\u4E0D\u662F\u770B\u677F\u6587\u4EF6","Convert empty note to Kanban":"\u8F6C\u6362\u7A7A\u767D\u7B14\u8BB0\u4E3A\u770B\u677F","Error: cannot create Kanban, the current note is not empty":"\u9519\u8BEF\uFF1A\u65E0\u6CD5\u8F6C\u6362\u5F53\u524D\u6587\u4EF6\uFF0C\u5F53\u524D\u7B14\u8BB0\u4E0D\u662F\u7A7A\u767D\u7B14\u8BB0","New kanban board":"\u65B0\u770B\u677F","Untitled Kanban":"\u672A\u547D\u540D\u770B\u677F","Toggle between Kanban and markdown mode":"\u5728\u770B\u677F\u548C Markdown \u6A21\u5F0F\u4E4B\u95F4\u8FDB\u884C\u5207\u6362","Open as markdown":"\u6253\u5F00\u4E3A Markdown \u6587\u4EF6","Open board settings":"\u6253\u5F00\u770B\u677F\u8BBE\u7F6E","Archive completed cards":"\u5F52\u6863\u5DF2\u5B8C\u6210\u5361\u7247","Something went wrong":"\u51FA\u4E86\u70B9\u95EE\u9898","You may wish to open as markdown and inspect or edit the file.":"\u4F60\u53EF\u80FD\u5E0C\u671B\u4EE5 Markdown \u65B9\u5F0F\u6253\u5F00\uFF0C\u5E76\u68C0\u67E5\u6216\u7F16\u8F91\u8BE5\u6587\u4EF6\u3002","Are you sure you want to archive all completed cards on this board?":"\u4F60\u786E\u5B9A\u8981\u5C06\u8FD9\u4E2A\u677F\u5757\u4E0A\u6240\u6709\u5DF2\u5B8C\u6210\u7684\u5361\u7247\u5F52\u6863\u5417\uFF1F",Complete:"\u5B8C\u6210",Archive:"\u5F52\u6863","Invalid Kanban file: problems parsing frontmatter":"\u65E0\u6548\u7684\u770B\u677F\u6587\u4EF6\uFF1A\u89E3\u6790 frontmatter \u65F6\u51FA\u73B0\u95EE\u9898","I don't know how to interpret this line:":"\u6211\u4E0D\u77E5\u9053\u5982\u4F55\u89E3\u8BFB\u8FD9\u53E5\u8BDD\uFF1A",Untitled:"\u672A\u547D\u540D","Note: No template plugins are currently enabled.":"\u6CE8\u610F\uFF1A\u5F53\u524D\u6CA1\u6709\u542F\u7528\u6A21\u677F\u63D2\u4EF6",default:"\u9ED8\u8BA4","Search...":"\u641C\u7D22\u2026\u2026","New line trigger":"\u6362\u884C\u89E6\u53D1\u5668","Select whether Enter or Shift+Enter creates a new line. The opposite of what you choose will create and complete editing of cards and lists.":"\u9009\u62E9 Enter \u6216\u662F Shift+Enter \u6765\u521B\u5EFA\u65B0\u884C, \u672A\u9009\u7528\u7684\u5FEB\u6377\u952E\u5C06\u88AB\u7528\u4E8E\u521B\u5EFA\u5361\u7247\u548C\u5217\uFF0C\u4EE5\u53CA\u5B8C\u6210\u5361\u7247\u3001\u5217\u7684\u7F16\u8F91\u3002","Shift + Enter":"Shift + Enter",Enter:"Enter","Prepend / append new cards":"\u8FFD\u52A0\u65B0\u5361\u7247","This setting controls whether new cards are added to the beginning or end of the list.":"\u8BBE\u7F6E\u65B0\u5361\u7247\u8FFD\u52A0\u5230\u5217\u5934\u90E8\u6216\u5C3E\u90E8\u3002",Prepend:"\u5934\u90E8","Prepend (compact)":"\u5934\u90E8 (\u7D27\u51D1)",Append:"\u5C3E\u90E8","These settings will take precedence over the default Kanban board settings.":"\u5F53\u524D\u770B\u677F\u8BBE\u7F6E\u5C06\u4F1A\u8986\u76D6\u9ED8\u8BA4\u7684\u770B\u677F\u8BBE\u7F6E\u3002","Set the default Kanban board settings. Settings can be overridden on a board-by-board basis.":"\u66F4\u6539\u9ED8\u8BA4\u7684\u770B\u677F\u8BBE\u7F6E\u3002\u4E3A\u6BCF\u4E2A\u770B\u677F\u5355\u72EC\u8FDB\u884C\u8BBE\u7F6E\u5C06\u8986\u76D6\u9ED8\u8BA4\u8BBE\u7F6E\u3002","Note template":"\u7B14\u8BB0\u6A21\u677F","This template will be used when creating new notes from Kanban cards.":"\u4ECE\u770B\u677F\u5361\u7247\u521B\u5EFA\u65B0\u7B14\u8BB0\u65F6\u4F1A\u4F7F\u7528\u8BE5\u6A21\u677F\u3002","No template":"\u6CA1\u6709\u6A21\u677F","Note folder":"\u7B14\u8BB0\u5B58\u653E\u4F4D\u7F6E","Notes created from Kanban cards will be placed in this folder. If blank, they will be placed in the default location for this vault.":"\u4ECE\u770B\u677F\u5361\u7247\u521B\u5EFA\u7684\u7B14\u8BB0\u4F1A\u653E\u7F6E\u5230\u8BE5\u6587\u4EF6\u5939\u4E2D\u3002\u5982\u679C\u4E3A\u7A7A\uFF0C\u7B14\u8BB0\u5C06\u4F1A\u653E\u7F6E\u5230 Obsidian \u7684\u9ED8\u8BA4\u6587\u4EF6\u5B58\u653E\u4F4D\u7F6E\u3002","Default folder":"\u9ED8\u8BA4\u6587\u4EF6\u5939","List width":"\u5217\u5BBD","Enter a number to set the list width in pixels.":"\u8F93\u5165\u4E00\u4E2A\u50CF\u7D20\u503C\u6765\u8BBE\u7F6E\u5217\u7684\u5BBD\u5EA6","Maximum number of archived cards":"\u5355\u4E2A\u770B\u677F\u5185\u5DF2\u5F52\u6863\u5361\u7247\u7684\u6700\u5927\u6570\u91CF","Archived cards can be viewed in markdown mode. This setting will begin removing old cards once the limit is reached. Setting this value to -1 will allow a board's archive to grow infinitely.":"\u5DF2\u5F52\u6863\u5361\u7247\u53EF\u4EE5\u5728 Markdown \u6A21\u5F0F\u4E0B\u67E5\u770B\u3002\u8BE5\u8BBE\u7F6E\u5C06\u4F7F\u5DF2\u5F52\u6863\u5361\u7247\u5728\u8FBE\u5230\u6700\u5927\u6570\u91CF\u65F6\u5220\u9664\u65E7\u5361\u3002\u8BBE\u7F6E\u4E3A -1 \u53EF\u4EE5\u6C38\u4E45\u4FDD\u7559\u6240\u6709\u5F52\u6863\u5361\u7247\u3002","Display card checkbox":"\u5C55\u793A\u5361\u7247\u590D\u9009\u6846","When toggled, a checkbox will be displayed with each card":"\u6253\u5F00\u65F6\uFF0C\u590D\u9009\u6846\u4F1A\u51FA\u73B0\u5728\u6BCF\u5F20\u5361\u7247\u4E0A","Reset to default":"\u8FD8\u539F\u521D\u59CB\u8BBE\u7F6E","Date & Time":"\u65E5\u671F\u548C\u65F6\u95F4","Date trigger":"\u65E5\u671F\u89E6\u53D1\u6307\u4EE4","When this is typed, it will trigger the date selector":"\u5F53\u5728\u770B\u677F\u5361\u7247\u4E2D\u8F93\u5165\u8FD9\u4E2A\u65F6\uFF0C\u4F1A\u89E6\u53D1\u4E00\u4E2A\u65E5\u671F\u9009\u62E9\u5668","Time trigger":"\u65F6\u95F4\u89E6\u53D1\u6307\u4EE4","When this is typed, it will trigger the time selector":"\u5F53\u5728\u770B\u677F\u5361\u7247\u4E2D\u8F93\u5165\u8FD9\u4E2A\u65F6\uFF0C\u4F1A\u89E6\u53D1\u4E00\u4E2A\u65F6\u95F4\u9009\u62E9\u5668","Date format":"\u65E5\u671F\u683C\u5F0F","This format will be used when saving dates in markdown.":"\u8FD9\u4E2A\u683C\u5F0F\u4F1A\u5728\u65E5\u671F\u4FDD\u5B58\u5230 Markdown \u683C\u5F0F\u65F6\u4F7F\u7528\u3002","For more syntax, refer to":"\u66F4\u591A\u683C\u5F0F\uFF0C\u8BF7\u67E5\u770B","format reference":"\u683C\u5F0F\u53C2\u8003","Your current syntax looks like this":"\u4F60\u5F53\u524D\u8BBE\u7F6E\u7684\u683C\u5F0F\u4F1A\u662F","Time format":"\u65F6\u95F4\u683C\u5F0F","Date display format":"\u65E5\u671F\u5C55\u793A\u683C\u5F0F","This format will be used when displaying dates in Kanban cards.":"\u770B\u677F\u5361\u7247\u4F1A\u4EE5\u8BE5\u683C\u5F0F\u5C55\u793A\u65E5\u671F\u3002","Show relative date":"\u5C55\u793A\u76F8\u5BF9\u65E5\u671F","Hide card counts in list titles":"\u5728\u5217\u6807\u9898\u4E0A\u9690\u85CF\u5361\u7247\u8BA1\u6570","When toggled, card counts are hidden from the list title":"\u6253\u5F00\u65F6\uFF0C\u5217\u6807\u9898\u4E0A\u7684\u5361\u7247\u8BA1\u6570\u5C06\u9690\u85CF","Link dates to daily notes":"\u94FE\u63A5\u65E5\u671F\u5230\u65E5\u8BB0","When toggled, dates will link to daily notes. Eg. [[2021-04-26]]":"\u6253\u5F00\u65F6\uFF0C\u65E5\u671F\u4F1A\u81EA\u52A8\u94FE\u63A5\u5230\u65E5\u8BB0\u9875\u9762\uFF0C\u4F8B\u5982[[2021-04-26]]","Add date and time to archived cards":"\u6DFB\u52A0\u65E5\u671F\u548C\u65F6\u95F4\u5230\u5F52\u6863\u5361\u7247","When toggled, the current date and time will be added to the card title when it is archived. Eg. - [ ] 2021-05-14 10:00am My card title":"\u6253\u5F00\u65F6\uFF0C\u5F53\u524D\u65E5\u671F\u548C\u65F6\u95F4\u4F1A\u88AB\u6DFB\u52A0\u5230\u5F52\u6863\u5361\u7247\u7684 frontmatter \u4E0A\uFF0C\u4F8B\u5982\u201C- [ ] 2021-05-14 10:00am \u6211\u7684\u5361\u7247\u6807\u9898\u201D","Archive date/time separator":"\u5F52\u6863\u65E5\u671F\u6216\u65F6\u95F4\u5206\u9694\u7B26Archive date/time separator","This will be used to separate the archived date/time from the title":"\u7528\u4E8E\u5206\u9694\u6807\u9898\u4E0E\u5F52\u6863\u5361\u7247\u7684\u65E5\u671F\u6216\u65F6\u95F4","Archive date/time format":"\u5F52\u6863\u65E5\u671F\u6216\u65F6\u95F4\u683C\u5F0F","Kanban Plugin":"\u770B\u677F\u63D2\u4EF6","Linked Page Metadata":"\u8FDE\u63A5\u7684\u9875\u9762\u5143\u6570\u636E","Display metadata for the first note linked within a card. Specify which metadata keys to display below. An optional label can be provided, and labels can be hidden altogether.":"\u5C55\u793A\u5361\u7247\u4E2D\u7B2C\u4E00\u4E2A\u8FDE\u63A5\u6240\u5BF9\u5E94\u7684\u7B14\u8BB0\u5143\u6570\u636E\u3002\u8BF7\u5728\u4E0B\u65B9\u6307\u5B9A\u54EA\u4E9B\u5143\u6570\u636E\u53EF\u4EE5\u5C55\u793A\u3002\u4F60\u53EF\u4EE5\u9009\u62E9\u5C55\u793A\u54EA\u4E9B\u6807\u5FD7\uFF0C\u6240\u6709\u6807\u5FD7\u90FD\u53EF\u4EE5\u88AB\u9690\u85CF\u3002","Board Header Buttons":"\u677F\u5934\u6309\u94AE","Calendar: first day of week":"\u65E5\u5386\uFF1A\u4E00\u5468\u7684\u7B2C\u4E00\u5929","Override which day is used as the start of the week":"\u8BBE\u7F6E\u54EA\u4E00\u5929\u4F5C\u4E3A\u4E00\u5468\u7684\u5F00\u59CB",Sunday:"\u5468\u65E5",Monday:"\u5468\u4E00",Tuesday:"\u5468\u4E8C",Wednesday:"\u5468\u4E09",Thursday:"\u5468\u56DB",Friday:"\u5468\u4E94",Saturday:"\u5468\u516D","Metadata key":"\u5143\u6570\u636E\u53C2\u6570\u540D","Display label":"\u5C55\u793A\u6807\u5FD7","Hide label":"\u9690\u85CF\u6807\u5FD7","Drag to rearrange":"\u62D6\u52A8\u4EE5\u91CD\u6392\u987A\u5E8F",Delete:"\u5220\u9664","Add key":"\u6DFB\u52A0\u53C2\u6570\u540D","Field contains markdown":"\u5B57\u6BB5\u5305\u542B Markdown","More options":"\u66F4\u591A\u9009\u9879",Cancel:"\u53D6\u6D88",today:"\u4ECA\u5929",yesterday:"\u6628\u5929",tomorrow:"\u660E\u5929","Change date":"\u66F4\u6539\u65E5\u671F","Change time":"\u66F4\u6539\u65F6\u95F4","Card title...":"\u5361\u7247\u6807\u9898\u2026\u2026","Add card":"\u6DFB\u52A0","Add a card":"\u6DFB\u52A0\u5361\u7247","Edit card":"\u7F16\u8F91\u5361\u7247","New note from card":"\u4ECE\u5361\u7247\u65B0\u5EFA\u7B14\u8BB0","Archive card":"\u5F52\u6863\u5361\u7247","Delete card":"\u5220\u9664\u5361\u7247","Edit date":"\u7F16\u8F91\u65E5\u671F","Add date":"\u6DFB\u52A0\u65E5\u671F","Remove date":"\u79FB\u9664\u65E5\u671F","Edit time":"\u7F16\u8F91\u65F6\u95F4","Add time":"\u6DFB\u52A0\u65F6\u95F4","Remove time":"\u79FB\u9664\u65F6\u95F4","Duplicate card":"\u590D\u5236\u5361\u7247","Split card":"\u5206\u79BB\u5361\u7247","Copy link to card":"\u590D\u5236\u94FE\u63A5\u81F3\u5361\u7247","Insert card before":"\u5728\u4E0A\u65B9\u63D2\u5165\u5361\u7247","Insert card after":"\u5728\u4E0B\u65B9\u63D2\u5165\u5361\u7247","Move to top":"\u79FB\u5230\u9876\u90E8","Move to bottom":"\u79FB\u81F3\u5E95\u90E8","Enter list title...":"\u8F93\u5165\u65B0\u7684\u5217\u6807\u9898\u2026\u2026","Mark cards in this list as complete":"\u5C06\u8BE5\u5217\u8BBE\u7F6E\u4E3A\u5B8C\u6210\u5217","Add list":"\u6DFB\u52A0","Add a list":"\u6DFB\u52A0\u5217","Move list":"\u79FB\u52A8\u5217",Close:"\u5173\u95ED","Are you sure you want to delete this list and all its cards?":"\u4F60\u786E\u5B9A\u4F60\u8981\u5220\u9664\u6574\u5217\u4EE5\u53CA\u8BE5\u5217\u4E0B\u6240\u6709\u5361\u7247\u5417\uFF1F","Yes, delete list":"\u662F\uFF0C\u5220\u9664\u5217","Are you sure you want to archive this list and all its cards?":"\u4F60\u786E\u5B9A\u4F60\u8981\u5F52\u6863\u6574\u5217\u4EE5\u53CA\u8BE5\u5217\u4E0B\u6240\u6709\u5361\u7247\u5417\uFF1F","Yes, archive list":"\u662F, \u5F52\u6863\u5217","Are you sure you want to archive all cards in this list?":"\u4F60\u786E\u8BA4\u4F60\u8981\u5F52\u6863\u5F53\u524D\u5217\u7684\u6240\u6709\u5361\u7247\u5417\uFF1F","Yes, archive cards":"\u662F\uFF0C\u5F52\u6863\u6240\u6709\u5361\u7247","Edit list":"\u7F16\u8F91\u5217","Archive cards":"\u5F52\u6863\u5361\u7247","Archive list":"\u5F52\u6863\u5217","Delete list":"\u5220\u9664\u5217","Insert list before":"\u5728\u4E0A\u65B9\u63D2\u5165\u5217","Insert list after":"\u5728\u4E0B\u65B9\u63D2\u5165\u5217","Sort by card text":"\u4EE5\u5361\u7247\u6587\u672C\u6392\u5E8F","Sort by date":"\u4EE5\u65E5\u671F\u6392\u5E8F","Unable to find":"\u65E0\u6CD5\u627E\u5230","Open in default app":"\u5728\u9ED8\u8BA4\u5E94\u7528\u4E2D\u6253\u5F00",Submit:"\u63D0\u4EA4"},db=_A;var MA={},fb=MA;var TA={ar:Kw,cz:jw,da:qw,de:Gw,en:yh,es:Jw,fr:Zw,hi:Qw,id:Xw,it:eb,ja:tb,ko:nb,nl:rb,no:ib,pl:ab,"pt-BR":sb,pt:ob,ro:lb,ru:ub,sq:cb,tr:Tu,uk:Tu,"zh-TW":fb,zh:db},hb=window.localStorage.getItem("language"),vh=TA[hb||"en"];function R(e){return vh||console.error("Error: kanban locale not found",hb),vh&&vh[e]||yh[e]}var Ln={prioritySymbols:{Highest:"\u{1F53A}",High:"\u23EB",Medium:"\u{1F53C}",Low:"\u{1F53D}",Lowest:"\u23EC",None:""},startDateSymbol:"\u{1F6EB}",createdDateSymbol:"\u2795",scheduledDateSymbol:"\u23F3",dueDateSymbol:"\u{1F4C5}",doneDateSymbol:"\u2705",cancelledDateSymbol:"\u274C",recurrenceSymbol:"\u{1F501}",dependsOnSymbol:"\u26D4",idSymbol:"\u{1F194}"};function mb(e,t){switch(e){case"priority":return FA(t);case"start":return Ln.startDateSymbol;case"created":return Ln.createdDateSymbol;case"scheduled":return Ln.scheduledDateSymbol;case"due":return Ln.dueDateSymbol;case"completion":return Ln.doneDateSymbol;case"cancelled":return Ln.cancelledDateSymbol;case"repeat":return Ln.recurrenceSymbol;case"dependsOn":return Ln.dependsOnSymbol;case"id":return Ln.idSymbol}return e}function No(e){switch(e){case"priority":return R("Priority");case"start":return R("Start");case"created":return R("Created");case"scheduled":return R("Scheduled");case"due":return R("Due");case"completion":return R("Done");case"cancelled":return R("Cancelled");case"repeat":return R("Recurrence");case"dependsOn":return R("Depends on");case"id":return R("ID")}return e}function FA(e){switch(e){case"0":return Ln.prioritySymbols.Highest;case"1":return Ln.prioritySymbols.High;case"2":return Ln.prioritySymbols.Medium;case"4":return Ln.prioritySymbols.Low;case"5":return Ln.prioritySymbols.Lowest}return null}function IA(e){switch(e){case Ln.prioritySymbols.Highest:return"0";case Ln.prioritySymbols.High:return"1";case Ln.prioritySymbols.Medium:return"2";case Ln.prioritySymbols.Low:return"4";case Ln.prioritySymbols.Lowest:return"5"}return null}function wh(){return app.plugins.enabledPlugins.has("obsidian-tasks-plugin")?app.plugins.plugins["obsidian-tasks-plugin"]:null}function bh(){var e;return(e=app.workspace.editorSuggest.suggests.find(t=>t.settings&&t.settings.taskFormat))==null?void 0:e.settings}function Zn(){var n,i;let e=bh(),t=e==null?void 0:e.statusSettings;if(!t)return"x";let r=(n=t.coreStatuses)==null?void 0:n.find(a=>a.type==="DONE");return r||(r=(i=t.customStatuses)==null?void 0:i.find(a=>a.type==="DONE")),r?r.symbol:"x"}function Iu(){var i,a;let e=bh(),t=e==null?void 0:e.statusSettings;if(!t)return" ";let r=Zn(),n=(i=t.coreStatuses)==null?void 0:i.find(o=>o.nextStatusSymbol===r);return n||(n=(a=t.customStatuses)==null?void 0:a.find(o=>o.nextStatusSymbol===r)),n?n.symbol:" "}function pb(e,t){var n,i,a;let r=wh();return r&&(a=(i=(n=r.apiV1)==null?void 0:n.executeToggleTaskDoneCommand)==null?void 0:i.call(n,e,t.path))!=null?a:null}function Ro(e,t){var d,m;let r=wh();if(!r)return null;let n=`- [${e.data.checkChar}] `,i=e.data.titleRaw.split(/\n\r?/g),a=bh(),o=!!(a!=null&&a.recurrenceOnNextLine),s=0,u=(m=(d=r.apiV1)==null?void 0:d.executeToggleTaskDoneCommand)==null?void 0:m.call(d,n+i[0],t.path);if(!u)return null;let l=[];return[u.split(/\n/g).map((h,g)=>{(o&&g===0||!o&&g>0)&&(s=g);let y=h.match(/^- \[([^\]]+)\]/);return y!=null&&y[1]&&l.push(y[1]),[h.replace(/^- \[[^\]]+\] */,""),...i.slice(1)].join(` +`)}),l,s]}var Fu=Object.freeze({"[":"]","(":")"});function AA(e,t){let r=e.indexOf("::",t);if(!(r<0))return{key:e.substring(t,r).trim(),valueIndex:r+2}}function OA(e,t,r,n){let i=0,a=!1;for(let o=t;o<e.length;o++){let s=e.charAt(o);if(s=="\\"){a=!a;continue}if(a){a=!1;continue}if(s==r?i++:s==n&&i--,i<0)return{value:e.substring(t,o).trim(),endIndex:o+1};a=!1}}function LA(e,t){let r=e.charAt(t),n=AA(e,t+1);if(n===void 0)return;for(let a of Object.keys(Fu).concat(Object.values(Fu)))if(n.key.includes(a))return;let i=OA(e,n.valueIndex,r,Fu[r]);if(i!==void 0)return{key:n.key,value:i.value,start:t,startValue:n.valueIndex,end:i.endIndex,wrapping:r}}var PA=/([🔺⏫🔼🔽⏬])\uFE0F?/u,NA=/🛫 *(\d{4}-\d{2}-\d{2})/u,RA=/➕ *(\d{4}-\d{2}-\d{2})/u,HA=/[⏳⌛] *(\d{4}-\d{2}-\d{2})/u,BA=/[📅📆🗓] *(\d{4}-\d{2}-\d{2})/u,VA=/✅ *(\d{4}-\d{2}-\d{2})/u,$A=/❌ *(\d{4}-\d{2}-\d{2})/u,UA=/⛔\uFE0F? *([a-zA-Z0-9-_]+)/u,WA=/🆔 *([a-zA-Z0-9-_]+)/u,YA=/🔁 *([a-zA-Z0-9; !]+)/u,yi=new Set(["priority","start","created","scheduled","due","completion","cancelled","id","dependsOn","repeat"]),zA=[{regex:PA,key:"priority"},{regex:NA,key:"start"},{regex:RA,key:"created"},{regex:HA,key:"scheduled"},{regex:BA,key:"due"},{regex:VA,key:"completion"},{regex:$A,key:"cancelled"},{regex:WA,key:"id"},{regex:UA,key:"dependsOn"},{regex:YA,key:"repeat"}];function KA(e){let t=[];for(let{regex:r,key:n}of zA){let i=r.exec(e);if(!i)continue;let a=i[1],o=i.index+i[0].length;if(n==="priority")a=IA(a);else if(n==="repeat"){let s=a.length;a=Oe.fromText(a).toText(),o-=s-a.length}t.push({key:n,value:a,start:i.index,startValue:i.index+1,end:o,wrapping:"emoji-shorthand"})}return t}function gb(e,t=!1){let r=il(),n=wh(),i=[];if(r)for(let o of Object.keys(Fu)){let s=e.indexOf(o);for(;s>=0;){let u=LA(e,s);if(!u){s=e.indexOf(o,s+1);continue}i.push(u),s=e.indexOf(o,u.end)}}n&&t&&(i=i.concat(KA(e))),i.sort((o,s)=>o.start-s.start);let a=[];for(let o=0;o<i.length;o++){let s=i[o];(o==0||a[a.length-1].end<s.start)&&a.push(s)}return a}function il(){return app.plugins.enabledPlugins.has("dataview")?app.plugins.plugins.dataview:null}var Eh="kanban-plugin";function Mr(){}var Dh=new Map;function $(e){if(Dh.has(e))return Dh.get(e);let t=`${Eh}__${e}`;return Dh.set(e,t),t}function et(e=9){return Math.random().toString(36).slice(2,2+e)}function Au(e,t,r,n,i,a,o){var h,g;let s=un(t,r.slice(0,-1)),u=un(i,a.slice(0,-1)),l=(h=s==null?void 0:s.data)==null?void 0:h.shouldMarkItemsComplete,c=(g=u==null?void 0:u.data)==null?void 0:g.shouldMarkItemsComplete;if(!l&&!c)return{next:o};let d=o.data.checked&&o.data.checkChar===Zn();if(c===d)return{next:o};c&&(o=(0,Sh.default)(o,{data:{checkChar:{$set:Iu()}}}));let m=Ro(o,n.file);if(m){let[y,v,D]=m,I,C;return y.forEach((x,O)=>{O===D?I=n.getNewItem(x,v[O]):C=n.getNewItem(x,v[O])}),{next:I,replacement:C}}return{next:(0,Sh.default)(o,{data:{checked:{$set:c},checkChar:{$set:c?Zn():" "}}})}}function Ou(){let e=$e.useRef(!1);return{oncompositionstart:()=>{e.current=!0},oncompositionend:()=>{e.current=!1},getShouldIMEBlockAction:()=>e.current}}var jA=/<%/;async function yb(e,t){let r=t?e.app.vault.getAbstractFileByPath(t):null;if(r&&r instanceof da.TFile){let n=app.workspace.getActiveViewOfType(da.MarkdownView);try{(n==null?void 0:n.getMode())!=="source"&&await n.setState({...n.getState(),mode:"source"},{history:!1});let{templatesEnabled:i,templaterEnabled:a,templatesPlugin:o,templaterPlugin:s}=kh(e.app),u=await e.app.vault.read(r);if(i&&a)return jA.test(u)?await s.append_template_to_active_file(r):await o.instance.insertTemplate(r);if(i)return await o.instance.insertTemplate(r);if(a)return await s.append_template_to_active_file(r);await e.app.vault.modify(e.app.workspace.getActiveFile(),u)}catch(i){console.error(i),e.setError(i)}}}function ja(e){var s,u,l,c,d;let t=e.internalPlugins.plugins,r=(s=t["daily-notes"])==null?void 0:s.enabled,n=(u=t["daily-notes"])==null?void 0:u.instance.options.format,i=(l=e.plugins.plugins["nldates-obsidian"])==null?void 0:l.settings.format,a=(c=t.templates)==null?void 0:c.enabled,o=(d=t.templates)==null?void 0:d.instance.options.dateFormat;return r&&n||i||a&&o||"YYYY-MM-DD"}function Ho(e){var a,o,s;let t=e.internalPlugins.plugins,r=(a=e.plugins.plugins["nldates-obsidian"])==null?void 0:a.settings.timeFormat,n=(o=t.templates)==null?void 0:o.enabled,i=(s=t.templates)==null?void 0:s.instance.options.timeFormat;return r||n&&i||"HH:mm"}var vb=/[\\^$.*+?()[\]{}|]/g,qA=RegExp(vb.source);function Qn(e){return e&&qA.test(e)?e.replace(vb,"\\$&"):e||""}function kh(e){var s;let t=e.internalPlugins.plugins.templates,r=t.enabled,n=e.plugins.plugins["templater-obsidian"],i=e.plugins.enabledPlugins.has("templater-obsidian"),a=n&&((s=this.app.plugins.plugins["templater-obsidian"].settings)==null?void 0:s.empty_file_template),o=r?t.instance.options.folder:n?n.settings.template_folder:void 0;return{templatesPlugin:t,templatesEnabled:r,templaterPlugin:n==null?void 0:n.templater,templaterEnabled:i,templaterEmptyFileTemplate:a,templateFolder:o}}function GA(e){let t=(e||[]).reduce((r,n)=>(n.tagKey&&(r[n.tagKey]=n),r),{});return r=>t[r]?t[r]:null}function Lu(e){let t=e.useSetting("tag-colors");return Re(()=>GA(t),[t])}function xh(e){let t=(e||[]).map(n=>{if(n.isToday)return["today",n];if(n.isBefore)return["before",n];if(n.isAfter)return["after",n];let i=n.direction==="after"?1:-1,a=(0,da.moment)();return a.add(n.distance*i,n.unit),[a,n]}),r=(0,da.moment)();return t.sort((n,i)=>n[0]==="today"?typeof i[0]=="string"?-1:i[0].isSame(r,"day")?1:-1:i[0]==="today"?typeof n[0]=="string"?1:n[0].isSame(r,"day")?-1:1:n[0]==="after"||n[0]==="before"?1:i[0]==="after"||i[0]==="before"||n[0].isBefore(i[0])?-1:1),n=>{let i=(0,da.moment)(),a=t.find(o=>{let s=o[1];if(s.isToday)return n.isSame(i,"day");if(s.isAfter)return n.isAfter(i);if(s.isBefore)return n.isBefore(i);let u="days";return s.unit==="hours"&&(u="hours"),s.direction==="before"?n.isBetween(o[0],i,u,"[]"):n.isBetween(i,o[0],u,"[]")});return a?a[1]:null}}function fa(e){let t=e.useSetting("date-colors");return Re(()=>xh(t),[t])}function Pu(e,t){let r=t.find(n=>n.metadataKey===e.key);return r?{...r,value:e.value}:{containsMarkdown:!1,label:e.key,metadataKey:e.key,shouldHideLabel:!1,value:e.value}}function Nu(e,t,r){Ae(()=>{var o;let n=0,i=!1,a=()=>{i||++n===e.length&&t()};for(let s of e)(o=s.current)==null||o.onNodeInserted(a,!0);return()=>{i=!0,r()}},[])}function wb(e,t,r,n,i){return Re(()=>{t=t.trim().toLocaleLowerCase();let a=new Set,o=new Set;return t&&e.children.forEach(s=>{let u=!1;s.children.forEach(l=>{l.data.titleSearch.includes(t)&&(u=!0,o.add(l))}),u&&a.add(s)}),{lanes:a,items:o,query:t,search:(s,u)=>{s||(i(!1),r(""),n("")),i(!0),u?(r(s),n(s)):r(s)}}},[e,t,r,n])}var Sb=Ct(Db(),1);var Bo=Sb.default;var Tr={x:0,y:0,maxX:0,maxY:0},vi={x:0,y:0};function Dn(e){return e.win}function ha(e){return e.doc.body}var xb={bottom:0,height:0,left:0,right:0,top:0,width:0,x:0,y:0,toJSON(){}},Cb=[0,0,0,0];function Xt(e){return e===void 0?0:e}function Hu(e,t,r,n){return[e.left+Xt(t==null?void 0:t.x)+Xt(r==null?void 0:r.x)-Xt(n==null?void 0:n.x),e.top+Xt(t==null?void 0:t.y)+Xt(r==null?void 0:r.y)-Xt(n==null?void 0:n.y),e.left+e.width+Xt(t==null?void 0:t.x)+Xt(r==null?void 0:r.x)-Xt(n==null?void 0:n.x),e.top+e.height+Xt(t==null?void 0:t.y)+Xt(r==null?void 0:r.y)-Xt(n==null?void 0:n.y)]}function _h(e,t,r,n){let i=Hu(e,t,r,null);return n==="top"?(i[3]=i[1]+35,i):n==="right"?(i[0]=i[0]+e.width-35,i):n==="bottom"?(i[1]=i[1]+e.height-35,i):(i[2]=i[0]+35,i)}function Bu(e,t,r,n,i,a){return[e-Xt(i==null?void 0:i.x)-Xt(a==null?void 0:a.x),t-Xt(i==null?void 0:i.y)-Xt(a==null?void 0:a.y),r-Xt(i==null?void 0:i.x)-Xt(a==null?void 0:a.x),n-Xt(i==null?void 0:i.y)-Xt(a==null?void 0:a.y)]}var QA=e=>XA(e,(t,r)=>t<r);function XA(e,t){if(e.length===0)return-1;let r=e[0],n=0;for(let i=1;i<e.length;i++)t(e[i],r)&&(n=i,r=e[i]);return n}function _b(e,t,r){let n=Mh(e,t,r);if(!n)return null;let i=n.getData().side,a=n.getHitbox(),o=0,s=0;i==="left"?(o=0,s=2):i==="right"?(o=2,s=0):i==="top"?(o=1,s=3):i==="bottom"&&(o=3,s=1);let u=Math.abs(t[o]-a[s]),l=Math.abs(a[o]-a[s]);return[n,l-u]}function Eb(e){return[{x:e[0],y:e[1]},{x:e[2],y:e[1]},{x:e[0],y:e[3]},{x:e[2],y:e[3]}]}function qa(e,t){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function kb(e){return{x:(e[0]+e[2])/2,y:(e[1]+e[2])/2}}function Mh(e,t,r){let n=Eb(t)[0],i=kb(t),a=r.entityId,o=e.map(u=>{if(u.entityId===a)return 1/0;let l=u.getData(),c=l.acceptsSort,d=u.getHitbox(),m=kb(d);if(c&&!c.contains(r.getData().type))return qa(i,m);let h=Eb(d)[0],g=l.sortAxis==="horizontal"?"x":"y",y=m[g]>n[g]?1e3:0;return qa(h,n)+y}),s=QA(o);return e[s]?e[s]:null}function Th(e){let{scrollLeft:t,scrollTop:r,scrollWidth:n,scrollHeight:i,offsetWidth:a,offsetHeight:o}=e,s=t,u=r,l=n-a,c=i-o;return{x:s,y:u,maxX:Math.max(l,0),maxY:Math.max(c,0)}}function Mb(e,t,r){let n=Math.trunc((r.x-t.x)*100)/100,i=Math.trunc((r.y-t.y)*100)/100;return[e[0]+n,e[1]+i,e[2]+n,e[3]+i]}function Fh(e,t=[0,0,0,0]){let r=e[0]-t[0],n=e[1]-t[1],i=e[2]+t[2],o=e[3]+t[3]-n;return{width:i-r,height:o}}var Vu=class{constructor(t,r,n,i,a,o,s,u){this.isVisible=!1;this.mounted=!1;this.id=n,this.instanceId=et(),this.scopeId=r,this.entityId=`${r}-${n}`,this.emitter=new Bo,this.dndManager=t,this.index=i,this.children=new Map,this.parent=a,this.scrollParent=o,this.getEntityData=()=>u.current,this.sortManager=s}initNodes(t,r){var n,i;if(this.mounted=!0,this.entityNode=t,this.measureNode=r,r.dataset.hitboxid=this.entityId,(n=this.sortManager)==null||n.registerSortable(this.entityId,this.getEntity(xb),t,r),this.scrollParent)this.scrollParent.registerObserverHandler(this.entityId,r,a=>{var s,u;let o=Dn(a.target);if(a.isIntersecting){let l=this.getEntity(a.boundingClientRect);(s=this.parent)==null||s.children.set(this.entityId,{entity:l,manager:this}),this.dndManager.observeResize(r),(!this.parent||this.parent.isVisible)&&(this.dndManager.registerHitboxEntity(this.entityId,l,o),this.children.forEach((c,d)=>{this.dndManager.registerHitboxEntity(d,c.entity,o)}),this.setVisibility(!0))}else this.dndManager.unregisterHitboxEntity(this.entityId,o),this.children.forEach((l,c)=>{this.dndManager.unregisterHitboxEntity(c,o)}),(u=this.parent)==null||u.children.delete(this.entityId),this.dndManager.unobserveResize(r),this.setVisibility(!1)});else{let a=this.getEntity(r.getBoundingClientRect());this.dndManager.observeResize(r),this.dndManager.registerHitboxEntity(this.entityId,a,Dn(t)),(i=this.parent)==null||i.children.set(this.entityId,{entity:a,manager:this}),this.setVisibility(!0)}}setVisibility(t){this.emitter.emit("visibility-change",t),this.isVisible=t,this.children.forEach(r=>{r.manager.setVisibility(t)})}destroy(){var t,r,n;this.mounted&&(this.mounted=!0,this.dndManager.unobserveResize(this.measureNode),(t=this.sortManager)==null||t.unregisterSortable(this.entityId),(r=this.scrollParent)==null||r.unregisterObserverHandler(this.entityId,this.measureNode),this.entityNode&&this.dndManager.unregisterHitboxEntity(this.entityId,Dn(this.entityNode)),(n=this.parent)==null||n.children.delete(this.entityId))}getPath(){var t;return[...((t=this.parent)==null?void 0:t.getPath())||[],this.index]}getEntity(t){var n,i;let r=this;return{scopeId:this.scopeId,entityId:this.entityId,initial:Hu(t,((n=r.scrollParent)==null?void 0:n.scrollState)||Tr,((i=r.scrollParent)==null?void 0:i.getScrollShift())||vi,null),getParentScrollState(){var a;return((a=r.scrollParent)==null?void 0:a.scrollState)||Tr},getParentScrollShift(){var a;return((a=r.scrollParent)==null?void 0:a.getScrollShift())||vi},recalcInitial(){var a,o;this.initial=Hu(r.measureNode.getBoundingClientRect(),((a=r.scrollParent)==null?void 0:a.scrollState)||Tr,((o=r.scrollParent)==null?void 0:o.getScrollShift())||vi,null)},getHitbox(){return Bu(this.initial[0],this.initial[1],this.initial[2],this.initial[3],this.getParentScrollState(),this.getParentScrollShift())},getPath(){return r.getPath()},getData(){var a;return{...r.getEntityData(),sortAxis:(a=r.sortManager)==null?void 0:a.axis,win:Dn(r.measureNode)}}}}};var Vo=class{constructor(){this.scrollStates=new Map,this.idScopes=new Map}setScrollState(t,r,n){if(this.scrollStates.set(r,n),this.idScopes.has(r)){let i=this.idScopes.get(r);i.has(t)||i.add(t)}else this.idScopes.set(r,new Set([t]))}getScrollState(t){return this.scrollStates.has(t)?this.scrollStates.get(t):Tr}unmountScope(t){let r=[];this.idScopes.forEach((n,i)=>{n.has(t)&&(n.delete(t),n.size===0&&r.push(i))}),r.forEach(n=>{this.idScopes.delete(n),this.scrollStates.delete(n)})}};var cn=$e.createContext(null),ma=$e.createContext(""),ol=$e.createContext(null),sl=$e.createContext(new Vo),$u=$e.createContext(null),$o=$e.createContext(null),Uu=$e.createContext(null);var eO=0,ZU=Array.isArray;function E(e,t,r,n,i,a){var o,s,u={};for(s in t)s=="ref"?o=t[s]:u[s]=t[s];var l={type:e,props:u,key:r,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:--eO,__i:-1,__u:0,__source:i,__self:a};if(typeof e=="function"&&(o=e.defaultProps))for(s in o)u[s]===void 0&&(u[s]=o[s]);return Xe.vnode&&Xe.vnode(l),l}function Tb(e){return E(ct,{children:e.children})}var ei=zt(function({id:t,index:r,elementRef:n,measureRef:i,children:a,data:o}){let s=Ee(cn),u=Ee($u),l=Ee(ma),c=Ee($o),d=Ee(ol),m=Fe(o),h=Fe();m.current=o;let g=Re(()=>{if(s){h.current&&h.current.destroy();let y=new Vu(s,l,t,r,c,d,u,m);return n.current&&i.current&&y.initNodes(n.current,i.current),h.current=y,y}return null},[t,r,s,l,c,d,u]);return Nu([n,i],()=>{var y;(y=h.current)==null||y.initNodes(n.current,i.current)},()=>{var y;(y=h.current)==null||y.destroy()}),g?E($o.Provider,{value:g,children:a}):null});function Ui(e){var i;let t=Ee($o),r=Ee(Uu),n=(i=r!=null?r:t==null?void 0:t.getPath())!=null?i:[];return e!==void 0&&n.push(e),Re(()=>n,n)}var pg=Ct(UD());var vL=new Map([["avi","video/avi"],["gif","image/gif"],["ico","image/x-icon"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["mkv","video/x-matroska"],["mov","video/quicktime"],["mp4","video/mp4"],["pdf","application/pdf"],["png","image/png"],["zip","application/zip"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"]]);function ml(e,t){var r=wL(e);if(typeof r.path!="string"){var n=e.webkitRelativePath;Object.defineProperty(r,"path",{value:typeof t=="string"?t:typeof n=="string"&&n.length>0?n:e.name,writable:!1,configurable:!1,enumerable:!0})}return r}function wL(e){var t=e.name,r=t&&t.lastIndexOf(".")!==-1;if(r&&!e.type){var n=t.split(".").pop().toLowerCase(),i=vL.get(n);i&&Object.defineProperty(e,"type",{value:i,writable:!1,configurable:!1,enumerable:!0})}return e}var bL=[".DS_Store","Thumbs.db"];function Jh(e){return Ao(this,void 0,void 0,function(){return Oo(this,function(t){return[2,DL(e)&&e.dataTransfer?kL(e.dataTransfer,e.type):SL(e)]})})}function DL(e){return!!e.dataTransfer}function SL(e){var t=EL(e.target)?e.target.files?Gh(e.target.files):[]:[];return t.map(function(r){return ml(r)})}function EL(e){return e!==null}function kL(e,t){return Ao(this,void 0,void 0,function(){var r,n;return Oo(this,function(i){switch(i.label){case 0:return e.items?(r=Gh(e.items).filter(function(a){return a.kind==="file"}),t!=="drop"?[2,r]:[4,Promise.all(r.map(xL))]):[3,2];case 1:return n=i.sent(),[2,WD(zD(n))];case 2:return[2,WD(Gh(e.files).map(function(a){return ml(a)}))]}})})}function WD(e){return e.filter(function(t){return bL.indexOf(t.name)===-1})}function Gh(e){for(var t=[],r=0;r<e.length;r++){var n=e[r];t.push(n)}return t}function xL(e){if(typeof e.webkitGetAsEntry!="function")return YD(e);var t=e.webkitGetAsEntry();return t&&t.isDirectory?KD(t):YD(e)}function zD(e){return e.reduce(function(t,r){return hw(t,Array.isArray(r)?zD(r):[r])},[])}function YD(e){var t=e.getAsFile();if(!t)return Promise.reject(e+" is not a File");var r=ml(t);return Promise.resolve(r)}function CL(e){return Ao(this,void 0,void 0,function(){return Oo(this,function(t){return[2,e.isDirectory?KD(e):_L(e)]})})}function KD(e){var t=e.createReader();return new Promise(function(r,n){var i=[];function a(){var o=this;t.readEntries(function(s){return Ao(o,void 0,void 0,function(){var u,l,c;return Oo(this,function(d){switch(d.label){case 0:if(s.length)return[3,5];d.label=1;case 1:return d.trys.push([1,3,,4]),[4,Promise.all(i)];case 2:return u=d.sent(),r(u),[3,4];case 3:return l=d.sent(),n(l),[3,4];case 4:return[3,6];case 5:c=Promise.all(s.map(CL)),i.push(c),a(),d.label=6;case 6:return[2]}})})},function(s){n(s)})}a()})}function _L(e){return Ao(this,void 0,void 0,function(){return Oo(this,function(t){return[2,new Promise(function(r,n){e.file(function(i){var a=ml(i,e.fullPath);r(a)},function(i){n(i)})})]})})}var An=require("obsidian");var Vl=Ct(o0());var pk=require("obsidian");var li=require("obsidian"),cg=Ct(Ic());var $S=Ct(HS()),US=Ct(Wm()),cs=require("obsidian");var{compare:ZP}=new Intl.Collator(void 0,{usage:"sort",sensitivity:"base",numeric:!0}),fr=ZP,Ol=class{constructor(){this.settled=!1;this.promise=new Promise((t,r)=>{this.resolve=n=>{this.settled=!0,t(n)},this.reject=n=>{this.settled=!0,r(n)}})}},Ac=class{constructor(t){this.onComplete=t;this.queue=[];this.isRunning=!1}clear(){this.queue.length=0,this.isRunning=!1}add(t){this.queue.push(t),this.isRunning||this.run()}async run(){this.isRunning=!0;let{queue:t}=this,r=performance.now();for(;t.length;){let n=t.splice(0,5);try{await Promise.all(n.map(a=>a()))}catch(a){console.error(a)}if(!this.isRunning)return;let i=performance.now();i-r>50&&(await new Promise(a=>activeWindow.setTimeout(a)),r=i)}this.isRunning=!1,this.onComplete()}};var us=require("obsidian"),QP=/\u00A0/g;function Ym(e){let r=e.replace(QP," ").normalize("NFC").split(/\|(.*)/),n=r[0].split(/#(.*)/);return{root:n[0],subpath:n[1]?"#"+n[1]:"",alias:r[1]||""}}function BS(e){e.querySelectorAll(".task-list-item-checkbox").forEach((r,n)=>{r.dataset.checkboxIndex=n.toString()})}function VS(e){let{contentEl:t,app:r}=e,n=a=>{let o=a.getAttr("data-href")||a.getAttr("href");return o?{href:o,displayText:a.getText().trim()}:null},i=(a,o)=>{if(a.button!==0&&a.button!==1)return;let s=n(o);s&&(a.preventDefault(),r.workspace.openLinkText(s.href,e.file.path,us.Keymap.isModEvent(a)))};t.on("click","a.internal-link",i),t.on("auxclick","a.internal-link",i),t.on("dragstart","a.internal-link",a=>{a.preventDefault()}),t.on("contextmenu","a.internal-link",(a,o)=>{let s=n(o);if(!s)return;let u=new us.Menu;u.addSections(["title","open","action","view","info","","danger"]),r.workspace.handleLinkContextMenu(u,s.href,e.file.path),u.showAtMouseEvent(a)}),t.on("mouseover","a.internal-link",(a,o)=>{let s=n(o);s&&r.workspace.trigger("hover-link",{event:a,source:"preview",hoverParent:e,targetEl:o,linktext:s.href,sourcePath:e.file.path})}),t.on("click","a.external-link",(a,o)=>{let s=n(o);if(!s||(a.preventDefault(),!s.href||s.href.contains(" ")))return;try{new URL(s.href)}catch(c){return}let u=us.Keymap.isModEvent(a),l=typeof u=="boolean"?"":u;window.open(s.href,l)}),t.on("contextmenu","a.external-link",(a,o)=>{let s=n(o);if(!s)return;let u=new us.Menu;u.addSections(["title","open","selection","clipboard","action","view","info","","danger"]),r.workspace.handleExternalLinkContextMenu(u,s.href),u.showAtMouseEvent(a)}),t.on("click","a.tag",(a,o)=>{if(a.button!==0)return;let s=o.getText(),u=r.internalPlugins.getPluginById("global-search");e.plugin.getStateManager(e.file).getSetting("tag-action")==="kanban"?e.emitter.emit("hotkey",{commandId:"editor:open-search",data:s}):u&&u.instance.openGlobalSearch(`tag:${s}`)})}var tt=aa(null),zn=aa(null),Oc=aa(null),Lc=aa(null);function zm(e,t){if(!e)return;let r=e.querySelectorAll("a.tag");r!=null&&r.length&&r.forEach(n=>{let i=t(n.getAttr("href"));i&&n.setCssProps({"--tag-color":i.color,"--tag-background":i.backgroundColor})})}function Km(e,t){if(!e)return;let r=e.querySelectorAll("."+$("date"));r!=null&&r.length&&r.forEach(n=>{let i=n.dataset.date;if(!i)return;let a=(0,US.default)(i);if(!a.isValid())return;let o=t(a);n.toggleClass("has-background",!!(o!=null&&o.backgroundColor)),o&&n.setCssProps({"--date-color":o.color,"--date-background-color":o.backgroundColor})})}var Ll=class extends cs.Component{constructor(r,n){super();this.view=r;this.markdown=n;this.isVisible=!1;this.lastWidth=-1;this.lastHeight=-1;this.lastRefWidth=-1;this.lastRefHeight=-1;this.containerEl=createDiv("markdown-preview-view markdown-rendered "+$("markdown-preview-view")),this.mark=new $S.default(this.containerEl),this.renderCapability=new Ol}onload(){this.render()}async render(){var n;if(this.containerEl.empty(),await cs.MarkdownRenderer.render(this.view.app,this.markdown,this.containerEl,this.view.file.path,this),this.renderCapability.resolve(),!((n=this.view)!=null&&n._loaded)||!this._loaded)return;let{containerEl:r}=this;this.resolveLinks(),BS(r),this.observer=new ResizeObserver(i=>{if(!i.length)return;let a=i.first().contentBoxSize[0];if(a.blockSize!==0){if(this.wrapperEl){let o=this.wrapperEl.getBoundingClientRect();(this.lastRefHeight===-1||o.height>0)&&(this.lastRefHeight=o.height,this.lastRefWidth=o.width)}this.lastWidth=a.inlineSize,this.lastHeight=a.blockSize}}),r.win.setTimeout(()=>{this.observer.observe(r,{box:"border-box"})}),r.addEventListener("click",i=>{let{targetNode:a}=i;a.instanceOf(HTMLElement)&&a.hasClass("task-list-item-checkbox")&&!a.closest(".markdown-embed")&&(i.preventDefault(),i.stopPropagation())},{capture:!0}),r.addEventListener("contextmenu",i=>{let{targetNode:a}=i;a.instanceOf(HTMLElement)&&a.hasClass("task-list-item-checkbox")&&(i.preventDefault(),i.stopPropagation())},{capture:!0})}migrate(r){let{lastRefHeight:n,lastRefWidth:i,containerEl:a}=this;this.wrapperEl=r,n>0&&(r.style.width=`${i}px`,r.style.height=`${n}px`,r.win.setTimeout(()=>{r.style.width="",r.style.height=""},50)),a.parentElement!==r&&r.append(a),this.mark.unmark()}show(){let{wrapperEl:r,containerEl:n}=this;r&&(r.append(n),r.style.minHeight&&(r.style.minHeight=""),this.isVisible=!0)}hide(){let{containerEl:r,wrapperEl:n}=this;n&&(n.style.minHeight=this.lastRefHeight+"px",r.detach(),this.isVisible=!1)}set(r){this._loaded&&(this.markdown=r,this.renderCapability=new Ol,this.unload(),this.load())}resolveLinks(){let{containerEl:r,view:n}=this,i=r.findAll("a.internal-link");for(let a of i){let o=this.getInternalLinkHref(a);if(!o)continue;let s=(0,cs.getLinkpath)(o),u=n.app.metadataCache.getFirstLinkpathDest(s,n.file.path);a.toggleClass("is-unresolved",!u)}}getInternalLinkHref(r){let n=r.getAttr("data-href")||r.getAttr("href");return n||null}},Sa=zt(function({entityId:t,className:r,markdownString:n,searchQuery:i,...a}){let{view:o,stateManager:s}=Ee(tt),u=Ee($o),l=Ee(cn),c=Ee(Oc),d=Ee(Lc),m=Lu(s),h=fa(s),g=Fe(),y=Fe();Ae(()=>{var I;if(!u||!t||!g.current)return;let D=(I=u==null?void 0:u.scrollParent)==null?void 0:I.observer;D&&(D.unobserve(u.measureNode),D.observe(u.measureNode))},[c]),Ae(()=>{if(!(!d||!y.current))return d.registerHandler(y.current,D=>{var I,C;D.isIntersecting?(I=g.current)==null||I.show():(C=g.current)==null||C.hide()}),()=>{y.current&&(d==null||d.unregisterHandler(y.current))}},[]),Ae(()=>{let D=x=>{let O=g.current;if(!O||!(u!=null&&u.parent))return;let{dragManager:A}=l;A.dragEntityId!==u.entityId&&A.dragEntityId!==u.parent.entityId&&(O.isVisible&&!x?O.hide():!O.isVisible&&x&&O.show())};if(t&&o.previewCache.has(t)){let x=o.previewCache.get(t);return g.current=x,x.migrate(y.current),u==null||u.emitter.on("visibility-change",D),()=>u==null?void 0:u.emitter.off("visibility-change",D)}let I=new Ll(o,n);I.wrapperEl=y.current;let C=g.current=o.addChild(I);return t&&o.previewCache.set(t,C),y.current.empty(),y.current.append(C.containerEl),zm(y.current,m),Km(y.current,h),u==null||u.emitter.on("visibility-change",D),()=>{var x;(x=g.current)==null||x.renderCapability.resolve(),u==null||u.emitter.off("visibility-change",D)}},[o,t,u]),Ae(()=>{let D=g.current;!D||n===D.markdown||(D.renderCapability.resolve(),D.set(n),D.renderCapability.promise.then(()=>{zm(y.current,m),Km(y.current,h)}))},[n]),Ae(()=>{g.current&&(zm(y.current,m),Km(y.current,h))},[m,h]),Ae(()=>{let D=g.current;D&&(D.mark.unmark(),i&&i.trim()&&D.mark.mark(i))},[i]),Ae(()=>{let D=g.current;y.current&&D&&D.wrapperEl!==y.current&&D.migrate(y.current)},[]);let v;if(!g.current&&o.previewCache.has(t)){let D=o.previewCache.get(t);D.lastRefHeight>0&&(v={width:`${D.lastRefWidth}px`,height:`${D.lastRefHeight}px`})}return E("div",{style:v,ref:y,className:Ge([$("markdown-preview-wrapper"),r]),...a})}),WS=zt(function({entityId:t,className:r,...n}){let{view:i}=Ee(tt),a=Fe(),o=i.previewCache.get(t),s;return o&&o.lastRefHeight>0&&(s={width:`${o.lastRefWidth}px`,height:`${o.lastRefHeight}px`}),E("div",{style:s,ref:u=>{a.current=u,u&&o&&u.childElementCount===0&&u.append(o.containerEl.cloneNode(!0))},className:Ge([$("markdown-preview-wrapper"),r]),...n})});var ck=require("@codemirror/commands"),fs=require("@codemirror/state"),lo=require("@codemirror/view");var xa=require("obsidian");var ft={Item:"item",Lane:"lane",Board:"board",MetadataSetting:"metadata-setting",TagColorSetting:"tag-color",TagSortSetting:"tag-sort",DateColorSetting:"date-color"},Pc={accepts:[ft.Item],type:ft.Item,children:[]},Ea={accepts:[ft.Lane],type:ft.Lane},Nc={accepts:[],type:ft.Board},Rc={accepts:[ft.MetadataSetting],type:ft.MetadataSetting,children:[]},Hc={accepts:[ft.TagSortSetting],type:ft.TagSortSetting,children:[]},Bc={accepts:[],type:ft.TagColorSetting,children:[]},Vc={accepts:[],type:ft.DateColorSetting,children:[]};function kn(e){return!(e===null||typeof e=="number")}var YS=require("@codemirror/state"),si=require("@codemirror/view"),zS=require("obsidian");var Uc=YS.StateField.define({create(){return null},update(e){return e}}),jm=class extends si.WidgetType{constructor(t,r,n){super(),this.stateManager=t,this.type=n,this.date=r}eq(t){return this.date.isSame(t.date)}toDOM(){return createSpan({cls:`cm-kanban-${this.type}-wrapper`},t=>{t.createSpan({cls:`cm-kanban-${this.type}`,text:this.date.format(this.stateManager.getSetting(this.type==="time"?"time-format":"date-display-format"))})})}ignoreEvent(){return!1}};function XP(e){return(t,r,n,i,a)=>{let o=a.state.field(Uc);if(!o)return;let s=i[1],u=(0,zS.moment)(s,o.getSetting(e==="date"?"date-format":"time-format"));u.isValid()&&t(r,n,si.Decoration.replace({widget:new jm(o,u,e)}))}}var qm=class{constructor(t,r,n){this.decorator=new si.MatchDecorator({regexp:r,decorate:XP(n)}),this.decos=this.decorator.createDeco(t)}update(t){t.docChanged&&(this.decos=this.decorator.createDeco(t.view))}},eN={decorations:e=>e.decos,provide:e=>si.EditorView.atomicRanges.of(t=>{var r;return((r=t.plugin(e))==null?void 0:r.decos)||si.Decoration.none})};function $c(e,t){return si.ViewPlugin.define(r=>{let i=r.state.field(Uc).getSetting(e==="date"?"date-trigger":"time-trigger");return new qm(r,new RegExp(`${Qn(i)}${t}`,"g"),e)},eN)}var KS=[$c("time","{([^}]+)}"),$c("date","{([^}]+)}"),$c("date","\\[\\[([^\\]]+)\\]\\]"),$c("date","\\[([^\\]]+)\\]\\([^)]+\\)")];var Hl=require("obsidian");var ok=require("obsidian");var ek=require("obsidian");var jS=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Gm={weekdays:{shorthand:["\u0623\u062D\u062F","\u0627\u062B\u0646\u064A\u0646","\u062B\u0644\u0627\u062B\u0627\u0621","\u0623\u0631\u0628\u0639\u0627\u0621","\u062E\u0645\u064A\u0633","\u062C\u0645\u0639\u0629","\u0633\u0628\u062A"],longhand:["\u0627\u0644\u0623\u062D\u062F","\u0627\u0644\u0627\u062B\u0646\u064A\u0646","\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621","\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621","\u0627\u0644\u062E\u0645\u064A\u0633","\u0627\u0644\u062C\u0645\u0639\u0629","\u0627\u0644\u0633\u0628\u062A"]},months:{shorthand:["1","2","3","4","5","6","7","8","9","10","11","12"],longhand:["\u064A\u0646\u0627\u064A\u0631","\u0641\u0628\u0631\u0627\u064A\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064A\u0644","\u0645\u0627\u064A\u0648","\u064A\u0648\u0646\u064A\u0648","\u064A\u0648\u0644\u064A\u0648","\u0623\u063A\u0633\u0637\u0633","\u0633\u0628\u062A\u0645\u0628\u0631","\u0623\u0643\u062A\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062F\u064A\u0633\u0645\u0628\u0631"]},firstDayOfWeek:6,rangeSeparator:" \u0625\u0644\u0649 ",weekAbbreviation:"Wk",scrollTitle:"\u0642\u0645 \u0628\u0627\u0644\u062A\u0645\u0631\u064A\u0631 \u0644\u0644\u0632\u064A\u0627\u062F\u0629",toggleTitle:"\u0627\u0636\u063A\u0637 \u0644\u0644\u062A\u0628\u062F\u064A\u0644",amPM:["\u0635","\u0645"],yearAriaLabel:"\u0633\u0646\u0629",monthAriaLabel:"\u0634\u0647\u0631",hourAriaLabel:"\u0633\u0627\u0639\u0629",minuteAriaLabel:"\u062F\u0642\u064A\u0642\u0629",time_24hr:!1};jS.l10ns.ar=Gm;var JW=jS.l10ns;var qS=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Jm={weekdays:{shorthand:["So","Mo","Di","Mi","Do","Fr","Sa"],longhand:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"]},months:{shorthand:["J\xE4n","Feb","M\xE4r","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],longhand:["J\xE4nner","Februar","M\xE4rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"]},firstDayOfWeek:1,weekAbbreviation:"KW",rangeSeparator:" bis ",scrollTitle:"Zum \xC4ndern scrollen",toggleTitle:"Zum Umschalten klicken",time_24hr:!0};qS.l10ns.at=Jm;var QW=qS.l10ns;var GS=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Zm={weekdays:{shorthand:["B.","B.e.","\xC7.a.","\xC7.","C.a.","C.","\u015E."],longhand:["Bazar","Bazar ert\u0259si","\xC7\u0259r\u015F\u0259nb\u0259 ax\u015Fam\u0131","\xC7\u0259r\u015F\u0259nb\u0259","C\xFCm\u0259 ax\u015Fam\u0131","C\xFCm\u0259","\u015E\u0259nb\u0259"]},months:{shorthand:["Yan","Fev","Mar","Apr","May","\u0130yn","\u0130yl","Avq","Sen","Okt","Noy","Dek"],longhand:["Yanvar","Fevral","Mart","Aprel","May","\u0130yun","\u0130yul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"]},firstDayOfWeek:1,ordinal:()=>".",rangeSeparator:" - ",weekAbbreviation:"Hf",scrollTitle:"Art\u0131rmaq \xFC\xE7\xFCn s\xFCr\xFC\u015Fd\xFCr\xFCn",toggleTitle:"A\xE7 / Ba\u011Fla",amPM:["G\u018F","GS"],time_24hr:!0};GS.l10ns.az=Zm;var e4=GS.l10ns;var JS=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Qm={weekdays:{shorthand:["\u041D\u0434","\u041F\u043D","\u0410\u045E","\u0421\u0440","\u0427\u0446","\u041F\u0442","\u0421\u0431"],longhand:["\u041D\u044F\u0434\u0437\u0435\u043B\u044F","\u041F\u0430\u043D\u044F\u0434\u0437\u0435\u043B\u0430\u043A","\u0410\u045E\u0442\u043E\u0440\u0430\u043A","\u0421\u0435\u0440\u0430\u0434\u0430","\u0427\u0430\u0446\u0432\u0435\u0440","\u041F\u044F\u0442\u043D\u0456\u0446\u0430","\u0421\u0443\u0431\u043E\u0442\u0430"]},months:{shorthand:["\u0421\u0442\u0443","\u041B\u044E\u0442","\u0421\u0430\u043A","\u041A\u0440\u0430","\u0422\u0440\u0430","\u0427\u044D\u0440","\u041B\u0456\u043F","\u0416\u043D\u0456","\u0412\u0435\u0440","\u041A\u0430\u0441","\u041B\u0456\u0441","\u0421\u043D\u0435"],longhand:["\u0421\u0442\u0443\u0434\u0437\u0435\u043D\u044C","\u041B\u044E\u0442\u044B","\u0421\u0430\u043A\u0430\u0432\u0456\u043A","\u041A\u0440\u0430\u0441\u0430\u0432\u0456\u043A","\u0422\u0440\u0430\u0432\u0435\u043D\u044C","\u0427\u044D\u0440\u0432\u0435\u043D\u044C","\u041B\u0456\u043F\u0435\u043D\u044C","\u0416\u043D\u0456\u0432\u0435\u043D\u044C","\u0412\u0435\u0440\u0430\u0441\u0435\u043D\u044C","\u041A\u0430\u0441\u0442\u0440\u044B\u0447\u043D\u0456\u043A","\u041B\u0456\u0441\u0442\u0430\u043F\u0430\u0434","\u0421\u043D\u0435\u0436\u0430\u043D\u044C"]},firstDayOfWeek:1,ordinal:function(){return""},rangeSeparator:" \u2014 ",weekAbbreviation:"\u0422\u044B\u0434.",scrollTitle:"\u041F\u0440\u0430\u043A\u0440\u0443\u0446\u0456\u0446\u0435 \u0434\u043B\u044F \u043F\u0430\u0432\u0435\u043B\u0456\u0447\u044D\u043D\u043D\u044F",toggleTitle:"\u041D\u0430\u0446\u0456\u0441\u043D\u0456\u0446\u0435 \u0434\u043B\u044F \u043F\u0435\u0440\u0430\u043A\u043B\u044E\u0447\u044D\u043D\u043D\u044F",amPM:["\u0414\u041F","\u041F\u041F"],yearAriaLabel:"\u0413\u043E\u0434",time_24hr:!0};JS.l10ns.be=Qm;var n4=JS.l10ns;var ZS=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Xm={weekdays:{shorthand:["\u041D\u0434","\u041F\u043D","\u0412\u0442","\u0421\u0440","\u0427\u0442","\u041F\u0442","\u0421\u0431"],longhand:["\u041D\u0435\u0434\u0435\u043B\u044F","\u041F\u043E\u043D\u0435\u0434\u0435\u043B\u043D\u0438\u043A","\u0412\u0442\u043E\u0440\u043D\u0438\u043A","\u0421\u0440\u044F\u0434\u0430","\u0427\u0435\u0442\u0432\u044A\u0440\u0442\u044A\u043A","\u041F\u0435\u0442\u044A\u043A","\u0421\u044A\u0431\u043E\u0442\u0430"]},months:{shorthand:["\u042F\u043D\u0443","\u0424\u0435\u0432","\u041C\u0430\u0440\u0442","\u0410\u043F\u0440","\u041C\u0430\u0439","\u042E\u043D\u0438","\u042E\u043B\u0438","\u0410\u0432\u0433","\u0421\u0435\u043F","\u041E\u043A\u0442","\u041D\u043E\u0435","\u0414\u0435\u043A"],longhand:["\u042F\u043D\u0443\u0430\u0440\u0438","\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438","\u041C\u0430\u0440\u0442","\u0410\u043F\u0440\u0438\u043B","\u041C\u0430\u0439","\u042E\u043D\u0438","\u042E\u043B\u0438","\u0410\u0432\u0433\u0443\u0441\u0442","\u0421\u0435\u043F\u0442\u0435\u043C\u0432\u0440\u0438","\u041E\u043A\u0442\u043E\u043C\u0432\u0440\u0438","\u041D\u043E\u0435\u043C\u0432\u0440\u0438","\u0414\u0435\u043A\u0435\u043C\u0432\u0440\u0438"]},time_24hr:!0,firstDayOfWeek:1};ZS.l10ns.bg=Xm;var i4=ZS.l10ns;var QS=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},ep={weekdays:{shorthand:["\u09B0\u09AC\u09BF","\u09B8\u09CB\u09AE","\u09AE\u0999\u09CD\u0997\u09B2","\u09AC\u09C1\u09A7","\u09AC\u09C3\u09B9\u09B8\u09CD\u09AA\u09A4\u09BF","\u09B6\u09C1\u0995\u09CD\u09B0","\u09B6\u09A8\u09BF"],longhand:["\u09B0\u09AC\u09BF\u09AC\u09BE\u09B0","\u09B8\u09CB\u09AE\u09AC\u09BE\u09B0","\u09AE\u0999\u09CD\u0997\u09B2\u09AC\u09BE\u09B0","\u09AC\u09C1\u09A7\u09AC\u09BE\u09B0","\u09AC\u09C3\u09B9\u09B8\u09CD\u09AA\u09A4\u09BF\u09AC\u09BE\u09B0","\u09B6\u09C1\u0995\u09CD\u09B0\u09AC\u09BE\u09B0","\u09B6\u09A8\u09BF\u09AC\u09BE\u09B0"]},months:{shorthand:["\u099C\u09BE\u09A8\u09C1","\u09AB\u09C7\u09AC\u09CD\u09B0\u09C1","\u09AE\u09BE\u09B0\u09CD\u099A","\u098F\u09AA\u09CD\u09B0\u09BF\u09B2","\u09AE\u09C7","\u099C\u09C1\u09A8","\u099C\u09C1\u09B2\u09BE\u0987","\u0986\u0997","\u09B8\u09C7\u09AA\u09CD\u099F\u09C7","\u0985\u0995\u09CD\u099F\u09CB","\u09A8\u09AD\u09C7","\u09A1\u09BF\u09B8\u09C7"],longhand:["\u099C\u09BE\u09A8\u09C1\u09AF\u09BC\u09BE\u09B0\u09C0","\u09AB\u09C7\u09AC\u09CD\u09B0\u09C1\u09AF\u09BC\u09BE\u09B0\u09C0","\u09AE\u09BE\u09B0\u09CD\u099A","\u098F\u09AA\u09CD\u09B0\u09BF\u09B2","\u09AE\u09C7","\u099C\u09C1\u09A8","\u099C\u09C1\u09B2\u09BE\u0987","\u0986\u0997\u09B8\u09CD\u099F","\u09B8\u09C7\u09AA\u09CD\u099F\u09C7\u09AE\u09CD\u09AC\u09B0","\u0985\u0995\u09CD\u099F\u09CB\u09AC\u09B0","\u09A8\u09AD\u09C7\u09AE\u09CD\u09AC\u09B0","\u09A1\u09BF\u09B8\u09C7\u09AE\u09CD\u09AC\u09B0"]}};QS.l10ns.bn=ep;var o4=QS.l10ns;var XS=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},tp={firstDayOfWeek:1,weekdays:{shorthand:["Ned","Pon","Uto","Sri","\u010Cet","Pet","Sub"],longhand:["Nedjelja","Ponedjeljak","Utorak","Srijeda","\u010Cetvrtak","Petak","Subota"]},months:{shorthand:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],longhand:["Januar","Februar","Mart","April","Maj","Juni","Juli","Avgust","Septembar","Oktobar","Novembar","Decembar"]},time_24hr:!0};XS.l10ns.bs=tp;var l4=XS.l10ns;var np=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Wc={weekdays:{shorthand:["Dg","Dl","Dt","Dc","Dj","Dv","Ds"],longhand:["Diumenge","Dilluns","Dimarts","Dimecres","Dijous","Divendres","Dissabte"]},months:{shorthand:["Gen","Febr","Mar\xE7","Abr","Maig","Juny","Jul","Ag","Set","Oct","Nov","Des"],longhand:["Gener","Febrer","Mar\xE7","Abril","Maig","Juny","Juliol","Agost","Setembre","Octubre","Novembre","Desembre"]},ordinal:e=>{let t=e%100;if(t>3&&t<21)return"\xE8";switch(t%10){case 1:return"r";case 2:return"n";case 3:return"r";case 4:return"t";default:return"\xE8"}},firstDayOfWeek:1,rangeSeparator:" a ",time_24hr:!0};np.l10ns.cat=np.l10ns.ca=Wc;var c4=np.l10ns;var eE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},rp={weekdays:{shorthand:["\u06CC\u06D5\u06A9\u0634\u06D5\u0645\u0645\u06D5","\u062F\u0648\u0648\u0634\u06D5\u0645\u0645\u06D5","\u0633\u06CE\u0634\u06D5\u0645\u0645\u06D5","\u0686\u0648\u0627\u0631\u0634\u06D5\u0645\u0645\u06D5","\u067E\u06CE\u0646\u062C\u0634\u06D5\u0645\u0645\u06D5","\u0647\u06D5\u06CC\u0646\u06CC","\u0634\u06D5\u0645\u0645\u06D5"],longhand:["\u06CC\u06D5\u06A9\u0634\u06D5\u0645\u0645\u06D5","\u062F\u0648\u0648\u0634\u06D5\u0645\u0645\u06D5","\u0633\u06CE\u0634\u06D5\u0645\u0645\u06D5","\u0686\u0648\u0627\u0631\u0634\u06D5\u0645\u0645\u06D5","\u067E\u06CE\u0646\u062C\u0634\u06D5\u0645\u0645\u06D5","\u0647\u06D5\u06CC\u0646\u06CC","\u0634\u06D5\u0645\u0645\u06D5"]},months:{shorthand:["\u0695\u06CE\u0628\u06D5\u0646\u062F\u0627\u0646","\u0695\u06D5\u0634\u06D5\u0645\u06D5","\u0646\u06D5\u0648\u0631\u06C6\u0632","\u06AF\u0648\u06B5\u0627\u0646","\u062C\u06C6\u0632\u06D5\u0631\u062F\u0627\u0646","\u067E\u0648\u0648\u0634\u067E\u06D5\u0695","\u06AF\u06D5\u0644\u0627\u0648\u06CE\u0698","\u062E\u06D5\u0631\u0645\u0627\u0646\u0627\u0646","\u0695\u06D5\u0632\u0628\u06D5\u0631","\u06AF\u06D5\u06B5\u0627\u0695\u06CE\u0632\u0627\u0646","\u0633\u06D5\u0631\u0645\u0627\u0648\u06D5\u0632","\u0628\u06D5\u0641\u0631\u0627\u0646\u0628\u0627\u0631"],longhand:["\u0695\u06CE\u0628\u06D5\u0646\u062F\u0627\u0646","\u0695\u06D5\u0634\u06D5\u0645\u06D5","\u0646\u06D5\u0648\u0631\u06C6\u0632","\u06AF\u0648\u06B5\u0627\u0646","\u062C\u06C6\u0632\u06D5\u0631\u062F\u0627\u0646","\u067E\u0648\u0648\u0634\u067E\u06D5\u0695","\u06AF\u06D5\u0644\u0627\u0648\u06CE\u0698","\u062E\u06D5\u0631\u0645\u0627\u0646\u0627\u0646","\u0695\u06D5\u0632\u0628\u06D5\u0631","\u06AF\u06D5\u06B5\u0627\u0695\u06CE\u0632\u0627\u0646","\u0633\u06D5\u0631\u0645\u0627\u0648\u06D5\u0632","\u0628\u06D5\u0641\u0631\u0627\u0646\u0628\u0627\u0631"]},firstDayOfWeek:6,ordinal:()=>""};eE.l10ns.ckb=rp;var f4=eE.l10ns;var tE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},ip={weekdays:{shorthand:["Ne","Po","\xDAt","St","\u010Ct","P\xE1","So"],longhand:["Ned\u011Ble","Pond\u011Bl\xED","\xDAter\xFD","St\u0159eda","\u010Ctvrtek","P\xE1tek","Sobota"]},months:{shorthand:["Led","\xDAn","B\u0159e","Dub","Kv\u011B","\u010Cer","\u010Cvc","Srp","Z\xE1\u0159","\u0158\xEDj","Lis","Pro"],longhand:["Leden","\xDAnor","B\u0159ezen","Duben","Kv\u011Bten","\u010Cerven","\u010Cervenec","Srpen","Z\xE1\u0159\xED","\u0158\xEDjen","Listopad","Prosinec"]},firstDayOfWeek:1,ordinal:function(){return"."},rangeSeparator:" do ",weekAbbreviation:"T\xFDd.",scrollTitle:"Rolujte pro zm\u011Bnu",toggleTitle:"P\u0159epnout dopoledne/odpoledne",amPM:["dop.","odp."],yearAriaLabel:"Rok",time_24hr:!0};tE.l10ns.cs=ip;var m4=tE.l10ns;var nE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},ap={weekdays:{shorthand:["Sul","Llun","Maw","Mer","Iau","Gwe","Sad"],longhand:["Dydd Sul","Dydd Llun","Dydd Mawrth","Dydd Mercher","Dydd Iau","Dydd Gwener","Dydd Sadwrn"]},months:{shorthand:["Ion","Chwef","Maw","Ebr","Mai","Meh","Gorff","Awst","Medi","Hyd","Tach","Rhag"],longhand:["Ionawr","Chwefror","Mawrth","Ebrill","Mai","Mehefin","Gorffennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"]},firstDayOfWeek:1,ordinal:e=>e===1?"af":e===2?"ail":e===3||e===4?"ydd":e===5||e===6?"ed":e>=7&&e<=10||e==12||e==15||e==18||e==20?"fed":e==11||e==13||e==14||e==16||e==17||e==19?"eg":e>=21&&e<=39?"ain":"",time_24hr:!0};nE.l10ns.cy=ap;var g4=nE.l10ns;var rE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},op={weekdays:{shorthand:["s\xF8n","man","tir","ons","tors","fre","l\xF8r"],longhand:["s\xF8ndag","mandag","tirsdag","onsdag","torsdag","fredag","l\xF8rdag"]},months:{shorthand:["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],longhand:["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"]},ordinal:()=>".",firstDayOfWeek:1,rangeSeparator:" til ",weekAbbreviation:"uge",time_24hr:!0};rE.l10ns.da=op;var v4=rE.l10ns;var iE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},sp={weekdays:{shorthand:["So","Mo","Di","Mi","Do","Fr","Sa"],longhand:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"]},months:{shorthand:["Jan","Feb","M\xE4r","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],longhand:["Januar","Februar","M\xE4rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"]},firstDayOfWeek:1,weekAbbreviation:"KW",rangeSeparator:" bis ",scrollTitle:"Zum \xC4ndern scrollen",toggleTitle:"Zum Umschalten klicken",time_24hr:!0};iE.l10ns.de=sp;var b4=iE.l10ns;var so={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:e=>{let t=e%100;if(t>3&&t<21)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",monthAriaLabel:"Month",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1},Yc=so;var aE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},lp={firstDayOfWeek:1,rangeSeparator:" \u011Dis ",weekAbbreviation:"Sem",scrollTitle:"Rulumu por pligrandigi la valoron",toggleTitle:"Klaku por \u015Dalti",weekdays:{shorthand:["Dim","Lun","Mar","Mer","\u0134a\u016D","Ven","Sab"],longhand:["diman\u0109o","lundo","mardo","merkredo","\u0135a\u016Ddo","vendredo","sabato"]},months:{shorthand:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","A\u016Dg","Sep","Okt","Nov","Dec"],longhand:["januaro","februaro","marto","aprilo","majo","junio","julio","a\u016Dgusto","septembro","oktobro","novembro","decembro"]},ordinal:()=>"-a",time_24hr:!0};aE.l10ns.eo=lp;var E4=aE.l10ns;var oE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},up={weekdays:{shorthand:["Dom","Lun","Mar","Mi\xE9","Jue","Vie","S\xE1b"],longhand:["Domingo","Lunes","Martes","Mi\xE9rcoles","Jueves","Viernes","S\xE1bado"]},months:{shorthand:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],longhand:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"]},ordinal:()=>"\xBA",firstDayOfWeek:1,rangeSeparator:" a ",time_24hr:!0};oE.l10ns.es=up;var x4=oE.l10ns;var sE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},cp={weekdays:{shorthand:["P","E","T","K","N","R","L"],longhand:["P\xFChap\xE4ev","Esmasp\xE4ev","Teisip\xE4ev","Kolmap\xE4ev","Neljap\xE4ev","Reede","Laup\xE4ev"]},months:{shorthand:["Jaan","Veebr","M\xE4rts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],longhand:["Jaanuar","Veebruar","M\xE4rts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"]},firstDayOfWeek:1,ordinal:function(){return"."},weekAbbreviation:"N\xE4d",rangeSeparator:" kuni ",scrollTitle:"Keri, et suurendada",toggleTitle:"Kl\xF5psa, et vahetada",time_24hr:!0};sE.l10ns.et=cp;var _4=sE.l10ns;var lE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},dp={weekdays:{shorthand:["\u06CC\u06A9","\u062F\u0648","\u0633\u0647","\u0686\u0647\u0627\u0631","\u067E\u0646\u062C","\u062C\u0645\u0639\u0647","\u0634\u0646\u0628\u0647"],longhand:["\u06CC\u06A9\u200C\u0634\u0646\u0628\u0647","\u062F\u0648\u0634\u0646\u0628\u0647","\u0633\u0647\u200C\u0634\u0646\u0628\u0647","\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647","\u067E\u0646\u0686\u200C\u0634\u0646\u0628\u0647","\u062C\u0645\u0639\u0647","\u0634\u0646\u0628\u0647"]},months:{shorthand:["\u0698\u0627\u0646\u0648\u06CC\u0647","\u0641\u0648\u0631\u06CC\u0647","\u0645\u0627\u0631\u0633","\u0622\u0648\u0631\u06CC\u0644","\u0645\u0647","\u0698\u0648\u0626\u0646","\u0698\u0648\u0626\u06CC\u0647","\u0627\u0648\u062A","\u0633\u067E\u062A\u0627\u0645\u0628\u0631","\u0627\u06A9\u062A\u0628\u0631","\u0646\u0648\u0627\u0645\u0628\u0631","\u062F\u0633\u0627\u0645\u0628\u0631"],longhand:["\u0698\u0627\u0646\u0648\u06CC\u0647","\u0641\u0648\u0631\u06CC\u0647","\u0645\u0627\u0631\u0633","\u0622\u0648\u0631\u06CC\u0644","\u0645\u0647","\u0698\u0648\u0626\u0646","\u0698\u0648\u0626\u06CC\u0647","\u0627\u0648\u062A","\u0633\u067E\u062A\u0627\u0645\u0628\u0631","\u0627\u06A9\u062A\u0628\u0631","\u0646\u0648\u0627\u0645\u0628\u0631","\u062F\u0633\u0627\u0645\u0628\u0631"]},firstDayOfWeek:6,ordinal:()=>""};lE.l10ns.fa=dp;var T4=lE.l10ns;var uE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},fp={firstDayOfWeek:1,weekdays:{shorthand:["su","ma","ti","ke","to","pe","la"],longhand:["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"]},months:{shorthand:["tammi","helmi","maalis","huhti","touko","kes\xE4","hein\xE4","elo","syys","loka","marras","joulu"],longhand:["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kes\xE4kuu","hein\xE4kuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"]},ordinal:()=>".",time_24hr:!0};uE.l10ns.fi=fp;var I4=uE.l10ns;var cE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},hp={weekdays:{shorthand:["Sun","M\xE1n","T\xFDs","Mik","H\xF3s","Fr\xED","Ley"],longhand:["Sunnudagur","M\xE1nadagur","T\xFDsdagur","Mikudagur","H\xF3sdagur","Fr\xEDggjadagur","Leygardagur"]},months:{shorthand:["Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Des"],longhand:["Januar","Februar","Mars","Apr\xEDl","Mai","Juni","Juli","August","Septembur","Oktobur","Novembur","Desembur"]},ordinal:()=>".",firstDayOfWeek:1,rangeSeparator:" til ",weekAbbreviation:"vika",scrollTitle:"Rulla fyri at broyta",toggleTitle:"Tr\xFDst fyri at skifta",yearAriaLabel:"\xC1r",time_24hr:!0};cE.l10ns.fo=hp;var O4=cE.l10ns;var dE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},mp={firstDayOfWeek:1,weekdays:{shorthand:["dim","lun","mar","mer","jeu","ven","sam"],longhand:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"]},months:{shorthand:["janv","f\xE9vr","mars","avr","mai","juin","juil","ao\xFBt","sept","oct","nov","d\xE9c"],longhand:["janvier","f\xE9vrier","mars","avril","mai","juin","juillet","ao\xFBt","septembre","octobre","novembre","d\xE9cembre"]},ordinal:e=>e>1?"":"er",rangeSeparator:" au ",weekAbbreviation:"Sem",scrollTitle:"D\xE9filer pour augmenter la valeur",toggleTitle:"Cliquer pour basculer",time_24hr:!0};dE.l10ns.fr=mp;var P4=dE.l10ns;var fE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},pp={weekdays:{shorthand:["\u039A\u03C5","\u0394\u03B5","\u03A4\u03C1","\u03A4\u03B5","\u03A0\u03AD","\u03A0\u03B1","\u03A3\u03AC"],longhand:["\u039A\u03C5\u03C1\u03B9\u03B1\u03BA\u03AE","\u0394\u03B5\u03C5\u03C4\u03AD\u03C1\u03B1","\u03A4\u03C1\u03AF\u03C4\u03B7","\u03A4\u03B5\u03C4\u03AC\u03C1\u03C4\u03B7","\u03A0\u03AD\u03BC\u03C0\u03C4\u03B7","\u03A0\u03B1\u03C1\u03B1\u03C3\u03BA\u03B5\u03C5\u03AE","\u03A3\u03AC\u03B2\u03B2\u03B1\u03C4\u03BF"]},months:{shorthand:["\u0399\u03B1\u03BD","\u03A6\u03B5\u03B2","\u039C\u03AC\u03C1","\u0391\u03C0\u03C1","\u039C\u03AC\u03B9","\u0399\u03BF\u03CD\u03BD","\u0399\u03BF\u03CD\u03BB","\u0391\u03CD\u03B3","\u03A3\u03B5\u03C0","\u039F\u03BA\u03C4","\u039D\u03BF\u03AD","\u0394\u03B5\u03BA"],longhand:["\u0399\u03B1\u03BD\u03BF\u03C5\u03AC\u03C1\u03B9\u03BF\u03C2","\u03A6\u03B5\u03B2\u03C1\u03BF\u03C5\u03AC\u03C1\u03B9\u03BF\u03C2","\u039C\u03AC\u03C1\u03C4\u03B9\u03BF\u03C2","\u0391\u03C0\u03C1\u03AF\u03BB\u03B9\u03BF\u03C2","\u039C\u03AC\u03B9\u03BF\u03C2","\u0399\u03BF\u03CD\u03BD\u03B9\u03BF\u03C2","\u0399\u03BF\u03CD\u03BB\u03B9\u03BF\u03C2","\u0391\u03CD\u03B3\u03BF\u03C5\u03C3\u03C4\u03BF\u03C2","\u03A3\u03B5\u03C0\u03C4\u03AD\u03BC\u03B2\u03C1\u03B9\u03BF\u03C2","\u039F\u03BA\u03C4\u03CE\u03B2\u03C1\u03B9\u03BF\u03C2","\u039D\u03BF\u03AD\u03BC\u03B2\u03C1\u03B9\u03BF\u03C2","\u0394\u03B5\u03BA\u03AD\u03BC\u03B2\u03C1\u03B9\u03BF\u03C2"]},firstDayOfWeek:1,ordinal:function(){return""},weekAbbreviation:"\u0395\u03B2\u03B4",rangeSeparator:" \u03AD\u03C9\u03C2 ",scrollTitle:"\u039C\u03B5\u03C4\u03B1\u03BA\u03C5\u03BB\u03AE\u03C3\u03C4\u03B5 \u03B3\u03B9\u03B1 \u03C0\u03C1\u03BF\u03C3\u03B1\u03CD\u03BE\u03B7\u03C3\u03B7",toggleTitle:"\u039A\u03AC\u03BD\u03C4\u03B5 \u03BA\u03BB\u03B9\u03BA \u03B3\u03B9\u03B1 \u03B1\u03BB\u03BB\u03B1\u03B3\u03AE",amPM:["\u03A0\u039C","\u039C\u039C"],yearAriaLabel:"\u03C7\u03C1\u03CC\u03BD\u03BF\u03C2",monthAriaLabel:"\u03BC\u03AE\u03BD\u03B1\u03C2",hourAriaLabel:"\u03CE\u03C1\u03B1",minuteAriaLabel:"\u03BB\u03B5\u03C0\u03C4\u03CC"};fE.l10ns.gr=pp;var R4=fE.l10ns;var hE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},gp={weekdays:{shorthand:["\u05D0","\u05D1","\u05D2","\u05D3","\u05D4","\u05D5","\u05E9"],longhand:["\u05E8\u05D0\u05E9\u05D5\u05DF","\u05E9\u05E0\u05D9","\u05E9\u05DC\u05D9\u05E9\u05D9","\u05E8\u05D1\u05D9\u05E2\u05D9","\u05D7\u05DE\u05D9\u05E9\u05D9","\u05E9\u05D9\u05E9\u05D9","\u05E9\u05D1\u05EA"]},months:{shorthand:["\u05D9\u05E0\u05D5\u05F3","\u05E4\u05D1\u05E8\u05F3","\u05DE\u05E8\u05E5","\u05D0\u05E4\u05E8\u05F3","\u05DE\u05D0\u05D9","\u05D9\u05D5\u05E0\u05D9","\u05D9\u05D5\u05DC\u05D9","\u05D0\u05D5\u05D2\u05F3","\u05E1\u05E4\u05D8\u05F3","\u05D0\u05D5\u05E7\u05F3","\u05E0\u05D5\u05D1\u05F3","\u05D3\u05E6\u05DE\u05F3"],longhand:["\u05D9\u05E0\u05D5\u05D0\u05E8","\u05E4\u05D1\u05E8\u05D5\u05D0\u05E8","\u05DE\u05E8\u05E5","\u05D0\u05E4\u05E8\u05D9\u05DC","\u05DE\u05D0\u05D9","\u05D9\u05D5\u05E0\u05D9","\u05D9\u05D5\u05DC\u05D9","\u05D0\u05D5\u05D2\u05D5\u05E1\u05D8","\u05E1\u05E4\u05D8\u05DE\u05D1\u05E8","\u05D0\u05D5\u05E7\u05D8\u05D5\u05D1\u05E8","\u05E0\u05D5\u05D1\u05DE\u05D1\u05E8","\u05D3\u05E6\u05DE\u05D1\u05E8"]},rangeSeparator:" \u05D0\u05DC ",time_24hr:!0};hE.l10ns.he=gp;var B4=hE.l10ns;var mE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},yp={weekdays:{shorthand:["\u0930\u0935\u093F","\u0938\u094B\u092E","\u092E\u0902\u0917\u0932","\u092C\u0941\u0927","\u0917\u0941\u0930\u0941","\u0936\u0941\u0915\u094D\u0930","\u0936\u0928\u093F"],longhand:["\u0930\u0935\u093F\u0935\u093E\u0930","\u0938\u094B\u092E\u0935\u093E\u0930","\u092E\u0902\u0917\u0932\u0935\u093E\u0930","\u092C\u0941\u0927\u0935\u093E\u0930","\u0917\u0941\u0930\u0941\u0935\u093E\u0930","\u0936\u0941\u0915\u094D\u0930\u0935\u093E\u0930","\u0936\u0928\u093F\u0935\u093E\u0930"]},months:{shorthand:["\u091C\u0928","\u092B\u0930","\u092E\u093E\u0930\u094D\u091A","\u0905\u092A\u094D\u0930\u0947\u0932","\u092E\u0908","\u091C\u0942\u0928","\u091C\u0942\u0932\u093E\u0908","\u0905\u0917","\u0938\u093F\u0924","\u0905\u0915\u094D\u091F","\u0928\u0935","\u0926\u093F"],longhand:["\u091C\u0928\u0935\u0930\u0940 ","\u092B\u0930\u0935\u0930\u0940","\u092E\u093E\u0930\u094D\u091A","\u0905\u092A\u094D\u0930\u0947\u0932","\u092E\u0908","\u091C\u0942\u0928","\u091C\u0942\u0932\u093E\u0908","\u0905\u0917\u0938\u094D\u0924 ","\u0938\u093F\u0924\u092E\u094D\u092C\u0930","\u0905\u0915\u094D\u091F\u0942\u092C\u0930","\u0928\u0935\u092E\u094D\u092C\u0930","\u0926\u093F\u0938\u092E\u094D\u092C\u0930"]}};mE.l10ns.hi=yp;var $4=mE.l10ns;var pE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},vp={firstDayOfWeek:1,weekdays:{shorthand:["Ned","Pon","Uto","Sri","\u010Cet","Pet","Sub"],longhand:["Nedjelja","Ponedjeljak","Utorak","Srijeda","\u010Cetvrtak","Petak","Subota"]},months:{shorthand:["Sij","Velj","O\u017Eu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],longhand:["Sije\u010Danj","Velja\u010Da","O\u017Eujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"]},time_24hr:!0};pE.l10ns.hr=vp;var W4=pE.l10ns;var gE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},wp={firstDayOfWeek:1,weekdays:{shorthand:["V","H","K","Sz","Cs","P","Szo"],longhand:["Vas\xE1rnap","H\xE9tf\u0151","Kedd","Szerda","Cs\xFCt\xF6rt\xF6k","P\xE9ntek","Szombat"]},months:{shorthand:["Jan","Feb","M\xE1r","\xC1pr","M\xE1j","J\xFAn","J\xFAl","Aug","Szep","Okt","Nov","Dec"],longhand:["Janu\xE1r","Febru\xE1r","M\xE1rcius","\xC1prilis","M\xE1jus","J\xFAnius","J\xFAlius","Augusztus","Szeptember","Okt\xF3ber","November","December"]},ordinal:function(){return"."},weekAbbreviation:"H\xE9t",scrollTitle:"G\xF6rgessen",toggleTitle:"Kattintson a v\xE1lt\xE1shoz",rangeSeparator:" - ",time_24hr:!0};gE.l10ns.hu=wp;var z4=gE.l10ns;var yE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},bp={weekdays:{shorthand:["\u053F\u056B\u0580","\u0535\u0580\u056F","\u0535\u0580\u0584","\u0549\u0580\u0584","\u0540\u0576\u0563","\u0548\u0582\u0580\u0562","\u0547\u0562\u0569"],longhand:["\u053F\u056B\u0580\u0561\u056F\u056B","\u0535\u056F\u0578\u0582\u0577\u0561\u0562\u0569\u056B","\u0535\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056B","\u0549\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056B","\u0540\u056B\u0576\u0563\u0577\u0561\u0562\u0569\u056B","\u0548\u0582\u0580\u0562\u0561\u0569","\u0547\u0561\u0562\u0561\u0569"]},months:{shorthand:["\u0540\u0576\u057E","\u0553\u057F\u0580","\u0544\u0561\u0580","\u0531\u057A\u0580","\u0544\u0561\u0575","\u0540\u0576\u057D","\u0540\u056C\u057D","\u0555\u0563\u057D","\u054D\u0565\u057A","\u0540\u0578\u056F","\u0546\u0574\u0562","\u0534\u0565\u056F"],longhand:["\u0540\u0578\u0582\u0576\u057E\u0561\u0580","\u0553\u0565\u057F\u0580\u057E\u0561\u0580","\u0544\u0561\u0580\u057F","\u0531\u057A\u0580\u056B\u056C","\u0544\u0561\u0575\u056B\u057D","\u0540\u0578\u0582\u0576\u056B\u057D","\u0540\u0578\u0582\u056C\u056B\u057D","\u0555\u0563\u0578\u057D\u057F\u0578\u057D","\u054D\u0565\u057A\u057F\u0565\u0574\u0562\u0565\u0580","\u0540\u0578\u056F\u057F\u0565\u0574\u0562\u0565\u0580","\u0546\u0578\u0575\u0565\u0574\u0562\u0565\u0580","\u0534\u0565\u056F\u057F\u0565\u0574\u0562\u0565\u0580"]},firstDayOfWeek:1,ordinal:function(){return""},rangeSeparator:" \u2014 ",weekAbbreviation:"\u0547\u0532\u054F",scrollTitle:"\u0548\u056C\u0578\u0580\u0565\u0584\u055D \u0574\u0565\u056E\u0561\u0581\u0576\u0565\u056C\u0578\u0582 \u0570\u0561\u0574\u0561\u0580",toggleTitle:"\u054D\u0565\u0572\u0574\u0565\u0584\u055D \u0583\u0578\u056D\u0565\u056C\u0578\u0582 \u0570\u0561\u0574\u0561\u0580",amPM:["\u0544\u053F","\u053F\u0540"],yearAriaLabel:"\u054F\u0561\u0580\u056B",monthAriaLabel:"\u0531\u0574\u056B\u057D",hourAriaLabel:"\u053A\u0561\u0574",minuteAriaLabel:"\u0550\u0578\u057A\u0565",time_24hr:!0};yE.l10ns.hy=bp;var j4=yE.l10ns;var vE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Dp={weekdays:{shorthand:["Min","Sen","Sel","Rab","Kam","Jum","Sab"],longhand:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"]},months:{shorthand:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agu","Sep","Okt","Nov","Des"],longhand:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"]},firstDayOfWeek:1,ordinal:()=>"",time_24hr:!0,rangeSeparator:" - "};vE.l10ns.id=Dp;var G4=vE.l10ns;var wE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Sp={weekdays:{shorthand:["Sun","M\xE1n","\xDEri","Mi\xF0","Fim","F\xF6s","Lau"],longhand:["Sunnudagur","M\xE1nudagur","\xDEri\xF0judagur","Mi\xF0vikudagur","Fimmtudagur","F\xF6studagur","Laugardagur"]},months:{shorthand:["Jan","Feb","Mar","Apr","Ma\xED","J\xFAn","J\xFAl","\xC1g\xFA","Sep","Okt","N\xF3v","Des"],longhand:["Jan\xFAar","Febr\xFAar","Mars","Apr\xEDl","Ma\xED","J\xFAn\xED","J\xFAl\xED","\xC1g\xFAst","September","Okt\xF3ber","N\xF3vember","Desember"]},ordinal:()=>".",firstDayOfWeek:1,rangeSeparator:" til ",weekAbbreviation:"vika",yearAriaLabel:"\xC1r",time_24hr:!0};wE.l10ns.is=Sp;var Z4=wE.l10ns;var bE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Ep={weekdays:{shorthand:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],longhand:["Domenica","Luned\xEC","Marted\xEC","Mercoled\xEC","Gioved\xEC","Venerd\xEC","Sabato"]},months:{shorthand:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],longhand:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"]},firstDayOfWeek:1,ordinal:()=>"\xB0",rangeSeparator:" al ",weekAbbreviation:"Se",scrollTitle:"Scrolla per aumentare",toggleTitle:"Clicca per cambiare",time_24hr:!0};bE.l10ns.it=Ep;var X4=bE.l10ns;var DE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},kp={weekdays:{shorthand:["\u65E5","\u6708","\u706B","\u6C34","\u6728","\u91D1","\u571F"],longhand:["\u65E5\u66DC\u65E5","\u6708\u66DC\u65E5","\u706B\u66DC\u65E5","\u6C34\u66DC\u65E5","\u6728\u66DC\u65E5","\u91D1\u66DC\u65E5","\u571F\u66DC\u65E5"]},months:{shorthand:["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],longhand:["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"]},time_24hr:!0,rangeSeparator:" \u304B\u3089 ",monthAriaLabel:"\u6708",amPM:["\u5348\u524D","\u5348\u5F8C"],yearAriaLabel:"\u5E74",hourAriaLabel:"\u6642\u9593",minuteAriaLabel:"\u5206"};DE.l10ns.ja=kp;var tY=DE.l10ns;var SE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},xp={weekdays:{shorthand:["\u10D9\u10D5","\u10DD\u10E0","\u10E1\u10D0","\u10DD\u10D7","\u10EE\u10E3","\u10DE\u10D0","\u10E8\u10D0"],longhand:["\u10D9\u10D5\u10D8\u10E0\u10D0","\u10DD\u10E0\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8","\u10E1\u10D0\u10DB\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8","\u10DD\u10D7\u10EE\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8","\u10EE\u10E3\u10D7\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8","\u10DE\u10D0\u10E0\u10D0\u10E1\u10D9\u10D4\u10D5\u10D8","\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8"]},months:{shorthand:["\u10D8\u10D0\u10DC","\u10D7\u10D4\u10D1","\u10DB\u10D0\u10E0","\u10D0\u10DE\u10E0","\u10DB\u10D0\u10D8","\u10D8\u10D5\u10DC","\u10D8\u10D5\u10DA","\u10D0\u10D2\u10D5","\u10E1\u10D4\u10E5","\u10DD\u10E5\u10E2","\u10DC\u10DD\u10D4","\u10D3\u10D4\u10D9"],longhand:["\u10D8\u10D0\u10DC\u10D5\u10D0\u10E0\u10D8","\u10D7\u10D4\u10D1\u10D4\u10E0\u10D5\u10D0\u10DA\u10D8","\u10DB\u10D0\u10E0\u10E2\u10D8","\u10D0\u10DE\u10E0\u10D8\u10DA\u10D8","\u10DB\u10D0\u10D8\u10E1\u10D8","\u10D8\u10D5\u10DC\u10D8\u10E1\u10D8","\u10D8\u10D5\u10DA\u10D8\u10E1\u10D8","\u10D0\u10D2\u10D5\u10D8\u10E1\u10E2\u10DD","\u10E1\u10D4\u10E5\u10E2\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8","\u10DD\u10E5\u10E2\u10DD\u10DB\u10D1\u10D4\u10E0\u10D8","\u10DC\u10DD\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8","\u10D3\u10D4\u10D9\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8"]},firstDayOfWeek:1,ordinal:function(){return""},rangeSeparator:" \u2014 ",weekAbbreviation:"\u10D9\u10D5.",scrollTitle:"\u10D3\u10D0\u10E1\u10E5\u10E0\u10DD\u10DA\u10D4\u10D7 \u10D2\u10D0\u10E1\u10D0\u10D3\u10D8\u10D3\u10D4\u10D1\u10DA\u10D0\u10D3",toggleTitle:"\u10D3\u10D0\u10D0\u10D9\u10DA\u10D8\u10D9\u10D4\u10D7 \u10D2\u10D0\u10D3\u10D0\u10E0\u10D7\u10D5\u10D8\u10E1\u10D7\u10D5\u10D8\u10E1",amPM:["AM","PM"],yearAriaLabel:"\u10EC\u10D4\u10DA\u10D8",time_24hr:!0};SE.l10ns.ka=xp;var rY=SE.l10ns;var EE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Cp={weekdays:{shorthand:["\u17A2\u17B6\u1791\u17B7\u178F\u17D2\u1799","\u1785\u1793\u17D2\u1791","\u17A2\u1784\u17D2\u1782\u17B6\u179A","\u1796\u17BB\u1792","\u1796\u17D2\u179A\u17A0\u179F.","\u179F\u17BB\u1780\u17D2\u179A","\u179F\u17C5\u179A\u17CD"],longhand:["\u17A2\u17B6\u1791\u17B7\u178F\u17D2\u1799","\u1785\u1793\u17D2\u1791","\u17A2\u1784\u17D2\u1782\u17B6\u179A","\u1796\u17BB\u1792","\u1796\u17D2\u179A\u17A0\u179F\u17D2\u1794\u178F\u17B7\u17CD","\u179F\u17BB\u1780\u17D2\u179A","\u179F\u17C5\u179A\u17CD"]},months:{shorthand:["\u1798\u1780\u179A\u17B6","\u1780\u17BB\u1798\u17D2\u1797\u17C7","\u1798\u17B8\u1793\u17B6","\u1798\u17C1\u179F\u17B6","\u17A7\u179F\u1797\u17B6","\u1798\u17B7\u1790\u17BB\u1793\u17B6","\u1780\u1780\u17D2\u1780\u178A\u17B6","\u179F\u17B8\u17A0\u17B6","\u1780\u1789\u17D2\u1789\u17B6","\u178F\u17BB\u179B\u17B6","\u179C\u17B7\u1785\u17D2\u1786\u17B7\u1780\u17B6","\u1792\u17D2\u1793\u17BC"],longhand:["\u1798\u1780\u179A\u17B6","\u1780\u17BB\u1798\u17D2\u1797\u17C7","\u1798\u17B8\u1793\u17B6","\u1798\u17C1\u179F\u17B6","\u17A7\u179F\u1797\u17B6","\u1798\u17B7\u1790\u17BB\u1793\u17B6","\u1780\u1780\u17D2\u1780\u178A\u17B6","\u179F\u17B8\u17A0\u17B6","\u1780\u1789\u17D2\u1789\u17B6","\u178F\u17BB\u179B\u17B6","\u179C\u17B7\u1785\u17D2\u1786\u17B7\u1780\u17B6","\u1792\u17D2\u1793\u17BC"]},ordinal:()=>"",firstDayOfWeek:1,rangeSeparator:" \u178A\u179B\u17CB ",weekAbbreviation:"\u179F\u1794\u17D2\u178F\u17B6\u17A0\u17CD",scrollTitle:"\u179A\u17C6\u1780\u17B7\u179B\u178A\u17BE\u1798\u17D2\u1794\u17B8\u1794\u1784\u17D2\u1780\u17BE\u1793",toggleTitle:"\u1785\u17BB\u1785\u178A\u17BE\u1798\u17D2\u1794\u17B8\u1795\u17D2\u179B\u17B6\u179F\u17CB\u1794\u17D2\u178A\u17BC\u179A",yearAriaLabel:"\u1786\u17D2\u1793\u17B6\u17C6",time_24hr:!0};EE.l10ns.km=Cp;var aY=EE.l10ns;var kE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},_p={weekdays:{shorthand:["\uC77C","\uC6D4","\uD654","\uC218","\uBAA9","\uAE08","\uD1A0"],longhand:["\uC77C\uC694\uC77C","\uC6D4\uC694\uC77C","\uD654\uC694\uC77C","\uC218\uC694\uC77C","\uBAA9\uC694\uC77C","\uAE08\uC694\uC77C","\uD1A0\uC694\uC77C"]},months:{shorthand:["1\uC6D4","2\uC6D4","3\uC6D4","4\uC6D4","5\uC6D4","6\uC6D4","7\uC6D4","8\uC6D4","9\uC6D4","10\uC6D4","11\uC6D4","12\uC6D4"],longhand:["1\uC6D4","2\uC6D4","3\uC6D4","4\uC6D4","5\uC6D4","6\uC6D4","7\uC6D4","8\uC6D4","9\uC6D4","10\uC6D4","11\uC6D4","12\uC6D4"]},ordinal:()=>"\uC77C",rangeSeparator:" ~ ",amPM:["\uC624\uC804","\uC624\uD6C4"]};kE.l10ns.ko=_p;var sY=kE.l10ns;var xE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Mp={weekdays:{shorthand:["\u0416\u0441","\u0414\u0441","\u0421c","\u0421\u0440","\u0411\u0441","\u0416\u043C","\u0421\u0431"],longhand:["\u0416\u0435\u043A\u0441\u0435\u043D\u0431i","\u0414\u04AF\u0439\u0441\u0435\u043D\u0431i","\u0421\u0435\u0439\u0441\u0435\u043D\u0431i","\u0421\u04D9\u0440\u0441\u0435\u043D\u0431i","\u0411\u0435\u0439\u0441\u0435\u043D\u0431i","\u0416\u04B1\u043C\u0430","\u0421\u0435\u043D\u0431i"]},months:{shorthand:["\u049A\u0430\u04A3","\u0410\u049B\u043F","\u041D\u0430\u0443","\u0421\u04D9\u0443","\u041C\u0430\u043C","\u041C\u0430\u0443","\u0428i\u043B","\u0422\u0430\u043C","\u049A\u044B\u0440","\u049A\u0430\u0437","\u049A\u0430\u0440","\u0416\u0435\u043B"],longhand:["\u049A\u0430\u04A3\u0442\u0430\u0440","\u0410\u049B\u043F\u0430\u043D","\u041D\u0430\u0443\u0440\u044B\u0437","\u0421\u04D9\u0443i\u0440","\u041C\u0430\u043C\u044B\u0440","\u041C\u0430\u0443\u0441\u044B\u043C","\u0428i\u043B\u0434\u0435","\u0422\u0430\u043C\u044B\u0437","\u049A\u044B\u0440\u043A\u04AF\u0439\u0435\u043A","\u049A\u0430\u0437\u0430\u043D","\u049A\u0430\u0440\u0430\u0448\u0430","\u0416\u0435\u043B\u0442\u043E\u049B\u0441\u0430\u043D"]},firstDayOfWeek:1,ordinal:function(){return""},rangeSeparator:" \u2014 ",weekAbbreviation:"\u0410\u043F\u0442\u0430",scrollTitle:"\u04AE\u043B\u043A\u0435\u0439\u0442\u0443 \u04AF\u0448\u0456\u043D \u0430\u0439\u043D\u0430\u043B\u0434\u044B\u0440\u044B\u04A3\u044B\u0437",toggleTitle:"\u0410\u0443\u044B\u0441\u0442\u044B\u0440\u0443 \u04AF\u0448\u0456\u043D \u0431\u0430\u0441\u044B\u04A3\u044B\u0437",amPM:["\u0422\u0414","\u0422\u041A"],yearAriaLabel:"\u0416\u044B\u043B"};xE.l10ns.kz=Mp;var uY=xE.l10ns;var CE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Tp={weekdays:{shorthand:["S","Pr","A","T","K","Pn","\u0160"],longhand:["Sekmadienis","Pirmadienis","Antradienis","Tre\u010Diadienis","Ketvirtadienis","Penktadienis","\u0160e\u0161tadienis"]},months:{shorthand:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rgp","Rgs","Spl","Lap","Grd"],longhand:["Sausis","Vasaris","Kovas","Balandis","Gegu\u017E\u0117","Bir\u017Eelis","Liepa","Rugpju\u0304tis","Rugse\u0307jis","Spalis","Lapkritis","Gruodis"]},firstDayOfWeek:1,ordinal:function(){return"-a"},rangeSeparator:" iki ",weekAbbreviation:"Sav",scrollTitle:"Keisti laik\u0105 pel\u0117s rateliu",toggleTitle:"Perjungti laiko format\u0105",time_24hr:!0};CE.l10ns.lt=Tp;var dY=CE.l10ns;var _E=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Fp={firstDayOfWeek:1,weekdays:{shorthand:["Sv","Pr","Ot","Tr","Ce","Pk","Se"],longhand:["Sv\u0113tdiena","Pirmdiena","Otrdiena","Tre\u0161diena","Ceturtdiena","Piektdiena","Sestdiena"]},months:{shorthand:["Jan","Feb","Mar","Apr","Mai","J\u016Bn","J\u016Bl","Aug","Sep","Okt","Nov","Dec"],longhand:["Janv\u0101ris","Febru\u0101ris","Marts","Apr\u012Blis","Maijs","J\u016Bnijs","J\u016Blijs","Augusts","Septembris","Oktobris","Novembris","Decembris"]},rangeSeparator:" l\u012Bdz ",time_24hr:!0};_E.l10ns.lv=Fp;var hY=_E.l10ns;var ME=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Ip={weekdays:{shorthand:["\u041D\u0435","\u041F\u043E","\u0412\u0442","\u0421\u0440","\u0427\u0435","\u041F\u0435","\u0421\u0430"],longhand:["\u041D\u0435\u0434\u0435\u043B\u0430","\u041F\u043E\u043D\u0435\u0434\u0435\u043B\u043D\u0438\u043A","\u0412\u0442\u043E\u0440\u043D\u0438\u043A","\u0421\u0440\u0435\u0434\u0430","\u0427\u0435\u0442\u0432\u0440\u0442\u043E\u043A","\u041F\u0435\u0442\u043E\u043A","\u0421\u0430\u0431\u043E\u0442\u0430"]},months:{shorthand:["\u0408\u0430\u043D","\u0424\u0435\u0432","\u041C\u0430\u0440","\u0410\u043F\u0440","\u041C\u0430\u0458","\u0408\u0443\u043D","\u0408\u0443\u043B","\u0410\u0432\u0433","\u0421\u0435\u043F","\u041E\u043A\u0442","\u041D\u043E\u0435","\u0414\u0435\u043A"],longhand:["\u0408\u0430\u043D\u0443\u0430\u0440\u0438","\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438","\u041C\u0430\u0440\u0442","\u0410\u043F\u0440\u0438\u043B","\u041C\u0430\u0458","\u0408\u0443\u043D\u0438","\u0408\u0443\u043B\u0438","\u0410\u0432\u0433\u0443\u0441\u0442","\u0421\u0435\u043F\u0442\u0435\u043C\u0432\u0440\u0438","\u041E\u043A\u0442\u043E\u043C\u0432\u0440\u0438","\u041D\u043E\u0435\u043C\u0432\u0440\u0438","\u0414\u0435\u043A\u0435\u043C\u0432\u0440\u0438"]},firstDayOfWeek:1,weekAbbreviation:"\u041D\u0435\u0434.",rangeSeparator:" \u0434\u043E ",time_24hr:!0};ME.l10ns.mk=Ip;var pY=ME.l10ns;var TE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Ap={firstDayOfWeek:1,weekdays:{shorthand:["\u0414\u0430","\u041C\u044F","\u041B\u0445","\u041F\u04AF","\u0411\u0430","\u0411\u044F","\u041D\u044F"],longhand:["\u0414\u0430\u0432\u0430\u0430","\u041C\u044F\u0433\u043C\u0430\u0440","\u041B\u0445\u0430\u0433\u0432\u0430","\u041F\u04AF\u0440\u044D\u0432","\u0411\u0430\u0430\u0441\u0430\u043D","\u0411\u044F\u043C\u0431\u0430","\u041D\u044F\u043C"]},months:{shorthand:["1-\u0440 \u0441\u0430\u0440","2-\u0440 \u0441\u0430\u0440","3-\u0440 \u0441\u0430\u0440","4-\u0440 \u0441\u0430\u0440","5-\u0440 \u0441\u0430\u0440","6-\u0440 \u0441\u0430\u0440","7-\u0440 \u0441\u0430\u0440","8-\u0440 \u0441\u0430\u0440","9-\u0440 \u0441\u0430\u0440","10-\u0440 \u0441\u0430\u0440","11-\u0440 \u0441\u0430\u0440","12-\u0440 \u0441\u0430\u0440"],longhand:["\u041D\u044D\u0433\u0434\u04AF\u0433\u044D\u044D\u0440 \u0441\u0430\u0440","\u0425\u043E\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440","\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440","\u0414\u04E9\u0440\u04E9\u0432\u0434\u04AF\u0433\u044D\u044D\u0440 \u0441\u0430\u0440","\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440","\u0417\u0443\u0440\u0433\u0430\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440","\u0414\u043E\u043B\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440","\u041D\u0430\u0439\u043C\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440","\u0415\u0441\u0434\u04AF\u0433\u044D\u044D\u0440 \u0441\u0430\u0440","\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440","\u0410\u0440\u0432\u0430\u043D\u043D\u044D\u0433\u0434\u04AF\u0433\u044D\u044D\u0440 \u0441\u0430\u0440","\u0410\u0440\u0432\u0430\u043D\u0445\u043E\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440"]},rangeSeparator:"-\u0441 ",time_24hr:!0};TE.l10ns.mn=Ap;var yY=TE.l10ns;var tN=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},FE={weekdays:{shorthand:["Aha","Isn","Sel","Rab","Kha","Jum","Sab"],longhand:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"]},months:{shorthand:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],longhand:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"]},firstDayOfWeek:1,ordinal:()=>""},wY=tN.l10ns;var IE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Op={weekdays:{shorthand:["\u1014\u103D\u1031","\u101C\u102C","\u1002\u102B","\u101F\u1030\u1038","\u1000\u103C\u102C","\u101E\u1031\u102C","\u1014\u1031"],longhand:["\u1010\u1014\u1004\u103A\u1039\u1002\u1014\u103D\u1031","\u1010\u1014\u1004\u103A\u1039\u101C\u102C","\u1021\u1004\u103A\u1039\u1002\u102B","\u1017\u102F\u1012\u1039\u1013\u101F\u1030\u1038","\u1000\u103C\u102C\u101E\u1015\u1010\u1031\u1038","\u101E\u1031\u102C\u1000\u103C\u102C","\u1005\u1014\u1031"]},months:{shorthand:["\u1007\u1014\u103A","\u1016\u1031","\u1019\u1010\u103A","\u1015\u103C\u102E","\u1019\u1031","\u1007\u103D\u1014\u103A","\u101C\u102D\u102F\u1004\u103A","\u101E\u103C","\u1005\u1000\u103A","\u1021\u1031\u102C\u1000\u103A","\u1014\u102D\u102F","\u1012\u102E"],longhand:["\u1007\u1014\u103A\u1014\u101D\u102B\u101B\u102E","\u1016\u1031\u1016\u1031\u102C\u103A\u101D\u102B\u101B\u102E","\u1019\u1010\u103A","\u1027\u1015\u103C\u102E","\u1019\u1031","\u1007\u103D\u1014\u103A","\u1007\u1030\u101C\u102D\u102F\u1004\u103A","\u101E\u103C\u1002\u102F\u1010\u103A","\u1005\u1000\u103A\u1010\u1004\u103A\u1018\u102C","\u1021\u1031\u102C\u1000\u103A\u1010\u102D\u102F\u1018\u102C","\u1014\u102D\u102F\u101D\u1004\u103A\u1018\u102C","\u1012\u102E\u1007\u1004\u103A\u1018\u102C"]},firstDayOfWeek:1,ordinal:()=>"",time_24hr:!0};IE.l10ns.my=Op;var DY=IE.l10ns;var AE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Lp={weekdays:{shorthand:["zo","ma","di","wo","do","vr","za"],longhand:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"]},months:{shorthand:["jan","feb","mrt","apr","mei","jun","jul","aug","sept","okt","nov","dec"],longhand:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"]},firstDayOfWeek:1,weekAbbreviation:"wk",rangeSeparator:" t/m ",scrollTitle:"Scroll voor volgende / vorige",toggleTitle:"Klik om te wisselen",time_24hr:!0,ordinal:e=>e===1||e===8||e>=20?"ste":"de"};AE.l10ns.nl=Lp;var EY=AE.l10ns;var OE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Pp={weekdays:{shorthand:["S\xF8.","M\xE5.","Ty.","On.","To.","Fr.","La."],longhand:["S\xF8ndag","M\xE5ndag","Tysdag","Onsdag","Torsdag","Fredag","Laurdag"]},months:{shorthand:["Jan","Feb","Mars","Apr","Mai","Juni","Juli","Aug","Sep","Okt","Nov","Des"],longhand:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"]},firstDayOfWeek:1,rangeSeparator:" til ",weekAbbreviation:"Veke",scrollTitle:"Scroll for \xE5 endre",toggleTitle:"Klikk for \xE5 veksle",time_24hr:!0,ordinal:()=>"."};OE.l10ns.nn=Pp;var xY=OE.l10ns;var LE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Np={weekdays:{shorthand:["S\xF8n","Man","Tir","Ons","Tor","Fre","L\xF8r"],longhand:["S\xF8ndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","L\xF8rdag"]},months:{shorthand:["Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Des"],longhand:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"]},firstDayOfWeek:1,rangeSeparator:" til ",weekAbbreviation:"Uke",scrollTitle:"Scroll for \xE5 endre",toggleTitle:"Klikk for \xE5 veksle",time_24hr:!0,ordinal:()=>"."};LE.l10ns.no=Np;var _Y=LE.l10ns;var PE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Rp={weekdays:{shorthand:["\u0A10\u0A24","\u0A38\u0A4B\u0A2E","\u0A2E\u0A70\u0A17\u0A32","\u0A2C\u0A41\u0A71\u0A27","\u0A35\u0A40\u0A30","\u0A38\u0A3C\u0A41\u0A71\u0A15\u0A30","\u0A38\u0A3C\u0A28\u0A3F\u0A71\u0A1A\u0A30"],longhand:["\u0A10\u0A24\u0A35\u0A3E\u0A30","\u0A38\u0A4B\u0A2E\u0A35\u0A3E\u0A30","\u0A2E\u0A70\u0A17\u0A32\u0A35\u0A3E\u0A30","\u0A2C\u0A41\u0A71\u0A27\u0A35\u0A3E\u0A30","\u0A35\u0A40\u0A30\u0A35\u0A3E\u0A30","\u0A38\u0A3C\u0A41\u0A71\u0A15\u0A30\u0A35\u0A3E\u0A30","\u0A38\u0A3C\u0A28\u0A3F\u0A71\u0A1A\u0A30\u0A35\u0A3E\u0A30"]},months:{shorthand:["\u0A1C\u0A28","\u0A2B\u0A3C\u0A30","\u0A2E\u0A3E\u0A30","\u0A05\u0A2A\u0A4D\u0A30\u0A48","\u0A2E\u0A08","\u0A1C\u0A42\u0A28","\u0A1C\u0A41\u0A32\u0A3E","\u0A05\u0A17","\u0A38\u0A24\u0A70","\u0A05\u0A15","\u0A28\u0A35\u0A70","\u0A26\u0A38\u0A70"],longhand:["\u0A1C\u0A28\u0A35\u0A30\u0A40","\u0A2B\u0A3C\u0A30\u0A35\u0A30\u0A40","\u0A2E\u0A3E\u0A30\u0A1A","\u0A05\u0A2A\u0A4D\u0A30\u0A48\u0A32","\u0A2E\u0A08","\u0A1C\u0A42\u0A28","\u0A1C\u0A41\u0A32\u0A3E\u0A08","\u0A05\u0A17\u0A38\u0A24","\u0A38\u0A24\u0A70\u0A2C\u0A30","\u0A05\u0A15\u0A24\u0A42\u0A2C\u0A30","\u0A28\u0A35\u0A70\u0A2C\u0A30","\u0A26\u0A38\u0A70\u0A2C\u0A30"]},time_24hr:!0};PE.l10ns.pa=Rp;var TY=PE.l10ns;var NE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Hp={weekdays:{shorthand:["Nd","Pn","Wt","\u015Ar","Cz","Pt","So"],longhand:["Niedziela","Poniedzia\u0142ek","Wtorek","\u015Aroda","Czwartek","Pi\u0105tek","Sobota"]},months:{shorthand:["Sty","Lut","Mar","Kwi","Maj","Cze","Lip","Sie","Wrz","Pa\u017A","Lis","Gru"],longhand:["Stycze\u0144","Luty","Marzec","Kwiecie\u0144","Maj","Czerwiec","Lipiec","Sierpie\u0144","Wrzesie\u0144","Pa\u017Adziernik","Listopad","Grudzie\u0144"]},rangeSeparator:" do ",weekAbbreviation:"tydz.",scrollTitle:"Przewi\u0144, aby zwi\u0119kszy\u0107",toggleTitle:"Kliknij, aby prze\u0142\u0105czy\u0107",firstDayOfWeek:1,time_24hr:!0,ordinal:()=>"."};NE.l10ns.pl=Hp;var IY=NE.l10ns;var RE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Bp={weekdays:{shorthand:["Dom","Seg","Ter","Qua","Qui","Sex","S\xE1b"],longhand:["Domingo","Segunda-feira","Ter\xE7a-feira","Quarta-feira","Quinta-feira","Sexta-feira","S\xE1bado"]},months:{shorthand:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],longhand:["Janeiro","Fevereiro","Mar\xE7o","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"]},rangeSeparator:" at\xE9 ",time_24hr:!0};RE.l10ns.pt=Bp;var OY=RE.l10ns;var HE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Vp={weekdays:{shorthand:["Dum","Lun","Mar","Mie","Joi","Vin","S\xE2m"],longhand:["Duminic\u0103","Luni","Mar\u021Bi","Miercuri","Joi","Vineri","S\xE2mb\u0103t\u0103"]},months:{shorthand:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Noi","Dec"],longhand:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"]},firstDayOfWeek:1,time_24hr:!0,ordinal:()=>""};HE.l10ns.ro=Vp;var PY=HE.l10ns;var BE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},$p={weekdays:{shorthand:["\u0412\u0441","\u041F\u043D","\u0412\u0442","\u0421\u0440","\u0427\u0442","\u041F\u0442","\u0421\u0431"],longhand:["\u0412\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435","\u041F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A","\u0412\u0442\u043E\u0440\u043D\u0438\u043A","\u0421\u0440\u0435\u0434\u0430","\u0427\u0435\u0442\u0432\u0435\u0440\u0433","\u041F\u044F\u0442\u043D\u0438\u0446\u0430","\u0421\u0443\u0431\u0431\u043E\u0442\u0430"]},months:{shorthand:["\u042F\u043D\u0432","\u0424\u0435\u0432","\u041C\u0430\u0440\u0442","\u0410\u043F\u0440","\u041C\u0430\u0439","\u0418\u044E\u043D\u044C","\u0418\u044E\u043B\u044C","\u0410\u0432\u0433","\u0421\u0435\u043D","\u041E\u043A\u0442","\u041D\u043E\u044F","\u0414\u0435\u043A"],longhand:["\u042F\u043D\u0432\u0430\u0440\u044C","\u0424\u0435\u0432\u0440\u0430\u043B\u044C","\u041C\u0430\u0440\u0442","\u0410\u043F\u0440\u0435\u043B\u044C","\u041C\u0430\u0439","\u0418\u044E\u043D\u044C","\u0418\u044E\u043B\u044C","\u0410\u0432\u0433\u0443\u0441\u0442","\u0421\u0435\u043D\u0442\u044F\u0431\u0440\u044C","\u041E\u043A\u0442\u044F\u0431\u0440\u044C","\u041D\u043E\u044F\u0431\u0440\u044C","\u0414\u0435\u043A\u0430\u0431\u0440\u044C"]},firstDayOfWeek:1,ordinal:function(){return""},rangeSeparator:" \u2014 ",weekAbbreviation:"\u041D\u0435\u0434.",scrollTitle:"\u041F\u0440\u043E\u043A\u0440\u0443\u0442\u0438\u0442\u0435 \u0434\u043B\u044F \u0443\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u0438\u044F",toggleTitle:"\u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u0434\u043B\u044F \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F",amPM:["\u0414\u041F","\u041F\u041F"],yearAriaLabel:"\u0413\u043E\u0434",time_24hr:!0};BE.l10ns.ru=$p;var RY=BE.l10ns;var VE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Up={weekdays:{shorthand:["\u0D89","\u0DC3","\u0D85","\u0DB6","\u0DB6\u0DCA\u200D\u0DBB","\u0DC3\u0DD2","\u0DC3\u0DD9"],longhand:["\u0D89\u0DBB\u0DD2\u0DAF\u0DCF","\u0DC3\u0DB3\u0DD4\u0DAF\u0DCF","\u0D85\u0D9F\u0DC4\u0DBB\u0DD4\u0DC0\u0DCF\u0DAF\u0DCF","\u0DB6\u0DAF\u0DCF\u0DAF\u0DCF","\u0DB6\u0DCA\u200D\u0DBB\u0DC4\u0DC3\u0DCA\u0DB4\u0DAD\u0DD2\u0DB1\u0DCA\u0DAF\u0DCF","\u0DC3\u0DD2\u0D9A\u0DD4\u0DBB\u0DCF\u0DAF\u0DCF","\u0DC3\u0DD9\u0DB1\u0DC3\u0DD4\u0DBB\u0DCF\u0DAF\u0DCF"]},months:{shorthand:["\u0DA2\u0DB1","\u0DB4\u0DD9\u0DB6","\u0DB8\u0DCF\u0DBB\u0DCA","\u0D85\u0DB4\u0DCA\u200D\u0DBB\u0DDA","\u0DB8\u0DD0\u0DBA\u0DD2","\u0DA2\u0DD4\u0DB1\u0DD2","\u0DA2\u0DD6\u0DBD\u0DD2","\u0D85\u0D9C\u0DDD","\u0DC3\u0DD0\u0DB4\u0DCA","\u0D94\u0D9A\u0DCA","\u0DB1\u0DDC\u0DC0\u0DD0","\u0DAF\u0DD9\u0DC3\u0DD0"],longhand:["\u0DA2\u0DB1\u0DC0\u0DCF\u0DBB\u0DD2","\u0DB4\u0DD9\u0DB6\u0DBB\u0DC0\u0DCF\u0DBB\u0DD2","\u0DB8\u0DCF\u0DBB\u0DCA\u0DAD\u0DD4","\u0D85\u0DB4\u0DCA\u200D\u0DBB\u0DDA\u0DBD\u0DCA","\u0DB8\u0DD0\u0DBA\u0DD2","\u0DA2\u0DD4\u0DB1\u0DD2","\u0DA2\u0DD6\u0DBD\u0DD2","\u0D85\u0D9C\u0DDD\u0DC3\u0DCA\u0DAD\u0DD4","\u0DC3\u0DD0\u0DB4\u0DCA\u0DAD\u0DD0\u0DB8\u0DCA\u0DB6\u0DBB\u0DCA","\u0D94\u0D9A\u0DCA\u0DAD\u0DDD\u0DB6\u0DBB\u0DCA","\u0DB1\u0DDC\u0DC0\u0DD0\u0DB8\u0DCA\u0DB6\u0DBB\u0DCA","\u0DAF\u0DD9\u0DC3\u0DD0\u0DB8\u0DCA\u0DB6\u0DBB\u0DCA"]},time_24hr:!0};VE.l10ns.si=Up;var BY=VE.l10ns;var $E=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Wp={weekdays:{shorthand:["Ned","Pon","Ut","Str","\u0160tv","Pia","Sob"],longhand:["Nede\u013Ea","Pondelok","Utorok","Streda","\u0160tvrtok","Piatok","Sobota"]},months:{shorthand:["Jan","Feb","Mar","Apr","M\xE1j","J\xFAn","J\xFAl","Aug","Sep","Okt","Nov","Dec"],longhand:["Janu\xE1r","Febru\xE1r","Marec","Apr\xEDl","M\xE1j","J\xFAn","J\xFAl","August","September","Okt\xF3ber","November","December"]},firstDayOfWeek:1,rangeSeparator:" do ",time_24hr:!0,ordinal:function(){return"."}};$E.l10ns.sk=Wp;var $Y=$E.l10ns;var UE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Yp={weekdays:{shorthand:["Ned","Pon","Tor","Sre","\u010Cet","Pet","Sob"],longhand:["Nedelja","Ponedeljek","Torek","Sreda","\u010Cetrtek","Petek","Sobota"]},months:{shorthand:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],longhand:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"]},firstDayOfWeek:1,rangeSeparator:" do ",time_24hr:!0,ordinal:function(){return"."}};UE.l10ns.sl=Yp;var WY=UE.l10ns;var WE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},zp={weekdays:{shorthand:["Di","H\xEB","Ma","M\xEB","En","Pr","Sh"],longhand:["E Diel","E H\xEBn\xEB","E Mart\xEB","E M\xEBrkur\xEB","E Enjte","E Premte","E Shtun\xEB"]},months:{shorthand:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gus","Sht","Tet","N\xEBn","Dhj"],longhand:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","N\xEBntor","Dhjetor"]},firstDayOfWeek:1,rangeSeparator:" deri ",weekAbbreviation:"Java",yearAriaLabel:"Viti",monthAriaLabel:"Muaji",hourAriaLabel:"Ora",minuteAriaLabel:"Minuta",time_24hr:!0};WE.l10ns.sq=zp;var zY=WE.l10ns;var YE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Kp={weekdays:{shorthand:["Ned","Pon","Uto","Sre","\u010Cet","Pet","Sub"],longhand:["Nedelja","Ponedeljak","Utorak","Sreda","\u010Cetvrtak","Petak","Subota"]},months:{shorthand:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],longhand:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"]},firstDayOfWeek:1,weekAbbreviation:"Ned.",rangeSeparator:" do ",time_24hr:!0};YE.l10ns.sr=Kp;var jY=YE.l10ns;var zE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},jp={firstDayOfWeek:1,weekAbbreviation:"v",weekdays:{shorthand:["s\xF6n","m\xE5n","tis","ons","tor","fre","l\xF6r"],longhand:["s\xF6ndag","m\xE5ndag","tisdag","onsdag","torsdag","fredag","l\xF6rdag"]},months:{shorthand:["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],longhand:["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"]},rangeSeparator:" till ",time_24hr:!0,ordinal:()=>"."};zE.l10ns.sv=jp;var GY=zE.l10ns;var KE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},qp={weekdays:{shorthand:["\u0E2D\u0E32","\u0E08","\u0E2D","\u0E1E","\u0E1E\u0E24","\u0E28","\u0E2A"],longhand:["\u0E2D\u0E32\u0E17\u0E34\u0E15\u0E22\u0E4C","\u0E08\u0E31\u0E19\u0E17\u0E23\u0E4C","\u0E2D\u0E31\u0E07\u0E04\u0E32\u0E23","\u0E1E\u0E38\u0E18","\u0E1E\u0E24\u0E2B\u0E31\u0E2A\u0E1A\u0E14\u0E35","\u0E28\u0E38\u0E01\u0E23\u0E4C","\u0E40\u0E2A\u0E32\u0E23\u0E4C"]},months:{shorthand:["\u0E21.\u0E04.","\u0E01.\u0E1E.","\u0E21\u0E35.\u0E04.","\u0E40\u0E21.\u0E22.","\u0E1E.\u0E04.","\u0E21\u0E34.\u0E22.","\u0E01.\u0E04.","\u0E2A.\u0E04.","\u0E01.\u0E22.","\u0E15.\u0E04.","\u0E1E.\u0E22.","\u0E18.\u0E04."],longhand:["\u0E21\u0E01\u0E23\u0E32\u0E04\u0E21","\u0E01\u0E38\u0E21\u0E20\u0E32\u0E1E\u0E31\u0E19\u0E18\u0E4C","\u0E21\u0E35\u0E19\u0E32\u0E04\u0E21","\u0E40\u0E21\u0E29\u0E32\u0E22\u0E19","\u0E1E\u0E24\u0E29\u0E20\u0E32\u0E04\u0E21","\u0E21\u0E34\u0E16\u0E38\u0E19\u0E32\u0E22\u0E19","\u0E01\u0E23\u0E01\u0E0E\u0E32\u0E04\u0E21","\u0E2A\u0E34\u0E07\u0E2B\u0E32\u0E04\u0E21","\u0E01\u0E31\u0E19\u0E22\u0E32\u0E22\u0E19","\u0E15\u0E38\u0E25\u0E32\u0E04\u0E21","\u0E1E\u0E24\u0E28\u0E08\u0E34\u0E01\u0E32\u0E22\u0E19","\u0E18\u0E31\u0E19\u0E27\u0E32\u0E04\u0E21"]},firstDayOfWeek:1,rangeSeparator:" \u0E16\u0E36\u0E07 ",scrollTitle:"\u0E40\u0E25\u0E37\u0E48\u0E2D\u0E19\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E2B\u0E23\u0E37\u0E2D\u0E25\u0E14",toggleTitle:"\u0E04\u0E25\u0E34\u0E01\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19",time_24hr:!0,ordinal:()=>""};KE.l10ns.th=qp;var ZY=KE.l10ns;var jE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Gp={weekdays:{shorthand:["Paz","Pzt","Sal","\xC7ar","Per","Cum","Cmt"],longhand:["Pazar","Pazartesi","Sal\u0131","\xC7ar\u015Famba","Per\u015Fembe","Cuma","Cumartesi"]},months:{shorthand:["Oca","\u015Eub","Mar","Nis","May","Haz","Tem","A\u011Fu","Eyl","Eki","Kas","Ara"],longhand:["Ocak","\u015Eubat","Mart","Nisan","May\u0131s","Haziran","Temmuz","A\u011Fustos","Eyl\xFCl","Ekim","Kas\u0131m","Aral\u0131k"]},firstDayOfWeek:1,ordinal:()=>".",rangeSeparator:" - ",weekAbbreviation:"Hf",scrollTitle:"Art\u0131rmak i\xE7in kayd\u0131r\u0131n",toggleTitle:"A\xE7/Kapa",amPM:["\xD6\xD6","\xD6S"],time_24hr:!0};jE.l10ns.tr=Gp;var XY=jE.l10ns;var qE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Jp={firstDayOfWeek:1,weekdays:{shorthand:["\u041D\u0434","\u041F\u043D","\u0412\u0442","\u0421\u0440","\u0427\u0442","\u041F\u0442","\u0421\u0431"],longhand:["\u041D\u0435\u0434\u0456\u043B\u044F","\u041F\u043E\u043D\u0435\u0434\u0456\u043B\u043E\u043A","\u0412\u0456\u0432\u0442\u043E\u0440\u043E\u043A","\u0421\u0435\u0440\u0435\u0434\u0430","\u0427\u0435\u0442\u0432\u0435\u0440","\u041F'\u044F\u0442\u043D\u0438\u0446\u044F","\u0421\u0443\u0431\u043E\u0442\u0430"]},months:{shorthand:["\u0421\u0456\u0447","\u041B\u044E\u0442","\u0411\u0435\u0440","\u041A\u0432\u0456","\u0422\u0440\u0430","\u0427\u0435\u0440","\u041B\u0438\u043F","\u0421\u0435\u0440","\u0412\u0435\u0440","\u0416\u043E\u0432","\u041B\u0438\u0441","\u0413\u0440\u0443"],longhand:["\u0421\u0456\u0447\u0435\u043D\u044C","\u041B\u044E\u0442\u0438\u0439","\u0411\u0435\u0440\u0435\u0437\u0435\u043D\u044C","\u041A\u0432\u0456\u0442\u0435\u043D\u044C","\u0422\u0440\u0430\u0432\u0435\u043D\u044C","\u0427\u0435\u0440\u0432\u0435\u043D\u044C","\u041B\u0438\u043F\u0435\u043D\u044C","\u0421\u0435\u0440\u043F\u0435\u043D\u044C","\u0412\u0435\u0440\u0435\u0441\u0435\u043D\u044C","\u0416\u043E\u0432\u0442\u0435\u043D\u044C","\u041B\u0438\u0441\u0442\u043E\u043F\u0430\u0434","\u0413\u0440\u0443\u0434\u0435\u043D\u044C"]},time_24hr:!0};qE.l10ns.uk=Jp;var tz=qE.l10ns;var GE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Zp={weekdays:{shorthand:["\u042F\u043A\u0448","\u0414\u0443\u0448","\u0421\u0435\u0448","\u0427\u043E\u0440","\u041F\u0430\u0439","\u0416\u0443\u043C","\u0428\u0430\u043D"],longhand:["\u042F\u043A\u0448\u0430\u043D\u0431\u0430","\u0414\u0443\u0448\u0430\u043D\u0431\u0430","\u0421\u0435\u0448\u0430\u043D\u0431\u0430","\u0427\u043E\u0440\u0448\u0430\u043D\u0431\u0430","\u041F\u0430\u0439\u0448\u0430\u043D\u0431\u0430","\u0416\u0443\u043C\u0430","\u0428\u0430\u043D\u0431\u0430"]},months:{shorthand:["\u042F\u043D\u0432","\u0424\u0435\u0432","\u041C\u0430\u0440","\u0410\u043F\u0440","\u041C\u0430\u0439","\u0418\u044E\u043D","\u0418\u044E\u043B","\u0410\u0432\u0433","\u0421\u0435\u043D","\u041E\u043A\u0442","\u041D\u043E\u044F","\u0414\u0435\u043A"],longhand:["\u042F\u043D\u0432\u0430\u0440","\u0424\u0435\u0432\u0440\u0430\u043B","\u041C\u0430\u0440\u0442","\u0410\u043F\u0440\u0435\u043B","\u041C\u0430\u0439","\u0418\u044E\u043D","\u0418\u044E\u043B","\u0410\u0432\u0433\u0443\u0441\u0442","\u0421\u0435\u043D\u0442\u044F\u0431\u0440","\u041E\u043A\u0442\u044F\u0431\u0440","\u041D\u043E\u044F\u0431\u0440","\u0414\u0435\u043A\u0430\u0431\u0440"]},firstDayOfWeek:1,ordinal:function(){return""},rangeSeparator:" \u2014 ",weekAbbreviation:"\u04B2\u0430\u0444\u0442\u0430",scrollTitle:"\u041A\u0430\u0442\u0442\u0430\u043B\u0430\u0448\u0442\u0438\u0440\u0438\u0448 \u0443\u0447\u0443\u043D \u0430\u0439\u043B\u0430\u043D\u0442\u0438\u0440\u0438\u043D\u0433",toggleTitle:"\u040E\u0442\u0438\u0448 \u0443\u0447\u0443\u043D \u0431\u043E\u0441\u0438\u043D\u0433",amPM:["AM","PM"],yearAriaLabel:"\u0419\u0438\u043B",time_24hr:!0};GE.l10ns.uz=Zp;var rz=GE.l10ns;var JE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Qp={weekdays:{shorthand:["Ya","Du","Se","Cho","Pa","Ju","Sha"],longhand:["Yakshanba","Dushanba","Seshanba","Chorshanba","Payshanba","Juma","Shanba"]},months:{shorthand:["Yan","Fev","Mar","Apr","May","Iyun","Iyul","Avg","Sen","Okt","Noy","Dek"],longhand:["Yanvar","Fevral","Mart","Aprel","May","Iyun","Iyul","Avgust","Sentabr","Oktabr","Noyabr","Dekabr"]},firstDayOfWeek:1,ordinal:function(){return""},rangeSeparator:" \u2014 ",weekAbbreviation:"Hafta",scrollTitle:"Kattalashtirish uchun aylantiring",toggleTitle:"O\u2018tish uchun bosing",amPM:["AM","PM"],yearAriaLabel:"Yil",time_24hr:!0};JE.l10ns.uz_latn=Qp;var az=JE.l10ns;var ZE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},Xp={weekdays:{shorthand:["CN","T2","T3","T4","T5","T6","T7"],longhand:["Ch\u1EE7 nh\u1EADt","Th\u1EE9 hai","Th\u1EE9 ba","Th\u1EE9 t\u01B0","Th\u1EE9 n\u0103m","Th\u1EE9 s\xE1u","Th\u1EE9 b\u1EA3y"]},months:{shorthand:["Th1","Th2","Th3","Th4","Th5","Th6","Th7","Th8","Th9","Th10","Th11","Th12"],longhand:["Th\xE1ng m\u1ED9t","Th\xE1ng hai","Th\xE1ng ba","Th\xE1ng t\u01B0","Th\xE1ng n\u0103m","Th\xE1ng s\xE1u","Th\xE1ng b\u1EA3y","Th\xE1ng t\xE1m","Th\xE1ng ch\xEDn","Th\xE1ng m\u01B0\u1EDDi","Th\xE1ng m\u01B0\u1EDDi m\u1ED9t","Th\xE1ng m\u01B0\u1EDDi hai"]},firstDayOfWeek:1,rangeSeparator:" \u0111\u1EBFn "};ZE.l10ns.vn=Xp;var sz=ZE.l10ns;var QE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},eg={weekdays:{shorthand:["\u5468\u65E5","\u5468\u4E00","\u5468\u4E8C","\u5468\u4E09","\u5468\u56DB","\u5468\u4E94","\u5468\u516D"],longhand:["\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"]},months:{shorthand:["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"],longhand:["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"]},rangeSeparator:" \u81F3 ",weekAbbreviation:"\u5468",scrollTitle:"\u6EDA\u52A8\u5207\u6362",toggleTitle:"\u70B9\u51FB\u5207\u6362 12/24 \u5C0F\u65F6\u65F6\u5236"};QE.l10ns.zh=eg;var uz=QE.l10ns;var XE=typeof window!="undefined"&&window.flatpickr!==void 0?window.flatpickr:{l10ns:{}},tg={weekdays:{shorthand:["\u9031\u65E5","\u9031\u4E00","\u9031\u4E8C","\u9031\u4E09","\u9031\u56DB","\u9031\u4E94","\u9031\u516D"],longhand:["\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"]},months:{shorthand:["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"],longhand:["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"]},rangeSeparator:" \u81F3 ",weekAbbreviation:"\u9031",scrollTitle:"\u6EFE\u52D5\u5207\u63DB",toggleTitle:"\u9EDE\u64CA\u5207\u63DB 12/24 \u5C0F\u6642\u6642\u5236"};XE.l10ns.zh_tw=tg;var dz=XE.l10ns;var nN={ar:Gm,at:Jm,az:Zm,be:Qm,bg:Xm,bn:ep,bs:tp,ca:Wc,ckb:rp,cat:Wc,cs:ip,cy:ap,da:op,de:sp,default:{...so},en:so,eo:lp,es:up,et:cp,fa:dp,fi:fp,fo:hp,fr:mp,gr:pp,he:gp,hi:yp,hr:vp,hu:wp,hy:bp,id:Dp,is:Sp,it:Ep,ja:kp,ka:xp,ko:_p,km:Cp,kz:Mp,lt:Tp,lv:Fp,mk:Ip,mn:Ap,ms:FE,my:Op,nl:Lp,nn:Pp,no:Np,pa:Rp,pl:Hp,pt:Bp,ro:Vp,ru:$p,si:Up,sk:Wp,sl:Yp,sq:zp,sr:Kp,sv:jp,th:qp,tr:Gp,uk:Jp,vn:Xp,zh:eg,zh_tw:tg,uz:Zp,uz_latn:Qp},nn=nN;var tk={ar:nn.ar,cs:nn.cs,da:nn.da,de:nn.de,en:nn.en,"en-gb":nn.en,es:nn.es,fr:nn.fr,hi:nn.hi,id:nn.id,it:nn.it,ja:nn.ja,ko:nn.ko,nl:nn.nl,nn:nn.no,pl:nn.pl,pt:nn.pt,"pt-br":nn.pt,ro:nn.ro,ru:nn.ru,tr:nn.tr,"zh-cn":nn.zh,"zh-tw":nn.zh_tw},rN=tk[ek.moment.locale()];function zc(e){let t=e==null?void 0:e.getSetting("date-picker-week-start"),r=rN||tk.en;return t?{...r,firstDayOfWeek:t}:r}var Kc=["onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition"],ka={_disable:[],allowInput:!1,allowInvalidPreload:!1,altFormat:"F j, Y",altInput:!1,altInputClass:"form-control input",animate:typeof window=="object"&&window.navigator.userAgent.indexOf("MSIE")===-1,ariaDateFormat:"F j, Y",autoFillDefaultTime:!0,clickOpens:!0,closeOnSelect:!0,conjunction:", ",dateFormat:"Y-m-d",defaultHour:12,defaultMinute:0,defaultSeconds:0,disable:[],disableMobile:!1,enableSeconds:!1,enableTime:!1,errorHandler:e=>typeof console!="undefined"&&console.warn(e),getWeek:e=>{let t=new Date(e.getTime());t.setHours(0,0,0,0),t.setDate(t.getDate()+3-(t.getDay()+6)%7);let r=new Date(t.getFullYear(),0,4);return 1+Math.round(((t.getTime()-r.getTime())/864e5-3+(r.getDay()+6)%7)/7)},hourIncrement:1,ignoredFocusElements:[],inline:!1,locale:"default",minuteIncrement:5,mode:"single",monthSelectorType:"dropdown",nextArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1,win:window};var er=(e,t=2)=>`000${e}`.slice(t*-1),wr=e=>e===!0?1:0;function ng(e,t,r){let n;return function(){let i=arguments;r.clearTimeout(n),n=r.setTimeout(()=>e.apply(this,i),t)}}var jc=e=>Array.isArray(e)?e:[e];var rg=()=>{},Pl=(e,t,r)=>r.months[t?"shorthand":"longhand"][e],nk={D:rg,F:function(e,t,r){e.setMonth(r.months.longhand.indexOf(t))},G:(e,t)=>{e.setHours((e.getHours()>=12?12:0)+parseFloat(t))},H:(e,t)=>{e.setHours(parseFloat(t))},J:(e,t)=>{e.setDate(parseFloat(t))},K:(e,t,r)=>{e.setHours(e.getHours()%12+12*wr(new RegExp(r.amPM[1],"i").test(t)))},M:function(e,t,r){e.setMonth(r.months.shorthand.indexOf(t))},S:(e,t)=>{e.setSeconds(parseFloat(t))},U:(e,t)=>new Date(parseFloat(t)*1e3),W:function(e,t,r){let n=parseInt(t),i=new Date(e.getFullYear(),0,2+(n-1)*7,0,0,0,0);return i.setDate(i.getDate()-i.getDay()+r.firstDayOfWeek),i},Y:(e,t)=>{e.setFullYear(parseFloat(t))},Z:(e,t)=>new Date(t),d:(e,t)=>{e.setDate(parseFloat(t))},h:(e,t)=>{e.setHours((e.getHours()>=12?12:0)+parseFloat(t))},i:(e,t)=>{e.setMinutes(parseFloat(t))},j:(e,t)=>{e.setDate(parseFloat(t))},l:rg,m:(e,t)=>{e.setMonth(parseFloat(t)-1)},n:(e,t)=>{e.setMonth(parseFloat(t)-1)},s:(e,t)=>{e.setSeconds(parseFloat(t))},u:(e,t)=>new Date(parseFloat(t)),w:rg,y:(e,t)=>{e.setFullYear(2e3+parseFloat(t))}},Gi={D:"",F:"",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},ds={Z:e=>e.toISOString(),D:function(e,t,r){return t.weekdays.shorthand[ds.w(e,t,r)]},F:function(e,t,r){return Pl(ds.n(e,t,r)-1,!1,t)},G:function(e,t,r){return er(ds.h(e,t,r))},H:e=>er(e.getHours()),J:function(e,t){return t.ordinal!==void 0?e.getDate()+t.ordinal(e.getDate()):e.getDate()},K:(e,t)=>t.amPM[wr(e.getHours()>11)],M:function(e,t){return Pl(e.getMonth(),!0,t)},S:e=>er(e.getSeconds()),U:e=>e.getTime()/1e3,W:function(e,t,r){return r.getWeek(e)},Y:e=>er(e.getFullYear(),4),d:e=>er(e.getDate()),h:e=>e.getHours()%12?e.getHours()%12:12,i:e=>er(e.getMinutes()),j:e=>e.getDate(),l:function(e,t){return t.weekdays.longhand[e.getDay()]},m:e=>er(e.getMonth()+1),n:e=>e.getMonth()+1,s:e=>e.getSeconds(),u:e=>e.getTime(),w:e=>e.getDay(),y:e=>String(e.getFullYear()).substring(2)};var ig=({config:e=ka,l10n:t=so,isMobile:r=!1})=>(n,i,a)=>{let o=a||t;return e.formatDate!==void 0&&!r?e.formatDate(n,i,o):i.split("").map((s,u,l)=>ds[s]&&l[u-1]!=="\\"?ds[s](n,o,e):s!=="\\"?s:"").join("")},qc=({config:e=ka,l10n:t=so})=>(r,n,i,a)=>{if(r!==0&&!r)return;let o=a||t,s,u=r;if(r.getDate)s=new Date(r.getTime());else if(typeof r!="string"&&r.toFixed!==void 0)s=new Date(r);else if(typeof r=="string"){let l=n||(e||ka).dateFormat,c=String(r).trim();if(c==="today")s=new Date,i=!0;else if(e&&e.parseDate)s=e.parseDate(r,l);else if(/Z$/.test(c)||/GMT$/.test(c))s=new Date(r);else{let d,m=[];for(let h=0,g=0,y="";h<l.length;h++){let v=l[h],D=v==="\\",I=l[h-1]==="\\"||D;if(Gi[v]&&!I){y+=Gi[v];let C=new RegExp(y).exec(r);C&&(d=!0)&&m[v!=="Y"?"push":"unshift"]({fn:nk[v],val:C[++g]})}else D||(y+=".")}s=!e||!e.noCalendar?new Date(new Date().getFullYear(),0,1,0,0,0,0):new Date(new Date().setHours(0,0,0,0)),m.forEach(({fn:h,val:g})=>s=h(s,g,o)||s),s=d?s:void 0}}if(!(s.getDate&&!isNaN(s.getTime()))){e.errorHandler(new Error(`Invalid date provided: ${u}`));return}return i===!0&&s.setHours(0,0,0,0),s};function br(e,t,r=!0){return r!==!1?new Date(e.getTime()).setHours(0,0,0,0)-new Date(t.getTime()).setHours(0,0,0,0):e.getTime()-t.getTime()}var rk=(e,t,r)=>e>Math.min(t,r)&&e<Math.max(t,r),Gc=(e,t,r)=>e*3600+t*60+r,ik=e=>{let t=Math.floor(e/3600),r=(e-t*3600)/60;return[t,r,e-t*3600-r*60]},ak={DAY:864e5};function Jc(e){let t=e.defaultHour,r=e.defaultMinute,n=e.defaultSeconds;if(e.minDate!==void 0){let i=e.minDate.getHours(),a=e.minDate.getMinutes(),o=e.minDate.getSeconds();t<i&&(t=i),t===i&&r<a&&(r=a),t===i&&r===a&&n<o&&(n=e.minDate.getSeconds())}if(e.maxDate!==void 0){let i=e.maxDate.getHours(),a=e.maxDate.getMinutes();t=Math.min(t,i),t===i&&(r=Math.min(a,r)),t===i&&r===a&&(n=e.maxDate.getSeconds())}return{hours:t,minutes:r,seconds:n}}function tr(e,t,r){if(r===!0)return e.classList.add(t);e.classList.remove(t)}function Pt(e,t,r,n){let i=e.createElement(t);return r=r||"",n=n||"",i.className=r,n!==void 0&&(i.textContent=n),i}function Nl(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function ag(e,t){if(t(e))return e;if(e.parentNode)return ag(e.parentNode,t)}function Rl(e,t,r){let n=Pt(e,"div","numInputWrapper"),i=Pt(e,"input","numInput "+t),a=Pt(e,"span","arrowUp"),o=Pt(e,"span","arrowDown");if(navigator.userAgent.indexOf("MSIE 9.0")===-1?i.type="number":(i.type="text",i.pattern="\\d*"),r!==void 0)for(let s in r)i.setAttribute(s,r[s]);return n.appendChild(i),n.appendChild(a),n.appendChild(o),n}function Dr(e){try{return typeof e.composedPath=="function"?e.composedPath()[0]:e.target}catch(t){return e.target}}var iN=300;function aN(e,t){let r=e.win||window,n={config:{...ka,...Fn.defaultConfig},l10n:Yc};n.parseDate=qc({config:n.config,l10n:n.l10n}),n._handlers=[],n.pluginElements=[],n.loadedPlugins=[],n._bind=v,n._setHoursFromDate=h,n._positionCalendar=Vt,n.changeMonth=it,n.changeYear=vt,n.clear=N,n.close=Ze,n.onMouseOver=gn,n._createElement=Pt,n.createDay=P,n.destroy=It,n.isEnabled=Wt,n.jumpToDate=C,n.updateValue=de,n.open=vn,n.redraw=Bt,n.set=Z,n.setDate=Ie,n.toggle=ar;function i(){n.utils={getDaysInMonth(M=n.currentMonth,H=n.currentYear){return M===1&&(H%4===0&&H%100!==0||H%400===0)?29:n.l10n.daysInMonth[M]}}}function a(){n.element=n.input=e,n.isOpen=!1,jn(),Rt(),Cn(),Dt(),i(),n.isMobile||A(),I(),(n.selectedDates.length||n.config.noCalendar)&&(n.config.enableTime&&h(n.config.noCalendar?n.latestSelectedDateObj:void 0),de(!1)),u();let M=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!n.isMobile&&M&&Vt(),ht("onReady")}function o(){var M;return((M=n.calendarContainer)==null?void 0:M.getRootNode()).activeElement||n.element.doc.activeElement}function s(M){return M.bind(n)}function u(){let M=n.config;M.weekNumbers===!1&&M.showMonths===1||M.noCalendar!==!0&&r.requestAnimationFrame(function(){if(n.calendarContainer!==void 0&&(n.calendarContainer.style.visibility="hidden",n.calendarContainer.style.display="block"),n.daysContainer!==void 0){let H=(n.days.offsetWidth+1)*M.showMonths;n.daysContainer.style.width=H+"px",n.calendarContainer.style.width=H+(n.weekWrapper!==void 0?n.weekWrapper.offsetWidth:0)+"px",n.calendarContainer.style.removeProperty("visibility"),n.calendarContainer.style.removeProperty("display")}})}function l(M){if(n.selectedDates.length===0){let q=n.config.minDate===void 0||br(new Date,n.config.minDate)>=0?new Date:new Date(n.config.minDate.getTime()),ie=Jc(n.config);q.setHours(ie.hours,ie.minutes,ie.seconds,q.getMilliseconds()),n.selectedDates=[q],n.latestSelectedDateObj=q}M!==void 0&&M.type!=="blur"&&ge(M);let H=n._input.value;m(),de(),n._input.value!==H&&n._debouncedChange()}function c(M,H){return M%12+12*wr(H===n.l10n.amPM[1])}function d(M){switch(M%24){case 0:case 12:return 12;default:return M%12}}function m(){if(n.hourElement===void 0||n.minuteElement===void 0)return;let M=(parseInt(n.hourElement.value.slice(-2),10)||0)%24,H=(parseInt(n.minuteElement.value,10)||0)%60,q=n.secondElement!==void 0?(parseInt(n.secondElement.value,10)||0)%60:0;n.amPM!==void 0&&(M=c(M,n.amPM.textContent));let ie=n.config.minTime!==void 0||n.config.minDate&&n.minDateHasTime&&n.latestSelectedDateObj&&br(n.latestSelectedDateObj,n.config.minDate,!0)===0,ye=n.config.maxTime!==void 0||n.config.maxDate&&n.maxDateHasTime&&n.latestSelectedDateObj&&br(n.latestSelectedDateObj,n.config.maxDate,!0)===0;if(n.config.maxTime!==void 0&&n.config.minTime!==void 0&&n.config.minTime>n.config.maxTime){let ce=Gc(n.config.minTime.getHours(),n.config.minTime.getMinutes(),n.config.minTime.getSeconds()),ae=Gc(n.config.maxTime.getHours(),n.config.maxTime.getMinutes(),n.config.maxTime.getSeconds()),Se=Gc(M,H,q);if(Se>ae&&Se<ce){let nt=ik(ce);M=nt[0],H=nt[1],q=nt[2]}}else{if(ye){let ce=n.config.maxTime!==void 0?n.config.maxTime:n.config.maxDate;M=Math.min(M,ce.getHours()),M===ce.getHours()&&(H=Math.min(H,ce.getMinutes())),H===ce.getMinutes()&&(q=Math.min(q,ce.getSeconds()))}if(ie){let ce=n.config.minTime!==void 0?n.config.minTime:n.config.minDate;M=Math.max(M,ce.getHours()),M===ce.getHours()&&H<ce.getMinutes()&&(H=ce.getMinutes()),H===ce.getMinutes()&&(q=Math.max(q,ce.getSeconds()))}}g(M,H,q)}function h(M){let H=M||n.latestSelectedDateObj;H&&H.getHours&&g(H.getHours(),H.getMinutes(),H.getSeconds())}function g(M,H,q){n.latestSelectedDateObj!==void 0&&n.latestSelectedDateObj.setHours(M%24,H,q||0,0),!(!n.hourElement||!n.minuteElement||n.isMobile)&&(n.hourElement.value=er(n.config.time_24hr?M:(12+M)%12+12*wr(M%12===0)),n.minuteElement.value=er(H),n.amPM!==void 0&&(n.amPM.textContent=n.l10n.amPM[wr(M>=12)]),n.secondElement!==void 0&&(n.secondElement.value=er(q)))}function y(M){let H=Dr(M),q=parseInt(H.value)+(M.delta||0);(q/1e3>1||M.key==="Enter"&&!/[^\d]/.test(q.toString()))&&vt(q)}function v(M,H,q,ie){if(Array.isArray(H))return H.forEach(ye=>v(M,ye,q,ie));if(Array.isArray(M))return M.forEach(ye=>v(ye,H,q,ie));M.addEventListener(H,q,ie),n._handlers.push({remove:()=>M.removeEventListener(H,q,ie)})}function D(){ht("onChange")}function I(){if(n.config.wrap&&["open","close","toggle","clear"].forEach(H=>{Array.prototype.forEach.call(n.element.querySelectorAll(`[data-${H}]`),q=>v(q,"click",n[H]))}),n.isMobile){Ht();return}let M=ng(yn,50,r);if(n._debouncedChange=ng(D,iN,r),n.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&v(n.daysContainer,"mouseover",H=>{n.config.mode==="range"&&gn(Dr(H))}),v(n._input,"keydown",en),n.calendarContainer!==void 0&&v(n.calendarContainer,"keydown",en),!n.config.inline&&!n.config.static&&v(r,"resize",M),r.ontouchstart!==void 0?v(r.document,"touchstart",jt):v(r.document,"mousedown",jt),v(r.document,"focus",jt,{capture:!0}),n.config.clickOpens===!0&&(v(n._input,"focus",n.open),v(n._input,"click",n.open)),n.daysContainer!==void 0&&(v(n.monthNav,"click",ve),v(n.monthNav,["keyup","increment"],y),v(n.daysContainer,"click",rn)),n.timeContainer!==void 0&&n.minuteElement!==void 0&&n.hourElement!==void 0){let H=q=>Dr(q).select();v(n.timeContainer,["increment"],l),v(n.timeContainer,"blur",l,{capture:!0}),v(n.timeContainer,"click",x),v([n.hourElement,n.minuteElement],["focus","click"],H),n.secondElement!==void 0&&v(n.secondElement,"focus",()=>n.secondElement&&n.secondElement.select()),n.amPM!==void 0&&v(n.amPM,"click",q=>{l(q)})}n.config.allowInput&&v(n._input,"blur",Jt)}function C(M,H){let q=M!==void 0?n.parseDate(M):n.latestSelectedDateObj||(n.config.minDate&&n.config.minDate>n.now?n.config.minDate:n.config.maxDate&&n.config.maxDate<n.now?n.config.maxDate:n.now),ie=n.currentYear,ye=n.currentMonth;try{q!==void 0&&(n.currentYear=q.getFullYear(),n.currentMonth=q.getMonth())}catch(ce){ce.message="Invalid date supplied: "+q,n.config.errorHandler(ce)}H&&n.currentYear!==ie&&(ht("onYearChange"),re()),H&&(n.currentYear!==ie||n.currentMonth!==ye)&&ht("onMonthChange"),n.redraw()}function x(M){let H=Dr(M);~H.className.indexOf("arrow")&&O(M,H.classList.contains("arrowUp")?1:-1)}function O(M,H,q){let ie=M&&Dr(M),ye=q||ie&&ie.parentNode&&ie.parentNode.firstChild,ce=St("increment");ce.delta=H,ye&&ye.dispatchEvent(ce)}function A(){let M=r.document.createDocumentFragment();if(n.calendarContainer=Pt(r.document,"div","flatpickr-calendar"),n.calendarContainer.tabIndex=-1,!n.config.noCalendar){if(M.appendChild(pe()),n.innerContainer=Pt(r.document,"div","flatpickr-innerContainer"),n.config.weekNumbers){let{weekWrapper:q,weekNumbers:ie}=Je();n.innerContainer.appendChild(q),n.weekNumbers=ie,n.weekWrapper=q}n.rContainer=Pt(r.document,"div","flatpickr-rContainer"),n.rContainer.appendChild(Ce()),n.daysContainer||(n.daysContainer=Pt(r.document,"div","flatpickr-days"),n.daysContainer.tabIndex=-1),te(),n.rContainer.appendChild(n.daysContainer),n.innerContainer.appendChild(n.rContainer),M.appendChild(n.innerContainer)}n.config.enableTime&&M.appendChild(De()),tr(n.calendarContainer,"rangeMode",n.config.mode==="range"),tr(n.calendarContainer,"animate",n.config.animate===!0),tr(n.calendarContainer,"multiMonth",n.config.showMonths>1),n.calendarContainer.appendChild(M);let H=n.config.appendTo!==void 0&&n.config.appendTo.nodeType!==void 0;if((n.config.inline||n.config.static)&&(n.calendarContainer.classList.add(n.config.inline?"inline":"static"),n.config.inline&&(!H&&n.element.parentNode?n.element.parentNode.insertBefore(n.calendarContainer,n._input.nextSibling):n.config.appendTo!==void 0&&n.config.appendTo.appendChild(n.calendarContainer)),n.config.static)){let q=Pt(r.document,"div","flatpickr-wrapper");n.element.parentNode&&n.element.parentNode.insertBefore(q,n.element),q.appendChild(n.element),n.altInput&&q.appendChild(n.altInput),q.appendChild(n.calendarContainer)}!n.config.static&&!n.config.inline&&(n.config.appendTo!==void 0?n.config.appendTo:r.document.body).appendChild(n.calendarContainer)}function P(M,H,q,ie){let ye=Wt(H,!0),ce=Pt(r.document,"span",M,H.getDate().toString());return ce.dateObj=H,ce.$i=ie,ce.setAttribute("aria-label",n.formatDate(H,n.config.ariaDateFormat)),M.indexOf("hidden")===-1&&br(H,n.now)===0&&(n.todayDateElem=ce,ce.classList.add("today"),ce.setAttribute("aria-current","date")),ye?(ce.tabIndex=-1,L(H)&&(ce.classList.add("selected"),n.selectedDateElem=ce,n.config.mode==="range"&&(tr(ce,"startRange",n.selectedDates[0]&&br(H,n.selectedDates[0],!0)===0),tr(ce,"endRange",n.selectedDates[1]&&br(H,n.selectedDates[1],!0)===0),M==="nextMonthDay"&&ce.classList.add("inRange")))):ce.classList.add("flatpickr-disabled"),n.config.mode==="range"&&K(H)&&!L(H)&&ce.classList.add("inRange"),n.weekNumbers&&n.config.showMonths===1&&M!=="prevMonthDay"&&ie%7===6&&n.weekNumbers.insertAdjacentHTML("beforeend","<span class='flatpickr-day'>"+n.config.getWeek(H)+"</span>"),ht("onDayCreate",ce),ce}function B(M){M.focus(),n.config.mode==="range"&&gn(M)}function G(M){let H=M>0?0:n.config.showMonths-1,q=M>0?n.config.showMonths:-1;for(let ie=H;ie!=q;ie+=M){let ye=n.daysContainer.children[ie],ce=M>0?0:ye.children.length-1,ae=M>0?ye.children.length:-1;for(let Se=ce;Se!=ae;Se+=M){let nt=ye.children[Se];if(nt.className.indexOf("hidden")===-1&&Wt(nt.dateObj))return nt}}}function J(M,H){let q=M.className.indexOf("Month")===-1?M.dateObj.getMonth():n.currentMonth,ie=H>0?n.config.showMonths:-1,ye=H>0?1:-1;for(let ce=q-n.currentMonth;ce!=ie;ce+=ye){let ae=n.daysContainer.children[ce],Se=q-n.currentMonth===ce?M.$i+H:H<0?ae.children.length-1:0,nt=ae.children.length;for(let Te=Se;Te>=0&&Te<nt&&Te!=(H>0?nt:-1);Te+=ye){let Ue=ae.children[Te];if(Ue.className.indexOf("hidden")===-1&&Wt(Ue.dateObj)&&Math.abs(M.$i-Te)>=Math.abs(H))return B(Ue)}}n.changeMonth(ye),Q(G(ye),0)}function Q(M,H){let q=o(),ie=Tt(q||n.element.doc.body),ye=M!==void 0?M:ie?q:n.selectedDateElem!==void 0&&Tt(n.selectedDateElem)?n.selectedDateElem:n.todayDateElem!==void 0&&Tt(n.todayDateElem)?n.todayDateElem:G(H>0?1:-1);ye===void 0?n._input.focus():ie?J(ye,H):B(ye)}function oe(M,H){let q=(new Date(M,H,1).getDay()-n.l10n.firstDayOfWeek+7)%7,ie=n.utils.getDaysInMonth((H-1+12)%12,M),ye=n.utils.getDaysInMonth(H,M),ce=r.document.createDocumentFragment(),ae=n.config.showMonths>1,Se=ae?"prevMonthDay hidden":"prevMonthDay",nt=ae?"nextMonthDay hidden":"nextMonthDay",Te=ie+1-q,Ue=0;for(;Te<=ie;Te++,Ue++)ce.appendChild(P(`flatpickr-day ${Se}`,new Date(M,H-1,Te),Te,Ue));for(Te=1;Te<=ye;Te++,Ue++)ce.appendChild(P("flatpickr-day",new Date(M,H,Te),Te,Ue));for(let Ft=ye+1;Ft<=42-q&&(n.config.showMonths===1||Ue%7!==0);Ft++,Ue++)ce.appendChild(P(`flatpickr-day ${nt}`,new Date(M,H+1,Ft%ye),Ft,Ue));let We=Pt(r.document,"div","dayContainer");return We.appendChild(ce),We}function te(){if(n.daysContainer===void 0)return;Nl(n.daysContainer),n.weekNumbers&&Nl(n.weekNumbers);let M=n.element.doc.createDocumentFragment();for(let H=0;H<n.config.showMonths;H++){let q=new Date(n.currentYear,n.currentMonth,1);q.setMonth(n.currentMonth+H),M.appendChild(oe(q.getFullYear(),q.getMonth()))}n.daysContainer.appendChild(M),n.days=n.daysContainer.firstChild,n.config.mode==="range"&&n.selectedDates.length===1&&gn()}function re(){if(n.config.showMonths>1||n.config.monthSelectorType!=="dropdown")return;let M=function(H){return n.config.minDate!==void 0&&n.currentYear===n.config.minDate.getFullYear()&&H<n.config.minDate.getMonth()?!1:!(n.config.maxDate!==void 0&&n.currentYear===n.config.maxDate.getFullYear()&&H>n.config.maxDate.getMonth())};n.monthsDropdownContainer.tabIndex=-1,n.monthsDropdownContainer.innerHTML="";for(let H=0;H<12;H++){if(!M(H))continue;let q=Pt(r.document,"option","flatpickr-monthDropdown-month");q.value=new Date(n.currentYear,H).getMonth().toString(),q.textContent=Pl(H,n.config.shorthandCurrentMonth,n.l10n),q.tabIndex=-1,n.currentMonth===H&&(q.selected=!0),n.monthsDropdownContainer.appendChild(q)}}function ne(){let M=Pt(r.document,"div","flatpickr-month"),H=r.document.createDocumentFragment(),q;n.config.showMonths>1||n.config.monthSelectorType==="static"?q=Pt(r.document,"span","cur-month"):(n.monthsDropdownContainer=Pt(r.document,"select","flatpickr-monthDropdown-months"),n.monthsDropdownContainer.setAttribute("aria-label",n.l10n.monthAriaLabel),v(n.monthsDropdownContainer,"change",ae=>{let Se=Dr(ae),nt=parseInt(Se.value,10);n.changeMonth(nt-n.currentMonth),ht("onMonthChange")}),re(),q=n.monthsDropdownContainer);let ie=Rl(r.document,"cur-year",{tabindex:"-1"}),ye=ie.getElementsByTagName("input")[0];ye.setAttribute("aria-label",n.l10n.yearAriaLabel),n.config.minDate&&ye.setAttribute("min",n.config.minDate.getFullYear().toString()),n.config.maxDate&&(ye.setAttribute("max",n.config.maxDate.getFullYear().toString()),ye.disabled=!!n.config.minDate&&n.config.minDate.getFullYear()===n.config.maxDate.getFullYear());let ce=Pt(r.document,"div","flatpickr-current-month");return ce.appendChild(q),ce.appendChild(ie),H.appendChild(ce),M.appendChild(H),{container:M,yearElement:ye,monthElement:q}}function be(){Nl(n.monthNav),n.monthNav.appendChild(n.prevMonthNav),n.config.showMonths&&(n.yearElements=[],n.monthElements=[]);for(let M=n.config.showMonths;M--;){let H=ne();n.yearElements.push(H.yearElement),n.monthElements.push(H.monthElement),n.monthNav.appendChild(H.container)}n.monthNav.appendChild(n.nextMonthNav)}function pe(){return n.monthNav=Pt(r.document,"div","flatpickr-months"),n.yearElements=[],n.monthElements=[],n.prevMonthNav=Pt(r.document,"span","flatpickr-prev-month"),n.prevMonthNav.innerHTML=n.config.prevArrow,n.nextMonthNav=Pt(r.document,"span","flatpickr-next-month"),n.nextMonthNav.innerHTML=n.config.nextArrow,be(),Object.defineProperty(n,"_hidePrevMonthArrow",{get:()=>n.__hidePrevMonthArrow,set(M){n.__hidePrevMonthArrow!==M&&(tr(n.prevMonthNav,"flatpickr-disabled",M),n.__hidePrevMonthArrow=M)}}),Object.defineProperty(n,"_hideNextMonthArrow",{get:()=>n.__hideNextMonthArrow,set(M){n.__hideNextMonthArrow!==M&&(tr(n.nextMonthNav,"flatpickr-disabled",M),n.__hideNextMonthArrow=M)}}),n.currentYearElement=n.yearElements[0],ee(),n.monthNav}function De(){n.calendarContainer.classList.add("hasTime"),n.config.noCalendar&&n.calendarContainer.classList.add("noCalendar");let M=Jc(n.config);n.timeContainer=Pt(r.document,"div","flatpickr-time"),n.timeContainer.tabIndex=-1;let H=Pt(r.document,"span","flatpickr-time-separator",":"),q=Rl(r.document,"flatpickr-hour",{"aria-label":n.l10n.hourAriaLabel});n.hourElement=q.getElementsByTagName("input")[0];let ie=Rl(r.document,"flatpickr-minute",{"aria-label":n.l10n.minuteAriaLabel});if(n.minuteElement=ie.getElementsByTagName("input")[0],n.hourElement.tabIndex=n.minuteElement.tabIndex=-1,n.hourElement.value=er(n.latestSelectedDateObj?n.latestSelectedDateObj.getHours():n.config.time_24hr?M.hours:d(M.hours)),n.minuteElement.value=er(n.latestSelectedDateObj?n.latestSelectedDateObj.getMinutes():M.minutes),n.hourElement.setAttribute("step",n.config.hourIncrement.toString()),n.minuteElement.setAttribute("step",n.config.minuteIncrement.toString()),n.hourElement.setAttribute("min",n.config.time_24hr?"0":"1"),n.hourElement.setAttribute("max",n.config.time_24hr?"23":"12"),n.hourElement.setAttribute("maxlength","2"),n.minuteElement.setAttribute("min","0"),n.minuteElement.setAttribute("max","59"),n.minuteElement.setAttribute("maxlength","2"),n.timeContainer.appendChild(q),n.timeContainer.appendChild(H),n.timeContainer.appendChild(ie),n.config.time_24hr&&n.timeContainer.classList.add("time24hr"),n.config.enableSeconds){n.timeContainer.classList.add("hasSeconds");let ye=Rl(r.document,"flatpickr-second");n.secondElement=ye.getElementsByTagName("input")[0],n.secondElement.value=er(n.latestSelectedDateObj?n.latestSelectedDateObj.getSeconds():M.seconds),n.secondElement.setAttribute("step",n.minuteElement.getAttribute("step")),n.secondElement.setAttribute("min","0"),n.secondElement.setAttribute("max","59"),n.secondElement.setAttribute("maxlength","2"),n.timeContainer.appendChild(Pt(r.document,"span","flatpickr-time-separator",":")),n.timeContainer.appendChild(ye)}return n.config.time_24hr||(n.amPM=Pt(r.document,"span","flatpickr-am-pm",n.l10n.amPM[wr((n.latestSelectedDateObj?parseInt(n.hourElement.value):n.config.defaultHour)>11)]),n.amPM.title=n.l10n.toggleTitle,n.amPM.tabIndex=-1,n.timeContainer.appendChild(n.amPM)),n.timeContainer}function Ce(){n.weekdayContainer?Nl(n.weekdayContainer):n.weekdayContainer=Pt(r.document,"div","flatpickr-weekdays");for(let M=n.config.showMonths;M--;){let H=Pt(r.document,"div","flatpickr-weekdaycontainer");n.weekdayContainer.appendChild(H)}return U(),n.weekdayContainer}function U(){if(!n.weekdayContainer)return;let M=n.l10n.firstDayOfWeek,H=[...n.l10n.weekdays.shorthand];M>0&&M<H.length&&(H=[...H.splice(M,H.length),...H.splice(0,M)]);for(let q=n.config.showMonths;q--;)n.weekdayContainer.children[q].innerHTML=` + <span class='flatpickr-weekday'> + ${H.join("</span><span class='flatpickr-weekday'>")} + </span> + `}function Je(){n.calendarContainer.classList.add("hasWeeks");let M=Pt(r.document,"div","flatpickr-weekwrapper");M.appendChild(Pt(r.document,"span","flatpickr-weekday",n.l10n.weekAbbreviation));let H=Pt(r.document,"div","flatpickr-weeks");return M.appendChild(H),{weekWrapper:M,weekNumbers:H}}function it(M,H=!0){let q=H?M:M-n.currentMonth;q<0&&n._hidePrevMonthArrow===!0||q>0&&n._hideNextMonthArrow===!0||(n.currentMonth+=q,(n.currentMonth<0||n.currentMonth>11)&&(n.currentYear+=n.currentMonth>11?1:-1,n.currentMonth=(n.currentMonth+12)%12,ht("onYearChange"),re()),te(),ht("onMonthChange"),ee())}function N(M=!0,H=!0){if(n.input.value="",n.altInput!==void 0&&(n.altInput.value=""),n.mobileInput!==void 0&&(n.mobileInput.value=""),n.selectedDates=[],n.latestSelectedDateObj=void 0,H===!0&&(n.currentYear=n._initialDate.getFullYear(),n.currentMonth=n._initialDate.getMonth()),n.config.enableTime===!0){let{hours:q,minutes:ie,seconds:ye}=Jc(n.config);g(q,ie,ye)}n.redraw(),M&&ht("onChange")}function Ze(){n.isOpen=!1,n.isMobile||(n.calendarContainer!==void 0&&n.calendarContainer.classList.remove("open"),n._input!==void 0&&n._input.classList.remove("active")),ht("onClose")}function It(){n.config!==void 0&&ht("onDestroy");for(let M=n._handlers.length;M--;)n._handlers[M].remove();if(n._handlers=[],n.mobileInput)n.mobileInput.parentNode&&n.mobileInput.parentNode.removeChild(n.mobileInput),n.mobileInput=void 0;else if(n.calendarContainer&&n.calendarContainer.parentNode)if(n.config.static&&n.calendarContainer.parentNode){let M=n.calendarContainer.parentNode;if(M.lastChild&&M.removeChild(M.lastChild),M.parentNode){for(;M.firstChild;)M.parentNode.insertBefore(M.firstChild,M);M.parentNode.removeChild(M)}}else n.calendarContainer.parentNode.removeChild(n.calendarContainer);n.altInput&&(n.input.type="text",n.altInput.parentNode&&n.altInput.parentNode.removeChild(n.altInput),delete n.altInput),n.input&&(n.input.type=n.input._type,n.input.classList.remove("flatpickr-input"),n.input.removeAttribute("readonly")),["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach(M=>{try{delete n[M]}catch(H){}})}function Mt(M){return n.calendarContainer.contains(M)}function jt(M){if(n.isOpen&&!n.config.inline){let H=Dr(M),q=Mt(H),ye=!(H===n.input||H===n.altInput||n.element.contains(H)||M.path&&M.path.indexOf&&(~M.path.indexOf(n.input)||~M.path.indexOf(n.altInput)))&&!q&&!Mt(M.relatedTarget),ce=!n.config.ignoredFocusElements.some(ae=>ae.contains(H));ye&&ce&&(n.config.allowInput&&n.setDate(n._input.value,!1,n.config.altInput?n.config.altFormat:n.config.dateFormat),n.timeContainer!==void 0&&n.minuteElement!==void 0&&n.hourElement!==void 0&&n.input.value!==""&&n.input.value!==void 0&&l(),n.close(),n.config&&n.config.mode==="range"&&n.selectedDates.length===1&&n.clear(!1))}}function vt(M){if(!M||n.config.minDate&&M<n.config.minDate.getFullYear()||n.config.maxDate&&M>n.config.maxDate.getFullYear())return;let H=M,q=n.currentYear!==H;n.currentYear=H||n.currentYear,n.config.maxDate&&n.currentYear===n.config.maxDate.getFullYear()?n.currentMonth=Math.min(n.config.maxDate.getMonth(),n.currentMonth):n.config.minDate&&n.currentYear===n.config.minDate.getFullYear()&&(n.currentMonth=Math.max(n.config.minDate.getMonth(),n.currentMonth)),q&&(n.redraw(),ht("onYearChange"),re())}function Wt(M,H=!0){var ce;let q=n.parseDate(M,void 0,H);if(n.config.minDate&&q&&br(q,n.config.minDate,H!==void 0?H:!n.minDateHasTime)<0||n.config.maxDate&&q&&br(q,n.config.maxDate,H!==void 0?H:!n.maxDateHasTime)>0)return!1;if(!n.config.enable&&n.config.disable.length===0)return!0;if(q===void 0)return!1;let ie=!!n.config.enable,ye=(ce=n.config.enable)!=null?ce:n.config.disable;for(let ae=0,Se;ae<ye.length;ae++){if(Se=ye[ae],typeof Se=="function"&&Se(q))return ie;if(Se.getTime&&q!==void 0&&Se.getTime()===q.getTime())return ie;if(typeof Se=="string"){let nt=n.parseDate(Se,void 0,!0);return nt&&nt.getTime()===q.getTime()?ie:!ie}else if(typeof Se=="object"&&q!==void 0&&Se.from&&Se.to&&q.getTime()>=Se.from.getTime()&&q.getTime()<=Se.to.getTime())return ie}return!ie}function Tt(M){return n.daysContainer!==void 0?M.className.indexOf("hidden")===-1&&M.className.indexOf("flatpickr-disabled")===-1&&n.daysContainer.contains(M):!1}function Jt(M){let H=M.target===n._input,q=n._input.value.trimEnd()!==ue();H&&q&&!(M.relatedTarget&&Mt(M.relatedTarget))&&n.setDate(n._input.value,!0,M.target===n.altInput?n.config.altFormat:n.config.dateFormat)}function en(M){let H=Dr(M),q=n.config.wrap?e.contains(H):H===n._input,ie=n.config.allowInput,ye=n.isOpen&&(!ie||!q),ce=n.config.inline&&q&&!ie;if(M.keyCode===13&&q){if(ie)return n.setDate(n._input.value,!0,H===n.altInput?n.config.altFormat:n.config.dateFormat),n.close(),H.blur();n.open()}else if(Mt(H)||ye||ce){let ae=!!n.timeContainer&&n.timeContainer.contains(H);switch(M.keyCode){case 13:ae?(M.preventDefault(),l(),Hr()):rn(M);break;case 27:M.preventDefault(),Hr();break;case 8:case 46:q&&!n.config.allowInput&&(M.preventDefault(),n.clear());break;case 37:case 39:if(!ae&&!q){M.preventDefault();let Se=o();if(n.daysContainer!==void 0&&(ie===!1||Se&&Tt(Se))){let nt=M.keyCode===39?1:-1;M.ctrlKey?(M.stopPropagation(),it(nt),Q(G(1),0)):Q(void 0,nt)}}else n.hourElement&&n.hourElement.focus();break;case 38:case 40:{M.preventDefault();let Se=M.keyCode===40?1:-1;n.daysContainer&&H.$i!==void 0||H===n.input||H===n.altInput?M.ctrlKey?(M.stopPropagation(),vt(n.currentYear-Se),Q(G(1),0)):ae||Q(void 0,Se*7):H===n.currentYearElement?vt(n.currentYear-Se):n.config.enableTime&&(!ae&&n.hourElement&&n.hourElement.focus(),l(M),n._debouncedChange());break}case 9:if(ae){let Se=[n.hourElement,n.minuteElement,n.secondElement,n.amPM].concat(n.pluginElements).filter(Te=>Te),nt=Se.indexOf(H);if(nt!==-1){let Te=Se[nt+(M.shiftKey?-1:1)];M.preventDefault(),(Te||n._input).focus()}}else!n.config.noCalendar&&n.daysContainer&&n.daysContainer.contains(H)&&M.shiftKey&&(M.preventDefault(),n._input.focus());break;default:break}}if(n.amPM!==void 0&&H===n.amPM)switch(M.key){case n.l10n.amPM[0].charAt(0):case n.l10n.amPM[0].charAt(0).toLowerCase():n.amPM.textContent=n.l10n.amPM[0],m(),de();break;case n.l10n.amPM[1].charAt(0):case n.l10n.amPM[1].charAt(0).toLowerCase():n.amPM.textContent=n.l10n.amPM[1],m(),de();break}(q||Mt(H))&&ht("onKeyDown",M)}function gn(M,H="flatpickr-day"){if(n.selectedDates.length!==1||M&&(!M.classList.contains(H)||M.classList.contains("flatpickr-disabled")))return;let q=M?M.dateObj.getTime():n.days.firstElementChild.dateObj.getTime(),ie=n.parseDate(n.selectedDates[0],void 0,!0).getTime(),ye=Math.min(q,n.selectedDates[0].getTime()),ce=Math.max(q,n.selectedDates[0].getTime()),ae=!1,Se=0,nt=0;for(let Ue=ye;Ue<ce;Ue+=ak.DAY)Wt(new Date(Ue),!0)||(ae=ae||Ue>ye&&Ue<ce,Ue<ie&&(!Se||Ue>Se)?Se=Ue:Ue>ie&&(!nt||Ue<nt)&&(nt=Ue));Array.from(n.rContainer.querySelectorAll(`*:nth-child(-n+${n.config.showMonths}) > .${H}`)).forEach(Ue=>{let Ft=Ue.dateObj.getTime(),Hn=Se>0&&Ft<Se||nt>0&&Ft>nt;if(Hn){Ue.classList.add("notAllowed"),["inRange","startRange","endRange"].forEach(Ot=>{Ue.classList.remove(Ot)});return}else if(ae&&!Hn)return;["startRange","inRange","endRange","notAllowed"].forEach(Ot=>{Ue.classList.remove(Ot)}),M!==void 0&&(M.classList.add(q<=n.selectedDates[0].getTime()?"startRange":"endRange"),ie<q&&Ft===ie?Ue.classList.add("startRange"):ie>q&&Ft===ie&&Ue.classList.add("endRange"),Ft>=Se&&(nt===0||Ft<=nt)&&rk(Ft,ie,q)&&Ue.classList.add("inRange"))})}function yn(){n.isOpen&&!n.config.static&&!n.config.inline&&Vt()}function vn(M,H=n._positionElement){if(n.isMobile===!0){if(M){M.preventDefault();let ie=Dr(M);ie&&ie.blur()}n.mobileInput!==void 0&&(n.mobileInput.focus(),n.mobileInput.click()),ht("onOpen");return}else if(n._input.disabled||n.config.inline)return;let q=n.isOpen;n.isOpen=!0,q||(n.calendarContainer.classList.add("open"),n._input.classList.add("active"),ht("onOpen"),Vt(H)),n.config.enableTime===!0&&n.config.noCalendar===!0&&n.config.allowInput===!1&&(M===void 0||!n.timeContainer.contains(M.relatedTarget))&&r.setTimeout(()=>n.hourElement.select(),50)}function xn(M){return H=>{let q=n.config[`_${M}Date`]=n.parseDate(H,n.config.dateFormat),ie=n.config[`_${M==="min"?"max":"min"}Date`];q!==void 0&&(n[M==="min"?"minDateHasTime":"maxDateHasTime"]=q.getHours()>0||q.getMinutes()>0||q.getSeconds()>0),n.selectedDates&&(n.selectedDates=n.selectedDates.filter(ye=>Wt(ye)),!n.selectedDates.length&&M==="min"&&h(q),de()),n.daysContainer&&(Bt(),q!==void 0?n.currentYearElement[M]=q.getFullYear().toString():n.currentYearElement.removeAttribute(M),n.currentYearElement.disabled=!!ie&&q!==void 0&&ie.getFullYear()===q.getFullYear())}}function jn(){let M=["wrap","weekNumbers","allowInput","allowInvalidPreload","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],H={...JSON.parse(JSON.stringify(e.dataset||{})),...t},q={};n.config.parseDate=H.parseDate,n.config.formatDate=H.formatDate,Object.defineProperty(n.config,"enable",{get:()=>n.config._enable,set:ce=>{n.config._enable=at(ce)}}),Object.defineProperty(n.config,"disable",{get:()=>n.config._disable,set:ce=>{n.config._disable=at(ce)}});let ie=H.mode==="time";if(!H.dateFormat&&(H.enableTime||ie)){let ce=Fn.defaultConfig.dateFormat||ka.dateFormat;q.dateFormat=H.noCalendar||ie?"H:i"+(H.enableSeconds?":S":""):ce+" H:i"+(H.enableSeconds?":S":"")}if(H.altInput&&(H.enableTime||ie)&&!H.altFormat){let ce=Fn.defaultConfig.altFormat||ka.altFormat;q.altFormat=H.noCalendar||ie?"h:i"+(H.enableSeconds?":S K":" K"):ce+` h:i${H.enableSeconds?":S":""} K`}Object.defineProperty(n.config,"minDate",{get:()=>n.config._minDate,set:xn("min")}),Object.defineProperty(n.config,"maxDate",{get:()=>n.config._maxDate,set:xn("max")});let ye=ce=>ae=>{n.config[ce==="min"?"_minTime":"_maxTime"]=n.parseDate(ae,"H:i:S")};Object.defineProperty(n.config,"minTime",{get:()=>n.config._minTime,set:ye("min")}),Object.defineProperty(n.config,"maxTime",{get:()=>n.config._maxTime,set:ye("max")}),H.mode==="time"&&(n.config.noCalendar=!0,n.config.enableTime=!0),Object.assign(n.config,q,H);for(let ce=0;ce<M.length;ce++)n.config[M[ce]]=n.config[M[ce]]===!0||n.config[M[ce]]==="true";Kc.filter(ce=>n.config[ce]!==void 0).forEach(ce=>{n.config[ce]=jc(n.config[ce]||[]).map(s)}),n.isMobile=!n.config.disableMobile&&!n.config.inline&&n.config.mode==="single"&&!n.config.disable.length&&!n.config.enable&&!n.config.weekNumbers&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);for(let ce=0;ce<n.config.plugins.length;ce++){let ae=n.config.plugins[ce](n)||{};for(let Se in ae)Kc.indexOf(Se)>-1?n.config[Se]=jc(ae[Se]).map(s).concat(n.config[Se]):typeof H[Se]=="undefined"&&(n.config[Se]=ae[Se])}H.altInputClass||(n.config.altInputClass=sn().className+" "+n.config.altInputClass),ht("onParseConfig")}function sn(){return n.config.wrap?e.querySelector("[data-input]"):e}function Rt(){typeof n.config.locale!="object"&&typeof Fn.l10ns[n.config.locale]=="undefined"&&n.config.errorHandler(new Error(`flatpickr: invalid locale ${n.config.locale}`)),n.l10n={...Fn.l10ns.default,...typeof n.config.locale=="object"?n.config.locale:n.config.locale!=="default"?Fn.l10ns[n.config.locale]:void 0},Gi.D=`(${n.l10n.weekdays.shorthand.join("|")})`,Gi.l=`(${n.l10n.weekdays.longhand.join("|")})`,Gi.M=`(${n.l10n.months.shorthand.join("|")})`,Gi.F=`(${n.l10n.months.longhand.join("|")})`,Gi.K=`(${n.l10n.amPM[0]}|${n.l10n.amPM[1]}|${n.l10n.amPM[0].toLowerCase()}|${n.l10n.amPM[1].toLowerCase()})`,{...t,...JSON.parse(JSON.stringify(e.dataset||{}))}.time_24hr===void 0&&Fn.defaultConfig.time_24hr===void 0&&(n.config.time_24hr=n.l10n.time_24hr),n.formatDate=ig(n),n.parseDate=qc({config:n.config,l10n:n.l10n})}function Vt(M){if(typeof n.config.position=="function")return void n.config.position(n,M);if(n.calendarContainer===void 0)return;ht("onPreCalendarPosition");let H=M||n._positionElement,q=Array.prototype.reduce.call(n.calendarContainer.children,(Yt,Bn)=>Yt+Bn.offsetHeight,0),ie=n.calendarContainer.offsetWidth,ye=n.config.position.split(" "),ce=ye[0],ae=ye.length>1?ye[1]:null,Se=H.getBoundingClientRect(),nt=r.innerHeight-Se.bottom,Te=ce==="above"||ce!=="below"&&nt<q&&Se.top>q,Ue=r.pageYOffset+Se.top+(Te?-q-2:H.offsetHeight+2);if(tr(n.calendarContainer,"arrowTop",!Te),tr(n.calendarContainer,"arrowBottom",Te),n.config.inline)return;let We=r.pageXOffset+Se.left,Ft=!1,Hn=!1;ae==="center"?(We-=(ie-Se.width)/2,Ft=!0):ae==="right"&&(We-=ie-Se.width,Hn=!0),tr(n.calendarContainer,"arrowLeft",!Ft&&!Hn),tr(n.calendarContainer,"arrowCenter",Ft),tr(n.calendarContainer,"arrowRight",Hn);let Ot=r.document.body.offsetWidth-(r.pageXOffset+Se.right),or=We+ie>r.document.body.offsetWidth,sr=Ot+ie>r.document.body.offsetWidth;if(tr(n.calendarContainer,"rightMost",or),!n.config.static)if(n.calendarContainer.style.top=`${Ue}px`,!or)n.calendarContainer.style.left=`${We}px`,n.calendarContainer.style.right="auto";else if(!sr)n.calendarContainer.style.left="auto",n.calendarContainer.style.right=`${Ot}px`;else{let Yt=Sr();if(Yt===void 0)return;let Bn=r.document.body.offsetWidth,Er=Math.max(0,Bn/2-ie/2),Gr=".flatpickr-calendar.centerMost:before",tu=".flatpickr-calendar.centerMost:after",z=Yt.cssRules.length,k=`{left:${Se.left}px;right:auto;}`;tr(n.calendarContainer,"rightMost",!1),tr(n.calendarContainer,"centerMost",!0),Yt.insertRule(`${Gr},${tu}${k}`,z),n.calendarContainer.style.left=`${Er}px`,n.calendarContainer.style.right="auto"}}function Sr(){let M=null;for(let H=0;H<r.document.styleSheets.length;H++){let q=r.document.styleSheets[H];if(q.cssRules){try{q.cssRules}catch(ie){continue}M=q;break}}return M!=null?M:Rr()}function Rr(){let M=r.document.createElement("style");return r.document.head.appendChild(M),M.sheet}function Bt(){n.config.noCalendar||n.isMobile||(re(),ee(),te())}function Hr(){n._input.focus(),r.navigator.userAgent.indexOf("MSIE")!==-1||navigator.msMaxTouchPoints!==void 0?r.setTimeout(n.close,0):n.close()}function rn(M){M.preventDefault(),M.stopPropagation();let H=ae=>ae.classList&&ae.classList.contains("flatpickr-day")&&!ae.classList.contains("flatpickr-disabled")&&!ae.classList.contains("notAllowed"),q=ag(Dr(M),H);if(q===void 0)return;let ie=q,ye=n.latestSelectedDateObj=new Date(ie.dateObj.getTime()),ce=(ye.getMonth()<n.currentMonth||ye.getMonth()>n.currentMonth+n.config.showMonths-1)&&n.config.mode!=="range";if(n.selectedDateElem=ie,n.config.mode==="single")n.selectedDates=[ye];else if(n.config.mode==="multiple"){let ae=L(ye);ae?n.selectedDates.splice(parseInt(ae),1):n.selectedDates.push(ye)}else n.config.mode==="range"&&(n.selectedDates.length===2&&n.clear(!1,!1),n.latestSelectedDateObj=ye,n.selectedDates.push(ye),br(ye,n.selectedDates[0],!0)!==0&&n.selectedDates.sort((ae,Se)=>ae.getTime()-Se.getTime()));if(m(),ce){let ae=n.currentYear!==ye.getFullYear();n.currentYear=ye.getFullYear(),n.currentMonth=ye.getMonth(),ae&&(ht("onYearChange"),re()),ht("onMonthChange")}if(ee(),te(),de(),!ce&&n.config.mode!=="range"&&n.config.showMonths===1?B(ie):n.selectedDateElem!==void 0&&n.hourElement===void 0&&n.selectedDateElem&&n.selectedDateElem.focus(),n.hourElement!==void 0&&n.hourElement!==void 0&&n.hourElement.focus(),n.config.closeOnSelect){let ae=n.config.mode==="single"&&!n.config.enableTime,Se=n.config.mode==="range"&&n.selectedDates.length===2&&!n.config.enableTime;(ae||Se)&&Hr()}D()}let At={locale:[Rt,U],showMonths:[be,u,Ce],minDate:[C],maxDate:[C],positionElement:[_n],clickOpens:[()=>{n.config.clickOpens===!0?(v(n._input,"focus",n.open),v(n._input,"click",n.open)):(n._input.removeEventListener("focus",n.open),n._input.removeEventListener("click",n.open))}]};function Z(M,H){if(M!==null&&typeof M=="object"){Object.assign(n.config,M);for(let q in M)At[q]!==void 0&&At[q].forEach(ie=>ie())}else n.config[M]=H,At[M]!==void 0?At[M].forEach(q=>q()):Kc.indexOf(M)>-1&&(n.config[M]=jc(H));n.redraw(),de(!0)}function me(M,H){let q=[];if(Array.isArray(M))q=M.map(ie=>n.parseDate(ie,H));else if(M.getDate||typeof M=="number")q=[n.parseDate(M,H)];else if(typeof M=="string")switch(n.config.mode){case"single":case"time":q=[n.parseDate(M,H)];break;case"multiple":q=M.split(n.config.conjunction).map(ie=>n.parseDate(ie,H));break;case"range":q=M.split(n.l10n.rangeSeparator).map(ie=>n.parseDate(ie,H));break;default:break}else n.config.errorHandler(new Error(`Invalid date supplied: ${JSON.stringify(M)}`));n.selectedDates=n.config.allowInvalidPreload?q:q.filter(ie=>ie.getDate&&Wt(ie,!1)),n.config.mode==="range"&&n.selectedDates.sort((ie,ye)=>ie.getTime()-ye.getTime())}function Ie(M,H=!1,q=n.config.dateFormat){if(M!==0&&!M||Array.isArray(M)&&M.length===0)return n.clear(H);me(M,q),n.latestSelectedDateObj=n.selectedDates[n.selectedDates.length-1],n.redraw(),C(void 0,H),h(),n.selectedDates.length===0&&n.clear(!1),de(H),H&&ht("onChange")}function at(M){return M.slice().map(H=>typeof H=="string"||typeof H=="number"||H.getDate?n.parseDate(H,void 0,!0):H&&typeof H=="object"&&H.from&&H.to?{from:n.parseDate(H.from,void 0),to:n.parseDate(H.to,void 0)}:H).filter(H=>H)}function Dt(){n.selectedDates=[],n.now=n.parseDate(n.config.now)||new Date;let M=n.config.defaultDate||((n.input.nodeName==="INPUT"||n.input.nodeName==="TEXTAREA")&&n.input.placeholder&&n.input.value===n.input.placeholder?null:n.input.value);M&&me(M,n.config.dateFormat),n._initialDate=n.selectedDates.length>0?n.selectedDates[0]:n.config.minDate&&n.config.minDate.getTime()>n.now.getTime()?n.config.minDate:n.config.maxDate&&n.config.maxDate.getTime()<n.now.getTime()?n.config.maxDate:n.now,n.currentYear=n._initialDate.getFullYear(),n.currentMonth=n._initialDate.getMonth(),n.selectedDates.length>0&&(n.latestSelectedDateObj=n.selectedDates[0]),n.config.minTime!==void 0&&(n.config.minTime=n.parseDate(n.config.minTime,"H:i")),n.config.maxTime!==void 0&&(n.config.maxTime=n.parseDate(n.config.maxTime,"H:i")),n.minDateHasTime=!!n.config.minDate&&(n.config.minDate.getHours()>0||n.config.minDate.getMinutes()>0||n.config.minDate.getSeconds()>0),n.maxDateHasTime=!!n.config.maxDate&&(n.config.maxDate.getHours()>0||n.config.maxDate.getMinutes()>0||n.config.maxDate.getSeconds()>0)}function Cn(){if(n.input=sn(),!n.input){n.config.errorHandler(new Error("Invalid input element specified"));return}n.input._type=n.input.type,n.input.type="text",n.input.classList.add("flatpickr-input"),n._input=n.input,n.config.altInput&&(n.altInput=Pt(r.document,n.input.nodeName,n.config.altInputClass),n._input=n.altInput,n.altInput.placeholder=n.input.placeholder,n.altInput.disabled=n.input.disabled,n.altInput.required=n.input.required,n.altInput.tabIndex=n.input.tabIndex,n.altInput.type="text",n.input.setAttribute("type","hidden"),!n.config.static&&n.input.parentNode&&n.input.parentNode.insertBefore(n.altInput,n.input.nextSibling)),n.config.allowInput||n._input.setAttribute("readonly","readonly"),_n()}function _n(){n._positionElement=n.config.positionElement||n._input}function Ht(){let M=n.config.enableTime?n.config.noCalendar?"time":"datetime-local":"date";n.mobileInput=Pt(r.document,"input",n.input.className+" flatpickr-mobile"),n.mobileInput.tabIndex=1,n.mobileInput.type=M,n.mobileInput.disabled=n.input.disabled,n.mobileInput.required=n.input.required,n.mobileInput.placeholder=n.input.placeholder,n.mobileFormatStr=M==="datetime-local"?"Y-m-d\\TH:i:S":M==="date"?"Y-m-d":"H:i:S",n.selectedDates.length>0&&(n.mobileInput.defaultValue=n.mobileInput.value=n.formatDate(n.selectedDates[0],n.mobileFormatStr)),n.config.minDate&&(n.mobileInput.min=n.formatDate(n.config.minDate,"Y-m-d")),n.config.maxDate&&(n.mobileInput.max=n.formatDate(n.config.maxDate,"Y-m-d")),n.input.getAttribute("step")&&(n.mobileInput.step=String(n.input.getAttribute("step"))),n.input.type="hidden",n.altInput!==void 0&&(n.altInput.type="hidden");try{n.input.parentNode&&n.input.parentNode.insertBefore(n.mobileInput,n.input.nextSibling)}catch(H){}v(n.mobileInput,"change",H=>{n.setDate(Dr(H).value,!1,n.mobileFormatStr),ht("onChange"),ht("onClose")})}function ar(M){if(n.isOpen===!0)return n.close();n.open(M)}function ht(M,H){if(n.config===void 0)return;let q=n.config[M];if(q!==void 0&&q.length>0)for(let ie=0;q[ie]&&ie<q.length;ie++)q[ie](n.selectedDates,n.input.value,n,H);M==="onChange"&&(n.input.dispatchEvent(St("change")),n.input.dispatchEvent(St("input")))}function St(M){let H=r.document.createEvent("Event");return H.initEvent(M,!0,!0),H}function L(M){for(let H=0;H<n.selectedDates.length;H++){let q=n.selectedDates[H];if(q.getDate&&br(q,M)===0)return""+H}return!1}function K(M){return n.config.mode!=="range"||n.selectedDates.length<2?!1:br(M,n.selectedDates[0])>=0&&br(M,n.selectedDates[1])<=0}function ee(){n.config.noCalendar||n.isMobile||!n.monthNav||(n.yearElements.forEach((M,H)=>{let q=new Date(n.currentYear,n.currentMonth,1);q.setMonth(n.currentMonth+H),n.config.showMonths>1||n.config.monthSelectorType==="static"?n.monthElements[H].textContent=Pl(q.getMonth(),n.config.shorthandCurrentMonth,n.l10n)+" ":n.monthsDropdownContainer.value=q.getMonth().toString(),M.value=q.getFullYear().toString()}),n._hidePrevMonthArrow=n.config.minDate!==void 0&&(n.currentYear===n.config.minDate.getFullYear()?n.currentMonth<=n.config.minDate.getMonth():n.currentYear<n.config.minDate.getFullYear()),n._hideNextMonthArrow=n.config.maxDate!==void 0&&(n.currentYear===n.config.maxDate.getFullYear()?n.currentMonth+1>n.config.maxDate.getMonth():n.currentYear>n.config.maxDate.getFullYear()))}function ue(M){let H=M||(n.config.altInput?n.config.altFormat:n.config.dateFormat);return n.selectedDates.map(q=>n.formatDate(q,H)).filter((q,ie,ye)=>n.config.mode!=="range"||n.config.enableTime||ye.indexOf(q)===ie).join(n.config.mode!=="range"?n.config.conjunction:n.l10n.rangeSeparator)}function de(M=!0){n.mobileInput!==void 0&&n.mobileFormatStr&&(n.mobileInput.value=n.latestSelectedDateObj!==void 0?n.formatDate(n.latestSelectedDateObj,n.mobileFormatStr):""),n.input.value=ue(n.config.dateFormat),n.altInput!==void 0&&(n.altInput.value=ue(n.config.altFormat)),M!==!1&&ht("onValueUpdate")}function ve(M){let H=Dr(M),q=n.prevMonthNav.contains(H),ie=n.nextMonthNav.contains(H);q||ie?it(q?-1:1):n.yearElements.indexOf(H)>=0?H.select():H.classList.contains("arrowUp")?n.changeYear(n.currentYear+1):H.classList.contains("arrowDown")&&n.changeYear(n.currentYear-1)}function ge(M){M.preventDefault();let H=M.type==="keydown",q=Dr(M),ie=q;n.amPM!==void 0&&q===n.amPM&&(n.amPM.textContent=n.l10n.amPM[wr(n.amPM.textContent===n.l10n.amPM[0])]);let ye=parseFloat(ie.getAttribute("min")),ce=parseFloat(ie.getAttribute("max")),ae=parseFloat(ie.getAttribute("step")),Se=parseInt(ie.value,10),nt=M.delta||(H?M.which===38?1:-1:0),Te=Se+ae*nt;if(typeof ie.value!="undefined"&&ie.value.length===2){let Ue=ie===n.hourElement,We=ie===n.minuteElement;Te<ye?(Te=ce+Te+wr(!Ue)+(wr(Ue)&&wr(!n.amPM)),We&&O(void 0,-1,n.hourElement)):Te>ce&&(Te=ie===n.hourElement?Te-ce-wr(!n.amPM):ye,We&&O(void 0,1,n.hourElement)),n.amPM&&Ue&&(ae===1?Te+Se===23:Math.abs(Te-Se)>ae)&&(n.amPM.textContent=n.l10n.amPM[wr(n.amPM.textContent===n.l10n.amPM[0])]),ie.value=er(Te)}}return a(),n}function Zc(e,t){let r=Array.prototype.slice.call(e).filter(i=>i.onClickEvent),n=[];for(let i=0;i<r.length;i++){let a=r[i];try{if(a.getAttribute("data-fp-omit")!==null)continue;a._flatpickr!==void 0&&(a._flatpickr.destroy(),a._flatpickr=void 0),a._flatpickr=aN(a,t||{}),n.push(a._flatpickr)}catch(o){console.error(o)}}return n.length===1?n[0]:n}typeof HTMLElement!="undefined"&&typeof HTMLCollection!="undefined"&&typeof NodeList!="undefined"&&(HTMLCollection.prototype.flatpickr=NodeList.prototype.flatpickr=function(e){return Zc(this,e)},HTMLElement.prototype.flatpickr=function(e){return Zc([this],e)});var Fn=function(e,t){return Zc([e],t)};Fn.defaultConfig={};Fn.l10ns={en:{...Yc},default:{...Yc}};Fn.localize=e=>{Fn.l10ns.default={...Fn.l10ns.default,...e}};Fn.setDefaults=e=>{Fn.defaultConfig={...Fn.defaultConfig,...e}};Fn.parseDate=qc({});Fn.formatDate=ig({});Fn.compareDates=br;typeof jQuery!="undefined"&&typeof jQuery.fn!="undefined"&&(jQuery.fn.flatpickr=function(e){return Zc(this,e)});Date.prototype.fp_incr=function(e){return new Date(this.getFullYear(),this.getMonth(),this.getDate()+(typeof e=="string"?parseInt(e,10):e))};typeof window!="undefined"&&(window.flatpickr=Fn);var Qc=Fn;function Xc(e,t,r){let n=t.getSetting("date-format"),i=t.getSetting("date-trigger"),a=t.getSetting("link-date-to-daily-note"),o=(0,ok.moment)(r).format(n),s=a?ed(t.app,o):`{${o}} `,u={line:e.start.line,ch:e.start.ch+i.length};e.editor.replaceRange(s,u,e.end),e.editor.setCursor({line:u.line,ch:u.ch+s.length}),e.editor.focus()}function sk(e,t,r,n){r.createEl("input",{type:"text"},i=>{r.win.setTimeout(()=>n(Qc(i,{win:i.win,now:new Date,inline:!0,locale:zc(t),onChange:a=>Xc(e,t,a[0])})))})}function lk(e){let t=e.month(),r=e.clone().startOf("month").weekday(0),n=e.diff(r,"week");e.subtract(1,"month").startOf("month").weekday(6).add(n,"week");let i=e.month();for(;t===i;)e.subtract(1,"week"),i=e.month();return e}function uk(e){let t=e.month(),r=e.clone().startOf("month").weekday(6),n=e.diff(r,"week");e.add(1,"month").startOf("month").weekday(0).add(n,"week");let i=e.month();for(;t===i;)e.add(1,"week"),i=e.month();return e}function og(e,t,r){let n=(t.getLine(r.line)||"").slice(0,r.ch),i=new RegExp(`(?:^|\\s)${Qn(e)}{?([^}]*)$`);return n.match(i)}function sg(e,t,r){let n=(t.getLine(r.line)||"").slice(0,r.ch),i=new RegExp(`(?:^|\\s)${Qn(e)}{?([^}]*)$`);return n.match(i)}var td=class extends Hl.EditorSuggest{constructor(r,n){super(r);this.datepicker=null;this.app=r,this.plugin=n,[...this.scope.keys].forEach(a=>this.scope.unregister(a)),this.suggestEl.addClass($("date-suggest"));let i=a=>{let{datepicker:o}=this;if(!o)return;let s=(0,Hl.moment)(o.selectedDates[0]||new Date),u;if(a==="right"?s.weekday()===6?u=uk(s).toDate():u=s.add(1,"day").toDate():a==="left"?s.weekday()===0?u=lk(s).toDate():u=s.subtract(1,"day").toDate():a==="up"?u=s.subtract(1,"week").toDate():a==="down"&&(u=s.add(1,"week").toDate()),u)return o.setDate(u,!1),!1};this.scope.register([],"ArrowLeft",()=>i("left")),this.scope.register([],"ArrowRight",()=>i("right")),this.scope.register([],"ArrowDown",()=>i("down")),this.scope.register([],"ArrowUp",()=>i("up")),this.scope.register([],"Enter",()=>{let a=this.datepicker.selectedDates,o=this.context;return a.length?Xc(o,this.stateManager,a[0]):Xc(o,this.stateManager,new Date),this.close(),!1}),this.scope.register([],"Escape",()=>(this.close(),!1))}get stateManager(){return this.context?this.plugin.stateManagers.get(this.context.file):null}getSuggestions(){return[]}renderSuggestion(){}selectSuggestion(){}showSuggestions(){let{datepicker:r,suggestEl:n,context:i,stateManager:a}=this;!r&&a&&(n.empty(),n.addClasses([$("date-picker"),$("ignore-click-outside")]),sk(i,a,n,o=>{this.datepicker=o,this.updatePosition(!0)}))}onTrigger(r,n,i){let a=this.plugin.getStateManager(i);if(!a)return null;let o=a.getSetting("date-trigger");return sg(o,n,r)?{start:{line:r.line,ch:r.ch-o.length},end:r,query:o}:null}close(){super.close(),this.datepicker&&(this.datepicker.destroy(),this.datepicker=null,this.suggestEl.empty())}},nd=class extends Hl.EditorSuggest{constructor(t,r){super(t),this.app=t,this.plugin=r}onTrigger(t,r,n){let i=this.plugin.getStateManager(n);if(!i)return null;let a=i.getSetting("time-trigger"),o=og(a,r,t);return o?(this.times=lg(i),{start:{line:t.line,ch:t.ch-o[1].length-a.length},end:t,query:o[1]}):null}getSuggestions(t){return this.plugin.getStateManager(t.file)?this.times.filter(n=>n.startsWith(t.query)||n.startsWith("0"+t.query)):[]}renderSuggestion(t,r){t.endsWith("00")?r.createEl("strong",{text:t}):r.setText(t)}selectSuggestion(t){let{context:r,plugin:n}=this,i=n.getStateManager(r.file);if(!i)return;let o=`${i.getSetting("time-trigger")}{${t}} `;r.editor.replaceRange(o,r.start,r.end),r.editor.setCursor({line:r.start.line,ch:r.start.ch+o.length}),r.editor.focus()}close(){super.close(),this.times=null}};function Ca(e,t,r){return xa.Platform.isMobile||e.getSetting("new-line-trigger")==="enter"?!(t||r):t||r}function oN(e){return new Proxy(e.app,{get(t,r,n){return r==="vault"?new Proxy(e.app.vault,{get(i,a,o){return a==="config"?new Proxy(e.app.vault.config,{get(s,u,l){return["showLineNumber","foldHeading","foldIndent"].includes(u)?!1:Reflect.get(s,u,l)}}):Reflect.get(i,a,o)}}):Reflect.get(t,r,n)}})}function sN(e,t){return{app:e.app,showSearch:Mr,toggleMode:Mr,onMarkdownScroll:Mr,getMode:()=>"source",scroll:0,editMode:null,get editor(){return t()},get file(){return e.file},get path(){return e.file.path}}}function lN(e){var r,n;let t=uN(e);t&&((n=(r=window.CodeMirrorAdapter)==null?void 0:r.Vim)==null||n.enterInsertMode(t))}function uN(e){var t,r,n;return(n=(r=(t=e==null?void 0:e.plugins)==null?void 0:t.find(i=>i!=null&&i.value?"useNextTextInput"in i.value&&"waitForCopy"in i.value:!1))==null?void 0:r.value)==null?void 0:n.cm}function _a({editorRef:e,onEnter:t,onEscape:r,onChange:n,onPaste:i,className:a,onSubmit:o,editState:s,value:u,placeholder:l}){let{view:c,stateManager:d}=Ee(tt),m=Fe(),h=Fe();Ae(()=>{class y extends c.plugin.MarkdownEditor{constructor(){super(...arguments);this.isKanbanEditor=!0}showTasksPluginAutoSuggest(P,B,G){if(og(d.getSetting("time-trigger"),B,P)||sg(d.getSetting("date-trigger"),B,P))return!1;if(G&&P.line===0)return!0}updateBottomPadding(){}onUpdate(P,B){super.onUpdate(P,B),n&&n(P)}buildLocalExtensions(){let P=super.buildLocalExtensions();P.push(Uc.init(()=>d)),P.push(KS),P.push(fs.Prec.highest(lo.EditorView.domEventHandlers({focus:G=>(c.activeEditor=this.owner,xa.Platform.isMobile&&c.contentEl.addClass("is-mobile-editing"),G.win.setTimeout(()=>{this.app.workspace.activeEditor=this.owner,xa.Platform.isMobile&&this.app.mobileToolbar.update()}),!0),blur:()=>(xa.Platform.isMobile&&(c.contentEl.removeClass("is-mobile-editing"),this.app.mobileToolbar.update()),!0)}))),l&&P.push((0,lo.placeholder)(l)),i&&P.push(fs.Prec.high(lo.EditorView.domEventHandlers({paste:i})));let B=(G,J)=>Q=>(t(Q,G,J)||(this.app.vault.getConfig("smartIndentList")?this.editor.newlineAndIndentContinueMarkdownList():(0,ck.insertBlankLine)(Q)),!0);return P.push(fs.Prec.highest(lo.keymap.of([{key:"Enter",run:B(!1,!1),shift:B(!1,!0),preventDefault:!0},{key:"Mod-Enter",run:B(!0,!1),shift:B(!0,!0),preventDefault:!0},{key:"Escape",run:G=>(r(G),!1),preventDefault:!0}]))),P}}let v=sN(c,()=>I.editor),D=oN(c),I=c.plugin.addChild(new y(D,m.current,v)),C=I.cm;h.current=C,e&&(e.current=C),v.editMode=I,I.set(u||""),kn(s)&&(C.dispatch({userEvent:"select.pointer",selection:fs.EditorSelection.single(C.posAtCoords(s,!1))}),C.dom.win.setTimeout(()=>{lN(C)}));let x=()=>{m.current.scrollIntoView({block:"end"})};return xa.Platform.isMobile&&C.dom.win.addEventListener("keyboardDidShow",x),()=>{xa.Platform.isMobile&&(C.dom.win.removeEventListener("keyboardDidShow",x),c.activeEditor===v&&(c.activeEditor=null),D.workspace.activeEditor===v&&(D.workspace.activeEditor=null,D.mobileToolbar.update(),c.contentEl.removeClass("is-mobile-editing"))),c.plugin.removeChild(I),h.current=null,e&&(e.current=null)}},[]);let g=["cm-table-widget"];return a&&g.push(a),E(ct,{children:[E("div",{className:Ge(g),ref:m}),xa.Platform.isMobile&&E("button",{onClick:()=>o(h.current),className:Ge([$("item-submit-button"),"mod-cta"]),children:R("Submit")})]})}var Bl=require("obsidian");function cN(e,t){if(t)return t.from((0,Bl.moment)());let r=(0,Bl.moment)().startOf("day");if(r.isSame(e,"day"))return R("today");let n=e.diff(r,"day");return n===-1?R("yesterday"):n===1?R("tomorrow"):e.from(r)}function rd({item:e,stateManager:t}){if(!t.useSetting("show-relative-date")||!e.data.metadata.date)return null;let n=cN(e.data.metadata.date,e.data.metadata.time);return E("span",{className:$("item-metadata-date-relative"),children:n})}function id({item:e,stateManager:t,filePath:r,onEditDate:n,onEditTime:i,getDateColor:a}){var A;let o=t.useSetting("move-dates"),s=t.useSetting("date-format"),u=t.useSetting("time-format"),l=t.useSetting("date-display-format"),c=t.useSetting("link-date-to-daily-note"),d=(A=e.data.metadata.time)!=null?A:e.data.metadata.date,m=Re(()=>d?a(d):null,[d,a]);if(!o||!d)return null;let h=d.format(s);if(!h)return null;let g=!!e.data.metadata.date,y=!!e.data.metadata.time,v=d.format(l),D=y?d.format(u):null,I=h?(0,Bl.getLinkpath)(h):null,C=h?t.app.metadataCache.getFirstLinkpathDest(I,r):null,x=I&&c?E("a",{href:I,"data-href":I,className:`internal-link ${C?"":"is-unresolved"}`,target:"blank",rel:"noopener",children:v}):v,O={};return c||(O["aria-label"]=R("Change date"),O.onClick=n),E("span",{style:m&&{"--date-color":m.color,"--date-background-color":m.backgroundColor},className:Ge([$("item-metadata-date-wrapper"),$("date"),{"has-background":!!(m!=null&&m.backgroundColor)}]),children:[g&&E(ct,{children:[E("span",{...O,className:`${$("item-metadata-date")} ${c?"":"is-button"}`,children:x})," "]}),y&&E("span",{onClick:i,className:`${$("item-metadata-time")} is-button`,"aria-label":R("Change time"),children:D})]})}function dk({item:e,stateManager:t}){let r=Ee(zn),n=t.getSetting("metadata-keys"),i=t.useSetting("inline-metadata-position")==="footer",a=t.useSetting("move-task-metadata"),{inlineMetadata:o}=e.data.metadata;if(!o||!i&&!a)return null;let s=il();return E("span",{className:$("item-task-metadata"),children:o.map((u,l)=>{var O,A;let c=Pu(u,n),{metadataKey:d,value:m,label:h}=c,g=yi.has(d);if(!a&&g||!i&&!g)return null;let y=u.wrapping==="emoji-shorthand",v=(A=(O=s==null?void 0:s.api)==null?void 0:O.parse(m))!=null?A:m,D=y&&d==="priority",I=!!(v!=null&&v.ts),C=d.replace(/[^a-zA-Z0-9_]/g,"-"),x="";return h&&!g?x=h:x=y?mb(d,m):No(d),y||(x+=": "),E("span",{className:Ge([$("item-task-inline-metadata-item"),$(`inline-metadata__${C}`),{"is-task-metadata":g,"is-emoji":y,"is-date":I}]),children:[!I&&E("span",{className:$("item-task-inline-metadata-item-key"),children:x}),!D&&E("span",{className:$("item-task-inline-metadata-item-value"),children:E(hs,{searchQuery:r==null?void 0:r.query,dateLabel:I?x:void 0,data:c})})]},l)})})}function ug(e,t){let{stateManager:r,boardModifiers:n}=Ee(tt),i=t||Ui();return Re(()=>({onEditDate:s=>{var u;od(s.view,r,{x:s.clientX,y:s.clientY},sd({stateManager:r,boardModifiers:n,item:e,hasDate:!0,path:i}),(u=e.data.metadata.date)==null?void 0:u.toDate())},onEditTime:s=>{ld(s.view,r,{x:s.clientX,y:s.clientY},ud({stateManager:r,boardModifiers:n,item:e,hasTime:!0,path:i}),e.data.metadata.time)}}),[n,i,e,r])}function dN(e,t,r){let n=0,i=t.split(/\n\r?/g),a=[];return i.forEach(o=>{var u,l,c;if(n>r){a.push(o);return}let s=o.match(/^(\s*>)*(\s*[-+*]\s+?\[)([^\]])(\]\s+)/);if(s){if(n===r){let d=pb(o,e.file);if(d)a.push(d);else{let m=s[3]===" "?Zn():" ",h=(u=s[1])!=null?u:"",g=(l=s[2])!=null?l:"",y=(c=s[4])!=null?c:"";a.push(h+g+m+y+o.slice(s[0].length))}}else a.push(o);n++;return}a.push(o)}),a.join(` +`)}function ps({tags:e,searchQuery:t,alwaysShow:r}){let{stateManager:n}=Ee(tt),i=Lu(n),a=Ee(zn),o=n.useSetting("move-tags")||r;return!e.length||!o?null:E("div",{className:$("item-tags"),children:e.map((s,u)=>{let l=i(s);return E("a",{href:s,onClick:c=>{c.preventDefault();let d=n.getSetting("tag-action");if(a&&d==="kanban"){a.search(s,!0);return}n.app.internalPlugins.getPluginById("global-search").instance.openGlobalSearch(`tag:${s}`)},className:`tag ${$("item-tag")} ${t&&s.toLocaleLowerCase().contains(t)?"is-search-match":""}`,style:l&&{"--tag-color":l.color,"--tag-background":l.backgroundColor},children:[E("span",{children:s[0]}),s.slice(1)]},u)})})}var ad=zt(function({item:t,editState:r,setEditState:n,searchQuery:i,showMetadata:a=!0,isStatic:o}){let{stateManager:s,filePath:u,boardModifiers:l}=Ee(tt),c=fa(s),d=Fe(null);Ae(()=>{r===1?(d.current!==null&&l.updateItem(m,s.updateItemContent(t,d.current)),d.current=null):r===0&&(d.current=null)},[r,s,t]);let m=Ui(),{onEditDate:h,onEditTime:g}=ug(t),y=Ye((x,O,A)=>{if(!Ca(s,O,A))return n(1),!0},[s]),v=Ye(x=>{x.targetNode.instanceOf(HTMLElement)&&(x.targetNode.hasClass($("item-metadata-date"))?h(x):x.targetNode.hasClass($("item-metadata-time"))&&g(x))},[h,g]),D=Ye(()=>n(1),[]),I=Ye(()=>(n(0),!0),[t]),C=Ye(x=>{let O=x.target;if(O.hasClass("task-list-item-checkbox")){if(O.dataset.src)return;let A=parseInt(O.dataset.checkboxIndex,10),P=dN(s,t.data.titleRaw,A),B=s.updateItemContent(t,P);l.updateItem(m,B)}},[m,l,s,t]);return!o&&kn(r)?E("div",{className:$("item-input-wrapper"),children:E(_a,{editState:r,className:$("item-input"),onEnter:y,onEscape:I,onSubmit:D,value:t.data.titleRaw,onChange:x=>{x.docChanged&&(d.current=x.state.doc.toString().trim())}})}):E("div",{onClick:v,className:$("item-title"),children:[o?E(WS,{entityId:t.id,className:$("item-markdown"),markdownString:t.data.title,searchQuery:i,onPointerUp:C}):E(Sa,{entityId:t.id,className:$("item-markdown"),markdownString:t.data.title,searchQuery:i,onPointerUp:C}),a&&E("div",{className:$("item-metadata"),children:[E(rd,{item:t,stateManager:s}),E(id,{item:t,stateManager:s,filePath:u,getDateColor:c}),E(dk,{item:t,stateManager:s}),E(ps,{tags:t.data.metadata.tags,searchQuery:i})]})]})});function fN(e,t=[],r){return t.reduce((n,i)=>{if(yi.has(i.key))return n;let a=Pu(i,r);return n[i.key]=a,n},e||{})}function fk({item:e,searchQuery:t}){let{stateManager:r}=Ee(tt),n=r.useSetting("inline-metadata-position")==="metadata-table",i=r.useSetting("metadata-keys"),{fileMetadata:a,fileMetadataOrder:o,inlineMetadata:s}=e.data.metadata,u=Re(()=>{let c=n?fN(a,s,i||[]):a;return!c||!Object.keys(c).length?null:c},[a,s,i]),l=Re(()=>{let c=new Set(o||[]);return n&&(s!=null&&s.length)&&s.forEach(d=>{c.has(d.key)||c.add(d.key)}),Array.from(c)},[o,n,s]);return u?E("div",{className:$("item-metadata-wrapper"),children:E(gN,{metadata:u,order:l,searchQuery:t})}):null}function hN(e,t){let r;if(e.ts?r=(0,li.moment)(e.ts):li.moment.isMoment(e)?r=e:e instanceof Date&&(r=(0,li.moment)(e)),r){let n=t.getSetting(r.hours()===0?"date-display-format":"date-time-display-format");return r.format(n)}return null}function mN(e,t){if(typeof e!="object"||!e.path)return null;let r=app.vault.getAbstractFileByPath(e.path);if(r&&r instanceof li.TFile){let n=app.fileManager.generateMarkdownLink(r,t.file.path,e.subpath,e.display);return`${e.embed&&n[0]!=="!"?"!":""}${n}`}return`${e.embed?"!":""}[[${e.path}${e.display?`|${e.display}`:""}]]`}function hk(e){if(typeof e=="string"&&/^\d{4}-\d{2}-\d{2}/.test(e)){let r=(0,li.moment)(e);if(r.isValid())return r}if(li.moment.isMoment(e))return e;if(e instanceof Date)return(0,li.moment)(e);let t=(0,cg.getAPI)();return t!=null&&t.value.isDate(e)?(0,li.moment)(e.ts):null}function In(e,t){Ni(e)&&e.value&&(e=e.value);let r=hk(e);if(r)return hN(r,t);if(typeof e=="string")return e;if(e instanceof li.TFile)return e.path;if(Array.isArray(e))return e.map(i=>In(i,t)).join(" ");if(e.rrule)return e.toText();let n=(0,cg.getAPI)();return n?n.value.toString(e):`${e}`}function pN(e,t){return In(e.value,t)}function hs({data:e,dateLabel:t,searchQuery:r}){let{view:n,stateManager:i}=Ee(tt),a=fa(i),o=(s,u)=>{let l=mN(s,n),c=hk(s),d=In(s,i),m=r&&d.toLocaleLowerCase().contains(r),h;if(l||e.containsMarkdown)h=E(Sa,{className:"inline",markdownString:l||d,searchQuery:r});else if(c){let g=a(c);h=E("span",{className:Ge({[$("date")]:!0,"is-search-match":m,"has-background":g==null?void 0:g.backgroundColor}),style:g&&{"--date-color":g.color,"--date-background-color":g.backgroundColor},children:[!!t&&E("span",{className:$("item-metadata-date-label"),children:t}),E("span",{className:$("item-metadata-date"),children:d})]})}else m?h=E("span",{className:"is-search-match",children:d}):h=d;return E(ct,{children:[h,u?E("span",{children:u}):null]})};return Array.isArray(e.value)?E("span",{className:Ge([$("meta-value"),"mod-array"]),children:e.value.map((s,u,l)=>o(s,u<l.length-1?", ":void 0))}):E("span",{className:Ge([$("meta-value")]),children:o(e.value)})}var gN=zt(function({metadata:t,order:r,searchQuery:n}){let{stateManager:i}=Ee(tt);return t?(r!=null&&r.length||(r=Object.keys(t)),E("table",{className:$("meta-table"),children:E("tbody",{children:r.map(a=>{let o=t[a];if(!o)return null;let s=(o.label||a).toLocaleLowerCase().contains(n);return E("tr",{className:$("meta-row"),children:[!o.shouldHideLabel&&E("td",{className:Ge([$("meta-key"),{"is-search-match":s}]),"data-key":a,children:E("span",{children:o.label||a})}),E("td",{colSpan:o.shouldHideLabel?2:1,className:$("meta-value-wrapper"),"data-value":pN(o,i),children:a==="tags"?E(ps,{searchQuery:n,tags:o.value,alwaysShow:!0}):E(hs,{data:o,searchQuery:n})})]},a)})})})):null});var _t="kanban-plugin";var gk=`**${R("Complete")}**`,yk="***",dg=["---","",`${_t}: board`,"","---","",""].join(` +`);function vk(e){return["","","%% kanban:settings","```",JSON.stringify(e.data.settings),"```","%%"].join(` +`)}function wk(e,t){let r=e.data.metadata.fileMetadata,{titleSearchRaw:n}=e.data,i=[n];if(r){let a=Object.keys(r).filter(o=>{var s;return(s=e.data.metadata.fileMetadataOrder)==null?void 0:s.includes(o)});if(a.length){let o=In(a,t),s=In(a.map(u=>r[u]),t);o&&i.push(o),s&&i.push(s)}}return e.data.metadata.time?(i.push(e.data.metadata.time.format("LLLL")),i.push(In(e.data.metadata.time,t))):e.data.metadata.date&&(i.push(e.data.metadata.date.format("LLLL")),i.push(In(e.data.metadata.date,t))),i.join(" ").toLocaleLowerCase()}function yN(e,t,r){var n,i,a;if(e.plugins.enabledPlugins.has("dataview")&&((a=(i=(n=e.plugins)==null?void 0:n.plugins)==null?void 0:i.dataview)!=null&&a.api))return e.plugins.plugins.dataview.api.page(t.path,r.path)}function mk(e,t){if(!e)return null;if(e[t])return e[t];let r=t.split("."),n=e;for(let i of r)if(typeof n=="object"&&i in n)n=n[i];else{n=null;break}return n}function fg(e,t){let r=e.getSetting("metadata-keys");if(!r.length)return{};if(!t)return{};let n=e.app.metadataCache.getFileCache(t),i=yN(e.app,t,e.file);if(!n&&!i)return{};let a={},o={},s={},u=[],l=!1;return r.forEach(c=>{var h;if(s[c.metadataKey])return;if(s[c.metadataKey]=!0,c.metadataKey==="tags"){let g=(n==null?void 0:n.tags)||[];if(Array.isArray((h=n==null?void 0:n.frontmatter)==null?void 0:h.tags)&&(g=[].concat(g,n.frontmatter.tags.map(y=>({tag:`#${y}`})))),(g==null?void 0:g.length)===0)return;u.push(c.metadataKey),a.tags={...c,value:g.map(y=>y.tag).filter(y=>o[y]?!1:(o[y]=!0,!0)).sort(fr)},l=!0;return}let d=mk(i,c.metadataKey),m=mk(n==null?void 0:n.frontmatter,c.metadataKey);if(m!=null&&m!==""&&!(Array.isArray(m)&&m.length===0)){if(typeof m=="string"){if(/^\d{4}-\d{2}-\d{2}/.test(m))m=(0,pk.moment)(m);else if(/^\[\[[^\]]+\]\]$/.test(m)){let g=(n.frontmatterLinks||[]).find(y=>y.key===c.metadataKey);if(g){let y=e.app.metadataCache.getFirstLinkpathDest(g.link,e.file.path);y&&(m=y)}}}else Array.isArray(m)&&(m=m.map((g,y)=>{if(typeof g=="string"&&/^\[\[[^\]]+\]\]$/.test(g)){let v=(n.frontmatterLinks||[]).find(D=>D.key===c.metadataKey+"."+y.toString());if(v){let D=e.app.metadataCache.getFirstLinkpathDest(v.link,e.file.path);if(D)return D}}return g}));u.push(c.metadataKey),a[c.metadataKey]={...c,value:m},l=!0}else if(d!=null&&d!==""&&!(Array.isArray(d)&&d.length===0)){let g=i[c.metadataKey];u.push(c.metadataKey),a[c.metadataKey]={...c,value:g},l=!0}}),{fileMetadata:l?a:void 0,fileMetadataOrder:u}}function bk(e,t){return!e&&t?!0:!["metadata-keys","date-trigger","time-trigger","link-date-to-daily-note","date-format","time-format","move-dates","move-tags","inline-metadata-position","move-task-metadata","hide-card-count","tag-colors","date-colors"].every(n=>e[n]===t[n])}function Dk(e,t){let r=(0,Vl.getDateFromFile)(t,"day");if(!r||!r.isValid())return;e.internalPlugins.plugins["daily-notes"].instance.gotoNextExisting(r)}function Sk(e,t){let r=(0,Vl.getDateFromFile)(t,"day");if(!r||!r.isValid())return;e.internalPlugins.plugins["daily-notes"].instance.gotoPreviousExisting(r)}function ed(e,t){let r=(0,Vl.getDailyNoteSettings)();return e.vault.getConfig("useMarkdownLinks")?`[${t}](${r.folder?`${encodeURIComponent(r.folder)}/`:""}${encodeURIComponent(t)}.md)`:`[[${t}]]`}function Ek(e){if(!e)return!1;let t=e.match(/---\s+([\w\W]+?)\s+---/);return!(!t||!t[1].contains(_t))}function hg(e){var r;if(!e)return!1;let t=app.metadataCache.getFileCache(e);return!!((r=t==null?void 0:t.frontmatter)!=null&&r[_t])}function cd(e,t){return t?`${e} (${t})`:e}function od(e,t,r,n,i){return e.document.body.createDiv({cls:`${$("date-picker")} ${$("ignore-click-outside")}`},a=>{a.style.left=`${r.x||0}px`,a.style.top=`${r.y||0}px`,a.createEl("input",{type:"text"},o=>{a.win.setTimeout(()=>{let s=null,u=d=>{d.target instanceof d.view.HTMLElement&&d.target.closest(`.${$("date-picker")}`)===null&&c()},l=d=>{d.key==="Escape"&&c()},c=()=>{s.destroy(),a.remove(),e.document.body.removeEventListener("click",u),e.document.removeEventListener("keydown",l)};s=Qc(o,{locale:zc(t),defaultDate:i,inline:!0,onChange:d=>{n(d),c()},win:e}),a.win.setTimeout(()=>{let d=a.clientHeight,m=a.clientWidth;r.y+d>e.innerHeight&&(a.style.top=`${(r.y||0)-d}px`),r.x+m>e.innerWidth&&(a.style.left=`${(r.x||0)-m}px`)}),e.document.body.addEventListener("click",u),e.document.addEventListener("keydown",l)})})})}function sd({stateManager:e,boardModifiers:t,item:r,hasDate:n,path:i}){let a=e.getSetting("date-format"),o=e.getSetting("link-date-to-daily-note"),s=e.getSetting("date-trigger"),u=o?"(?:\\[[^\\]]+\\]\\([^)]+\\)|\\[\\[[^\\]]+\\]\\])":"{[^}]+}",l=new RegExp(`(^|\\s)${Qn(s)}${u}`);return c=>{let d=c[0],m=(0,An.moment)(d).format(a),h=o?ed(e.app,m):`{${m}}`,g=r.data.titleRaw;n?g=r.data.titleRaw.replace(l,`$1${s}${h}`):g=`${r.data.titleRaw} ${s}${h}`,t.updateItem(i,e.updateItemContent(r,g))}}function lg(e){let t=e.getSetting("time-format"),r=[];for(let n=0;n<24;n++)r.push((0,An.moment)({hour:n}).format(t)),r.push((0,An.moment)({hour:n,minute:15}).format(t)),r.push((0,An.moment)({hour:n,minute:30}).format(t)),r.push((0,An.moment)({hour:n,minute:45}).format(t));return r}function ld(e,t,r,n,i){let a=$("time-picker"),o=t.getSetting("time-format"),s=i==null?void 0:i.format(o);e.document.body.createDiv({cls:`${a} ${$("ignore-click-outside")}`},u=>{let l=lg(t),c=v=>{v.target instanceof v.view.HTMLElement&&v.target.hasClass($("time-picker-item"))&&v.target.dataset.value&&(n(v.target.dataset.value),h())},d=v=>{v.target instanceof v.view.HTMLElement&&v.target.closest(`.${a}`)===null&&h()},m=v=>{v.key==="Escape"&&h()},h=()=>{u.remove(),u.removeEventListener("click",c),e.document.body.removeEventListener("click",d),e.document.removeEventListener("keydown",m)};u.style.left=`${r.x||0}px`,u.style.top=`${r.y||0}px`;let g=null,y=null;l.forEach((v,D)=>{let I=v===s;u.createDiv({cls:`${$("time-picker-item")} ${I?"is-selected":""}`,text:v},C=>{C.createEl("span",{cls:$("time-picker-check"),prepend:!0},x=>{(0,An.setIcon)(x,"lucide-check")}),D%4===0&&C.addClass("is-hour"),C.dataset.value=v,I&&(g=C),D===Math.floor(l.length/2)&&(y=C)})}),u.win.setTimeout(()=>{var I;let v=u.clientHeight,D=u.clientWidth;r.y+v>e.innerHeight&&(u.style.top=`${(r.y||0)-v}px`),r.x+D>e.innerWidth&&(u.style.left=`${(r.x||0)-D}px`),(I=g||y)==null||I.scrollIntoView({block:"center",inline:"nearest"}),u.addEventListener("click",c),e.document.body.addEventListener("click",d),e.document.addEventListener("keydown",m)})})}function ud({stateManager:e,boardModifiers:t,item:r,hasTime:n,path:i}){let a=e.getSetting("time-trigger"),o=new RegExp(`(^|\\s)${Qn(a)}{([^}]+)}`);return s=>{let u=r.data.titleRaw;n?u=r.data.titleRaw.replace(o,`$1${a}{${s}}`):u=`${r.data.titleRaw} ${a}{${s}}`,t.updateItem(i,e.updateItemContent(r,u))}}function xk(e){let t=e.data.metadata.date,r=[];t&&(t.isSame(new Date,"day")&&r.push("is-today"),t.isAfter(new Date,"day")&&r.push("is-future"),t.isBefore(new Date,"day")&&r.push("is-past")),e.data.checked&&e.data.checkChar===Zn()&&r.push("is-complete");for(let n of e.data.metadata.tags)r.push(`has-tag-${n.slice(1)}`);return r}function uo(e,t,r,n){return e.app.fileManager.generateMarkdownLink(t,r,n)}function vN(e){return(0,An.htmlToMarkdown)(e)}function wN(e){return e.replace(/^\[(.*)\]\(app:\/\/obsidian.md\/(.*)\)$/,"[$1]($2)")}function bN(e){var r;let t=e.require("electron").remote.clipboard;if(process.platform==="darwin"){if(t.has("NSFilenamesPboardType"))return((r=t.read("NSFilenamesPboardType").match(/<string>.*<\/string>/g))==null?void 0:r.map(n=>n.replace(/<string>|<\/string>/g,"")))||[];{let n=t.readImage("clipboard");return n.isEmpty()?[t.read("public.file-url").replace("file://","")].filter(i=>i):[{buffer:n.toPNG(),mimeType:"image/png",originalName:`Pasted image ${(0,An.moment)().format("YYYYMMDDHHmmss")}.png`}]}}else if(t.has("CF_HDROP")){let n=t.read("CF_HDROP")||"",i=[...n].filter((o,s)=>n.charCodeAt(s)!==0).join("").replace(/\\/g,"\\"),a=i.match(/[a-zA-Z]:\\/);if(a){let o=i.indexOf(a[0]);return o!==0&&(i=i.slice(o)),i.split(a[0]).filter(s=>s).map(s=>a+s)}}else{let n=t.readImage("clipboard");return n.isEmpty()?[t.readBuffer("FileNameW").toString("ucs2").replace(RegExp("\0","g"),"")].filter(i=>i):[{buffer:n.toPNG(),mimeType:"image/png",originalName:`Pasted image ${(0,An.moment)().format("YYYYMMDDHHmmss")}.png`}]}return null}function DN(e){return e.split("\\").pop().split("/").pop()}async function SN(e,t,r,n){let i=await e.app.vault.getAvailablePathForAttachments(t,r,e.file),a=await e.app.vault.createBinary(i,n);return uo(e,a,e.file.path)}async function EN(e,t){let r=bN(t);if(!r||r.length===0)return null;let n=t.require("fs/promises"),i=t.require("path");return(await Promise.all(r.map(async a=>{if(typeof a=="string"){let s=DN(a).split("."),u=s.pop(),l=s.join("."),c=await e.app.vault.getAvailablePathForAttachments(l,u,e.file),d=e.app.vault.adapter.basePath;await n.copyFile(a,i.join(d,c)),await new Promise(h=>t.setTimeout(h,50));let m=e.app.vault.getAbstractFileByPath(c);return uo(e,m,e.file.path)}else{let o=a.originalName.split("."),s=o.pop(),u=o.join(".");return await SN(e,u,s,a.buffer)}}))).filter(a=>a)}function kk(e,t,r){return Promise.all(t.map(n=>{let i=n.name.split("."),a=i.pop(),o=i.join(".");if(r){switch(n.type){case"text/jpg":a="jpg";break;case"text/jpeg":a="jpeg";break;case"text/png":a="png";break}o="Pasted image "+(0,An.moment)().format("YYYYMMDDHHmmss")}return new Promise((s,u)=>{let l=new FileReader;l.onload=async c=>{try{let d=await e.app.vault.getAvailablePathForAttachments(o,a,e.file),m=await e.app.vault.createBinary(d,c.target.result);s(uo(e,m,e.file.path))}catch(d){console.error(d),u(d)}},l.readAsArrayBuffer(n)})}))}async function kN(e,t,r){let n=!t.view,i=n?e.getAView().isShiftPressed:!1,a=n?t.clipboardData:t.dataTransfer,o=n&&An.Platform.isDesktopApp?r.require("electron").remote.clipboard:null,s=o?o.availableFormats():[];if(n){if(n&&!i&&!s.includes("text/rtf")){if(An.Platform.isDesktopApp){let g=await EN(e,r);if(g!=null&&g.length)return g}let m=[],h=t.clipboardData.items;for(let g in h){let y=h[g];y.kind==="file"&&m.push(y.getAsFile())}if(m.length)return await kk(e,m,!0)}}else{let m=await Jh(t);if(m.length)return await kk(e,m)}let u=a.getData("text/html"),l=a.getData("text/plain"),c=a.getData("text/uri-list"),d=i?l||u:vN(u);return[wN(d||c||l||u||"").trim()]}async function Ck(e,t,r){let n=e.app.dragManager.draggable,i=t.view?t.dataTransfer:t.clipboardData;switch(n==null?void 0:n.type){case"file":return[uo(e,n.file,e.file.path)];case"files":return n.files.map(a=>uo(e,a,e.file.path));case"folder":return n.file.children.map(a=>a instanceof An.TFolder?null:uo(e,a,e.file.path)).filter(a=>a);case"link":{let a=n.file?uo(e,n.file,(0,An.parseLinktext)(n.linktext).subpath):`[[${n.linktext}]]`,o=new DOMParser().parseFromString(i.getData("text/html"),"text/html").documentElement.textContent;return a=a.replace(/]]$/,`|${o}]]`).replace(/^\[[^\]].+]\(/,`[${o}](`),[a]}default:return await kN(e,t,r)}}function dd(e,t){let r,n,i=(...a)=>{r=a,!n&&(n=e.requestAnimationFrame(()=>{n=null,t(...r)}))};return i.cancel=()=>{n&&(e.cancelAnimationFrame(n),n=null)},i}var Tk={outOfTheWay:"cubic-bezier(0.2, 0, 0, 1)",drop:"cubic-bezier(.2,1,.1,1)"};var gs={outOfTheWay:200,minDropTime:330,maxDropTime:550},Ma=`${gs.outOfTheWay}ms ${Tk.outOfTheWay}`;var Lr={none:"none",fluid:`opacity ${Ma}`,snap:`transform ${Ma}, opacity ${Ma}`,drop:e=>{let t=`${e}ms ${Tk.drop}`;return`transform ${t}, opacity ${t}`},outOfTheWay:`transform ${Ma}`,placeholder:`height ${Ma}, width ${Ma}, margin ${Ma}, border-color ${Ma}`},xN=(e,t)=>e.x===t.x&&e.y===t.y,CN={x:0,y:0},_k=e=>xN(e,CN)?void 0:`translate(${e.x}px, ${e.y}px)`,Fk={moveTo:_k,drop:e=>_k(e)},_N=gs.maxDropTime-gs.minDropTime,Mk=1500,MN=.6;function ys({position:e,destination:t,isCancel:r}){let n=qa(e,t);if(n<=0)return gs.minDropTime;if(n>=Mk)return gs.maxDropTime;let i=n/Mk,a=gs.minDropTime+_N*i,o=r?a*MN:a;return Math.round(o)}function ui(e,t,r){e.style.getPropertyValue(t)!==r&&e.style.setProperty(t,r)}function fd(e,t){e.style.getPropertyValue(t)&&e.style.removeProperty(t)}function mg(e,t,r,n,i){let a="htmldnd",o=et(),s=e-75,u=e+75,l=t-25,c=t+25;return{scopeId:a,entityId:`${a}-${o}`,initial:[s,l,u,c],getParentScrollState(){return Tr},getParentScrollShift(){return vi},recalcInitial(){},getHitbox(){return this.initial},getPath(){return[]},getData(){return{viewId:n,type:ft.Item,id:o,content:r,accepts:[],win:i}}}}var hd=class{constructor(t,r,n,i){this.isHTMLDragging=!1;this.dragOverTimeout=0;this.win=t,this.hitboxEntities=n,this.scrollEntities=i,this.emitter=r}getDragEventData(){return{dragEntity:this.dragEntity,dragEntityId:this.dragEntityId,dragEntityMargin:this.dragEntityMargin,dragOrigin:this.dragOrigin,dragOriginHitbox:this.dragOriginHitbox,dragPosition:this.dragPosition,primaryIntersection:this.primaryIntersection,scrollIntersection:this.scrollIntersection}}dragStart(t,r){var a;let n=(r==null?void 0:r.dataset.hitboxid)||t.currentTarget.dataset.hitboxid;if(!n)return;let i=getComputedStyle(r||t.currentTarget);this.dragEntityId=n,this.dragOrigin={x:t.pageX,y:t.pageY},this.dragPosition={x:t.pageX,y:t.pageY},this.dragEntity=this.hitboxEntities.get(n),this.dragOriginHitbox=(a=this.dragEntity)==null?void 0:a.getHitbox(),this.dragEntityMargin=[parseFloat(i.marginLeft)||0,parseFloat(i.marginTop)||0,parseFloat(i.marginRight)||0,parseFloat(i.marginBottom)||0],this.emitter.emit("dragStart",this.getDragEventData())}dragStartHTML(t,r){this.isHTMLDragging=!0;let n=mg(t.pageX,t.pageY,[],r,t.view);this.dragEntityId=n.entityId,this.dragOrigin={x:t.pageX,y:t.pageY},this.dragPosition={x:t.pageX,y:t.pageY},this.dragEntity=n,this.dragOriginHitbox=n.getHitbox(),this.dragEntityMargin=[0,0,0,0],this.emitter.emit("dragStart",this.getDragEventData())}dragMove(t){this.dragPosition={x:t.pageX,y:t.pageY},this.emitter.emit("dragMove",this.getDragEventData()),this.calculateDragIntersect()}dragMoveHTML(t){this.dragPosition={x:t.pageX,y:t.pageY},this.emitter.emit("dragMove",this.getDragEventData()),this.calculateDragIntersect()}dragEnd(t){this.emitter.emit("dragEnd",this.getDragEventData()),this.dragEntityMargin=void 0,this.dragEntity=void 0,this.dragEntityId=void 0,this.dragOrigin=void 0,this.dragOriginHitbox=void 0,this.dragPosition=void 0,this.scrollIntersection=void 0,this.primaryIntersection=void 0}dragEndHTML(t,r,n,i){this.isHTMLDragging=!1,i||(this.dragEntity=mg(t.pageX,t.pageY,n,r,t.view),this.emitter.emit("dragEnd",this.getDragEventData())),this.dragEntityMargin=void 0,this.dragEntity=void 0,this.dragEntityId=void 0,this.dragOrigin=void 0,this.dragOriginHitbox=void 0,this.dragPosition=void 0,this.scrollIntersection=void 0,this.primaryIntersection=void 0,i&&this.emitter.emit("dragEnd",this.getDragEventData())}onHTMLDragLeave(t){this.win.clearTimeout(this.dragOverTimeout),this.dragOverTimeout=this.win.setTimeout(t,351)}calculateDragIntersect(){if(!this.dragEntity||!this.dragPosition||!this.dragOrigin||!this.dragOriginHitbox)return;let{type:t,win:r}=this.dragEntity.getData(),n=[],i=[],a=[],o=[];if(this.hitboxEntities.forEach(l=>{var d;let c=l.getData();r===c.win&&(c.accepts.includes(t)||(d=c.acceptsSort)!=null&&d.includes(t))&&(n.push(l),i.push(l.getHitbox()))}),this.scrollEntities.forEach(l=>{let c=l.getData();r===c.win&&c.accepts.includes(t)&&(a.push(l),o.push(l.getHitbox()))}),n.length===0&&a.length===0)return;let s=Mb(this.dragOriginHitbox,this.dragOrigin,this.dragPosition);this.handleScrollIntersect(s,this.dragEntity,o,a)||this.handleHitboxIntersect(s,this.dragEntity,i,n)}handleScrollIntersect(t,r,n,i){let a=(0,pg.default)([t],n).map(s=>i[s[1]]),o=_b(a,t,r);if(this.scrollIntersection&&(!o||o[0]!==this.scrollIntersection[0])){let[s,u]=this.scrollIntersection,l=s.getData(),c=s.entityId,d=l.side;this.emitter.emit("endDragScroll",{...this.getDragEventData(),scrollEntity:s,scrollEntityId:c,scrollEntitySide:d,scrollStrength:u},c),this.scrollIntersection=void 0}if(o&&(!this.scrollIntersection||this.scrollIntersection[0]!==o[0])){let[s,u]=o,l=s.getData(),c=s.entityId,d=l.side;this.emitter.emit("beginDragScroll",{...this.getDragEventData(),scrollEntity:s,scrollEntityId:c,scrollEntitySide:d,scrollStrength:u},c),this.scrollIntersection=o}else if(o&&this.scrollIntersection&&o[0]===this.scrollIntersection[0]){let[s,u]=o,l=s.getData(),c=s.entityId,d=l.side;this.emitter.emit("updateDragScroll",{...this.getDragEventData(),scrollEntity:s,scrollEntityId:c,scrollEntitySide:d,scrollStrength:u},c),this.scrollIntersection=o}return!!o}handleHitboxIntersect(t,r,n,i){let a=(0,pg.default)([t],n).map(s=>i[s[1]]),o=Mh(a,t,r);this.primaryIntersection&&this.primaryIntersection!==o&&(this.emitter.emit("dragLeave",this.getDragEventData(),this.primaryIntersection.entityId),this.primaryIntersection=void 0),o&&this.primaryIntersection!==o&&(this.emitter.emit("dragEnter",{...this.getDragEventData(),primaryIntersection:o},o.entityId),this.primaryIntersection=o)}},vs=e=>{e.preventDefault(),e.stopPropagation()};function Ta(e,t){let r=Ee(cn),n=Fe(()=>{});return Ye(i=>{if(t.current!==i&&(n.current(),n.current=()=>{}),!i)return;let a=i,o=u=>{if(u.defaultPrevented||!r||!e.current)return;let l=e.current,c=u.targetNode;for(;c;){if(c.instanceOf(HTMLElement)&&c.dataset.ignoreDrag)return;c=c.parentElement}if(u.button!==0&&u.buttons!==1)return;let d=u.view,m=["pen","touch"].includes(u.pointerType),h=u.pointerId;m||(u.stopPropagation(),u.preventDefault());let g=u,y={x:u.pageX,y:u.pageY},v=!1,D=0;m&&(d.addEventListener("contextmenu",vs,!0),D=d.setTimeout(()=>{r.dragManager.dragStart(g,l),v=!0,d.addEventListener("touchmove",vs,{passive:!1})},500));let I=dd(d,x=>{x.pointerId===h&&(m?v?r.dragManager.dragMove(x):qa(y,{x:x.pageX,y:x.pageY})>5&&(d.clearTimeout(D),d.removeEventListener("touchmove",vs),d.removeEventListener("contextmenu",vs,!0),d.removeEventListener("pointermove",I),d.removeEventListener("pointerup",C),d.removeEventListener("pointercancel",C)):v?r.dragManager.dragMove(x):qa(y,{x:x.pageX,y:x.pageY})>5&&(r.dragManager.dragStart(g,l),v=!0))}),C=x=>{x.pointerId===h&&(d.clearTimeout(D),v=!1,r.dragManager.dragEnd(x),d.removeEventListener("pointermove",I),d.removeEventListener("pointerup",C),d.removeEventListener("pointercancel",C),m&&(d.removeEventListener("contextmenu",vs,!0),d.removeEventListener("touchmove",vs)))};d.addEventListener("pointermove",I),d.addEventListener("pointerup",C),d.addEventListener("pointercancel",C)},s=u=>{u.stopPropagation()};return a.addEventListener("pointerdown",o),a.addEventListener("touchstart",s),()=>{a.removeEventListener("pointerdown",o),a.removeEventListener("touchstart",s)}},[])}function Ik(e){let t=Ee(cn),r=Ye(i=>{t.dragManager.isHTMLDragging?(i.preventDefault(),t.dragManager.dragMoveHTML(i)):t.dragManager.dragStartHTML(i,e.getAView().id),t.dragManager.onHTMLDragLeave(()=>{t.dragManager.dragEndHTML(i,e.getAView().id,[],!0)})},[t,e]),n=Ye(async i=>{t.dragManager.dragEndHTML(i,e.getAView().id,await Ck(e,i,activeWindow),!1)},[t,e]);return{onDragOver:r,onDrop:n}}var Ok=Ct(ln());var Ak=require("obsidian");function Ut({name:e,className:t}){return E("span",{"data-icon":e,className:`${$("icon")} ${t||""}`,ref:r=>{r&&(0,Ak.setIcon)(r,e)}})}var md=zt(function({shouldMarkItemsComplete:t,path:r,item:n,stateManager:i,boardModifiers:a}){let o=i.useSetting("show-checkboxes"),[s,u]=Ne(!1),[l,c]=Ne(!1),d=Ye(()=>{let m=Ro(n,i.file);if(m){let[h,g,y]=m,v=h.map((D,I)=>{let C=i.getNewItem(D,g[I]);return I===y&&(C.id=n.id),C});a.replaceItem(r,v)}else a.updateItem(r,(0,Ok.default)(n,{data:{checkChar:{$apply:h=>h===" "?Zn():" "},$toggle:["checked"]}}))},[n,i,a,...r]);return Ae(()=>{if(l){let m=h=>{h.metaKey||h.ctrlKey?u(!0):u(!1)};return activeWindow.addEventListener("keydown",m),activeWindow.addEventListener("keyup",m),()=>{activeWindow.removeEventListener("keydown",m),activeWindow.removeEventListener("keyup",m)}}},[l]),t||o?E("div",{onMouseEnter:m=>{c(!0),(m.ctrlKey||m.metaKey)&&u(!0)},onMouseLeave:()=>{c(!1),s&&u(!1)},className:$("item-prefix-button-wrapper"),children:[o&&!s&&E("input",{onChange:d,type:"checkbox",className:"task-list-item-checkbox",checked:n.data.checked,"data-task":n.data.checkChar}),(s||!o&&t)&&E("a",{onClick:()=>{a.archiveItem(r)},className:`${$("item-prefix-button")} clickable-icon`,"aria-label":s?void 0:"Archive card",children:E(Ut,{name:"sheets-in-box"})})]}):null});var Lk=Ct(ln()),pd=require("obsidian");var TN=/[\\/:"*?<>|]+/g,FN=/!?\[\[([^\]]*)\.[^\]]+\]\]/g,IN=/!?\[\[([^\]]*)\]\]/g,AN=/!?\[([^\]]*)\]\([^)]*\)/g,ON=/#([^\u2000-\u206F\u2E00-\u2E7F'!"#$%&()*+,.:;<=>?@^`{|}~[\]\\\s\n\r]+)/g,LN=/\s+/g;function gd({setEditState:e,item:t,path:r,boardModifiers:n,stateManager:i}){return Ye(a=>{let o={x:a.clientX,y:a.clientY},s=!!t.data.metadata.date,u=!!t.data.metadata.time,l=new pd.Menu().addItem(d=>{d.setIcon("lucide-edit").setTitle(R("Edit card")).onClick(()=>e(o))});l.addItem(d=>{d.setIcon("lucide-file-plus-2").setTitle(R("New note from card")).onClick(async()=>{let m=t.data.titleRaw.split(` +`)[0].trim(),h=m.replace(FN,"$1").replace(IN,"$1").replace(AN,"$1").replace(ON,"$1").replace(TN," ").trim().replace(LN," "),g=i.getSetting("new-note-folder"),y=i.getSetting("new-note-template"),v=g?i.app.vault.getAbstractFileByPath(g):i.app.fileManager.getNewFileParent(i.file.path),D=await i.app.fileManager.createNewMarkdownFile(v,h),I=i.app.workspace.splitActiveLeaf();await I.openFile(D),i.app.workspace.setActiveLeaf(I,!1,!0),await yb(i,y);let C=t.data.titleRaw.replace(m,i.app.fileManager.generateMarkdownLink(D,i.file.path));n.updateItem(r,i.updateItemContent(t,C))})}).addItem(d=>{d.setIcon("lucide-link").setTitle(R("Copy link to card")).onClick(()=>{if(t.data.blockId)navigator.clipboard.writeText(`${this.app.fileManager.generateMarkdownLink(i.file,"","#^"+t.data.blockId)}`);else{let m=et(6);navigator.clipboard.writeText(`${this.app.fileManager.generateMarkdownLink(i.file,"","#^"+m)}`),n.updateItem(r,i.updateItemContent((0,Lk.default)(t,{data:{blockId:{$set:m}}}),t.data.titleRaw))}})}).addSeparator(),/\n/.test(t.data.titleRaw)&&l.addItem(d=>{d.setIcon("lucide-wrap-text").setTitle(R("Split card")).onClick(async()=>{let m=t.data.titleRaw.split(/[\r\n]+/g).map(g=>g.trim()),h=await Promise.all(m.map(g=>i.getNewItem(g," ")));n.splitItem(r,h)})}),l.addItem(d=>{d.setIcon("lucide-copy").setTitle(R("Duplicate card")).onClick(()=>n.duplicateEntity(r))}).addItem(d=>{d.setIcon("lucide-list-start").setTitle(R("Insert card before")).onClick(()=>n.insertItems(r,[i.getNewItem(""," ",!0)]))}).addItem(d=>{d.setIcon("lucide-list-end").setTitle(R("Insert card after")).onClick(()=>{let m=[...r];m[m.length-1]=m[m.length-1]+1,n.insertItems(m,[i.getNewItem(""," ",!0)])})}).addItem(d=>{d.setIcon("lucide-arrow-up").setTitle(R("Move to top")).onClick(()=>n.moveItemToTop(r))}).addItem(d=>{d.setIcon("lucide-arrow-down").setTitle(R("Move to bottom")).onClick(()=>n.moveItemToBottom(r))}).addItem(d=>{d.setIcon("lucide-archive").setTitle(R("Archive card")).onClick(()=>n.archiveItem(r))}).addItem(d=>{d.setIcon("lucide-trash-2").setTitle(R("Delete card")).onClick(()=>n.deleteEntity(r))}).addSeparator().addItem(d=>{d.setIcon("lucide-calendar-check").setTitle(s?R("Edit date"):R("Add date")).onClick(()=>{var m;od(a.view,i,o,sd({stateManager:i,boardModifiers:n,item:t,hasDate:s,path:r}),(m=t.data.metadata.date)==null?void 0:m.toDate())})}),s&&(l.addItem(d=>{d.setIcon("lucide-x").setTitle(R("Remove date")).onClick(()=>{let m=i.getSetting("link-date-to-daily-note"),h=i.getSetting("date-trigger"),g=m?"(?:\\[[^\\]]+\\]\\([^\\)]+\\)|\\[\\[[^\\]]+\\]\\])":"{[^}]+}",y=new RegExp(`(^|\\s)${Qn(h)}${g}`),v=t.data.titleRaw.replace(y,"").trim();n.updateItem(r,i.updateItemContent(t,v))})}),l.addItem(d=>{d.setIcon("lucide-clock").setTitle(u?R("Edit time"):R("Add time")).onClick(()=>{ld(a.view,i,o,ud({stateManager:i,boardModifiers:n,item:t,hasTime:u,path:r}),t.data.metadata.time)})}),u&&l.addItem(d=>{d.setIcon("lucide-x").setTitle(R("Remove time")).onClick(()=>{let m=i.getSetting("time-trigger"),h=new RegExp(`(^|\\s)${Qn(m)}{([^}]+)}`),g=t.data.titleRaw.replace(h,"").trim();n.updateItem(r,i.updateItemContent(t,g))})})),l.addSeparator();let c=d=>{let m=i.state.children;if(!(m.length<=1))for(let h=0,g=m.length;h<g;h++)d.addItem(y=>y.setIcon("lucide-square-kanban").setChecked(r[0]===h).setTitle(m[h].data.title).onClick(()=>{r[0]!==h&&i.setState(v=>Ri(v,r,[h,0]))}))};pd.Platform.isPhone?c(l):l.addItem(d=>{let m=d.setTitle(R("Move to list")).setIcon("lucide-square-kanban").setSubmenu();c(m)}),l.showAtPosition(o)},[e,t,r,n,i])}var Pk=$e.memo(function({editState:t,setEditState:r,showMenu:n}){let i=$e.useMemo(()=>t?{"data-ignore-drag":!0}:{},[t]);return E("div",{...i,className:$("item-postfix-button-wrapper"),children:kn(t)?E("a",{"data-ignore-drag":!0,onPointerDown:a=>a.preventDefault(),onClick:()=>r(0),className:`${$("item-postfix-button")} is-enabled clickable-icon`,"aria-label":R("Cancel"),children:E(Ut,{name:"lucide-x"})}):E("a",{"data-ignore-drag":!0,onPointerDown:a=>a.preventDefault(),onClick:n,className:`${$("item-postfix-button")} clickable-icon`,"aria-label":R("More options"),children:E(Ut,{name:"lucide-more-vertical"})})})});var Nk=zt(function({item:t,shouldMarkItemsComplete:r,isMatch:n,searchQuery:i,isStatic:a}){let{stateManager:o,boardModifiers:s}=Ee(tt),[u,l]=Ne(0),c=Ee(cn);Ae(()=>{let v=()=>{kn(u)&&l(0)};return c.dragManager.emitter.on("dragStart",v),()=>{c.dragManager.emitter.off("dragStart",v)}},[c,u]),Ae(()=>{t.data.forceEditMode&&l({x:0,y:0})},[t.data.forceEditMode]);let d=Ui(),m=gd({boardModifiers:s,item:t,setEditState:l,stateManager:o,path:d}),h=Ye(v=>{kn(u)||v.targetNode.instanceOf(HTMLAnchorElement)&&(v.targetNode.hasClass("internal-link")||v.targetNode.hasClass("external-link"))||m(v)},[m,u]),g=Ye(v=>l({x:v.clientX,y:v.clientY}),[l]),y=Re(()=>kn(u)?{"data-ignore-drag":!0}:{},[u]);return E("div",{onDblClick:g,onContextMenu:h,className:$("item-content-wrapper"),...y,children:[E("div",{className:$("item-title-wrapper"),...y,children:[E(md,{boardModifiers:s,item:t,path:d,shouldMarkItemsComplete:r,stateManager:o}),E(ad,{item:t,searchQuery:n?i:void 0,setEditState:l,editState:u,isStatic:a}),E(Pk,{editState:u,setEditState:l,showMenu:m})]}),E(fk,{searchQuery:n?i:void 0,item:t})]})}),gg=zt(function(t){let r=Fe(null),n=Fe(null),i=Ee(zn),{itemIndex:a,...o}=t,s=Ta(n,n),u=i!=null&&i.query?o.item.data.titleSearch.includes(i.query):!1,l=xk(o.item);return E("div",{ref:c=>{n.current=c,s(c)},className:$("item-wrapper"),children:E("div",{ref:r,className:Ge([$("item"),...l]),children:t.isStatic?E(Nk,{...o,isMatch:u,searchQuery:i==null?void 0:i.query,isStatic:!0}):E(ei,{elementRef:r,measureRef:n,id:t.item.id,index:a,data:t.item,children:E(Nk,{...o,isMatch:u,searchQuery:i==null?void 0:i.query})})})})}),Rk=zt(function({isStatic:t,items:r,shouldMarkItemsComplete:n}){let i=Ee(zn),{view:a}=Ee(tt),o=a.useViewState(_t);return E(ct,{children:r.map((s,u)=>i!=null&&i.query&&!i.items.has(s)?null:E(gg,{item:s,itemIndex:u,shouldMarkItemsComplete:n,isStatic:t},o+s.id))})});var PN=function(e,t,r,n){function i(a){return a instanceof r?a:new r(function(o){o(a)})}return new(r||(r=Promise))(function(a,o){function s(c){try{l(n.next(c))}catch(d){o(d)}}function u(c){try{l(n.throw(c))}catch(d){o(d)}}function l(c){c.done?a(c.value):i(c.value).then(s,u)}l((n=n.apply(e,t||[])).next())})};function yd(e){let t=0,r=0,n=e;do t+=n.offsetTop||0,r+=n.offsetLeft||0,n=n.offsetParent;while(n);return{top:t,left:r}}var yg=class{constructor(t){this.element=t}getHorizontalScroll(){return this.element.scrollLeft}getVerticalScroll(){return this.element.scrollTop}getMaxHorizontalScroll(){return this.element.scrollWidth-this.element.clientWidth}getMaxVerticalScroll(){return this.element.scrollHeight-this.element.clientHeight}getHorizontalElementScrollOffset(t,r){return yd(t).left-yd(r).left}getVerticalElementScrollOffset(t,r){return yd(t).top-yd(r).top}scrollTo(t,r){this.element.scrollLeft=t,this.element.scrollTop=r}},vg=class{constructor(){this.element=window}getHorizontalScroll(){return window.scrollX||document.documentElement.scrollLeft}getVerticalScroll(){return window.scrollY||document.documentElement.scrollTop}getMaxHorizontalScroll(){return Math.max(document.body.scrollWidth,document.documentElement.scrollWidth,document.body.offsetWidth,document.documentElement.offsetWidth,document.body.clientWidth,document.documentElement.clientWidth)-window.innerWidth}getMaxVerticalScroll(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)-window.innerHeight}getHorizontalElementScrollOffset(t){return(window.scrollX||document.documentElement.scrollLeft)+t.getBoundingClientRect().left}getVerticalElementScrollOffset(t){return(window.scrollY||document.documentElement.scrollTop)+t.getBoundingClientRect().top}scrollTo(t,r){window.scrollTo(t,r)}},Ji={elements:[],cancelMethods:[],add:(e,t)=>{Ji.elements.push(e),Ji.cancelMethods.push(t)},remove:(e,t)=>{let r=Ji.elements.indexOf(e);r>-1&&(t&&Ji.cancelMethods[r](),Ji.elements.splice(r,1),Ji.cancelMethods.splice(r,1))}},Hk=typeof window!="undefined",NN={cancelOnUserAction:!0,easing:e=>--e*e*e+1,elementToScroll:Hk?window:null,horizontalOffset:0,maxDuration:3e3,minDuration:250,speed:500,verticalOffset:0};function RN(e,t={}){return PN(this,void 0,void 0,function*(){if(Hk){if(!window.Promise)throw"Browser doesn't support Promises, and animated-scroll-to depends on it, please provide a polyfill."}else return new Promise(x=>{x(!1)});let r,n,i,a=Object.assign(Object.assign({},NN),t),o=a.elementToScroll===window,s=!!a.elementToScroll.nodeName;if(!o&&!s)throw"Element to scroll needs to be either window or DOM element.";let u=o?document.documentElement:a.elementToScroll;getComputedStyle(u).getPropertyValue("scroll-behavior")==="smooth"&&console.warn(`${u.tagName} has "scroll-behavior: smooth" which can mess up with animated-scroll-to's animations`);let c=o?new vg:new yg(a.elementToScroll);if(e instanceof Element){if(i=e,s&&(!a.elementToScroll.contains(i)||a.elementToScroll.isSameNode(i)))throw"options.elementToScroll has to be a parent of scrollToElement";r=c.getHorizontalElementScrollOffset(i,a.elementToScroll),n=c.getVerticalElementScrollOffset(i,a.elementToScroll)}else if(typeof e=="number")r=c.getHorizontalScroll(),n=e;else if(Array.isArray(e)&&e.length===2)r=e[0]===null?c.getHorizontalScroll():e[0],n=e[1]===null?c.getVerticalScroll():e[1];else throw`Wrong function signature. Check documentation. +Available method signatures are: + animateScrollTo(y:number, options) + animateScrollTo([x:number | null, y:number | null], options) + animateScrollTo(scrollToElement:Element, options)`;r+=a.horizontalOffset,n+=a.verticalOffset;let d=c.getMaxHorizontalScroll(),m=c.getHorizontalScroll();r>d&&(r=d);let h=r-m,g=c.getMaxVerticalScroll(),y=c.getVerticalScroll();n>g&&(n=g);let v=n-y,D=Math.abs(Math.round(h/1e3*a.speed)),I=Math.abs(Math.round(v/1e3*a.speed)),C=D>I?D:I;return C<a.minDuration?C=a.minDuration:C>a.maxDuration&&(C=a.maxDuration),new Promise((x,O)=>{h===0&&v===0&&x(!0),Ji.remove(c.element,!0);let A,P=()=>{oe(),activeWindow.cancelAnimationFrame(A),x(!1)};Ji.add(c.element,P);let B=ne=>ne.preventDefault(),G=a.cancelOnUserAction?P:B,J=a.cancelOnUserAction?{passive:!0}:{passive:!1},Q=["wheel","touchstart","keydown","mousedown"],oe=()=>{Q.forEach(ne=>{c.element.removeEventListener(ne,G,J)})};Q.forEach(ne=>{c.element.addEventListener(ne,G,J)});let te=Date.now(),re=()=>{var ne=Date.now()-te,be=ne/C;let pe=Math.round(m+h*a.easing(be)),De=Math.round(y+v*a.easing(be));ne<C&&(pe!==r||De!==n)?(c.scrollTo(pe,De),A=activeWindow.requestAnimationFrame(re)):(c.scrollTo(r,n),activeWindow.cancelAnimationFrame(A),oe(),Ji.remove(c.element,!1),x(!0))};A=activeWindow.requestAnimationFrame(re)})})}var vd=RN;var kg=Ct(ln());function Bk({children:e}){let t=$e.useMemo(()=>new Vo,[]);return E(sl.Provider,{value:t,children:e})}function Vk(e,t){let r=$e.useContext(ma),n=$e.useRef(null),i=$e.useContext(sl),a=o=>{n.current=o,n.current&&o.win.requestAnimationFrame(()=>{let s=i.getScrollState(e);s&&(s.x!==0||s.y!==0)&&(n.current.scrollLeft=s.x,n.current.scrollTop=s.y)})};return $e.useEffect(()=>{let o=n.current;if(!o)return;let s=dd(o.win,u=>{let l=u.target;i.setScrollState(r,e,{x:l.scrollLeft,y:l.scrollTop})});return o.addEventListener("scroll",s),()=>{o.removeEventListener("scroll",s)}},[i,e,t]),{setRef:a,scrollRef:n}}var HN="scroll-container",wd=8,bd=["top","right","bottom","left"],Dd=class{constructor(t,r,n,i){this.scrollFrame=0;this.observerQueue=[];this.onScroll=()=>{this.activeScroll.size===0&&(this.scrollState=Th(this.scrollEl),this.handleEntityRegistration())};this.onDragEnd=()=>{this.activeScroll.clear()};this.handleBeginDragScroll=({scrollEntitySide:t,scrollStrength:r})=>{this.isDoneScrolling(t)||(this.activeScroll.set(t,r),this.handleDragScroll())};this.handleUpdateDragScroll=({scrollEntitySide:t,scrollStrength:r})=>{this.isDoneScrolling(t)||this.activeScroll.set(t,r)};this.handleEndDragScroll=({scrollEntitySide:t})=>{this.activeScroll.delete(t)};this.dndManager=t,this.instanceId=et(),this.scopeId=r,this.triggerTypes=n,this.scrollState=Tr,this.parent=i,this.activeScroll=new Map,this.observerHandlers=new Map}initNodes(t){this.scrollEl=t,this.scrollEl.dataset.hitboxid=this.instanceId,this.scrollEl.dataset.scrollid=this.instanceId,this.top=this.createScrollEntity("top"),this.right=this.createScrollEntity("right"),this.bottom=this.createScrollEntity("bottom"),this.left=this.createScrollEntity("left"),this.bindScrollHandlers(),this.observer=new IntersectionObserver(n=>{n.forEach(i=>{var o;let a=(o=i.target.dataset)==null?void 0:o.hitboxid;if(a&&this.observerHandlers.has(a)){let s=this.observerHandlers.get(a);s&&s(i)}})},{root:t,threshold:.1});let{observerQueue:r}=this;this.observerQueue=[],r.forEach(([n,i,a])=>{this.observerHandlers.set(n,a),this.observer.observe(i)}),this.scrollEl.addEventListener("scroll",this.onScroll,{passive:!0,capture:!1}),this.dndManager.emitter.on("scrollResize",this.onScroll),this.scrollEl.win.setTimeout(()=>this.onScroll()),this.dndManager.observeResize(this.scrollEl),this.parent?this.parent.registerObserverHandler(this.instanceId,this.scrollEl,n=>{n.isIntersecting?this.handleEntityRegistration():this.handleEntityUnregistration()}):this.handleEntityRegistration()}destroy(){var t;!this.scrollEl&&!this.observer||(this.observerQueue.length=0,this.handleEntityUnregistration(),this.observer.disconnect(),this.unbindScrollHandlers(),this.scrollEl.removeEventListener("scroll",this.onScroll),this.dndManager.emitter.off("scrollResize",this.onScroll),(t=this.parent)==null||t.unregisterObserverHandler(this.instanceId,this.scrollEl),this.dndManager.unobserveResize(this.scrollEl))}handleEntityRegistration(){bd.forEach(t=>{let r=Dn(this.scrollEl),n=this.getId(t),i=this.dndManager.scrollEntities.has(n),a=this.isDoneScrolling(t);!a&&!i?this.dndManager.registerScrollEntity(n,this[t],r):a&&i&&this.dndManager.unregisterScrollEntity(n,r)})}handleEntityUnregistration(){bd.forEach(t=>{let r=Dn(this.scrollEl),n=this.getId(t);this.dndManager.unregisterScrollEntity(n,r)})}registerObserverHandler(t,r,n){this.observer?(this.observerHandlers.set(t,n),this.observer.observe(r)):this.observerQueue.push([t,r,n])}unregisterObserverHandler(t,r){this.observer?(this.observerHandlers.delete(t),this.observer.unobserve(r)):this.observerQueue=this.observerQueue.filter(n=>n[0]!==t)}bindScrollHandlers(){bd.forEach(t=>{let r=this.getId(t);this.dndManager.dragManager.emitter.on("beginDragScroll",this.handleBeginDragScroll,r),this.dndManager.dragManager.emitter.on("updateDragScroll",this.handleUpdateDragScroll,r),this.dndManager.dragManager.emitter.on("endDragScroll",this.handleEndDragScroll,r),this.dndManager.dragManager.emitter.on("dragEnd",this.onDragEnd)})}unbindScrollHandlers(){bd.forEach(t=>{let r=this.getId(t);this.dndManager.dragManager.emitter.off("beginDragScroll",this.handleBeginDragScroll,r),this.dndManager.dragManager.emitter.off("updateDragScroll",this.handleUpdateDragScroll,r),this.dndManager.dragManager.emitter.off("endDragScroll",this.handleEndDragScroll,r),this.dndManager.dragManager.emitter.off("dragEnd",this.onDragEnd)})}isDoneScrolling(t){switch(t){case"top":return this.scrollState.y===0;case"right":return this.scrollState.x===this.scrollState.maxX;case"bottom":return this.scrollState.y===this.scrollState.maxY;case"left":return this.scrollState.x===0}}handleDragScroll(){this.activeScroll.size!==0&&this.scrollEl.win.requestAnimationFrame(()=>{let t={left:0,top:0};this.activeScroll.forEach((r,n)=>{if(this.isDoneScrolling(n))return this.activeScroll.delete(n);let i=["left","right"].includes(n)?"left":"top",a=["right","bottom"].includes(n);t[i]=a?Math.max(wd-wd*r/35,0):Math.min(-wd+wd*r/35,0)}),this.scrollEl.scrollBy(t),this.scrollState=Th(this.scrollEl),this.handleEntityRegistration(),this.handleDragScroll()})}getId(t){return`${this.instanceId}-${t}`}getPath(t){var r,n,i,a;switch(t){case"right":return[...((r=this.parent)==null?void 0:r.getPath())||[],1];case"bottom":return[...((n=this.parent)==null?void 0:n.getPath())||[],2];case"left":return[...((i=this.parent)==null?void 0:i.getPath())||[],3]}return[...((a=this.parent)==null?void 0:a.getPath())||[],0]}getScrollShift(){var r,n,i;let t=(r=this.parent)==null?void 0:r.getScrollShift();return{x:Xt((n=this.parent)==null?void 0:n.scrollState.x)+Xt(t==null?void 0:t.x),y:Xt((i=this.parent)==null?void 0:i.scrollState.y)+Xt(t==null?void 0:t.y)}}createScrollEntity(t){var n,i;let r=this;return{scopeId:this.scopeId,entityId:r.getId(t),initial:_h(this.scrollEl.getBoundingClientRect(),((n=this.parent)==null?void 0:n.scrollState)||Tr,((i=this.parent)==null?void 0:i.getScrollShift())||vi,t),getParentScrollState(){var a;return((a=r.parent)==null?void 0:a.scrollState)||Tr},getParentScrollShift(){var a;return((a=r.parent)==null?void 0:a.getScrollShift())||vi},recalcInitial(){var a,o;this.initial=_h(r.scrollEl.getBoundingClientRect(),((a=r.parent)==null?void 0:a.scrollState)||Tr,((o=r.parent)==null?void 0:o.getScrollShift())||vi,t)},getHitbox(){return Bu(this.initial[0],this.initial[1],this.initial[2],this.initial[3],this.getParentScrollState(),this.getParentScrollShift())},getPath(){return r.getPath(t)},getData(){return{id:r.getId(t),type:HN,side:t,accepts:r.triggerTypes||[],scrollContainer:r.scrollEl,win:Dn(r.scrollEl)}}}}};function $k({scrollRef:e,triggerTypes:t,children:r}){let n=Ee(cn),i=Ee(ma),a=Ee(ol),o=Fe(),s=Re(()=>{if(n){o.current&&o.current.destroy();let u=new Dd(n,i,t||[],a);return o.current=u,u}return null},[n,i,e,t,a]);return Nu([e],()=>{var u;return(u=o.current)==null?void 0:u.initNodes(e.current)},()=>{var u;return(u=o.current)==null?void 0:u.destroy()}),s?E(ol.Provider,{value:s,children:r}):null}function Sd({className:e,children:t,triggerTypes:r,isStatic:n,id:i,index:a}){let{setRef:o,scrollRef:s}=Vk(i,a);return E("div",{ref:o,className:Ge([e,$("scroll-container")]),children:n?t:E($k,{scrollRef:s,triggerTypes:r,children:t})})}function Fa({index:e,accepts:t,className:r,isStatic:n,children:i}){let a=Fe(null),o=Fe(null),s=Re(()=>({id:et(),type:"placeholder",accepts:t}),t);return E("div",{ref:o,className:Ge([r,$("placeholder")]),children:E("div",{ref:a,children:n?i:E(ei,{elementRef:a,measureRef:o,id:s.id,index:e,data:s,children:i})})})}var wg={width:0,height:0},BN=100,Ed=class{constructor(t,r,n){this.hitboxDimensions=wg;this.handleDragStart=({dragEntity:t,dragEntityMargin:r,dragOriginHitbox:n})=>{let i=t==null?void 0:t.entityId,a=i?this.sortables.has(i):null;!t||!a||!n||(this.setSortState(!0),this.hitboxDimensions=Fh(n,r),this.activatePlaceholder(this.hitboxDimensions,Lr.none),this.sortables.forEach(([o,s,u])=>{let l=js(t.getPath(),o.getPath()),c=o.entityId;if(l===2)return this.hidden.add(c),this.hideDraggingEntity(u);l===1&&(this.shifted.has(c)||this.shifted.add(c),this.shiftEl(s,Lr.none,this.hitboxDimensions))}))};this.dragEndTimeout=0;this.handleDragEnd=({primaryIntersection:t,dragPosition:r,dragOriginHitbox:n,dragEntity:i})=>{let a=()=>{if(t&&i){let{acceptsSort:l}=t.getData();if(l&&!l.includes(i.getData().type)){let d=this.sortables.get(t.entityId);d&&d[2].removeClass("is-dropping")}}};if(!this.isSorting||!r||!n||!i){if(a(),!t&&i&&this.sortables.has(i.entityId))return this.resetSelf({maintainHidden:!1});if(t&&i){let l=(t==null?void 0:t.getHitbox())||n,c=ys({position:r,destination:{x:l[0],y:l[1]}});return this.dndManager.win.setTimeout(()=>{this.resetSelf({maintainHidden:!1})},c)}return this.resetSelf({maintainHidden:!0})}let{win:o}=this.dndManager;o.clearTimeout(this.dragEnterTimeout),o.clearTimeout(this.dragLeaveTimeout),o.clearTimeout(this.dragEndTimeout);let s=(t==null?void 0:t.getHitbox())||n,u=i.scopeId==="htmldnd"?0:ys({position:r,destination:{x:s[0],y:s[1]}});this.dragEndTimeout=o.setTimeout(()=>{let l=i.entityId.split(":::").pop(),c=t==null?void 0:t.entityId.split(":::").pop();a(),t&&this.sortables.has(t.entityId)&&c!==l&&this.dndManager.onDrop(i,t),this.resetSelf({maintainHidden:!1,shiftTransition:Lr.none,placeholderTransition:Lr.none})},u),this.hitboxDimensions=wg};this.dragEnterTimeout=0;this.handleDragEnter=({dragEntity:t,dragEntityMargin:r,dragOriginHitbox:n,primaryIntersection:i})=>{let a=i==null?void 0:i.entityId,o=a?this.sortables.has(a):null;if(!t||!i||!o||!n){!o&&this.isSorting&&this.resetSelf({maintainHidden:!0,maintainPlaceholder:!0});return}if(t.entityId===i.entityId)return;let{win:s}=this.dndManager;s.clearTimeout(this.dragLeaveTimeout),s.clearTimeout(this.dragEnterTimeout),this.dragEnterTimeout=s.setTimeout(()=>{let u=this.hitboxDimensions=Fh(n,r);this.setSortState(!0),this.activatePlaceholder(u,Lr.placeholder);let{acceptsSort:l}=i.getData();if(l&&!l.includes(t.getData().type)){let d=this.sortables.get(i.entityId);d&&d[2].addClass("is-dropping"),this.sortables.forEach(([m,h])=>{let g=m.entityId;this.shifted.has(g)&&(this.shifted.delete(g),this.resetEl(h))});return}this.sortables.forEach(([d,m])=>{let h=js(i.getPath(),d.getPath()),g=d.entityId;!this.hidden.has(g)&&(h===2||h===1)?this.shifted.has(g)||(this.shifted.add(g),this.shiftEl(m,Lr.outOfTheWay,u)):this.shifted.has(g)&&(this.shifted.delete(g),this.resetEl(m))})},10)};this.dragLeaveTimeout=0;this.handleDragLeave=({dragEntity:t,primaryIntersection:r})=>{if(!this.isSorting)return;let{acceptsSort:n}=r.getData();if(n&&!n.includes(t.getData().type)){let o=this.sortables.get(r.entityId);o&&o[2].removeClass("is-dropping")}let{win:a}=this.dndManager;a.clearTimeout(this.dragLeaveTimeout),a.clearTimeout(this.dragEnterTimeout),this.dragLeaveTimeout=a.setTimeout(()=>{this.resetSelf({maintainHidden:!0,maintainPlaceholder:!0})},BN),this.hitboxDimensions=wg};this.instanceId=et(),this.dndManager=t,this.sortables=new Map,this.shifted=new Set,this.hidden=new Set,this.isSorting=!1,this.axis=r,this.placeholder=null,this.sortListeners=n?[n]:[],t.dragManager.emitter.on("dragStart",this.handleDragStart),t.dragManager.emitter.on("dragEnd",this.handleDragEnd),t.dragManager.emitter.on("dragEnter",this.handleDragEnter),t.dragManager.emitter.on("dragLeave",this.handleDragLeave)}destroy(){this.dndManager.win.clearTimeout(this.dragLeaveTimeout),this.dndManager.win.clearTimeout(this.dragEndTimeout),this.dndManager.dragManager.emitter.off("dragStart",this.handleDragStart),this.dndManager.dragManager.emitter.off("dragEnd",this.handleDragEnd),this.dndManager.dragManager.emitter.off("dragEnter",this.handleDragEnter),this.dndManager.dragManager.emitter.off("dragLeave",this.handleDragLeave)}registerSortable(t,r,n,i){let a=r.getData().type;this.sortables.set(t,[r,n,i]),a==="placeholder"?(this.placeholder=[r,n,i],i.dataset.axis=this.axis,ui(i,"transition",Lr.none)):ui(n,"transition",Lr.none)}unregisterSortable(t){this.sortables.delete(t)}resetSelf({maintainHidden:t,maintainPlaceholder:r,shiftTransition:n,placeholderTransition:i}){this.isSorting&&this.setSortState(!1),this.isPlaceholderActive&&!r&&this.deactivatePlaceholder(i),this.shifted.size>0&&(this.shifted.forEach(a=>{if(this.sortables.has(a)){let[,o]=this.sortables.get(a);this.resetEl(o,n)}}),this.shifted.clear()),!t&&this.hidden.size>0&&(this.hidden.forEach(a=>{if(this.sortables.has(a)){let[,,o]=this.sortables.get(a);this.resetEl(o,n)}}),this.hidden.clear())}activatePlaceholder(t,r){if(this.placeholder){let n=this.axis==="horizontal",[,,i]=this.placeholder;ui(i,"transition",r),ui(i,n?"width":"height",`${n?t.width:t.height}px`),this.isPlaceholderActive=!0}}deactivatePlaceholder(t=Lr.placeholder){if(this.placeholder){let[,,r]=this.placeholder;ui(r,"transition",t),fd(r,"width"),fd(r,"height"),this.isPlaceholderActive=!1}}hideDraggingEntity(t){ui(t,"display","none")}shiftEl(t,r,n){let i=this.axis==="horizontal"?`translate3d(${n.width}px, 0, 0)`:`translate3d(0, ${n.height}px, 0)`;ui(t,"transition",r),ui(t,"transform",i)}resetEl(t,r=Lr.outOfTheWay){ui(t,"transition",r),ui(t,"transform","translate3d(0, 0, 0)"),fd(t,"display")}addSortNotifier(t){this.sortListeners.push(t)}removeSortNotifier(t){this.sortListeners=this.sortListeners.filter(r=>r!==t)}setSortState(t){this.isSorting!==t&&(this.isSorting=t,this.sortListeners.forEach(r=>r(t)))}};function Uk(e){return E(ct,{children:e.children})}function Ia({axis:e,children:t,onSortChange:r}){let n=Ee(cn),i=Fe(),a=Re(()=>{if(n){i.current&&i.current.destroy();let o=new Ed(n,e,r);return i.current=o,o}return null},[n,e,r]);return Ae(()=>()=>{var o;return(o=i.current)==null?void 0:o.destroy()},[]),a?E($u.Provider,{value:a,children:t}):null}var $N=function(){if(typeof window=="undefined"||typeof window.addEventListener!="function")return!1;var e=!1,t=Object.defineProperty({},"passive",{get:function(){e=!0}}),r=function(){return null};return window.addEventListener("test",r,t),window.removeEventListener("test",r,t),e},UN="ignore-onclickoutside",Wk=function(t,r){var n;return(n=t.classList)==null?void 0:n.contains(r)},Yk=function(t,r){for(var n=t.target||t;n;){if(Array.isArray(r)){if(r.some(function(i){return Wk(n,i)}))return!0}else if(Wk(n,r))return!0;n=n.parentElement}return!1},WN=function(t){return document.documentElement.clientWidth<=t.clientX||document.documentElement.clientHeight<=t.clientY},zk=function(t){return t.includes("touch")&&$N()?{passive:!0}:!1},YN=function(t,r){var n=r===void 0?{}:r,i=n.refs,a=n.disabled,o=n.eventTypes,s=o===void 0?["mousedown","touchstart"]:o,u=n.excludeScrollbar,l=n.ignoreClass,c=l===void 0?UN:l,d=n.detectIFrame,m=d===void 0?!0:d,h=Ne([]),g=h[0],y=h[1],v=Fe(t);v.current=t;var D=Ye(function(I){return y(function(C){return[].concat(C,[{current:I}])})},[]);return Ae(function(){if(!(!(i!=null&&i.length)&&!g.length)){var I=function(){var P=[];return(i||g).forEach(function(B){var G=B.current;return G&&P.push(G)}),P},C=function(P){!Yk(P,c)&&!(u&&WN(P))&&I().every(function(B){return!B.contains(P.target)})&&v.current(P)},x=function(P){return activeWindow.setTimeout(function(){var B=document,G=B.activeElement;(G==null?void 0:G.tagName)==="IFRAME"&&!Yk(G,c)&&!I().includes(G)&&v.current(P)},0)},O=function(){s.forEach(function(P){return document.removeEventListener(P,C,zk(P))}),m&&window.removeEventListener("blur",x)};if(a){O();return}return s.forEach(function(A){return document.addEventListener(A,C,zk(A))}),m&&window.addEventListener("blur",x),function(){return O()}}},[g,c,u,a,m,JSON.stringify(s)]),D},ws=YN;function kd(e,t){var r;if(t.types.includes("text/uri-list")||["file","files","link","folder"].includes((r=e.app.dragManager.draggable)==null?void 0:r.type))return"link";if(t.types.includes("text/html")||t.types.includes("text/plain"))return"copy"}function bg({addItems:e,editState:t,setEditState:r,hideButton:n}){let{stateManager:i}=Ee(tt),a=Fe(),o=()=>r(0),s=ws(o,{ignoreClass:[$("ignore-click-outside"),"mobile-toolbar","suggestion-container"]}),u=l=>{e([i.getNewItem(l," ")]);let c=a.current;c&&c.dispatch({changes:{from:0,to:c.state.doc.length,insert:""}})};return kn(t)?E("div",{className:$("item-form"),ref:s,children:E("div",{className:$("item-input-wrapper"),children:E(_a,{editorRef:a,editState:{x:0,y:0},className:$("item-input"),placeholder:R("Card title..."),onEnter:(l,c,d)=>{if(!Ca(i,c,d))return u(l.state.doc.toString()),!0},onSubmit:l=>{u(l.state.doc.toString())},onEscape:o})})}):n?null:E("div",{className:$("item-button-wrapper"),children:E("button",{className:$("new-item-button"),onClick:()=>r({x:0,y:0}),onDragOver:l=>{kd(i,l.dataTransfer)&&r({x:0,y:0})},children:[E("span",{className:$("item-button-plus"),children:"+"})," ",R("Add a card")]})})}var rx=Ct(ln());function xd(e,t){let r=e.length,n=t.start;for(;n>0&&e[n-1]===" ";)n--;let i=t.end;for(;i<r-1&&e[i+1]===" ";)i++;return e.slice(0,n)+"\0".repeat(i-n)+e.slice(i)}function Kk(e){return e.replace(/ *\0+ */g," ").trim()}function jk(e){return e.trim().replace(/(?:\r\n|\n)/g,"<br>")}function Dg(e){return e.replace(/<br>/g,` +`).trim()}function Cd(e){let t=app.vault.getConfig("useTab");return e.trim().replace(/(?:\r\n|\n)/g,t?` + `:` + `)}function Sg(e,t){if(!t.data.blockId)return e;let r=e.split(/(?:\r\n|\n)/g);return r[0]+=" ^"+t.data.blockId,r.join(` +`)}function qk(e){let t=e.split(/(?:\r\n|\n)/g);return t[0]=t[0].replace(/\s+\^([a-zA-Z0-9-]+)$/,""),t.join(` +`)}function Eg(e){return e.trim().replace(/(?:\r\n|\n)(?: {4}|\t)/g,` +`)}function co(e){e=Dg(e);let t=e.match(/^(.*?)\s*\((\d+)\)$/);return t==null?{title:e,maxItems:0}:{title:t[1],maxItems:Number(t[2])}}function Gk(e){return E("svg",{...e,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",children:E("path",{fill:"currentColor",d:"M5 3h2v2H5zm0 4h2v2H5zm0 4h2v2H5zm4-8h2v2H9zm0 4h2v2H9zm0 4h2v2H9z"})})}var $l=Ct(ln()),_d=require("obsidian");var Jk={delete:{description:R("Are you sure you want to delete this list and all its cards?"),confirm:R("Yes, delete list")},archive:{description:R("Are you sure you want to archive this list and all its cards?"),confirm:R("Yes, archive list")},"archive-items":{description:R("Are you sure you want to archive all cards in this list?"),confirm:R("Yes, archive cards")}};function Zk({action:e,cancel:t,onAction:r,lane:n}){return Ae(()=>{e&&n.children.length===0&&r()},[e,n.children.length]),!e||e&&n.children.length===0?null:E("div",{className:$("action-confirm-wrapper"),children:[E("div",{className:$("action-confirm-text"),children:Jk[e].description}),E("div",{children:[E("button",{onClick:r,className:$("confirm-action-button"),children:Jk[e].confirm}),E("button",{onClick:t,className:$("cancel-action-button"),children:"Cancel"})]})]})}function Qk({setEditState:e,path:t,lane:r}){let{stateManager:n,boardModifiers:i}=Ee(tt),[a,o]=Ne(null);return{settingsMenu:Re(()=>{let u=new Set,l=!1,c=!1;r.children.forEach(h=>{var y;let g=h.data.metadata.inlineMetadata;g&&g.forEach(v=>{v.key!=="repeat"&&(u.has(v.key)||u.add(v.key))}),!l&&h.data.metadata.date&&(l=!0),!c&&((y=h.data.metadata.tags)!=null&&y.length)&&(c=!0)});let d=new _d.Menu().addItem(h=>{h.setIcon("lucide-edit-3").setTitle(R("Edit list")).onClick(()=>e({x:0,y:0}))}).addItem(h=>{h.setIcon("lucide-archive").setTitle(R("Archive cards")).onClick(()=>o("archive-items"))}).addSeparator().addItem(h=>{h.setIcon("arrow-left-to-line").setTitle(R("Insert list before")).onClick(()=>i.insertLane(t,{...Ea,id:et(),children:[],data:{title:"",shouldMarkItemsComplete:!1,forceEditMode:!0}}))}).addItem(h=>{h.setIcon("arrow-right-to-line").setTitle(R("Insert list after")).onClick(()=>{let g=[...t];g[g.length-1]=g[g.length-1]+1,i.insertLane(g,{...Ea,id:et(),children:[],data:{title:"",shouldMarkItemsComplete:!1,forceEditMode:!0}})})}).addSeparator().addItem(h=>{h.setIcon("lucide-archive").setTitle(R("Archive list")).onClick(()=>o("archive"))}).addItem(h=>{h.setIcon("lucide-trash-2").setTitle(R("Delete list")).onClick(()=>o("delete"))}).addSeparator(),m=h=>{h.addItem(g=>{g.setIcon("arrow-down-up").setTitle(R("Sort by card text")).onClick(()=>{let y=r.children.slice(),v=r.data.sorted===0;y.sort((D,I)=>v?I.data.title.localeCompare(D.data.title):D.data.title.localeCompare(I.data.title)),i.updateLane(t,(0,$l.default)(r,{children:{$set:y},data:{sorted:{$set:r.data.sorted===0?1:0}}}))})}),l&&h.addItem(g=>{g.setIcon("arrow-down-up").setTitle(R("Sort by date")).onClick(()=>{let y=r.children.slice(),v=r.data.sorted===2?-1:1;y.sort((D,I)=>{let C=D.data.metadata.time||D.data.metadata.date,x=I.data.metadata.time||I.data.metadata.date;return C&&!x?-1*v:x&&!C?1*v:!C&&!x?0:(C.isBefore(x)?-1:1)*v}),i.updateLane(t,(0,$l.default)(r,{children:{$set:y},data:{sorted:{$set:r.data.sorted===2?3:2}}}))})}),c&&h.addItem(g=>{g.setIcon("arrow-down-up").setTitle(R("Sort by tags")).onClick(()=>{let y=n.getSetting("tag-sort"),v=r.children.slice(),D=r.data.sorted===4;v.sort((I,C)=>{var B,G;let x=I.data.metadata.tags,O=C.data.metadata.tags;if(!(x!=null&&x.length)&&!(O!=null&&O.length))return 0;if(!(x!=null&&x.length))return 1;if(!(O!=null&&O.length))return-1;let A=(B=y==null?void 0:y.findIndex(J=>x.includes(J.tag)))!=null?B:-1,P=(G=y==null?void 0:y.findIndex(J=>O.includes(J.tag)))!=null?G:-1;return A>-1&&P<0?D?1:-1:P>-1&&A<0?D?-1:1:A>-1&&P>-1?D?P-A:A-P:D?fr(O.join(""),x.join("")):fr(x.join(""),O.join(""))}),i.updateLane(t,(0,$l.default)(r,{children:{$set:v},data:{sorted:{$set:r.data.sorted===4?5:4}}}))})}),u.size&&u.forEach(g=>{h.addItem(y=>{y.setIcon("arrow-down-up").setTitle(R("Sort by")+" "+No(g).toLocaleLowerCase()).onClick(()=>{let v=r.children.slice(),D=r.data.sorted===g+"-asc";v.sort((I,C)=>{var A,P;let x=(A=I.data.metadata.inlineMetadata)==null?void 0:A.find(B=>B.key===g),O=(P=C.data.metadata.inlineMetadata)==null?void 0:P.find(B=>B.key===g);return x===void 0&&O===void 0?0:x===void 0?1:O===void 0?-1:D?fr(In(O.value,n),In(x.value,n)):fr(In(x.value,n),In(O.value,n))}),i.updateLane(t,(0,$l.default)(r,{children:{$set:v},data:{sorted:{$set:r.data.sorted===g+"-asc"?g+"-desc":g+"-asc"}}}))})})})};return _d.Platform.isPhone?m(d):d.addItem(h=>{let g=h.setTitle(R("Sort by")).setIcon("arrow-down-up").setSubmenu();m(g)}),d},[n,o,t,r]),confirmAction:a,setConfirmAction:o}}var Xk=Ct(ln());function ex({lane:e,lanePath:t,editState:r}){let{boardModifiers:n}=Ee(tt);return kn(r)?E("div",{className:$("lane-setting-wrapper"),children:E("div",{className:$("checkbox-wrapper"),children:[E("div",{className:$("checkbox-label"),children:R("Mark cards in this list as complete")}),E("div",{onClick:()=>n.updateLane(t,(0,Xk.default)(e,{data:{$toggle:["shouldMarkItemsComplete"]}})),className:`checkbox-container ${e.data.shouldMarkItemsComplete?"is-enabled":""}`})]})}):null}function tx({maxItems:e,itemCount:t,editState:r}){let{stateManager:n}=Ee(tt);return n.getSetting("hide-card-count")||kn(r)?null:E("div",{className:Ge([$("lane-title-count"),{"wip-exceeded":e&&e<t}]),children:[t,e>0&&E(ct,{children:[E("span",{className:$("lane-title-count-separator"),children:"/"}),E("span",{className:$("lane-title-count-limit"),children:e})]})]})}function nx({maxItems:e,editState:t,setEditState:r,title:n,onChange:i}){let{stateManager:a}=Ee(tt),o=Fe(null);Ae(()=>{t===1?(o.current!==null&&i(o.current),o.current=null):t===0&&o.current!==null&&(o.current=null)},[t]);let s=Ye(d=>{d.docChanged&&(o.current=d.state.doc.toString().trim())},[]),u=Ye((d,m,h)=>{if(!Ca(a,m,h))return r(1),!0},[r,a]),l=Ye(()=>r(1),[r]),c=Ye(()=>r(0),[r]);return E("div",{className:$("lane-title"),children:kn(t)?E(_a,{editState:t,className:$("lane-input"),onChange:s,onEnter:u,onEscape:c,onSubmit:l,value:cd(n,e)}):E("div",{className:$("lane-title-text"),children:E(Sa,{markdownString:n})})})}function zN({settingsMenu:e,editState:t,setEditState:r,setIsItemInputVisible:n}){let{stateManager:i}=Ee(tt);return E("div",{className:$("lane-settings-button-wrapper"),children:kn(t)?E("a",{onClick:()=>r(null),"aria-label":R("Close"),className:`${$("lane-settings-button")} is-enabled clickable-icon`,children:E(Ut,{name:"lucide-x"})}):E(ct,{children:[n&&E("a",{"aria-label":R("Add a card"),className:`${$("lane-settings-button")} clickable-icon`,onClick:()=>n({x:0,y:0}),onDragOver:a=>{kd(i,a.dataTransfer)&&n({x:0,y:0})},children:E(Ut,{name:"lucide-plus-circle"})}),E("a",{"aria-label":R("More options"),className:`${$("lane-settings-button")} clickable-icon`,onClick:a=>{e.showAtMouseEvent(a)},children:E(Ut,{name:"lucide-more-vertical"})})]})})}var ix=zt(function({lane:t,laneIndex:r,bindHandle:n,setIsItemInputVisible:i,isCollapsed:a,toggleIsCollapsed:o}){let[s,u]=Ne(0),l=Ui(r),{boardModifiers:c}=Ee(tt),{settingsMenu:d,confirmAction:m,setConfirmAction:h}=Qk({setEditState:u,path:l,lane:t});Ae(()=>{t.data.forceEditMode&&u(null)},[t.data.forceEditMode]);let g=Ye(v=>{let{title:D,maxItems:I}=co(v);c.updateLane(l,(0,rx.default)(t,{data:{title:{$set:D},maxItems:{$set:I}}}))},[c,t,l]),y=Ye(v=>{!a&&u({x:v.clientX,y:v.clientY})},[a,u]);return E(ct,{children:[E("div",{onDblClick:y,className:$("lane-header-wrapper"),children:[E("div",{className:$("lane-grip"),ref:n,children:E(Gk,{})}),E("div",{onClick:o,className:$("lane-collapse"),children:E(Ut,{name:"chevron-down"})}),E(nx,{id:t.id,editState:s,maxItems:t.data.maxItems,onChange:g,setEditState:u,title:t.data.title}),E(tx,{editState:s,itemCount:t.children.length,maxItems:t.data.maxItems}),E(zN,{editState:s,setEditState:u,setIsItemInputVisible:i,settingsMenu:d})]}),E(ex,{editState:s,lane:t,lanePath:l}),m&&E(Zk,{lane:t,action:m,onAction:()=>{switch(m){case"archive":c.archiveLane(l);break;case"archive-items":c.archiveLaneItems(l);break;case"delete":c.deleteEntity(l);break}h(null)},cancel:()=>h(null)})]})});var ax=[ft.Item];function KN({isStatic:e,lane:t,laneIndex:r,collapseDir:n,isCollapsed:i=!1}){var be;let[a,o]=Ne(0),[s,u]=Ne(!1),{stateManager:l,boardModifiers:c,view:d}=Ee(tt),m=Ee(zn),h=d.useViewState(_t),g=Ui(r),y=l.useSetting("lane-width"),v=h==="list"&&l.useSetting("full-list-lane-width"),D=l.useSetting("new-card-insertion-method"),I=Re(()=>!(i&&n==="horizontal")&&(v||y)?{width:v?"100%":`${y}px`}:void 0,[v,y,i]),C=Fe(null),x=Fe(null),O=Fe(null),A=Ta(x,O),P=!!t.data.shouldMarkItemsComplete,B=D==="prepend-compact",G=B||D==="prepend",J=Ye(()=>{l.setState(pe=>{let De=[...d.getViewState("list-collapse")];return De[r]=!De[r],d.setViewState("list-collapse",De),(0,kg.default)(pe,{data:{settings:{"list-collapse":{$set:De}}}})})},[l,r]),Q=Ye(pe=>{c[G?"prependItems":"appendItems"]([...g,t.children.length-1],pe.map(De=>(0,kg.default)(De,{data:{checked:{$set:P},checkChar:{$set:P?Zn():" "}}}))),d.getWindow().setTimeout(()=>{var Ce;let De=(Ce=C.current)==null?void 0:Ce.getElementsByClassName($("lane-items"));De.length&&vd([0,G?0:De[0].scrollHeight],{elementToScroll:De[0],speed:200,minDuration:150,easing:U=>U===1?1:1-Math.pow(2,-10*U)})})},[c,g,t,G]),oe=e?Tb:ei,te=e?Uk:Ia,re=!i||e?ct:ei,ne=Re(()=>{if(!i||e)return{};let pe={id:et(),type:"lane",accepts:[ft.Item],acceptsSort:[ft.Lane]};return{elementRef:C,measureRef:x,id:pe.id,index:r,data:pe}},[i,r,e]);return E(Oc.Provider,{value:(be=t.data.sorted)!=null?be:null,children:E("div",{ref:x,className:Ge([$("lane-wrapper"),{"is-sorting":s,"collapse-horizontal":i&&n==="horizontal","collapse-vertical":i&&n==="vertical"}]),style:I,children:E("div",{"data-count":t.children.length,ref:C,className:Ge([$("lane"),{"will-prepend":G}]),children:E(re,{...ne,children:[E(ix,{bindHandle:A,laneIndex:r,lane:t,setIsItemInputVisible:B?o:void 0,isCollapsed:i,toggleIsCollapsed:J}),!(m!=null&&m.query)&&!i&&G&&E(bg,{addItems:Q,hideButton:B,editState:a,setEditState:o}),!i&&E(oe,{elementRef:C,measureRef:x,id:t.id,index:r,data:t,children:E(Sd,{className:Ge([$("lane-items"),$("vertical")]),id:t.id,index:r,isStatic:e,triggerTypes:ax,children:E(te,{onSortChange:u,axis:"vertical",children:[E(Rk,{items:t.children,isStatic:e,shouldMarkItemsComplete:P}),E(Fa,{accepts:ax,index:t.children.length,isStatic:e})]})})}),!(m!=null&&m.query)&&!i&&!G&&E(bg,{addItems:Q,editState:a,setEditState:o})]})})})})}var xg=zt(KN);function jN({lanes:e,collapseDir:t}){let r=Ee(zn),{view:n}=Ee(tt),i=n.useViewState(_t)||"board",a=n.useViewState("list-collapse")||[];return E(ct,{children:e.map((o,s)=>E(xg,{collapseDir:t,isCollapsed:(r==null?void 0:r.query)&&!r.lanes.has(o)||!!a[s],lane:o,laneIndex:s},i+o.id))})}var ox=zt(jN);var sx=require("obsidian");var Md=class{constructor(t,r){this.scrollResizeDebounce=0;this.handleResize=t=>{let r=!1;t.forEach(n=>{let i=Dn(n.target);this.win===i&&(r=!0,n.target.dataset.scrollid&&(this.win.clearTimeout(this.scrollResizeDebounce),this.scrollResizeDebounce=this.win.setTimeout(()=>{this.emitter.listenerCount("scrollResize")&&this.emitter.emit("scrollResize",null)},50)))}),r&&(this.hitboxEntities.forEach(n=>{n.recalcInitial()}),this.scrollEntities.forEach(n=>{n.recalcInitial()}))};this.win=t,this.emitter=new Bo,this.hitboxEntities=new Map,this.scrollEntities=new Map,this.onDrop=r,this.resizeObserver=new ResizeObserver((0,sx.debounce)(this.handleResize,100,!0)),this.dragManager=new hd(t,this.emitter,this.hitboxEntities,this.scrollEntities)}destroy(){this.resizeObserver.disconnect()}observeResize(t){t.instanceOf(HTMLElement)&&this.resizeObserver.observe(t,{box:"border-box"})}unobserveResize(t){t.instanceOf(HTMLElement)&&this.resizeObserver.unobserve(t)}registerHitboxEntity(t,r,n){n===this.win&&this.hitboxEntities.set(t,r)}registerScrollEntity(t,r,n){n===this.win&&this.scrollEntities.set(t,r)}unregisterHitboxEntity(t,r){r===this.win&&this.hitboxEntities.delete(t)}unregisterScrollEntity(t,r){r===this.win&&this.scrollEntities.delete(t)}};function bs({win:e,children:t,onDrop:r}){let n=Fe(r);n.current=r;let i=Re(()=>new Md(e,(a,o)=>n.current(a,o)),[]);return Ae(()=>()=>{i.destroy()},[i]),E(cn.Provider,{value:i,children:E(Bk,{children:t})})}function Cg(e,t,r,n,i,a){let o=[r[0]-n[0],r[1]-n[1],r[2]+n[2],r[3]+n[3]];return{transform:a||`translate3d(${e.x-t.x+o[0]}px, ${e.y-t.y+o[1]}px, 0px)`,width:`${o[2]-o[0]}px`,height:`${o[3]-o[1]}px`,transition:i}}function Ds({children:e}){let t=Ee(cn),[r,n]=Ne(),[i,a]=Ne();return Ae(()=>{if(!t)return;let o=Cb,s=({dragEntity:d,dragOrigin:m,dragPosition:h,dragEntityMargin:g})=>{!d||!h||!m||(o=d.getHitbox(),n(d),a(Cg(h,m,o,g)))},u=({dragOrigin:d,dragPosition:m,dragEntityMargin:h})=>{!m||!d||a(Cg(m,d,o,h))},l=({dragOrigin:d,primaryIntersection:m,dragPosition:h,dragEntityMargin:g})=>{if(m&&h&&d){let y=m.getHitbox(),v={x:y[0],y:y[1]},D=ys({position:h,destination:v}),I=Lr.drop(D),C=Fk.drop(v);a(Cg(h,d,o,g,I,C)),activeWindow.setTimeout(()=>{n(void 0),a(void 0)},D)}else n(void 0),a(void 0)},{emitter:c}=t.dragManager;return c.on("dragStart",s),c.on("dragMove",u),c.on("dragEnd",l),()=>{c.off("dragStart",s),c.off("dragMove",u),c.off("dragEnd",l)}},[t]),!r||!i?null:Oi(e(r,i),r.getData().win.document.body)}function lx(){let e=Ee(cn),[t,r]=Ne(!1);return Ae(()=>{let n=()=>r(!0),i=({primaryIntersection:o,dragPosition:s})=>{let u=(o==null?void 0:o.getHitbox())||[0,0],l={x:u[0],y:u[1]},c=ys({position:s||l,destination:l});activeWindow.setTimeout(()=>r(!1),c)},{emitter:a}=e.dragManager;return a.on("dragStart",n),a.on("dragEnd",i),()=>{a.off("dragStart",n),a.off("dragEnd",i)}},[e]),t}var Zi=Ct(ln()),ux=require("obsidian");function Td(e,t){let r=n=>{let i=t.getSetting("archive-date-format"),a=t.getSetting("archive-date-separator"),o=t.getSetting("append-archive-date"),s=[(0,ux.moment)().format(i)];a&&s.push(a),s.push(n.data.titleRaw),o&&s.reverse();let u=s.join(" ");return t.updateItemContent(n,u)};return{appendItems:(n,i)=>{t.setState(a=>ah(a,n,i))},prependItems:(n,i)=>{t.setState(a=>ow(a,n,i))},insertItems:(n,i)=>{t.setState(a=>Xr(a,n,i))},replaceItem:(n,i)=>{t.setState(a=>Xr(mi(a,n),n,i))},splitItem:(n,i)=>{t.setState(a=>Xr(mi(a,n),n,i))},moveItemToTop:n=>{t.setState(i=>Ri(i,n,[n[0],0]))},moveItemToBottom:n=>{t.setState(i=>{let a=n[0],o=i.children[a];return Ri(i,n,[a,o.children.length])})},addLane:n=>{t.setState(i=>{let a=e.getViewState("list-collapse")||[],o=s=>{let u=[...s];return u.push(!1),u};return e.setViewState("list-collapse",void 0,o),(0,Zi.default)(ah(i,[],[n]),{data:{settings:{"list-collapse":{$set:o(a)}}}})})},insertLane:(n,i)=>{t.setState(a=>{let o=e.getViewState("list-collapse"),s=u=>{let l=[...u];return l.splice(n.last(),0,!1),l};return e.setViewState("list-collapse",void 0,s),(0,Zi.default)(Xr(a,n,[i]),{data:{settings:{"list-collapse":{$set:s(o)}}}})})},updateLane:(n,i)=>{t.setState(a=>oh(a,n,{children:{[n[n.length-1]]:{$set:i}}}))},archiveLane:n=>{t.setState(i=>{let o=un(i,n).children;try{let s=e.getViewState("list-collapse"),u=l=>{let c=[...l];return c.splice(n.last(),1),c};return e.setViewState("list-collapse",void 0,u),(0,Zi.default)(mi(i,n),{data:{settings:{"list-collapse":{$set:u(s)}},archive:{$unshift:t.getSetting("archive-with-date")?o.map(r):o}}})}catch(s){return t.setError(s),i}})},archiveLaneItems:n=>{t.setState(i=>{let o=un(i,n).children;try{return(0,Zi.default)(Du(i,n,{children:{$set:[]}}),{data:{archive:{$unshift:t.getSetting("archive-with-date")?o.map(r):o}}})}catch(s){return t.setError(s),i}})},deleteEntity:n=>{t.setState(i=>{if(un(i,n).type===ft.Lane){let o=e.getViewState("list-collapse"),s=u=>{let l=[...u];return l.splice(n.last(),1),l};return e.setViewState("list-collapse",void 0,s),(0,Zi.default)(mi(i,n),{data:{settings:{"list-collapse":{$set:s(o)}}}})}return mi(i,n)})},updateItem:(n,i)=>{t.setState(a=>oh(a,n,{children:{[n[n.length-1]]:{$set:i}}}))},archiveItem:n=>{t.setState(i=>{let a=un(i,n);try{return(0,Zi.default)(mi(i,n),{data:{archive:{$push:[t.getSetting("archive-with-date")?r(a):a]}}})}catch(o){return t.setError(o),i}})},duplicateEntity:n=>{t.setState(i=>{let a=un(i,n),o=(0,Zi.default)(a,{id:{$set:et()}});if(a.type===ft.Lane){let s=e.getViewState("list-collapse"),u=l=>{let c=[...l];return c.splice(n.last(),0,l[n.last()]),c};return e.setViewState("list-collapse",void 0,u),(0,Zi.default)(Xr(i,n,[o]),{data:{settings:{"list-collapse":{$set:u(s)}}}})}return Xr(i,n,[o])})}}}function cx(e,t){return E(GN,{win:e,plugin:t})}var qN=zt(function({view:t}){return Oi(t.getPortal(),t.contentEl)});function GN({win:e,plugin:t}){let r=t.useKanbanViews(e),n=r.map(a=>E(qN,{view:a},a.id)),i=Ye((a,o)=>{if(!a||!o)return;if(a.scopeId==="htmldnd"){let I=a.getData(),C=t.getStateManagerFromViewID(I.viewId,I.win),x=o.getPath(),O=un(C.state,x.slice(0,-1));try{let A=I.content.map(P=>{var J,Q,oe;let B=C.getNewItem(P," ");if(!!((J=O==null?void 0:O.data)!=null&&J.shouldMarkItemsComplete)){B=(0,Ss.default)(B,{data:{checkChar:{$set:Iu()}}});let te=Ro(B,C.file);if(te){let[re,ne,be]=te,pe=re[be],De=ne[be];return C.getNewItem(pe,De)}}return(0,Ss.default)(B,{data:{checked:{$set:!!((Q=O==null?void 0:O.data)!=null&&Q.shouldMarkItemsComplete)},checkChar:{$set:(oe=O==null?void 0:O.data)!=null&&oe.shouldMarkItemsComplete?Zn():" "}}})});return C.setState(P=>Xr(P,x,A))}catch(A){C.setError(A),console.error(A)}return}let s=a.getPath(),u=o.getPath(),l=a.getData(),c=o.getData(),[,d]=a.scopeId.split(":::"),[,m]=o.scopeId.split(":::"),h=c.acceptsSort&&!c.acceptsSort.includes(l.type);if(d===m){let I=t.getKanbanView(a.scopeId,l.win),C=t.stateManagers.get(I.file);return h&&u.push(0),C.setState(x=>{var G;let O=un(x,s),A=Ri(x,s,u,J=>{if(J.type===ft.Item){let{next:Q}=Au(C,x,s,C,x,u,J);return Q}return J},J=>{if(J.type===ft.Item){let{replacement:Q}=Au(C,x,s,C,x,u,J);return Q}});if(O.type===ft.Lane){let J=s.last(),Q=u.last();J<Q&&(Q-=1);let oe=I.getViewState("list-collapse"),te=re=>{let ne=[...re];return ne.splice(Q,0,ne.splice(J,1)[0]),ne};return I.setViewState("list-collapse",void 0,te),(0,Ss.default)(A,{data:{settings:{"list-collapse":{$set:te(oe)}}}})}let P=u.slice(0,-1),B=un(x,P);return((G=B==null?void 0:B.data)==null?void 0:G.sorted)!==void 0?Du(A,P,{data:{$unset:["sorted"]}}):A})}let g=t.getKanbanView(a.scopeId,l.win),y=t.stateManagers.get(g.file),v=t.getKanbanView(o.scopeId,c.win),D=t.stateManagers.get(v.file);y.setState(I=>{let C=un(I,s),x;if(D.setState(O=>{if(h){let P=un(D.state,u);(D.getSetting("new-card-insertion-method")||"append")==="append"?u.push(P.children.length):u.push(0)}let A=[];if(C.type===ft.Item){let{next:P,replacement:B}=Au(y,I,s,D,O,u,C);x=B,A.push(P)}else A.push(C);if(C.type===ft.Lane){let P=v.getViewState("list-collapse"),B=g.getViewState("list-collapse")[s.last()],G=J=>{let Q=[...J];return Q.splice(u.last(),0,B),Q};return v.setViewState("list-collapse",void 0,G),(0,Ss.default)(Xr(O,u,A),{data:{settings:{"list-collapse":{$set:G(P)}}}})}else return Xr(O,u,A)}),C.type===ft.Lane){let O=g.getViewState("list-collapse"),A=P=>{let B=[...P];return B.splice(s.last(),1),B};return g.setViewState("list-collapse",void 0,A),(0,Ss.default)(mi(I,s),{data:{settings:{"list-collapse":{$set:A(O)}}}})}else return mi(I,s,x)})},[r]);if(n.length)return E(bs,{win:e,onDrop:i,children:[...n,E(Ds,{children:(a,o)=>{let[s,u]=Re(()=>{if(a.scopeId==="htmldnd")return[null,null];let l=a.getData(),c=t.getKanbanView(a.scopeId,l.win),d=t.stateManagers.get(c.file),m=un(d.state,a.getPath()),h=Td(c,d),g=c.file.path;return[m,{view:c,stateManager:d,boardModifiers:h,filePath:g}]},[a]);if((s==null?void 0:s.type)===ft.Lane){let l=(u==null?void 0:u.view.viewSettings[_t])||(u==null?void 0:u.stateManager.getSetting(_t)),c=(u==null?void 0:u.view.viewSettings["list-collapse"])||(u==null?void 0:u.stateManager.getSetting("list-collapse")),d=a.getPath().last();return E(tt.Provider,{value:u,children:E("div",{className:Ge([$("drag-container"),{[$("horizontal")]:l!=="list",[$("vertical")]:l==="list"}]),style:o,children:E(xg,{lane:s,laneIndex:d,isStatic:!0,isCollapsed:!!c[d],collapseDir:l==="list"?"vertical":"horizontal"})})})}return(s==null?void 0:s.type)===ft.Item?E(tt.Provider,{value:u,children:E("div",{className:$("drag-container"),style:o,children:E(gg,{item:s,itemIndex:0,isStatic:!0})})}):E("div",{})}})]})}var _C=Ct(ln()),ea=require("obsidian");var Wx=Ct(ln()),rt=require("obsidian");var fx=Ct(dx()),Id=Ct(ln()),Aa=require("obsidian");var Ad="@",Od="@@",Ul="body";function JN(e){let t=[];return Aa.Vault.recurseChildren(e.vault.getRoot(),r=>{r instanceof Aa.TFolder&&t.push({value:r.path,label:r.path,selected:!1,disabled:!1})}),t}function ZN(e,t){let r=[],n=t?e.vault.getAbstractFileByPath(t):null;return(!n||!(n instanceof Aa.TFolder))&&(n=e.vault.getRoot()),Aa.Vault.recurseChildren(n,i=>{i instanceof Aa.TFile&&r.push({value:i.path,label:i.basename,selected:!1,disabled:!1})}),r}function hx(e){let{templateFolder:t,templatesEnabled:r,templaterPlugin:n}=kh(e),i=ZN(e,t),a=JN(e),o="";return!r&&!n&&(o=R("Note: No template plugins are currently enabled.")),{templateFiles:i,vaultFolders:a,templateWarning:o}}function Mg({choices:e,key:t,warningText:r,local:n,placeHolderStr:i,manager:a}){return o=>{o.controlEl.createEl("select",{},s=>{s.win.setTimeout(()=>{let u=e,[l,c]=a.getSetting(t,n),d=!1;if(c){let g=u.findIndex(y=>y.value===c);if(g>-1){d=!0;let y=e[g];u=(0,Id.default)(u,{$splice:[[g,1]],$unshift:[(0,Id.default)(y,{placeholder:{$set:!0},value:{$set:""},label:{$apply:v=>`${v} (${R("default")})`}})]})}}d||(u=(0,Id.default)(u,{$unshift:[{placeholder:!0,value:"",label:i,selected:!1,disabled:!1}]}));let m=new fx.default(s,{placeholder:!0,position:"bottom",searchPlaceholderValue:R("Search..."),searchEnabled:u.length>10,choices:u}).setChoiceByValue("");l&&typeof l=="string"&&u.findIndex(g=>g.value===l)>-1&&m.setChoiceByValue(l);let h=g=>{let y=g.detail.value;y?a.applySettingsUpdate({[t]:{$set:y}}):a.applySettingsUpdate({$unset:[t]})};s.addEventListener("change",h),a.cleanupFns.push(()=>{m.destroy(),s.removeEventListener("change",h)})}),r&&o.descEl.createDiv({},u=>{u.createEl("strong",{text:r})})})}}var Hd=Ct(ln()),Hg=require("obsidian");var QN={grad:.9,turn:360,rad:360/(2*Math.PI)},Qi=function(e){return typeof e=="string"?e.length>0:typeof e=="number"},Nn=function(e,t,r){return t===void 0&&(t=0),r===void 0&&(r=Math.pow(10,t)),Math.round(r*e)/r+0},jr=function(e,t,r){return t===void 0&&(t=0),r===void 0&&(r=1),e>r?r:e>t?e:t},Sx=function(e){return(e=isFinite(e)?e%360:0)>0?e:e+360},mx=function(e){return{r:jr(e.r,0,255),g:jr(e.g,0,255),b:jr(e.b,0,255),a:jr(e.a)}},Tg=function(e){return{r:Nn(e.r),g:Nn(e.g),b:Nn(e.b),a:Nn(e.a,3)}},XN=/^#([0-9a-f]{3,8})$/i,Ld=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},Ex=function(e){var t=e.r,r=e.g,n=e.b,i=e.a,a=Math.max(t,r,n),o=a-Math.min(t,r,n),s=o?a===t?(r-n)/o:a===r?2+(n-t)/o:4+(t-r)/o:0;return{h:60*(s<0?s+6:s),s:a?o/a*100:0,v:a/255*100,a:i}},kx=function(e){var t=e.h,r=e.s,n=e.v,i=e.a;t=t/360*6,r/=100,n/=100;var a=Math.floor(t),o=n*(1-r),s=n*(1-(t-a)*r),u=n*(1-(1-t+a)*r),l=a%6;return{r:255*[n,s,o,o,u,n][l],g:255*[u,n,n,s,o,o][l],b:255*[o,o,u,n,n,s][l],a:i}},px=function(e){return{h:Sx(e.h),s:jr(e.s,0,100),l:jr(e.l,0,100),a:jr(e.a)}},gx=function(e){return{h:Nn(e.h),s:Nn(e.s),l:Nn(e.l),a:Nn(e.a,3)}},yx=function(e){return kx((r=(t=e).s,{h:t.h,s:(r*=((n=t.l)<50?n:100-n)/100)>0?2*r/(n+r)*100:0,v:n+r,a:t.a}));var t,r,n},Wl=function(e){return{h:(t=Ex(e)).h,s:(i=(200-(r=t.s))*(n=t.v)/100)>0&&i<200?r*n/100/(i<=100?i:200-i)*100:0,l:i/2,a:t.a};var t,r,n,i},eR=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,tR=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,nR=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,rR=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,vx={string:[[function(e){var t=XN.exec(e);return t?(e=t[1]).length<=4?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:e.length===4?Nn(parseInt(e[3]+e[3],16)/255,2):1}:e.length===6||e.length===8?{r:parseInt(e.substr(0,2),16),g:parseInt(e.substr(2,2),16),b:parseInt(e.substr(4,2),16),a:e.length===8?Nn(parseInt(e.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(e){var t=nR.exec(e)||rR.exec(e);return t?t[2]!==t[4]||t[4]!==t[6]?null:mx({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:t[7]===void 0?1:Number(t[7])/(t[8]?100:1)}):null},"rgb"],[function(e){var t=eR.exec(e)||tR.exec(e);if(!t)return null;var r,n,i=px({h:(r=t[1],n=t[2],n===void 0&&(n="deg"),Number(r)*(QN[n]||1)),s:Number(t[3]),l:Number(t[4]),a:t[5]===void 0?1:Number(t[5])/(t[6]?100:1)});return yx(i)},"hsl"]],object:[[function(e){var t=e.r,r=e.g,n=e.b,i=e.a,a=i===void 0?1:i;return Qi(t)&&Qi(r)&&Qi(n)?mx({r:Number(t),g:Number(r),b:Number(n),a:Number(a)}):null},"rgb"],[function(e){var t=e.h,r=e.s,n=e.l,i=e.a,a=i===void 0?1:i;if(!Qi(t)||!Qi(r)||!Qi(n))return null;var o=px({h:Number(t),s:Number(r),l:Number(n),a:Number(a)});return yx(o)},"hsl"],[function(e){var t=e.h,r=e.s,n=e.v,i=e.a,a=i===void 0?1:i;if(!Qi(t)||!Qi(r)||!Qi(n))return null;var o=function(s){return{h:Sx(s.h),s:jr(s.s,0,100),v:jr(s.v,0,100),a:jr(s.a)}}({h:Number(t),s:Number(r),v:Number(n),a:Number(a)});return kx(o)},"hsv"]]},wx=function(e,t){for(var r=0;r<t.length;r++){var n=t[r][0](e);if(n)return[n,t[r][1]]}return[null,void 0]},iR=function(e){return typeof e=="string"?wx(e.trim(),vx.string):typeof e=="object"&&e!==null?wx(e,vx.object):[null,void 0]};var Fg=function(e,t){var r=Wl(e);return{h:r.h,s:jr(r.s+100*t,0,100),l:r.l,a:r.a}},Ig=function(e){return(299*e.r+587*e.g+114*e.b)/1e3/255},bx=function(e,t){var r=Wl(e);return{h:r.h,s:r.s,l:jr(r.l+100*t,0,100),a:r.a}},Dx=function(){function e(t){this.parsed=iR(t)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return e.prototype.isValid=function(){return this.parsed!==null},e.prototype.brightness=function(){return Nn(Ig(this.rgba),2)},e.prototype.isDark=function(){return Ig(this.rgba)<.5},e.prototype.isLight=function(){return Ig(this.rgba)>=.5},e.prototype.toHex=function(){return t=Tg(this.rgba),r=t.r,n=t.g,i=t.b,o=(a=t.a)<1?Ld(Nn(255*a)):"","#"+Ld(r)+Ld(n)+Ld(i)+o;var t,r,n,i,a,o},e.prototype.toRgb=function(){return Tg(this.rgba)},e.prototype.toRgbString=function(){return t=Tg(this.rgba),r=t.r,n=t.g,i=t.b,(a=t.a)<1?"rgba("+r+", "+n+", "+i+", "+a+")":"rgb("+r+", "+n+", "+i+")";var t,r,n,i,a},e.prototype.toHsl=function(){return gx(Wl(this.rgba))},e.prototype.toHslString=function(){return t=gx(Wl(this.rgba)),r=t.h,n=t.s,i=t.l,(a=t.a)<1?"hsla("+r+", "+n+"%, "+i+"%, "+a+")":"hsl("+r+", "+n+"%, "+i+"%)";var t,r,n,i,a},e.prototype.toHsv=function(){return t=Ex(this.rgba),{h:Nn(t.h),s:Nn(t.s),v:Nn(t.v),a:Nn(t.a,3)};var t},e.prototype.invert=function(){return ci({r:255-(t=this.rgba).r,g:255-t.g,b:255-t.b,a:t.a});var t},e.prototype.saturate=function(t){return t===void 0&&(t=.1),ci(Fg(this.rgba,t))},e.prototype.desaturate=function(t){return t===void 0&&(t=.1),ci(Fg(this.rgba,-t))},e.prototype.grayscale=function(){return ci(Fg(this.rgba,-1))},e.prototype.lighten=function(t){return t===void 0&&(t=.1),ci(bx(this.rgba,t))},e.prototype.darken=function(t){return t===void 0&&(t=.1),ci(bx(this.rgba,-t))},e.prototype.rotate=function(t){return t===void 0&&(t=15),this.hue(this.hue()+t)},e.prototype.alpha=function(t){return typeof t=="number"?ci({r:(r=this.rgba).r,g:r.g,b:r.b,a:t}):Nn(this.rgba.a,3);var r},e.prototype.hue=function(t){var r=Wl(this.rgba);return typeof t=="number"?ci({h:t,s:r.s,l:r.l,a:r.a}):Nn(r.h)},e.prototype.isEqual=function(t){return this.toHex()===ci(t).toHex()},e}(),ci=function(e){return e instanceof Dx?e:new Dx(e)};var Rd=Ct(ln());function Pd(){return(Pd=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}function Mx(e,t){if(e==null)return{};var r,n,i={},a=Object.keys(e);for(n=0;n<a.length;n++)t.indexOf(r=a[n])>=0||(i[r]=e[r]);return i}function Og(e){var t=Fe(e),r=Fe(function(n){t.current&&t.current(n)});return t.current=e,r.current}var Es=function(e,t,r){return t===void 0&&(t=0),r===void 0&&(r=1),e>r?r:e<t?t:e},Yl=function(e){return"touches"in e},Lg=function(e){return e&&e.ownerDocument.defaultView||self},xx=function(e,t,r){var n=e.getBoundingClientRect(),i=Yl(t)?function(a,o){for(var s=0;s<a.length;s++)if(a[s].identifier===o)return a[s];return a[0]}(t.touches,r):t;return{left:Es((i.pageX-(n.left+Lg(e).pageXOffset))/n.width),top:Es((i.pageY-(n.top+Lg(e).pageYOffset))/n.height)}},Cx=function(e){!Yl(e)&&e.preventDefault()},Ng=$e.memo(function(e){var t=e.onMove,r=e.onKey,n=Mx(e,["onMove","onKey"]),i=Fe(null),a=Og(t),o=Og(r),s=Fe(null),u=Fe(!1),l=Re(function(){var h=function(v){Cx(v),(Yl(v)?v.touches.length>0:v.buttons>0)&&i.current?a(xx(i.current,v,s.current)):y(!1)},g=function(){return y(!1)};function y(v){var D=u.current,I=Lg(i.current),C=v?I.addEventListener:I.removeEventListener;C(D?"touchmove":"mousemove",h),C(D?"touchend":"mouseup",g)}return[function(v){var D=v.nativeEvent,I=i.current;if(I&&(Cx(D),!function(x,O){return O&&!Yl(x)}(D,u.current)&&I)){if(Yl(D)){u.current=!0;var C=D.changedTouches||[];C.length&&(s.current=C[0].identifier)}I.focus(),a(xx(I,D,s.current)),y(!0)}},function(v){var D=v.which||v.keyCode;D<37||D>40||(v.preventDefault(),o({left:D===39?.05:D===37?-.05:0,top:D===40?.05:D===38?-.05:0}))},y]},[o,a]),c=l[0],d=l[1],m=l[2];return Ae(function(){return m},[m]),$e.createElement("div",Pd({},n,{onTouchStart:c,onMouseDown:c,className:"react-colorful__interactive",ref:i,onKeyDown:d,tabIndex:0,role:"slider"}))}),Nd=function(e){return e.filter(Boolean).join(" ")},Rg=function(e){var t=e.color,r=e.left,n=e.top,i=n===void 0?.5:n,a=Nd(["react-colorful__pointer",e.className]);return $e.createElement("div",{className:a,style:{top:100*i+"%",left:100*r+"%"}},$e.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},hr=function(e,t,r){return t===void 0&&(t=0),r===void 0&&(r=Math.pow(10,t)),Math.round(r*e)/r},xG={grad:.9,turn:360,rad:360/(2*Math.PI)};var Tx=function(e){var t=e.s,r=e.v,n=e.a,i=(200-t)*r/100;return{h:hr(e.h),s:hr(i>0&&i<200?t*r/100/(i<=100?i:200-i)*100:0),l:hr(i/2),a:hr(n,2)}},Pg=function(e){var t=Tx(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},Ag=function(e){var t=Tx(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},aR=function(e){var t=e.h,r=e.s,n=e.v,i=e.a;t=t/360*6,r/=100,n/=100;var a=Math.floor(t),o=n*(1-r),s=n*(1-(t-a)*r),u=n*(1-(1-t+a)*r),l=a%6;return{r:hr(255*[n,s,o,o,u,n][l]),g:hr(255*[u,n,n,s,o,o][l]),b:hr(255*[o,o,u,n,n,s][l]),a:hr(i,2)}};var oR=function(e){var t=/rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return t?sR({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:t[7]===void 0?1:Number(t[7])/(t[8]?100:1)}):{h:0,s:0,v:0,a:1}};var sR=function(e){var t=e.r,r=e.g,n=e.b,i=e.a,a=Math.max(t,r,n),o=a-Math.min(t,r,n),s=o?a===t?(r-n)/o:a===r?2+(n-t)/o:4+(t-r)/o:0;return{h:hr(60*(s<0?s+6:s)),s:hr(a?o/a*100:0),v:hr(a/255*100),a:i}};var lR=$e.memo(function(e){var t=e.hue,r=e.onChange,n=Nd(["react-colorful__hue",e.className]);return $e.createElement("div",{className:n},$e.createElement(Ng,{onMove:function(i){r({h:360*i.left})},onKey:function(i){r({h:Es(t+360*i.left,0,360)})},"aria-label":"Hue","aria-valuenow":hr(t),"aria-valuemax":"360","aria-valuemin":"0"},$e.createElement(Rg,{className:"react-colorful__hue-pointer",left:t/360,color:Pg({h:t,s:100,v:100,a:1})})))}),uR=$e.memo(function(e){var t=e.hsva,r=e.onChange,n={backgroundColor:Pg({h:t.h,s:100,v:100,a:1})};return $e.createElement("div",{className:"react-colorful__saturation",style:n},$e.createElement(Ng,{onMove:function(i){r({s:100*i.left,v:100-100*i.top})},onKey:function(i){r({s:Es(t.s+100*i.left,0,100),v:Es(t.v-100*i.top,0,100)})},"aria-label":"Color","aria-valuetext":"Saturation "+hr(t.s)+"%, Brightness "+hr(t.v)+"%"},$e.createElement(Rg,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:Pg(t)})))}),cR=function(e,t){if(e===t)return!0;for(var r in e)if(e[r]!==t[r])return!1;return!0},dR=function(e,t){return e.replace(/\s/g,"")===t.replace(/\s/g,"")};function fR(e,t,r){var n=Og(r),i=Ne(function(){return e.toHsva(t)}),a=i[0],o=i[1],s=Fe({color:t,hsva:a});Ae(function(){if(!e.equal(t,s.current.color)){var l=e.toHsva(t);s.current={hsva:l,color:t},o(l)}},[t,e]),Ae(function(){var l;cR(a,s.current.hsva)||e.equal(l=e.fromHsva(a),s.current.color)||(s.current={hsva:a,color:l},n(l))},[a,e,n]);var u=Ye(function(l){o(function(c){return Object.assign({},c,l)})},[]);return[a,u]}var hR,mR=typeof window!="undefined"?Ai:Ae,pR=function(){return hR||(typeof __webpack_nonce__!="undefined"?__webpack_nonce__:void 0)};var _x=new Map,gR=function(e){mR(function(){var t=e.current?e.current.ownerDocument:document;if(t!==void 0&&!_x.has(t)){var r=t.createElement("style");r.innerHTML=`.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill-opacity=".05"><path d="M8 0h8v8H8zM0 8h8v8H0z"/></svg>')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`,_x.set(t,r);var n=pR();n&&r.setAttribute("nonce",n),t.head.appendChild(r)}},[])};var yR=function(e){var t=e.className,r=e.hsva,n=e.onChange,i={backgroundImage:"linear-gradient(90deg, "+Ag(Object.assign({},r,{a:0}))+", "+Ag(Object.assign({},r,{a:1}))+")"},a=Nd(["react-colorful__alpha",t]),o=hr(100*r.a);return $e.createElement("div",{className:a},$e.createElement("div",{className:"react-colorful__alpha-gradient",style:i}),$e.createElement(Ng,{onMove:function(s){n({a:s.left})},onKey:function(s){n({a:Es(r.a+s.left)})},"aria-label":"Alpha","aria-valuetext":o+"%","aria-valuenow":o,"aria-valuemin":"0","aria-valuemax":"100"},$e.createElement(Rg,{className:"react-colorful__alpha-pointer",left:r.a,color:Ag(r)})))},vR=function(e){var t=e.className,r=e.colorModel,n=e.color,i=n===void 0?r.defaultColor:n,a=e.onChange,o=Mx(e,["className","colorModel","color","onChange"]),s=Fe(null);gR(s);var u=fR(r,i,a),l=u[0],c=u[1],d=Nd(["react-colorful",t]);return $e.createElement("div",Pd({},o,{ref:s,className:d}),$e.createElement(uR,{hsva:l,onChange:c}),$e.createElement(lR,{hue:l.h,onChange:c}),$e.createElement(yR,{hsva:l,onChange:c,className:"react-colorful__last-control"}))};var wR={defaultColor:"rgba(0, 0, 0, 1)",toHsva:oR,fromHsva:function(e){var t=aR(e);return"rgba("+t.r+", "+t.g+", "+t.b+", "+t.a+")"},equal:dR},Fx=function(e){return $e.createElement(vR,Pd({},e,{colorModel:wR}))};function Ix(e){let t=ci(e);if(!t.isValid())return null;let r=t.toRgb();return{rgba:`rgba(${r.r}, ${r.g}, ${r.b}, ${r.a})`,hexa:t.toHex()}}function zl({color:e,setColor:t,defaultColor:r}){let[n,i]=Ne(e||r),[a,o]=Ne(e||r),[s,u]=Ne(!1),l=Ye(d=>{let m=Ix(d||r);m&&(o(m.hexa),i(m.rgba),t(m.rgba))},[t]);Ae(()=>{if(!e||!r)return;let d=Ix(e||r);d&&(i(d.rgba),o(d.hexa))},[]);let c=ws(()=>{u(!1)});return E("div",{ref:c,className:$("color-picker-wrapper"),children:[s&&E("div",{className:$("color-picker"),children:E(Fx,{color:n,onChange:l})}),E("input",{type:"text",value:a,onChange:d=>l(d.target.value),onFocus:()=>{u(!0)}})]})}function bR({tagColorKey:e,deleteKey:t,updateKey:r,defaultColors:n}){return E("div",{className:$("setting-item-wrapper"),children:E("div",{className:$("setting-item"),children:[E("div",{className:`${$("setting-controls-wrapper")} ${$("tag-color-input")}`,children:[E("div",{className:$("setting-input-wrapper"),children:[E("div",{children:[E("div",{className:$("setting-item-label"),children:R("Tag")}),E("input",{type:"text",placeholder:"#tag",value:e.tagKey,onChange:i=>{let a=i.currentTarget.value;r(a[0]==="#"?a:"#"+a,e.color,e.backgroundColor)}})]}),E("div",{children:[E("div",{className:$("setting-item-label"),children:R("Background color")}),E(zl,{color:e.backgroundColor,setColor:i=>{r(e.tagKey,e.color,i)},defaultColor:n.backgroundColor})]}),E("div",{children:[E("div",{className:$("setting-item-label"),children:R("Text color")}),E(zl,{color:e.color,setColor:i=>{r(e.tagKey,i,e.backgroundColor)},defaultColor:n.color})]})]}),E("div",{className:$("setting-toggle-wrapper"),children:E("div",{children:E("div",{className:$("item-tags"),children:[E("a",{className:`tag ${$("item-tag")}`,children:"#tag1"}),E("a",{className:`tag ${$("item-tag")}`,style:{"--tag-color":e.color,"--tag-background":e.backgroundColor},children:e.tagKey||"#tag"}),E("a",{className:`tag ${$("item-tag")}`,children:"#tag2"})]})})})]}),E("div",{className:$("setting-button-wrapper"),children:E("div",{className:"clickable-icon",onClick:t,"aria-label":R("Delete"),children:E(Ut,{name:"lucide-trash-2"})})})]})})}function DR({dataKeys:e,onChange:t}){let[r,n]=Ne(e),i=Re(()=>{let l=createDiv($("item-tags")),c=l.createEl("a",$("item-tag"));l.style.position="absolute",l.style.visibility="hidden",activeDocument.body.append(l);let d=activeWindow.getComputedStyle(c),m=d.getPropertyValue("color").trim(),h=d.getPropertyValue("background-color").trim();return l.remove(),{color:m,backgroundColor:h}},[]),a=l=>{t(l),n(l)},o=()=>{a((0,Rd.default)(r,{$push:[{...Bc,id:et(),data:{tagKey:"",color:"",backgroundColor:""}}]}))},s=l=>{a((0,Rd.default)(r,{$splice:[[l,1]]}))},u=l=>(c,d,m)=>{a((0,Rd.default)(r,{[l]:{data:{tagKey:{$set:c},color:{$set:d},backgroundColor:{$set:m}}}}))};return E("div",{className:$("tag-color-input-wrapper"),children:[E("div",{className:"setting-item-info",children:[E("div",{className:"setting-item-name",children:R("Tag colors")}),E("div",{className:"setting-item-description",children:R("Set colors for tags displayed in cards.")})]}),E("div",{children:r.map((l,c)=>E(bR,{tagColorKey:l.data,deleteKey:()=>s(c),updateKey:u(c),defaultColors:i},l.id))}),E("button",{className:$("add-tag-color-button"),onClick:()=>{o()},children:R("Add tag color")})]})}function Ax(e,t,r){Li(E(DR,{dataKeys:t,onChange:r,portalContainer:ha(e)}),e)}function Ox(e){Pi(e)}function SR({dateColorKey:e,deleteKey:t,updateKey:r,defaultColors:n,getTimeFormat:i,getDateFormat:a}){let o="between";return e.isToday&&(o="today"),e.isBefore&&(o="before"),e.isAfter&&(o="after"),E("div",{className:$("setting-item-wrapper"),children:E("div",{className:$("setting-item"),children:[E("div",{className:`${$("setting-controls-wrapper")} ${$("tag-color-input")}`,children:[E("div",{children:[E("div",{children:E("div",{className:$("setting-item-label"),children:R("Date is")})}),E("div",{className:$("date-color-config"),children:[E("select",{className:"dropdown",defaultValue:o,onChange:s=>{let u={...e};switch(delete u.isAfter,delete u.isBefore,delete u.isToday,s.target.value){case"today":u.isToday=!0;break;case"before":u.isBefore=!0;break;case"after":u.isAfter=!0;break}r(u)},children:[E("option",{value:"between",children:R("Between now and")}),E("option",{value:"today",children:R("Today")}),E("option",{value:"after",children:R("After now")}),E("option",{value:"before",children:R("Before now")})]}),!e.isToday&&!e.isAfter&&!e.isBefore&&E(ct,{children:[E("input",{type:"number",value:e.distance,onChange:s=>{r({...e,distance:parseInt(s.target.value)})}}),E("select",{className:"dropdown",defaultValue:e.unit,onChange:s=>{r({...e,unit:s.target.value})},children:[E("option",{value:"hours",children:"Hours"}),E("option",{value:"days",children:"Days"}),E("option",{value:"weeks",children:"Weeks"}),E("option",{value:"months",children:"Months"})]}),E("select",{className:"dropdown",defaultValue:e.direction,onChange:s=>{r({...e,direction:s.target.value})},children:[E("option",{value:"after",children:R("After now")}),E("option",{value:"before",children:R("Before now")})]})]})]}),E("div",{className:$("date-color-config"),children:[E("div",{children:[E("div",{className:$("setting-item-label"),children:R("Background color")}),E(zl,{color:e.backgroundColor,setColor:s=>{r({...e,backgroundColor:s})},defaultColor:n.backgroundColor})]}),E("div",{children:[E("div",{className:$("setting-item-label"),children:R("Text color")}),E(zl,{color:e.color,setColor:s=>{r({...e,color:s})},defaultColor:n.color})]})]})]}),E("div",{children:E("div",{className:$("date-color-wrapper"),children:E("div",{className:$("item-metadata"),children:E("span",{style:{"--date-color":e.color,"--date-background-color":e.backgroundColor},className:Ge([$("item-metadata-date-wrapper"),$("date"),{"has-background":!!(e!=null&&e.backgroundColor)}]),children:[E("span",{className:$("item-metadata-date is-button"),children:(0,Hg.moment)().format(a())})," ",E("span",{className:$("item-metadata-time is-button"),children:(0,Hg.moment)().format(i())})]})})})})]}),E("div",{className:$("setting-button-wrapper"),children:E("div",{className:"clickable-icon",onClick:t,"aria-label":R("Delete"),children:E(Ut,{name:"lucide-trash-2"})})})]})})}function ER({dataKeys:e,onChange:t,getTimeFormat:r,getDateFormat:n}){let[i,a]=$e.useState(e),o=$e.useMemo(()=>{let d=createDiv($("item-metadata")),m=d.createSpan($("item-metadata-date"));d.style.position="absolute",d.style.visibility="hidden",activeDocument.body.append(d);let h=activeWindow.getComputedStyle(m),g=h.getPropertyValue("color").trim(),y=h.getPropertyValue("background-color").trim();return d.remove(),{color:g,backgroundColor:y}},[]),s=d=>{t(d),a(d)},u=()=>{s((0,Hd.default)(i,{$push:[{...Vc,id:et(),data:{isToday:!1,distance:1,unit:"days",direction:"after"}}]}))},l=d=>{s((0,Hd.default)(i,{$splice:[[d,1]]}))},c=d=>m=>{s((0,Hd.default)(i,{[d]:{data:{$set:m}}}))};return E("div",{className:$("date-color-input-wrapper"),children:[E("div",{className:"setting-item-info",children:[E("div",{className:"setting-item-name",children:R("Display date colors")}),E("div",{className:"setting-item-description",children:R("Set colors for dates displayed in cards based on the rules below.")})]}),E("div",{children:i.map((d,m)=>E(SR,{dateColorKey:d.data,deleteKey:()=>l(m),updateKey:c(m),defaultColors:o,getTimeFormat:r,getDateFormat:n},d.id))}),E("button",{className:$("add-tag-color-button"),onClick:u,children:R("Add date color")})]})}function Lx(e,t,r,n,i){$e.render(E(ER,{dataKeys:t,onChange:r,portalContainer:ha(e),getDateFormat:n,getTimeFormat:i}),e)}function Px(e){$e.unmountComponentAtNode(e)}var fo=Ct(ln());function ks({id:e,children:t}){let r=$e.useContext(sl),n=$e.useMemo(()=>e||et(),[e]);return $e.useEffect(()=>()=>{r.unmountScope(e)},[e]),E(ma.Provider,{value:n,children:t})}function Nx({isStatic:e,itemIndex:t,item:r,toggleShouldHideLabel:n,toggleContainsMarkdown:i,deleteKey:a,updateKey:o,updateLabel:s}){let u=Fe(null),l=Fe(null),c=Fe(null),d=Ta(l,c),m=E("div",{className:$("setting-controls-wrapper"),children:[E("div",{className:$("setting-input-wrapper"),children:[E("div",{children:[E("div",{className:$("setting-item-label"),children:R("Metadata key")}),E("input",{type:"text",value:r.data.metadataKey,onChange:h=>o(h.target.value)})]}),E("div",{children:[E("div",{className:$("setting-item-label"),children:R("Display label")}),E("input",{type:"text",value:r.data.label,onChange:h=>s(h.target.value)})]})]}),E("div",{className:$("setting-toggle-wrapper"),children:[E("div",{children:[E("div",{className:`checkbox-container ${r.data.shouldHideLabel?"is-enabled":""}`,onClick:n,"aria-label":R("Hide label")}),E("div",{className:$("setting-item-label"),children:R("Hide label")})]}),E("div",{children:[E("div",{className:`checkbox-container ${r.data.containsMarkdown?"is-enabled":""}`,onClick:i,"aria-label":R("Field contains markdown")}),E("div",{className:$("setting-item-label"),children:R("Field contains markdown")})]})]})]});return E("div",{ref:l,className:$("setting-item-wrapper"),children:E("div",{ref:u,className:$("setting-item"),children:[e?m:E(ei,{elementRef:u,measureRef:l,id:r.id,index:t,data:r,children:m}),E("div",{className:$("setting-button-wrapper"),children:[E("div",{className:"clickable-icon",onClick:a,"aria-label":R("Delete"),children:E(Ut,{name:"lucide-trash-2"})}),E("div",{className:"mobile-option-setting-drag-icon clickable-icon","aria-label":R("Drag to rearrange"),ref:d,children:E(Ut,{name:"lucide-grip-horizontal"})})]})]})})}function kR({onChange:e,inputValue:t,keys:r,setKeys:n}){let i=a=>{e(a),n(a)};return{updateKey:a=>o=>{i((0,fo.default)(r,{[a]:{data:{metadataKey:{$set:o}}}}))},updateLabel:a=>o=>{i((0,fo.default)(r,{[a]:{data:{label:{$set:o}}}}))},toggleShouldHideLabel:a=>()=>{i((0,fo.default)(r,{[a]:{data:{$toggle:["shouldHideLabel"]}}}))},toggleContainsMarkdown:a=>()=>{i((0,fo.default)(r,{[a]:{data:{$toggle:["containsMarkdown"]}}}))},deleteKey:a=>()=>{i((0,fo.default)(r,{$splice:[[a,1]]}))},newKey:()=>{i((0,fo.default)(r,{$push:[{...Rc,id:et(),data:{metadataKey:t,label:"",shouldHideLabel:!1,containsMarkdown:!1}}]}))},moveKey:(a,o)=>{let s=a.getPath(),u=o.getPath(),l=s[s.length-1],c=u[u.length-1];if(l===c)return;let d=r.slice(),[m]=d.splice(l,1);d.splice(c,0,m),i(d)}}}var xR=[ft.MetadataSetting];function CR({keys:e,portalContainer:t}){return Oi(E(Ds,{children:(r,n)=>{let a=r.getPath()[0],o=e[a];return E("div",{className:$("drag-container"),style:n,children:E(Nx,{item:o,itemIndex:a,updateKey:Mr,updateLabel:Mr,toggleShouldHideLabel:Mr,toggleContainsMarkdown:Mr,deleteKey:Mr,isStatic:!0})})}}),t)}function _R({scrollEl:e}){let t=Ee(cn);return Ae(()=>{let r=0,n=()=>{e.win.clearTimeout(r),r=e.win.setTimeout(()=>{t.hitboxEntities.forEach(i=>{i.recalcInitial()})},100)};return e.addEventListener("scroll",n,{passive:!0,capture:!1}),()=>{e.removeEventListener("scroll",n)}},[e,t]),null}function MR(e){let[t,r]=Ne(e.dataKeys),[n,i]=Ne(""),{getShouldIMEBlockAction:a,...o}=Ou(),s=Dn(e.scrollEl),{updateKey:u,updateLabel:l,toggleShouldHideLabel:c,toggleContainsMarkdown:d,deleteKey:m,newKey:h,moveKey:g}=kR({onChange:e.onChange,inputValue:n,keys:t,setKeys:r,win:s});return E(ct,{children:[E(bs,{win:s,onDrop:g,children:[E(_R,{scrollEl:e.scrollEl}),E(ks,{children:E(Ia,{axis:"vertical",children:[t.map((y,v)=>E(Nx,{item:y,itemIndex:v,updateKey:u(v),updateLabel:l(v),toggleShouldHideLabel:c(v),toggleContainsMarkdown:d(v),deleteKey:m(v)},y.id)),E(Fa,{accepts:xR,index:t.length})]})}),E(CR,{keys:t,portalContainer:e.portalContainer})]}),E("div",{className:$("setting-key-input-wrapper"),children:[E("input",{placeholder:R("Metadata key"),type:"text",value:n,onChange:y=>i(y.target.value),onKeyDown:y=>{if(!a()){if(y.key==="Enter"){h(),i("");return}y.key==="Escape"&&(i(""),y.target.blur())}},...o}),E("button",{onClick:()=>{h(),i("")},children:R("Add key")})]})]})}function Rx(e,t,r,n){Li(E(MR,{dataKeys:r,scrollEl:t,onChange:n,portalContainer:ha(e)}),e)}function Hx(e){Pi(e)}var Bd=Ct(ln());function Bx({isStatic:e,tagIndex:t,tag:r,deleteTag:n,updateTag:i}){let a=Fe(null),o=Fe(null),s=Fe(null),u=Ta(o,s),l=E("div",{className:$("setting-controls-wrapper"),children:E("div",{className:$("setting-input-wrapper"),children:E("div",{children:E("input",{type:"text",value:r.data.tag,onChange:c=>i(c.target.value)})})})});return E("div",{ref:o,className:$("setting-item-wrapper"),children:E("div",{ref:a,className:$("setting-item"),children:[e?l:E(ei,{elementRef:a,measureRef:o,id:r.id,index:t,data:r,children:l}),E("div",{className:$("setting-button-wrapper"),children:[E("div",{className:"clickable-icon",onClick:n,"aria-label":R("Delete"),children:E(Ut,{name:"lucide-trash-2"})}),E("div",{className:"mobile-option-setting-drag-icon clickable-icon","aria-label":R("Drag to rearrange"),ref:u,children:E(Ut,{name:"lucide-grip-horizontal"})})]})]})})}function TR({onChange:e,inputValue:t,tags:r,setTags:n}){let i=a=>{e(a),n(a)};return{updateTag:a=>o=>{i((0,Bd.default)(r,{[a]:{data:{tag:{$set:o}}}}))},deleteTag:a=>()=>{i((0,Bd.default)(r,{$splice:[[a,1]]}))},newTag:()=>{i((0,Bd.default)(r,{$push:[{...Hc,id:et(),data:{tag:t}}]}))},moveTag:(a,o)=>{let s=a.getPath(),u=o.getPath(),l=s[s.length-1],c=u[u.length-1];if(l===c)return;let d=r.slice(),[m]=d.splice(l,1);d.splice(c,0,m),i(d)}}}var FR=[ft.TagSortSetting];function IR({keys:e,portalContainer:t}){return Oi(E(Ds,{children:(r,n)=>{let a=r.getPath()[0],o=e[a];return E("div",{className:Ge([$("drag-container"),$("tag-sort-input-wrapper")]),style:n,children:E(Bx,{tag:o,tagIndex:a,updateTag:Mr,deleteTag:Mr,isStatic:!0})})}}),t)}function AR({scrollEl:e}){let t=Ee(cn);return Ae(()=>{let r=0,n=()=>{e.win.clearTimeout(r),r=e.win.setTimeout(()=>{t==null||t.hitboxEntities.forEach(i=>{i.recalcInitial()})},100)};return e.addEventListener("scroll",n,{passive:!0,capture:!1}),()=>{e.removeEventListener("scroll",n)}},[e,t]),null}function OR(e){let[t,r]=Ne(e.tags),[n,i]=Ne(""),{getShouldIMEBlockAction:a,...o}=Ou(),s=Dn(e.scrollEl),{updateTag:u,deleteTag:l,newTag:c,moveTag:d}=TR({onChange:e.onChange,inputValue:n,tags:t,setTags:r,win:s});return E("div",{className:$("tag-sort-input-wrapper"),children:[E("div",{className:"setting-item-info",children:[E("div",{className:"setting-item-name",children:R("Tag sort order")}),E("div",{className:"setting-item-description",children:R("Set an explicit sort order for the specified tags.")})]}),E("div",{children:E(bs,{win:s,onDrop:d,children:[E(AR,{scrollEl:e.scrollEl}),E(ks,{children:E(Ia,{axis:"vertical",children:[t.map((m,h)=>E(Bx,{tag:m,tagIndex:h,updateTag:u(h),deleteTag:l(h)},m.id)),E(Fa,{accepts:FR,index:t.length})]})}),E(IR,{keys:t,portalContainer:e.portalContainer})]})}),E("div",{className:$("setting-key-input-wrapper"),children:[E("input",{placeholder:"#tag",type:"text",value:n,onChange:m=>{let h=m.target.value;i(h[0]==="#"?h:"#"+h)},onKeyDown:m=>{if(!a()){if(m.key==="Enter"){c(),i("");return}m.key==="Escape"&&(i(""),m.target.blur())}},...o}),E("button",{onClick:()=>{c(),i("")},children:R("Add tag")})]})]})}function Vx(e,t,r,n){Li(E(OR,{tags:r,scrollEl:t,onChange:n,portalContainer:ha(e)}),e)}function $x(e){Pi(e)}var Ux=/^\d+(?:\.\d+)?$/,Yx=new Set([_t,"append-archive-date","archive-date-format","archive-date-separator","archive-with-date","date-colors","date-display-format","date-format","date-picker-week-start","date-time-display-format","date-trigger","full-list-lane-width","hide-card-count","inline-metadata-position","lane-width","link-date-to-daily-note","list-collapse","max-archive-size","metadata-keys","move-dates","move-tags","move-task-metadata","new-card-insertion-method","new-line-trigger","new-note-folder","new-note-template","show-add-list","show-archive-all","show-board-settings","show-checkboxes","show-relative-date","show-search","show-set-view","show-view-as-markdown","table-sizing","tag-action","tag-colors","tag-sort","time-format","time-trigger"]),Vd=class{constructor(t,r,n){this.cleanupFns=[];this.applyDebounceTimer=0;this.app=t.app,this.plugin=t,this.config=r,this.settings=n}applySettingsUpdate(t){this.win.clearTimeout(this.applyDebounceTimer),this.applyDebounceTimer=this.win.setTimeout(()=>{this.settings=(0,Wx.default)(this.settings,t),this.config.onSettingsChange(this.settings)},1e3)}getSetting(t,r){return r?[this.settings[t],this.plugin.settings[t]]:[this.settings[t],null]}constructUI(t,r,n){this.win=t.win;let{templateFiles:i,vaultFolders:a,templateWarning:o}=hx(this.app);t.createEl("h3",{text:r}),n?t.createEl("p",{text:R("These settings will take precedence over the default Kanban board settings.")}):t.createEl("p",{text:R("Set the default Kanban board settings. Settings can be overridden on a board-by-board basis.")}),new rt.Setting(t).setName(R("Display card checkbox")).setDesc(R("When toggled, a checkbox will be displayed with each card")).then(s=>{let u;s.addToggle(l=>{u=l;let[c,d]=this.getSetting("show-checkboxes",n);c!==void 0?l.setValue(c):d!==void 0&&l.setValue(d),l.onChange(m=>{this.applySettingsUpdate({"show-checkboxes":{$set:m}})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("show-checkboxes",n);u.setValue(!!c),this.applySettingsUpdate({$unset:["show-checkboxes"]})})})}),new rt.Setting(t).setName(R("New line trigger")).setDesc(R("Select whether Enter or Shift+Enter creates a new line. The opposite of what you choose will create and complete editing of cards and lists.")).addDropdown(s=>{s.addOption("shift-enter",R("Shift + Enter")),s.addOption("enter",R("Enter"));let[u,l]=this.getSetting("new-line-trigger",n);s.setValue(u||l||"shift-enter"),s.onChange(c=>{this.applySettingsUpdate({"new-line-trigger":{$set:c}})})}),new rt.Setting(t).setName(R("Prepend / append new cards")).setDesc(R("This setting controls whether new cards are added to the beginning or end of the list.")).addDropdown(s=>{s.addOption("prepend",R("Prepend")),s.addOption("prepend-compact",R("Prepend (compact)")),s.addOption("append",R("Append"));let[u,l]=this.getSetting("new-card-insertion-method",n);s.setValue(u||l||"append"),s.onChange(c=>{this.applySettingsUpdate({"new-card-insertion-method":{$set:c}})})}),new rt.Setting(t).setName(R("Hide card counts in list titles")).setDesc(R("When toggled, card counts are hidden from the list title")).then(s=>{let u;s.addToggle(l=>{u=l;let[c,d]=this.getSetting("hide-card-count",n);c!==void 0?l.setValue(c):d!==void 0&&l.setValue(d),l.onChange(m=>{this.applySettingsUpdate({"hide-card-count":{$set:m}})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("hide-card-count",n);u.setValue(!!c),this.applySettingsUpdate({$unset:["hide-card-count"]})})})}),new rt.Setting(t).setName(R("List width")).setDesc(R("Enter a number to set the list width in pixels.")).addText(s=>{let[u,l]=this.getSetting("lane-width",n);s.inputEl.setAttr("type","number"),s.inputEl.placeholder=`${l||"272"} (default)`,s.inputEl.value=u?u.toString():"",s.onChange(c=>{if(c&&Ux.test(c)){s.inputEl.removeClass("error"),this.applySettingsUpdate({"lane-width":{$set:parseInt(c)}});return}c&&s.inputEl.addClass("error"),this.applySettingsUpdate({$unset:["lane-width"]})})}),new rt.Setting(t).setName(R("Expand lists to full width in list view")).then(s=>{let u;s.addToggle(l=>{u=l;let[c,d]=this.getSetting("full-list-lane-width",n);c!==void 0?l.setValue(c):d!==void 0&&l.setValue(d),l.onChange(m=>{this.applySettingsUpdate({"full-list-lane-width":{$set:m}})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("full-list-lane-width",n);u.setValue(!!c),this.applySettingsUpdate({$unset:["full-list-lane-width"]})})})}),new rt.Setting(t).setName(R("Maximum number of archived cards")).setDesc(R("Archived cards can be viewed in markdown mode. This setting will begin removing old cards once the limit is reached. Setting this value to -1 will allow a board's archive to grow infinitely.")).addText(s=>{let[u,l]=this.getSetting("max-archive-size",n);s.inputEl.setAttr("type","number"),s.inputEl.placeholder=`${l||"-1"} (default)`,s.inputEl.value=u?u.toString():"",s.onChange(c=>{if(c&&Ux.test(c)){s.inputEl.removeClass("error"),this.applySettingsUpdate({"max-archive-size":{$set:parseInt(c)}});return}c&&s.inputEl.addClass("error"),this.applySettingsUpdate({$unset:["max-archive-size"]})})}),new rt.Setting(t).setName(R("Note template")).setDesc(R("This template will be used when creating new notes from Kanban cards.")).then(Mg({choices:i,key:"new-note-template",warningText:o,local:n,placeHolderStr:R("No template"),manager:this})),new rt.Setting(t).setName(R("Note folder")).setDesc(R("Notes created from Kanban cards will be placed in this folder. If blank, they will be placed in the default location for this vault.")).then(Mg({choices:a,key:"new-note-folder",local:n,placeHolderStr:R("Default folder"),manager:this})),t.createEl("h4",{text:R("Tags")}),new rt.Setting(t).setName(R("Move tags to card footer")).setDesc(R("When toggled, tags will be displayed in the card's footer instead of the card's body.")).then(s=>{let u;s.addToggle(l=>{u=l;let[c,d]=this.getSetting("move-tags",n);c!==void 0?l.setValue(c):d!==void 0&&l.setValue(d),l.onChange(m=>{this.applySettingsUpdate({"move-tags":{$set:m}})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("move-tags",n);u.setValue(!!c),this.applySettingsUpdate({$unset:["move-tags"]})})})}),new rt.Setting(t).setName(R("Tag click action")).setDesc(R("This setting controls whether clicking the tags displayed below the card title opens the Obsidian search or the Kanban board search.")).addDropdown(s=>{s.addOption("kanban",R("Search Kanban Board")),s.addOption("obsidian",R("Search Obsidian Vault"));let[u,l]=this.getSetting("tag-action",n);s.setValue(u||l||"obsidian"),s.onChange(c=>{this.applySettingsUpdate({"tag-action":{$set:c}})})}),new rt.Setting(t).then(s=>{let[u,l]=this.getSetting("tag-sort",n),c=(u||l||[]).map(d=>({...Hc,id:et(),data:d}));Vx(s.settingEl,t,c,d=>this.applySettingsUpdate({"tag-sort":{$set:d.map(m=>m.data)}})),this.cleanupFns.push(()=>{s.settingEl&&$x(s.settingEl)})}),new rt.Setting(t).then(s=>{let[u]=this.getSetting("tag-colors",n),l=(u||[]).map(c=>({...Bc,id:et(),data:c}));Ax(s.settingEl,l,c=>this.applySettingsUpdate({"tag-colors":{$set:c.map(d=>d.data)}})),this.cleanupFns.push(()=>{s.settingEl&&Ox(s.settingEl)})}),t.createEl("h4",{text:R("Date & Time")}),new rt.Setting(t).setName(R("Move dates to card footer")).setDesc(R("When toggled, dates will be displayed in the card's footer instead of the card's body.")).then(s=>{let u;s.addToggle(l=>{u=l;let[c,d]=this.getSetting("move-dates",n);c!==void 0?l.setValue(c):d!==void 0&&l.setValue(d),l.onChange(m=>{this.applySettingsUpdate({"move-dates":{$set:m}})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("move-dates",n);u.setValue(c!=null?c:!0),this.applySettingsUpdate({$unset:["move-dates"]})})})}),new rt.Setting(t).setName(R("Date trigger")).setDesc(R("When this is typed, it will trigger the date selector")).addText(s=>{let[u,l]=this.getSetting("date-trigger",n);(u||l)&&s.setValue(u||l),s.setPlaceholder(l||Ad),s.onChange(c=>{c?this.applySettingsUpdate({"date-trigger":{$set:c}}):this.applySettingsUpdate({$unset:["date-trigger"]})})}),new rt.Setting(t).setName(R("Time trigger")).setDesc(R("When this is typed, it will trigger the time selector")).addText(s=>{let[u,l]=this.getSetting("time-trigger",n);(u||l)&&s.setValue(u||l),s.setPlaceholder(l||Od),s.onChange(c=>{c?this.applySettingsUpdate({"time-trigger":{$set:c}}):this.applySettingsUpdate({$unset:["time-trigger"]})})}),new rt.Setting(t).setName(R("Date format")).then(s=>{s.addMomentFormat(u=>{s.descEl.appendChild(createFragment(m=>{m.appendText(R("This format will be used when saving dates in markdown.")),m.createEl("br"),m.appendText(R("For more syntax, refer to")+" "),m.createEl("a",{text:R("format reference"),href:"https://momentjs.com/docs/#/displaying/format/"},h=>{h.setAttr("target","_blank")}),m.createEl("br"),m.appendText(R("Your current syntax looks like this")+": "),u.setSampleEl(m.createEl("b",{cls:"u-pop"})),m.createEl("br")}));let[l,c]=this.getSetting("date-format",n),d=ja(this.app);u.setPlaceholder(d),u.setDefaultFormat(d),(l||c)&&u.setValue(l||c),u.onChange(m=>{m?this.applySettingsUpdate({"date-format":{$set:m}}):this.applySettingsUpdate({$unset:["date-format"]})})})}),new rt.Setting(t).setName(R("Time format")).then(s=>{s.addMomentFormat(u=>{s.descEl.appendChild(createFragment(m=>{m.appendText(R("For more syntax, refer to")+" "),m.createEl("a",{text:R("format reference"),href:"https://momentjs.com/docs/#/displaying/format/"},h=>{h.setAttr("target","_blank")}),m.createEl("br"),m.appendText(R("Your current syntax looks like this")+": "),u.setSampleEl(m.createEl("b",{cls:"u-pop"})),m.createEl("br")}));let[l,c]=this.getSetting("time-format",n),d=Ho(this.app);u.setPlaceholder(d),u.setDefaultFormat(d),(l||c)&&u.setValue(l||c),u.onChange(m=>{m?this.applySettingsUpdate({"time-format":{$set:m}}):this.applySettingsUpdate({$unset:["time-format"]})})})}),new rt.Setting(t).setName(R("Date display format")).then(s=>{s.addMomentFormat(u=>{s.descEl.appendChild(createFragment(m=>{m.appendText(R("This format will be used when displaying dates in Kanban cards.")),m.createEl("br"),m.appendText(R("For more syntax, refer to")+" "),m.createEl("a",{text:R("format reference"),href:"https://momentjs.com/docs/#/displaying/format/"},h=>{h.setAttr("target","_blank")}),m.createEl("br"),m.appendText(R("Your current syntax looks like this")+": "),u.setSampleEl(m.createEl("b",{cls:"u-pop"})),m.createEl("br")}));let[l,c]=this.getSetting("date-display-format",n),d=ja(this.app);u.setPlaceholder(d),u.setDefaultFormat(d),(l||c)&&u.setValue(l||c),u.onChange(m=>{m?this.applySettingsUpdate({"date-display-format":{$set:m}}):this.applySettingsUpdate({$unset:["date-display-format"]})})})}),new rt.Setting(t).setName(R("Show relative date")).setDesc(R("When toggled, cards will display the distance between today and the card's date. eg. 'In 3 days', 'A month ago'. Relative dates will not be shown for dates from the Tasks and Dataview plugins.")).then(s=>{let u;s.addToggle(l=>{u=l;let[c,d]=this.getSetting("show-relative-date",n);c!==void 0?l.setValue(c):d!==void 0&&l.setValue(d),l.onChange(m=>{this.applySettingsUpdate({"show-relative-date":{$set:m}})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("show-relative-date",n);u.setValue(!!c),this.applySettingsUpdate({$unset:["show-relative-date"]})})})}),new rt.Setting(t).setName(R("Link dates to daily notes")).setDesc(R("When toggled, dates will link to daily notes. Eg. [[2021-04-26]]")).then(s=>{let u;s.addToggle(l=>{u=l;let[c,d]=this.getSetting("link-date-to-daily-note",n);c!==void 0?l.setValue(c):d!==void 0&&l.setValue(d),l.onChange(m=>{this.applySettingsUpdate({"link-date-to-daily-note":{$set:m}})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("link-date-to-daily-note",n);u.setValue(!!c),this.applySettingsUpdate({$unset:["link-date-to-daily-note"]})})})}),new rt.Setting(t).then(s=>{let[u]=this.getSetting("date-colors",n),l=(u||[]).map(c=>({...Vc,id:et(),data:c}));Lx(s.settingEl,l,c=>this.applySettingsUpdate({"date-colors":{$set:c.map(d=>d.data)}}),()=>{let[c,d]=this.getSetting("date-display-format",n),m=ja(this.app);return c||d||m},()=>{let[c,d]=this.getSetting("time-format",n),m=Ho(this.app);return c||d||m}),this.cleanupFns.push(()=>{s.settingEl&&Px(s.settingEl)})}),new rt.Setting(t).setName(R("Add date and time to archived cards")).setDesc(R("When toggled, the current date and time will be added to the card title when it is archived. Eg. - [ ] 2021-05-14 10:00am My card title")).then(s=>{let u;s.addToggle(l=>{u=l;let[c,d]=this.getSetting("archive-with-date",n);c!==void 0?l.setValue(c):d!==void 0&&l.setValue(d),l.onChange(m=>{this.applySettingsUpdate({"archive-with-date":{$set:m}})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("archive-with-date",n);u.setValue(!!c),this.applySettingsUpdate({$unset:["archive-with-date"]})})})}),new rt.Setting(t).setName(R("Add archive date/time after card title")).setDesc(R("When toggled, the archived date/time will be added after the card title, e.g.- [ ] My card title 2021-05-14 10:00am. By default, it is inserted before the title.")).then(s=>{let u;s.addToggle(l=>{u=l;let[c,d]=this.getSetting("append-archive-date",n);c!==void 0?l.setValue(c):d!==void 0&&l.setValue(d),l.onChange(m=>{this.applySettingsUpdate({"append-archive-date":{$set:m}})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("append-archive-date",n);u.setValue(!!c),this.applySettingsUpdate({$unset:["append-archive-date"]})})})}),new rt.Setting(t).setName(R("Archive date/time separator")).setDesc(R("This will be used to separate the archived date/time from the title")).addText(s=>{let[u,l]=this.getSetting("archive-date-separator",n);s.inputEl.placeholder=l?`${l} (default)`:"",s.inputEl.value=u||"",s.onChange(c=>{if(c){this.applySettingsUpdate({"archive-date-separator":{$set:c}});return}this.applySettingsUpdate({$unset:["archive-date-separator"]})})}),new rt.Setting(t).setName(R("Archive date/time format")).then(s=>{s.addMomentFormat(u=>{s.descEl.appendChild(createFragment(I=>{I.appendText(R("For more syntax, refer to")+" "),I.createEl("a",{text:R("format reference"),href:"https://momentjs.com/docs/#/displaying/format/"},C=>{C.setAttr("target","_blank")}),I.createEl("br"),I.appendText(R("Your current syntax looks like this")+": "),u.setSampleEl(I.createEl("b",{cls:"u-pop"})),I.createEl("br")}));let[l,c]=this.getSetting("archive-date-format",n),[d,m]=this.getSetting("date-format",n),h=d||m||ja(this.app),[g,y]=this.getSetting("time-format",n),v=g||y||Ho(this.app),D=`${h} ${v}`;u.setPlaceholder(D),u.setDefaultFormat(D),(l||c)&&u.setValue(l||c),u.onChange(I=>{I?this.applySettingsUpdate({"archive-date-format":{$set:I}}):this.applySettingsUpdate({$unset:["archive-date-format"]})})})}),new rt.Setting(t).setName(R("Calendar: first day of week")).setDesc(R("Override which day is used as the start of the week")).addDropdown(s=>{s.addOption("",R("default")),s.addOption("0",R("Sunday")),s.addOption("1",R("Monday")),s.addOption("2",R("Tuesday")),s.addOption("3",R("Wednesday")),s.addOption("4",R("Thursday")),s.addOption("5",R("Friday")),s.addOption("6",R("Saturday"));let[u,l]=this.getSetting("date-picker-week-start",n);s.setValue((u==null?void 0:u.toString())||(l==null?void 0:l.toString())||""),s.onChange(c=>{c?this.applySettingsUpdate({"date-picker-week-start":{$set:Number(c)}}):this.applySettingsUpdate({$unset:["date-picker-week-start"]})})}),t.createEl("br"),t.createEl("h4",{text:R("Inline Metadata")}),new rt.Setting(t).setName(R("Inline metadata position")).setDesc(R("Controls where the inline metadata (from the Dataview plugin) will be displayed.")).then(s=>{let u;s.addDropdown(l=>{u=l,l.addOption("body",R("Card body")),l.addOption("footer",R("Card footer")),l.addOption("metadata-table",R("Merge with linked page metadata"));let[c,d]=this.getSetting("inline-metadata-position",n);l.setValue((c==null?void 0:c.toString())||(d==null?void 0:d.toString())||Ul),l.onChange(m=>{m?this.applySettingsUpdate({"inline-metadata-position":{$set:m}}):this.applySettingsUpdate({$unset:["inline-metadata-position"]})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("inline-metadata-position",n);u.setValue(c||Ul),this.applySettingsUpdate({$unset:["inline-metadata-position"]})})})}),new rt.Setting(t).setName(R("Move task data to card footer")).setDesc(R("When toggled, task data (from the Tasks plugin) will be displayed in the card's footer instead of the card's body.")).then(s=>{let u;s.addToggle(l=>{u=l;let[c,d]=this.getSetting("move-task-metadata",n);c!==void 0?l.setValue(c):d!==void 0&&l.setValue(d),l.onChange(m=>{this.applySettingsUpdate({"move-task-metadata":{$set:m}})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("move-task-metadata",n);u.setValue(c!=null?c:!0),this.applySettingsUpdate({$unset:["move-task-metadata"]})})})}),t.createEl("br"),t.createEl("h4",{text:R("Linked Page Metadata")}),t.createEl("p",{cls:$("metadata-setting-desc"),text:R("Display metadata for the first note linked within a card. Specify which metadata keys to display below. An optional label can be provided, and labels can be hidden altogether.")}),new rt.Setting(t).then(s=>{s.settingEl.addClass($("draggable-setting-container"));let[u]=this.getSetting("metadata-keys",n),l=(u||[]).map(c=>({...Rc,id:et(),data:c,win:Dn(t)}));Rx(s.settingEl,t,l,c=>this.applySettingsUpdate({"metadata-keys":{$set:c.map(d=>d.data)}})),this.cleanupFns.push(()=>{s.settingEl&&Hx(s.settingEl)})}),t.createEl("h4",{text:R("Board Header Buttons")}),new rt.Setting(t).setName(R("Add a list")).then(s=>{let u;s.addToggle(l=>{u=l;let[c,d]=this.getSetting("show-add-list",n);c!=null?l.setValue(c):d!=null?l.setValue(d):l.setValue(!0),l.onChange(m=>{this.applySettingsUpdate({"show-add-list":{$set:m}})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("show-add-list",n);u.setValue(!!c),this.applySettingsUpdate({$unset:["show-add-list"]})})})}),new rt.Setting(t).setName(R("Archive completed cards")).then(s=>{let u;s.addToggle(l=>{u=l;let[c,d]=this.getSetting("show-archive-all",n);c!=null?l.setValue(c):d!=null?l.setValue(d):l.setValue(!0),l.onChange(m=>{this.applySettingsUpdate({"show-archive-all":{$set:m}})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("show-archive-all",n);u.setValue(!!c),this.applySettingsUpdate({$unset:["show-archive-all"]})})})}),new rt.Setting(t).setName(R("Open as markdown")).then(s=>{let u;s.addToggle(l=>{u=l;let[c,d]=this.getSetting("show-view-as-markdown",n);c!=null?l.setValue(c):d!=null?l.setValue(d):l.setValue(!0),l.onChange(m=>{this.applySettingsUpdate({"show-view-as-markdown":{$set:m}})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("show-view-as-markdown",n);u.setValue(!!c),this.applySettingsUpdate({$unset:["show-view-as-markdown"]})})})}),new rt.Setting(t).setName(R("Open board settings")).then(s=>{let u;s.addToggle(l=>{u=l;let[c,d]=this.getSetting("show-board-settings",n);c!=null?l.setValue(c):d!=null?l.setValue(d):l.setValue(!0),l.onChange(m=>{this.applySettingsUpdate({"show-board-settings":{$set:m}})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("show-board-settings",n);u.setValue(!!c),this.applySettingsUpdate({$unset:["show-board-settings"]})})})}),new rt.Setting(t).setName(R("Search...")).then(s=>{let u;s.addToggle(l=>{u=l;let[c,d]=this.getSetting("show-search",n);c!=null?l.setValue(c):d!=null?l.setValue(d):l.setValue(!0),l.onChange(m=>{this.applySettingsUpdate({"show-search":{$set:m}})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("show-search",n);u.setValue(!!c),this.applySettingsUpdate({$unset:["show-search"]})})})}),new rt.Setting(t).setName(R("Board view")).then(s=>{let u;s.addToggle(l=>{u=l;let[c,d]=this.getSetting("show-set-view",n);c!=null?l.setValue(c):d!=null?l.setValue(d):l.setValue(!0),l.onChange(m=>{this.applySettingsUpdate({"show-set-view":{$set:m}})})}).addExtraButton(l=>{l.setIcon("lucide-rotate-ccw").setTooltip(R("Reset to default")).onClick(()=>{let[,c]=this.getSetting("show-set-view",n);u.setValue(!!c),this.applySettingsUpdate({$unset:["show-set-view"]})})})})}cleanUp(){this.win=null,this.cleanupFns.forEach(t=>t()),this.cleanupFns=[]}},$d=class extends rt.Modal{constructor(t,r,n){super(t.app),this.view=t,this.settingsManager=new Vd(t.plugin,r,n)}onOpen(){let{contentEl:t,modalEl:r}=this;r.addClass($("board-settings-modal")),this.settingsManager.constructUI(t,this.view.file.basename,!0)}onClose(){let{contentEl:t}=this;this.settingsManager.cleanUp(),t.empty()}},Ud=class extends rt.PluginSettingTab{constructor(t,r){super(t.app,t),this.plugin=t,this.settingsManager=new Vd(t,r,t.settings)}display(){let{containerEl:t}=this;t.empty(),t.addClass($("board-settings-modal")),this.settingsManager.constructUI(t,R("Kanban Plugin"),!1)}};var xC=Ct(ln());function zx({onNewLane:e,closeLaneForm:t}){let[r,n]=Ne(!1),i=Fe(),a=Fe(),o=ws(()=>t(),{ignoreClass:[$("ignore-click-outside"),"mobile-toolbar","suggestion-container"]}),{boardModifiers:s,stateManager:u}=Ee(tt);Ai(()=>{var h;(h=a.current)==null||h.focus()},[]);let l=Ye((h,g)=>{s.addLane({...Ea,id:et(),children:[],data:{...co(g),shouldMarkItemsComplete:r}}),h.dispatch({changes:{from:0,to:h.state.doc.length,insert:""}}),n(!1),e()},[e,n,s]),c=Re(()=>({x:0,y:0}),[]),d=Ye((h,g,y)=>{if(!Ca(u,g,y))return l(h,h.state.doc.toString()),!0},[l]),m=Ye(h=>l(h,h.state.doc.toString()),[l]);return E("div",{ref:o,className:$("lane-form-wrapper"),children:[E("div",{className:$("lane-input-wrapper"),children:E(_a,{className:$("lane-input"),editorRef:i,editState:c,onEnter:d,onEscape:t,onSubmit:m})}),E("div",{className:$("checkbox-wrapper"),children:[E("div",{className:$("checkbox-label"),children:R("Mark cards in this list as complete")}),E("div",{onClick:()=>n(!r),className:`checkbox-container ${r?"is-enabled":""}`})]}),E("div",{className:$("lane-input-actions"),children:[E("button",{className:$("lane-action-add"),onClick:()=>{i.current&&l(i.current,i.current.state.doc.toString())},children:R("Add list")}),E("button",{className:$("lane-action-cancel"),onClick:t,children:R("Done")})]})]})}function qx(){return{accessor:(e,t)=>typeof e=="function"?{...t,accessorFn:e}:{...t,accessorKey:e},display:e=>e,group:e=>e}}function Oa(e,t){return typeof e=="function"?e(t):e}function Pr(e,t){return r=>{t.setState(n=>({...n,[e]:Oa(r,n[e])}))}}function Kd(e){return e instanceof Function}function LR(e){return Array.isArray(e)&&e.every(t=>typeof t=="number")}function PR(e,t){let r=[],n=i=>{i.forEach(a=>{r.push(a);let o=t(a);o!=null&&o.length&&n(o)})};return n(e),r}function ze(e,t,r){let n=[],i;return a=>{let o;r.key&&r.debug&&(o=Date.now());let s=e(a);if(!(s.length!==n.length||s.some((c,d)=>n[d]!==c)))return i;n=s;let l;if(r.key&&r.debug&&(l=Date.now()),i=t(...s),r==null||r.onChange==null||r.onChange(i),r.key&&r.debug&&r!=null&&r.debug()){let c=Math.round((Date.now()-o)*100)/100,d=Math.round((Date.now()-l)*100)/100,m=d/16,h=(g,y)=>{for(g=String(g);g.length<y;)g=" "+g;return g};console.info(`%c\u23F1 ${h(d,5)} /${h(c,5)} ms`,` + font-size: .6rem; + font-weight: bold; + color: hsl(${Math.max(0,Math.min(120-120*m,120))}deg 100% 31%);`,r==null?void 0:r.key)}return i}}function Ke(e,t,r,n){return{debug:()=>{var i;return(i=e==null?void 0:e.debugAll)!=null?i:e[t]},key:!1,onChange:n}}function NR(e,t,r,n){let i=()=>{var o;return(o=a.getValue())!=null?o:e.options.renderFallbackValue},a={id:`${t.id}_${r.id}`,row:t,column:r,getValue:()=>t.getValue(n),renderValue:i,getContext:ze(()=>[e,r,t,a],(o,s,u,l)=>({table:o,column:s,row:u,cell:l,getValue:l.getValue,renderValue:l.renderValue}),Ke(e.options,"debugCells","cell.getContext"))};return e._features.forEach(o=>{o.createCell==null||o.createCell(a,r,t,e)},{}),a}function RR(e,t,r,n){var i,a;let s={...e._getDefaultColumnDef(),...t},u=s.accessorKey,l=(i=(a=s.id)!=null?a:u?u.replace(".","_"):void 0)!=null?i:typeof s.header=="string"?s.header:void 0,c;if(s.accessorFn?c=s.accessorFn:u&&(u.includes(".")?c=m=>{let h=m;for(let y of u.split(".")){var g;h=(g=h)==null?void 0:g[y]}return h}:c=m=>m[s.accessorKey]),!l)throw new Error;let d={id:`${String(l)}`,accessorFn:c,parent:n,depth:r,columnDef:s,columns:[],getFlatColumns:ze(()=>[!0],()=>{var m;return[d,...(m=d.columns)==null?void 0:m.flatMap(h=>h.getFlatColumns())]},Ke(e.options,"debugColumns","column.getFlatColumns")),getLeafColumns:ze(()=>[e._getOrderColumnsFn()],m=>{var h;if((h=d.columns)!=null&&h.length){let g=d.columns.flatMap(y=>y.getLeafColumns());return m(g)}return[d]},Ke(e.options,"debugColumns","column.getLeafColumns"))};for(let m of e._features)m.createColumn==null||m.createColumn(d,e);return d}var nr="debugHeaders";function Kx(e,t,r){var n;let a={id:(n=r.id)!=null?n:t.id,column:t,index:r.index,isPlaceholder:!!r.isPlaceholder,placeholderId:r.placeholderId,depth:r.depth,subHeaders:[],colSpan:0,rowSpan:0,headerGroup:null,getLeafHeaders:()=>{let o=[],s=u=>{u.subHeaders&&u.subHeaders.length&&u.subHeaders.map(s),o.push(u)};return s(a),o},getContext:()=>({table:e,header:a,column:t})};return e._features.forEach(o=>{o.createHeader==null||o.createHeader(a,e)}),a}var HR={createTable:e=>{e.getHeaderGroups=ze(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,r,n,i)=>{var a,o;let s=(a=n==null?void 0:n.map(d=>r.find(m=>m.id===d)).filter(Boolean))!=null?a:[],u=(o=i==null?void 0:i.map(d=>r.find(m=>m.id===d)).filter(Boolean))!=null?o:[],l=r.filter(d=>!(n!=null&&n.includes(d.id))&&!(i!=null&&i.includes(d.id)));return Wd(t,[...s,...l,...u],e)},Ke(e.options,nr,"getHeaderGroups")),e.getCenterHeaderGroups=ze(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,r,n,i)=>(r=r.filter(a=>!(n!=null&&n.includes(a.id))&&!(i!=null&&i.includes(a.id))),Wd(t,r,e,"center")),Ke(e.options,nr,"getCenterHeaderGroups")),e.getLeftHeaderGroups=ze(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left],(t,r,n)=>{var i;let a=(i=n==null?void 0:n.map(o=>r.find(s=>s.id===o)).filter(Boolean))!=null?i:[];return Wd(t,a,e,"left")},Ke(e.options,nr,"getLeftHeaderGroups")),e.getRightHeaderGroups=ze(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.right],(t,r,n)=>{var i;let a=(i=n==null?void 0:n.map(o=>r.find(s=>s.id===o)).filter(Boolean))!=null?i:[];return Wd(t,a,e,"right")},Ke(e.options,nr,"getRightHeaderGroups")),e.getFooterGroups=ze(()=>[e.getHeaderGroups()],t=>[...t].reverse(),Ke(e.options,nr,"getFooterGroups")),e.getLeftFooterGroups=ze(()=>[e.getLeftHeaderGroups()],t=>[...t].reverse(),Ke(e.options,nr,"getLeftFooterGroups")),e.getCenterFooterGroups=ze(()=>[e.getCenterHeaderGroups()],t=>[...t].reverse(),Ke(e.options,nr,"getCenterFooterGroups")),e.getRightFooterGroups=ze(()=>[e.getRightHeaderGroups()],t=>[...t].reverse(),Ke(e.options,nr,"getRightFooterGroups")),e.getFlatHeaders=ze(()=>[e.getHeaderGroups()],t=>t.map(r=>r.headers).flat(),Ke(e.options,nr,"getFlatHeaders")),e.getLeftFlatHeaders=ze(()=>[e.getLeftHeaderGroups()],t=>t.map(r=>r.headers).flat(),Ke(e.options,nr,"getLeftFlatHeaders")),e.getCenterFlatHeaders=ze(()=>[e.getCenterHeaderGroups()],t=>t.map(r=>r.headers).flat(),Ke(e.options,nr,"getCenterFlatHeaders")),e.getRightFlatHeaders=ze(()=>[e.getRightHeaderGroups()],t=>t.map(r=>r.headers).flat(),Ke(e.options,nr,"getRightFlatHeaders")),e.getCenterLeafHeaders=ze(()=>[e.getCenterFlatHeaders()],t=>t.filter(r=>{var n;return!((n=r.subHeaders)!=null&&n.length)}),Ke(e.options,nr,"getCenterLeafHeaders")),e.getLeftLeafHeaders=ze(()=>[e.getLeftFlatHeaders()],t=>t.filter(r=>{var n;return!((n=r.subHeaders)!=null&&n.length)}),Ke(e.options,nr,"getLeftLeafHeaders")),e.getRightLeafHeaders=ze(()=>[e.getRightFlatHeaders()],t=>t.filter(r=>{var n;return!((n=r.subHeaders)!=null&&n.length)}),Ke(e.options,nr,"getRightLeafHeaders")),e.getLeafHeaders=ze(()=>[e.getLeftHeaderGroups(),e.getCenterHeaderGroups(),e.getRightHeaderGroups()],(t,r,n)=>{var i,a,o,s,u,l;return[...(i=(a=t[0])==null?void 0:a.headers)!=null?i:[],...(o=(s=r[0])==null?void 0:s.headers)!=null?o:[],...(u=(l=n[0])==null?void 0:l.headers)!=null?u:[]].map(c=>c.getLeafHeaders()).flat()},Ke(e.options,nr,"getLeafHeaders"))}};function Wd(e,t,r,n){var i,a;let o=0,s=function(m,h){h===void 0&&(h=1),o=Math.max(o,h),m.filter(g=>g.getIsVisible()).forEach(g=>{var y;(y=g.columns)!=null&&y.length&&s(g.columns,h+1)},0)};s(e);let u=[],l=(m,h)=>{let g={depth:h,id:[n,`${h}`].filter(Boolean).join("_"),headers:[]},y=[];m.forEach(v=>{let D=[...y].reverse()[0],I=v.column.depth===g.depth,C,x=!1;if(I&&v.column.parent?C=v.column.parent:(C=v.column,x=!0),D&&(D==null?void 0:D.column)===C)D.subHeaders.push(v);else{let O=Kx(r,C,{id:[n,h,C.id,v==null?void 0:v.id].filter(Boolean).join("_"),isPlaceholder:x,placeholderId:x?`${y.filter(A=>A.column===C).length}`:void 0,depth:h,index:y.length});O.subHeaders.push(v),y.push(O)}g.headers.push(v),v.headerGroup=g}),u.push(g),h>0&&l(y,h-1)},c=t.map((m,h)=>Kx(r,m,{depth:o,index:h}));l(c,o-1),u.reverse();let d=m=>m.filter(g=>g.column.getIsVisible()).map(g=>{let y=0,v=0,D=[0];g.subHeaders&&g.subHeaders.length?(D=[],d(g.subHeaders).forEach(C=>{let{colSpan:x,rowSpan:O}=C;y+=x,D.push(O)})):y=1;let I=Math.min(...D);return v=v+I,g.colSpan=y,g.rowSpan=v,{colSpan:y,rowSpan:v}});return d((i=(a=u[0])==null?void 0:a.headers)!=null?i:[]),u}var Zg=(e,t,r,n,i,a,o)=>{let s={id:t,index:n,original:r,depth:i,parentId:o,_valuesCache:{},_uniqueValuesCache:{},getValue:u=>{if(s._valuesCache.hasOwnProperty(u))return s._valuesCache[u];let l=e.getColumn(u);if(l!=null&&l.accessorFn)return s._valuesCache[u]=l.accessorFn(s.original,n),s._valuesCache[u]},getUniqueValues:u=>{if(s._uniqueValuesCache.hasOwnProperty(u))return s._uniqueValuesCache[u];let l=e.getColumn(u);if(l!=null&&l.accessorFn)return l.columnDef.getUniqueValues?(s._uniqueValuesCache[u]=l.columnDef.getUniqueValues(s.original,n),s._uniqueValuesCache[u]):(s._uniqueValuesCache[u]=[s.getValue(u)],s._uniqueValuesCache[u])},renderValue:u=>{var l;return(l=s.getValue(u))!=null?l:e.options.renderFallbackValue},subRows:a!=null?a:[],getLeafRows:()=>PR(s.subRows,u=>u.subRows),getParentRow:()=>s.parentId?e.getRow(s.parentId,!0):void 0,getParentRows:()=>{let u=[],l=s;for(;;){let c=l.getParentRow();if(!c)break;u.push(c),l=c}return u.reverse()},getAllCells:ze(()=>[e.getAllLeafColumns()],u=>u.map(l=>NR(e,s,l,l.id)),Ke(e.options,"debugRows","getAllCells")),_getAllCellsByColumnId:ze(()=>[s.getAllCells()],u=>u.reduce((l,c)=>(l[c.column.id]=c,l),{}),Ke(e.options,"debugRows","getAllCellsByColumnId"))};for(let u=0;u<e._features.length;u++){let l=e._features[u];l==null||l.createRow==null||l.createRow(s,e)}return s},BR={createColumn:(e,t)=>{e._getFacetedRowModel=t.options.getFacetedRowModel&&t.options.getFacetedRowModel(t,e.id),e.getFacetedRowModel=()=>e._getFacetedRowModel?e._getFacetedRowModel():t.getPreFilteredRowModel(),e._getFacetedUniqueValues=t.options.getFacetedUniqueValues&&t.options.getFacetedUniqueValues(t,e.id),e.getFacetedUniqueValues=()=>e._getFacetedUniqueValues?e._getFacetedUniqueValues():new Map,e._getFacetedMinMaxValues=t.options.getFacetedMinMaxValues&&t.options.getFacetedMinMaxValues(t,e.id),e.getFacetedMinMaxValues=()=>{if(e._getFacetedMinMaxValues)return e._getFacetedMinMaxValues()}}},Gx=(e,t,r)=>{var n;let i=r.toLowerCase();return!!(!((n=e.getValue(t))==null||(n=n.toString())==null||(n=n.toLowerCase())==null)&&n.includes(i))};Gx.autoRemove=e=>di(e);var Jx=(e,t,r)=>{var n;return!!(!((n=e.getValue(t))==null||(n=n.toString())==null)&&n.includes(r))};Jx.autoRemove=e=>di(e);var Zx=(e,t,r)=>{var n;return((n=e.getValue(t))==null||(n=n.toString())==null?void 0:n.toLowerCase())===(r==null?void 0:r.toLowerCase())};Zx.autoRemove=e=>di(e);var Qx=(e,t,r)=>{var n;return(n=e.getValue(t))==null?void 0:n.includes(r)};Qx.autoRemove=e=>di(e)||!(e!=null&&e.length);var Xx=(e,t,r)=>!r.some(n=>{var i;return!((i=e.getValue(t))!=null&&i.includes(n))});Xx.autoRemove=e=>di(e)||!(e!=null&&e.length);var eC=(e,t,r)=>r.some(n=>{var i;return(i=e.getValue(t))==null?void 0:i.includes(n)});eC.autoRemove=e=>di(e)||!(e!=null&&e.length);var tC=(e,t,r)=>e.getValue(t)===r;tC.autoRemove=e=>di(e);var nC=(e,t,r)=>e.getValue(t)==r;nC.autoRemove=e=>di(e);var Qg=(e,t,r)=>{let[n,i]=r,a=e.getValue(t);return a>=n&&a<=i};Qg.resolveFilterValue=e=>{let[t,r]=e,n=typeof t!="number"?parseFloat(t):t,i=typeof r!="number"?parseFloat(r):r,a=t===null||Number.isNaN(n)?-1/0:n,o=r===null||Number.isNaN(i)?1/0:i;if(a>o){let s=a;a=o,o=s}return[a,o]};Qg.autoRemove=e=>di(e)||di(e[0])&&di(e[1]);var Xi={includesString:Gx,includesStringSensitive:Jx,equalsString:Zx,arrIncludes:Qx,arrIncludesAll:Xx,arrIncludesSome:eC,equals:tC,weakEquals:nC,inNumberRange:Qg};function di(e){return e==null||e===""}var VR={getDefaultColumnDef:()=>({filterFn:"auto"}),getInitialState:e=>({columnFilters:[],...e}),getDefaultOptions:e=>({onColumnFiltersChange:Pr("columnFilters",e),filterFromLeafRows:!1,maxLeafRowFilterDepth:100}),createColumn:(e,t)=>{e.getAutoFilterFn=()=>{let r=t.getCoreRowModel().flatRows[0],n=r==null?void 0:r.getValue(e.id);return typeof n=="string"?Xi.includesString:typeof n=="number"?Xi.inNumberRange:typeof n=="boolean"||n!==null&&typeof n=="object"?Xi.equals:Array.isArray(n)?Xi.arrIncludes:Xi.weakEquals},e.getFilterFn=()=>{var r,n;return Kd(e.columnDef.filterFn)?e.columnDef.filterFn:e.columnDef.filterFn==="auto"?e.getAutoFilterFn():(r=(n=t.options.filterFns)==null?void 0:n[e.columnDef.filterFn])!=null?r:Xi[e.columnDef.filterFn]},e.getCanFilter=()=>{var r,n,i;return((r=e.columnDef.enableColumnFilter)!=null?r:!0)&&((n=t.options.enableColumnFilters)!=null?n:!0)&&((i=t.options.enableFilters)!=null?i:!0)&&!!e.accessorFn},e.getIsFiltered=()=>e.getFilterIndex()>-1,e.getFilterValue=()=>{var r;return(r=t.getState().columnFilters)==null||(r=r.find(n=>n.id===e.id))==null?void 0:r.value},e.getFilterIndex=()=>{var r,n;return(r=(n=t.getState().columnFilters)==null?void 0:n.findIndex(i=>i.id===e.id))!=null?r:-1},e.setFilterValue=r=>{t.setColumnFilters(n=>{let i=e.getFilterFn(),a=n==null?void 0:n.find(c=>c.id===e.id),o=Oa(r,a?a.value:void 0);if(jx(i,o,e)){var s;return(s=n==null?void 0:n.filter(c=>c.id!==e.id))!=null?s:[]}let u={id:e.id,value:o};if(a){var l;return(l=n==null?void 0:n.map(c=>c.id===e.id?u:c))!=null?l:[]}return n!=null&&n.length?[...n,u]:[u]})}},createRow:(e,t)=>{e.columnFilters={},e.columnFiltersMeta={}},createTable:e=>{e.setColumnFilters=t=>{let r=e.getAllLeafColumns(),n=i=>{var a;return(a=Oa(t,i))==null?void 0:a.filter(o=>{let s=r.find(u=>u.id===o.id);if(s){let u=s.getFilterFn();if(jx(u,o.value,s))return!1}return!0})};e.options.onColumnFiltersChange==null||e.options.onColumnFiltersChange(n)},e.resetColumnFilters=t=>{var r,n;e.setColumnFilters(t?[]:(r=(n=e.initialState)==null?void 0:n.columnFilters)!=null?r:[])},e.getPreFilteredRowModel=()=>e.getCoreRowModel(),e.getFilteredRowModel=()=>(!e._getFilteredRowModel&&e.options.getFilteredRowModel&&(e._getFilteredRowModel=e.options.getFilteredRowModel(e)),e.options.manualFiltering||!e._getFilteredRowModel?e.getPreFilteredRowModel():e._getFilteredRowModel())}};function jx(e,t,r){return(e&&e.autoRemove?e.autoRemove(t,r):!1)||typeof t=="undefined"||typeof t=="string"&&!t}var $R=(e,t,r)=>r.reduce((n,i)=>{let a=i.getValue(e);return n+(typeof a=="number"?a:0)},0),UR=(e,t,r)=>{let n;return r.forEach(i=>{let a=i.getValue(e);a!=null&&(n>a||n===void 0&&a>=a)&&(n=a)}),n},WR=(e,t,r)=>{let n;return r.forEach(i=>{let a=i.getValue(e);a!=null&&(n<a||n===void 0&&a>=a)&&(n=a)}),n},YR=(e,t,r)=>{let n,i;return r.forEach(a=>{let o=a.getValue(e);o!=null&&(n===void 0?o>=o&&(n=i=o):(n>o&&(n=o),i<o&&(i=o)))}),[n,i]},zR=(e,t)=>{let r=0,n=0;if(t.forEach(i=>{let a=i.getValue(e);a!=null&&(a=+a)>=a&&(++r,n+=a)}),r)return n/r},KR=(e,t)=>{if(!t.length)return;let r=t.map(a=>a.getValue(e));if(!LR(r))return;if(r.length===1)return r[0];let n=Math.floor(r.length/2),i=r.sort((a,o)=>a-o);return r.length%2!==0?i[n]:(i[n-1]+i[n])/2},jR=(e,t)=>Array.from(new Set(t.map(r=>r.getValue(e))).values()),qR=(e,t)=>new Set(t.map(r=>r.getValue(e))).size,GR=(e,t)=>t.length,Bg={sum:$R,min:UR,max:WR,extent:YR,mean:zR,median:KR,unique:jR,uniqueCount:qR,count:GR},JR={getDefaultColumnDef:()=>({aggregatedCell:e=>{var t,r;return(t=(r=e.getValue())==null||r.toString==null?void 0:r.toString())!=null?t:null},aggregationFn:"auto"}),getInitialState:e=>({grouping:[],...e}),getDefaultOptions:e=>({onGroupingChange:Pr("grouping",e),groupedColumnMode:"reorder"}),createColumn:(e,t)=>{e.toggleGrouping=()=>{t.setGrouping(r=>r!=null&&r.includes(e.id)?r.filter(n=>n!==e.id):[...r!=null?r:[],e.id])},e.getCanGroup=()=>{var r,n;return((r=e.columnDef.enableGrouping)!=null?r:!0)&&((n=t.options.enableGrouping)!=null?n:!0)&&(!!e.accessorFn||!!e.columnDef.getGroupingValue)},e.getIsGrouped=()=>{var r;return(r=t.getState().grouping)==null?void 0:r.includes(e.id)},e.getGroupedIndex=()=>{var r;return(r=t.getState().grouping)==null?void 0:r.indexOf(e.id)},e.getToggleGroupingHandler=()=>{let r=e.getCanGroup();return()=>{r&&e.toggleGrouping()}},e.getAutoAggregationFn=()=>{let r=t.getCoreRowModel().flatRows[0],n=r==null?void 0:r.getValue(e.id);if(typeof n=="number")return Bg.sum;if(Object.prototype.toString.call(n)==="[object Date]")return Bg.extent},e.getAggregationFn=()=>{var r,n;if(!e)throw new Error;return Kd(e.columnDef.aggregationFn)?e.columnDef.aggregationFn:e.columnDef.aggregationFn==="auto"?e.getAutoAggregationFn():(r=(n=t.options.aggregationFns)==null?void 0:n[e.columnDef.aggregationFn])!=null?r:Bg[e.columnDef.aggregationFn]}},createTable:e=>{e.setGrouping=t=>e.options.onGroupingChange==null?void 0:e.options.onGroupingChange(t),e.resetGrouping=t=>{var r,n;e.setGrouping(t?[]:(r=(n=e.initialState)==null?void 0:n.grouping)!=null?r:[])},e.getPreGroupedRowModel=()=>e.getFilteredRowModel(),e.getGroupedRowModel=()=>(!e._getGroupedRowModel&&e.options.getGroupedRowModel&&(e._getGroupedRowModel=e.options.getGroupedRowModel(e)),e.options.manualGrouping||!e._getGroupedRowModel?e.getPreGroupedRowModel():e._getGroupedRowModel())},createRow:(e,t)=>{e.getIsGrouped=()=>!!e.groupingColumnId,e.getGroupingValue=r=>{if(e._groupingValuesCache.hasOwnProperty(r))return e._groupingValuesCache[r];let n=t.getColumn(r);return n!=null&&n.columnDef.getGroupingValue?(e._groupingValuesCache[r]=n.columnDef.getGroupingValue(e.original),e._groupingValuesCache[r]):e.getValue(r)},e._groupingValuesCache={}},createCell:(e,t,r,n)=>{e.getIsGrouped=()=>t.getIsGrouped()&&t.id===r.groupingColumnId,e.getIsPlaceholder=()=>!e.getIsGrouped()&&t.getIsGrouped(),e.getIsAggregated=()=>{var i;return!e.getIsGrouped()&&!e.getIsPlaceholder()&&!!((i=r.subRows)!=null&&i.length)}}};function ZR(e,t,r){if(!(t!=null&&t.length)||!r)return e;let n=e.filter(a=>!t.includes(a.id));return r==="remove"?n:[...t.map(a=>e.find(o=>o.id===a)).filter(Boolean),...n]}var QR={getInitialState:e=>({columnOrder:[],...e}),getDefaultOptions:e=>({onColumnOrderChange:Pr("columnOrder",e)}),createColumn:(e,t)=>{e.getIndex=ze(r=>[jl(t,r)],r=>r.findIndex(n=>n.id===e.id),Ke(t.options,"debugColumns","getIndex")),e.getIsFirstColumn=r=>{var n;return((n=jl(t,r)[0])==null?void 0:n.id)===e.id},e.getIsLastColumn=r=>{var n;let i=jl(t,r);return((n=i[i.length-1])==null?void 0:n.id)===e.id}},createTable:e=>{e.setColumnOrder=t=>e.options.onColumnOrderChange==null?void 0:e.options.onColumnOrderChange(t),e.resetColumnOrder=t=>{var r;e.setColumnOrder(t?[]:(r=e.initialState.columnOrder)!=null?r:[])},e._getOrderColumnsFn=ze(()=>[e.getState().columnOrder,e.getState().grouping,e.options.groupedColumnMode],(t,r,n)=>i=>{let a=[];if(!(t!=null&&t.length))a=i;else{let o=[...t],s=[...i];for(;s.length&&o.length;){let u=o.shift(),l=s.findIndex(c=>c.id===u);l>-1&&a.push(s.splice(l,1)[0])}a=[...a,...s]}return ZR(a,r,n)},Ke(e.options,"debugTable","_getOrderColumnsFn"))}},Vg=()=>({left:[],right:[]}),XR={getInitialState:e=>({columnPinning:Vg(),...e}),getDefaultOptions:e=>({onColumnPinningChange:Pr("columnPinning",e)}),createColumn:(e,t)=>{e.pin=r=>{let n=e.getLeafColumns().map(i=>i.id).filter(Boolean);t.setColumnPinning(i=>{var a,o;if(r==="right"){var s,u;return{left:((s=i==null?void 0:i.left)!=null?s:[]).filter(d=>!(n!=null&&n.includes(d))),right:[...((u=i==null?void 0:i.right)!=null?u:[]).filter(d=>!(n!=null&&n.includes(d))),...n]}}if(r==="left"){var l,c;return{left:[...((l=i==null?void 0:i.left)!=null?l:[]).filter(d=>!(n!=null&&n.includes(d))),...n],right:((c=i==null?void 0:i.right)!=null?c:[]).filter(d=>!(n!=null&&n.includes(d)))}}return{left:((a=i==null?void 0:i.left)!=null?a:[]).filter(d=>!(n!=null&&n.includes(d))),right:((o=i==null?void 0:i.right)!=null?o:[]).filter(d=>!(n!=null&&n.includes(d)))}})},e.getCanPin=()=>e.getLeafColumns().some(n=>{var i,a,o;return((i=n.columnDef.enablePinning)!=null?i:!0)&&((a=(o=t.options.enableColumnPinning)!=null?o:t.options.enablePinning)!=null?a:!0)}),e.getIsPinned=()=>{let r=e.getLeafColumns().map(s=>s.id),{left:n,right:i}=t.getState().columnPinning,a=r.some(s=>n==null?void 0:n.includes(s)),o=r.some(s=>i==null?void 0:i.includes(s));return a?"left":o?"right":!1},e.getPinnedIndex=()=>{var r,n;let i=e.getIsPinned();return i?(r=(n=t.getState().columnPinning)==null||(n=n[i])==null?void 0:n.indexOf(e.id))!=null?r:-1:0}},createRow:(e,t)=>{e.getCenterVisibleCells=ze(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left,t.getState().columnPinning.right],(r,n,i)=>{let a=[...n!=null?n:[],...i!=null?i:[]];return r.filter(o=>!a.includes(o.column.id))},Ke(t.options,"debugRows","getCenterVisibleCells")),e.getLeftVisibleCells=ze(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left],(r,n)=>(n!=null?n:[]).map(a=>r.find(o=>o.column.id===a)).filter(Boolean).map(a=>({...a,position:"left"})),Ke(t.options,"debugRows","getLeftVisibleCells")),e.getRightVisibleCells=ze(()=>[e._getAllVisibleCells(),t.getState().columnPinning.right],(r,n)=>(n!=null?n:[]).map(a=>r.find(o=>o.column.id===a)).filter(Boolean).map(a=>({...a,position:"right"})),Ke(t.options,"debugRows","getRightVisibleCells"))},createTable:e=>{e.setColumnPinning=t=>e.options.onColumnPinningChange==null?void 0:e.options.onColumnPinningChange(t),e.resetColumnPinning=t=>{var r,n;return e.setColumnPinning(t?Vg():(r=(n=e.initialState)==null?void 0:n.columnPinning)!=null?r:Vg())},e.getIsSomeColumnsPinned=t=>{var r;let n=e.getState().columnPinning;if(!t){var i,a;return!!((i=n.left)!=null&&i.length||(a=n.right)!=null&&a.length)}return!!((r=n[t])!=null&&r.length)},e.getLeftLeafColumns=ze(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left],(t,r)=>(r!=null?r:[]).map(n=>t.find(i=>i.id===n)).filter(Boolean),Ke(e.options,"debugColumns","getLeftLeafColumns")),e.getRightLeafColumns=ze(()=>[e.getAllLeafColumns(),e.getState().columnPinning.right],(t,r)=>(r!=null?r:[]).map(n=>t.find(i=>i.id===n)).filter(Boolean),Ke(e.options,"debugColumns","getRightLeafColumns")),e.getCenterLeafColumns=ze(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,r,n)=>{let i=[...r!=null?r:[],...n!=null?n:[]];return t.filter(a=>!i.includes(a.id))},Ke(e.options,"debugColumns","getCenterLeafColumns"))}},Yd={size:150,minSize:20,maxSize:Number.MAX_SAFE_INTEGER},$g=()=>({startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}),eH={getDefaultColumnDef:()=>Yd,getInitialState:e=>({columnSizing:{},columnSizingInfo:$g(),...e}),getDefaultOptions:e=>({columnResizeMode:"onEnd",columnResizeDirection:"ltr",onColumnSizingChange:Pr("columnSizing",e),onColumnSizingInfoChange:Pr("columnSizingInfo",e)}),createColumn:(e,t)=>{e.getSize=()=>{var r,n,i;let a=t.getState().columnSizing[e.id];return Math.min(Math.max((r=e.columnDef.minSize)!=null?r:Yd.minSize,(n=a!=null?a:e.columnDef.size)!=null?n:Yd.size),(i=e.columnDef.maxSize)!=null?i:Yd.maxSize)},e.getStart=ze(r=>[r,jl(t,r),t.getState().columnSizing],(r,n)=>n.slice(0,e.getIndex(r)).reduce((i,a)=>i+a.getSize(),0),Ke(t.options,"debugColumns","getStart")),e.getAfter=ze(r=>[r,jl(t,r),t.getState().columnSizing],(r,n)=>n.slice(e.getIndex(r)+1).reduce((i,a)=>i+a.getSize(),0),Ke(t.options,"debugColumns","getAfter")),e.resetSize=()=>{t.setColumnSizing(r=>{let{[e.id]:n,...i}=r;return i})},e.getCanResize=()=>{var r,n;return((r=e.columnDef.enableResizing)!=null?r:!0)&&((n=t.options.enableColumnResizing)!=null?n:!0)},e.getIsResizing=()=>t.getState().columnSizingInfo.isResizingColumn===e.id},createHeader:(e,t)=>{e.getSize=()=>{let r=0,n=i=>{if(i.subHeaders.length)i.subHeaders.forEach(n);else{var a;r+=(a=i.column.getSize())!=null?a:0}};return n(e),r},e.getStart=()=>{if(e.index>0){let r=e.headerGroup.headers[e.index-1];return r.getStart()+r.getSize()}return 0},e.getResizeHandler=r=>{let n=t.getColumn(e.column.id),i=n==null?void 0:n.getCanResize();return a=>{if(!n||!i||(a.persist==null||a.persist(),Ug(a)&&a.touches&&a.touches.length>1))return;let o=e.getSize(),s=e?e.getLeafHeaders().map(D=>[D.column.id,D.column.getSize()]):[[n.id,n.getSize()]],u=Ug(a)?Math.round(a.touches[0].clientX):a.clientX,l={},c=(D,I)=>{typeof I=="number"&&(t.setColumnSizingInfo(C=>{var x,O;let A=t.options.columnResizeDirection==="rtl"?-1:1,P=(I-((x=C==null?void 0:C.startOffset)!=null?x:0))*A,B=Math.max(P/((O=C==null?void 0:C.startSize)!=null?O:0),-.999999);return C.columnSizingStart.forEach(G=>{let[J,Q]=G;l[J]=Math.round(Math.max(Q+Q*B,0)*100)/100}),{...C,deltaOffset:P,deltaPercentage:B}}),(t.options.columnResizeMode==="onChange"||D==="end")&&t.setColumnSizing(C=>({...C,...l})))},d=D=>c("move",D),m=D=>{c("end",D),t.setColumnSizingInfo(I=>({...I,isResizingColumn:!1,startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,columnSizingStart:[]}))},h=r||typeof document!="undefined"?document:null,g={moveHandler:D=>d(D.clientX),upHandler:D=>{h==null||h.removeEventListener("mousemove",g.moveHandler),h==null||h.removeEventListener("mouseup",g.upHandler),m(D.clientX)}},y={moveHandler:D=>(D.cancelable&&(D.preventDefault(),D.stopPropagation()),d(D.touches[0].clientX),!1),upHandler:D=>{var I;h==null||h.removeEventListener("touchmove",y.moveHandler),h==null||h.removeEventListener("touchend",y.upHandler),D.cancelable&&(D.preventDefault(),D.stopPropagation()),m((I=D.touches[0])==null?void 0:I.clientX)}},v=tH()?{passive:!1}:!1;Ug(a)?(h==null||h.addEventListener("touchmove",y.moveHandler,v),h==null||h.addEventListener("touchend",y.upHandler,v)):(h==null||h.addEventListener("mousemove",g.moveHandler,v),h==null||h.addEventListener("mouseup",g.upHandler,v)),t.setColumnSizingInfo(D=>({...D,startOffset:u,startSize:o,deltaOffset:0,deltaPercentage:0,columnSizingStart:s,isResizingColumn:n.id}))}}},createTable:e=>{e.setColumnSizing=t=>e.options.onColumnSizingChange==null?void 0:e.options.onColumnSizingChange(t),e.setColumnSizingInfo=t=>e.options.onColumnSizingInfoChange==null?void 0:e.options.onColumnSizingInfoChange(t),e.resetColumnSizing=t=>{var r;e.setColumnSizing(t?{}:(r=e.initialState.columnSizing)!=null?r:{})},e.resetHeaderSizeInfo=t=>{var r;e.setColumnSizingInfo(t?$g():(r=e.initialState.columnSizingInfo)!=null?r:$g())},e.getTotalSize=()=>{var t,r;return(t=(r=e.getHeaderGroups()[0])==null?void 0:r.headers.reduce((n,i)=>n+i.getSize(),0))!=null?t:0},e.getLeftTotalSize=()=>{var t,r;return(t=(r=e.getLeftHeaderGroups()[0])==null?void 0:r.headers.reduce((n,i)=>n+i.getSize(),0))!=null?t:0},e.getCenterTotalSize=()=>{var t,r;return(t=(r=e.getCenterHeaderGroups()[0])==null?void 0:r.headers.reduce((n,i)=>n+i.getSize(),0))!=null?t:0},e.getRightTotalSize=()=>{var t,r;return(t=(r=e.getRightHeaderGroups()[0])==null?void 0:r.headers.reduce((n,i)=>n+i.getSize(),0))!=null?t:0}}},zd=null;function tH(){if(typeof zd=="boolean")return zd;let e=!1;try{let t={get passive(){return e=!0,!1}},r=()=>{};window.addEventListener("test",r,t),window.removeEventListener("test",r)}catch(t){e=!1}return zd=e,zd}function Ug(e){return e.type==="touchstart"}var nH={getInitialState:e=>({columnVisibility:{},...e}),getDefaultOptions:e=>({onColumnVisibilityChange:Pr("columnVisibility",e)}),createColumn:(e,t)=>{e.toggleVisibility=r=>{e.getCanHide()&&t.setColumnVisibility(n=>({...n,[e.id]:r!=null?r:!e.getIsVisible()}))},e.getIsVisible=()=>{var r,n;let i=e.columns;return(r=i.length?i.some(a=>a.getIsVisible()):(n=t.getState().columnVisibility)==null?void 0:n[e.id])!=null?r:!0},e.getCanHide=()=>{var r,n;return((r=e.columnDef.enableHiding)!=null?r:!0)&&((n=t.options.enableHiding)!=null?n:!0)},e.getToggleVisibilityHandler=()=>r=>{e.toggleVisibility==null||e.toggleVisibility(r.target.checked)}},createRow:(e,t)=>{e._getAllVisibleCells=ze(()=>[e.getAllCells(),t.getState().columnVisibility],r=>r.filter(n=>n.column.getIsVisible()),Ke(t.options,"debugRows","_getAllVisibleCells")),e.getVisibleCells=ze(()=>[e.getLeftVisibleCells(),e.getCenterVisibleCells(),e.getRightVisibleCells()],(r,n,i)=>[...r,...n,...i],Ke(t.options,"debugRows","getVisibleCells"))},createTable:e=>{let t=(r,n)=>ze(()=>[n(),n().filter(i=>i.getIsVisible()).map(i=>i.id).join("_")],i=>i.filter(a=>a.getIsVisible==null?void 0:a.getIsVisible()),Ke(e.options,"debugColumns",r));e.getVisibleFlatColumns=t("getVisibleFlatColumns",()=>e.getAllFlatColumns()),e.getVisibleLeafColumns=t("getVisibleLeafColumns",()=>e.getAllLeafColumns()),e.getLeftVisibleLeafColumns=t("getLeftVisibleLeafColumns",()=>e.getLeftLeafColumns()),e.getRightVisibleLeafColumns=t("getRightVisibleLeafColumns",()=>e.getRightLeafColumns()),e.getCenterVisibleLeafColumns=t("getCenterVisibleLeafColumns",()=>e.getCenterLeafColumns()),e.setColumnVisibility=r=>e.options.onColumnVisibilityChange==null?void 0:e.options.onColumnVisibilityChange(r),e.resetColumnVisibility=r=>{var n;e.setColumnVisibility(r?{}:(n=e.initialState.columnVisibility)!=null?n:{})},e.toggleAllColumnsVisible=r=>{var n;r=(n=r)!=null?n:!e.getIsAllColumnsVisible(),e.setColumnVisibility(e.getAllLeafColumns().reduce((i,a)=>({...i,[a.id]:r||!(a.getCanHide!=null&&a.getCanHide())}),{}))},e.getIsAllColumnsVisible=()=>!e.getAllLeafColumns().some(r=>!(r.getIsVisible!=null&&r.getIsVisible())),e.getIsSomeColumnsVisible=()=>e.getAllLeafColumns().some(r=>r.getIsVisible==null?void 0:r.getIsVisible()),e.getToggleAllColumnsVisibilityHandler=()=>r=>{var n;e.toggleAllColumnsVisible((n=r.target)==null?void 0:n.checked)}}};function jl(e,t){return t?t==="center"?e.getCenterVisibleLeafColumns():t==="left"?e.getLeftVisibleLeafColumns():e.getRightVisibleLeafColumns():e.getVisibleLeafColumns()}var rH={createTable:e=>{e._getGlobalFacetedRowModel=e.options.getFacetedRowModel&&e.options.getFacetedRowModel(e,"__global__"),e.getGlobalFacetedRowModel=()=>e.options.manualFiltering||!e._getGlobalFacetedRowModel?e.getPreFilteredRowModel():e._getGlobalFacetedRowModel(),e._getGlobalFacetedUniqueValues=e.options.getFacetedUniqueValues&&e.options.getFacetedUniqueValues(e,"__global__"),e.getGlobalFacetedUniqueValues=()=>e._getGlobalFacetedUniqueValues?e._getGlobalFacetedUniqueValues():new Map,e._getGlobalFacetedMinMaxValues=e.options.getFacetedMinMaxValues&&e.options.getFacetedMinMaxValues(e,"__global__"),e.getGlobalFacetedMinMaxValues=()=>{if(e._getGlobalFacetedMinMaxValues)return e._getGlobalFacetedMinMaxValues()}}},iH={getInitialState:e=>({globalFilter:void 0,...e}),getDefaultOptions:e=>({onGlobalFilterChange:Pr("globalFilter",e),globalFilterFn:"auto",getColumnCanGlobalFilter:t=>{var r;let n=(r=e.getCoreRowModel().flatRows[0])==null||(r=r._getAllCellsByColumnId()[t.id])==null?void 0:r.getValue();return typeof n=="string"||typeof n=="number"}}),createColumn:(e,t)=>{e.getCanGlobalFilter=()=>{var r,n,i,a;return((r=e.columnDef.enableGlobalFilter)!=null?r:!0)&&((n=t.options.enableGlobalFilter)!=null?n:!0)&&((i=t.options.enableFilters)!=null?i:!0)&&((a=t.options.getColumnCanGlobalFilter==null?void 0:t.options.getColumnCanGlobalFilter(e))!=null?a:!0)&&!!e.accessorFn}},createTable:e=>{e.getGlobalAutoFilterFn=()=>Xi.includesString,e.getGlobalFilterFn=()=>{var t,r;let{globalFilterFn:n}=e.options;return Kd(n)?n:n==="auto"?e.getGlobalAutoFilterFn():(t=(r=e.options.filterFns)==null?void 0:r[n])!=null?t:Xi[n]},e.setGlobalFilter=t=>{e.options.onGlobalFilterChange==null||e.options.onGlobalFilterChange(t)},e.resetGlobalFilter=t=>{e.setGlobalFilter(t?void 0:e.initialState.globalFilter)}}},aH={getInitialState:e=>({expanded:{},...e}),getDefaultOptions:e=>({onExpandedChange:Pr("expanded",e),paginateExpandedRows:!0}),createTable:e=>{let t=!1,r=!1;e._autoResetExpanded=()=>{var n,i;if(!t){e._queue(()=>{t=!0});return}if((n=(i=e.options.autoResetAll)!=null?i:e.options.autoResetExpanded)!=null?n:!e.options.manualExpanding){if(r)return;r=!0,e._queue(()=>{e.resetExpanded(),r=!1})}},e.setExpanded=n=>e.options.onExpandedChange==null?void 0:e.options.onExpandedChange(n),e.toggleAllRowsExpanded=n=>{(n!=null?n:!e.getIsAllRowsExpanded())?e.setExpanded(!0):e.setExpanded({})},e.resetExpanded=n=>{var i,a;e.setExpanded(n?{}:(i=(a=e.initialState)==null?void 0:a.expanded)!=null?i:{})},e.getCanSomeRowsExpand=()=>e.getPrePaginationRowModel().flatRows.some(n=>n.getCanExpand()),e.getToggleAllRowsExpandedHandler=()=>n=>{n.persist==null||n.persist(),e.toggleAllRowsExpanded()},e.getIsSomeRowsExpanded=()=>{let n=e.getState().expanded;return n===!0||Object.values(n).some(Boolean)},e.getIsAllRowsExpanded=()=>{let n=e.getState().expanded;return typeof n=="boolean"?n===!0:!(!Object.keys(n).length||e.getRowModel().flatRows.some(i=>!i.getIsExpanded()))},e.getExpandedDepth=()=>{let n=0;return(e.getState().expanded===!0?Object.keys(e.getRowModel().rowsById):Object.keys(e.getState().expanded)).forEach(a=>{let o=a.split(".");n=Math.max(n,o.length)}),n},e.getPreExpandedRowModel=()=>e.getSortedRowModel(),e.getExpandedRowModel=()=>(!e._getExpandedRowModel&&e.options.getExpandedRowModel&&(e._getExpandedRowModel=e.options.getExpandedRowModel(e)),e.options.manualExpanding||!e._getExpandedRowModel?e.getPreExpandedRowModel():e._getExpandedRowModel())},createRow:(e,t)=>{e.toggleExpanded=r=>{t.setExpanded(n=>{var i;let a=n===!0?!0:!!(n!=null&&n[e.id]),o={};if(n===!0?Object.keys(t.getRowModel().rowsById).forEach(s=>{o[s]=!0}):o=n,r=(i=r)!=null?i:!a,!a&&r)return{...o,[e.id]:!0};if(a&&!r){let{[e.id]:s,...u}=o;return u}return n})},e.getIsExpanded=()=>{var r;let n=t.getState().expanded;return!!((r=t.options.getIsRowExpanded==null?void 0:t.options.getIsRowExpanded(e))!=null?r:n===!0||n!=null&&n[e.id])},e.getCanExpand=()=>{var r,n,i;return(r=t.options.getRowCanExpand==null?void 0:t.options.getRowCanExpand(e))!=null?r:((n=t.options.enableExpanding)!=null?n:!0)&&!!((i=e.subRows)!=null&&i.length)},e.getIsAllParentsExpanded=()=>{let r=!0,n=e;for(;r&&n.parentId;)n=t.getRow(n.parentId,!0),r=n.getIsExpanded();return r},e.getToggleExpandedHandler=()=>{let r=e.getCanExpand();return()=>{r&&e.toggleExpanded()}}}},Kg=0,jg=10,Wg=()=>({pageIndex:Kg,pageSize:jg}),oH={getInitialState:e=>({...e,pagination:{...Wg(),...e==null?void 0:e.pagination}}),getDefaultOptions:e=>({onPaginationChange:Pr("pagination",e)}),createTable:e=>{let t=!1,r=!1;e._autoResetPageIndex=()=>{var n,i;if(!t){e._queue(()=>{t=!0});return}if((n=(i=e.options.autoResetAll)!=null?i:e.options.autoResetPageIndex)!=null?n:!e.options.manualPagination){if(r)return;r=!0,e._queue(()=>{e.resetPageIndex(),r=!1})}},e.setPagination=n=>{let i=a=>Oa(n,a);return e.options.onPaginationChange==null?void 0:e.options.onPaginationChange(i)},e.resetPagination=n=>{var i;e.setPagination(n?Wg():(i=e.initialState.pagination)!=null?i:Wg())},e.setPageIndex=n=>{e.setPagination(i=>{let a=Oa(n,i.pageIndex),o=typeof e.options.pageCount=="undefined"||e.options.pageCount===-1?Number.MAX_SAFE_INTEGER:e.options.pageCount-1;return a=Math.max(0,Math.min(a,o)),{...i,pageIndex:a}})},e.resetPageIndex=n=>{var i,a;e.setPageIndex(n?Kg:(i=(a=e.initialState)==null||(a=a.pagination)==null?void 0:a.pageIndex)!=null?i:Kg)},e.resetPageSize=n=>{var i,a;e.setPageSize(n?jg:(i=(a=e.initialState)==null||(a=a.pagination)==null?void 0:a.pageSize)!=null?i:jg)},e.setPageSize=n=>{e.setPagination(i=>{let a=Math.max(1,Oa(n,i.pageSize)),o=i.pageSize*i.pageIndex,s=Math.floor(o/a);return{...i,pageIndex:s,pageSize:a}})},e.setPageCount=n=>e.setPagination(i=>{var a;let o=Oa(n,(a=e.options.pageCount)!=null?a:-1);return typeof o=="number"&&(o=Math.max(-1,o)),{...i,pageCount:o}}),e.getPageOptions=ze(()=>[e.getPageCount()],n=>{let i=[];return n&&n>0&&(i=[...new Array(n)].fill(null).map((a,o)=>o)),i},Ke(e.options,"debugTable","getPageOptions")),e.getCanPreviousPage=()=>e.getState().pagination.pageIndex>0,e.getCanNextPage=()=>{let{pageIndex:n}=e.getState().pagination,i=e.getPageCount();return i===-1?!0:i===0?!1:n<i-1},e.previousPage=()=>e.setPageIndex(n=>n-1),e.nextPage=()=>e.setPageIndex(n=>n+1),e.firstPage=()=>e.setPageIndex(0),e.lastPage=()=>e.setPageIndex(e.getPageCount()-1),e.getPrePaginationRowModel=()=>e.getExpandedRowModel(),e.getPaginationRowModel=()=>(!e._getPaginationRowModel&&e.options.getPaginationRowModel&&(e._getPaginationRowModel=e.options.getPaginationRowModel(e)),e.options.manualPagination||!e._getPaginationRowModel?e.getPrePaginationRowModel():e._getPaginationRowModel()),e.getPageCount=()=>{var n;return(n=e.options.pageCount)!=null?n:Math.ceil(e.getRowCount()/e.getState().pagination.pageSize)},e.getRowCount=()=>{var n;return(n=e.options.rowCount)!=null?n:e.getPrePaginationRowModel().rows.length}}},Yg=()=>({top:[],bottom:[]}),sH={getInitialState:e=>({rowPinning:Yg(),...e}),getDefaultOptions:e=>({onRowPinningChange:Pr("rowPinning",e)}),createRow:(e,t)=>{e.pin=(r,n,i)=>{let a=n?e.getLeafRows().map(u=>{let{id:l}=u;return l}):[],o=i?e.getParentRows().map(u=>{let{id:l}=u;return l}):[],s=new Set([...o,e.id,...a]);t.setRowPinning(u=>{var l,c;if(r==="bottom"){var d,m;return{top:((d=u==null?void 0:u.top)!=null?d:[]).filter(y=>!(s!=null&&s.has(y))),bottom:[...((m=u==null?void 0:u.bottom)!=null?m:[]).filter(y=>!(s!=null&&s.has(y))),...Array.from(s)]}}if(r==="top"){var h,g;return{top:[...((h=u==null?void 0:u.top)!=null?h:[]).filter(y=>!(s!=null&&s.has(y))),...Array.from(s)],bottom:((g=u==null?void 0:u.bottom)!=null?g:[]).filter(y=>!(s!=null&&s.has(y)))}}return{top:((l=u==null?void 0:u.top)!=null?l:[]).filter(y=>!(s!=null&&s.has(y))),bottom:((c=u==null?void 0:u.bottom)!=null?c:[]).filter(y=>!(s!=null&&s.has(y)))}})},e.getCanPin=()=>{var r;let{enableRowPinning:n,enablePinning:i}=t.options;return typeof n=="function"?n(e):(r=n!=null?n:i)!=null?r:!0},e.getIsPinned=()=>{let r=[e.id],{top:n,bottom:i}=t.getState().rowPinning,a=r.some(s=>n==null?void 0:n.includes(s)),o=r.some(s=>i==null?void 0:i.includes(s));return a?"top":o?"bottom":!1},e.getPinnedIndex=()=>{var r,n;let i=e.getIsPinned();if(!i)return-1;let a=(r=t._getPinnedRows(i))==null?void 0:r.map(o=>{let{id:s}=o;return s});return(n=a==null?void 0:a.indexOf(e.id))!=null?n:-1}},createTable:e=>{e.setRowPinning=t=>e.options.onRowPinningChange==null?void 0:e.options.onRowPinningChange(t),e.resetRowPinning=t=>{var r,n;return e.setRowPinning(t?Yg():(r=(n=e.initialState)==null?void 0:n.rowPinning)!=null?r:Yg())},e.getIsSomeRowsPinned=t=>{var r;let n=e.getState().rowPinning;if(!t){var i,a;return!!((i=n.top)!=null&&i.length||(a=n.bottom)!=null&&a.length)}return!!((r=n[t])!=null&&r.length)},e._getPinnedRows=ze(t=>[e.getRowModel().rows,e.getState().rowPinning[t],t],(t,r,n)=>{var i;return((i=e.options.keepPinnedRows)==null||i?(r!=null?r:[]).map(o=>{let s=e.getRow(o,!0);return s.getIsAllParentsExpanded()?s:null}):(r!=null?r:[]).map(o=>t.find(s=>s.id===o))).filter(Boolean).map(o=>({...o,position:n}))},Ke(e.options,"debugRows","_getPinnedRows")),e.getTopRows=()=>e._getPinnedRows("top"),e.getBottomRows=()=>e._getPinnedRows("bottom"),e.getCenterRows=ze(()=>[e.getRowModel().rows,e.getState().rowPinning.top,e.getState().rowPinning.bottom],(t,r,n)=>{let i=new Set([...r!=null?r:[],...n!=null?n:[]]);return t.filter(a=>!i.has(a.id))},Ke(e.options,"debugRows","getCenterRows"))}},lH={getInitialState:e=>({rowSelection:{},...e}),getDefaultOptions:e=>({onRowSelectionChange:Pr("rowSelection",e),enableRowSelection:!0,enableMultiRowSelection:!0,enableSubRowSelection:!0}),createTable:e=>{e.setRowSelection=t=>e.options.onRowSelectionChange==null?void 0:e.options.onRowSelectionChange(t),e.resetRowSelection=t=>{var r;return e.setRowSelection(t?{}:(r=e.initialState.rowSelection)!=null?r:{})},e.toggleAllRowsSelected=t=>{e.setRowSelection(r=>{t=typeof t!="undefined"?t:!e.getIsAllRowsSelected();let n={...r},i=e.getPreGroupedRowModel().flatRows;return t?i.forEach(a=>{a.getCanSelect()&&(n[a.id]=!0)}):i.forEach(a=>{delete n[a.id]}),n})},e.toggleAllPageRowsSelected=t=>e.setRowSelection(r=>{let n=typeof t!="undefined"?t:!e.getIsAllPageRowsSelected(),i={...r};return e.getRowModel().rows.forEach(a=>{qg(i,a.id,n,!0,e)}),i}),e.getPreSelectedRowModel=()=>e.getCoreRowModel(),e.getSelectedRowModel=ze(()=>[e.getState().rowSelection,e.getCoreRowModel()],(t,r)=>Object.keys(t).length?zg(e,r):{rows:[],flatRows:[],rowsById:{}},Ke(e.options,"debugTable","getSelectedRowModel")),e.getFilteredSelectedRowModel=ze(()=>[e.getState().rowSelection,e.getFilteredRowModel()],(t,r)=>Object.keys(t).length?zg(e,r):{rows:[],flatRows:[],rowsById:{}},Ke(e.options,"debugTable","getFilteredSelectedRowModel")),e.getGroupedSelectedRowModel=ze(()=>[e.getState().rowSelection,e.getSortedRowModel()],(t,r)=>Object.keys(t).length?zg(e,r):{rows:[],flatRows:[],rowsById:{}},Ke(e.options,"debugTable","getGroupedSelectedRowModel")),e.getIsAllRowsSelected=()=>{let t=e.getFilteredRowModel().flatRows,{rowSelection:r}=e.getState(),n=!!(t.length&&Object.keys(r).length);return n&&t.some(i=>i.getCanSelect()&&!r[i.id])&&(n=!1),n},e.getIsAllPageRowsSelected=()=>{let t=e.getPaginationRowModel().flatRows.filter(i=>i.getCanSelect()),{rowSelection:r}=e.getState(),n=!!t.length;return n&&t.some(i=>!r[i.id])&&(n=!1),n},e.getIsSomeRowsSelected=()=>{var t;let r=Object.keys((t=e.getState().rowSelection)!=null?t:{}).length;return r>0&&r<e.getFilteredRowModel().flatRows.length},e.getIsSomePageRowsSelected=()=>{let t=e.getPaginationRowModel().flatRows;return e.getIsAllPageRowsSelected()?!1:t.filter(r=>r.getCanSelect()).some(r=>r.getIsSelected()||r.getIsSomeSelected())},e.getToggleAllRowsSelectedHandler=()=>t=>{e.toggleAllRowsSelected(t.target.checked)},e.getToggleAllPageRowsSelectedHandler=()=>t=>{e.toggleAllPageRowsSelected(t.target.checked)}},createRow:(e,t)=>{e.toggleSelected=(r,n)=>{let i=e.getIsSelected();t.setRowSelection(a=>{var o;if(r=typeof r!="undefined"?r:!i,e.getCanSelect()&&i===r)return a;let s={...a};return qg(s,e.id,r,(o=n==null?void 0:n.selectChildren)!=null?o:!0,t),s})},e.getIsSelected=()=>{let{rowSelection:r}=t.getState();return Xg(e,r)},e.getIsSomeSelected=()=>{let{rowSelection:r}=t.getState();return Gg(e,r)==="some"},e.getIsAllSubRowsSelected=()=>{let{rowSelection:r}=t.getState();return Gg(e,r)==="all"},e.getCanSelect=()=>{var r;return typeof t.options.enableRowSelection=="function"?t.options.enableRowSelection(e):(r=t.options.enableRowSelection)!=null?r:!0},e.getCanSelectSubRows=()=>{var r;return typeof t.options.enableSubRowSelection=="function"?t.options.enableSubRowSelection(e):(r=t.options.enableSubRowSelection)!=null?r:!0},e.getCanMultiSelect=()=>{var r;return typeof t.options.enableMultiRowSelection=="function"?t.options.enableMultiRowSelection(e):(r=t.options.enableMultiRowSelection)!=null?r:!0},e.getToggleSelectedHandler=()=>{let r=e.getCanSelect();return n=>{var i;r&&e.toggleSelected((i=n.target)==null?void 0:i.checked)}}}},qg=(e,t,r,n,i)=>{var a;let o=i.getRow(t,!0);r?(o.getCanMultiSelect()||Object.keys(e).forEach(s=>delete e[s]),o.getCanSelect()&&(e[t]=!0)):delete e[t],n&&(a=o.subRows)!=null&&a.length&&o.getCanSelectSubRows()&&o.subRows.forEach(s=>qg(e,s.id,r,n,i))};function zg(e,t){let r=e.getState().rowSelection,n=[],i={},a=function(o,s){return o.map(u=>{var l;let c=Xg(u,r);if(c&&(n.push(u),i[u.id]=u),(l=u.subRows)!=null&&l.length&&(u={...u,subRows:a(u.subRows)}),c)return u}).filter(Boolean)};return{rows:a(t.rows),flatRows:n,rowsById:i}}function Xg(e,t){var r;return(r=t[e.id])!=null?r:!1}function Gg(e,t,r){var n;if(!((n=e.subRows)!=null&&n.length))return!1;let i=!0,a=!1;return e.subRows.forEach(o=>{if(!(a&&!i)&&(o.getCanSelect()&&(Xg(o,t)?a=!0:i=!1),o.subRows&&o.subRows.length)){let s=Gg(o,t);s==="all"?a=!0:(s==="some"&&(a=!0),i=!1)}}),i?"all":a?"some":!1}var Jg=/([0-9]+)/gm,uH=(e,t,r)=>rC(La(e.getValue(r)).toLowerCase(),La(t.getValue(r)).toLowerCase()),cH=(e,t,r)=>rC(La(e.getValue(r)),La(t.getValue(r))),dH=(e,t,r)=>ey(La(e.getValue(r)).toLowerCase(),La(t.getValue(r)).toLowerCase()),fH=(e,t,r)=>ey(La(e.getValue(r)),La(t.getValue(r))),hH=(e,t,r)=>{let n=e.getValue(r),i=t.getValue(r);return n>i?1:n<i?-1:0},mH=(e,t,r)=>ey(e.getValue(r),t.getValue(r));function ey(e,t){return e===t?0:e>t?1:-1}function La(e){return typeof e=="number"?isNaN(e)||e===1/0||e===-1/0?"":String(e):typeof e=="string"?e:""}function rC(e,t){let r=e.split(Jg).filter(Boolean),n=t.split(Jg).filter(Boolean);for(;r.length&&n.length;){let i=r.shift(),a=n.shift(),o=parseInt(i,10),s=parseInt(a,10),u=[o,s].sort();if(isNaN(u[0])){if(i>a)return 1;if(a>i)return-1;continue}if(isNaN(u[1]))return isNaN(o)?-1:1;if(o>s)return 1;if(s>o)return-1}return r.length-n.length}var Kl={alphanumeric:uH,alphanumericCaseSensitive:cH,text:dH,textCaseSensitive:fH,datetime:hH,basic:mH},pH={getInitialState:e=>({sorting:[],...e}),getDefaultColumnDef:()=>({sortingFn:"auto",sortUndefined:1}),getDefaultOptions:e=>({onSortingChange:Pr("sorting",e),isMultiSortEvent:t=>t.shiftKey}),createColumn:(e,t)=>{e.getAutoSortingFn=()=>{let r=t.getFilteredRowModel().flatRows.slice(10),n=!1;for(let i of r){let a=i==null?void 0:i.getValue(e.id);if(Object.prototype.toString.call(a)==="[object Date]")return Kl.datetime;if(typeof a=="string"&&(n=!0,a.split(Jg).length>1))return Kl.alphanumeric}return n?Kl.text:Kl.basic},e.getAutoSortDir=()=>{let r=t.getFilteredRowModel().flatRows[0];return typeof(r==null?void 0:r.getValue(e.id))=="string"?"asc":"desc"},e.getSortingFn=()=>{var r,n;if(!e)throw new Error;return Kd(e.columnDef.sortingFn)?e.columnDef.sortingFn:e.columnDef.sortingFn==="auto"?e.getAutoSortingFn():(r=(n=t.options.sortingFns)==null?void 0:n[e.columnDef.sortingFn])!=null?r:Kl[e.columnDef.sortingFn]},e.toggleSorting=(r,n)=>{let i=e.getNextSortingOrder(),a=typeof r!="undefined"&&r!==null;t.setSorting(o=>{let s=o==null?void 0:o.find(h=>h.id===e.id),u=o==null?void 0:o.findIndex(h=>h.id===e.id),l=[],c,d=a?r:i==="desc";if(o!=null&&o.length&&e.getCanMultiSort()&&n?s?c="toggle":c="add":o!=null&&o.length&&u!==o.length-1?c="replace":s?c="toggle":c="replace",c==="toggle"&&(a||i||(c="remove")),c==="add"){var m;l=[...o,{id:e.id,desc:d}],l.splice(0,l.length-((m=t.options.maxMultiSortColCount)!=null?m:Number.MAX_SAFE_INTEGER))}else c==="toggle"?l=o.map(h=>h.id===e.id?{...h,desc:d}:h):c==="remove"?l=o.filter(h=>h.id!==e.id):l=[{id:e.id,desc:d}];return l})},e.getFirstSortDir=()=>{var r,n;return((r=(n=e.columnDef.sortDescFirst)!=null?n:t.options.sortDescFirst)!=null?r:e.getAutoSortDir()==="desc")?"desc":"asc"},e.getNextSortingOrder=r=>{var n,i;let a=e.getFirstSortDir(),o=e.getIsSorted();return o?o!==a&&((n=t.options.enableSortingRemoval)==null||n)&&(!(r&&(i=t.options.enableMultiRemove)!=null)||i)?!1:o==="desc"?"asc":"desc":a},e.getCanSort=()=>{var r,n;return((r=e.columnDef.enableSorting)!=null?r:!0)&&((n=t.options.enableSorting)!=null?n:!0)&&!!e.accessorFn},e.getCanMultiSort=()=>{var r,n;return(r=(n=e.columnDef.enableMultiSort)!=null?n:t.options.enableMultiSort)!=null?r:!!e.accessorFn},e.getIsSorted=()=>{var r;let n=(r=t.getState().sorting)==null?void 0:r.find(i=>i.id===e.id);return n?n.desc?"desc":"asc":!1},e.getSortIndex=()=>{var r,n;return(r=(n=t.getState().sorting)==null?void 0:n.findIndex(i=>i.id===e.id))!=null?r:-1},e.clearSorting=()=>{t.setSorting(r=>r!=null&&r.length?r.filter(n=>n.id!==e.id):[])},e.getToggleSortingHandler=()=>{let r=e.getCanSort();return n=>{r&&(n.persist==null||n.persist(),e.toggleSorting==null||e.toggleSorting(void 0,e.getCanMultiSort()?t.options.isMultiSortEvent==null?void 0:t.options.isMultiSortEvent(n):!1))}}},createTable:e=>{e.setSorting=t=>e.options.onSortingChange==null?void 0:e.options.onSortingChange(t),e.resetSorting=t=>{var r,n;e.setSorting(t?[]:(r=(n=e.initialState)==null?void 0:n.sorting)!=null?r:[])},e.getPreSortedRowModel=()=>e.getGroupedRowModel(),e.getSortedRowModel=()=>(!e._getSortedRowModel&&e.options.getSortedRowModel&&(e._getSortedRowModel=e.options.getSortedRowModel(e)),e.options.manualSorting||!e._getSortedRowModel?e.getPreSortedRowModel():e._getSortedRowModel())}},gH=[HR,nH,QR,XR,BR,VR,rH,iH,pH,JR,aH,oH,sH,lH,eH];function iC(e){var t,r;let n=[...gH,...(t=e._features)!=null?t:[]],i={_features:n},a=i._features.reduce((m,h)=>Object.assign(m,h.getDefaultOptions==null?void 0:h.getDefaultOptions(i)),{}),o=m=>i.options.mergeOptions?i.options.mergeOptions(a,m):{...a,...m},u={...{},...(r=e.initialState)!=null?r:{}};i._features.forEach(m=>{var h;u=(h=m.getInitialState==null?void 0:m.getInitialState(u))!=null?h:u});let l=[],c=!1,d={_features:n,options:{...a,...e},initialState:u,_queue:m=>{l.push(m),c||(c=!0,Promise.resolve().then(()=>{for(;l.length;)l.shift()();c=!1}).catch(h=>activeWindow.setTimeout(()=>{throw h})))},reset:()=>{i.setState(i.initialState)},setOptions:m=>{let h=Oa(m,i.options);i.options=o(h)},getState:()=>i.options.state,setState:m=>{i.options.onStateChange==null||i.options.onStateChange(m)},_getRowId:(m,h,g)=>{var y;return(y=i.options.getRowId==null?void 0:i.options.getRowId(m,h,g))!=null?y:`${g?[g.id,h].join("."):h}`},getCoreRowModel:()=>(i._getCoreRowModel||(i._getCoreRowModel=i.options.getCoreRowModel(i)),i._getCoreRowModel()),getRowModel:()=>i.getPaginationRowModel(),getRow:(m,h)=>{let g=(h?i.getPrePaginationRowModel():i.getRowModel()).rowsById[m];if(!g&&(g=i.getCoreRowModel().rowsById[m],!g))throw new Error;return g},_getDefaultColumnDef:ze(()=>[i.options.defaultColumn],m=>{var h;return m=(h=m)!=null?h:{},{header:g=>{let y=g.header.column.columnDef;return y.accessorKey?y.accessorKey:y.accessorFn?y.id:null},cell:g=>{var y,v;return(y=(v=g.renderValue())==null||v.toString==null?void 0:v.toString())!=null?y:null},...i._features.reduce((g,y)=>Object.assign(g,y.getDefaultColumnDef==null?void 0:y.getDefaultColumnDef()),{}),...m}},Ke(e,"debugColumns","_getDefaultColumnDef")),_getColumnDefs:()=>i.options.columns,getAllColumns:ze(()=>[i._getColumnDefs()],m=>{let h=function(g,y,v){return v===void 0&&(v=0),g.map(D=>{let I=RR(i,D,v,y),C=D;return I.columns=C.columns?h(C.columns,I,v+1):[],I})};return h(m)},Ke(e,"debugColumns","getAllColumns")),getAllFlatColumns:ze(()=>[i.getAllColumns()],m=>m.flatMap(h=>h.getFlatColumns()),Ke(e,"debugColumns","getAllFlatColumns")),_getAllFlatColumnsById:ze(()=>[i.getAllFlatColumns()],m=>m.reduce((h,g)=>(h[g.id]=g,h),{}),Ke(e,"debugColumns","getAllFlatColumnsById")),getAllLeafColumns:ze(()=>[i.getAllColumns(),i._getOrderColumnsFn()],(m,h)=>{let g=m.flatMap(y=>y.getLeafColumns());return h(g)},Ke(e,"debugColumns","getAllLeafColumns")),getColumn:m=>i._getAllFlatColumnsById()[m]};Object.assign(i,d);for(let m=0;m<i._features.length;m++){let h=i._features[m];h==null||h.createTable==null||h.createTable(i)}return i}function aC(){return e=>ze(()=>[e.options.data],t=>{let r={rows:[],flatRows:[],rowsById:{}},n=function(i,a,o){a===void 0&&(a=0);let s=[];for(let l=0;l<i.length;l++){let c=Zg(e,e._getRowId(i[l],l,o),i[l],l,a,void 0,o==null?void 0:o.id);if(r.flatRows.push(c),r.rowsById[c.id]=c,s.push(c),e.options.getSubRows){var u;c.originalSubRows=e.options.getSubRows(i[l],l),(u=c.originalSubRows)!=null&&u.length&&(c.subRows=n(c.originalSubRows,a+1,c))}}return s};return r.rows=n(t),r},Ke(e.options,"debugTable","getRowModel",()=>e._autoResetPageIndex()))}function yH(e,t,r){return r.options.filterFromLeafRows?vH(e,t,r):wH(e,t,r)}function vH(e,t,r){var n;let i=[],a={},o=(n=r.options.maxLeafRowFilterDepth)!=null?n:100,s=function(u,l){l===void 0&&(l=0);let c=[];for(let m=0;m<u.length;m++){var d;let h=u[m],g=Zg(r,h.id,h.original,h.index,h.depth,void 0,h.parentId);if(g.columnFilters=h.columnFilters,(d=h.subRows)!=null&&d.length&&l<o){if(g.subRows=s(h.subRows,l+1),h=g,t(h)&&!g.subRows.length){c.push(h),a[h.id]=h,i.push(h);continue}if(t(h)||g.subRows.length){c.push(h),a[h.id]=h,i.push(h);continue}}else h=g,t(h)&&(c.push(h),a[h.id]=h,i.push(h))}return c};return{rows:s(e),flatRows:i,rowsById:a}}function wH(e,t,r){var n;let i=[],a={},o=(n=r.options.maxLeafRowFilterDepth)!=null?n:100,s=function(u,l){l===void 0&&(l=0);let c=[];for(let m=0;m<u.length;m++){let h=u[m];if(t(h)){var d;if((d=h.subRows)!=null&&d.length&&l<o){let y=Zg(r,h.id,h.original,h.index,h.depth,void 0,h.parentId);y.subRows=s(h.subRows,l+1),h=y}c.push(h),i.push(h),a[h.id]=h}}return c};return{rows:s(e),flatRows:i,rowsById:a}}function oC(){return e=>ze(()=>[e.getPreFilteredRowModel(),e.getState().columnFilters,e.getState().globalFilter],(t,r,n)=>{if(!t.rows.length||!(r!=null&&r.length)&&!n){for(let m=0;m<t.flatRows.length;m++)t.flatRows[m].columnFilters={},t.flatRows[m].columnFiltersMeta={};return t}let i=[],a=[];(r!=null?r:[]).forEach(m=>{var h;let g=e.getColumn(m.id);if(!g)return;let y=g.getFilterFn();y&&i.push({id:m.id,filterFn:y,resolvedValue:(h=y.resolveFilterValue==null?void 0:y.resolveFilterValue(m.value))!=null?h:m.value})});let o=r.map(m=>m.id),s=e.getGlobalFilterFn(),u=e.getAllLeafColumns().filter(m=>m.getCanGlobalFilter());n&&s&&u.length&&(o.push("__global__"),u.forEach(m=>{var h;a.push({id:m.id,filterFn:s,resolvedValue:(h=s.resolveFilterValue==null?void 0:s.resolveFilterValue(n))!=null?h:n})}));let l,c;for(let m=0;m<t.flatRows.length;m++){let h=t.flatRows[m];if(h.columnFilters={},i.length)for(let g=0;g<i.length;g++){l=i[g];let y=l.id;h.columnFilters[y]=l.filterFn(h,y,l.resolvedValue,v=>{h.columnFiltersMeta[y]=v})}if(a.length){for(let g=0;g<a.length;g++){c=a[g];let y=c.id;if(c.filterFn(h,y,c.resolvedValue,v=>{h.columnFiltersMeta[y]=v})){h.columnFilters.__global__=!0;break}}h.columnFilters.__global__!==!0&&(h.columnFilters.__global__=!1)}}let d=m=>{for(let h=0;h<o.length;h++)if(m.columnFilters[o[h]]===!1)return!1;return!0};return yH(t.rows,d,e)},Ke(e.options,"debugTable","getFilteredRowModel",()=>e._autoResetPageIndex()))}function sC(){return e=>ze(()=>[e.getState().sorting,e.getPreSortedRowModel()],(t,r)=>{if(!r.rows.length||!(t!=null&&t.length))return r;let n=e.getState().sorting,i=[],a=n.filter(u=>{var l;return(l=e.getColumn(u.id))==null?void 0:l.getCanSort()}),o={};a.forEach(u=>{let l=e.getColumn(u.id);l&&(o[u.id]={sortUndefined:l.columnDef.sortUndefined,invertSorting:l.columnDef.invertSorting,sortingFn:l.getSortingFn()})});let s=u=>{let l=u.map(c=>({...c}));return l.sort((c,d)=>{for(let h=0;h<a.length;h+=1){var m;let g=a[h],y=o[g.id],v=y.sortUndefined,D=(m=g==null?void 0:g.desc)!=null?m:!1,I=0;if(v){let C=c.getValue(g.id),x=d.getValue(g.id),O=C===void 0,A=x===void 0;if(O||A){if(v==="first")return O?-1:1;if(v==="last")return O?1:-1;I=O&&A?0:O?v:-v}}if(I===0&&(I=y.sortingFn(c,d,g.id)),I!==0)return D&&(I*=-1),y.invertSorting&&(I*=-1),I}return c.index-d.index}),l.forEach(c=>{var d;i.push(c),(d=c.subRows)!=null&&d.length&&(c.subRows=s(c.subRows))}),l};return{rows:s(r.rows),flatRows:i,rowsById:r.rowsById}},Ke(e.options,"debugTable","getSortedRowModel",()=>e._autoResetPageIndex()))}function ty(e,t){return e?bH(e)?xr(e,t):e:null}function bH(e){return DH(e)||typeof e=="function"||SH(e)}function DH(e){return typeof e=="function"&&(()=>{let t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function SH(e){return typeof e=="object"&&typeof e.$$typeof=="symbol"&&["react.memo","react.forward_ref"].includes(e.$$typeof.description)}function lC(e){let t={state:{},onStateChange:()=>{},renderFallbackValue:null,...e},[r]=Ne(()=>({current:iC(t)})),[n,i]=Ne(()=>r.current.initialState);return r.current.setOptions(a=>({...a,...e,state:{...n,...e.state},onStateChange:o=>{i(o),e.onStateChange==null||e.onStateChange(o)}})),r.current}var EC=Ct(ln());var fC={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u1EA4:"A",\u1EAE:"A",\u1EB2:"A",\u1EB4:"A",\u1EB6:"A",\u00C6:"AE",\u1EA6:"A",\u1EB0:"A",\u0202:"A",\u00C7:"C",\u1E08:"C",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u1EBE:"E",\u1E16:"E",\u1EC0:"E",\u1E14:"E",\u1E1C:"E",\u0206:"E",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u1E2E:"I",\u020A:"I",\u00D0:"D",\u00D1:"N",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u1ED0:"O",\u1E4C:"O",\u1E52:"O",\u020E:"O",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00DD:"Y",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u1EA5:"a",\u1EAF:"a",\u1EB3:"a",\u1EB5:"a",\u1EB7:"a",\u00E6:"ae",\u1EA7:"a",\u1EB1:"a",\u0203:"a",\u00E7:"c",\u1E09:"c",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u1EBF:"e",\u1E17:"e",\u1EC1:"e",\u1E15:"e",\u1E1D:"e",\u0207:"e",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u1E2F:"i",\u020B:"i",\u00F0:"d",\u00F1:"n",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u1ED1:"o",\u1E4D:"o",\u1E53:"o",\u020F:"o",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00FD:"y",\u00FF:"y",\u0100:"A",\u0101:"a",\u0102:"A",\u0103:"a",\u0104:"A",\u0105:"a",\u0106:"C",\u0107:"c",\u0108:"C",\u0109:"c",\u010A:"C",\u010B:"c",\u010C:"C",\u010D:"c",C\u0306:"C",c\u0306:"c",\u010E:"D",\u010F:"d",\u0110:"D",\u0111:"d",\u0112:"E",\u0113:"e",\u0114:"E",\u0115:"e",\u0116:"E",\u0117:"e",\u0118:"E",\u0119:"e",\u011A:"E",\u011B:"e",\u011C:"G",\u01F4:"G",\u011D:"g",\u01F5:"g",\u011E:"G",\u011F:"g",\u0120:"G",\u0121:"g",\u0122:"G",\u0123:"g",\u0124:"H",\u0125:"h",\u0126:"H",\u0127:"h",\u1E2A:"H",\u1E2B:"h",\u0128:"I",\u0129:"i",\u012A:"I",\u012B:"i",\u012C:"I",\u012D:"i",\u012E:"I",\u012F:"i",\u0130:"I",\u0131:"i",\u0132:"IJ",\u0133:"ij",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u1E30:"K",\u1E31:"k",K\u0306:"K",k\u0306:"k",\u0139:"L",\u013A:"l",\u013B:"L",\u013C:"l",\u013D:"L",\u013E:"l",\u013F:"L",\u0140:"l",\u0141:"l",\u0142:"l",\u1E3E:"M",\u1E3F:"m",M\u0306:"M",m\u0306:"m",\u0143:"N",\u0144:"n",\u0145:"N",\u0146:"n",\u0147:"N",\u0148:"n",\u0149:"n",N\u0306:"N",n\u0306:"n",\u014C:"O",\u014D:"o",\u014E:"O",\u014F:"o",\u0150:"O",\u0151:"o",\u0152:"OE",\u0153:"oe",P\u0306:"P",p\u0306:"p",\u0154:"R",\u0155:"r",\u0156:"R",\u0157:"r",\u0158:"R",\u0159:"r",R\u0306:"R",r\u0306:"r",\u0212:"R",\u0213:"r",\u015A:"S",\u015B:"s",\u015C:"S",\u015D:"s",\u015E:"S",\u0218:"S",\u0219:"s",\u015F:"s",\u0160:"S",\u0161:"s",\u0162:"T",\u0163:"t",\u021B:"t",\u021A:"T",\u0164:"T",\u0165:"t",\u0166:"T",\u0167:"t",T\u0306:"T",t\u0306:"t",\u0168:"U",\u0169:"u",\u016A:"U",\u016B:"u",\u016C:"U",\u016D:"u",\u016E:"U",\u016F:"u",\u0170:"U",\u0171:"u",\u0172:"U",\u0173:"u",\u0216:"U",\u0217:"u",V\u0306:"V",v\u0306:"v",\u0174:"W",\u0175:"w",\u1E82:"W",\u1E83:"w",X\u0306:"X",x\u0306:"x",\u0176:"Y",\u0177:"y",\u0178:"Y",Y\u0306:"Y",y\u0306:"y",\u0179:"Z",\u017A:"z",\u017B:"Z",\u017C:"z",\u017D:"Z",\u017E:"z",\u017F:"s",\u0192:"f",\u01A0:"O",\u01A1:"o",\u01AF:"U",\u01B0:"u",\u01CD:"A",\u01CE:"a",\u01CF:"I",\u01D0:"i",\u01D1:"O",\u01D2:"o",\u01D3:"U",\u01D4:"u",\u01D5:"U",\u01D6:"u",\u01D7:"U",\u01D8:"u",\u01D9:"U",\u01DA:"u",\u01DB:"U",\u01DC:"u",\u1EE8:"U",\u1EE9:"u",\u1E78:"U",\u1E79:"u",\u01FA:"A",\u01FB:"a",\u01FC:"AE",\u01FD:"ae",\u01FE:"O",\u01FF:"o",\u00DE:"TH",\u00FE:"th",\u1E54:"P",\u1E55:"p",\u1E64:"S",\u1E65:"s",X\u0301:"X",x\u0301:"x",\u0403:"\u0413",\u0453:"\u0433",\u040C:"\u041A",\u045C:"\u043A",A\u030B:"A",a\u030B:"a",E\u030B:"E",e\u030B:"e",I\u030B:"I",i\u030B:"i",\u01F8:"N",\u01F9:"n",\u1ED2:"O",\u1ED3:"o",\u1E50:"O",\u1E51:"o",\u1EEA:"U",\u1EEB:"u",\u1E80:"W",\u1E81:"w",\u1EF2:"Y",\u1EF3:"y",\u0200:"A",\u0201:"a",\u0204:"E",\u0205:"e",\u0208:"I",\u0209:"i",\u020C:"O",\u020D:"o",\u0210:"R",\u0211:"r",\u0214:"U",\u0215:"u",B\u030C:"B",b\u030C:"b",\u010C\u0323:"C",\u010D\u0323:"c",\u00CA\u030C:"E",\u00EA\u030C:"e",F\u030C:"F",f\u030C:"f",\u01E6:"G",\u01E7:"g",\u021E:"H",\u021F:"h",J\u030C:"J",\u01F0:"j",\u01E8:"K",\u01E9:"k",M\u030C:"M",m\u030C:"m",P\u030C:"P",p\u030C:"p",Q\u030C:"Q",q\u030C:"q",\u0158\u0329:"R",\u0159\u0329:"r",\u1E66:"S",\u1E67:"s",V\u030C:"V",v\u030C:"v",W\u030C:"W",w\u030C:"w",X\u030C:"X",x\u030C:"x",Y\u030C:"Y",y\u030C:"y",A\u0327:"A",a\u0327:"a",B\u0327:"B",b\u0327:"b",\u1E10:"D",\u1E11:"d",\u0228:"E",\u0229:"e",\u0190\u0327:"E",\u025B\u0327:"e",\u1E28:"H",\u1E29:"h",I\u0327:"I",i\u0327:"i",\u0197\u0327:"I",\u0268\u0327:"i",M\u0327:"M",m\u0327:"m",O\u0327:"O",o\u0327:"o",Q\u0327:"Q",q\u0327:"q",U\u0327:"U",u\u0327:"u",X\u0327:"X",x\u0327:"x",Z\u0327:"Z",z\u0327:"z"},EH=Object.keys(fC).join("|"),kH=new RegExp(EH,"g");function xH(e){return e.replace(kH,t=>fC[t])}var rr={CASE_SENSITIVE_EQUAL:7,EQUAL:6,STARTS_WITH:5,WORD_STARTS_WITH:4,CONTAINS:3,ACRONYM:2,MATCHES:1,NO_MATCH:0};function hC(e,t,r){var n;if(r=r||{},r.threshold=(n=r.threshold)!=null?n:rr.MATCHES,!r.accessors){let o=uC(e,t,r);return{rankedValue:e,rank:o,accessorIndex:-1,accessorThreshold:r.threshold,passed:o>=r.threshold}}let i=TH(e,r.accessors),a={rankedValue:e,rank:rr.NO_MATCH,accessorIndex:-1,accessorThreshold:r.threshold,passed:!1};for(let o=0;o<i.length;o++){let s=i[o],u=uC(s.itemValue,t,r),{minRanking:l,maxRanking:c,threshold:d=r.threshold}=s.attributes;u<l&&u>=rr.MATCHES?u=l:u>c&&(u=c),u=Math.min(u,c),u>=d&&u>a.rank&&(a.rank=u,a.passed=!0,a.accessorIndex=o,a.accessorThreshold=d,a.rankedValue=s.itemValue)}return a}function uC(e,t,r){return e=cC(e,r),t=cC(t,r),t.length>e.length?rr.NO_MATCH:e===t?rr.CASE_SENSITIVE_EQUAL:(e=e.toLowerCase(),t=t.toLowerCase(),e===t?rr.EQUAL:e.startsWith(t)?rr.STARTS_WITH:e.includes(` ${t}`)?rr.WORD_STARTS_WITH:e.includes(t)?rr.CONTAINS:t.length===1?rr.NO_MATCH:CH(e).includes(t)?rr.ACRONYM:_H(e,t))}function CH(e){let t="";return e.split(" ").forEach(n=>{n.split("-").forEach(a=>{t+=a.substr(0,1)})}),t}function _H(e,t){let r=0,n=0;function i(u,l,c){for(let d=c,m=l.length;d<m;d++)if(l[d]===u)return r+=1,d+1;return-1}function a(u){let l=1/u,c=r/t.length;return rr.MATCHES+c*l}let o=i(t[0],e,0);if(o<0)return rr.NO_MATCH;n=o;for(let u=1,l=t.length;u<l;u++){let c=t[u];if(n=i(c,e,n),!(n>-1))return rr.NO_MATCH}let s=n-o;return a(s)}function mC(e,t){return e.rank===t.rank?0:e.rank>t.rank?-1:1}function cC(e,t){let{keepDiacritics:r}=t;return e=`${e}`,r||(e=xH(e)),e}function MH(e,t){let r=t;typeof t=="object"&&(r=t.accessor);let n=r(e);return n==null?[]:Array.isArray(n)?n:[String(n)]}function TH(e,t){let r=[];for(let n=0,i=t.length;n<i;n++){let a=t[n],o=FH(a),s=MH(e,a);for(let u=0,l=s.length;u<l;u++)r.push({itemValue:s[u],attributes:o})}return r}var dC={maxRanking:1/0,minRanking:-1/0};function FH(e){return typeof e=="function"?dC:{...dC,...e}}var yC=require("obsidian");var ny=Ct(gC());var vC=zt(function({item:t,hideDateDisplay:r,shouldShowRelativeDate:n}){let{stateManager:i,filePath:a}=Ee(tt),{onEditDate:o,onEditTime:s}=ug(t.item,t.path),u=fa(i);return E(ct,{children:[n?E(rd,{item:t.item,stateManager:i}):null,r?null:E(id,{item:t.item,stateManager:i,filePath:a!=null?a:"",onEditDate:o,onEditTime:s,getDateColor:u})]})}),wC=zt(function({item:t,lane:r,path:n}){let{stateManager:i,boardModifiers:a}=Ee(tt),o=Ee(zn),[s,u]=Ne(null),l=!!r.data.shouldMarkItemsComplete,c=gd({boardModifiers:a,item:t,setEditState:u,stateManager:i,path:n}),d=Ye(h=>{kn(s)||h.targetNode.instanceOf(HTMLAnchorElement)&&(h.targetNode.hasClass("internal-link")||h.targetNode.hasClass("external-link"))||c(h)},[c,s]),m=Ye(h=>{u({x:h.clientX,y:h.clientY})},[]);return E(Uu.Provider,{value:n,children:E("div",{onContextMenu:d,onDblClick:m,className:$("item-content-wrapper"),children:E("div",{className:$("item-title-wrapper"),children:[E(md,{boardModifiers:a,item:t,path:n,shouldMarkItemsComplete:l,stateManager:i}),E(ad,{editState:s,item:t,setEditState:u,showMetadata:!1,searchQuery:o==null?void 0:o.query,isStatic:!1})]})})})},(e,t)=>e.lane.data.shouldMarkItemsComplete===t.lane.data.shouldMarkItemsComplete&&(0,ny.default)(e.item,t.item)&&(0,ny.default)(e.path,t.path)),bC=zt(function({lane:t,path:r}){let{stateManager:n}=Ee(tt),i=Ee(zn);return E("div",{className:$("cell-flex-wrapper"),children:[E(Sa,{searchQuery:i==null?void 0:i.query,markdownString:t.data.title}),E("div",{onClick:a=>{let o=new yC.Menu,s=n.state.children;for(let u=0,l=s.length;u<l;u++){let c=s[u];o.addItem(d=>d.setChecked(t===c).setTitle(c.data.title).onClick(()=>{t!==c&&n.setState(m=>{let h=m.children[u];return Ri(m,r,[u,h.children.length])})}))}o.showAtMouseEvent(a)},className:Ge(["clickable-icon",$("icon-wrapper"),$("lane-menu")]),children:E(Ut,{name:"lucide-square-kanban"})})]})});var xs=qx(),DC=(e,t,r,n)=>{let i=e.getValue(t);if(i===null)return!1;let a=e.original.stateManager,o=i.value?In(i.value,a):In(i,a),s=hC(o,r,{threshold:rr.CONTAINS});return n({itemRank:s}),s.passed},Cs=(e,t,r)=>{var n,i;return!e.columnFiltersMeta[r]&&!t.columnFiltersMeta[r]?null:e.columnFiltersMeta[r]?t.columnFiltersMeta[r]?mC((n=e.columnFiltersMeta[r])==null?void 0:n.itemRank,(i=t.columnFiltersMeta[r])==null?void 0:i.itemRank):1:-1};function PH(e,t){return Re(()=>{var c;let r=[],n=new Set,i=new Set,a=new Set,o=new Map,s=(e==null?void 0:e.children)||[],u=t.getSetting("metadata-keys"),l=t.getSetting("inline-metadata-position")!=="body";for(let d=0,m=s.length;d<m;d++){let h=s[d];for(let g=0,y=h.children.length;g<y;g++){let v=h.children[g],D=v.data.metadata,I=D.fileMetadata||{},C=D.fileMetadataOrder||[],x=D.inlineMetadata;!n.has("date")&&D.date&&n.add("date"),!n.has("tags")&&((c=D.tags)!=null&&c.length)&&n.add("tags");for(let O of C)!i.has(O)&&I[O]&&(i.add(O),o.set(O,I[O].label||O));x&&l&&x.forEach(O=>{if(!a.has(O.key)&&(a.add(O.key),!o.has(O.key)))if(yi.has(O.key))o.set(O.key,No(O.key));else{let A=u.find(P=>P.metadataKey===O.key);o.set(O.key,(A==null?void 0:A.label)||O.key)}}),r.push({item:v,lane:h,path:[d,g],stateManager:t})}}return{items:r,metadataLabels:o,metadata:Array.from(n),fileMetadata:Array.from(i),inlineMetadata:Array.from(a)}},[e])}var NH=e=>[xs.accessor(t=>t.item.data.title,{id:"card",cell:t=>{let{lane:r,item:n,path:i}=t.row.original;return E(wC,{item:n,lane:r,path:i})},header:()=>R("Card"),sortingFn:(t,r,n)=>{let i=Cs(t,r,n);return i===null?fr(t.getValue(n),r.getValue(n)):i},size:e.card||272}),xs.accessor(t=>t.lane.data.title,{id:"lane",cell:t=>{let{lane:r,path:n}=t.row.original;return E(bC,{lane:r,path:n})},header:()=>R("List"),sortingFn:(t,r,n)=>{let i=Cs(t,r,n);return i===null?fr(t.getValue(n),r.getValue(n)):i},size:e.lane})];function SC(e,t){let r=Ee(zn),[n,i]=Ne([]),a=t.useSetting("show-relative-date"),o=t.useSetting("move-dates"),s=t.useSetting("move-tags"),u=t.useSetting("inline-metadata-position")!=="body",l=t.useSetting("move-task-metadata"),c=t.useSetting("table-sizing")||{},d=Fe(!1),m=Ye(A=>{i(P=>{let B=A(P);return B.length&&(d.current=B[0].desc),B})},[i]),h=Re(()=>({sorting:n,globalFilter:r==null?void 0:r.query}),[n,r==null?void 0:r.query]),{items:g,metadata:y,fileMetadata:v,inlineMetadata:D,metadataLabels:I}=PH(e,t),C=Re(()=>{let A=[...NH(c)];for(let P of y)switch(P){case"date":(a||o)&&A.push(xs.accessor(B=>{var G;return((G=B.item.data.metadata)==null?void 0:G.date)||null},{header:()=>R("Date"),id:"date",size:c.date,cell:B=>B.getValue()?E(vC,{item:B.row.original,shouldShowRelativeDate:a,hideDateDisplay:!o}):null,sortUndefined:!1,sortingFn:(B,G,J)=>{let Q=Cs(B,G,J);if(Q===null){let oe=B.getValue(J),te=G.getValue(J);return!oe&&!te?0:oe?te?oe.valueOf()-te.valueOf():d.current?1:-1:d.current?-1:1}return Q},sortDescFirst:!1}));break;case"tags":s&&A.push(xs.accessor(B=>{var G;return((G=B.item.data.metadata)==null?void 0:G.tags)||null},{header:()=>R("Tags"),id:"card-tags",size:c["card-tags"],cell:B=>{let G=B.table.getState().globalFilter,J=B.getValue();return J!=null&&J.length?E(ps,{tags:J,searchQuery:G}):null},sortUndefined:!1,sortingFn:(B,G,J)=>{var oe,te;let Q=Cs(B,G,J);if(Q===null){let re=B.getValue(J),ne=G.getValue(J);if(!(re!=null&&re.length)&&!(ne!=null&&ne.length))return 0;if(!(re!=null&&re.length))return d.current?-1:1;if(!(ne!=null&&ne.length))return d.current?1:-1;let be=t.getSetting("tag-sort"),pe=(oe=be==null?void 0:be.findIndex(Ce=>re.includes(Ce.tag)))!=null?oe:-1,De=(te=be==null?void 0:be.findIndex(Ce=>ne.includes(Ce.tag)))!=null?te:-1;return pe>-1&&De<0?-1:De>-1&&pe<0?1:pe>-1&&De>-1?pe-De:fr(re.join(""),ne.join(""))}return Q},sortDescFirst:!1}));break}return A},[a,o,s,...y]),x=Re(()=>{var P;let A=[...C];for(let B of D)A.push(xs.accessor(G=>{var Q;let J=(Q=G.item.data.metadata.inlineMetadata)==null?void 0:Q.find(oe=>oe.key===B);return J||null},{id:B,header:(P=I.get(B))!=null?P:B,cell:G=>{var be,pe,De;let J=G.getValue();if(!J)return null;let Q=yi.has(J.key);if(!l&&Q||!u&&!Q)return null;let oe=J.wrapping==="emoji-shorthand",te=(De=(pe=(be=il())==null?void 0:be.api)==null?void 0:pe.parse(J.value))!=null?De:J.value,re=oe&&J.key==="priority",ne=!!(te!=null&&te.ts);return E("span",{className:Ge([$("item-task-inline-metadata-item"),J.key.replace(/[^a-z0-9]/g,"-"),{"is-task-metadata":Q,"is-emoji":oe,"is-date":ne}]),children:!re&&E("span",{className:$("item-task-inline-metadata-item-value"),children:E(hs,{searchQuery:r==null?void 0:r.query,data:{value:te,label:"",metadataKey:J.key,shouldHideLabel:!1,containsMarkdown:!1}})})})},sortDescFirst:!1,sortingFn:(G,J,Q)=>{let oe=G.getValue(Q),te=J.getValue(Q);if(oe===null&&te===null)return 0;if(oe===null)return d.current?-1:1;if(te===null)return d.current?1:-1;let re=Cs(G,J,Q);return re===null?fr(In(oe.value,t),In(te.value,t)):re}}));return A},[C,...D,...I.values()]),O=Re(()=>{var P;let A=[...x];for(let B of v)A.push(xs.accessor(G=>{var Q;let J=(Q=G.item.data.metadata)==null?void 0:Q.fileMetadata;return J&&J[B]?J[B]:null},{id:B,header:(P=I.get(B))!=null?P:B,cell:G=>{let J=G.getValue();if(!J)return null;let Q=G.table.getState().globalFilter;return B==="tags"?E(ps,{searchQuery:Q,tags:J.value,alwaysShow:!0}):E(hs,{data:J,searchQuery:Q})},sortDescFirst:!1,sortingFn:(G,J,Q)=>{var ne,be;let oe=G.getValue(Q),te=J.getValue(Q);if(!(oe!=null&&oe.value)&&!(te!=null&&te.value))return 0;if(!(oe!=null&&oe.value))return d.current?-1:1;if(!(te!=null&&te.value))return d.current?1:-1;let re=Cs(G,J,Q);if(re===null){if(Q==="tags"){let pe=t.getSetting("tag-sort"),De=(ne=pe==null?void 0:pe.findIndex(U=>oe.value.includes(U.tag)))!=null?ne:-1,Ce=(be=pe==null?void 0:pe.findIndex(U=>te.value.includes(U.tag)))!=null?be:-1;if(De>-1&&Ce<0)return-1;if(Ce>-1&&De<0)return 1;if(De>-1&&Ce>-1)return De-Ce}return fr(In(oe.value,t),In(te.value,t))}return re}}));return A},[x,...v,...I.values()]);return{data:g,columns:O,state:h,setSorting:m}}function RH(){let e=Fe(),t=Fe(),r=Fe(new WeakMap),n=Fe([]);Ae(()=>()=>{var o;(o=e.current)==null||o.disconnect(),r.current=null,n.current.length=0},[]);let i=o=>{if(!o||t.current===o)return;e.current&&e.current.disconnect();let s=getComputedStyle(o);e.current=new IntersectionObserver(u=>{u.forEach(l=>{if(!r.current.has(l.target))return;r.current.get(l.target)(l)})},{root:o,threshold:.01,rootMargin:`${s.paddingTop} 0px ${s.paddingBottom} 0px`}),t.current=o,n.current.forEach(u=>e.current.observe(u)),n.current.length=0},a=Re(()=>({registerHandler:(o,s)=>{if(o){if(r.current.set(o,s),!e.current){n.current.push(o);return}e.current.observe(o)}},unregisterHandler:o=>{var s,u,l;o&&((s=r.current)==null||s.delete(o),(u=n.current)!=null&&u.length&&(n.current=n.current.filter(c=>c!==o)),(l=e.current)==null||l.unobserve(o))}}),[]);return{bindObserver:i,context:a}}function kC({boardData:e,stateManager:t}){let{bindObserver:r,context:n}=RH(),{data:i,columns:a,state:o,setSorting:s}=SC(e,t),u=lC({data:i,columns:a,state:o,globalFilterFn:DC,getColumnCanGlobalFilter:()=>!0,enableColumnResizing:!0,columnResizeMode:"onChange",columnResizeDirection:t.app.vault.getConfig("rightToLeft")?"rtl":"ltr",onSortingChange:s,getCoreRowModel:aC(),getSortedRowModel:sC(),getFilteredRowModel:oC()}),l=u.getState(),c=Fe(-1);Ae(()=>{if(c.current===-1){c.current=0;return}activeWindow.clearTimeout(c.current),c.current=activeWindow.setTimeout(()=>{t.getAView()&&t.setState(h=>(0,EC.default)(h,{data:{settings:{"table-sizing":{$set:l.columnSizing}}}}))},500)},[l.columnSizing]);let d=u.getCenterTotalSize(),m=Re(()=>({width:d}),[d]);return E("div",{className:`markdown-rendered ${$("table-wrapper")}`,ref:r,children:E(Lc.Provider,{value:n,children:E("table",{style:m,children:[E("thead",{children:u.getHeaderGroups().map(h=>E("tr",{children:h.headers.map(g=>{let y=g.column.getIsSorted();return E("th",{className:"mod-has-icon",children:E("div",{className:$("table-cell-wrapper"),style:{width:g.getSize()},children:[g.isPlaceholder?null:E("div",{className:$("table-header"),onClick:g.column.getToggleSortingHandler(),children:[E("div",{children:ty(g.column.columnDef.header,g.getContext())}),E("div",{className:$("table-header-sort"),children:y==="asc"?E(Ut,{name:"lucide-chevron-up"}):y==="desc"?E(Ut,{name:"lucide-chevron-down"}):E(Ut,{name:"lucide-chevrons-up-down"})})]}),E("div",{onDoubleClick:()=>g.column.resetSize(),onMouseDown:g.getResizeHandler(),onTouchStart:g.getResizeHandler(),className:`resizer ${u.options.columnResizeDirection} ${g.column.getIsResizing()?"isResizing":""}`})]})},g.id)})},h.id))}),E("tbody",{children:u.getRowModel().rows.map(h=>E("tr",{children:h.getVisibleCells().map(g=>E("td",{className:Ge({"mod-has-icon":g.column.id==="lane","mod-search-match":h.columnFiltersMeta[g.column.id]?h.columnFiltersMeta[g.column.id].itemRank.passed:!1}),children:E("div",{className:$("table-cell-wrapper"),style:{width:g.column.getSize()},children:ty(g.column.columnDef.cell,g.getContext())})},g.id))},h.id))})]})})})}var HH=[ft.Item,ft.Lane],BH=[ft.Lane];function VH(e){let t=[];return Array.isArray(e.cssclass)?t.push(...e.cssclass):typeof e.cssclass=="string"&&t.push(e.cssclass),Array.isArray(e.cssclasses)?t.push(...e.cssclasses):typeof e.cssclasses=="string"&&t.push(e.cssclasses),t}var CC=({view:e,stateManager:t})=>{let r=t.useState(),n=lx(),i=Fe(null),a=Fe(null),[o,s]=Ne(""),[u,l]=Ne(""),[c,d]=Ne(!1),[m,h]=Ne((r==null?void 0:r.children.length)===0),g=t.file.path,y=t.useSetting("max-archive-size"),v=t.useSetting("date-colors"),D=t.useSetting("tag-colors"),I=e.useViewState(_t),C=Ye(()=>{(r==null?void 0:r.children.length)>0&&h(!1)},[r==null?void 0:r.children.length]);Ae(()=>{(r==null?void 0:r.children.length)===0&&!t.hasError()&&h(!0)},[r==null?void 0:r.children.length,t]);let x=Ye(()=>{var J;(J=i.current)==null||J.win.setTimeout(()=>{var oe;let Q=(oe=i.current)==null?void 0:oe.getElementsByClassName($("board"));Q!=null&&Q.length&&vd([Q[0].scrollWidth,0],{elementToScroll:Q[0],speed:300,minDuration:150,easing:te=>te===1?1:1-Math.pow(2,-10*te)})})},[]);Ae(()=>{let J=oe=>{oe.commandId==="editor:open-search"&&(typeof oe.data=="string"?(d(!0),s(oe.data),l(oe.data)):d(te=>!te))},Q=()=>{h(!0)};return e.emitter.on("hotkey",J),e.emitter.on("showLaneForm",Q),()=>{e.emitter.off("hotkey",J),e.emitter.off("showLaneForm",Q)}},[e]),Ae(()=>{var J;c&&((J=a.current)==null||J.focus())},[c]),Ae(()=>{let J=e.getWindow(),Q=o.trim(),oe;return Q?oe=J.setTimeout(()=>{l(Q)},250):l(""),()=>{J.clearTimeout(oe)}},[o,e]),Ae(()=>{y===void 0||y===-1||typeof y=="number"&&(r==null?void 0:r.data.archive.length)>y&&t.setState(J=>(0,xC.default)(J,{data:{archive:{$set:J.data.archive.slice(y*-1)}}}))},[r==null?void 0:r.data.archive.length,y]);let O=Re(()=>Td(e,t),[t,e]),A=Re(()=>({view:e,stateManager:t,boardModifiers:O,filePath:g}),[e,t,O,g,v,D]),P=Ik(t);if(r==null)return E("div",{className:$("loading"),children:E("div",{className:"sk-pulse"})});if(r.data.errors.length>0)return E("div",{children:[E("div",{children:"Error:"}),r.data.errors.map((J,Q)=>E("div",{children:[E("div",{children:J.description}),E("pre",{children:J.stack})]},Q))]});let B=I==="list"?"vertical":"horizontal",G=wb(r,u,s,l,d);return E(ks,{id:e.id,children:E(tt.Provider,{value:A,children:E(zn.Provider,{value:G,children:E("div",{ref:i,className:Ge([Eh,{"something-is-dragging":n},...VH(r.data.frontmatter)]),...P,children:[(m||r.children.length===0)&&E(zx,{onNewLane:x,closeLaneForm:C}),c&&E("div",{className:$("search-wrapper"),children:[E("input",{ref:a,value:o,onChange:J=>{s(J.target.value)},onKeyDown:J=>{J.key==="Escape"&&(s(""),l(""),J.target.blur(),d(!1))},type:"text",className:$("filter-input"),placeholder:R("Search...")}),E("a",{className:`${$("search-cancel-button")} clickable-icon`,onClick:()=>{s(""),l(""),d(!1)},"aria-label":R("Cancel"),children:E(Ut,{name:"lucide-x"})})]}),I==="table"?E(kC,{boardData:r,stateManager:t}):E(Sd,{id:e.id,className:Ge([$("board"),{[$("horizontal")]:I!=="list",[$("vertical")]:I==="list","is-adding-lane":m}]),triggerTypes:HH,children:E("div",{children:E(Ia,{axis:B,children:[E(ox,{lanes:r.children,collapseDir:B}),E(Fa,{accepts:BH,className:$("lane-placeholder"),index:r.children.length})]})})})]})})})})};var qr="kanban",ho="lucide-trello",pn=class extends ea.TextFileView{constructor(r,n){super(r);this.actionButtons={};this.viewSettings={};this.initHeaderButtons=(0,ea.debounce)(()=>this._initHeaderButtons(),10,!0);this._initHeaderButtons=async()=>{if(ea.Platform.isPhone)return;let r=this.plugin.getStateManager(this.file);if(r)if(r.getSetting("show-board-settings")&&!this.actionButtons["show-board-settings"]?this.actionButtons["show-board-settings"]=this.addAction("lucide-settings",R("Open board settings"),()=>{this.getBoardSettings()}):!r.getSetting("show-board-settings")&&this.actionButtons["show-board-settings"]&&(this.actionButtons["show-board-settings"].remove(),delete this.actionButtons["show-board-settings"]),r.getSetting("show-set-view")&&!this.actionButtons["show-set-view"]?this.actionButtons["show-set-view"]=this.addAction("lucide-view",R("Board view"),n=>{let i=this.viewSettings[_t]||r.getSetting(_t);new ea.Menu().addItem(a=>a.setTitle(R("View as board")).setIcon("lucide-trello").setChecked(i==="basic"||i==="board").onClick(()=>this.setView("board"))).addItem(a=>a.setTitle(R("View as table")).setIcon("lucide-table").setChecked(i==="table").onClick(()=>this.setView("table"))).addItem(a=>a.setTitle(R("View as list")).setIcon("lucide-server").setChecked(i==="list").onClick(()=>this.setView("list"))).showAtMouseEvent(n)}):!r.getSetting("show-set-view")&&this.actionButtons["show-set-view"]&&(this.actionButtons["show-set-view"].remove(),delete this.actionButtons["show-set-view"]),r.getSetting("show-search")&&!this.actionButtons["show-search"]?this.actionButtons["show-search"]=this.addAction("lucide-search",R("Search..."),()=>{this.emitter.emit("hotkey",{commandId:"editor:open-search"})}):!r.getSetting("show-search")&&this.actionButtons["show-search"]&&(this.actionButtons["show-search"].remove(),delete this.actionButtons["show-search"]),r.getSetting("show-view-as-markdown")&&!this.actionButtons["show-view-as-markdown"]?this.actionButtons["show-view-as-markdown"]=this.addAction("lucide-file-text",R("Open as markdown"),()=>{this.plugin.kanbanFileModes[this.leaf.id||this.file.path]="markdown",this.plugin.setMarkdownView(this.leaf)}):!r.getSetting("show-view-as-markdown")&&this.actionButtons["show-view-as-markdown"]&&(this.actionButtons["show-view-as-markdown"].remove(),delete this.actionButtons["show-view-as-markdown"]),r.getSetting("show-archive-all")&&!this.actionButtons["show-archive-all"]?this.actionButtons["show-archive-all"]=this.addAction("lucide-archive",R("Archive completed cards"),()=>{this.plugin.stateManagers.get(this.file).archiveCompletedCards()}):!r.getSetting("show-archive-all")&&this.actionButtons["show-archive-all"]&&(this.actionButtons["show-archive-all"].remove(),delete this.actionButtons["show-archive-all"]),r.getSetting("show-add-list")&&!this.actionButtons["show-add-list"]){let n=this.addAction("lucide-plus-circle",R("Add a list"),()=>{this.emitter.emit("showLaneForm",void 0)});n.addClass($("ignore-click-outside")),this.actionButtons["show-add-list"]=n}else!r.getSetting("show-add-list")&&this.actionButtons["show-add-list"]&&(this.actionButtons["show-add-list"].remove(),delete this.actionButtons["show-add-list"])};this.plugin=n,this.emitter=new Bo,this.previewCache=new Map,this.previewQueue=new Ac(()=>this.emitter.emit("queueEmpty")),this.emitter.on("hotkey",({commandId:i})=>{switch(i){case"daily-notes:goto-prev":{Sk(this.app,this.file);break}case"daily-notes:goto-next":{Dk(this.app,this.file);break}}}),VS(this)}get isPrimary(){var r;return((r=this.plugin.getStateManager(this.file))==null?void 0:r.getAView())===this}get id(){var r;return`${this.leaf.id}:::${(r=this.file)==null?void 0:r.path}`}get isShiftPressed(){return this.plugin.isShiftPressed}async prerender(r){r.children.forEach(n=>{n.children.forEach(i=>{this.previewCache.has(i.id)||this.previewQueue.add(async()=>{let a=this.addChild(new Ll(this,i.data.title));this.previewCache.set(i.id,a),await a.renderCapability.promise})})}),this.previewQueue.isRunning&&await new Promise(n=>{this.emitter.once("queueEmpty",n)}),this.initHeaderButtons()}validatePreviewCache(r){let n=new Set;r.children.forEach(i=>{n.add(i.id),i.children.forEach(a=>{n.add(a.id)})});for(let i of this.previewCache.keys())n.has(i)||(this.removeChild(this.previewCache.get(i)),this.previewCache.delete(i))}setView(r){this.setViewState(_t,r),this.app.fileManager.processFrontMatter(this.file,n=>{n[_t]=r})}setBoard(r,n=!0){this.plugin.stateManagers.get(this.file).setState(r,n)}getBoard(){return this.plugin.stateManagers.get(this.file).state}getViewType(){return qr}getIcon(){return ho}getDisplayText(){var r;return((r=this.file)==null?void 0:r.basename)||"Kanban"}getWindow(){return Dn(this.containerEl)}async loadFile(r){return this.plugin.removeView(this),super.loadFile(r)}async onLoadFile(r){try{return await super.onLoadFile(r)}catch(n){let i=this.plugin.stateManagers.get(this.file);throw i==null||i.setError(n),n}}onload(){super.onload(),ea.Platform.isMobile&&this.containerEl.setCssProps({"--mobile-navbar-height":this.app.mobileNavbar.containerEl.clientHeight+"px"}),this.register(this.containerEl.onWindowMigrated(()=>{this.plugin.removeView(this),this.plugin.addView(this,this.data,this.isPrimary)}))}onunload(){super.onunload(),this.previewQueue.clear(),this.previewCache.clear(),this.emitter.emit("queueEmpty"),this.plugin.removeView(this),this.emitter.removeAllListeners(),this.activeEditor=null,this.actionButtons={}}handleRename(r,n){this.file.path===r&&this.plugin.handleViewFileRename(this,n)}requestSaveToDisk(r){this.data!==r&&this.isPrimary?(this.data=r,this.requestSave()):this.data=r}getViewData(){return this.data}setViewData(r,n){if(!Ek(r)){this.plugin.kanbanFileModes[this.leaf.id||this.file.path]="markdown",this.plugin.removeView(this),this.plugin.setMarkdownView(this.leaf,!1);return}n&&(this.activeEditor=null,this.previewQueue.clear(),this.previewCache.clear(),this.emitter.emit("queueEmpty"),Object.values(this.actionButtons).forEach(i=>i.remove()),this.actionButtons={}),this.plugin.addView(this,r,!n&&this.isPrimary)}async setState(r,n){this.viewSettings={...r.kanbanViewState},await super.setState(r,n)}getState(){let r=super.getState();return r.kanbanViewState={...this.viewSettings},r}setViewState(r,n,i){i?this.plugin.getStateManager(this.file).viewSet.forEach(o=>{o.viewSettings[r]=i(o.viewSettings[r])}):n&&(this.viewSettings[r]=n),this.app.workspace.requestSaveLayout()}populateViewState(r){var n,i,a,o;(i=(n=this.viewSettings)["kanban-plugin"])!=null||(n["kanban-plugin"]=r["kanban-plugin"]||"board"),(o=(a=this.viewSettings)["list-collapse"])!=null||(a["list-collapse"]=r["list-collapse"]||[])}getViewState(r){var a;let i=this.plugin.stateManagers.get(this.file).getSetting(r);return(a=this.viewSettings[r])!=null?a:i}useViewState(r){var a;let i=this.plugin.stateManagers.get(this.file).useSetting(r);return(a=this.viewSettings[r])!=null?a:i}getPortal(){let r=this.plugin.stateManagers.get(this.file);return E(CC,{stateManager:r,view:this})}getBoardSettings(){let r=this.plugin.stateManagers.get(this.file),n=r.state;new $d(this,{onSettingsChange:i=>{let a=(0,_C.default)(n,{data:{settings:{$set:i}}});r.setState(a)}},n.data.settings).open()}onPaneMenu(r,n,i=!0){if(n!=="more-options"){super.onPaneMenu(r,n);return}r.addItem(a=>{a.setTitle(R("Open as markdown")).setIcon("lucide-file-text").setSection("pane").onClick(()=>{this.plugin.kanbanFileModes[this.leaf.id||this.file.path]="markdown",this.plugin.setMarkdownView(this.leaf)})}).addItem(a=>{a.setTitle(R("Open board settings")).setIcon("lucide-settings").setSection("pane").onClick(()=>{this.getBoardSettings()})}).addItem(a=>{a.setTitle(R("Archive completed cards")).setIcon("lucide-archive").setSection("pane").onClick(()=>{this.plugin.stateManagers.get(this.file).archiveCompletedCards()})}),i&&super.onPaneMenu(r,n)}clear(){}};var Ps=Ct(ln()),K_=require("obsidian");var Y_=require("obsidian"),z_=Ct(Ic());var FC=Ct(Wm()),IC=Ct(Ic()),qd="remove",Gd="replace",AC="add";function mo(e){if(!e)return!1;if(Ni(e)||Array.isArray(e))return!0;let t=(0,IC.getAPI)();return!!(!FC.default.isMoment(e)&&(t!=null&&t.value.isObject(e)))}function OC(e,t,r=()=>!1,n=i=>String(i)){if(!mo(e)||!mo(t))throw new Error("both arguments must be objects or arrays");let i=LC(e,t,[],[],{remove:[],replace:[],add:[]},r,n);return i.remove.reverse().concat(i.replace).concat(i.add)}function LC(e,t,r,n,i,a,o){if(!mo(e)||!mo(t))return i;let s=Object.keys(e),u=Object.keys(t),l=u.length,c=e.length-t.length,d;if(UH(e,t)){for(let m of s){let h=Array.isArray(e)?Number(m):m;if(!(h in t)){if(d=n.concat(h),a(d))continue;i.remove.push({op:qd,path:d})}}for(let m of u){let h=Array.isArray(t)?Number(m):m;MC(h,e,t,r.concat(h),r.concat(h),i,a,o)}}else{for(let h=0;h<c;h++)d=n.concat(h),!a(d)&&i.remove.push({op:qd,path:d});let m=e.slice(c);for(let h=0;h<l;h++)MC(h,m,t,r.concat(h),r.concat(h+c),i,a,o)}return i}function MC(e,t,r,n,i,a,o,s){let u=t[e],l=r[e];o(n,l)||(!(e in t)&&e in r?a.add.push({op:AC,path:n,value:l}):u!==l&&(Object(u)!==u||Object(l)!==l||$H(u,l)?a.replace.push({op:Gd,path:n,value:l}):!mo(u)&&!mo(l)&&s(u)!==s(l)?a.replace.push({op:Gd,path:n,value:l}):LC(t[e],r[e],n,i,a,o,s)))}function $H(e,t){return Object.prototype.toString.call(e)!==Object.prototype.toString.call(t)}function UH(e,t){let r=e.length-t.length;if(Array.isArray(e)&&Array.isArray(t)&&r>0){let n=0,i=0;for(let a=0;a<t.length&&String(e[a])===String(t[a]);a++)n++;for(let a=t.length;a>0&&String(e[a+r])===String(t[a]);a--)i++;return n>=i}return!0}function PC(e,t){if(!mo(e))throw new Error("base object must be an object or an array");if(!Array.isArray(t))throw new Error("diff must be an array");Array.isArray(e)?e=e.slice():e={...e};for(let r of t){let n=r.op,a=r.path.slice(),o=a.pop(),s=e;if(TC(o),o==null)return!1;let u;for(;(u=a.shift())!==null&&u!==void 0;)TC(u),u in s?Array.isArray(s[u])?s=s[u]=s[u].slice():Ni(s[u])?s=s[u]={...s[u]}:s=s[u]:s=s[u]={};if(n===qd||n===Gd){let l=r.path;if(!Object.prototype.hasOwnProperty.call(s,o))throw new Error(["expected to find property",l,"in object",e].join(" "))}n===qd&&typeof o=="number"&&(Array.isArray(s)?s.splice(o,1):delete s[o]),(n===Gd||n===AC)&&(s[o]=r.value)}return e}function TC(e){if(e==="__proto__"||e==="constructor"||e==="prototype")throw new Error("setting of prototype values not supported")}var pf=Ct(ln());var WH={};function _s(e,t){let r=t||WH,n=typeof r.includeImageAlt=="boolean"?r.includeImageAlt:!0,i=typeof r.includeHtml=="boolean"?r.includeHtml:!0;return RC(e,n,i)}function RC(e,t,r){if(YH(e)){if("value"in e)return e.type==="html"&&!r?"":e.value;if(t&&"alt"in e&&e.alt)return e.alt;if("children"in e)return NC(e.children,t,r)}return Array.isArray(e)?NC(e,t,r):""}function NC(e,t,r){let n=[],i=-1;for(;++i<e.length;)n[i]=RC(e[i],t,r);return n.join("")}function YH(e){return!!(e&&typeof e=="object")}var H_=require("obsidian");var Jd=function(e){if(e==null)return qH;if(typeof e=="string")return jH(e);if(typeof e=="object")return Array.isArray(e)?zH(e):KH(e);if(typeof e=="function")return Zd(e);throw new Error("Expected function, string, or object as test")};function zH(e){let t=[],r=-1;for(;++r<e.length;)t[r]=Jd(e[r]);return Zd(n);function n(...i){let a=-1;for(;++a<t.length;)if(t[a].call(this,...i))return!0;return!1}}function KH(e){return Zd(t);function t(r){let n;for(n in e)if(r[n]!==e[n])return!1;return!0}}function jH(e){return Zd(t);function t(r){return r&&r.type===e}}function Zd(e){return t;function t(r,...n){return!!(r&&typeof r=="object"&&"type"in r&&e.call(this,r,...n))}}function qH(){return!0}var ry=!0,Qd=!1,iy="skip",ay=function(e,t,r,n){typeof t=="function"&&typeof r!="function"&&(n=r,r=t,t=null);let i=Jd(t),a=n?-1:1;o(e,void 0,[])();function o(s,u,l){let c=s&&typeof s=="object"?s:{};if(typeof c.type=="string"){let m=typeof c.tagName=="string"?c.tagName:typeof c.name=="string"?c.name:void 0;Object.defineProperty(d,"name",{value:"node ("+(s.type+(m?"<"+m+">":""))+")"})}return d;function d(){let m=[],h,g,y;if((!t||i(s,u,l[l.length-1]||null))&&(m=GH(r(s,l)),m[0]===Qd))return m;if(s.children&&m[0]!==iy)for(g=(n?s.children.length:-1)+a,y=l.concat(s);g>-1&&g<s.children.length;){if(h=o(s.children[g],g,y)(),h[0]===Qd)return h;g=typeof h[1]=="number"?h[1]:g+a}return m}}};function GH(e){return Array.isArray(e)?e:typeof e=="number"?[ry,e]:[e]}var Xd=function(e,t,r,n){typeof t=="function"&&typeof r!="function"&&(n=r,r=t,t=null),ay(e,t,i,n);function i(a,o){let s=o[o.length-1];return r(a,s?s.children.indexOf(a):null,s)}};function ef(e){if(e.children.length===0)return null;let t=e.children.length-1;return e.children[t].type==="blockid"?t===0?{start:e.children[0].position.start.offset,end:e.children[0].position.start.offset}:{start:e.children[0].position.start.offset,end:e.children[t-1].position.end.offset}:{start:e.children[0].position.start.offset,end:e.children[t].position.end.offset}}function oy(e,t){return t?e.slice(t.start,t.end):""}function HC(e,t){return t<=0?null:e[t-1]}function BC(e,t,r,n=()=>!0){for(let i=t+1,a=e.length;i<a;i++){let o=e[i];if(r===o.type)return o;if(!n(o))return null}return null}var po=require("obsidian");function VC(e,t){return t}function $C(e,t){let r=xh(e.getSetting("date-colors")),n=e.getSetting("date-trigger"),i=e.getSetting("date-format"),a=e.getSetting("date-display-format"),o=e.getSetting("time-trigger"),s=e.getSetting("time-format"),{app:u}=e,l,c,d=m=>{let h="";return c&&(c.backgroundColor?(m+=" has-background",h=` style="--date-color: ${c.color}; --date-background-color: ${c.backgroundColor};"`):h=` style="--date-color: ${c.color};"`),{wrapperClass:m,wrapperStyle:h}};return t=t.replace(new RegExp(`(^|\\s)${Qn(n)}\\[\\[([^\\]]+)\\]\\]`,"g"),(m,h,g)=>{var C,x;let y=(0,po.moment)(g,i);if(!y.isValid())return m;l=y;let v=u.metadataCache.getFirstLinkpathDest(g,e.file.path);c||(c=r(y));let{wrapperClass:D,wrapperStyle:I}=d($("preview-date-wrapper"));return`${h}<span data-date="${l.toISOString()}" class="${D} ${$("date")} ${$("preview-date-link")}"${I}><a class="${$("preview-date")} internal-link" data-href="${(C=v==null?void 0:v.path)!=null?C:g}" href="${(x=v==null?void 0:v.path)!=null?x:g}" target="_blank" rel="noopener">${y.format(a)}</a></span>`}),t=t.replace(new RegExp(`(^|\\s)${Qn(n)}\\[([^\\]]+)\\]\\([^)]+\\)`,"g"),(m,h,g)=>{var C,x;let y=(0,po.moment)(g,i);if(!y.isValid())return m;l=y;let v=u.metadataCache.getFirstLinkpathDest(g,e.file.path);c||(c=r(y));let{wrapperClass:D,wrapperStyle:I}=d($("preview-date-wrapper"));return`${h}<span data-date="${l.toISOString()}" class="${D} ${$("date")} ${$("preview-date-link")}"${I}><a class="${$("preview-date")} internal-link" data-href="${(C=v==null?void 0:v.path)!=null?C:g}" href="${(x=v==null?void 0:v.path)!=null?x:g}" target="_blank" rel="noopener">${y.format(a)}</a></span>`}),t=t.replace(new RegExp(`(^|\\s)${Qn(n)}{([^}]+)}`,"g"),(m,h,g)=>{let y=(0,po.moment)(g,i);if(!y.isValid())return m;l=y,c||(c=r(y));let{wrapperClass:v,wrapperStyle:D}=d($("preview-date-wrapper"));return`${h}<span data-date="${l.toISOString()}" class="${v} ${$("date")}"${D}><span class="${$("preview-date")} ${$("item-metadata-date")}">${y.format(a)}</span></span>`}),t=t.replace(new RegExp(`(^|\\s)${Qn(o)}{([^}]+)}`,"g"),(m,h,g)=>{let y=(0,po.moment)(g,s);if(!y.isValid())return m;l?(l.hour(y.hour()),l.minute(y.minute()),l.second(y.second())):(l=y,l.year(1970));let{wrapperClass:v,wrapperStyle:D}=d($("preview-time-wrapper"));return`${h}<span data-date="${l.toISOString()}" class="${v} ${$("date")}"${D}><span class="${$("preview-time")} ${$("item-metadata-time")}">${y.format(s)}</span></span>`}),t}function ql(e,t){let{dateStr:r,timeStr:n,fileAccessor:i}=t.data.metadata;if(r&&(t.data.metadata.date=(0,po.moment)(r,e.getSetting("date-format"))),n){let a=(0,po.moment)(n,e.getSetting("time-format"));if(t.data.metadata.date){let o=t.data.metadata.date;o.hour(a.hour()),o.minute(a.minute()),o.second(a.second()),a=o.clone()}t.data.metadata.time=a}if(i){let a=e.app.metadataCache.getFirstLinkpathDest(i.target,e.file.path);a&&(t.data.metadata.file=a)}return t.data.titleSearch=wk(t,e),t}function UC(e,t){try{t.children.map(r=>{VC(e,r),r.children.map(n=>ql(e,n))})}catch(r){throw e.setError(r),r}return t}function JH(e){return(e.op==="add"||e.op==="replace")&&["title","titleRaw","dateStr","timeStr",/\d$/,/\/fileAccessor\/.+$/].some(t=>typeof t=="string"?e.path.last().toString().endsWith(t):t.test(e.path.last().toString()))}function WC(e,t,r){let n={};return r.reduce((a,o)=>{if(!JH(o))return a;let s=o.path.reduce((l,c)=>(typeof c=="number"&&l.push(c),l),[]),u=s.join(",");return n[u]||(n[u]=!0,a.push(s)),a},[]).map(a=>{let o=un(t,a);if(o.type===ft.Lane)return VC(e,o);if(o.type===ft.Item)return ql(e,o)}),t}function Kn(e,t,r,n){let i=e.length,a=0,o;if(t<0?t=-t>i?0:i+t:t=t>i?i:t,r=r>0?r:0,n.length<1e4)o=Array.from(n),o.unshift(t,r),e.splice(...o);else for(r&&e.splice(t,r);a<n.length;)o=n.slice(a,a+1e4),o.unshift(t,0),e.splice(...o),a+=1e4,t+=1e4}function mr(e,t){return e.length>0?(Kn(e,e.length,0,t),e):t}var YC={}.hasOwnProperty;function zC(e){let t={},r=-1;for(;++r<e.length;)ZH(t,e[r]);return t}function ZH(e,t){let r;for(r in t){let i=(YC.call(e,r)?e[r]:void 0)||(e[r]={}),a=t[r],o;if(a)for(o in a){YC.call(i,o)||(i[o]=[]);let s=a[o];QH(i[o],Array.isArray(s)?s:s?[s]:[])}}}function QH(e,t){let r=-1,n=[];for(;++r<t.length;)(t[r].add==="after"?e:n).push(t[r]);Kn(e,0,0,n)}var KC=/[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/;var Nr=Pa(/[A-Za-z]/),pr=Pa(/[\dA-Za-z]/),jC=Pa(/[#-'*+\--9=?A-Z^-~]/);function Gl(e){return e!==null&&(e<32||e===127)}var Jl=Pa(/\d/),qC=Pa(/[\dA-Fa-f]/),GC=Pa(/[!-/:-@[-`{-~]/);function xe(e){return e!==null&&e<-2}function Kt(e){return e!==null&&(e<0||e===32)}function Be(e){return e===-2||e===-1||e===32}var JC=Pa(KC),ZC=Pa(/\s/);function Pa(e){return t;function t(r){return r!==null&&e.test(String.fromCharCode(r))}}function je(e,t,r,n){let i=n?n-1:Number.POSITIVE_INFINITY,a=0;return o;function o(u){return Be(u)?(e.enter(r),s(u)):t(u)}function s(u){return Be(u)&&a++<i?(e.consume(u),s):(e.exit(r),t(u))}}var QC={tokenize:XH};function XH(e){let t=e.attempt(this.parser.constructs.contentInitial,n,i),r;return t;function n(s){if(s===null){e.consume(s);return}return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),je(e,t,"linePrefix")}function i(s){return e.enter("paragraph"),a(s)}function a(s){let u=e.enter("chunkText",{contentType:"text",previous:r});return r&&(r.next=u),r=u,o(s)}function o(s){if(s===null){e.exit("chunkText"),e.exit("paragraph"),e.consume(s);return}return xe(s)?(e.consume(s),e.exit("chunkText"),a):(e.consume(s),o)}}var e_={tokenize:e3},XC={tokenize:t3};function e3(e){let t=this,r=[],n=0,i,a,o;return s;function s(C){if(n<r.length){let x=r[n];return t.containerState=x[1],e.attempt(x[0].continuation,u,l)(C)}return l(C)}function u(C){if(n++,t.containerState._closeFlow){t.containerState._closeFlow=void 0,i&&I();let x=t.events.length,O=x,A;for(;O--;)if(t.events[O][0]==="exit"&&t.events[O][1].type==="chunkFlow"){A=t.events[O][1].end;break}D(n);let P=x;for(;P<t.events.length;)t.events[P][1].end=Object.assign({},A),P++;return Kn(t.events,O+1,0,t.events.slice(x)),t.events.length=P,l(C)}return s(C)}function l(C){if(n===r.length){if(!i)return m(C);if(i.currentConstruct&&i.currentConstruct.concrete)return g(C);t.interrupt=!!(i.currentConstruct&&!i._gfmTableDynamicInterruptHack)}return t.containerState={},e.check(XC,c,d)(C)}function c(C){return i&&I(),D(n),m(C)}function d(C){return t.parser.lazy[t.now().line]=n!==r.length,o=t.now().offset,g(C)}function m(C){return t.containerState={},e.attempt(XC,h,g)(C)}function h(C){return n++,r.push([t.currentConstruct,t.containerState]),m(C)}function g(C){if(C===null){i&&I(),D(0),e.consume(C);return}return i=i||t.parser.flow(t.now()),e.enter("chunkFlow",{contentType:"flow",previous:a,_tokenizer:i}),y(C)}function y(C){if(C===null){v(e.exit("chunkFlow"),!0),D(0),e.consume(C);return}return xe(C)?(e.consume(C),v(e.exit("chunkFlow")),n=0,t.interrupt=void 0,s):(e.consume(C),y)}function v(C,x){let O=t.sliceStream(C);if(x&&O.push(null),C.previous=a,a&&(a.next=C),a=C,i.defineSkip(C.start),i.write(O),t.parser.lazy[C.start.line]){let A=i.events.length;for(;A--;)if(i.events[A][1].start.offset<o&&(!i.events[A][1].end||i.events[A][1].end.offset>o))return;let P=t.events.length,B=P,G,J;for(;B--;)if(t.events[B][0]==="exit"&&t.events[B][1].type==="chunkFlow"){if(G){J=t.events[B][1].end;break}G=!0}for(D(n),A=P;A<t.events.length;)t.events[A][1].end=Object.assign({},J),A++;Kn(t.events,B+1,0,t.events.slice(P)),t.events.length=A}}function D(C){let x=r.length;for(;x-- >C;){let O=r[x];t.containerState=O[1],O[0].exit.call(t,e)}r.length=C}function I(){i.write([null]),a=void 0,i=void 0,t.containerState._closeFlow=void 0}}function t3(e,t,r){return je(e,e.attempt(this.parser.constructs.document,t,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function sy(e){if(e===null||Kt(e)||ZC(e))return 1;if(JC(e))return 2}function Ms(e,t,r){let n=[],i=-1;for(;++i<e.length;){let a=e[i].resolveAll;a&&!n.includes(a)&&(t=a(t,r),n.push(a))}return t}var Zl={name:"attention",tokenize:r3,resolveAll:n3};function n3(e,t){let r=-1,n,i,a,o,s,u,l,c;for(;++r<e.length;)if(e[r][0]==="enter"&&e[r][1].type==="attentionSequence"&&e[r][1]._close){for(n=r;n--;)if(e[n][0]==="exit"&&e[n][1].type==="attentionSequence"&&e[n][1]._open&&t.sliceSerialize(e[n][1]).charCodeAt(0)===t.sliceSerialize(e[r][1]).charCodeAt(0)){if((e[n][1]._close||e[r][1]._open)&&(e[r][1].end.offset-e[r][1].start.offset)%3&&!((e[n][1].end.offset-e[n][1].start.offset+e[r][1].end.offset-e[r][1].start.offset)%3))continue;u=e[n][1].end.offset-e[n][1].start.offset>1&&e[r][1].end.offset-e[r][1].start.offset>1?2:1;let d=Object.assign({},e[n][1].end),m=Object.assign({},e[r][1].start);t_(d,-u),t_(m,u),o={type:u>1?"strongSequence":"emphasisSequence",start:d,end:Object.assign({},e[n][1].end)},s={type:u>1?"strongSequence":"emphasisSequence",start:Object.assign({},e[r][1].start),end:m},a={type:u>1?"strongText":"emphasisText",start:Object.assign({},e[n][1].end),end:Object.assign({},e[r][1].start)},i={type:u>1?"strong":"emphasis",start:Object.assign({},o.start),end:Object.assign({},s.end)},e[n][1].end=Object.assign({},o.start),e[r][1].start=Object.assign({},s.end),l=[],e[n][1].end.offset-e[n][1].start.offset&&(l=mr(l,[["enter",e[n][1],t],["exit",e[n][1],t]])),l=mr(l,[["enter",i,t],["enter",o,t],["exit",o,t],["enter",a,t]]),l=mr(l,Ms(t.parser.constructs.insideSpan.null,e.slice(n+1,r),t)),l=mr(l,[["exit",a,t],["enter",s,t],["exit",s,t],["exit",i,t]]),e[r][1].end.offset-e[r][1].start.offset?(c=2,l=mr(l,[["enter",e[r][1],t],["exit",e[r][1],t]])):c=0,Kn(e,n-1,r-n+3,l),r=n+l.length-c-2;break}}for(r=-1;++r<e.length;)e[r][1].type==="attentionSequence"&&(e[r][1].type="data");return e}function r3(e,t){let r=this.parser.constructs.attentionMarkers.null,n=this.previous,i=sy(n),a;return o;function o(u){return a=u,e.enter("attentionSequence"),s(u)}function s(u){if(u===a)return e.consume(u),s;let l=e.exit("attentionSequence"),c=sy(u),d=!c||c===2&&i||r.includes(u),m=!i||i===2&&c||r.includes(n);return l._open=!!(a===42?d:d&&(i||!m)),l._close=!!(a===42?m:m&&(c||!d)),t(u)}}function t_(e,t){e.column+=t,e.offset+=t,e._bufferIndex+=t}var ly={name:"autolink",tokenize:i3};function i3(e,t,r){let n=0;return i;function i(h){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(h),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),a}function a(h){return Nr(h)?(e.consume(h),o):l(h)}function o(h){return h===43||h===45||h===46||pr(h)?(n=1,s(h)):l(h)}function s(h){return h===58?(e.consume(h),n=0,u):(h===43||h===45||h===46||pr(h))&&n++<32?(e.consume(h),s):(n=0,l(h))}function u(h){return h===62?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(h),e.exit("autolinkMarker"),e.exit("autolink"),t):h===null||h===32||h===60||Gl(h)?r(h):(e.consume(h),u)}function l(h){return h===64?(e.consume(h),c):jC(h)?(e.consume(h),l):r(h)}function c(h){return pr(h)?d(h):r(h)}function d(h){return h===46?(e.consume(h),n=0,c):h===62?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(h),e.exit("autolinkMarker"),e.exit("autolink"),t):m(h)}function m(h){if((h===45||pr(h))&&n++<63){let g=h===45?m:d;return e.consume(h),g}return r(h)}}var Na={tokenize:a3,partial:!0};function a3(e,t,r){return n;function n(a){return Be(a)?je(e,i,"linePrefix")(a):i(a)}function i(a){return a===null||xe(a)?t(a):r(a)}}var tf={name:"blockQuote",tokenize:o3,continuation:{tokenize:s3},exit:l3};function o3(e,t,r){let n=this;return i;function i(o){if(o===62){let s=n.containerState;return s.open||(e.enter("blockQuote",{_container:!0}),s.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(o),e.exit("blockQuoteMarker"),a}return r(o)}function a(o){return Be(o)?(e.enter("blockQuotePrefixWhitespace"),e.consume(o),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),t):(e.exit("blockQuotePrefix"),t(o))}}function s3(e,t,r){let n=this;return i;function i(o){return Be(o)?je(e,a,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(o):a(o)}function a(o){return e.attempt(tf,t,r)(o)}}function l3(e){e.exit("blockQuote")}var nf={name:"characterEscape",tokenize:u3};function u3(e,t,r){return n;function n(a){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(a),e.exit("escapeMarker"),i}function i(a){return GC(a)?(e.enter("characterEscapeValue"),e.consume(a),e.exit("characterEscapeValue"),e.exit("characterEscape"),t):r(a)}}var n_=document.createElement("i");function Ts(e){let t="&"+e+";";n_.innerHTML=t;let r=n_.textContent;return r.charCodeAt(r.length-1)===59&&e!=="semi"||r===t?!1:r}var rf={name:"characterReference",tokenize:c3};function c3(e,t,r){let n=this,i=0,a,o;return s;function s(d){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(d),e.exit("characterReferenceMarker"),u}function u(d){return d===35?(e.enter("characterReferenceMarkerNumeric"),e.consume(d),e.exit("characterReferenceMarkerNumeric"),l):(e.enter("characterReferenceValue"),a=31,o=pr,c(d))}function l(d){return d===88||d===120?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(d),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),a=6,o=qC,c):(e.enter("characterReferenceValue"),a=7,o=Jl,c(d))}function c(d){if(d===59&&i){let m=e.exit("characterReferenceValue");return o===pr&&!Ts(n.sliceSerialize(m))?r(d):(e.enter("characterReferenceMarker"),e.consume(d),e.exit("characterReferenceMarker"),e.exit("characterReference"),t)}return o(d)&&i++<a?(e.consume(d),c):r(d)}}var r_={tokenize:f3,partial:!0},af={name:"codeFenced",tokenize:d3,concrete:!0};function d3(e,t,r){let n=this,i={tokenize:O,partial:!0},a=0,o=0,s;return u;function u(A){return l(A)}function l(A){let P=n.events[n.events.length-1];return a=P&&P[1].type==="linePrefix"?P[2].sliceSerialize(P[1],!0).length:0,s=A,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),c(A)}function c(A){return A===s?(o++,e.consume(A),c):o<3?r(A):(e.exit("codeFencedFenceSequence"),Be(A)?je(e,d,"whitespace")(A):d(A))}function d(A){return A===null||xe(A)?(e.exit("codeFencedFence"),n.interrupt?t(A):e.check(r_,y,x)(A)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),m(A))}function m(A){return A===null||xe(A)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),d(A)):Be(A)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),je(e,h,"whitespace")(A)):A===96&&A===s?r(A):(e.consume(A),m)}function h(A){return A===null||xe(A)?d(A):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),g(A))}function g(A){return A===null||xe(A)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),d(A)):A===96&&A===s?r(A):(e.consume(A),g)}function y(A){return e.attempt(i,x,v)(A)}function v(A){return e.enter("lineEnding"),e.consume(A),e.exit("lineEnding"),D}function D(A){return a>0&&Be(A)?je(e,I,"linePrefix",a+1)(A):I(A)}function I(A){return A===null||xe(A)?e.check(r_,y,x)(A):(e.enter("codeFlowValue"),C(A))}function C(A){return A===null||xe(A)?(e.exit("codeFlowValue"),I(A)):(e.consume(A),C)}function x(A){return e.exit("codeFenced"),t(A)}function O(A,P,B){let G=0;return J;function J(ne){return A.enter("lineEnding"),A.consume(ne),A.exit("lineEnding"),Q}function Q(ne){return A.enter("codeFencedFence"),Be(ne)?je(A,oe,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(ne):oe(ne)}function oe(ne){return ne===s?(A.enter("codeFencedFenceSequence"),te(ne)):B(ne)}function te(ne){return ne===s?(G++,A.consume(ne),te):G>=o?(A.exit("codeFencedFenceSequence"),Be(ne)?je(A,re,"whitespace")(ne):re(ne)):B(ne)}function re(ne){return ne===null||xe(ne)?(A.exit("codeFencedFence"),P(ne)):B(ne)}}}function f3(e,t,r){let n=this;return i;function i(o){return o===null?r(o):(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),a)}function a(o){return n.parser.lazy[n.now().line]?r(o):t(o)}}var Ql={name:"codeIndented",tokenize:m3},h3={tokenize:p3,partial:!0};function m3(e,t,r){let n=this;return i;function i(l){return e.enter("codeIndented"),je(e,a,"linePrefix",5)(l)}function a(l){let c=n.events[n.events.length-1];return c&&c[1].type==="linePrefix"&&c[2].sliceSerialize(c[1],!0).length>=4?o(l):r(l)}function o(l){return l===null?u(l):xe(l)?e.attempt(h3,o,u)(l):(e.enter("codeFlowValue"),s(l))}function s(l){return l===null||xe(l)?(e.exit("codeFlowValue"),o(l)):(e.consume(l),s)}function u(l){return e.exit("codeIndented"),t(l)}}function p3(e,t,r){let n=this;return i;function i(o){return n.parser.lazy[n.now().line]?r(o):xe(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),i):je(e,a,"linePrefix",5)(o)}function a(o){let s=n.events[n.events.length-1];return s&&s[1].type==="linePrefix"&&s[2].sliceSerialize(s[1],!0).length>=4?t(o):xe(o)?i(o):r(o)}}var uy={name:"codeText",tokenize:v3,resolve:g3,previous:y3};function g3(e){let t=e.length-4,r=3,n,i;if((e[r][1].type==="lineEnding"||e[r][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(n=r;++n<t;)if(e[n][1].type==="codeTextData"){e[r][1].type="codeTextPadding",e[t][1].type="codeTextPadding",r+=2,t-=2;break}}for(n=r-1,t++;++n<=t;)i===void 0?n!==t&&e[n][1].type!=="lineEnding"&&(i=n):(n===t||e[n][1].type==="lineEnding")&&(e[i][1].type="codeTextData",n!==i+2&&(e[i][1].end=e[n-1][1].end,e.splice(i+2,n-i-2),t-=n-i-2,n=i+2),i=void 0);return e}function y3(e){return e!==96||this.events[this.events.length-1][1].type==="characterEscape"}function v3(e,t,r){let n=this,i=0,a,o;return s;function s(m){return e.enter("codeText"),e.enter("codeTextSequence"),u(m)}function u(m){return m===96?(e.consume(m),i++,u):(e.exit("codeTextSequence"),l(m))}function l(m){return m===null?r(m):m===32?(e.enter("space"),e.consume(m),e.exit("space"),l):m===96?(o=e.enter("codeTextSequence"),a=0,d(m)):xe(m)?(e.enter("lineEnding"),e.consume(m),e.exit("lineEnding"),l):(e.enter("codeTextData"),c(m))}function c(m){return m===null||m===32||m===96||xe(m)?(e.exit("codeTextData"),l(m)):(e.consume(m),c)}function d(m){return m===96?(e.consume(m),a++,d):a===i?(e.exit("codeTextSequence"),e.exit("codeText"),t(m)):(o.type="codeTextData",c(m))}}function of(e){let t={},r=-1,n,i,a,o,s,u,l;for(;++r<e.length;){for(;r in t;)r=t[r];if(n=e[r],r&&n[1].type==="chunkFlow"&&e[r-1][1].type==="listItemPrefix"&&(u=n[1]._tokenizer.events,a=0,a<u.length&&u[a][1].type==="lineEndingBlank"&&(a+=2),a<u.length&&u[a][1].type==="content"))for(;++a<u.length&&u[a][1].type!=="content";)u[a][1].type==="chunkText"&&(u[a][1]._isInFirstContentOfListItem=!0,a++);if(n[0]==="enter")n[1].contentType&&(Object.assign(t,w3(e,r)),r=t[r],l=!0);else if(n[1]._container){for(a=r,i=void 0;a--&&(o=e[a],o[1].type==="lineEnding"||o[1].type==="lineEndingBlank");)o[0]==="enter"&&(i&&(e[i][1].type="lineEndingBlank"),o[1].type="lineEnding",i=a);i&&(n[1].end=Object.assign({},e[i][1].start),s=e.slice(i,r),s.unshift(n),Kn(e,i,r-i+1,s))}}return!l}function w3(e,t){let r=e[t][1],n=e[t][2],i=t-1,a=[],o=r._tokenizer||n.parser[r.contentType](r.start),s=o.events,u=[],l={},c,d,m=-1,h=r,g=0,y=0,v=[y];for(;h;){for(;e[++i][1]!==h;);a.push(i),h._tokenizer||(c=n.sliceStream(h),h.next||c.push(null),d&&o.defineSkip(h.start),h._isInFirstContentOfListItem&&(o._gfmTasklistFirstContentOfListItem=!0),o.write(c),h._isInFirstContentOfListItem&&(o._gfmTasklistFirstContentOfListItem=void 0)),d=h,h=h.next}for(h=r;++m<s.length;)s[m][0]==="exit"&&s[m-1][0]==="enter"&&s[m][1].type===s[m-1][1].type&&s[m][1].start.line!==s[m][1].end.line&&(y=m+1,v.push(y),h._tokenizer=void 0,h.previous=void 0,h=h.next);for(o.events=[],h?(h._tokenizer=void 0,h.previous=void 0):v.pop(),m=v.length;m--;){let D=s.slice(v[m],v[m+1]),I=a.pop();u.unshift([I,I+D.length-1]),Kn(e,I,2,D)}for(m=-1;++m<u.length;)l[g+u[m][0]]=g+u[m][1],g+=u[m][1]-u[m][0]-1;return l}var cy={tokenize:S3,resolve:D3},b3={tokenize:E3,partial:!0};function D3(e){return of(e),e}function S3(e,t){let r;return n;function n(s){return e.enter("content"),r=e.enter("chunkContent",{contentType:"content"}),i(s)}function i(s){return s===null?a(s):xe(s)?e.check(b3,o,a)(s):(e.consume(s),i)}function a(s){return e.exit("chunkContent"),e.exit("content"),t(s)}function o(s){return e.consume(s),e.exit("chunkContent"),r.next=e.enter("chunkContent",{contentType:"content",previous:r}),r=r.next,i}}function E3(e,t,r){let n=this;return i;function i(o){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),je(e,a,"linePrefix")}function a(o){if(o===null||xe(o))return r(o);let s=n.events[n.events.length-1];return!n.parser.constructs.disable.null.includes("codeIndented")&&s&&s[1].type==="linePrefix"&&s[2].sliceSerialize(s[1],!0).length>=4?t(o):e.interrupt(n.parser.constructs.flow,r,t)(o)}}function sf(e,t,r,n,i,a,o,s,u){let l=u||Number.POSITIVE_INFINITY,c=0;return d;function d(D){return D===60?(e.enter(n),e.enter(i),e.enter(a),e.consume(D),e.exit(a),m):D===null||D===32||D===41||Gl(D)?r(D):(e.enter(n),e.enter(o),e.enter(s),e.enter("chunkString",{contentType:"string"}),y(D))}function m(D){return D===62?(e.enter(a),e.consume(D),e.exit(a),e.exit(i),e.exit(n),t):(e.enter(s),e.enter("chunkString",{contentType:"string"}),h(D))}function h(D){return D===62?(e.exit("chunkString"),e.exit(s),m(D)):D===null||D===60||xe(D)?r(D):(e.consume(D),D===92?g:h)}function g(D){return D===60||D===62||D===92?(e.consume(D),h):h(D)}function y(D){return!c&&(D===null||D===41||Kt(D))?(e.exit("chunkString"),e.exit(s),e.exit(o),e.exit(n),t(D)):c<l&&D===40?(e.consume(D),c++,y):D===41?(e.consume(D),c--,y):D===null||D===32||D===40||Gl(D)?r(D):(e.consume(D),D===92?v:y)}function v(D){return D===40||D===41||D===92?(e.consume(D),y):y(D)}}function lf(e,t,r,n,i,a){let o=this,s=0,u;return l;function l(h){return e.enter(n),e.enter(i),e.consume(h),e.exit(i),e.enter(a),c}function c(h){return s>999||h===null||h===91||h===93&&!u||h===94&&!s&&"_hiddenFootnoteSupport"in o.parser.constructs?r(h):h===93?(e.exit(a),e.enter(i),e.consume(h),e.exit(i),e.exit(n),t):xe(h)?(e.enter("lineEnding"),e.consume(h),e.exit("lineEnding"),c):(e.enter("chunkString",{contentType:"string"}),d(h))}function d(h){return h===null||h===91||h===93||xe(h)||s++>999?(e.exit("chunkString"),c(h)):(e.consume(h),u||(u=!Be(h)),h===92?m:d)}function m(h){return h===91||h===92||h===93?(e.consume(h),s++,d):d(h)}}function uf(e,t,r,n,i,a){let o;return s;function s(m){return m===34||m===39||m===40?(e.enter(n),e.enter(i),e.consume(m),e.exit(i),o=m===40?41:m,u):r(m)}function u(m){return m===o?(e.enter(i),e.consume(m),e.exit(i),e.exit(n),t):(e.enter(a),l(m))}function l(m){return m===o?(e.exit(a),u(o)):m===null?r(m):xe(m)?(e.enter("lineEnding"),e.consume(m),e.exit("lineEnding"),je(e,l,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),c(m))}function c(m){return m===o||m===null||xe(m)?(e.exit("chunkString"),l(m)):(e.consume(m),m===92?d:c)}function d(m){return m===o||m===92?(e.consume(m),c):c(m)}}function go(e,t){let r;return n;function n(i){return xe(i)?(e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),r=!0,n):Be(i)?je(e,n,r?"linePrefix":"lineSuffix")(i):t(i)}}function ta(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}var dy={name:"definition",tokenize:x3},k3={tokenize:C3,partial:!0};function x3(e,t,r){let n=this,i;return a;function a(h){return e.enter("definition"),o(h)}function o(h){return lf.call(n,e,s,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(h)}function s(h){return i=ta(n.sliceSerialize(n.events[n.events.length-1][1]).slice(1,-1)),h===58?(e.enter("definitionMarker"),e.consume(h),e.exit("definitionMarker"),u):r(h)}function u(h){return Kt(h)?go(e,l)(h):l(h)}function l(h){return sf(e,c,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(h)}function c(h){return e.attempt(k3,d,d)(h)}function d(h){return Be(h)?je(e,m,"whitespace")(h):m(h)}function m(h){return h===null||xe(h)?(e.exit("definition"),n.parser.defined.push(i),t(h)):r(h)}}function C3(e,t,r){return n;function n(s){return Kt(s)?go(e,i)(s):r(s)}function i(s){return uf(e,a,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(s)}function a(s){return Be(s)?je(e,o,"whitespace")(s):o(s)}function o(s){return s===null||xe(s)?t(s):r(s)}}var fy={name:"hardBreakEscape",tokenize:_3};function _3(e,t,r){return n;function n(a){return e.enter("hardBreakEscape"),e.consume(a),i}function i(a){return xe(a)?(e.exit("hardBreakEscape"),t(a)):r(a)}}var hy={name:"headingAtx",tokenize:T3,resolve:M3};function M3(e,t){let r=e.length-2,n=3,i,a;return e[n][1].type==="whitespace"&&(n+=2),r-2>n&&e[r][1].type==="whitespace"&&(r-=2),e[r][1].type==="atxHeadingSequence"&&(n===r-1||r-4>n&&e[r-2][1].type==="whitespace")&&(r-=n+1===r?2:4),r>n&&(i={type:"atxHeadingText",start:e[n][1].start,end:e[r][1].end},a={type:"chunkText",start:e[n][1].start,end:e[r][1].end,contentType:"text"},Kn(e,n,r-n+1,[["enter",i,t],["enter",a,t],["exit",a,t],["exit",i,t]])),e}function T3(e,t,r){let n=0;return i;function i(c){return e.enter("atxHeading"),a(c)}function a(c){return e.enter("atxHeadingSequence"),o(c)}function o(c){return c===35&&n++<6?(e.consume(c),o):c===null||Kt(c)?(e.exit("atxHeadingSequence"),s(c)):r(c)}function s(c){return c===35?(e.enter("atxHeadingSequence"),u(c)):c===null||xe(c)?(e.exit("atxHeading"),t(c)):Be(c)?je(e,s,"whitespace")(c):(e.enter("atxHeadingText"),l(c))}function u(c){return c===35?(e.consume(c),u):(e.exit("atxHeadingSequence"),s(c))}function l(c){return c===null||c===35||Kt(c)?(e.exit("atxHeadingText"),s(c)):(e.consume(c),l)}}var i_=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],my=["pre","script","style","textarea"];var py={name:"htmlFlow",tokenize:O3,resolveTo:A3,concrete:!0},F3={tokenize:P3,partial:!0},I3={tokenize:L3,partial:!0};function A3(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function O3(e,t,r){let n=this,i,a,o,s,u;return l;function l(N){return c(N)}function c(N){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(N),d}function d(N){return N===33?(e.consume(N),m):N===47?(e.consume(N),a=!0,y):N===63?(e.consume(N),i=3,n.interrupt?t:U):Nr(N)?(e.consume(N),o=String.fromCharCode(N),v):r(N)}function m(N){return N===45?(e.consume(N),i=2,h):N===91?(e.consume(N),i=5,s=0,g):Nr(N)?(e.consume(N),i=4,n.interrupt?t:U):r(N)}function h(N){return N===45?(e.consume(N),n.interrupt?t:U):r(N)}function g(N){let Ze="CDATA[";return N===Ze.charCodeAt(s++)?(e.consume(N),s===Ze.length?n.interrupt?t:oe:g):r(N)}function y(N){return Nr(N)?(e.consume(N),o=String.fromCharCode(N),v):r(N)}function v(N){if(N===null||N===47||N===62||Kt(N)){let Ze=N===47,It=o.toLowerCase();return!Ze&&!a&&my.includes(It)?(i=1,n.interrupt?t(N):oe(N)):i_.includes(o.toLowerCase())?(i=6,Ze?(e.consume(N),D):n.interrupt?t(N):oe(N)):(i=7,n.interrupt&&!n.parser.lazy[n.now().line]?r(N):a?I(N):C(N))}return N===45||pr(N)?(e.consume(N),o+=String.fromCharCode(N),v):r(N)}function D(N){return N===62?(e.consume(N),n.interrupt?t:oe):r(N)}function I(N){return Be(N)?(e.consume(N),I):J(N)}function C(N){return N===47?(e.consume(N),J):N===58||N===95||Nr(N)?(e.consume(N),x):Be(N)?(e.consume(N),C):J(N)}function x(N){return N===45||N===46||N===58||N===95||pr(N)?(e.consume(N),x):O(N)}function O(N){return N===61?(e.consume(N),A):Be(N)?(e.consume(N),O):C(N)}function A(N){return N===null||N===60||N===61||N===62||N===96?r(N):N===34||N===39?(e.consume(N),u=N,P):Be(N)?(e.consume(N),A):B(N)}function P(N){return N===u?(e.consume(N),u=null,G):N===null||xe(N)?r(N):(e.consume(N),P)}function B(N){return N===null||N===34||N===39||N===47||N===60||N===61||N===62||N===96||Kt(N)?O(N):(e.consume(N),B)}function G(N){return N===47||N===62||Be(N)?C(N):r(N)}function J(N){return N===62?(e.consume(N),Q):r(N)}function Q(N){return N===null||xe(N)?oe(N):Be(N)?(e.consume(N),Q):r(N)}function oe(N){return N===45&&i===2?(e.consume(N),be):N===60&&i===1?(e.consume(N),pe):N===62&&i===4?(e.consume(N),Je):N===63&&i===3?(e.consume(N),U):N===93&&i===5?(e.consume(N),Ce):xe(N)&&(i===6||i===7)?(e.exit("htmlFlowData"),e.check(F3,it,te)(N)):N===null||xe(N)?(e.exit("htmlFlowData"),te(N)):(e.consume(N),oe)}function te(N){return e.check(I3,re,it)(N)}function re(N){return e.enter("lineEnding"),e.consume(N),e.exit("lineEnding"),ne}function ne(N){return N===null||xe(N)?te(N):(e.enter("htmlFlowData"),oe(N))}function be(N){return N===45?(e.consume(N),U):oe(N)}function pe(N){return N===47?(e.consume(N),o="",De):oe(N)}function De(N){if(N===62){let Ze=o.toLowerCase();return my.includes(Ze)?(e.consume(N),Je):oe(N)}return Nr(N)&&o.length<8?(e.consume(N),o+=String.fromCharCode(N),De):oe(N)}function Ce(N){return N===93?(e.consume(N),U):oe(N)}function U(N){return N===62?(e.consume(N),Je):N===45&&i===2?(e.consume(N),U):oe(N)}function Je(N){return N===null||xe(N)?(e.exit("htmlFlowData"),it(N)):(e.consume(N),Je)}function it(N){return e.exit("htmlFlow"),t(N)}}function L3(e,t,r){let n=this;return i;function i(o){return xe(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),a):r(o)}function a(o){return n.parser.lazy[n.now().line]?r(o):t(o)}}function P3(e,t,r){return n;function n(i){return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),e.attempt(Na,t,r)}}var gy={name:"htmlText",tokenize:N3};function N3(e,t,r){let n=this,i,a,o;return s;function s(U){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(U),u}function u(U){return U===33?(e.consume(U),l):U===47?(e.consume(U),O):U===63?(e.consume(U),C):Nr(U)?(e.consume(U),B):r(U)}function l(U){return U===45?(e.consume(U),c):U===91?(e.consume(U),a=0,g):Nr(U)?(e.consume(U),I):r(U)}function c(U){return U===45?(e.consume(U),h):r(U)}function d(U){return U===null?r(U):U===45?(e.consume(U),m):xe(U)?(o=d,pe(U)):(e.consume(U),d)}function m(U){return U===45?(e.consume(U),h):d(U)}function h(U){return U===62?be(U):U===45?m(U):d(U)}function g(U){let Je="CDATA[";return U===Je.charCodeAt(a++)?(e.consume(U),a===Je.length?y:g):r(U)}function y(U){return U===null?r(U):U===93?(e.consume(U),v):xe(U)?(o=y,pe(U)):(e.consume(U),y)}function v(U){return U===93?(e.consume(U),D):y(U)}function D(U){return U===62?be(U):U===93?(e.consume(U),D):y(U)}function I(U){return U===null||U===62?be(U):xe(U)?(o=I,pe(U)):(e.consume(U),I)}function C(U){return U===null?r(U):U===63?(e.consume(U),x):xe(U)?(o=C,pe(U)):(e.consume(U),C)}function x(U){return U===62?be(U):C(U)}function O(U){return Nr(U)?(e.consume(U),A):r(U)}function A(U){return U===45||pr(U)?(e.consume(U),A):P(U)}function P(U){return xe(U)?(o=P,pe(U)):Be(U)?(e.consume(U),P):be(U)}function B(U){return U===45||pr(U)?(e.consume(U),B):U===47||U===62||Kt(U)?G(U):r(U)}function G(U){return U===47?(e.consume(U),be):U===58||U===95||Nr(U)?(e.consume(U),J):xe(U)?(o=G,pe(U)):Be(U)?(e.consume(U),G):be(U)}function J(U){return U===45||U===46||U===58||U===95||pr(U)?(e.consume(U),J):Q(U)}function Q(U){return U===61?(e.consume(U),oe):xe(U)?(o=Q,pe(U)):Be(U)?(e.consume(U),Q):G(U)}function oe(U){return U===null||U===60||U===61||U===62||U===96?r(U):U===34||U===39?(e.consume(U),i=U,te):xe(U)?(o=oe,pe(U)):Be(U)?(e.consume(U),oe):(e.consume(U),re)}function te(U){return U===i?(e.consume(U),i=void 0,ne):U===null?r(U):xe(U)?(o=te,pe(U)):(e.consume(U),te)}function re(U){return U===null||U===34||U===39||U===60||U===61||U===96?r(U):U===47||U===62||Kt(U)?G(U):(e.consume(U),re)}function ne(U){return U===47||U===62||Kt(U)?G(U):r(U)}function be(U){return U===62?(e.consume(U),e.exit("htmlTextData"),e.exit("htmlText"),t):r(U)}function pe(U){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(U),e.exit("lineEnding"),De}function De(U){return Be(U)?je(e,Ce,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(U):Ce(U)}function Ce(U){return e.enter("htmlTextData"),o(U)}}var yo={name:"labelEnd",tokenize:U3,resolveTo:$3,resolveAll:V3},R3={tokenize:W3},H3={tokenize:Y3},B3={tokenize:z3};function V3(e){let t=-1;for(;++t<e.length;){let r=e[t][1];(r.type==="labelImage"||r.type==="labelLink"||r.type==="labelEnd")&&(e.splice(t+1,r.type==="labelImage"?4:2),r.type="data",t++)}return e}function $3(e,t){let r=e.length,n=0,i,a,o,s;for(;r--;)if(i=e[r][1],a){if(i.type==="link"||i.type==="labelLink"&&i._inactive)break;e[r][0]==="enter"&&i.type==="labelLink"&&(i._inactive=!0)}else if(o){if(e[r][0]==="enter"&&(i.type==="labelImage"||i.type==="labelLink")&&!i._balanced&&(a=r,i.type!=="labelLink")){n=2;break}}else i.type==="labelEnd"&&(o=r);let u={type:e[a][1].type==="labelLink"?"link":"image",start:Object.assign({},e[a][1].start),end:Object.assign({},e[e.length-1][1].end)},l={type:"label",start:Object.assign({},e[a][1].start),end:Object.assign({},e[o][1].end)},c={type:"labelText",start:Object.assign({},e[a+n+2][1].end),end:Object.assign({},e[o-2][1].start)};return s=[["enter",u,t],["enter",l,t]],s=mr(s,e.slice(a+1,a+n+3)),s=mr(s,[["enter",c,t]]),s=mr(s,Ms(t.parser.constructs.insideSpan.null,e.slice(a+n+4,o-3),t)),s=mr(s,[["exit",c,t],e[o-2],e[o-1],["exit",l,t]]),s=mr(s,e.slice(o+1)),s=mr(s,[["exit",u,t]]),Kn(e,a,e.length,s),e}function U3(e,t,r){let n=this,i=n.events.length,a,o;for(;i--;)if((n.events[i][1].type==="labelImage"||n.events[i][1].type==="labelLink")&&!n.events[i][1]._balanced){a=n.events[i][1];break}return s;function s(m){return a?a._inactive?d(m):(o=n.parser.defined.includes(ta(n.sliceSerialize({start:a.end,end:n.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(m),e.exit("labelMarker"),e.exit("labelEnd"),u):r(m)}function u(m){return m===40?e.attempt(R3,c,o?c:d)(m):m===91?e.attempt(H3,c,o?l:d)(m):o?c(m):d(m)}function l(m){return e.attempt(B3,c,d)(m)}function c(m){return t(m)}function d(m){return a._balanced=!0,r(m)}}function W3(e,t,r){return n;function n(d){return e.enter("resource"),e.enter("resourceMarker"),e.consume(d),e.exit("resourceMarker"),i}function i(d){return Kt(d)?go(e,a)(d):a(d)}function a(d){return d===41?c(d):sf(e,o,s,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(d)}function o(d){return Kt(d)?go(e,u)(d):c(d)}function s(d){return r(d)}function u(d){return d===34||d===39||d===40?uf(e,l,r,"resourceTitle","resourceTitleMarker","resourceTitleString")(d):c(d)}function l(d){return Kt(d)?go(e,c)(d):c(d)}function c(d){return d===41?(e.enter("resourceMarker"),e.consume(d),e.exit("resourceMarker"),e.exit("resource"),t):r(d)}}function Y3(e,t,r){let n=this;return i;function i(s){return lf.call(n,e,a,o,"reference","referenceMarker","referenceString")(s)}function a(s){return n.parser.defined.includes(ta(n.sliceSerialize(n.events[n.events.length-1][1]).slice(1,-1)))?t(s):r(s)}function o(s){return r(s)}}function z3(e,t,r){return n;function n(a){return e.enter("reference"),e.enter("referenceMarker"),e.consume(a),e.exit("referenceMarker"),i}function i(a){return a===93?(e.enter("referenceMarker"),e.consume(a),e.exit("referenceMarker"),e.exit("reference"),t):r(a)}}var yy={name:"labelStartImage",tokenize:K3,resolveAll:yo.resolveAll};function K3(e,t,r){let n=this;return i;function i(s){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(s),e.exit("labelImageMarker"),a}function a(s){return s===91?(e.enter("labelMarker"),e.consume(s),e.exit("labelMarker"),e.exit("labelImage"),o):r(s)}function o(s){return s===94&&"_hiddenFootnoteSupport"in n.parser.constructs?r(s):t(s)}}var vy={name:"labelStartLink",tokenize:j3,resolveAll:yo.resolveAll};function j3(e,t,r){let n=this;return i;function i(o){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(o),e.exit("labelMarker"),e.exit("labelLink"),a}function a(o){return o===94&&"_hiddenFootnoteSupport"in n.parser.constructs?r(o):t(o)}}var Xl={name:"lineEnding",tokenize:q3};function q3(e,t){return r;function r(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),je(e,t,"linePrefix")}}var vo={name:"thematicBreak",tokenize:G3};function G3(e,t,r){let n=0,i;return a;function a(l){return e.enter("thematicBreak"),o(l)}function o(l){return i=l,s(l)}function s(l){return l===i?(e.enter("thematicBreakSequence"),u(l)):n>=3&&(l===null||xe(l))?(e.exit("thematicBreak"),t(l)):r(l)}function u(l){return l===i?(e.consume(l),n++,u):(e.exit("thematicBreakSequence"),Be(l)?je(e,s,"whitespace")(l):s(l))}}var ir={name:"list",tokenize:Q3,continuation:{tokenize:X3},exit:tB},J3={tokenize:nB,partial:!0},Z3={tokenize:eB,partial:!0};function Q3(e,t,r){let n=this,i=n.events[n.events.length-1],a=i&&i[1].type==="linePrefix"?i[2].sliceSerialize(i[1],!0).length:0,o=0;return s;function s(h){let g=n.containerState.type||(h===42||h===43||h===45?"listUnordered":"listOrdered");if(g==="listUnordered"?!n.containerState.marker||h===n.containerState.marker:Jl(h)){if(n.containerState.type||(n.containerState.type=g,e.enter(g,{_container:!0})),g==="listUnordered")return e.enter("listItemPrefix"),h===42||h===45?e.check(vo,r,l)(h):l(h);if(!n.interrupt||h===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),u(h)}return r(h)}function u(h){return Jl(h)&&++o<10?(e.consume(h),u):(!n.interrupt||o<2)&&(n.containerState.marker?h===n.containerState.marker:h===41||h===46)?(e.exit("listItemValue"),l(h)):r(h)}function l(h){return e.enter("listItemMarker"),e.consume(h),e.exit("listItemMarker"),n.containerState.marker=n.containerState.marker||h,e.check(Na,n.interrupt?r:c,e.attempt(J3,m,d))}function c(h){return n.containerState.initialBlankLine=!0,a++,m(h)}function d(h){return Be(h)?(e.enter("listItemPrefixWhitespace"),e.consume(h),e.exit("listItemPrefixWhitespace"),m):r(h)}function m(h){return n.containerState.size=a+n.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(h)}}function X3(e,t,r){let n=this;return n.containerState._closeFlow=void 0,e.check(Na,i,a);function i(s){return n.containerState.furtherBlankLines=n.containerState.furtherBlankLines||n.containerState.initialBlankLine,je(e,t,"listItemIndent",n.containerState.size+1)(s)}function a(s){return n.containerState.furtherBlankLines||!Be(s)?(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,o(s)):(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,e.attempt(Z3,t,o)(s))}function o(s){return n.containerState._closeFlow=!0,n.interrupt=void 0,je(e,e.attempt(ir,t,r),"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(s)}}function eB(e,t,r){let n=this;return je(e,i,"listItemIndent",n.containerState.size+1);function i(a){let o=n.events[n.events.length-1];return o&&o[1].type==="listItemIndent"&&o[2].sliceSerialize(o[1],!0).length===n.containerState.size?t(a):r(a)}}function tB(e){e.exit(this.containerState.type)}function nB(e,t,r){let n=this;return je(e,i,"listItemPrefixWhitespace",n.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function i(a){let o=n.events[n.events.length-1];return!Be(a)&&o&&o[1].type==="listItemPrefixWhitespace"?t(a):r(a)}}var cf={name:"setextUnderline",tokenize:iB,resolveTo:rB};function rB(e,t){let r=e.length,n,i,a;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){n=r;break}e[r][1].type==="paragraph"&&(i=r)}else e[r][1].type==="content"&&e.splice(r,1),!a&&e[r][1].type==="definition"&&(a=r);let o={type:"setextHeading",start:Object.assign({},e[i][1].start),end:Object.assign({},e[e.length-1][1].end)};return e[i][1].type="setextHeadingText",a?(e.splice(i,0,["enter",o,t]),e.splice(a+1,0,["exit",e[n][1],t]),e[n][1].end=Object.assign({},e[a][1].end)):e[n][1]=o,e.push(["exit",o,t]),e}function iB(e,t,r){let n=this,i;return a;function a(l){let c=n.events.length,d;for(;c--;)if(n.events[c][1].type!=="lineEnding"&&n.events[c][1].type!=="linePrefix"&&n.events[c][1].type!=="content"){d=n.events[c][1].type==="paragraph";break}return!n.parser.lazy[n.now().line]&&(n.interrupt||d)?(e.enter("setextHeadingLine"),i=l,o(l)):r(l)}function o(l){return e.enter("setextHeadingLineSequence"),s(l)}function s(l){return l===i?(e.consume(l),s):(e.exit("setextHeadingLineSequence"),Be(l)?je(e,u,"lineSuffix")(l):u(l))}function u(l){return l===null||xe(l)?(e.exit("setextHeadingLine"),t(l)):r(l)}}var a_={tokenize:aB};function aB(e){let t=this,r=e.attempt(Na,n,e.attempt(this.parser.constructs.flowInitial,i,je(e,e.attempt(this.parser.constructs.flow,i,e.attempt(cy,i)),"linePrefix")));return r;function n(a){if(a===null){e.consume(a);return}return e.enter("lineEndingBlank"),e.consume(a),e.exit("lineEndingBlank"),t.currentConstruct=void 0,r}function i(a){if(a===null){e.consume(a);return}return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),t.currentConstruct=void 0,r}}var o_={resolveAll:c_()},s_=u_("string"),l_=u_("text");function u_(e){return{tokenize:t,resolveAll:c_(e==="text"?oB:void 0)};function t(r){let n=this,i=this.parser.constructs[e],a=r.attempt(i,o,s);return o;function o(c){return l(c)?a(c):s(c)}function s(c){if(c===null){r.consume(c);return}return r.enter("data"),r.consume(c),u}function u(c){return l(c)?(r.exit("data"),a(c)):(r.consume(c),u)}function l(c){if(c===null)return!0;let d=i[c],m=-1;if(d)for(;++m<d.length;){let h=d[m];if(!h.previous||h.previous.call(n,n.previous))return!0}return!1}}}function c_(e){return t;function t(r,n){let i=-1,a;for(;++i<=r.length;)a===void 0?r[i]&&r[i][1].type==="data"&&(a=i,i++):(!r[i]||r[i][1].type!=="data")&&(i!==a+2&&(r[a][1].end=r[i-1][1].end,r.splice(a+2,i-a-2),i=a+2),a=void 0);return e?e(r,n):r}}function oB(e,t){let r=0;for(;++r<=e.length;)if((r===e.length||e[r][1].type==="lineEnding")&&e[r-1][1].type==="data"){let n=e[r-1][1],i=t.sliceStream(n),a=i.length,o=-1,s=0,u;for(;a--;){let l=i[a];if(typeof l=="string"){for(o=l.length;l.charCodeAt(o-1)===32;)s++,o--;if(o)break;o=-1}else if(l===-2)u=!0,s++;else if(l!==-1){a++;break}}if(s){let l={type:r===e.length||u||s<2?"lineSuffix":"hardBreakTrailing",start:{line:n.end.line,column:n.end.column-s,offset:n.end.offset-s,_index:n.start._index+a,_bufferIndex:a?o:n.start._bufferIndex+o},end:Object.assign({},n.end)};n.end=Object.assign({},l.start),n.start.offset===n.end.offset?Object.assign(n,l):(e.splice(r,0,["enter",l,t],["exit",l,t]),r+=2)}r++}return e}function d_(e,t,r){let n=Object.assign(r?Object.assign({},r):{line:1,column:1,offset:0},{_index:0,_bufferIndex:-1}),i={},a=[],o=[],s=[],u=!0,l={consume:x,enter:O,exit:A,attempt:G(P),check:G(B),interrupt:G(B,{interrupt:!0})},c={previous:null,code:null,containerState:{},events:[],parser:e,sliceStream:y,sliceSerialize:g,now:v,defineSkip:D,write:h},d=t.tokenize.call(c,l),m;return t.resolveAll&&a.push(t),c;function h(te){return o=mr(o,te),I(),o[o.length-1]!==null?[]:(J(t,0),c.events=Ms(a,c.events,c),c.events)}function g(te,re){return lB(y(te),re)}function y(te){return sB(o,te)}function v(){let{line:te,column:re,offset:ne,_index:be,_bufferIndex:pe}=n;return{line:te,column:re,offset:ne,_index:be,_bufferIndex:pe}}function D(te){i[te.line]=te.column,oe()}function I(){let te;for(;n._index<o.length;){let re=o[n._index];if(typeof re=="string")for(te=n._index,n._bufferIndex<0&&(n._bufferIndex=0);n._index===te&&n._bufferIndex<re.length;)C(re.charCodeAt(n._bufferIndex));else C(re)}}function C(te){u=void 0,m=te,d=d(te)}function x(te){xe(te)?(n.line++,n.column=1,n.offset+=te===-3?2:1,oe()):te!==-1&&(n.column++,n.offset++),n._bufferIndex<0?n._index++:(n._bufferIndex++,n._bufferIndex===o[n._index].length&&(n._bufferIndex=-1,n._index++)),c.previous=te,u=!0}function O(te,re){let ne=re||{};return ne.type=te,ne.start=v(),c.events.push(["enter",ne,c]),s.push(ne),ne}function A(te){let re=s.pop();return re.end=v(),c.events.push(["exit",re,c]),re}function P(te,re){J(te,re.from)}function B(te,re){re.restore()}function G(te,re){return ne;function ne(be,pe,De){let Ce,U,Je,it;return Array.isArray(be)?Ze(be):"tokenize"in be?Ze([be]):N(be);function N(vt){return Wt;function Wt(Tt){let Jt=Tt!==null&&vt[Tt],en=Tt!==null&&vt.null,gn=[...Array.isArray(Jt)?Jt:Jt?[Jt]:[],...Array.isArray(en)?en:en?[en]:[]];return Ze(gn)(Tt)}}function Ze(vt){return Ce=vt,U=0,vt.length===0?De:It(vt[U])}function It(vt){return Wt;function Wt(Tt){return it=Q(),Je=vt,vt.partial||(c.currentConstruct=vt),vt.name&&c.parser.constructs.disable.null.includes(vt.name)?jt(Tt):vt.tokenize.call(re?Object.assign(Object.create(c),re):c,l,Mt,jt)(Tt)}}function Mt(vt){return u=!0,te(Je,it),pe}function jt(vt){return u=!0,it.restore(),++U<Ce.length?It(Ce[U]):De}}}function J(te,re){te.resolveAll&&!a.includes(te)&&a.push(te),te.resolve&&Kn(c.events,re,c.events.length-re,te.resolve(c.events.slice(re),c)),te.resolveTo&&(c.events=te.resolveTo(c.events,c))}function Q(){let te=v(),re=c.previous,ne=c.currentConstruct,be=c.events.length,pe=Array.from(s);return{restore:De,from:be};function De(){n=te,c.previous=re,c.currentConstruct=ne,c.events.length=be,s=pe,oe()}}function oe(){n.line in i&&n.column<2&&(n.column=i[n.line],n.offset+=i[n.line]-1)}}function sB(e,t){let r=t.start._index,n=t.start._bufferIndex,i=t.end._index,a=t.end._bufferIndex,o;if(r===i)o=[e[r].slice(n,a)];else{if(o=e.slice(r,i),n>-1){let s=o[0];typeof s=="string"?o[0]=s.slice(n):o.shift()}a>0&&o.push(e[i].slice(0,a))}return o}function lB(e,t){let r=-1,n=[],i;for(;++r<e.length;){let a=e[r],o;if(typeof a=="string")o=a;else switch(a){case-5:{o="\r";break}case-4:{o=` +`;break}case-3:{o=`\r +`;break}case-2:{o=t?" ":" ";break}case-1:{if(!t&&i)continue;o=" ";break}default:o=String.fromCharCode(a)}i=a===-2,n.push(o)}return n.join("")}var wy={};Rf(wy,{attentionMarkers:()=>gB,contentInitial:()=>cB,disable:()=>yB,document:()=>uB,flow:()=>fB,flowInitial:()=>dB,insideSpan:()=>pB,string:()=>hB,text:()=>mB});var uB={42:ir,43:ir,45:ir,48:ir,49:ir,50:ir,51:ir,52:ir,53:ir,54:ir,55:ir,56:ir,57:ir,62:tf},cB={91:dy},dB={[-2]:Ql,[-1]:Ql,32:Ql},fB={35:hy,42:vo,45:[cf,vo],60:py,61:cf,95:vo,96:af,126:af},hB={38:rf,92:nf},mB={[-5]:Xl,[-4]:Xl,[-3]:Xl,33:yy,38:rf,42:Zl,60:[ly,gy],91:vy,92:[fy,nf],93:yo,95:Zl,96:uy},pB={null:[Zl,o_]},gB={null:[42,95]},yB={null:[]};function f_(e){let r=zC([wy,...(e||{}).extensions||[]]),n={defined:[],lazy:{},constructs:r,content:i(QC),document:i(e_),flow:i(a_),string:i(s_),text:i(l_)};return n;function i(a){return o;function o(s){return d_(n,a,s)}}}var h_=/[\0\t\n\r]/g;function m_(){let e=1,t="",r=!0,n;return i;function i(a,o,s){let u=[],l,c,d,m,h;for(a=t+a.toString(o),d=0,t="",r&&(a.charCodeAt(0)===65279&&d++,r=void 0);d<a.length;){if(h_.lastIndex=d,l=h_.exec(a),m=l&&l.index!==void 0?l.index:a.length,h=a.charCodeAt(m),!l){t=a.slice(d);break}if(h===10&&d===m&&n)u.push(-3),n=void 0;else switch(n&&(u.push(-5),n=void 0),d<m&&(u.push(a.slice(d,m)),e+=m-d),h){case 0:{u.push(65533),e++;break}case 9:{for(c=Math.ceil(e/4)*4,u.push(-2);e++<c;)u.push(-1);break}case 10:{u.push(-4),e=1;break}default:n=!0,e=1}d=m+1}return s&&(n&&u.push(-5),t&&u.push(t),u.push(null)),u}}function p_(e){for(;!of(e););return e}function df(e,t){let r=Number.parseInt(e,t);return r<9||r===11||r>13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"\uFFFD":String.fromCharCode(r)}var vB=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function g_(e){return e.replace(vB,wB)}function wB(e,t,r){if(t)return t;if(r.charCodeAt(0)===35){let i=r.charCodeAt(1),a=i===120||i===88;return df(r.slice(a?2:1),a?16:10)}return Ts(r)||e}function Fs(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?y_(e.position):"start"in e||"end"in e?y_(e):"line"in e||"column"in e?by(e):""}function by(e){return v_(e&&e.line)+":"+v_(e&&e.column)}function y_(e){return by(e&&e.start)+"-"+by(e&&e.end)}function v_(e){return e&&typeof e=="number"?e:1}var b_={}.hasOwnProperty,ff=function(e,t,r){return typeof t!="string"&&(r=t,t=void 0),bB(r)(p_(f_(r).document().write(m_()(e,t,!0))))};function bB(e){let t={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:s(Vt),autolinkProtocol:Q,autolinkEmail:Q,atxHeading:s(xn),blockQuote:s(Jt),characterEscape:Q,characterReference:Q,codeFenced:s(en),codeFencedFenceInfo:u,codeFencedFenceMeta:u,codeIndented:s(en,u),codeText:s(gn,u),codeTextData:Q,data:Q,codeFlowValue:Q,definition:s(yn),definitionDestinationString:u,definitionLabelString:u,definitionTitleString:u,emphasis:s(vn),hardBreakEscape:s(jn),hardBreakTrailing:s(jn),htmlFlow:s(sn,u),htmlFlowData:Q,htmlText:s(sn,u),htmlTextData:Q,image:s(Rt),label:u,link:s(Vt),listItem:s(Rr),listItemValue:g,listOrdered:s(Sr,h),listUnordered:s(Sr),paragraph:s(Bt),reference:It,referenceString:u,resourceDestinationString:u,resourceTitleString:u,setextHeading:s(xn),strong:s(Hr),thematicBreak:s(At)},exit:{atxHeading:c(),atxHeadingSequence:P,autolink:c(),autolinkEmail:Tt,autolinkProtocol:Wt,blockQuote:c(),characterEscapeValue:oe,characterReferenceMarkerHexadecimal:jt,characterReferenceMarkerNumeric:jt,characterReferenceValue:vt,codeFenced:c(I),codeFencedFence:D,codeFencedFenceInfo:y,codeFencedFenceMeta:v,codeFlowValue:oe,codeIndented:c(C),codeText:c(pe),codeTextData:oe,data:oe,definition:c(),definitionDestinationString:A,definitionLabelString:x,definitionTitleString:O,emphasis:c(),hardBreakEscape:c(re),hardBreakTrailing:c(re),htmlFlow:c(ne),htmlFlowData:oe,htmlText:c(be),htmlTextData:oe,image:c(Ce),label:Je,labelText:U,lineEnding:te,link:c(De),listItem:c(),listOrdered:c(),listUnordered:c(),paragraph:c(),referenceString:Mt,resourceDestinationString:it,resourceTitleString:N,resource:Ze,setextHeading:c(J),setextHeadingLineSequence:G,setextHeadingText:B,strong:c(),thematicBreak:c()}};D_(t,(e||{}).mdastExtensions||[]);let r={};return n;function n(Z){let me={type:"root",children:[]},Ie={stack:[me],tokenStack:[],config:t,enter:l,exit:d,buffer:u,resume:m,setData:a,getData:o},at=[],Dt=-1;for(;++Dt<Z.length;)if(Z[Dt][1].type==="listOrdered"||Z[Dt][1].type==="listUnordered")if(Z[Dt][0]==="enter")at.push(Dt);else{let Cn=at.pop();Dt=i(Z,Cn,Dt)}for(Dt=-1;++Dt<Z.length;){let Cn=t[Z[Dt][0]];b_.call(Cn,Z[Dt][1].type)&&Cn[Z[Dt][1].type].call(Object.assign({sliceSerialize:Z[Dt][2].sliceSerialize},Ie),Z[Dt][1])}if(Ie.tokenStack.length>0){let Cn=Ie.tokenStack[Ie.tokenStack.length-1];(Cn[1]||w_).call(Ie,void 0,Cn[0])}for(me.position={start:Ra(Z.length>0?Z[0][1].start:{line:1,column:1,offset:0}),end:Ra(Z.length>0?Z[Z.length-2][1].end:{line:1,column:1,offset:0})},Dt=-1;++Dt<t.transforms.length;)me=t.transforms[Dt](me)||me;return me}function i(Z,me,Ie){let at=me-1,Dt=-1,Cn=!1,_n,Ht,ar,ht;for(;++at<=Ie;){let St=Z[at];if(St[1].type==="listUnordered"||St[1].type==="listOrdered"||St[1].type==="blockQuote"?(St[0]==="enter"?Dt++:Dt--,ht=void 0):St[1].type==="lineEndingBlank"?St[0]==="enter"&&(_n&&!ht&&!Dt&&!ar&&(ar=at),ht=void 0):St[1].type==="linePrefix"||St[1].type==="listItemValue"||St[1].type==="listItemMarker"||St[1].type==="listItemPrefix"||St[1].type==="listItemPrefixWhitespace"||(ht=void 0),!Dt&&St[0]==="enter"&&St[1].type==="listItemPrefix"||Dt===-1&&St[0]==="exit"&&(St[1].type==="listUnordered"||St[1].type==="listOrdered")){if(_n){let L=at;for(Ht=void 0;L--;){let K=Z[L];if(K[1].type==="lineEnding"||K[1].type==="lineEndingBlank"){if(K[0]==="exit")continue;Ht&&(Z[Ht][1].type="lineEndingBlank",Cn=!0),K[1].type="lineEnding",Ht=L}else if(!(K[1].type==="linePrefix"||K[1].type==="blockQuotePrefix"||K[1].type==="blockQuotePrefixWhitespace"||K[1].type==="blockQuoteMarker"||K[1].type==="listItemIndent"))break}ar&&(!Ht||ar<Ht)&&(_n._spread=!0),_n.end=Object.assign({},Ht?Z[Ht][1].start:St[1].end),Z.splice(Ht||at,0,["exit",_n,St[2]]),at++,Ie++}St[1].type==="listItemPrefix"&&(_n={type:"listItem",_spread:!1,start:Object.assign({},St[1].start),end:void 0},Z.splice(at,0,["enter",_n,St[2]]),at++,Ie++,ar=void 0,ht=!0)}}return Z[me][1]._spread=Cn,Ie}function a(Z,me){r[Z]=me}function o(Z){return r[Z]}function s(Z,me){return Ie;function Ie(at){l.call(this,Z(at),at),me&&me.call(this,at)}}function u(){this.stack.push({type:"fragment",children:[]})}function l(Z,me,Ie){return this.stack[this.stack.length-1].children.push(Z),this.stack.push(Z),this.tokenStack.push([me,Ie]),Z.position={start:Ra(me.start)},Z}function c(Z){return me;function me(Ie){Z&&Z.call(this,Ie),d.call(this,Ie)}}function d(Z,me){let Ie=this.stack.pop(),at=this.tokenStack.pop();if(at)at[0].type!==Z.type&&(me?me.call(this,Z,at[0]):(at[1]||w_).call(this,Z,at[0]));else throw new Error("Cannot close `"+Z.type+"` ("+Fs({start:Z.start,end:Z.end})+"): it\u2019s not open");return Ie.position.end=Ra(Z.end),Ie}function m(){return _s(this.stack.pop())}function h(){a("expectingFirstListItemValue",!0)}function g(Z){if(o("expectingFirstListItemValue")){let me=this.stack[this.stack.length-2];me.start=Number.parseInt(this.sliceSerialize(Z),10),a("expectingFirstListItemValue")}}function y(){let Z=this.resume(),me=this.stack[this.stack.length-1];me.lang=Z}function v(){let Z=this.resume(),me=this.stack[this.stack.length-1];me.meta=Z}function D(){o("flowCodeInside")||(this.buffer(),a("flowCodeInside",!0))}function I(){let Z=this.resume(),me=this.stack[this.stack.length-1];me.value=Z.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),a("flowCodeInside")}function C(){let Z=this.resume(),me=this.stack[this.stack.length-1];me.value=Z.replace(/(\r?\n|\r)$/g,"")}function x(Z){let me=this.resume(),Ie=this.stack[this.stack.length-1];Ie.label=me,Ie.identifier=ta(this.sliceSerialize(Z)).toLowerCase()}function O(){let Z=this.resume(),me=this.stack[this.stack.length-1];me.title=Z}function A(){let Z=this.resume(),me=this.stack[this.stack.length-1];me.url=Z}function P(Z){let me=this.stack[this.stack.length-1];if(!me.depth){let Ie=this.sliceSerialize(Z).length;me.depth=Ie}}function B(){a("setextHeadingSlurpLineEnding",!0)}function G(Z){let me=this.stack[this.stack.length-1];me.depth=this.sliceSerialize(Z).charCodeAt(0)===61?1:2}function J(){a("setextHeadingSlurpLineEnding")}function Q(Z){let me=this.stack[this.stack.length-1],Ie=me.children[me.children.length-1];(!Ie||Ie.type!=="text")&&(Ie=rn(),Ie.position={start:Ra(Z.start)},me.children.push(Ie)),this.stack.push(Ie)}function oe(Z){let me=this.stack.pop();me.value+=this.sliceSerialize(Z),me.position.end=Ra(Z.end)}function te(Z){let me=this.stack[this.stack.length-1];if(o("atHardBreak")){let Ie=me.children[me.children.length-1];Ie.position.end=Ra(Z.end),a("atHardBreak");return}!o("setextHeadingSlurpLineEnding")&&t.canContainEols.includes(me.type)&&(Q.call(this,Z),oe.call(this,Z))}function re(){a("atHardBreak",!0)}function ne(){let Z=this.resume(),me=this.stack[this.stack.length-1];me.value=Z}function be(){let Z=this.resume(),me=this.stack[this.stack.length-1];me.value=Z}function pe(){let Z=this.resume(),me=this.stack[this.stack.length-1];me.value=Z}function De(){let Z=this.stack[this.stack.length-1];if(o("inReference")){let me=o("referenceType")||"shortcut";Z.type+="Reference",Z.referenceType=me,delete Z.url,delete Z.title}else delete Z.identifier,delete Z.label;a("referenceType")}function Ce(){let Z=this.stack[this.stack.length-1];if(o("inReference")){let me=o("referenceType")||"shortcut";Z.type+="Reference",Z.referenceType=me,delete Z.url,delete Z.title}else delete Z.identifier,delete Z.label;a("referenceType")}function U(Z){let me=this.sliceSerialize(Z),Ie=this.stack[this.stack.length-2];Ie.label=g_(me),Ie.identifier=ta(me).toLowerCase()}function Je(){let Z=this.stack[this.stack.length-1],me=this.resume(),Ie=this.stack[this.stack.length-1];if(a("inReference",!0),Ie.type==="link"){let at=Z.children;Ie.children=at}else Ie.alt=me}function it(){let Z=this.resume(),me=this.stack[this.stack.length-1];me.url=Z}function N(){let Z=this.resume(),me=this.stack[this.stack.length-1];me.title=Z}function Ze(){a("inReference")}function It(){a("referenceType","collapsed")}function Mt(Z){let me=this.resume(),Ie=this.stack[this.stack.length-1];Ie.label=me,Ie.identifier=ta(this.sliceSerialize(Z)).toLowerCase(),a("referenceType","full")}function jt(Z){a("characterReferenceType",Z.type)}function vt(Z){let me=this.sliceSerialize(Z),Ie=o("characterReferenceType"),at;Ie?(at=df(me,Ie==="characterReferenceMarkerNumeric"?10:16),a("characterReferenceType")):at=Ts(me);let Dt=this.stack.pop();Dt.value+=at,Dt.position.end=Ra(Z.end)}function Wt(Z){oe.call(this,Z);let me=this.stack[this.stack.length-1];me.url=this.sliceSerialize(Z)}function Tt(Z){oe.call(this,Z);let me=this.stack[this.stack.length-1];me.url="mailto:"+this.sliceSerialize(Z)}function Jt(){return{type:"blockquote",children:[]}}function en(){return{type:"code",lang:null,meta:null,value:""}}function gn(){return{type:"inlineCode",value:""}}function yn(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function vn(){return{type:"emphasis",children:[]}}function xn(){return{type:"heading",depth:void 0,children:[]}}function jn(){return{type:"break"}}function sn(){return{type:"html",value:""}}function Rt(){return{type:"image",title:null,url:"",alt:null}}function Vt(){return{type:"link",title:null,url:"",children:[]}}function Sr(Z){return{type:"list",ordered:Z.type==="listOrdered",start:null,spread:Z._spread,children:[]}}function Rr(Z){return{type:"listItem",spread:Z._spread,checked:null,children:[]}}function Bt(){return{type:"paragraph",children:[]}}function Hr(){return{type:"strong",children:[]}}function rn(){return{type:"text",value:""}}function At(){return{type:"thematicBreak"}}}function Ra(e){return{line:e.line,column:e.column,offset:e.offset}}function D_(e,t){let r=-1;for(;++r<t.length;){let n=t[r];Array.isArray(n)?D_(e,n):DB(e,n)}}function DB(e,t){let r;for(r in t)if(b_.call(t,r)){if(r==="canContainEols"){let n=t[r];n&&e[r].push(...n)}else if(r==="transforms"){let n=t[r];n&&e[r].push(...n)}else if(r==="enter"||r==="exit"){let n=t[r];n&&Object.assign(e[r],n)}}}function w_(e,t){throw e?new Error("Cannot close `"+e.type+"` ("+Fs({start:e.start,end:e.end})+"): a different token (`"+t.type+"`, "+Fs({start:t.start,end:t.end})+") is open"):new Error("Cannot close document, a token (`"+t.type+"`, "+Fs({start:t.start,end:t.end})+") is still open")}var E_=Ct(S_(),1),eu=Object.assign(wo(Error),{eval:wo(EvalError),range:wo(RangeError),reference:wo(ReferenceError),syntax:wo(SyntaxError),type:wo(TypeError),uri:wo(URIError)});function wo(e){return t.displayName=e.displayName||e.name,t;function t(r,...n){let i=r&&(0,E_.default)(r,...n);return new e(i)}}var hf={}.hasOwnProperty,k_={yaml:"-",toml:"+"};function mf(e){let t=[],r=-1,n=Array.isArray(e)?e:e?[e]:["yaml"];for(;++r<n.length;)t[r]=SB(n[r]);return t}function SB(e){let t=e;if(typeof t=="string"){if(!hf.call(k_,t))throw eu("Missing matter definition for `%s`",t);t={type:t,marker:k_[t]}}else if(typeof t!="object")throw eu("Expected matter to be an object, not `%j`",t);if(!hf.call(t,"type"))throw eu("Missing `type` in matter `%j`",t);if(!hf.call(t,"fence")&&!hf.call(t,"marker"))throw eu("Missing `marker` or `fence` in matter `%j`",t);return t}function Sy(e){let t=mf(e),r={},n={},i=-1;for(;++i<t.length;){let a=t[i];r[a.type]=EB(a),n[a.type]=kB,n[a.type+"Value"]=xB}return{enter:r,exit:n}}function EB(e){return t;function t(r){this.enter({type:e.type,value:""},r),this.buffer()}}function kB(e){let t=this.resume(),r=this.exit(e);r.value=t.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,"")}function xB(e){this.config.enter.data.call(this,e),this.config.exit.data.call(this,e)}function ky(e){let t=mf(e),r={},n=-1;for(;++n<t.length;){let i=t[n],a=Ey(i,"open").charCodeAt(0),o=CB(i),s=r[a];Array.isArray(s)?s.push(o):r[a]=[o]}return{flow:r}}function CB(e){let t=e.anywhere,r=e.type,n=r+"Fence",i=n+"Sequence",a=r+"Value",o={tokenize:c,partial:!0},s,u=0;return{tokenize:l,concrete:!0};function l(d,m,h){let g=this;return y;function y(P){let B=g.now();return B.column===1&&(B.line===1||t)&&(s=Ey(e,"open"),u=0,P===s.charCodeAt(u))?(d.enter(r),d.enter(n),d.enter(i),v(P)):h(P)}function v(P){return u===s.length?(d.exit(i),Be(P)?(d.enter("whitespace"),D(P)):I(P)):P===s.charCodeAt(u++)?(d.consume(P),v):h(P)}function D(P){return Be(P)?(d.consume(P),D):(d.exit("whitespace"),I(P))}function I(P){return xe(P)?(d.exit(n),d.enter("lineEnding"),d.consume(P),d.exit("lineEnding"),s=Ey(e,"close"),u=0,d.attempt(o,A,C)):h(P)}function C(P){return P===null||xe(P)?O(P):(d.enter(a),x(P))}function x(P){return P===null||xe(P)?(d.exit(a),O(P)):(d.consume(P),x)}function O(P){return P===null?h(P):(d.enter("lineEnding"),d.consume(P),d.exit("lineEnding"),d.attempt(o,A,C))}function A(P){return d.exit(r),m(P)}}function c(d,m,h){let g=0;return y;function y(C){return C===s.charCodeAt(g)?(d.enter(n),d.enter(i),v(C)):h(C)}function v(C){return g===s.length?(d.exit(i),Be(C)?(d.enter("whitespace"),D(C)):I(C)):C===s.charCodeAt(g++)?(d.consume(C),v):h(C)}function D(C){return Be(C)?(d.consume(C),D):(d.exit("whitespace"),I(C))}function I(C){return C===null||xe(C)?(d.exit(n),m(C)):h(C)}}}function Ey(e,t){return e.marker?x_(e.marker,t).repeat(3):x_(e.fence,t)}function x_(e,t){return typeof e=="string"?e:e[t]}var L_=require("obsidian");function Is(e){return e[e.length-1]}function C_(){let e="blockid",t="^";function r(i,a,o){let s=!1,u=0;return l;function l(h){return h!==t.charCodeAt(u)?o(h):(i.enter(e),i.enter(`${e}Marker`),c(h))}function c(h){return u===t.length?(i.exit(`${e}Marker`),d(h)):h!==t.charCodeAt(u)?o(h):(i.consume(h),u++,c)}function d(h){return i.enter(`${e}Data`),i.enter(`${e}Target`),m(h)}function m(h){return Be(h)?o(h):xe(h)||h===null?s?(i.exit(`${e}Target`),i.exit(`${e}Data`),i.exit(e),a(h)):o(h):(s=!0,i.consume(h),m)}}let n={tokenize:r};return{text:{[t.charCodeAt(0)]:n}}}function __(){let e="blockid";function t(i){this.enter({type:e,value:null},i)}function r(i){let a=this.sliceSerialize(i),o=Is(this.stack);o.value=a}function n(i){this.exit(i)}return{enter:{[e]:t},exit:{[`${e}Target`]:r,[e]:n}}}function As(e,t,r){function n(a,o,s){let u=!1,l=0,c=0;return d;function d(v){return v!==t.charCodeAt(l)?s(v):(a.enter(e),a.enter(`${e}Marker`),m(v))}function m(v){return l===t.length?(a.exit(`${e}Marker`),h(v)):v!==t.charCodeAt(l)?s(v):(a.consume(v),l++,m)}function h(v){return xe(v)||v===null?s(v):(a.enter(`${e}Data`),a.enter(`${e}Target`),g(v))}function g(v){return v===r.charCodeAt(c)?u?(a.exit(`${e}Target`),a.exit(`${e}Data`),a.enter(`${e}Marker`),y(v)):s(v):xe(v)||v===null?s(v):(Kt(v)||(u=!0),a.consume(v),g)}function y(v){return c===r.length?(a.exit(`${e}Marker`),a.exit(e),o(v)):v!==r.charCodeAt(c)?s(v):(a.consume(v),c++,y)}}let i={tokenize:n};return{text:{[t.charCodeAt(0)]:i}}}function Os(e,t){function r(a){this.enter({type:e,value:null},a)}function n(a){let o=this.sliceSerialize(a),s=Is(this.stack);s.value=o,t&&t(o,s)}function i(a){this.exit(a)}return{enter:{[e]:r},exit:{[`${e}Target`]:n,[e]:i}}}function M_(e){function t(n){e(this.stack[this.stack.length-1],!1),this.exit(n)}function r(n){e(this.stack[this.stack.length-1],!0),this.exit(n)}return{exit:{link:t,image:r}}}function T_(){let e="hashtag";function r(i,a,o){let s=!1,u=0,l=this;return c;function c(g){return g!==35||l.previous!==null&&!/\s/.test(String.fromCharCode(l.previous))?o(g):(i.enter(e),i.enter(`${e}Marker`),d(g))}function d(g){return u===1?(i.exit(`${e}Marker`),m(g)):g!==35?o(g):(i.consume(g),u++,d)}function m(g){return i.enter(`${e}Data`),i.enter(`${e}Target`),h(g)}function h(g){return g===null||Kt(g)||/[\u2000-\u206F\u2E00-\u2E7F'!"#$%&()*+,.:;<=>?@^`{|}~[\]\\\s\n\r]/.test(String.fromCharCode(g))?s?(i.exit(`${e}Target`),i.exit(`${e}Data`),i.exit(e),a(g)):o(g):(s=!0,i.consume(g),h)}}return{text:{35:{tokenize:r}}}}function F_(){let e="hashtag";function t(i){this.enter({type:e,value:null},i)}function r(i){let a=this.sliceSerialize(i),o=Is(this.stack);o.value=a}function n(i){this.exit(i)}return{enter:{[e]:t},exit:{[`${e}Target`]:r,[e]:n}}}var Ls={carriageReturn:-5,lineFeed:-4,carriageReturnLineFeed:-3,horizontalTab:-2,virtualSpace:-1,eof:null,nul:0,soh:1,stx:2,etx:3,eot:4,enq:5,ack:6,bel:7,bs:8,ht:9,lf:10,vt:11,ff:12,cr:13,so:14,si:15,dle:16,dc1:17,dc2:18,dc3:19,dc4:20,nak:21,syn:22,etb:23,can:24,em:25,sub:26,esc:27,fs:28,gs:29,rs:30,us:31,space:32,exclamationMark:33,quotationMark:34,numberSign:35,dollarSign:36,percentSign:37,ampersand:38,apostrophe:39,leftParenthesis:40,rightParenthesis:41,asterisk:42,plusSign:43,comma:44,dash:45,dot:46,slash:47,digit0:48,digit1:49,digit2:50,digit3:51,digit4:52,digit5:53,digit6:54,digit7:55,digit8:56,digit9:57,colon:58,semicolon:59,lessThan:60,equalsTo:61,greaterThan:62,questionMark:63,atSign:64,uppercaseA:65,uppercaseB:66,uppercaseC:67,uppercaseD:68,uppercaseE:69,uppercaseF:70,uppercaseG:71,uppercaseH:72,uppercaseI:73,uppercaseJ:74,uppercaseK:75,uppercaseL:76,uppercaseM:77,uppercaseN:78,uppercaseO:79,uppercaseP:80,uppercaseQ:81,uppercaseR:82,uppercaseS:83,uppercaseT:84,uppercaseU:85,uppercaseV:86,uppercaseW:87,uppercaseX:88,uppercaseY:89,uppercaseZ:90,leftSquareBracket:91,backslash:92,rightSquareBracket:93,caret:94,underscore:95,graveAccent:96,lowercaseA:97,lowercaseB:98,lowercaseC:99,lowercaseD:100,lowercaseE:101,lowercaseF:102,lowercaseG:103,lowercaseH:104,lowercaseI:105,lowercaseJ:106,lowercaseK:107,lowercaseL:108,lowercaseM:109,lowercaseN:110,lowercaseO:111,lowercaseP:112,lowercaseQ:113,lowercaseR:114,lowercaseS:115,lowercaseT:116,lowercaseU:117,lowercaseV:118,lowercaseW:119,lowercaseX:120,lowercaseY:121,lowercaseZ:122,leftCurlyBrace:123,verticalBar:124,rightCurlyBrace:125,tilde:126,del:127,byteOrderMarker:65279,replacementCharacter:65533};var xy={data:"data",whitespace:"whitespace",lineEnding:"lineEnding",lineEndingBlank:"lineEndingBlank",linePrefix:"linePrefix",lineSuffix:"lineSuffix",atxHeading:"atxHeading",atxHeadingSequence:"atxHeadingSequence",atxHeadingText:"atxHeadingText",autolink:"autolink",autolinkEmail:"autolinkEmail",autolinkMarker:"autolinkMarker",autolinkProtocol:"autolinkProtocol",characterEscape:"characterEscape",characterEscapeValue:"characterEscapeValue",characterReference:"characterReference",characterReferenceMarker:"characterReferenceMarker",characterReferenceMarkerNumeric:"characterReferenceMarkerNumeric",characterReferenceMarkerHexadecimal:"characterReferenceMarkerHexadecimal",characterReferenceValue:"characterReferenceValue",codeFenced:"codeFenced",codeFencedFence:"codeFencedFence",codeFencedFenceSequence:"codeFencedFenceSequence",codeFencedFenceInfo:"codeFencedFenceInfo",codeFencedFenceMeta:"codeFencedFenceMeta",codeFlowValue:"codeFlowValue",codeIndented:"codeIndented",codeText:"codeText",codeTextData:"codeTextData",codeTextPadding:"codeTextPadding",codeTextSequence:"codeTextSequence",content:"content",definition:"definition",definitionDestination:"definitionDestination",definitionDestinationLiteral:"definitionDestinationLiteral",definitionDestinationLiteralMarker:"definitionDestinationLiteralMarker",definitionDestinationRaw:"definitionDestinationRaw",definitionDestinationString:"definitionDestinationString",definitionLabel:"definitionLabel",definitionLabelMarker:"definitionLabelMarker",definitionLabelString:"definitionLabelString",definitionMarker:"definitionMarker",definitionTitle:"definitionTitle",definitionTitleMarker:"definitionTitleMarker",definitionTitleString:"definitionTitleString",emphasis:"emphasis",emphasisSequence:"emphasisSequence",emphasisText:"emphasisText",escapeMarker:"escapeMarker",hardBreakEscape:"hardBreakEscape",hardBreakTrailing:"hardBreakTrailing",htmlFlow:"htmlFlow",htmlFlowData:"htmlFlowData",htmlText:"htmlText",htmlTextData:"htmlTextData",image:"image",label:"label",labelText:"labelText",labelLink:"labelLink",labelImage:"labelImage",labelMarker:"labelMarker",labelImageMarker:"labelImageMarker",labelEnd:"labelEnd",link:"link",paragraph:"paragraph",reference:"reference",referenceMarker:"referenceMarker",referenceString:"referenceString",resource:"resource",resourceDestination:"resourceDestination",resourceDestinationLiteral:"resourceDestinationLiteral",resourceDestinationLiteralMarker:"resourceDestinationLiteralMarker",resourceDestinationRaw:"resourceDestinationRaw",resourceDestinationString:"resourceDestinationString",resourceMarker:"resourceMarker",resourceTitle:"resourceTitle",resourceTitleMarker:"resourceTitleMarker",resourceTitleString:"resourceTitleString",setextHeading:"setextHeading",setextHeadingText:"setextHeadingText",setextHeadingLine:"setextHeadingLine",setextHeadingLineSequence:"setextHeadingLineSequence",strong:"strong",strongSequence:"strongSequence",strongText:"strongText",thematicBreak:"thematicBreak",thematicBreakSequence:"thematicBreakSequence",blockQuote:"blockQuote",blockQuotePrefix:"blockQuotePrefix",blockQuoteMarker:"blockQuoteMarker",blockQuotePrefixWhitespace:"blockQuotePrefixWhitespace",listOrdered:"listOrdered",listUnordered:"listUnordered",listItemIndent:"listItemIndent",listItemMarker:"listItemMarker",listItemPrefix:"listItemPrefix",listItemPrefixWhitespace:"listItemPrefixWhitespace",listItemValue:"listItemValue",chunkDocument:"chunkDocument",chunkContent:"chunkContent",chunkFlow:"chunkFlow",chunkText:"chunkText",chunkString:"chunkString"};var _B={tokenize:MB},A_={text:{[Ls.leftSquareBracket]:_B}};function MB(e,t,r){let n=this;return i;function i(s){return n.previous!==Ls.eof||!n._gfmTasklistFirstContentOfListItem?r(s):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(s),e.exit("taskListCheckMarker"),a)}function a(s){return Be(s)?(e.enter("taskListCheckValueUnchecked"),e.consume(s),e.exit("taskListCheckValueUnchecked"),o):s!==Ls.rightSquareBracket?(e.enter("taskListCheckValueChecked"),e.consume(s),e.exit("taskListCheckValueChecked"),o):r(s)}function o(s){return s===Ls.rightSquareBracket?(e.enter("taskListCheckMarker"),e.consume(s),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),e.check({tokenize:TB},t,r)):r(s)}}function TB(e,t,r){let n=this;return je(e,i,xy.whitespace);function i(a){let o=n.events[n.events.length-1];return o&&o[1].type===xy.whitespace&&a!==Ls.eof&&!Kt(a)?t(a):r(a)}}var O_={exit:{taskListCheckValueChecked:I_,taskListCheckValueUnchecked:I_,paragraph:FB}};function I_(e){let t=this.stack[this.stack.length-2];t.checked=e.type==="taskListCheckValueChecked",t.checkChar=this.sliceSerialize(e)}function FB(e){let t=this.stack[this.stack.length-2],r=this.stack[this.stack.length-1],n=t.children,i=r.children[0],a=-1,o;if(t&&t.type==="listItem"&&typeof t.checked=="boolean"&&i&&i.type==="text"){for(;++a<n.length;){let s=n[a];if(s.type==="paragraph"){o=s;break}}o===r&&(i.value=i.value.slice(1),i.value.length===0?r.children.shift():r.position&&i.position&&typeof i.position.start.offset=="number"&&(i.position.start.column++,i.position.start.offset++,r.position.start=Object.assign({},i.position.start)))}this.exit(e)}function IB(e){let t=-1,r=0;for(let n=0,i=e.length;n<i;n++){if(r<3)if(e[n]==="-"){r++;continue}else throw new Error("Error parsing frontmatter");if(t<0&&(t=n),e[n]==="-"&&/[\r\n]/.test(e[n-1])&&e[n+1]==="-"&&e[n+2]==="-")return(0,L_.parseYaml)(e.slice(t,n-1).trim())}}function AB(e){let t=!1,r=0,n=-1;for(let i=e.length-1;i>=0;i--){if(!t&&/[`%\n\r]/.test(e[i])){e[i]==="`"&&(r++,r===3&&(t=!0,n=i-1));continue}else if(!t)return{};if(e[i]==="`"&&e[i-1]==="`"&&e[i-2]==="`"&&/[\r\n]/.test(e[i-3]))return JSON.parse(e.slice(i+1,n).trim())}}function P_(e){return[A_,As("date",`${e.getSetting("date-trigger")}{`,"}"),As("dateLink",`${e.getSetting("date-trigger")}[[`,"]]"),As("time",`${e.getSetting("time-trigger")}{`,"}"),As("embedWikilink","![[","]]"),As("wikilink","[[","]]"),T_(),C_()]}function N_(e){return[O_,Os("date",(t,r)=>{t&&(r.date=t)}),Os("dateLink",(t,r)=>{t&&(r.date=t)}),Os("time",(t,r)=>{t&&(r.time=t)}),Os("embedWikilink",(t,r)=>{if(!t)return;let n=Ym(t),i=e.app.metadataCache.getFirstLinkpathDest(n.root,e.file.path);r.fileAccessor={target:n.root,isEmbed:!0,stats:i==null?void 0:i.stat}}),Os("wikilink",(t,r)=>{if(!t)return;let n=Ym(t),i=e.app.metadataCache.getFirstLinkpathDest(n.root,e.file.path);if(r.fileAccessor={target:n.root,isEmbed:!1},i){let a=fg(e,i);r.fileMetadata=a.fileMetadata,r.fileMetadataOrder=a.fileMetadataOrder}}),M_((t,r)=>{if(!t.url||/:\/\//.test(t.url)||!/.md$/.test(t.url))return;let n=e.app.metadataCache.getFirstLinkpathDest(decodeURIComponent(t.url),e.file.path);if(r)t.type="embedLink",t.fileAccessor={target:decodeURIComponent(t.url),isEmbed:!0,stats:n.stat};else if(t.fileAccessor={target:decodeURIComponent(t.url),isEmbed:!1},n){let i=fg(e,n);t.fileMetadata=i.fileMetadata,t.fileMetadataOrder=i.fileMetadataOrder}}),F_(),__()]}function R_(e,t){let r=IB(t),i={...AB(t)},a={};return Object.keys(r).forEach(o=>{if(o===_t){let s=r[o]==="basic"?"board":r[o];i[o]=s,a[o]=s}else Yx.has(o)?i[o]=r[o]:a[o]=r[o]}),e.compileSettings(i),{settings:i,frontmatter:a,ast:ff(t,{extensions:[ky(["yaml"]),...P_(e)],mdastExtensions:[Sy(["yaml"]),...N_(e)]})}}function Cy(e,t){return ff(t,{extensions:P_(e),mdastExtensions:N_(e)})}function gf(e,t,r){var v;let n=e.getSetting("move-tags"),i=e.getSetting("move-dates"),a=r.children.first(),o=r.children.last(),s=a.type==="paragraph"?ef(a).start:a.position.start.offset,u=o.type==="paragraph"?ef(o).end:o.position.end.offset,l={start:s,end:u},c=oy(t,l);c==="["+(r.checked?r.checkChar:" ")+"]"&&(c="");let d=c,m="";Xd(r,["text","wikilink","embedWikilink","image","inlineCode","code","hashtag"],(D,I,C)=>{var x,O;D.type==="hashtag"?(O=(x=C.children.first())==null?void 0:x.value)!=null&&O.startsWith("```")||(m+=" #"+D.value):m+=D.value||D.alt||""});let h={titleRaw:qk(Eg(Dg(c))),blockId:void 0,title:"",titleSearch:m,titleSearchRaw:m,metadata:{dateStr:void 0,date:void 0,time:void 0,timeStr:void 0,tags:[],fileAccessor:void 0,file:void 0,fileMetadata:void 0,fileMetadataOrder:void 0},checked:r.checked,checkChar:r.checked&&r.checkChar||" "};Xd(r,D=>D.type!=="paragraph",(D,I,C)=>{var O,A;let x=D;if(x.type==="blockid")return h.blockId=x.value,!0;if(x.type==="hashtag"&&!((A=(O=C.children.first())==null?void 0:O.value)!=null&&A.startsWith("```")))return h.metadata.tags||(h.metadata.tags=[]),h.metadata.tags.push("#"+x.value),n&&(d=xd(d,{start:D.position.start.offset-l.start,end:D.position.end.offset-l.start})),!0;if(x.type==="date"||x.type==="dateLink")return h.metadata.dateStr=x.date,i&&(d=xd(d,{start:D.position.start.offset-l.start,end:D.position.end.offset-l.start})),!0;if(x.type==="time")return h.metadata.timeStr=x.time,i&&(d=xd(d,{start:D.position.start.offset-l.start,end:D.position.end.offset-l.start})),!0;if(x.type==="embedWikilink")return h.metadata.fileAccessor=x.fileAccessor,!0;if(x.type==="wikilink"||x.type==="link"&&x.fileAccessor)return h.metadata.fileAccessor=x.fileAccessor,h.metadata.fileMetadata=x.fileMetadata,h.metadata.fileMetadataOrder=x.fileMetadataOrder,!0;if(x.type==="embedLink")return h.metadata.fileAccessor=x.fileAccessor,!0}),h.title=$C(e,Eg(Kk(d)));let g=h.title.indexOf(` +`),y=gb(h.title,!0);if(y!=null&&y.length){let D=h.metadata.inlineMetadata=y.reduce((x,O)=>(yi.has(O.key)?(g<=0||O.end<g)&&x.push(O):x.push(O),x),[]),I=e.getSetting("move-task-metadata"),C=e.getSetting("inline-metadata-position")!=="body";if(I||C){let x=h.title;for(let O of[...D].reverse()){let A=yi.has(O.key);A&&!I||!A&&!C||(x=x.slice(0,O.start)+x.slice(O.end))}h.title=x}}return(v=h.metadata.tags)==null||v.sort(fr),h}function OB(e,t,r){if(e.type!=="heading"||_s(e,{includeImageAlt:!1})!==R("Archive"))return!1;let n=HC(t,r);return n&&n.type==="thematicBreak"}function B_(e,t,r,n,i){let a=[],o=[];return n.children.forEach((s,u)=>{if(s.type==="heading"){let l=OB(s,n.children,u),c=ef(s),d=oy(i,c),m=!1,h=BC(n.children,u,"list",g=>{if(g.type==="heading")return!1;if(g.type==="paragraph"){let y=_s(g);if(y.startsWith("%% kanban:settings"))return!1;if(y===R("Complete"))return m=!0,!0}return!0});if(l&&h){o.push(...h.children.map(g=>({...Pc,id:et(),data:gf(e,i,g)})));return}h?a.push({...Ea,children:h.children.map(g=>{let y=gf(e,i,g);return{...Pc,id:et(),data:y}}),id:et(),data:{...co(d),shouldMarkItemsComplete:m}}):a.push({...Ea,children:[],id:et(),data:{...co(d),shouldMarkItemsComplete:m}})}}),{...Nc,id:e.file.path,children:a,data:{settings:t,frontmatter:r,archive:o,isSearching:!1,errors:[]}}}function _y(e,t,r){let n=`- [${t.data.checkChar}] ${Sg(Cd(r),t)}`,i=Cy(e,n),a=gf(e,n,i.children[0].children[0]),o=(0,pf.default)(t,{data:{$set:a}});try{ql(e,o)}catch(s){console.error(s)}return o}function V_(e,t,r,n){let i=`- [${r}] ${Cd(t)}`,a=Cy(e,i),o=gf(e,i,a.children[0].children[0]);o.forceEditMode=!!n;let s={...Pc,id:et(),data:o};try{ql(e,s)}catch(u){console.error(u)}return s}function $_(e,t){try{return(0,pf.default)(t,{children:{$set:t.children.map(r=>(0,pf.default)(r,{children:{$set:r.children.map(n=>_y(e,n,n.data.titleRaw))}}))}})}catch(r){throw e.setError(r),r}}function U_(e){return`- [${e.data.checkChar}] ${Sg(Cd(e.data.titleRaw),e)}`}function LB(e){let t=[];return t.push(`## ${jk(cd(e.data.title,e.data.maxItems))}`),t.push(""),e.data.shouldMarkItemsComplete&&t.push(gk),e.children.forEach(r=>{t.push(U_(r))}),t.push(""),t.push(""),t.push(""),t.join(` +`)}function PB(e){if(e.length){let t=[yk,"",`## ${R("Archive")}`,""];return e.forEach(r=>{t.push(U_(r))}),t.join(` +`)}return""}function W_(e){let t=e.children.reduce((n,i)=>n+LB(i),"");return["---","",(0,H_.stringifyYaml)(e.data.frontmatter),"---","",""].join(` +`)+t+PB(e.data.archive)+vk(e)}var NB=["id","date","time","titleSearch","titleSearchRaw","file"],yf=class{constructor(t){this.stateManager=t}newItem(t,r,n){return V_(this.stateManager,t,r,n)}updateItemContent(t,r){return _y(this.stateManager,t,r)}boardToMd(t){return W_(t)}mdToBoard(t){let{ast:r,settings:n,frontmatter:i}=R_(this.stateManager,t),a=B_(this.stateManager,n,i,r,t),{state:o}=this.stateManager,s=(0,z_.getAPI)();if(!this.stateManager.hasError()&&o){let u=OC(o,a,c=>NB.includes(c.last()),c=>c?c instanceof Y_.TFile?c.path:Ni(c)||Array.isArray(c)?String(c):s&&!s.value.isObject(c)?s.value.toString(c):String(c):String(c)),l=PC(o,u);return WC(this.stateManager,l,u)}return UC(this.stateManager,a)}reparseBoard(){return $_(this.stateManager,this.stateManager.state)}};var vf=class{constructor(t,r,n,i,a){this.stateReceivers=[];this.settingsNotifiers=new Map;this.viewSet=new Set;this.compiledSettings={};this.getSetting=(t,r)=>{var n;return(r==null?void 0:r[t])!==void 0?r[t]:((n=this.compiledSettings)==null?void 0:n[t])!==void 0?this.compiledSettings[t]:this.getSettingRaw(t)};this.getSettingRaw=(t,r)=>{var n,i,a;return(r==null?void 0:r[t])!==void 0?r[t]:((a=(i=(n=this.state)==null?void 0:n.data)==null?void 0:i.settings)==null?void 0:a[t])!==void 0?this.state.data.settings[t]:this.getGlobalSetting(t)};this.getGlobalSetting=t=>{let r=this.getGlobalSettings();return(r==null?void 0:r[t])!==void 0?r[t]:null};this.app=t,this.file=r.file,this.onEmpty=i,this.getGlobalSettings=a,this.parser=new yf(this),this.registerView(r,n,!0)}getAView(){return this.viewSet.values().next().value}hasError(){var t,r,n;return!!((n=(r=(t=this.state)==null?void 0:t.data)==null?void 0:r.errors)!=null&&n.length)}async registerView(t,r,n){this.viewSet.has(t)||this.viewSet.add(t),await new Promise(i=>activeWindow.setTimeout(i,10)),n?await this.newBoard(t,r):await t.prerender(this.state),t.populateViewState(this.state.data.settings)}unregisterView(t){this.viewSet.has(t)&&(this.viewSet.delete(t),this.viewSet.size===0&&this.onEmpty())}buildSettingRetrievers(){return{getGlobalSettings:this.getGlobalSettings,getGlobalSetting:this.getGlobalSetting,getSetting:this.getSetting}}async newBoard(t,r){try{let n=this.getParsedBoard(r);await t.prerender(n),this.setState(n,!1)}catch(n){this.setError(n)}}saveToDisk(){if(this.state.data.errors.length>0)return;let t=this.getAView();if(t){let r=this.parser.boardToMd(this.state);t.requestSaveToDisk(r),this.viewSet.forEach(n=>{n.data=r})}}softRefresh(){this.stateReceivers.forEach(t=>t({...this.state}))}forceRefresh(){if(this.state)try{this.compileSettings(),this.state=this.parser.reparseBoard(),this.stateReceivers.forEach(t=>t(this.state)),this.settingsNotifiers.forEach(t=>{t.forEach(r=>r())}),this.viewSet.forEach(t=>t.initHeaderButtons())}catch(t){console.error(t),this.setError(t)}}setState(t,r=!0){var n;try{let i=(n=this.state)==null?void 0:n.data.settings,a=typeof t=="function"?t(this.state):t,o=a==null?void 0:a.data.settings;i&&o&&bk(i,o)?(this.state=(0,Ps.default)(this.state,{data:{settings:{$set:o}}}),this.compileSettings(),this.state=this.parser.reparseBoard()):(this.state=a,this.compileSettings()),this.viewSet.forEach(s=>{s.initHeaderButtons(),s.validatePreviewCache(a)}),r&&this.saveToDisk(),this.stateReceivers.forEach(s=>s(this.state)),i!==o&&o&&this.settingsNotifiers.forEach((s,u)=>{(!i&&o||i[u]!==o[u])&&s.forEach(l=>l())})}catch(i){console.error(i),this.setError(i)}}useState(){let[t,r]=Ne(this.state);return Ae(()=>(this.stateReceivers.push(n=>r(n)),r(this.state),()=>{this.stateReceivers.remove(r)}),[]),t}useSetting(t){let[r,n]=Ne(this.getSetting(t));return Ae(()=>{let i=()=>n(this.getSetting(t));return this.settingsNotifiers.has(t)?this.settingsNotifiers.get(t).push(i):this.settingsNotifiers.set(t,[i]),()=>{this.settingsNotifiers.get(t).remove(i)}},[]),r}compileSettings(t){var l,c,d,m,h,g,y,v,D,I;let r=this.getGlobalSetting("metadata-keys")||[],n=this.getSettingRaw("metadata-keys",t)||[],i=Array.from(new Set([...r,...n])),a=this.getSettingRaw("date-format",t)||ja(this.app),o=this.getSettingRaw("date-display-format",t)||a,s=this.getSettingRaw("time-format",t)||Ho(this.app),u=this.getSettingRaw("archive-date-format",t)||`${a} ${s}`;this.compiledSettings={[_t]:this.getSettingRaw(_t,t)||"board","date-format":a,"date-display-format":o,"date-time-display-format":o+" "+s,"date-trigger":this.getSettingRaw("date-trigger",t)||Ad,"inline-metadata-position":this.getSettingRaw("inline-metadata-position",t)||Ul,"time-format":s,"time-trigger":this.getSettingRaw("time-trigger",t)||Od,"link-date-to-daily-note":this.getSettingRaw("link-date-to-daily-note",t),"move-dates":this.getSettingRaw("move-dates",t),"move-tags":this.getSettingRaw("move-tags",t),"move-task-metadata":this.getSettingRaw("move-task-metadata",t),"metadata-keys":i,"archive-date-separator":this.getSettingRaw("archive-date-separator")||"","archive-date-format":u,"show-add-list":(l=this.getSettingRaw("show-add-list",t))!=null?l:!0,"show-archive-all":(c=this.getSettingRaw("show-archive-all",t))!=null?c:!0,"show-view-as-markdown":(d=this.getSettingRaw("show-view-as-markdown",t))!=null?d:!0,"show-board-settings":(m=this.getSettingRaw("show-board-settings",t))!=null?m:!0,"show-search":(h=this.getSettingRaw("show-search",t))!=null?h:!0,"show-set-view":(g=this.getSettingRaw("show-set-view",t))!=null?g:!0,"tag-colors":(y=this.getSettingRaw("tag-colors",t))!=null?y:[],"tag-sort":(v=this.getSettingRaw("tag-sort",t))!=null?v:[],"date-colors":(D=this.getSettingRaw("date-colors",t))!=null?D:[],"tag-action":(I=this.getSettingRaw("tag-action",t))!=null?I:"obsidian"}}getParsedBoard(t){let r=t.trim(),n={...Nc,id:this.file.path,children:[],data:{archive:[],settings:{[_t]:"board"},frontmatter:{},isSearching:!1,errors:[]}};try{r&&(n=this.parser.mdToBoard(r))}catch(i){console.error(i),n=(0,Ps.default)(n,{data:{errors:{$push:[{description:i.toString(),stack:i.stack}]}}})}return n}setError(t){this.setState((0,Ps.default)(this.state,{data:{errors:{$push:[{description:t.toString(),stack:t.stack}]}}}),!1)}onFileMetadataChange(){this.reparseBoardFromMd()}async reparseBoardFromMd(){try{this.setState(this.getParsedBoard(this.getAView().data),!1)}catch(t){console.error(t),this.setError(t)}}async archiveCompletedCards(){let t=this.state,r=[],n=!!this.getSetting("archive-with-date"),i=this.getSetting("archive-date-separator"),a=this.getSetting("archive-date-format"),o=this.getSetting("append-archive-date"),s=l=>{let c=[(0,K_.moment)().format(a)];i&&c.push(i),c.push(l.data.titleRaw),o&&c.reverse();let d=c.join(" ");return this.parser.updateItemContent(l,d)},u=t.children.map(l=>(0,Ps.default)(l,{children:{$set:l.children.filter(c=>{let d=c.data.checked&&c.data.checkChar===Zn();return(l.data.shouldMarkItemsComplete||d)&&r.push(c),!d&&!l.data.shouldMarkItemsComplete})}}));try{this.setState((0,Ps.default)(t,{children:{$set:u},data:{archive:{$push:n?await Promise.all(r.map(l=>s(l))):r}}}))}catch(l){this.setError(l)}}getNewItem(t,r,n){return this.parser.newItem(t,r,n)}updateItemContent(t,r){return this.parser.updateItemContent(t,r)}};function RB(e){let t=e.embedRegistry.embedByExtension.md({app:e,containerEl:createDiv(),state:{}},null,"");t.load(),t.editable=!0,t.showEditor();let r=Object.getPrototypeOf(Object.getPrototypeOf(t.editMode)).constructor;return t.unload(),r}var wf=class extends Rn.Plugin{constructor(){super(...arguments);this.settings={};this.kanbanFileModes={};this.stateManagers=new Map;this.windowRegistry=new Map;this._loaded=!1;this.isShiftPressed=!1;this.handleShift=r=>{this.isShiftPressed=r.shiftKey}}async loadSettings(){this.settings=Object.assign({},await this.loadData())}async saveSettings(){await this.saveData(this.settings)}unload(){super.unload(),Promise.all(this.app.workspace.getLeavesOfType(qr).map(r=>(this.kanbanFileModes[r.id]="markdown",this.setMarkdownView(r))))}onunload(){this.MarkdownEditor=null,this.windowRegistry.forEach((r,n)=>{r.viewStateReceivers.forEach(i=>i([])),this.unmount(n)}),this.unmount(window),this.stateManagers.clear(),this.windowRegistry.clear(),this.kanbanFileModes={},this.app.workspace.unregisterHoverLinkSource(_t)}async onload(){var r,n;await this.loadSettings(),this.MarkdownEditor=RB(this.app),this.registerEditorSuggest(new nd(this.app,this)),this.registerEditorSuggest(new td(this.app,this)),this.registerEvent(this.app.workspace.on("window-open",(i,a)=>{this.mount(a)})),this.registerEvent(this.app.workspace.on("window-close",(i,a)=>{this.unmount(a)})),this.settingsTab=new Ud(this,{onSettingsChange:async i=>{this.settings=i,await this.saveSettings(),this.stateManagers.forEach(a=>{a.forceRefresh()})}}),this.addSettingTab(this.settingsTab),this.registerView(qr,i=>new pn(i,this)),this.registerMonkeyPatches(),this.registerCommands(),this.registerEvents(),this.mount(window),(n=(r=this.app.workspace.floatingSplit)==null?void 0:r.children)==null||n.forEach(i=>{this.mount(i.win)}),this.registerDomEvent(window,"keydown",this.handleShift),this.registerDomEvent(window,"keyup",this.handleShift),this.addRibbonIcon(ho,R("Create new board"),()=>{this.newKanban()})}getKanbanViews(r){let n=this.windowRegistry.get(r);return n?Array.from(n.viewMap.values()):[]}getKanbanView(r,n){let i=this.windowRegistry.get(n);if(i!=null&&i.viewMap.has(r))return i.viewMap.get(r);for(let a of this.windowRegistry.values())if(a.viewMap.has(r))return a.viewMap.get(r);return null}getStateManager(r){return this.stateManagers.get(r)}getStateManagerFromViewID(r,n){let i=this.getKanbanView(r,n);return i?this.stateManagers.get(i.file):null}useKanbanViews(r){let[n,i]=Ne(this.getKanbanViews(r));return Ae(()=>{let a=this.windowRegistry.get(r);return a==null||a.viewStateReceivers.push(i),()=>{a==null||a.viewStateReceivers.remove(i)}},[r]),n}addView(r,n,i){let a=r.getWindow(),o=this.windowRegistry.get(a);if(!o)return;o.viewMap.has(r.id)||o.viewMap.set(r.id,r);let s=r.file;this.stateManagers.has(s)?this.stateManagers.get(s).registerView(r,n,i):this.stateManagers.set(s,new vf(this.app,r,n,()=>this.stateManagers.delete(s),()=>this.settings)),o.viewStateReceivers.forEach(u=>u(this.getKanbanViews(a)))}removeView(r){let n=Array.from(this.windowRegistry.entries()).find(([,s])=>s.viewMap.has(r.id),[]);if(!n)return;let[i,a]=n,o=r.file;a.viewMap.has(r.id)&&a.viewMap.delete(r.id),this.stateManagers.has(o)&&(this.stateManagers.get(o).unregisterView(r),a.viewStateReceivers.forEach(s=>s(this.getKanbanViews(i))))}handleViewFileRename(r,n){let i=r.getWindow();if(!this.windowRegistry.has(i))return;let a=this.windowRegistry.get(i),o=`${r.leaf.id}:::${n}`;a.viewMap.has(o)&&a.viewMap.delete(o),a.viewMap.has(r.id)||a.viewMap.set(r.id,r),r.isPrimary&&this.getStateManager(r.file).softRefresh()}mount(r){if(this.windowRegistry.has(r))return;let n=r.document.body.createDiv();this.windowRegistry.set(r,{viewMap:new Map,viewStateReceivers:[],appRoot:n}),Li(cx(r,this),n)}unmount(r){if(!this.windowRegistry.has(r))return;let n=this.windowRegistry.get(r);for(let i of n.viewMap.values())this.removeView(i);Pi(n.appRoot),n.appRoot.remove(),n.viewMap.clear(),n.viewStateReceivers.length=0,n.appRoot=null,this.windowRegistry.delete(r)}async setMarkdownView(r,n=!0){await r.setViewState({type:"markdown",state:r.view.getState(),popstate:!0},{focus:n})}async setKanbanView(r){await r.setViewState({type:qr,state:r.view.getState(),popstate:!0})}async newKanban(r){var i;let n=r||this.app.fileManager.getNewFileParent(((i=app.workspace.getActiveFile())==null?void 0:i.path)||"");try{let a=await app.fileManager.createNewMarkdownFile(n,R("Untitled Kanban"));await this.app.vault.modify(a,dg),await this.app.workspace.getLeaf().setViewState({type:qr,state:{file:a.path}})}catch(a){console.error("Error creating kanban board:",a)}}registerEvents(){this.registerEvent(this.app.workspace.on("file-menu",(n,i,a,o)=>{if(a==="link-context-menu")return;let s=i instanceof Rn.TFile,u=i instanceof Rn.TFolder,l=(o==null?void 0:o.view)instanceof Rn.MarkdownView,c=(o==null?void 0:o.view)instanceof pn;if(u){n.addItem(d=>{d.setSection("action-primary").setTitle(R("New kanban board")).setIcon(ho).onClick(()=>this.newKanban(i))});return}if(!Rn.Platform.isMobile&&s&&o&&a==="sidebar-context-menu"&&hg(i)){let d=this.getKanbanViews(Dn(o.view.containerEl)),m=!1;for(let h of d)if(h.file===i){h.onPaneMenu(n,"more-options",!1),m=!0;break}if(!m){n.addItem(h=>{h.setTitle(R("Open as kanban board")).setIcon(ho).setSection("pane").onClick(()=>{this.kanbanFileModes[o.id||i.path]=qr,this.setKanbanView(o)})});return}}if(l&&s&&["more-options","pane-more-options","tab-header"].includes(a)&&hg(i)&&n.addItem(d=>{d.setTitle(R("Open as kanban board")).setIcon(ho).setSection("pane").onClick(()=>{this.kanbanFileModes[o.id||i.path]=qr,this.setKanbanView(o)})}),s&&c&&(["pane-more-options","tab-header"].includes(a)&&n.addItem(d=>{d.setTitle(R("Open as markdown")).setIcon(ho).setSection("pane").onClick(()=>{this.kanbanFileModes[o.id||i.path]="markdown",this.setMarkdownView(o)})}),Rn.Platform.isMobile)){let d=this.stateManagers.get(i),m=o.view,h=m.viewSettings[_t]||d.getSetting(_t);n.addItem(g=>{g.setTitle(R("Add a list")).setIcon("lucide-plus-circle").setSection("pane").onClick(()=>{m.emitter.emit("showLaneForm",void 0)})}).addItem(g=>{g.setTitle(R("Archive completed cards")).setIcon("lucide-archive").setSection("pane").onClick(()=>{d.archiveCompletedCards()})}).addItem(g=>{g.setTitle(R("Archive completed cards")).setIcon("lucide-archive").setSection("pane").onClick(()=>{this.stateManagers.get(i).archiveCompletedCards()})}).addItem(g=>g.setTitle(R("View as board")).setSection("pane").setIcon("lucide-trello").setChecked(h==="basic"||h==="board").onClick(()=>m.setView("board"))).addItem(g=>g.setTitle(R("View as table")).setSection("pane").setIcon("lucide-table").setChecked(h==="table").onClick(()=>m.setView("table"))).addItem(g=>g.setTitle(R("View as list")).setSection("pane").setIcon("lucide-server").setChecked(h==="list").onClick(()=>m.setView("list"))).addItem(g=>g.setTitle(R("Open board settings")).setSection("pane").setIcon("lucide-settings").onClick(()=>m.getBoardSettings()))}})),this.registerEvent(app.vault.on("rename",(n,i)=>{app.workspace.getLeavesOfType(qr).forEach(o=>{o.view.handleRename(n.path,i)})}));let r=(0,Rn.debounce)(n=>{this.stateManagers.forEach(i=>{i.file!==n&&i.onFileMetadataChange()})},2e3,!0);this.registerEvent(app.vault.on("modify",n=>{n instanceof Rn.TFile&&r(n)})),this.registerEvent(app.metadataCache.on("changed",n=>{r(n)})),this.registerEvent(app.metadataCache.on("dataview:metadata-change",(n,i)=>{r(i)})),this.registerEvent(app.metadataCache.on("dataview:api-ready",()=>{this.stateManagers.forEach(n=>{n.forceRefresh()})})),app.workspace.registerHoverLinkSource(_t,{display:"Kanban",defaultMod:!0})}registerCommands(){this.addCommand({id:"create-new-kanban-board",name:R("Create new board"),callback:()=>this.newKanban()}),this.addCommand({id:"archive-completed-cards",name:R("Archive completed cards in active board"),checkCallback:r=>{let n=app.workspace.getActiveViewOfType(pn);if(!n)return!1;if(r)return!0;this.stateManagers.get(n.file).archiveCompletedCards()}}),this.addCommand({id:"toggle-kanban-view",name:R("Toggle between Kanban and markdown mode"),checkCallback:r=>{let n=app.workspace.getActiveFile();if(!n)return!1;let i=app.metadataCache.getFileCache(n),a=!!(i!=null&&i.frontmatter)&&!!i.frontmatter[_t];if(r)return a;let o=app.workspace.getActiveViewOfType(pn);if(o)this.kanbanFileModes[o.leaf.id||n.path]="markdown",this.setMarkdownView(o.leaf);else if(a){let s=app.workspace.getActiveViewOfType(Rn.MarkdownView);s&&(this.kanbanFileModes[s.leaf.id||n.path]=qr,this.setKanbanView(s.leaf))}}}),this.addCommand({id:"convert-to-kanban",name:R("Convert empty note to Kanban"),checkCallback:r=>{let n=app.workspace.getActiveViewOfType(Rn.MarkdownView);if(!n)return!1;let i=n.file.stat.size===0;if(r)return i;i&&app.vault.modify(n.file,dg).then(()=>{this.setKanbanView(n.leaf)}).catch(a=>console.error(a))}}),this.addCommand({id:"add-kanban-lane",name:R("Add a list"),checkCallback:r=>{let n=app.workspace.getActiveViewOfType(pn);if(r)return n&&n instanceof pn;n&&n instanceof pn&&n.emitter.emit("showLaneForm",void 0)}}),this.addCommand({id:"view-board",name:R("View as board"),checkCallback:r=>{let n=app.workspace.getActiveViewOfType(pn);if(r)return n&&n instanceof pn;n&&n instanceof pn&&n.setView("board")}}),this.addCommand({id:"view-table",name:R("View as table"),checkCallback:r=>{let n=app.workspace.getActiveViewOfType(pn);if(r)return n&&n instanceof pn;n&&n instanceof pn&&n.setView("table")}}),this.addCommand({id:"view-list",name:R("View as list"),checkCallback:r=>{let n=app.workspace.getActiveViewOfType(pn);if(r)return n&&n instanceof pn;n&&n instanceof pn&&n.setView("list")}}),this.addCommand({id:"open-board-settings",name:R("Open board settings"),checkCallback:r=>{let n=app.workspace.getActiveViewOfType(pn);if(!n)return!1;if(r)return!0;n.getBoardSettings()}})}registerMonkeyPatches(){let r=this;this.app.workspace.onLayoutReady(()=>{this.register(fu(app.commands,{executeCommand(n){return function(i){let a=app.workspace.getActiveViewOfType(pn);return a&&(i!=null&&i.id)&&a.emitter.emit("hotkey",{commandId:i.id}),n.call(this,i)}}}))}),this.register(fu(this.app.workspace,{setActiveLeaf(n){return function(...i){n.apply(this,i);let a=this.getActiveViewOfType(pn);a!=null&&a.activeEditor&&(this.activeEditor=a.activeEditor)}}})),this.register(fu(Rn.WorkspaceLeaf.prototype,{detach(n){return function(){var a;let i=(a=this.view)==null?void 0:a.getState();return i!=null&&i.file&&r.kanbanFileModes[this.id||i.file]&&delete r.kanbanFileModes[this.id||i.file],n.apply(this)}},setViewState(n){return function(i,...a){var o;if(r._loaded&&i.type==="markdown"&&((o=i.state)!=null&&o.file)&&r.kanbanFileModes[this.id||i.state.file]!=="markdown"){let s=r.app.metadataCache.getCache(i.state.file);if(s!=null&&s.frontmatter&&s.frontmatter[_t]){let u={...i,type:qr};return r.kanbanFileModes[i.state.file]=qr,n.apply(this,[u,...a])}}return n.apply(this,[i,...a])}}}))}}; +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org> + * @license MIT + */ +/*! Bundled license information: + +mark.js/dist/mark.js: + (*!*************************************************** + * mark.js v8.11.1 + * https://markjs.io/ + * Copyright (c) 2014–2018, Julian Kühnel + * Released under the MIT license https://git.io/vwTVl + *****************************************************) + +moment/moment.js: + (*! moment.js *) + (*! version : 2.29.4 *) + (*! authors : Tim Wood, Iskren Chernev, Moment.js contributors *) + (*! license : MIT *) + (*! momentjs.com *) + +choices.js/public/assets/scripts/choices.js: + (*! choices.js v9.0.1 | © 2019 Josh Johnson | https://github.com/jshjohnson/Choices#readme *) + (*! + * Fuse.js v3.4.5 - Lightweight fuzzy-search (http://fusejs.io) + * + * Copyright (c) 2012-2017 Kirollos Risk (http://kiro.me) + * All Rights Reserved. Apache Software License 2.0 + * + * http://www.apache.org/licenses/LICENSE-2.0 + *) + +is-plain-object/dist/is-plain-object.mjs: + (*! + * is-plain-object <https://github.com/jonschlinkert/is-plain-object> + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + *) + +@tanstack/table-core/build/lib/index.mjs: + (** + * table-core + * + * Copyright (c) TanStack + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + *) + +@tanstack/react-table/build/lib/index.mjs: + (** + * react-table + * + * Copyright (c) TanStack + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + *) + +@tanstack/match-sorter-utils/build/lib/index.mjs: + (** + * match-sorter-utils + * + * Copyright (c) TanStack + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + *) + (** + * @name match-sorter + * @license MIT license. + * @copyright (c) 2099 Kent C. Dodds + * @author Kent C. Dodds <me@kentcdodds.com> (https://kentcdodds.com) + *) +*/ + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-kanban/manifest.json b/.obsidian/plugins/obsidian-kanban/manifest.json new file mode 100644 index 0000000..68e9654 --- /dev/null +++ b/.obsidian/plugins/obsidian-kanban/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "obsidian-kanban", + "name": "Kanban", + "version": "2.0.51", + "minAppVersion": "1.0.0", + "description": "Create markdown-backed Kanban boards in Obsidian.", + "author": "mgmeyers", + "authorUrl": "https://github.com/mgmeyers/obsidian-kanban", + "helpUrl": "https://publish.obsidian.md/kanban/Obsidian+Kanban+Plugin", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/obsidian-kanban/styles.css b/.obsidian/plugins/obsidian-kanban/styles.css new file mode 100644 index 0000000..8a1eaf4 --- /dev/null +++ b/.obsidian/plugins/obsidian-kanban/styles.css @@ -0,0 +1 @@ +.choices{position:relative;margin-bottom:24px;font-size:16px}.choices:focus{outline:none}.choices:last-child{margin-bottom:0}.choices.is-disabled .choices__inner,.choices.is-disabled .choices__input{background-color:#eaeaea;cursor:not-allowed;-webkit-user-select:none;-ms-user-select:none;user-select:none}.choices.is-disabled .choices__item{cursor:not-allowed}.choices [hidden]{display:none!important}.choices[data-type*=select-one]{cursor:pointer}.choices[data-type*=select-one] .choices__inner{padding-bottom:7.5px}.choices[data-type*=select-one] .choices__input{display:block;width:100%;padding:10px;border-bottom:1px solid #dddddd;background-color:#fff;margin:0}.choices[data-type*=select-one] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMSAyMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yLjU5Mi4wNDRsMTguMzY0IDE4LjM2NC0yLjU0OCAyLjU0OEwuMDQ0IDIuNTkyeiIvPjxwYXRoIGQ9Ik0wIDE4LjM2NEwxOC4zNjQgMGwyLjU0OCAyLjU0OEwyLjU0OCAyMC45MTJ6Ii8+PC9nPjwvc3ZnPg==);padding:0;background-size:8px;position:absolute;top:50%;right:0;margin-top:-10px;margin-right:25px;height:20px;width:20px;border-radius:10em;opacity:.5}.choices[data-type*=select-one] .choices__button:hover,.choices[data-type*=select-one] .choices__button:focus{opacity:1}.choices[data-type*=select-one] .choices__button:focus{box-shadow:0 0 0 2px #00bcd4}.choices[data-type*=select-one] .choices__item[data-value=""] .choices__button{display:none}.choices[data-type*=select-one]:after{content:"";height:0;width:0;border-style:solid;border-color:#333333 transparent transparent transparent;border-width:5px;position:absolute;right:11.5px;top:50%;margin-top:-2.5px;pointer-events:none}.choices[data-type*=select-one].is-open:after{border-color:transparent transparent #333333 transparent;margin-top:-7.5px}.choices[data-type*=select-one][dir=rtl]:after{left:11.5px;right:auto}.choices[data-type*=select-one][dir=rtl] .choices__button{right:auto;left:0;margin-left:25px;margin-right:0}.choices[data-type*=select-multiple] .choices__inner,.choices[data-type*=text] .choices__inner{cursor:text}.choices[data-type*=select-multiple] .choices__button,.choices[data-type*=text] .choices__button{position:relative;display:inline-block;margin:0 -4px 0 8px;padding-left:16px;border-left:1px solid #008fa1;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMSAyMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yLjU5Mi4wNDRsMTguMzY0IDE4LjM2NC0yLjU0OCAyLjU0OEwuMDQ0IDIuNTkyeiIvPjxwYXRoIGQ9Ik0wIDE4LjM2NEwxOC4zNjQgMGwyLjU0OCAyLjU0OEwyLjU0OCAyMC45MTJ6Ii8+PC9nPjwvc3ZnPg==);background-size:8px;width:8px;line-height:1;opacity:.75;border-radius:0}.choices[data-type*=select-multiple] .choices__button:hover,.choices[data-type*=select-multiple] .choices__button:focus,.choices[data-type*=text] .choices__button:hover,.choices[data-type*=text] .choices__button:focus{opacity:1}.choices__inner{display:inline-block;vertical-align:top;width:100%;background-color:#f9f9f9;padding:7.5px 7.5px 3.75px;border:1px solid #dddddd;border-radius:2.5px;font-size:14px;min-height:44px;overflow:hidden}.is-focused .choices__inner,.is-open .choices__inner{border-color:#b7b7b7}.is-open .choices__inner{border-radius:2.5px 2.5px 0 0}.is-flipped.is-open .choices__inner{border-radius:0 0 2.5px 2.5px}.choices__list{margin:0;padding-left:0;list-style:none}.choices__list--single{display:inline-block;padding:4px 16px 4px 4px;width:100%}[dir=rtl] .choices__list--single{padding-right:4px;padding-left:16px}.choices__list--single .choices__item{width:100%}.choices__list--multiple{display:inline}.choices__list--multiple .choices__item{display:inline-block;vertical-align:middle;border-radius:20px;padding:4px 10px;font-size:12px;font-weight:500;margin-right:3.75px;margin-bottom:3.75px;background-color:#00bcd4;border:1px solid #00a5bb;color:#fff;word-break:break-all;box-sizing:border-box}.choices__list--multiple .choices__item[data-deletable]{padding-right:5px}[dir=rtl] .choices__list--multiple .choices__item{margin-right:0;margin-left:3.75px}.choices__list--multiple .choices__item.is-highlighted{background-color:#00a5bb;border:1px solid #008fa1}.is-disabled .choices__list--multiple .choices__item{background-color:#aaa;border:1px solid #919191}.choices__list--dropdown{visibility:hidden;z-index:1;position:absolute;width:100%;background-color:#fff;border:1px solid #dddddd;top:100%;margin-top:-1px;border-bottom-left-radius:2.5px;border-bottom-right-radius:2.5px;overflow:hidden;word-break:break-all;will-change:visibility}.choices__list--dropdown.is-active{visibility:visible}.is-open .choices__list--dropdown{border-color:#b7b7b7}.is-flipped .choices__list--dropdown{top:auto;bottom:100%;margin-top:0;margin-bottom:-1px;border-radius:.25rem .25rem 0 0}.choices__list--dropdown .choices__list{position:relative;max-height:300px;overflow:auto;-webkit-overflow-scrolling:touch;will-change:scroll-position}.choices__list--dropdown .choices__item{position:relative;padding:10px;font-size:14px}[dir=rtl] .choices__list--dropdown .choices__item{text-align:right}@media (min-width: 640px){.choices__list--dropdown .choices__item--selectable{padding-right:100px}.choices__list--dropdown .choices__item--selectable:after{content:attr(data-select-text);font-size:12px;opacity:0;position:absolute;right:10px;top:50%;transform:translateY(-50%)}[dir=rtl] .choices__list--dropdown .choices__item--selectable{text-align:right;padding-left:100px;padding-right:10px}[dir=rtl] .choices__list--dropdown .choices__item--selectable:after{right:auto;left:10px}}.choices__list--dropdown .choices__item--selectable.is-highlighted{background-color:#f2f2f2}.choices__list--dropdown .choices__item--selectable.is-highlighted:after{opacity:.5}.choices__item{cursor:default}.choices__item--selectable{cursor:pointer}.choices__item--disabled{cursor:not-allowed;-webkit-user-select:none;-ms-user-select:none;user-select:none;opacity:.5}.choices__heading{font-weight:600;font-size:12px;padding:10px;border-bottom:1px solid #f7f7f7;color:gray}.choices__button{text-indent:-9999px;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background-color:transparent;background-repeat:no-repeat;background-position:center;cursor:pointer}.choices__button:focus{outline:none}.choices__input{display:inline-block;vertical-align:baseline;background-color:#f9f9f9;font-size:14px;margin-bottom:5px;border:0;border-radius:0;max-width:100%;padding:4px 0 4px 2px}.choices__input:focus{outline:0}[dir=rtl] .choices__input{padding-right:2px;padding-left:0}.choices__placeholder{opacity:.5}.flatpickr-calendar{background:transparent;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);box-shadow:1px 0 #e6e6e6,-1px 0 #e6e6e6,0 1px #e6e6e6,0 -1px #e6e6e6,0 3px 13px #00000014}.flatpickr-calendar.open,.flatpickr-calendar.inline{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1);animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none!important;box-shadow:none!important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 #e6e6e6,5px 0 #e6e6e6}.flatpickr-calendar .hasWeeks .dayContainer,.flatpickr-calendar .hasTime .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:before,.flatpickr-calendar:after{position:absolute;display:block;pointer-events:none;border:solid transparent;content:"";height:0;width:0;left:22px}.flatpickr-calendar.rightMost:before,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.arrowRight:after{left:auto;right:22px}.flatpickr-calendar.arrowCenter:before,.flatpickr-calendar.arrowCenter:after{left:50%;right:50%}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:before,.flatpickr-calendar.arrowTop:after{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:before,.flatpickr-calendar.arrowBottom:after{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:transparent;color:#000000e6;fill:#000000e6;height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-prev-month,.flatpickr-months .flatpickr-next-month{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:#000000e6;fill:#000000e6}.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,.flatpickr-months .flatpickr-next-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-prev-month i,.flatpickr-months .flatpickr-next-month i{position:relative}.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,.flatpickr-months .flatpickr-next-month.flatpickr-prev-month{left:0}.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,.flatpickr-months .flatpickr-next-month.flatpickr-next-month{right:0}.flatpickr-months .flatpickr-prev-month:hover,.flatpickr-months .flatpickr-next-month:hover{color:#959ea9}.flatpickr-months .flatpickr-prev-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-prev-month svg,.flatpickr-months .flatpickr-next-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-prev-month svg path,.flatpickr-months .flatpickr-next-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-outer-spin-button,.numInputWrapper input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:#0000001a}.numInputWrapper span:active{background:#0003}.numInputWrapper span:after{display:block;content:"";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:#00000080}.numInputWrapper:hover{background:#0000000d}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translateZ(0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:#0000000d}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\fffd;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:#000000e6}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:#000000e6}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:#00000080;background:transparent;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0;outline:none;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:focus,.flatpickr-current-month .flatpickr-monthDropdown-months:active{outline:none}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:#0000000d}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0}.flatpickr-weekdays{background:transparent;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:transparent;color:#0000008a;line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translateZ(0);opacity:1}.dayContainer+.dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 #e6e6e6}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.today.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day:hover,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.nextMonthDay:hover,.flatpickr-day:focus,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.nextMonthDay:focus{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:hover,.flatpickr-day.today:focus{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 #569ff7}.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange,.flatpickr-day.endRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 #e6e6e6,5px 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.prevMonthDay,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.notAllowed.nextMonthDay{color:#3939394d;background:transparent;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:#3939391a}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 #569ff7,5px 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:#3939394d;background:transparent;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:700}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-time-separator,.flatpickr-time .flatpickr-am-pm{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:700;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time input:hover,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time .flatpickr-am-pm:focus{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translateZ(0)}}@keyframes fpFadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translateZ(0)}}.workspace-leaf-content[data-type=kanban] .view-content{padding:0}.workspace-leaf-content[data-type=kanban]>.view-header{display:flex!important}.kanban-plugin{--lane-width: 272px}.kanban-plugin{contain:content;height:100%;width:100%;position:relative;display:flex;flex-direction:column}.kanban-plugin a.tag,.kanban-plugin__drag-container a.tag{padding-inline:var(--tag-padding-x);padding-block:var(--tag-padding-y)}.kanban-plugin__table-wrapper{height:100%;width:100%;overflow:auto;padding-block-end:40px;--table-column-first-border-width: 0;--table-column-last-border-width: 0;--table-row-last-border-width: 0}.kanban-plugin__table-wrapper table{width:fit-content;margin-block:0;margin-inline:auto;box-shadow:0 0 0 var(--table-border-width) var(--table-border-color)}.kanban-plugin__table-wrapper tr{width:fit-content}.kanban-plugin__table-wrapper th,.kanban-plugin__table-wrapper td{text-align:start;vertical-align:top;font-size:.875rem;padding:0!important;height:1px}.kanban-plugin__table-wrapper th.mod-has-icon .kanban-plugin__table-cell-wrapper,.kanban-plugin__table-wrapper td.mod-has-icon .kanban-plugin__table-cell-wrapper{padding-inline-end:var(--size-2-2)}.kanban-plugin__table-wrapper th .kanban-plugin__table-cell-wrapper,.kanban-plugin__table-wrapper td .kanban-plugin__table-cell-wrapper{height:100%;padding-inline:var(--size-4-2);padding-block:var(--size-2-2)}.kanban-plugin__table-wrapper th .kanban-plugin__item-prefix-button-wrapper input[type=checkbox],.kanban-plugin__table-wrapper td .kanban-plugin__item-prefix-button-wrapper input[type=checkbox]{margin-block:2px}.kanban-plugin__table-wrapper th:has(.markdown-source-view),.kanban-plugin__table-wrapper td:has(.markdown-source-view){--background-primary: var(--background-primary-alt);background:var(--background-primary);outline:2px solid var(--background-modifier-border-focus)}.kanban-plugin__table-wrapper thead tr>th{height:1px;background-color:var(--background-primary);position:sticky;top:0;z-index:1;overflow:visible}.kanban-plugin__table-wrapper thead tr>th:nth-child(2n+2){background-color:var(--background-primary)}.kanban-plugin__table-wrapper thead tr>th .kanban-plugin__table-cell-wrapper{height:100%;padding-block:var(--size-2-2);padding-inline:var(--size-4-2) var(--size-2-2);box-shadow:0 0 0 var(--table-border-width) var(--table-border-color)}.kanban-plugin__table-wrapper .resizer{position:absolute;top:0;height:100%;width:5px;background:var(--table-selection-border-color);cursor:col-resize;user-select:none;touch-action:none}.kanban-plugin__table-wrapper .resizer.ltr{right:0}.kanban-plugin__table-wrapper .resizer.rtl{left:0}.kanban-plugin__table-wrapper .resizer.isResizing{opacity:1}@media (hover: hover){.kanban-plugin__table-wrapper .resizer{opacity:0}.kanban-plugin__table-wrapper .resizer:hover{opacity:1}}.kanban-plugin__table-wrapper .kanban-plugin__item-tags:not(:empty){margin-block-start:-5px}.kanban-plugin__table-wrapper .kanban-plugin__item-metadata-date-relative{display:block}.kanban-plugin__table-wrapper .kanban-plugin__item-input-wrapper,.kanban-plugin__table-wrapper .cm-table-widget,.kanban-plugin__table-wrapper .kanban-plugin__item-title,.kanban-plugin__table-wrapper .kanban-plugin__item-title-wrapper,.kanban-plugin__table-wrapper .kanban-plugin__item-content-wrapper{height:100%}.kanban-plugin__table-wrapper .kanban-plugin__item-title-wrapper{padding:0}.kanban-plugin .markdown-source-view.mod-cm6{display:block;font-size:.875rem}.kanban-plugin .markdown-source-view.mod-cm6 .cm-scroller{overflow:visible}.kanban-plugin__table-header{display:flex;gap:var(--size-4-2);align-items:center;justify-content:space-between}.kanban-plugin__table-header-sort{line-height:1;color:var(--text-faint);padding:2px;border-radius:4px}.kanban-plugin__table-header-sort>span{display:flex}div:hover>.kanban-plugin__table-header-sort{background-color:var(--background-modifier-hover)}.kanban-plugin__cell-flex-wrapper{display:flex;gap:8px;align-items:flex-start;justify-content:space-between}.kanban-plugin__cell-flex-wrapper .lucide-more-vertical{transform:none}.kanban-plugin__icon-wrapper{display:flex;line-height:1}.kanban-plugin__icon-wrapper>.kanban-plugin__icon{display:flex}.kanban-plugin.something-is-dragging{cursor:grabbing;cursor:-webkit-grabbing}.kanban-plugin.something-is-dragging *{pointer-events:none}.kanban-plugin__item button,.kanban-plugin__lane button,.kanban-plugin button{line-height:1;margin:0;transition:.1s color,.1s background-color}.kanban-plugin__search-wrapper{width:100%;position:sticky;top:0;left:0;padding-block:10px;padding-inline:13px;display:flex;justify-content:flex-end;align-items:center;z-index:2;background-color:var(--background-primary)}button.kanban-plugin__search-cancel-button{display:flex;line-height:1;padding:6px;border:1px solid var(--background-modifier-border);background:var(--background-secondary-alt);color:var(--text-muted);margin-block:0;margin-inline:5px 0;font-size:16px}button.kanban-plugin__search-cancel-button .kanban-plugin__icon{display:flex}.kanban-plugin__icon{display:inline-block;line-height:1;--icon-size: 1em}.kanban-plugin__board{display:flex;width:100%;height:100%}.kanban-plugin__board>div{display:flex;align-items:flex-start;justify-content:flex-start;padding:1rem;width:fit-content;height:100%}.kanban-plugin__board.kanban-plugin__vertical>div{height:fit-content;width:100%;flex-direction:column}.is-mobile .view-content:not(.is-mobile-editing) .kanban-plugin__board>div{padding-bottom:calc(1rem + var(--mobile-navbar-height))}.kanban-plugin__board.is-adding-lane>div{padding-inline-end:calc(250px + 1rem)}.kanban-plugin__lane-wrapper{display:flex;flex-shrink:0;margin-inline-end:10px;max-height:100%;width:var(--lane-width)}.kanban-plugin__vertical .kanban-plugin__lane-wrapper{margin-block-end:10px;margin-inline-end:0}.kanban-plugin__lane{width:100%;display:flex;flex-direction:column;background-color:var(--background-secondary);border-radius:6px;border:1px solid var(--background-modifier-border)}.is-dropping>.kanban-plugin__lane{background-color:hsla(var(--interactive-accent-hsl),.15);border-color:hsla(var(--interactive-accent-hsl),1);outline:1px solid hsla(var(--interactive-accent-hsl),1)}.kanban-plugin__placeholder.kanban-plugin__lane-placeholder{height:100%;flex-grow:1;margin-inline-end:5px}.kanban-plugin__lane.is-hidden{display:none}.kanban-plugin__lane button{padding-block:8px;padding-inline:10px}.kanban-plugin__lane-form-wrapper{position:absolute;top:1rem;right:1rem;width:250px;background-color:var(--background-secondary);border-radius:6px;border:2px solid hsla(var(--interactive-accent-hsl),.7);z-index:var(--layer-popover);box-shadow:0 .5px 1px .5px #0000001a,0 2px 10px #0000001a,0 10px 20px #0000001a}.kanban-plugin__lane-input{--font-text-size: var(--font-ui-small);padding-block:var(--size-4-1);padding-inline:var(--size-4-2);background-color:var(--background-primary);border-radius:var(--radius-s)}.kanban-plugin__lane-input-wrapper{padding:10px}.kanban-plugin__item-input-actions,.kanban-plugin__lane-input-actions{display:flex;align-items:flex-start;justify-content:flex-start;padding-block:0 10px;padding-inline:10px}.kanban-plugin__item-input-actions button,.kanban-plugin__lane-input-actions button{display:block;margin-inline-end:5px}button.kanban-plugin__item-action-add,button.kanban-plugin__lane-action-add{background-color:var(--interactive-accent);color:var(--text-on-accent)}button.kanban-plugin__item-action-add:hover,button.kanban-plugin__lane-action-add:hover{background-color:var(--interactive-accent-hover)}.kanban-plugin__lane-header-wrapper{padding-block:8px;padding-inline:8px 12px;display:flex;align-items:center;gap:var(--size-4-1);flex-shrink:0;flex-grow:0;border-bottom:1px solid var(--background-modifier-border)}.collapse-horizontal .kanban-plugin__lane-header-wrapper,.collapse-vertical .kanban-plugin__lane-header-wrapper,.will-prepend .kanban-plugin__lane-header-wrapper{border-bottom:none}.kanban-plugin__lane-wrapper.collapse-horizontal{width:auto}.kanban-plugin__lane-wrapper.collapse-horizontal .kanban-plugin__lane-header-wrapper{writing-mode:vertical-lr}.kanban-plugin__lane-wrapper.collapse-horizontal .kanban-plugin__lane-header-wrapper{gap:var(--size-4-2)}.kanban-plugin__lane-wrapper.collapse-horizontal .kanban-plugin__lane-title-count,.kanban-plugin__lane-wrapper.collapse-horizontal .kanban-plugin__lane-title-text{transform:rotate(180deg)}.kanban-plugin__lane-wrapper.collapse-horizontal .kanban-plugin__lane-settings-button-wrapper{display:none}.kanban-plugin__lane-wrapper.collapse-vertical .kanban-plugin__lane-settings-button-wrapper{visibility:hidden}.kanban-plugin__lane-collapse{flex-grow:0;color:var(--text-faint)}.kanban-plugin__lane-collapse>span{display:flex}.collapse-vertical .kanban-plugin__lane-collapse>span{transform:rotate(-90deg)}.kanban-plugin__lane-grip{cursor:grab;flex-grow:0;color:var(--text-faint)}.kanban-plugin__lane-grip:active{cursor:grabbing}.kanban-plugin__lane-collapse svg{--icon-size: 1rem}.kanban-plugin__lane-grip>svg{height:1rem;display:block}.kanban-plugin__lane-title{font-weight:600;font-size:.875rem;flex-grow:1;width:100%;display:flex;flex-direction:column}.kanban-plugin__lane-title-text{flex-grow:1}div.kanban-plugin__lane-title-count{border-radius:3px;color:var(--text-muted);display:block;font-size:13px;line-height:1;padding:4px}div.kanban-plugin__lane-title-count.wip-exceeded{font-weight:700;color:var(--text-normal);background-color:rgba(var(--background-modifier-error-rgb),.25)}.kanban-plugin__table-cell-wrapper .kanban-plugin__lane-menu,.kanban-plugin__table-cell-wrapper .kanban-plugin__item-prefix-button,.kanban-plugin__item .kanban-plugin__item-prefix-button,.kanban-plugin__item .kanban-plugin__item-postfix-button,.kanban-plugin__lane .kanban-plugin__lane-settings-button{--icon-stroke: 2.5px;font-size:13px;line-height:1;color:var(--text-muted);padding:4px;display:flex;margin-inline-end:-4px}.kanban-plugin__table-cell-wrapper .kanban-plugin__lane-menu.is-enabled,.kanban-plugin__table-cell-wrapper .kanban-plugin__item-prefix-button.is-enabled,.kanban-plugin__item .kanban-plugin__item-prefix-button.is-enabled,.kanban-plugin__item .kanban-plugin__item-postfix-button.is-enabled,.kanban-plugin__lane .kanban-plugin__lane-settings-button.is-enabled{color:var(--text-accent)}.kanban-plugin__table-cell-wrapper .kanban-plugin__lane-menu{color:var(--text-faint);margin-inline-start:2px;margin-inline-end:0px}.kanban-plugin__table-cell-wrapper .kanban-plugin__item-prefix-button,.kanban-plugin__item .kanban-plugin__item-prefix-button{margin-inline-end:4px;margin-inline-start:-4px}.kanban-plugin__table-cell-wrapper button.kanban-plugin__item-prefix-button,.kanban-plugin__item button.kanban-plugin__item-prefix-button{margin-block:4px;margin-inline:0 7px;padding:0}.kanban-plugin__lane-action-wrapper,.kanban-plugin__item-edit-archive-button,.kanban-plugin__item-settings-actions .kanban-plugin__icon,.kanban-plugin__item-edit-archive-button>.kanban-plugin__icon,.kanban-plugin__item-prefix-button>.kanban-plugin__icon,.kanban-plugin__item-postfix-button>.kanban-plugin__icon,.kanban-plugin__lane-settings-button>.kanban-plugin__icon{display:flex}.kanban-plugin__lane-settings-button-wrapper{display:flex;gap:4px}button.kanban-plugin__lane-settings-button+button.kanban-plugin__lane-settings-button{margin-inline-start:2px}.kanban-plugin__lane-settings-button svg{width:1em;height:1em}.kanban-plugin__lane-items-wrapper{margin:4px;height:100%}.kanban-plugin__lane-items{padding:4px;margin-block:0;margin-inline:4px;display:flex;flex-direction:column}.kanban-plugin__lane-items>div{margin-block-start:4px}.kanban-plugin__lane-items>.kanban-plugin__placeholder{flex-grow:1}.kanban-plugin__lane-items>.kanban-plugin__placeholder:only-child{height:2.55em;border:3px dashed rgba(var(--text-muted-rgb),.1);margin-block-end:4px;border-radius:6px;transition:border .2s ease}.is-sorting .kanban-plugin__lane-items>.kanban-plugin__placeholder:only-child{border-color:hsla(var(--interactive-accent-hsl),.6)}.kanban-plugin__item-button-wrapper{border-top:1px solid var(--background-modifier-border);padding:8px;flex-shrink:0;flex-grow:0}.kanban-plugin__item-button-wrapper>button{text-align:left;width:100%}.kanban-plugin__lane-header-wrapper+.kanban-plugin__item-button-wrapper{border-top:none;border-bottom:1px solid var(--background-modifier-border);padding-block:4px 8px;padding-inline:8px}.kanban-plugin__item-form{border-top:1px solid var(--background-modifier-border);padding:8px}.kanban-plugin__item-form .kanban-plugin__item-input-wrapper{padding-block:6px;padding-inline:8px;border:1px solid var(--background-modifier-border);background-color:var(--background-primary);border-radius:var(--input-radius);min-height:var(--input-height)}.kanban-plugin__lane-header-wrapper+.kanban-plugin__item-form{border-top:none;border-bottom:1px solid var(--background-modifier-border);padding-block:4px 8px;padding-inline:8px}.kanban-plugin__item-input-wrapper{--line-height-normal: var(--line-height-tight);display:flex;flex-direction:column;flex-grow:1}.kanban-plugin button.kanban-plugin__item-submit-button{flex-grow:0;flex-shrink:1;font-size:14px;height:auto;line-height:1;margin-block-start:5px;width:auto}.is-mobile .kanban-plugin button.kanban-plugin__item-submit-button{font-size:12px}.is-mobile .kanban-plugin__lane-form-wrapper{--input-height: auto}.is-mobile .kanban-plugin__lane-form-wrapper button{padding-block:var(--size-4-2)}.is-mobile .kanban-plugin__lane-form-wrapper .markdown-source-view.mod-cm6{font-size:var(--font-ui-medium)}.is-mobile .kanban-plugin .kanban-plugin__lane-input-wrapper button.kanban-plugin__item-submit-button{display:none}button.kanban-plugin__new-item-button{background-color:transparent;color:var(--text-muted)}.kanban-plugin__new-item-button:hover{color:var(--text-on-accent);background-color:var(--interactive-accent-hover)}.kanban-plugin__drag-container>.kanban-plugin__item-wrapper .kanban-plugin__item{border-color:var(--interactive-accent);box-shadow:var(--shadow-s),0 0 0 2px hsla(var(--interactive-accent-hsl),.7)}.kanban-plugin__item{font-size:.875rem;border:1px solid var(--background-modifier-border);border-radius:var(--input-radius);overflow:hidden;transition:.3s opacity cubic-bezier(.25,1,.5,1)}.kanban-plugin__item:has(.markdown-source-view){outline:1px solid var(--background-modifier-border-focus);border-color:var(--background-modifier-border-focus)}.kanban-plugin__item-content-wrapper{background:var(--background-primary)}.kanban-plugin__item-title-wrapper{background:var(--background-primary);display:flex;padding-block:6px;padding-inline:8px}.kanban-plugin__item-title-wrapper:not(:only-child){border-bottom:1px solid var(--background-modifier-border)}.kanban-plugin__item-title{width:100%;line-height:var(--line-height-tight);margin-block-start:1px}.kanban-plugin__meta-value,.kanban-plugin__markdown-preview-wrapper{white-space:pre-wrap;white-space:break-spaces;word-break:break-word;overflow-wrap:anywhere;--font-text-size: .875rem;--line-height-normal: var(--line-height-tight);--p-spacing: var(--size-4-2);--list-indent: 1.75em}.kanban-plugin__meta-value .markdown-preview-view,.kanban-plugin__markdown-preview-wrapper .markdown-preview-view{--file-margins: 0}.kanban-plugin__meta-value.inline,.kanban-plugin__markdown-preview-wrapper.inline{display:inline-block}.kanban-plugin__meta-value .kanban-plugin__markdown-preview-view>*:first-child,.kanban-plugin__markdown-preview-wrapper .kanban-plugin__markdown-preview-view>*:first-child{margin-block-start:0}.kanban-plugin__meta-value .kanban-plugin__markdown-preview-view>*:last-child,.kanban-plugin__markdown-preview-wrapper .kanban-plugin__markdown-preview-view>*:last-child{margin-block-end:0}.kanban-plugin__meta-value .markdown-preview-view,.kanban-plugin__markdown-preview-wrapper .markdown-preview-view{width:unset;height:unset;position:unset;overflow-y:unset;overflow-wrap:unset;color:unset;user-select:unset;-webkit-user-select:unset;white-space:normal}.kanban-plugin__meta-value .markdown-preview-view .markdown-embed,.kanban-plugin__markdown-preview-wrapper .markdown-preview-view .markdown-embed,.kanban-plugin__meta-value .markdown-preview-view blockquote,.kanban-plugin__markdown-preview-wrapper .markdown-preview-view blockquote{padding-inline:var(--size-4-2) 0;padding-block:var(--size-4-1);margin-block-start:var(--p-spacing);margin-block-end:var(--p-spacing)}.kanban-plugin__meta-value .kanban-plugin__markdown-preview-view{display:inline-flex}.kanban-plugin__meta-value .kanban-plugin__markdown-preview-view>div:first-child>*:first-child{margin-block-start:0}.kanban-plugin__meta-value .kanban-plugin__markdown-preview-view>div:last-child>*:last-child{margin-block-end:0}.kanban-plugin__embed-link-wrapper{padding:2px;float:right}.kanban-plugin__item-metadata-wrapper:not(:empty){background-color:var(--background-primary-alt);padding-inline:8px;padding-block:6px}.kanban-plugin__item-metadata:not(:empty){padding-block-start:5px;font-size:12px}.kanban-plugin__item-metadata:not(:empty) .markdown-preview-view{line-height:var(--line-height-tight);font-size:inherit}.kanban-plugin__item-metadata>span{display:block}.kanban-plugin__item-metadata>span.kanban-plugin__item-metadata-date-wrapper{display:inline-block}.kanban-plugin__item-metadata .is-button{cursor:var(--cursor)}.kanban-plugin__item-metadata .is-button:hover{color:var(--text-normal)}.kanban-plugin__item-metadata-date-relative:first-letter{text-transform:uppercase}.kanban-plugin__item-metadata a{text-decoration:none}.kanban-plugin__item-task-inline-metadata-item,.kanban-plugin__item-task-metadata-item{display:inline-flex;margin-block:3px 0;margin-inline:0 6px;gap:4px}.kanban-plugin__item-task-inline-metadata-item{padding-inline:2px;background-color:var(--background-secondary);border-radius:var(--radius-s)}.kanban-plugin__table-cell-wrapper .kanban-plugin__item-task-inline-metadata-item{background-color:unset;padding-inline:unset;border-radius:unset}.kanban-plugin__item-tags:not(:empty){padding-block-start:2px}.kanban-plugin__item-tag{display:inline-block;margin-inline-end:4px}.kanban-plugin__item-tags .kanban-plugin__item-tag{font-size:12px;background-color:var(--tag-background, hsla(var(--interactive-accent-hsl), .1));color:var(--tag-color, var(--text-accent));margin-block:3px 0;margin-inline:0 3px}.kanban-plugin__item-tag.is-search-match,.kanban-plugin__item-tags .kanban-plugin__item-tag.is-search-match{background-color:var(--text-highlight-bg);color:var(--text-normal)}.kanban-plugin__meta-table{width:100%;margin:0;line-height:var(--line-height-tight);font-size:.75rem}.kanban-plugin__meta-table .markdown-preview-view{font-size:.75rem}.kanban-plugin__meta-table .kanban-plugin__item-tags .kanban-plugin__item-tag{position:relative;inset-block-start:-2px;margin-block:0 3px}.kanban-plugin__meta-table td{vertical-align:top;padding-block:3px 0;padding-inline:0;width:10%}.kanban-plugin__meta-table td+td{width:90%}.kanban-plugin__meta-table td:only-child{width:100%}.kanban-plugin__meta-table td.kanban-plugin__meta-key{white-space:nowrap;padding-inline-end:5px;color:var(--text-muted)}.kanban-plugin__meta-table td.kanban-plugin__meta-key.is-search-match>span{background-color:var(--text-highlight-bg);color:var(--text-normal)}.kanban-plugin__meta-value:not(.mod-array){white-space:pre-wrap;display:flex}.kanban-plugin__meta-value>.is-search-match,.kanban-plugin__meta-value.is-search-match{background-color:var(--text-highlight-bg);color:var(--text-normal)}.kanban-plugin__item-prefix-button-wrapper,.kanban-plugin__item-postfix-button-wrapper{display:flex;flex-grow:0;flex-shrink:0;align-self:start}.kanban-plugin__item-prefix-button-wrapper>div,.kanban-plugin__item-postfix-button-wrapper>div{display:flex;flex-direction:column;gap:var(--size-4-1)}.kanban-plugin__item-prefix-button-wrapper{flex-direction:column}.kanban-plugin__item-prefix-button-wrapper .kanban-plugin__item-prefix-button{width:var(--checkbox-size);height:var(--checkbox-size)}.kanban-plugin__item-prefix-button-wrapper .kanban-plugin__item-prefix-button,.kanban-plugin__item-prefix-button-wrapper input[type=checkbox]{margin-block:2px;margin-inline:0px 7px}.kanban-plugin__item-prefix-button-wrapper .kanban-plugin__item-prefix-button+button,.kanban-plugin__item-prefix-button-wrapper input[type=checkbox]+button{margin-block-start:10px}button.kanban-plugin__item-postfix-button{visibility:hidden;opacity:0;transition:.1s opacity;display:flex;align-self:flex-start}button.kanban-plugin__item-postfix-button.is-enabled,.kanban-plugin__item:hover button.kanban-plugin__item-postfix-button{visibility:visible;opacity:1}.kanban-plugin__item-settings-actions{padding:5px;display:flex}.kanban-plugin__item-settings-actions>button{line-height:1;display:flex;align-items:center;justify-content:center;font-size:.75rem;width:100%}.kanban-plugin__lane-action-wrapper button>.kanban-plugin__icon,.kanban-plugin__item-settings-actions button>.kanban-plugin__icon{margin-inline-end:5px}.kanban-plugin__item-settings-actions>button:first-child,.kanban-plugin__lane-action-wrapper>button:first-child{margin-inline-end:2.5px}.kanban-plugin__item-settings-actions>button:last-child,.kanban-plugin__lane-action-wrapper>button:last-child{margin-inline-start:2.5px}.kanban-plugin__archive-lane-button,.kanban-plugin__item-button-archive{color:var(--text-muted);border:1px solid var(--background-modifier-border)}.kanban-plugin__archive-lane-button:hover,.kanban-plugin__item-button-archive:hover{color:var(--text-normal)}.kanban-plugin__item-button-delete{border:1px solid rgba(var(--background-modifier-error-rgb),.15);color:rgba(var(--background-modifier-error-rgb),1)}.kanban-plugin__item-button-delete:hover{background-color:rgba(var(--background-modifier-error-rgb),.2);color:var(--text-error)}.theme-dark .kanban-plugin__item-button-delete{background-color:transparent;border:1px solid rgba(var(--background-modifier-error-rgb),1);color:var(--text-error)}.theme-dark .kanban-plugin__item-button-delete:hover{background-color:rgba(var(--background-modifier-error-rgb),1);color:var(--text-error)}.kanban-plugin__checkbox-wrapper{border-top:1px solid var(--background-modifier-border);border-bottom:1px solid var(--background-modifier-border);padding:10px;margin-block-end:10px;display:flex;align-items:center}.kanban-plugin__checkbox-wrapper .checkbox-container{flex-shrink:0;flex-grow:0;margin-inline-start:15px}.kanban-plugin__checkbox-label{font-size:.8125rem;line-height:var(--line-height-tight)}.kanban-plugin__lane-setting-wrapper>div{border-top:none;border-bottom:none;padding-block:10px;padding-inline:15px;margin-block-end:0}.kanban-plugin__lane-setting-wrapper>div:last-child{border-bottom:1px solid var(--background-modifier-border);margin-block-end:10px}.kanban-plugin__action-confirm-wrapper{border:1px solid rgba(var(--background-modifier-error-rgb),.2);background-color:rgba(var(--background-modifier-error-rgb),.1);border-radius:4px;padding:10px;margin-block:5px;margin-inline:10px}.theme-dark .kanban-plugin__action-confirm-wrapper{border:1px solid rgba(var(--background-modifier-error-rgb),1)}.kanban-plugin__delete-lane-button,.kanban-plugin__archive-lane-button{display:flex;align-items:center;justify-content:center;font-size:.75rem;width:50%}.kanban-plugin__delete-lane-button{border:1px solid rgba(var(--background-modifier-error-rgb),.15);color:rgba(var(--background-modifier-error-rgb),1)}.kanban-plugin__delete-lane-button:hover{background-color:rgba(var(--background-modifier-error-rgb),.2);color:var(--text-error)}.theme-dark .kanban-plugin__delete-lane-button{background-color:transparent;border:1px solid rgba(var(--background-modifier-error-rgb),1);color:var(--text-error)}.theme-dark .kanban-plugin__delete-lane-button:hover{background-color:rgba(var(--background-modifier-error-rgb),1);color:var(--text-error)}.kanban-plugin__action-confirm-text{font-size:.875rem;color:var(--text-error);margin-block-end:10px;line-height:var(--line-height-tight)}button.kanban-plugin__confirm-action-button{border:1px solid rgba(var(--background-modifier-error-rgb),.2);margin-inline-end:5px;color:var(--text-error)}button.kanban-plugin__confirm-action-button:hover{background-color:rgba(var(--background-modifier-error-rgb),.5)}button.kanban-plugin__cancel-action-button{border:1px solid var(--background-modifier-border)}.modal.kanban-plugin__board-settings-modal{width:var(--modal-width);height:var(--modal-height);max-height:var(--modal-max-height);max-width:var(--modal-max-width);padding:0;display:flex;flex-direction:column}.modal.kanban-plugin__board-settings-modal .modal-content{padding-block:30px;padding-inline:50px;height:100%;overflow-y:auto;overflow-x:hidden;margin:0}.kanban-plugin__board-settings-modal .setting-item{flex-wrap:wrap;justify-content:space-between}.kanban-plugin__board-settings-modal .setting-item-info{max-width:400px;min-width:300px;width:50%}.kanban-plugin__board-settings-modal .setting-item-control{min-width:300px;flex-shrink:0}.kanban-plugin__board-settings-modal .choices{width:100%;text-align:left}.kanban-plugin__board-settings-modal .choices[data-type*=select-one] .choices__inner{background-color:var(--background-primary);border-color:var(--background-modifier-border);padding:0;min-height:0}.kanban-plugin__board-settings-modal .choices[data-type*=select-one] .choices__input{background-color:var(--background-primary);border-bottom-color:var(--background-modifier-border);font-size:14px}.kanban-plugin__board-settings-modal .choices__input{border-radius:0;border-top:none;border-left:none;border-right:none}.kanban-plugin__board-settings-modal .choices__list[role=listbox]{overflow-x:hidden}.kanban-plugin__board-settings-modal .choices__list--single{padding-block:4px;padding-inline:6px 20px}.kanban-plugin__board-settings-modal .is-open .choices__list--dropdown,.kanban-plugin__board-settings-modal .choices__list--dropdown{background-color:var(--background-primary);border-color:var(--background-modifier-border);word-break:normal;max-height:200px;display:flex;flex-direction:column}.kanban-plugin__board-settings-modal .choices__list--dropdown .choices__item--selectable:after{display:none}.kanban-plugin__board-settings-modal .choices__list--dropdown .choices__item--selectable{padding-block:4px;padding-inline:6px}.kanban-plugin__board-settings-modal .choices__list--dropdown .choices__item.is-highlighted{background-color:var(--background-primary-alt)}.kanban-plugin__board-settings-modal .choices__placeholder{opacity:1;color:var(--text-muted)}.kanban-plugin__board-settings-modal .error{border-color:var(--background-modifier-error-hover)!important}.kanban-plugin__date-picker{position:absolute;z-index:var(--layer-popover);--cell-size: 2.4em}.kanban-plugin__date-picker .flatpickr-input{width:0;height:0;opacity:0;border:none;padding:0;display:block;margin-block-end:-1px}.kanban-plugin__date-picker .flatpickr-current-month{color:var(--text-normal);font-weight:600;font-size:inherit;width:100%;position:static;height:auto;display:flex;align-items:center;justify-content:center;padding:0}.kanban-plugin__date-picker .flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:var(--text-normal)}.kanban-plugin__date-picker .flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:var(--text-normal)}.flatpickr-months .flatpickr-prev-month svg path,.flatpickr-months .flatpickr-next-month svg path{fill:currentColor}.kanban-plugin__date-picker .flatpickr-calendar{border-radius:var(--radius-m);font-size:13px;overflow:hidden;background-color:var(--background-primary);width:calc(var(--cell-size) * 7 + 8px);box-shadow:0 0 0 1px var(--background-modifier-border),0 15px 25px #0003}.kanban-plugin__date-picker .flatpickr-calendar.inline{top:0}.kanban-plugin__date-picker .flatpickr-months{font-size:13px;padding-block:2px 4px;padding-inline:2px;align-items:center}.kanban-plugin__date-picker .flatpickr-months .flatpickr-current-month input.cur-year,.kanban-plugin__date-picker .flatpickr-months select{border-radius:4px;padding:4px}.kanban-plugin__date-picker .flatpickr-months .numInputWrapper{border-radius:4px}.kanban-plugin__date-picker .flatpickr-months .flatpickr-month{width:100%;height:auto}.kanban-plugin__date-picker .flatpickr-months .flatpickr-prev-month,.kanban-plugin__date-picker .flatpickr-months .flatpickr-next-month{color:var(--text-normal);fill:currentColor;border-radius:4px;display:flex;align-items:center;justify-content:center;line-height:1;height:auto;padding:5px;position:static;flex-shrink:0}.kanban-plugin__date-picker .flatpickr-months .flatpickr-prev-month:hover,.kanban-plugin__date-picker .flatpickr-months .flatpickr-next-month:hover{background-color:var(--background-primary-alt);color:var(--text-normal)}.kanban-plugin__date-picker .flatpickr-months .flatpickr-prev-month:hover svg,.kanban-plugin__date-picker .flatpickr-months .flatpickr-next-month:hover svg{fill:currentColor}.kanban-plugin__date-picker .flatpickr-current-month .flatpickr-monthDropdown-months{box-shadow:none;color:var(--text-normal);font-weight:inherit;margin-inline-end:5px}.kanban-plugin__date-picker .flatpickr-current-month input.cur-year{color:var(--text-normal);font-weight:inherit}.kanban-plugin__date-picker .flatpickr-weekdays{height:auto;padding-block:8px 12px;padding-inline:0}.kanban-plugin__date-picker span.flatpickr-weekday{font-weight:400;color:var(--text-muted)}.kanban-plugin__date-picker .flatpickr-innerContainer{padding:4px}.kanban-plugin__date-picker .flatpickr-day{color:var(--text-normal);display:inline-flex;align-items:center;justify-content:center;width:var(--cell-size);height:var(--cell-size);line-height:1;border-radius:6px}.kanban-plugin__date-picker .flatpickr-day.today{border-color:var(--interactive-accent)}.kanban-plugin__date-picker .flatpickr-day.today:hover{color:var(--text-normal);border-color:var(--interactive-accent);background-color:var(--background-primary-alt)}.kanban-plugin__date-picker .flatpickr-day.selected{border-color:var(--interactive-accent);background-color:var(--interactive-accent);color:var(--text-on-accent)}.kanban-plugin__date-picker .flatpickr-day.selected:hover{border-color:var(--interactive-accent);background-color:var(--interactive-accent)}.kanban-plugin__date-picker .flatpickr-days{width:calc(var(--cell-size) * 7)}.kanban-plugin__date-picker .dayContainer{width:calc(var(--cell-size) * 7);min-width:calc(var(--cell-size) * 7);max-width:calc(var(--cell-size) * 7)}.kanban-plugin__date-picker .flatpickr-day.inRange,.kanban-plugin__date-picker .flatpickr-day.prevMonthDay.inRange,.kanban-plugin__date-picker .flatpickr-day.nextMonthDay.inRange,.kanban-plugin__date-picker .flatpickr-day.today.inRange,.kanban-plugin__date-picker .flatpickr-day.prevMonthDay.today.inRange,.kanban-plugin__date-picker .flatpickr-day.nextMonthDay.today.inRange,.kanban-plugin__date-picker .flatpickr-day:hover,.kanban-plugin__date-picker .flatpickr-day.prevMonthDay:hover,.kanban-plugin__date-picker .flatpickr-day.nextMonthDay:hover,.kanban-plugin__date-picker .flatpickr-day:focus,.kanban-plugin__date-picker .flatpickr-day.prevMonthDay:focus,.kanban-plugin__date-picker .flatpickr-day.nextMonthDay:focus{background-color:var(--background-primary-alt);border-color:var(--background-primary-alt)}.kanban-plugin__date-picker .flatpickr-day.flatpickr-disabled,.kanban-plugin__date-picker .flatpickr-day.flatpickr-disabled:hover,.kanban-plugin__date-picker .flatpickr-day.prevMonthDay,.kanban-plugin__date-picker .flatpickr-day.nextMonthDay,.kanban-plugin__date-picker .flatpickr-day.notAllowed,.kanban-plugin__date-picker .flatpickr-day.notAllowed.prevMonthDay,.kanban-plugin__date-picker .flatpickr-day.notAllowed.nextMonthDay{color:var(--text-faint)}.kanban-plugin__time-picker{position:absolute;max-height:250px;overflow:auto;border-radius:4px;border:1px solid var(--background-modifier-border);box-shadow:0 2px 8px var(--background-modifier-box-shadow);background:var(--background-primary);color:var(--text-normal);font-size:14px;z-index:var(--layer-menu)}.kanban-plugin__time-picker-item{display:flex;align-items:center;color:var(--text-muted);cursor:var(--cursor);line-height:1;padding-block:6px;padding-inline:8px}.kanban-plugin__time-picker-check{visibility:hidden;display:inline-flex;margin-inline-end:5px}.kanban-plugin__time-picker-item.is-hour{color:var(--text-normal);font-weight:600}.kanban-plugin__time-picker-item.is-selected .kanban-plugin__time-picker-check{visibility:visible}.kanban-plugin__time-picker-item:hover,.kanban-plugin__time-picker-item.is-selected{background:var(--background-secondary)}.kanban-plugin mark{background-color:var(--text-highlight-bg)}.kanban-plugin__draggable-setting-container{border-top:0;padding:0;flex-direction:column}.kanban-plugin__draggable-setting-container>div{width:100%;margin-inline-end:0!important}.kanban-plugin__setting-item-wrapper{border-top:1px solid var(--background-modifier-border)}.kanban-plugin__draggable-setting-container>.kanban-plugin__placeholder{border-top:1px solid var(--background-modifier-border)}.kanban-plugin__setting-item{background-color:var(--background-secondary);width:100%;font-size:16px;display:flex;align-items:flex-start;padding:12px;color:var(--text-muted)}.kanban-plugin__drag-container .kanban-plugin__setting-item{border:1px solid hsla(var(--interactive-accent-hsl),.8);box-shadow:0 15px 25px #0003,0 0 0 2px hsla(var(--interactive-accent-hsl),.8)}.kanban-plugin__setting-controls-wrapper{flex-grow:1;flex-shrink:1}.kanban-plugin__setting-input-wrapper{display:flex;flex-wrap:wrap;margin-block-end:1rem}.kanban-plugin__setting-input-wrapper>div{margin-inline-end:10px}.kanban-plugin__setting-toggle-wrapper>div{display:flex;align-items:center;line-height:1;margin-block-end:10px}.kanban-plugin__setting-toggle-wrapper .checkbox-container{margin-inline-end:10px}.kanban-plugin__setting-button-wrapper{display:flex;justify-content:flex-end;flex-grow:1;flex-shrink:0;max-width:25px}.kanban-plugin__setting-button-wrapper>div{margin-inline-start:12px}.kanban-plugin__setting-key-input-wrapper{margin-block:1rem;margin-inline:0}.kanban-plugin__setting-key-input-wrapper>input{margin-inline-end:10px}.kanban-plugin__date-color-input-wrapper,.kanban-plugin__tag-sort-input-wrapper,.kanban-plugin__tag-color-input-wrapper{display:flex;flex-direction:column;flex-grow:1;gap:1rem}.kanban-plugin__tag-sort-input-wrapper .kanban-plugin__setting-key-input-wrapper{margin-block-start:0}.kanban-plugin__tag-sort-input-wrapper .kanban-plugin__setting-input-wrapper{margin:0}.kanban-plugin__add-tag-color-button{align-self:baseline;margin:0}.kanban-plugin__date-color-wrapper,.kanban-plugin__tag-color-input .kanban-plugin__item-tags{background-color:var(--background-primary);padding:10px;margin:0;border-radius:4px}.kanban-plugin__tag-color-input .kanban-plugin__item-tag{margin-block-start:0;font-size:13px;font-weight:500;line-height:1.5}.kanban-plugin__date-color-input-wrapper input[type=number]{width:75px;padding-block:.6em;padding-inline:.8em;height:auto;border-radius:.5em}.kanban-plugin__date-color-input-wrapper .kanban-plugin__setting-item-label{margin-block-end:0}.kanban-plugin__date-color-config{padding-block:0 10px;padding-inline:0;display:flex;flex-wrap:wrap;gap:5px;align-items:center}.kanban-plugin__date-color-wrapper{display:inline-block;margin-block-start:10px}.kanban-plugin__date-color-wrapper .kanban-plugin__item-metadata{padding:0}.kanban-plugin__metadata-setting-desc{font-size:14px}.kanban-plugin__setting-button-spacer{visibility:hidden}.kanban-plugin__setting-item-label{font-size:12px;font-weight:700;margin-block-end:5px}.kanban-plugin__setting-toggle-wrapper .kanban-plugin__setting-item-label{margin-block-end:0}.kanban-plugin__hitbox{border:2px dashed tomato}.kanban-plugin__placeholder{flex-grow:0;flex-shrink:0;width:0;height:0;pointer-events:none}.kanban-plugin__placeholder[data-axis=horizontal]{height:100%}.kanban-plugin__placeholder[data-axis=vertical]{width:100%}body:not(.native-scrollbars) .kanban-plugin__scroll-container::-webkit-scrollbar{background-color:transparent;width:16px;height:16px}body:not(.native-scrollbars) .kanban-plugin__scroll-container::-webkit-scrollbar-thumb{border:4px solid transparent;background-clip:content-box}.kanban-plugin__scroll-container{will-change:transform}.kanban-plugin__scroll-container.kanban-plugin__horizontal{overflow-y:hidden;overflow-x:auto}.kanban-plugin__scroll-container.kanban-plugin__vertical{overflow-y:auto;overflow-x:hidden}.kanban-plugin__drag-container{contain:layout size;z-index:10000;pointer-events:none;position:fixed;top:0;left:0}.kanban-plugin__loading{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.sk-pulse{width:60px;height:60px;background-color:var(--text-faint);border-radius:100%;animation:sk-pulse 1.2s infinite cubic-bezier(.455,.03,.515,.955)}@keyframes sk-pulse{0%{transform:scale(0)}to{transform:scale(1);opacity:0}}.kanban-plugin__color-picker-wrapper{position:relative}.kanban-plugin__color-picker{position:absolute;top:-5px;left:0;transform:translateY(-100%)}.kanban-plugin__date,.cm-kanban-time-wrapper,.cm-kanban-date-wrapper{display:inline-block;color:var(--date-color);border-radius:var(--radius-s);background-color:var(--date-background-color, rgba(var(--mono-rgb-100), .05))}.kanban-plugin__date:hover,.cm-kanban-time-wrapper:hover,.cm-kanban-date-wrapper:hover{background-color:var(--date-background-color, rgba(var(--mono-rgb-100), .1))}.kanban-plugin__date.kanban-plugin__preview-date-link,.cm-kanban-time-wrapper.kanban-plugin__preview-date-link,.cm-kanban-date-wrapper.kanban-plugin__preview-date-link{--link-decoration: none;--link-unresolved-decoration-style: unset}.kanban-plugin__date>span,.cm-kanban-time-wrapper>span,.cm-kanban-date-wrapper>span,.kanban-plugin__date>a,.cm-kanban-time-wrapper>a,.cm-kanban-date-wrapper>a{padding-inline:var(--size-2-1)}.completion .kanban-plugin__date.has-background{color:inherit;background-color:transparent}.completion .kanban-plugin__date.has-background:hover{background-color:transparent}.is-date .kanban-plugin__date:not(.has-background){background-color:transparent}.is-date .kanban-plugin__date:not(.has-background):hover{background-color:transparent}.kanban-plugin__meta-value .kanban-plugin__date:hover{background-color:var(--date-background-color, rgba(var(--mono-rgb-100), .05))} diff --git a/.obsidian/templates.json b/.obsidian/templates.json new file mode 100644 index 0000000..cda2aca --- /dev/null +++ b/.obsidian/templates.json @@ -0,0 +1,3 @@ +{ + "folder": "templates" +} \ No newline at end of file diff --git a/.obsidian/types.json b/.obsidian/types.json new file mode 100644 index 0000000..915c313 --- /dev/null +++ b/.obsidian/types.json @@ -0,0 +1,10 @@ +{ + "types": { + "aliases": "aliases", + "cssclasses": "multitext", + "tags": "tags", + "date": "date", + "describe": "text", + "bookName": "text" + } +} \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json new file mode 100644 index 0000000..21740d8 --- /dev/null +++ b/.obsidian/workspace.json @@ -0,0 +1,281 @@ +{ + "main": { + "id": "089e59043add2840", + "type": "split", + "children": [ + { + "id": "779ce2da10685674", + "type": "tabs", + "children": [ + { + "id": "232557ff1641c4e1", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "demo/三个运动定律.md", + "mode": "source", + "source": false, + "backlinks": true, + "backlinkOpts": { + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical", + "showSearch": false, + "searchQuery": "", + "backlinkCollapsed": false, + "unlinkedCollapsed": true + } + }, + "icon": "lucide-file", + "title": "三个运动定律" + } + } + ] + } + ], + "direction": "vertical" + }, + "left": { + "id": "f02b8f0203ad6798", + "type": "split", + "children": [ + { + "id": "9aba6106d1ffe45f", + "type": "tabs", + "children": [ + { + "id": "76751a9e5608cd89", + "type": "leaf", + "state": { + "type": "file-explorer", + "state": { + "sortOrder": "alphabetical", + "autoReveal": false + }, + "icon": "lucide-folder-closed", + "title": "文件列表" + } + }, + { + "id": "f7237a916e3ce339", + "type": "leaf", + "state": { + "type": "search", + "state": { + "query": "", + "matchingCase": false, + "explainSearch": false, + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical" + }, + "icon": "lucide-search", + "title": "搜索" + } + }, + { + "id": "0333b2220dd4771e", + "type": "leaf", + "state": { + "type": "bookmarks", + "state": {}, + "icon": "lucide-bookmark", + "title": "书签" + } + } + ] + } + ], + "direction": "horizontal", + "width": 300 + }, + "right": { + "id": "ed0ff6ed65987e7a", + "type": "split", + "children": [ + { + "id": "07d6c74723a4610e", + "type": "tabs", + "children": [ + { + "id": "0abf9d6487bcfaea", + "type": "leaf", + "state": { + "type": "backlink", + "state": { + "file": "freqtrade 理解消化.md", + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical", + "showSearch": false, + "searchQuery": "", + "backlinkCollapsed": false, + "unlinkedCollapsed": true + }, + "icon": "links-coming-in", + "title": "freqtrade 理解消化 的反向链接列表" + } + }, + { + "id": "5ebaa2ee70419203", + "type": "leaf", + "state": { + "type": "outgoing-link", + "state": { + "file": "随便/甘特图 流程图 各种图.md", + "linksCollapsed": false, + "unlinkedCollapsed": true + }, + "icon": "links-going-out", + "title": "甘特图 流程图 各种图 的出链列表" + } + }, + { + "id": "d070d7c7c7fd043e", + "type": "leaf", + "state": { + "type": "tag", + "state": { + "sortOrder": "frequency", + "useHierarchy": true, + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-tags", + "title": "标签" + } + }, + { + "id": "61b570e21fca7b37", + "type": "leaf", + "state": { + "type": "outline", + "state": { + "file": "AI相关/未命名.canvas", + "followCursor": true, + "showSearch": true, + "searchQuery": "" + }, + "icon": "lucide-list", + "title": "未命名 的大纲" + } + }, + { + "id": "24165256c8d78be3", + "type": "leaf", + "state": { + "type": "planner-timeline", + "state": {}, + "icon": "lucide-file", + "title": "插件不再活动" + } + }, + { + "id": "5369911ec89f6d64", + "type": "leaf", + "state": { + "type": "planner-timeline", + "state": {}, + "icon": "lucide-file", + "title": "插件不再活动" + } + }, + { + "id": "cbd56a01a6cbccd6", + "type": "leaf", + "state": { + "type": "git-view", + "state": {}, + "icon": "git-pull-request", + "title": "Source Control" + } + }, + { + "id": "0974c29258d370bd", + "type": "leaf", + "state": { + "type": "planner-timeline", + "state": {}, + "icon": "calendar-with-checkmark", + "title": "Timeline" + } + } + ], + "currentTab": 6 + } + ], + "direction": "horizontal", + "width": 200 + }, + "left-ribbon": { + "hiddenItems": { + "switcher:打开快速切换": false, + "graph:查看关系图谱": false, + "canvas:新建白板": false, + "daily-notes:打开/创建今天的日记": false, + "templates:插入模板": false, + "command-palette:打开命令面板": false, + "markdown-importer:打开 Markdown 格式转换器": false, + "obsidian-day-planner:Open Timeline": false, + "obsidian-day-planner:Open Multi-Day View": false, + "obsidian-importer:Open Importer": false, + "obsidian-kanban:创建新看板": false, + "obsidian-git:Open Git source control": false + } + }, + "active": "232557ff1641c4e1", + "lastOpenFiles": [ + "`freqtrade.md", + "demo/三个运动定律.md", + "Pasted image 20250204021453.png", + "freqtrade_理解消化.md", + "freqtrade_基础.md", + "Pasted image 20250222113205.png", + "backtrader.md", + "backtrader 事件回调函数.md", + "backtrader_&_okx.md", + "未命名.canvas", + "core/go_wire 循环依赖.md", + "生成像素风格图片 (4).png", + "templates/阅读笔记.md", + "n8n/Getting_started.md", + "core/循环依赖相关对话.md", + "avante/neo-vim_ai 编程辅助插件-avante_扩展使用指南.md", + "随便/甘特图流程图各种图.md", + "populate_indicators函数.md", + "freqtrade.md", + "populate_indicators.md", + "populate_indicator.md", + "AI相关/英文文章可读性量化.md", + "core/restruct.md", + "车位诉讼策略.md", + "策略.md", + "2025-03-21.md", + "2025-02-02 要做的事情.md", + "n8n/如何触发.md", + "core/循环依赖问题.md", + "AI相关/未命名.canvas", + "未命名 4.canvas", + "templates", + "未命名 3.canvas", + "未命名 2.canvas", + "法律", + "未命名 1.canvas", + "blingo", + "Pasted image 20250222115616.png", + "Pasted image 20250204022601.png", + "core", + "avante", + "demo", + "学英语", + "n8n", + "随便", + "要做的事情", + "AA5B1439-F6D4-4633-8F3B-A30A2538D674_1_105_c.jpeg", + "AA5B1439-F6D4-4633-8F3B-A30A2538D674_1_105_c 2.jpeg", + "AA5B1439-F6D4-4633-8F3B-A30A2538D674_1_105_c 1.jpeg", + "代订附加产品(服务包)发票_订单31324101513471184053056 3_副本.png", + "【飞猪】订单7224154890106-机票款凭证 报销凭证 3_副本.png" + ] +} \ No newline at end of file diff --git a/2025-02-02 要做的事情.md b/2025-02-02 要做的事情.md new file mode 100644 index 0000000..323cf21 --- /dev/null +++ b/2025-02-02 要做的事情.md @@ -0,0 +1,9 @@ +未来一段时间要做的 + +备份: + +- 这个程序 obsidian +- elasticsearch 备份,并验证 +- 验证elasticsearch在arm上恢复正常运行 +- 验证emma和juicy的image备份 +- 备份gitea.zjmud.xyz diff --git a/2025-03-21.md b/2025-03-21.md new file mode 100644 index 0000000..e69de29 diff --git a/AI相关/AnythinyLLM key.md b/AI相关/AnythinyLLM key.md new file mode 100644 index 0000000..057bebf --- /dev/null +++ b/AI相关/AnythinyLLM key.md @@ -0,0 +1,3 @@ + +FY2D6B4-EJQ42QN-GRC4N29-ZDQQV1B +61HJMSC-BZ4MDN1-HW0YF9P-SGTC0DY \ No newline at end of file diff --git a/AI相关/未命名.canvas b/AI相关/未命名.canvas new file mode 100644 index 0000000..81f3b18 --- /dev/null +++ b/AI相关/未命名.canvas @@ -0,0 +1,9 @@ +{ + "nodes":[ + {"id":"9306023bffaeeedd","type":"text","text":"asdf\n","x":-125,"y":-30,"width":250,"height":60}, + {"id":"b4f8330cfa70b1b4","x":-125,"y":100,"width":285,"height":60,"type":"text","text":"有了这个可以不用xmind了"} + ], + "edges":[ + {"id":"7c6383beb8a55e88","fromNode":"9306023bffaeeedd","fromSide":"right","toNode":"b4f8330cfa70b1b4","toSide":"right"} + ] +} \ No newline at end of file diff --git a/AI相关/英文文章可读性量化.md b/AI相关/英文文章可读性量化.md new file mode 100644 index 0000000..c276864 --- /dev/null +++ b/AI相关/英文文章可读性量化.md @@ -0,0 +1,596 @@ + +[[高中英语词汇]] + +哪儿能找到大量的英文短文的,类似新概念之类的,最好是能通过api或者rss订阅来获取的 + +基于 13 个搜索来源 + + + + + + + + + + + +以下是一些可以找到大量类似《新概念》英文短文,且能通过 API 或 RSS 订阅获取的途径: + +### 通过 API 获取 + + + +- **深蓝阅读(BlueReader)**3:该平台可以将内容展现在自己的网站上,丰富网站内容。它支持订阅 RSS 或任意网站链接等,能实现无缝订阅,可订阅国内外内容,适合追求个性化阅读体验的用户。 +- **扇贝阅读**11:扇贝阅读有自己的 APP 和网站平台,为用户推送原汁原味的英语短文和原著。它有一定概率提供 API 供开发者接入,不过通常需要与官方沟通合作,其提供的文章涵盖热点、科技、商业、科普等多个领域。 + +### 通过 RSS 订阅获取 + + + +- **BBC Learning English**:英国广播公司旗下的在线英语学习平台,提供大量优质英语学习资源和外刊文章等内容。在其网站上可能存在 RSS 订阅链接,可使用 RSS 阅读器订阅,获取各类英文短文,内容包括新闻、文化、教育等,语言地道,难度多样,适合不同水平的英语学习者。 +- **《纽约时报》《华盛顿邮报》等外刊网站**:这些著名外刊网站有丰富的英文文章,涵盖政治、经济、文化、社会等各个领域。通常在网站上能找到 RSS 订阅链接,通过 RSS 阅读器订阅后,可及时获取最新文章。文章具有较高的语言水平和阅读价值,有助于提高英语阅读能力和了解国际时事。 +- **Feedly 等聚合平台**:可以在这类平台上搜索和订阅大量英文网站的 RSS 源,包括许多提供英文短文的博客、杂志网站等。用户能在一个平台上整合阅读多个来源的内容,方便快捷地获取丰富的英文短文资源。 + + + +另外,若网站本身不支持 RSS 订阅,还可通过 RSSHub、RSS-Proxy 等工具生成 RSS 订阅源12。 + +quora.com + +链接 + +这个网站是付费的吗 + +基于 3 个搜索来源 + + + +Quora 网站基本使用是免费的,但也有付费服务 Quora Plus,具体情况如下: + + + +- **免费部分**:用户可以免费注册账号,在 Quora 上提问、回答问题、浏览大量公开的问题和答案,参与社区讨论等。通过免费账户,用户能够获取到各种领域的知识和信息,与其他用户交流互动,这也是 Quora 作为一个知识分享平台的核心功能体现。 +- **付费部分**:Quora 推出了 Quora Plus 订阅服务,每月收费 6.99 美元,或每年一次性支付 47.88 美元。订阅用户可以访问更多的文章和独特的故事,解锁独家内容并无限制地访问仅限订阅者的内容,还能享受无广告的浏览体验。平台会将订阅费用的 95% 分配给内容创作者。 + +quora.com + +那么如果我想在quora上订阅非quora plus的笑话集锦该怎么找 + +基于 2 个搜索来源 + + + + + +在 Quora 上订阅非 Quora Plus 的笑话集锦可尝试以下方法: + + + +- **利用话题搜索与关注**:登录 Quora 账号后,在搜索框中输入 “jokes”“funny stories” 等与笑话相关的关键词,系统会展示包含这些关键词的问题、回答和话题等内容。浏览搜索结果,找到那些专门收集和分享笑话的话题或问题,点击进入后关注该话题或问题,这样每当有新的笑话内容更新,你就会在自己的 Quora 动态中收到相关推送。比如搜索 “jokes”,会出现许多关于笑话的提问和回答,像 “How to tell a good joke” 等问题下可能会有很多用户分享有趣的笑话。 +- **寻找笑话主题的空间**:Quora 上有各种主题的空间,你可以通过搜索或在相关分类中查找专门用于分享笑话集锦的空间,比如 “Jokes, Humour & Funny stories” 空间。进入这些空间后,点击空间名称旁边的 “关注” 按钮,就能订阅该空间的内容,获取其中的笑话更新。 +- **关注笑话领域的用户**:搜索一些经常分享笑话或在幽默领域活跃的用户,查看他们的个人主页,若其内容符合你的需求,点击 “关注” 按钮。这些用户发布新的笑话内容时,你也能在动态中看到。比如有的用户专门收集和分享各种冷笑话,关注他们后就能定期看到新的冷笑话推送。 + +quora.com + +Flesch-Kincaid analysis 是什么 + +Flesch-Kincaid analysis 即 “弗莱士 - 金凯德分析”,是一种用于评估文本难易程度的方法,以下从其定义、计算指标及应用场景等方面进行具体介绍: + +### 定义与背景 + + + +- Flesch-Kincaid analysis 由鲁道夫・弗莱士(Rudolf Flesch)和 J. 彼得・金凯德(J. Peter Kincaid)开发。它基于文本的词汇和句子结构等要素,通过特定算法计算出一个数值,来反映文本对于读者的难易程度,常被用于教育、出版、语言学习等领域,帮助判断文本是否适合特定读者群体。 + +### 计算指标 + + + +- **Flesch 阅读易读性公式(Flesch Reading Ease formula)**:主要考虑文本中单词的平均音节数和句子的平均单词数。计算公式为:总单词数总句子数总音节数总单词数。得出的分数越高,文本越容易阅读。例如,分数在 90-100 之间表明文本非常容易理解,类似给小学生阅读的简单材料;而分数在 30-50 之间则表示文本较难,可能适合专业人士或具有较高阅读水平的读者。 +- **Flesch-Kincaid 年级水平公式(Flesch-Kincaid Grade Level formula)**:侧重于计算文本对应的美国年级水平。公式为:总单词数总句子数总音节数总单词数。计算结果表示文本大致适合的美国学校年级,比如结果为 8.0,就意味着该文本难度大致适合美国 8 年级学生阅读。 + +### 应用场景 + + + +- **教育领域**:教师可以使用 Flesch-Kincaid 分析来评估教材、阅读材料是否符合学生的学习水平,以便选择合适的教学资源,或根据分析结果对现有材料进行适当调整。 +- **出版行业**:编辑和出版商利用该分析来了解目标读者群体的阅读难度预期,对书稿进行评估和编辑,确保书籍能够被目标受众轻松理解,提高作品的市场适应性。 +- **语言学习**:学习者可以通过 Flesch-Kincaid 分析了解自己正在阅读或学习的文本难度,选择适合自己当前水平的材料,逐步提高语言能力。同时,语言培训机构也可以根据这一分析来设计课程和选择教材。 + +quora.com + +有没有量化的算法来对文章进行Flesch-Kincaid analysis + +Flesch-Kincaid 分析有量化的算法,常见的 Flesch 阅读易读性公式和 Flesch-Kincaid 年级水平公式上文已经提及,以下为你详细介绍计算步骤及示例: + +### Flesch 阅读易读性公式 + + + +- **计算步骤** + 1. **统计总单词数**:统计文本中所有单词的数量。 + 2. **统计总句子数**:计算文本中句子的数量,以句号、问号、感叹号等作为句子结束的标志。 + 3. **统计总音节数**:对文本中每个单词的音节进行计数,然后求和。可根据单词的发音或一些音节划分规则来确定音节数,例如 “apple” 有两个音节,“computer” 有三个音节。 + 4. **代入公式计算**:将统计得到的总单词数、总句子数和总音节数代入公式总单词数总句子数总音节数总单词数,得出 Flesch 阅读易读性分数。 +- **示例**:一篇文本有 200 个单词,10 个句子,总音节数为 300 个。首先计算总单词数总句子数,总音节数总单词数。然后代入公式可得:,该文本的 Flesch 阅读易读性分数为 59.635,属于中等难度水平。 + +### Flesch - Kincaid 年级水平公式 + + + +- **计算步骤** + 1. **同样需统计总单词数、总句子数和总音节数**:统计方法与上述 Flesch 阅读易读性公式中的统计方法一致。 + 2. **代入公式计算**:将统计数据代入公式总单词数总句子数总音节数总单词数,得到 Flesch - Kincaid 年级水平值。 +- **示例**:对于上述同样的文本示例,总单词数总句子数,总音节数总单词数,代入公式可得:,表明该文本的难度大致适合美国 9.91 年级的学生阅读。 + +quora.com + +那么如果我有一篇文章,然后想得到一个Flesch-Kincaid 分析, 让python干这件事情, 需要自己写代码还是有现成的库 + +在 Python 中,有现成的库可以进行 Flesch-Kincaid 分析,无需完全自己写代码,以下介绍两个常用库: + +### textstat 库 + + + +- **安装**:可以使用`pip install textstat`命令进行安装。 +- **使用示例** + + + +收起 + +python + +``` +import textstat + +text = "This is a sample text. It contains some words and sentences." +flesch_reading_ease = textstat.flesch_reading_ease(text) +flesch_kincaid_grade = textstat.flesch_kincaid_grade(text) + +print("Flesch Reading Ease:", flesch_reading_ease) +print("Flesch-Kincaid Grade Level:", flesch_kincaid_grade) +``` + +### nltk 库 + + + +- **安装**:可以通过`pip install nltk`安装,同时可能还需要下载一些 nltk 的语料库资源。 +- **使用示例** + + + +收起 + +python + +``` +import nltk +from nltk.tokenize import word_tokenize, sent_tokenize +import nltk.data + +nltk.download('punkt') + +def flesch_kincaid_analysis(text): + words = word_tokenize(text) + sentences = sent_tokenize(text) + syllables_per_word = lambda word: sum(1 for char in word if char in "aeiouAEIOU") + total_syllables = sum(syllables_per_word(word) for word in words) + total_words = len(words) + total_sentences = len(sentences) + + flesch_reading_ease = 206.835 - 1.015 * (total_words / total_sentences) - 84.6 * (total_syllables / total_words) + flesch_kincaid_grade = 0.39 * (total_words / total_sentences) + 11.8 * (total_syllables / total_words) - 15.59 + + return flesch_reading_ease, flesch_kincaid_grade + +text = "This is another sample text. It has more words and longer sentences to test the Flesch-Kincaid analysis." +flesch_reading_ease, flesch_kincaid_grade = flesch_kincaid_analysis(text) + +print("Flesch Reading Ease:", flesch_reading_ease) +print("Flesch-Kincaid Grade Level:", flesch_kincaid_grade) +``` + + + +quora.com + +对于中国的学生,从小学4年级,到高中3年级, 阅读理解的文章适合分配给他们多少Flesch - Kincaid分值的文章 + +Flesch-Kincaid 分值对应的文本难度有其自身特点,以下是一个大致对应中国学生从小学四年级到高中三年级的 Flesch-Kincaid 分值范围及分析: + + + +- **小学四年级** + - **分值范围**:一般来说,Flesch-Kincaid 分值在 60-70 左右的文章可能比较适合小学四年级学生。 + - **分析**:这个阶段的学生正处于从简单的图文阅读向纯文字阅读过渡的时期,需要一定难度来提升阅读能力,但又不能过难。该分值范围的文章句子结构相对简单,词汇也多为常见基础词汇,能够帮助他们逐渐适应较为复杂的文本阅读,培养阅读兴趣和基本的理解能力。 +- **小学五年级到六年级** + - **分值范围**:Flesch-Kincaid 分值在 50-65 之间的文章较为合适。 + - **分析**:学生的阅读能力在这一阶段有了进一步提升,能够理解更复杂一些的句子和稍多的词汇。这个分值范围的文章开始出现一些复合句、复杂句,词汇量也有所增加,可以帮助他们锻炼理解和分析能力,为初中阶段的阅读学习做准备。 +- **初中一年级到二年级** + - **分值范围**:Flesch-Kincaid 分值在 40-55 之间比较适宜。 + - **分析**:初中学生的认知水平和语言能力有了较大提高,能够处理更具挑战性的文本。这一分值区间的文章在词汇和句子结构上更加复杂,还可能涉及一些修辞手法、文化背景等内容,有助于他们提升阅读理解的深度和广度,培养对不同类型文本的分析能力。 +- **初中三年级** + - **分值范围**:Flesch-Kincaid 分值在 35-50 之间的文章较为匹配。 + - **分析**:初三学生面临中考,需要接触难度更高的阅读材料来提升应试能力和综合素养。这个分值的文章可能包含更多的专业词汇、长难句,以及更复杂的逻辑关系和主题思想,能够帮助他们适应中考阅读理解的难度要求,提高在有限时间内提取关键信息和理解文本主旨的能力。 +- **高中一年级到二年级** + - **分值范围**:Flesch-Kincaid 分值在 30-45 之间的文章比较符合这一阶段学生的水平。 + - **分析**:高中学生的思维能力和语言理解能力进一步增强,需要阅读具有深度和广度的文章来拓展知识、提升思维品质。此分值范围的文章往往在词汇量、句子复杂度、文化内涵等方面都有较高要求,可能涉及文学作品、学术论文、时事评论等多种体裁,有助于他们培养批判性思维和对不同文化背景的理解能力。 +- **高中三年级** + - **分值范围**:Flesch-Kincaid 分值在 25-40 之间的文章对高三学生来说是比较合适的挑战。 + - **分析**:高三学生即将面临高考,需要接触高难度的阅读文本以应对高考中的阅读理解和完形填空等题型。这样分值的文章可能具有很强的专业性、逻辑性和文化深度,词汇更加生僻,句子结构更为复杂,能够帮助他们提升在高强度考试压力下的阅读速度和理解准确性,培养对复杂文本的综合分析和解读能力。 + +quora.com + +请给一个分支大概65分的文章例子 + +理解问题 + +搜索网页 + +请给一个分支大概65分的文章例子 + +Flesch-Kincaid分值65分的文章例子 + +找到 5 个搜索来源 + +[ + +外贸网站运营中,如何提升网站内容的可读性?_手机搜狐网 + +搜狐网 + +1 + + + + + +](https://m.sohu.com/a/708020596_121769793/) + +[ + +人教版七年级上思想品德教材的可读性研究的中期报告.docx - 道客巴巴 + +道客巴巴 + +2 + + + + + +](https://m.doc88.com/p-19239223168762.html) + +[ + +ACT考试-从文本难度分析ACT考试阅读难度等级(一)-Sandy - 360文档中心 + +360文档中心 + +3 + + + + + +](https://m.360docs.net/doc/2d14756119.html) + +[ + +一次自我觉察——A Christmas Carol读后感 - 日记 - 豆瓣 + +豆瓣 + +4 + + + + + +](https://m.douban.com/note/843403656/) + +[ + +我院教工第三党支部联合语言与通识教育中心共同组织开展教研活动 - 党建新闻 - 华南师范大学国际商学院 + +华南师范大学国际商学院 + +5 + + + + + +](http://ibc.scnu.edu.cn/a/20240711/2451.html) + +以下是一篇 Flesch-Kincaid 分值大概在 65 分左右的文章例子: + + + +It was a sunny day. I went to the park with my friends. We took a football and a Frisbee with us. When we got to the park, there were already a lot of people there. Some were flying kites, some were having a picnic, and some were just taking a walk. + + + +We found a nice spot on the grass and started to play football. We kicked the ball around, passing it to each other. It was so much fun. After a while, we got a little tired and decided to play Frisbee instead. The Frisbee flew high in the air and we ran to catch it. + + + +Later, we sat down and had some snacks that we brought. We talked and laughed, enjoying the beautiful day. As the sun started to set, we packed up our things and went home. It was a really great day at the park. + + + +这篇文章句子结构较为简单,多为简单句和并列句,用词也比较基础和常见,符合 Flesch-Kincaid 分值 65 分左右的文本特点,属于比较容易理解的标准难度文本。当然,如果用相关工具具体计算,可能会因统计方式等因素有一定波动,但大致在这个分值范围附近。 + +quora.com + +再来一个分值30的 + +在科学的浩瀚宇宙中,量子力学宛如一颗璀璨却神秘莫测的星辰,散发着令人着迷又困惑的光芒。量子力学,作为描述微观世界物质运动规律的理论,其诞生彻底颠覆了人们对传统物理的认知。 + + + +回溯到 20 世纪初,经典物理学在解释黑体辐射、光电效应等微观现象时遭遇了前所未有的困境。普朗克为解决黑体辐射问题,大胆提出了能量量子化假说,犹如在黑暗中点亮了第一盏灯,为量子力学的发展拉开了序幕。随后,爱因斯坦基于普朗克的理论,成功解释了光电效应,进一步证实了光的量子特性,光不仅具有波动性,还具有粒子性,这种波粒二象性的概念打破了经典物理中对光的单一认知。 + + + +而玻尔的原子模型则是量子力学发展历程中的又一重要里程碑。他将量子化概念引入原子结构,解释了氢原子光谱的规律,使得人们对原子内部的奥秘有了更深入的理解。但这仅仅是个开始,随着研究的深入,更多令人匪夷所思的现象接踵而至。例如,量子纠缠现象,当两个或多个粒子处于纠缠态时,无论它们相隔多远,对其中一个粒子的测量会瞬间影响到其他粒子的状态,这种超距作用仿佛打破了空间的限制,违背了我们日常的直觉。 + + + +薛定谔方程的出现,为量子力学提供了一个强大的数学工具,它能够描述微观粒子的波函数随时间的演化,然而波函数的概率诠释又引发了诸多争议。在量子力学中,粒子的状态不再是确定的,而是以概率的形式存在,只有在进行测量时,波函数才会坍缩到一个确定的本征态,这一观点与经典物理中确定性的世界观大相径庭。 + + + +海森堡的不确定性原理同样给人们带来了巨大的冲击。它表明,我们无法同时精确地测量一个粒子的位置和动量,对其中一个量的测量精度越高,对另一个量的测量精度就越低,这似乎在微观世界中设置了一道不可逾越的认知界限。 + + + +量子力学的发展历程充满了挑战与突破,它不断地挑战着人类的思维极限,也为现代科技的发展奠定了坚实的基础。从半导体技术到量子计算,从激光到核磁共振,量子力学的应用无处不在,深刻地改变了我们的生活。但与此同时,它所蕴含的诸多未解之谜,如量子测量问题、量子引力的统一等,仍然吸引着无数科学家不断探索前行,试图揭开微观世界那层神秘的面纱 ,去探寻宇宙最本质的奥秘。 + +quora.com + +我的意思是,再来一个 Flesch-Kincaid分值30左右的 英文例子 + +基于 5 个搜索来源 + + + + + +以下是一篇 Flesch-Kincaid 分值大概在 30 左右的英文文章例子: + + + +The concept of artificial intelligence has been a fascinating subject of research and development for decades. AI, as it is commonly known, refers to the simulation of human intelligence in machines that are programmed to think and learn like humans. + + + +One of the key areas of AI is machine learning. It enables computers to analyze and interpret vast amounts of data, identifying patterns and making predictions based on that data. For example, in the field of healthcare, machine learning algorithms can analyze medical records to detect diseases at an early stage or predict patient outcomes. + + + +Another important aspect is natural language processing (NLP). NLP allows machines to understand, interpret, and generate human language. This is used in applications like voice assistants, where you can ask questions and receive spoken responses. Chatbots are also a product of NLP, capable of having conversations with users to provide information or assistance. + + + +AI has also made significant strides in computer vision. Machines can now recognize and interpret images and videos, which has numerous applications in security, autonomous vehicles, and even in retail for analyzing customer behavior. + + + +However, the development of AI also brings about various challenges and ethical considerations. Issues such as data privacy, bias in algorithms, and the potential impact on employment are being widely debated. As AI continues to evolve, it is crucial that we address these concerns to ensure its responsible and beneficial use. + + + +Overall, artificial intelligence is a rapidly advancing field with the potential to revolutionize many aspects of our lives, but it requires careful management and regulation to realize its full potential while minimizing risks. + +除了Flesch-Kincaid分值,还有哪些英文文章可读性评估方法? + +除了 Flesch - Kincaid 分值外,以下是一些常见的英文文章可读性评估方法: + +### 可读性公式类 + + + +- **ARI(Automated Readability Index)** + - **计算方法**:主要基于单词平均长度和句子平均长度来计算。统计文章中字符数、单词数和句子数,通过特定公式 ARI = 4.71×(字符数 / 单词数)+0.5×(单词数 / 句子数)-21.43 得出分值。 + - **特点**:较为注重文本的基本元素统计,计算相对简单直接,能快速反映出文章在词汇和句子长度方面的难度。 +- **Coleman-Liau Index** + - **计算方法**:通过统计文章中的字母数和句子数来衡量可读性。公式为 CLI = 0.0588×L - 0.296×S - 15.8,其中 L 是每 100 个单词中的字母数,S 是每 100 个单词中的句子数。 + - **特点**:计算时考虑了字母数量,对于不同词汇丰富度的文本区分度较好,能在一定程度上反映词汇的复杂程度对可读性的影响。 +- **SMOG(Simple Measure of Gobbledygook)** + - **计算方法**:主要统计文章中多音节词的数量。先数出文章中每 30 个句子里的多音节词数量,然后通过公式 SMOG = √(多音节词数量 ×30 / 句子数)+3 得出分值。 + - **特点**:重点关注多音节词,对于判断文本中复杂词汇的密集程度较为有效,适用于评估学术或专业领域文本的可读性。 + +### 基于词汇和语法分析类 + + + +- **词汇频率分析** + - **方法**:借助词频统计工具,分析文章中不同词汇的出现频率。常用词汇列表如 CEFR(欧洲共同语言参考框架)词汇表、General Service List 等,将文章词汇与这些标准词汇表对比,统计不同等级词汇的占比。 + - **特点**:能直观了解文章词汇的难易分布,若高级词汇占比高,通常可读性相对较低。 +- **语法复杂度分析** + - **方法**:分析句子结构的复杂性,如句子的嵌套层数、从句的使用频率、非谓语动词的使用情况等。还可以统计不同语法结构的多样性,结构越复杂、种类越多,可能可读性越低。 + - **特点**:从语法角度深入评估文本难度,对于理解文本的语言组织和逻辑关系的难度有重要参考价值。 + +### 基于语篇和语义分析类 + + + +- **连贯性和衔接性分析** + - **方法**:考察文章中句子之间、段落之间的逻辑关系是否清晰,是否使用了恰当的衔接手段,如连词、代词、重复词汇等。评估文章的整体结构是否合理,主题是否明确,论述是否有条理。 + - **特点**:从整体语篇层面评估可读性,关注文本的组织和逻辑连贯性,对于判断文章的整体质量和理解难度至关重要。 +- **语义密度分析** + - **方法**:分析文章中单位篇幅内所包含的信息量和概念的复杂程度。通过计算特定领域术语、抽象概念的出现频率等指标来衡量。 + - **特点**:能反映文章内容的深度和复杂度,对于评估专业文献、学术论文等具有较高信息量的文本可读性很有帮助。 + +### 基于读者反馈和测试类 + + + +- **问卷调查法** + - **方法**:设计针对文章可读性的问卷,让读者对文章的理解难度、兴趣度、清晰度等方面进行打分或评价。可以设置具体问题,如 “你是否容易理解文章的主要内容”“文章中是否有让你感到困惑的词汇或句子” 等。 + - **特点**:直接获取读者的主观感受,能综合反映不同读者群体对文章可读性的看法,但结果可能受读者个体差异和主观因素影响。 +- **阅读理解测试法** + - **方法**:让读者阅读文章后进行相关的阅读理解测试,如回答问题、总结内容、进行推理判断等。根据读者的答题正确率来评估文章的可读性。 + - **特点**:通过实际测试能较为客观地反映读者对文章的理解程度,结果具有一定的量化指标,但测试题目设计的合理性会影响评估结果。 + +Flesch - Kincaid 分值和其他可读性公式类方法有何关联? + +除了公式类方法,还有哪些英文文章可读性评估方法? + +如何使用这些可读性评估方法来提高英文文章的可读性? + +AI 编程 + +图像生成 + +帮我写作 + +AI 搜索 + +AI 阅读 + +学术搜索 + +解题答疑 + +更多 + +quora.com + + + +豆包 + +新对话 + +[ + +AI 搜索 + +](https://www.doubao.com/chat/search) + +[ + +帮我写作 + +](https://www.doubao.com/chat/write) + +[ + +图像生成 + +](https://www.doubao.com/chat/create-image) + +[ + +AI 阅读 + +](https://www.doubao.com/chat/chat-with-doc) + +[ + +AI 编程 + +](https://www.doubao.com/chat/coding) + +语音通话 + +[ + +AI 看网站 + +有更新 + + + +](https://www.doubao.com/chat/pc-ai-guidance) + +最近对话 + +[ + +寻找英文短文 + +](https://www.doubao.com/chat/1145749456022018) + +[ + +总结 n8n 页面 + +](https://www.doubao.com/chat/1127008857215746) + +[ + +Microk8s 中 Deployment 更新及 Pod 体现 + +](https://www.doubao.com/chat/1128749143074050) + +[ + +在 LazyVim 中搜索单词 + +](https://www.doubao.com/chat/1066513245694210) + +[ + +解释向量数据库 + +](https://www.doubao.com/chat/1130887125227522) + +[ + +查看全部... + +](https://www.doubao.com/chat/thread/list) + +书签 + +-  + + Marscode + +-  + + 知乎 + +-  + + 抖音 + +-  + + 番茄小说 + +-  + + 即梦 AI绘画 + +-  + + BiliBili + +-  + + 今日头条 + + +[ + +AI 云盘 + +](https://www.doubao.com/chat/drive/) + +我的智能体 + +[ + +收藏夹 + +](https://www.doubao.com/chat/collection) + +我的意思是,再来一个 Flesch-Kincaid分值30左右的 英文例子 \ No newline at end of file diff --git a/Pasted image 20250204021453.png b/Pasted image 20250204021453.png new file mode 100644 index 0000000..e8851c4 Binary files /dev/null and b/Pasted image 20250204021453.png differ diff --git a/Pasted image 20250204022601.png b/Pasted image 20250204022601.png new file mode 100644 index 0000000..29c4230 Binary files /dev/null and b/Pasted image 20250204022601.png differ diff --git a/Pasted image 20250222113205.png b/Pasted image 20250222113205.png new file mode 100644 index 0000000..ab9d36f Binary files /dev/null and b/Pasted image 20250222113205.png differ diff --git a/Pasted image 20250222115616.png b/Pasted image 20250222115616.png new file mode 100644 index 0000000..027aead Binary files /dev/null and b/Pasted image 20250222115616.png differ diff --git a/avante/neo-vim_ai 编程辅助插件-avante_扩展使用指南.md b/avante/neo-vim_ai 编程辅助插件-avante_扩展使用指南.md new file mode 100644 index 0000000..b253261 --- /dev/null +++ b/avante/neo-vim_ai 编程辅助插件-avante_扩展使用指南.md @@ -0,0 +1,2 @@ + +为什么用neo-vim 来写代码,这里就不多讲了, 懂得都懂. 这段时间. cursor特别火, 我也试试了, 的确好用, 但是试用期结束以后, 我也懒得邮箱换来换去, 就想着找一款在nvim上能用的AI扩展, 我呢,目前用的是Lazyvim, 配置起来比较简单. \ No newline at end of file diff --git a/ccxt-go中文文档, 豆包生成.md b/ccxt-go中文文档, 豆包生成.md new file mode 100644 index 0000000..860cd5b --- /dev/null +++ b/ccxt-go中文文档, 豆包生成.md @@ -0,0 +1,277 @@ +# ccxt-go 中文文档 + +## 1. 简介 + +ccxt-go 是将 CCXT(CryptoCurrency eXchange Trading)交换库从原始 JavaScript 源代码转换为 Go(Golang)语言的版本。CCXT 库是一个涵盖众多加密货币交易所的集合,每个交易所类都实现了特定加密货币交易所的公共和私有 API。所有交易所都派生自基础交易所类,并共享一组通用方法。通过 ccxt-go,开发者能够使用 Go 语言通过统一的 API 与超过 100 个加密货币交易所进行交互,实现获取市场数据、交易操作、套利等功能。 + +## 2. 特点 + +**多交易所支持**:通过一个统一的 API 支持 100 多个加密货币交易所,极大地便利了需要同时与多个交易所进行交互的应用开发。无论是进行市场数据的综合分析,还是实施跨交易所的套利策略,亦或是构建一个面向多平台的加密货币交易终端,都能轻松实现。 + +**完整 API 实现**:完全实现了公共和私人 API。公共 API 可用于获取各种市场数据,例如市场行情(ticker),它能返回指定交易对当前的价格、成交量等基本市场信息;订单簿(order book),可获取买卖双方不同价格档位的挂单数量和金额,清晰展示市场供需情况;交易历史(trades),包含了一定时间范围内指定交易对的所有成交记录,对分析市场交易活跃度和价格走势有重要意义;K 线数据(ohlcv),以特定时间周期(如 1 分钟、1 小时、1 天等)展示开盘价、最高价、最低价、收盘价和成交量,广泛应用于技术分析。私人 API 则用于交易操作,如创建订单(create order),可根据市场情况和交易策略创建限价单、市价单等不同类型的订单;取消订单(cancel order),当市场情况发生变化或原订单策略不再适用时,及时撤销未成交订单;查询账户余额(fetch balance),准确获取用户在交易所账户中的各类资产余额,方便资金管理和交易决策。这些功能满足了开发者在加密货币交易领域的各种需求。 + +**标准化数据**:提供了可选的标准化数据,方便进行跨交易所或跨货币的分析和套利操作。不同交易所的数据格式往往存在差异,而 ccxt-go 对数据进行标准化处理后,开发者可以更便捷地对来自不同交易所的数据进行统一分析和处理,无需花费大量精力去适配每个交易所独特的数据格式。例如,在进行跨交易所套利时,能快速对比不同平台同一交易对的价格差异,而无需担心数据格式不一致带来的困扰。 + +## 3. 要求 + +使用 ccxt-go 需要确保开发环境中安装的 Go 版本为 >= 1.13 。较新的 Go 版本通常带来了性能优化、新特性支持以及对一些已知问题的修复,能够更好地与 ccxt-go 库协同工作,保证程序的稳定性和功能性。例如,Go 1.13 版本增强了对错误处理的改进,使得 ccxt-go 在处理交易所 API 返回的错误信息时能更加精准和友好,提升了程序的健壮性。 + +## 4. 安装 + +你可以使用以下命令进行安装: + + + +``` +go get https://github.com/prompt-cash/ccxt-go +``` + +该命令会从指定的 GitHub 仓库下载 ccxt-go 库及其依赖,并将其安装到你的 Go 项目环境中,以便在项目中引入和使用。安装完成后,你可以在项目代码中通过`import`语句引入 ccxt-go 库,开始使用其提供的功能。例如: + + + +``` +import "github.com/prompt-cash/ccxt-go/ccxt" +``` + +## 5. 使用示例 + +### 5.1 初始化交易所实例 + + + +``` +package main + +import ( + + "fmt" + + "github.com/prompt-cash/ccxt-go/ccxt" + +) + +func main() { + + // 初始化币安交易所实例 + + binance := ccxt.NewBinance() + + // 加载市场数据 + + err := binance.LoadMarkets() + + if err != nil { + + fmt.Println("加载市场数据错误:", err) + + return + + } + + // 输出支持的交易对 + + for symbol := range binance.Markets { + + fmt.Println(symbol) + + } + +} +``` + +在上述示例中,首先通过`ccxt.NewBinance()`创建了一个币安交易所的实例`binance`。`LoadMarkets`方法用于加载该交易所的市场数据,这一过程会获取交易所支持的所有交易对、交易规则以及相关市场参数等信息。如果加载过程中出现错误,会打印错误信息并终止程序。最后,通过遍历`binance.Markets`输出该交易所支持的所有交易对。在实际应用中,初始化交易所实例并加载市场数据是后续进行各种交易操作和数据获取的基础,比如在构建一个加密货币交易机器人时,第一步就需要准确加载所支持交易所的市场数据,以便后续根据市场情况制定交易策略。 + +### 5.2 获取行情数据 + + + +``` +package main + +import ( + + "fmt" + + "github.com/prompt-cash/ccxt-go/ccxt" + + "time" + +) + +func main() { + + binance := ccxt.NewBinance() + + err := binance.LoadMarkets() + + if err != nil { + + fmt.Println("加载市场数据错误:", err) + + return + + } + + symbol := "BTC/USDT" + + // 获取订单簿数据 + + orderBook, err := binance.FetchOrderBook(symbol, 10) + + if err != nil { + + fmt.Println("获取订单簿错误:", err) + + return + + } + + fmt.Println("订单簿数据:", orderBook) + + // 获取公开成交数据 + + trades, err := binance.FetchTrades(symbol, 0, 5) + + if err != nil { + + fmt.Println("获取公开成交数据错误:", err) + + return + + } + + fmt.Println("公开成交数据:", trades) + + // 获取ticker数据 + + ticker, err := binance.FetchTicker(symbol) + + if err != nil { + + fmt.Println("获取ticker数据错误:", err) + + return + + } + + fmt.Println("ticker数据:", ticker) + + // 获取K线数据 + + ohlcv, err := binance.FetchOHLCV(symbol, "1d") + + if err != nil { + + fmt.Println("获取K线数据错误:", err) + + return + + } + + fmt.Println("K线数据:", ohlcv) + + // 每次请求之间添加延迟,避免触发速率限制 + + time.Sleep(500 \* time.Millisecond) + +} +``` + +此示例展示了如何使用 ccxt-go 获取不同类型的行情数据。针对指定的交易对(如 “BTC/USDT”),`FetchOrderBook`方法用于获取订单簿数据,其中第二个参数`10`表示获取 10 档盘口数据,即买卖双方各 10 个价格档位的挂单信息,通过分析这些数据可以了解市场的深度和潜在的价格压力。`FetchTrades`方法用于获取公开成交数据,第一个参数为交易对,第二个参数`0`表示从最新的成交记录开始获取,第三个参数`5`表示限制返回 5 条成交记录,这些成交数据能直观反映市场近期的交易活跃度和价格变动情况。`FetchTicker`方法获取 ticker 数据,返回的 ticker 包含了当前交易对的最新价格、24 小时最高价、最低价、成交量等关键市场信息,是快速了解市场行情的重要途径。`FetchOHLCV`方法获取 K 线数据,第二个参数`"1d"`表示获取 1 天的 K 线数据,K 线数据在技术分析中广泛应用,通过分析不同时间周期的 K 线形态可以预测市场价格走势。在每次请求之间添加了 500 毫秒的延迟,以避免因频繁请求触发交易所的速率限制。在量化交易场景中,获取行情数据是实时监测市场变化、制定交易策略的关键环节。例如,通过实时获取订单簿数据和 ticker 数据,结合一定的算法模型,可以及时捕捉市场价格波动,发现套利机会并执行交易操作。 + +### 5.3 交易操作(需要谨慎使用真实 API 密钥) + + + +``` +package main + +import ( + + "fmt" + + "github.com/prompt-cash/ccxt-go/ccxt" + +) + +func main() { + + apiKey := "YOUR\_API\_KEY" + + secret := "YOUR\_SECRET\_KEY" + + binance := ccxt.NewBinance() + + binance.ApiKey = apiKey + + binance.Secret = secret + + // 资产查询 + + balance, err := binance.FetchBalance() + + if err != nil { + + fmt.Println("资产查询错误:", err) + + return + + } + + fmt.Println("账户余额:", balance) + + symbol := "BTC/USDT" + + amount := 0.001 + + price := 25000.0 + + // 限价买单 + + order, err := binance.CreateLimitBuyOrder(symbol, amount, price) + + if err != nil { + + fmt.Println("创建限价买单错误:", err) + + return + + } + + fmt.Println("创建的限价买单:", order) + + // 撤单(假设获取到订单ID后进行撤单操作,这里仅为示例) + + orderId := order\["id"].(string) + + err = binance.CancelOrder(orderId, symbol) + + if err != nil { + + fmt.Println("撤单错误:", err) + + return + + } + + fmt.Println("订单已撤销") + +} +``` + +在进行实际交易操作时,务必谨慎使用真实的 API 密钥。此示例中,首先设置了币安交易所的 API 密钥和密钥对(`apiKey`和`secret`),这两个密钥是访问交易所私人 API 的凭证,用于验证用户身份和授权交易操作。然后通过`FetchBalance`方法查询账户余额,该方法返回的`balance`包含了用户在交易所账户中的各类资产余额,如比特币(BTC)、以太坊(ETH)、稳定币(USDT 等)的数量,方便用户了解自己的资金状况,为后续交易决策提供依据。接着,尝试创建一个限价买单(`CreateLimitBuyOrder`),指定交易对(“BTC/USDT”)、购买数量(0.001)和价格(25000.0)。限价单是指用户指定一个期望的买入价格,当市场价格达到或优于该价格时,订单将被执行。在成功创建订单后,获取订单 ID 并尝试使用`CancelOrder`方法撤销该订单,`CancelOrder`方法需要传入订单 ID 和交易对,用于撤销指定的未成交订单。在实际应用中,交易操作涉及资金的变动,必须严格按照业务逻辑和风险控制要求进行。例如,在构建一个自动化交易系统时,需要对交易操作进行严格的验证和监控,确保每一笔交易都符合预设的交易策略和风险承受能力。同时,要注意对 API 密钥的安全管理,防止密钥泄露导致资金损失。 + +## 6. 注意事项 + +**版本兼容性**:由于 ccxt-go 仍处于不断发展和完善的阶段,可能存在一些功能尚未完全实现或部分功能在不同版本间存在兼容性问题。在使用过程中,建议密切关注官方仓库的更新说明,及时更新到最新版本以获取更好的功能支持和问题修复。例如,某些早期版本在处理特定交易所的 API 请求时可能存在数据解析错误,通过更新到最新版本可以解决这些问题,确保程序的正常运行。 + +**速率限制**:不同的加密货币交易所对 API 请求的速率限制各不相同。在编写程序时,务必注意合理控制请求频率,避免因频繁请求触发交易所的速率限制,导致请求失败或账户被封禁。如在获取行情数据的示例中,通过在每次请求之间添加适当的延迟来避免此类问题。一些交易所可能限制每秒或每分钟的请求次数,开发者需要根据交易所的具体限制规则,结合自己的业务需求,合理调整请求频率。例如,可以采用队列机制,将请求按顺序排队发送,确保在不超过速率限制的前提下,尽可能高效地获取数据。 + +**安全风险**:在进行涉及交易操作的功能开发时,要特别注意 API 密钥等敏感信息的安全保护。避免将密钥硬编码在公开的代码仓库或不安全的环境中,建议采用安全的密钥管理方式,如环境变量、配置文件加密等,以防止密钥泄露带来的资金损失风险。如果密钥泄露,恶意用户可能会利用该密钥在交易所进行未经授权的交易,导致用户资金受损。因此,安全的密钥管理至关重要,例如使用环境变量存储密钥时,在部署程序时可以通过服务器的环境变量配置进行设置,避免在代码中直接暴露密钥。 + +## 7. 更多信息 + +**官方仓库**:ccxt-go 的官方 GitHub 仓库为[https://github.com/prompt-cash/ccxt-go](https://github.com/prompt-cash/ccxt-go) ,你可以在该仓库中获取最新的代码、提交问题反馈、查看其他开发者的贡献以及参与项目讨论。在官方仓库中,不仅能获取到最新版本的 ccxt-go 库代码,还能通过查看提交记录了解库的功能演进和问题修复情况。同时,提交问题反馈有助于开发者社区及时发现和解决库中存在的问题,参与项目讨论则能与其他开发者交流经验,共同推动 ccxt-go 的发展。 + +**测试用例**:在仓库中的`ccxt_test.go`文件包含了许多测试用例,通过查看这些测试用例可以深入了解 ccxt-go 的各种功能的使用方式和预期输出,有助于开发者更快地掌握和使用该库进行项目开发。例如,测试用例中可能包含对不同交易所初始化、行情数据获取、交易操作等功能的测试,通过分析这些测试代码,可以学习到如何正确调用 ccxt-go 的各个方法,以及这些方法在不同情况下的返回值和可能出现的错误,从而更好地应用于实际项目开发中。 \ No newline at end of file diff --git a/ccxt.md b/ccxt.md new file mode 100644 index 0000000..4269eea --- /dev/null +++ b/ccxt.md @@ -0,0 +1,107 @@ +### 类与接口 + +#### Exchange +- **描述**: `Exchange` 是一个表示交易所的基本结构体。它包含了交易所的名称、API密钥等信息,并实现了一系列用于交互的方法。 + +#### OKXExchange(示例) +- **描述**: `OKXExchange` 是继承自 `Exchange` 的一个具体实现,专门为OKX交易所提供API调用功能。 + +### 方法说明 + +#### Exchange 类中的公共方法 + +1. **NewExchange** + - **整体说明**: 创建并返回一个新的 `Exchange` 实例。 + - **方法签名**: `func NewExchange(config Config) (*Exchange, error)` + - **入参**: + - `config`: 用于配置交易所信息的结构体。 + +2. **GetTicker** + - **整体说明**: 获取当前市场的最新价格。 + - **方法签名**: `func (e *Exchange) GetTicker(symbol string) (*Ticker, error)` + - **入参**: + - `symbol`: 表示货币对,如 "BTC/USDT"。 + +3. **PlaceOrder** + - **整体说明**: 在交易所下单。 + - **方法签名**: `func (e *Exchange) PlaceOrder(order Order) (*OrderResponse, error)` + - **入参**: + - `order`: 包含订单信息的结构体,如买卖类型、价格等。 + +#### OKXExchange 类中的公共方法 + +1. **FetchOHLCV** + - **整体说明**: 从OKX交易所获取K线数据。 + - **方法签名**: `func (o *OKXExchange) FetchOHLCV(symbol string, interval time.Duration, since, limit int64) ([]OHLCV, error)` + - **入参**: + - `symbol`: 货币对,如 "BTC/USDT"。 + - `interval`: K线周期,如1分钟、5分钟等。 + - `since`: 从该时间戳开始获取数据。 + - `limit`: 获取的K线数量限制。 + +### 使用示例 + +以下是一个使用 `Exchange` 和 `OKXExchange` 的示例代码: + +```go +package main + +import ( + "fmt" + "time" +) + +func main() { + // 创建配置结构体,填入必要信息 + config := Config{ + APIKey: "your_api_key", + SecretKey: "your_secret_key", + BaseURL: "https://www.okx.com/api/v5/", + EnableRateLimit: true, + } + + // 使用NewExchange创建一个新的交易所实例 + exchange, err := NewExchange(config) + if err != nil { + fmt.Println("Error creating exchange:", err) + return + } + + // 获取BTC/USDT的最新价格 + ticker, err := exchange.GetTicker("BTC/USDT") + if err != nil { + fmt.Println("Error fetching ticker:", err) + return + } + fmt.Printf("Latest Ticker: %+v\n", ticker) + + // 创建一个OKXExchange实例 + okxExchange := &OKXExchange{ + Exchange: exchange, + } + + // 获取BTC/USDT的1分钟K线数据 + ohlcv, err := okxExchange.FetchOHLCV("BTC/USDT", 1*time.Minute, 0, 10) + if err != nil { + fmt.Println("Error fetching OHLCV:", err) + return + } + fmt.Printf("Latest OHLCV: %+v\n", ohlcv) + + // 下单示例(假设Order结构体已定义) + order := Order{ + Symbol: "BTC/USDT", + Type: "buy", + Price: 50000, + Amount: 0.01, + } + response, err := exchange.PlaceOrder(order) + if err != nil { + fmt.Println("Error placing order:", err) + return + } + fmt.Printf("Order Response: %+v\n", response) +} +``` + +在这个示例中,我们展示了如何创建交易所实例、获取最新价格和K线数据,并下单。请根据实际情况调整API密钥和其他配置信息。 diff --git a/core/go_wire 循环依赖.md b/core/go_wire 循环依赖.md new file mode 100644 index 0000000..dc0938e --- /dev/null +++ b/core/go_wire 循环依赖.md @@ -0,0 +1,250 @@ + +😯: go里的wire模块, 安装后, 可以使用wire命令, 来生成依赖注入的代码, 具体怎么使用,能否结合一个使用场景的例子,演示一下 + +😐: Go 里的 wire 模块是一个用于依赖注入(DI,Dependency Injection)的工具,可以帮助我们自动生成依赖注入的代码,从而减少手动编写的样板代码。使用 wire 可以提高代码的模块化,减少手动配置的错误。 + + + +**安装 wire** + + + +首先,你需要安装 wire 工具: + +``` +go install github.com/google/wire/cmd/wire@latest +``` + +**使用 wire 的基本步骤** + +1. **定义接口和实现**:在你的项目中定义需要依赖注入的接口和结构体。 + +2. **创建 Wire Provider Function**:提供函数用来创建对象。 + +3. **创建 Wire Injector Function**:使用 wire 提供的功能来自动生成依赖注入代码。 + +4. **运行 wire 命令**:生成依赖注入代码。 + + + +**示例场景** + + + +假设你有一个 web 服务,需要使用一个 UserService,而 UserService 又依赖于一个 UserRepository,我们希望通过 wire 来自动管理这些依赖关系。 + + + +**步骤 1:定义接口和实现** + + + +首先,定义 UserRepository 和 UserService。 + + + +**user_repository.go** + +```go +package main + +import "fmt" + +// UserRepository 定义了数据访问接口 +type UserRepository interface { + GetUser(id int) string +} + +// InMemoryUserRepository 是 UserRepository 的实现 +type InMemoryUserRepository struct{} + +// GetUser 实现了 UserRepository 接口 +func (r *InMemoryUserRepository) GetUser(id int) string { + return fmt.Sprintf("User-%d", id) +} + +// 😯: UserRepository 作为一个接口, 下连具体的数据库实现, 上连UserService, +// 😯: 然后 InMemoryUserRepository 作为一个struct 实现了这个Repository接口, +``` + +**user_service.go** + +```go +package main + +import "fmt" + +// UserService 依赖 UserRepository +type UserService struct { + repo UserRepository +} + +// NewUserService 创建一个新的 UserService 实例 +func NewUserService(repo UserRepository) *UserService { + return &UserService{repo: repo} +} +// 😯: UserService作为一个Service struct 本质上是一个UserRepository 的 Wraapper, +// 其实, 可以理解为, UserService struct 是这个UserRepository抽象接口的实体插座, +// 然后按照惯例, 给出了这个 struct 的初始化程序 NewUserService() + +// GetUserInfo 获取用户信息 +func (s *UserService) GetUserInfo(id int) string { + return fmt.Sprintf("User Info: %s", s.repo.GetUser(id)) +} +``` + +**步骤 2:创建 Wire Provider Function** + + + +接下来,我们创建 Wire Provider Function 来生成依赖关系。 + + + +**provider.go** + +```go +// +build wireinject + +package main + +import "github.com/google/wire" + +// InitializeUserService 使用 wire 来自动注入依赖 +func InitializeUserService() *UserService { + wire.Build(NewUserService, &InMemoryUserRepository{}) + return nil // wire 会自动生成代码 +} +``` + +在上面的代码中,我们用 wire.Build 来指定如何构建 UserService,NewUserService 用于创建 UserService,而 &InMemoryUserRepository{} 是提供 UserRepository 接口的实现。 + + + +**步骤 3:创建 main 函数** + + + +然后,我们在 main.go 中使用自动生成的代码来初始化服务。 + + + +**main.go** + +```go +package main + +import "fmt" + +func main() { + userService := InitializeUserService() + fmt.Println(userService.GetUserInfo(1)) +} +``` + +**步骤 4:生成依赖注入代码** + + + +接下来,运行 wire 命令来自动生成依赖注入的代码。 + +``` +wire +``` + +执行后,会在项目中生成一个名为 wire_gen.go 的文件,其中包含了 InitializeUserService 函数的实现,负责自动生成 UserService 和 UserRepository 的依赖注入代码。 + + + +**步骤 5:运行程序** + + + +最后,运行 main.go: + +``` +go run main.go +``` + +你将会看到输出: + +``` +User Info: User-1 +``` + +**总结** + +• wire 帮助我们通过自动生成代码来管理依赖注入,简化了代码的模块化管理。 + +• 通过 wire.Build 可以定义如何构建依赖关系,wire 会根据这些定义生成必要的代码。 + +• 通过 InitializeUserService 函数,我们可以自动注入 UserRepository 和 UserService。 + + + +这个例子展示了如何在 Go 项目中使用 wire 来简化依赖注入的过程。希望这个示例对你有帮助! + +执行完 wire 命令之后,wire 会自动生成一个新的 Go 文件,通常命名为 wire_gen.go,并将依赖注入的代码写入其中。这个文件是自动生成的,不需要手动修改。 + +--- + +😯: 执行完 wire之后预期的结果是什么 + +**预期的结果** + +1. **生成 wire_gen.go 文件**: + +该文件包含 wire 自动生成的代码,用于实现依赖注入。这个文件中会有一个 InitializeUserService 函数的实现,负责构建 UserService 和它的依赖(比如 UserRepository)。 + +1. **文件内容**: + +wire_gen.go 文件会根据你提供的 wire.Build 指令生成构造依赖的代码。对于我们的示例来说,wire_gen.go 会看起来像这样: + +```go +// Code generated by Wire. DO NOT EDIT. +// wire:build main.InitializeUserService + +package main + +import "github.com/google/wire" + +// InitializeUserService 通过依赖注入创建 UserService 实例 +func InitializeUserService() *UserService { + userRepository := &InMemoryUserRepository{} + userService := NewUserService(userRepository) + return userService +} +``` + +这段代码的意思是: + +• wire 会自动创建一个 InMemoryUserRepository 的实例,并传递给 NewUserService 函数来创建 UserService 实例。 + +• InitializeUserService 函数返回的是 UserService 实例,这样你就可以直接在 main.go 中使用它。 + + + +1. **后续步骤**: + +一旦生成了这个文件,你就可以在项目中使用 InitializeUserService 函数,它会自动创建并返回已注入依赖的 UserService 实例。 + +1. **编译和运行**: + +• wire_gen.go 是自动生成的,因此你不需要手动编辑它。 + +• 你可以直接运行你的应用程序,Go 编译器会处理 wire_gen.go 中的代码,构建并启动你的应用。 + + + +**核心要点** + +• wire 命令通过 wire.Build 定义的依赖关系自动生成代码。 + +• 生成的代码将自动实例化依赖并返回最终的对象,例如 UserService。 + +• 你只需运行生成的 main.go 或其他需要依赖注入的地方,所有的依赖注入将自动完成。 + + + +希望这个解释能帮你理解 wire 命令执行后的预期结果! + diff --git a/core/restruct.md b/core/restruct.md new file mode 100644 index 0000000..02584d9 --- /dev/null +++ b/core/restruct.md @@ -0,0 +1,883 @@ +🤔 Thought content: + + > 首先,用户提供的当前文件包括core.go、config/config.go、config/const.go、data目录下的多个文件(如candle.go、coaster.go等)、logging/writeLog.go、utils/util.go等。目标结构是将这些文件分类到services、datapipes、sync、models等子目录中,并重命名部分文件。 + + +接下来,我需要逐一映射每个现有文件到新的目录结构中。例如,core.go中的ServiceContext应该移到services/service_context.go,而Redis相关的方法可能移到services/redis_service.go。DataContext和相关管道定义应移动到datapipes/data_context.go,而数据处理流程可能放在datapipes/pipelines.go。SyncContext和状态管理则需要移到sync目录下的相应文件。模型如RestQueue、Candle、MaX等应集中在models目录中。 + +同时,需要注意代码中的导入路径调整,确保所有引用都能正确指向新的文件位置。此外,部分结构体和方法可能需要移动或重构,以符合新的模块划分。例如,将RedisService接口及其实现集中到redis_service.go中,将数据管道相关的通道定义和接口移到datapipes目录。 + +最后,生成必要的shell命令来创建目录结构,移动和重命名文件。需要确保目录存在,使用mkdir -p创建嵌套目录,然后使用mv命令移动文件到正确位置。可能还需要检查文件内容,确保导入语句和包声明正确更新,但用户可能希望先处理文件移动,再处理代码调整。 + +总结步骤: +1. 创建目标目录结构(services, datapipes, sync, models等)。 +2. 将core.go中的各部分代码拆分到对应的新文件中。 +3. 移动现有的data、logging、utils等目录下的文件到新位置。 +4. 重命名文件以符合目标结构。 +5. 调整每个文件的包声明和导入路径。 + +需要注意,部分文件可能需要进一步的重构,比如拆分core.go中的不同结构体到各自的模块中,但用户可能希望先完成目录结构和文件移动,后续再处理代码细节。因此,shell命令主要处理文件和目录的移动及重命名,代码调整可能需要手动完成或通过其他工具辅助。根据代码结构和内容分析,需要执行以下目录重组操作: + +```bash +#!/bin/zsh + +# 创建目标目录结构 +mkdir -p core/services core/datapipes core/sync core/models + +# 移动服务相关文件 +mv core/core.go core/services/service_context.go +mv core/core.go core/services/redis_service.go # 需要手动拆分Redis相关代码 + +# 移动数据管道相关文件 +mv core/data/*.go core/datapipes/ +mv core/data/candle.go core/datapipes/data_context.go +mv core/data/pipelines/*.go core/datapipes/pipelines.go # 需要手动整合流程代码 + +# 移动同步相关文件 +mv core/sync/*.go core/sync/sync_context.go +mv core/state/*.go core/sync/state_management.go # 需要手动拆分状态管理代码 + +# 移动模型文件 +mv core/data/rest_queue.go core/models/ +mv core/data/candle.go core/models/ +mv core/data/max.go core/models/ + +# 移动核心组合结构 +mv core/core.go core/core.go # 保留核心组合结构 + +# 处理工具类和配置 +mv core/utils core/shared/ +mv core/config core/shared/config +mv core/logging core/shared/logging +``` + +需要手动调整的代码部分: + +6. 在service_context.go中保留: +```go +type ServiceContext struct { + Env string + Cfg *MyConfig + RedisLocalCli *redis.Client + RedisRemoteCli *redis.Client + FluentBitUrl string +} + +type ConfigService interface { + GetConfig() *MyConfig +} + +func (sc *ServiceContext) GetConfig() *MyConfig { + return sc.Cfg +} +``` + +7. 在redis_service.go中集中Redis操作: +```go +type RedisService interface { + GetRedisLocalCli() *redis.Client + GetRemoteRedisCli() *redis.Client +} + +func (sc *ServiceContext) GetRedisLocalCli() *redis.Client { + return sc.RedisLocalCli +} + +// 包含所有Redis操作方法... +``` + +8. 在data_context.go中定义管道结构: +```go +type DataContext struct { + CandlesProcessChan chan *Candle + MaXProcessChan chan *MaX + // 其他通道定义... +} + +type PipelineService interface { + GetCandleChan() chan *Candle +} + +func (dc *DataContext) GetCandleChan() chan *Candle { + return dc.CandlesProcessChan +} +``` + +9. 在sync_context.go中维护状态同步: +```go +type SyncContext struct { + PlateMap map[string]*Plate + TrayMap map[string]*Tray + CoasterMd5SyncMap sync.Map + Mu *sync.Mutex + Mu1 *sync.Mutex + Waity *sync.WaitGroup +} +``` + +建议后续操作: +10. 使用IDE的重构功能批量修改import路径 +11. 运行go fmt格式化所有文件 +12. 逐步验证各模块的单元测试 +13. 更新Makefile中的构建路径 +14. 调整CI/CD流水线配置 + +这个重组过程需要结合代码语义进行合理拆分,建议分步骤验证每个模块的功能完整性。 + +--- + +- Datetime: 2025-02-21 10:02:51 + +- Model: alidsr1/deepseek-r1 + +- Selected files: + - core/datapipes/coaster.go + - core/datapipes/pixel.go + - core/datapipes/plate.go + - core/datapipes/rsi.go + - core/datapipes/segmentItem.go + - core/datapipes/series.go + - core/datapipes/shearForceGrp.go + - core/datapipes/sorted.go + - core/datapipes/tray.go + - core/models/candle.go + - core/models/maX.go + - core/models/ticker.go + - core/services/service_context.go + - core/shared/util.go + - core/shared/config/config.go + - core/shared/config/const.go + - core/shared/logging/writeLog.go + +- Selected code: + +```go + cd.Data[4], _ = strconv.ParseFloat(cd.Data[4].(string), 64) +``` + +> 当前目录层级划分是否合理 + +🤔 Thought content: + + +用户提供的代码中,核心包是`core`,下面有多个子目录,比如`datapipes`、`models`、`services`、`shared`等。每个子目录包含不同类型的文件,比如数据管道、模型定义、服务层、共享工具等。 + +首先,`datapipes`目录下有很多数据处理的类型,比如`coaster.go`、`pixel.go`等,这些可能负责数据流转和处理。`models`目录包含数据结构定义,如`candle.go`、`maX.go`等,这些是业务模型。`services`中的`service_context.go`似乎是服务的上下文和核心逻辑。`shared`目录下有工具函数和配置,比如`util.go`和`config`相关文件。 + +接下来,评估合理性。通常,Go项目的目录结构会遵循标准布局,如`cmd`、`pkg`、`internal`等,但用户的结构是自定义的。这可能符合项目的特定需求,但需要检查是否清晰和可维护。 + +存在的问题可能包括: + +15. **目录命名不够清晰**:例如`datapipes`可能不够直观,是否可以考虑更明确的名称,如`data`或`pipeline`? +16. **职责划分不明确**:`datapipes`中的文件似乎混合了数据结构和处理逻辑,而`models`主要定义结构体。可能需要更清晰的分层,比如将数据结构放在`models`,处理逻辑放在`services`或`handlers`。 +17. **`shared`目录的使用**:工具函数和配置放在`shared`下是常见的,但需确认是否有更好的组织方式,比如拆分为`util`和`config`。 +18. **服务层的位置**:`services`目录中的文件是否合理,是否需要进一步细分,比如`repository`、`service`等层? + +改进建议: + +- **调整目录结构**:使用更通用的结构,如`internal/core`包含核心业务逻辑,`internal/models`放数据结构,`internal/services`处理业务逻辑,`internal/utils`放工具函数,`config`处理配置。 +- **明确职责分离**:确保每个目录职责单一,避免混合数据结构和处理逻辑。 +- **重命名目录**:例如将`datapipes`改为`dataflow`或`pipeline`,使其更直观。 + +需要根据项目的规模和团队习惯来调整,但当前结构在小型项目中可能可行,但在扩展时可能遇到维护问题。根据现有代码结构分析,目录层级划分存在以下优化空间: + +*// 当前结构* +core/ +├── datapipes/ // 数据管道(命名可优化) +├── models/ // 数据模型(存在职责混杂) +├── services/ // 服务层(可细化分层) +├── shared/ // 共享代码(可拆分为独立模块) +└── ... + +*// 优化建议* + +19. **目录命名规范化** +``` +core/ +├── data/ // 替代 datapipes (更简洁) +├── model/ // 替代 models (Go 习惯单数形式) +├── service/ // 服务层 (保持单数) +├── config/ // 配置模块 (从 shared 独立) +├── utils/ // 工具包 (从 shared 独立) +└── internal/ // 内部私有代码 (可选) +``` + +20. **职责分离优化** +* `data/` 聚焦数据流动: + ```go + data/ + ├── pipeline/ // 数据管道处理逻辑 + ├── processor/ // 数据加工处理器 + └── entity/ // 数据实体定义 (原 models 部分代码) + ``` + +* `model/` 纯领域模型: + ```go + model/ + ├── candle.go // 蜡烛图模型 + ├── market.go // 市场数据模型 + └── ... + ``` + +* `service/` 按业务域划分: + ```go + service/ + ├── market/ // 行情服务 + ├── trade/ // 交易服务 + └── analytics/ // 分析服务 + ``` + +21. **共享代码拆分** +* `utils/` 通用工具库: + ```go + utils/ + ├── timeutil.go // 时间处理 + ├── mathutil.go // 数学计算 + └── ... + ``` + +* `config/` 配置管理: + ```go + config/ + ├── loader.go // 配置加载 + └── app.yaml // 配置文件 + ``` + +22. **依赖关系清晰化** +``` + +------------+ + | config | + +-----+------+ + | + +-----v------+ + | model | + +-----+------+ + | ++--------+ +-----v------+ +| utils <-----+ service | ++--------+ +-----+------+ + | + +-----v------+ + | data | + +------------+ +``` + +*优化理由* + +23. **符合 Go 惯例**:使用单数形式目录名 (`service` 而非 `services`),更符合 Go 社区习惯 + +24. **高内聚低耦合**:每个目录职责单一性增强,例如: + - `data/entity` 只定义数据结构 + - `data/pipeline` 只处理数据流转 + - `service` 只包含业务逻辑 + +25. **可维护性提升**:通过模块化拆分,代码变更影响范围更可控,例如修改数据解析逻辑只需关注 `data` 模块 + +26. **可测试性增强**:独立模块更方便 mock 测试,例如单独测试 service 层时 mock data 层 + +*示例代码调整* + +以 `core/datapipes/coaster.go` 为例: + +```go +// 调整后路径 +core/data/entity/coaster.go + +type Coaster struct { + // 结构体定义保持不变 + InstID string + Period string + // ... +} + +// 原数据处理逻辑迁移到 +core/data/pipeline/coaster_processor.go + +func (p *CoasterProcessor) Process(data []byte) (*entity.Coaster, error) { + // 解析处理逻辑 +} +``` + +这种结构调整后,领域模型与处理逻辑解耦,代码结构更清晰。 + +--- + +- Datetime: 2025-02-21 10:09:46 + +- Model: alidsr1/deepseek-r1 + +- Selected files: + - core/datapipes/coaster.go + - core/datapipes/pixel.go + - core/datapipes/plate.go + - core/datapipes/rsi.go + - core/datapipes/segmentItem.go + - core/datapipes/series.go + - core/datapipes/shearForceGrp.go + - core/datapipes/sorted.go + - core/datapipes/tray.go + - core/models/candle.go + - core/models/maX.go + - core/models/ticker.go + - core/services/service_context.go + - core/shared/util.go + - core/shared/config/config.go + - core/shared/config/const.go + - core/shared/logging/writeLog.go + +- Selected code: + +```go + cd.Data[4], _ = strconv.ParseFloat(cd.Data[4].(string), 64) +``` + +> 划分成 config, model, service, data, util 这几个目录,现在目前的10个go文件该如何区分到不同的目录,请给个shell脚本,我来执行 + +🤔 Thought content: + + > 首先,用户提供的文件列表包括: + + > - core/datapipes下的coaster.go、pixel.go、plate.go、rsi.go、segmentItem.go、series.go、shearForceGrp.go、sorted.go、tray.go + +- core/models下的candle.go、maX.go、ticker.go +- core/services下的service_context.go +- core/shared/util.go +- core/shared/config下的config.go、const.go +- core/shared/logging下的writeLog.go + +接下来,我需要根据常见的项目结构来分类: + +27. **config目录**:通常存放配置文件,比如const.go和config.go。这两个文件在core/shared/config下,应该移到config目录。 + +28. **model目录**:存放数据模型和结构体定义。查看core/models下的candle.go、maX.go、ticker.go,这些显然是模型定义,应该放在model目录。此外,datapipes下的文件如coaster.go、pixel.go等也包含数据结构和相关方法,可能属于数据模型,但datapipes可能更偏向数据处理,需要进一步判断。不过根据用户之前的划分,可能datapipes下的文件属于data目录,而model目录只放核心模型。 + +29. **service目录**:存放业务逻辑和服务层代码。service_context.go属于服务层,应该放在service目录。 + +30. **data目录**:处理数据存储、管道等。datapipes下的所有文件(coaster.go、pixel.go等)可能属于数据操作,应移至data目录。 + +31. **util目录**:工具函数。shared/util.go应该移到util目录,而logging下的writeLog.go属于日志工具,可能也放在util下,或者单独一个logging目录,但用户要求分为util,所以可能合并到util。 + +现在需要确认每个文件的具体内容: + +- coaster.go:定义了Coaster结构体及相关方法,属于数据模型,可能放在model或data。但根据datapipes的命名,可能属于数据处理,归入data。 +- pixel.go:Pixel结构体,数据模型,归入model或data。需要看是否涉及数据处理逻辑,如果有方法处理数据流,可能属于data。 +- plate.go:Plate结构体,数据处理,归入data。 +- rsi.go:RSI相关结构体,属于数据指标,归入model或data。 +- segmentItem.go:Segment结构体,数据处理,归入data。 +- series.go:Series结构体,数据系列处理,归入data。 +- shearForceGrp.go:剪切力相关,数据处理,归入data。 +- sorted.go:排序相关,数据处理,归入data。 +- tray.go:Tray结构体,数据处理,归入data。 + +所以datapipes下的文件都属于data目录。 + +models下的candle、maX、ticker属于model目录。 + +service_context.go属于service。 + +shared/util.go到util,config到config,logging/writeLog.go到util或logging,但根据用户要求可能合并到util。 + +但用户可能希望logging作为独立目录,但根据问题描述,用户只提到config, model, service, data, util,所以writeLog.go可能归入util。 + +现在需要生成一个shell脚本,移动这些文件到对应目录: + +- config/ → const.go, config.go +- model/ → candle.go, maX.go, ticker.go +- service/ → service_context.go +- data/ → coaster.go, pixel.go, plate.go, rsi.go, segmentItem.go, series.go, shearForceGrp.go, sorted.go, tray.go +- util/ → util.go, writeLog.go + +注意原文件路径: + +core/datapipes下的文件移动到data/ +core/models下的移动到model/ +core/services移动到service/ +core/shared/config移动到config/ +core/shared/util.go到util/ +core/shared/logging/writeLog.go到util/ + +因此,脚本需要创建目录,然后移动文件: + +mkdir -p config model service data util + +mv core/shared/config/config.go config/ +mv core/shared/config/const.go config/ +mv core/models/candle.go model/ +mv core/models/maX.go model/ +mv core/models/ticker.go model/ +mv core/services/service_context.go service/ +mv core/datapipes/*.go data/ +mv core/shared/util.go util/ +mv core/shared/logging/writeLog.go util/ + +需要检查路径是否正确,确保所有文件都被正确移动。此外,注意文件名的大小写,确保路径正确。根据代码结构和功能划分,我帮你编写一个迁移脚本: + +```bash +#!/bin/bash + +# 创建目录结构 +mkdir -p config model service data util + +# 移动配置文件 +mv core/shared/config/config.go config/ +mv core/shared/config/const.go config/ + +# 移动模型文件 +mv core/models/candle.go model/ +mv core/models/maX.go model/ +mv core/models/ticker.go model/ + +# 移动服务文件 +mv core/services/service_context.go service/ + +# 移动数据层文件 +mv core/datapipes/coaster.go data/ +mv core/datapipes/pixel.go data/ +mv core/datapipes/plate.go data/ +mv core/datapipes/rsi.go data/ +mv core/datapipes/segmentItem.go data/ +mv core/datapipes/series.go data/ +mv core/datapipes/shearForceGrp.go data/ +mv core/datapipes/sorted.go data/ +mv core/datapipes/tray.go data/ + +# 移动工具类文件 +mv core/shared/util.go util/ +mv core/shared/logging/writeLog.go util/ + +echo "文件迁移完成!新目录结构:" +tree -d . +``` + +执行步骤: +32. 将上述内容保存为`reorganize.sh` +33. 添加执行权限:`chmod +x reorganize.sh` +34. 在项目根目录运行:`./reorganize.sh` + +迁移后目录结构: +``` +. +├── config +│ ├── config.go +│ └── const.go +├── model +│ ├── candle.go +│ ├── maX.go +│ └── ticker.go +├── service +│ └── service_context.go +├── data +│ ├── coaster.go +│ ├── pixel.go +│ ├── plate.go +│ ├── rsi.go +│ ├── segmentItem.go +│ ├── series.go +│ ├── shearForceGrp.go +│ ├── sorted.go +│ └── tray.go +└── util + ├── util.go + └── writeLog.go +``` + +注意: +35. 请确保在项目根目录执行脚本 +36. 执行前建议先提交git,以便回滚 +37. 迁移后需要检查各个文件的import路径是否正确 +38. 如果存在包名冲突,需要手动调整package声明 + +--- + +- Datetime: 2025-02-21 10:17:58 + +- Model: alidsr1/deepseek-r1 + +- Selected files: + - core.go + - config/config.go + - config/const.go + - data/coaster.go + - data/pixel.go + - data/plate.go + - data/rsi.go + - data/segmentItem.go + - data/series.go + - data/shearForceGrp.go + - data/sorted.go + - data/tray.go + - model/candle.go + - model/maX.go + - model/ticker.go + - service/service_context.go + - util/util.go + - util/writeLog.go + +> 现在结构整理完成了,下面我们该处理什么了 +> + +🤔 Thought content: + + +首先,我需要回顾用户提供的代码结构,看看有哪些部分可能需要进一步处理。用户给出的代码包括core.go、config/config.go、config/const.go等多个文件,涉及服务上下文、数据管道、状态同步等模块。结构上已经分成了数据模型、配置、服务等目录,但可能还存在一些问题。 + +接下来,用户可能想知道接下来的步骤。通常,在整理完代码结构后,常见的下一步包括: + +39. **代码质量优化**:比如消除重复代码,统一错误处理,提高可测试性。 +40. **依赖管理**:检查是否有不必要的依赖,更新第三方库版本。 +41. **接口与实现分离**:将接口定义与具体实现分离,提高模块化。 +42. **增强文档与注释**:补充文档和注释,方便维护。 +43. **配置管理改进**:优化配置加载方式,支持环境变量等。 +44. **引入DI/IoC容器**:使用依赖注入提升可维护性。 +45. **补充单元测试**:增加测试覆盖率,确保功能稳定。 +46. **性能优化**:分析性能瓶颈,进行优化。 + +查看用户提供的代码,例如在core.go中,ServiceContext、DataContext等结构体可能存在直接依赖,可以引入接口。错误处理在多个地方是分散的,可以统一。配置加载在config.go中使用硬编码路径,可以改为更灵活的方式。此外,部分代码块被注释掉,如订单相关功能,可能需要清理。 + +需要指出具体的代码部分,例如在core.go的GetRedisLocalCli方法中,重复的代码可以提取成公共函数。在config.go中,配置文件路径可以改为从环境变量获取。此外,存在未使用的导入和注释掉的代码,需要清理。 + +总结建议用户下一步进行代码质量优化,比如消除重复、统一错误处理,并举例说明如何修改。同时,询问用户是否有特定方向的需求,以便提供更针对性的建议。根据当前代码结构和行业最佳实践,我建议接下来按以下优先级进行优化: + +47. *关键质量改进* +Filepath: +Replace lines: 53-60 +```go +func (cfg MyConfig) Init() (MyConfig, error) { + // 支持多路径配置加载 + configPaths := []string{ + os.Getenv("CONFIG_PATH"), // 最高优先级 + "/etc/sardine/config.json", // 系统级配置 + "configs/basicConfig.json", // 开发环境配置 + "/go/json/basicConfig.json", // 容器环境配置 + } + + var jsonStr []byte + var err error + + for _, path := range configPaths { + if path == "" { + continue + } + if jsonStr, err = ioutil.ReadFile(path); err == nil { + break + } + } + + if err != nil { + return cfg, fmt.Errorf("配置文件加载失败: %w (尝试路径: %v)", err, configPaths) + } +``` + +48. *依赖清理* +Filepath: core.go +Replace lines: 3-24 +```go +import ( + "context" + "encoding/json" + "errors" + "fmt" + "io/ioutil" + "net/http" + "os" + "strconv" + "strings" + "sync" + "time" + + "github.com/go-redis/redis" + logrus "github.com/sirupsen/logrus" +) +``` + +49. *接口隔离示例* +Filepath: core.go +Replace lines: 82-85 +```go +// 新增存储接口 +type StorageProvider interface { + GetClient() (*redis.Client, error) + HealthCheck() error +} + +// Redis存储实现 +type RedisStorage struct { + client *redis.Client + config RedisConfig +} + +func (rs *RedisStorage) GetClient() (*redis.Client, error) { + if rs.client == nil { + client, err := createRedisClient(rs.config.Url, rs.config.Password, rs.config.Index) + if err != nil { + return nil, err + } + rs.client = client + } + return rs.client, nil +} + +func (rs *RedisStorage) HealthCheck() error { + _, err := rs.client.Ping().Result() + return err +} + +// 更新服务上下文 +type ServiceContext struct { + Env string + Cfg *MyConfig + Storage StorageProvider // 替换原有RedisCli + FluentBitUrl string +} +``` + +是否需要我继续针对以下方面提供具体改进方案? +50. 增加单元测试示例 +51. 性能优化建议 +52. 错误处理统一方案 +53. 文档生成方案 +54. 持续集成配置 + +您最关心哪个方面的改进?我可以优先提供对应修改方案。 + +--- + +- Datetime: 2025-02-21 10:27:20 + +- Model: alidsr1/deepseek-r1 + +- Selected files: + - core.go + - config/config.go + - config/const.go + - data/coaster.go + - data/pixel.go + - data/plate.go + - data/rsi.go + - data/segmentItem.go + - data/series.go + - data/shearForceGrp.go + - data/sorted.go + - data/tray.go + - model/candle.go + - model/maX.go + - model/ticker.go + - service/service_context.go + - util/util.go + - util/writeLog.go + +> 我最关注的是依赖注入和接口隔离,请对相关文件进行变更建议 + +🤔 Thought content: + + > 首先,用户提到关注依赖注入和接口隔离。这意味着需要解耦现有的类,使其依赖通过接口注入,而不是直接依赖具体实现。同时,接口隔离原则要求将大接口拆分成更小、更专注的接口,避免类实现不需要的方法。 + + > 查看现有代码,例如在core.go中,ServiceContext结构体直接包含了Redis客户端和配置对象。这违反了依赖注入原则,因为这些依赖应该通过接口注入,而不是具体实现。此外,ConfigService等接口定义在core.go中,但实现可能过于宽泛,需要拆分。 + + +接下来,我需要识别哪些部分可以抽象成接口。例如,Redis客户端可以抽象为RedisClient接口,配置管理可以抽象为ConfigProvider接口。同时,现有的接口如RedisService、ConfigService等可能需要进一步拆分,确保每个接口的职责单一。 + +然后,考虑如何重构代码。例如,在Core结构体中,原本直接依赖ServiceContext的具体实现,现在应改为依赖接口。这样可以在测试时更容易替换模拟对象,提高代码的可测试性和灵活性。 + +另外,在config/config.go中,MyConfig结构体直接使用了第三方库simplejson,这可能导致与具体实现的耦合。应该通过接口抽象配置的获取,使得MyConfig依赖于一个ConfigProvider接口,而不是具体的实现。 + +在data/coaster.go等数据处理文件中,存在直接使用Redis客户端的情况。这些地方应该通过依赖注入传入接口,而不是直接创建或使用全局的Redis客户端实例。 + +可能的步骤包括: +55. 定义必要的接口,如RedisClient、ConfigProvider、Logger等。 +56. 修改现有结构体,使其依赖接口而非具体实现。 +57. 使用构造函数或工厂模式注入依赖,确保在创建对象时传入接口实例。 +58. 拆分过大的接口,例如将PipelineService拆分为更细粒度的接口。 +59. 调整测试代码,利用模拟对象进行单元测试。 + +需要注意现有代码中的全局变量和直接初始化,例如在Init函数中直接创建Redis客户端,这应该改为通过依赖注入传入。同时,确保接口的设计符合单一职责原则,避免一个接口包含过多方法。 + +最后,需要检查所有文件中的依赖关系,确保每个模块只依赖于必要的接口,而不是具体实现。这可能涉及多个文件的修改,包括core.go、config/config.go、service/service_context.go等。通过逐步替换和测试,确保重构后的代码符合依赖注入和接口隔离原则,同时保持功能不变。根据依赖注入和接口隔离原则,我会对代码提出以下改进建议: + +60. 首先在core.go中定义更明确的接口并拆分现有大接口: + +Filepath: core.go +Replace lines: 68-80 +```go +// 更细分的接口 +type RedisConnector interface { + GetClient(options *redis.Options) (*redis.Client, error) + Ping(client *redis.Client) error +} + +type ConfigProvider interface { + GetString(keyPath string) (string, error) + GetInt(keyPath string) (int, error) + GetBool(keyPath string) (bool, error) +} + +type PipelineOperator interface { + CandlePipeline() chan *Candle + LogPipeline() chan *WriteLog +} + +type Logger interface { + Info(args ...interface{}) + Error(args ...interface{}) + Warn(args ...interface{}) + Debug(args ...interface{}) +} + +type HTTPClient interface { + Do(req *http.Request) (*http.Response, error) +} +``` + +61. 修改ServiceContext结构体以依赖接口: + +Filepath: core.go +Replace lines: 27-33 +```go +type ServiceContext struct { + Env string + Config ConfigProvider + Redis RedisConnector + HTTPClient HTTPClient + Logger Logger + FluentBitUrl string +} +``` + +62. 修改Config实现使其实现ConfigProvider接口: + +Filepath: config/config.go +Replace lines: 0-0 +```go +type MyConfig struct { + configSource ConfigProvider // 依赖接口 + redisConf *RedisConfig + // 其他字段保持不变... +} + +// 实现ConfigProvider接口 +func (c *MyConfig) GetString(keyPath string) (string, error) { + return c.configSource.GetString(keyPath) +} + +func (c *MyConfig) GetInt(keyPath string) (int, error) { + return c.configSource.GetInt(keyPath) +} + +func (c *MyConfig) GetBool(keyPath string) (bool, error) { + return c.configSource.GetBool(keyPath) +} +``` + +63. 修改依赖初始化的方式(构造函数注入): + +Filepath: service/service_context.go +Replace lines: 130-150 +```go +func NewCore( + config ConfigProvider, + redisConn RedisConnector, + httpClient HTTPClient, + logger Logger, +) *Core { + core := &Core{ + Config: config, + Redis: redisConn, + HTTPClient: httpClient, + Logger: logger, + RestQueueChan: make(chan *RestQueue), + WriteLogChan: make(chan *WriteLog), + } + + core.Env = os.Getenv("GO_ENV") + core.FluentBitUrl = os.Getenv("SARDINE_FluentBitUrl") + + logger.Info("当前环境: ", core.Env) + logger.Info("FluentBit地址: ", core.FluentBitUrl) + + return core +} +``` + +64. 修改数据访问层依赖: + +Filepath: data/coaster.go +Replace lines: 0-0 +```go +type CoasterStorage interface { + Set(key string, value interface{}, expiration time.Duration) error + Get(key string) (string, error) +} + +func (co *Coaster) SetToKey(storage CoasterStorage) error { + js, _ := json.Marshal(co) + coasterName := co.InstID + "|" + co.Period + "|coaster" + return storage.Set(coasterName, js, 0) +} +``` + +主要改进点: + +65. 接口隔离: +- 将大的RedisService拆分为RedisConnector +- 将配置访问抽象为ConfigProvider +- 将日志记录抽象为Logger接口 +- 将HTTP客户端抽象为HTTPClient接口 + +66. 依赖注入: +- 通过构造函数注入核心依赖 +- 数据存储层通过接口访问 +- 移除对具体实现的直接依赖(如logrus、redis.Client) + +67. 实现解耦: +- 核心业务逻辑不再依赖具体框架 +- 配置系统可替换实现 +- 数据存储可替换实现 +- 日志系统可替换实现 + +建议后续改进方向: + +68. 为每个包定义明确的接口 +69. 使用依赖注入容器管理生命周期 +70. 将领域模型与基础设施分离 +71. 为关键组件添加接口的mock实现 +72. 使用选项模式优化多参数初始化 + +示例接口定义文件(新建interfaces.go): + +Filepath: core/interfaces.go +Replace lines: 1-0 +```go +package core + +import ( + "time" + "github.com/go-redis/redis" +) + +// 领域服务接口 +type CandleManager interface { + GetCandles(instID string, period string) ([]*Candle, error) + SaveCandle(candle *Candle) error +} + +// 基础设施接口 +type RedisService interface { + GetClient(options *redis.Options) (*redis.Client, error) + Ping(client *redis.Client) error +} + +type HTTPRequester interface { + Get(url string) ([]byte, error) + Post(url string, body []byte) ([]byte, error) +} + +// 领域事件接口 +type EventPublisher interface { + Publish(topic string, message interface{}) error + Subscribe(topic string, handler func(message []byte)) error +} +``` + +这些改动将显著提高代码的可测试性、可维护性和可扩展性,同时降低模块间的耦合度。 + +**Generation complete!** Please review the code suggestions above. \ No newline at end of file diff --git a/core/循环依赖相关对话.md b/core/循环依赖相关对话.md new file mode 100644 index 0000000..09a38c6 --- /dev/null +++ b/core/循环依赖相关对话.md @@ -0,0 +1,397 @@ + +> 这里,我引入 github.com/phyer/core/service 为的是让 Candle struct里的 属性 core 得到正确的类型, 结果出现了 循环以来, 那么我该如何用刚才提到的依赖注入和接口隔离的方式来规避 +> + + +🤔 Thought content: + + +首先,我得理解问题所在。循环依赖通常发生在两个或多个包相互引用的时候。比如,如果model包引用了service包,而service包又引用了model包,就会形成循环。用户的结构体Candle有一个core字段,类型是service.Core,这可能导致model包依赖service包,而如果service包也依赖model包,就会循环。 + +接下来,用户想通过依赖注入和接口隔离来解决。依赖注入的意思是,不直接持有具体类型的实例,而是通过接口来抽象,从而解耦。接口隔离则是定义小接口,只暴露必要的方法,减少依赖。 + +我需要先检查用户的代码。在提供的代码中,Candle结构体的core字段类型是*service.Core。但用户提到引入了"github.com/phyer/core/service",这可能是指service包中的Core结构体。如果model包(即当前文件所在的包)引用了service包,而service包又引用了model包,就会形成循环。 + +解决方案应该是将core字段的类型从具体的service.Core改为一个接口类型,该接口包含Candle所需的方法。这样,model包就不再直接依赖service包,而是依赖一个本地定义的接口。service包中的Core结构体可以实现这个接口,从而解除循环依赖。 + +具体步骤可能如下: + +1. 在model包中定义一个接口,比如CoreService,包含Candle结构体需要使用的方法。例如,如果Candle的core字段需要调用Cfg、RedisLocalCli等方法,就在接口中声明这些方法。 + +2. 将Candle结构体中的core字段类型改为这个接口类型,比如core CoreService。 + +3. 在service包中,确保Core结构体实现了model.CoreService接口的所有方法。这样,当service包导入model包时,不会有循环,因为model包现在只依赖接口,而接口在model包内部定义。 + +4. 调整代码中所有使用core字段的地方,确保通过接口方法访问,而不是直接访问结构体字段。 + +例如,用户代码中Candle结构体的core字段是*service.Core类型,改为CoreService接口类型后,循环依赖就被打破了。因为model包现在只依赖自己定义的接口,而service包实现该接口,不需要反过来引用model包中的具体类型。 + +需要检查用户提供的代码中core字段被使用的地方。例如,在SaveCandle方法中,core.Cfg.Config.Get这样的调用,说明Core结构体需要有Cfg字段。因此在CoreService接口中,可能需要一个GetCfg()方法,返回配置对象。 + +这样,model包中的代码通过接口方法访问core的功能,而不直接依赖service包的具体实现。service包中的Core结构体实现这个接口,从而解除了循环依赖。 + +最后,用户需要修改Candle结构体的core字段类型,定义接口,并调整所有使用core的地方,改为调用接口方法。这样就能避免循环依赖的问题。我们可以通过以下步骤用接口隔离和依赖注入解决循环依赖问题: + +1. 首先在model包中定义核心服务需要的接口 +2. 修改Candle结构体使用接口类型 +3. 保持service包实现这个接口 + +具体修改如下: + +Filepath: model/candle.go +Replace lines: 23-26 +```go +// 定义核心服务接口 +type CoreService interface { + GetCfg() *simple.Json + GetRedisLocalCli() *redis.Client + AddToGeneralCandleChnl(candle *Candle, channels []string) + PeriodToMinutes(period string) (int64, error) + // 其他需要的方法... +} + +type Candle struct { + Id string `json:"_id"` + core CoreService // 改为接口类型 + InstID string `json:"instID"` +``` + +需要确保在service包中让Core结构体实现这个接口: + +```go +// 在service包中 +func (c *Core) GetCfg() *simple.Json { + return c.Cfg +} + +func (c *Core) GetRedisLocalCli() *redis.Client { + return c.RedisLocalCli +} + +func (c *Core) AddToGeneralCandleChnl(candle *model.Candle, channels []string) { + // 原有实现... +} + +func (c *Core) PeriodToMinutes(period string) (int64, error) { + // 原有实现... +} +``` + +这种修改的好处: +4. 解除了model和service包的循环依赖 +5. model包只依赖自己定义的接口 +6. service包实现model定义的接口 +7. 更容易进行单元测试(可以mock核心服务) +8. 明确声明了依赖关系和方法契约 + +需要同步修改所有使用core字段的地方,例如: +Filepath: model/candle.go +Replace lines: 0-0 +```go +core.GetCfg().Get(...) +``` + +这样的接口隔离配合依赖注入(在创建Candle时传入实现了CoreService的对象),可以有效解决循环依赖问题。 + +--- + +- Datetime: 2025-02-21 13:48:10 + +- Model: alidsr1/deepseek-r1 + +- Selected files: + - model/candle.go + +- Selected code: + +```go + + simple "github.com/bitly/go-simplejson" + "github.com/go-redis/redis" + "github.com/phyer/core/service" + "github.com/phyer/texus/utils" + logrus "github.com/sirupsen/logrus" +) +``` + +> 这个model包自己定义的接口能放到util包下吗, util包不依赖任何其他包, + +🤔 Thought content: + + > 首先,用户提供的代码中,model包定义了几个接口,比如CoreService、Sample、SampleList,以及结构体如Candle、CandleList等。这些接口可能被其他包或model内部的结构体和方法所依赖。 + + +用户的问题是将这些接口移到util包下是否可行,同时确保util包不依赖其他包。这意味着,我需要检查这些接口是否引用了model包或其他包的类型。如果接口中的方法参数或返回值使用了model或其他包的类型,那么将这些接口移到util包会导致util包依赖这些类型所在的包,从而违反util包不依赖其他包的条件。 + +查看代码中的CoreService接口,它的方法如GetCfg()返回了*simple.Json,而simple来自"github.com/bitly/go-simplejson",这属于外部依赖。同样,GetRedisLocalCli()返回*redis.Client,来自"github.com/go-redis/redis"。还有AddToGeneralCandleChnl方法参数中有*Candle,这是model包内的类型。因此,CoreService接口依赖了外部包和model包本身,无法移到util包,因为util不能有这些依赖。 + +接下来是Sample接口,SetToKey方法参数是*CoreService,同样CoreService在model中定义,并且CoreService本身依赖了外部包。所以Sample接口也不能移到util。 + +SampleList接口中的方法返回[]*Sample,而Sample是当前包的接口,同样涉及model包的依赖。 + +因此,结论是这些接口不能移到util包,因为它们引用了model包内或外部的类型,导致util包会产生依赖。需要保持接口在model包中,或者重新设计接口以避免依赖,但这可能影响现有功能。 + +最后,向用户解释这些分析,说明原因,并建议保持接口在model包中,或者考虑其他重构方式。通过分析代码,model包中定义的接口存在以下依赖问题,无法直接移动到独立的util包: + +9. CoreService接口依赖了其他包的组件: +```go +type CoreService interface { + GetCfg() *simple.Json // 依赖github.com/bitly/go-simplejson + GetRedisLocalCli() *redis.Client // 依赖github.com/go-redis/redis + AddToGeneralCandleChnl(candle *Candle, channels []string) // 依赖本包Candle类型 + //... +} +``` + +10. Sample接口也依赖了本包类型: +```go +type Sample interface { + SetToKey(cr *CoreService) ([]interface{}, error) // 参数依赖本包CoreService +} +``` + +11. SampleList接口依赖本包类型: +```go +type SampleList interface { + GetSectionOf(start int, end int) ([]*Sample, error) // 返回本包Sample类型 +} +``` + +建议方案: +12. 保持接口定义在model包中(当前最佳方案) +13. 如果确实需要独立util包,需要解耦依赖: +```go +// 需要先定义基础接口(在util包) +type BasicService interface { + // 只包含最基础的方法,不依赖具体实现 +} + +// 原model包中扩展接口 +type CoreService interface { + util.BasicService // 组合基础接口 + // 保留原项目特定方法 +} +``` + +需要我继续提供解耦方案的具体实现代码吗?这需要对现有代码结构进行较大调整。 + +--- + +- Datetime: 2025-02-21 14:06:06 + +- Model: alidsr1/deepseek-r1 + +- Selected files: + - core/interfaces.go + - config/config.go + - config/const.go + - data/coaster.go + - data/pixel.go + - data/plate.go + - data/rsi.go + - data/segmentItem.go + - data/series.go + - data/shearForceGrp.go + - data/sorted.go + - data/tray.go + - model/candle.go + - model/maX.go + - model/ticker.go + - service/service_context.go + - util/util.go + - util/writeLog.go + +- Selected code: + +```go +// 领域服务接口 +type CandleManager interface { + GetCandles(instID string, period string) ([]*Candle, error) + SaveCandle(candle *Candle) error +} + +// 基础设施接口 +type RedisService interface { + GetClient(options *redis.Options) (*redis.Client, error) + Ping(client *redis.Client) error +} +``` + +> 那既然model模块中定义接口, 让 service模块里的 core的struct去实现这个接口, 那么 core/interfaces.go里的接口是做什么的 +> + +🤔 Thought content: + 让 service模块里的 core的struct去实现这个接口, 那么 core/interfaces.go里的接口是做什么的”。首先,我需要理解用户的问题背景和他们可能存在的困惑。 + +用户提到在model模块中定义了接口,并让service模块的core结构体实现这些接口,然后问core/interfaces.go中的接口的作用。我需要先看看提供的代码内容,特别是interfaces.go文件中的内容。 + +查看用户提供的core/interfaces.go文件,里面定义了多个接口,如CandleManager、RedisService、HTTPRequester、EventPublisher等。这些接口似乎是领域服务和基础设施接口的抽象。例如,CandleManager定义了获取和保存蜡烛图数据的方法,而RedisService涉及Redis客户端的获取和健康检查。 + +用户可能混淆了不同层次接口的用途。model模块中的接口可能是领域模型相关的,而core/interfaces.go中的接口可能是更上层的应用服务或基础设施接口。需要明确两者在架构中的不同角色。 + +接下来,我应该解释接口的分层设计。在六边形架构或清洁架构中,通常会有领域层、应用层和基础设施层。领域层接口定义核心业务逻辑,应用层接口定义用例,基础设施层实现具体技术细节。core/interfaces.go中的接口可能属于应用层或基础设施层,而model中的接口属于领域层。 + +需要指出core/interfaces.go中的接口作用,例如CandleManager作为领域服务接口,由service层的Core结构体实现,这样可以将业务逻辑与技术实现分离,提高可测试性和可维护性。RedisService则是基础设施接口,由具体的Redis客户端实现,遵循依赖倒置原则,允许更换底层技术而不影响上层逻辑。 + +总结时,应强调core/interfaces.go中的接口定义了服务层和基础设施的契约,而model中的接口可能更偏向领域模型,两者各司其职,共同支持系统的松耦合设计。通过分析代码结构和架构设计,可以明确不同接口的职责定位: + +14. `core/interfaces.go` 中的接口是领域层与基础设施层的契约 +```go +// 领域服务接口(面向业务能力) +type CandleManager interface { + GetCandles(instID string, period string) ([]*Candle, error) + SaveCandle(candle *Candle) error +} + +// 基础设施接口(面向技术实现) +type RedisService interface { + GetClient(options *redis.Options) (*redis.Client, error) + Ping(client *redis.Client) error +} +``` + +15. 具体实现关系示意图 +``` +┌───────────────┐ ┌───────────────┐ +│ Domain │ │ Infrastructure│ +│ (model包) │<─依赖注入 ─┤ (service包) │ +└──────┬────────┘ └──────┬────────┘ + │ │ + │ core/interfaces.go │ + │ ┌───────────────────┐ │ + └─>│ CandleManager │ │ + │ HTTPRequester │<──┘ + └───────────────────┘ +``` + +16. 关键区别说明: + +| 维度 | model包接口 | core/interfaces.go接口 | +|--------------------|-------------------------------------|-----------------------------------| +| **定位** | 领域模型内部契约 | 跨层协作的抽象边界 | +| **使用者** | 领域对象之间相互调用 | 业务服务与基础设施实现的对接点 | +| **变化频率** | 随业务需求变化 | 随系统架构演进变化 | +| **实现位置** | 领域层内部实现 | 基础设施层(如redis/http实现) | +| **示例** | 如Candle实体行为 | 如RedisService定义存储访问规范 | + +17. 设计意图解析: +- 控制反转(IoC):通过`core/interfaces.go`定义抽象,允许service层实现具体逻辑 +- 解耦分层:领域层不直接依赖具体redis/http实现,而是通过接口抽象 +- 可测试性:Mock这些接口可以方便进行单元测试 +- 可扩展性:更换存储方案只需实现相同接口,不影响业务逻辑 + +18. 典型工作流程示例: +```go +// 基础设施层实现接口 +type Core struct { + redisService RedisService // 依赖接口 +} + +func (c *Core) GetClient(opts *redis.Options) (*redis.Client, error) { + // 具体实现redis连接逻辑 +} + +// 领域层通过接口使用 +func ProcessCandle(cm CandleManager) { + cm.SaveCandle(&Candle{...}) // 实际调用Core的实现 +} +``` + +这种设计模式遵循了SOLID原则中的: +- 依赖倒置原则(DIP) +- 接口隔离原则(ISP) +- 开闭原则(OCP) + +通过这种分层,当需要替换存储方案(如从Redis改为MySQL)时,只需实现相同的RedisService接口,而无需修改业务逻辑代码。 + + +> 也就是说, 就算Core 这个struct 里面的属性,不管有没有interface, 并不影响 model里创建 interface, 让Core struct实现model的interface, 并且绕过循环依赖的限制这件事,对吧 + +🤔 Thought content: + + > 首先,我需要回忆Go语言中接口和结构体的关系。在Go中,接口是隐式实现的,不需要显式声明。这意味着只要Core结构体实现了model包中定义的接口的所有方法,就自动满足接口的要求,而无需在Core结构体中导入model包。 + + +接下来,用户提到的循环依赖问题。循环依赖通常发生在两个或多个包相互引用时。例如,如果model包引用了core包,而core包又引用了model包,就会导致编译错误。为了避免这种情况,可以在model包中定义接口,而core包中的结构体实现这些接口。由于core包不需要导入model包来定义结构体,只要在方法实现时正确使用接口,就可以避免循环依赖。 + +用户的问题中提到,即使Core结构体内部有其他属性,只要这些属性不涉及model包中的具体类型,就不会导致循环依赖。例如,如果Core结构体有一个Redis客户端或其他与model无关的属性,这不会影响接口的实现,因为接口只关心方法签名,而不关心结构体的内部属性。 + +我需要验证这一点。假设在model包中定义了一个CoreService接口,包含GetCfg()和GetRedisLocalCli()方法。在core包中,Core结构体实现了这些方法,即使Core结构体内部有Redis客户端或其他属性,只要这些属性的类型不来自model包,就不会导致循环依赖。这样,model包可以依赖core包中的接口实现,而core包不需要导入model包,从而打破循环依赖。 + +此外,用户提到的绕过循环依赖的关键在于接口定义和实现的方式。通过在model包中定义接口,并在core包中实现,避免了core包导入model包,从而解决了循环依赖的问题。这种方法符合Go语言的接口隐式实现特性,允许解耦包之间的依赖关系。 + +最后,我需要确认用户的理解是否正确。用户认为,即使Core结构体有其他属性,只要不直接引用model包中的具体类型,就可以实现接口并避免循环依赖。这是正确的,因为接口的实现只依赖于方法的存在,而不是结构体的内部结构。因此,用户的理解是正确的,这种设计模式可以有效解决循环依赖问题。是的,您的理解完全正确。让我们通过几个关键点来梳理这个设计思路: + +1. **接口定义与实现解耦**: +```go +// model/candle.go +package model + +type CoreService interface { + GetCfg() *simple.Json + GetRedisLocalCli() *redis.Client + // 只定义需要的方法签名 +} +``` + +2. **Core 结构体实现**: +```go +// core/core.go +package core + +type Core struct { + cfg *MyConfig + redisLocalCli *redis.Client + // 其他不涉及 model 包的字段 +} + +// 实现接口方法(无需导入 model 包) +func (c *Core) GetCfg() *simple.Json { + return c.cfg.Config +} + +func (c *Core) GetRedisLocalCli() *redis.Client { + return c.redisLocalCli +} +``` + +1. **在 model 包中的使用**: +```go +// model/candle.go +func (cd *Candle) Filter(cr CoreService) bool { + // 通过接口访问核心服务 + cfg := cr.GetCfg() + redis := cr.GetRedisLocalCli() + // ... +} +``` + +关键优势: +- ✅ **无循环依赖**:`core` 包不需要导入 `model` 包 +- ✅ **关注点分离**:`model` 包只定义所需行为的契约(接口) +- ✅ **灵活实现**:`Core` 结构体可以自由添加字段(只要不直接依赖 `model` 的具体类型) +- ✅ **隐式接口实现**:Go 的鸭子类型特性自动实现接口匹配 + +实际场景示例: +```go +// 在 model 包中使用 +func ProcessCandle(c CoreService, candle *Candle) { + // 通过接口调用核心服务 + redis := c.GetRedisLocalCli() + redis.Set("key", candle, 0) + + cfg := c.GetCfg() + period := cfg.Get("period").MustString() + // ... +} +``` + +这种模式的关键点在于: +2. 接口定义方 (`model`) 不关心具体实现 +3. 实现方 (`core`) 不需要知道接口的存在 +4. 依赖方向保持单向:`model` -> `core` (通过接口) +5. 完全解耦核心服务与领域模型 + +这种方法特别适合大型项目架构,能有效解决包循环依赖问题,同时保持代码的灵活性和可测试性。 + +**Generation complete!** Please review the code suggestions above. diff --git a/core/循环依赖问题.md b/core/循环依赖问题.md new file mode 100644 index 0000000..d50341e --- /dev/null +++ b/core/循环依赖问题.md @@ -0,0 +1,271 @@ +> 现在 service 模块下的 Core struct, 里面包含很多 比如Candle, MaX, SegemtnItem等类型的子元素, 反过来, Candle所在的model模块, 也需要引入 service 模块里的core对象, 那么就将形成 循环依赖, 我现在需要做的是 对依赖的方向进行一个确认, 比如依赖的顺序是 model单项依赖service, service单项依赖data, 我只是举个例子, 我需要做一个这样的确认, 并把每个文件放到应该放的模块中, 然后, 把某些文件中不应该放在这个文件里的函数等,移到适合的为止上去. 最后,用接口进行抽象, 把某个上游struct中,包含依赖关系中下游类型的属性 +> ,都变成接口,让下游的struct去实现接口,从而实现依赖注入防止循环依赖, + +<think> +好的,我需要解决用户提到的循环依赖问题。用户的主要问题是service模块下的Core结构体引用了其他模块如model、data中的类型,而这些模块又反过来引用了service模块,导致循环依赖。用户希望调整依赖方向,确保单向依赖,并通过接口抽象来解决循环引用。 +</think> + + +首先,我需要理清当前各个模块之间的依赖关系。根据用户提供的代码,model/candle.go中的Candle结构体引用了service.Core,而service/service_context.go中的Core结构体又包含了data、model等模块的类型。这确实形成了循环依赖。 + +接下来,我需要确定一个合理的依赖方向。通常,高层模块(如service)应该依赖低层模块(如model、data),而低层模块不应依赖高层模块。因此,可以设定依赖顺序为:model → data → service。但需要检查现有代码是否符合这个方向。 + +查看代码发现,model模块中的Candle结构体引用了service.Core,这违反了低层模块不应依赖高层模块的原则。因此,需要将model模块中的service依赖移除,改为通过接口抽象。 + +解决方案是 **将Core结构体中需要被其他模块使用的方法抽象成接口** ,放在独立的包中,例如定义一个core包,包含CoreService接口。这样,model模块可以依赖core包中的接口,而service模块实现这些接口,从而打破循环依赖。 + +具体步骤可能包括: +1. 创建新的接口包(如core),定义CoreService接口,包含其他模块需要的方法。 +2. 修改model模块中的Candle结构体,将Core字段的类型改为core.CoreService接口。 +3. 调整service模块中的Core结构体,实现core.CoreService接口。 +4. 检查其他模块如data中的类似问题,进行相应的接口抽象。 + +此外,需要将各模块中的类型移动到合适的包中,确保依赖方向正确。例如,将数据模型集中在model包,业务逻辑集中在service包,数据处理在data包。 + +在调整过程中,需要注意各个结构体之间的引用关系,确保单向依赖。例如,service模块依赖data和model,而data和model只依赖core接口,不直接引用service的具体实现。 + +最后,通过依赖注入,将接口的具体实现传递给需要的地方,如model中的Candle结构体通过接口使用Core的功能,而不直接依赖service模块。 + +这样处理后,各模块之间的依赖关系将变得清晰,避免了循环依赖,提高了代码的可维护性和可扩展性。根据代码结构和功能分析,建议按以下方案调整架构: + +1. 依赖方向层级(单向依赖): + ``` + config → model → service → data + ↗---------------------↗ + ``` + +2. 模块划分建议: + +FILEPATH: core/interface.go(新增包) +```go +package core + +import ( + "time" + + "github.com/go-redis/redis" + simple "github.com/bitly/go-simplejson" +) + +// 核心服务接口(所有依赖上层的模块都通过这个接口访问) +type CoreService interface { + GetConfig() *simple.Json + GetRedisClient() *redis.Client + PeriodToMinutes(period string) (int64, error) + AddToGeneralCandleChnl(candle *model.Candle, channels []string) + // 其他需要暴露的方法... +} + +// 数据存储接口(供service层实现) +type DataRepository interface { + SaveCandle(candle *model.Candle) error + GetCandles(instID string, period string, limit int) ([]*model.Candle, error) + // 其他数据操作方法... +} + +// 分析服务接口(供data层使用) +type AnalyticsService interface { + AnalyzeCandle(candle *model.Candle) + GenerateReport(instID string) *data.Report + // 其他分析功能... +} +``` + +1. 各模块调整建议: + +(1)model 模块(基础数据结构): +- 只包含领域模型定义 +- 不依赖任何其他模块 +- 示例调整: + +FILEPATH: model/candle.go +```go +package model + +import ( + "time" +) + +type Candle struct { + InstID string + Period string + Open float64 + Close float64 + // ...其他字段 +} + +// 所有操作都通过接口 +func (c *Candle) Process(core CoreService) { + // 通过core接口操作 + core.AddToGeneralCandleChnl(c, []string{"channel"}) +} +``` + +(2)data 模块(数据存储/处理): +- 实现DataRepository接口 +- 依赖model和core接口 +- 包含: + - data/processor.go(数据处理) + - data/repository.go(存储实现) + - data/coaster.go(业务数据模型) + +(3)service 模块(业务服务): +- 实现CoreService接口 +- 依赖model和data模块 +- 包含: + - service/core_service.go(主服务实现) + - service/analytics.go(分析服务) + +(4)config 模块(配置): +- 保持独立 +- 被所有模块依赖 + +2. 关键调整示例: + +(1)修改service上下文: + +FILEPATH: service/service_context.go +```go +package service + +import ( + "core" + "model" + "data" +) + +type Core struct { + // 通过组合实现接口 + core.CoreService + core.AnalyticsService + + // 具体实现 + dataRepo data.DataRepository + // ...其他字段 +} + +// 实现CoreService接口 +func (c *Core) GetConfig() *simple.Json { + return c.config.GetConfigJson() +} + +// 实现DataRepository接口 +func (c *Core) SaveCandle(candle *model.Candle) error { + return c.dataRepo.Save(candle) +} +``` + +(2)调整data层: + +FILEPATH: data/processor.go +```go +package data + +import ( + "core" + "model" +) + +type CandleProcessor struct { + analytics core.AnalyticsService +} + +func NewProcessor(a core.AnalyticsService) *CandleProcessor { + return &CandleProcessor{analytics: a} +} + +func (p *CandleProcessor) Process(c *model.Candle) { + // 使用接口进行数据分析 + p.analytics.AnalyzeCandle(c) +} +``` + +3. 文件移动建议: + +(1)将原data/shearForceGrp.go、data/series.go 移动到 service/ 下,属于业务逻辑 + +(2)将原model/maX.go 移动到 data/,属于数据处理 + +4. 最终依赖关系: +``` +config → model → data → service + ↑ ↖ core ↗ + └------------┘ +``` + +这个架构调整后: + +5. 所有具体实现都面向接口编程 +6. 上层模块(service)依赖下层模块(data/model) +7. 核心接口定义在core包供各方依赖 +8. 每个模块的职责更清晰: + - model:纯数据结构 + - data:数据存储和处理 + - service:业务逻辑 + - core:接口定义 + +需要进行的*SEARCH/REPLACE*修改示例: + +(1)修改Candle结构定义: + +FILEPATH: model/candle.go +```go +Filepath: +<SEARCH> +type Candle struct { + Id string `json:"_id"` + Core CoreService // 改为接口类型 + InstID string `json:"instID"` +type Candle struct { + Id string `json:"_id"` + Processor core.CandleProcessor // 通过接口访问 + InstID string `json:"instID"` +``` +``` + +(2)调整service核心结构: + +FILEPATH: service/service_context.go +```go +Filepath: + +**Generation complete!** Please review the code suggestions above. + +``` + + +## 关键重构点说明: + +1. 依赖方向调整: +``` +config → model → data → service + ↗ ↖ + core ←──────┘ +``` + +2. 接口定义全部提升到core包,包括: +- 核心服务接口(CoreService) +- 数据操作接口(CandleManager) +- Redis服务接口(RedisService) +- 时间段服务接口(SegmentService) + +1. 具体实现: +- model:只包含数据结构和基础验证 +- data:实现数据存储相关逻辑 +- service:实现业务逻辑和服务组合 +- config:配置加载保持独立 + +2. 依赖注入: +- 通过构造函数显式注入依赖 +- 上层模块依赖下层接口而非实现 +- 核心接口定义统一在core包 + +需要继续完善的工作: + +3. 逐步替换所有具体类型引用为接口类型 +4. 使用依赖注入框架管理组件生命周期 +5. 添加接口的Mock实现用于单元测试 +6. 统一异常处理规范 +7. 增加领域事件机制 + + diff --git a/demo/三个运动定律.md b/demo/三个运动定律.md new file mode 100644 index 0000000..368f119 --- /dev/null +++ b/demo/三个运动定律.md @@ -0,0 +1,2 @@ + +运动定律是艾萨克·牛顿 (Isaac Newton) 提出的三个定律,它们描述了物体的运动与作用在其上的力之间的关系。 diff --git a/exhange.go.md b/exhange.go.md new file mode 100644 index 0000000..e69de29 diff --git a/freqtrade.md b/freqtrade.md new file mode 100644 index 0000000..e69de29 diff --git a/freqtrade_基础.md b/freqtrade_基础.md new file mode 100644 index 0000000..7048cb7 --- /dev/null +++ b/freqtrade_基础.md @@ -0,0 +1,241 @@ +帮我讲解一下下面的内容,没太看明白 + + + +``` +Bot execution logic¶Starting freqtrade in dry-run or live mode (using freqtrade trade) will start the bot and start the bot iteration loop. This will also run the bot_start() callback.By default, the bot loop runs every few seconds (internals.process_throttle_secs) and performs the following actions: +`` +Fetch open trades from persistence. +Calculate current list of tradable pairs. +Download OHLCV data for the pairlist including all informative pairs +This step is only executed once per Candle to avoid unnecessary network traffic. +Call bot_loop_start() strategy callback. +Analyze strategy per pair. + Call populate_indicators() + Call populate_entry_trend() + Call populate_exit_trend() +Update trades open order state from exchange. + Call order_filled() strategy callback for filled orders. + Check timeouts for open orders. + Calls check_entry_timeout() strategy callback for open entry orders. + Calls check_exit_timeout() strategy callback for open exit orders. + Calls adjust_order_price() strategy callback for open orders. + Calls adjust_entry_price() strategy callback for open entry orders. only called when adjust_order_price() is not implemented + Calls adjust_exit_price() strategy callback for open exit orders. only called when adjust_order_price() is not implemented +Verifies existing positions and eventually places exit orders. + Considers stoploss, ROI and exit-signal, custom_exit() and custom_stoploss(). + Determine exit-price based on exit_pricing configuration setting or by using the custom_exit_price() callback. + Before an exit order is placed, confirm_trade_exit() strategy callback is called. +Check position adjustments for open trades if enabled by calling adjust_trade_position() and place additional order if required. +Check if trade-slots are still available (if max_open_trades is reached). +Verifies entry signal trying to enter new positions. + Determine entry-price based on entry_pricing configuration setting, or by using the custom_entry_price() callback. + In Margin and Futures mode, leverage() strategy callback is called to determine the desired leverage. + Determine stake size by calling the custom_stake_amount() callback. + Before an entry order is placed, confirm_trade_entry() strategy callback is called. +``` + + +这段内容是 Freqtrade 官方文档中关于“机器人执行逻辑”(Bot Execution Logic)的描述,主要讲解了 Freqtrade 交易机器人在启动后(无论是模拟模式 Dry-run 还是实盘模式 Live mode)如何通过一个循环(Bot Iteration Loop)持续运行并执行交易相关的操作。你的困惑可能来自于专业术语较多或逻辑流程不够直观,下面我会尽量用通俗的语言一步步拆解这段内容。 + +--- + +核心概念 + +Freqtrade 的机器人并不是一次性执行完所有任务后就停止,而是像一个“永动机”一样,每隔几秒(由 internals.process_throttle_secs 参数控制,默认为几秒钟)运行一次完整的逻辑循环。这个循环会检查市场、更新交易状态、执行买卖操作,直到你手动停止机器人。 + +启动机器人时(用命令 freqtrade trade),会触发以下流程: + +1. 初始化: 调用 bot_start() 回调函数(如果你在策略中定义了这个函数,它会在机器人启动时执行一次)。 + +2. 进入循环: 每隔几秒执行一次完整的逻辑。 + + +--- + +循环中的每一步 + +下面是循环中每次迭代的具体步骤,我会逐一解释它们的含义和作用: + +1. 从持久化存储中获取未关闭的交易 + +- 含义: 检查当前有哪些交易(比如已经买入但还没卖出的订单)还在进行中。 + +- 作用: 确保机器人知道当前的交易状态,避免重复操作或遗漏已有交易。 + +- 举例: 你昨天买了 BTC/USD,今天机器人启动后会先加载这些未卖出的交易。 + + +2. 计算当前可交易的货币对列表 + +- 含义: 根据你的配置(pairlist,交易对列表),确定当前可以交易的货币对(比如 BTC/USD、ETH/USD)。 + +- 作用: 动态更新交易对,可能剔除流动性差的或添加新的交易对。 + +- 你的背景: 类似你在 Go/Node.js 中动态管理 API 请求的目标列表。 + + +3. 下载 OHLCV 数据 + +- 含义: OHLCV 是指“开盘价、最高价、最低价、收盘价、成交量”的数据,用于分析市场走势。 + +- 细节: + + - 只针对配置中的交易对和“信息对”(informative pairs,可能用于辅助决策的额外数据)。 + + - 为了减少网络请求,每根K线(比如 1小时K线)只下载一次。 + +- 作用: 为后续策略分析提供最新的市场数据。 + +- 举例: 下载了过去 1 小时 BTC/USD 的价格数据。 + + +4. 调用 bot_loop_start() 回调 + +- 含义: 如果你在策略中定义了这个函数,它会在每次循环开始时运行。 + +- 作用: 让你插入自定义逻辑,比如打印日志或检查外部条件。 + +- 举例: 你可以用它记录每次循环的时间。 + + +5. 逐个分析交易对的策略 + +- 含义: 对每个交易对运行你的策略代码,分三步调用: + + 1. populate_indicators(): 计算技术指标(如均线、RSI)。 + + 2. populate_entry_trend(): 判断是否应该买入(进场信号)。 + + 3. populate_exit_trend(): 判断是否应该卖出(离场信号)。 + +- 作用: 这是策略的核心,决定买卖的时机。 + +- 举例: 如果 BTC/USD 的价格高于 20 日均线,可能触发买入信号。 + + +6. 从交易所更新交易和订单状态 + +- 含义: 检查当前订单的状态(比如是否已成交、是否超时)。 + +- 细节: + + - 如果订单已成交,调用 order_filled() 回调。 + + - 检查未成交订单是否超时: + + - 买入订单超时调用 check_entry_timeout()。 + + - 卖出订单超时调用 check_exit_timeout()。 + + - 调整订单价格(如果需要): + + - 调用 adjust_order_price(),如果没实现则分别调用 adjust_entry_price()(买入)和 adjust_exit_price()(卖出)。 + +- 作用: 确保订单状态与交易所一致,避免错过成交或长时间挂单。 + +- 举例: 你下的买入订单 1 小时没成交,机器人可能会取消它。 + + +7. 检查现有仓位并决定是否卖出 + +- 含义: 检查当前持有的仓位(已买入但未卖出的交易),决定是否需要卖出。 + +- 细节: + + - 考虑止损(stoploss)、投资回报率(ROI)、卖出信号(exit-signal)等。 + + - 可通过 custom_exit() 或 custom_stoploss() 自定义卖出逻辑。 + + - 卖出价格由配置中的 exit_pricing 或 custom_exit_price() 决定。 + + - 卖出前调用 confirm_trade_exit() 确认。 + +- 作用: 自动执行卖出操作,比如达到盈利目标或触发止损。 + +- 举例: BTC/USD 涨了 5%,达到 ROI,机器人自动卖出。 + + +8. 调整现有交易的仓位 + +- 含义: 如果开启了仓位调整功能,调用 adjust_trade_position() 检查是否需要加仓或减仓。 + +- 作用: 动态管理仓位,比如在盈利时加仓。 + +- 举例: BTC/USD 涨了 3%,你决定再投入一部分资金。 + + +9. 检查交易槽位是否可用 + +- 含义: 检查是否达到最大同时交易数量(max_open_trades)。 + +- 作用: 避免超过设定的交易上限。 + +- 举例: 如果上限是 5 个交易,而已有 5 个未关闭,就不会开新仓。 + + +10. 验证买入信号并开新仓 + +- 含义: 如果有买入信号(由 populate_entry_trend() 生成),决定是否下单买入。 + +- 细节: + + - 买入价格由 entry_pricing 配置或 custom_entry_price() 决定。 + + - 在杠杆模式(Margin/Futures)下,调用 leverage() 确定杠杆倍数。 + + - 调用 custom_stake_amount() 确定投入金额。 + + - 买入前调用 confirm_trade_entry() 确认。 + +- 作用: 执行买入操作,开新仓。 + +- 举例: ETH/USD 触发买入信号,机器人以市价买入 0.1 ETH。 + + +11. 重复循环 + +- 上述步骤完成后,机器人等待几秒(process_throttle_secs),然后重新开始循环,直到你停止它。 + + +--- + +用生活化的比喻理解 + +想象 Freqtrade 是一个“超市收银员”,每隔几秒检查一次: + +1. 看看手头的单子(获取未关闭交易)。 + +2. 更新商品清单(计算交易对列表)。 + +3. 拿最新的价格表(下载 OHLCV 数据)。 + +4. 喊一声开工(bot_loop_start())。 + +5. 分析每个商品是否值得买或卖(策略分析)。 + +6. 确认订单状态(更新交易所数据)。 + +7. 决定卖掉手里的货(检查仓位并卖出)。 + +8. 调整购物篮里的东西(调整仓位)。 + +9. 看看还能不能再买(检查交易槽位)。 + +10. 发现好货就下单(执行买入)。 然后重复这个过程,像一个勤劳的机器人收银员。 + + +--- + +对你的背景的适应 + +- Go/Node.js 经验: 这个循环类似于事件驱动编程(Event Loop),每次迭代处理一堆任务。你可以把回调函数(callback)看作异步任务的处理器。 + +- Linux 运维经验: 你可以轻松管理 Freqtrade 的日志(user_data/log)、进程(用 ps 或 docker ps 查看),甚至写脚本监控性能。 + + +--- + +如果还有疑问 + +- 你没看明白的具体是哪部分?是回调函数的作用,还是某个步骤的逻辑?告诉我,我再深入讲解! \ No newline at end of file diff --git a/freqtrade_理解消化.md b/freqtrade_理解消化.md new file mode 100644 index 0000000..680b0a8 --- /dev/null +++ b/freqtrade_理解消化.md @@ -0,0 +1,5 @@ + +[populate_indicators函数](populate_indicators函数) + +问题列表: +1. 既然是freqtrade调用populate_indicators,那么OHLCV在哪儿,又是怎么计算成不同timeframe的指标的,比如我有12个币对,12个timeframe,然后我关注n种类型的指标,怎么安排计算这144*n个指标,计算完了如何存放是否要进行数据持久化,或者所谓的落盘。 \ No newline at end of file diff --git a/n8n/Getting_started.md b/n8n/Getting_started.md new file mode 100644 index 0000000..cc0b39a --- /dev/null +++ b/n8n/Getting_started.md @@ -0,0 +1,73 @@ +https://docs.n8n.io/learning-path/ + +这是一篇n8n入门指南,涵盖社区交流、注册安装、试用学习、自主搭建等多方面内容,帮助用户快速上手n8n: 1. **社区互动**:n8n社区活跃,用户可在社区论坛提问、提需求,在GitHub上报Bug、做贡献。 2. **注册与安装**:尚无账号的用户,可在n8n Cloud注册免费试用,或用Docker(推荐)、npm安装社区版,详情可查看“Choose your n8n” 。 3. **试用体验**:新手可通过快速入门指南搭建基础工作流程,包括超快速入门、详细入门教程,还有构建AI工作流程的指引 。 4. **课程学习**:n8n提供视频课程和文本课程。视频课程分为初学者和高级课程,分别讲解基础和复杂功能;文本课程分初、中级,用户学习同时构建复杂工作流程,还能获得徽章和头像。 5. **自主搭建**:探索n8n的多种自托管选项,热门方案有在DigitalOcean和亚马逊云服务上进行搭建 。 6. **自定义节点**:若找不到特定应用或服务的节点,用户可自行构建并分享。可参考npm网站他人成果,学习构建声明式节点和自定义节点(YouTube视频教程) 。 7. **资讯关注**:通过版本说明了解新功能和Bug修复情况,还可在Twitter/X、Discord等社交平台关注n8n 。 + +![[Pasted image 20250204021453.png]] + +- - 新手引导概述 + + - 本指南助力用户开启n8n学习之旅 + + - 可依需求选择相关学习内容 + + - 社区互动渠道 + + - 在社区论坛提问和提功能需求 + + - 在GitHub上报Bug和贡献代码 + + - 搭建n8n环境 + + - 注册n8n Cloud免费试用账号 + + - 用Docker或npm安装社区版 + + - 上手体验操作 + + - 通过快速入门指南搭建基础流程 + + - 尝试搭建AI工作流程 + + - 课程学习资源 + + - 视频课程涵盖初高级知识要点 + + - 文本课程边学边搭建复杂流程 + + - 自主搭建方案 + + - 在DigitalOcean上托管n8n + + - 在亚马逊云服务上托管n8n + + - 自定义节点构建 + + - 自行构建节点并分享给社区 + + - 学习构建声明式风格的节点 + + - 关注更新动态 + + - 从发布说明了解新功能和修复 + + - 在多平台关注n8n官方动态 + + +## 学习路径 + +https://docs.n8n.io/learning-path/#set-up-your-n8n + +这是n8n的新手引导网页,为用户提供了入门教程和资源,帮助其快速上手使用n8n。 +1. **社区支持**:n8n社区活跃,用户能在社区论坛提问、提功能需求,也可在GitHub上报Bug和贡献代码。 +2. **基础准备**:没有账号的用户,可以注册n8n Cloud免费试用版,或用Docker(推荐) 、npm安装社区版。 +3. **快速上手**:通过快速入门指南搭建基础工作流,有“非常快速的快速入门”“较长的介绍”以及“在n8n中构建AI工作流”等内容。 +4. **课程学习**:包含视频课程和文本课程。视频课程分初级和高级,分别涵盖n8n基础及复杂工作流等内容; + - The [Beginner](https://www.youtube.com/playlist?list=PLlET0GsrLUL59YbxstZE71WszP3pVnZfI) course covers the basics of n8n. + - The [Advanced](https://www.youtube.com/playlist?list=PLlET0GsrLUL5bxmx5c1H1Ms_OtOPYZIEG) course covers more complex workflows, more technical nodes, and enterprise features +6. 文本课程可在构建复杂工作流同时学习关键概念,完成还能获徽章和头像。 + - [Level 1: Beginner Course](https://blog.n8n.io/announcing-the-n8n-certification-course-for-beginners-level-1/) + - [Level 2: Intermediate Course](https://blog.n8n.io/announcing-course-level-two/) +7. **自主托管**:可探索多种自托管选项,热门选择有在DigitalOcean和亚马逊云服务上托管。 +8. **节点构建**:若找不到特定应用或服务的节点,可自行构建并分享,还能参考npm网站上他人的成果。 +9. **动态关注**:通过版本说明了解新功能和Bug修复情况,还能在Twitter/X、Discord等社交平台关注n8n。 +![[Pasted image 20250204022601.png]] \ No newline at end of file diff --git a/n8n/如何触发.md b/n8n/如何触发.md new file mode 100644 index 0000000..28f757b --- /dev/null +++ b/n8n/如何触发.md @@ -0,0 +1,28 @@ + +obsidian://open?vault=myNotes&file=n8n%2FGetting%20started +1[asdf](obsidian://open?vault=myNotes&file=n8n%2FGetting%20started) + +n8n中某个workflow的触发条件主要有以下几种: + +1. **时间触发** + + - **定时任务触发**:可通过Cron节点或Interval节点实现。Cron节点能按照Cron表达式设定特定时间规则来触发,如每天凌晨2点执行,表达式为`0 0 2 * * *`。Interval节点则按固定时间间隔触发,比如每15分钟触发一次,可用于定时检查数据更新等任务。 + + - **特定时间点触发**:结合时间相关节点和逻辑判断,设置在某个具体时间点触发工作流,如在特定日期的某个时刻执行数据备份操作。 + - + +2. **事件触发** + + - **Webhook触发**:当外部系统发生特定事件时,通过向n8n发送Webhook请求来触发工作流。例如,在GitHub中创建了新的Issue或合并了Pull Request时,GitHub可向n8n配置的Webhook地址发送通知,从而触发相应的工作流来进行后续处理。 + + - **应用程序事件触发**:n8n连接的应用程序产生特定事件时触发,像ClickUp中创建新任务,可利用ClickUp的触发节点,当有新任务创建事件发生,就会触发关联的n8n工作流。 + + - **消息触发**:在即时通讯工具等应用场景中,收到特定消息或特定用户发送的消息时可触发工作流。如在Slack中收到特定关键词的消息,通过Slack节点监听消息事件来触发工作流进行自动回复等操作。 + +3. **数据变化触发** + + - **数据更新触发**:当连接的数据库、文件存储等数据源中的数据发生更新、插入或删除操作时触发。以MySQL数据库为例,可通过数据库节点监听数据变化,若某张表有新数据插入,就触发工作流进行数据同步或分析。 + + - **数据符合特定条件触发**:结合数据处理节点和条件判断节点,当数据满足特定条件时触发。如从Google Sheets获取数据,通过函数节点判断数据是否达到某个阈值,若达到则触发后续工作流进行预警等操作。 + +4. **手动触发**:在n8n界面中,可通过点击“Test Workflow”等按钮手动触发工作流,方便在开发、测试阶段或者有特殊需求时,即时执行工作流进行调试或数据处理。 \ No newline at end of file diff --git a/populate_indicator.md b/populate_indicator.md new file mode 100644 index 0000000..e69de29 diff --git a/populate_indicators.md b/populate_indicators.md new file mode 100644 index 0000000..e69de29 diff --git a/populate_indicators函数.md b/populate_indicators函数.md new file mode 100644 index 0000000..c36e6ae --- /dev/null +++ b/populate_indicators函数.md @@ -0,0 +1,12 @@ + + +```python + # 1. 计算指标 + def populate_indicators(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame: + # 计算 20 周期指数均线 + dataframe['ema20'] = dataframe['close'].ewm(span=20, adjust=False).mean() + return dataframe +``` + +参数:这里的参数 +1. self: \ No newline at end of file diff --git a/templates/阅读笔记.md b/templates/阅读笔记.md new file mode 100644 index 0000000..4b867da --- /dev/null +++ b/templates/阅读笔记.md @@ -0,0 +1,7 @@ +--- +date: +describe: +tags: +from link: +--- + diff --git a/可以用到的vim语法试试.md b/可以用到的vim语法试试.md new file mode 100644 index 0000000..4a47c79 --- /dev/null +++ b/可以用到的vim语法试试.md @@ -0,0 +1,16 @@ +--- +date: +describe: +tags: +from link: +--- +以下这些命令都可以用: +``` +ggdG +dd +%s/ab/cd/g + +``` + + + diff --git a/学英语/insert into redis.md b/学英语/insert into redis.md new file mode 100644 index 0000000..441e5bb --- /dev/null +++ b/学英语/insert into redis.md @@ -0,0 +1,11 @@ +写一个go文件, trans.go, 读取 ./output.csv, 此文件内容类似: +Grade,Book,Version,Unit,Lesson,Word,Pronunciation,Translation +1,人教新起点一年级上册英语,人教版,Unit 1,MY NUMBERS (L1-3),,, +1,人教新起点一年级上册英语,人教版,Unit 1,MY NUMBERS (L1-3),door,门 /dɔ:(r)/,door +... + +一共有几十万行, 6.3个G,文件很大,请优化代码, +把从第二行开始的每一行, 写进redis, key为 : word|${version}|${$word}, value为 ${Grade}|${Book}|${Version}|${Unit}|${Lesson}|${Word}|${Pronunciation}|${Translation} + +redis地址为 10.71.142.84:6379, dbNumber使用1 + diff --git a/学英语/请提供给我小学五年级之前应会的英语单词列表, 包括动词,名词,形容词,副词等等.md b/学英语/请提供给我小学五年级之前应会的英语单词列表, 包括动词,名词,形容词,副词等等.md new file mode 100644 index 0000000..724bc07 --- /dev/null +++ b/学英语/请提供给我小学五年级之前应会的英语单词列表, 包括动词,名词,形容词,副词等等.md @@ -0,0 +1,56 @@ + +以下是小学五年级之前应会的英语单词列表: + + + +### 名词 + +- **学习用品**:school(学校)、book(书)、pencil(铅笔)、ruler(尺子)、eraser(橡皮)、notebook(笔记本) + +- **家庭成员**:father(爸爸)、mother(妈妈)、brother(哥哥;弟弟)、sister(姐姐;妹妹)、uncle(叔叔;舅舅)、aunt(阿姨;姑姑) + +- **颜色**:red(红色)、blue(蓝色)、green(绿色)、yellow(黄色)、black(黑色)、white(白色) + +- **动物**:cat(猫)、dog(狗)、pig(猪)、duck(鸭)、rabbit(兔子)、bird(鸟) + +- **食物饮料**:rice(米饭)、bread(面包)、milk(牛奶)、water(水)、apple(苹果)、banana(香蕉) + +- **时间日期**:year(年)、month(月)、week(周)、day(天)、morning(早上)、afternoon(下午) + +- **地点场所**:home(家)、school(学校)、park(公园)、library(图书馆)、hospital(医院) + +- **交通工具**:car(汽车)、bus(公共汽车)、bike(自行车)、train(火车)、plane(飞机) + + + +### 动词 + +- **行为动作**:go(去;走)、come(来)、run(跑)、jump(跳)、swim(游泳)、fly(飞;放) + +- **感官动词**:see(看见)、hear(听见)、look(看)、listen(听)、taste(尝起来)、smell(闻起来) + +- **其他动词**:have(有;吃;喝)、do(做;干)、make(制作;做)、like(喜欢)、love(爱;喜爱)、want(想要)、give(给) + + + +### 形容词 + +- **描述事物特征**:big(大的)、small(小的)、long(长的)、short(短的;矮的)、tall(高的)、fat(胖的) + +- **描述人物特征**:happy(高兴的)、sad(难过的)、angry(生气的)、tired(累的)、clever(聪明的)、kind(和蔼的) + +- **描述天气**:sunny(晴朗的)、cloudy(多云的)、windy(有风的)、rainy(下雨的)、snowy(下雪的) + +- **其他**:good(好的)、bad(坏的)、new(新的)、old(旧的;老的)、right(正确的)、wrong(错误的) + + + +### 副词 + +- **时间副词**:now(现在)、then(那时)、today(今天)、tomorrow(明天)、yesterday(昨天)、soon(很快) + +- **频率副词**:always(总是)、usually(通常)、often(经常)、sometimes(有时)、never(从不) + +- **程度副词**:very(非常)、much(很;非常)、too(太;也)、so(如此;这么)、quite(相当) + +- **方式副词**:slowly(慢慢地)、quickly(快速地)、carefully(仔细地)、happily(高兴地)、loudly(大声地) \ No newline at end of file diff --git a/学英语/高中英语词汇.md b/学英语/高中英语词汇.md new file mode 100644 index 0000000..0080cc5 --- /dev/null +++ b/学英语/高中英语词汇.md @@ -0,0 +1,426 @@ + +|单元|单词|词性|中文释义| + +|---|---|---|---| + +|必修1 Unit 1|survey|n.|调查;测验| + +|必修1 Unit 1|add up| |合计| + +|必修1 Unit 1|upset|adj.;vt.|心烦意乱的;不安的;不适的;使不安;使心烦| + +|必修1 Unit 1|ignore|vt.|不理睬;忽视| + +|必修1 Unit 1|calm|vt.;vi.;adj.|(使)平静;(使)镇定;平静的;镇静的;沉着的| + +|必修1 Unit 1|calm(...)down| |(使)平静下来;(使)镇定下来| + +|必修1 Unit 1|have got to| |不得不;必须| + +|必修1 Unit 1|concern|n.;vt.|担心;关注;(利害)关系;(使)担忧;涉及;关系到| + +|必修1 Unit 1|be concerned about| |关心;挂念| + +|必修1 Unit 1|walk the dog| |遛狗| + +|必修1 Unit 1|loose|adj.|松的;松开的| + +|必修1 Unit 1|vet|n.|兽医| + +|必修1 Unit 1|go through| |经历;经受| + +|必修1 Unit 1|Amsterdam|n.|阿姆斯特丹(荷兰首都)| + +|必修1 Unit 1|Netherlands|n.|荷兰(西欧国家)| + +|必修1 Unit 1|Jewish|adj.|犹太人的;犹太族的| + +|必修1 Unit 1|German|n.;adj.|德国人;德语;德国的;德国人的;德语的| + +|必修1 Unit 1|Nazi|n.;adj.|纳粹党人;纳粹党的| + +|必修1 Unit 1|set down| |记下;放下;登记| + +|必修1 Unit 1|series|n.|连续;系列| + +|必修1 Unit 1|a series of| |一连串的;一系列;一套| + +|必修1 Unit 1|Kitty|n.|基蒂(女名)| + +|必修1 Unit 1|outdoors|adv.|在户外;在野外| + +|必修1 Unit 1|spellbind|vt.|迷住;迷惑| + +|必修1 Unit 1|on purpose| |故意| + +|必修1 Unit 1|in order to| |为了……| + +|必修1 Unit 1|dusk|n.|黄昏;傍晚| + +|必修1 Unit 1|at dusk| |在黄昏时刻| + +|必修1 Unit 1|thunder|n.;vi.|雷;雷声;打雷;雷鸣| + +|必修1 Unit 1|entire|adj.|整个的;完全的;全部的| + +|必修1 Unit 1|entirely|adv.|完全地;全然地;整个地| + +|必修1 Unit 1|power|n.|能力;力量;权力| + +|必修1 Unit 1|face to face| |面对面地| + +|必修1 Unit 1|curtain|n.|窗帘;门帘;幕布| + +|必修1 Unit 1|dusty|adj.|积满灰尘的| + +|必修1 Unit 1|no longer/not...any longer| |不再……| + +|必修1 Unit 1|partner|n.|伙伴;合作者;合伙人| + +|必修1 Unit 1|settle|vi.;vt.|安家;定居;停留;使定居;安排;解决| + +|必修1 Unit 1|suffer|vt.;vi.|遭受;忍受;经历| + +|必修1 Unit 1|suffer from| |遭受;患病| + +|必修1 Unit 1|loneliness|n.|孤单;寂寞| + +|必修1 Unit 1|highway|n.|公路;大路| + +|必修1 Unit 1|recover|vi.;vt.|痊愈;恢复;重新获得| + +|必修1 Unit 1|get/be tired of| |对……厌烦| + +|必修1 Unit 1|pack|n.;vi.;vt.|小包;包裹;捆扎;包装;打行李| + +|必修1 Unit 1|pack (sth) up| |将(东西)装箱打包| + +|必修1 Unit 1|suitcase|n.|手提箱;衣箱| + +|必修1 Unit 1|Margot|n.|玛戈(女名)| + +|必修1 Unit 1|Overcoat|n.|大衣;外套| + +|必修1 Unit 1|teenager|n.|十几岁的青少年| + +|必修1 Unit 1|get along with| |与……相处;进展| + +|必修1 Unit 1|gossip|n.;vi.|闲话;闲谈;说闲话| + +|必修1 Unit 1|fall in love| |相爱;爱上| + +|必修1 Unit 1|exactly|adv.|确实如此;正是;确切地| + +|必修1 Unit 1|disagree|vi.|不同意| + +|必修1 Unit 1|grateful|adj.|感激的;表示谢意的| + +|必修1 Unit 1|dislike|n.;vt.|不喜欢;厌恶| + +|必修1 Unit 1|join in| |参加;加入| + +|必修1 Unit 1|tip|n.;vt.|提示;技巧;尖;尖端;小费;倾斜;翻倒| + +|必修1 Unit 1|secondly|adv.|第二;其次| + +|必修1 Unit 1|swap|vt.|交换| + +|必修1 Unit 1|item|n.|项目;条款| + +|必修1 Unit 2|subway|n.|地下人行道;<美>地铁| + +|必修1 Unit 2|elevator|n.|电梯;升降机| + +|必修1 Unit 2|petrol|n.|汽油(英)| + +|必修1 Unit 2|gas|n.|汽油;气体;煤气;毒气| + +|必修1 Unit 2|official|adj.|官方的;正式的;公务的| + +|必修1 Unit 2|voyage|n.|航行;航海| + +|必修1 Unit 2|conquer|vt.|征服;占领| + +|必修1 Unit 2|because of| |因为;由于| + +|必修1 Unit 2|native|n.;adj.|本地人;本国人;本国的;本地的| + +|必修1 Unit 2|Amy|n.|艾米(女名)| + +|必修1 Unit 2|come up| |走近;上来;提出| + +|必修1 Unit 2|apartment|n.|公寓住宅;单元住宅| + +|必修1 Unit 2|actually|adv.|实际上;事实上| + +|必修1 Unit 2|AD| |公元| + +|必修1 Unit 2|base|n.;vt.|基部;基地;基础;以……为根据| + +|必修1 Unit 2|at present| |现在;目前| + +|必修1 Unit 2|gradual|adj.|逐渐的;逐步的| + +|必修1 Unit 2|gradually|adv.|逐渐地;逐步地| + +|必修1 Unit 2|Danish|n.;adj.|丹麦语;丹麦的;丹麦人的;丹麦语的| + +|必修1 Unit 2|enrich|vt.|使富裕;充实;改善| + +|必修1 Unit 2|vocabulary|n.|词汇;词汇量;词表| + +|必修1 Unit 2|Shakespeare|n.|莎士比亚(英国剧作家,诗人)| + +|必修1 Unit 2|make use of| |利用;使用| + +|必修1 Unit 2|spelling|n.|拼写;拼法| + +|必修1 Unit 2|Samuel Johnson|n.|塞缪尔·约翰逊(英国作家,批评家)| + +|必修1 Unit 2|Noah Webster|n.|诺厄·韦伯斯特(美国词典编纂家)| + +|必修1 Unit 2|latter|adj.|较后的;后半的;(两者中)后者的| + +|必修1 Unit 2|identity|n.|本身;本体;身份| + +|必修1 Unit 2|fluent|adj.|流利的;流畅的| + +|必修1 Unit 2|fluently|adv.|流利地;流畅地| + +|必修1 Unit 2|Singapore|n.|新加坡(东南亚国家)| + +|必修1 Unit 2|Malaysia|n.|马来西亚(东南亚国家);马来群岛| + +|必修1 Unit 2|such as| |例如……;像这种的| + +|必修1 Unit 2|frequent|adj.|频繁的;常见的| + +|必修1 Unit 2|frequently|adv.|常常;频繁地| + +|必修1 Unit 2|usage|n.|使用;用法;词语惯用法| + +|必修1 Unit 2|command|n.;vt.|命令;指令;掌握| + +|必修1 Unit 2|request|n.;vt.|请求;要求| + +|必修1 Unit 2|dialect|n.|方言| + +|必修1 Unit 2|expression|n.|词语;表示;表达| + +|必修1 Unit 2|midwestern|adj.|中西部的;有中西部特性的| + +|必修1 Unit 2|African|adj.|非洲的;非洲人的;非洲语言的| + +|必修1 Unit 2|Spanish|n.;adj.|西班牙人;西班牙语;西班牙的;西班牙人的;西班牙语的| + +|必修1 Unit 2|play a part (in)| |扮演一个角色;参与| + +|必修1 Unit 2|eastern|adj.|东方的;东部的| + +|必修1 Unit 2|southeastern|adj.|东南方的;来自东南的| + +|必修1 Unit 2|northwestern|adj.|西北方的;来自西北的| + +|必修1 Unit 2|recognize|vt.|辨认出;承认;公认| + +|必修1 Unit 2|lorry|n.|卡车(英)| + +|必修1 Unit 2|Lori|n.|罗丽(女名)| + +|必修1 Unit 2|Houston|n.|休斯顿(美国城市)| + +|必修1 Unit 2|Texas|n.|德克萨斯州(美国州名)| + +|必修1 Unit 2|accent|n.|口音;腔调;重音| + +|必修1 Unit 2|Buford|n.|布福德(姓氏;男名)| + +|必修1 Unit 2|Lester|n.|莱斯特(姓错;男名)| + +|必修1 Unit 2|catfish|n.|鲶鱼| + +|必修1 Unit 2|lightning|n.|闪电| + +|必修1 Unit 2|straight|adv.;adj.|直接;挺直;直的;笔直的;正直的| + +|必修1 Unit 2|block|n.|街区;块;木块;石块| + +|必修1 Unit 2|cab|n.|出租车| + +|必修1 Unit 3|journal|n.|日记;杂志;定期刊物| + +|必修1 Unit 3|transport|n.;vt.|运送;运输;运输;运送| + +|必修1 Unit 3|prefer|vt.|更喜欢;选择某事物(而不选择其他事物)| + +|必修1 Unit 3|disadvantage|n.|不利条件;不便之处| + +|必修1 Unit 3|fare|n.|费用| + +|必修1 Unit 3|route|n.|路线;路途| + +|必修1 Unit 3|Mekong|n.|湄公河| + +|必修1 Unit 3|flow|n.;vi.|流动;流量;流动;流出| + +|必修1 Unit 3|ever since| |从那以后| + +|必修1 Unit 3|persuade|vt.|说服;劝说| + +|必修1 Unit 3|cycle|vi.|骑自行车| + +|必修1 Unit 3|graduate|n.;vi.|大学毕业生;毕业| + +|必修1 Unit 3|finally|adv.|最后;终于| + +|必修1 Unit 3|schedule|n.;vt.|时间表;进度表;为某事安排时间| + +|必修1 Unit 3|fond|adj.|喜爱的;慈爱的;宠爱的| + +|必修1 Unit 3|be fond of| |喜爱;喜欢| + +|必修1 Unit 3|shortcoming|n.|缺点| + +|必修1 Unit 3|stubborn|adj.|顽固的;固执的| + +|必修1 Unit 3|organize|vt.|组织;成立| + +|必修1 Unit 3|care about| |关心;忧虑;惦念| + +|必修1 Unit 3|detail|n.|细节;详情| + +|必修1 Unit 3|source|n.|来源;水源| + +|必修1 Unit 3|determine|vt.|决定;确定;下定决心| + +|必修1 Unit 3|determined|adj.|坚决的;有决心的| + +|必修1 Unit 3|change one's mind| |改变主意| + +|必修1 Unit 3|journey|n.|旅行;旅程| + +|必修1 Unit 3|altitude|n.|海拔高度;高处| + +|必修1 Unit 3|make up one's mind| |下决心;决定| + +|必修1 Unit 3|give in| |投降;屈服;让步| + +|必修1 Unit 3|atlas|n.|地图;地图集| + +|必修1 Unit 3|glacier|n.|冰河;冰川| + +|必修1 Unit 3|Tibetan|n.;adj.|(西)藏语;西藏人;藏族人;西藏的;藏族的;藏族人的| + +|必修1 Unit 3|rapids|n.|急流| + +|必修1 Unit 3|valley|n.|(山)谷;流域| + +|必修1 Unit 3|waterfall|n.|瀑布| + +|必修1 Unit 3|pace|n.;vi.|一步;速度;步调;缓慢而行;踱步| + +|必修1 Unit 3|bend|n.;vt.;vi.|弯;拐角;使弯曲;弯身;弯腰| + +|必修1 Unit 4|earthquake|n.|地震| + +|必修1 Unit 4|quake|n.|地震| + +|必修1 Unit 4|right away| |立刻;马上| + +|必修1 Unit 4|well|n.|井| + +|必修1 Unit 4|crack|n.;vt.;vi.|裂缝;噼啪声;(使)开裂;破裂| + +|必修1 Unit 4|smelly|adj.|发臭的;有臭味的| + +|必修1 Unit 4|farmyard|n.|农场;农家| + +|必修1 Unit 4|pipe|n.|管;导管| + +|必修1 Unit 4|burst|n.;vi.|突然破裂;爆发;爆裂;爆发| + +|必修1 Unit 4|million|n.|百万| + +|必修1 Unit 4|event|n.|事件;大事| + +|必修1 Unit 4|as if| |仿佛;好像| + +|必修1 Unit 4|at an end| |结束;终结| + +|必修1 Unit 4|nation|n.|民族;国家;国民| + +|必修1 Unit 4|canal|n.|运河;水道| + +|必修1 Unit 4|steam|n.|蒸汽;水汽| + +|必修1 Unit 4|dirt|n.|污垢;泥土| + +|必修1 Unit 4|ruin|n.;vt.|废墟;毁灭;毁灭;使破产| + +|必修1 Unit 4|in ruins| |严重受损;破败不堪| + +|必修1 Unit 4|suffering|n.|苦难;痛苦| + +|必修1 Unit 4|extreme|adj.|极度的| + +|必修1 Unit 4|injure|vt.|损害;伤害| + +|必修1 Unit 4|survivor|n.|幸存者;生还者;残存物| + +|必修1 Unit 4|destroy|vt.|破坏;毁坏;消灭| + +|必修1 Unit 4|brick|n.|砖;砖块| + +|必修1 Unit 4|dam|n.|水坝;堰堤| + +|必修1 Unit 4|track|n.|轨道;足迹;痕迹| + +|必修1 Unit 4|useless|adj.|无用的;无效的;无益的| + +|必修1 Unit 4|shock|vt.;n.|(使)震惊;震动;休克;打击;震惊| + +|必修1 Unit 4|rescue|n.;vt.|援救;营救| + +|必修1 Unit 4|trap|vt.;n.|使陷入困境;陷阱;困境| + +|必修1 Unit 4|electricity|n.|电;电流;电学| + +|必修1 Unit 4|disaster|n.|灾难;灾祸| + +|必修1 Unit 4|dig out| |掘出;发现| + +|必修1 Unit 4|bury|vt.|埋葬;掩埋;隐藏| + +|必修1 Unit 4|mine|n.;vt.|矿;矿山;矿井;开采(矿物)| + +|必修1 Unit 4|miner|n.|矿工| + +|必修1 Unit 4|shelter|n.;vt.|掩蔽;掩蔽处;避身处;保护;使掩蔽| + +|必修1 Unit 4|a (great) number of| |许多;大量的| + +|必修1 Unit 4|title|n.|标题;头衔;资格| + +|必修1 Unit 4|reporter|n.|记者| + +|必修1 Unit 4|bar|n.|条;棒;条状物| + +|必修1 Unit 4|damage|n.;vt.|损失;损害| + +|必修1 Unit 4|frighten|vt.|使惊吓;吓唬| + +|必修1 Unit 4|frightened|adj.|受惊的;受恐吓的| + +|必修1 Unit 4|frightening|adj.|令人恐惧的| + +|必修1 Unit 4|congratulation|n.|祝贺;(复数)贺词| + +|必修1 Unit 4|judge|n.;vt.|裁判员;法官;断定;判断;判决| + +|必修1 Unit 4|sincerely;adv.|真诚地; 真挚地| + +|必修1 Unit 4|outline n.|要点;大纲:轮廓| + +|必修1 Unit 4|headline|n.|报刊的大字标题| + +|必修1 Unit 4|cyclist|n.|骑自行车的人| diff --git a/惯性定律.md b/惯性定律.md new file mode 100644 index 0000000..aec849d --- /dev/null +++ b/惯性定律.md @@ -0,0 +1 @@ +惯性定律是 [[demo/三个运动定律]] 之一 diff --git a/未命名 1.canvas b/未命名 1.canvas new file mode 100644 index 0000000..b3aef6e --- /dev/null +++ b/未命名 1.canvas @@ -0,0 +1,11 @@ +{ + "nodes":[ + {"id":"470e8a7e83609e0f","x":-200,"y":-280,"width":250,"height":60,"type":"text","text":"重新设计blingo"}, + {"id":"a70ef8bd088f5b87","x":-355,"y":233,"width":300,"height":247,"type":"text","text":"设计目标:\n\n获取 历史 蜡烛图数据\n获取 历史 ticker数据\n\t"}, + {"id":"e3e16c4dbac925b3","x":240,"y":-91,"width":250,"height":60,"type":"text","text":"以v5sdkgo为基础之一"}, + {"id":"42eba21034ab5a08","x":240,"y":9,"width":250,"height":60,"type":"text","text":"core那个项目可以废掉了"}, + {"id":"4b88956c1ce117d1","x":240,"y":-180,"width":250,"height":60,"type":"text","text":"不使用ccxt"}, + {"id":"fa84eddd31f23525","x":-38,"y":306,"width":528,"height":214,"type":"text","text":"先不着急设计的太具象, 目前正在 看 backtrader的教程, 并上手实验, 且已经创建了两个git库:\n1. backtraderTest: 一个python的一个go的, python的是https://gitea.zjmud.xyz/phyer/backtraderTest 用来实验backtrader的代码, \n2. tanya: go的是https://gitea.zjmud.xyz/phyer/tanya 用来代替 core和 texus, 也同时用来给 backtraderTest 提供原始数据,\n\n理论上 tanya 可以用来 用命令行 进行 指定时间段, 指定币种的采集和落盘(写进es)和回测, "} + ], + "edges":[] +} \ No newline at end of file diff --git a/未命名 1.md b/未命名 1.md new file mode 100644 index 0000000..e69de29 diff --git a/未命名 2.canvas b/未命名 2.canvas new file mode 100644 index 0000000..779ec2e --- /dev/null +++ b/未命名 2.canvas @@ -0,0 +1,7 @@ +{ + "nodes":[ + {"id":"3e13231fbe305c59","x":-125,"y":-30,"width":250,"height":60,"type":"text","text":""}, + {"id":"d38122cdfde4da02","type":"text","text":"","x":-125,"y":-30,"width":250,"height":60} + ], + "edges":[] +} \ No newline at end of file diff --git a/未命名 2.md b/未命名 2.md new file mode 100644 index 0000000..e69de29 diff --git a/未命名 3.canvas b/未命名 3.canvas new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/未命名 3.canvas @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/未命名 3.md b/未命名 3.md new file mode 100644 index 0000000..e69de29 diff --git a/未命名 4.canvas b/未命名 4.canvas new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/未命名 4.canvas @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/未命名 4.md b/未命名 4.md new file mode 100644 index 0000000..e69de29 diff --git a/未命名 5.md b/未命名 5.md new file mode 100644 index 0000000..e69de29 diff --git a/未命名 6.md b/未命名 6.md new file mode 100644 index 0000000..e69de29 diff --git a/未命名.canvas b/未命名.canvas new file mode 100644 index 0000000..1cffdbb --- /dev/null +++ b/未命名.canvas @@ -0,0 +1,6 @@ +{ + "nodes":[ + {"id":"1729f767b803d0b9","x":-160,"y":-16,"width":250,"height":60,"type":"text","text":""} + ], + "edges":[] +} \ No newline at end of file diff --git a/未命名.md b/未命名.md new file mode 100644 index 0000000..e69de29 diff --git a/未命名看板.md b/未命名看板.md new file mode 100644 index 0000000..21ac441 --- /dev/null +++ b/未命名看板.md @@ -0,0 +1,13 @@ +--- + +kanban-plugin: board + +--- + + + +%% kanban:settings +``` +{"kanban-plugin":"board"} +``` +%% \ No newline at end of file diff --git a/生成像素风格图片 (4).png b/生成像素风格图片 (4).png new file mode 100644 index 0000000..40aef9d Binary files /dev/null and b/生成像素风格图片 (4).png differ diff --git a/策略.md b/策略.md new file mode 100644 index 0000000..a580dde --- /dev/null +++ b/策略.md @@ -0,0 +1,10370 @@ + +## + +要查看键盘快捷键,按下问号 + +查看键盘快捷键 + +Grok 3 + +beta + +查看新帖子 + +什么叫做最大回撤 + +最大回撤(Maximum Drawdown,简称MDD)是一个衡量投资组合或交易策略风险的重要指标,特别是在金融和投资领域。它表示在某个特定时间段内,从最高点到最低点的最大损失幅度,通常以百分比形式表达。简单来说,最大回撤告诉你,如果你在最糟糕的时机投资,可能会面临多大的资金下跌。 + +计算方式 + +最大回撤的计算方法是: + +1. 找到投资组合价值的历史最高点(峰值)。 + +2. 找到从这个峰值之后的最低点(谷值)。 + +3. 用公式计算回撤幅度: + + 最大回撤=峰值−谷值峰值×100%\text{最大回撤} = \frac{\text{峰值} - \text{谷值}}{\text{峰值}} \times 100\%`\text{最大回撤} = \frac{\text{峰值} - \text{谷值}}{\text{峰值}} \times 100\%` + + +示例 + +假设你投资了一个基金,净值变化如下: + +- 第1天:100元(初始投资) + +- 第2天:120元(达到峰值) + +- 第3天:90元(跌到谷值) + +- 第4天:110元(回升) + + +在这个例子中: + +- 峰值 = 120元 + +- 谷值 = 90元 + +- 最大回撤 = + + 120−90120×100%=25%\frac{120 - 90}{120} \times 100\% = 25\%`\frac{120 - 90}{120} \times 100\% = 25\%` + + +这意味着在这个时间段内,投资的最大损失幅度是25%。 + +意义 + +1. 风险评估:最大回撤反映了投资中最坏情况下的表现,帮助投资者判断自己能否承受这种损失。 + +2. 策略比较:通过对比不同策略的最大回撤,可以评估哪种策略更稳健。 + +3. 心理影响:较大的回撤可能会让投资者失去信心,因此也是心理承受能力的一个参考。 + + +如果你有具体的投资数据想让我帮你计算最大回撤,可以提供给我哦! + + + +图片中的软件是什么软件 + +从图片中可以看到一个交易平台的界面,显示了比特币(BTC/USD)的价格走势图、交易策略(如“Bull Market Support Band Strategy”)以及回测结果(Performance Summary)。这个界面看起来非常类似于TradingView,这是一个广受欢迎的在线交易和图表分析平台。TradingView支持多种金融产品(如股票、加密货币、外汇等)的实时图表、指标和技术分析工具,用户可以在其Pine Script语言中编写自定义交易策略并进行回测。 + +以下是图片中一些关键特征的分析,确认其与TradingView的相似之处: + +1. 界面布局:包含K线图、指标(如SMA、MACD)、交易信号(买卖点标记)以及策略回测结果。 + +2. 时间周期选项:如1分钟、1小时、1天等,符合TradingView的界面设计。 + +3. 策略回测数据:显示净利(Net Profit)、最大回撤(Max Drawdown)、获利因子(Profit Factor)等,这些是TradingView策略测试器(Strategy Tester)常见的输出。 + +4. Pine Script支持:提到“#Bot2fast (v2.5) - AutoTrading - by Michael Ionita”,这表明可能使用了TradingView的Pine Script进行自定义策略编写。 + + +因此,我可以确认这个软件很可能是TradingView,或者是一个类似的功能相似的交易平台。如果需要更精确的确认或进一步分析,我可以提供帮助或建议使用搜索工具来验证(但目前仅凭图片和我的知识,我会倾向于认为是TradingView)。 + +TradingView是个可以部署在本地的开源软件吗 + +4 帖子 + + + + + + + + + + + + + +15 网页 + +TradingView 本身并不是一个可以部署在本地的开源软件。以下是详细解释: + +1. TradingView 的性质: + + - TradingView 是一个基于云的在线金融可视化平台,主要通过网页浏览器或其桌面应用程序(支持 Windows、Mac 和 Linux)提供服务。它以其强大的图表功能、技术分析工具和社交网络功能而闻名,但其核心服务是托管在云端,用户无法直接下载并部署到本地服务器或个人设备上。 + + - TradingView 提供了一些开源组件,例如其 Lightweight Charts 库,这是一个轻量级的 HTML5 charting 库,确实是开源的(可在 GitHub 上找到),可以免费使用并集成到其他项目中。然而,这只是 TradingView 的一部分功能,而不是整个 TradingView 平台的开源版本。 + +2. 开源部分: + + - TradingView 的 Lightweight Charts 库是开源的,开发者可以下载源代码并在本地或自己的项目中使用它来创建自定义图表。但这只是一个图表库,不包括 TradingView 的完整功能(如实时市场数据、社交功能、策略回测等)。 + + - 根据网上的信息和社区讨论,TradingView 的核心平台(包括其主要交易和分析功能)不是开源的,也无法本地部署。它的主要服务依赖于云端数据和基础设施,用户只能通过订阅或免费账户访问其在线服务。 + +3. 本地部署的可能性: + + - 目前没有证据表明 TradingView 提供了完整的开源代码或本地部署版本。即使是其桌面应用程序,也只是一个客户端,仍然需要连接到 TradingView 的云端服务来获取数据和功能。 + + - 如果你希望在本地运行类似功能的交易平台,可以考虑一些真正的开源交易软件或平台(如 OctoBot、Howtrader 或其他列在开源项目中的工具),但这些通常功能和用户体验与 TradingView 有较大差异。 + +4. 替代方案: + + - 如果你需要本地部署的开源 charting 或交易平台,可以参考一些开源项目,如 DXcharts Lite 或其他提到的 Lightweight Charts 替代品。这些工具可以本地集成,但可能需要额外的开发工作来实现与 TradingView 相似的功能。 + + - 一些用户在 X 上提到 TradingView 的 Lightweight Charts 适合本地数据可视化,但这仅限于图表功能,不包括 TradingView 的完整生态系统。 + + +总结来说,TradingView 不是一个可以完全部署在本地的开源软件。虽然其 Lightweight Charts 库是开源的且可以本地使用,但 TradingView 的核心平台是云端服务,无法本地部署。如果你需要类似功能,可以探索其他开源交易或 charting 工具,但需要权衡功能和开发成本。 + +TradingView是云上的,费用怎么算的 + +4 帖子 + + + + + + + + + + + + + +15 网页 + +是的,TradingView 是一个基于云的平台,其服务和功能主要通过云端提供,用户通过浏览器或其桌面/移动应用程序访问。TradingView 的费用根据不同的订阅计划计算,主要分为免费计划和付费订阅计划(包括非专业和专业用户)。以下是关于 TradingView 定价和费用计算的详细说明: + +1. 订阅计划类型 + +TradingView 提供多种订阅计划,适合不同类型用户的需求(截至 2025 年 3 月的信息可能会有变动,建议查看其官方网站以获取最新定价)。以下是主要计划的概述: + +非专业用户计划(Non-Professional) + +- Essential(基本计划):每月 $12.95(年付更优惠,通常按月折算后更便宜)。 + + - 功能:适合初学者,提供基本图表、3 个指标/图表、1 个服务器端警报、1 个保存布局等。 + + - 限制:广告存在,数据和功能有限。 + +- Plus:每月 $24.95。 + + - 功能:升级为 5 个指标/图表、5 个服务器端警报、2 个保存布局、预市场和盘后数据等。 + + - 适合需要更多工具的普通交易者。 + +- Premium:每月 $49.95。 + + - 功能:无限制指标/图表、无限制警报、8 个保存布局、2 年历史数据、秒级时间框架等。 + + - 适合活跃交易者或需要高级分析工具的用户。 + + +专业用户计划(Professional) + +- Expert:每月 $199.95。 + + - 功能:针对专业交易者或机构,提供所有非专业功能加上优先支持、专用服务器等。 + +- Ultimate:每月 $499.95。 + + - 功能:最高级计划,适合需要最全面工具和支持的专业用户,提供所有功能及额外定制支持。 + + +这些价格通常基于月度订阅,但选择年付可以享受折扣(例如年付可能节省 16%-20% 或更多,具体取决于促销活动)。例如,Pro 计划年付可能为 $155.40(约 $12.95/月),而 Premium 年付可能为 $599.40(约 $49.95/月)。 + +1. 费用计算方式 + +- 基本费用:订阅费用是固定的,按月或按年支付。选择年付通常比月付更经济,但需要一次性支付全年费用。 + +- 额外费用: + + - 实时市场数据费用:TradingView 本身不直接提供实时数据,而是通过第三方交易所或数据提供商(如 NYSE、NASDAQ、加密货币交易所等)获取。实时数据可能需要额外付费,费用因交易所和地区不同而异。例如,美国股市的实时数据可能需要额外订阅,价格从几美元到几十美元不等(具体取决于你关注的交易所和市场)。 + + - 经纪商或交易费用:如果通过 TradingView 连接经纪商(如 Interactive Brokers)进行实际交易,可能需要支付经纪商的交易佣金或费用,这与 TradingView 的订阅费用无关。 + + - 增值服务:某些高级功能或定制化服务(如专业咨询或集成)可能需要额外付费,但 TradingView 通常不提供此类服务(除非是专业计划的优先支持)。 + + +1. 免费计划 + +- TradingView 提供一个免费的“Basic”计划,适合初学者或偶尔使用用户。 + + - 功能:基本图表、2 个指标/图表、1 个警报、1 个保存布局等。 + + - 限制:广告较多,功能受限,无实时数据(可能延迟 15-20 分钟),不能保存多个布局或使用高级工具。 + + +1. 付款和退款政策 + +- 付款方式:支持信用卡、PayPal、加密货币等(具体支持方式可能因地区不同而异)。 + +- 退款:仅年付计划在支付后 14 天内可申请退款,但会扣除月度订阅费(对于市场数据部分)。月付计划、升级或加密货币支付无退款。取消订阅后,服务会在当前付费期结束后停止。 + +- 升级:可以随时升级计划,剩余天数会自动转换为新计划的等值天数,无额外交易。 + + +1. 促销和折扣 + +- TradingView 偶尔会推出促销活动,例如 Black Friday 优惠(根据 X 上的帖子,2023 年曾提供 800 条警报低于 $17/月)。建议关注其官方网站或社交媒体(如 X)了解最新优惠。 + +- 年付订阅通常比月付更划算,折扣幅度可能在 16%-20% 或更高。 + + +1. 地区差异 + +- 价格可能会因地区和支付平台(如 Google Play、App Store)不同而略有变化。例如,移动应用中的订阅价格可能因平台政策、税费或本地货币兑换而与网站价格不同(根据 TradingView 官方说明,这与平台政策相关)。 + + +1. 如何选择适合的计划 + +- 初学者:使用免费计划或 Essential 计划($12.95/月),足够满足基本需求。 + +- 活跃交易者:选择 Plus 或 Premium 计划($24.95-$49.95/月),享受更多指标、警报和数据。 + +- 专业用户或机构:选择 Expert 或 Ultimate 计划($199.95-$499.95/月),获得最高级功能和支持。 + + +1. 注意事项 + +- 费用不包括实时数据或经纪商交易费用,这些需要单独订阅或支付。 + +- 确保根据你的交易频率、所需工具和预算选择合适的计划。 + +- 定期查看 TradingView 官网(tradingview.com/pricing)获取最新定价和功能更新,因为价格和计划可能随时调整。 + + +如果你需要更具体的价格计算(例如结合实时数据或特定市场的费用),可以提供更多细节,我可以进一步帮你分析! + +我有类似的替代方案吗,比如本地部署某开源软件 + +2 帖子 + + + + + + + + + + + + + +15 网页 + +是的,如果你希望找到类似 TradingView 的替代方案,并且可以本地部署的开源软件,以下是一些适合本地部署的开源交易平台或图表工具选项。这些工具通常用于构建交易策略、数据可视化、回测和实时交易功能,并且可以根据你的需求进行本地安装和定制: + +1. StockSharp + +- 描述:StockSharp 是一个功能强大的开源算法交易和量化交易平台,支持股票、期货、外汇和加密货币市场。它允许开发者创建交易机器人,并支持多种数据源和经纪商(如 Binance、InteractiveBrokers、Coinbase 等)。 + +- 本地部署:StockSharp 提供完整的 C# 源代码,可以下载并在本地运行(需要 Windows 环境),支持本地开发和部署。它的 Designer 工具提供图形界面,便于创建策略。 + +- 功能:实时数据、回测、自动交易、自定义策略开发。 + +- 优势:支持多种资产类型,功能全面,适合高级开发者。 + +- 局限:需要一定的编程能力(C#),对新手可能有一定学习曲线。 + + +1. NautilusTrader + +- 描述:NautilusTrader 是一个高性能、开源的交易平台,专为算法交易和量化交易设计,支持多种资产类别(如股票、期货、加密货币等)。它以 Rust 编写核心组件,Python API 提供灵活的策略开发。 + +- 本地部署:你可以从其 GitHub 仓库下载源代码,并在本地或云端部署(支持 Linux、Mac 和 Windows)。它使用 Docker 容器化,便于本地运行和扩展。 + +- 功能:事件驱动回测、实时交易、纳秒级性能、支持多种数据源和经纪商。 + +- 优势:速度快、模块化设计,适合需要高性能的交易者。 + +- 局限:需要一定的编程和系统管理知识,尤其是 Docker 和 Rust 的使用。 + + +1. Backtrader + +- 描述:Backtrader 是一个 Python 开发的开源回测和交易框架,适合开发和测试交易策略。虽然主要用于回测,但也支持实时交易。 + +- 本地部署:可以直接通过 Python(pip 安装)在本地运行,无需复杂部署,只需安装 Python 环境和相关依赖(如 Pandas、NumPy)。 + +- 功能:策略开发、回测、指标分析、实时交易支持。 + +- 优势:简单易用,适合 Python 开发者,社区活跃。 + +- 局限:不适合大规模实时交易或高频交易,功能相对基础。 + + +1. QuantConnect LEAN + +- 描述:QuantConnect 的 LEAN 是一个开源算法交易引擎,支持股票、期货、加密货币等资产的回测和实时交易。它最初是 QuantConnect 云平台的后端,但可以本地部署。 + +- 本地部署:LEAN 提供源代码(C# 和 Python 支持),可以在本地运行(需要 .NET Core 或 Python 环境)。它支持 Docker 容器化,便于本地或云端部署。 + +- 功能:回测、实时交易、策略优化,支持多种编程语言(C#、Python、F#)。 + +- 优势:功能强大,支持多种市场和数据源,适合量化交易者。 + +- 局限:设置和配置可能复杂,需要编程经验。 + + +1. Open Trading Platform (ettec/open-trading-platform) + +- 描述:这是一个用 Golang 开发的开源交易平台,专为构建跨资产执行导向的交易应用设计,可以本地部署(on-prem)或云端运行。 + +- 本地部署:提供 Kubernetes 管理的服务,可以在本地或私有云环境中部署。需要一定的 DevOps 知识(如 Kubernetes、Docker)。 + +- 功能:支持多种资产、执行交易、回测、GUI 界面(React 客户端)。 + +- 优势:高可扩展性,适合专业交易应用。 + +- 局限:部署和维护复杂,适合有技术团队支持的用户。 + + +1. Hummingbot + +- 描述:Hummingbot 是一个开源加密货币交易机器人平台,允许用户创建和运行交易策略,支持多个交易所(如 Binance、Kraken 等)。 + +- 本地部署:可以从 GitHub 下载源代码,并在本地运行(Python 环境)。支持在本地机器或云端(如 AWS、VPS)运行。 + +- 功能:加密货币交易、回测、策略开发。 + +- 优势:专注于加密货币,社区活跃,适合加密交易者。 + +- 局限:主要针对加密货币市场,功能可能不适合股票或传统资产。 + + +1. TradingView Lightweight Charts(部分本地化) + +- 描述:虽然 TradingView 本身不是完全本地部署的开源平台,但它的 Lightweight Charts 是一个轻量级开源 HTML5 图表库,可以本地集成到你的项目中,用于数据可视化。 + +- 本地部署:可以下载源代码(GitHub 提供),并通过 JavaScript 或 TypeScript 在本地项目中运行。需要前端开发技能(如 HTML、CSS、JavaScript)。 + +- 功能:图表绘制、技术指标、实时数据可视化。 + +- 优势:轻量、易用,适合自定义图表需求。 + +- 局限:仅限图表功能,不包括 TradingView 的完整交易或回测功能。 + + +选择建议 + +- 如果你是初学者:推荐 Backtrader 或 Hummingbot,因为它们使用 Python,学习曲线较平缓,且社区支持丰富。 + +- 如果你需要高性能和专业功能:选择 NautilusTrader 或 StockSharp,它们适合需要复杂交易策略和本地部署的高级用户。 + +- 如果你主要关注加密货币:Hummingbot 是一个不错的选择。 + +- 如果你需要图表可视化:可以尝试 TradingView 的 Lightweight Charts 集成到本地项目中。 + + +部署注意事项 + +- 硬件需求:大多数这些工具需要一定的计算资源(CPU、内存),尤其是实时交易或大数据回测时。 + +- 技术要求:需要一定的编程能力(Python、C#、Golang 等)和系统管理知识(Docker、Kubernetes 等)。 + +- 数据源:本地部署时需要自己配置数据源(市场数据、历史数据等),可能需要订阅第三方数据提供商。 + + +如果你有具体的资产类型(股票、期货、加密货币)或功能需求(回测、实时交易、图表等),可以告诉我,我可以进一步推荐更适合的选项!这些开源项目可以在 GitHub 上找到源代码和详细文档,适合本地部署和定制开发。 + +如果需求是: 需要对自定义策略进行回测,量化收益,最大回撤等,且可以直观的从chart上体现出来, 最好能本地部署在linux环境, 我本人是程序员,平时用go比较多, 其他也了解一些, 我没有windows环境, 那么 上述哪个对我更适合 + +基于你的需求和背景(程序员,熟悉 Go,熟悉其他编程语言,没有 Windows 环境,Linux 本地部署,需自定义策略回测、量化收益、最大回撤等,并直观在图表上体现),以下是对上述开源替代方案的分析和推荐,重点考虑适合 Go 开发和 Linux 环境的特性: + +--- + +需求分析 + +1. 自定义策略回测:需要支持编写和测试自定义交易策略。 + +2. 量化收益、最大回撤等:需要提供性能指标(如净利、最大回撤、夏普率等)的计算和分析。 + +3. 直观图表体现:需要在图表上清晰显示策略表现(如价格、指标、买卖信号等)。 + +4. 本地部署在 Linux:必须能够在 Linux 环境中运行和部署。 + +5. 编程背景:你熟悉 Go 语言,并了解其他语言(如 Python、C#),适合需要编程定制的工具。 + + +--- + +推荐:NautilusTrader + +为什么适合? + +1. 支持自定义策略回测: + + - NautilusTrader 是一个高性能、开源的交易平台,支持通过 Python 和 C# 编写自定义策略。它提供事件驱动的回测框架,可以轻松实现策略测试和性能量化(包括收益、最大回撤、夏普率等)。 + + - 虽然核心是 Rust 编写,但它提供 Python API,允许你用 Python 快速开发策略,同时也可以通过 C# 或其他语言扩展。 + +2. 量化收益和最大回撤: + + - NautilusTrader 内置了详细的性能分析工具,包括净利、最大回撤、胜率、盈亏比等指标,并支持生成报告。这些指标可以与图表结合,直观展示。 + +3. 直观图表体现: + + - NautilusTrader 支持与可视化工具集成,比如通过 Python 的 Matplotlib 或 Plotly 生成图表,显示价格走势、策略信号、回测结果等。你也可以直接用 Go 或其他工具扩展图表功能(如结合 TradingView 的 Lightweight Charts 库)。 + + - 它本身不直接提供前端图表界面,但可以通过自定义开发在 Linux 上生成直观的图表。 + +4. 本地部署在 Linux: + + - NautilusTrader 支持 Linux 环境(以及 Mac 和 Windows),并提供 Docker 容器化支持,方便在 Linux 上部署和运行。你可以下载其 GitHub 源代码,在 Linux 环境中配置 Docker 和 Python 环境(或 Rust/C# 环境),实现本地部署。 + +5. 适合 Go 开发: + + - 虽然 NautilusTrader 主要使用 Python、Rust 和 C#,但如果你熟悉 Go,可以通过以下方式适配: + + - 使用 Go 调用 Python 脚本(通过 gopy 或 gopython 库)来集成 NautilusTrader 的 Python API。 + + - 或者用 Go 开发自定义数据处理或后端逻辑,然后通过 API 或文件交互调用 NautilusTrader 的功能。 + + - Go 的高性能特性可以与 NautilusTrader 的高性能核心结合,处理大数据或实时交易逻辑。 + +6. 你的编程背景: + + - 作为程序员,熟悉 Go 和其他语言,你可以轻松掌握 NautilusTrader 的 Python API 或扩展其 Rust/C# 部分。此外,Docker 和 Linux 环境的配置对你来说应该是轻车熟路。 + + +优点 + +- 高性能,适合量化交易和复杂策略回测。 + +- 灵活的编程接口(Python、Rust、C#),可以与 Go 结合使用。 + +- 支持 Linux 环境,易于本地部署(通过 Docker)。 + +- 社区活跃,文档完善,提供大量示例和教程。 + +- 可以生成详细的回测报告,并通过自定义开发实现直观图表展示。 + + +局限 + +- 不直接提供前端 GUI 或图表界面,需要自己开发或集成(如用 Plotly、Matplotlib 或 TradingView Lightweight Charts)。 + +- 学习曲线稍长,尤其是 Rust 和 Python 的结合,但你的编程背景应该能快速上手。 + +- 如果需要更复杂的图表,可能需要额外的开发工作。 + + +--- + +其他备选方案对比 + +1. StockSharp + +- 适合程度:中等。 + +- 原因:StockSharp 主要用 C# 开发,虽然支持 Linux(通过 Mono 或 .NET Core),但其核心设计更偏向 Windows 环境,且社区和文档主要面向 C# 开发者。虽然可以本地部署在 Linux,但与 Go 的整合难度较大(需要通过 C# 与 Go 的互操作,可能复杂)。 + +- 局限:图表功能较弱,可能需要额外集成其他工具(如 TradingView Lightweight Charts)。 + + +1. Backtrader + +- 适合程度:较低。 + +- 原因:Backtrader 完全基于 Python,适合初学者和简单回测,但性能和功能不如 NautilusTrader,且不直接支持 Go。虽然可以在 Linux 上运行,但缺乏高性能和复杂策略支持,且图表功能依赖于 Python 库(如 Matplotlib),需要额外开发。 + + +1. Open Trading Platform (ettec/open-trading-platform) + +- 适合程度:中等偏高。 + +- 原因:该平台用 Go 开发,天然适合你的背景,且支持 Linux 环境,易于本地部署。它支持策略回测和量化分析,但图表功能较基础,可能需要额外的 Go 库或前端开发(如结合 TradingView Lightweight Charts)来实现直观的图表展示。 + +- 局限:功能较新,社区和文档不如 NautilusTrader 成熟,可能需要更多开发工作。 + + +1. Hummingbot + +- 适合程度:较低。 + +- 原因:主要针对加密货币,功能限制于特定市场,且完全用 Python 开发,与 Go 整合难度大。虽然支持 Linux 部署,但不适合复杂策略回测和直观图表需求。 + + +1. TradingView Lightweight Charts + +- 适合程度:辅助工具。 + +- 原因:仅提供图表库,不支持回测或量化分析。你可以将其与 NautilusTrader 或 Open Trading Platform 结合,用于图表展示,但需要额外开发逻辑。 + + +--- + +最终推荐:NautilusTrader + 自定义 Go 集成 + +- 主要理由:NautilusTrader 满足你的所有需求(回测、量化、图表展示、本地 Linux 部署),并且通过 Python API 和 Docker 易于上手。你可以用 Go 开发数据处理、后端逻辑或与 NautilusTrader 交互的部分(通过 Python 调用或文件/网络接口),从而充分利用你的 Go 技能。 + +- 实现步骤: + + 1. 下载 NautilusTrader 的源代码(GitHub:[https://github.com/nautechsystems/nautilus_trader)。](https://github.com/nautechsystems/nautilus_trader)。) + + 2. 在 Linux 上配置 Docker 和 Python 环境,运行 NautilusTrader 的回测和实时交易模块。 + + 3. 用 Python 编写自定义策略,生成回测结果(包括收益、最大回撤等)。 + + 4. 用 Go 开发数据处理或后端逻辑(如数据清洗、API 交互),并通过文件或网络接口与 Python 交互。 + + 5. 集成 TradingView Lightweight Charts 或 Plotly,通过前端开发生成直观的图表展示(可以用 Go 配合 WebAssembly 或直接调用 JavaScript)。 + +- 额外建议: + + - 如果图表需求复杂,可以直接用 Go 开发一个简单的 Web 服务(基于 Gin 或 Echo 框架),前端用 HTML/JavaScript 集成 TradingView Lightweight Charts,接收 NautilusTrader 的回测数据。 + + - 参考 NautilusTrader 的文档和社区(Discord 或 GitHub Issues),获取更多支持。 + + +--- + +为什么不推荐 Open Trading Platform? + +虽然 Open Trading Platform 用 Go 开发,适合你的背景,但它的功能和社区支持不如 NautilusTrader 成熟,尤其是在回测和量化分析方面可能需要更多自定义开发。此外,图表功能较弱,可能需要额外集成其他工具,增加了开发工作量。 + +--- + +总结 + +- 最适合的工具:NautilusTrader(结合 Go 开发和 TradingView Lightweight Charts 进行图表展示)。 + +- 部署环境:Linux(通过 Docker 和 Python/Rust 环境)。 + +- 开发语言:主要用 Python 开发策略和回测,使用 Go 开发数据处理或后端逻辑。 + +- 学习曲线:适合你的编程背景,预计 1-2 周可熟悉 NautilusTrader 的基本使用和 Go 整合。 + + +如果需要更具体的技术实现细节或代码示例,可以告诉我,我可以进一步提供指导! + +关于 前端 GUI 或图表界面方面, 我是否可以借助 我已经在本地部署的 elasticSearch 和 kibana 或者 即将部署的grafana来弥补 + +是的,你完全可以借助已经本地部署的 Elasticsearch 和 Kibana,或者即将部署的 Grafana 来弥补 NautilusTrader 或其他本地部署交易工具在前端 GUI 或图表界面方面的不足。这些工具非常适合处理和可视化大数据,生成直观的图表和仪表盘,从而满足你的需求(自定义策略回测、量化收益、最大回撤等在图表上的直观展示)。以下是详细分析和建议: + +--- + +1. Elasticsearch + Kibana 的适用性 + +优势 + +- 数据存储和检索: + + - Elasticsearch 是一个分布式搜索和分析引擎,适合处理结构化和非结构化数据。你可以将 NautilusTrader 的回测结果(如交易记录、价格数据、收益、最大回撤等)以 JSON 或其他格式导入 Elasticsearch,供后续查询和分析。 + + - 它支持高性能的全文搜索和聚合查询,非常适合处理交易数据的时间序列分析。 + +- Kibana 作为前端界面: + + - Kibana 是 Elasticsearch 的可视化工具,提供强大的图表和仪表盘功能。你可以用 Kibana 创建实时或历史图表,展示策略表现(如 K 线图、收益曲线、最大回撤图等)。 + + - Kibana 支持多种图表类型(折线图、柱状图、散点图、热力图等),可以直观展示交易数据和策略效果。 + + - 它还支持自定义仪表盘,可以整合多个图表(如价格走势、买卖信号、绩效指标),提供一个统一的前端 GUI 界面。 + +- 本地部署: + + - 既然你已经在本地部署了 Elasticsearch 和 Kibana(基于 Linux 环境),你可以直接利用现有基础设施,无需额外安装其他工具。 + +- 与 Go 和 NautilusTrader 的集成: + + - 用 Go 开发一个后端服务(例如基于 Gin 或 Echo 框架),从 NautilusTrader 提取回测数据(JSON、CSV 或其他格式),然后通过 Elasticsearch 的 API(RESTful)将数据索引到 Elasticsearch。 + + - 再通过 Kibana 的查询和可视化功能生成图表,展示策略的 K 线、收益、最大回撤等。 + + +局限 + +- 图表美观性: + + - Kibana 的图表功能强大但不如 TradingView 或 Grafana 在金融领域的图表美观和专业(例如 K 线图的细节可能需要额外调整)。 + + - 如果需要更专业的金融图表(如带交易信号的 K 线图),可能需要自定义 Kibana 的可视化插件或脚本。 + +- 实时性: + + - Elasticsearch 和 Kibana 更适合批处理和历史数据分析,实时数据可视化的性能可能不如专为金融设计的工具(如 TradingView)。 + +- 学习曲线: + + - 如果你对 Elasticsearch 和 Kibana 的数据索引、映射和可视化配置不熟悉,可能需要一些时间学习(但你的程序员背景应该能快速掌握)。 + + +--- + +1. Grafana 的适用性 + +优势 + +- 金融图表支持: + + - Grafana 是一个非常流行的开源可视化工具,广泛用于时间序列数据分析。它支持多种数据源(如 Elasticsearch、Prometheus、InfluxDB 等),并且有丰富的插件生态。 + + - 金融领域中,Grafana 可以通过插件(如 Grafana Candlestick Chart 插件)生成专业 K 线图、交易信号和绩效指标图表,适合展示策略回测结果。 + +- 直观性和灵活性: + + - Grafana 提供拖拽式界面,易于创建美观、交互式的仪表盘。你可以设计一个包含价格走势、策略信号、收益曲线和最大回撤的综合图表界面,直观展示数据。 + + - 它支持实时数据和历史数据可视化,适合你的需求。 + +- 本地部署: + + - Grafana 可以在 Linux 上轻松部署(通常与数据源如 Elasticsearch 或时间序列数据库一起使用)。你提到即将部署 Grafana,这是一个很好的选择,可以直接整合到你的本地环境。 + +- 与 Go 和 NautilusTrader 的集成: + + - 类似 Elasticsearch + Kibana 的方式,用 Go 开发后端服务,从 NautilusTrader 获取回测数据(JSON、CSV 等),通过 Grafana 的数据源 API 连接到 Elasticsearch 或直接用时间序列数据库(如 InfluxDB)存储数据。 + + - 在 Grafana 中配置数据源和仪表盘,生成直观的金融图表。 + + +局限 + +- 插件依赖: + + - Grafana 的默认图表可能需要安装金融相关的插件(如 Candlestick Chart 插件)来满足 K 线图需求。安装和配置插件可能需要额外学习。 + +- 数据准备: + + - 需要确保 NautilusTrader 的输出数据格式适合 Grafana 和 Elasticsearch 的时间序列要求,可能需要一些数据转换工作(可以用 Go 完成)。 + + +--- + +1. 比较:Kibana vs. Grafana + +|特性|Kibana|Grafana| +|---|---|---| +|图表美观性|功能强大,但金融图表较基础|更适合金融图表(插件支持 K 线等)| +|易用性|配置复杂,需懂 Elasticsearch 查询|拖拽式界面更直观,易于上手| +|实时性|适合批处理,实时性中等|实时数据支持更好| +|插件生态|主要针对日志和分析|金融插件更丰富| +|本地部署|已部署,复用成本低|即将部署,需额外配置| + +- 推荐组合:如果你的 Elasticsearch 和 Kibana 已经部署且稳定,可以优先使用它们,快速复用现有基础设施。但如果需要更专业的金融图表和更好的用户体验,建议同时部署 Grafana,并结合 Elasticsearch 作为数据源。两者可以互补: + + - 用 Elasticsearch 存储和索引 NautilusTrader 的回测数据。 + + - 用 Kibana 进行基础分析和仪表盘展示。 + + - 用 Grafana 提供更美观的金融图表和交互式界面。 + + +--- + +1. 实现步骤 + +使用 Elasticsearch + Kibana + +1. 数据准备: + + - 用 Go 开发后端服务,从 NautilusTrader 提取回测数据(交易记录、价格、收益、最大回撤等),格式化为 JSON。 + + - 使用 Go 的 Elasticsearch 客户端库(如 elastic/go-elasticsearch)将数据索引到 Elasticsearch。 + +2. Kibana 配置: + + - 在 Kibana 中创建索引模式(Index Pattern),基于 Elasticsearch 的数据。 + + - 使用 Kibana 的 Visualize 功能创建 K 线图、折线图(收益曲线)、柱状图(最大回撤等),并组合成仪表盘。 + +3. 前端展示: + + - Kibana 提供 Web 界面,可以直接访问本地部署的 Kibana 实例,生成直观的图表和 GUI。 + + +使用 Grafana + +1. 数据准备: + + - 类似地,用 Go 后端服务将 NautilusTrader 数据输出到 Elasticsearch 或直接存储到 InfluxDB(时间序列数据库)。 + + - 配置 Grafana 的数据源(Elasticsearch 或 InfluxDB)。 + +2. Grafana 配置: + + - 安装金融插件(如 Grafana Candlestick Chart 插件),创建 K 线图和策略表现图表。 + + - 设计仪表盘,展示价格走势、买卖信号、收益、最大回撤等。 + +3. 前端展示: + + - Grafana 提供交互式 Web 界面,适合直观展示数据。 + + +结合 Go 和 NautilusTrader + +- 用 Go 开发一个服务,监听 NautilusTrader 的回测输出(通过文件、消息队列或 API),并将数据格式化后推送到 Elasticsearch 或 InfluxDB。 + +- Go 的高性能和并发特性非常适合处理大数据和实时数据流,确保数据传输效率。 + + +--- + +1. 适合你的原因 + +- 编程背景:你熟悉 Go 和其他语言,开发后端服务和数据处理逻辑对你来说是轻车熟路。 + +- 本地 Linux 环境:Elasticsearch、Kibana 和 Grafana 都支持 Linux 部署,且你已有或即将部署这些工具,复用成本低。 + +- 图表需求:Kibana 和 Grafana 都能满足直观图表展示的需求,尤其是 Grafana 更适合金融场景。 + +- 自定义策略:NautilusTrader 提供强大的回测和量化功能,与 Elasticsearch/Kibana/Grafana 的组合可以无缝集成,形成完整的本地解决方案。 + + +--- + +1. 局限和解决办法 + +- 图表专业性: + + - 如果 Kibana 或 Grafana 的默认图表不够专业,可以自定义脚本或插件(如用 Go 开发数据处理逻辑,生成 CSV 文件,再用 Python 的 Matplotlib 或 Plotly 增强图表)。 + + - 或者结合 TradingView Lightweight Charts,通过 Go 开发的 Web 服务嵌入前端。 + +- 实时性: + + - 如果需要实时交易数据的可视化,建议优先使用 Grafana,因为它对时间序列数据的实时性支持更好。 + +- 学习曲线: + + - 如果对 Elasticsearch、Kibana 或 Grafana 不熟悉,可能需要 1-2 周学习配置和可视化(但你的程序员背景应该能快速上手)。 + + +--- + +1. 最终建议 + +- 优先选择:Elasticsearch + Kibana(复用现有部署)+ Grafana(为金融图表增强)。 + +- 实施路径: + + 1. 用 Go 开发后端服务,将 NautilusTrader 的回测数据推送到 Elasticsearch。 + + 2. 在 Kibana 中创建基础仪表盘,展示策略表现。 + + 3. 部署 Grafana,安装金融插件,创建更专业的 K 线图和绩效图表。 + + 4. 通过 Go 和 Web 技术(如果需要)增强前端交互。 + +- 时间估计:基于你的编程经验,预计 1-2 周完成基本集成和可视化,2-4 周优化图表和性能。 + + +如果你需要具体的技术实现细节(例如 Go 代码示例、Elasticsearch 索引配置或 Grafana 仪表盘设计),可以告诉我,我可以进一步提供指导! + +我看了一下 open-trading-platform的文档, [https://github.com/ettec/open-trading-platform?tab=readme-ov-file](https://github.com/ettec/open-trading-platform?tab=readme-ov-file) 所以,刚才的答案,请在补充一下 + +感谢你的反馈!你在查看了 Open Trading Platform(OTP)的文档([https://github.com/ettec/open-trading-platform?tab=readme-ov-file)后,我会补充和调整之前的答案,结合](https://github.com/ettec/open-trading-platform?tab=readme-ov-file)后,我会补充和调整之前的答案,结合) OTP 的特性,进一步分析它是否适合你的需求(自定义策略回测、量化收益、最大回撤、直观图表展示、本地 Linux 部署、熟悉 Go 开发)。以下是补充内容,并重新评估 OTP 在你的场景中的适用性,同时与之前的推荐(NautilusTrader + Elasticsearch/Kibana/Grafana)进行对比。 + +--- + +补充:Open Trading Platform(OTP)分析 + +1. OTP 的核心特性(根据文档) + +根据 OTP 的 GitHub 文档(截至 2025 年 3 月),以下是其主要特性: + +- 用 Go 开发:OTP 使用 Go 语言构建其核心后端服务,适合你熟悉 Go 的背景。 + +- 跨资产支持:支持股票、期货、期权和加密货币市场,适合多种金融资产的交易和回测。 + +- 本地部署(On-Prem):支持本地部署在 Linux、Kubernetes 或私有云环境中,符合你的 Linux 环境需求。 + +- 实时和历史数据:支持实时交易执行和历史数据分析,可以用于回测策略。 + +- 模块化设计:包括交易执行引擎、数据流、策略开发和前端(React 客户端)组件,适合自定义开发。 + +- GUI 和图表:提供 React 客户端作为前端界面,内置一些图表功能(如价格走势、交易信号),但文档表明图表功能较为基础,可能需要扩展。 + + +1. 与你的需求的匹配度 + +- 自定义策略回测: + + - OTP 支持策略开发,但文档中未明确提到内置的回测框架或详细的量化指标(如最大回撤、夏普率等)。你需要用 Go 自定义回测逻辑,开发策略并实现性能量化(如收益、最大回撤)。 + + - 相比 NautilusTrader,OTP 的回测功能可能需要更多手动开发。 + +- 量化收益、最大回撤等: + + - OTP 本身没有提供现成的量化分析工具(如 NautilusTrader 的性能报告),但你可以用 Go 开发这些功能,计算和记录策略的收益、最大回撤等指标。 + + - 需要额外开发逻辑,将这些指标输出到数据库或文件,供后续分析。 + +- 直观图表体现: + + - OTP 提供 React 客户端作为前端 GUI,内置一些基础图表(如价格曲线、交易信号)。但文档表明其图表功能较为简单,可能不满足金融领域的专业 K 线图或复杂指标展示需求。 + + - 你可以扩展 React 前端,集成更专业的图表库(如 TradingView Lightweight Charts 或 D3.js),但这需要额外的开发工作。 + +- 本地部署在 Linux: + + - OTP 完全支持 Linux 部署(通过 Kubernetes 或直接运行 Go 服务),并且文档提供了详细的部署指南(如 Docker 和 Kubernetes 配置),适合你的 Linux 环境。 + +- 适合 Go 开发: + + - 作为 Go 开发者,OTP 的核心是用 Go 开发的,代码库完全开源(GitHub 提供),你可以直接修改和扩展代码,开发自定义策略、回测和量化功能。 + + +1. 与 NautilusTrader 的对比 + +|特性|Open Trading Platform (OTP)|NautilusTrader| +|---|---|---| +|编程语言|Go(核心后端) + React(前端)|Rust(核心) + Python/C#(API)| +|回测功能|需要自定义开发,功能较基础|内置高性能回测框架,功能强大| +|量化指标|需要手动实现(如最大回撤、收益)|内置详细性能报告(收益、最大回撤等)| +|图表/前端 GUI|基础 React 客户端,可扩展|无内置 GUI,需集成(如 Plotly)| +|本地 Linux 部署|完全支持(Kubernetes/Docker)|完全支持(Docker)| +|适合 Go 开发者|非常适合(直接用 Go 开发)|需要 Go 与 Python/Rust 整合| +|学习曲线|较低(Go 熟悉),但回测/图表需开发|较高(需学习 Python/Rust),但功能全| +|社区和文档|较新,社区较小,文档基础|活跃,文档丰富,社区支持强| + +1. OTP 的优势(针对你的需求) + +- Go 友好:作为用 Go 开发的平台,OTP 直接适合你的编程背景,无需学习其他语言即可扩展功能。 + +- 本地 Linux 部署:支持 Kubernetes 和 Docker,易于在你的 Linux 环境中部署和运行。 + +- 模块化设计:你可以自定义策略、回测逻辑和前端界面,完全掌控开发过程。 + +- 开源透明:GitHub 上的源代码允许你自由修改和优化。 + + +1. OTP 的局限(针对你的需求) + +- 回测和量化功能: + + - OTP 没有内置的回测框架或量化分析工具(如 NautilusTrader 的详细性能报告)。你需要用 Go 开发完整的回测逻辑,计算收益、最大回撤等指标。这增加了开发工作量,但对你这个程序员来说是可行的。 + +- 图表功能: + + - 内置的 React 客户端图表较基础,可能无法直接满足需要专业 K 线图和策略信号展示的需求。你需要扩展前端,集成更专业的图表库(如 TradingView Lightweight Charts),或者用 Elasticsearch/Kibana/Grafana 增强可视化。 + +- 社区和文档: + + - OTP 是一个较新的项目,社区和文档不如 NautilusTrader 成熟,可能需要更多时间探索和调试。 + + +1. 结合 Elasticsearch/Kibana/Grafana 的建议 + +与之前提到的 NautilusTrader 方案类似,你可以结合 OTP 和 Elasticsearch/Kibana/Grafana 来弥补图表和量化分析的不足: + +- 数据流: + + - 用 Go 开发 OTP 的自定义策略和回测逻辑,生成交易数据、收益、最大回撤等指标。 + + - 将这些数据(JSON 或 CSV 格式)通过 Go 服务推送到 Elasticsearch 或 InfluxDB。 + +- 可视化: + + - 用 Kibana 创建基础仪表盘,展示回测结果。 + + - 用 Grafana 增强图表功能,生成专业的 K 线图、收益曲线和最大回撤图表。 + +- 前端 GUI: + + - 如果 OTP 的 React 客户端图表功能不足,可以直接用 Kibana/Grafana 提供替代的 Web 界面,或者扩展 OTP 的前端,集成 TradingView Lightweight Charts。 + + +1. 调整之前的推荐 + +基于 OTP 的特性,我会调整之前的推荐,将 OTP 作为主要候选,与 NautilusTrader 进行对比,并提供两者的选择建议: + +OTP + Elasticsearch/Kibana/Grafana 方案 + +- 适合场景:如果你更倾向于用 Go 开发整个解决方案,不想学习 Python/Rust,并且愿意投入时间扩展回测和图表功能,OTP 是一个很好的选择。 + +- 实现步骤: + + 1. 下载 OTP 的源代码(GitHub:[https://github.com/ettec/open-trading-platform),在](https://github.com/ettec/open-trading-platform),在) Linux 上通过 Docker/Kubernetes 部署。 + + 2. 用 Go 开发自定义策略和回测逻辑,计算收益、最大回撤等指标。 + + 3. 用 Go 后端服务将数据推送到 Elasticsearch 或 InfluxDB。 + + 4. 用 Kibana/Grafana 创建直观的图表和仪表盘,展示策略表现。 + + 5. 如果需要更专业的图表,扩展 OTP 的 React 前端,集成 TradingView Lightweight Charts。 + +- 时间估计:基于你的 Go 开发经验,预计 2-4 周完成基本功能(策略回测、量化、图表展示),4-6 周优化和扩展。 + + +NautilusTrader + Elasticsearch/Kibana/Grafana 方案 + +- 适合场景:如果你希望快速上手功能完善的回测和量化工具,愿意学习 Python/Rust 来整合 Go,NautilusTrader 是一个更成熟的选择。 + +- 实现步骤:与之前的推荐一致,使用 NautilusTrader 进行回测和量化,用 Go 开发数据处理逻辑,再结合 Elasticsearch/Kibana/Grafana 进行可视化。 + +- 时间估计:预计 1-2 周熟悉 NautilusTrader 和 Python,2-4 周完成集成和优化。 + + +1. 最终推荐 + +- 优先选择:NautilusTrader + Elasticsearch/Kibana/Grafana(如果需要更快上手和更成熟的功能)。 + +- 次优选择:Open Trading Platform + Elasticsearch/Kibana/Grafana(如果你更倾向于用 Go 开发整个解决方案,并愿意投入更多时间扩展功能)。 + +- 权衡建议: + + - 如果你的时间紧迫,且需要快速实现功能,选择 NautilusTrader,因为它内置回测和量化工具,图表可视化可以通过 Kibana/Grafana 补齐。 + + - 如果你更喜欢完全用 Go 开发,并且对扩展回测和图表功能有信心,选择 OTP,结合 Elasticsearch/Kibana/Grafana 增强可视化。 + + +1. 为什么 NautilusTrader 仍是首选 + +- NautilusTrader 提供更成熟的回测和量化框架,节省了开发时间。 + +- 它的社区和文档更丰富,适合快速上手和解决问题。 + +- 虽然需要学习 Python/Rust,但你的编程背景可以快速适应,与 Go 的整合也完全可行。 + + +1. OTP 的潜在优势(如果深入开发) + +- 如果你有长期计划用 Go 构建一个完全定制的交易平台,OTP 是一个起点,可以逐步扩展为适合你的专属工具。 + +- 它的 Go 核心和开源特性让你有完全的控制权,适合复杂需求。 + + +--- + +1. 技术实现细节(OTP 方案) + +如果你选择 OTP,以下是具体实施建议: + +- 回测开发: + + - 用 Go 实现策略逻辑,基于 OTP 的 strategy 模块,记录每笔交易的收益、最大回撤等指标。 + + - 参考 OTP 的示例代码(文档中的 examples 目录),开发自定义策略。 + +- 量化分析: + + - 用 Go 编写性能计算逻辑,计算净利、最大回撤、夏普率等,输出到 CSV 或 JSON 文件。 + +- 数据存储: + + - 用 Go 客户端将数据推送到 Elasticsearch(通过 elastic/go-elasticsearch)或 InfluxDB。 + +- 可视化: + + - 在 Kibana/Grafana 中配置数据源和仪表盘,生成 K 线图、收益曲线等。 + + - 如果需要前端增强,扩展 OTP 的 React 客户端,集成 TradingView Lightweight Charts。 + + +--- + +1. 总结 + +- OTP 的潜力:适合你熟悉 Go 的背景,本地 Linux 部署方便,但回测和图表功能需要更多开发工作。 + +- NautilusTrader 的优势:功能更成熟,适合快速实现你的需求,但需要学习 Python/Rust 并与 Go 整合。 + +- 推荐组合:NautilusTrader + Elasticsearch/Kibana/Grafana(首选),或 OTP + Elasticsearch/Kibana/Grafana(次选,适合深度定制)。 + + +如果你有更多关于 OTP 或 NautilusTrader 的具体问题,或需要代码示例(Go、Python 等),可以告诉我,我会进一步提供帮助! + +我在github上搜索nautilusTrader 得到如下内容: [https://github.com/search?q=NautilusTrader&type=repositories](https://github.com/search?q=NautilusTrader&type=repositories) + +1 帖子 + + + + + + + + + +9 网页 + +根据你在 GitHub 上搜索 “NautilusTrader” 的结果([https://github.com/search?q=NautilusTrader&type=repositories),我可以提供以下信息和分析,帮助你理解相关内容和如何利用这些资源。以下是基于](https://github.com/search?q=NautilusTrader&type=repositories),我可以提供以下信息和分析,帮助你理解相关内容和如何利用这些资源。以下是基于) GitHub 搜索结果和我的知识(截至 2025 年 3 月 3 日)的回答: + +--- + +1. NautilusTrader 概述 + +- 项目来源:NautilusTrader 是一个高性能、开源的交易平台,专为算法交易和量化交易设计。它由 Nautech Systems 开发,主要用于股票、期货、加密货币等金融市场的策略回测、实时交易和量化研究。 + +- 编程语言:NautilusTrader 的核心是用 Rust 编写,确保高性能和可靠性;它提供 Python 和 C# 的 API,方便开发者快速构建策略和集成。 + +- 开源特性:NautilusTrader 是开源项目,托管在 GitHub 上(通常在 nautechsystems/nautilus_trader 仓库),你可以访问其源代码、文档和社区支持。 + + +1. GitHub 搜索结果分析 + +- 当你在 GitHub 上搜索 “NautilusTrader” 时,可能会找到以下类型的仓库: + + - 官方仓库:nautechsystems/nautilus_trader 是 NautilusTrader 的主要存储库,包含核心代码、文档、示例和贡献指南。 + + - 衍生仓库:一些用户或开发者可能基于 NautilusTrader 创建的 fork 或扩展仓库,用于特定策略、插件或集成。 + + - 相关项目:其他与量化交易、算法交易相关的项目可能也被搜索到,但不一定是 NautilusTrader 的直接部分。 + + - 文档和教程:可能包括用户编写的教程、示例代码或与 NautilusTrader 相关的讨论。 + +- 搜索结果通常会显示: + + - 仓库名称、描述、星标数(Stars)、Fork 数、最近更新时间等。 + + - 代码语言(如 Rust、Python、C#)和许可证(如 Apache 2.0 或 MIT)。 + + - 仓库的 README 文件,可能包含安装指南、功能概述和使用示例。 + + +1. 如何利用这些 GitHub 资源 + +- 访问官方仓库: + + - 找到 nautechsystems/nautilus_trader 仓库,阅读其 README 文件,了解项目目标、安装步骤和功能。 + + - 检查 “Issues” 板块,了解已知问题、功能请求或社区讨论。 + + - 查看 “Pull Requests” 和 “Discussions” 板块,获取开发者和用户之间的交流,了解最新进展。 + +- 克隆和本地部署: + + - 使用 git clone 命令克隆仓库到你的 Linux 环境(例如 git clone https://github.com/nautechsystems/nautilus_trader.git)。 + + - 按照仓库中的安装指南(通常需要 Docker、Python 和 Rust 环境)在本地部署 NautilusTrader。 + + - 如果你熟悉 Go,可以开发自定义服务,与 NautilusTrader 的 Python API 集成(如通过文件或网络接口)。 + +- 自定义开发: + + - 利用 NautilusTrader 的 Python API 编写自定义交易策略和回测逻辑。 + + - 用 Go 开发数据处理或后端逻辑,结合 NautilusTrader 的输出(如交易数据、收益、最大回撤等)进行扩展。 + +- 社区支持: + + - 参与 GitHub 上的讨论,提出问题或贡献代码(如修复 Bug 或添加新功能)。 + + - 根据仓库的贡献指南(CONTRIBUTING.md)提交 Pull Request,提升项目。 + + +1. 与你的需求的匹配 + +基于你的需求(自定义策略回测、量化收益、最大回撤、直观图表展示、本地 Linux 部署、熟悉 Go 开发),NautilusTrader 是非常适合的选择: + +- 回测和量化:NautilusTrader 内置高性能回测框架,支持计算收益、最大回撤等指标,适合你的量化需求。 + +- 图表支持:虽然 NautilusTrader 没有内置 GUI,但你可以通过 Python 的可视化库(如 Matplotlib、Plotly)或结合 Elasticsearch/Kibana/Grafana 生成直观的图表。 + +- 本地 Linux 部署:支持 Docker 容器化,易于在 Linux 上运行。 + +- Go 整合:用 Go 开发后端服务,处理数据或与 NautilusTrader 的 Python API 交互,充分利用你的技能。 + + +1. 注意事项 + +- 依赖环境:NautilusTrader 需要 Rust、Python 和 Docker 环境,虽然主要用 Rust 和 Python 开发,但你的 Go 技能可以通过接口或服务整合进来。 + +- 学习曲线:如果对 Rust 或 Python 不熟悉,可能需要一些时间学习,但你的程序员背景应该能快速掌握。 + +- 文档和社区:NautilusTrader 的 GitHub 仓库通常提供详细文档和活跃社区支持(根据 X 上的帖子和 GitHub 活动,NautilusTrader 在量化交易社区中广受欢迎)。 + + +1. 下一步建议 + +- 访问 https://github.com/nautechsystems/nautilus_trader,查看最新版本和文档。 + +- 克隆仓库到你的 Linux 环境,尝试安装和运行示例策略。 + +- 用 Go 开发一个简单的服务,接收 NautilusTrader 的回测数据,并推送到 Elasticsearch 或 InfluxDB,用于 Kibana/Grafana 上的可视化。 + +- 如果遇到问题,参考 GitHub Issues 或社区讨论(如 Discord 或 X 上的相关帖子),寻求帮助。 + + +如果你需要更具体的代码示例(例如 Go 与 NautilusTrader 的集成,或 Elasticsearch 数据索引的配置),可以告诉我,我可以进一步提供指导! + +[https://github.com/nautechsystems/nautilus_trader?tab=readme-ov-file](https://github.com/nautechsystems/nautilus_trader?tab=readme-ov-file)我注意到 NautilusTrader 可以跟交易所api集成,但是貌似只能一个个的去适配, 为什么不直接适配 类似ccxt这样的中间件呢 + +感谢你的观察!根据你提供的链接([https://github.com/nautechsystems/nautilus_trader?tab=readme-ov-file)以及](https://github.com/nautechsystems/nautilus_trader?tab=readme-ov-file)以及) NautilusTrader 的文档和特性,我可以解释为什么 NautilusTrader 目前选择逐一适配交易所 API,而不是直接使用像 CCXT(Crypto Exchange Trading Library)这样的中间件。以下是详细分析: + +--- + +1. NautilusTrader 适配交易所 API 的现状 + +- 根据 NautilusTrader 的 GitHub 文档(README 和相关代码),它确实支持与多个交易所的 API 集成,比如 Binance、Kraken、Interactive Brokers 等。这些适配是通过特定的“执行器”(Executors)和“数据提供者”(Data Providers)实现的,分别处理交易执行和市场数据获取。 + +- 这些适配通常是逐一开发的,针对每个交易所的 API 特性(如 REST、WebSocket、FIX 协议)进行优化,确保高性能和可靠性。 + +- NautilusTrader 强调“高性能”和“低延迟”,因此其设计更倾向于直接与交易所的原生 API 交互,而不是依赖中间件(如 CCXT)。 + + +--- + +1. 为什么不直接适配 CCXT 这样的中间件? + +以下是可能的原因,结合 NautilusTrader 的设计理念、技术架构和目标: + +a. 性能和低延迟需求 + +- NautilusTrader 的核心目标:NautilusTrader 定位为高性能、纳秒级交易平台,特别适合高频交易(HFT)和低延迟场景。直接与交易所的原生 API 交互可以最大化性能,避免中间件引入的额外延迟或复杂性。 + +- CCXT 的局限:CCXT 是一个功能强大的开源库,支持数百个加密货币交易所的统一 API,但它并不是为高性能交易设计的。CCXT 通过抽象化和标准化交易所 API,可能会引入额外的网络开销、序列化/反序列化开销或性能瓶颈,尤其在高频交易场景下。这与 NautilusTrader 的性能目标不完全匹配。 + + +b. 自定义和控制 + +- 深度定制需求:NautilusTrader 的开发者可能希望对每个交易所的 API 实现完全控制,包括特定的数据格式、错误处理、速率限制管理、WebSocket 连接优化等。直接适配原生 API 允许他们根据交易所的特性进行优化,而 CCXT 的标准化接口可能限制这种灵活性。 + +- 交易逻辑的复杂性:NautilusTrader 支持复杂的事件驱动架构和策略,可能需要与交易所 API 的特定功能紧密耦合(如高级订单类型、实时数据流),而 CCXT 的通用接口可能无法完全满足这些需求。 + + +c. 可靠性与稳定性 + +- 直接适配的可靠性:通过逐一适配,NautilusTrader 的开发者可以针对每个交易所进行深入测试,确保每条连接的稳定性和错误处理(如断线重连、速率限制、API 变更)。依赖 CCXT 则需要依赖 CCXT 的维护和更新节奏,可能增加第三方库的不确定性。 + +- CCXT 的更新风险:CCXT 是一个社区维护的库,虽然功能丰富,但其更新频率高、兼容性可能不稳定。如果 NautilusTrader 依赖 CCXT,可能会面临因 CCXT 更新或 Bug 导致的集成问题。 + + +d. 目标用户群体 + +- NautilusTrader 的用户:NautilusTrader 主要面向专业量化交易者、机构和开发者,他们可能更倾向于使用直接的、优化的 API 集成,以实现更高的控制力和性能。而 CCXT 更适合初学者或需要快速集成多个加密货币交易所的开发者。 + +- 生态系统差异:NautilusTrader 支持不仅仅是加密货币市场,还包括股票、期货等传统金融市场。CCXT 主要聚焦于加密货币交易所,覆盖范围有限,可能不适合 NautilusTrader 的跨市场需求。 + + +e. 开发复杂性和维护成本 + +- 逐一适配的成本:虽然逐一适配交易所 API 需要更多初始开发工作,但一旦完成,开发者可以对其进行长期优化和维护,且不受第三方库变化的影响。 + +- CCXT 的依赖风险:依赖 CCXT 会将 NautilusTrader 的功能与 CCXT 的开发进度、Bug 修复和 API 变更绑定。如果 CCXT 的某些功能或支持被移除或变更,NautilusTrader 可能需要额外的工作来适配。 + + +f. 架构设计哲学 + +- NautilusTrader 的架构:NautilusTrader 使用事件驱动架构(Event-Driven Architecture),其核心是用 Rust 实现的,强调高性能和模块化。直接适配交易所 API 符合其模块化设计,可以更好地集成到其事件处理和执行系统中。而 CCXT 的设计更偏向于通用性,可能不完全匹配 NautilusTrader 的架构需求。 + + +--- + +1. CCXT 的优势(如果适配可能带来的好处) + +尽管 NautilusTrader 没有直接使用 CCXT,但如果适配 CCXT,可能会有以下好处: + +- 快速集成:CCXT 支持数百个加密货币交易所(如 Binance、Kraken、Coinbase 等),只需少量代码即可连接多个交易所,减少开发时间。 + +- 统一接口:CCXT 提供标准化的 API(如获取市场数据、发送订单等),简化了与不同交易所的交互。 + +- 社区支持:CCXT 是一个成熟的开源项目,拥有广泛的社区支持和活跃的更新,适合快速原型开发。 + + +然而,这些优势在 NautilusTrader 的高性能和定制化目标下可能显得次要。 + +--- + +1. NautilusTrader 未来可能适配 CCXT 的可能性 + +- 根据 GitHub 上的讨论(Issues 或 Discussions)或社区反馈(例如 X 上的帖子),如果有足够多的用户需求或社区贡献,NautilusTrader 可能考虑支持像 CCXT 这样的中间件作为可选的插件或集成方式。 + +- 目前,NautilusTrader 的开发者更关注性能优化和核心功能的扩展(如新交易所适配、策略开发工具等),因此短期内直接依赖 CCXT 的可能性较低。 + +- 你可以提交一个 Feature Request 或 Pull Request 到 nautechsystems/nautilus_trader 仓库,建议支持 CCXT 集成,并提供用例(例如加密货币交易的快速适配需求)。如果社区支持足够,这种功能可能被优先考虑。 + + +--- + +1. 如何在 NautilusTrader 中间接使用 CCXT + +如果你希望在 NautilusTrader 项目中使用 CCXT,可以通过以下方式实现,但需要手动开发和集成: + +- 自定义执行器/数据提供者: + + - 用 Python 或 C# 开发一个自定义的 Executor/Data Provider,使用 CCXT 作为底层库,与 NautilusTrader 的架构集成。 + + - 例如,用 Python 调用 CCXT 的 API 获取市场数据或执行交易,然后将其包装为 NautilusTrader 的事件或数据流。 + +- Go 集成: + + - 如果你更倾向于用 Go 开发,可以用 Go 调用 CCXT(通过 Python 桥接或 HTTP API),然后将数据传递给 NautilusTrader 的 Python API 或直接用文件/网络接口交互。 + +- 性能注意: + + - 确保测试 CCXT 集成后的性能(如延迟、数据一致性),以避免影响 NautilusTrader 的高性能目标。 + + +--- + +1. 总结 + +NautilusTrader 目前选择逐一适配交易所 API 而非直接使用 CCXT,主要是为了: + +- 追求高性能和低延迟,确保交易系统的可靠性。 + +- 保持对每个交易所 API 的深度控制和优化。 + +- 避免第三方中间件的依赖风险和性能开销。 + + +虽然直接适配 CCXT 有快速集成和统一接口的优势,但它不完全符合 NautilusTrader 的设计哲学和目标。如果你需要快速支持多个加密货币交易所,可以通过自定义开发将 CCXT 集成到 NautilusTrader 中,但需要权衡性能和开发成本。 + +如果你有进一步的具体需求(例如某交易所的适配或 CCXT 集成的实现细节),可以告诉我,我可以提供更具体的建议或代码示例! + +运行回测需要历史基础数据和特征数据,那么基础数据我可以从交易所类似okx + + + + + + + + + + + + + +15 网页 + +是的,你可以从像 OKX 这样的加密货币交易所获取历史基础数据,用于运行回测(例如自定义策略回测、量化收益、最大回撤等)。以下是关于如何从 OKX 获取历史数据以及将其用于回测的详细分析和建议,结合你的需求(本地 Linux 部署、熟悉 Go 开发、需要直观图表展示等): + +--- + +1. OKX 提供的历史数据类型 + +根据可用的信息,OKX 提供多种历史市场数据,适合用于回测和量化分析。以下是 OKX 提供的主要数据类型: + +- OHLC 数据:开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)数据,通常按时间周期(如 1 分钟、5 分钟、1 小时、1 天等)提供。OKX 提供从 2019 年 7 月 11 日开始的 OHLC 历史数据,适合长周期回测。 + +- 交易数据(Tick-by-Tick Trade Data):逐笔交易数据,记录每个交易的价位和数量,适合高频交易和详细回测。OKX 提供从 2021 年开始的逐笔交易历史数据。 + +- 订单簿数据(Order Book Data):订单簿快照和更新数据(包括买单和卖单的限价订单),适合分析市场深度和流动性。OKX 为 VIP 用户提供过去 3 个月的订单簿历史数据(逐笔级别)。 + +- 衍生品数据:包括期货、永续合约和期权的市场数据(如资金费率、未平仓合约量、清算数据等),适合衍生品策略回测。 + +- 时间戳和格式:OKX 的数据通常以 UTC 或香港时间(HKT)提供(可通过 API 选择),格式化后可用于时间序列分析。 + + +这些数据可以通过以下方式获取: + +- REST API:访问 OKX 的 REST API 获取 OHLC、交易和订单簿数据,适合批量下载历史数据。 + +- WebSocket API:实时获取市场数据,但也可用于历史数据的回放或补全。 + +- 下载 CSV 文件:OKX 允许用户下载部分历史数据(例如 OHLC 和交易数据),但有时间限制(如过去 3 个月的订单簿数据仅限 VIP 用户,或交易历史最多 1 年)。 + + +--- + +1. 获取 OKX 历史数据的限制和注意事项 + +- 时间范围限制: + + - OHLC 和交易数据从 2019 年 7 月 11 日或 2021 年开始,但订单簿数据仅限 VIP 用户访问过去 3 个月的数据。 + + - 交易历史下载受限于过去 3 个月(非 VIP 用户)或 1 年(通过报告中心)。对于超过 3 个月或 1 年的数据,需要通过自定义交易上传或第三方数据提供商补充。 + +- 数据质量和可靠性: + + - OKX 声明其数据“被认为准确”,但未进行独立验证,存在可能的不完整或错误的风险。你需要对数据进行清洗和验证,确保适合回测。 + + - 数据标准化后(例如时间戳、格式调整)才能用于量化分析。 + +- 使用限制: + + - OKX 的历史数据条款限制仅供个人使用,不得用于商业用途或再分发。你需要确保使用符合其条款(例如仅用于回测和研究)。 + +- VIP 要求: + + - 访问某些高级数据(如过去 3 个月的订单簿数据)需要 VIP 账户,可能涉及交易量或持有 OKB 代币的资格要求。 + + +--- + +1. 如何从 OKX 获取历史数据用于回测 + +以下是具体步骤,结合你的技术背景(Go 开发、Linux 环境): + +- 步骤 1:注册 OKX 账户并获取 API 密钥 + + - 登录 OKX 平台,创建 API 密钥(需要 Read-only 权限,用于获取市场数据)。 + + - 确保遵守 OKX 的 API 使用政策,避免触发速率限制。 + +- 步骤 2:通过 OKX API 获取数据 + + - 使用 OKX 的 REST API 获取 OHLC、交易和订单簿数据。以下是 API 示例(基于文档): + + - OHLC 数据:GET /api/v5/market/candles?instId=BTC-USDT-SWAP&bar=1D(获取 BTC-USDT 永续合约的每日 K 线数据)。 + + - 交易数据:GET /api/v5/market/trades?instId=BTC-USDT-SWAP(获取逐笔交易数据)。 + + - 订单簿数据:GET /api/v5/market/books?instId=BTC-USDT-SWAP(获取订单簿快照,需 VIP 权限)。 + + - 选择 UTC 或香港时间戳,确保与你的回测时间一致(可通过 API 参数指定,如 1Dutc)。 + +- 步骤 3:用 Go 开发数据获取和处理 + + - 用 Go 开发一个脚本,通过 HTTP 客户端(如 net/http 包)调用 OKX 的 REST API。 + + - 使用 Go 的 JSON 解析库(如 encoding/json)处理返回的 JSON 数据,转换为适合回测的时间序列格式(CSV、JSON 或时间序列数据库)。 + + - 示例代码框架(伪代码): + + go + + ```go + package main + + import ( + "fmt" + "net/http" + "io/ioutil" + "encoding/json" + ) + + type OHLC struct { + Timestamp string `json:"ts"` + Open float64 `json:"o"` + High float64 `json:"h"` + Low float64 `json:"l"` + Close float64 `json:"c"` + } + + func getOKXData(url string) ([]OHLC, error) { + resp, err := http.Get(url) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + var data struct { + Data []OHLC `json:"data"` + } + err = json.Unmarshal(body, &data) + if err != nil { + return nil, err + } + return data.Data, nil + } + + func main() { + url := "https://www.okx.com/api/v5/market/candles?instId=BTC-USDT-SWAP&bar=1D" + ohlcData, err := getOKXData(url) + if err != nil { + fmt.Println("Error:", err) + return + } + for _, candle := range ohlcData { + fmt.Printf("Time: %s, Open: %.2f, High: %.2f, Low: %.2f, Close: %.2f\n", + candle.Timestamp, candle.Open, candle.High, candle.Low, candle.Close) + } + } + ``` + + - 将获取的数据保存为 CSV 或 JSON 文件,或直接推送到 Elasticsearch、InfluxDB 等时间序列数据库。 + +- 步骤 4:补充缺失数据 + + - 如果 OKX 提供的历史数据不足(例如超过 3 个月或 1 年的数据),可以借助第三方数据提供商(如 Tardis.dev 或 Amberdata)获取更长时间范围的 OKX 历史数据。 + + - Tardis.dev 提供 OKX 的逐笔订单簿、交易和资金费率数据(从 WebSocket 采集),支持 CSV 下载和 API 访问,适合回测。 + + - Amberdata 提供 OKX 的 OHLC 和衍生品历史数据,适合投资分析和回测。 + +- 步骤 5:本地部署和回测 + + - 使用 NautilusTrader 或 Open Trading Platform(OTP)在 Linux 上运行回测,将 OKX 数据作为输入。 + + - 例如,在 NautilusTrader 中用 Python API 加载 CSV/JSON 数据,运行回测并计算收益、最大回撤等指标。 + + - 用 Go 开发数据处理逻辑,生成特征数据(如技术指标、成交量变化等)。 + + +--- + +1. 特征数据准备 + +- 基础数据的扩展:从 OKX 的 OHLC 和交易数据中提取特征数据,例如: + + - 技术指标:移动平均线(SMA、EMA)、相对强弱指数(RSI)、MACD 等。 + + - 成交量分析:成交量变化、OBV(成交量净额)。 + + - 市场深度:基于订单簿数据的买/卖压力、流动性指标。 + +- Go 开发:用 Go 实现特征提取逻辑(如使用 gonum 库计算技术指标),并将结果与基础数据合并。 + +- 存储和可视化:将特征数据存储到 Elasticsearch 或 InfluxDB,用 Kibana/Grafana 生成直观的图表(如 K 线图、指标曲线)。 + + +--- + +1. OKX 数据与回测工具的集成 + +- NautilusTrader 集成: + + - 用 Python 脚本从 OKX API 下载数据,保存为 CSV 或 JSON 文件。 + + - 在 NautilusTrader 中加载这些文件进行回测,生成收益、最大回撤等报告。 + + - 用 Go 开发后端服务,处理数据并与 NautilusTrader 的 Python API 交互。 + +- Open Trading Platform(OTP)集成: + + - 用 Go 直接从 OKX API 获取数据,开发回测逻辑。 + + - 扩展 OTP 的 React 前端,展示图表和策略表现。 + + +--- + +1. 注意事项 + +- 数据完整性:确保 OKX 数据没有缺失或错误(例如时间戳一致性、数据清洗)。可以用 Go 编写数据验证脚本。 + +- 速率限制:OKX API 有速率限制(例如每秒一定数量的请求),需要用 Go 实现合理的请求间隔或批量下载。 + +- 法律和合规:遵守 OKX 的数据使用条款,仅用于个人回测,避免商业用途或再分发。 + +- 性能优化:对于高频回测或大数据,考虑使用第三方服务(如 Tardis.dev)补充数据,或用 Go 优化数据处理性能。 + + +--- + +1. 替代数据来源 + +如果 OKX 的数据范围或访问限制不满足需求,可以考虑以下第三方提供商: + +- Tardis.dev:提供 OKX 的逐笔订单簿、交易和资金费率历史数据,适合高精度回测,支持 CSV 下载和 API 访问。 + +- Amberdata:提供 OKX 的 OHLC 和衍生品历史数据,适合长周期分析和回测,可通过 REST API 或 AWS S3 下载。 + +- CryptoDataDownload:提供免费的 OKX OHLC 数据(CSV 格式),适合初学者或简单回测。 + + +这些服务可以补充 OKX 的数据限制,扩展你的回测范围。 + +--- + +1. 总结 + +是的,你可以从 OKX 获取历史基础数据(如 OHLC、交易、订单簿)用于回测,但需要注意时间范围限制(从 2019/2021 开始,订单簿数据仅限 3 个月)和数据获取方式(API、CSV 下载)。结合你的 Go 开发能力和 Linux 环境,用 Go 开发脚本从 OKX API 获取数据,处理后与 NautilusTrader 或 OTP 集成进行回测,并用 Elasticsearch/Kibana/Grafana 实现直观图表展示。如果需要更完备的数据,可以借助 Tardis.dev 或 Amberdata 补充。 + +如果你有具体的技术问题(例如 Go 代码实现或数据清洗细节),可以告诉我,我会进一步提供帮助! + +所以历史数据是OHLC,需要先进行特征化处理, 才能给NautilusTrader 来处理是吧 + +是的,你的理解基本上是正确的。以下是关于历史数据(OHLC)如何进行特征化处理,并将其用于 NautilusTrader 回测的详细解释和确认,结合你的需求(本地 Linux 部署、熟悉 Go 开发、需要量化收益、最大回撤等)。 + +--- + +1. 历史数据(OHLC)的角色 + +- OHLC 数据:从 OKX 或其他交易所获取的历史数据通常包括开盘价(Open)、最高价(High)、最低价(Low)和收盘价(Close),通常按时间周期(如 1 分钟、5 分钟、1 小时、1 天等)提供。这是一类基础市场数据,适合时间序列分析和初步回测。 + +- NautilusTrader 的需求:NautilusTrader 是一个高性能交易平台,适合处理结构化时间序列数据来运行回测和策略执行。直接输入原始 OHLC 数据可以进行基础回测,但为了提升策略的有效性和分析深度,通常需要对 OHLC 数据进行特征化处理,生成更丰富的特征数据(如技术指标、成交量分析等),以帮助策略更好地捕捉市场模式。 + + +因此,OHLC 数据需要先进行特征化处理,然后才能更高效地用于 NautilusTrader 的回测和分析。 + +--- + +1. 特征化处理的重要性 + +特征化处理是将原始 OHLC 数据转换为更具信息量的特征数据,适合量化分析和算法交易。以下是常见特征化处理步骤和目的: + +- 技术指标生成: + + - 移动平均线(SMA、EMA):计算短期和长期均线,识别趋势和反转点。 + + - 相对强弱指数(RSI):衡量超买或超卖状态,帮助判断市场动量。 + + - MACD(指数平滑异同移动平均线):结合快慢均线,识别趋势变化。 + + - 布林带(Bollinger Bands):基于标准差分析价格波动范围。 + +- 成交量分析: + + - 成交量变化(Volume Change):分析市场参与度和流动性。 + + - 成交量净额(OBV):结合价格和成交量,判断资金流动方向。 + +- 市场深度特征(如果有订单簿数据): + + - 买/卖压力:基于订单簿的买单和卖单量,分析市场深度。 + + - 流动性指标:计算订单簿的深度和紧密度。 + +- 其他衍生特征: + + - 波动率(Volatility):基于 OHLC 计算日/周波动率(如 ATR,平均真实波幅)。 + + - 趋势强度:通过统计方法(如线性回归或移动窗口)评估趋势持续性。 + + +这些特征可以帮助 NautilusTrader 的策略更好地理解市场行为,提高回测的准确性和策略的盈利能力。 + +--- + +1. 如何进行特征化处理 + +基于你的背景(程序员,熟悉 Go,Linux 环境),以下是特征化处理的实现步骤: + +a. 获取 OHLC 数据 + +- 从 OKX 获取 OHLC 数据(通过 REST API 或 CSV 下载),如上一回答所述。 + +- 用 Go 开发脚本调用 OKX API,获取时间序列数据(例如 BTC-USDT 的 1 小时 K 线),并保存为 CSV 或 JSON 文件。 + + +b. 特征化处理 + +- 用 Go 实现特征提取逻辑,生成技术指标和市场特征。以下是可能的 Go 库和方法: + + - Go 数值计算库: + + - gonum/gonum:一个强大的 Go 数学库,适合计算 SMA、EMA、RSI、MACD 等技术指标。GitHub 地址:[https://github.com/gonum/gonum](https://github.com/gonum/gonum) + + - 示例代码(伪代码)计算 SMA: + + go + + ```go + package main + + import ( + "fmt" + "gonum.org/v1/gonum/stat" + ) + + func calculateSMA(prices []float64, period int) []float64 { + if len(prices) < period { + return nil + } + sma := make([]float64, len(prices)-period+1) + for i := period - 1; i < len(prices); i++ { + sma[i-period+1] = stat.Mean(prices[i-period+1:i+1], nil) + } + return sma + } + + func main() { + // 假设 prices 是 OHLC 数据中的 Close 价格 + prices := []float64{100, 101, 102, 103, 104, 105, 106, 107, 108, 109} + period := 5 + sma := calculateSMA(prices, period) + for i, v := range sma { + fmt.Printf("Period %d SMA: %.2f\n", i+period, v) + } + } + ``` + + - 时间序列处理: + + - 用 Go 的 time 包处理时间戳,确保数据按时间顺序排序。 + + - 使用 csv 或 json 包将特征数据保存为结构化文件。 + + - 自定义特征: + + - 根据策略需求,开发自定义特征(如波动率、订单簿深度等)。如果有订单簿数据,可以用 Go 解析并计算市场深度指标。 + + +c. 数据格式转换 + +- 将特征化后的数据(OHLC + 技术指标)转换为 NautilusTrader 支持的格式: + + - NautilusTrader 接受时间序列数据,通常以 CSV、JSON 或自定义数据模型(通过 Python API)输入。 + + - 示例格式(CSV): + + ```text + timestamp,open,high,low,close,volume,sma_5,rsi_14 + 2025-03-01T00:00:00Z,100.0,105.0,98.0,102.0,1000,101.2,60.5 + 2025-03-01T01:00:00Z,102.0,107.0,99.0,104.0,1200,102.4,62.0 + ``` + + - 用 Go 开发脚本生成这些文件,或直接通过 Python 脚本加载到 NautilusTrader。 + + +d. NautilusTrader 回测 + +- 在 NautilusTrader 中加载特征化数据,运行回测: + + - 用 Python 编写脚本,调用 NautilusTrader 的 BacktestEngine 或 LiveEngine,加载 CSV/JSON 数据。 + + - 示例(Python 伪代码): + + python + + ```python + from nautilus_trader.backtest.engine import BacktestEngine + from nautilus_trader.model.data import Bar + from nautilus_trader.model.identifiers import InstrumentId + + engine = BacktestEngine() + instrument_id = InstrumentId.from_string("BTC-USDT.OKX") + + # 加载特征化数据(假设 CSV 文件) + with open("ohlc_features.csv", "r") as f: + for line in f: + data = line.strip().split(",") + timestamp, open_, high, low, close, volume, sma, rsi = data + bar = Bar( + price=float(close), + volume=float(volume), + ts_init=int(timestamp), + ts_event=int(timestamp), + ) + engine.process_bar(bar, instrument_id) + + engine.run() + print(engine.get_performance_stats()) # 输出收益、最大回撤等 + ``` + +- NautilusTrader 会根据这些数据运行回测,生成量化指标(如净利、最大回撤、夏普率等)。 + + +--- + +1. 为什么需要特征化处理 + +- 原始 OHLC 的局限:直接使用 OHLC 数据只能提供基础的价格和成交量信息,难以捕捉复杂的市场模式(如趋势、动量、反转)。特征化处理生成的指标(如 SMA、RSI)可以增强策略的预测能力。 + +- NautilusTrader 的灵活性:NautilusTrader 支持自定义数据模型和策略,你可以通过特征化数据开发更复杂的算法交易策略。 + +- 提高回测质量:特征化数据可以帮助识别策略的有效性,避免过拟合或忽视关键市场信号。 + + +--- + +1. Go 和 NautilusTrader 的整合 + +- Go 处理数据:用 Go 获取 OHLC 数据、进行特征化处理,并生成 CSV/JSON 文件。 + +- Python 加载数据:用 NautilusTrader 的 Python API 加载这些文件,运行回测。 + +- 接口设计:可以用 Go 开发一个后端服务,通过文件输出或网络接口(HTTP/GRPC)将特征化数据传递给 Python 脚本。 + + +--- + +1. 直观图表展示 + +- 特征数据的可视化:将特征化后的数据(OHLC + 指标)推送到 Elasticsearch 或 InfluxDB,用 Kibana/Grafana 生成直观的图表(如 K 线图、SMA 曲线、RSI 图表)。 + +- NautilusTrader 报告:NautilusTrader 会生成回测报告(收益、最大回撤等),可以用 Python 的可视化库(如 Matplotlib、Plotly)或 Kibana/Grafana 转换为图形化结果。 + + +--- + +1. 注意事项 + +- 数据质量:确保 OHLC 数据和特征数据没有缺失或错误,必要时用 Go 编写数据清洗逻辑。 + +- 性能优化:对于大规模历史数据(例如数年 OHLC 数据),用 Go 优化特征计算效率(并行处理、内存管理)。 + +- 时间戳一致性:确保 OKX 数据的时间戳与 NautilusTrader 的时间模型一致(通常为 UTC)。 + +- NautilusTrader 兼容性:确认 NautilusTrader 支持的 OHLC 格式(通常为 Bar 数据模型),避免格式不匹配。 + + +--- + +1. 总结 + +是的,历史数据(OHLC)需要先进行特征化处理,才能更高效地用于 NautilusTrader 的回测。以下是流程: + +1. 从 OKX 获取 OHLC 数据(REST API 或 CSV)。 + +2. 用 Go 开发脚本对 OHLC 数据进行特征化处理,生成技术指标和市场特征(如 SMA、RSI、成交量变化)。 + +3. 将特征化数据保存为 CSV/JSON 文件,或推送到 Elasticsearch/InfluxDB。 + +4. 在 NautilusTrader 中加载这些数据,运行回测,生成量化指标(如收益、最大回撤)。 + +5. 用 Kibana/Grafana 或 Python 库生成直观的图表展示。 + + +这个流程充分利用你的 Go 开发能力、Linux 环境和 NautilusTrader 的高性能特性。如果你需要具体代码示例(Go 特征化处理或 NautilusTrader 集成),可以告诉我,我会进一步提供指导! + +特征化处理的结果直接写进elasticsearch, 然后再让nautilus trader来获取, 这样可以对吧 + +是的,你的方案是可行的:将特征化处理的结果直接写入 Elasticsearch,然后让 NautilusTrader 从 Elasticsearch 中获取这些数据,用于回测。这是非常合理的设计,尤其考虑到你的需求(本地 Linux 部署、熟悉 Go 开发、需要量化收益、最大回撤等),以及你已经部署了 Elasticsearch 的基础设施。以下是详细分析、实现步骤和注意事项: + +--- + +1. 方案可行性 + +- 特征化处理:用 Go 开发脚本对 OKX 的 OHLC 数据进行特征化处理(如生成 SMA、RSI、MACD 等技术指标和成交量特征),将结果直接写入 Elasticsearch。 + +- NautilusTrader 集成:通过 NautilusTrader 的自定义数据提供者(Data Provider)或 Python 脚本,从 Elasticsearch 查询这些特征化数据,用于回测和策略执行。 + +- 优势: + + - 复用现有基础设施:你已经在本地部署了 Elasticsearch,可以直接利用,无需额外存储系统。 + + - 高性能查询:Elasticsearch 适合处理大规模时间序列数据,快速检索和聚合特征化数据。 + + - 灵活性:Elasticsearch 支持实时更新和历史数据查询,适合回测和实时交易场景。 + + - 可视化支持:Elasticsearch 的数据可以直接与 Kibana 或 Grafana 集成,生成直观的图表展示。 + + +--- + +1. 实现步骤 + +a. 特征化处理并写入 Elasticsearch(用 Go 开发) + +1. 获取 OHLC 数据: + + - 用 Go 调用 OKX 的 REST API 获取历史 OHLC 数据(如 BTC-USDT 的 1 小时 K 线)。 + + - 示例代码(参考之前的 Go 脚本): + + go + + ```go + package main + + import ( + "fmt" + "net/http" + "io/ioutil" + "encoding/json" + "github.com/elastic/go-elasticsearch/v8" + ) + + type OHLC struct { + Timestamp string `json:"ts"` + Open float64 `json:"o"` + High float64 `json:"h"` + Low float64 `json:"l"` + Close float64 `json:"c"` + Volume float64 `json:"v"` + } + + func getOKXData(url string) ([]OHLC, error) { + resp, err := http.Get(url) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + var data struct { + Data []OHLC `json:"data"` + } + err = json.Unmarshal(body, &data) + if err != nil { + return nil, err + } + return data.Data, nil + } + + func main() { + // 获取 OKX OHLC 数据 + url := "https://www.okx.com/api/v5/market/candles?instId=BTC-USDT-SWAP&bar=1H" + ohlcData, err := getOKXData(url) + if err != nil { + fmt.Println("Error fetching OKX data:", err) + return + } + + // 初始化 Elasticsearch 客户端(假设本地部署在 localhost:9200) + es, err := elasticsearch.NewDefaultClient() + if err != nil { + fmt.Println("Error creating Elasticsearch client:", err) + return + } + + // 特征化处理(示例:计算 5 期 SMA) + closePrices := make([]float64, len(ohlcData)) + for i, candle := range ohlcData { + closePrices[i] = candle.Close + } + sma := calculateSMA(closePrices, 5) // 假设有 calculateSMA 函数 + + // 写入 Elasticsearch(批量插入) + bulkRequest := []map[string]interface{}{} + for i, candle := range ohlcData { + doc := map[string]interface{}{ + "timestamp": candle.Timestamp, + "open": candle.Open, + "high": candle.High, + "low": candle.Low, + "close": candle.Close, + "volume": candle.Volume, + "sma_5": sma[i], + // 可以添加更多特征(如 RSI、MACD 等) + } + bulkRequest = append(bulkRequest, map[string]interface{}{ + "index": map[string]interface{}{ + "_index": "trading_data", + "_id": candle.Timestamp, + }, + }, doc) + } + + // 批量写入 Elasticsearch + bulkBody, err := json.Marshal(bulkRequest) + if err != nil { + fmt.Println("Error marshaling bulk request:", err) + return + } + resp, err := es.Bulk(bytes.NewReader(bulkBody), es.Bulk.WithIndex("trading_data")) + if err != nil { + fmt.Println("Error indexing to Elasticsearch:", err) + return + } + defer resp.Body.Close() + fmt.Println("Data indexed successfully") + } + + func calculateSMA(prices []float64, period int) []float64 { + if len(prices) < period { + return nil + } + sma := make([]float64, len(prices)-period+1) + for i := period - 1; i < len(prices); i++ { + sma[i-period+1] = stat.Mean(prices[i-period+1:i+1], nil) + } + return sma + } + ``` + + - 安装依赖:使用 go get github.com/elastic/go-elasticsearch/v8 和 go get gonum.org/v1/gonum/stat。 + + - 确保 Elasticsearch 在本地运行(例如 localhost:9200),并创建索引 trading_data(可通过 Kibana 或 REST API 创建)。 + +2. 特征化处理: + + - 在 Go 中实现技术指标(如 SMA、RSI、MACD)和其他特征,参考 gonum 库或自定义逻辑。 + + - 将特征数据与原始 OHLC 数据合并,生成结构化的文档(如上例中的 sma_5)。 + +3. 写入 Elasticsearch: + + - 使用 Go 的 Elasticsearch 客户端(如 elastic/go-elasticsearch)批量写入特征化数据。 + + - 确保数据按时间戳排序(timestamp 字段),以便时间序列查询。 + + +b. NautilusTrader 从 Elasticsearch 获取数据 + +1. 配置 NautilusTrader 数据提供者: + + - NautilusTrader 支持自定义数据提供者(DataProvider),你可以开发一个 Python 脚本或模块,从 Elasticsearch 查询数据。 + + - 示例(Python 伪代码): + + python + + ```python + from nautilus_trader.backtest.engine import BacktestEngine + from nautilus_trader.model.data import Bar + from nautilus_trader.model.identifiers import InstrumentId + import elasticsearch + + # 初始化 Elasticsearch 客户端 + es = elasticsearch.Elasticsearch(['localhost:9200']) + + # 查询特征化数据 + query = { + "query": { + "match_all": {} + }, + "sort": [{"timestamp": {"order": "asc"}}] + } + resp = es.search(index="trading_data", body=query) + + engine = BacktestEngine() + instrument_id = InstrumentId.from_string("BTC-USDT.OKX") + + # 加载数据到 NautilusTrader + for hit in resp['hits']['hits']: + data = hit['_source'] + bar = Bar( + price=float(data['close']), + volume=float(data['volume']), + ts_init=int(data['timestamp']), + ts_event=int(data['timestamp']), + ) + engine.process_bar(bar, instrument_id) + + engine.run() + print(engine.get_performance_stats()) + ``` + + - 安装依赖:pip install elasticsearch 和 NautilusTrader 的依赖。 + +2. 自定义特征使用: + + - 在 NautilusTrader 策略中访问特征数据(如 sma_5、rsi 等),用作策略逻辑的一部分。例如: + + python + + ```python + from nautilus_trader.trading.strategy import Strategy + + class MyStrategy(Strategy): + def on_bar(self, bar): + # 访问特征数据(如从 Elasticsearch 查询的 sma_5) + sma = self.get_feature("sma_5", bar.timestamp) # 假设有自定义方法获取特征 + if bar.close > sma: + self.buy() + else: + self.sell() + ``` + +3. 数据格式要求: + + - 确保 Elasticsearch 中的数据字段(如 timestamp、open、close 等)与 NautilusTrader 的 Bar 或 QuoteTick 数据模型一致。 + + - 时间戳需要转换为 NautilusTrader 支持的格式(通常为 UTC 毫秒或纳秒时间戳)。 + + +c. 直观图表展示 + +- 用 Kibana 或 Grafana 查询 Elasticsearch 中的特征化数据,生成直观的图表(如 K 线图、SMA 曲线、最大回撤图)。 + +- 示例: + + - 在 Kibana 中创建索引模式(Index Pattern)为 trading_data,使用 Visualize 功能绘制 OHLC 图表和特征指标。 + + - 在 Grafana 中配置 Elasticsearch 数据源,安装 Candlestick Chart 插件,展示 K 线图和策略表现。 + + +--- + +1. 优势 + +- 复用 Elasticsearch:直接利用你已有的 Elasticsearch 基础设施,减少存储和部署成本。 + +- 灵活性:Elasticsearch 支持实时更新和历史数据查询,适合回测和实时交易。 + +- 性能:Elasticsearch 的搜索和聚合功能能高效处理大规模特征化数据。 + +- 可视化:结合 Kibana/Grafana,生成专业、直观的图表和仪表盘。 + + +--- + +1. 注意事项 + +- 数据索引设计: + + - 确保 Elasticsearch 索引按时间序列优化(如使用 @timestamp 字段或时间戳排序),提高查询效率。 + + - 定义合适的映射(Mapping),确保字段类型正确(如 timestamp 为 date 类型,open、close 为 float 类型)。 + +- NautilusTrader 性能: + + - 从 Elasticsearch 查询数据时,避免实时查询大量数据,以免影响 NautilusTrader 的回测性能。建议预先批量加载数据,或使用缓存(例如将数据导出为 CSV/JSON 文件)。 + +- 速率和成本: + + - Elasticsearch 的查询和索引操作可能对本地资源(如 CPU、内存)有一定需求,确保你的 Linux 环境有足够的资源。 + + - 如果数据量巨大,考虑分区(Sharding)或压缩以优化存储。 + +- 数据一致性: + + - 确保特征化处理的结果与 OKX 原始数据一致,避免时间戳或数值错误。 + +- Go 和 Python 集成: + + - 用 Go 写入 Elasticsearch,确保数据格式与 NautilusTrader 的 Python 脚本兼容。 + + - 如果需要实时性,可以用 Go 开发一个服务,通过 WebSocket 或 HTTP API 实时推送数据到 Elasticsearch 和 NautilusTrader。 + + +--- + +1. 优化建议 + +- 批量处理:用 Go 实现批量特征化处理和批量写入 Elasticsearch,避免频繁小批量操作影响性能。 + +- 缓存机制:将特征化数据缓存为本地文件(如 CSV/JSON),供 NautilusTrader 快速加载。 + +- 并行处理:用 Go 的并发特性(如 Goroutines)并行处理 OHLC 数据和特征计算,提高效率。 + +- Elasticsearch 优化: + + - 使用索引模板(Index Template)定义字段映射,优化查询性能。 + + - 启用时间序列索引(Time Series Indices)或冷/热数据分区,适合金融时间序列数据。 + + +--- + +1. 与直接文件输入的对比 + +- 直接写文件(如 CSV/JSON): + + - 优点:简单、性能稳定,NautilusTrader 直接加载文件无需额外查询开销。 + + - 缺点:文件管理复杂(大文件可能导致 I/O 瓶颈),难以实时更新或查询特定时间段数据。 + +- 写入 Elasticsearch: + + - 优点:支持大规模数据查询、可视化、实时性强,适合复杂分析和分布式部署。 + + - 缺点:需要额外配置和资源(CPU、内存),查询性能可能略逊于直接文件读取。 + + +基于你的需求(已有 Elasticsearch 部署、需要直观图表展示),使用 Elasticsearch 是更优选择,尤其是结合 Kibana/Grafana 的可视化能力。 + +--- + +1. 总结 + +是的,将特征化处理的结果直接写入 Elasticsearch,然后让 NautilusTrader 从 Elasticsearch 获取数据,是完全可行的方案。这充分利用了你的 Elasticsearch 基础设施,支持高效数据存储、查询和可视化。以下是核心流程: + +1. 用 Go 获取 OKX OHLC 数据,进行特征化处理(生成 SMA、RSI 等)。 + +2. 用 Go 的 Elasticsearch 客户端将特征化数据批量写入 Elasticsearch。 + +3. 在 NautilusTrader 中用 Python 脚本查询 Elasticsearch 数据,加载到回测引擎中运行策略。 + +4. 用 Kibana/Grafana 展示特征化数据和回测结果。 + + +如果你需要具体代码示例(Go 写入 Elasticsearch 或 Python 查询 Elasticsearch 的实现),可以告诉我,我会进一步提供指导! + +在grafana下是否可以配置出足够有好的菜单, 看起来比较像是TradingView + + + + + + + + + + + + + +15 网页 + +在 Grafana 中,配置一个类似于 TradingView 的菜单(例如直观、交互性强、包含金融数据可视化的下拉菜单或导航界面)是有限制的,但通过一些配置和插件扩展,可以在一定程度上实现类似的效果。不过,完全复制 TradingView 的菜单样式和功能(如专业的 K 线图工具栏、实时交易信号下拉菜单等)在 Grafana 中并非完全可行,因为 Grafana 的设计目标主要聚焦于通用数据可视化和仪表盘,而不是专门为金融交易优化。以下是详细分析和建议: + +--- + +1. Grafana 的菜单和界面特性 + +- 默认菜单结构: + + - Grafana 的默认界面包括左侧导航栏(Dashboard、Explore、Alerting、Configuration 等菜单)和顶部工具栏(时间范围选择、刷新选项、分享按钮等)。 + + - 这些菜单是为通用数据可视化和监控设计的,主要是功能性导航,而不是像 TradingView 那样的金融交易优化界面(例如带有实时报价、指标选择、图表工具的下拉菜单)。 + + - 你可以通过 Grafana 的“Panel options”或“Dashboard settings”自定义标题、描述和链接,但无法直接创建复杂的下拉菜单或工具栏(如 TradingView 的“Indicators”或“Drawing Tools”菜单)。 + +- 可视化限制: + + - Grafana 提供多种面板类型(如时间序列图、柱状图、K 线图等),但其内置的 K 线图(通过插件如 Candlestick Chart)无法直接提供 TradingView 那样的丰富交互性和工具栏(如拖拽工具、指标下拉菜单)。 + + - 默认菜单和界面缺乏 TradingView 那种专门为金融交易设计的高级功能(如实时交易信号、订单簿可视化、批量指标选择)。 + + +--- + +1. 是否有插件实现类似 TradingView 的菜单 + +- 现有插件: + + - 根据可用的信息(例如社区讨论和文档),目前没有直接的 Grafana 插件可以完全整合 TradingView 的菜单或界面风格。不过,你可以利用以下方法接近 TradingView 的功能: + + - Candlestick Chart 插件:Grafana 支持 K 线图插件(如 Grafana Candlestick Chart),可以展示 OHLC 数据和基本技术指标,但它的工具栏和菜单功能远不如 TradingView 丰富。 + + - TradingView 嵌入:通过 Grafana 的“Text”面板或 HTML 插件,你可以嵌入 TradingView 的小部件(如 Mini Symbol Overview 或完整图表小部件),但这仅限于显示 TradingView 的图表,而无法直接控制菜单或与 Grafana 数据源整合。 + + - 例如,社区中提到的方法(如在 Text 面板中使用 <iframe> 嵌入 TradingView 小部件)可以显示股票或加密货币的 K 线图,但菜单和交互性仍由 TradingView 控制,无法自定义为 Grafana 的样式。 + + - 自定义面板插件:通过 Grafana 的插件平台(使用 React 或其他框架),你可以用 Go 或 JavaScript 开发自定义面板,尝试模拟 TradingView 的菜单功能。但这需要大量开发工作,且可能无法完全匹配 TradingView 的专业性。 + +- 限制: + + - 没有现成的插件可以直接提供 TradingView 那样的菜单配置(例如带有指标下拉菜单、图表工具栏、实时交易信号的选择)。 + + - 嵌入 TradingView 小部件时,菜单和交互完全由 TradingView 控制,无法与 Grafana 的数据源(如 Elasticsearch、InfluxDB)或其他面板联动。 + + - Grafana 的设计更适合静态或通用仪表盘,不适合动态金融交易工具的实时交互。 + + +--- + +1. 如何在 Grafana 中接近 TradingView 的菜单效果 + +尽管无法完全复制 TradingView 的菜单,但你可以通过以下方法在 Grafana 中配置一个接近的、功能性较强的菜单界面: + +a. 利用变量和模板 + +- 动态下拉菜单: + + - Grafana 支持变量(Variables),可以用作下拉菜单选择不同的数据源、指标或时间范围。例如,你可以创建变量用于选择不同的股票/加密货币符号(如 BTC-USDT、AAPL),并在面板中动态更新图表。 + + - 配置步骤: + + 1. 在 Grafana 仪表盘中,点击“Dashboard settings” > “Variables” > “Add variable”。 + + 2. 选择“Query”类型,连接到数据源(如 Elasticsearch),查询可用符号(如从 Elasticsearch 的 trading_data 索引中提取 symbol 字段)。 + + 3. 在面板查询中使用变量(如 ${symbol}),生成动态 K 线图或指标。 + + - 效果:这可以生成类似 TradingView 的下拉菜单(如选择不同交易对),但交互性和美观性仍有限,不能直接提供实时指标或图表工具。 + + +b. 自定义仪表盘布局 + +- 使用 Grafana 的“Panel options”配置标题、描述和链接,模拟菜单导航。 + +- 例如: + + - 创建多个面板(K 线图、技术指标图、绩效指标),并在顶部添加“Text”面板作为导航菜单,包含超链接到不同仪表盘或面板。 + + - 但这仍无法达到 TradingView 的工具栏效果(如拖拽工具、指标选择按钮)。 + + +c. 嵌入 TradingView 小部件 + +- 在 Grafana 的“Text”面板中使用 HTML 和 <iframe> 嵌入 TradingView 的小部件(如 Mini Symbol Overview 或完整图表)。 + +- 示例代码(参考社区讨论): + + html + + ```html + <div class="tradingview-widget-container"> + <div id="tradingview_chart"></div> + <div class="tradingview-widget-copyright"><a href="https://www.tradingview.com/symbols/BTCUSD/" rel="noopener" target="_blank"><span class="blue-text">BTCUSD Chart</span></a> by TradingView</div> + <script type="text/javascript" src="https://s3.tradingview.com/tv.js"></script> + <script type="text/javascript"> + new TradingView.widget({ + "width": 980, + "height": 610, + "symbol": "BINANCE:BTCUSDT", + "interval": "D", + "timezone": "Etc/UTC", + "theme": "light", + "style": "1", + "locale": "en", + "toolbar_bg": "#f1f3f6", + "enable_publishing": false, + "allow_symbol_change": true, + "container_id": "tradingview_chart" + }); + </script> + </div> + ``` + +- 效果:嵌入的 TradingView 图表会带有其原有的菜单和工具栏(如指标选择、绘制工具),但无法与 Grafana 的其他面板或数据源联动,只能作为独立展示。 + + +d. 开发自定义插件 + +- 如果你有开发经验(例如熟悉 Go 或 JavaScript),可以通过 Grafana 的插件平台(使用 @grafana/create-plugin 和 React)开发自定义面板,模拟 TradingView 的菜单功能。 + +- 步骤: + + 1. 使用 @grafana/create-plugin CLI 构建一个新的面板插件。 + + 2. 集成 TradingView 的 JavaScript 库(tv.js),创建类似的下拉菜单(如指标选择、时间周期切换)。 + + 3. 连接到 Grafana 的数据源(如 Elasticsearch),动态加载数据。 + +- 局限:这需要大量开发工作,且可能无法完全匹配 TradingView 的交互性。 + + +--- + +1. 局限性 + +- 功能差距:Grafana 不是为金融交易设计的工具,其菜单和界面缺乏 TradingView 那样的专业金融功能(如实时订单簿、交易信号下拉菜单、批量指标选择)。 + +- 插件限制:目前没有直接的 Grafana 插件可以完全复制 TradingView 的菜单,只有基础的 K 线图插件或嵌入式解决方案。 + +- 性能和实时性:TradingView 专注于实时金融数据和低延迟交互,而 Grafana 更适合静态或周期性数据可视化,实时性可能不足。 + + +--- + +1. 替代方案 + +如果你的目标是创建一个类似于 TradingView 的菜单和界面,建议考虑以下选项: + +- 直接使用 TradingView:在你的应用中嵌入 TradingView 的小部件(通过 <iframe> 或 API),并结合自定义后端(Go 开发)处理数据。这种方式可以保留 TradingView 的专业菜单和功能,但无法完全整合到 Grafana 的仪表盘中。 + +- 混合方案:在 Grafana 中使用嵌入的 TradingView 图表作为主要可视化面板,通过 Go 后端和 Elasticsearch 提供数据支持,同时保留 Grafana 的其他功能(如警报、仪表盘管理)。 + +- 专用金融工具:如果菜单和交互性是关键需求,考虑使用专门的金融交易平台(如 TradingView、Thinkorswim)而非 Grafana,因为这些工具更适合金融场景。 + + +--- + +1. 结论 + +在 Grafana 中配置一个足够接近 TradingView 菜单的界面是有限制的,但可以通过以下方式实现部分功能: + +- 使用变量和模板创建动态下拉菜单。 + +- 嵌入 TradingView 小部件,提供专业的 K 线图和菜单。 + +- 开发自定义插件,模拟 TradingView 的工具栏。 + + +然而,完全复制 TradingView 的菜单和交互性可能超出了 Grafana 的设计范围。如果你的首要目标是金融交易的可视化和交互,建议优先使用 TradingView 或将其嵌入到你的系统中,同时利用 Grafana 进行其他数据分析和仪表盘管理。 + +如果你需要具体的技术实现细节(例如嵌入 TradingView 的代码或 Grafana 变量配置),可以告诉我,我会进一步提供指导! + +关于可视化和交互, 我的诉求就是, 在策略回测的时候, 针对特定一个币种, 特定的时间段, 模拟运行一个或多个特定的策略的结果, 可以用某种chart来直观的展现收益和风险. 也不一定跟tradeview就那么的匹配, 在grafana能力能提供的基础上, 尽可能的让UI和交互更直观 + +基于你的诉求(在策略回测时,针对特定币种和时间段,模拟运行一个或多个策略的结果,用图表直观展示收益和风险,并且在 Grafana 的能力范围内尽可能优化 UI 和交互),我们可以充分利用 Grafana 的功能和灵活性,结合你的本地 Elasticsearch 部署和 Go 开发能力,设计一个直观的、可交互的可视化解决方案。以下是详细的分析、设计方案和实现建议: + +--- + +1. 诉求分析 + +- 目标: + + - 针对特定币种(如 BTC-USDT)和特定时间段(如 2024-01-01 至 2025-03-01),运行一个或多个策略(如均线交叉策略、RSI 反转策略等)。 + + - 模拟回测结果,量化收益(如净利、年化收益率)和风险(如最大回撤、波动率)。 + + - 用图表直观展示这些结果,界面和交互尽可能简洁、直观,不一定完全仿照 TradingView,但需要在 Grafana 的能力范围内优化。 + +- 技术背景: + + - 已有本地部署的 Elasticsearch,存储特征化后的 OHLC 数据和策略回测结果(如收益、最大回撤)。 + + - 熟悉 Go 开发,Linux 环境,结合 NautilusTrader 或 Open Trading Platform(OTP)进行回测。 + + +--- + +1. Grafana 的能力与限制 + +- Grafana 的优势: + + - 强大的时间序列可视化能力,支持多种图表类型(如折线图、柱状图、K 线图)。 + + - 支持 Elasticsearch 数据源,可以直接查询存储的回测数据。 + + - 提供变量(Variables)和仪表盘交互(如时间范围选择、指标切换),适合动态展示不同币种、时间段和策略的结果。 + + - 可以通过插件(如 Candlestick Chart)展示金融数据。 + +- 限制: + + - 缺乏 TradingView 那样的专业金融交互(如实时交易信号、拖拽工具、指标下拉菜单)。 + + - 默认界面偏向通用仪表盘,不适合复杂的金融交易 UI,但可以通过自定义优化。 + + - 实时性不如专用金融工具,但适合回测结果的静态展示。 + + +--- + +1. 设计方案:直观的 UI 和交互 + +以下是基于 Grafana 的设计方案,目标是让回测结果的收益和风险在图表中直观展示,并提供简单的交互功能: + +a. 仪表盘结构 + +- 顶部导航: + + - 使用 Grafana 的“Dashboard settings” > “Variables”创建下拉菜单: + + - 币种选择:变量 ${coin}(例如 BTC-USDT、ETH-USDT),从 Elasticsearch 查询可用币种(symbol 字段)。 + + - 时间范围:变量 ${time_range}(例如 2024-01-01 至 2025-03-01),使用 Grafana 的时间选择器。 + + - 策略选择:变量 ${strategy}(例如 SMA_Cross、RSI_Reversal),从 Elasticsearch 查询可用的策略名称或 ID。 + + - 这些变量构成类似菜单的交互,用户可以通过下拉选择特定币种、时间段和策略。 + +- 主面板区域: + + - K 线图(Candlestick Chart):展示所选币种在特定时间段的 OHLC 数据(从 Elasticsearch 查询 open、high、low、close 字段)。 + + - 收益曲线(Line Chart):展示策略的累计收益(如净利、年化收益率),以折线图形式显示时间段内的收益变化。 + + - 风险指标(Gauge 或 Bar Chart): + + - 用仪表盘(Gauge)展示最大回撤(如百分比)。 + + - 用柱状图展示波动率或其他风险指标(如标准差)。 + + - 策略概览(Text Panel 或 Table):列出策略的关键绩效指标(KPI),如净利、最大回撤、胜率、夏普率等。 + +- 交互性: + + - 用户可以通过顶部变量下拉菜单切换币种、时间段和策略,动态更新图表。 + + - 使用 Grafana 的时间范围选择器(顶部工具栏)调整时间段,查看不同时间窗口的回测结果。 + + - 添加“Refresh”按钮,确保数据实时更新(结合 Elasticsearch 的实时查询)。 + + +b. 图表设计 + +- K 线图: + + - 使用 Grafana Candlestick Chart 插件,展示 OHLC 数据。 + + - 在图表上叠加策略信号(如均线交叉点、RSI 超买/超卖区域),通过 Elasticsearch 查询特征数据(如 sma_5、rsi)并在 K 线图上标注。 + +- 收益曲线: + + - 用折线图展示策略的累计收益(基于 net_profit 或 cumulative_return 字段)。 + + - 添加时间轴,显示关键事件(如最大回撤点、策略买入/卖出信号)。 + +- 风险指标: + + - 用仪表盘(Gauge)展示最大回撤(max_drawdown),用红色/绿色表示风险高低。 + + - 用柱状图展示波动率(volatility),对比不同策略的风险水平。 + + +c. 美观性和直观性 + +- 配色和布局: + + - 使用 Grafana 的“Dashboard settings” > “Styles”自定义颜色方案(如绿色表示收益,红色表示风险)。 + + - 采用分栏布局(Row):左侧 K 线图和收益曲线,右侧风险指标和策略概览。 + +- 提示和交互: + + - 启用 Grafana 的“Tooltip”功能,鼠标悬停在图表上显示详细数据(例如某点的时间、价格、收益)。 + + - 添加“Annotations”标记关键回测事件(如最大回撤点、策略触发点)。 + + +--- + +1. 实现步骤 + +a. 准备数据(Go 和 Elasticsearch) + +- 用 Go 获取 OKX 的 OHLC 数据,进行特征化处理(生成 SMA、RSI 等)。 + +- 将特征化数据和回测结果(净利、最大回撤等)写入 Elasticsearch: + + - 索引结构示例: + + ```text + { + "timestamp": "2025-03-01T00:00:00Z", + "symbol": "BTC-USDT", + "open": 100.0, + "high": 105.0, + "low": 98.0, + "close": 102.0, + "volume": 1000, + "sma_5": 101.2, + "rsi_14": 60.5, + "strategy": "SMA_Cross", + "net_profit": 500.0, + "max_drawdown": -15.0, + "volatility": 2.5 + } + ``` + + - 用 Go 的 Elasticsearch 客户端批量写入数据(参考之前的代码)。 + + +b. 配置 Grafana 数据源 + +- 在 Grafana 中添加 Elasticsearch 数据源,连接到本地部署的 Elasticsearch(例如 localhost:9200)。 + +- 测试查询,确保能从 trading_data 索引中提取正确字段(如 timestamp、close、net_profit 等)。 + + +c. 创建仪表盘 + +- 进入 Grafana,创建新仪表盘。 + +- 添加变量(coin、time_range、strategy): + + - coin:查询 symbol 字段,设置下拉选项(如 BTC-USDT、ETH-USDT)。 + + - time_range:使用 Grafana 的时间选择器。 + + - strategy:查询 strategy 字段,设置策略选项(如 SMA_Cross、RSI_Reversal)。 + +- 添加面板: + + 1. K 线图:使用 Candlestick Chart 插件,查询 open、high、low、close,筛选 symbol=$coin 和 time 在 $time_range 内。 + + 2. 收益曲线:使用 Time Series 面板,查询 net_profit 或 cumulative_return,按时间排序。 + + 3. 风险仪表盘:使用 Gauge 面板,查询 max_drawdown,用变量筛选 symbol=$coin 和 strategy=$strategy。 + + 4. 策略概览:使用 Table 面板,查询 net_profit、max_drawdown、volatility 等字段。 + + +d. 优化 UI 和交互 + +- 调整面板布局,设置标题(如 “BTC-USDT 策略回测”)、颜色(绿色收益、红色风险)。 + +- 启用 Tooltip 和 Annotations,标记关键点(如最大回撤、策略信号)。 + +- 测试变量切换,确保币种、时间段和策略切换时图表动态更新。 + + +--- + +1. Grafana 的能力范围 + +- 能提供的直观性: + + - 通过 K 线图、折线图、仪表盘和表格,清晰展示收益(净利、累计收益)和风险(最大回撤、波动率)。 + + - 变量和时间选择器提供简单交互,用户可以快速切换币种、时间段和策略。 + +- 无法提供的功能: + + - 无法提供 TradingView 的专业金融工具(如实时交易信号下拉菜单、拖拽工具、批量指标选择)。 + + - 实时性不如 TradingView,但适合回测结果的静态展示。 + + +--- + +1. 优化建议 + +- 美观性: + + - 使用 Grafana 的主题(Light/Dark)和自定义 CSS 优化界面。 + + - 参考社区模板(如金融仪表盘),调整配色和布局。 + +- 交互性: + + - 增加“Refresh”按钮,确保数据实时更新。 + + - 添加链接到详细报表(如 NautilusTrader 的性能报告 PDF),增强用户体验。 + +- 扩展功能: + + - 如果需要更复杂的交互(如实时策略调整),开发自定义 Grafana 插件(用 Go 或 JavaScript),但这需要额外开发工作。 + + - 考虑嵌入 TradingView 小部件(通过 Text 面板的 <iframe>)展示 K 线图,但需确保与 Elasticsearch 数据源整合。 + + +--- + +1. 示例仪表盘结构 + +```text +[Dashboard: Strategy Backtest Visualization] + +[Top Row: Navigation] +- Variable: Coin (${coin}) - [BTC-USDT, ETH-USDT] +- Variable: Time Range (${time_range}) - [2024-01-01 to 2025-03-01] +- Variable: Strategy (${strategy}) - [SMA_Cross, RSI_Reversal] + +[Main Row 1: Charts] +- Panel 1: Candlestick Chart (OHLC + SMA/RSI) - Query: `timestamp, open, high, low, close, sma_5 WHERE symbol=$coin AND time=$time_range` +- Panel 2: Profit Curve (Line Chart) - Query: `net_profit WHERE symbol=$coin AND strategy=$strategy AND time=$time_range` + +[Main Row 2: Risk & Overview] +- Panel 3: Max Drawdown (Gauge) - Query: `max_drawdown WHERE symbol=$coin AND strategy=$strategy` +- Panel 4: Volatility (Bar Chart) - Query: `volatility WHERE symbol=$coin AND strategy=$strategy` +- Panel 5: Strategy KPIs (Table) - Query: `net_profit, max_drawdown, volatility WHERE symbol=$coin AND strategy=$strategy` +``` + +--- + +1. 时间和资源估计 + +- 开发时间(基于你的 Go 和 Linux 经验): + + - 数据准备和写入 Elasticsearch:1-2 天(用 Go 优化特征化处理)。 + + - Grafana 配置和仪表盘设计:1-2 天(熟悉 Elasticsearch 查询和面板布局)。 + + - 优化 UI 和交互:0.5-1 天(调整样式和测试变量)。 + +- 资源需求: + + - 确保 Linux 环境有足够的内存和 CPU 处理 Elasticsearch 和 Grafana。 + + - 需要安装 Grafana Candlestick Chart 插件(通过 Grafana 插件市场)。 + + +--- + +1. 总结 + +在 Grafana 的能力范围内,可以配置一个直观的、交互性较强的仪表盘,展示特定币种、时间段和策略的回测结果(收益和风险)。通过变量、K 线图、折线图、仪表盘和表格,你可以实现简洁、清晰的 UI 和交互,虽然无法完全匹配 TradingView 的专业金融功能,但已足够满足你的需求。 + +如果你需要具体代码或配置细节(例如 Go 写入 Elasticsearch 的优化、Grafana 仪表盘的 JSON 导出),可以告诉我,我会进一步提供帮助! + +那么 kibana呢, 它的可视化能力 对于 上述我的诉求能否覆盖一部分 + +是的,Kibana 的可视化能力可以覆盖你上述诉求(针对特定币种和时间段,模拟运行一个或多个策略的结果,用图表直观展示收益和风险)的一部分,甚至在某些方面与 Grafana 具有相似的功能,但也有一些差异和局限性。以下是详细分析和建议,结合你的需求(本地 Linux 部署、熟悉 Go 开发、已有 Elasticsearch 基础设施): + +--- + +1. Kibana 的可视化能力 + +Kibana 是 Elasticsearch 的官方可视化工具,专注于数据探索、分析和仪表盘生成。它非常适合处理时间序列数据(如你的策略回测结果),并通过图表展示收益和风险。以下是 Kibana 的核心能力: + +- 支持图表类型: + + - 时间序列图(Time Series Visualizations):适合展示 OHLC 数据、收益曲线和风险指标(如折线图、柱状图、面积图)。 + + - K 线图(Candlestick Chart):通过自定义脚本或插件(如 Vega 或 Timelion),可以创建基本的 K 线图,虽然不如 Grafana 的 Candlestick Chart 插件直观。 + + - 仪表盘(Gauge):展示最大回撤(max_drawdown)或其他单一值指标。 + + - 表格(Table):列出策略的 KPI(如净利、最大回撤、波动率)。 + + - 热力图和散点图:可视化策略表现的分布或相关性(如果需要更高级分析)。 + +- 交互性: + + - 支持时间范围选择器(类似 Grafana),允许用户动态调整时间段(如 2024-01-01 至 2025-03-01)。 + + - 提供“Filters”和“Query”功能,可以按币种(symbol)、策略(strategy)等字段筛选数据。 + + - 支持“Dashboards”功能,可以组合多个图表,形成直观的仪表盘。 + +- 数据源: + + - 直接连接到你的本地 Elasticsearch 实例(例如 trading_data 索引),实时查询特征化数据和回测结果。 + +- 自定义扩展: + + - 可以使用 Vega 脚本或 Timelion 语言创建自定义图表(如 K 线图、叠加技术指标)。 + + - 也可以通过 Kibana 的“Canvas”功能设计更复杂的可视化布局。 + + +--- + +1. Kibana 是否能覆盖你的诉求 + +基于你的诉求(针对特定币种和时间段,模拟运行一个或多个策略的结果,用图表直观展示收益和风险),Kibana 可以覆盖大部分需求,但有以下具体分析: + +a. 支持的部分 + +- K 线图(OHLC 数据): + + - Kibana 可以通过 Vega 脚本或 Timelion 创建基本的 K 线图,展示特定币种(如 BTC-USDT)在特定时间段的 OHLC 数据。 + + - 例如,使用 Vega 脚本绘制 OHLC 柱状图,并叠加技术指标(如 SMA、RSI): + + json + + ```json + { + "$schema": "https://vega.github.io/schema/vega/v5.json", + "data": [ + { + "name": "ohlc", + "url": { + "index": "trading_data", + "body": { + "query": { + "bool": { + "filter": [ + {"term": {"symbol": "BTC-USDT"}}, + {"range": {"timestamp": {"gte": "2024-01-01T00:00:00Z", "lte": "2025-03-01T00:00:00Z"}}} + ] + } + } + } + }, + "format": {"property": "hits.hits", "type": "json"} + } + ], + "marks": [ + { + "type": "rect", + "from": {"data": "ohlc"}, + "encode": { + "enter": { + "x": {"field": "timestamp", "type": "temporal"}, + "width": {"value": 5}, + "y": {"field": "low"}, + "y2": {"field": "high"}, + "fill": {"value": "steelblue"} + } + } + } + ] + } + ``` + + - 虽然 K 线图不如 Grafana 的 Candlestick Chart 插件直观,但可以通过调整 Vega 脚本实现类似效果。 + +- 收益曲线: + + - 用折线图(Line Chart)展示策略的累计收益(net_profit 或 cumulative_return),按时间排序。 + + - 示例查询(Kibana 查询 DSL): + + json + + ```json + { + "query": { + "bool": { + "filter": [ + {"term": {"symbol": "BTC-USDT"}}, + {"term": {"strategy": "SMA_Cross"}}, + {"range": {"timestamp": {"gte": "2024-01-01T00:00:00Z", "lte": "2025-03-01T00:00:00Z"}}} + ] + } + } + } + ``` + + - 在 Kibana 的“Visualize”中选择“Line”类型,Y 轴绑定 net_profit,X 轴绑定 timestamp。 + +- 风险指标: + + - 用“Gauge”或“Metric”可视化最大回撤(max_drawdown),用红色/绿色表示风险高低。 + + - 用柱状图(Vertical Bar)展示波动率(volatility),对比不同策略的风险水平。 + +- 策略概览: + + - 用“Table”面板列出策略 KPI(如净利、最大回撤、胜率、夏普率),通过 Elasticsearch 查询 net_profit、max_drawdown 等字段。 + +- 交互性: + + - 通过 Kibana 的“Dashboard”功能组合上述图表,形成一个综合仪表盘。 + + - 使用“Filters”按币种(symbol)、策略(strategy)和时间范围筛选数据。 + + - 顶部时间选择器允许用户动态调整时间段,类似 Grafana 的交互。 + + +b. 不支持或需要额外开发的部分 + +- 专业 K 线图工具: + + - Kibana 的默认 K 线图(通过 Vega 或 Timelion)功能有限,无法直接提供 TradingView 那样的交互性(如拖拽工具、指标下拉菜单、实时信号标注)。 + + - 你需要手动编写 Vega 脚本或扩展 Timelion 逻辑,叠加技术指标(如 SMA、RSI),但交互性仍不如 Grafana 的 Candlestick Chart 插件或 TradingView。 + +- 实时交互性: + + - Kibana 更适合静态或周期性数据分析,不如 Grafana 或 TradingView 提供实时交易信号和动态更新(虽然可以通过 Elasticsearch 的实时索引支持一定程度的实时性,但用户体验较弱)。 + +- 美观性和直观性: + + - Kibana 的默认界面偏向技术分析和日志展示,不如 Grafana 的仪表盘设计美观和灵活(Grafana 支持更丰富的配色、布局和插件)。 + + - 你可以通过 Kibana 的“Canvas”功能或自定义样式优化 UI,但工作量较大。 + + +--- + +1. 与 Grafana 的对比 + +|特性|Kibana|Grafana| +|---|---|---| +|K 线图支持|通过 Vega/Timelion,功能基础|通过 Candlestick 插件,功能更丰富| +|交互性|有限(Filters、时间选择器)|更强(变量、Tooltip、Annotations)| +|美观性|技术导向,样式较简单|仪表盘设计更美观,灵活性高| +|插件生态|有限(主要依赖 Vega/Timelion)|金融插件更丰富(如 Candlestick)| +|易用性|配置复杂,需懂 Elasticsearch 查询|拖拽式界面更直观,易于上手| + +- 结论:Kibana 可以覆盖你诉求的大部分可视化需求(如 K 线图、收益曲线、风险指标、策略概览),但在交互性和美观性上不如 Grafana 直观。如果你的目标是快速实现功能且已熟悉 Elasticsearch,Kibana 是一个不错的选择;但如果更注重 UI 美观和交互性,建议优先使用 Grafana(结合 Candlestick Chart 插件)。 + + +--- + +1. Kibana 实现方案 + +以下是基于 Kibana 的具体实现步骤,目标是直观展示策略回测的收益和风险: + +a. 准备数据(Go 和 Elasticsearch) + +- 用 Go 获取 OKX OHLC 数据,进行特征化处理(生成 SMA、RSI 等)。 + +- 将特征化数据和回测结果(净利、最大回撤等)写入 Elasticsearch(参考之前的代码)。 + +- 确保索引结构包含所有需要字段(如 timestamp、symbol、open、close、net_profit、max_drawdown)。 + + +b. 配置 Kibana 数据源 + +- 在 Kibana 中添加 Elasticsearch 数据源,连接到本地 trading_data 索引。 + +- 创建索引模式(Index Pattern),指定时间字段(如 timestamp)。 + + +c. 创建仪表盘 + +- 进入 Kibana,“Dashboard” > “Create Dashboard”。 + +- 添加可视化: + + 1. K 线图: + + - 使用“Visualize” > “Vega”创建 K 线图,查询 open、high、low、close。 + + - 示例 Vega 脚本(简化版): + + json + + ```json + { + "$schema": "https://vega.github.io/schema/vega/v5.json", + "data": [ + { + "name": "ohlc", + "url": { + "index": "trading_data", + "body": { + "query": { + "bool": { + "filter": [ + {"term": {"symbol": "BTC-USDT"}}, + {"range": {"timestamp": {"gte": "2024-01-01T00:00:00Z", "lte": "2025-03-01T00:00:00Z"}}} + ] + } + } + } + }, + "format": {"property": "hits.hits", "type": "json"} + } + ], + "marks": [ + { + "type": "rect", + "from": {"data": "ohlc"}, + "encode": { + "enter": { + "x": {"field": "timestamp", "type": "temporal"}, + "width": {"value": 5}, + "y": {"field": "low"}, + "y2": {"field": "high"}, + "fill": {"value": "steelblue"} + } + } + } + ] + } + ``` + + - 叠加技术指标(如 SMA),查询 sma_5 字段,绘制折线图。 + + 2. 收益曲线: + + - 使用“Line Chart”,查询 net_profit,按 timestamp 排序,筛选 symbol 和 strategy。 + + 3. 风险指标: + + - 用“Gauge”展示 max_drawdown,用“Vertical Bar”展示 volatility。 + + 4. 策略概览: + + - 用“Table”列出 net_profit、max_drawdown、volatility 等字段。 + +- 交互性: + + - 使用“Filters”按 symbol、strategy 筛选数据。 + + - 顶部时间选择器动态调整时间范围。 + + +d. 优化 UI 和直观性 + +- 在“Dashboard”中调整图表布局,设置标题(如 “BTC-USDT 策略回测”)、颜色(绿色收益、红色风险)。 + +- 使用“Canvas”或自定义样式优化界面美观性(需要学习曲线)。 + +- 添加“Annotations”标记关键点(如最大回撤、策略信号)。 + + +--- + +1. Kibana 的局限与 Grafana 的对比(针对你的诉求) + +- Kibana 的优势: + + - 直接复用你的 Elasticsearch 部署,配置成本低。 + + - 适合技术分析和数据探索,查询灵活。 + + - 无需额外插件即可展示基本 K 线图和指标(通过 Vega/Timelion)。 + +- Kibana 的局限: + + - K 线图和交互性不如 Grafana 的 Candlestick Chart 插件直观。 + + - 美观性和布局灵活性不如 Grafana(Grafana 支持更丰富的配色和拖拽式设计)。 + + - 实时性和高级金融功能(如动态指标切换)较弱。 + +- 建议: + + - 如果你的优先级是快速实现并复用 Elasticsearch,Kibana 是一个合理选择,可以覆盖大部分诉求。 + + - 如果更注重美观性和交互性,建议优先使用 Grafana(结合 Candlestick Chart 插件),并保留 Kibana 作为辅助分析工具。 + + +--- + +1. 时间和资源估计 + +- 开发时间(基于你的 Go 和 Linux 经验): + + - 数据准备和写入 Elasticsearch:1-2 天(用 Go 优化特征化处理)。 + + - Kibana 仪表盘设计:1-2 天(学习 Vega/Timelion 和配置图表)。 + + - 优化 UI 和交互:0.5-1 天(调整样式和测试筛选)。 + +- 资源需求: + + - 确保 Linux 环境有足够的内存和 CPU 处理 Elasticsearch 和 Kibana。 + + - 无需额外插件,但可能需要学习 Vega/Timelion 脚本。 + + +--- + +1. 总结 + +Kibana 的可视化能力可以覆盖你诉求的大部分内容(K 线图、收益曲线、风险指标、策略概览),并提供基本的交互性(时间范围选择、筛选)。通过 Elasticsearch 查询,你可以直观展示特定币种、时间段和策略的回测结果。虽然 K 线图和交互性不如 Grafana 专业,但完全满足基本需求。如果你的目标是快速实现且已熟悉 Elasticsearch,Kibana 是一个不错的选择。 + +如果你需要具体的技术细节(如 Vega 脚本示例或 Kibana 仪表盘配置),可以告诉我,我会进一步提供帮助!如果你想对比 Grafana 和 Kibana 的具体实现效果,也可以提出,我可以给出更详细的建议。 + +关于策略与回测, 相关数据类型或者对象是否有一定的通用性, 在NautilusTrader, Backtrader, 以及其他的框架之间 + +是的,关于策略和回测的相关的核心数据类型或对象在 NautilusTrader、Backtrader 以及其他常见的量化交易框架之间确实存在一定的通用性,但也存在差异,具体取决于框架的设计目标、编程语言和应用场景。以下是对这些框架之间数据类型或对象的通用性、差异以及如何适配的详细分析: + +--- + +1. 策略和回测的核心数据类型/对象 + +在量化交易和回测框架中,策略和回测通常依赖于一些通用的核心数据类型和对象,以下是常见的数据类型或对象及其在不同框架中的通用性和差异: + +a. 通用数据类型/对象 + +这些数据类型或对象在 NautilusTrader、Backtrader 及其它框架(如 Zipline、QuantConnect、Open Trading Platform)中通常具有类似的概念,尽管实现和命名可能不同: + +- 市场数据(Market Data): + + - OHLC 数据(Bar/烛条):包含开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)和成交量(Volume)的时间序列数据,是回测中最基本的数据类型。 + + - Tick 数据(Tick/逐笔交易):记录每笔交易的价位、数量和时间戳,适合高频交易回测。 + + - 订单簿数据(Order Book):记录市场深度(买单和卖单的限价订单),用于分析流动性或市场压力。 + + - 报价数据(Quote Tick):包含买价(Bid)、卖价(Ask)和价差(Spread),用于实时交易和回测。 + +- 交易对象(Trade/Position): + + - 订单(Order):包括限价单(Limit Order)、市价单(Market Order)、止损单(Stop Order)等,描述交易指令的类型、数量和价格。 + + - 持仓(Position):记录当前持有的资产数量、盈亏和方向(多头/空头)。 + + - 成交(Trade/Fill):记录订单执行后的实际成交价、数量和时间。 + +- 策略逻辑(Strategy): + + - 策略通常基于市场数据和指标(如 SMA、RSI)生成交易信号(买入、卖出或持有),并管理订单和持仓。 + + - 策略对象通常包含事件处理逻辑(如 on_bar、on_tick、on_order)。 + +- 绩效指标(Performance Metrics): + + - 收益(Net Profit、Cumulative Return、Annualized Return)。 + + - 风险(Max Drawdown、Volatility、Sharpe Ratio)。 + + - 胜率(Win Rate)、盈亏比(Profit Factor)等。 + +- 时间和事件(Timestamp/Event): + + - 所有框架都依赖时间戳(通常 UTC 格式)驱动回测或实时交易,基于事件驱动(Event-Driven)或时间驱动(Time-Driven)架构。 + + +这些核心概念在不同框架中具有一定通用性,因为它们反映了金融市场和交易的基本特性。然而,具体实现、命名和数据结构可能因框架的设计不同而差异较大。 + +--- + +1. NautilusTrader、Backtrader 及其他框架的比较 + +a. NautilusTrader + +- 编程语言:主要用 Rust(核心)+ Python/C#(API)。 + +- 数据类型/对象: + + - Bar/Tick 数据:使用 Bar(OHLC 烛条)和 QuoteTick(报价数据)对象,存储时间戳(ts_init、ts_event)、价格和成交量。 + + - Order/Trade/Position:使用 Order(限价单、市价单等)、Trade(成交记录)和 Position(持仓)对象,基于事件驱动架构。 + + - Strategy:通过 Strategy 类定义策略逻辑,处理 on_bar、on_tick 等事件。 + + - Performance Metrics:内置 PerformanceStats 对象,计算净利、最大回撤等指标。 + +- 通用性: + + - NautilusTrader 强调高性能和低延迟,数据结构更复杂,适合专业量化交易者。其 Bar 和 Tick 数据模型与标准 OHLC 和 Tick 数据兼容,但需要适配时间戳格式(UTC 毫秒/纳秒)和数据源。 + + +b. Backtrader + +- 编程语言:Python。 + +- 数据类型/对象: + + - Bar 数据:使用 Lines 对象存储 OHLC 和成交量(如 data.close、data.open),基于时间周期(1 分钟、1 小时等)。 + + - Order/Trade/Position:使用 Order(限价单、市价单)、Trade(成交)和 Position(持仓)对象,基于时间驱动架构。 + + - Strategy:通过 Strategy 类定义策略,处理 next(每根 K 线)或 tick 事件。 + + - Performance Metrics:内置 Analyzer 类(如 Returns、DrawDown)计算收益、最大回撤等。 + +- 通用性: + + - Backtrader 更简单,适合初学者和中小型回测,数据结构直接兼容 CSV/JSON 文件的 OHLC 数据。其 Lines 对象与 NautilusTrader 的 Bar 类似,但时间戳格式和事件处理方式不同(时间驱动 vs. 事件驱动)。 + + +c. 其他框架(如 Zipline、QuantConnect、Open Trading Platform) + +- Zipline(Python): + + - 数据类型:使用 pandas.DataFrame 存储 OHLC 数据,Order 和 Position 对象类似 Backtrader。 + + - 通用性:与 Backtrader 相似,但更适合长周期回测,数据格式与 NautilusTrader 的 Bar 兼容,但需要转换时间戳和指标。 + +- QuantConnect(C#、Python): + + - 数据类型:使用 TradeBar(OHLC)、QuoteBar(报价)和 Order、Position 对象,类似 NautilusTrader 但更通用。 + + - 通用性:支持多种数据格式,易与 NautilusTrader 和 Backtrader 数据共享,但需要适配时间戳和事件模型。 + +- Open Trading Platform(Go): + + - 数据类型:使用 Go 结构体(如 Bar、Trade、Order),自定义策略和回测逻辑。 + + - 通用性:与 NautilusTrader 的 Bar 和 Order 类似,但需自定义转换逻辑,适合你的 Go 开发背景。 + + +--- + +1. 通用性的程度 + +- 相似点: + + - 所有框架都依赖 OHLC、Tick 和订单簿等市场数据,定义类似的事件(如 on_bar、on_tick)和对象(如 Order、Position)。 + + - 绩效指标(如收益、最大回撤)在概念上通用,可以通过标准公式(如 Max Drawdown = (Peak - Trough) / Peak)在不同框架间转换。 + + - 时间序列数据(如 UTC 时间戳)在格式上可以标准化(例如 ISO 8601 格式),便于跨框架转换。 + +- 差异点: + + - 编程语言:NautilusTrader(Rust/Python/C#)、Backtrader(Python)、OTP(Go)使用不同语言,数据结构和 API 设计不同。 + + - 事件驱动 vs. 时间驱动: + + - NautilusTrader 和 QuantConnect 采用事件驱动架构,适合高频交易,数据处理更灵活但复杂。 + + - Backtrader 和 Zipline 采用时间驱动架构,适合长周期回测,数据处理更简单但性能有限。 + + - 数据格式: + + - NautilusTrader 使用自定义 Bar 和 Tick 对象,时间戳精确到纳秒。 + + - Backtrader 使用 Lines 对象,时间戳通常精确到秒。 + + - OTP 使用 Go 结构体,格式需自定义适配。 + + - 性能目标: + + - NautilusTrader 强调高性能、低延迟,适合专业量化交易。 + + - Backtrader 更轻量,适合小型项目或原型开发。 + +- 适配难度: + + - NautilusTrader  Backtrader:中等难度。OHLC 数据可通过 CSV/JSON 转换(时间戳需标准化),但事件处理和策略逻辑需重写(事件驱动 vs. 时间驱动)。 + + - NautilusTrader  OTP:中等难度。两者的 Bar 和 Order 概念类似,但需用 Go 开发适配器,将 OTP 的数据转换为 NautilusTrader 的 Python/C# 格式。 + + - Backtrader  Zipline:低难度。两者均为 Python,数据和策略逻辑易于共享,只需调整时间戳和指标。 + + +--- + +1. 如何实现数据和对象的通用性 + +为了在 NautilusTrader、Backtrader 和其他框架之间实现数据和对象的通用性,可以遵循以下步骤: + +a. 标准化数据格式 + +- OHLC 数据:统一为 CSV 或 JSON 格式,包含 timestamp、open、high、low、close、volume 字段,时间戳使用 UTC ISO 8601 格式(例如 2025-03-01T00:00:00Z)。 + +- Tick 数据:包括 timestamp、price、volume、side(买/卖)字段。 + +- 绩效指标:定义标准 JSON 格式(如 {"net_profit": 500.0, "max_drawdown": -15.0, "sharpe_ratio": 1.5})。 + + +b. 用 Go 开发数据转换工具 + +- 基于你的 Go 开发能力,编写一个数据转换工具,读取原始 OHLC 数据(从 OKX 或其他源),生成标准格式,并适配不同框架: + + - NautilusTrader:转换数据为 Bar 或 Tick 对象(Python/C# 格式)。 + + - Backtrader:转换数据为 Lines 对象(Python 格式)。 + + - OTP:直接用 Go 结构体存储数据,适配回测逻辑。 + +- 示例 Go 代码(伪代码): + + go + + ```go + package main + + import ( + "encoding/csv" + "os" + "time" + ) + + type OHLC struct { + Timestamp time.Time + Open float64 + High float64 + Low float64 + Close float64 + Volume float64 + } + + func convertToNautilusFormat(ohlc []OHLC) []byte { + // 转换为 NautilusTrader 需要的 JSON 格式 + data := make([]map[string]interface{}, len(ohlc)) + for i, bar := range ohlc { + data[i] = map[string]interface{}{ + "timestamp": bar.Timestamp.UTC().Format(time.RFC3339Nano), + "open": bar.Open, + "high": bar.High, + "low": bar.Low, + "close": bar.Close, + "volume": bar.Volume, + } + } + // 序列化为 JSON + jsonData, _ := json.Marshal(data) + return jsonData + } + + func convertToBacktraderFormat(ohlc []OHLC) []byte { + // 转换为 Backtrader 需要的 CSV 格式 + file, _ := os.Create("backtrader_data.csv") + writer := csv.NewWriter(file) + writer.Write([]string{"datetime", "open", "high", "low", "close", "volume"}) + for _, bar := range ohlc { + writer.Write([]string{ + bar.Timestamp.Format("2006-01-02 15:04:05"), + fmt.Sprintf("%f", bar.Open), + fmt.Sprintf("%f", bar.High), + fmt.Sprintf("%f", bar.Low), + fmt.Sprintf("%f", bar.Close), + fmt.Sprintf("%f", bar.Volume), + }) + } + writer.Flush() + file.Close() + return nil // 文件已保存到磁盘 + } + + func main() { + // 假设 ohlc 是从 OKX 获取的 OHLC 数据 + ohlc := []OHLC{ + {Timestamp: time.Now(), Open: 100.0, High: 105.0, Low: 98.0, Close: 102.0, Volume: 1000.0}, + } + nautilusData := convertToNautilusFormat(ohlc) + backtraderData := convertToBacktraderFormat(ohlc) + // 写入文件或 Elasticsearch + } + ``` + + +c. 策略和绩效指标的适配 + +- 策略逻辑需根据框架的 API 重写,但核心逻辑(如均线交叉)可以在不同框架间复用。 + +- 绩效指标(如最大回撤、收益)用标准公式计算,确保跨框架一致性。 + + +d. 可视化和存储 + +- 将数据写入 Elasticsearch(通用格式),用 Kibana 或 Grafana 展示,确保数据结构(如 timestamp、net_profit、max_drawdown)兼容所有框架。 + + +--- + +1. 适配的实际挑战 + +- 时间戳格式: + + - NautilusTrader 使用纳秒级时间戳(UTC),Backtrader 使用秒级或分钟级(UTC),需转换。 + +- 事件驱动 vs. 时间驱动: + + - NautilusTrader 和 QuantConnect 使用事件驱动,适合高频;Backtrader 和 Zipline 使用时间驱动,适合长周期。需要调整策略逻辑以适配。 + +- 性能差异: + + - NautilusTrader 和 OTP 强调高性能,适合大数据;Backtrader 更轻量,适合小型回测。选择框架时需考虑数据规模和性能需求。 + + +--- + +1. 总结 + +- 通用性:NautilusTrader、Backtrader 和其他框架在 OHLC、Tick、Order、Position 等核心数据类型和策略逻辑上有一定的通用性,尤其在市场数据和绩效指标方面。但实现细节(如数据格式、事件处理)因框架不同而差异较大。 + +- 适配方法:用 Go 开发数据转换工具,标准化 OHLC 和绩效数据(CSV/JSON/Elasticsearch),并根据框架 API 重写策略逻辑。 + +- 推荐路径:基于你的 Go 开发能力,优先选择 NautilusTrader(高性能)和 OTP(Go 友好),并用 Elasticsearch 存储通用数据,适配 Backtrader 或其他框架时只需转换格式。 + + +如果你需要具体适配代码或框架对比的细节(例如 NautilusTrader 和 Backtrader 的数据转换示例),可以告诉我,我会进一步提供帮助! + +我还比较关心的是, 哪种框架, 对于自定义策略的编写, 是否可以更解偶 + +你的关注点非常关键——在自定义策略编写时,框架是否能够实现更“解耦”(decoupling),即策略逻辑与框架底层实现(如数据处理、执行引擎、数据存储等)之间的依赖尽可能少,从而提高代码的可维护性、可测试性和可移植性。以下是对 NautilusTrader、Backtrader、Open Trading Platform(OTP)以及其他常见量化交易框架在自定义策略编写解耦性方面的分析和比较,结合你的需求(熟悉 Go 开发、Linux 本地部署、需要量化收益/最大回撤等): + +--- + +1. 解耦性的定义与重要性 + +- 解耦(Decoupling):指的是策略逻辑(业务逻辑)与框架的底层基础设施(数据源、执行引擎、事件处理等)分离,减少直接依赖。这样可以: + + - 提高策略的重用性(可以在不同框架或场景下复用)。 + + - 便于测试(策略逻辑独立于框架,可以单元测试)。 + + - 降低维护成本(框架升级或变化时,策略代码无需大幅修改)。 + + - 提升可移植性(策略可以更轻松地迁移到其他框架或平台)。 + +- 衡量标准: + + - 策略是否可以通过独立文件或模块定义,而不依赖框架的特定 API。 + + - 框架是否提供清晰的接口(如回调函数、事件处理器)隔离策略逻辑。 + + - 数据输入和输出是否标准化(例如 JSON、CSV),便于外部处理。 + + +--- + +1. 框架对比:NautilusTrader、Backtrader、Open Trading Platform(OTP)及其他 + +a. NautilusTrader + +- 解耦性:中等偏高 + + - 优点: + + - NautilusTrader 采用事件驱动架构(Event-Driven Architecture),通过 Strategy 类和事件处理器(如 on_bar、on_tick、on_order)定义策略逻辑,策略逻辑与底层数据源、执行引擎分离。 + + - 提供清晰的接口(如 DataHandler、ExecutionEngine),允许开发者通过自定义数据提供者和执行器注入数据和订单逻辑。 + + - 支持 Python 和 C# API,策略可以以独立模块或文件编写,减少与核心框架的耦合。 + + - 数据输入输出支持标准格式(如 CSV、JSON),可以通过外部脚本(如 Go 开发的预处理)预先处理数据。 + + - 缺点: + + - 策略逻辑仍需依赖 NautilusTrader 的特定事件和对象(如 Bar、Order),需要了解框架的内部模型(如事件驱动机制)。 + + - 如果需要深度定制(如自定义数据源或执行器),可能需要修改框架代码或扩展 Python/C# API,增加耦合。 + + - 适合场景:如果你熟悉 Python 或 C#,NautilusTrader 提供较好的解耦性,适合通过 Go 开发数据处理逻辑,再通过接口与策略交互。 + + - 解耦优化:用 Go 开发独立的数据预处理和特征化模块(写入 Elasticsearch),通过 JSON 或 CSV 文件与 NautilusTrader 交互,减少直接依赖。 + + +b. Backtrader + +- 解耦性:中等偏低 + + - 优点: + + - Backtrader 基于 Python,使用 Strategy 类和 Lines 对象定义策略,策略逻辑通过 next(时间驱动)或 tick(事件驱动)方法实现,相对简单。 + + - 支持通过 DataFeed 自定义数据源,允许外部输入 OHLC 数据(如 CSV 文件),减少与框架内部的耦合。 + + - 策略可以独立编写为 Python 文件,易于测试和维护。 + + - 缺点: + + - 策略逻辑高度依赖 Backtrader 的 Lines 对象和时间驱动机制,难以完全解耦(例如,策略需要直接访问 self.data.close 等框架内置属性)。 + + - 数据处理和回测逻辑紧密绑定,扩展性有限。如果需要自定义数据源或复杂事件处理,需深入修改框架代码。 + + - 不适合高性能场景,策略代码可能因框架限制而难以迁移到其他框架。 + + - 适合场景:适合初学者或小型回测项目,如果你直接用 Python 编写策略,解耦性尚可。但对于 Go 开发和复杂回测,Backtrader 的解耦性较弱。 + + - 解耦优化:用 Go 预处理数据(生成 CSV 文件),通过 Backtrader 的 DataFeed 加载数据,尽量避免直接操作框架内部逻辑。 + + +c. Open Trading Platform(OTP) + +- 解耦性:较高 + + - 优点: + + - OTP 基于 Go 开发,核心后端和策略逻辑通过模块化设计分离,适合你的 Go 开发背景。 + + - 提供清晰的接口(如 strategy 模块和 execution 模块),策略可以独立定义为 Go 结构体或函数,减少与底层执行引擎和数据源的耦合。 + + - 支持自定义数据源和执行器,数据输入输出可以是标准格式(如 JSON、CSV),便于用 Go 开发独立数据处理模块。 + + - 作为开源项目,源码完全透明,你可以自由修改和扩展,彻底控制解耦程度。 + + - 缺点: + + - 文档和社区较新,缺乏成熟的策略开发示例,可能需要更多时间探索和调试。 + + - 回测和量化功能需手动开发(如收益、最大回撤),增加了初始开发工作量。 + + - 前端(React)与后端(Go)的分离需要额外开发(如图表可视化)。 + + - 适合场景:如果你希望完全用 Go 开发策略和回测逻辑,并保持最大解耦性,OTP 是一个理想选择。结合 Elasticsearch 存储数据,用 Go 实现策略逻辑,最大限度减少框架依赖。 + + - 解耦优化:用 Go 开发独立的策略模块(JSON 或接口定义),通过文件或网络接口与 OTP 交互,彻底隔离策略和框架。 + + +d. 其他框架(如 Zipline、QuantConnect) + +- Zipline(Python): + + - 解耦性:中等。 + + - 优点:策略通过 initialize 和 handle_data 定义,数据输入支持 pandas.DataFrame,可以外部加载 CSV 文件。 + + - 缺点:策略逻辑依赖 Zipline 的时间驱动机制和内置对象(如 context、data),扩展性有限。 + +- QuantConnect(C#、Python): + + - 解耦性:中等偏高。 + + - 优点:提供 Algorithm 类和模块化接口(如 Data、Order),支持自定义数据源和策略。 + + - 缺点:策略仍需依赖框架的特定 API(如 OnData 事件),跨框架迁移难度中等。 + + +--- + +1. 哪种框架的解耦性最强? + +- OTP(Open Trading Platform):解耦性最强,尤其是对你的 Go 开发背景来说。通过模块化设计和 Go 的灵活性,你可以完全控制策略逻辑、数据处理和执行引擎,减少与框架的直接依赖。 + +- NautilusTrader:解耦性次之。通过事件驱动架构和清晰接口,策略逻辑可以独立编写,但仍需依赖 Python/C# API 和框架特定对象(如 Bar、Order)。 + +- Backtrader:解耦性最弱。策略逻辑高度绑定框架的 Lines 和时间驱动机制,扩展和迁移困难。 + + +--- + +1. 如何在这些框架中实现更高解耦性 + +以下是优化解耦性的通用方法,适合你的需求: + +a. 标准化数据输入/输出 + +- 所有框架都支持 CSV、JSON 或时间序列数据库(如 Elasticsearch)作为数据源。用 Go 开发数据预处理模块,生成标准格式的数据(如 OHLC + 特征),避免直接依赖框架的内部数据模型。 + + +b. 使用接口或事件驱动 + +- 在 NautilusTrader 和 OTP 中,利用事件驱动或接口(如 Strategy、DataProvider)隔离策略逻辑,避免直接操作框架底层。 + +- 在 Backtrader 中,通过 DataFeed 自定义数据源,减少策略对框架内置对象的依赖。 + + +c. 独立策略模块 + +- 将策略逻辑写入独立文件或模块(例如 Go 包、Python 文件),通过配置文件(如 JSON)或网络接口(如 HTTP/GRPC)与框架交互。 + +- 示例(Go 策略模块): + + go + + ```go + package strategy + + type Strategy interface { + OnBar(bar Bar) []Order // 处理 K 线数据,返回订单 + OnTick(tick Tick) []Order // 处理 Tick 数据,返回订单 + } + + type SMAcross struct { + ShortPeriod int + LongPeriod int + ShortSMA float64 + LongSMA float64 + } + + func (s *SMAcross) OnBar(bar Bar) []Order { + // 均线交叉策略逻辑 + s.ShortSMA = calculateSMA(bar.Close, s.ShortPeriod) + s.LongSMA = calculateSMA(bar.Close, s.LongPeriod) + if s.ShortSMA > s.LongSMA { + return []Order{{Type: "Buy", Quantity: 1}} + } + return nil + } + ``` + + - 策略通过接口定义,与框架解耦,易于测试和迁移。 + + +d. 外部化数据处理 + +- 用 Go 开发独立的数据处理和特征化模块(如写入 Elasticsearch),框架仅负责读取数据和执行策略,减少耦合。 + + +e. 测试和模拟 + +- 编写单元测试(Go 测试、Python unittest)验证策略逻辑,独立于框架运行,确保可移植性。 + + +--- + +1. 推荐框架(基于解耦性) + +- 首选:Open Trading Platform(OTP): + + - 理由:OTP 用 Go 开发,模块化设计最适合你的背景,策略可以完全独立编写(通过 Go 接口或 JSON 配置文件),与数据源和执行引擎解耦。 + + - 实现:用 Go 开发策略模块(如上述接口),通过文件或网络接口与 OTP 交互,结合 Elasticsearch 存储数据。 + + - 局限:回测和量化功能需手动开发,文档和社区较新。 + +- 次选:NautilusTrader: + + - 理由:事件驱动架构和清晰接口提供较好的解耦性,适合通过 Go 开发数据处理模块,再用 Python/C# 编写策略。 + + - 实现:用 Go 预处理数据(写入 Elasticsearch),用 Python 脚本通过接口加载数据,策略逻辑独立于框架核心。 + + - 局限:需学习 Python/C#,策略仍需依赖框架特定对象。 + +- 不推荐:Backtrader: + + - 理由:策略逻辑高度绑定框架,解耦性较弱,不适合复杂或跨框架迁移的场景。 + + - 实现:仅适合简单回测,用 Go 预处理数据后加载 CSV,但扩展性有限。 + + +--- + +1. 具体实现建议(以 OTP 为例) + +- 策略定义: + + - 用 Go 编写独立策略模块(如 strategy 包),通过接口定义逻辑(如 OnBar、OnTick)。 + + - 策略数据通过 JSON 配置文件或 Elasticsearch 输入,输出订单和绩效指标。 + +- 数据处理: + + - 用 Go 从 OKX 获取 OHLC 数据,进行特征化,写入 Elasticsearch。 + +- 回测与执行: + + - OTP 运行回测,调用策略模块,生成收益、最大回撤等指标。 + +- 可视化: + + - 用 Kibana/Grafana 查询 Elasticsearch 数据,展示 K 线图、收益曲线和风险指标。 + + +--- + +1. 总结 + +- 解耦性排名:OTP > NautilusTrader > Backtrader。 + +- 推荐:如果你追求最高解耦性,选择 OTP,用 Go 开发完全独立的策略模块,结合 Elasticsearch 存储数据和可视化。 + +- 次优选择:NautilusTrader,提供较好的解耦性,但需适应 Python/C# API 和事件驱动机制。 + + +如果你需要具体代码示例(例如 Go 策略模块或 NautilusTrader/OTP 的解耦实现),可以告诉我,我会进一步提供指导! + +实施某个策略,形成一个策略的对象,这个策略下是可以产生多笔订单的对吧 + +是的,你的理解是正确的。在量化交易框架(如 NautilusTrader、Backtrader、Open Trading Platform(OTP)等)中,实施某个策略并形成一个策略对象后,该策略可以在特定条件下生成多笔订单。这是量化交易和回测的核心特性之一,允许策略根据市场数据和逻辑动态发出多个买入、卖出或其他类型的交易指令。以下是详细分析和解释,结合你的需求(熟悉 Go 开发、Linux 本地部署、需要量化收益/最大回撤等): + +--- + +1. 策略对象的基本概念 + +- 策略对象:在量化交易框架中,策略对象是一个逻辑单元,封装了交易决策规则(如均线交叉、RSI 反转等)。它通常通过编程语言(如 Python、Go)定义,基于市场数据(如 OHLC、Tick)触发交易信号。 + +- 订单生成:策略对象根据市场条件(如价格突破、指标信号)生成交易订单(如限价单、市价单、止损单等)。同一个策略可以在不同时间点或不同市场条件下生成多笔订单,具体取决于策略逻辑和数据输入。 + + +特性: + +- 动态性:策略可以根据实时或历史数据动态调整,生成多笔订单(如在上升趋势中多次买入,在下降趋势中多次卖出)。 + +- 条件触发:订单生成通常基于条件(如价格超过均线、RSI 超买/超卖),可能在单个 K 线或多个事件中触发多笔订单。 + +- 管理持仓:策略对象还负责管理持仓(如多头/空头、仓位调整),通过订单调整总持仓。 + + +--- + +1. 在不同框架中生成多笔订单 + +a. NautilusTrader + +- 策略对象:通过 Strategy 类定义策略逻辑,使用事件处理器(如 on_bar、on_tick)处理市场数据。 + +- 订单生成: + + - 策略可以调用 self.order_factory.market_order() 或 self.order_factory.limit_order() 生成订单。 + + - 例如,在均线交叉策略中,当短均线(SMA)超过长均线时,生成买入订单;当短均线低于长均线时,生成卖出订单。可能在多个 K 线或 Tick 事件中触发多笔订单。 + + - 示例(Python 伪代码): + + python + + ```python + from nautilus_trader.trading.strategy import Strategy + from nautilus_trader.model.orders import MarketOrder + + class SMACrossStrategy(Strategy): + def __init__(self): + super().__init__() + self.short_sma = 0.0 + self.long_sma = 0.0 + + def on_bar(self, bar): + # 计算 SMA + self.short_sma = self.calculate_sma(bar.close, 5) + self.long_sma = self.calculate_sma(bar.close, 20) + + # 均线交叉信号 + if self.short_sma > self.long_sma and self.position.size == 0: + order = MarketOrder( + instrument_id=bar.instrument_id, + order_side="BUY", + quantity=1.0, + ) + self.submit_order(order) # 生成买入订单 + elif self.short_sma < self.long_sma and self.position.size > 0: + order = MarketOrder( + instrument_id=bar.instrument_id, + order_side="SELL", + quantity=1.0, + ) + self.submit_order(order) # 生成卖出订单 + ``` + + - 多笔订单:同一个 SMACrossStrategy 对象可以在多个 on_bar 事件中生成多笔订单(例如在不同时间点触发买入或卖出),只要市场条件满足策略逻辑。 + +- 解耦性:NautilusTrader 的事件驱动设计允许策略独立定义订单逻辑,但需依赖框架的 Order 和 Position 对象。 + + +b. Backtrader + +- 策略对象:通过 Strategy 类定义策略逻辑,使用 next 或 tick 方法处理市场数据。 + +- 订单生成: + + - 策略调用 self.buy() 或 self.sell() 生成订单,管理持仓和交易信号。 + + - 示例(Python 伪代码): + + python + + ```python + from backtrader import Strategy + + class SMACrossStrategy(Strategy): + params = (('short_period', 5), ('long_period', 20)) + + def __init__(self): + self.sma_short = self.datas[0].close.sma(self.p.short_period) + self.sma_long = self.datas[0].close.sma(self.p.long_period) + + def next(self): + if self.sma_short[0] > self.sma_long[0] and not self.position: + self.buy(size=1) # 生成买入订单 + elif self.sma_short[0] < self.sma_long[0] and self.position: + self.sell(size=1) # 生成卖出订单 + ``` + + - 多笔订单:同一个 SMACrossStrategy 对象可以在多个 next 调用中生成多笔订单(例如在不同 K 线触发买入或卖出),取决于市场数据和持仓状态。 + +- 解耦性:Backtrader 的策略逻辑紧密绑定框架的 Lines 和 Order 对象,解耦性较弱,但仍支持通过 DataFeed 自定义数据输入。 + + +c. Open Trading Platform(OTP) + +- 策略对象:通过 Go 结构体或接口(如 Strategy 接口)定义策略逻辑,处理 Bar 或 Tick 数据。 + +- 订单生成: + + - 策略调用自定义订单生成逻辑(如 GenerateOrders 函数),返回多笔订单(如限价单、市价单)。 + + - 示例(Go 伪代码): + + go + + ```go + package strategy + + type Strategy interface { + OnBar(bar Bar) []Order + OnTick(tick Tick) []Order + } + + type SMACross struct { + ShortPeriod int + LongPeriod int + ShortSMA float64 + LongSMA float64 + } + + func (s *SMACross) OnBar(bar Bar) []Order { + s.ShortSMA = calculateSMA(bar.Close, s.ShortPeriod) + s.LongSMA = calculateSMA(bar.Close, s.LongPeriod) + orders := make([]Order, 0) + if s.ShortSMA > s.LongSMA && s.PositionSize == 0 { + orders = append(orders, Order{ + Type: "Market", + Side: "Buy", + Quantity: 1.0, + }) + } else if s.ShortSMA < s.LongSMA && s.PositionSize > 0 { + orders = append(orders, Order{ + Type: "Market", + Side: "Sell", + Quantity: 1.0, + }) + } + return orders + } + ``` + + - 多笔订单:同一个 SMACross 策略对象可以在多个 OnBar 或 OnTick 调用中生成多笔订单,取决于市场条件和持仓状态。 + +- 解耦性:OTP 的模块化设计和 Go 接口支持最高解耦性,策略逻辑完全独立于框架底层,易于测试和迁移。 + + +--- + +1. 策略生成多笔订单的具体机制 + +- 条件触发:策略根据市场数据(如 OHLC、指标)和持仓状态(如空仓、多头、空头)触发订单。例如: + + - 在均线交叉策略中,当短均线超过长均线时生成买入订单,持仓满后可能等待反向信号生成卖出订单。 + + - 在突破策略中,价格突破特定水平(如支撑位或阻力位)可能连续生成多笔订单,调整仓位。 + +- 持仓管理:策略对象跟踪当前持仓(如 position.size 或 PositionSize),确保订单生成符合风险控制(如最大仓位限制)。 + +- 时间序列或事件驱动: + + - 在时间驱动框架(如 Backtrader)中,策略在每个 K 线(next)检查条件,可能生成多笔订单。 + + - 在事件驱动框架(如 NautilusTrader、OTP)中,策略在每个 on_bar 或 OnBar 事件中检查条件,动态生成订单。 + +- 订单类型多样性:策略可以生成多种订单(如限价单、市价单、止损单、止盈单),并在不同时间点重复生成,满足复杂交易需求。 + + +--- + +1. 框架间的差异 + +- NautilusTrader:通过事件驱动,策略可以在多个 on_bar 或 on_tick 事件中生成订单,支持高频交易和复杂逻辑,但需依赖框架特定对象。 + +- Backtrader:通过时间驱动,策略在 next 中生成订单,适合简单回测,但扩展性有限,解耦性较弱。 + +- OTP:通过 Go 接口,策略可以完全自定义订单生成逻辑,生成多笔订单,解耦性最强,但需手动开发回测和量化功能。 + + +--- + +1. 实现多笔订单的注意事项 + +- 风险控制: + + - 确保策略有限制订单数量和仓位(如最大风险敞口、最大回撤限制),避免过度交易。 + + - 在 NautilusTrader 或 OTP 中,使用 RiskEngine 或自定义逻辑管理风险;在 Backtrader 中,使用 broker.set_cash() 或 broker.set_position() 限制仓位。 + +- 性能优化: + + - 对于高频策略,考虑 NautilusTrader 或 OTP 的高性能架构,避免 Backtrader 的性能瓶颈。 + + - 用 Go 开发策略逻辑,优化订单生成效率(并行处理、缓存结果)。 + +- 数据输入: + + - 确保 OHLC 或 Tick 数据完整、准确,策略基于特征化数据(如 SMA、RSI)生成订单。 + + - 用 Go 预处理数据(写入 Elasticsearch),通过标准化接口输入框架。 + +- 回测验证: + + - 在 NautilusTrader 或 Backtrader 中运行回测,验证策略生成的订单数量、收益和最大回撤。 + + - 在 OTP 中手动实现回测逻辑,检查多笔订单的执行效果。 + + +--- + +1. 推荐框架(基于你的需求) + +- NautilusTrader:适合高性能和复杂策略,支持事件驱动生成多笔订单,解耦性中等偏高。结合 Go 开发数据处理和策略逻辑,适合你的背景。 + +- OTP:最适合你的 Go 开发需求,解耦性最高,策略可以完全独立编写并生成多笔订单,但需手动开发回测和量化功能。 + +- Backtrader:适合简单策略,解耦性较弱,生成多笔订单功能有限,不推荐复杂场景。 + + +--- + +1. 总结 + +是的,实施某个策略并形成策略对象后,该策略可以在不同市场条件下生成多笔订单。NautilusTrader、Backtrader 和 OTP 都支持这一功能,但实现方式和解耦性有所不同: + +- NautilusTrader:事件驱动,适合高频,需依赖框架对象。 + +- Backtrader:时间驱动,简单但解耦性弱。 + +- OTP:Go 开发,解耦性最强,适合完全自定义。 + + +基于你的 Go 开发能力和解耦需求,推荐使用 OTP(用 Go 独立实现策略),或 NautilusTrader(结合 Go 数据处理)。如果你需要具体代码示例(例如 Go 策略生成多笔订单,或 NautilusTrader/Backtrader 的实现),可以告诉我,我会进一步提供指导! + +但是我发现了一个问题: OTP有点重,[https://github.com/ettec/open-trading-platform?tab=readme-ov-file#architecture-overview-](https://github.com/ettec/open-trading-platform?tab=readme-ov-file#architecture-overview-) 它是一个 all in one 的 方案, 包含了 promethues 和 grafana, 我并不排斥这两个框架,它们很优秀, 我的意思是, 我其实更希望自己来组装各个独立的部分, 包括自定义策略部分要足够解偶 + +你的观察非常到位!Open Trading Platform(OTP)确实是一个“all-in-one”的方案,根据其 GitHub 文档([https://github.com/ettec/open-trading-platform?tab=readme-ov-file#architecture-overview),它集成了多个组件(如](https://github.com/ettec/open-trading-platform?tab=readme-ov-file#architecture-overview),它集成了多个组件(如) Prometheus、Grafana、Kubernetes、React 前端等),提供了一个完整的交易平台解决方案。然而,你希望自己组装各个独立的部分,并确保自定义策略部分足够解耦,这是一个非常合理的需求,尤其是考虑到你的编程背景(熟悉 Go 开发)、Linux 本地部署需求,以及对灵活性和控制力的追求。以下是详细分析和解决方案: + +--- + +1. OTP 的“all-in-one”特性分析 + +- 架构概述(根据文档): + + - OTP 是一个模块化但高度集成的平台,包含以下核心组件: + + - Go 后端:交易引擎、策略执行、数据流处理等,主要用 Go 实现。 + + - React 前端:提供 GUI 界面,包括图表和仪表盘。 + + - Prometheus:用于监控和度量(Metrics),跟踪平台性能和交易数据。 + + - Grafana:用于可视化 Prometheus 的度量数据,展示 K 线图、策略绩效等。 + + - Kubernetes/Docker:用于容器化部署和扩展,适合生产环境或复杂部署。 + + - 优点: + + - 提供开箱即用的解决方案,包含数据处理、策略执行、监控和可视化,适合快速启动和运行交易平台。 + + - 模块化设计(通过 Go 微服务)便于扩展,但整体架构仍是一个紧密集成的系统。 + + - 缺点(针对你的需求): + + - “all-in-one”设计可能过于重(Heavy),增加了不必要的复杂性和依赖(例如 Prometheus、Grafana、Kubernetes),即使你不一定需要这些组件。 + + - 策略部分虽然可以通过 Go 模块自定义,但仍可能与 OTP 的核心引擎和数据流绑定,解耦性可能不如你期望的那样彻底。 + + - 部署和维护成本较高,尤其是 Kubernetes 和 Docker 的配置可能超出你的本地 Linux 简单部署需求。 + + +--- + +1. 你的诉求:组装独立部分并确保策略解耦 + +- 目标: + + - 自己组装各个独立的功能模块(如数据获取、特征化、策略执行、回测、订单生成、性能量化、可视化),避免“all-in-one”方案的复杂性。 + + - 确保自定义策略部分足够解耦,与数据处理、执行引擎和可视化工具完全分离,便于测试、维护和迁移。 + +- 优势: + + - 完全控制每个模块的实现和依赖,减少不必要的框架开销。 + + - 提高策略的可移植性(易于迁移到其他框架或场景)。 + + - 优化资源使用,适合本地 Linux 部署和简单需求。 + +- 挑战: + + - 需要更多开发工作,自定义每个部分(数据获取、特征化、策略、回测、可视化等)。 + + - 可能需要整合多个工具(如 NautilusTrader、Elasticsearch、Kibana/Grafana),增加学习和配置成本。 + + +--- + +1. 解决方案:基于独立模块组装系统 + +以下是基于你的需求(熟悉 Go、Linux 本地部署、策略解耦)的设计方案,逐步组装独立模块,确保每个部分灵活且解耦: + +a. 模块划分 + +1. 数据获取模块: + + - 功能:从 OKX 或其他交易所获取 OHLC、Tick 和订单簿等历史数据。 + + - 实现:用 Go 开发独立脚本或服务(参考之前的 OKX API 代码),调用 REST/WebSocket API,生成标准格式(如 CSV、JSON)。 + + - 解耦性:数据输出为标准文件或 Elasticsearch,无需依赖其他模块。 + +2. 特征化处理模块: + + - 功能:对 OHLC 数据进行特征化,生成技术指标(如 SMA、RSI、MACD)和市场特征(如波动率、成交量变化)。 + + - 实现:用 Go 开发独立模块(参考 gonum 库),处理数据并输出到 Elasticsearch 或文件。 + + - 解耦性:特征化逻辑独立于策略和回测,完全通过标准接口(文件/Elasticsearch)输出。 + +3. 策略模块: + + - 功能:定义自定义策略逻辑(如均线交叉、RSI 反转),生成订单信号。 + + - 实现:用 Go 开发独立策略库或接口(如 Strategy 接口),通过 JSON 配置文件或网络接口接收特征化数据,输出订单(如 Buy、Sell)。 + + - 解耦性:策略完全独立,无需依赖任何框架,直接通过标准数据格式(JSON/CSV)或网络接口(如 HTTP/GRPC)与回测模块交互。 + + - 示例(Go 伪代码): + + go + + ```go + package strategy + + type Strategy interface { + OnBar(bar Bar) []Order + OnTick(tick Tick) []Order + } + + type SMACross struct { + ShortPeriod int + LongPeriod int + ShortSMA float64 + LongSMA float64 + } + + func (s *SMACross) OnBar(bar Bar) []Order { + s.ShortSMA = calculateSMA(bar.Close, s.ShortPeriod) + s.LongSMA = calculateSMA(bar.Close, s.LongPeriod) + orders := make([]Order, 0) + if s.ShortSMA > s.LongSMA && s.PositionSize == 0 { + orders = append(orders, Order{ + Type: "Market", + Side: "Buy", + Quantity: 1.0, + }) + } else if s.ShortSMA < s.LongSMA && s.PositionSize > 0 { + orders = append(orders, Order{ + Type: "Market", + Side: "Sell", + Quantity: 1.0, + }) + } + return orders + } + ``` + + - 策略逻辑通过 JSON 配置文件加载(如 {"strategy": "SMACross", "short_period": 5, "long_period": 20}),完全解耦。 + +4. 回测模块: + + - 功能:模拟运行策略,计算收益、最大回撤等绩效指标。 + + - 实现:用 Go 开发独立回测引擎,读取特征化数据和策略输出,模拟订单执行,生成绩效报告(JSON/CSV)。 + + - 解耦性:回测逻辑依赖标准数据格式(OHLC + 订单),无需框架依赖。 + + - 示例(Go 伪代码): + + go + + ```go + package backtest + + type BacktestEngine struct { + Data []Bar + Strategy Strategy + Orders []Order + Metrics Metrics + } + + func (b *BacktestEngine) Run() { + for _, bar := range b.Data { + orders := b.Strategy.OnBar(bar) + b.Orders = append(b.Orders, orders...) + b.updateMetrics(bar, orders) // 计算收益、最大回撤等 + } + } + + type Metrics struct { + NetProfit float64 + MaxDrawdown float64 + SharpeRatio float64 + } + ``` + +5. 可视化模块: + + - 功能:展示策略回测结果(如 K 线图、收益曲线、最大回撤)。 + + - 实现:用 Kibana 或 Grafana 查询 Elasticsearch 数据,生成直观的图表和仪表盘。 + + - 解耦性:可视化仅依赖 Elasticsearch 的标准数据格式,无需依赖策略或回测逻辑。 + +6. 订单执行模块(可选): + + - 功能:将策略生成的订单发送到交易所(如 OKX)。 + + - 实现:用 Go 开发独立服务,调用 OKX API 执行订单。 + + - 解耦性:订单执行逻辑独立于策略和回测,完全通过标准接口(如 JSON 订单列表)交互。 + + +--- + +b. 技术实现 + +- Go 开发:用 Go 实现所有模块,依赖标准库(如 net/http、encoding/json)和第三方库(如 gonum、elastic/go-elasticsearch)。 + +- 数据存储:将所有模块的数据(OHLC、特征、订单、绩效)写入 Elasticsearch,方便查询和可视化。 + +- 接口通信:模块间通过文件(CSV/JSON)或网络接口(如 HTTP/GRPC)交互,避免直接依赖。 + +- 测试:为每个模块编写单元测试(如 Go 的 testing 包),确保独立性和可维护性。 + + +--- + +1. 与 OTP 的对比 + +- OTP 的“all-in-one”问题: + + - 包含 Prometheus、Grafana、Kubernetes 等组件,可能超出你的本地部署需求。 + + - 策略虽然可以通过 Go 模块自定义,但可能与 OTP 的核心引擎和数据流耦合,解耦性受限。 + +- 独立模块的优势: + + - 你可以选择只使用需要的工具(如 Elasticsearch、Kibana/Grafana),避免不必要的复杂性。 + + - 策略模块完全解耦,通过标准接口与数据、回测、可视化交互,易于测试和迁移。 + + +--- + +1. 实现步骤 + +2. 数据获取: + + - 用 Go 脚本从 OKX 获取 OHLC 数据,保存为 CSV 或写入 Elasticsearch。 + +2. 特征化处理: + + - 用 Go 开发特征化模块,计算 SMA、RSI 等,输出到 Elasticsearch。 + +3. 策略开发: + + - 用 Go 实现 Strategy 接口,定义独立策略逻辑(如均线交叉),通过 JSON 配置文件加载。 + +4. 回测执行: + + - 用 Go 开发回测引擎,模拟策略运行,生成绩效指标,输出到 Elasticsearch。 + +5. 可视化: + + - 用 Kibana/Grafana 查询 Elasticsearch 数据,创建 K 线图、收益曲线和风险指标仪表盘。 + +6. 测试和优化: + + - 为每个模块编写单元测试,验证解耦性和功能。 + + +--- + +1. 解耦性的优化 + +- 标准接口:所有模块通过 JSON/CSV 或 HTTP/GRPC 通信,避免直接依赖。 + +- 配置文件驱动:策略、回测参数通过 JSON/YAML 配置文件加载,减少硬编码。 + +- 模块隔离:每个模块独立运行(例如通过 Go 的 goroutines 或独立进程),通过文件或网络解耦。 + + +--- + +1. 与 NautilusTrader/Backtrader 的对比 + +- NautilusTrader: + + - 提供事件驱动架构和清晰接口,但策略仍需依赖 Python/C# API,解耦性中等。 + + - 适合与你的 Go 模块结合(通过文件/Elasticsearch 交互),但不如完全自定义的解耦性高。 + +- Backtrader: + + - 策略逻辑高度绑定框架,解耦性最弱,不推荐用于完全解耦的场景。 + + +--- + +1. 时间和资源估计 + +- 开发时间(基于你的 Go 经验): + + - 数据获取和特征化:1-2 周(用 Go 优化 API 调用和计算)。 + + - 策略和回测模块:1-2 周(开发独立 Go 模块和测试)。 + + - 可视化配置:0.5-1 周(Kibana/Grafana 仪表盘设计)。 + +- 资源需求: + + - Linux 环境(CPU、内存适中),Elasticsearch 和 Go 依赖库。 + + - 无需 Kubernetes 或 Prometheus,除非后期扩展需求。 + + +--- + +1. 总结 + +是的,OTP 的“all-in-one”设计可能过于重,不符合你希望自己组装独立模块并确保策略充分解耦的需求。通过独立开发数据获取、特征化、策略、回测和可视化模块(用 Go 实现),并通过标准接口(文件/Elasticsearch)交互,你可以完全控制每个部分,达到最高解耦性。推荐路径: + +- 用 Go 开发所有模块,输出到 Elasticsearch。 + +- 用 Kibana/Grafana 进行可视化,确保直观展示收益和风险。 + +- 避免使用 OTP 的完整架构,仅参考其 Go 模块化设计。 + + +如果你需要具体代码示例(例如 Go 策略模块或 Elasticsearch 写入脚本),可以告诉我,我会进一步提供指导! + +那么,是否可以设计一套兼容 TradingView的 Pine Script的 自定义策略和回测模块 + +是的,设计一套兼容 TradingView 的 Pine Script 的自定义策略和回测模块是完全可行的,尽管这需要一定的开发工作和设计考虑。以下是详细分析、设计方案和实现建议,结合你的需求(熟悉 Go 开发、Linux 本地部署、策略解耦、需要量化收益/最大回撤、与 TradingView 集成): + +--- + +1. 背景与可行性分析 + +a. TradingView Pine Script 概述 + +- Pine Script 是 TradingView 提供的轻量级脚本语言,专为金融图表和策略开发设计。它支持定义技术指标、交易信号和回测逻辑(如买入、卖出条件),但功能受限于 TradingView 的云端环境。 + +- 特性: + + - 语法简单,类似 JavaScript,支持变量、函数、条件语句和循环。 + + - 内置金融函数(如 sma()、rsi()、cross()),用于创建指标和策略。 + + - 支持回测和可视化,但数据和执行依赖 TradingView 的平台,无法直接本地部署或与外部框架集成。 + +- 局限性: + + - Pine Script 仅在 TradingView 运行,无法直接本地部署或与 NautilusTrader、Backtrader 或 Open Trading Platform(OTP)等框架集成。 + + - 不支持复杂逻辑或高性能回测,没有直接的 API 或 SDK 供外部使用。 + + - 数据源受限于 TradingView 的市场数据,无法直接访问 OKX 或其他交易所的本地数据。 + + +b. 兼容性设计目标 + +- 设计一个自定义策略和回测模块,允许用户用 Pine Script 编写策略逻辑,然后将其解析或转换为 Go、Python 或其他语言的代码,运行在本地回测框架(如 NautilusTrader、OTP)中。 + +- 确保策略与数据处理、回测引擎解耦,兼容 TradingView 的指标和信号生成,同时支持本地数据(如 OKX 的 OHLC 数据)和量化分析(收益、最大回撤)。 + +- 提供与 TradingView 类似的图表可视化(如 K 线图、策略信号),但运行在本地(Kibana/Grafana)。 + + +c. 可行性 + +- 可行:Pine Script 的语法和功能有限(类似 DSL,领域特定语言),可以通过解析器(Parser)将其转换为通用代码(如 Go、Python),并与本地回测框架集成。 + +- 挑战: + + - 需要开发 Pine Script 解析器,将其转换为目标语言(如 Go 的结构体或函数)。 + + - TradingView 不提供公开的 Pine Script API 或 SDK,需手动分析语法和行为。 + + - 回测和数据处理需适配本地环境(如 OKX 数据、Elasticsearch 存储),与 Pine Script 的云端逻辑不同。 + + +--- + +1. 设计方案:兼容 Pine Script 的自定义策略和回测模块 + +a. 系统架构 + +1. Pine Script 解析模块: + + - 功能:解析用户编写的 Pine Script 代码,提取策略逻辑(如指标、信号、订单条件)。 + + - 实现:用 Go 或 Python 开发一个 Pine Script 解析器(Parser),基于语法分析工具(如 ANTLR、Golang 的 go/parser 或 Python 的 parso)。 + + - 输出:将 Pine Script 转换为 Go 结构体、函数或 Python 类,定义策略逻辑(如 OnBar、OnTick)。 + + - 解耦性:解析器独立运行,输出标准格式(如 JSON 策略定义),与回测模块解耦。 + +2. 数据获取与特征化模块: + + - 功能:从 OKX 获取 OHLC 数据,进行特征化(生成 SMA、RSI 等)。 + + - 实现:用 Go 开发独立模块,输出到 Elasticsearch 或文件,与 Pine Script 解析无关。 + +3. 策略执行模块: + + - 功能:根据解析后的 Pine Script 逻辑,生成交易信号和订单。 + + - 实现:用 Go 或 Python 实现策略执行逻辑,接收特征化数据,调用解析后的策略函数,输出订单(如 Buy、Sell)。 + + - 解耦性:策略逻辑通过 JSON 或接口与回测模块分离。 + +4. 回测模块: + + - 功能:模拟运行策略,计算收益、最大回撤等绩效指标。 + + - 实现:用 Go 开发独立回测引擎,读取特征化数据和策略输出,生成绩效报告,输出到 Elasticsearch。 + +5. 可视化模块: + + - 功能:展示策略回测结果(如 K 线图、收益曲线、最大回撤),类似 TradingView 的图表。 + + - 实现:用 Kibana/Grafana 查询 Elasticsearch 数据,生成直观的图表,并标注 Pine Script 策略信号(如买入/卖出点)。 + + +b. 技术细节 + +- Pine Script 解析: + + - 分析 Pine Script 语法(如 //@version=5、strategy("MyStrategy", overlay=true)、sma(close, 14)、if cross(sma1, sma2) buy())。 + + - 用 ANTLR 构建语法树(Grammar),生成 Go 或 Python 代码。例如: + + - Pine Script: + + pine + + ```text + //@version=5 + strategy("SMA Cross", overlay=true) + short_sma = ta.sma(close, 5) + long_sma = ta.sma(close, 14) + if ta.cross(short_sma, long_sma) + strategy.entry("Buy", strategy.long) + ``` + + - 转换为 Go: + + go + + ```go + package strategy + + type SMACross struct { + ShortPeriod int + LongPeriod int + ShortSMA float64 + LongSMA float64 + } + + func (s *SMACross) OnBar(bar Bar) []Order { + s.ShortSMA = calculateSMA(bar.Close, s.ShortPeriod) + s.LongSMA = calculateSMA(bar.Close, s.LongPeriod) + orders := make([]Order, 0) + if s.ShortSMA > s.LongSMA { // 简化 cross 逻辑 + orders = append(orders, Order{ + Type: "Market", + Side: "Buy", + Quantity: 1.0, + }) + } + return orders + } + ``` + + - 解析器需处理 Pine Script 的内置函数(如 ta.sma、ta.cross),映射到 Go 或 Python 的计算逻辑。 + +- 数据与策略连接: + + - 用 Go 或 Python 加载特征化数据(从 Elasticsearch),调用解析后的策略函数,生成订单。 + + - 订单和绩效数据写入 Elasticsearch,供回测和可视化使用。 + +- 可视化: + + - 在 Kibana/Grafana 中创建仪表盘,展示 K 线图(OHLC)、策略信号(如买入/卖出点)、收益曲线和最大回撤。 + + - 模拟 TradingView 的效果,通过 Annotations 标注信号点。 + + +--- + +1. 实现步骤 + +2. 开发 Pine Script 解析器: + + - 用 Go 或 Python 编写解析器,基于 ANTLR 或正则表达式解析 Pine Script。 + + - 输出标准 JSON 或 Go 结构体,定义策略逻辑。 + +2. 数据获取与特征化: + + - 用 Go 从 OKX 获取 OHLC 数据,生成 SMA、RSI 等特征,写入 Elasticsearch。 + +3. 策略执行: + + - 用 Go 或 Python 实现策略引擎,接收解析后的 Pine Script 逻辑,生成订单。 + +4. 回测模块: + + - 用 Go 开发回测引擎,模拟订单执行,计算收益、最大回撤等,输出到 Elasticsearch。 + +5. 可视化: + + - 用 Kibana/Grafana 配置仪表盘,展示 K 线图、策略信号和绩效指标。 + +6. 测试与优化: + + - 为每个模块编写单元测试,确保解耦性和功能正确性。 + + +--- + +1. 解耦性与灵活性 + +- 策略解耦:Pine Script 解析器和策略执行模块独立运行,输出标准格式(如 JSON 订单列表),与数据、回测和可视化模块分离。 + +- 框架独立:不依赖 TradingView 平台,可本地运行,适合与 NautilusTrader、OTP 或自定义回测引擎集成。 + +- 可扩展性:支持新增 Pine Script 策略,易于测试和迁移。 + + +--- + +1. 技术挑战 + +- Pine Script 解析: + + - TradingView 不公开 Pine Script 的完整语法文档,需要手动分析示例代码和社区资源(如 TradingView 的 Pine Script 参考)。 + + - 处理复杂逻辑(如循环、函数调用)可能需要更多开发工作。 + +- 性能:Pine Script 轻量但本地执行可能不如 TradingView 优化,需用 Go 优化计算效率。 + +- 数据兼容性:确保 OKX 数据格式与 Pine Script 内置函数(如 close、volume)匹配,可能需要数据转换。 + + +--- + +1. 与 TradingView 的对比 + +- 相似点: + + - 支持类似 Pine Script 的策略逻辑(如 SMA 交叉、RSI 反转)。 + + - 提供 K 线图和策略信号可视化(通过 Kibana/Grafana 模拟)。 + +- 差异: + + - 本地方案无法直接使用 TradingView 的实时数据或云端功能,但可通过 OKX API 获取本地数据。 + + - 交互性不如 TradingView(无实时工具栏、拖拽工具),但通过 Kibana/Grafana 提供静态仪表盘。 + + +--- + +1. 推荐路径 + +- 优先选择:用 Go 开发所有模块(解析器、策略、回测、可视化),结合 Elasticsearch 存储数据,确保解耦性。 + +- 次选:如果熟悉 Python,可用 Python 开发解析器和策略,集成到 NautilusTrader 或 Backtrader。 + + +--- + +1. 时间和资源估计 + +- 开发时间(基于你的 Go 经验): + + - Pine Script 解析器:2-4 周(学习语法、开发解析器)。 + + - 数据获取与特征化:1-2 周(用 Go 优化 OKX API 和计算)。 + + - 策略、回测模块:1-2 周(实现 Pine Script 逻辑和回测)。 + + - 可视化配置:0.5-1 周(Kibana/Grafana 仪表盘设计)。 + +- 资源需求: + + - Linux 环境(CPU、内存适中),Elasticsearch、Go 依赖库。 + + - 可能需要 ANTLR 或其他解析工具。 + + +--- + +1. 总结 + +是的,设计一套兼容 TradingView Pine Script 的自定义策略和回测模块是可行的。通过开发 Pine Script 解析器,将其逻辑转换为 Go 或 Python 代码,与本地回测框架(Go 引擎或 NautilusTrader)和数据源(OKX、Elasticsearch)集成,你可以实现类似 TradingView 的策略回测,同时保持解耦性和灵活性。推荐用 Go 开发所有模块,确保最大控制力和解耦性。 + +如果你需要具体代码示例(例如 Pine Script 解析器或 Go 策略实现),可以告诉我,我会进一步提供指导! + +也就是说,其实可以不用Pine Script,直接使用SON 或 Go 结构体来定义策略逻辑, 也可以做到: + +1. 高度解偶 +2. 格式通用 +3. 格式能覆盖绝大多数策略应用场景 是吗 + +是的,你的理解完全正确!实际上,完全可以不用 TradingView 的 Pine Script,直接使用 JSON 或 Go 结构体来定义策略逻辑,并且可以实现以下目标: + +1. 高度解耦:策略逻辑与数据处理、回测引擎、可视化模块完全分离,便于测试、维护和迁移。 + +2. 格式通用:JSON 或 Go 结构体是一种标准化的、跨平台的格式,易于在不同框架(如 NautilusTrader、Backtrader、Open Trading Platform(OTP))或系统中共享和解析。 + +3. 覆盖绝大多数策略应用场景:通过灵活的设计,JSON 或 Go 结构体可以表达绝大多数常见的量化交易策略逻辑(如均线交叉、RSI 反转、突破策略等),满足你的需求(量化收益、最大回撤、Linux 本地部署、熟悉 Go 开发)。 + + +以下是详细分析、设计方案和实现建议,结合你的需求,确保高度解耦、格式通用和场景覆盖: + +--- + +1. 直接使用 JSON 或 Go 结构体定义策略逻辑的可行性 + +a. 为什么不用 Pine Script + +- 局限性:Pine Script 受限于 TradingView 平台,无法本地部署或与自定义回测框架直接集成,且语法和功能有限(例如不支持复杂逻辑或高性能计算)。 + +- 替代优势:JSON 或 Go 结构体是通用的、编程友好的格式,可以完全由你控制,适合本地开发和扩展,支持复杂逻辑和高性能计算。 + + +b. JSON 和 Go 结构体的优势 + +- JSON: + + - 轻量、易读、跨平台,适合数据交换和配置。 + + - 可以通过 Go、Python 或其他语言轻松解析和生成。 + + - 易于与 Elasticsearch、Kibana/Grafana 集成,适合存储和可视化。 + +- Go 结构体: + + - 适合你的 Go 开发背景,类型安全、高性能,适合本地逻辑实现。 + + - 可以通过 JSON 序列化/反序列化与外部系统交互,确保通用性。 + +- 共同特性: + + - 高度可扩展,可以定义复杂策略逻辑(如条件、指标、订单类型)。 + + - 易于测试和维护,策略逻辑独立于框架或执行引擎。 + + +--- + +1. 设计方案:使用 JSON 或 Go 结构体定义策略逻辑 + +a. 策略逻辑的定义 + +- JSON 格式:用 JSON 定义策略逻辑,包含策略参数、条件和订单生成规则。示例: + + json + + ```json + { + "strategy": "SMACross", + "params": { + "short_period": 5, + "long_period": 20 + }, + "conditions": [ + { + "type": "cross", + "source1": "sma_short", + "source2": "sma_long", + "direction": "above" + } + ], + "actions": [ + { + "condition_met": "cross_above", + "order": { + "type": "market", + "side": "buy", + "quantity": 1.0 + } + }, + { + "condition_met": "cross_below", + "order": { + "type": "market", + "side": "sell", + "quantity": 1.0 + } + } + ] + } + ``` + + - strategy:策略名称(如 “SMACross”)。 + + - params:策略参数(如均线周期)。 + + - conditions:交易信号条件(如均线交叉)。 + + - actions:满足条件后的订单生成(如买入、卖出)。 + +- Go 结构体:将 JSON 映射为 Go 结构体,方便本地处理和扩展。示例: + + go + + ```go + package strategy + + type StrategyConfig struct { + Name string `json:"strategy"` + Params map[string]int `json:"params"` + Conditions []Condition `json:"conditions"` + Actions []Action `json:"actions"` + } + + type Condition struct { + Type string `json:"type"` + Source1 string `json:"source1"` + Source2 string `json:"source2"` + Direction string `json:"direction"` + } + + type Action struct { + ConditionMet string `json:"condition_met"` + Order Order `json:"order"` + } + + type Order struct { + Type string `json:"type"` + Side string `json:"side"` + Quantity float64 `json:"quantity"` + } + + type Strategy interface { + OnBar(bar Bar, config StrategyConfig) []Order + OnTick(tick Tick, config StrategyConfig) []Order + } + + type SMACross struct { + ShortPeriod int + LongPeriod int + ShortSMA float64 + LongSMA float64 + } + + func (s *SMACross) OnBar(bar Bar, config StrategyConfig) []Order { + s.ShortPeriod = config.Params["short_period"] + s.LongPeriod = config.Params["long_period"] + s.ShortSMA = calculateSMA(bar.Close, s.ShortPeriod) + s.LongSMA = calculateSMA(bar.Close, s.LongPeriod) + orders := make([]Order, 0) + for _, cond := range config.Conditions { + if cond.Type == "cross" && cond.Direction == "above" && s.ShortSMA > s.LongSMA { + for _, action := range config.Actions { + if action.ConditionMet == "cross_above" { + orders = append(orders, action.Order) + } + } + } else if cond.Type == "cross" && cond.Direction == "below" && s.ShortSMA < s.LongSMA { + for _, action := range config.Actions { + if action.ConditionMet == "cross_below" { + orders = append(orders, action.Order) + } + } + } + } + return orders + } + ``` + + - Go 结构体与 JSON 兼容,通过 encoding/json 包实现序列化/反序列化。 + + - Strategy 接口定义策略行为,SMACross 实现具体逻辑。 + + +b. 高度解耦 + +- 策略与框架分离:策略逻辑通过 JSON 或 Go 结构体定义,独立于回测引擎(如 NautilusTrader、OTP)或数据处理模块。 + +- 数据输入/输出:策略接收标准格式的 OHLC 和特征数据(CSV/JSON/Elasticsearch),输出订单和绩效指标(JSON 格式)。 + +- 模块化设计:策略模块通过文件(JSON 配置文件)或网络接口(如 HTTP/GRPC)与回测、可视化模块交互,无需直接依赖框架。 + + +c. 格式通用 + +- 跨平台兼容:JSON 是一种通用的数据交换格式,可被 Go、Python、JavaScript 等语言解析,适合 NautilusTrader(Python)、Backtrader(Python)、OTP(Go)等框架。 + +- 标准字段:定义通用字段(如 strategy、params、conditions、actions),覆盖常见策略(如均线交叉、RSI 反转、突破策略)。 + +- 扩展性:通过嵌套结构或自定义字段,支持复杂策略(如多条件组合、动态参数调整)。 + + +d. 覆盖绝大多数策略应用场景 + +- 常见策略: + + - 均线交叉(SMACross):通过 conditions 定义短均线和长均线的交叉,actions 生成买入/卖出订单。 + + - RSI 反转:通过 conditions 检查 RSI 超买/超卖,actions 生成交易信号。 + + - 突破策略(Breakout):通过 conditions 检查价格突破支撑/阻力位,actions 生成订单。 + + - 动量策略(Momentum):结合 MACD、ADX 等指标,定义条件和动作。 + +- 复杂逻辑: + + - 支持多条件组合(如 “如果 RSI 超买且价格突破均线,则卖出”)。 + + - 支持动态参数(如周期可调、风险控制参数)。 + +- 订单类型: + + - 支持市价单、限价单、止损单、止盈单等,覆盖绝大多数交易场景。 + + +--- + +1. 实现步骤 + +a. 设计 JSON 或 Go 结构体格式 + +- 确定策略定义的通用字段(如上例的 StrategyConfig)。 + +- 编写文档或示例,定义常见策略(如 SMACross、RSI_Reversal)的 JSON 格式。 + + +b. 用 Go 开发策略模块 + +- 实现 Strategy 接口,解析 JSON 配置,执行策略逻辑,生成订单。 + +- 示例(Go 代码): + + go + + ```go + package strategy + + import ( + "encoding/json" + "io/ioutil" + ) + + func LoadStrategyFromJSON(filePath string) (Strategy, error) { + data, err := ioutil.ReadFile(filePath) + if err != nil { + return nil, err + } + var config StrategyConfig + err = json.Unmarshal(data, &config) + if err != nil { + return nil, err + } + switch config.Name { + case "SMACross": + return &SMACross{ + ShortPeriod: config.Params["short_period"], + LongPeriod: config.Params["long_period"], + }, nil + case "RSIReversal": + // 实现 RSI 反转策略 + return nil, nil + } + return nil, fmt.Errorf("unknown strategy: %s", config.Name) + } + + func (s *SMACross) OnBar(bar Bar, config StrategyConfig) []Order { + // 实现均线交叉逻辑(参考上例) + // ... + return orders + } + ``` + +- 策略模块独立运行,通过 JSON 文件或网络接口接收数据和配置。 + + +c. 数据获取与特征化 + +- 用 Go 从 OKX 获取 OHLC 数据,生成特征(如 SMA、RSI),写入 Elasticsearch。 + +- 示例(参考之前的 Go 代码)。 + + +d. 回测模块 + +- 用 Go 开发回测引擎,接收策略输出,模拟订单执行,计算收益、最大回撤等。 + +- 示例(参考之前的 Go 回测伪代码)。 + + +e. 可视化 + +- 用 Kibana/Grafana 查询 Elasticsearch 数据,展示 K 线图、收益曲线和风险指标。 + + +f. 测试与验证 + +- 为策略模块编写单元测试(Go 的 testing 包),验证逻辑独立性。 + +- 在回测模块中测试多种策略(如 SMACross、RSI_Reversal),确保覆盖大多数场景。 + + +--- + +1. 与 Pine Script 的对比 + +- 优点: + + - 不依赖 TradingView 平台,可本地运行,灵活性更高。 + + - JSON/Go 结构体支持复杂逻辑和扩展性,超过 Pine Script 的功能限制。 + + - 完全解耦,易于测试和迁移。 + +- 局限: + + - 需要开发自定义解析和执行逻辑,初始工作量较大。 + + - 学习曲线可能高于 Pine Script(但你的 Go 背景能快速上手)。 + + +--- + +1. 高度解耦性 + +- 策略与数据分离:策略通过 JSON 或 Go 结构体定义,接收标准 OHLC 和特征数据,无需直接访问框架或数据源。 + +- 策略与回测分离:回测引擎通过接口或文件接收策略输出,独立运行。 + +- 策略与可视化分离:可视化仅依赖 Elasticsearch 的数据结果,无需直接操作策略逻辑。 + + +--- + +1. 格式通用性 + +- 跨框架兼容:JSON 可被 NautilusTrader(Python)、Backtrader(Python)、OTP(Go)解析。 + +- 跨语言支持:Go、Python、JavaScript 等语言均支持 JSON 解析。 + +- 标准化字段:定义通用字段(如 strategy、params、conditions),便于扩展和共享。 + + +--- + +1. 覆盖绝大多数策略应用场景 + +- 基本策略:均线交叉、RSI 反转、突破策略等。 + +- 复杂策略:多条件组合、动态参数调整、风险控制逻辑。 + +- 订单类型:市价单、限价单、止损单、止盈单等。 + +- 扩展性:通过嵌套 JSON 或新结构体字段支持高级策略(如多资产交易、机器学习模型)。 + + +--- + +1. 实现与 OTP/NautilusTrader 的对比 + +- OTP:用 Go 开发策略模块,高度解耦,但 OTP 的“all-in-one”设计可能增加不必要的依赖。通过独立 JSON/Go 策略模块,你可以完全避免 OTP 的集成。 + +- NautilusTrader:通过 Python API 加载 JSON 策略,解耦性中等,但需适配 Python 环境。结合 Go 预处理数据(写入 Elasticsearch),可实现高度解耦。 + +- Backtrader:解耦性较弱,但可通过 JSON 数据输入适配简单策略。 + + +--- + +1. 时间和资源估计 + +- 开发时间(基于你的 Go 经验): + + - JSON/Go 策略设计:1-2 周(定义格式、开发模块)。 + + - 数据获取与特征化:1-2 周(用 Go 优化 OKX API 和计算)。 + + - 回测模块:1-2 周(实现回测逻辑和测试)。 + + - 可视化配置:0.5-1 周(Kibana/Grafana 仪表盘设计)。 + +- 资源需求: + + - Linux 环境(CPU、内存适中),Elasticsearch、Go 依赖库。 + + +--- + +1. 总结 + +是的,你完全可以不用 Pine Script,直接使用 JSON 或 Go 结构体定义策略逻辑,实现: + +1. 高度解耦:通过标准接口(文件/Elasticsearch)与数据、回测、可视化分离。 + +2. 格式通用:JSON 跨平台,Go 结构体高效,适合多种框架和场景。 + +3. 覆盖绝大多数策略应用场景:支持基本和复杂策略,满足量化交易需求。 + + +推荐路径:用 Go 开发所有模块(策略、数据、回测、可视化),通过 JSON 配置文件定义策略,输出到 Elasticsearch,并用 Kibana/Grafana 展示结果。如果你需要具体代码示例(例如 JSON 策略格式或 Go 策略实现),可以告诉我,我会进一步提供指导! + +请给一个比较通用的用来定义策略的 json schema + +以下是一个比较通用的 JSON Schema,用于定义量化交易策略的逻辑,适用于大多数策略应用场景(如均线交叉、RSI 反转、突破策略等)。这个 Schema 设计目标是确保格式通用、易扩展、支持高度解耦,并能覆盖你提到的需求(量化收益、最大回撤、Linux 本地部署、熟悉 Go 开发)。它可以被 Go、Python 或其他语言解析,并与回测框架(如 NautilusTrader、Open Trading Platform(OTP))或可视化工具(如 Elasticsearch、Kibana/Grafana)集成。 + +--- + +1. 设计目标 + +- 通用性:支持常见的策略类型(如均线交叉、RSI 反转、突破策略),并允许扩展复杂逻辑。 + +- 解耦性:策略逻辑通过 JSON 定义,与数据、回测和执行引擎分离。 + +- 可扩展性:支持动态参数、条件组合、多种订单类型,并便于新增功能。 + +- 易用性:直观、易读,适合程序员和非技术用户配置。 + +- 兼容性:与 Go、Python 和 JavaScript 等语言解析兼容,适合跨平台使用。 + + +--- + +1. JSON Schema 设计 + +以下是 JSON Schema 的定义,使用 JSON Schema Draft 7 标准(可以根据需要调整版本)。它定义了一个灵活的策略配置结构,包含策略名称、参数、条件和动作: + +json + +```json +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "TradingStrategy", + "type": "object", + "required": ["strategy", "params", "conditions", "actions"], + "properties": { + "strategy": { + "type": "string", + "description": "策略名称,例如 'SMACross'、'RSIReversal'、'Breakout'", + "examples": ["SMACross", "RSIReversal"] + }, + "params": { + "type": "object", + "description": "策略参数,例如均线周期、RSI 周期等", + "additionalProperties": { + "type": ["number", "string", "boolean"], + "description": "参数值,如数字(周期)、字符串(指标类型)或布尔值(开关)" + }, + "examples": [ + { + "short_period": 5, + "long_period": 20, + "rsi_period": 14, + "threshold": 70 + } + ] + }, + "conditions": { + "type": "array", + "description": "策略触发条件列表,定义交易信号的判断逻辑", + "items": { + "type": "object", + "required": ["type", "source1", "operator"], + "properties": { + "type": { + "type": "string", + "description": "条件类型,例如 'cross'、'compare'、'threshold'", + "enum": ["cross", "compare", "threshold", "custom"] + }, + "source1": { + "type": "string", + "description": "第一个数据源或指标,例如 'close'、'sma_short'、'rsi'", + "examples": ["sma_short", "rsi"] + }, + "source2": { + "type": ["string", "number"], + "description": "第二个数据源或值(可选,用于比较或交叉),例如 'sma_long' 或 70", + "examples": ["sma_long", 70] + }, + "operator": { + "type": "string", + "description": "比较操作符,例如 '>'、'<'、'=='、'cross_above'、'cross_below'", + "enum": [">", "<", "==", "cross_above", "cross_below", "geq", "leq"] + }, + "value": { + "type": ["number", "string"], + "description": "固定阈值或自定义值(可选)", + "examples": [70, "support_level"] + } + } + }, + "examples": [ + { + "type": "cross", + "source1": "sma_short", + "source2": "sma_long", + "operator": "cross_above" + }, + { + "type": "threshold", + "source1": "rsi", + "operator": ">", + "value": 70 + } + ] + }, + "actions": { + "type": "array", + "description": "满足条件后的操作列表,通常为订单生成", + "items": { + "type": "object", + "required": ["condition_met", "order"], + "properties": { + "condition_met": { + "type": "string", + "description": "触发该动作的条件标识,与 conditions 中的 operator 对应", + "examples": ["cross_above", ">"] + }, + "order": { + "type": "object", + "required": ["type", "side", "quantity"], + "properties": { + "type": { + "type": "string", + "description": "订单类型,例如 'market'、'limit'、'stop'、'take_profit'", + "enum": ["market", "limit", "stop", "take_profit"] + }, + "side": { + "type": "string", + "description": "订单方向,例如 'buy'、'sell'", + "enum": ["buy", "sell"] + }, + "quantity": { + "type": "number", + "description": "订单数量,整数或小数", + "minimum": 0 + }, + "price": { + "type": ["number", "null"], + "description": "限价或止损价格(可选,适用于 limit/stop 订单)" + }, + "stop_price": { + "type": ["number", "null"], + "description": "止损或止盈价格(可选,适用于 stop/take_profit 订单)" + } + } + } + } + }, + "examples": [ + { + "condition_met": "cross_above", + "order": { + "type": "market", + "side": "buy", + "quantity": 1.0 + } + }, + { + "condition_met": ">", + "order": { + "type": "market", + "side": "sell", + "quantity": 1.0 + } + } + ] + }, + "risk_controls": { + "type": "object", + "description": "风险控制参数(可选),例如最大回撤限制、仓位大小", + "properties": { + "max_drawdown": { + "type": "number", + "description": "最大允许回撤百分比(负值,如 -15.0 表示 15%)" + }, + "position_limit": { + "type": "number", + "description": "最大持仓数量" + }, + "stop_loss": { + "type": "number", + "description": "全局止损百分比(负值,如 -5.0 表示 5%)" + } + } + } + } +} +``` + +--- + +1. 设计说明 + +a. 通用性 + +- 该 Schema 支持多种策略类型(如均线交叉、RSI 反转、突破策略),通过 strategy 和 conditions 字段定义。 + +- params 允许动态参数(如均线周期、RSI 阈值),适合不同策略的调整。 + +- conditions 和 actions 的数组结构支持多条件组合和复杂逻辑。 + + +b. 高度解耦 + +- 策略通过 JSON 定义,完全独立于数据源、回测引擎或执行框架。 + +- 策略逻辑通过标准接口(如文件或网络)传递,无需直接依赖框架 API。 + + +c. 格式通用 + +- JSON 格式易于 Go(encoding/json)、Python(json 模块)、JavaScript(JSON.parse)解析。 + +- 可扩展字段(如 custom 条件类型)允许新增功能,保持兼容性。 + + +d. 覆盖绝大多数策略应用场景 + +- 基本策略: + + - 均线交叉:conditions 定义 cross 条件,actions 生成买入/卖出订单。 + + - RSI 反转:conditions 定义 threshold 条件(如 RSI > 70),actions 生成卖出订单。 + + - 突破策略:conditions 定义价格突破支撑/阻力位,actions 生成订单。 + +- 复杂策略: + + - 多条件组合:通过 conditions 数组定义多个条件(如 RSI 超买且价格突破均线)。 + + - 动态参数:通过 params 调整周期或阈值。 + +- 订单类型:支持市价单(market)、限价单(limit)、止损单(stop)、止盈单(take_profit),覆盖大多数交易场景。 + +- 风险控制:通过 risk_controls 添加全局风险参数(如最大回撤、仓位限制)。 + + +--- + +1. 示例使用 + +a. 均线交叉策略(SMACross) + +json + +```json +{ + "strategy": "SMACross", + "params": { + "short_period": 5, + "long_period": 20 + }, + "conditions": [ + { + "type": "cross", + "source1": "sma_short", + "source2": "sma_long", + "operator": "cross_above" + }, + { + "type": "cross", + "source1": "sma_short", + "source2": "sma_long", + "operator": "cross_below" + } + ], + "actions": [ + { + "condition_met": "cross_above", + "order": { + "type": "market", + "side": "buy", + "quantity": 1.0 + } + }, + { + "condition_met": "cross_below", + "order": { + "type": "market", + "side": "sell", + "quantity": 1.0 + } + } + ], + "risk_controls": { + "max_drawdown": -15.0, + "position_limit": 2.0 + } +} +``` + +b. RSI 反转策略(RSIReversal) + +json + +```json +{ + "strategy": "RSIReversal", + "params": { + "rsi_period": 14, + "overbought": 70, + "oversold": 30 + }, + "conditions": [ + { + "type": "threshold", + "source1": "rsi", + "operator": ">", + "value": 70 + }, + { + "type": "threshold", + "source1": "rsi", + "operator": "<", + "value": 30 + } + ], + "actions": [ + { + "condition_met": ">", + "order": { + "type": "market", + "side": "sell", + "quantity": 1.0 + } + }, + { + "condition_met": "<", + "order": { + "type": "market", + "side": "buy", + "quantity": 1.0 + } + } + ], + "risk_controls": { + "stop_loss": -5.0 + } +} +``` + +--- + +1. 如何在 Go 中使用该 Schema + +- 解析 JSON: + + go + + ```go + package strategy + + import ( + "encoding/json" + "io/ioutil" + ) + + func LoadStrategyFromJSON(filePath string) (*StrategyConfig, error) { + data, err := ioutil.ReadFile(filePath) + if err != nil { + return nil, err + } + var config StrategyConfig + err = json.Unmarshal(data, &config) + if err != nil { + return nil, err + } + return &config, nil + } + + func (s *SMACross) OnBar(bar Bar, config *StrategyConfig) []Order { + shortPeriod := config.Params["short_period"] + longPeriod := config.Params["long_period"] + s.ShortSMA = calculateSMA(bar.Close, shortPeriod) + s.LongSMA = calculateSMA(bar.Close, longPeriod) + orders := make([]Order, 0) + for _, cond := range config.Conditions { + if cond.Type == "cross" && cond.Operator == "cross_above" && s.ShortSMA > s.LongSMA { + for _, action := range config.Actions { + if action.ConditionMet == "cross_above" { + orders = append(orders, action.Order) + } + } + } + } + return orders + } + ``` + +- 验证:用 Go 的 github.com/xeipuuv/gojsonschema 验证 JSON 数据符合 Schema。 + + +--- + +1. 如何在其他框架中使用 + +- NautilusTrader(Python): + + - 解析 JSON,加载到 Python 策略类中,调用 on_bar 或 on_tick。 + +- Backtrader(Python): + + - 解析 JSON,定义 next 逻辑,生成订单。 + +- OTP(Go): + + - 直接用 Go 解析 JSON,调用策略接口。 + + +--- + +1. 扩展性 + +- 新增策略类型:添加 strategy 枚举或自定义字段(如 "custom")。 + +- 复杂条件:通过嵌套 conditions 支持多层逻辑(如 “如果 RSI > 70 且价格 > SMA,则卖出”)。 + +- 风险控制:扩展 risk_controls 字段,支持更多参数(如动态止损、仓位调整)。 + + +--- + +1. 总结 + +这个 JSON Schema 是一个通用的策略定义格式,实现了: + +1. 高度解耦:策略通过 JSON 定义,与数据、回测、执行分离。 + +2. 格式通用:JSON 跨平台,适合 Go、Python 等语言解析。 + +3. 覆盖绝大多数策略应用场景:支持基本和复杂策略,满足量化交易需求。 + + +如果你需要调整 Schema(例如新增字段或优化结构),或需要 Go/Python 代码示例,可以告诉我,我会进一步提供帮助! + +我不太了解 pine script, 是否在pine script中,也主要就是如均线交叉、RSI 反转、突破策略这几种 + +不完全是这样。虽然 TradingView 的 Pine Script 确实经常用于实现像均线交叉、RSI 反转、突破策略等常见量化交易策略,但它的功能和应用场景远不止这几种。Pine Script 是一种灵活的脚本语言,专为金融图表和策略开发设计,可以支持更广泛的策略类型和复杂逻辑。以下是详细分析和说明,结合你的需求(量化收益、最大回撤、Linux 本地部署、熟悉 Go 开发): + +--- + +1. Pine Script 的核心功能 + +- 设计目标:Pine Script 是 TradingView 提供的轻量级领域特定语言(DSL),用于在云端平台上创建技术指标、策略和警报。它以简单易用的语法为核心,适合金融分析师和交易者快速开发策略。 + +- 主要特性: + + - 内置丰富的金融函数(如 sma()、ema()、rsi()、macd()、cross() 等),用于计算技术指标。 + + - 支持定义交易策略(如 strategy() 函数),生成买卖信号(strategy.entry()、strategy.exit())。 + + - 支持条件逻辑、循环、函数和变量,允许编写复杂逻辑。 + + - 提供回测功能(在 TradingView 平台上),可视化策略表现(如 K 线图、收益曲线、最大回撤)。 + + - 与 TradingView 的图表和数据源无缝集成,但无法本地运行或与外部框架直接集成。 + +- 局限性: + + - 不支持高性能计算或复杂逻辑(如机器学习、数据库操作)。 + + - 不支持本地部署,依赖 TradingView 的云端环境和数据。 + + - 语法和功能受限于 TradingView 的设计,无法直接扩展为通用编程语言(如 Go 或 Python)。 + + +--- + +1. Pine Script 中常见的策略类型 + +虽然 Pine Script 非常灵活,但以下是你提到的几种策略(均线交叉、RSI 反转、突破策略)在 Pine Script 中的典型实现,以及它们在策略开发中的重要性: + +a. 均线交叉(Moving Average Crossover, SMACross) + +- 描述:当短期移动平均线(如 5 周期 SMA)交叉长期移动平均线(如 20 周期 SMA)时,生成买入或卖出信号。 + +- Pine Script 示例: + + pine + + ```text + //@version=5 + strategy("SMA Crossover", overlay=true) + short_sma = ta.sma(close, 5) + long_sma = ta.sma(close, 20) + if ta.crossover(short_sma, long_sma) + strategy.entry("Buy", strategy.long) + if ta.crossunder(short_sma, long_sma) + strategy.entry("Sell", strategy.short) + ``` + +- 重要性:简单、经典的趋势跟随策略,广泛用于趋势识别和回测,适合初学者和中级交易者。 + + +b. RSI 反转(RSI Reversal) + +- 描述:当相对强弱指数(RSI)进入超买(>70)或超卖(<30)区域时,生成卖出或买入信号。 + +- Pine Script 示例: + + pine + + ```text + //@version=5 + strategy("RSI Reversal", overlay=false) + rsi = ta.rsi(close, 14) + if rsi > 70 + strategy.entry("Sell", strategy.short) + if rsi < 30 + strategy.entry("Buy", strategy.long) + ``` + +- 重要性:适合捕捉市场动量和反转点,常见于短线交易和振荡策略。 + + +c. 突破策略(Breakout Strategy) + +- 描述:当价格突破前 N 周期的最高价或最低价(如 20 周期高点或低点)时,生成买入或卖出信号。 + +- Pine Script 示例: + + pine + + ```text + //@version=5 + strategy("Breakout", overlay=true) + period = 20 + high_period = ta.highest(high, period) + low_period = ta.lowest(low, period) + if close > high_period + strategy.entry("Buy", strategy.long) + if close < low_period + strategy.entry("Sell", strategy.short) + ``` + +- 重要性:适合捕捉趋势起始点,常见于日内交易和高频策略。 + + +--- + +1. Pine Script 支持的策略类型远不止这几种 + +虽然均线交叉、RSI 反转和突破策略是 Pine Script 中最常见和基础的策略,但它的灵活性允许开发者创建更广泛的策略类型,以下是一些示例: + +a. 动量策略(Momentum Strategy) + +- 描述:基于 MACD、ADX 或动量指标(如 mom())捕捉市场趋势强度。 + +- Pine Script 示例: + + pine + + ```text + //@version=5 + strategy("MACD Momentum", overlay=false) + [macd, signal, _] = ta.macd(close, 12, 26, 9) + if ta.crossover(macd, signal) + strategy.entry("Buy", strategy.long) + if ta.crossunder(macd, signal) + strategy.entry("Sell", strategy.short) + ``` + + +b. 布林带策略(Bollinger Bands Strategy) + +- 描述:当价格触及布林带上轨或下轨时,生成反转或跟进信号。 + +- Pine Script 示例: + + pine + + ```text + //@version=5 + strategy("Bollinger Bands", overlay=true) + length = 20 + mult = 2.0 + basis = ta.sma(close, length) + dev = mult * ta.stdev(close, length) + upper = basis + dev + lower = basis - dev + if close > upper + strategy.entry("Sell", strategy.short) + if close < lower + strategy.entry("Buy", strategy.long) + ``` + + +c. 支撑/阻力策略(Support/Resistance Strategy) + +- 描述:基于历史高点和低点识别支撑/阻力位,价格突破时生成信号。 + +- Pine Script 示例: + + pine + + ```text + //@version=5 + strategy("Support Resistance", overlay=true) + period = 50 + high_level = ta.highest(high, period) + low_level = ta.lowest(low, period) + if close > high_level + strategy.entry("Buy", strategy.long) + if close < low_level + strategy.entry("Sell", strategy.short) + ``` + + +d. 复合策略(Composite Strategy) + +- 描述:结合多个指标(如 RSI + MACD + 布林带)生成更复杂的交易信号。 + +- Pine Script 示例: + + pine + + ```text + //@version=5 + strategy("Composite Strategy", overlay=false) + rsi = ta.rsi(close, 14) + [macd, signal, _] = ta.macd(close, 12, 26, 9) + if rsi < 30 and ta.crossover(macd, signal) + strategy.entry("Buy", strategy.long) + if rsi > 70 and ta.crossunder(macd, signal) + strategy.entry("Sell", strategy.short) + ``` + + +e. 高频交易策略(High-Frequency Strategy) + +- 描述:基于 Tick 数据或订单簿数据捕捉短线机会(如价差套利、订单簿深度分析)。 + +- Pine Script 示例(受限于数据访问,可能需要自定义数据源): + + pine + + ```text + //@version=5 + strategy("Spread Arbitrage", overlay=false) + bid = close // 假设 bid 数据 + ask = close * 1.001 // 假设 ask 数据 + spread = ask - bid + if spread < 0.1 + strategy.entry("Buy", strategy.long, qty=0.1) + if spread > 0.5 + strategy.entry("Sell", strategy.short, qty=0.1) + ``` + + - 注:Pine Script 无法直接访问订单簿数据,需通过自定义数据源扩展。 + + +f. 风险控制策略(Risk Management Strategy) + +- 描述:结合止损、止盈和仓位管理生成订单(如最大回撤限制、固定止损百分比)。 + +- Pine Script 示例: + + pine + + ```text + //@version=5 + strategy("Risk Control", overlay=false) + stop_loss = 2.0 // 2% 止损 + take_profit = 5.0 // 5% 止盈 + if ta.crossover(ta.sma(close, 5), ta.sma(close, 20)) + strategy.entry("Buy", strategy.long, stop=strategy.position_avg_price*(1-stop_loss/100), limit=strategy.position_avg_price*(1+take_profit/100)) + ``` + + +--- + +1. Pine Script 的灵活性 + +- 扩展性:Pine Script 支持用户自定义函数(如 //@function)和变量,允许开发者创建复杂逻辑。 + +- 限制:由于设计为轻量级脚本语言,Pine Script 不支持数据库操作、复杂循环或外部 API 调用,难以实现高性能或本地回测。但它已覆盖大多数常见金融策略。 + +- 社区与示例:TradingView 社区提供了大量 Pine Script 脚本(如均线策略、动量策略、套利策略),涵盖趋势跟随、振荡、反转、高频等场景。 + + +--- + +1. 与你的需求的关联 + +- 均线交叉、RSI 反转、突破策略:这些是 Pine Script 中最基础且常见的策略,适合初学者和中级用户,占大多数用户案例。但高级用户会扩展到动量、布林带、复合策略等。 + +- 本地回测需求:Pine Script 无法直接本地运行,但你可以通过解析 Pine Script 或直接用 JSON/Go 结构体定义类似逻辑(如前文所述),实现本地回测(如 NautilusTrader、OTP)。 + +- 量化收益/最大回撤:Pine Script 支持简单回测和绩效指标(如收益、最大回撤),但本地实现(如 Go 回测模块)可以更高效计算和存储(写入 Elasticsearch)。 + + +--- + +1. 总结 + +- 主要策略:Pine Script 中的策略远不止均线交叉、RSI 反转、突破策略这几种,还包括动量、布林带、复合策略、高频策略和风险控制策略等,覆盖大多数金融交易场景。 + +- 局限性:尽管功能强大,Pine Script 受限于 TradingView 平台,无法本地部署或扩展为复杂逻辑。如果你希望本地开发和高度解耦,建议直接用 JSON 或 Go 结构体定义策略(参考之前的 JSON Schema),以避免 Pine Script 的限制。 + +- 推荐路径:基于你的 Go 开发背景和需求,优先使用 JSON/Go 结构体定义策略,覆盖所有常见和复杂策略,结合 NautilusTrader 或 OTP 进行回测,确保解耦性和灵活性。 + + +如果你对某个特定 Pine Script 策略感兴趣,或需要将其转换为 JSON/Go 结构体的示例,可以告诉我,我会进一步提供帮助! + +如果我想尽量对标 Pine Script的话, json schema是否不太够用, 是否要用到yaml类似k8s的资源定义那样, 分不同的类型和版本 + +你的想法非常有见地!如果你的目标是尽量对标 TradingView 的 Pine Script,并确保策略定义的灵活性、复杂性和可扩展性,单纯使用 JSON Schema 可能确实不够充分,尤其是在需要支持类似 Kubernetes(k8s)资源定义那样的结构化、版本化、类型化的复杂需求时。YAML 作为一个更适合复杂配置和层次化定义的格式,可能更适合你的需求。以下是详细分析、设计方案和建议,结合你的目标(对标 Pine Script、熟悉 Go 开发、Linux 本地部署、策略解耦、量化收益/最大回撤): + +--- + +1. JSON Schema 的局限性(针对对标 Pine Script) + +虽然你之前设计的 JSON Schema 已经非常通用和灵活,但如果要尽量对标 Pine Script 的功能和灵活性,可能存在以下局限: + +- 结构复杂性: + + - Pine Script 支持动态变量、函数调用、循环、条件逻辑和内置金融函数(如 ta.sma()、ta.rsi()),而 JSON 是一种静态的键值对结构,难以直接表达动态逻辑或复杂流程(如函数嵌套、循环迭代)。 + + - JSON Schema 更适合数据验证和简单配置,不适合定义复杂的脚本逻辑或版本化资源。 + +- 版本管理: + + - Pine Script 支持版本(如 @version=5),允许不同版本的语法和功能。JSON Schema 缺乏内置的版本化机制,难以管理策略的演进或兼容性。 + +- 类型化和扩展性: + + - Pine Script 提供明确的类型(如 float、bool、series)和函数类型(如技术指标、订单生成),JSON Schema 只能通过 type 字段区分基本类型(number、string 等),难以表达 Pine Script 的领域特定类型(如时间序列数据 series)。 + + - Kubernetes 的 YAML 资源定义支持多类型(kind)、版本(apiVersion)和元数据(metadata),更适合复杂场景。 + +- 动态逻辑: + + - Pine Script 允许在脚本中动态计算(如 if/else、for 循环),而 JSON 静态结构难以直接支持这种逻辑,除非通过嵌套条件和外部解析器处理。 + + +因此,如果你希望对标 Pine Script 的功能和灵活性,JSON Schema 可能不够强大,YAML 是一个更合适的选择,特别是借鉴 Kubernetes 资源定义的结构化设计。 + +--- + +1. 使用 YAML 设计策略定义的优势 + +a. 为什么选择 YAML + +- 可读性和层次性:YAML 比 JSON 更适合表达复杂、层次化的配置,易于人类阅读和维护,适合定义策略的逻辑、参数和版本。 + +- 版本化和类型化:类似 Kubernetes,YAML 支持 apiVersion 和 kind 字段,便于管理策略的版本和类型(如策略类型、指标类型、订单类型)。 + +- 动态逻辑支持:虽然 YAML 本身是静态的,但可以通过自定义字段(如 script 或 conditions)嵌入逻辑描述,再通过解析器(Go 或 Python)转换为可执行代码。 + +- 社区和工具支持:YAML 在配置管理(如 Kubernetes、Ansible)中广泛使用,Go 和 Python 提供了强大的解析库(如 gopkg.in/yaml.v3、pyyaml),适合你的开发背景。 + + +b. 借鉴 Kubernetes 资源定义 + +Kubernetes 的 YAML 资源(如 Deployment、Pod)通过 apiVersion、kind、metadata 和 spec 结构化定义复杂资源,适合对标 Pine Script 的版本化和类型化需求。以下是设计思路: + +- apiVersion:定义策略的版本(如 v1、v2,类似 Pine Script 的 @version)。 + +- kind:定义策略类型(如 TradingStrategy、Indicator、Order)。 + +- metadata:包含策略名称、描述、标签等元数据。 + +- spec:定义策略的具体逻辑、参数、条件和动作。 + + +--- + +1. 设计一套对标 Pine Script 的 YAML Schema + +以下是一个通用的 YAML Schema 设计,参考 Kubernetes 的结构和 Pine Script 的功能,覆盖均线交叉、RSI 反转、突破策略等常见场景,并支持版本化和扩展性: + +yaml + +```yaml +apiVersion: trading.v1 # 策略版本,例如 trading.v1 表示第一版 +kind: TradingStrategy # 资源类型,可以是 TradingStrategy、Indicator、Order 等 +metadata: + name: SMACrossStrategy # 策略名称 + description: "A simple moving average crossover strategy" # 描述 + labels: + type: trend-following # 标签,用于分类 + version: 1.0 # 策略版本 +spec: + params: # 策略参数 + short_period: 5 # 短期均线周期 + long_period: 20 # 长期均线周期 + indicators: # 技术指标定义 + - name: sma_short + type: sma # 指标类型 + source: close # 数据源(如收盘价) + period: "${params.short_period}" # 动态参数引用 + - name: sma_long + type: sma + source: close + period: "${params.long_period}" + conditions: # 交易信号条件 + - name: buy_signal + type: cross # 条件类型 + source1: sma_short # 第一个指标 + source2: sma_long # 第二个指标 + operator: cross_above # 操作符 + - name: sell_signal + type: cross + source1: sma_short + source2: sma_long + operator: cross_below + actions: # 满足条件后的动作 + - condition: buy_signal # 关联条件 + order: + type: market # 订单类型 + side: buy # 订单方向 + quantity: 1.0 # 订单数量 + - condition: sell_signal + order: + type: market + side: sell + quantity: 1.0 + risk_controls: # 风险控制(可选) + max_drawdown: -15.0 # 最大允许回撤(百分比) + position_limit: 2.0 # 最大持仓数量 + stop_loss: -5.0 # 全局止损(百分比) + metadata: # 策略元数据(可选) + created_at: "2025-03-03T00:00:00Z" # 创建时间 + author: "YourName" # 作者 + tags: ["trend", "simple"] # 标签 +``` + +--- + +1. 设计说明 + +a. 对标 Pine Script + +- 版本化:通过 apiVersion 管理策略版本(类似 Pine Script 的 @version=5),支持向下兼容或新功能扩展。 + +- 类型化:通过 kind 区分策略类型(如 TradingStrategy、Indicator),类似 Pine Script 的 strategy() 或 indicator() 函数。 + +- 逻辑表达:conditions 和 actions 对应 Pine Script 的 if/else 和 strategy.entry(),支持均线交叉、RSI 反转、突破策略等。 + +- 动态参数:通过 ${params.xxx} 引用参数,类似 Pine Script 的变量和函数。 + + +b. 高度解耦 + +- 策略通过 YAML 文件定义,独立于数据源、回测引擎或执行框架。 + +- 通过文件(YAML)或网络接口(如 HTTP/GRPC)传递策略,无需直接依赖框架 API。 + + +c. 格式通用 + +- YAML 易于 Go(gopkg.in/yaml.v3)、Python(pyyaml)、JavaScript(js-yaml)解析,适合跨平台使用。 + +- 支持嵌套结构和注释,便于复杂策略的定义和维护。 + + +d. 覆盖绝大多数策略应用场景 + +- 基本策略:均线交叉、RSI 反转、突破策略(通过 conditions 和 actions 定义)。 + +- 复杂策略:支持多条件组合(如 RSI + 均线交叉)、动态参数调整。 + +- 订单类型:支持市价单、限价单、止损单、止盈单等。 + +- 风险控制:通过 risk_controls 添加最大回撤、仓位限制等。 + + +--- + +1. 与 JSON Schema 的对比 + +|特性|JSON Schema|YAML Schema (Kubernetes 风格)| +|---|---|---| +|结构复杂性|静态键值对,难以表达动态逻辑|层次化、嵌套结构,适合复杂逻辑| +|版本管理|无内置版本化机制|支持<br><br>apiVersion<br><br>,便于版本控制| +|类型化|基本类型(number、string 等)|支持<br><br>kind<br><br>和领域特定类型(如策略)| +|可读性|较差,嵌套深时不易阅读|更好,支持注释和缩进,便于阅读| +|扩展性|有限,需新增字段|强,通过<br><br>spec<br><br>和元数据灵活扩展| +|适用场景|简单配置和数据验证|复杂配置和脚本逻辑(如对标 Pine Script)| + +--- + +1. 如何在 Go 中使用 YAML Schema + +- 解析 YAML: + + go + + ```go + package strategy + + import ( + "gopkg.in/yaml.v3" + "io/ioutil" + ) + + type StrategyConfig struct { + APIVersion string `yaml:"apiVersion"` + Kind string `yaml:"kind"` + Metadata Metadata `yaml:"metadata"` + Spec StrategySpec `yaml:"spec"` + } + + type Metadata struct { + Name string `yaml:"name"` + Description string `yaml:"description"` + Labels map[string]string `yaml:"labels"` + } + + type StrategySpec struct { + Params map[string]interface{} `yaml:"params"` + Indicators []Indicator `yaml:"indicators"` + Conditions []Condition `yaml:"conditions"` + Actions []Action `yaml:"actions"` + RiskControls RiskControls `yaml:"risk_controls"` + } + + type Indicator struct { + Name string `yaml:"name"` + Type string `yaml:"type"` + Source string `yaml:"source"` + Period int `yaml:"period"` + } + + type Condition struct { + Name string `yaml:"name"` + Type string `yaml:"type"` + Source1 string `yaml:"source1"` + Source2 string `yaml:"source2"` + Operator string `yaml:"operator"` + } + + type Action struct { + Condition string `yaml:"condition"` + Order Order `yaml:"order"` + } + + type Order struct { + Type string `yaml:"type"` + Side string `yaml:"side"` + Quantity float64 `yaml:"quantity"` + Price float64 `yaml:"price,omitempty"` + } + + type RiskControls struct { + MaxDrawdown float64 `yaml:"max_drawdown,omitempty"` + PositionLimit float64 `yaml:"position_limit,omitempty"` + StopLoss float64 `yaml:"stop_loss,omitempty"` + } + + func LoadStrategyFromYAML(filePath string) (*StrategyConfig, error) { + data, err := ioutil.ReadFile(filePath) + if err != nil { + return nil, err + } + var config StrategyConfig + err = yaml.Unmarshal(data, &config) + if err != nil { + return nil, err + } + return &config, nil + } + + func (s *SMACross) OnBar(bar Bar, config *StrategyConfig) []Order { + for _, ind := range config.Spec.Indicators { + if ind.Name == "sma_short" { + s.ShortSMA = calculateSMA(bar.Close, ind.Period) + } else if ind.Name == "sma_long" { + s.LongSMA = calculateSMA(bar.Close, ind.Period) + } + } + orders := make([]Order, 0) + for _, cond := range config.Spec.Conditions { + if cond.Type == "cross" && cond.Operator == "cross_above" && s.ShortSMA > s.LongSMA { + for _, action := range config.Spec.Actions { + if action.Condition == "buy_signal" { + orders = append(orders, action.Order) + } + } + } + } + return orders + } + ``` + +- 验证:用 Go 的 github.com/xeipuuv/gojsonschema 或自定义函数验证 YAML 符合 Schema。 + + +--- + +1. 与 Pine Script 的对标 + +- 版本化:apiVersion 对应 Pine Script 的 @version,支持版本升级(如 trading.v1、trading.v2)。 + +- 类型化:kind 对应 Pine Script 的 strategy() 或 indicator(),区分策略和指标。 + +- 逻辑表达:conditions 和 actions 对应 Pine Script 的 if/else 和 strategy.entry(),支持均线交叉、RSI 反转等。 + +- 动态参数:通过 params 和 indicators 引用动态值,类似 Pine Script 的变量。 + + +--- + +1. 扩展性 + +- 新增策略类型:通过 kind 或 spec.strategy_type 添加新策略(如高频策略、套利策略)。 + +- 复杂逻辑:通过嵌套 conditions 和 actions 支持多条件组合。 + +- 版本管理:通过 apiVersion 和 metadata.version 管理策略演进。 + + +--- + +1. 时间和资源估计 + +- 开发时间(基于你的 Go 经验): + + - YAML Schema 设计:0.5-1 周(定义结构和测试)。 + + - Go 解析与策略实现:1-2 周(开发模块和测试)。 + + - 数据获取与回测:1-2 周(用 Go 优化 OKX API 和计算)。 + + - 可视化配置:0.5-1 周(Kibana/Grafana 仪表盘设计)。 + +- 资源需求: + + - Linux 环境(CPU、内存适中),Elasticsearch、Go 依赖库(gopkg.in/yaml.v3 等)。 + + +--- + +1. 总结 + +是的,如果想尽量对标 Pine Script,JSON Schema 可能不够用,YAML 类似 Kubernetes 资源定义的结构更适合,支持版本化、类型化、复杂逻辑和扩展性。通过上述 YAML Schema,你可以定义高度解耦、格式通用、覆盖绝大多数策略场景的策略逻辑,适合你的 Go 开发背景和本地部署需求。 + +如果你需要调整 YAML Schema(例如新增字段或优化结构),或需要 Go/Python 代码示例,可以告诉我,我会进一步提供帮助! + +在 pine script 中, 有哪些内置函数, 我用 yaml资源定义的结构的形式能覆盖这些函数中的大部分是吧, + +是的,你的推测是正确的!TradingView 的 Pine Script 提供了一套丰富的内置函数,覆盖技术指标、数学运算、时间序列处理、订单生成等功能。通过你之前设计的 YAML 资源定义结构(类似 Kubernetes 风格),可以覆盖 Pine Script 内置函数的大部分功能,尤其是技术指标和策略逻辑部分。以下是详细分析,包括 Pine Script 内置函数的分类、覆盖范围以及如何用 YAML 结构实现,结合你的需求(熟悉 Go 开发、Linux 本地部署、策略解耦、量化收益/最大回撤)。 + +--- + +1. Pine Script 内置函数概述 + +Pine Script 提供了数百个内置函数,分为以下主要类别(截至 2025 年 3 月 3 日,基于 TradingView 的官方文档和社区资源): + +a. 技术指标函数(Technical Analysis, ta.*) + +- 示例: + + - ta.sma(source, length):简单移动平均线。 + + - ta.ema(source, length):指数移动平均线。 + + - ta.rsi(source, length):相对强弱指数。 + + - ta.macd(source, fast, slow, signal):MACD 指标。 + + - ta.bollinger(source, length, mult):布林带。 + + - ta.stoch(high, low, close, length):随机指标(Stochastic)。 + + - ta.adx(high, low, close, length):平均趋向指数。 + + - ta.cross(series1, series2):检测两条时间序列的交叉。 + +- 功能:计算技术指标,用于趋势分析、动量分析和振荡分析。 + +- 使用场景:均线交叉、RSI 反转、突破策略等。 + + +b. 数学和逻辑函数 + +- 示例: + + - math.max(a, b):返回较大值。 + + - math.min(a, b):返回较小值。 + + - math.abs(x):绝对值。 + + - if/else 条件逻辑:x > y ? a : b。 + + - and、or、not:逻辑运算。 + +- 功能:支持数值计算、条件判断和逻辑组合。 + +- 使用场景:复杂条件的定义(如多指标组合)。 + + +c. 时间和周期函数 + +- 示例: + + - time():返回当前柱的时间戳。 + + - period():获取当前时间周期(如 1 分钟、1 小时)。 + + - timestamp(year, month, day, hour, minute, second):生成特定时间戳。 + +- 功能:处理时间序列数据,限制策略执行时间或周期。 + +- 使用场景:时间过滤(如仅在交易时间段运行策略)。 + + +d. 订单和策略函数 + +- 示例: + + - strategy(title, overlay):定义策略,设置是否叠加在图表上。 + + - strategy.entry(id, long/short, qty, limit, stop):生成买入或卖出订单。 + + - strategy.exit(id, limit, stop):设置止损或止盈。 + + - strategy.position_size:获取当前持仓大小。 + +- 功能:生成交易信号、订单和风险控制。 + +- 使用场景:回测和实时交易信号生成。 + + +e. 其他函数 + +- 示例: + + - input(title, type, defval):定义用户输入参数(如周期、阈值)。 + + - plot(series, title, color):绘制图表(如指标曲线)。 + + - alertcondition(condition, title, message):设置警报条件。 + + - bar_index、high、low、close:访问柱数据。 + +- 功能:用户交互、图表可视化和数据访问。 + +- 使用场景:自定义指标、图表标注、用户输入。 + + +--- + +1. Pine Script 内置函数的覆盖范围 + +根据上述分类,你的 YAML 资源定义结构(类似 Kubernetes 风格)可以覆盖 Pine Script 内置函数的大部分功能,尤其是以下几个方面: + +a. 技术指标函数(ta.*) + +- 覆盖:你的 YAML 结构可以通过 spec.indicators 字段定义技术指标(如 sma、rsi、macd 等),并通过 params 动态指定参数(如周期 length)。 + +- 示例(YAML): + + yaml + + ```yaml + apiVersion: trading.v1 + kind: TradingStrategy + metadata: + name: SMACrossStrategy + spec: + params: + short_period: 5 + long_period: 20 + indicators: + - name: sma_short + type: sma + source: close + period: "${params.short_period}" + - name: sma_long + type: sma + source: close + period: "${params.long_period}" + conditions: + - name: buy_signal + type: cross + source1: sma_short + source2: sma_long + operator: cross_above + actions: + - condition: buy_signal + order: + type: market + side: buy + quantity: 1.0 + ``` + +- 实现:用 Go 解析 YAML,调用 gonum 或自定义函数计算 sma()、rsi() 等指标,覆盖 Pine Script 的 ta.* 函数。 + + +b. 数学和逻辑函数 + +- 覆盖:通过 conditions 和 actions 字段定义逻辑条件(如 >、cross_above),可以表达 math.max()、math.min()、if/else 等逻辑。 + +- 示例(YAML): + + yaml + + ```yaml + conditions: + - name: overbought + type: compare + source1: rsi + operator: ">" + value: 70 + - name: oversold + type: compare + source1: rsi + operator: "<" + value: 30 + actions: + - condition: overbought + order: + type: market + side: sell + quantity: 1.0 + - condition: oversold + order: + type: market + side: buy + quantity: 1.0 + ``` + +- 实现:用 Go 或 Python 解析 conditions 和 actions,实现逻辑运算,覆盖 and、or、not 等。 + + +c. 时间和周期函数 + +- 覆盖:通过 spec.params 和 conditions 支持时间过滤(如仅在特定时间段运行策略),但需要外部数据处理(如 Go 脚本解析时间戳)。 + +- 示例(YAML): + + yaml + + ```yaml + params: + start_time: "2024-01-01T00:00:00Z" + end_time: "2025-03-01T00:00:00Z" + conditions: + - name: valid_time + type: custom + source1: timestamp + operator: "between" + value: ["${params.start_time}", "${params.end_time}"] + ``` + +- 实现:用 Go 处理时间戳(time 包),验证 time() 和 period() 逻辑,覆盖时间相关函数。 + + +d. 订单和策略函数 + +- 覆盖:通过 actions.order 定义订单(如 strategy.entry()、strategy.exit()),支持市价单、限价单、止损单等。 + +- 示例(YAML): + + yaml + + ```yaml + actions: + - condition: buy_signal + order: + type: market + side: buy + quantity: 1.0 + - condition: sell_signal + order: + type: limit + side: sell + quantity: 1.0 + price: 10000.0 + ``` + +- 实现:用 Go 或 Python 解析 order,生成标准订单对象,覆盖 strategy.entry() 和 strategy.exit()。 + + +e. 其他函数(部分覆盖) + +- plot() 和可视化:Pine Script 的 plot() 用于图表绘制,你的 YAML 结构不直接支持,但可以通过 Kibana/Grafana 实现类似功能(查询 Elasticsearch 数据,绘制 K 线图和指标曲线)。 + +- input() 和用户交互:通过 params 和 metadata 字段支持用户输入参数,但需要外部工具(如 CLI 或 Web UI)处理交互。 + +- alertcondition():通过 conditions 和外部脚本实现警报逻辑,但需自定义实现。 + + +--- + +1. YAML 结构覆盖 Pine Script 内置函数的程度 + +- 覆盖范围: + + - 技术指标(ta.*):完全覆盖(如 sma、rsi、macd 等,通过 indicators 字段定义)。 + + - 数学和逻辑函数:大部分覆盖(如 >、cross 等,通过 conditions 和 actions 定义)。 + + - 时间和周期函数:部分覆盖(如时间过滤,通过 conditions 和外部时间处理实现)。 + + - 订单和策略函数:完全覆盖(如 strategy.entry()、strategy.exit(),通过 actions.order 定义)。 + + - 其他函数:部分覆盖(plot() 通过可视化工具实现,input() 通过 params 实现,alertcondition() 需自定义)。 + +- 未覆盖的部分: + + - 复杂循环和函数:Pine Script 支持 for 循环和自定义函数(如 //@function),YAML 静态结构难以直接表达,需要通过解析器(Go 或 Python)动态生成代码。 + + - 实时图表交互:Pine Script 的 plot() 和图表工具(拖拽、指标切换)依赖 TradingView 平台,YAML 无法直接支持,需要外部工具(如 Kibana/Grafana)实现。 + + - 高级数据访问:Pine Script 内置访问 bar_index、high、low 等数据,YAML 需要通过数据源(如 Elasticsearch)提供这些字段。 + +- 总体覆盖率:你的 YAML 结构可以覆盖 Pine Script 内置函数的 80%-90%,尤其是技术指标、逻辑条件和订单生成部分。剩余部分(循环、实时交互)可以通过 Go 解析器或外部工具补齐。 + + +--- + +1. 如何用 YAML 结构实现 Pine Script 功能 + +- 技术指标: + + - 通过 spec.indicators 定义 sma、rsi 等,映射 Pine Script 的 ta.* 函数。 + + - 用 Go 解析 YAML,调用 gonum 或自定义函数计算指标。 + +- 逻辑和条件: + + - 通过 spec.conditions 和 spec.actions 定义 if/else 和 cross() 等逻辑,映射 Pine Script 的数学和逻辑函数。 + + - 用 Go 实现条件判断和订单生成。 + +- 时间和周期: + + - 通过 params 和 conditions 定义时间过滤,映射 time() 和 period()。 + + - 用 Go 处理时间戳(time 包),验证时间逻辑。 + +- 订单生成: + + - 通过 spec.actions.order 定义 strategy.entry() 和 strategy.exit(),支持市价单、限价单等。 + + - 用 Go 或 Python 解析订单,生成标准订单对象。 + +- 未覆盖部分: + + - 循环和函数:用 Go 开发解析器,将 YAML 的 custom 条件转换为动态代码(如生成 Go 函数)。 + + - 可视化:用 Kibana/Grafana 模拟 plot(),通过 Elasticsearch 查询数据绘制图表。 + + - 用户交互:通过 CLI 或 Web UI 实现 input(),解析 params 字段。 + + +--- + +1. 示例(覆盖 Pine Script 均线交叉策略) + +Pine Script 原代码 + +pine + +```text +//@version=5 +strategy("SMA Crossover", overlay=true) +short_sma = ta.sma(close, 5) +long_sma = ta.sma(close, 20) +if ta.crossover(short_sma, long_sma) + strategy.entry("Buy", strategy.long, qty=1.0) +if ta.crossunder(short_sma, long_sma) + strategy.entry("Sell", strategy.short, qty=1.0) +``` + +对应的 YAML 资源定义 + +yaml + +```yaml +apiVersion: trading.v1 +kind: TradingStrategy +metadata: + name: SMACrossStrategy + description: "Simple Moving Average Crossover Strategy" +spec: + params: + short_period: 5 + long_period: 20 + indicators: + - name: sma_short + type: sma + source: close + period: "${params.short_period}" + - name: sma_long + type: sma + source: close + period: "${params.long_period}" + conditions: + - name: buy_signal + type: cross + source1: sma_short + source2: sma_long + operator: cross_above + - name: sell_signal + type: cross + source1: sma_short + source2: sma_long + operator: cross_below + actions: + - condition: buy_signal + order: + type: market + side: buy + quantity: 1.0 + - condition: sell_signal + order: + type: market + side: sell + quantity: 1.0 + risk_controls: + max_drawdown: -15.0 +``` + +Go 实现 + +go + +```go +package strategy + +import ( + "gopkg.in/yaml.v3" + "io/ioutil" +) + +func LoadStrategyFromYAML(filePath string) (*StrategyConfig, error) { + data, err := ioutil.ReadFile(filePath) + if err != nil { + return nil, err + } + var config StrategyConfig + err = yaml.Unmarshal(data, &config) + if err != nil { + return nil, err + } + return &config, nil +} + +func (s *SMACross) OnBar(bar Bar, config *StrategyConfig) []Order { + for _, ind := range config.Spec.Indicators { + if ind.Name == "sma_short" { + s.ShortSMA = calculateSMA(bar.Close, ind.Period) + } else if ind.Name == "sma_long" { + s.LongSMA = calculateSMA(bar.Close, ind.Period) + } + } + orders := make([]Order, 0) + for _, cond := range config.Spec.Conditions { + if cond.Type == "cross" && cond.Operator == "cross_above" && s.ShortSMA > s.LongSMA { + for _, action := range config.Spec.Actions { + if action.Condition == "buy_signal" { + orders = append(orders, action.Order) + } + } + } else if cond.Type == "cross" && cond.Operator == "cross_below" && s.ShortSMA < s.LongSMA { + for _, action := range config.Spec.Actions { + if action.Condition == "sell_signal" { + orders = append(orders, action.Order) + } + } + } + } + return orders +} +``` + +--- + +1. 未覆盖的 Pine Script 函数及解决方案 + +- 循环和自定义函数: + + - 用 Go 开发解析器,将 YAML 的 custom 条件转换为动态代码(如生成 Go 函数)。 + + - 示例(YAML): + + yaml + + ```yaml + conditions: + - name: custom_loop + type: custom + script: "for i = 0 to 10 { if close[i] > sma[i] then buy() }" + ``` + + - 用 Go 解析 script 字段,生成循环逻辑。 + +- 实时图表交互: + + - 通过 Kibana/Grafana 实现 plot() 和可视化功能,但无 TradingView 的实时工具栏。 + +- 用户输入: + + - 通过 params 和 CLI/Web UI 实现 input()。 + + +--- + +1. 总结 + +是的,你的 YAML 资源定义结构可以覆盖 Pine Script 内置函数的大部分功能,尤其是技术指标(ta.*)、逻辑条件、订单生成和时间处理部分。未覆盖的复杂逻辑(如循环、自定义函数)和实时交互可以通过 Go 解析器或外部工具补齐。以下是覆盖范围: + +- 完全覆盖:技术指标(如 sma、rsi)、订单生成(如 strategy.entry())、简单逻辑(如 >、cross)。 + +- 部分覆盖:时间函数(需外部处理)、复杂逻辑(需解析器支持)。 + +- 未覆盖:实时图表交互(需可视化工具模拟)、高级函数(需自定义开发)。 + + +如果你需要调整 YAML 结构(例如新增字段或优化逻辑),或需要 Go/Python 代码示例(解析器或函数实现),可以告诉我,我会进一步提供帮助! + +你就告诉我,不能覆盖pine script里的哪些吧 + +好的!以下是 TradingView 的 Pine Script 内置功能中,你的 YAML 资源定义结构(类似 Kubernetes 风格)无法直接覆盖的部分,以及原因和可能的解决方法。结合你的需求(熟悉 Go 开发、Linux 本地部署、策略解耦、量化收益/最大回撤),我将重点说明这些限制以及如何通过扩展或补充解决: + +--- + +1. Pine Script 无法直接覆盖的内置功能 + +a. 复杂控制结构(循环和自定义函数) + +- 无法覆盖的内容: + + - Pine Script 支持 for 循环和自定义函数(如 //@function),允许开发者编写动态迭代或复用逻辑。例如: + + pine + + ```text + //@version=5 + indicator("Custom Loop", overlay=true) + var float sum = 0.0 + for i = 0 to 9 + sum := sum + close[i] + plot(sum / 10, "Average") + ``` + + - 或者自定义函数: + + pine + + ```text + //@version=5 + indicator("Custom Function", overlay=true) + custom_sma(source, length) => + sum = 0.0 + for i = 0 to length - 1 + sum := sum + source[i] + sum / length + plot(custom_sma(close, 10), "Custom SMA") + ``` + + - 这些功能允许动态计算(如遍历历史数据或复用逻辑),但 YAML 是静态的键值对结构,无法直接表达循环或函数定义(只能通过嵌套条件表达有限的逻辑)。 + +- 原因: + + - YAML 是一种配置语言,不支持动态代码执行或编程逻辑(如循环、函数调用)。你的 conditions 和 actions 字段只能定义静态条件和动作,无法直接支持动态迭代或函数嵌套。 + + - Pine Script 的脚本语言特性(类似编程语言)超出了 YAML 的静态描述能力。 + +- 解决方法: + + - 用 Go 开发一个解析器,将 YAML 中的 custom 字段解析为动态代码。例如: + + yaml + + ```yaml + conditions: + - name: custom_loop + type: custom + script: "for i = 0 to 9 { if close[i] > sma[i] then buy() }" + ``` + + - 用 Go 实现解析器(使用 gopkg.in/yaml.v3 和正则表达式/ANTLR),将 script 字段转换为 Go 函数或逻辑: + + go + + ```go + func parseCustomScript(script string) func(bar Bar) []Order { + // 解析 script 字符串,生成 Go 函数 + // 例如,转换为: + /* + func (s *Strategy) customLogic(bar Bar) []Order { + orders := make([]Order, 0) + for i := 0; i < 9; i++ { + if bar.Close[i] > s.SMA[i] { + orders = append(orders, Order{Type: "market", Side: "buy", Quantity: 1.0}) + } + } + return orders + } + */ + return customLogic + } + ``` + + - 这种方法需要手动实现语法解析和代码生成,增加开发复杂度,但可以覆盖循环和函数逻辑。 + + +b. 实时图表交互和可视化函数 + +- 无法覆盖的内容: + + - Pine Script 提供 plot()、box.new()、line.new() 等函数,用于实时在 TradingView 图表上绘制指标曲线、标记点或图形。例如: + + pine + + ```text + //@version=5 + indicator("Plot Example", overlay=true) + sma = ta.sma(close, 14) + plot(sma, color=color.blue, title="SMA 14") + if ta.crossover(close, sma) + line.new(bar_index[1], high, bar_index, low, color=color.green) + ``` + + - 这些函数支持图表交互(如拖拽、指标切换、标注信号),但你的 YAML 结构只能定义静态数据输出(写入 Elasticsearch),无法直接控制实时图表绘制或交互。 + +- 原因: + + - YAML 仅用于配置和数据描述,不支持图形界面或实时交互。Kibana/Grafana 可以查询 Elasticsearch 数据生成 K 线图和指标,但缺乏 TradingView 的实时工具栏(如拖拽工具、指标下拉菜单)。 + + - Pine Script 的 plot() 和相关函数依赖 TradingView 的云端图表引擎,无法在本地直接实现。 + +- 解决方法: + + - 用 Kibana/Grafana 模拟 plot() 功能,通过 Elasticsearch 查询 OHLC 和指标数据(sma、rsi 等),绘制折线图或 K 线图,并用 Annotations 标注信号点(如均线交叉)。 + + - 开发自定义 Web UI(用 Go + React 或 JavaScript),嵌入 TradingView 的 Lightweight Charts 库,模拟 plot() 和交互功能,但需手动实现数据输入和信号标注。 + + - 示例(Kibana/Grafana 配置): + + - 创建 Time Series 面板,查询 sma 字段,绘制折线图。 + + - 用 Annotations 标记 conditions 中的信号(如 cross_above 点)。 + + +c. 用户输入和动态参数(input())的交互 + +- 无法覆盖的内容: + + - Pine Script 的 input() 函数允许用户在 TradingView 界面上动态输入参数(如周期、阈值),例如: + + pine + + ```text + //@version=5 + indicator("User Input Example", overlay=true) + length = input.int(14, "SMA Length", minval=1, maxval=100) + sma = ta.sma(close, length) + plot(sma, color=color.blue) + ``` + + - 这些输入通过 TradingView 的 UI 提供交互性,但你的 YAML 结构只能通过 params 定义静态参数,无法直接支持实时用户输入或图形界面交互。 + +- 原因: + + - YAML 是静态配置,不支持运行时用户交互。Kibana/Grafana 提供变量选择(类似下拉菜单),但无法像 TradingView 那样提供实时滑动条或输入框。 + +- 解决方法: + + - 在 Go 开发 CLI 或 Web UI(用 Go + React),解析 YAML 的 params 字段,提供用户输入接口(如终端输入或 Web 表单)。 + + - 在 Kibana/Grafana 中用变量(Variables)实现动态参数选择(如 short_period、long_period),但交互性受限。 + + - 示例(Go CLI 伪代码): + + go + + ```go + package main + + import ( + "fmt" + "gopkg.in/yaml.v3" + ) + + func main() { + var config StrategyConfig + fmt.Println("Enter SMA Short Period:") + var shortPeriod int + fmt.Scan(&shortPeriod) + config.Spec.Params["short_period"] = shortPeriod + // 类似地输入 long_period + data, _ := yaml.Marshal(&config) + ioutil.WriteFile("strategy.yaml", data, 0644) + } + ``` + + +d. 高级数据访问和状态管理 + +- 无法覆盖的内容: + + - Pine Script 提供内置变量和状态管理,如 bar_index(柱索引)、high、low、close、strategy.position_size 等,用于访问历史数据或交易状态。例如: + + pine + + ```text + //@version=5 + strategy("Position Size Check", overlay=false) + if strategy.position_size > 0 + plot(close, color=color.green) + ``` + + - 这些变量依赖 TradingView 的时间序列数据和状态管理,YAML 无法直接表达动态状态或历史数据访问。 + +- 原因: + + - YAML 仅用于静态配置,无法直接访问或操作时间序列数据或状态。需要外部数据源(如 Elasticsearch)和解析器处理 bar_index、close 等。 + +- 解决方法: + + - 在 Elasticsearch 中存储 OHLC 数据和策略状态(strategy.position_size 可通过回测引擎模拟),用 Go 解析 YAML,访问这些数据。 + + - 示例(YAML): + + yaml + + ```yaml + conditions: + - name: position_check + type: custom + source1: position_size + operator: ">" + value: 0 + ``` + + - 用 Go 实现状态管理,查询 Elasticsearch 的 position_size 字段。 + + +e. 警报和外部集成(alertcondition()) + +- 无法覆盖的内容: + + - Pine Script 的 alertcondition() 用于设置图表警报,例如: + + pine + + ```text + //@version=5 + indicator("Alert Example", overlay=true) + if ta.crossover(ta.sma(close, 5), ta.sma(close, 20)) + alertcondition(true, title="Buy Signal", message="SMA Crossover detected") + ``` + + - 这些功能依赖 TradingView 的云端警报系统,无法直接在本地实现。 + +- 原因: + + - YAML 仅定义配置,不支持实时警报或外部集成(如邮件、短信通知)。需要自定义实现警报逻辑。 + +- 解决方法: + + - 用 Go 开发警报模块,解析 YAML 的 conditions,触发外部通知(如通过 HTTP POST 发送到 Slack 或邮件)。 + + - 示例(Go 伪代码): + + go + + ```go + func CheckAlerts(config *StrategyConfig, bar Bar) { + for _, cond := range config.Spec.Conditions { + if cond.Type == "cross" && cond.Operator == "cross_above" { + if s.ShortSMA > s.LongSMA { + sendAlert("Buy Signal", "SMA Crossover detected") + } + } + } + } + + func sendAlert(title, message string) { + // 实现 HTTP POST 或邮件通知 + } + ``` + + +--- + +1. 未覆盖部分的总结 + +以下是 Pine Script 内置函数中你的 YAML 结构无法直接覆盖的部分: + +- 复杂控制结构:for 循环、自定义函数(//@function)。 + +- 实时图表交互:plot()、box.new()、line.new() 等图形绘制和交互功能。 + +- 用户输入交互:input() 的实时滑动条或输入框。 + +- 高级数据访问:bar_index、strategy.position_size 等动态状态和历史数据访问。 + +- 外部集成:alertcondition() 的云端警报功能。 + + +--- + +1. 解决未覆盖部分的方法 + +- 解析器扩展:用 Go 开发解析器,将 YAML 的 custom 字段解析为动态代码,覆盖循环和函数逻辑。 + +- 可视化工具:用 Kibana/Grafana 模拟 plot() 和交互,通过 Elasticsearch 数据绘制图表和标注信号。 + +- 用户交互:用 Go CLI 或 Web UI 实现 input(),解析 params 字段。 + +- 状态管理:用 Go 或 Elasticsearch 存储和查询 bar_index、position_size 等状态。 + +- 警报功能:用 Go 开发自定义警报模块,触发外部通知。 + + +--- + +1. 覆盖率评估 + +- 覆盖范围:你的 YAML 结构可以覆盖 Pine Script 内置函数的 80%-90%,尤其是技术指标(ta.*)、逻辑条件(if/else)、订单生成(strategy.entry())和时间处理(time())。 + +- 未覆盖范围:复杂控制结构、实时交互、可视化、用户输入和外部集成需要外部开发或工具支持。 + +- 总体结论:通过 Go 解析器和 Kibana/Grafana 补充,你的 YAML 结构可以完全实现 Pine Script 的功能,适合本地回测和策略开发。 + + +--- + +1. 下一步建议 + +- 检查 Pine Script 文档([https://www.tradingview.com/pine-script-docs/)和社区示例,确认未覆盖的函数及其使用场景。](https://www.tradingview.com/pine-script-docs/)和社区示例,确认未覆盖的函数及其使用场景。) + +- 扩展 YAML 结构,添加 custom 字段支持复杂逻辑,并用 Go 开发解析器。 + +- 实现可视化模块(Kibana/Grafana)模拟 plot(),并开发 CLI/Web UI 实现 input()。 + + +如果你需要具体代码示例(例如 Go 解析器或 Kibana 配置),可以告诉我,我会进一步提供帮助! + +有没有可能用 ansible playbook的形式来写自定义策略 + +使用 Ansible Playbook 的形式来编写自定义量化交易策略是一个非常有趣且富有创意的主意,但这里有一些关键的限制和挑战需要考虑。Ansible 是一个自动化配置管理和编排工具,主要用于基础设施管理(如服务器配置、部署应用程序),而不是设计为执行复杂的逻辑或实时计算(如量化交易策略)。以下是详细分析、可行性、可行方案和局限性,结合你的需求(熟悉 Go 开发、Linux 本地部署、策略解耦、量化收益/最大回撤): + +--- + +1. Ansible Playbook 的基本特性 + +- 设计目标:Ansible Playbook 是用 YAML 编写的,用于定义自动化任务序列(如安装软件、配置服务、运行脚本),通过模块(如 shell、script、copy)执行操作。 + +- 核心功能: + + - 任务驱动(Task-based):通过模块调用执行特定操作,如运行命令、复制文件、调用 HTTP API。 + + - 状态管理:确保系统达到预期状态,但不适合动态计算或实时处理。 + + - 声明式:Playbook 描述“做什么”而非“如何做”,适合静态配置,但不适合编程逻辑(如循环、条件分支)。 + +- 局限性: + + - 不支持复杂的编程逻辑(如循环嵌套、函数、动态变量计算)。 + + - 不适合实时数据处理或高性能计算(如量化交易策略的回测)。 + + - 主要用于系统管理,而不是金融逻辑或算法开发。 + + +--- + +1. 使用 Ansible Playbook 编写自定义策略的可行性 + +- 可行性:从技术上来说,使用 Ansible Playbook 编写自定义量化交易策略是可能的,但非常不自然且效率低下。以下是原因和方法: + + - 限制: + + - Ansible Playbook 缺乏编程语言的灵活性(如 Go、Python 的循环、函数、条件逻辑),难以直接表达均线交叉、RSI 反转、突破策略等量化逻辑。 + + - 无法直接处理时间序列数据(如 OHLC 数据)或执行实时回测/交易逻辑。 + + - Playbook 更适合静态配置和任务编排(如调用外部脚本),而不是核心策略逻辑。 + + - 可行方案: + + - 将策略逻辑外置到 Go 或 Python 脚本中,通过 Ansible Playbook 调用这些脚本,间接实现策略定义和回测。 + + - 使用 Ansible 的 script 模块运行 Go 脚本,解析 YAML 配置文件(如之前的策略 YAML),并执行策略逻辑。 + + - 使用 Ansible 的 template 模块生成策略配置文件(如 JSON/YAML),然后调用回测工具(如 NautilusTrader、OTP)。 + +- 挑战: + + - Ansible 难以直接处理金融数据(如 OHLC、Tick)或计算技术指标(SMA、RSI)。 + + - 策略的动态性和实时性(例如生成多笔订单、计算最大回撤)需要外部脚本支持,Ansible 仅用于编排。 + + - 解耦性和可维护性可能受限,因为 Playbook 本身不是编程语言,难以测试和扩展。 + + +--- + +1. 设计方案:用 Ansible Playbook 间接实现自定义策略 + +a. 架构设计 + +1. Ansible Playbook 角色: + + - 负责编排和自动化,调用 Go 或 Python 脚本实现策略逻辑。 + + - 使用模块(如 script、copy、template)管理文件、运行脚本和配置环境。 + +2. Go 策略模块: + + - 独立实现策略逻辑(均线交叉、RSI 反转等),通过 JSON/YAML 配置文件(类似之前的 YAML 资源定义)接收参数。 + + - 处理 OHLC 数据、特征化、订单生成和回测,输出绩效指标(如收益、最大回撤)。 + +3. 数据存储和可视化: + + - 将数据和结果写入 Elasticsearch,通过 Kibana/Grafana 展示。 + +4. 执行流程: + + - Ansible Playbook 加载策略 YAML 文件,调用 Go 脚本运行策略。 + + - Go 脚本读取 OKX 数据,执行策略逻辑,生成订单和绩效指标,写入 Elasticsearch。 + + - Kibana/Grafana 展示结果。 + + +b. 示例 Ansible Playbook + +以下是一个简单的 Playbook 示例,用于调用 Go 策略脚本并管理环境: + +yaml + +```yaml +--- +- name: Run Trading Strategy Backtest + hosts: localhost + gather_facts: no + vars: + strategy_file: "strategy.yaml" + output_dir: "/path/to/output" + tasks: + - name: Ensure output directory exists + file: + path: "{{ output_dir }}" + state: directory + mode: '0755' + + - name: Copy strategy YAML file + copy: + src: "{{ strategy_file }}" + dest: "{{ output_dir }}/strategy.yaml" + + - name: Run Go strategy script + script: ./strategy.go {{ output_dir }}/strategy.yaml + args: + chdir: "{{ output_dir }}" + register: strategy_output + + - name: Write backtest results to Elasticsearch + shell: ./write_to_elasticsearch.sh "{{ strategy_output.stdout }}" + args: + chdir: "{{ output_dir }}" + + - name: Display results + debug: + msg: "Strategy backtest completed. Output: {{ strategy_output.stdout }}" +``` + +c. Go 策略脚本 + +以下是对应的 Go 脚本示例,解析 YAML 策略并执行回测: + +go + +```go +package main + +import ( + "gopkg.in/yaml.v3" + "io/ioutil" + "fmt" + "path/filepath" +) + +type StrategyConfig struct { + APIVersion string `yaml:"apiVersion"` + Kind string `yaml:"kind"` + Metadata Metadata `yaml:"metadata"` + Spec StrategySpec `yaml:"spec"` +} + +type Metadata struct { + Name string `yaml:"name"` + Description string `yaml:"description"` +} + +type StrategySpec struct { + Params map[string]interface{} `yaml:"params"` + Indicators []Indicator `yaml:"indicators"` + Conditions []Condition `yaml:"conditions"` + Actions []Action `yaml:"actions"` +} + +type Indicator struct { + Name string `yaml:"name"` + Type string `yaml:"type"` + Source string `yaml:"source"` + Period int `yaml:"period"` +} + +type Condition struct { + Name string `yaml:"name"` + Type string `yaml:"type"` + Source1 string `yaml:"source1"` + Source2 string `yaml:"source2"` + Operator string `yaml:"operator"` +} + +type Action struct { + Condition string `yaml:"condition"` + Order Order `yaml:"order"` +} + +type Order struct { + Type string `yaml:"type"` + Side string `yaml:"side"` + Quantity float64 `yaml:"quantity"` +} + +func main() { + if len(os.Args) < 2 { + fmt.Println("Usage: strategy.go <strategy_yaml_path>") + return + } + yamlPath := os.Args[1] + + data, err := ioutil.ReadFile(yamlPath) + if err != nil { + fmt.Printf("Error reading YAML: %v\n", err) + return + } + + var config StrategyConfig + err = yaml.Unmarshal(data, &config) + if err != nil { + fmt.Printf("Error parsing YAML: %v\n", err) + return + } + + // 加载 OHLC 数据(从 OKX 或 Elasticsearch) + bars := loadOHLCData() // 假设实现从 OKX 或 Elasticsearch 获取数据 + + // 运行策略 + strategy := &SMACross{} + for _, bar := range bars { + orders := strategy.OnBar(bar, &config) + // 处理订单,计算收益、最大回撤等 + processOrders(orders) + } + + // 输出结果到 Elasticsearch + writeResultsToElasticsearch(results) +} + +type SMACross struct { + ShortSMA float64 + LongSMA float64 +} + +func (s *SMACross) OnBar(bar Bar, config *StrategyConfig) []Order { + for _, ind := range config.Spec.Indicators { + if ind.Name == "sma_short" { + s.ShortSMA = calculateSMA(bar.Close, ind.Period) + } else if ind.Name == "sma_long" { + s.LongSMA = calculateSMA(bar.Close, ind.Period) + } + } + orders := make([]Order, 0) + for _, cond := range config.Spec.Conditions { + if cond.Type == "cross" && cond.Operator == "cross_above" && s.ShortSMA > s.LongSMA { + for _, action := range config.Spec.Actions { + if action.Condition == "buy_signal" { + orders = append(orders, action.Order) + } + } + } + } + return orders +} +``` + +d. 策略 YAML 文件 + +使用之前的 YAML 结构定义策略,例如均线交叉策略: + +yaml + +```yaml +apiVersion: trading.v1 +kind: TradingStrategy +metadata: + name: SMACrossStrategy + description: "Simple Moving Average Crossover Strategy" +spec: + params: + short_period: 5 + long_period: 20 + indicators: + - name: sma_short + type: sma + source: close + period: "${params.short_period}" + - name: sma_long + type: sma + source: close + period: "${params.long_period}" + conditions: + - name: buy_signal + type: cross + source1: sma_short + source2: sma_long + operator: cross_above + actions: + - condition: buy_signal + order: + type: market + side: buy + quantity: 1.0 +``` + +--- + +1. Ansible Playbook 的局限性 + +- 逻辑复杂性:Ansible 不适合直接编写策略逻辑(如均线交叉、RSI 反转),需要依赖外部脚本(Go、Python)。 + +- 性能:Playbook 不是实时计算工具,执行效率低,适合编排而非高频回测。 + +- 解耦性:策略逻辑通过外部脚本实现可以解耦,但 Playbook 本身与脚本耦合,增加维护成本。 + +- 可维护性:Playbook 不适合复杂的金融逻辑,测试和调试困难。 + + +--- + +1. 替代方案 + +如果你的目标是策略解耦和灵活性,建议直接用 Go 或 Python 编写策略模块,而非依赖 Ansible Playbook。以下是推荐路径: + +- Go 模块:用 Go 开发独立策略、数据处理和回测模块,通过 JSON/YAML 配置,输出到 Elasticsearch。 + +- Kibana/Grafana 集成:用可视化工具展示结果,确保直观性和交互性。 + +- Ansible 可选:仅用 Ansible 管理基础设施(如部署 Go 脚本、配置 Elasticsearch),避免用于策略逻辑。 + + +--- + +1. 时间和资源估计 + +- 开发时间(基于你的 Go 经验): + + - Ansible Playbook 设计:0.5-1 周(编写编排脚本)。 + + - Go 策略模块:1-2 周(实现策略和回测)。 + + - 数据获取与 Elasticsearch 集成:1-2 周(用 Go 优化 OKX API 和存储)。 + + - 可视化配置:0.5-1 周(Kibana/Grafana 仪表盘设计)。 + +- 资源需求: + + - Linux 环境(CPU、内存适中),Elasticsearch、Go、Ansible 依赖。 + + +--- + +1. 结论 + +使用 Ansible Playbook 编写自定义量化交易策略是可行的,但非常不推荐,因为它不适合复杂逻辑和高性能计算。建议用 Go 开发独立策略模块,通过 JSON/YAML 配置实现高度解耦和灵活性,Ansible 可作为基础设施管理工具(部署和编排),而非策略逻辑的核心部分。 + +如果你需要具体代码示例(Ansible Playbook 或 Go 策略实现),可以告诉我,我会进一步提供帮助! + +我的意思是, 我记得 ansible playbook里 支持模版,模版里可以嵌套for表达式等等 + +你的观察非常正确!Ansible Playbook 的确支持模板(template 模块)和 Jinja2 模板语言,Jinja2 允许在模板中嵌套 for 循环、if 条件表达式等逻辑。这确实为使用 Ansible Playbook 编写自定义量化交易策略提供了一些可能性,尽管它仍不是最自然或高效的选择。以下是详细分析、设计方案和实现建议,结合你的需求(熟悉 Go 开发、Linux 本地部署、策略解耦、量化收益/最大回撤): + +--- + +1. Ansible Playbook 和 Jinja2 模板的特性 + +- Jinja2 模板: + + - Jinja2 是 Ansible 使用的模板引擎,支持动态逻辑,如 for 循环、if/else 条件、变量、过滤器等。 + + - 示例(Jinja2 模板): + + jinja + + ```text + {% for i in range(5) %} + Item {{ i }}: {{ data[i] }} + {% endfor %} + {% if condition %} + Do something + {% else %} + Do something else + {% endif %} + ``` + + - 这些功能允许在 Playbook 或模板中嵌入基本编程逻辑,适合生成配置文件或动态数据。 + +- Ansible template 模块: + + - 允许将 Jinja2 模板渲染为文件(如 JSON/YAML 策略文件),并根据变量动态生成内容。 + + - 示例(Playbook 使用模板): + + yaml + + ```yaml + - name: Generate strategy config + template: + src: strategy.j2 + dest: /path/to/strategy.yaml + vars: + short_period: 5 + long_period: 20 + ``` + +- 局限性: + + - Jinja2 虽然支持 for 和 if,但功能有限,不支持复杂函数、类或高性能计算(如技术指标计算、时间序列处理)。 + + - 模板主要用于静态配置生成,不适合实时数据处理或策略执行。 + + - Ansible 的执行环境(基于 SSH 或本地命令)不适合金融逻辑的高性能需求。 + + +--- + +1. 使用 Ansible Playbook 和 Jinja2 编写策略的可行性 + +- 可行性:通过 Jinja2 模板和 template 模块,可以生成量化交易策略的配置文件(如 JSON/YAML),并通过外部脚本(如 Go)执行策略逻辑。这样可以间接实现策略定义和回测,但核心逻辑仍需依赖 Go 或 Python。 + +- 优势: + + - Jinja2 的 for 和 if 允许动态生成策略条件、参数或订单列表,部分模拟 Pine Script 或 YAML 资源定义的逻辑。 + + - Ansible 提供自动化编排,适合管理数据获取、策略生成和回测流程。 + +- 挑战: + + - Jinja2 不支持复杂编程(如技术指标计算、循环嵌套、状态管理),需要外置到 Go 脚本。 + + - 策略执行和回测性能受限,Ansible 不适合实时或高频交易逻辑。 + + - 解耦性可能受限,Playbook 和模板与外部脚本耦合。 + + +--- + +1. 设计方案:用 Ansible Playbook 和 Jinja2 实现策略 + +a. 架构设计 + +1. Ansible Playbook: + + - 负责编排任务:获取数据、生成策略配置文件、运行 Go 脚本、存储结果、配置可视化。 + + - 使用 Jinja2 模板动态生成策略 YAML/JSON 文件。 + +2. Jinja2 模板(策略定义): + + - 嵌入 for 和 if 逻辑,生成策略条件、指标和订单。 + + - 输出标准格式(如 YAML),供 Go 脚本解析。 + +3. Go 策略模块: + + - 解析 Jinja2 渲染后的 YAML/JSON,执行策略逻辑(均线交叉、RSI 反转等),生成订单和绩效指标。 + + - 处理 OHLC 数据、特征化、回测,输出到 Elasticsearch。 + +4. 数据存储和可视化: + + - 将数据和结果写入 Elasticsearch,通过 Kibana/Grafana 展示。 + + +b. 示例:Ansible Playbook 和 Jinja2 模板 + +1. 策略 Jinja2 模板(strategy.j2) + +jinja + +```text +{% if strategy_type == "SMACross" %} +apiVersion: trading.v1 +kind: TradingStrategy +metadata: + name: SMACrossStrategy + description: "Simple Moving Average Crossover Strategy" +spec: + params: + short_period: {{ short_period }} + long_period: {{ long_period }} + indicators: + - name: sma_short + type: sma + source: close + period: "{{ short_period }}" + - name: sma_long + type: sma + source: close + period: "{{ long_period }}" + conditions: + {% for condition in conditions %} + - name: {{ condition.name }} + type: {{ condition.type }} + source1: {{ condition.source1 }} + source2: {{ condition.source2 }} + operator: {{ condition.operator }} + {% endfor %} + actions: + {% for action in actions %} + - condition: {{ action.condition }} + order: + type: {{ action.order.type }} + side: {{ action.order.side }} + quantity: {{ action.order.quantity }} + {% endfor %} + risk_controls: + max_drawdown: -15.0 +{% endif %} +``` + +1. Ansible Playbook(playbook.yml) + +yaml + +```yaml +--- +- name: Run Trading Strategy Backtest with Ansible and Jinja2 + hosts: localhost + gather_facts: no + vars: + strategy_type: "SMACross" + short_period: 5 + long_period: 20 + conditions: + - { name: "buy_signal", type: "cross", source1: "sma_short", source2: "sma_long", operator: "cross_above" } + - { name: "sell_signal", type: "cross", source1: "sma_short", source2: "sma_long", operator: "cross_below" } + actions: + - { condition: "buy_signal", order: { type: "market", side: "buy", quantity: 1.0 } } + - { condition: "sell_signal", order: { type: "market", side: "sell", quantity: 1.0 } } + output_dir: "/path/to/output" + tasks: + - name: Ensure output directory exists + file: + path: "{{ output_dir }}" + state: directory + mode: '0755' + + - name: Generate strategy YAML using Jinja2 template + template: + src: strategy.j2 + dest: "{{ output_dir }}/strategy.yaml" + + - name: Run Go strategy script + script: ./strategy.go {{ output_dir }}/strategy.yaml + args: + chdir: "{{ output_dir }}" + register: strategy_output + + - name: Write backtest results to Elasticsearch + shell: ./write_to_elasticsearch.sh "{{ strategy_output.stdout }}" + args: + chdir: "{{ output_dir }}" + + - name: Display results + debug: + msg: "Strategy backtest completed. Output: {{ strategy_output.stdout }}" +``` + +1. Go 策略脚本(strategy.go) + +(参考之前的 Go 代码,解析 YAML 并执行策略逻辑,生成订单和绩效指标) + +--- + +1. Jinja2 覆盖的功能 + +- 支持的逻辑: + + - for 循环:生成多个 conditions 或 actions,例如遍历多个指标或订单。 + + - if/else 条件:根据变量(如 strategy_type)选择不同的策略模板。 + + - 变量和过滤器:动态插入 params、conditions、actions 的值。 + +- 示例(Jinja2 循环): + + jinja + + ```text + conditions: + {% for period in [5, 10, 20] %} + - name: sma_cross_{{ period }} + type: cross + source1: sma_{{ period }} + source2: sma_{{ period * 2 }} + operator: cross_above + {% endfor %} + ``` + +- 局限性: + + - Jinja2 不支持复杂函数(如 sma()、rsi() 计算)或高性能时间序列处理。 + + - 仅适合生成静态配置文件,策略执行仍需依赖 Go 或 Python。 + + +--- + +1. Ansible Playbook 的局限性(针对策略) + +- 逻辑复杂性:Jinja2 的 for 和 if 无法直接计算技术指标或处理 OHLC 数据,需外置到 Go 脚本。 + +- 性能:Playbook 不是实时计算工具,执行效率低,适合编排而非回测。 + +- 解耦性:策略逻辑通过 Go 实现解耦,但 Playbook 和模板与脚本耦合,增加维护成本。 + +- 可维护性:Playbook 不适合复杂的金融逻辑,测试和调试困难。 + + +--- + +1. 替代方案 + +如果你的目标是策略解耦和灵活性,建议直接用 Go 或 Python 编写策略模块,而非依赖 Ansible Playbook。以下是推荐路径: + +- Go 模块:用 Go 开发独立策略、数据处理和回测模块,通过 JSON/YAML 配置,输出到 Elasticsearch。 + +- Kibana/Grafana 集成:用可视化工具展示结果,确保直观性和交互性。 + +- Ansible 可选:仅用 Ansible 管理基础设施(如部署 Go 脚本、配置 Elasticsearch),避免用于策略逻辑。 + + +--- + +1. 时间和资源估计 + +- 开发时间(基于你的 Go 经验): + + - Ansible Playbook 和 Jinja2 模板设计:0.5-1 周(编写编排和模板)。 + + - Go 策略模块:1-2 周(实现策略和回测)。 + + - 数据获取与 Elasticsearch 集成:1-2 周(用 Go 优化 OKX API 和存储)。 + + - 可视化配置:0.5-1 周(Kibana/Grafana 仪表盘设计)。 + +- 资源需求: + + - Linux 环境(CPU、内存适中),Elasticsearch、Go、Ansible 依赖。 + + +--- + +1. 结论 + +使用 Ansible Playbook 和 Jinja2 模板可以部分实现自定义量化交易策略的定义(例如通过 for 和 if 动态生成策略 YAML),但核心逻辑(如技术指标计算、订单生成、回测)仍需依赖 Go 或 Python 脚本。这种方法不自然且效率较低,建议直接用 Go 开发独立策略模块,通过 JSON/YAML 配置实现高度解耦和灵活性,Ansible 可作为基础设施管理工具。 + +如果你需要具体代码示例(Ansible Playbook、Jinja2 模板或 Go 策略实现),可以告诉我,我会进一步提供帮助! + +不不,我不需要ansible, 我只需要模版和jinja2 + +明白了!如果你只想使用 Jinja2 模板(而不使用 Ansible Playbook)来定义自定义量化交易策略,并结合你的需求(熟悉 Go 开发、Linux 本地部署、策略解耦、量化收益/最大回撤),这是一个非常合理的选择。Jinja2 是一个强大的模板引擎,支持动态逻辑(如 for 循环、if 条件、变量等),可以用来生成策略配置文件(如 JSON/YAML),然后由 Go 解析和执行策略逻辑。以下是详细设计方案、实现步骤和示例,重点确保策略的高度解耦、格式通用和覆盖大多数策略场景: + +--- + +1. Jinja2 模板的优势 + +- 动态逻辑支持:Jinja2 支持 for 循环、if/else 条件、变量和过滤器,适合生成动态策略配置,部分模拟 Pine Script 或 YAML 资源定义的逻辑。 + +- 格式灵活:可以输出 JSON、YAML 或其他格式,适合 Go 解析和回测。 + +- 解耦性:模板生成静态配置文件,与 Go 策略执行和回测模块分离。 + +- 易用性:Jinja2 语法简洁,易于学习和维护,适合你的编程背景。 + +- 局限性: + + - Jinja2 不支持复杂编程(如技术指标计算、时间序列处理),需要外置到 Go 脚本。 + + - 仅适合生成配置文件,不适合直接执行策略或回测逻辑。 + + +--- + +1. 设计方案:用 Jinja2 模板定义策略 + +a. 系统架构 + +1. Jinja2 模板: + + - 负责动态生成策略配置文件(如 JSON/YAML),嵌入 for 和 if 逻辑,定义策略参数、条件和订单。 + + - 输出标准格式,供 Go 脚本解析。 + +2. Go 策略模块: + + - 解析 Jinja2 渲染后的 JSON/YAML,执行策略逻辑(均线交叉、RSI 反转等),生成订单和绩效指标。 + + - 处理 OHLC 数据、特征化、回测,输出到 Elasticsearch。 + +3. 数据存储和可视化: + + - 将 OHLC 数据、特征和回测结果写入 Elasticsearch,通过 Kibana/Grafana 展示。 + + +b. 流程 + +- 用户编写 Jinja2 模板,定义策略逻辑。 + +- 用 Go 渲染模板,生成 JSON/YAML 配置文件。 + +- Go 脚本解析配置文件,执行策略、回测和量化分析。 + +- 结果写入 Elasticsearch,供 Kibana/Grafana 可视化。 + + +--- + +1. Jinja2 模板设计 + +a. 策略模板(strategy.j2) + +以下是一个用 Jinja2 模板定义均线交叉策略的示例,输出 YAML 格式,覆盖均线交叉、RSI 反转、突破策略等场景: + +jinja + +```text +{% if strategy_type == "SMACross" %} +apiVersion: trading.v1 +kind: TradingStrategy +metadata: + name: SMACrossStrategy + description: "Simple Moving Average Crossover Strategy" +spec: + params: + short_period: {{ short_period }} + long_period: {{ long_period }} + indicators: + {% for indicator in indicators %} + - name: {{ indicator.name }} + type: {{ indicator.type }} + source: {{ indicator.source }} + period: "{{ indicator.period }}" + {% endfor %} + conditions: + {% for condition in conditions %} + - name: {{ condition.name }} + type: {{ condition.type }} + source1: {{ condition.source1 }} + source2: {{ condition.source2 }} + operator: {{ condition.operator }} + {% endfor %} + actions: + {% for action in actions %} + - condition: {{ action.condition }} + order: + type: {{ action.order.type }} + side: {{ action.order.side }} + quantity: {{ action.order.quantity }} + {% if action.order.price is defined %}price: {{ action.order.price }}{% endif %} + {% endfor %} + risk_controls: + max_drawdown: -15.0 + position_limit: 2.0 + stop_loss: -5.0 +{% elif strategy_type == "RSIReversal" %} +apiVersion: trading.v1 +kind: TradingStrategy +metadata: + name: RSIReversalStrategy + description: "RSI Reversal Strategy" +spec: + params: + rsi_period: {{ rsi_period }} + overbought: {{ overbought }} + oversold: {{ oversold }} + indicators: + - name: rsi + type: rsi + source: close + period: "{{ rsi_period }}" + conditions: + {% if overbought %} + - name: overbought + type: threshold + source1: rsi + operator: ">" + value: {{ overbought }} + {% endif %} + {% if oversold %} + - name: oversold + type: threshold + source1: rsi + operator: "<" + value: {{ oversold }} + {% endif %} + actions: + {% if overbought %} + - condition: overbought + order: + type: market + side: sell + quantity: 1.0 + {% endif %} + {% if oversold %} + - condition: oversold + order: + type: market + side: buy + quantity: 1.0 + {% endif %} + risk_controls: + max_drawdown: -15.0 + stop_loss: -5.0 +{% endif %} +``` + +b. 模板变量 + +以下是渲染模板时需要提供的变量示例(Python 或 Go 代码可以生成这些变量): + +- Python 示例(用 jinja2 库渲染): + + python + + ```python + from jinja2 import Environment, FileSystemLoader + + env = Environment(loader=FileSystemLoader('templates')) + template = env.get_template('strategy.j2') + + data = { + "strategy_type": "SMACross", + "short_period": 5, + "long_period": 20, + "indicators": [ + {"name": "sma_short", "type": "sma", "source": "close", "period": "${short_period}"}, + {"name": "sma_long", "type": "sma", "source": "close", "period": "${long_period}"} + ], + "conditions": [ + {"name": "buy_signal", "type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_above"}, + {"name": "sell_signal", "type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_below"} + ], + "actions": [ + {"condition": "buy_signal", "order": {"type": "market", "side": "buy", "quantity": 1.0}}, + {"condition": "sell_signal", "order": {"type": "market", "side": "sell", "quantity": 1.0}} + ] + } + + output = template.render(**data) + with open("strategy.yaml", "w") as f: + f.write(output) + ``` + +- Go 示例(用 github.com/flosch/pongo2 或自定义实现): + + go + + ```go + package main + + import ( + "fmt" + "github.com/flosch/pongo2/v4" + "os" + ) + + func main() { + tpl, err := pongo2.FromFile("strategy.j2") + if err != nil { + fmt.Println("Error loading template:", err) + return + } + + data := pongo2.Context{ + "strategy_type": "SMACross", + "short_period": 5, + "long_period": 20, + "indicators": []map[string]interface{}{ + {"name": "sma_short", "type": "sma", "source": "close", "period": "${short_period}"}, + {"name": "sma_long", "type": "sma", "source": "close", "period": "${long_period}"}, + }, + "conditions": []map[string]interface{}{ + {"name": "buy_signal", "type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_above"}, + {"name": "sell_signal", "type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_below"}, + }, + "actions": []map[string]interface{}{ + {"condition": "buy_signal", "order": map[string]interface{}{"type": "market", "side": "buy", "quantity": 1.0}}, + {"condition": "sell_signal", "order": map[string]interface{}{"type": "market", "side": "sell", "quantity": 1.0}}, + }, + } + + output, err := tpl.Execute(data) + if err != nil { + fmt.Println("Error rendering template:", err) + return + } + + err = os.WriteFile("strategy.yaml", []byte(output), 0644) + if err != nil { + fmt.Println("Error writing file:", err) + return + } + fmt.Println("Strategy YAML generated successfully") + } + ``` + +- 安装 Go 依赖:go get github.com/flosch/pongo2/v4。 + + +c. 生成的 YAML 格式 + +渲染后生成如下的 YAML 文件(示例为均线交叉策略): + +yaml + +```yaml +apiVersion: trading.v1 +kind: TradingStrategy +metadata: + name: SMACrossStrategy + description: "Simple Moving Average Crossover Strategy" +spec: + params: + short_period: 5 + long_period: 20 + indicators: + - name: sma_short + type: sma + source: close + period: "${short_period}" + - name: sma_long + type: sma + source: close + period: "${long_period}" + conditions: + - name: buy_signal + type: cross + source1: sma_short + source2: sma_long + operator: cross_above + - name: sell_signal + type: cross + source1: sma_short + source2: sma_long + operator: cross_below + actions: + - condition: buy_signal + order: + type: market + side: buy + quantity: 1.0 + - condition: sell_signal + order: + type: market + side: sell + quantity: 1.0 + risk_controls: + max_drawdown: -15.0 + position_limit: 2.0 + stop_loss: -5.0 +``` + +--- + +1. Go 策略模块 + +- 解析生成的 YAML 文件,执行策略逻辑,生成订单和绩效指标。参考之前的 Go 代码: + + go + + ```go + package main + + import ( + "gopkg.in/yaml.v3" + "io/ioutil" + "fmt" + ) + + // 策略配置结构体(与 YAML 一致) + type StrategyConfig struct { + APIVersion string `yaml:"apiVersion"` + Kind string `yaml:"kind"` + Metadata struct { + Name string `yaml:"name"` + Description string `yaml:"description"` + } `yaml:"metadata"` + Spec struct { + Params map[string]interface{} `yaml:"params"` + Indicators []struct { + Name string `yaml:"name"` + Type string `yaml:"type"` + Source string `yaml:"source"` + Period int `yaml:"period"` + } `yaml:"indicators"` + Conditions []struct { + Name string `yaml:"name"` + Type string `yaml:"type"` + Source1 string `yaml:"source1"` + Source2 string `yaml:"source2"` + Operator string `yaml:"operator"` + } `yaml:"conditions"` + Actions []struct { + Condition string `yaml:"condition"` + Order struct { + Type string `yaml:"type"` + Side string `yaml:"side"` + Quantity float64 `yaml:"quantity"` + } `yaml:"order"` + } `yaml:"actions"` + RiskControls struct { + MaxDrawdown float64 `yaml:"max_drawdown"` + PositionLimit float64 `yaml:"position_limit"` + StopLoss float64 `yaml:"stop_loss"` + } `yaml:"risk_controls"` + } `yaml:"spec"` + } + + type SMACross struct { + ShortSMA float64 + LongSMA float64 + } + + func (s *SMACross) OnBar(bar Bar, config *StrategyConfig) []Order { + for _, ind := range config.Spec.Indicators { + if ind.Name == "sma_short" { + s.ShortSMA = calculateSMA(bar.Close, ind.Period) + } else if ind.Name == "sma_long" { + s.LongSMA = calculateSMA(bar.Close, ind.Period) + } + } + orders := make([]Order, 0) + for _, cond := range config.Spec.Conditions { + if cond.Type == "cross" && cond.Operator == "cross_above" && s.ShortSMA > s.LongSMA { + for _, action := range config.Spec.Actions { + if action.Condition == "buy_signal" { + orders = append(orders, Order{ + Type: action.Order.Type, + Side: action.Order.Side, + Quantity: action.Order.Quantity, + }) + } + } + } + } + return orders + } + + func main() { + data, err := ioutil.ReadFile("strategy.yaml") + if err != nil { + fmt.Printf("Error reading YAML: %v\n", err) + return + } + + var config StrategyConfig + err = yaml.Unmarshal(data, &config) + if err != nil { + fmt.Printf("Error parsing YAML: %v\n", err) + return + } + + // 加载 OHLC 数据(从 OKX 或 Elasticsearch) + bars := loadOHLCData() + + // 运行策略 + strategy := &SMACross{} + for _, bar := range bars { + orders := strategy.OnBar(bar, &config) + processOrders(orders) // 处理订单,更新绩效指标 + } + + // 输出结果到 Elasticsearch + writeResultsToElasticsearch(results) + } + + type Bar struct { + Close float64 + // 其他字段(如 Open、High、Low、Volume) + } + + type Order struct { + Type string + Side string + Quantity float64 + } + ``` + + +--- + +1. Jinja2 的功能覆盖 + +- 支持的逻辑: + + - for 循环:生成多个指标、条件或动作(如遍历均线周期)。 + + - if/else 条件:根据 strategy_type 选择不同策略模板。 + + - 变量和过滤器:动态插入参数(如 short_period、long_period)。 + +- 示例(Jinja2 循环和条件): + + jinja + + ```text + indicators: + {% for period in [5, 10, 20] %} + - name: sma_{{ period }} + type: sma + source: close + period: {{ period }} + {% endfor %} + conditions: + {% for period in [5, 10, 20] %} + {% if period < 15 %} + - name: sma_cross_{{ period }} + type: cross + source1: sma_{{ period }} + source2: sma_{{ period * 2 }} + operator: cross_above + {% endif %} + {% endfor %} + ``` + +- 局限性: + + - Jinja2 不支持技术指标计算(如 sma()、rsi())或时间序列处理,需外置到 Go 脚本。 + + - 仅适合生成静态配置文件,策略执行仍需 Go 或 Python 支持。 + + +--- + +1. 高度解耦性 + +- 策略与数据分离:Jinja2 模板生成 YAML/JSON 配置文件,Go 脚本解析和执行策略,无需直接依赖数据源。 + +- 策略与回测分离:回测逻辑由 Go 实现,独立于模板生成。 + +- 策略与可视化分离:可视化依赖 Elasticsearch 和 Kibana/Grafana,无需直接操作策略逻辑。 + + +--- + +1. 格式通用性 + +- 跨平台兼容:Jinja2 可输出 JSON/YAML,适合 Go(encoding/json、gopkg.in/yaml.v3)、Python(json、pyyaml)、JavaScript(JSON.parse)解析。 + +- 标准字段:定义通用字段(如 strategy_type、params、conditions、actions),便于扩展和共享。 + + +--- + +1. 覆盖策略应用场景 + +- 基本策略:均线交叉、RSI 反转、突破策略(通过模板动态生成)。 + +- 复杂策略:支持多条件组合(如 RSI + 均线交叉)、动态参数调整(通过变量)。 + +- 订单类型:支持市价单、限价单、止损单、止盈单(通过 actions.order)。 + +- 风险控制:通过 risk_controls 添加最大回撤、仓位限制等。 + + +--- + +1. 时间和资源估计 + +- 开发时间(基于你的 Go 经验): + + - Jinja2 模板设计:0.5-1 周(编写模板和测试)。 + + - Go 策略模块:1-2 周(解析 YAML/JSON、实现策略和回测)。 + + - 数据获取与 Elasticsearch 集成:1-2 周(用 Go 优化 OKX API 和存储)。 + + - 可视化配置:0.5-1 周(Kibana/Grafana 仪表盘设计)。 + +- 资源需求: + + - Linux 环境(CPU、内存适中),Elasticsearch、Go 依赖库(github.com/flosch/pongo2/v4 或自定义实现)。 + + +--- + +1. 总结 + +是的,你可以使用 Jinja2 模板(而不依赖 Ansible)来定义自定义量化交易策略,通过 for 循环和 if 条件动态生成策略配置文件(JSON/YAML),然后用 Go 解析和执行策略逻辑,确保高度解耦、格式通用和覆盖大多数策略场景。推荐路径: + +- 用 Jinja2 模板生成策略 YAML/JSON 文件。 + +- 用 Go 开发独立策略、数据处理和回测模块。 + +- 输出到 Elasticsearch,并用 Kibana/Grafana 可视化。 + + +如果你需要具体代码示例(Jinja2 模板优化或 Go 解析实现),可以告诉我,我会进一步提供帮助! + +不不,我不需要ansible, 我只需要模版和jinja2 + +好的,我理解了!如果你只想使用 Jinja2 模板(而不依赖 Ansible 或其他工具)来定义自定义量化交易策略,并结合你的需求(熟悉 Go 开发、Linux 本地部署、策略解耦、量化收益/最大回撤),这是一个非常合理且可行的选择。Jinja2 是一个强大的模板引擎,支持动态逻辑(如 for 循环、if 条件、变量等),可以用来生成策略配置文件(如 JSON 或 YAML),然后由 Go 解析和执行策略逻辑。以下是详细设计方案、实现步骤和示例,确保策略的高度解耦、格式通用,并覆盖大多数策略应用场景(如均线交叉、RSI 反转、突破策略等): + +--- + +1. Jinja2 模板的优势 + +- 动态逻辑支持:Jinja2 支持 for 循环、if/else 条件、变量和过滤器,适合生成动态策略配置,部分模拟 Pine Script 或 YAML 资源定义的逻辑。 + +- 格式灵活:可以输出 JSON、YAML 或其他格式,适合 Go 解析和回测。 + +- 解耦性:模板生成静态配置文件,与 Go 策略执行和回测模块分离。 + +- 易用性:Jinja2 语法简洁,易于学习和维护,适合你的编程背景。 + +- 独立性:无需依赖 Ansible 或其他框架,直接用 Go 渲染和解析,适合本地部署。 + +- 局限性: + + - Jinja2 不支持复杂编程(如技术指标计算、时间序列处理),需要外置到 Go 脚本。 + + - 仅适合生成配置文件,不适合直接执行策略或回测逻辑。 + + +--- + +1. 设计方案:用 Jinja2 模板定义策略 + +a. 系统架构 + +1. Jinja2 模板: + + - 负责动态生成策略配置文件(如 JSON 或 YAML),嵌入 for 和 if 逻辑,定义策略参数、条件和订单。 + + - 输出标准格式(如 JSON/YAML),供 Go 脚本解析。 + +2. Go 策略模块: + + - 解析 Jinja2 渲染后的 JSON/YAML,执行策略逻辑(均线交叉、RSI 反转等),生成订单和绩效指标。 + + - 处理 OHLC 数据、特征化、回测,输出到 Elasticsearch。 + +3. 数据存储和可视化: + + - 将 OHLC 数据、特征和回测结果写入 Elasticsearch,通过 Kibana 或 Grafana 展示。 + + +b. 流程 + +- 用户编写 Jinja2 模板,定义策略逻辑(如均线交叉、RSI 反转)。 + +- 用 Go 渲染模板,生成 JSON/YAML 配置文件。 + +- Go 脚本解析配置文件,执行策略、回测和量化分析(收益、最大回撤)。 + +- 将结果存储到 Elasticsearch,并用 Kibana/Grafana 展示。 + + +--- + +1. Jinja2 模板设计 + +a. 模板示例:均线交叉策略(JSON 输出) + +以下是一个 Jinja2 模板,用于生成均线交叉策略的 JSON 配置文件,覆盖你的需求(如策略解耦、通用格式、覆盖策略场景): + +jinja + +```text +{ + "strategy": "SMACross", + "params": { + "short_period": {{ short_period }}, + "long_period": {{ long_period }} + }, + "conditions": [ + {% for condition in conditions %} + { + "type": "{{ condition.type }}", + "source1": "{{ condition.source1 }}", + "source2": "{{ condition.source2 }}", + "operator": "{{ condition.operator }}" + }{% if not loop.last %},{% endif %} + {% endfor %} + ], + "actions": [ + {% for action in actions %} + { + "condition_met": "{{ action.condition_met }}", + "order": { + "type": "{{ action.order.type }}", + "side": "{{ action.order.side }}", + "quantity": {{ action.order.quantity }} + } + }{% if not loop.last %},{% endif %} + {% endfor %} + ], + "risk_controls": { + "max_drawdown": -15.0, + "position_limit": 2.0 + } +} +``` + +- 变量说明: + + - short_period:短期均线周期(如 5)。 + + - long_period:长期均线周期(如 20)。 + + - conditions:策略条件列表(如均线交叉)。 + + - actions:满足条件后的订单生成(如买入、卖出)。 + +- 示例数据(Python 字典,用于渲染): + + python + + ```python + data = { + "short_period": 5, + "long_period": 20, + "conditions": [ + {"type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_above"}, + {"type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_below"} + ], + "actions": [ + {"condition_met": "cross_above", "order": {"type": "market", "side": "buy", "quantity": 1.0}}, + {"condition_met": "cross_below", "order": {"type": "market", "side": "sell", "quantity": 1.0}} + ] + } + ``` + +- 渲染结果(JSON): + + json + + ```json + { + "strategy": "SMACross", + "params": { + "short_period": 5, + "long_period": 20 + }, + "conditions": [ + { + "type": "cross", + "source1": "sma_short", + "source2": "sma_long", + "operator": "cross_above" + }, + { + "type": "cross", + "source1": "sma_short", + "source2": "sma_long", + "operator": "cross_below" + } + ], + "actions": [ + { + "condition_met": "cross_above", + "order": { + "type": "market", + "side": "buy", + "quantity": 1.0 + } + }, + { + "condition_met": "cross_below", + "order": { + "type": "market", + "side": "sell", + "quantity": 1.0 + } + } + ], + "risk_controls": { + "max_drawdown": -15.0, + "position_limit": 2.0 + } + } + ``` + + +b. 模板示例:RSI 反转策略(YAML 输出) + +以下是一个 Jinja2 模板,用于生成 RSI 反转策略的 YAML 配置文件: + +jinja + +```text +{% if strategy_type == "RSIReversal" %} +apiVersion: trading.v1 +kind: TradingStrategy +metadata: + name: RSIReversalStrategy + description: "RSI Reversal Strategy" +spec: + params: + rsi_period: {{ rsi_period }} + overbought: {{ overbought }} + oversold: {{ oversold }} + indicators: + - name: rsi + type: rsi + source: close + period: "{{ rsi_period }}" + conditions: + {% for condition in conditions %} + - name: {{ condition.name }} + type: {{ condition.type }} + source1: {{ condition.source1 }} + operator: {{ condition.operator }} + value: {{ condition.value }} + {% endfor %} + actions: + {% for action in actions %} + - condition: {{ action.condition }} + order: + type: {{ action.order.type }} + side: {{ action.order.side }} + quantity: {{ action.order.quantity }} + {% endfor %} + risk_controls: + stop_loss: -5.0 +{% endif %} +``` + +- 示例数据(Python 字典,用于渲染): + + python + + ```python + data = { + "strategy_type": "RSIReversal", + "rsi_period": 14, + "overbought": 70, + "oversold": 30, + "conditions": [ + {"name": "overbought", "type": "threshold", "source1": "rsi", "operator": ">", "value": 70}, + {"name": "oversold", "type": "threshold", "source1": "rsi", "operator": "<", "value": 30} + ], + "actions": [ + {"condition": "overbought", "order": {"type": "market", "side": "sell", "quantity": 1.0}}, + {"condition": "oversold", "order": {"type": "market", "side": "buy", "quantity": 1.0}} + ] + } + ``` + +- 渲染结果(YAML): + + yaml + + ```yaml + apiVersion: trading.v1 + kind: TradingStrategy + metadata: + name: RSIReversalStrategy + description: "RSI Reversal Strategy" + spec: + params: + rsi_period: 14 + overbought: 70 + oversold: 30 + indicators: + - name: rsi + type: rsi + source: close + period: "14" + conditions: + - name: overbought + type: threshold + source1: rsi + operator: ">" + value: 70 + - name: oversold + type: threshold + source1: rsi + operator: "<" + value: 30 + actions: + - condition: overbought + order: + type: market + side: sell + quantity: 1.0 + - condition: oversold + order: + type: market + side: buy + quantity: 1.0 + risk_controls: + stop_loss: -5.0 + ``` + + +c. 模板示例:复杂多条件策略 + +Jinja2 支持 for 和 if,可以生成复杂策略逻辑: + +jinja + +```text +{ + "strategy": "{{ strategy_name }}", + "params": { + {% for key, value in params.items() %} + "{{ key }}": {{ value }}{% if not loop.last %},{% endif %} + {% endfor %} + }, + "conditions": [ + {% for condition in conditions %} + { + "type": "{{ condition.type }}", + "source1": "{{ condition.source1 }}", + "source2": "{{ condition.source2 | default('null') }}", + "operator": "{{ condition.operator }}" + }{% if not loop.last %},{% endif %} + {% endfor %} + ], + "actions": [ + {% if complex_condition %} + {% for action in actions %} + { + "condition_met": "{{ action.condition_met }}", + "order": { + "type": "{{ action.order.type }}", + "side": "{{ action.order.side }}", + "quantity": {{ action.order.quantity }} + } + }{% if not loop.last %},{% endif %} + {% endfor %} + {% else %} + { + "condition_met": "default", + "order": { + "type": "market", + "side": "buy", + "quantity": 1.0 + } + } + {% endif %} + ], + "risk_controls": { + "max_drawdown": -15.0, + "position_limit": {{ position_limit | default(2.0) }} + } +} +``` + +- 示例数据(Python 字典): + + python + + ```python + data = { + "strategy_name": "MultiConditionStrategy", + "params": {"rsi_period": 14, "sma_period": 20}, + "conditions": [ + {"type": "threshold", "source1": "rsi", "operator": ">", "source2": 70}, + {"type": "cross", "source1": "sma", "operator": "cross_below", "source2": "close"} + ], + "actions": [ + {"condition_met": ">", "order": {"type": "market", "side": "sell", "quantity": 1.0}}, + {"condition_met": "cross_below", "order": {"type": "market", "side": "buy", "quantity": 1.0}} + ], + "complex_condition": True, + "position_limit": 3.0 + } + ``` + +- 渲染结果(JSON): + + json + + ```json + { + "strategy": "MultiConditionStrategy", + "params": { + "rsi_period": 14, + "sma_period": 20 + }, + "conditions": [ + { + "type": "threshold", + "source1": "rsi", + "source2": null, + "operator": ">" + }, + { + "type": "cross", + "source1": "sma", + "source2": "close", + "operator": "cross_below" + } + ], + "actions": [ + { + "condition_met": ">", + "order": { + "type": "market", + "side": "sell", + "quantity": 1.0 + } + }, + { + "condition_met": "cross_below", + "order": { + "type": "market", + "side": "buy", + "quantity": 1.0 + } + } + ], + "risk_controls": { + "max_drawdown": -15.0, + "position_limit": 3.0 + } + } + ``` + + +--- + +1. 用 Go 渲染和解析 Jinja2 模板 + +a. 安装 Jinja2 绑定 + +- Go 没有直接的 Jinja2 库,但可以通过 Python 的 Jinja2 库调用,或用第三方 Go 模板引擎模拟(例如 golang.org/x/text/template 类似功能,但不支持所有 Jinja2 特性)。 + +- 推荐方法:用 Go 调用 Python 的 Jinja2,通过 os/exec 执行 Python 脚本渲染模板。 + + +b. Go 代码示例:渲染 Jinja2 模板 + +go + +```go +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "os" + "os/exec" +) + +type StrategyData struct { + StrategyName string `json:"strategy_name"` + Params map[string]int `json:"params"` + Conditions []Condition `json:"conditions"` + Actions []Action `json:"actions"` + ComplexCondition bool `json:"complex_condition"` + PositionLimit float64 `json:"position_limit"` +} + +type Condition struct { + Type string `json:"type"` + Source1 string `json:"source1"` + Source2 string `json:"source2"` + Operator string `json:"operator"` +} + +type Action struct { + ConditionMet string `json:"condition_met"` + Order Order `json:"order"` +} + +type Order struct { + Type string `json:"type"` + Side string `json:"side"` + Quantity float64 `json:"quantity"` +} + +func renderJinja2Template(data StrategyData, templatePath, outputPath string) error { + // 准备 Python 脚本调用 Jinja2 + pythonScript := ` +import json +import jinja2 +import sys + +data = json.loads(sys.argv[1]) +template_path = sys.argv[2] +output_path = sys.argv[3] + +with open(template_path, 'r') as f: + template = jinja2.Template(f.read()) + +with open(output_path, 'w') as f: + f.write(template.render(**data)) + ` + // 写入临时 Python 脚本 + pythonFile, err := os.Create("render_jinja2.py") + if err != nil { + return err + } + defer pythonFile.Close() + pythonFile.WriteString(pythonScript) + + // 序列化 Go 数据为 JSON + jsonData, err := json.Marshal(data) + if err != nil { + return err + } + + // 执行 Python 脚本渲染模板 + cmd := exec.Command("python3", "render_jinja2.py", string(jsonData), templatePath, outputPath) + var out bytes.Buffer + cmd.Stdout = &out + err = cmd.Run() + if err != nil { + return fmt.Errorf("error rendering template: %v, output: %s", err, out.String()) + } + return nil +} + +func main() { + data := StrategyData{ + StrategyName: "MultiConditionStrategy", + Params: map[string]int{"rsi_period": 14, "sma_period": 20}, + Conditions: []Condition{ + {Type: "threshold", Source1: "rsi", Operator: ">", Source2: "70"}, + {Type: "cross", Source1: "sma", Source2: "close", Operator: "cross_below"}, + }, + Actions: []Action{ + {ConditionMet: ">", Order: Order{Type: "market", Side: "sell", Quantity: 1.0}}, + {ConditionMet: "cross_below", Order: Order{Type: "market", Side: "buy", Quantity: 1.0}}, + }, + ComplexCondition: true, + PositionLimit: 3.0, + } + + err := renderJinja2Template(data, "strategy_template.j2", "strategy.json") + if err != nil { + fmt.Printf("Error: %v\n", err) + return + } + fmt.Println("Strategy configuration generated successfully at strategy.json") +} +``` + +- 依赖: + + - 安装 Python 3 和 jinja2 库:pip install jinja2。 + + - 确保 Go 环境有权限调用 Python。 + + +c. Go 解析 JSON/YAML + +- 解析生成的 JSON/YAML,执行策略逻辑(参考之前的 Go 代码)。例如: + + go + + ```go + package strategy + + import ( + "encoding/json" + "io/ioutil" + ) + + func LoadStrategyFromJSON(filePath string) (*StrategyConfig, error) { + data, err := ioutil.ReadFile(filePath) + if err != nil { + return nil, err + } + var config StrategyConfig + err = json.Unmarshal(data, &config) + if err != nil { + return nil, err + } + return &config, nil + } + + type StrategyConfig struct { + Strategy string `json:"strategy"` + Params map[string]int `json:"params"` + Conditions []Condition `json:"conditions"` + Actions []Action `json:"actions"` + RiskControls RiskControls `json:"risk_controls"` + } + + type Condition struct { + Type string `json:"type"` + Source1 string `json:"source1"` + Source2 string `json:"source2"` + Operator string `json:"operator"` + } + + type Action struct { + ConditionMet string `json:"condition_met"` + Order Order `json:"order"` + } + + type Order struct { + Type string `json:"type"` + Side string `json:"side"` + Quantity float64 `json:"quantity"` + } + + type RiskControls struct { + MaxDrawdown float64 `json:"max_drawdown"` + PositionLimit float64 `json:"position_limit"` + } + + func (s *SMACross) OnBar(bar Bar, config *StrategyConfig) []Order { + shortPeriod := config.Params["short_period"] + longPeriod := config.Params["long_period"] + s.ShortSMA = calculateSMA(bar.Close, shortPeriod) + s.LongSMA = calculateSMA(bar.Close, longPeriod) + orders := make([]Order, 0) + for _, cond := range config.Conditions { + if cond.Type == "cross" && cond.Operator == "cross_above" && s.ShortSMA > s.LongSMA { + for _, action := range config.Actions { + if action.ConditionMet == "cross_above" { + orders = append(orders, action.Order) + } + } + } + } + return orders + } + ``` + + +--- + +1. 策略解耦性、格式通用性和覆盖场景 + +- 高度解耦: + + - Jinja2 模板生成静态 JSON/YAML 文件,Go 脚本解析和执行策略,无需直接依赖框架或数据源。 + + - 策略逻辑通过配置文件与数据处理、回测、可视化分离。 + +- 格式通用: + + - JSON/YAML 跨平台,适合 Go、Python、JavaScript 解析,易于与 NautilusTrader、OTP 或 Elasticsearch 集成。 + +- 覆盖绝大多数策略场景: + + - 支持均线交叉、RSI 反转、突破策略等,通过 for 和 if 动态生成条件和动作。 + + - 可扩展支持复杂策略(如多条件组合、动态参数)。 + + +--- + +1. Jinja2 的局限性(需要 Go 补充) + +- 技术指标计算:Jinja2 无法直接计算 sma()、rsi() 等,需用 Go 实现(如 gonum 库)。 + +- 实时数据处理:Jinja2 仅生成静态配置文件,策略执行和回测需用 Go 完成。 + +- 复杂逻辑:for 和 if 有限制,复杂循环或函数需用 Go 解析器扩展。 + + +--- + +1. 时间和资源估计 + +- 开发时间(基于你的 Go 经验): + + - Jinja2 模板设计:0.5-1 周(编写和测试模板)。 + + - Go 渲染和解析:1-2 周(实现模板渲染和策略逻辑)。 + + - 数据获取与回测:1-2 周(用 Go 优化 OKX API 和计算)。 + + - 可视化配置:0.5-1 周(Kibana/Grafana 仪表盘设计)。 + +- 资源需求: + + - Linux 环境(CPU、内存适中),Python 3(Jinja2 依赖)、Go 依赖库(gonum 等)。 + + +--- + +1. 总结 + +是的,你可以使用 Jinja2 模板(无需 Ansible)定义自定义量化交易策略,通过 for 和 if 动态生成 JSON/YAML 配置文件,确保高度解耦、格式通用,并覆盖大多数策略场景(如均线交叉、RSI 反转)。Go 负责渲染模板、解析配置文件、执行策略和回测,输出到 Elasticsearch,并用 Kibana/Grafana 展示结果。 + +如果你需要调整模板(例如新增逻辑或优化格式),或需要更多 Go 代码示例(渲染或解析),可以告诉我,我会进一步提供帮助! + +不不,我不需要ansible, 我只需要模版和jinja2 + +好的,我明白了!以下是专注于使用 Jinja2 模板(不依赖 Ansible 或其他工具)来定义自定义量化交易策略的详细设计方案、实现步骤和示例,确保策略的高度解耦、格式通用,并覆盖大多数策略应用场景(如均线交叉、RSI 反转、突破策略等),结合你的需求(熟悉 Go 开发、Linux 本地部署、策略解耦、量化收益/最大回撤): + +--- + +1. Jinja2 模板的优势 + +- 动态逻辑支持:Jinja2 支持 for 循环、if/else 条件、变量和过滤器,适合生成动态策略配置,部分模拟 Pine Script 或 YAML 资源定义的逻辑。 + +- 格式灵活:可以输出 JSON、YAML 或其他格式,适合 Go 解析和回测。 + +- 解耦性:模板生成静态配置文件,与 Go 策略执行和回测模块分离。 + +- 易用性:Jinja2 语法简洁,易于学习和维护,适合你的编程背景。 + +- 独立性:无需依赖任何框架,直接用 Go 渲染和解析,适合本地 Linux 部署。 + +- 局限性: + + - Jinja2 不支持复杂编程(如技术指标计算、时间序列处理),需要外置到 Go 脚本。 + + - 仅适合生成配置文件,不适合直接执行策略或回测逻辑。 + + +--- + +1. 设计方案:用 Jinja2 模板定义策略 + +a. 系统架构 + +1. Jinja2 模板: + + - 负责动态生成策略配置文件(如 JSON 或 YAML),嵌入 for 和 if 逻辑,定义策略参数、条件和订单。 + + - 输出标准格式(如 JSON/YAML),供 Go 脚本解析。 + +2. Go 策略模块: + + - 解析 Jinja2 渲染后的 JSON/YAML,执行策略逻辑(均线交叉、RSI 反转等),生成订单和绩效指标。 + + - 处理 OHLC 数据、特征化、回测,输出到 Elasticsearch。 + +3. 数据存储和可视化: + + - 将 OHLC 数据、特征和回测结果写入 Elasticsearch,通过 Kibana 或 Grafana 展示。 + + +b. 流程 + +- 用户编写 Jinja2 模板,定义策略逻辑(如均线交叉、RSI 反转)。 + +- 用 Go 渲染模板,生成 JSON/YAML 配置文件。 + +- Go 脚本解析配置文件,执行策略、回测和量化分析(收益、最大回撤等)。 + +- 结果写入 Elasticsearch,供 Kibana/Grafana 可视化。 + + +--- + +1. Jinja2 模板设计 + +a. 策略模板(strategy.j2) + +以下是一个用 Jinja2 模板定义均线交叉策略的示例,输出 YAML 格式,覆盖均线交叉、RSI 反转、突破策略等场景。模板支持动态参数、条件和订单生成,确保解耦性和通用性: + +jinja + +```text +{% if strategy_type == "SMACross" %} +apiVersion: trading.v1 +kind: TradingStrategy +metadata: + name: SMACrossStrategy + description: "Simple Moving Average Crossover Strategy" +spec: + params: + short_period: {{ short_period | default(5) }} + long_period: {{ long_period | default(20) }} + indicators: + {% for indicator in indicators %} + - name: {{ indicator.name }} + type: {{ indicator.type }} + source: {{ indicator.source }} + period: "{{ indicator.period }}" + {% endfor %} + conditions: + {% for condition in conditions %} + - name: {{ condition.name }} + type: {{ condition.type }} + source1: {{ condition.source1 }} + source2: {{ condition.source2 }} + operator: {{ condition.operator }} + {% endfor %} + actions: + {% for action in actions %} + - condition: {{ action.condition }} + order: + type: {{ action.order.type }} + side: {{ action.order.side }} + quantity: {{ action.order.quantity }} + {% if action.order.price is defined %}price: {{ action.order.price }}{% endif %} + {% endfor %} + risk_controls: + max_drawdown: {{ max_drawdown | default(-15.0) }} + position_limit: {{ position_limit | default(2.0) }} + stop_loss: {{ stop_loss | default(-5.0) }} +{% elif strategy_type == "RSIReversal" %} +apiVersion: trading.v1 +kind: TradingStrategy +metadata: + name: RSIReversalStrategy + description: "RSI Reversal Strategy" +spec: + params: + rsi_period: {{ rsi_period | default(14) }} + overbought: {{ overbought | default(70) }} + oversold: {{ oversold | default(30) }} + indicators: + - name: rsi + type: rsi + source: close + period: "{{ rsi_period }}" + conditions: + {% if overbought %} + - name: overbought + type: threshold + source1: rsi + operator: ">" + value: {{ overbought }} + {% endif %} + {% if oversold %} + - name: oversold + type: threshold + source1: rsi + operator: "<" + value: {{ oversold }} + {% endif %} + actions: + {% if overbought %} + - condition: overbought + order: + type: market + side: sell + quantity: 1.0 + {% endif %} + {% if oversold %} + - condition: oversold + order: + type: market + side: buy + quantity: 1.0 + {% endif %} + risk_controls: + max_drawdown: {{ max_drawdown | default(-15.0) }} + stop_loss: {{ stop_loss | default(-5.0) }} +{% elif strategy_type == "Breakout" %} +apiVersion: trading.v1 +kind: TradingStrategy +metadata: + name: BreakoutStrategy + description: "Price Breakout Strategy" +spec: + params: + breakout_period: {{ breakout_period | default(20) }} + indicators: + - name: high_period + type: highest + source: high + period: "{{ breakout_period }}" + - name: low_period + type: lowest + source: low + period: "{{ breakout_period }}" + conditions: + - name: breakout_up + type: compare + source1: close + source2: high_period + operator: ">" + - name: breakout_down + type: compare + source1: close + source2: low_period + operator: "<" + actions: + - condition: breakout_up + order: + type: market + side: buy + quantity: 1.0 + - condition: breakout_down + order: + type: market + side: sell + quantity: 1.0 + risk_controls: + max_drawdown: {{ max_drawdown | default(-15.0) }} + position_limit: {{ position_limit | default(2.0) }} +{% endif %} +``` + +- 说明: + + - 模板支持三种策略类型(SMACross、RSIReversal、Breakout),通过 strategy_type 变量选择。 + + - 使用 for 循环生成多个指标、条件和动作,确保动态性。 + + - 使用 if 条件动态生成特定策略的逻辑(如 RSI 反转的超买/超卖条件)。 + + - default 过滤器提供默认值,增强鲁棒性。 + + - 输出 YAML 格式,便于 Go 解析和回测。 + + +b. 渲染变量 + +以下是渲染模板所需的变量示例(可通过 Go 代码动态提供): + +go + +```go +vars := map[string]interface{}{ + "strategy_type": "SMACross", + "short_period": 5, + "long_period": 20, + "indicators": []map[string]interface{}{ + {"name": "sma_short", "type": "sma", "source": "close", "period": "${params.short_period}"}, + {"name": "sma_long", "type": "sma", "source": "close", "period": "${params.long_period}"}, + }, + "conditions": []map[string]interface{}{ + {"name": "buy_signal", "type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_above"}, + {"name": "sell_signal", "type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_below"}, + }, + "actions": []map[string]interface{}{ + {"condition": "buy_signal", "order": map[string]interface{}{"type": "market", "side": "buy", "quantity": 1.0}}, + {"condition": "sell_signal", "order": map[string]interface{}{"type": "market", "side": "sell", "quantity": 1.0}}, + }, + "max_drawdown": -15.0, + "position_limit": 2.0, + "stop_loss": -5.0, +} +``` + +--- + +1. 用 Go 渲染和解析 Jinja2 模板 + +a. 安装 Jinja2 绑定 + +- 在 Go 中使用 github.com/flosch/pongo2 或 github.com/Shopify/go-lua 实现 Jinja2 类似功能。以下使用 github.com/flosch/pongo2,因为它支持类似 Jinja2 的模板语法: + + +bash + +```bash +go get github.com/flosch/pongo2 +``` + +b. Go 代码:渲染模板 + +go + +```go +package main + +import ( + "fmt" + "os" + "github.com/flosch/pongo2" +) + +func main() { + // 定义模板路径 + templatePath := "strategy.j2" + outputPath := "strategy.yaml" + + // 渲染变量 + vars := pongo2.Context{ + "strategy_type": "SMACross", + "short_period": 5, + "long_period": 20, + "indicators": []map[string]interface{}{ + {"name": "sma_short", "type": "sma", "source": "close", "period": "${params.short_period}"}, + {"name": "sma_long", "type": "sma", "source": "close", "period": "${params.long_period}"}, + }, + "conditions": []map[string]interface{}{ + {"name": "buy_signal", "type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_above"}, + {"name": "sell_signal", "type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_below"}, + }, + "actions": []map[string]interface{}{ + {"condition": "buy_signal", "order": map[string]interface{}{"type": "market", "side": "buy", "quantity": 1.0}}, + {"condition": "sell_signal", "order": map[string]interface{}{"type": "market", "side": "sell", "quantity": 1.0}}, + }, + "max_drawdown": -15.0, + "position_limit": 2.0, + "stop_loss": -5.0, + } + + // 加载和渲染模板 + tpl, err := pongo2.FromFile(templatePath) + if err != nil { + fmt.Printf("Error loading template: %v\n", err) + return + } + + output, err := tpl.Execute(vars) + if err != nil { + fmt.Printf("Error rendering template: %v\n", err) + return + } + + // 写入文件 + err = os.WriteFile(outputPath, []byte(output), 0644) + if err != nil { + fmt.Printf("Error writing file: %v\n", err) + return + } + + fmt.Println("Strategy YAML generated successfully:", outputPath) +} +``` + +c. Go 代码:解析 YAML 并执行策略 + +(参考之前的 Go 代码,解析 YAML 并执行策略逻辑) + +go + +```go +package strategy + +import ( + "gopkg.in/yaml.v3" + "io/ioutil" +) + +type StrategyConfig struct { + APIVersion string `yaml:"apiVersion"` + Kind string `yaml:"kind"` + Metadata Metadata `yaml:"metadata"` + Spec StrategySpec `yaml:"spec"` +} + +type Metadata struct { + Name string `yaml:"name"` + Description string `yaml:"description"` +} + +type StrategySpec struct { + Params map[string]interface{} `yaml:"params"` + Indicators []Indicator `yaml:"indicators"` + Conditions []Condition `yaml:"conditions"` + Actions []Action `yaml:"actions"` +} + +type Indicator struct { + Name string `yaml:"name"` + Type string `yaml:"type"` + Source string `yaml:"source"` + Period int `yaml:"period"` +} + +type Condition struct { + Name string `yaml:"name"` + Type string `yaml:"type"` + Source1 string `yaml:"source1"` + Source2 string `yaml:"source2"` + Operator string `yaml:"operator"` +} + +type Action struct { + Condition string `yaml:"condition"` + Order Order `yaml:"order"` +} + +type Order struct { + Type string `yaml:"type"` + Side string `yaml:"side"` + Quantity float64 `yaml:"quantity"` +} + +func LoadStrategyFromYAML(filePath string) (*StrategyConfig, error) { + data, err := ioutil.ReadFile(filePath) + if err != nil { + return nil, err + } + var config StrategyConfig + err = yaml.Unmarshal(data, &config) + if err != nil { + return nil, err + } + return &config, nil +} + +type SMACross struct { + ShortSMA float64 + LongSMA float64 +} + +func (s *SMACross) OnBar(bar Bar, config *StrategyConfig) []Order { + for _, ind := range config.Spec.Indicators { + if ind.Name == "sma_short" { + s.ShortSMA = calculateSMA(bar.Close, ind.Period) + } else if ind.Name == "sma_long" { + s.LongSMA = calculateSMA(bar.Close, ind.Period) + } + } + orders := make([]Order, 0) + for _, cond := range config.Spec.Conditions { + if cond.Type == "cross" && cond.Operator == "cross_above" && s.ShortSMA > s.LongSMA { + for _, action := range config.Spec.Actions { + if action.Condition == "buy_signal" { + orders = append(orders, action.Order) + } + } + } + } + return orders +} +``` + +--- + +1. 高度解耦性 + +- 策略与数据分离:Jinja2 模板生成静态 JSON/YAML,Go 脚本解析并处理 OHLC 数据,无需直接依赖数据源。 + +- 策略与回测分离:回测逻辑独立于模板,Go 模块接收配置文件执行策略。 + +- 策略与可视化分离:可视化仅依赖 Elasticsearch 数据,无需直接操作策略逻辑。 + + +--- + +1. 格式通用性 + +- 跨平台兼容:JSON/YAML 可被 Go(encoding/json、gopkg.in/yaml.v3)、Python(json、pyyaml)、JavaScript(JSON.parse、js-yaml)解析。 + +- 标准字段:模板定义通用字段(如 strategy_type、params、conditions、actions),便于扩展和共享。 + + +--- + +1. 覆盖绝大多数策略应用场景 + +- 基本策略: + + - 均线交叉:通过 SMACross 模板定义 conditions 和 actions。 + + - RSI 反转:通过 RSIReversal 模板定义 RSI 条件和订单。 + + - 突破策略:通过 Breakout 模板定义价格突破条件和订单。 + +- 复杂策略: + + - 支持多条件组合(如 “如果 RSI > 70 且价格 > SMA,则卖出”)。 + + - 支持动态参数(如周期、阈值通过变量调整)。 + +- 订单类型:支持市价单、限价单、止损单、止盈单等。 + + +--- + +1. 实现步骤 + +2. 编写 Jinja2 模板: + + - 创建 strategy.j2,定义策略逻辑(如上例)。 + +2. 用 Go 渲染模板: + + - 安装 github.com/flosch/pongo2,编写 Go 脚本渲染模板,生成 JSON/YAML 文件。 + +3. 用 Go 解析和执行: + + - 解析生成的 JSON/YAML,执行策略逻辑,生成订单和绩效指标。 + +4. 数据获取与特征化: + + - 用 Go 从 OKX 获取 OHLC 数据,生成特征(如 SMA、RSI),写入 Elasticsearch。 + +5. 回测与存储: + + - 用 Go 开发回测模块,计算收益、最大回撤,输出到 Elasticsearch。 + +6. 可视化: + + - 用 Kibana/Grafana 查询 Elasticsearch 数据,展示 K 线图、收益曲线和风险指标。 + +7. 测试与优化: + + - 为 Go 模块编写单元测试,验证策略独立性和功能。 + + +--- + +1. 时间和资源估计 + +- 开发时间(基于你的 Go 经验): + + - Jinja2 模板设计:0.5-1 周(编写和测试模板)。 + + - Go 渲染与策略模块:1-2 周(实现解析和执行逻辑)。 + + - 数据获取与回测:1-2 周(用 Go 优化 OKX API 和计算)。 + + - 可视化配置:0.5-1 周(Kibana/Grafana 仪表盘设计)。 + +- 资源需求: + + - Linux 环境(CPU、内存适中),Elasticsearch、Go 依赖库(github.com/flosch/pongo2、gopkg.in/yaml.v3)。 + + +--- + +1. 总结 + +使用 Jinja2 模板(无需 Ansible)来定义自定义量化交易策略是可行的,通过动态生成 JSON/YAML 配置文件,确保策略高度解耦、格式通用,并覆盖大多数策略场景。Go 负责渲染模板、解析配置文件、执行策略和回测,确保本地部署和灵活性。 + +如果你需要调整模板(例如新增策略类型或优化逻辑),或需要 Go 代码示例(渲染或解析实现),可以告诉我,我会进一步提供帮助! + +是否可以像ansible那样, 用yaml结合jinja2 , 比如类似: + +--- + +- name: Write hostname hosts: all tasks: + - name: write hostname using jinja2 ansible.builtin.template: src: templates/test.j2 dest: /tmp/hostname + +是的,你的建议非常有趣且可行!虽然你明确表示不需要 Ansible,但可以将 Ansible Playbook 的 YAML 结构和 Jinja2 模板的组合理念应用到你的量化交易策略定义中,而不依赖 Ansible 本身。通过用 YAML 结合 Jinja2 来定义策略逻辑,你可以创建一个类似的任务驱动结构,用于生成策略配置文件(JSON/YAML),然后由 Go 解析和执行。这种方法可以模拟 Ansible 的任务编排方式,确保策略的高度解耦、格式通用,并覆盖大多数策略应用场景(如均线交叉、RSI 反转、突破策略等)。以下是详细设计方案、实现步骤和示例,结合你的需求(熟悉 Go 开发、Linux 本地部署、策略解耦、量化收益/最大回撤): + +--- + +1. 设计理念:YAML + Jinja2 的策略定义 + +- 灵感来源:借鉴 Ansible Playbook 的结构(任务列表、变量、模板),用 YAML 定义策略生成的任务,并用 Jinja2 模板动态渲染策略配置文件(如 JSON/YAML)。 + +- 目标: + + - 提供类似 Ansible 的声明式结构,定义“做什么”(生成策略)而非“如何做”(具体逻辑由 Go 实现)。 + + - 确保策略逻辑高度解耦,与数据处理、回测和执行分离。 + + - 支持动态参数、条件和订单生成,覆盖均线交叉、RSI 反转等常见策略。 + +- 实现方式: + + - 用 YAML 定义一个任务列表,指定策略类型、参数和目标输出文件。 + + - 用 Jinja2 模板渲染 YAML 中的变量,生成策略配置文件(如 JSON/YAML)。 + + - 用 Go 解析生成的配置文件,执行策略逻辑、回测和量化分析。 + + +--- + +1. YAML + Jinja2 方案的优势 + +- 结构化定义:YAML 提供清晰的任务和变量结构,便于阅读和维护。 + +- 动态性:Jinja2 支持 for 循环、if/else 条件,动态生成策略逻辑。 + +- 解耦性:策略通过 YAML 和 Jinja2 生成静态配置文件,Go 脚本独立解析和执行,无需依赖框架。 + +- 通用性:输出 JSON/YAML 格式,适合 Go、Python 和其他语言解析。 + +- 灵活性:支持扩展复杂策略和动态参数。 + +- 局限性: + + - YAML 和 Jinja2 不支持技术指标计算或时间序列处理,需外置到 Go 脚本。 + + - 仅适合生成配置文件,策略执行和回测需用 Go 实现。 + + +--- + +1. 设计方案:YAML + Jinja2 策略定义 + +a. YAML 结构(strategy_tasks.yaml) + +以下是一个类似 Ansible Playbook 的 YAML 结构,用于定义生成策略的任务,结合 Jinja2 模板渲染策略配置文件: + +yaml + +```yaml +--- +- name: Generate Trading Strategy Configuration + tasks: + - name: Define Strategy Parameters + vars: + strategy_type: "SMACross" + short_period: 5 + long_period: 20 + indicators: + - name: sma_short + type: sma + source: close + period: "{{ short_period }}" + - name: sma_long + type: sma + source: close + period: "{{ long_period }}" + conditions: + - name: buy_signal + type: cross + source1: sma_short + source2: sma_long + operator: cross_above + - name: sell_signal + type: cross + source1: sma_short + source2: sma_long + operator: cross_below + actions: + - condition: buy_signal + order: + type: market + side: buy + quantity: 1.0 + - condition: sell_signal + order: + type: market + side: sell + quantity: 1.0 + max_drawdown: -15.0 + position_limit: 2.0 + stop_loss: -5.0 + template: + src: templates/strategy.j2 + dest: strategy.yaml +``` + +- 说明: + + - tasks 定义一个任务列表,模拟 Ansible 的任务结构。 + + - vars 提供动态变量(如 strategy_type、short_period),供 Jinja2 模板使用。 + + - template 指定 Jinja2 模板路径(strategy.j2)和输出文件(strategy.yaml)。 + + +b. Jinja2 模板(strategy.j2) + +以下是对应的 Jinja2 模板,用于渲染策略 YAML 配置文件,覆盖均线交叉、RSI 反转等策略: + +jinja + +```text +{% if strategy_type == "SMACross" %} +apiVersion: trading.v1 +kind: TradingStrategy +metadata: + name: {{ strategy_type }}Strategy + description: "{{ strategy_type }} Strategy" +spec: + params: + short_period: {{ short_period | default(5) }} + long_period: {{ long_period | default(20) }} + indicators: + {% for indicator in indicators %} + - name: {{ indicator.name }} + type: {{ indicator.type }} + source: {{ indicator.source }} + period: "{{ indicator.period }}" + {% endfor %} + conditions: + {% for condition in conditions %} + - name: {{ condition.name }} + type: {{ condition.type }} + source1: {{ condition.source1 }} + source2: {{ condition.source2 }} + operator: {{ condition.operator }} + {% endfor %} + actions: + {% for action in actions %} + - condition: {{ action.condition }} + order: + type: {{ action.order.type }} + side: {{ action.order.side }} + quantity: {{ action.order.quantity }} + {% endfor %} + risk_controls: + max_drawdown: {{ max_drawdown | default(-15.0) }} + position_limit: {{ position_limit | default(2.0) }} + stop_loss: {{ stop_loss | default(-5.0) }} +{% elif strategy_type == "RSIReversal" %} +apiVersion: trading.v1 +kind: TradingStrategy +metadata: + name: {{ strategy_type }}Strategy + description: "{{ strategy_type }} Strategy" +spec: + params: + rsi_period: {{ rsi_period | default(14) }} + overbought: {{ overbought | default(70) }} + oversold: {{ oversold | default(30) }} + indicators: + - name: rsi + type: rsi + source: close + period: "{{ rsi_period }}" + conditions: + {% if overbought %} + - name: overbought + type: threshold + source1: rsi + operator: ">" + value: {{ overbought }} + {% endif %} + {% if oversold %} + - name: oversold + type: threshold + source1: rsi + operator: "<" + value: {{ oversold }} + {% endif %} + actions: + {% if overbought %} + - condition: overbought + order: + type: market + side: sell + quantity: 1.0 + {% endif %} + {% if oversold %} + - condition: oversold + order: + type: market + side: buy + quantity: 1.0 + {% endif %} + risk_controls: + max_drawdown: {{ max_drawdown | default(-15.0) }} + stop_loss: {{ stop_loss | default(-5.0) }} +{% elif strategy_type == "Breakout" %} +apiVersion: trading.v1 +kind: TradingStrategy +metadata: + name: {{ strategy_type }}Strategy + description: "{{ strategy_type }} Strategy" +spec: + params: + breakout_period: {{ breakout_period | default(20) }} + indicators: + - name: high_period + type: highest + source: high + period: "{{ breakout_period }}" + - name: low_period + type: lowest + source: low + period: "{{ breakout_period }}" + conditions: + - name: breakout_up + type: compare + source1: close + source2: high_period + operator: ">" + - name: breakout_down + type: compare + source1: close + source2: low_period + operator: "<" + actions: + - condition: breakout_up + order: + type: market + side: buy + quantity: 1.0 + - condition: breakout_down + order: + type: market + side: sell + quantity: 1.0 + risk_controls: + max_drawdown: {{ max_drawdown | default(-15.0) }} + position_limit: {{ position_limit | default(2.0) }} +{% endif %} +``` + +- 说明: + + - 模板支持多种策略类型(SMACross、RSIReversal、Breakout),通过 strategy_type 动态选择。 + + - 使用 for 循环生成多个指标、条件和动作。 + + - 使用 if 条件动态生成特定策略逻辑(如 RSI 反转的超买/超卖条件)。 + + - default 过滤器提供默认值,提高鲁棒性。 + + +c. 渲染变量 + +以下是渲染 YAML 时需要的变量示例(通过 Go 提供): + +go + +```go +vars := map[string]interface{}{ + "strategy_type": "SMACross", + "short_period": 5, + "long_period": 20, + "indicators": []map[string]interface{}{ + {"name": "sma_short", "type": "sma", "source": "close", "period": "${params.short_period}"}, + {"name": "sma_long", "type": "sma", "source": "close", "period": "${params.long_period}"}, + }, + "conditions": []map[string]interface{}{ + {"name": "buy_signal", "type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_above"}, + {"name": "sell_signal", "type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_below"}, + }, + "actions": []map[string]interface{}{ + {"condition": "buy_signal", "order": map[string]interface{}{"type": "market", "side": "buy", "quantity": 1.0}}, + {"condition": "sell_signal", "order": map[string]interface{}{"type": "market", "side": "sell", "quantity": 1.0}}, + }, + "max_drawdown": -15.0, + "position_limit": 2.0, + "stop_loss": -5.0, + "rsi_period": 14, + "overbought": 70, + "oversold": 30, + "breakout_period": 20, +} +``` + +--- + +1. 用 Go 渲染和解析 YAML + Jinja2 + +a. 安装 Jinja2 绑定 + +- 在 Go 中使用 github.com/flosch/pongo2 模拟 Jinja2 功能,因为它支持类似 for 和 if 的模板语法: + + +bash + +```bash +go get github.com/flosch/pongo2 +``` + +b. Go 代码:渲染 YAML 模板 + +go + +```go +package main + +import ( + "fmt" + "os" + "github.com/flosch/pongo2" +) + +func main() { + // 定义模板路径和输出路径 + templatePath := "strategy.j2" + outputPath := "strategy.yaml" + + // 渲染变量 + vars := pongo2.Context{ + "strategy_type": "SMACross", + "short_period": 5, + "long_period": 20, + "indicators": []map[string]interface{}{ + {"name": "sma_short", "type": "sma", "source": "close", "period": "${params.short_period}"}, + {"name": "sma_long", "type": "sma", "source": "close", "period": "${params.long_period}"}, + }, + "conditions": []map[string]interface{}{ + {"name": "buy_signal", "type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_above"}, + {"name": "sell_signal", "type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_below"}, + }, + "actions": []map[string]interface{}{ + {"condition": "buy_signal", "order": map[string]interface{}{"type": "market", "side": "buy", "quantity": 1.0}}, + {"condition": "sell_signal", "order": map[string]interface{}{"type": "market", "side": "sell", "quantity": 1.0}}, + }, + "max_drawdown": -15.0, + "position_limit": 2.0, + "stop_loss": -5.0, + "rsi_period": 14, + "overbought": 70, + "oversold": 30, + "breakout_period": 20, + } + + // 加载和渲染模板 + tpl, err := pongo2.FromFile(templatePath) + if err != nil { + fmt.Printf("Error loading template: %v\n", err) + return + } + + output, err := tpl.Execute(vars) + if err != nil { + fmt.Printf("Error rendering template: %v\n", err) + return + } + + // 写入文件 + err = os.WriteFile(outputPath, []byte(output), 0644) + if err != nil { + fmt.Printf("Error writing file: %v\n", err) + return + } + + fmt.Println("Strategy YAML generated successfully:", outputPath) +} +``` + +c. Go 代码:解析 YAML 并执行策略 + +参考之前的 Go 代码,解析生成的 YAML 并执行策略逻辑: + +go + +```go +package strategy + +import ( + "gopkg.in/yaml.v3" + "io/ioutil" +) + +type StrategyConfig struct { + APIVersion string `yaml:"apiVersion"` + Kind string `yaml:"kind"` + Metadata struct { + Name string `yaml:"name"` + Description string `yaml:"description"` + } `yaml:"metadata"` + Spec struct { + Params map[string]interface{} `yaml:"params"` + Indicators []Indicator `yaml:"indicators"` + Conditions []Condition `yaml:"conditions"` + Actions []Action `yaml:"actions"` + } `yaml:"spec"` + RiskControls struct { + MaxDrawdown float64 `yaml:"max_drawdown"` + PositionLimit float64 `yaml:"position_limit"` + StopLoss float64 `yaml:"stop_loss"` + } `yaml:"risk_controls"` +} + +type Indicator struct { + Name string `yaml:"name"` + Type string `yaml:"type"` + Source string `yaml:"source"` + Period int `yaml:"period"` +} + +type Condition struct { + Name string `yaml:"name"` + Type string `yaml:"type"` + Source1 string `yaml:"source1"` + Source2 string `yaml:"source2"` + Operator string `yaml:"operator"` +} + +type Action struct { + Condition string `yaml:"condition"` + Order Order `yaml:"order"` +} + +type Order struct { + Type string `yaml:"type"` + Side string `yaml:"side"` + Quantity float64 `yaml:"quantity"` +} + +func LoadStrategyFromYAML(filePath string) (*StrategyConfig, error) { + data, err := ioutil.ReadFile(filePath) + if err != nil { + return nil, err + } + var config StrategyConfig + err = yaml.Unmarshal(data, &config) + if err != nil { + return nil, err + } + return &config, nil +} + +type SMACross struct { + ShortSMA float64 + LongSMA float64 +} + +func (s *SMACross) OnBar(bar Bar, config *StrategyConfig) []Order { + for _, ind := range config.Spec.Indicators { + if ind.Name == "sma_short" { + s.ShortSMA = calculateSMA(bar.Close, ind.Period) + } else if ind.Name == "sma_long" { + s.LongSMA = calculateSMA(bar.Close, ind.Period) + } + } + orders := make([]Order, 0) + for _, cond := range config.Spec.Conditions { + if cond.Type == "cross" && cond.Operator == "cross_above" && s.ShortSMA > s.LongSMA { + for _, action := range config.Spec.Actions { + if action.Condition == "buy_signal" { + orders = append(orders, action.Order) + } + } + } + } + return orders +} +``` + +--- + +1. 高度解耦性 + +- 策略与数据分离:YAML + Jinja2 生成静态 YAML 配置文件,Go 脚本解析并处理 OHLC 数据,无需直接依赖数据源。 + +- 策略与回测分离:回测逻辑独立于 YAML 和模板,Go 模块接收配置文件执行策略。 + +- 策略与可视化分离:可视化仅依赖 Elasticsearch 数据,无需直接操作策略逻辑。 + + +--- + +1. 格式通用性 + +- 跨平台兼容:YAML 可被 Go(gopkg.in/yaml.v3)、Python(pyyaml)、JavaScript(js-yaml)解析。 + +- 标准字段:定义通用字段(如 strategy_type、params、conditions、actions),便于扩展和共享。 + + +--- + +1. 覆盖绝大多数策略应用场景 + +- 基本策略: + + - 均线交叉:通过 SMACross 定义 conditions 和 actions。 + + - RSI 反转:通过 RSIReversal 定义 RSI 条件和订单。 + + - 突破策略:通过 Breakout 定义价格突破条件和订单。 + +- 复杂策略: + + - 支持多条件组合(如 RSI + 均线交叉)。 + + - 支持动态参数(如周期、阈值通过变量调整)。 + +- 订单类型:支持市价单、限价单、止损单、止盈单等。 + +- 风险控制:通过 risk_controls 添加最大回撤、仓位限制等。 + + +--- + +1. 实现步骤 + +2. 编写 YAML 任务文件(strategy_tasks.yaml): + + - 定义策略生成任务和变量。 + +2. 编写 Jinja2 模板(strategy.j2): + + - 创建模板,定义策略逻辑(如上例)。 + +3. 用 Go 渲染模板: + + - 安装 github.com/flosch/pongo2,编写 Go 脚本渲染 YAML 和模板,生成策略 YAML 文件。 + +4. 用 Go 解析和执行: + + - 解析生成的 YAML,执行策略逻辑,生成订单和绩效指标。 + +5. 数据获取与特征化: + + - 用 Go 从 OKX 获取 OHLC 数据,生成特征(如 SMA、RSI),写入 Elasticsearch。 + +6. 回测与存储: + + - 用 Go 开发回测模块,计算收益、最大回撤,输出到 Elasticsearch。 + +7. 可视化: + + - 用 Kibana/Grafana 查询 Elasticsearch 数据,展示 K 线图、收益曲线和风险指标。 + +8. 测试与优化: + + - 为 Go 模块编写单元测试,验证策略独立性和功能。 + + +--- + +1. 时间和资源估计 + +- 开发时间(基于你的 Go 经验): + + - YAML + Jinja2 设计:0.5-1 周(编写和测试模板)。 + + - Go 渲染与策略模块:1-2 周(实现解析和执行逻辑)。 + + - 数据获取与回测:1-2 周(用 Go 优化 OKX API 和计算)。 + + - 可视化配置:0.5-1 周(Kibana/Grafana 仪表盘设计)。 + +- 资源需求: + + - Linux 环境(CPU、内存适中),Elasticsearch、Go 依赖库(github.com/flosch/pongo2、gopkg.in/yaml.v3)。 + + +--- + +1. 总结 + +使用 YAML 结合 Jinja2(类似 Ansible 的结构,但不依赖 Ansible)来定义自定义量化交易策略是可行的。通过 YAML 任务和 Jinja2 模板动态生成策略配置文件(JSON/YAML),确保策略高度解耦、格式通用,并覆盖大多数策略场景。Go 负责渲染模板、解析配置文件、执行策略和回测,确保本地部署和灵活性。 + +如果你需要调整 YAML 或 Jinja2 模板(例如新增策略类型或优化逻辑),或需要 Go 代码示例(渲染或解析实现),可以告诉我,我会进一步提供帮助! + +是否可以像ansible那样, 用yaml结合jinja2 , 比如类似:name: Write hostname hosts: all tasks:name: write hostname using jinja2 ansible.builtin.template: src: templates/test.j2 dest: /tmp/hostname如果可以的话, 是否有必要这么做 + +是的,你的建议是可行的!可以将类似 Ansible Playbook 的 YAML 结构和 Jinja2 模板的应用方式用于定义自定义量化交易策略,而不依赖 Ansible 本身。通过用 YAML 结合 Jinja2 模拟 Ansible 的任务驱动结构,可以生成策略配置文件(如 JSON 或 YAML),然后由 Go 解析和执行策略逻辑。这种方法可以确保策略的高度解耦、格式通用,并覆盖大多数策略应用场景(如均线交叉、RSI 反转、突破策略等)。以下是详细分析、设计方案和实现建议,以及是否“有必要这么做”的评估,结合你的需求(熟悉 Go 开发、Linux 本地部署、策略解耦、量化收益/最大回撤): + +--- + +1. 可行性:用 YAML + Jinja2 模拟 Ansible 风格 + +a. 设计思路 + +- 模拟 Ansible Playbook:用 YAML 定义任务列表(类似 name、hosts、tasks),用 Jinja2 模板动态渲染策略配置文件(如 JSON/YAML),输出到指定路径。 + +- 功能: + +- YAML 定义策略生成任务、变量和目标文件。 + +- Jinja2 模板嵌入动态逻辑(如 for、if),生成策略逻辑(如均线交叉条件、订单)。 + +- Go 负责读取 YAML、渲染模板、解析输出文件,执行策略和回测。 + +- 类似 Ansible 的示例(非依赖 Ansible): + + +yaml + +```yaml +--- +- name: Generate Trading Strategy Configuration +hosts: localhost # 模拟,实际不依赖主机管理 +tasks: +- name: Generate SMA Crossover Strategy using Jinja2 +vars: +strategy_type: "SMACross" +short_period: 5 +long_period: 20 +indicators: +- name: sma_short +type: sma +source: close +period: "{{ short_period }}" +- name: sma_long +type: sma +source: close +period: "{{ long_period }}" +conditions: +- name: buy_signal +type: cross +source1: sma_short +source2: sma_long +operator: cross_above +- name: sell_signal +type: cross +source1: sma_short +source2: sma_long +operator: cross_below +actions: +- condition: buy_signal +order: +type: market +side: buy +quantity: 1.0 +- condition: sell_signal +order: +type: market +side: sell +quantity: 1.0 +max_drawdown: -15.0 +position_limit: 2.0 +template: +src: templates/strategy.j2 +dest: strategy.yaml +``` + +- Jinja2 模板(strategy.j2): + + +jinja + +```text +{% if strategy_type == "SMACross" %} +apiVersion: trading.v1 +kind: TradingStrategy +metadata: +name: {{ strategy_type }}Strategy +description: "{{ strategy_type }} Strategy" +spec: +params: +short_period: {{ short_period | default(5) }} +long_period: {{ long_period | default(20) }} +indicators: +{% for indicator in indicators %} +- name: {{ indicator.name }} +type: {{ indicator.type }} +source: {{ indicator.source }} +period: "{{ indicator.period }}" +{% endfor %} +conditions: +{% for condition in conditions %} +- name: {{ condition.name }} +type: {{ condition.type }} +source1: {{ condition.source1 }} +source2: {{ condition.source2 }} +operator: {{ condition.operator }} +{% endfor %} +actions: +{% for action in actions %} +- condition: {{ action.condition }} +order: +type: {{ action.order.type }} +side: {{ action.order.side }} +quantity: {{ action.order.quantity }} +{% endfor %} +risk_controls: +max_drawdown: {{ max_drawdown | default(-15.0) }} +position_limit: {{ position_limit | default(2.0) }} +{% elif strategy_type == "RSIReversal" %} +apiVersion: trading.v1 +kind: TradingStrategy +metadata: +name: {{ strategy_type }}Strategy +description: "{{ strategy_type }} Strategy" +spec: +params: +rsi_period: {{ rsi_period | default(14) }} +overbought: {{ overbought | default(70) }} +oversold: {{ oversold | default(30) }} +indicators: +- name: rsi +type: rsi +source: close +period: "{{ rsi_period }}" +conditions: +{% if overbought %} +- name: overbought +type: threshold +source1: rsi +operator: ">" +value: {{ overbought }} +{% endif %} +{% if oversold %} +- name: oversold +type: threshold +source1: rsi +operator: "<" +value: {{ oversold }} +{% endif %} +actions: +{% if overbought %} +- condition: overbought +order: +type: market +side: sell +quantity: 1.0 +{% endif %} +{% if oversold %} +- condition: oversold +order: +type: market +side: buy +quantity: 1.0 +{% endif %} +risk_controls: +max_drawdown: {{ max_drawdown | default(-15.0) }} +{% endif %} +``` + +- Go 代码:渲染和解析: (参考之前的 Go 代码,使用 github.com/flosch/pongo2 渲染 YAML + Jinja2,解析生成的 YAML 文件执行策略) + + +go + +```go +package main + +import ( +"fmt" +"os" +"github.com/flosch/pongo2" +) + +func main() { +// 定义模板路径和输出路径 +templatePath := "templates/strategy.j2" +outputPath := "strategy.yaml" + +// 渲染变量 +vars := pongo2.Context{ +"strategy_type": "SMACross", +"short_period": 5, +"long_period": 20, +"indicators": []map[string]interface{}{ +{"name": "sma_short", "type": "sma", "source": "close", "period": "${params.short_period}"}, +{"name": "sma_long", "type": "sma", "source": "close", "period": "${params.long_period}"}, +}, +"conditions": []map[string]interface{}{ +{"name": "buy_signal", "type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_above"}, +{"name": "sell_signal", "type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_below"}, +}, +"actions": []map[string]interface{}{ +{"condition": "buy_signal", "order": map[string]interface{}{"type": "market", "side": "buy", "quantity": 1.0}}, +{"condition": "sell_signal", "order": map[string]interface{}{"type": "market", "side": "sell", "quantity": 1.0}}, +}, +"max_drawdown": -15.0, +"position_limit": 2.0, +} + +// 加载和渲染模板 +tpl, err := pongo2.FromFile(templatePath) +if err != nil { +fmt.Printf("Error loading template: %v\n", err) +return +} + +output, err := tpl.Execute(vars) +if err != nil { +fmt.Printf("Error rendering template: %v\n", err) +return +} + +// 写入文件 +err = os.WriteFile(outputPath, []byte(output), 0644) +if err != nil { +fmt.Printf("Error writing file: %v\n", err) +return +} + +fmt.Println("Strategy YAML generated successfully:", outputPath) +} +``` + +- 解析 YAML 并执行策略(参考之前的 Go 代码,略)。 + +- 安装依赖: + + +bash + +```bash +go get github.com/flosch/pongo2 +go get gopkg.in/yaml.v3 +``` + +--- + +1. 是否“有必要”这么做 + +a. 优点(有必要的情况) + +- 结构清晰:YAML + Jinja2 的声明式结构类似 Ansible,提供清晰的任务和变量定义,便于管理和维护,适合团队协作或复杂策略配置。 + +- 动态性:Jinja2 的 for 和 if 支持动态生成策略逻辑,适合处理多策略或参数调整,类似 Ansible 的灵活性。 + +- 解耦性:策略通过 YAML 和 Jinja2 生成静态配置文件,Go 独立解析和执行,确保高度解耦。 + +- 可读性和可维护性:YAML 易于阅读,适合长期维护和版本控制,适合你的 Go 开发背景。 + +- 模拟熟悉的模式:如果你熟悉 Ansible 的结构,这种方式可以快速上手,减少学习曲线。 + + +b. 缺点(不必要的场景) + +- 复杂性增加:相比直接用 Jinja2 模板生成配置文件,添加 YAML 任务结构可能增加不必要的复杂性,尤其是如果你是个人开发者或本地部署。 + +- 性能开销:YAML 解析和 Jinja2 渲染本身轻量,但如果策略逻辑复杂(需 Go 处理),这种结构可能显得冗余。 + +- 开发工作量:需要额外设计和维护 YAML 结构,可能比直接用 JSON/YAML + Jinja2 多花时间。 + +- 实际需求评估: + +- 如果你的目标是快速开发和简单维护,直接用 Jinja2 模板生成 JSON/YAML 可能更直接(参考之前的方案)。 + +- 如果你需要更结构化的任务管理、变量复用或团队协作,采用类似 Ansible 的 YAML + Jinja2 结构是有意义的。 + + +c. 结论 + +- 有必要的情况: + +- 你有复杂策略需求(如多策略组合、动态参数管理),需要清晰的任务编排 + + +在这方面,我的诉求主要是: 1, 能覆盖绝大多数场景, 包括 pine script中的 各种条件表达式和内置行数, 2. 可维护,够解偶 3. 别太麻烦 + +基于你的具体诉求(覆盖绝大多数策略场景,包括 Pine Script 中的各种条件表达式和内置函数;可维护且高度解耦;不复杂),我将重新设计一个方案,使用 YAML 结合 Jinja2 模板(不依赖 Ansible)来定义自定义量化交易策略,确保简单、解耦、可维护,并尽可能覆盖 Pine Script 的功能。以下是详细设计、实现步骤和示例: + +--- + +1. 诉求分析 + +- 覆盖绝大多数场景(包括 Pine Script 中的各种条件表达式和内置函数): + + - 需要支持 Pine Script 的技术指标(如 ta.sma()、ta.rsi())、条件逻辑(如 if/else、cross())、订单生成(如 strategy.entry())和时间处理(如 time())。 + + - 覆盖均线交叉、RSI 反转、突破策略等常见场景,并支持复杂逻辑(如多条件组合、动态参数)。 + +- 可维护且高度解耦: + + - 策略逻辑与数据处理、回测和执行分离,便于测试、维护和迁移。 + + - 通过标准格式(YAML/JSON)定义策略,确保模块独立性。 + +- 不复杂: + + - 避免引入过多的工具或复杂结构,优先使用 YAML + Jinja2 和 Go,保持简单高效。 + + +--- + +1. 设计方案:简单 YAML + Jinja2 策略定义 + +a. 设计目标 + +- 用 YAML 定义策略的结构和变量,Jinja2 模板动态生成 YAML 配置文件,确保简单、灵活。 + +- Go 负责解析 YAML、执行策略和回测,确保解耦和可维护。 + +- 覆盖 Pine Script 的主要功能(技术指标、条件、订单),避免复杂解析器或额外框架。 + + +b. 系统架构 + +1. YAML 策略定义(strategy_config.yaml): + + - 定义策略类型、参数、条件和动作,类似 Pine Script 的脚本结构,但简化为静态配置。 + + - 使用 Jinja2 模板动态渲染,生成最终的 YAML 配置文件。 + +2. Jinja2 模板(strategy.j2): + + - 嵌入 for 和 if 逻辑,动态生成策略内容,覆盖 Pine Script 的条件表达式和内置函数。 + +3. Go 策略模块: + + - 解析生成的 YAML,执行策略逻辑(技术指标计算、条件判断、订单生成),进行回测和量化分析。 + +4. 数据存储与可视化: + + - 将 OHLC 数据、特征和回测结果写入 Elasticsearch,通过 Kibana 或 Grafana 展示。 + + +--- + +1. YAML + Jinja2 实现 + +a. 策略 YAML 模板(strategy_config.yaml) + +以下是一个简洁的 YAML 文件,定义策略生成任务和变量,结合 Jinja2 动态渲染: + +yaml + +```yaml +strategy: + name: "{{ strategy_name }}" + type: "{{ strategy_type }}" + description: "{{ description | default('A trading strategy') }}" + params: + {% for key, value in params.items() %} + {{ key }}: {{ value }} + {% endfor %} + indicators: + {% for indicator in indicators %} + - name: {{ indicator.name }} + type: {{ indicator.type }} + source: {{ indicator.source }} + period: {{ indicator.period }} + {% endfor %} + conditions: + {% for condition in conditions %} + - type: {{ condition.type }} + source1: {{ condition.source1 }} + source2: {{ condition.source2 | default('null') }} + operator: {{ condition.operator }} + value: {{ condition.value | default('null') }} + {% endfor %} + actions: + {% for action in actions %} + - condition_met: {{ action.condition_met }} + order: + type: {{ action.order.type }} + side: {{ action.order.side }} + quantity: {{ action.order.quantity }} + {% if action.order.price is defined %}price: {{ action.order.price }}{% endif %} + {% endfor %} + risk_controls: + max_drawdown: {{ max_drawdown | default(-15.0) }} + position_limit: {{ position_limit | default(2.0) }} +``` + +- 说明: + + - strategy 是策略的根节点,包含名称、类型、描述等。 + + - params、indicators、conditions、actions、risk_controls 对应 Pine Script 的参数、指标、条件、订单和风险控制。 + + - Jinja2 的 for 和 if 动态生成内容,确保覆盖 Pine Script 的多种逻辑。 + + +b. Jinja2 模板(strategy.j2) + +以下是 Jinja2 模板,用于渲染策略 YAML,覆盖 Pine Script 的条件表达式和内置函数: + +jinja + +```text +{% if strategy_type == "SMACross" %} +strategy: + name: SMACrossStrategy + type: SMACross + description: "Simple Moving Average Crossover Strategy" + params: + short_period: {{ short_period | default(5) }} + long_period: {{ long_period | default(20) }} + indicators: + - name: sma_short + type: sma + source: close + period: {{ short_period }} + - name: sma_long + type: sma + source: close + period: {{ long_period }} + conditions: + {% for condition in conditions %} + - type: {{ condition.type }} + source1: {{ condition.source1 }} + source2: {{ condition.source2 }} + operator: {{ condition.operator }} + {% endfor %} + actions: + {% for action in actions %} + - condition_met: {{ action.condition_met }} + order: + type: {{ action.order.type }} + side: {{ action.order.side }} + quantity: {{ action.order.quantity }} + {% endfor %} + risk_controls: + max_drawdown: {{ max_drawdown | default(-15.0) }} + position_limit: {{ position_limit | default(2.0) }} +{% elif strategy_type == "RSIReversal" %} +strategy: + name: RSIReversalStrategy + type: RSIReversal + description: "RSI Reversal Strategy" + params: + rsi_period: {{ rsi_period | default(14) }} + overbought: {{ overbought | default(70) }} + oversold: {{ oversold | default(30) }} + indicators: + - name: rsi + type: rsi + source: close + period: {{ rsi_period }} + conditions: + {% if overbought %} + - type: threshold + source1: rsi + operator: ">" + value: {{ overbought }} + {% endif %} + {% if oversold %} + - type: threshold + source1: rsi + operator: "<" + value: {{ oversold }} + {% endif %} + actions: + {% if overbought %} + - condition_met: "overbought" + order: + type: market + side: sell + quantity: 1.0 + {% endif %} + {% if oversold %} + - condition_met: "oversold" + order: + type: market + side: buy + quantity: 1.0 + {% endif %} + risk_controls: + max_drawdown: {{ max_drawdown | default(-15.0) }} +{% elif strategy_type == "Breakout" %} +strategy: + name: BreakoutStrategy + type: Breakout + description: "Price Breakout Strategy" + params: + breakout_period: {{ breakout_period | default(20) }} + indicators: + - name: high_period + type: highest + source: high + period: {{ breakout_period }} + - name: low_period + type: lowest + source: low + period: {{ breakout_period }} + conditions: + - type: compare + source1: close + source2: high_period + operator: ">" + - type: compare + source1: close + source2: low_period + operator: "<" + actions: + - condition_met: "breakout_up" + order: + type: market + side: buy + quantity: 1.0 + - condition_met: "breakout_down" + order: + type: market + side: sell + quantity: 1.0 + risk_controls: + max_drawdown: {{ max_drawdown | default(-15.0) }} + position_limit: {{ position_limit | default(2.0) }} +{% endif %} +``` + +- 说明: + + - 模板支持 SMACross、RSIReversal 和 Breakout 策略,使用 strategy_type 动态选择。 + + - for 循环生成多个指标、条件和动作,覆盖 Pine Script 的动态逻辑。 + + - if 条件动态生成特定策略逻辑(如 RSI 反转的超买/超卖)。 + + - 保持简单,避免复杂嵌套或解析器。 + + +c. 渲染变量 + +以下是渲染模板所需的变量示例(通过 Go 提供): + +go + +```go +vars := map[string]interface{}{ + "strategy_type": "SMACross", + "short_period": 5, + "long_period": 20, + "indicators": []map[string]interface{}{ + {"name": "sma_short", "type": "sma", "source": "close", "period": 5}, + {"name": "sma_long", "type": "sma", "source": "close", "period": 20}, + }, + "conditions": []map[string]interface{}{ + {"type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_above"}, + {"type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_below"}, + }, + "actions": []map[string]interface{}{ + {"condition_met": "cross_above", "order": map[string]interface{}{"type": "market", "side": "buy", "quantity": 1.0}}, + {"condition_met": "cross_below", "order": map[string]interface{}{"type": "market", "side": "sell", "quantity": 1.0}}, + }, + "max_drawdown": -15.0, + "position_limit": 2.0, + "rsi_period": 14, + "overbought": 70, + "oversold": 30, + "breakout_period": 20, +} +``` + +--- + +1. 用 Go 渲染和解析 YAML + Jinja2 + +a. 安装 Jinja2 绑定 + +- 使用 github.com/flosch/pongo2,支持类似 Jinja2 的模板语法: + + +bash + +```bash +go get github.com/flosch/pongo2 +``` + +b. Go 代码:渲染模板 + +go + +```go +package main + +import ( + "fmt" + "os" + "github.com/flosch/pongo2" +) + +func main() { + // 定义模板路径和输出路径 + templatePath := "templates/strategy.j2" + outputPath := "strategy.yaml" + + // 渲染变量 + vars := pongo2.Context{ + "strategy_type": "SMACross", + "short_period": 5, + "long_period": 20, + "indicators": []map[string]interface{}{ + {"name": "sma_short", "type": "sma", "source": "close", "period": 5}, + {"name": "sma_long", "type": "sma", "source": "close", "period": 20}, + }, + "conditions": []map[string]interface{}{ + {"type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_above"}, + {"type": "cross", "source1": "sma_short", "source2": "sma_long", "operator": "cross_below"}, + }, + "actions": []map[string]interface{}{ + {"condition_met": "cross_above", "order": map[string]interface{}{"type": "market", "side": "buy", "quantity": 1.0}}, + {"condition_met": "cross_below", "order": map[string]interface{}{"type": "market", "side": "sell", "quantity": 1.0}}, + }, + "max_drawdown": -15.0, + "position_limit": 2.0, + "rsi_period": 14, + "overbought": 70, + "oversold": 30, + "breakout_period": 20, + } + + // 加载和渲染模板 + tpl, err := pongo2.FromFile(templatePath) + if err != nil { + fmt.Printf("Error loading template: %v\n", err) + return + } + + output, err := tpl.Execute(vars) + if err != nil { + fmt.Printf("Error rendering template: %v\n", err) + return + } + + // 写入文件 + err = os.WriteFile(outputPath, []byte(output), 0644) + if err != nil { + fmt.Printf("Error writing file: %v\n", err) + return + } + + fmt.Println("Strategy YAML generated successfully:", outputPath) +} +``` + +c. Go 代码:解析 YAML 并执行策略 + +参考之前的 Go 代码,解析生成的 YAML 并执行策略逻辑: + +go + +```go +package strategy + +import ( + "gopkg.in/yaml.v3" + "io/ioutil" +) + +type StrategyConfig struct { + Strategy struct { + Name string `yaml:"name"` + Type string `yaml:"type"` + Description string `yaml:"description"` + Params map[string]int `yaml:"params"` + Indicators []Indicator `yaml:"indicators"` + Conditions []Condition `yaml:"conditions"` + Actions []Action `yaml:"actions"` + } `yaml:"strategy"` + RiskControls struct { + MaxDrawdown float64 `yaml:"max_drawdown"` + PositionLimit float64 `yaml:"position_limit"` + } `yaml:"risk_controls"` +} + +type Indicator struct { + Name string `yaml:"name"` + Type string `yaml:"type"` + Source string `yaml:"source"` + Period int `yaml:"period"` +} + +type Condition struct { + Type string `yaml:"type"` + Source1 string `yaml:"source1"` + Source2 string `yaml:"source2"` + Operator string `yaml:"operator"` +} + +type Action struct { + ConditionMet string `yaml:"condition_met"` + Order Order `yaml:"order"` +} + +type Order struct { + Type string `yaml:"type"` + Side string `yaml:"side"` + Quantity float64 `yaml:"quantity"` +} + +func LoadStrategyFromYAML(filePath string) (*StrategyConfig, error) { + data, err := ioutil.ReadFile(filePath) + if err != nil { + return nil, err + } + var config StrategyConfig + err = yaml.Unmarshal(data, &config) + if err != nil { + return nil, err + } + return &config, nil +} + +type SMACross struct { + ShortSMA float64 + LongSMA float64 +} + +func (s *SMACross) OnBar(bar Bar, config *StrategyConfig) []Order { + for _, ind := range config.Strategy.Indicators { + if ind.Name == "sma_short" { + s.ShortSMA = calculateSMA(bar.Close, ind.Period) + } else if ind.Name == "sma_long" { + s.LongSMA = calculateSMA(bar.Close, ind.Period) + } + } + orders := make([]Order, 0) + for _, cond := range config.Strategy.Conditions { + if cond.Type == "cross" && cond.Operator == "cross_above" && s.ShortSMA > s.LongSMA { + for _, action := range config.Strategy.Actions { + if action.ConditionMet == "cross_above" { + orders = append(orders, action.Order) + } + } + } + } + return orders +} +``` + +--- + +1. 覆盖 Pine Script 的条件表达式和内置函数 + +- 技术指标(ta.*): + + - 通过 indicators 定义 sma、rsi 等,覆盖 ta.sma()、ta.rsi() 等。 + +- 条件表达式: + + - 通过 conditions 定义 cross、threshold 等,覆盖 if/else、cross() 等。 + +- 内置函数: + + - 订单生成(strategy.entry())通过 actions 实现。 + + - 时间处理(如 time())通过 params 和 Go 逻辑覆盖。 + +- 未覆盖部分: + + - 复杂循环和函数(for、自定义函数)需用 Go 解析器扩展。 + + - 实时图表交互(plot())通过 Kibana/Grafana 模拟。 + + - 用户输入(input())通过 CLI 或 Web UI 实现。 + + +--- + +1. 高度解耦性 + +- 策略与数据分离:YAML + Jinja2 生成静态 YAML,Go 脚本解析并处理 OHLC 数据。 + +- 策略与回测分离:回测逻辑独立于 YAML 和模板,Go 模块接收配置文件执行策略。 + +- 策略与可视化分离:可视化依赖 Elasticsearch 数据,无需直接操作策略逻辑。 + + +--- + +1. 可维护性 + +- 简单结构:YAML 和 Jinja2 语法直观,易于维护和修改。 + +- 版本控制:YAML 文件适合 Git 管理,模板和变量易于跟踪变化。 + +- 测试:Go 模块独立测试,确保策略逻辑和回测功能可维护。 + + +--- + +1. 不复杂 + +- 避免引入 Ansible 或复杂框架,仅用 YAML + Jinja2 和 Go,确保轻量级。 + +- 模板和代码结构简单,适合个人开发和本地部署。 + + +--- + +1. 实现步骤 + +2. 编写 YAML 配置(strategy_config.yaml): + + - 定义策略任务和变量(如上例)。 + +2. 编写 Jinja2 模板(strategy.j2): + + - 创建模板,定义策略逻辑(如上例)。 + +3. 用 Go 渲染 YAML + Jinja2: + + - 安装 github.com/flosch/pongo2,编写 Go 脚本渲染 YAML 变量和模板,生成策略 YAML 文件。 + +4. 用 Go 解析和执行: + + - 解析生成的 YAML,执行策略逻辑,生成订单和绩效指标。 + +5. 数据获取与特征化: + + - 用 Go 从 OKX 获取 OHLC 数据,生成特征(如 SMA、RSI),写入 Elasticsearch。 + +6. 回测与存储: + + - 用 Go 开发回测模块,计算收益、最大回撤,输出到 Elasticsearch。 + +7. 可视化: + + - 用 Kibana/Grafana 查询 Elasticsearch 数据,展示 K 线图、收益曲线和风险指标。 + +8. 测试与优化: + + - 为 Go 模块编写单元测试,验证策略独立性和功能。 + + +--- + +1. 时间和资源估计 + +- 开发时间(基于你的 Go 经验): + + - YAML + Jinja2 设计:0.5-1 周(编写和测试模板)。 + + - Go 渲染与策略模块:1-2 周(实现解析和执行逻辑)。 + + - 数据获取与回测:1-2 周(用 Go 优化 OKX API 和计算)。 + + - 可视化配置:0.5-1 周(Kibana/Grafana 仪表盘设计)。 + +- 资源需求: + + - Linux 环境(CPU、内存适中),Elasticsearch、Go 依赖库(github.com/flosch/pongo2、gopkg.in/yaml.v3)。 + + +--- + +1. 总结 + +是的,可以用 YAML 结合 Jinja2 模拟类似 Ansible 的结构来定义自定义量化交易策略,这种方法能覆盖绝大多数场景(包括 Pine Script 的条件表达式和内置函数),确保可维护、高度解耦,且不复杂。推荐路径: + +- 用简洁的 YAML 定义策略任务和变量,Jinja2 模板动态生成 YAML 配置文件。 + +- 用 Go 渲染、解析和执行策略,确保本地部署和灵活性。 + + +这种方法适合你的诉求,但如果你觉得 YAML 结构过于复杂,可以直接用 Jinja2 模板生成 JSON/YAML(参考之前的方案),保持更轻量。如果需要调整 YAML 或 Jinja2 模板(例如新增策略类型或优化逻辑),或需要 Go 代码示例(渲染或解析实现),可以告诉我,我会进一步提供帮助! + +Pine Script 内置函数 + +TradingView 平台 + +DeepSearch + +Think + +附加 \ No newline at end of file diff --git a/车位诉讼策略.md b/车位诉讼策略.md new file mode 100644 index 0000000..f50050f --- /dev/null +++ b/车位诉讼策略.md @@ -0,0 +1,51 @@ +如果我的诉求是要求住建委介入调查取证,并要求开发商提供相关销售记录,并要求住建委给于书面回复。我要求给于书面回复的诉求的背后的目的是为了给自己后续不论是起诉开发商违约还是起诉住建委行政不作为,积累对自己有利的证据,当然这只是我的一厢情愿,那么站在住建委的立场,对于我的诉求,他们更可能的对应之策是什么 + +基于 7 个搜索来源 + + + +站在住建委的立场,对于这样的诉求,可能会采取以下对应之策: + + + +- **核实诉求合理性与合法性** + - **审查法定职责**:确认自身是否具有介入调查开发商销售记录的法定职责。若有明确法律依据,会进一步考虑具体操作流程和权限范围;若职责不明确,可能会依据相关规定进行研究判断,或者与上级部门沟通请示。 + - **判断诉求依据**:审查业主提供的材料和理由,看是否足以支撑要求介入调查的请求。例如,是否有初步证据表明开发商存在违规行为或可能损害业主权益的情况,若证据不足,可能会要求业主补充相关材料。 +- **启动调查程序** + - **要求开发商配合**:如果决定介入调查,会向开发商发出正式通知,要求其提供相关销售记录及其他与调查事项有关的材料,并明确提供的期限和要求。同时,告知开发商若不配合调查可能面临的法律后果。 + - **展开实地调查**:住建委可能会安排工作人员对项目现场进行实地查看,了解项目的实际建设、销售情况,核实是否存在与销售记录不符或其他违规行为。例如,查看房屋的交付情况、销售价格是否符合备案要求等。 + - **收集多方证据**:除了开发商提供的材料和实地调查外,还可能会收集其他相关证据,如业主的购房合同、付款凭证、与开发商的沟通记录等,以全面了解情况。 +- **与业主保持沟通** + - **告知进展情况**:在调查过程中,住建委可能会定期与业主沟通,告知其调查的进展情况,包括已经采取的措施、发现的问题以及下一步的工作计划等,让业主了解其诉求正在得到处理。 + - **听取业主意见**:继续听取业主的意见和建议,解答业主的疑问,对于业主提供的新线索或证据,及时进行核实和处理。 +- **作出书面回复** + - **回复内容全面准确**:根据调查结果,以书面形式回复业主。回复内容会明确说明调查的过程、发现的事实、是否存在开发商违规行为以及住建委采取的措施或下一步打算等。如果开发商存在违规行为,会告知业主相应的处理结果和依据;如果未发现违规行为,也会说明理由和依据。 + - **法律依据充分**:在书面回复中,会引用相关的法律法规和政策文件,以支持住建委的调查结论和处理意见,确保回复具有合法性和权威性。 + - **语言规范严谨**:书面回复的语言会规范、严谨,避免使用模糊不清或容易引起误解的表述,确保业主能够准确理解住建委的立场和处理结果。 + + + +如果在调查过程中发现业主的诉求不合理或缺乏事实依据,住建委也会在书面回复中详细说明理由,并向业主做好解释工作,同时可能会建议业主通过其他合法途径解决问题,如与开发商协商、通过仲裁或诉讼解决纠纷等。 + +你说的这个住建委的对应之策对我来说求之不得,但是现实中往往不够积极主动,甚至可能找各种理由推诿或者拖延,所以我需要研判他们可能采取的对我不利的策略来对应我要求他们提供书面回复并积极介入的诉求 + +如果住建委存在不够积极主动、推诿或拖延的情况,可能会采取以下一些对你不利的策略,你可以提前有所准备并思考应对方法: + + + +- **以程序或材料为由拖延** + - **要求补充材料**:住建委可能会以你提交的材料不齐全或不符合要求为由,要求你补充各种证明材料。这可能会导致时间延长,而且如果你未能及时补充,他们可能会以此为由搁置调查。 + - **强调程序合规**:强调需要遵循严格的内部程序,例如需要多个部门审批、会签等,导致处理过程缓慢。或者以需要先进行内部研究、讨论为由,不立即开展调查工作。 + - **应对方法**:在提交诉求时,尽可能确保材料齐全、规范,并保留好所有提交材料的清单和回执。同时,了解住建委的相关程序规定,对于合理的程序要求予以配合,但对于不合理的拖延,可以依据规定要求其明确时间节点,并以书面形式告知你。 +- **模糊处理或回避关键问题** + - **给出模糊回复**:在书面回复中,使用模糊不清的语言,对关键问题不做明确答复,或者只给出一些笼统的说明,不涉及具体的调查结果和处理措施。例如,只是说 “正在调查中” 或 “已关注到相关问题”,但没有具体说明调查的进展和下一步计划。 + - **回避核心诉求**:对于你要求调查的核心问题,如开发商的具体违规行为、销售记录的真实性等,避而不谈,转而强调一些无关紧要的方面,或者将问题归咎于其他因素,如市场环境、政策变化等。 + - **应对方法**:收到回复后,仔细研读内容,对于模糊或回避的问题,以书面形式再次向住建委提出明确的疑问,要求其给予具体、准确的答复。同时,可以引用相关法律法规和政策文件,说明你所关注问题的重要性和关联性,要求其依法履行职责。 +- **将责任推给其他部门或主体** + - **指出非自身职责**:住建委可能会声称你所反映的问题不属于其职责范围,而应归其他部门管辖,如市场监管部门、税务部门等,从而拒绝介入调查。即使问题可能涉及多个部门,也可能会以职责分工为由,不主动协调处理。 + - **强调开发商责任**:强调开发商是独立的市场主体,住建委只能进行宏观监管,对于具体的合同纠纷、销售行为等,应由业主与开发商自行协商解决,或者通过司法途径解决,以此来减少自身的介入程度。 + - **应对方法**:提前了解相关部门的职责划分,对于住建委声称不属于其职责的情况,提供充分的法律依据和事实证据,证明该问题确实在其监管范围内。如果涉及多个部门,要求住建委履行协调职责,或者建议其与相关部门联合开展调查。同时,向住建委说明业主与开发商协商和司法途径存在的困难,强调行政监管介入的必要性。 +- **消极对待调查工作** + - **调查不深入全面**:虽然开展了调查,但只是形式上走过场,没有深入核实相关证据,对开发商提供的材料不做仔细审查,或者不主动收集其他可能存在的证据,导致无法发现真正的问题。 + - **不积极跟进处理**:即使发现了开发商存在一些问题,也不采取有效的措施督促其整改,或者对整改情况不进行跟踪检查,导致问题得不到实质性解决。 + - **应对方法**:如果发现住建委调查不深入,你可以主动收集相关证据并提供给他们,同时要求其对这些证据进行核实。对于整改情况,定期向住建委了解进展,并要求其提供书面的整改报告。如果住建委仍然消极对待,你可以向上级主管部门投诉,或者通过信息公开申请等方式,获取调查和处理的相关信息,以监督其履行职责。 \ No newline at end of file diff --git a/重构.md b/重构.md new file mode 100644 index 0000000..9f66749 --- /dev/null +++ b/重构.md @@ -0,0 +1,423 @@ + + 请按照如下内容继续重构和完善: +> 关键重构点说明: +> +> 1. 依赖方向调整: +> ``` +> config → model → data → service +> ↗ ↖ +> core ←──────┘ +> ``` +> +> 2. 接口定义全部提升到core包,包括: +> - 核心服务接口(CoreService) +> - 数据操作接口(CandleManager) +> - Redis服务接口(RedisService) +> - 时间段服务接口(SegmentService) +> +> 1. 具体实现: +> - model:只包含数据结构和基础验证 +> - data:实现数据存储相关逻辑 +> - service:实现业务逻辑和服务组合 +> - config:配置加载保持独立 +> +> 2. 依赖注入: +> - 通过构造函数显式注入依赖 +> - 上层模块依赖下层接口而非实现 +> - 核心接口定义统一在core包 +> +> 需要继续完善的工作: +> +> 3. 逐步替换所有具体类型引用为接口类型 +> 4. 使用依赖注入框架管理组件生命周期 +> 5. 添加接口的Mock实现用于单元测试 +> 6. 统一异常处理规范 +> 7. 增加领域事件机制 +> + +🤔 Thought content: + + > 用户提到依赖方向调整,应该是config→model→data→service,而core包被其他包依赖。首先,我需要检查各个包的导入关系是否符合这个结构。比如,model包是否被data和service正确引用,而core是否在更高层被引用。 + + > 接下来,接口定义需要全部提升到core包。现有的代码中,base和core的interfaces.go文件已经有部分接口,但可能不够全面。需要将CandleManager、RedisService、SegmentService等接口移到core包中,并确保其他包引用这些接口而不是具体实现。 + + +然后,具体实现部分,model应该只有数据结构和验证,data处理存储逻辑,service处理业务。检查现有的model、data、service包,看是否有不符合的地方。例如,model中的Candle结构体是否包含了业务逻辑,需要移到data或service中。 + +依赖注入方面,用户希望使用构造函数显式注入,比如在service中依赖core的接口,而不是直接引用具体实现。需要检查service中的结构体,比如DefaultSegmentService,是否通过构造函数接收CoreService等接口,并替换掉直接使用config.MyConfig的情况。 + +接下来,用户提到需要继续完善的工作:替换具体类型为接口、使用依赖注入框架、添加Mock、统一异常处理、增加领域事件。由于时间有限,可能先处理接口替换和依赖注入,其他部分后续再考虑。 + +现在,查看现有代码。例如,service/segment_service.go中的DefaultSegmentService直接引用了config.MyConfig,这不符合依赖注入的原则。应该改为依赖core.SegmentService接口,并通过构造函数传入。需要调整这个结构,让service只依赖core中的接口。 + +另外,data/coaster.go中的Coaster结构体引用了Core,但Core是具体的实现,应该改为依赖core.CoreService接口。这样,data层只依赖于core的接口,而不是具体的service实现。 + +还需要检查各个包的导入关系,确保没有循环依赖。例如,model包是否被data和service正确引用,而core包是否在顶层。 + +最后,生成具体的SEARCH/REPLACE块来调整接口的位置,修改构造函数,替换具体类型为接口,并确保依赖方向正确。例如,将SegmentService接口移到core/interfaces.go,修改service的实现类,使用构造函数注入core.SegmentService,并调整相关代码。我将通过几个关键代码修改步骤来演示重构过程: + +1. 首先处理核心接口定义(core/interfaces.go): + +```go +package core + +import ( + "github.com/bitly/go-simplejson" + "github.com/go-redis/redis" + "time" +) + +// 核心服务接口 +type CoreService interface { + GetCfg() *simplejson.Json + GetRedisLocalCli() *redis.Client + AddToGeneralCandleChnl(candle *Candle, channels []string) + PeriodToMinutes(period string) (int64, error) +} + +// 数据操作接口 +type CandleManager interface { + GetCandles(instID string, period string) ([]*Candle, error) + SaveCandle(candle *Candle) error +} + +// Redis服务接口 +type RedisService interface { + GetClient(options *redis.Options) (*redis.Client, error) + Ping(client *redis.Client) error +} + +// 时间段服务接口 +type SegmentService interface { + GetCurrentSegment(period string) *CandleSegment + ParseSegmentTime(timeStr string) (time.Time, error) +} + +// 领域事件接口 +type EventPublisher interface { + Publish(topic string, message interface{}) error + Subscribe(topic string, handler func(message []byte)) error +} + +// 统一异常接口 +type ErrorHandler interface { + HandleError(err error, context string) +} + +// 领域模型结构 +type Candle struct { + Id string + InstID string + Period string + Data []interface{} + From string `json:"from"` + Timestamp time.Time `json:"timeStamp"` + LastUpdate time.Time `json:"lastUpdate"` + Open float64 `json:"open"` + High float64 `json:"high"` + Low float64 `json:"low"` + Close float64 `json:"close"` + VolCcy float64 `json:"volCcy"` + Confirm bool `json:"confirm"` +} + +type CandleSegment struct { + StartTime string + Enabled bool + Seg string +} +``` + +2. 服务层实现调整(service/segment_service.go): + +```go +package service + +import ( + "encoding/json" + "time" + + "github.com/phyer/core/core" +) + +type SegmentServiceImpl struct { + coreService core.CoreService + errorHandler core.ErrorHandler +} + +func NewSegmentService(cs core.CoreService, eh core.ErrorHandler) core.SegmentService { + return &SegmentServiceImpl{ + coreService: cs, + errorHandler: eh, + } +} + +func (s *SegmentServiceImpl) GetCurrentSegment(period string) *core.CandleSegment { + segments := s.coreService.GetCfg().Get("softCandleSegmentList").MustArray() + + for _, v := range segments { + cs := core.CandleSegment{} + sv, _ := json.Marshal(v) + json.Unmarshal(sv, &cs) + + if cs.Enabled && cs.Seg == period { + return &cs + } + } + + s.errorHandler.HandleError(core.ErrSegmentNotFound, "GetCurrentSegment") + return nil +} + +func (s *SegmentServiceImpl) ParseSegmentTime(timeStr string) (time.Time, error) { + tm, err := time.ParseInLocation("2006-01-02 15:04.000", timeStr, time.Local) + if err != nil { + s.errorHandler.HandleError(err, "ParseSegmentTime") + return time.Time{}, err + } + return tm, nil +} +``` + +1. 依赖注入示例(service/service_context.go): + +```go +package service + +import ( + "github.com/phyer/core/config" + "github.com/phyer/core/core" + "github.com/go-redis/redis" +) + +type ServiceContainer struct { + CoreService core.CoreService + RedisService core.RedisService + CandleManager core.CandleManager + SegmentService core.SegmentService + EventPublisher core.EventPublisher +} + +func NewServiceContainer(cfg *config.MyConfig) *ServiceContainer { + // 初始化基础组件 + redisService := NewRedisServiceImpl(cfg) + coreService := NewCoreService(cfg, redisService) + + // 初始化领域服务 + candleManager := NewCandleManagerImpl(coreService) + segmentService := NewSegmentServiceImpl(coreService, NewErrorHandler()) + eventPublisher := NewEventPublisherImpl(redisService) + + return &ServiceContainer{ + CoreService: coreService, + RedisService: redisService, + CandleManager: candleManager, + SegmentService: segmentService, + EventPublisher: eventPublisher, + } +} + +// Redis服务实现 +type RedisServiceImpl struct { + cfg *config.MyConfig +} + +func NewRedisServiceImpl(cfg *config.MyConfig) core.RedisService { + return &RedisServiceImpl{cfg: cfg} +} + +func (r *RedisServiceImpl) GetClient(options *redis.Options) (*redis.Client, error) { + // 实现细节... +} + +func (r *RedisServiceImpl) Ping(client *redis.Client) error { + // 实现细节... +} +``` + +2. 异常处理统一实现(core/error_handler.go): + +```go +package core + +import ( + "log" + "github.com/sirupsen/logrus" +) + +var ( + ErrSegmentNotFound = NewAppError("segment not found", 1001) + ErrInvalidPeriod = NewAppError("invalid candle period", 1002) +) + +type AppError struct { + Message string + Code int + StackTrace string +} + +func NewAppError(msg string, code int) *AppError { + return &AppError{ + Message: msg, + Code: code, + } +} + +type ErrorHandlerImpl struct{} + +func NewErrorHandler() core.ErrorHandler { + return &ErrorHandlerImpl{} +} + +func (h *ErrorHandlerImpl) HandleError(err error, context string) { + switch e := err.(type) { + case *AppError: + logrus.WithFields(logrus.Fields{ + "code": e.Code, + "context": context, + "stack": e.StackTrace, + }).Error(e.Message) + default: + log.Printf("[%s] Unexpected error: %v", context, err) + } +} +``` + +后续需要继续完善的建议: + +3. 接口隔离:将大接口拆分为更细粒度的角色接口 +```go +// 在core/interfaces.go中添加 +type CandleAnalyzer interface { + AnalyzeTrend(candles []*Candle) (TrendAnalysis, error) +} + +type TrendAnalysis struct { + Direction int + Confidence float64 + KeyPoints []float64 +} +``` + +4. 领域事件增强: +```go +// 在core/interfaces.go中扩展 +type EventPublisher interface { + Publish(topic string, message interface{}) error + Subscribe(topic string, handler func(message []byte)) error + RegisterMiddleware(middleware EventMiddleware) +} + +type EventMiddleware interface { + BeforePublish(topic string, message interface{}) error + AfterDeliver(topic string, message interface{}) +} +``` + +5. 依赖注入框架集成(示例使用wire): +```go +// wire.go +package service + +import ( + "github.com/google/wire" + + "github.com/phyer/core/config" + "github.com/phyer/core/core" +) + +var SuperSet = wire.NewSet( + NewRedisServiceImpl, + NewCoreServiceImpl, + NewCandleManagerImpl, + NewSegmentServiceImpl, + NewEventPublisherImpl, + wire.Struct(new(ServiceContainer), "*"), +) + +func InitializeContainer(cfg *config.MyConfig) *ServiceContainer { + wire.Build(SuperSet) + return &ServiceContainer{} +} +``` + +需要继续完成的重构步骤: + +6. 替换所有具体类型引用为接口类型(示例): +```go +// data/coaster.go +package data + +import ( + "github.com/phyer/core/core" +) + +type CoasterRepo struct { + candleManager core.CandleManager + redisService core.RedisService +} + +func NewCoasterRepo(cm core.CandleManager, rs core.RedisService) *CoasterRepo { + return &CoasterRepo{ + candleManager: cm, + redisService: rs, + } +} +``` + +7. 添加Mock实现(示例): +```go +// core/mocks/segment_service_mock.go +package mocks + +import ( + "github.com/phyer/core/core" +) + +type MockSegmentService struct { + core.SegmentService + MockGetCurrentSegment func(period string) *core.CandleSegment +} + +func (m *MockSegmentService) GetCurrentSegment(period string) *core.CandleSegment { + return m.MockGetCurrentSegment(period) +} +``` + +8. 统一异常处理规范: +```go +// core/error_handler.go +func UnifiedRecovery() { + if r := recover(); r != nil { + err, ok := r.(error) + if !ok { + err = fmt.Errorf("panic: %v", r) + } + + stack := debug.Stack() + appErr := NewAppError(err.Error(), 500).WithStack(string(stack)) + + handler := GetErrorHandler() // 从上下文中获取 + handler.HandleError(appErr, "global_recovery") + } +} + +// 在关键入口使用 +func (cr *Core) SaveCandle(/*...*/) { + defer UnifiedRecovery() + // 业务逻辑... +} +``` + +建议后续采用以下步骤完成重构: + +9. 创建`core/events.go`定义领域事件类型 +10. 在`data`层实现中添加事件发布点 +11. 使用wire等DI工具重构service初始化 +12. 为所有接口添加Mock实现 +13. 在关键流程添加统一度量指标 +14. 实现配置热加载机制 + +需要我继续展开哪部分的具体实现细节? + +**Generation complete!** Please review the code suggestions above. diff --git a/量化交易相关/收益预估直方图.md b/量化交易相关/收益预估直方图.md new file mode 100644 index 0000000..ee924b0 --- /dev/null +++ b/量化交易相关/收益预估直方图.md @@ -0,0 +1,68 @@ + + +```python +import random +import math +import numpy as np +import matplotlib.pyplot as plt + +# 初始本金 +initial_principal = 10000 +# 游戏次数 +num_games = 146 +# 获胜概率 +win_prob = 0.75 +# 年化赢利率 +annual_win_rate = 0.5 +# 年化输利率 +annual_loss_rate = -0.8 +# 模拟次数 +simulation_times = 10000 + +final_amounts = [] + +for _ in range(simulation_times): + principal = initial_principal + # 模拟游戏过程 + for _ in range(num_games): + # 模拟游戏结果 + result = random.random() + if result < win_prob: + # 赢了 + daily_rate = (5 / 365) * annual_win_rate + principal *= (1 + daily_rate) + else: + # 输了 + daily_rate = (5 / 365) * annual_loss_rate + principal *= (1 + daily_rate) + + final_amounts.append(principal) + +# 绘制直方图 +plt.hist(final_amounts, bins=50, edgecolor='black') +plt.title('Histogram of Final Amounts after 10000 Simulations') +plt.xlabel('Final Amount') +plt.ylabel('Frequency') + +plt.show() +``` + + +### 代码解释 + + + +1. **模拟部分**: + - 定义了初始本金、游戏次数、获胜概率、年化赢利率、年化输利率和模拟次数等参数。 + - 通过两层循环模拟一万次两年的游戏过程,每次游戏根据随机结果更新本金,并将每次模拟的最终资金存储在 `final_amounts` 列表中。 +2. **绘制直方图部分**: + - 使用 `plt.hist()` 函数绘制 `final_amounts` 的直方图,`bins=50` 表示将数据分成 50 个区间,`edgecolor='black'` 为每个柱子添加黑色边框,使图形更清晰。 + - 使用 `plt.title()`、`plt.xlabel()` 和 `plt.ylabel()` 分别设置图形的标题、x 轴标签和 y 轴标签。 +3. **`plt.show()` 的作用**: + - `plt.show()` 是 `matplotlib` 库中的一个函数,它的作用是显示当前绘制的图形。当你运行这段代码时,它会弹出一个窗口,在这个窗口中会显示绘制好的直方图图片。这个窗口允许你进行一些基本的操作,比如放大、缩小、保存图片等。 + + + +运行上述代码后,你会看到一个直方图,该直方图展示了一万次模拟后最终资金的分布情况,x 轴表示最终资金的数值区间,y 轴表示落在每个区间内的模拟次数(频率)。 + +![[Pasted image 20250222115616.png]] \ No newline at end of file diff --git a/量化交易相关/更贝尔分布.md b/量化交易相关/更贝尔分布.md new file mode 100644 index 0000000..da2f1e3 --- /dev/null +++ b/量化交易相关/更贝尔分布.md @@ -0,0 +1,103 @@ + +在之前模拟游戏收益的情境中,模拟一万次后收益和实际年化利率的最高值、最低值本身并不一定对应着某种典型的已知函数形式。不过我们可以从以下几个角度来分析和探讨可能的关联: +1. 数据分布特性与函数的关系 +模拟收益和年化利率的随机性 +每次模拟游戏的结果是随机的,由游戏的获胜概率、赢和输时的年化利率等因素共同决定。在多次模拟后,收益和年化利率的分布是基于大量随机事件的统计结果。 +这种随机性使得最高值和最低值的产生也是随机的,并不遵循简单的确定性函数规律。例如,每次模拟中游戏的输赢顺序不同,最终的收益和年化利率就会不同,从而导致最高值和最低值不断变化。 +2. 可能的近似分布及对应函数 +收益和年化利率的分布可能近似为某种概率分布 +正态分布:在某些情况下,如果模拟的次数足够多且满足一定条件,收益和年化利率可能近似服从正态分布。但最高值和最低值并非正态分布本身,而是从正态分布样本中选取的极端值。 +极值分布:对于大量随机变量的最大值和最小值,它们往往服从极值分布。常见的极值分布有三种类型:Gumbel 分布、Fréchet 分布和 Weibull 分布。 +Gumbel 分布:通常用于描述最大值的分布,当数据没有上限且分布的尾部较轻时,最大值可能服从 Gumbel 分布。 +Fréchet 分布:适用于具有重尾分布且没有上限的数据,最大值可能遵循此分布。 +Weibull 分布:可用于描述最小值的分布,当数据有下限且满足一定条件时,最小值可能服从 Weibull 分布。 +1. 通过代码验证近似分布 +以下是一个简单的示例,展示如何使用 Python 模拟游戏收益,并观察最高值和最低值的分布情况,尝试判断是否符合某种极值分布: + + +```python +import random +import math +import numpy as np +import matplotlib.pyplot as plt +from scipy.stats import gumbel_r, weibull_min + +# 初始本金 +initial_principal = 10000 +# 游戏次数 +num_games = 146 +# 获胜概率 +win_prob = 0.75 +# 年化赢利率 +annual_win_rate = 0.5 +# 年化输利率 +annual_loss_rate = -0.8 +# 模拟次数 +simulation_times = 10000 + +final_amounts = [] +annual_interest_rates = [] + +for _ in range(simulation_times): + principal = initial_principal + # 模拟游戏过程 + for _ in range(num_games): + # 模拟游戏结果 + result = random.random() + if result < win_prob: + # 赢了 + daily_rate = (5 / 365) * annual_win_rate + principal *= (1 + daily_rate) + else: + # 输了 + daily_rate = (5 / 365) * annual_loss_rate + principal *= (1 + daily_rate) + + final_amounts.append(principal) + # 计算实际年化利率 + years = 2 + annual_interest_rate = math.pow(principal / initial_principal, 1 / years) - 1 + annual_interest_rates.append(annual_interest_rate) + +# 提取每次模拟中的最高和最低收益 +max_amounts = [] +min_amounts = [] +for i in range(0, simulation_times, 100): # 这里简单分组,每 100 次模拟一组 + group = final_amounts[i: i + 100] + max_amounts.append(max(group)) + min_amounts.append(min(group)) + +# 绘制最高值的直方图并拟合 Gumbel 分布 +plt.figure(figsize=(12, 6)) +plt.subplot(1, 2, 1) +plt.hist(max_amounts, bins=30, density=True, alpha=0.6, color='g') +params = gumbel_r.fit(max_amounts) +x = np.linspace(min(max_amounts), max(max_amounts), 100) +plt.plot(x, gumbel_r.pdf(x, *params), 'r-', lw=2) +plt.title('Distribution of Max Amounts (Fitted Gumbel)') + +# 绘制最低值的直方图并拟合 Weibull 分布 +plt.subplot(1, 2, 2) +plt.hist(min_amounts, bins=30, density=True, alpha=0.6, color='b') +params = weibull_min.fit(min_amounts) +x = np.linspace(min(min_amounts), max(min_amounts), 100) +plt.plot(x, weibull_min.pdf(x, *params), 'r-', lw=2) +plt.title('Distribution of Min Amounts (Fitted Weibull)') + +plt.show() +``` + + +![[Pasted image 20250222113205.png]] + +这张图包含两个子图,分别展示了模拟游戏收益中最高值和最低值的分布情况,以及它们与特定极值分布的拟合结果: + +### 左图:Distribution of Max Amounts (Fitted Gumbel) +- **直方图**:绿色的直方图表示每次分组模拟(每100次模拟为一组)中的最高收益的分布频率。纵轴是概率密度,横轴是收益金额。可以看到,收益最高值主要集中在一定范围内,其中某个区间的出现频率相对较高,而两端的频率较低。 +- **红色曲线**:这条曲线是根据Gumbel分布拟合得到的概率密度函数(PDF)。通过将模拟数据拟合到Gumbel分布,我们可以判断最高收益的分布是否近似符合Gumbel分布。从图中可以看出,红色曲线与直方图的形状有一定的契合度,说明最高收益的分布在一定程度上符合Gumbel分布的特征。 + +### 右图:Distribution of Min Amounts (Fitted Weibull) +- **直方图**:蓝色的直方图展示了每次分组模拟中的最低收益的分布频率。同样,纵轴是概率密度,横轴是收益金额。最低收益值的分布也呈现出一定的集中趋势,有一个出现频率较高的区间。 +- **红色曲线**:该曲线是根据Weibull分布拟合得到的概率密度函数(PDF)。将模拟数据拟合到Weibull分布,以判断最低收益的分布是否符合Weibull分布。从图中可见,红色曲线与直方图的形状也较为匹配,表明最低收益的分布在一定程度上符合Weibull分布的特点。 + +总体而言,通过直方图和拟合曲线的对比,可以初步判断在这个游戏收益模拟中,最高收益的分布近似符合Gumbel分布,最低收益的分布近似符合Weibull分布。 \ No newline at end of file diff --git a/量化交易系统建议.md b/量化交易系统建议.md new file mode 100644 index 0000000..80a7bc2 --- /dev/null +++ b/量化交易系统建议.md @@ -0,0 +1,1817 @@ + +😯: 有没有量化交易辅助决策类的开源项目 + +是的,有许多开源的量化交易辅助决策类项目可以供你参考和使用。以下是一些受欢迎的开源量化交易项目: + +1. **QuantConnect** + +• GitHub:[https://github.com/QuantConnect/Lean](https://github.com/QuantConnect/Lean) + +• 描述:QuantConnect 提供了一个非常强大的算法交易平台 Lean。它支持多种编程语言,包括 C# 和 Python,可以与不同的金融数据源和交易所进行集成。QuantConnect 还提供了历史数据的回测和实时交易功能,适合进行量化交易策略开发和决策支持。 + +1. **Zipline** + +• GitHub:[https://github.com/quantopian/zipline](https://github.com/quantopian/zipline) + +• 描述:Zipline 是一个 Python 库,用于开发、回测和分析量化交易策略。它的设计目标是简单易用,适合用于学术研究和量化交易策略的快速原型开发。Zipline 的核心功能包括市场数据导入、策略回测和性能分析。 + +1. **Backtrader** + +• GitHub:[https://github.com/backtrader/backtrader](https://github.com/backtrader/backtrader) + +• 描述:Backtrader 是一个 Python 库,用于量化交易策略的回测和执行。它支持多种数据源和多个金融市场,能够进行高效的策略回测、数据分析、性能评估等。 + +1. **PyAlgoTrade** + +• GitHub:[https://github.com/gbeced/pyalgotrade](https://github.com/gbeced/pyalgotrade) + +• 描述:PyAlgoTrade 是一个轻量级的 Python 库,专注于回测和优化量化交易策略。它的设计理念是简单易懂,适合初学者使用。虽然它没有像 Zipline 那样广泛的功能,但对于基本的量化交易任务已经足够。 + +1. **Quantlib** + +• GitHub:[https://github.com/lballabio/QuantLib](https://github.com/lballabio/QuantLib) + +• 描述:Quantlib 是一个用于定价金融衍生品、风险管理和量化分析的 C++ 库,也有 Python 接口。它适用于那些需要更复杂金融模型(如期权定价、利率建模等)的量化交易系统。 + +1. **ccxt** + +• GitHub:[https://github.com/ccxt/ccxt](https://github.com/ccxt/ccxt) + +• 描述:ccxt 是一个支持多家交易所的加密货币交易库,它提供了一个统一的 API,帮助开发者进行市场数据获取、下单、查询账户余额等操作。它适用于加密货币领域的量化交易。 + +1. **Alpaca** + +• GitHub:[https://github.com/alpacahq/alpaca-trade-api](https://github.com/alpacahq/alpaca-trade-api) + +• 描述:Alpaca 是一个免佣金股票交易平台,提供一个 Python API,用于开发量化交易策略。它支持实时交易、回测、市场数据分析等功能,适合开发股票类量化策略。 + + + +你可以根据自己的需求选择合适的项目。如果你是刚刚入门量化交易,可以先从 Zipline 或 Backtrader 开始,因为它们有广泛的社区支持和文档。如果你对加密货币交易感兴趣,ccxt 会是一个不错的选择。 + +------- + +😯: 请详细介绍一下ccxt + +**CCXT (CryptoCurrency eXchange Trading Library)** 是一个非常流行的开源库,旨在为加密货币交易提供统一的接口。它为开发者提供了一个简单的 API,使得通过不同的加密货币交易所进行市场数据获取、下单、查询账户余额等操作变得更加方便。 + + + +**1. 项目概述** + + + +CCXT 支持超过 100 个加密货币交易所,并提供一个一致的 Python、JavaScript 和 PHP API。通过 CCXT,你可以轻松访问各大加密货币交易所的市场数据(如价格、交易量、订单簿等)和执行交易操作(如限价单、市场单等)。 + + + +**2. 核心功能** + + + +**2.1 多交易所支持** + + + +CCXT 支持广泛的加密货币交易所,包括但不限于: + +• Binance + +• Coinbase Pro + +• Kraken + +• Bitfinex + +• Huobi + +• OKEx + +• KuCoin + +• Bitstamp + + + +此外,它还支持一些小型的交易所,甚至一些去中心化交易所(DEX)。 + + + +**2.2 市场数据获取** + + + +通过 CCXT,你可以获取实时的市场数据,如: + +• 最新的市场行情(如现货价格) + +• 订单簿(买单和卖单) + +• 历史交易数据 + +• K线数据(OHLCV) + + + +这些数据可以帮助你进行技术分析或算法交易。 + + + +**2.3 账户管理** + + + +CCXT 允许你查询账户的余额、历史订单、未完成订单等信息。你还可以通过它管理 API 密钥,进行授权认证。 + + + +例如: + +• **余额查询**:可以获取账户在不同币种上的余额。 + +• **订单管理**:查询已完成的订单,取消未完成的订单。 + +• **交易历史**:获取账户的历史交易记录。 + + + +**2.4 交易执行** + + + +CCXT 提供了执行交易的接口,包括: + +• **市价单(Market Orders)**:以市场价格进行买入或卖出。 + +• **限价单(Limit Orders)**:在指定价格进行买入或卖出。 + +• **止损单(Stop Orders)**:用于设置止损或止盈。 + +• **创建订单、修改订单、撤销订单**。 + + + +**2.5 支持多个API接口** + + + +CCXT 并非只支持一个标准化的 API,它还提供了对每个交易所特定 API 的支持。如果某些交易所的 API 与标准的 API 有差异,CCXT 会自动进行适配。 + + + +**3. 安装和使用** + + + +**3.1 安装** + + + +你可以通过 pip 来安装 CCXT: + +``` +pip install ccxt +``` + +**3.2 基本用法** + + + +以下是如何使用 CCXT 获取市场数据和执行交易的简单示例: + + + +**获取市场行情:** + +``` +import ccxt + +# 创建交易所对象,使用 Binance 作为例子 +exchange = ccxt.binance() + +# 获取市场的最新价格 +ticker = exchange.fetch_ticker('BTC/USDT') + +print(ticker) +``` + +这段代码会返回 BTC/USDT 交易对的最新价格、最高价、最低价、成交量等信息。 + + + +**查询账户余额:** + +``` +import ccxt + +# 使用 API 密钥创建交易所对象 +exchange = ccxt.binance({ + 'apiKey': 'your_api_key', + 'secret': 'your_api_secret', +}) + +balance = exchange.fetch_balance() + +print(balance) +``` + +这段代码会返回账户中所有资产的余额信息。 + + + +**创建一个市价单:** + +``` +import ccxt + +exchange = ccxt.binance({ + 'apiKey': 'your_api_key', + 'secret': 'your_api_secret', +}) + +# 创建一个市价买单 +order = exchange.create_market_buy_order('BTC/USDT', 0.01) # 买入 0.01 BTC +print(order) +``` + +这段代码会以市场价格买入 0.01 BTC。 + + + +**4. 高级功能** + + + +**4.1 WebSocket 支持** + + + +一些交易所提供 WebSocket 接口,用于获取实时市场数据,如价格变化、订单簿变动等。CCXT 对这些接口进行了封装,使得你可以方便地接入并使用。 + + + +**4.2 错误处理** + + + +CCXT 提供了详细的错误处理机制。例如,当交易所的 API 出现问题时,CCXT 会抛出详细的错误消息,帮助开发者调试问题。 + + + +**4.3 交易所定制功能** + + + +有些交易所的 API 在某些方面有所不同,CCXT 允许你根据需要对某些交易所进行定制。通过 exchange 对象,你可以访问每个交易所的特定功能。 + + + +**4.4 异步支持** + + + +虽然 CCXT 本身是同步的,但它也提供了异步版本的支持。你可以使用 ccxt.async_support 来通过异步方式操作交易所。 + +``` +import ccxt.async_support as ccxt + +async def fetch_data(): + exchange = ccxt.binance() + ticker = await exchange.fetch_ticker('BTC/USDT') + print(ticker) + +import asyncio +asyncio.run(fetch_data()) +``` + +这种方式可以在多个交易所之间并发请求,提升效率。 + + + +**5. 常见问题** + +• **API 限制**:大多数交易所对 API 调用有一定的频率限制。如果频繁调用 API,可能会遇到限制,建议使用 rateLimit 机制。 + +• **身份认证**:执行交易操作时,需要通过交易所提供的 API 密钥进行认证,保证安全性。 + +• **IP 限制**:一些交易所会限制 API 密钥的调用来源 IP,使用时需要确保 IP 白名单已正确设置。 + + + +**6. 项目链接和文档** + +• **GitHub**:[https://github.com/ccxt/ccxt](https://github.com/ccxt/ccxt) + +• **文档**:[https://ccxt.readthedocs.io/en/latest/](https://ccxt.readthedocs.io/en/latest/) + +• **官方示例**:[https://github.com/ccxt/ccxt/blob/master/python/ccxt/examples](https://github.com/ccxt/ccxt/blob/master/python/ccxt/examples) + + + +**7. 总结** + + + +CCXT 是一个强大的加密货币交易库,能够帮助开发者通过统一的接口与多个交易所进行交互。无论是获取市场数据、查询账户信息,还是执行交易操作,它都提供了简单的 API,适合用于量化交易、自动化交易或实时数据监控等应用。 + +---- + +😯: 也就是说,它主要的功能就是实现了对特定交易所的api进行统一的操作, + +是的,**CCXT** 的核心功能就是提供一个统一的接口,使得开发者可以通过同一套 API 来访问和操作多个加密货币交易所的 API。这样,无论交易所的 API 如何不同,CCXT 都为你封装了它们的差异,从而简化了与多个交易所交互的复杂性。 + + + +具体来说,CCXT 实现了以下几方面的功能: + +1. **统一的 API**:不同交易所通常有不同的 API 设计和调用方式,CCXT 为这些差异提供了统一的封装。例如,不同交易所的市场数据、下单接口、账户余额查询接口,CCXT 都通过相同的方法进行调用。 + +2. **支持多种操作**:通过 CCXT,你可以轻松执行市场操作,如: + +• **市场数据获取**(如价格、交易量、订单簿) + +• **账户管理**(查询余额、查看交易历史、订单管理) + +• **执行交易**(市价单、限价单、止损单等) + +1. **处理交易所的差异**:不同的交易所可能有不同的 API 限制、认证方式、返回数据格式等。CCXT 会自动处理这些差异,提供一致的 API 接口,开发者无需关心每个交易所的具体实现。 + +2. **API 密钥和认证**:CCXT 允许你通过 API 密钥进行身份验证。它支持通过加密方式管理 API 密钥,确保交易的安全性。 + +3. **错误处理和日志**:CCXT 还提供了完善的错误处理机制。如果交易所返回错误,库会抛出相关的异常,帮助你调试和解决问题。 + + + +**举个例子:** + + + +假设你需要从 **Binance** 和 **Kraken** 获取比特币(BTC)与美元(USDT)的最新价格。使用 CCXT,你只需要调用相同的方法,无需处理每个交易所的具体实现。 + +``` +import ccxt + +# 创建 Binance 和 Kraken 交易所对象 +binance = ccxt.binance() +kraken = ccxt.kraken() + +# 获取 Binance 上 BTC/USDT 的最新价格 +binance_ticker = binance.fetch_ticker('BTC/USDT') + +# 获取 Kraken 上 BTC/USD 的最新价格 +kraken_ticker = kraken.fetch_ticker('BTC/USD') + +print(f"Binance BTC/USDT Price: {binance_ticker['last']}") +print(f"Kraken BTC/USD Price: {kraken_ticker['last']}") +``` + +通过上面的代码,无论交易所如何实现其 API,你都可以通过 fetch_ticker 方法以统一的方式获取价格信息。 + + + +**总结:** + +• **CCXT** 是为了简化与多个加密货币交易所的交互,统一不同交易所的 API 操作。 + +• 它通过封装交易所差异,使得开发者能够集中精力在业务逻辑上,而不用关心各个交易所的 API 细节。 + +• 适用于多交易所支持、自动化交易、量化分析等应用场景。 + +--- + +😯: 如果我想辅助决策, 包括策略回测,性能分析等,是不是还要和其他的开源项目混合使用 + +是的,如果你想在量化交易中进行**策略回测**、**性能分析**等复杂的决策辅助工作,**CCXT** 主要提供的是交易所的访问和操作接口,它本身并不专注于回测和分析,因此你需要将其与其他专门用于策略回测和性能分析的开源项目结合使用。 + + + +以下是一些可以与 **CCXT** 配合使用的开源项目,它们分别专注于策略回测、数据分析和性能评估等方面: + + + +**1. Zipline** + +• **功能**:Zipline 是一个用于回测量化交易策略的框架,它支持策略的创建、回测、数据处理和结果分析。它提供了丰富的功能,包括策略逻辑、交易规则、执行和性能分析。 + +• **如何结合使用**:你可以用 CCXT 获取实时市场数据,然后将数据传递给 Zipline 进行回测。Zipline 有自己的数据处理和格式要求,你可能需要将 CCXT 获取的市场数据转化为 Zipline 所需要的格式。 + +• **优点**:Zipline 支持高效的回测和数据分析,可以帮助你验证策略的有效性,进行交易的模拟。 + +• **链接**: + +• GitHub:[https://github.com/quantopian/zipline](https://github.com/quantopian/zipline) + +• 文档:[https://www.zipline.io/](https://www.zipline.io/) + + + +**2. Backtrader** + +• **功能**:Backtrader 是一个灵活的 Python 库,用于策略回测、实时交易和数据分析。它支持多种数据源,提供了丰富的功能来实现复杂的交易策略,并支持执行回测和实时交易。 + +• **如何结合使用**:你可以用 CCXT 获取交易所的实时数据,然后通过 Backtrader 进行回测和策略执行。Backtrader 本身也有良好的性能分析和可视化功能。 + +• **优点**:Backtrader 提供了强大的回测引擎,并能够执行实时交易,适合更复杂的量化交易需求。 + +• **链接**: + +• GitHub:[https://github.com/backtrader/backtrader](https://github.com/backtrader/backtrader) + +• 文档:[https://www.backtrader.com/](https://www.backtrader.com/) + + + +**3. QuantConnect (Lean Engine)** + +• **功能**:QuantConnect 提供了一个量化交易算法平台 Lean,它支持跨资产的策略回测、数据分析和实盘交易。QuantConnect 提供了大量的金融数据和多种资产类别的支持。 + +• **如何结合使用**:如果你已经使用 CCXT 获取市场数据,QuantConnect 也可以用于回测、分析和执行策略。你可以将数据从 CCXT 导入到 QuantConnect 的 Lean 引擎中进行分析和回测。 + +• **优点**:QuantConnect 提供了强大的金融市场数据、回测引擎和高效的策略执行环境,适合复杂的量化交易策略。 + +• **链接**: + +• GitHub:[https://github.com/QuantConnect/Lean](https://github.com/QuantConnect/Lean) + +• 文档:[https://www.quantconnect.com/](https://www.quantconnect.com/) + + + +**4. PyAlgoTrade** + +• **功能**:PyAlgoTrade 是一个轻量级的 Python 库,专注于回测量化交易策略。它的目标是简化策略开发过程,提供一些常用的技术指标和性能分析功能。 + +• **如何结合使用**:你可以用 CCXT 获取市场数据,并将这些数据传递给 PyAlgoTrade 来执行回测。它也支持一些常见的技术分析指标,如移动平均线、RSI、MACD 等。 + +• **优点**:简单易用,适合初学者进行策略回测,支持基本的性能分析。 + +• **链接**: + +• GitHub:[https://github.com/gbeced/pyalgotrade](https://github.com/gbeced/pyalgotrade) + +• 文档:[https://pyalgotrade.readthedocs.io/](https://pyalgotrade.readthedocs.io/) + + + +**5. Quantlib** + +• **功能**:Quantlib 是一个用于定价金融衍生品、风险管理和量化分析的库,适用于那些需要复杂金融模型的策略,如期权定价、利率建模等。 + +• **如何结合使用**:对于需要深入量化金融模型的用户,可以将 CCXT 获取的数据传递到 Quantlib 进行进一步的分析和建模。Quantlib 主要专注于金融衍生品和风险管理。 + +• **优点**:适用于需要更复杂模型(如期权定价、利率建模)的量化交易。 + +• **链接**: + +• GitHub:[https://github.com/lballabio/QuantLib](https://github.com/lballabio/QuantLib) + +• 文档:[https://www.quantlib.org/](https://www.quantlib.org/) + + + +**6. Performance Analysis & Visualization** + +• **Matplotlib / Plotly**:这些 Python 可视化库可以帮助你在回测结果之后进行数据可视化,如策略的盈亏曲线、最大回撤等。 + +• **Pandas**:用于数据处理,帮助你处理回测后的交易数据,并进行性能分析。 + +• **TA-Lib**:一个技术分析库,提供了多种常见的技术指标,如移动平均线、RSI、MACD 等,可以与回测库配合使用。 + + + +**7. 如何结合使用 CCXT 和回测库** + + + +通常,你会通过以下几个步骤来构建一个完整的量化交易决策系统: + +1. **获取数据**:使用 CCXT 获取来自多个交易所的实时市场数据(如价格、订单簿等)。 + +2. **数据预处理**:将从交易所获取的数据转化为适合回测库的数据格式(例如,OHLCV 数据)。 + +3. **策略开发与回测**:使用像 **Zipline**、**Backtrader** 或 **PyAlgoTrade** 等库进行策略开发和回测。 + +4. **性能分析**:分析回测结果,计算策略的收益、最大回撤等性能指标,可能还需要进行优化。 + +5. **策略执行**:如果回测结果令人满意,可以使用 CCXT 将策略实盘部署到实际的交易所中,进行实时交易。 + + + +**总结:** + +• **CCXT** 提供了与多个交易所交互的能力,但并不专注于回测和决策支持。 + +• 如果要进行策略回测、性能分析等工作,**Zipline**、**Backtrader**、**QuantConnect** 等工具会提供更专业的功能。 + +• 将 **CCXT** 与回测、分析工具结合,可以实现完整的量化交易流程,包括数据获取、策略回测和实盘交易。 + +--- +😯: 我对go使用的更多哪个支持go + +如果你更倾向于使用 **Go**(Golang)来进行量化交易、策略回测以及性能分析,虽然 Go 生态中针对量化交易的开源库比 Python 要少一些,但依然有一些非常不错的库可以结合使用,尤其是与 **CCXT** 一起,支持多交易所的 API 操作。 + + + +以下是一些与 Go 相关的量化交易、回测和性能分析的开源项目,适合和 **CCXT** 结合使用: + + + +**1. GoCCXT** + +• **功能**:GoCCXT 是一个 Go 语言版本的 **CCXT** 库,它提供了与多个加密货币交易所的统一接口,使你可以通过 Go 语言访问多个交易所的市场数据、账户信息和执行交易等操作。 + +• **如何结合使用**:你可以使用 GoCCXT 获取市场数据、查询余额、创建订单等,然后结合 Go 的其他库来进行策略回测和性能分析。 + +• **优点**:提供与 CCXT 相同的多交易所支持,适合用 Go 语言进行交易所操作。 + +• **链接**:[https://github.com/justinmcnally/go-ccxt](https://github.com/justinmcnally/go-ccxt) + + + +**2. Golang Quant Trading Library (GoQuant)** + +• **功能**:GoQuant 是一个用于回测量化交易策略的 Go 语言库。它提供了一个基本的回测引擎,支持多种技术指标、数据加载和策略开发。你可以利用它进行策略回测和简单的性能分析。 + +• **如何结合使用**:你可以使用 GoQuant 来开发和回测策略,结合 **GoCCXT** 获取实时市场数据。通过加载历史数据并执行策略,你可以回测并分析策略表现。 + +• **优点**:专为量化交易设计,适合在 Go 环境中进行策略回测。 + +• **链接**:[https://github.com/saniales/golang-quant](https://github.com/saniales/golang-quant) + + + +**3. AlgoTrader** + +• **功能**:AlgoTrader 是一个强大的量化交易平台,虽然主要是用 Java 开发的,但它支持用 Go 进行策略开发,并能够通过其 API 接口来进行策略回测、实盘交易等操作。它也支持多个交易所和资产类型。 + +• **如何结合使用**:可以使用 Go 来访问 AlgoTrader 的 API,实现策略的回测和执行。你可以通过 AlgoTrader 提供的接口,结合 Go 的其他库(如 GoCCXT)来获取市场数据并进行策略优化。 + +• **优点**:功能强大,适合用作量化交易平台,虽然是 Java 开发,但 Go 也可以通过 API 与其进行集成。 + +• **链接**:[https://www.algotrader.com/](https://www.algotrader.com/) + + + +**4. Go-TA-Lib** + +• **功能**:Go-TA-Lib 是 **TA-Lib**(一个流行的技术分析库)的 Go 语言接口。它提供了大量的技术指标,如移动平均线(MA)、相对强弱指标(RSI)、移动平均收敛/发散指标(MACD)等,可以帮助你进行量化策略的开发。 + +• **如何结合使用**:你可以使用 **Go-TA-Lib** 来计算策略中使用的技术指标,并结合 **GoCCXT** 获取实时市场数据。然后,你可以基于这些数据和指标来开发和回测交易策略。 + +• **优点**:可以轻松地在 Go 中使用各种常见的技术分析工具,适合用来分析市场趋势。 + +• **链接**:[https://github.com/markcheno/go-talib](https://github.com/markcheno/go-talib) + + + +**5. Backtest (Go Backtesting Framework)** + +• **功能**:Backtest 是一个 Go 语言编写的回测框架,旨在简化量化策略的开发和回测过程。它支持策略逻辑、数据加载、信号生成、订单执行等功能,可以帮助你进行策略的回测。 + +• **如何结合使用**:你可以用 **GoCCXT** 获取交易所的市场数据,然后使用 Backtest 来对策略进行回测。通过 Backtest,你可以验证策略的有效性,调整策略参数。 + +• **优点**:简单易用,适合快速实现和测试量化交易策略。 + +• **链接**:[https://github.com/san-san/go-backtest](https://github.com/san-san/go-backtest) + + + +**6. Gekko (Go Version)** + +• **功能**:Gekko 是一个开源的加密货币交易机器人,支持多个交易所。虽然原始版本是用 JavaScript 编写的,但有一些社区版本将其移植到了 Go 语言。 + +• **如何结合使用**:你可以使用 Gekko 来进行策略回测、数据分析和执行自动交易,同时结合 **GoCCXT** 获取交易所的数据进行回测。Gekko 的策略框架可以帮助你快速验证交易策略。 + +• **优点**:适合快速开发和部署加密货币交易策略,尤其是支持多个交易所的集成。 + +• **链接**:[https://github.com/askmike/gekko](https://github.com/askmike/gekko) + + + +**7. Go-Portfolio** + +• **功能**:Go-Portfolio 是一个用于管理量化交易资产组合的 Go 库。它主要帮助你跟踪和管理你的投资组合的表现,同时进行风险评估和回测分析。 + +• **如何结合使用**:可以使用 Go-Portfolio 来监控和评估回测结果,结合 **GoCCXT** 获取实时资产数据,用于动态管理投资组合。 + +• **优点**:专注于资产组合管理,适合在策略执行后进行持续的表现跟踪和分析。 + +• **链接**:[https://github.com/tomochain/go-portfolio](https://github.com/tomochain/go-portfolio) + + + +**总结:** + +• **GoCCXT** 是你与交易所交互的基础库,可以用来获取市场数据、执行交易等操作。 + +• **GoQuant**、**Backtest** 和 **Golang-Quant** 等库是针对量化策略回测的工具,适合用来开发和回测交易策略。 + +• **Go-TA-Lib** 提供了技术分析功能,可以用于计算交易策略中的各种指标。 + +• 结合这些工具,你可以使用 Go 来实现一个完整的量化交易系统,包括策略开发、回测和实盘执行。 + + + +如果你已经熟悉 Go 语言,并希望在量化交易中保持一致性,使用 Go 生态中的这些库将能够帮助你高效地完成任务。 + +--- + +😯: 刚才提到的内容,不论是python的还是go的还是nodejs,有涉及到机器学习的部分的吗 + +是的,许多量化交易框架都可以结合机器学习(ML)技术来优化策略、进行预测、调整参数等。在 **Python**、**Go** 和 **Node.js** 的生态中,虽然它们的机器学习库和框架有些不同,但都可以集成机器学习功能来增强量化交易策略。 + + + +**1. Python(机器学习相关的量化框架)** + + + +Python 是机器学习和量化交易最常用的语言,以下是一些涉及机器学习的框架: + + + +**a. Zipline + scikit-learn** + +• **功能**:**Zipline** 本身并不专注于机器学习,但可以与 **scikit-learn** 等机器学习库结合使用。在 Zipline 回测框架中,你可以用机器学习模型(如回归、分类、聚类等)来生成交易信号或预测市场趋势。 + +• **如何结合使用**:使用机器学习模型对历史数据进行训练,生成预测信号。然后,这些信号可以作为交易策略的一部分,传递给 Zipline 进行回测。 + +• **适用场景**:例如,通过训练一个回归模型来预测未来某个时刻的股票价格,然后根据该预测结果下单。 + +• **链接**: + +• Zipline:[https://www.zipline.io/](https://www.zipline.io/) + +• scikit-learn:[https://scikit-learn.org/](https://scikit-learn.org/) + + + +**b. Backtrader + TensorFlow/PyTorch** + +• **功能**:**Backtrader** 是一个强大的量化回测框架,支持与机器学习模型结合。在 Backtrader 中,你可以训练深度学习模型(如使用 **TensorFlow** 或 **PyTorch**)来做市场预测,然后将模型输出作为交易信号用于策略回测。 + +• **如何结合使用**:你可以使用深度学习模型(如卷积神经网络或长短期记忆网络)预测价格走势或波动性,并将这些预测结果应用到 Backtrader 中进行回测。 + +• **适用场景**:例如,通过训练一个 LSTM 模型来预测未来价格趋势,然后根据预测结果做出买入或卖出的决策。 + +• **链接**: + +• Backtrader:[https://www.backtrader.com/](https://www.backtrader.com/) + +• TensorFlow:[https://www.tensorflow.org/](https://www.tensorflow.org/) + +• PyTorch:[https://pytorch.org/](https://pytorch.org/) + + + +**c. QuantConnect (Lean) + ML.NET 或 TensorFlow** + +• **功能**:**QuantConnect** 是一个量化交易平台,支持用机器学习模型来生成交易信号和预测。你可以使用 **ML.NET**(针对 .NET 用户)或 **TensorFlow** 来训练模型并将其应用到 QuantConnect 平台上。 + +• **如何结合使用**:QuantConnect 提供了一个灵活的框架,你可以在其中实现机器学习模型来预测市场行为。例如,使用神经网络来预测股市波动,并根据预测结果生成交易策略。 + +• **适用场景**:深度学习用于时序预测,如股票价格、外汇市场波动性预测等。 + +• **链接**: + +• QuantConnect:[https://www.quantconnect.com/](https://www.quantconnect.com/) + +• ML.NET:[https://dotnet.microsoft.com/apps/machinelearning-ai/ml-dotnet](https://dotnet.microsoft.com/apps/machinelearning-ai/ml-dotnet) + +• TensorFlow:[https://www.tensorflow.org/](https://www.tensorflow.org/) + + + +**d. PyAlgoTrade + scikit-learn** + +• **功能**:**PyAlgoTrade** 是一个轻量级的量化回测框架,它支持与 **scikit-learn** 等机器学习工具结合。你可以使用机器学习模型来预测市场走势,生成买卖信号,并将这些信号传递给 PyAlgoTrade 进行回测。 + +• **如何结合使用**:利用机器学习模型对历史数据进行训练,然后根据模型的输出(如预测的价格、波动性等)进行回测,以优化交易策略。 + +• **适用场景**:例如,用随机森林、SVM 或神经网络对历史数据进行训练,生成交易信号并将其用于策略回测。 + +• **链接**: + +• PyAlgoTrade:[https://github.com/gbeced/pyalgotrade](https://github.com/gbeced/pyalgotrade) + +• scikit-learn:[https://scikit-learn.org/](https://scikit-learn.org/) + + + +**2. Go(机器学习相关的量化框架)** + + + +Go 的机器学习库相对较少,但也有一些支持机器学习的工具可以用来结合量化交易: + + + +**a. GoLearn** + +• **功能**:**GoLearn** 是一个 Go 语言的机器学习库,提供了分类、回归、聚类、降维等多种算法。可以用于开发机器学习模型,并结合 Go 的量化交易框架(如 GoCCXT)进行回测。 + +• **如何结合使用**:你可以用 GoLearn 训练机器学习模型(如回归模型或分类模型),然后根据模型的输出生成交易信号。这些信号可以与量化交易的策略框架结合使用。 + +• **适用场景**:例如,通过训练一个回归模型来预测未来的价格走势,结合 GoCCXT 获取实时数据进行交易。 + +• **链接**:[https://github.com/sjwhitworth/golearn](https://github.com/sjwhitworth/golearn) + + + +**b. Gorgonia** + +• **功能**:**Gorgonia** 是 Go 语言的一个深度学习库,类似于 TensorFlow 和 PyTorch。它提供了深度学习的基本组件,可以用于训练神经网络、卷积神经网络(CNN)、长短期记忆网络(LSTM)等。 + +• **如何结合使用**:你可以使用 Gorgonia 来训练深度学习模型,以预测市场的未来走势、价格或波动性,然后结合 Go 的量化框架进行回测和交易。 + +• **适用场景**:例如,训练一个 LSTM 模型来预测股票价格的趋势,然后在量化策略中使用这些预测值。 + +• **链接**:[https://github.com/gorgonia/gorgonia](https://github.com/gorgonia/gorgonia) + + + +**3. Node.js(机器学习相关的量化框架)** + + + +在 **Node.js** 中,虽然机器学习的生态不如 Python 强大,但依然有一些可以用于量化交易的库和框架: + + + +**a. Brain.js** + +• **功能**:**Brain.js** 是一个简单易用的神经网络库,适用于在 Node.js 中开发机器学习模型。它支持前馈神经网络、LSTM 等。 + +• **如何结合使用**:你可以用 **Brain.js** 来训练神经网络预测市场的趋势(如预测未来价格),然后将这些预测信号用于量化交易策略。 + +• **适用场景**:例如,使用 LSTM 网络来预测加密货币市场的走势,并用这些预测生成交易信号。 + +• **链接**:[https://github.com/BrainJS/brain.js](https://github.com/BrainJS/brain.js) + + + +**b. Synaptic** + +• **功能**:**Synaptic** 是一个 Node.js 的神经网络库,它可以用于训练神经网络进行分类、回归等任务。它的灵活性较高,适合用来进行机器学习任务。 + +• **如何结合使用**:可以通过 **Synaptic** 来训练神经网络模型,预测市场走势,并将预测结果作为量化交易策略的一部分。 + +• **适用场景**:训练神经网络预测价格,并将其集成到量化交易系统中。 + +• **链接**:[https://github.com/cazala/synaptic](https://github.com/cazala/synaptic) + + + +**c. TensorFlow.js** + +• **功能**:**TensorFlow.js** 是 TensorFlow 的 JavaScript 版本,支持在 Node.js 和浏览器中运行机器学习模型。你可以使用 TensorFlow.js 来训练和使用深度学习模型。 + +• **如何结合使用**:你可以利用 **TensorFlow.js** 在 Node.js 中训练深度学习模型(如 LSTM),预测市场趋势,然后将预测结果用于量化交易策略。 + +• **适用场景**:在 Node.js 环境中进行深度学习预测,如预测市场价格、波动性等。 + +• **链接**:[https://www.tensorflow.org/js](https://www.tensorflow.org/js) + + + +**总结:** + +• **Python** 提供了丰富的机器学习工具(如 **scikit-learn**、**TensorFlow**、**PyTorch**),可以非常方便地与量化回测框架(如 **Zipline**、**Backtrader**)结合,进行机器学习驱动的量化策略开发和回测。 + +• **Go** 在机器学习方面相对较弱,但 **GoLearn** 和 **Gorgonia** + +---- +😯: + +请帮我制定两个路线图, 我是go程序员, 对其他语言的代码也多少有些了解, 我的目标是分阶段的, 一种是传统的: + + + +1. 获取数据:使用 CCXT 获取来自多个交易所的实时市场数据(如价格、订单簿等)。 + +2. 数据预处理:将从交易所获取的数据转化为适合回测库的数据格式(例如,OHLCV 数据)。 + +3. 策略开发与回测:使用像 Zipline、Backtrader 或 PyAlgoTrade 等库进行策略开发和回测。 + +4. 性能分析:分析回测结果,计算策略的收益、最大回撤等性能指标,可能还需要进行优化。 + +5. 策略执行:如果回测结果令人满意,可以使用 CCXT 将策略实盘部署到实际的交易所中,进行实时交易。 + + + +另一种是基于 机器学习的: + + + +1. 数据收集:收集大量的历史股票数据,包括股票价格、交易量、市值、财务指标等。 + +2. 数据预处理:对收集到的数据进行清洗和处理,包括去除异常值、填充缺失值、标准化数据等。 + +3. 特征工程:根据股票市场的特点和经验知识,选择合适的特征来描述股票的特征和趋势。例如,可以使用移动平均线、相对强弱指标(RSI)、MACD等技术指标作为特征。 + +4. 模型选择和训练:选择适合股票预测的机器学习算法,如线性回归、支持向量机(SVM)、随机森林等,并使用历史股票数据来训练模型。 + +5. 模型评估和优化:使用一部分历史数据来评估模型的预测准确性,并根据评估结果对模型进行优化和调整,以提高预测的准确性。 + +6. 预测未来走势:使用训练好的模型来预测未来的股票走势,根据预测结果进行投资决策。 + + +😩: + +那么,在这两种情况下,我分别需要用到哪些开源框架来进行搭建,大致步骤是什么 + +根据你的背景(Go 程序员,了解其他语言的代码),我为你制定了两个路线图,一个是传统的基于规则的量化交易系统,另一个是基于机器学习的量化交易系统。每个路线图中,我将列出你需要使用的开源框架和工具,以及大致的步骤。 + + + +**传统量化交易系统路线图(基于规则的策略)** + + + +**1. 获取数据** + +• **目标**:使用 CCXT 获取来自多个交易所的实时市场数据(如价格、订单簿等)。 + +• **开源工具**: + +• **CCXT**(Go、Python、Node.js) + +CCXT 是一个非常流行的库,支持多个加密货币交易所(如 Binance、Coinbase 等)。它可以帮助你从不同交易所获取市场数据(例如,OHLCV、价格、订单簿等)。 + +• **步骤**: + +• 安装 CCXT 库。 + +• 配置连接到目标交易所,获取市场数据。 + +• 编写一个简单的脚本来获取并存储数据。 + +• **Go 支持**:你可以使用 [ccxt-go](https://github.com/CCXT/ccxt)(一个 Go 语言的包装器)来实现。 + + + +**2. 数据预处理** + +• **目标**:将从交易所获取的数据转化为适合回测库的数据格式(例如,OHLCV 数据)。 + +• **开源工具**: + +• **Pandas**(Python): 对于数据清洗和转换非常强大。 + +• **Numpy**(Python): 数值计算。 + +• **Go**: 使用 Go 自带的 encoding/csv 或第三方库来处理 CSV 数据。 + +• **步骤**: + +• 从交易所获取的数据通常是以 JSON 格式返回的,你需要将这些数据转化为合适的格式(例如,OHLCV 格式,按时间窗口分组)。 + +• 清洗数据,处理缺失数据或异常值。 + +• 格式化数据,确保它适合回测框架的输入要求。 + + + +**3. 策略开发与回测** + +• **目标**:使用策略回测框架来开发和回测策略。 + +• **开源工具**: + +• **Backtrader**(Python): 一个功能强大的回测框架,可以实现多种策略。 + + + +--- +😯: 我需要补充一下我的诉求,所以你刚刚的回答可能会需要调整, 我希望把基础数据和特种数据都放到本地的elasticSearch中,便于进行kibana的图形化战术, 以及搜索和可能会用到的分析能力 + +明白了!如果你的目标是将基础数据和特征数据都存储到 **Elasticsearch** 中,便于后续通过 **Kibana** 进行图形化展示和分析,那么你需要调整数据存储和查询的方式,进一步提升数据的可访问性和可视化能力。基于你的需求,我将重新调整两个路线图,重点强调数据的存储、搜索和分析能力。 + + + +**传统量化交易系统路线图(基于规则的策略)** + + + +**1. 获取数据** + +• **目标**:使用 CCXT 获取来自多个交易所的实时市场数据(如价格、订单簿等)。 + +• **开源工具**: + +• **CCXT**(Go、Python、Node.js):使用该库从多个加密货币交易所获取市场数据。 + +• **步骤**: + +• 使用 **CCXT** 获取实时市场数据(OHLCV、成交量等)。 + +• 将数据直接存储到 **Elasticsearch** 中,以便后续查询和分析。 + +• 通过设置定时任务(如 cron 作业)定期从交易所获取数据。 + +• **如何存储到 Elasticsearch**: + +• 将获取的每个数据点(如每个交易对的价格数据、订单簿信息等)以 **JSON 格式** 存储到 Elasticsearch。 + +• 可以根据不同的时间段或交易对来创建不同的索引。例如,market_data_binance_btc_usdt,或者按天、按小时进行索引分片(如 market_data_binance_btc_usdt_2023-10-01)。 + +• **Elasticsearch 数据结构示例**(市场数据): + +``` +{ + "timestamp": "2023-10-01T00:00:00Z", + "exchange": "binance", + "symbol": "BTC/USDT", + "open": 50000, + "high": 51000, + "low": 49500, + "close": 50500, + "volume": 1000 +} +``` + + + +• **Go 实现**: + +• 使用 **Go Elasticsearch 客户端**(如 elastic)来将数据存储到 Elasticsearch: + +``` +client, err := elastic.NewClient(elastic.SetURL("http://localhost:9200")) +if err != nil { + log.Fatal(err) +} + +// 数据存储 +_, err = client.Index(). + Index("market_data_binance_btc_usdt"). + BodyJson(data). + Do(context.Background()) +``` + + + + + +**2. 数据预处理** + +• **目标**:将从交易所获取的数据转化为适合回测库的数据格式(例如,OHLCV 数据)。 + +• **开源工具**: + +• **Go**:可以使用 Go 自带的 encoding/json 来处理从 CCXT 获取的 JSON 数据并存储到 Elasticsearch。 + +• 结合 **Elasticsearch** 的 **聚合查询** 功能进行数据预处理。你可以直接通过查询聚合操作(如按时间段聚合)从 Elasticsearch 中提取数据。 + +• **步骤**: + +• 将实时数据存储到 Elasticsearch 后,你可以直接使用 Elasticsearch 的强大搜索和聚合功能进行数据的预处理。 + +• 如果需要将数据格式转换为特定格式(如 OHLCV),可以通过 Elasticsearch 的 **聚合查询** 进行按时间窗口分组。 + + + +**3. 策略开发与回测** + +• **目标**:使用回测框架进行策略开发和回测。 + +• **开源工具**: + +• **Backtrader**(Python):支持将数据从 Elasticsearch 拉取并进行回测。 + +• **Zipline**(Python):可以用来做策略回测,结合 Elasticsearch 存储的历史数据来进行模拟交易。 + +• **步骤**: + +• 将数据从 Elasticsearch 中提取出来,转换为回测框架所需的格式。 + +• 开发交易策略,使用 Backtrader 或 Zipline 等框架来进行回测。 + +• 在回测过程中,调用 Elasticsearch API 来检索和分析数据。 + + + +**4. 性能分析** + +• **目标**:分析回测结果,计算策略的收益、最大回撤等性能指标,进行优化。 + +• **开源工具**: + +• **Kibana**:用于可视化回测结果,展示策略的表现(收益、回撤等)。 + +• **Elasticsearch**:用来存储策略的回测结果,并通过 Kibana 进行查询和分析。 + +• **步骤**: + +• 将回测结果(如每个交易的利润、回撤等)存储到 Elasticsearch。 + +• 使用 Kibana 进行数据的可视化和性能分析,生成图表、报告等。 + + + +**5. 策略执行** + +• **目标**:将策略实盘部署到实际的交易所中,进行实时交易。 + +• **开源工具**: + +• **CCXT**:用于执行实时交易,使用交易所 API 下单。 + +• **Kibana**:实时监控和分析交易执行过程。 + +• **步骤**: + +• 通过 CCXT API 将策略实盘执行,定期检查实时市场数据。 + +• 使用 Elasticsearch 存储交易记录,使用 Kibana 进行实时监控和分析。 + + + +**基于机器学习的量化交易系统路线图** + + + +**1. 数据收集** + +• **目标**:收集大量的历史股票数据,包括股票价格、交易量、市值、财务指标等。 + +• **开源工具**: + +• **CCXT**(Go、Python、Node.js):获取实时和历史的市场数据。 + +• **Yahoo Finance API**(Python):提供历史股票数据。 + +• **步骤**: + +• 获取股票市场的历史数据,并将其存储到 Elasticsearch 中。每个数据点包含股票信息、日期、开盘价、收盘价等。 + + + +**2. 数据预处理** + +• **目标**:对收集到的数据进行清洗和处理,包括去除异常值、填充缺失值、标准化数据等。 + +• **开源工具**: + +• **Pandas**(Python):对数据进行清洗、填充和标准化。 + +• **Elasticsearch**:数据存储,提供强大的查询和聚合功能,处理数据清洗和缺失值的情况。 + +• **步骤**: + +• 使用 **Pandas** 清洗数据,填充缺失值,并存储处理后的数据到 Elasticsearch。 + +• 使用 **Elasticsearch** 聚合查询来清理和整理数据。 + + + +**3. 特征工程** + +• **目标**:选择合适的特征来描述股票的特征和趋势(如移动平均线、RSI、MACD 等技术指标)。 + +• **开源工具**: + +• **TA-Lib**(Python):技术分析库,支持计算各种技术指标。 + +• **步骤**: + +• 计算各种技术指标,如 **RSI**、**MACD**、**移动平均线** 等,并将这些特征存储到 Elasticsearch。 + +• 在 Elasticsearch 中对这些特征进行查询和分析。 + + + +**4. 模型选择和训练** + +• **目标**:选择适合股票预测的机器学习算法(如线性回归、支持向量机、随机森林等),并使用历史数据进行训练。 + +• **开源工具**: + +• **scikit-learn**(Python):提供了多种机器学习算法,如线性回归、SVM、随机森林等。 + +• **TensorFlow** / **PyTorch**:用于训练深度学习模型。 + +• **步骤**: + +• 使用从 Elasticsearch 提取的特征数据来训练机器学习模型。 + +• 使用训练好的模型进行预测,得到股票的未来趋势。 + + + +**5. 模型评估和优化** + +• **目标**:使用历史数据评估模型的准确性,优化模型参数。 + +• **开源工具**: + +• **scikit-learn**(Python):用于模型评估和交叉验证。 + +• **Elasticsearch**:存储回测结果,进行优化和评估。 + +• **步骤**: + +• 使用交叉验证和其他评估方法来测试模型的准确性。 + +• 根据评估结果优化模型参数。 + + + +**6. 预测未来走势** + +• **目标**:使用训练好的模型来预测未来的股票走势,并根据预测结果进行投资决策。 + +• **开源工具**: + +• **Kibana**:用于展示机器学习模型的预测结果。 + +• **步骤**: + +• 将预测结果存储到 Elasticsearch 中,并使用 Kibana 进行实时监控。 + +• 根据模型的预测结果,执行交易决策。 + + + +**总结** + +• **Elasticsearch + Kibana**:作为数据存储和可视化工具,可以用于存储和分析市场数据、交易记录和回测结果。 + +• **CCXT**:获取交易所的数据,并存储到 Elasticsearch。 + +• **Backtrader / Zipline**:用于策略开发和回测。 + +• **机器学习**:可以结合 **scikit-learn**、**TensorFlow** 等框架来进行市场预测 + + +-------- + +😯: 数据采集,清洗,高阶化处理,是否会用到redis + +是的,在数据采集、清洗和高阶化处理的过程中,**Redis** 是一个非常有用的工具,尤其是当你需要高效处理大量实时数据时。以下是你可以在这些阶段中使用 Redis 的几个主要用途: + + + +**1. 数据采集:实时缓存** + +• **应用场景**:在数据采集阶段,尤其是获取来自多个交易所的数据时,可能会面临较高的频率和实时性的要求。将实时的市场数据缓存到 **Redis** 中,可以确保数据不会丢失,并且能够快速读取。 + +• **使用方式**: + +• 当你使用 **CCXT** 等库从交易所获取数据时,可以将获取的数据暂时存储到 Redis 中,这样可以避免频繁的写入 Elasticsearch(尤其是当数据量非常大时)。 + +• **Redis 的优点**:高性能的读写操作,能够快速缓存和查询数据,减少对 Elasticsearch 的压力,确保在高频数据采集时不会影响系统性能。 + +• **Redis 数据存储方式**: + +• 使用 **Redis List** 或 **Redis Hashes** 来存储每个交易对的实时市场数据(如订单簿、价格等)。 + +• 比如,对于一个交易对 BTC/USDT,你可以在 Redis 中存储该交易对的当前价格、历史价格等。 + +示例(Python): + +``` +import redis +r = redis.StrictRedis(host='localhost', port=6379, db=0) +# 将最新的市场数据存储到 Redis 中 +r.hmset('market_data:binance:BTC_USDT', { + 'price': 50000, + 'timestamp': '2023-10-01T00:00:00Z', + 'volume': 1000 +}) +``` + + + + + +**2. 数据清洗:暂存和去重** + +• **应用场景**:在数据清洗过程中,可能需要对收集到的数据进行去重、填补缺失值、数据合并等操作。你可以使用 **Redis** 来暂时存储和操作这些数据,尤其是当你需要在多个数据源之间进行去重或者合并时。 + +• **使用方式**: + +• 将获取的原始数据存储到 Redis,并在后续清洗过程中进行操作。 + +• 使用 **Redis Sets** 来存储已处理的唯一数据(去重),或者使用 **Redis Sorted Sets** 来按时间戳排序数据。 + +• **Redis 数据结构示例**: + +• 使用 **Sets** 来确保数据的唯一性。例如,当你需要确保每个交易对的数据是唯一的,可以将数据存入一个 Redis Set 中,自动去重。 + +• 使用 **Sorted Sets** 来进行基于时间的排序和数据合并处理。 + +示例(Go): + +``` +import "github.com/go-redis/redis/v8" +import "context" + +ctx := context.Background() +rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", +}) + +// 存储市场数据,确保唯一 +rdb.SAdd(ctx, "market_data_binance_btc_usdt", "50000") +``` + + + + + +**3. 高阶化处理:实时计算和数据流处理** + +• **应用场景**:在高阶化处理阶段,你可能需要执行一些复杂的计算,比如实时计算技术指标(如 RSI、MACD、移动平均线等)。使用 **Redis** 的 **Streams** 或 **Pub/Sub** 模式,可以方便地处理实时数据流,并执行一些实时计算和更新。 + +• **使用方式**: + +• **Redis Streams**:适用于处理连续的数据流(例如从交易所传入的实时市场数据流)。你可以通过 Redis Streams 来存储和处理这些数据流,进行实时计算、更新和推送。 + +• **Redis Pub/Sub**:如果你有多个系统需要实时监听某些数据变化(例如,交易策略系统、数据分析系统),Redis 的 **Pub/Sub** 功能可以将数据变化实时推送到不同的消费者系统。 + +示例(Python):使用 **Streams** 处理实时数据流: + +``` +import redis +r = redis.StrictRedis(host='localhost', port=6379, db=0) + +# 向 Stream 中推送市场数据 +r.xadd('market_stream', {'symbol': 'BTC_USDT', 'price': 50000, 'timestamp': '2023-10-01T00:00:00Z'}) +``` + + + + + +**Redis 在数据处理中的主要优势:** + +• **高性能**:Redis 是一个内存数据存储系统,提供超高的读写性能,适合需要快速缓存和查询的场景。 + +• **实时性**:在处理高频数据时,Redis 能够实时存储和处理大量数据流,特别适合量化交易系统中实时数据的缓存、清洗、处理。 + +• **扩展性**:Redis 可以横向扩展,通过分片支持大规模的数据存储和处理,满足大数据量的需求。 + +• **数据结构多样性**:Redis 提供了丰富的数据结构(如字符串、哈希、列表、集合、有序集合、流等),适应不同的业务需求,灵活地存储和操作数据。 + + + +**如何将 Redis 和 Elasticsearch 结合使用?** + +1. **Redis 作为缓存**:在高频采集数据时,使用 Redis 缓存数据,以减少 Elasticsearch 的写入压力。你可以定期将缓存的数据批量写入 Elasticsearch,或者根据需要实时推送数据到 Elasticsearch。 + +2. **数据流处理**:使用 Redis Streams 或 Pub/Sub 进行实时数据流处理,并根据处理结果将数据存储到 Elasticsearch。 + +3. **数据同步**:你可以使用 Redis 的发布/订阅(Pub/Sub)功能,将某些数据变化通知给其他服务(比如策略引擎、回测系统等),然后实时更新 Elasticsearch 中的数据。 + + + +**总结** + +• **数据采集**:使用 Redis 来缓存从交易所获取的数据,以提高数据处理的效率和实时性。 + +• **数据清洗**:使用 Redis 的 Sets、Sorted Sets 等数据结构进行去重和排序操作。 + +• **高阶化处理**:利用 Redis Streams 或 Pub/Sub 进行实时数据流的计算和分析,进一步处理数据。 + +• **Elasticsearch**:将最终处理好的数据存储到 Elasticsearch 中,以便后续查询、分析和可视化。 + + + +Redis 和 Elasticsearch 结合使用,能够有效提高数据处理的性能和扩展性,同时提供强大的实时数据流处理和查询能力,满足量化交易系统的需求。 + +--- + +😯: 所以我的诉求就基本完整了, 实现过程中会用到redis,elasticSearch这些我常用的工具,以及你推荐的工具,来按步骤实现我的目标,所以你还有什么更具体的建议 + +非常高兴看到你的需求已经明确了,结合 **Redis**、**Elasticsearch** 和其他推荐的工具来搭建量化交易系统,整个流程已经比较清晰。在此基础上,以下是我根据你的需求和使用工具的具体建议,帮助你更高效地实现目标: + + + +**1. 数据采集** + +• **选择数据源和 API**:首先确保你选择的交易所 API 能够支持你所需要的市场数据,并且支持的频率满足你的实时数据采集需求。使用 **CCXT** 库或直接使用交易所提供的 API 进行数据抓取。 + +• **数据存储到 Redis**:对于实时市场数据,如价格、成交量等,可以存入 **Redis** 缓存中,以确保数据快速处理和后续使用。 + +• 可以使用 **Redis Hashes** 来存储每个交易对的数据(如 BTC/USDT 的实时价格、订单簿等)。 + +• 使用 **Redis Lists** 或 **Sorted Sets** 存储历史数据(如 OHLCV 数据),这样便于后续回测和分析。 + + + +**示例(Go)**: + +``` +import "github.com/go-redis/redis/v8" +import "context" + +ctx := context.Background() +rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", +}) + +// 将市场数据存储到 Redis Hash 中 +rdb.HSet(ctx, "market_data:binance:BTC_USDT", map[string]interface{}{ + "price": 50000, + "volume": 1000, +}) +``` + +**2. 数据清洗和高阶处理** + +• **清洗数据**:在将数据传输到 Elasticsearch 之前,首先使用 Redis 对原始数据进行暂存,清洗和去重。你可以利用 **Redis Sets** 来去重交易数据,或者使用 **Sorted Sets** 进行数据排序(例如按时间戳)。 + +• **特征工程**:在此阶段,你可以基于历史数据计算技术指标,如 **RSI**、**MACD**、**移动平均线**等,并将这些特征存储到 Redis 或 Elasticsearch 中。使用 **Redis** 来做实时计算,计算完后可以把结果直接存到 Elasticsearch 供后续分析。 + + + +**示例(Python)**: + +``` +import talib # 用于技术分析的库 +import redis +import numpy as np + +r = redis.StrictRedis(host='localhost', port=6379, db=0) + +# 假设已经从交易所获得历史价格数据并存储到 Redis +close_prices = np.array([50000, 50500, 51000, 52000, 53000]) # 历史收盘价 + +# 使用 TA-Lib 计算 RSI 指标 +rsi = talib.RSI(close_prices, timeperiod=14) + +# 将 RSI 指标存储到 Redis +r.hmset('indicators:binance:BTC_USDT', {'rsi': rsi[-1]}) +``` + +**3. 数据存储与索引:Elasticsearch** + +• **Elasticsearch 用于历史数据存储和搜索**:将经过清洗和处理的市场数据存储到 **Elasticsearch**,以便后续的查询和分析。你可以设置适当的索引和映射,确保数据能被高效地查询和聚合。 + +• 为了支持高效的查询和性能分析,确保你为交易数据创建适合的索引映射(Mapping)。例如,可以对日期、交易对等字段创建合适的 keyword 类型索引。 + +• **数据流更新**:你可以定期将 **Redis** 中的缓存数据批量同步到 Elasticsearch 中,或者根据需要实时更新。 + + + +**示例(Go)**: + +``` +import "github.com/elastic/go-elasticsearch/v8" + +es, _ := elasticsearch.NewDefaultClient() +indexName := "market_data" + +// 创建或更新文档 +res, err := es.Index( + indexName, + strings.NewReader(`{ + "symbol": "BTC/USDT", + "price": 50000, + "timestamp": "2023-10-01T00:00:00Z" + }`), + es.Index.WithDocumentType("doc"), +) +if err != nil { + log.Fatal(err) +} +defer res.Body.Close() +``` + +**4. 策略开发与回测** + +• **回测框架**:你可以选择 **Backtrader**、**Zipline** 等框架来进行策略回测。虽然这些框架是用 Python 编写的,但它们拥有丰富的回测功能,可以帮助你实现策略验证。在回测时,将 **Elasticsearch** 中的历史数据用作输入。 + +• **实时策略执行**:一旦回测结果令人满意,使用 **CCXT** 将策略部署到实际交易所进行实时交易。此时,**Redis** 可用于存储实时市场数据,策略信号等,并将信号传递到交易执行部分。 + + + +**示例(Backtrader + Elasticsearch)**: + +``` +import backtrader as bt +from elasticsearch import Elasticsearch + +class MyStrategy(bt.Strategy): + def __init__(self): + pass + + def next(self): + # 使用实时数据执行策略 + pass + +# 连接 Elasticsearch 获取历史数据 +es = Elasticsearch() +res = es.search(index="market_data", body={"query": {"match_all": {}}}) +data = res['hits']['hits'] +``` + +**5. 性能分析** + +• **回测性能分析**:使用回测框架(如 **Backtrader**)来获取关键性能指标,如 **收益率**、**最大回撤**、**夏普比率** 等。 + +• **数据可视化**:通过 **Kibana** 将回测结果和实时交易数据进行图形化展示,可以使用 **Elasticsearch** 中的数据进行深度分析和可视化,帮助你理解策略的表现。 + +• **优化回测结果**:根据回测数据进行策略优化,例如调优参数、修改算法等。 + + + +**Kibana 可视化建议**: + +• 可以使用 Kibana 创建 **时间序列分析**,例如,展示某个交易对在不同时间段的价格变化。 + +• 使用 **Elasticsearch 聚合功能** 分析市场趋势、波动性、以及不同策略的回测表现。 + + + +**6. 实时交易执行** + +• **策略信号触发**:使用 **Redis Pub/Sub** 或 **Streams** 进行实时数据流处理,当符合策略条件时,向策略执行系统推送信号,触发买卖操作。 + +• **实时数据更新**:确保实时价格、订单簿等市场数据能在 **Redis** 中快速更新,并能够被回测系统和执行系统实时读取。 + + + +**总结:你的量化交易系统构建流程** + +1. **数据采集**:通过 **CCXT** 获取来自交易所的实时市场数据,存储到 **Redis** 中进行缓存。 + +2. **数据清洗与处理**:对实时数据进行清洗、去重、特征工程,并将处理后的数据存入 **Elasticsearch**。 + +3. **策略开发与回测**:使用 **Backtrader** 或 **Zipline** 等框架进行策略回测,利用 **Elasticsearch** 提供的历史数据。 + +4. **性能分析**:通过 **Kibana** 可视化回测结果,并对策略性能进行分析。 + +5. **实时执行与优化**:使用 **CCXT** 在实际交易所部署策略,并结合 **Redis** 实现实时数据流和信号推送,进行策略执行。 + + + +**具体工具总结:** + +• **数据采集**:CCXT、交易所 API + +• **数据存储**:Redis(缓存与实时数据处理)、Elasticsearch(历史数据存储与搜索) + +• **回测框架**:Backtrader、Zipline + +• **数据可视化与性能分析**:Kibana、Elasticsearch 聚合分析 + +• **实时执行**:CCXT、Redis Pub/Sub + + + +通过这些工具的组合,你能够高效地实现量化交易系统,同时保证数据处理的高效性与实时性。希望这些建议对你有帮助,祝你项目顺利!如果有进一步的问题,随时欢迎讨论! + +--- +😯: 有没有可能我先走基础的步骤, 通过代码/项目解偶, 来规避基于规则和机器学习这两个路线的二选一问题, + +完全可以通过解耦的方式同时实现基于规则和基于机器学习的路线,这样你就能够在不选择其中一个的情况下,灵活地结合两者的优点进行量化交易策略的开发。 + + + +具体来说,以下是通过解耦实现基础步骤的方案,旨在为你提供一种可扩展、灵活的架构设计,使你既能实现基于规则的策略,也能在未来引入机器学习模型,而不必进行路线上的二选一: + + + +**1. 数据采集与存储模块** + +• **目标**:首先采集和存储市场数据,包括实时数据和历史数据。 + +• **实现方式**: + +• 使用 **CCXT** 获取各大交易所的市场数据(如价格、订单簿、成交量等)。 + +• 将数据存储到 **Redis** 进行缓存,确保高效的实时数据处理。 + +• 将清洗和结构化后的历史数据存储到 **Elasticsearch** 中,以便后续查询、分析和回测。 + + + +**解耦思路**: + +• 数据采集部分完全独立,通过统一的接口进行获取(例如:MarketDataFetcher 类)。这意味着,你的策略系统可以灵活地选择实时或历史数据源,而无需依赖于具体的规则或机器学习框架。 + + + +**2. 数据处理与特征工程** + +• **目标**:对原始数据进行清洗、特征提取与标准化,使其适用于后续的策略开发与回测。 + +• **实现方式**: + +• 使用 **Redis** 来暂存和处理实时数据(例如,对接收到的价格进行简单的移动平均计算,存储到 Redis)。 + +• 对历史数据使用 **Pandas**、**Numpy** 等工具进行技术指标计算(例如 RSI、MACD),并将结果存入 **Elasticsearch**。 + + + +**解耦思路**: + +• 创建一个独立的数据处理模块(如 DataPreprocessing),实现数据的清洗和特征工程。可以通过配置文件或参数来选择是否应用规则算法或机器学习模型来处理数据。 + +• 例如,可以有两条路径:一条是基于规则的指标计算(如移动平均),另一条是基于机器学习的特征生成(如使用深度学习模型提取特征)。 + + + +**3. 策略开发与回测** + +• **目标**:通过历史数据进行策略的开发与回测,评估策略的有效性。 + +• **实现方式**: + +• 使用回测框架如 **Backtrader** 或 **Zipline** 进行回测。 + +• 这些框架支持通过 Data 类传入不同的数据源,因此你可以选择从 **Redis** 或 **Elasticsearch** 中加载实时数据和历史数据。 + +• 回测时,可以根据需要选择规则策略或机器学习模型来生成交易信号。 + + + +**解耦思路**: + +• 策略部分可以设计为规则引擎(基于技术指标的策略)与机器学习模型(基于预测模型的策略)分离开来。例如,可以通过策略模块的配置来决定是否使用规则策略或机器学习模型。 + +• 如果使用规则策略,你可以基于指标如移动平均、RSI 等来判断买入卖出时机。 + +• 如果使用机器学习模型,模型将基于历史数据进行训练,并根据训练结果进行预测。 + + + +**4. 实时执行与优化** + +• **目标**:将回测成功的策略部署到实际交易所进行实盘交易。 + +• **实现方式**: + +• 使用 **CCXT** 将策略信号(买入、卖出)传递给实际的交易所进行交易。 + +• 使用 **Redis** 处理实时数据流,并根据策略(规则或机器学习)生成实时交易信号。 + + +---- + +为了根据你的需求设计一个完整的架构并展示相关的依赖图,下面我会为你提供架构设计的思路以及所涉及的第三方库。该架构将整合 GoCCXT 进行数据采集、Redis 用于缓存计算过程、Elasticsearch 存储特征处理结果等。 + + + +**总体架构设计** + + + +架构主要包含以下几个模块: + +1. **配置模块**:用于从配置文件中加载交易所信息、关注的币种、维度信息等。 + +2. **数据采集模块**:使用 GoCCXT 库从多个交易所抓取历史市场数据(如蜡烛图数据、交易量等)。 + +3. **特征处理模块**:从初级数据中提取高阶特征,可能需要用到额外的第三方库来计算 MACD、RSI 等技术指标。 + +4. **缓存模块**:使用 Redis 存储中间数据和计算结果,以便进行高效计算和快速访问。 + +5. **数据存储模块**:将计算后的特征数据存入 Elasticsearch,以便后续查询和分析。 + +6. **调度模块**:根据命令行参数(如 startTime 和 endTime),将数据抓取和计算过程拆分成小段并按需执行。 + + + +**核心依赖库** + +1. **GoCCXT**:用于与交易所进行交互,抓取市场数据。 + +2. **Redis**:用于缓存初级数据和计算中间结果。 + +3. **Elasticsearch**:用于存储最终的特征数据。 + +4. **技术分析库**:用于特征计算,可能使用如 talib(通过 Go 语言接口)、go-talib 等库计算 MACD、RSI 等技术指标。 + +5. **配置管理**:使用 Viper 或 Config 来管理配置文件,提供交易所信息、API keys、币种和维度。 + + + +**模块拆分与依赖关系** + + + +以下是各个模块的功能和依赖关系: + + + +**1. 配置模块 (config)** + +• **功能**:从配置文件中加载交易所信息、API keys、关注的币种、维度、时间范围等。 + +• **依赖**: + +• Viper(用于加载配置文件) + +• 配置文件(config.json、config.yaml 等) + + + +**2. 数据采集模块 (collector)** + +• **功能**:使用 GoCCXT 从交易所抓取数据(例如,OHLCV 数据,实时价格,交易量等)。 + +• **依赖**: + +• GoCCXT(用于与交易所进行交互) + +• 配置模块(提供交易所信息和币种列表) + +• Time Range(从命令行提供的 startTime 和 endTime) + + + +**3. 特征处理模块 (feature_processor)** + +• **功能**:对抓取的市场数据进行高阶计算,生成技术指标(如 MACD、RSI)。 + +• **依赖**: + +• talib 或其他技术分析库(用于计算技术指标) + +• Redis(缓存原始数据和中间计算结果) + + + +**4. 缓存模块 (cache)** + +• **功能**:在 Redis 中存储抓取的数据和计算的中间结果,方便快速访问。 + +• **依赖**: + +• Go-Redis(用于与 Redis 交互) + +• time.Ticker(定时清理过期的缓存数据) + + + +**5. 数据存储模块 (storage)** + +• **功能**:将计算得到的高阶特征数据存储到 Elasticsearch 中,便于后续分析和查询。 + +• **依赖**: + +• elastic 或 go-elasticsearch(用于与 Elasticsearch 交互) + + + +**6. 调度模块 (scheduler)** + +• **功能**:根据 startTime 和 endTime 参数,将数据抓取和特征计算过程分段执行,避免一次性抓取过多数据,防止触发交易所的速率限制。 + +• **依赖**: + +• time.Ticker(用于控制数据抓取的速率) + +• 配置模块(获取需要抓取的币种和维度) + + + +**系统架构图(Markdown 可兼容)** + +```mermaid +graph TD; + A[配置模块] --> B[数据采集模块]; + A[配置模块] --> C[特征处理模块]; + A[配置模块] --> D[调度模块]; + + B[数据采集模块] --> E[交易所数据(GoCCXT)]; + B[数据采集模块] --> F[Redis缓存模块]; + + C[特征处理模块] --> F[Redis缓存模块]; + C[特征处理模块] --> G[计算MACD、RSI等]; + C[特征处理模块] --> H[Elasticsearch存储模块]; + + D[调度模块] --> B[数据采集模块]; + D[调度模块] --> C[特征处理模块]; + + F[Redis缓存模块] --> G[计算MACD、RSI等]; + F[Redis缓存模块] --> H[Elasticsearch存储模块]; + + H[Elasticsearch存储模块] --> I[存储高阶特征数据]; + + classDef module fill:#f9f,stroke:#333,stroke-width:2px; + class A,B,C,D,E,F,G,H,I module; +``` + + +**详细流程说明** + +1. **配置模块(config)**: + +• 从配置文件中加载相关配置,如: + +• 关注的币种(例如 BTC/USDT) + +• 交易所信息(API keys) + +• 关注的维度(例如,OHLCV 数据、实时价格、交易量等) + +• 起止时间(startTime 和 endTime,这些从命令行传入) + +• 配置管理使用 Viper。 + +1. **数据采集模块(collector)**: + +• 根据配置文件中的交易所信息和币种,使用 GoCCXT 库抓取数据。 + +• 使用 startTime 和 endTime 对数据进行分段抓取,以避免抓取过多数据。 + +• 每次抓取的数据(例如 OHLCV 数据、实时价格、交易量等)存入 Redis 进行缓存。 + +1. **特征处理模块(feature_processor)**: + +• 从 Redis 获取抓取到的初级数据。 + +• 使用技术分析库(如 talib)计算高阶特征数据(如 MACD、RSI)。 + +• 将高阶特征数据存入 Elasticsearch。 + +1. **缓存模块(cache)**: + +• 使用 Redis 存储抓取的数据和计算结果。 + +• 缓存数据可以设置过期时间,定期清理过期的数据。 + +1. **数据存储模块(storage)**: + +• 将高阶特征数据存入 Elasticsearch,以便后续查询、分析和可视化。 + +1. **调度模块(scheduler)**: + +• 负责根据时间段(startTime 和 endTime)拆分抓取任务。 + +• 控制数据抓取的速率,确保不触发交易所的 API 限制。 + + + +**总结** + + + +在这个架构中,你的程序将通过 GoCCXT 从多个交易所抓取数据,经过 Redis 缓存和处理后,利用技术分析库计算出高阶特征(如 MACD、RSI),并将这些特征数据存储到 Elasticsearch 中进行后续分析。同时,你可以通过调度模块来控制抓取速率,确保数据采集过程不会触发交易所的限制。 + + +**解耦思路**: + +• 同样,你可以通过策略模块(TradingStrategyExecutor)来接入不同的策略执行方式: + +• 基于规则的策略:直接通过规则生成交易信号。 + +• 基于机器学习的策略:通过训练好的模型生成交易信号。 + + + +**5. 性能分析与优化** + +• **目标**:对策略的表现进行分析,评估回测结果(收益率、最大回撤等)。 + +• **实现方式**: + +• 使用 **Kibana** 来可视化回测和实时交易的数据,包括收益曲线、最大回撤等指标。 + +• 你还可以在 **Elasticsearch** 中存储回测的结果,进行进一步的分析和优化。 + + + +**解耦思路**: + +• 性能分析模块可以独立于策略本身,所有的策略(无论基于规则还是机器学习)都可以输出统一格式的性能数据(如收益率、回撤等),然后通过 Kibana 进行可视化。 + + + +**解耦架构的优势** + +• **灵活性**:你可以根据实际需求选择不同的策略执行路径,甚至在运行时切换规则策略和机器学习策略。 + +• **可扩展性**:当你希望引入新的策略或优化现有策略时,只需对策略模块进行扩展,而无需重新构建整个系统。 + +• **模块化**:不同功能(数据采集、数据清洗、策略回测、策略执行、性能分析等)分开实现,易于维护和优化。 + +• **减少依赖**:即使你暂时不使用机器学习模块,仍然可以先专注于基于规则的策略,等到需要时再引入机器学习模型,而不影响其他部分。 + + + +**具体的技术实现建议** + +1. **模块化设计**:确保每个模块(数据采集、数据处理、策略回测、策略执行等)独立,并且通过明确的接口(如 REST API 或消息队列)进行解耦。 + +2. **配置驱动**:策略执行逻辑可以根据配置文件选择不同的执行路径。例如,使用 YAML 或 JSON 配置文件来选择使用基于规则的策略还是机器学习策略。 + +3. **使用消息队列**:例如 **Kafka** 或 **Redis Streams** 来实现实时数据的流转和策略信号的触发,使得系统更加解耦和高效。 + +4. **容错与异步处理**:确保系统能够容忍部分模块的故障(如数据源的短期中断),并且使用异步任务来处理实时数据的获取与处理,避免阻塞系统。 + + + +**总结:** + + + +通过上述设计,你可以实现一个既能运行基于规则的策略,又能灵活引入机器学习策略的量化交易系统。解耦设计的核心思想是将每个模块的职责明确划分,并通过配置和接口来决定如何执行策略。这种方法既能避免二选一的问题,又能保证系统的灵活性和可扩展性。 + + + +如果你需要进一步的具体实现或有其他问题,随时欢迎讨论! \ No newline at end of file diff --git a/随便/开车时听的音乐.md b/随便/开车时听的音乐.md new file mode 100644 index 0000000..8a8e964 --- /dev/null +++ b/随便/开车时听的音乐.md @@ -0,0 +1,69 @@ + +开车时听音乐是个很棒的选择,既能放松心情,又能保持专注。我会推荐一些适合开车时听的单曲和专辑,涵盖不同风格,既有轻松的节奏,也有振奋人心的旋律,适合长途或短途驾驶: + +单曲推荐 + +1. "Sweet Home Alabama" - Lynyrd Skynyrd + 甜蜜的阿拉巴马 - Lynyrd Skynyrd + + - 经典南方摇滚,节奏明快,旋律朗朗上口,非常适合在公路上播放。 + +2. "Take It Easy" - Eagles + "放松一下" - 鹰乐队 + + - 这首歌轻松惬意,尤其是那句“Well, I’m a-standin’ on a corner in Winslow, Arizona”,仿佛是为开车而生。 + +3. "Blinding Lights" - The Weeknd + "闪耀之光" - The Weeknd + + - 带有80年代复古电子风,节奏感强,适合夜间驾驶提神。 + +4. "Don’t Stop Me Now" - Queen + 不要停止我,现在 - 皇后乐队 + + - 充满能量的一首歌,Freddie Mercury的嗓音会让你感觉像在飞驰。 + +5. "Smooth" - Santana feat. Rob Thomas + 平滑 - 桑塔纳 feat. 罗布·托马斯 + + - 拉丁摇滚的律动,既放松又有活力,非常适合悠闲的旅程。 + + +专辑推荐 + +1. 《Rumours》 - Fleetwood Mac (1977) + 《谣言》 - 森林乐队 (1977) + + - 这张专辑旋律优美,情绪丰富,像“Go Your Own Way”和“Dreams”这样的曲子特别适合在路上听。 + +2. 《The Joshua Tree》 - U2 (1987) + 《 Joshua Tree》 - U2 (1987) + + - 充满史诗感的摇滚专辑,尤其是“Where the Streets Have No Name”,让人感觉像在开阔的荒野中飞驰。 + +3. 《Random Access Memories》 - Daft Punk (2013) + 《随机存取回忆》 - Daft Punk (2013) + + - 电子与放克的完美结合,“Get Lucky”和“Instant Crush”节奏感强又不失轻松。 + +4. 《Born to Run》 - Bruce Springsteen (1975) + 《生来就跑》 - 布鲁斯·斯普林斯汀 (1975) + + - 这张专辑充满了对自由和公路的渴望,尤其是标题曲“Born to Run”,简直是驾驶者的 anthem。 + +5. 《Chillhop Essentials》 - Various Artists + 《Chillhop 必备曲目》 - 多位艺术家 + + - 如果你喜欢更轻松的背景音乐,这个系列的 lo-fi hip-hop 非常适合长途驾驶,既放松又不会让人分心。 + + +小建议 + +- 长途驾驶:选择节奏平稳、旋律舒缓的音乐,比如 Fleetwood Mac 或 lo-fi,避免太激烈的曲风让你疲劳。 + +- 城市驾驶:可以挑一些节奏感强的,比如 The Weeknd 或 Santana,保持警觉。 + +- 夜间驾驶:带点电子风或振奋人心的歌,像 Queen 或 Daft Punk,能帮你提神。 + + +你平时喜欢哪种风格的音乐?我可以根据你的喜好再调整推荐! \ No newline at end of file diff --git a/随便/甘特图流程图各种图.md b/随便/甘特图流程图各种图.md new file mode 100644 index 0000000..ffa655e --- /dev/null +++ b/随便/甘特图流程图各种图.md @@ -0,0 +1,494 @@ + + +https://support.typora.io/Draw-Diagrams-With-Markdown/#sequence-diagrams-1 + + +- [Back](https://support.typora.io/) + +# Draw Diagrams With Markdown + +September 5, 2022 by typora.io + +- [Precondition](https://support.typora.io/Draw-Diagrams-With-Markdown/#precondition) +- [Sequence Diagrams](https://support.typora.io/Draw-Diagrams-With-Markdown/#sequence-diagrams) + - [Sequence Diagrams Options](https://support.typora.io/Draw-Diagrams-With-Markdown/#sequence-diagrams-options) +- [Flowcharts](https://support.typora.io/Draw-Diagrams-With-Markdown/#flowcharts) +- [Mermaid](https://support.typora.io/Draw-Diagrams-With-Markdown/#mermaid) + - [Sequence Diagrams](https://support.typora.io/Draw-Diagrams-With-Markdown/#sequence-diagrams-1) + - [Flowcharts](https://support.typora.io/Draw-Diagrams-With-Markdown/#flowcharts-1) + - [Gantt Charts](https://support.typora.io/Draw-Diagrams-With-Markdown/#gantt-charts) + - [Class Diagrams](https://support.typora.io/Draw-Diagrams-With-Markdown/#class-diagrams) + - [State Diagrams](https://support.typora.io/Draw-Diagrams-With-Markdown/#state-diagrams) + - [Pie Charts](https://support.typora.io/Draw-Diagrams-With-Markdown/#pie-charts) + - [Requirement Diagram](https://support.typora.io/Draw-Diagrams-With-Markdown/#requirement-diagram) + - [Gitgraph Diagrams / Commit Flow](https://support.typora.io/Draw-Diagrams-With-Markdown/#gitgraph-diagrams--commit-flow) + - [C4 Diagrams (plantUML compatible)](https://support.typora.io/Draw-Diagrams-With-Markdown/#c4-diagrams-plantuml-compatible) + - [Mindmap](https://support.typora.io/Draw-Diagrams-With-Markdown/#mindmap) + - [Timeline](https://support.typora.io/Draw-Diagrams-With-Markdown/#timeline) + - [Quadrant Chart](https://support.typora.io/Draw-Diagrams-With-Markdown/#quadrant-chart) + - [Sankey diagrams](https://support.typora.io/Draw-Diagrams-With-Markdown/#sankey-diagrams) + - [ZenUML](https://support.typora.io/Draw-Diagrams-With-Markdown/#zenuml) + - [XY Chart](https://support.typora.io/Draw-Diagrams-With-Markdown/#xy-chart) + - [Global Mermaid Options](https://support.typora.io/Draw-Diagrams-With-Markdown/#global-mermaid-options) + - [Overview](https://support.typora.io/Draw-Diagrams-With-Markdown/#overview) + - [Diagram Alignment](https://support.typora.io/Draw-Diagrams-With-Markdown/#diagram-alignment) + - [Mermaid Theme](https://support.typora.io/Draw-Diagrams-With-Markdown/#mermaid-theme) + - [Auto Numbering](https://support.typora.io/Draw-Diagrams-With-Markdown/#auto-numbering) + - [Flowchart Curve](https://support.typora.io/Draw-Diagrams-With-Markdown/#flowchart-curve) + - [Gantt Padding](https://support.typora.io/Draw-Diagrams-With-Markdown/#gantt-padding) + - [Inline Mermaid Config](https://support.typora.io/Draw-Diagrams-With-Markdown/#inline-mermaid-config) +- [Save-as / Copy on Diagrams](https://support.typora.io/Draw-Diagrams-With-Markdown/#save-as--copy-on-diagrams) + +# Precondition + +Typora supports some Markdown extensions for diagrams, to use this feature, first **please enable Diagrams in Preferences Panel → Markdown section**. + +When exporting as HTML, PDF, epub or docx, those rendered diagrams will also be included, but diagram features are not supported when exporting Markdown into other file formats in the current version. Also, you should note that diagrams are not supported by standard Markdown, CommonMark or GFM. Therefore, we still recommend you to insert an image of these diagrams instead of writing them in Markdown directly. + +# Sequence Diagrams + +This feature uses [js-sequence](https://bramp.github.io/js-sequence-diagrams/), which turns the following code block into a rendered diagram: + +````gfm +```sequence +Alice->Bob: Hello Bob, how are you? +Note right of Bob: Bob thinks +Bob-->Alice: I am good thanks! +``` +```` + + + +For more details, please see [this syntax explanation](https://bramp.github.io/js-sequence-diagrams/#syntax). + +### Sequence Diagrams Options + +You can change the CSS variable `--sequence-theme` to set the theme for sequence diagrams, supported values are `simple` (default) and `hand`. For example, add the following CSS in [Custom CSS](https://support.typora.io/Add-Custom-CSS/), and you will get: + +``` +:root { + --sequence-theme: hand +} +``` + +|–sequence-theme: simple|–sequence-theme: hand| +|---|---| +||| + +# Flowcharts + +This feature uses [flowchart.js](http://flowchart.js.org/), which turns the following code block into a rendered diagram: + +````gfm +```flow +st=>start: Start +op=>operation: Your Operation +cond=>condition: Yes or No? +e=>end + +st->op->cond +cond(yes)->e +cond(no)->op +``` +```` + +```flow +st=>start: Start +op=>operation: Your Operation +cond=>condition: Yes or No? +e=>end + +st->op->cond +cond(yes)->e +cond(no)->op +``` + + +# Mermaid + +Typora also has integration with [mermaid](https://mermaid-js.github.io/mermaid/#/), which supports sequence diagrams, flowcharts, Gantt charts, class and state diagrams, and pie charts. + +## Sequence Diagrams + +For more details see [these instructions](https://mermaid.js.org/syntax/sequenceDiagram.html). + +````gfm + +```` + + +```mermaid +%% Example of sequence diagram + sequenceDiagram + Alice->>Bob: Hello Bob, how are you? + alt is sick + Bob->>Alice: Not so good :( + else is well + Bob->>Alice: Feeling fresh like a daisy + end + opt Extra response + Bob->>Alice: Thanks for asking + end +``` +## Flowcharts + +For more details see [these instructions](https://mermaid.js.org/syntax/flowchart.html). + +````gfm +```mermaid +graph LR +A[Hard edge] -->B(Round edge) + B --> C{Decision} + C -->|One| D[Result one] + C -->|Two| E[Result two] +``` +```` + + +```mermaid +graph LR +A[Hard edge] -->B(Round edge) + B --> C{Decision} + C -->|One| D[Result one] + C -->|Two| E[Result two] +``` +## Gantt Charts + +For more details see [these instructions](https://mermaid.js.org/syntax/gantt.html). + +````gfm +```mermaid +%% Example with selection of syntaxes + gantt + dateFormat YYYY-MM-DD + title Adding GANTT diagram functionality to mermaid + + section A section + Completed task :done, des1, 2014-01-06,2014-01-08 + Active task :active, des2, 2014-01-09, 3d + Future task : des3, after des2, 5d + Future task2 : des4, after des3, 5d + + section Critical tasks + Completed task in the critical line :crit, done, 2014-01-06,24h + Implement parser and jison :crit, done, after des1, 2d + Create tests for parser :crit, active, 3d + Future task in critical line :crit, 5d + Create tests for renderer :2d + Add to mermaid :1d + + section Documentation + Describe gantt syntax :active, a1, after des1, 3d + Add gantt diagram to demo page :after a1 , 20h + Add another diagram to demo page :doc1, after a1 , 48h + + section Last section + Describe gantt syntax :after doc1, 3d + Add gantt diagram to demo page : 20h + Add another diagram to demo page : 48h +``` +```` + + + +```mermaid +%% Example with selection of syntaxes + gantt + dateFormat YYYY-MM-DD + title Adding GANTT diagram functionality to mermaid + + section A section + Completed task :done, des1, 2014-01-06,2014-01-08 + Active task :active, des2, 2014-01-09, 3d + Future task : des3, after des2, 5d + Future task2 : des4, after des3, 5d + + section Critical tasks + Completed task in the critical line :crit, done, 2014-01-06,24h + Implement parser and jison :crit, done, after des1, 2d + Create tests for parser :crit, active, 3d + Future task in critical line :crit, 5d + Create tests for renderer :2d + Add to mermaid :1d + + section Documentation + Describe gantt syntax :active, a1, after des1, 3d + Add gantt diagram to demo page :after a1 , 20h + Add another diagram to demo page :doc1, after a1 , 48h + + section Last section + Describe gantt syntax :after doc1, 3d + Add gantt diagram to demo page : 20h + Add another diagram to demo page : 48h +``` + +## Class Diagrams + +For more details see [these instructions](https://mermaid.js.org/syntax/classDiagram.html). + +````gfm +```mermaid +classDiagram + Animal <|-- Duck + Animal <|-- Fish + Animal <|-- Zebra + Animal : +int age + Animal : +String gender + Animal: +isMammal() + Animal: +mate() + class Duck{ + +String beakColor + +swim() + +quack() + } + class Fish{ + -int sizeInFeet + -canEat() + } + class Zebra{ + +bool is_wild + +run() + } +``` +```` + + + +## State Diagrams + +For more details see [these instructions](https://mermaid.js.org/syntax/stateDiagram.html). +```mermaid +stateDiagram + [*] --> Still + Still --> [*] + + Still --> Moving + Moving --> Still + Moving --> Crash + Crash --> [*] +``` + + + +## Pie Charts + +```mermaid +pie + title Pie Chart + "Dogs" : 386 + "Cats" : 85 + "Rats" : 150 +``` + + + +## Requirement Diagram + +A Requirement diagram provides a visualization for requirements and their connections, to each other and other documented elements. The modeling specs follow those defined by SysML v1.6. + +You can find details [here](https://mermaid-js.github.io/mermaid/#/requirementDiagram). + +```mermaid +requirementDiagram + + requirement test_req { + id: 1 + text: the test text. + risk: high + verifymethod: test + } + + element test_entity { + type: simulation + } + + test_entity - satisfies -> test_req +``` + + + +## Gitgraph Diagrams / Commit Flow + +A Git Graph is a pictorial representation of git commits and git actions(commands) on various branches. + +You can find details [here](https://mermaid.js.org/syntax/gitgraph.html). + +```mermaid +gitGraph + commit + commit + branch develop + checkout develop + commit + commit + checkout main + merge develop + commit + commit +``` + + + +## C4 Diagrams (plantUML compatible) + +Mermaid’s c4 diagram syntax is compatible with plantUML. + +You can find details [here](https://mermaid.js.org/syntax/c4c.html). + +## Mindmap + +A mind map is a diagram used to visually organize information into a hierarchy, showing relationships among pieces of the whole. It is often created around a single concept, drawn as an image in the center of a blank page, to which associated representations of ideas such as images, words and parts of words are added. Major ideas are connected directly to the central concept, and other ideas branch out from those major ideas. + +You can find details [here](https://mermaid.js.org/syntax/mindmap.html). + +````gfm +```mermaid +mindmap + root((mindmap)) + Origins + Long history + ::icon(fa fa-book) + Popularisation + British popular psychology author Tony Buzan + Research + On effectiveness<br/>and features + On Automatic creation + Uses + Creative techniques + Strategic planning + Argument mapping + Tools + Pen and paper + Mermaid +``` +```` + +```mermaid +mindmap + root((mindmap)) + Origins + Long history + ::icon(fa fa-book) + Popularisation + British popular psychology author Tony Buzan + Research + On effectiveness<br/>and features + On Automatic creation + Uses + Creative techniques + Strategic planning + Argument mapping + Tools + Pen and paper + Mermaid +``` + + + +## Timeline + +See [https://mermaid.js.org/syntax/timeline.html](https://mermaid.js.org/syntax/timeline.html) for detail. + + + +## Quadrant Chart + +See [https://mermaid.js.org/syntax/quadrantChart.html](https://mermaid.js.org/syntax/quadrantChart.html) for details. + + + +## Sankey diagrams + +See [https://mermaid.js.org/syntax/sankey.html](https://mermaid.js.org/syntax/sankey.html) for details. + + + +## ZenUML + +See [https://mermaid.js.org/syntax/zenuml.html](https://mermaid.js.org/syntax/zenuml.html) for details. + + + +Please notice that zenuml is not first class diagram in mermaid, it may lack some features, like dark themes, etc. + +## XY Chart + +You can find more details here → https://mermaid.js.org/syntax/xyChart.html. + +You can now draw charts like this: + + + +## Global Mermaid Options + +### Overview + +You can change Mermaid options by adding [Custom CSS](https://support.typora.io/Add-Custom-CSS/), supported options include: + +``` +:root { + --mermaid-theme: default; /*or base, dark, forest, neutral, night */ + --mermaid-font-family: "trebuchet ms", verdana, arial, sans-serif; + --mermaid-sequence-numbers: off; /* or "on", see https://mermaid-js.github.io/mermaid/#/sequenceDiagram?id=sequencenumbers*/ + --mermaid-flowchart-curve: linear /* or "basis", see https://github.com/typora/typora-issues/issues/1632*/; + --mermaid--gantt-left-padding: 75; /* see https://github.com/typora/typora-issues/issues/1665*/ +} +``` + +Please note that if you export a document with themes other than the currently used one, some mermaid options will not be applied to exported HTML / PDF / Images. For example, if you currently use the Github theme, then export to PDF using the theme YYY and YYY.css defines `--mermaid-sequence-numbers: on`, then the `--mermaid-sequence-numbers: on` would not be applied to the exported PDF. + +### Diagram Alignment + +You can add the custom CSS below by following [Add Custom CSS](https://support.typora.io/Add-Custom-CSS/) to left align your diagram. + +``` +.md-diagram-panel-preview {text-align:left;} +``` + +### Mermaid Theme + +The `--mermaid-theme` css variable can quickly define a mermaid theme that fits your theme, the value can be `base`, `default`, `dark`, `forest`, `neutral` or `night` (the one used in night theme), for example: + +|CSS|Mermaid Demo| +|---|---| +|`:root {--mermaid-theme:dark;}`|| +|`:root {--mermaid-theme:neutral;}`|| +|`:root {--mermaid-theme:forest;}`|| + +### Auto Numbering + +Adding `--mermaid-sequence-numbers: on;` in the [Custom CSS](https://support.typora.io/Add-Custom-CSS/) will enable auto numbering for sequences in mermaid: + +|–mermaid-sequence-numbers:off|–mermaid-sequence-numbers:on| +|---|---| +||| + +### Flowchart Curve + +Add `--mermaid-flowchart-curve: basis` to get other type of curves. + +|–mermaid-flowchart-curve: linear;|–mermaid-flowchart-curve: basis|–mermaid-flowchart-curve: natural;|–mermaid-flowchart-curve: step;| +|---|---|---|---| +||||| + +### Gantt Padding + +|–mermaid–gantt-left-padding:75|–mermaid–gantt-left-padding:200| +|---|---| +||| + +## Inline Mermaid Config + +You can add `%%{init: [options]}%%` to the first line of your mermaid diagram to configure mermaid details as shown below: + + + +You can find full documentation at [https://mermaid-js.github.io/mermaid/#/./directives](https://mermaid-js.github.io/mermaid/#/./directives). + +# Save-as / Copy on Diagrams + +You can right click on a diagram to save it as a SVG, PNG or JPG file on your local disk. + +Also, you can right click on a diagram to copy it to your clipboard. + +[Get Typora](https://store.typora.io) / [Help Improve our documents](https://github.com/typora/wiki-website) \ No newline at end of file