diff --git a/API.md b/API.md index d518d95..002e03c 100644 --- a/API.md +++ b/API.md @@ -38,7 +38,7 @@ The plugin is written in TypeScript and exports all necessary types. Import them ```typescript import type NaturalLanguageDates from 'nldates-revived'; -import type { NLDResult, NLDRangeResult } from 'nldates-revived/src/parser'; +import type { NLDResult, NLDRangeResult, NLDPeriodResult, DateGranularity } from 'nldates-revived/src/parser'; import type { NLDSettings, DayOfWeek } from 'nldates-revived/src/settings'; ``` @@ -138,6 +138,19 @@ console.log(result2.formattedString); // "2025-01-06 15:00" **Note:** This method uses the format from `plugin.settings.format` and automatically appends time format if a time component is detected. +**Periodic-note formats:** If the input resolves to a whole week/month/quarter/year (e.g. "next week", "Q3", "next quarter") and the corresponding `weekFormat`/`monthFormat`/`quarterFormat`/`yearFormat` setting is non-empty, that format is used instead: + +```typescript +// If settings.quarterFormat is "YYYY-[Q]Q" +const result = plugin.parseDate("next quarter"); +console.log(result.formattedString); // "2025-Q2" + +const result2 = plugin.parseDate("Q3 2026"); +console.log(result2.formattedString); // "2026-Q3" +``` + +See `parser.getParsedPeriod()` below for the underlying granularity detection. + --- ### `parseDateRange(dateString: string): NLDRangeResult | null` @@ -174,6 +187,8 @@ if (weekRange) { - Weekday ranges: "from Monday to Friday" / "de lundi à vendredi" - Week ranges: "next week" / "semaine prochaine" (returns all days of the week) +**Note:** A week-range result (`granularity: "week"`) is only produced by `plugin.parseDateRange()` directly. The higher-level `getParseCommand()` used by the plugin's commands skips this multi-day list in favor of `plugin.parseDate()`'s single `weekFormat` value whenever `settings.weekFormat` is configured -- see `parseDate()` above. + --- ### `parseTime(dateString: string): NLDResult` @@ -272,6 +287,34 @@ Low-level time component detection. --- +### `parser.getParsedPeriod(selectedText: string, weekStartPreference: DayOfWeek): NLDPeriodResult` + +Like `getParsedDate()`, but also reports the calendar granularity ("day"/"week"/"month"/"quarter"/"year") the input expression referred to. Falls back to `getParsedDate()` (granularity `"day"`) for anything that isn't a whole-period reference. + +**Parameters:** +- `selectedText` (string): Natural language date string (e.g., "next quarter", "Q3 2026", "2026-W02", "tomorrow") +- `weekStartPreference` (DayOfWeek): Day of week to consider as week start + +**Returns:** `NLDPeriodResult` object (`{ date: Date; granularity: DateGranularity }`) + +**Example:** +```typescript +const parser = plugin.parser; +const { date, granularity } = parser.getParsedPeriod("next quarter", "monday"); +console.log(granularity); // "quarter" + +parser.getParsedPeriod("Q3", "monday").granularity; // "quarter" +parser.getParsedPeriod("2026-W02", "monday").granularity; // "week" +parser.getParsedPeriod("tomorrow", "monday").granularity; // "day" +``` + +**Recognized period expressions (all 12 supported languages):** +- "this/next/last week|month|quarter|year" (e.g. "next quarter", "semaine prochaine", "来月", "다음 분기") +- Explicit quarter: "Q3", "Q3 2026", "2026 Q3", "2026-Q3" (language-neutral) +- Explicit ISO week: "2026-W02" (language-neutral) + +--- + ## Types and Interfaces ### `NLDResult` @@ -309,6 +352,29 @@ interface NLDRangeResult { isRange: true; /** Optional list of all dates in the range as Moment objects */ dateList?: Moment[]; + /** Set to "week" for a whole-week period reference (e.g. "next week"), as opposed to an explicit weekday-to-weekday range. */ + granularity?: "week"; +} +``` + +### `DateGranularity` + +The calendar granularity a parsed expression resolves to, as reported by `parser.getParsedPeriod()`. + +```typescript +type DateGranularity = "day" | "week" | "month" | "quarter" | "year"; +``` + +### `NLDPeriodResult` + +Result object returned by `parser.getParsedPeriod()`. + +```typescript +interface NLDPeriodResult { + /** A date that falls within the resolved period (e.g. any day of the target week). */ + date: Date; + /** The calendar granularity detected from the input text. */ + granularity: DateGranularity; } ``` @@ -337,6 +403,13 @@ interface NLDSettings { italian: boolean; modalToggleLink: boolean; modalMomentFormat: string; // Moment.js format for the Date Picker, date-only (default: "YYYY-MM-DD") + // Periodic-note formats (all default to ""/disabled): used instead of `format` + // when an expression resolves to a whole week/month/quarter/year (e.g. "next + // week", "Q3") -- for linking to Periodic Notes-style notes. + weekFormat: string; // e.g. "GGGG-[W]WW" + monthFormat: string; // e.g. "YYYY-MM" + quarterFormat: string; // e.g. "YYYY-[Q]Q" + yearFormat: string; // e.g. "YYYY" // Smart suggestions enableSmartSuggestions: boolean; enableHistorySuggestions: boolean; diff --git a/CHANGELOG.md b/CHANGELOG.md index 146ffdd..5d77017 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,9 +9,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ### Added - The autosuggest dropdown now shows a preview of the resolved date/time next to each suggestion (e.g. `Next Monday` — `2025-01-06`), so you can see what will actually be inserted before picking one. - **Korean support** (partial): `오늘`/`내일`/`어제`, weekdays, `이번`/`다음`/`지난` prefixes, and suffix-style relative expressions (`3일 후`, `2주 전`). Vocabulary based on [CreamNuts' nldates-obsidian-korean](https://github.com/CreamNuts/nldates-obsidian-korean) (MIT), with thanks. Like the other partially-supported languages, chrono-node has no Korean parser to fall back on, so some combined phrasings (weekday + specific time, date ranges) aren't recognized yet — tracked in [#40](https://github.com/Amato21/nldates-revived/issues/40). +- **Periodic-note formats**: optional `weekFormat`/`monthFormat`/`quarterFormat`/`yearFormat` settings (Settings → Periodic notes), each empty/disabled by default. When set, an expression that resolves to a whole period instead of a single day — `@next week`, `@this quarter`, `@Q3`, `@Q3 2026`, `@2026-W02` — uses that format (e.g. `GGGG-[W]WW`, `YYYY-[Q]Q`) instead of the daily Date format, for linking to weekly/monthly/quarterly/yearly notes (e.g. with the Periodic Notes plugin). Recognized in all 12 supported languages (`@next week`/`@semaine prochaine`/`@来週`/`@다음 주`/etc.). Leaving a field empty keeps the existing behavior unchanged, including `@next week`'s current behavior of inserting a link for every day of the week. Closes [#49](https://github.com/Amato21/nldates-revived/issues/49). ### Fixed - Date Picker: picking a date via the calendar grid or a quick-select button (Today/Tomorrow/Next week/...) always inserted `12:00` as the time, regardless of what was actually selected. The modal was reformatting the selection down to a bare date string and re-parsing it through the NLP engine to build the preview/output, which discarded the actual time and let chrono-node's "no time specified" default (noon) leak through. Quick-select buttons had a related issue: they carried the real current wall-clock time instead of a clean date. +- Dutch: `next`/`last` were missing the neuter grammatical forms ("volgend"/"vorig", no final "-e") needed before neuter nouns like "jaar" and the newly-added "kwartaal" — only the common-gender forms ("volgende"/"vorige", used correctly before "week"/"maand") were recognized, so phrases like "volgend jaar" didn't parse as a relative expression. ### Changed - Date Picker no longer deals with time at all — it's a date picker. Previously, picking a date always carried *some* time value (the real current wall-clock time), with no way to control or clear it. Rather than adding a settings menu to make that time optional, the modal now always produces a plain date, even if the manual input field is used to type a phrase that includes a time (e.g. "today at 3pm"). The default format changed from `YYYY-MM-DD HH:mm` to `YYYY-MM-DD` accordingly. For dates that do need a specific time, use the "Insert the current date and time" command or type a full expression into the autosuggest instead. diff --git a/README.md b/README.md index a5ea30e..42aa5b8 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,10 @@ Go to **Settings > Natural Language Dates**: * **Manage history:** Opens a list of everything in your suggestion history (most relevant first), with a button to remove any single entry, plus a "Clear all" option (armed on the first click, applied on the second, so it can't be triggered by accident) * **Date Formatting:** * **Omit date for short relative expressions:** When enabled, short relative expressions for today (e.g., `@in 15 min`, `@in 2 hours`) will display only the time (e.g., `14:30`) instead of `[[2024-01-15]] 14:30` (enabled by default) +* **Periodic Notes:** Optional formats for linking to weekly/monthly/quarterly/yearly notes (e.g. used by the [Periodic Notes](https://github.com/liamcain/obsidian-periodic-notes) plugin), each empty/disabled by default: + * **Week format** (e.g. `GGGG-[W]WW`), **Month format** (e.g. `YYYY-MM`), **Quarter format** (e.g. `YYYY-[Q]Q`), **Year format** (e.g. `YYYY`) + * When set, an expression that resolves to a whole period instead of a single day — `@next week`, `@this quarter`, `@Q3`, `@Q3 2026`, `@2026-W02` — uses that format instead of the daily Date format. Leave a field empty to keep using the daily format for that granularity (and, for weeks specifically, the existing behavior of inserting a link for every day of the week). + * Recognized in all 12 supported languages: `@next week`/`@semaine prochaine`/`@来週`/`@다음 주`, etc. **Note:** History data is stored in `.obsidian/plugins/nldates-revived/history.json` and is limited to the 100 most relevant entries for optimal performance. diff --git a/main.js b/main.js index f30811b..5c06831 100644 --- a/main.js +++ b/main.js @@ -1093,6 +1093,7 @@ const dict$b = { week: "Week|Weeks|w", month: "Month|Months|M|mo", year: "Year|Years|y|yr|yrs", + quarter: "Quarter|Quarters|Q|qtr", and: "And", at: "At", from: "From", @@ -1138,6 +1139,7 @@ const dict$a = { week: "週|週間|しゅう|しゅうかん", month: "月|ヶ月|かげつ|がつ", year: "年|ねん", + quarter: "四半期", of: "の", first: "最初|第一|初|最初の", and: "と|および", @@ -1183,6 +1185,7 @@ const dict$9 = { week: "semaine|semaines|s|w", month: "mois|M|mo", year: "année|années|an|ans|a|y", + quarter: "trimestre|trimestres", and: "et", at: "à|a", from: "de|depuis|du", @@ -1229,6 +1232,7 @@ const dict$8 = { week: "semana|semanas|s|w", month: "mês|meses|M|mo", year: "ano|anos|a|y", + quarter: "trimestre|trimestres", and: "e", at: "às|as|à|a", from: "de|desde", @@ -1274,6 +1278,7 @@ const dict$7 = { week: "Woche|Wochen|w", month: "Monat|Monate|Monats|M|mo", year: "Jahr|Jahre|j|y", + quarter: "Quartal|Quartale|Quartals", and: "und", at: "um", from: "von|ab", @@ -1286,8 +1291,11 @@ const dict$6 = { today: "Vandaag", tomorrow: "Morgen", yesterday: "Gisteren", - next: "volgende", - last: "vorige|laatste", + // "volgende"/"vorige" agree with common-gender ("de") nouns like "week"/"maand"; + // neuter ("het") nouns like "jaar"/"kwartaal" drop the final "-e" ("volgend jaar", not + // "volgende jaar"), so both forms are listed here. + next: "volgende|volgend", + last: "vorige|vorig|laatste", this: "deze|dit", in: "over", sunday: "zondag", @@ -1319,6 +1327,7 @@ const dict$6 = { week: "week|weken|w", month: "maand|maanden|M|mo", year: "jaar|jaren|j|y", + quarter: "kwartaal|kwartalen", and: "en", at: "om", from: "van|vanaf", @@ -1365,6 +1374,7 @@ const dict$5 = { week: "semana|semanas|s|w", month: "mes|meses|M|mo", year: "año|años|a|y", + quarter: "trimestre|trimestres", and: "y", at: "a las|a la|a|en", from: "de|desde", @@ -1410,6 +1420,7 @@ const dict$4 = { week: "settimana|settimane|s|w", month: "mese|mesi|M|mo", year: "anno|anni|a|y", + quarter: "trimestre|trimestri", and: "e", at: "alle|alla|a", from: "da|dal|dalla", @@ -1455,6 +1466,7 @@ const dict$3 = { week: "неделя|недели|недель|н|нед", month: "месяц|месяца|месяцев|мес|м", year: "год|года|лет|г|л", + quarter: "квартал|квартала|кварталов|кв", and: "и", at: "в", from: "с|от", @@ -1500,6 +1512,7 @@ const dict$2 = { week: "тиждень|тижні|тижнів|т|тиж", month: "місяць|місяці|місяців|міс|м", year: "рік|роки|років|р", + quarter: "квартал|кварталу|кварталів|кв", and: "і", at: "о", from: "з|від", @@ -1559,6 +1572,7 @@ const dict$1 = { week: "週|周|星期|個星期|个星期|禮拜|礼拜|個禮拜|个礼拜", month: "月|個月|个月", year: "年", + quarter: "季度|個季度|个季度", and: "和", at: "在", from: "從|从|自", @@ -1632,6 +1646,7 @@ const dict = { week: "주", month: "개월|달", year: "년", + quarter: "분기", and: "그리고", at: "에", from: "부터", @@ -2205,6 +2220,10 @@ const DEFAULT_SETTINGS = { korean: false, modalToggleLink: false, modalMomentFormat: "YYYY-MM-DD", + weekFormat: "", + monthFormat: "", + quarterFormat: "", + yearFormat: "", // Smart suggestions enableSmartSuggestions: true, enableHistorySuggestions: true, @@ -2419,6 +2438,46 @@ class NLDSettingsTab extends require$$0.PluginSettingTab { this.plugin.settings.omitDateForShortRelative = value; await this.plugin.saveSettings(); })); + new require$$0.Setting(containerEl).setHeading().setName("Periodic notes"); + this.createPeriodicFormatSetting(containerEl, "Week format", "weekFormat", "GGGG-[W]WW", "next week"); + this.createPeriodicFormatSetting(containerEl, "Month format", "monthFormat", "YYYY-MM", "next month"); + this.createPeriodicFormatSetting(containerEl, "Quarter format", "quarterFormat", "YYYY-[Q]Q", "next quarter, Q3"); + this.createPeriodicFormatSetting(containerEl, "Year format", "yearFormat", "YYYY", "next year"); + } + createPeriodicFormatSetting(containerEl, name, settingKey, placeholder, examples) { + const baseDesc = `Used instead of the daily Date format when an expression resolves to a whole period (e.g. "${examples}"). Leave empty to keep using the daily Date format for these too.`; + const setting = new require$$0.Setting(containerEl) + .setName(name) + .setDesc(baseDesc) + .addMomentFormat((text) => text + .setPlaceholder(placeholder) + .setValue(this.plugin.settings[settingKey]) + .onChange(async (value) => { + const trimmed = value.trim(); + if (!trimmed) { + this.plugin.settings[settingKey] = ""; + await this.plugin.saveSettings(); + setting.setDesc(baseDesc); + return; + } + const validated = validateMomentFormat(trimmed); + if (validated.valid) { + this.plugin.settings[settingKey] = trimmed; + await this.plugin.saveSettings(); + setting.setDesc(`${baseDesc}${validated.preview ? ` (Preview: ${validated.preview})` : ""}`); + } + else { + setting.setDesc(`${baseDesc} - ⚠️ ${validated.error || "Format invalide"}`); + text.setValue(this.plugin.settings[settingKey]); + } + })); + if (this.plugin.settings[settingKey]) { + const initialValidation = validateMomentFormat(this.plugin.settings[settingKey]); + if (initialValidation.valid && initialValidation.preview) { + setting.setDesc(`${baseDesc} (Preview: ${initialValidation.preview})`); + } + } + return setting; } createLanguageSetting(containerEl, text, settingKey, code, note) { note = note ? ` (${note})` : ""; @@ -14840,6 +14899,25 @@ class NLDParser { else { this.regexAgoSuffix = null; } + // Period-granularity shortcuts: "this/next/last week|month|quarter|year", + // e.g. "next quarter", "cette semaine", "来月", "다음 분기". Both word + // orders are needed -- most languages put the prefix first ("next + // quarter"), but French postposes "prochain"/"dernier" after the noun + // ("le trimestre prochain", "l'année prochaine", never "prochain + // trimestre"), the same inversion the ordinal-of-month/next-week-range + // patterns elsewhere in this file already account for. Verified + // empirically per language in tests/parser.test.ts. + const periodOnlyKeys = ['week', 'month', 'year']; + const periodOnlyWords = periodOnlyKeys.flatMap(key => this.tc.collectWords(key)); + const quarterWords = this.tc.collectWords("quarter"); + const periodPatternWithQuarter = this.tc.buildAlternation([...periodOnlyWords, ...quarterWords]); + this.regexPeriodPrefix = new RegExp(`^\\s*(${prefixPattern})\\s*(${periodPatternWithQuarter})\\s*$`, 'i'); + this.regexPeriodSuffix = new RegExp(`^\\s*(${periodPatternWithQuarter})\\s*(${prefixPattern})\\s*$`, 'i'); + // Language-neutral explicit forms -- "Q3"/"q3" works regardless of active + // language, the same way a bare ISO date string does. + this.regexQuarterExplicit = /^\s*q\s*([1-4])(?:\s+(\d{4}))?\s*$/i; + this.regexQuarterExplicitYearFirst = /^\s*(\d{4})\s*[-\s]\s*q\s*([1-4])\s*$/i; + this.regexWeekExplicit = /^\s*(\d{4})-w(\d{1,2})\s*$/i; } // Initializes keywords for fast detection initializeKeywords() { @@ -14864,6 +14942,12 @@ class NLDParser { this.timeUnitMap.set(word, mapping.momentUnit); } } + this.periodWords = { + week: new Set(this.tc.collectWords("week", { lowercase: true })), + month: new Set(this.tc.collectWords("month", { lowercase: true })), + quarter: new Set(this.tc.collectWords("quarter", { lowercase: true })), + year: new Set(this.tc.collectWords("year", { lowercase: true })), + }; } // --- UTILITY FUNCTION: DAY NAME → NUMERIC INDEX CONVERSION --- // Converts day names from all languages to numeric indices (0-6) @@ -15580,12 +15664,127 @@ class NLDParser { endMoment: endMoment.clone(), isRange: true, dateList: dateList, + granularity: "week", }; return result; } } return null; } + // ============================================================ + // PERIOD GRANULARITY: "this/next/last week|month|quarter|year", explicit + // "Q3"/"2026-Q3"/"2026-W02" -- resolves to a representative date within the + // period, for callers that want to format the whole period (e.g. a + // Periodic-Notes-style weekly/monthly/quarterly/yearly note link) instead + // of a single day. + // ============================================================ + tryPeriod(cleanedText) { + // Explicit quarter: "Q3", "Q3 2026", "2026 Q3", "2026-Q3". + const quarterMatch = cleanedText.match(this.regexQuarterExplicit) ?? cleanedText.match(this.regexQuarterExplicitYearFirst); + if (quarterMatch) { + // regexQuarterExplicit captures [quarter, year?]; regexQuarterExplicitYearFirst + // captures [year, quarter] -- tell them apart by which group is 1-4 digits long. + const [g1, g2] = [quarterMatch[1], quarterMatch[2]]; + const isYearFirst = g1.length === 4; + const quarterNum = parseInt(isYearFirst ? g2 : g1, 10); + const year = isYearFirst ? parseInt(g1, 10) : (g2 ? parseInt(g2, 10) : moment().year()); + const target = moment().year(year).quarter(quarterNum).startOf('quarter'); + return { date: target, granularity: 'quarter' }; + } + // Explicit ISO week: "2026-W02". + const weekMatch = cleanedText.match(this.regexWeekExplicit); + if (weekMatch) { + const year = parseInt(weekMatch[1], 10); + const week = parseInt(weekMatch[2], 10); + const target = moment().isoWeekYear(year).isoWeek(week).startOf('isoWeek'); + return { date: target, granularity: 'week' }; + } + // "this/next/last week|month|quarter|year" (most languages), or the + // postposed order "week|month|quarter|year this/next/last" (French). + const prefixMatch = cleanedText.match(this.regexPeriodPrefix); + const suffixMatch = prefixMatch ? null : cleanedText.match(this.regexPeriodSuffix); + const periodMatch = prefixMatch + ? { prefix: prefixMatch[1], period: prefixMatch[2] } + : suffixMatch + ? { prefix: suffixMatch[2], period: suffixMatch[1] } + : null; + if (periodMatch) { + const prefix = periodMatch.prefix.toLowerCase(); + const period = periodMatch.period.toLowerCase(); + const direction = this.prefixKeywords.next.has(prefix) ? 'next' : + this.prefixKeywords.last.has(prefix) ? 'last' : + 'this'; + // Duration units ("week" is fine here -- a week is 7 days regardless + // of ISO-ness, this only affects arithmetic, not day-of-week anchoring). + const addUnitByGranularity = { + week: 'week', + month: 'month', + quarter: 'quarter', + year: 'year', + }; + // startOf() units: "isoWeek" (not "week") for week granularity -- + // startOf('week') uses the locale week start (Sunday by default), + // which can land on the wrong side of an ISO week boundary near the + // edges of a week, mismatching the ISO GGGG-WW format callers use for + // week-format output. + const startOfUnitByGranularity = { + week: 'isoWeek', + month: 'month', + quarter: 'quarter', + year: 'year', + }; + const granularity = this.periodWords.week.has(period) ? 'week' : + this.periodWords.month.has(period) ? 'month' : + this.periodWords.quarter.has(period) ? 'quarter' : + this.periodWords.year.has(period) ? 'year' : + null; + if (!granularity) + return null; + const addUnit = addUnitByGranularity[granularity]; + const startOfUnit = startOfUnitByGranularity[granularity]; + const target = moment(); + if (direction === 'next') { + target.add(1, addUnit).startOf(startOfUnit); + } + else if (direction === 'last') { + target.subtract(1, addUnit).startOf(startOfUnit); + } + else if (granularity !== 'week') { + // "this week" stays on today (any day within the current week is + // fine for week-format output); "this month/quarter/year" normalizes + // to the start of the period for consistency with next/last. + target.startOf(startOfUnit); + } + return { date: target, granularity }; + } + return null; + } + /** + * Parses a natural language date string, additionally reporting the + * calendar granularity the expression referred to (day/week/month/quarter/year). + * + * Falls back to {@link getParsedDate} (granularity "day") for anything + * that isn't a whole-period reference. + * + * @param selectedText - Natural language date string (e.g., "next quarter", "Q3 2026", "tomorrow") + * @param weekStartPreference - Day of week to consider as week start + * @returns The resolved date plus its granularity + * + * @example + * ```typescript + * const parser = new NLDParser(['en']); + * const { date, granularity } = parser.getParsedPeriod("next quarter", "monday"); + * console.log(granularity); // "quarter" + * ``` + */ + getParsedPeriod(selectedText, weekStartPreference) { + const cleanedText = selectedText.trim().replace(/[!?.]+$/, ''); + const periodResult = this.tryPeriod(cleanedText); + if (periodResult) { + return { date: periodResult.date.toDate(), granularity: periodResult.granularity }; + } + return { date: this.getParsedDate(selectedText, weekStartPreference), granularity: 'day' }; + } // --- UTILITY FUNCTION: WHO HAS THE BEST SCORE? --- // Returns null (rather than a "now" placeholder) when chrono-node found no // match, so callers can tell "nothing parsed" apart from "parsed to right @@ -16410,9 +16609,15 @@ function getParseCommand(plugin, mode) { // adjustCursor()'s offset math to the pre-expansion position instead of // the edge of the text that's about to be replaced. const cursor = editor.getCursor("to"); - // Vérifier d'abord si c'est une plage de dates + // Vérifier d'abord si c'est une plage de dates. A "next week"-style period + // reference (dateRange.granularity === "week") is skipped here when a week + // periodic-note format is configured -- it falls through to plugin.parseDate() + // below instead, which resolves it to a single week-format value (e.g. + // "2026-W03") rather than a 7-day link list. An explicit weekday-to-weekday + // range (e.g. "from Monday to Friday", no granularity tag) always keeps the + // list behavior regardless of that setting. const dateRange = plugin.parseDateRange(selectedText); - if (dateRange) { + if (dateRange && !(dateRange.granularity === "week" && plugin.settings.weekFormat)) { // C'est une plage de dates let newStr = ""; // Si on a une liste de dates, générer une liste de liens au lieu d'une plage @@ -17476,6 +17681,26 @@ class NaturalLanguageDates extends require$$0.Plugin { moment: moment(invalidDate), }; } + if (!this.parser) { + this.resetParser(); + } + // If this expression resolves to a whole week/month/quarter/year (e.g. + // "next quarter", "Q3 2026") and a periodic-note format is configured for + // that granularity, use it in place of the daily format -- skip the + // "Ask the parser if time is detected" dance entirely below, since a + // period reference has no time-of-day to carry. + const { date: periodDate, granularity } = this.parser.getParsedPeriod(sanitizedInput, this.settings.weekStart); + const granularityFormat = this.getPeriodicFormat(granularity); + if (granularityFormat) { + const granularityFormatValidation = validateMomentFormat(granularityFormat); + const formatToUse = granularityFormatValidation.valid ? granularityFormat : this.settings.format; + const formattedString = DateFormatter.format(periodDate, formatToUse); + return { + formattedString, + date: periodDate, + moment: moment(periodDate), + }; + } // Valider le format de date const dateFormatValidation = validateMomentFormat(this.settings.format); if (!dateFormatValidation.valid) { @@ -17507,6 +17732,19 @@ class NaturalLanguageDates extends require$$0.Plugin { const result = this.parse(sanitizedInput, formatToUse); return result; } + /** + * Returns the configured periodic-note format for a given granularity + * (week/month/quarter/year), or "" if unset or the granularity is "day". + */ + getPeriodicFormat(granularity) { + switch (granularity) { + case "week": return this.settings.weekFormat; + case "month": return this.settings.monthFormat; + case "quarter": return this.settings.quarterFormat; + case "year": return this.settings.yearFormat; + default: return ""; + } + } /** * Parses a natural language date range string. * @@ -17627,4 +17865,4 @@ class NaturalLanguageDates extends require$$0.Plugin { } module.exports = NaturalLanguageDates; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL29ic2lkaWFuLWRhaWx5LW5vdGVzLWludGVyZmFjZS9kaXN0L21haW4uanMiLCJzcmMvd2luZG93LW1vbWVudC50cyIsInNyYy9kYXRlLWZvcm1hdHRlci50cyIsIm5vZGVfbW9kdWxlcy9yb2RkZWgtaTE4bi9kaXN0L2kxOG4uanMiLCJzcmMvbGFuZy9lbi50cyIsInNyYy9sYW5nL2phLnRzIiwic3JjL2xhbmcvZnIudHMiLCJzcmMvbGFuZy9wdC50cyIsInNyYy9sYW5nL2RlLnRzIiwic3JjL2xhbmcvbmwudHMiLCJzcmMvbGFuZy9lcy50cyIsInNyYy9sYW5nL2l0LnRzIiwic3JjL2xhbmcvcnUudHMiLCJzcmMvbGFuZy91ay50cyIsInNyYy9sYW5nL3poLnRzIiwic3JjL2xhbmcva28udHMiLCJzcmMvbGFuZy9oZWxwZXIudHMiLCJzcmMvdHJhbnNsYXRpb24tY29sbGVjdG9yLnRzIiwic3JjL3V0aWxzLnRzIiwic3JjL21vZGFscy9oaXN0b3J5LW1hbmFnZXItbW9kYWwudHMiLCJzcmMvc2V0dGluZ3MudHMiLCJzcmMvbW9kYWxzL2RhdGUtcGlja2VyLnRzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3R5cGVzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3V0aWxzL2RhdGVzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3RpbWV6b25lLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3Jlc3VsdHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vdXRpbHMvcGF0dGVybi5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jYWxjdWxhdGlvbi95ZWFycy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5Nb250aE5hbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOWWVhck1vbnRoRGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5UaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9hYnN0cmFjdFJlZmluZXJzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3JlZmluZXJzL0VOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NhbGN1bGF0aW9uL21lcmdpbmdDYWxjdWxhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3JlZmluZXJzL0VOTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3JlZmluZXJzL0V4dHJhY3RUaW1lem9uZUFiYnJSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9PdmVybGFwUmVtb3ZhbFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY2FsY3VsYXRpb24vd2Vla2RheXMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3JlZmluZXJzL0ZvcndhcmREYXRlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcmVmaW5lcnMvVW5saWtlbHlGb3JtYXRGaWx0ZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbmZpZ3VyYXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTkNhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5XZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTlJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3JlZmluZXJzL0VOTWVyZ2VSZWxhdGl2ZUFmdGVyRGF0ZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9yZWZpbmVycy9FTk1lcmdlUmVsYXRpdmVGb2xsb3dCeURhdGVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcmVmaW5lcnMvRU5FeHRyYWN0WWVhclN1ZmZpeFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9yZWZpbmVycy9FTlVubGlrZWx5Rm9ybWF0RmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vY29uZmlndXJhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jaHJvbm8uanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcGFyc2Vycy9ERVNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9kZS9yZWZpbmVycy9ERU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3JlZmluZXJzL0RFTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9kZS9wYXJzZXJzL0RFQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcGFyc2Vycy9ERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcGFyc2Vycy9ERVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3BhcnNlcnMvRlJDYXN1YWxUaW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcGFyc2Vycy9GUlRpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcmVmaW5lcnMvRlJNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3JlZmluZXJzL0ZSTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcGFyc2Vycy9GUldlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3BhcnNlcnMvRlJNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcGFyc2Vycy9KUFN0YW5kYXJkUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcmVmaW5lcnMvSlBNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9wYXJzZXJzL0pQQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3BhcnNlcnMvSlBXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcGFyc2Vycy9KUFNsYXNoRGF0ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3BhcnNlcnMvSlBUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3JlZmluZXJzL0pQTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9yZWZpbmVycy9KUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9wYXJzZXJzL0pQV2Vla2RheVdpdGhQYXJlbnRoZXNlc1BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcGFyc2Vycy9QVFdlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9wYXJzZXJzL1BUVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9yZWZpbmVycy9QVE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcmVmaW5lcnMvUFRNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9wYXJzZXJzL1BUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcGFyc2Vycy9QVENhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9wYXJzZXJzL1BUQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3B0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcmVmaW5lcnMvTkxNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9yZWZpbmVycy9OTE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcGFyc2Vycy9OTENhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcGFyc2Vycy9OTE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxNb250aE5hbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MU2xhc2hNb250aEZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MQ2FzdWFsRGF0ZVRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFucy9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvcGFyc2Vycy9aSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvcGFyc2Vycy9aSEhhbnNSZWxhdGlvbldlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcGFyc2Vycy9aSEhhbnRDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFudC9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50RGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcGFyc2Vycy9aSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcGFyc2Vycy9aSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50V2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFudC9yZWZpbmVycy9aSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvcmVmaW5lcnMvWkhIYW5zTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFucy9yZWZpbmVycy9aSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcGFyc2Vycy9SVU1vbnRoTmFtZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3JlZmluZXJzL1JVTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcmVmaW5lcnMvUlVNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcGFyc2Vycy9SVUNhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcGFyc2Vycy9FU1dlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9wYXJzZXJzL0VTVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9yZWZpbmVycy9FU01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcmVmaW5lcnMvRVNNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9wYXJzZXJzL0VTTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcGFyc2Vycy9FU0Nhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9wYXJzZXJzL0VTQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VzL3BhcnNlcnMvRVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9wYXJzZXJzL1VLTW9udGhOYW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcmVmaW5lcnMvVUtNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9yZWZpbmVycy9VS01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS0Nhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9wYXJzZXJzL1VLQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1JlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRNb250aE5hbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVFNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3JlZmluZXJzL0lUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcmVmaW5lcnMvSVRNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVENhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3JlZmluZXJzL0lUTWVyZ2VSZWxhdGl2ZURhdGVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9wYXJzZXJzL1NWV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3N2L3BhcnNlcnMvU1ZNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9wYXJzZXJzL1NWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3N2L3BhcnNlcnMvU1ZDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvc3YvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklDYXN1YWxUaW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZmkvcGFyc2Vycy9GSUNhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9yZWZpbmVycy9GSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3JlZmluZXJzL0ZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklTdGFuZGFyZFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklNb250aFllYXJQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9wYXJzZXJzL1ZJWWVhclBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSUNhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9wYXJzZXJzL1ZJV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9yZWZpbmVycy9WSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3JlZmluZXJzL1ZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9yZWZpbmVycy9WSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9pbmRleC5qcyIsInNyYy9sb2dnZXIudHMiLCJzcmMvY2hyb25vLnRzIiwic3JjL3RpbWUtZGV0ZWN0b3IudHMiLCJzcmMvbHJ1LWNhY2hlLnRzIiwic3JjL3BhcnNlci50cyIsInNyYy9zdWdnZXN0L2RhdGUtc3VnZ2VzdC50cyIsInNyYy9jb21tYW5kcy50cyIsInNyYy9oaXN0b3J5LW1hbmFnZXIudHMiLCJzcmMvY29udGV4dC1hbmFseXplci50cyIsInNyYy9lcnJvcnMudHMiLCJzcmMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBvYnNpZGlhbiA9IHJlcXVpcmUoJ29ic2lkaWFuJyk7XG5cbmNvbnN0IERFRkFVTFRfREFJTFlfTk9URV9GT1JNQVQgPSBcIllZWVktTU0tRERcIjtcbmNvbnN0IERFRkFVTFRfV0VFS0xZX05PVEVfRk9STUFUID0gXCJnZ2dnLVtXXXd3XCI7XG5jb25zdCBERUZBVUxUX01PTlRITFlfTk9URV9GT1JNQVQgPSBcIllZWVktTU1cIjtcbmNvbnN0IERFRkFVTFRfUVVBUlRFUkxZX05PVEVfRk9STUFUID0gXCJZWVlZLVtRXVFcIjtcbmNvbnN0IERFRkFVTFRfWUVBUkxZX05PVEVfRk9STUFUID0gXCJZWVlZXCI7XG5cbmZ1bmN0aW9uIHNob3VsZFVzZVBlcmlvZGljTm90ZXNTZXR0aW5ncyhwZXJpb2RpY2l0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IHdpbmRvdy5hcHAucGx1Z2lucy5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKTtcbiAgICByZXR1cm4gcGVyaW9kaWNOb3RlcyAmJiBwZXJpb2RpY05vdGVzLnNldHRpbmdzPy5bcGVyaW9kaWNpdHldPy5lbmFibGVkO1xufVxuLyoqXG4gKiBSZWFkIHRoZSB1c2VyIHNldHRpbmdzIGZvciB0aGUgYGRhaWx5LW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXREYWlseU5vdGVTZXR0aW5ncygpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCB7IGludGVybmFsUGx1Z2lucywgcGx1Z2lucyB9ID0gd2luZG93LmFwcDtcbiAgICAgICAgaWYgKHNob3VsZFVzZVBlcmlvZGljTm90ZXNTZXR0aW5ncyhcImRhaWx5XCIpKSB7XG4gICAgICAgICAgICBjb25zdCB7IGZvcm1hdCwgZm9sZGVyLCB0ZW1wbGF0ZSB9ID0gcGx1Z2lucy5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKT8uc2V0dGluZ3M/LmRhaWx5IHx8IHt9O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCB8fCBERUZBVUxUX0RBSUxZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgICAgIGZvbGRlcjogZm9sZGVyPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGVtcGxhdGU/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGZvbGRlciwgZm9ybWF0LCB0ZW1wbGF0ZSB9ID0gaW50ZXJuYWxQbHVnaW5zLmdldFBsdWdpbkJ5SWQoXCJkYWlseS1ub3Rlc1wiKT8uaW5zdGFuY2U/Lm9wdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCB8fCBERUZBVUxUX0RBSUxZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgZm9sZGVyOiBmb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gZGFpbHkgbm90ZSBzZXR0aW5ncyBmb3VuZCFcIiwgZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIFJlYWQgdGhlIHVzZXIgc2V0dGluZ3MgZm9yIHRoZSBgd2Vla2x5LW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXRXZWVrbHlOb3RlU2V0dGluZ3MoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3QgcGx1Z2luTWFuYWdlciA9IHdpbmRvdy5hcHAucGx1Z2lucztcbiAgICAgICAgY29uc3QgY2FsZW5kYXJTZXR0aW5ncyA9IHBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luKFwiY2FsZW5kYXJcIik/Lm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHBlcmlvZGljTm90ZXNTZXR0aW5ncyA9IHBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik/LnNldHRpbmdzPy53ZWVrbHk7XG4gICAgICAgIGlmIChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJ3ZWVrbHlcIikpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBwZXJpb2RpY05vdGVzU2V0dGluZ3MuZm9ybWF0IHx8IERFRkFVTFRfV0VFS0xZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgICAgIGZvbGRlcjogcGVyaW9kaWNOb3Rlc1NldHRpbmdzLmZvbGRlcj8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHBlcmlvZGljTm90ZXNTZXR0aW5ncy50ZW1wbGF0ZT8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gY2FsZW5kYXJTZXR0aW5ncyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1hdDogc2V0dGluZ3Mud2Vla2x5Tm90ZUZvcm1hdCB8fCBERUZBVUxUX1dFRUtMWV9OT1RFX0ZPUk1BVCxcbiAgICAgICAgICAgIGZvbGRlcjogc2V0dGluZ3Mud2Vla2x5Tm90ZUZvbGRlcj8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogc2V0dGluZ3Mud2Vla2x5Tm90ZVRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gd2Vla2x5IG5vdGUgc2V0dGluZ3MgZm91bmQhXCIsIGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBSZWFkIHRoZSB1c2VyIHNldHRpbmdzIGZvciB0aGUgYHBlcmlvZGljLW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXRNb250aGx5Tm90ZVNldHRpbmdzKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGx1Z2luTWFuYWdlciA9IHdpbmRvdy5hcHAucGx1Z2lucztcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJtb250aGx5XCIpICYmXG4gICAgICAgICAgICBwbHVnaW5NYW5hZ2VyLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpPy5zZXR0aW5ncz8ubW9udGhseSkgfHxcbiAgICAgICAgICAgIHt9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9ybWF0OiBzZXR0aW5ncy5mb3JtYXQgfHwgREVGQVVMVF9NT05USExZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgZm9sZGVyOiBzZXR0aW5ncy5mb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHNldHRpbmdzLnRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gbW9udGhseSBub3RlIHNldHRpbmdzIGZvdW5kIVwiLCBlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogUmVhZCB0aGUgdXNlciBzZXR0aW5ncyBmb3IgdGhlIGBwZXJpb2RpYy1ub3Rlc2AgcGx1Z2luXG4gKiB0byBrZWVwIGJlaGF2aW9yIG9mIGNyZWF0aW5nIGEgbmV3IG5vdGUgaW4tc3luYy5cbiAqL1xuZnVuY3Rpb24gZ2V0UXVhcnRlcmx5Tm90ZVNldHRpbmdzKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGx1Z2luTWFuYWdlciA9IHdpbmRvdy5hcHAucGx1Z2lucztcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJxdWFydGVybHlcIikgJiZcbiAgICAgICAgICAgIHBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik/LnNldHRpbmdzPy5xdWFydGVybHkpIHx8XG4gICAgICAgICAgICB7fTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1hdDogc2V0dGluZ3MuZm9ybWF0IHx8IERFRkFVTFRfUVVBUlRFUkxZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgZm9sZGVyOiBzZXR0aW5ncy5mb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHNldHRpbmdzLnRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gcXVhcnRlcmx5IG5vdGUgc2V0dGluZ3MgZm91bmQhXCIsIGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBSZWFkIHRoZSB1c2VyIHNldHRpbmdzIGZvciB0aGUgYHBlcmlvZGljLW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXRZZWFybHlOb3RlU2V0dGluZ3MoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBwbHVnaW5NYW5hZ2VyID0gd2luZG93LmFwcC5wbHVnaW5zO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gKHNob3VsZFVzZVBlcmlvZGljTm90ZXNTZXR0aW5ncyhcInllYXJseVwiKSAmJlxuICAgICAgICAgICAgcGx1Z2luTWFuYWdlci5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKT8uc2V0dGluZ3M/LnllYXJseSkgfHxcbiAgICAgICAgICAgIHt9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9ybWF0OiBzZXR0aW5ncy5mb3JtYXQgfHwgREVGQVVMVF9ZRUFSTFlfTk9URV9GT1JNQVQsXG4gICAgICAgICAgICBmb2xkZXI6IHNldHRpbmdzLmZvbGRlcj8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogc2V0dGluZ3MudGVtcGxhdGU/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhcIk5vIGN1c3RvbSB5ZWFybHkgbm90ZSBzZXR0aW5ncyBmb3VuZCFcIiwgZXJyKTtcbiAgICB9XG59XG5cbi8vIENyZWRpdDogQGNyZWF0aW9uaXgvcGF0aC5qc1xuZnVuY3Rpb24gam9pbiguLi5wYXJ0U2VnbWVudHMpIHtcbiAgICAvLyBTcGxpdCB0aGUgaW5wdXRzIGludG8gYSBsaXN0IG9mIHBhdGggY29tbWFuZHMuXG4gICAgbGV0IHBhcnRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJ0U2VnbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KHBhcnRTZWdtZW50c1tpXS5zcGxpdChcIi9cIikpO1xuICAgIH1cbiAgICAvLyBJbnRlcnByZXQgdGhlIHBhdGggY29tbWFuZHMgdG8gZ2V0IHRoZSBuZXcgcmVzb2x2ZWQgcGF0aC5cbiAgICBjb25zdCBuZXdQYXJ0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0c1tpXTtcbiAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXNcbiAgICAgICAgLy8gQWxzbyByZW1vdmUgXCIuXCIgc2VnbWVudHNcbiAgICAgICAgaWYgKCFwYXJ0IHx8IHBhcnQgPT09IFwiLlwiKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIC8vIFB1c2ggbmV3IHBhdGggc2VnbWVudHMuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG5ld1BhcnRzLnB1c2gocGFydCk7XG4gICAgfVxuICAgIC8vIFByZXNlcnZlIHRoZSBpbml0aWFsIHNsYXNoIGlmIHRoZXJlIHdhcyBvbmUuXG4gICAgaWYgKHBhcnRzWzBdID09PSBcIlwiKVxuICAgICAgICBuZXdQYXJ0cy51bnNoaWZ0KFwiXCIpO1xuICAgIC8vIFR1cm4gYmFjayBpbnRvIGEgc2luZ2xlIHN0cmluZyBwYXRoLlxuICAgIHJldHVybiBuZXdQYXJ0cy5qb2luKFwiL1wiKTtcbn1cbmZ1bmN0aW9uIGJhc2VuYW1lKGZ1bGxQYXRoKSB7XG4gICAgbGV0IGJhc2UgPSBmdWxsUGF0aC5zdWJzdHJpbmcoZnVsbFBhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG4gICAgaWYgKGJhc2UubGFzdEluZGV4T2YoXCIuXCIpICE9IC0xKVxuICAgICAgICBiYXNlID0gYmFzZS5zdWJzdHJpbmcoMCwgYmFzZS5sYXN0SW5kZXhPZihcIi5cIikpO1xuICAgIHJldHVybiBiYXNlO1xufVxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlRm9sZGVyRXhpc3RzKHBhdGgpIHtcbiAgICBjb25zdCBkaXJzID0gcGF0aC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKS5zcGxpdChcIi9cIik7XG4gICAgZGlycy5wb3AoKTsgLy8gcmVtb3ZlIGJhc2VuYW1lXG4gICAgaWYgKGRpcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGRpciA9IGpvaW4oLi4uZGlycyk7XG4gICAgICAgIGlmICghd2luZG93LmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoZGlyKSkge1xuICAgICAgICAgICAgYXdhaXQgd2luZG93LmFwcC52YXVsdC5jcmVhdGVGb2xkZXIoZGlyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGdldE5vdGVQYXRoKGRpcmVjdG9yeSwgZmlsZW5hbWUpIHtcbiAgICBpZiAoIWZpbGVuYW1lLmVuZHNXaXRoKFwiLm1kXCIpKSB7XG4gICAgICAgIGZpbGVuYW1lICs9IFwiLm1kXCI7XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSBvYnNpZGlhbi5ub3JtYWxpemVQYXRoKGpvaW4oZGlyZWN0b3J5LCBmaWxlbmFtZSkpO1xuICAgIGF3YWl0IGVuc3VyZUZvbGRlckV4aXN0cyhwYXRoKTtcbiAgICByZXR1cm4gcGF0aDtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldFRlbXBsYXRlSW5mbyh0ZW1wbGF0ZSkge1xuICAgIGNvbnN0IHsgbWV0YWRhdGFDYWNoZSwgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgdGVtcGxhdGVQYXRoID0gb2JzaWRpYW4ubm9ybWFsaXplUGF0aCh0ZW1wbGF0ZSk7XG4gICAgaWYgKHRlbXBsYXRlUGF0aCA9PT0gXCIvXCIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXCJcIiwgbnVsbF0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZUZpbGUgPSBtZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KHRlbXBsYXRlUGF0aCwgXCJcIik7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgdmF1bHQuY2FjaGVkUmVhZCh0ZW1wbGF0ZUZpbGUpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCBJRm9sZEluZm8gPSB3aW5kb3cuYXBwLmZvbGRNYW5hZ2VyLmxvYWQodGVtcGxhdGVGaWxlKTtcbiAgICAgICAgcmV0dXJuIFtjb250ZW50cywgSUZvbGRJbmZvXTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcmVhZCB0aGUgZGFpbHkgbm90ZSB0ZW1wbGF0ZSAnJHt0ZW1wbGF0ZVBhdGh9J2AsIGVycik7XG4gICAgICAgIG5ldyBvYnNpZGlhbi5Ob3RpY2UoXCJGYWlsZWQgdG8gcmVhZCB0aGUgZGFpbHkgbm90ZSB0ZW1wbGF0ZVwiKTtcbiAgICAgICAgcmV0dXJuIFtcIlwiLCBudWxsXTtcbiAgICB9XG59XG5cbi8qKlxuICogZGF0ZVVJRCBpcyBhIHdheSBvZiB3ZWVrbHkgaWRlbnRpZnlpbmcgZGFpbHkvd2Vla2x5L21vbnRobHkgbm90ZXMuXG4gKiBUaGV5IGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBncmFudWxhcml0eSB0byBhdm9pZCBhbWJpZ3VpdHkuXG4gKi9cbmZ1bmN0aW9uIGdldERhdGVVSUQoZGF0ZSwgZ3JhbnVsYXJpdHkgPSBcImRheVwiKSB7XG4gICAgY29uc3QgdHMgPSBkYXRlLmNsb25lKCkuc3RhcnRPZihncmFudWxhcml0eSkuZm9ybWF0KCk7XG4gICAgcmV0dXJuIGAke2dyYW51bGFyaXR5fS0ke3RzfWA7XG59XG5mdW5jdGlvbiByZW1vdmVFc2NhcGVkQ2hhcmFjdGVycyhmb3JtYXQpIHtcbiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1xcW1teXFxdXSpcXF0vZywgXCJcIik7IC8vIHJlbW92ZSBldmVyeXRoaW5nIHdpdGhpbiBicmFja2V0c1xufVxuLyoqXG4gKiBYWFg6IFdoZW4gcGFyc2luZyBkYXRlcyB0aGF0IGNvbnRhaW4gYm90aCB3ZWVrIG51bWJlcnMgYW5kIG1vbnRocyxcbiAqIE1vbWVudCBjaG9zZXMgdG8gaWdub3JlIHRoZSB3ZWVrIG51bWJlcnMuIEZvciB0aGUgd2VlayBkYXRlVUlELCB3ZVxuICogd2FudCB0aGUgb3Bwb3NpdGUgYmVoYXZpb3IuIFN0cmlwIHRoZSBNTU0gZnJvbSB0aGUgZm9ybWF0IHRvIHBhdGNoLlxuICovXG5mdW5jdGlvbiBpc0Zvcm1hdEFtYmlndW91cyhmb3JtYXQsIGdyYW51bGFyaXR5KSB7XG4gICAgaWYgKGdyYW51bGFyaXR5ID09PSBcIndlZWtcIikge1xuICAgICAgICBjb25zdCBjbGVhbkZvcm1hdCA9IHJlbW92ZUVzY2FwZWRDaGFyYWN0ZXJzKGZvcm1hdCk7XG4gICAgICAgIHJldHVybiAoL3d7MSwyfS9pLnRlc3QoY2xlYW5Gb3JtYXQpICYmXG4gICAgICAgICAgICAoL017MSw0fS8udGVzdChjbGVhbkZvcm1hdCkgfHwgL0R7MSw0fS8udGVzdChjbGVhbkZvcm1hdCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0RGF0ZUZyb21GaWxlKGZpbGUsIGdyYW51bGFyaXR5KSB7XG4gICAgcmV0dXJuIGdldERhdGVGcm9tRmlsZW5hbWUoZmlsZS5iYXNlbmFtZSwgZ3JhbnVsYXJpdHkpO1xufVxuZnVuY3Rpb24gZ2V0RGF0ZUZyb21QYXRoKHBhdGgsIGdyYW51bGFyaXR5KSB7XG4gICAgcmV0dXJuIGdldERhdGVGcm9tRmlsZW5hbWUoYmFzZW5hbWUocGF0aCksIGdyYW51bGFyaXR5KTtcbn1cbmZ1bmN0aW9uIGdldERhdGVGcm9tRmlsZW5hbWUoZmlsZW5hbWUsIGdyYW51bGFyaXR5KSB7XG4gICAgY29uc3QgZ2V0U2V0dGluZ3MgPSB7XG4gICAgICAgIGRheTogZ2V0RGFpbHlOb3RlU2V0dGluZ3MsXG4gICAgICAgIHdlZWs6IGdldFdlZWtseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgbW9udGg6IGdldE1vbnRobHlOb3RlU2V0dGluZ3MsXG4gICAgICAgIHF1YXJ0ZXI6IGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgeWVhcjogZ2V0WWVhcmx5Tm90ZVNldHRpbmdzLFxuICAgIH07XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0U2V0dGluZ3NbZ3JhbnVsYXJpdHldKCkuZm9ybWF0LnNwbGl0KFwiL1wiKS5wb3AoKTtcbiAgICBjb25zdCBub3RlRGF0ZSA9IHdpbmRvdy5tb21lbnQoZmlsZW5hbWUsIGZvcm1hdCwgdHJ1ZSk7XG4gICAgaWYgKCFub3RlRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChpc0Zvcm1hdEFtYmlndW91cyhmb3JtYXQsIGdyYW51bGFyaXR5KSkge1xuICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT09IFwid2Vla1wiKSB7XG4gICAgICAgICAgICBjb25zdCBjbGVhbkZvcm1hdCA9IHJlbW92ZUVzY2FwZWRDaGFyYWN0ZXJzKGZvcm1hdCk7XG4gICAgICAgICAgICBpZiAoL3d7MSwyfS9pLnRlc3QoY2xlYW5Gb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5tb21lbnQoZmlsZW5hbWUsIFxuICAgICAgICAgICAgICAgIC8vIElmIGZvcm1hdCBjb250YWlucyB3ZWVrLCByZW1vdmUgZGF5ICYgbW9udGggZm9ybWF0dGluZ1xuICAgICAgICAgICAgICAgIGZvcm1hdC5yZXBsYWNlKC9NezEsNH0vZywgXCJcIikucmVwbGFjZSgvRHsxLDR9L2csIFwiXCIpLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vdGVEYXRlO1xufVxuXG5jbGFzcyBEYWlseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIG1pbWljcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGRhaWx5LW5vdGVzIHBsdWdpblxuICogc28gaXQgd2lsbCByZXBsYWNlIHt7ZGF0ZX19LCB7e3RpdGxlfX0sIGFuZCB7e3RpbWV9fSB3aXRoIHRoZVxuICogZm9ybWF0dGVkIHRpbWVzdGFtcC5cbiAqXG4gKiBOb3RlOiBpdCBoYXMgYW4gYWRkZWQgYm9udXMgdGhhdCBpdCdzIG5vdCAndG9kYXknIHNwZWNpZmljLlxuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVEYWlseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IGFwcCA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xuICAgIGNvbnN0IG1vbWVudCA9IHdpbmRvdy5tb21lbnQ7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldERhaWx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgW3RlbXBsYXRlQ29udGVudHMsIElGb2xkSW5mb10gPSBhd2FpdCBnZXRUZW1wbGF0ZUluZm8odGVtcGxhdGUpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gZGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGF3YWl0IGdldE5vdGVQYXRoKGZvbGRlciwgZmlsZW5hbWUpO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRGaWxlID0gYXdhaXQgdmF1bHQuY3JlYXRlKG5vcm1hbGl6ZWRQYXRoLCB0ZW1wbGF0ZUNvbnRlbnRzXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqZGF0ZVxccyp9fS9naSwgZmlsZW5hbWUpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGltZVxccyp9fS9naSwgbW9tZW50KCkuZm9ybWF0KFwiSEg6bW1cIikpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGl0bGVcXHMqfX0vZ2ksIGZpbGVuYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihkYXRlfHRpbWUpXFxzKigoWystXVxcZCspKFt5cW13ZGhzXSkpP1xccyooOi4rPyk/fX0vZ2ksIChfLCBfdGltZU9yRGF0ZSwgY2FsYywgdGltZURlbHRhLCB1bml0LCBtb21lbnRGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IG1vbWVudCgpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBkYXRlLmNsb25lKCkuc2V0KHtcbiAgICAgICAgICAgICAgICBob3VyOiBub3cuZ2V0KFwiaG91clwiKSxcbiAgICAgICAgICAgICAgICBtaW51dGU6IG5vdy5nZXQoXCJtaW51dGVcIiksXG4gICAgICAgICAgICAgICAgc2Vjb25kOiBub3cuZ2V0KFwic2Vjb25kXCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY2FsYykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnREYXRlLmFkZChwYXJzZUludCh0aW1lRGVsdGEsIDEwKSwgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW9tZW50Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChtb21lbnRGb3JtYXQuc3Vic3RyaW5nKDEpLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqeWVzdGVyZGF5XFxzKn19L2dpLCBkYXRlLmNsb25lKCkuc3VidHJhY3QoMSwgXCJkYXlcIikuZm9ybWF0KGZvcm1hdCkpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdG9tb3Jyb3dcXHMqfX0vZ2ksIGRhdGUuY2xvbmUoKS5hZGQoMSwgXCJkXCIpLmZvcm1hdChmb3JtYXQpKSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGFwcC5mb2xkTWFuYWdlci5zYXZlKGNyZWF0ZWRGaWxlLCBJRm9sZEluZm8pO1xuICAgICAgICByZXR1cm4gY3JlYXRlZEZpbGU7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBmaWxlOiAnJHtub3JtYWxpemVkUGF0aH0nYCwgZXJyKTtcbiAgICAgICAgbmV3IG9ic2lkaWFuLk5vdGljZShcIlVuYWJsZSB0byBjcmVhdGUgbmV3IGZpbGUuXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldERhaWx5Tm90ZShkYXRlLCBkYWlseU5vdGVzKSB7XG4gICAgcmV0dXJuIGRhaWx5Tm90ZXNbZ2V0RGF0ZVVJRChkYXRlLCBcImRheVwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbERhaWx5Tm90ZXMoKSB7XG4gICAgLyoqXG4gICAgICogRmluZCBhbGwgZGFpbHkgbm90ZXMgaW4gdGhlIGRhaWx5IG5vdGUgZm9sZGVyXG4gICAgICovXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gZ2V0RGFpbHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBkYWlseU5vdGVzRm9sZGVyID0gdmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG9ic2lkaWFuLm5vcm1hbGl6ZVBhdGgoZm9sZGVyKSk7XG4gICAgaWYgKCFkYWlseU5vdGVzRm9sZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBEYWlseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yKFwiRmFpbGVkIHRvIGZpbmQgZGFpbHkgbm90ZXMgZm9sZGVyXCIpO1xuICAgIH1cbiAgICBjb25zdCBkYWlseU5vdGVzID0ge307XG4gICAgb2JzaWRpYW4uVmF1bHQucmVjdXJzZUNoaWxkcmVuKGRhaWx5Tm90ZXNGb2xkZXIsIChub3RlKSA9PiB7XG4gICAgICAgIGlmIChub3RlIGluc3RhbmNlb2Ygb2JzaWRpYW4uVEZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBnZXREYXRlRnJvbUZpbGUobm90ZSwgXCJkYXlcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwiZGF5XCIpO1xuICAgICAgICAgICAgICAgIGRhaWx5Tm90ZXNbZGF0ZVN0cmluZ10gPSBub3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhaWx5Tm90ZXM7XG59XG5cbmNsYXNzIFdlZWtseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuZnVuY3Rpb24gZ2V0RGF5c09mV2VlaygpIHtcbiAgICBjb25zdCB7IG1vbWVudCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgbGV0IHdlZWtTdGFydCA9IG1vbWVudC5sb2NhbGVEYXRhKCkuX3dlZWsuZG93O1xuICAgIGNvbnN0IGRheXNPZldlZWsgPSBbXG4gICAgICAgIFwic3VuZGF5XCIsXG4gICAgICAgIFwibW9uZGF5XCIsXG4gICAgICAgIFwidHVlc2RheVwiLFxuICAgICAgICBcIndlZG5lc2RheVwiLFxuICAgICAgICBcInRodXJzZGF5XCIsXG4gICAgICAgIFwiZnJpZGF5XCIsXG4gICAgICAgIFwic2F0dXJkYXlcIixcbiAgICBdO1xuICAgIHdoaWxlICh3ZWVrU3RhcnQpIHtcbiAgICAgICAgZGF5c09mV2Vlay5wdXNoKGRheXNPZldlZWsuc2hpZnQoKSk7XG4gICAgICAgIHdlZWtTdGFydC0tO1xuICAgIH1cbiAgICByZXR1cm4gZGF5c09mV2Vlaztcbn1cbmZ1bmN0aW9uIGdldERheU9mV2Vla051bWVyaWNhbFZhbHVlKGRheU9mV2Vla05hbWUpIHtcbiAgICByZXR1cm4gZ2V0RGF5c09mV2VlaygpLmluZGV4T2YoZGF5T2ZXZWVrTmFtZS50b0xvd2VyQ2FzZSgpKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVdlZWtseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldFdlZWtseU5vdGVTZXR0aW5ncygpO1xuICAgIGNvbnN0IFt0ZW1wbGF0ZUNvbnRlbnRzLCBJRm9sZEluZm9dID0gYXdhaXQgZ2V0VGVtcGxhdGVJbmZvKHRlbXBsYXRlKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGRhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBhd2FpdCBnZXROb3RlUGF0aChmb2xkZXIsIGZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBjcmVhdGVkRmlsZSA9IGF3YWl0IHZhdWx0LmNyZWF0ZShub3JtYWxpemVkUGF0aCwgdGVtcGxhdGVDb250ZW50c1xuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihkYXRlfHRpbWUpXFxzKigoWystXVxcZCspKFt5cW13ZGhzXSkpP1xccyooOi4rPyk/fX0vZ2ksIChfLCBfdGltZU9yRGF0ZSwgY2FsYywgdGltZURlbHRhLCB1bml0LCBtb21lbnRGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IHdpbmRvdy5tb21lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gZGF0ZS5jbG9uZSgpLnNldCh7XG4gICAgICAgICAgICAgICAgaG91cjogbm93LmdldChcImhvdXJcIiksXG4gICAgICAgICAgICAgICAgbWludXRlOiBub3cuZ2V0KFwibWludXRlXCIpLFxuICAgICAgICAgICAgICAgIHNlY29uZDogbm93LmdldChcInNlY29uZFwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNhbGMpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5hZGQocGFyc2VJbnQodGltZURlbHRhLCAxMCksIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1vbWVudEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQobW9tZW50Rm9ybWF0LnN1YnN0cmluZygxKS50cmltKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpdGxlXFxzKn19L2dpLCBmaWxlbmFtZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aW1lXFxzKn19L2dpLCB3aW5kb3cubW9tZW50KCkuZm9ybWF0KFwiSEg6bW1cIikpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KVxccyo6KC4qPyl9fS9naSwgKF8sIGRheU9mV2VlaywgbW9tZW50Rm9ybWF0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXkgPSBnZXREYXlPZldlZWtOdW1lcmljYWxWYWx1ZShkYXlPZldlZWspO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGUud2Vla2RheShkYXkpLmZvcm1hdChtb21lbnRGb3JtYXQudHJpbSgpKTtcbiAgICAgICAgfSkpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICB3aW5kb3cuYXBwLmZvbGRNYW5hZ2VyLnNhdmUoY3JlYXRlZEZpbGUsIElGb2xkSW5mbyk7XG4gICAgICAgIHJldHVybiBjcmVhdGVkRmlsZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGZpbGU6ICcke25vcm1hbGl6ZWRQYXRofSdgLCBlcnIpO1xuICAgICAgICBuZXcgb2JzaWRpYW4uTm90aWNlKFwiVW5hYmxlIHRvIGNyZWF0ZSBuZXcgZmlsZS5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0V2Vla2x5Tm90ZShkYXRlLCB3ZWVrbHlOb3Rlcykge1xuICAgIHJldHVybiB3ZWVrbHlOb3Rlc1tnZXREYXRlVUlEKGRhdGUsIFwid2Vla1wiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbFdlZWtseU5vdGVzKCkge1xuICAgIGNvbnN0IHdlZWtseU5vdGVzID0ge307XG4gICAgaWYgKCFhcHBIYXNXZWVrbHlOb3Rlc1BsdWdpbkxvYWRlZCgpKSB7XG4gICAgICAgIHJldHVybiB3ZWVrbHlOb3RlcztcbiAgICB9XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gZ2V0V2Vla2x5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3Qgd2Vla2x5Tm90ZXNGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIXdlZWtseU5vdGVzRm9sZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBXZWVrbHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvcihcIkZhaWxlZCB0byBmaW5kIHdlZWtseSBub3RlcyBmb2xkZXJcIik7XG4gICAgfVxuICAgIG9ic2lkaWFuLlZhdWx0LnJlY3Vyc2VDaGlsZHJlbih3ZWVrbHlOb3Rlc0ZvbGRlciwgKG5vdGUpID0+IHtcbiAgICAgICAgaWYgKG5vdGUgaW5zdGFuY2VvZiBvYnNpZGlhbi5URmlsZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IGdldERhdGVGcm9tRmlsZShub3RlLCBcIndlZWtcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwid2Vla1wiKTtcbiAgICAgICAgICAgICAgICB3ZWVrbHlOb3Rlc1tkYXRlU3RyaW5nXSA9IG5vdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gd2Vla2x5Tm90ZXM7XG59XG5cbmNsYXNzIE1vbnRobHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBkYWlseS1ub3RlcyBwbHVnaW5cbiAqIHNvIGl0IHdpbGwgcmVwbGFjZSB7e2RhdGV9fSwge3t0aXRsZX19LCBhbmQge3t0aW1lfX0gd2l0aCB0aGVcbiAqIGZvcm1hdHRlZCB0aW1lc3RhbXAuXG4gKlxuICogTm90ZTogaXQgaGFzIGFuIGFkZGVkIGJvbnVzIHRoYXQgaXQncyBub3QgJ3RvZGF5JyBzcGVjaWZpYy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlTW9udGhseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldE1vbnRobHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBbdGVtcGxhdGVDb250ZW50cywgSUZvbGRJbmZvXSA9IGF3YWl0IGdldFRlbXBsYXRlSW5mbyh0ZW1wbGF0ZSk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBkYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gYXdhaXQgZ2V0Tm90ZVBhdGgoZm9sZGVyLCBmaWxlbmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY3JlYXRlZEZpbGUgPSBhd2FpdCB2YXVsdC5jcmVhdGUobm9ybWFsaXplZFBhdGgsIHRlbXBsYXRlQ29udGVudHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyooZGF0ZXx0aW1lKVxccyooKFsrLV1cXGQrKShbeXFtd2Roc10pKT9cXHMqKDouKz8pP319L2dpLCAoXywgX3RpbWVPckRhdGUsIGNhbGMsIHRpbWVEZWx0YSwgdW5pdCwgbW9tZW50Rm9ybWF0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSB3aW5kb3cubW9tZW50KCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IGRhdGUuY2xvbmUoKS5zZXQoe1xuICAgICAgICAgICAgICAgIGhvdXI6IG5vdy5nZXQoXCJob3VyXCIpLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogbm93LmdldChcIm1pbnV0ZVwiKSxcbiAgICAgICAgICAgICAgICBzZWNvbmQ6IG5vdy5nZXQoXCJzZWNvbmRcIiksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjYWxjKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudERhdGUuYWRkKHBhcnNlSW50KHRpbWVEZWx0YSwgMTApLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtb21lbnRGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KG1vbWVudEZvcm1hdC5zdWJzdHJpbmcoMSkudHJpbSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccypkYXRlXFxzKn19L2dpLCBmaWxlbmFtZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aW1lXFxzKn19L2dpLCB3aW5kb3cubW9tZW50KCkuZm9ybWF0KFwiSEg6bW1cIikpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGl0bGVcXHMqfX0vZ2ksIGZpbGVuYW1lKSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHdpbmRvdy5hcHAuZm9sZE1hbmFnZXIuc2F2ZShjcmVhdGVkRmlsZSwgSUZvbGRJbmZvKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWRGaWxlO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgZmlsZTogJyR7bm9ybWFsaXplZFBhdGh9J2AsIGVycik7XG4gICAgICAgIG5ldyBvYnNpZGlhbi5Ob3RpY2UoXCJVbmFibGUgdG8gY3JlYXRlIG5ldyBmaWxlLlwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRNb250aGx5Tm90ZShkYXRlLCBtb250aGx5Tm90ZXMpIHtcbiAgICByZXR1cm4gbW9udGhseU5vdGVzW2dldERhdGVVSUQoZGF0ZSwgXCJtb250aFwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbE1vbnRobHlOb3RlcygpIHtcbiAgICBjb25zdCBtb250aGx5Tm90ZXMgPSB7fTtcbiAgICBpZiAoIWFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZCgpKSB7XG4gICAgICAgIHJldHVybiBtb250aGx5Tm90ZXM7XG4gICAgfVxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyBmb2xkZXIgfSA9IGdldE1vbnRobHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBtb250aGx5Tm90ZXNGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIW1vbnRobHlOb3Rlc0ZvbGRlcikge1xuICAgICAgICB0aHJvdyBuZXcgTW9udGhseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yKFwiRmFpbGVkIHRvIGZpbmQgbW9udGhseSBub3RlcyBmb2xkZXJcIik7XG4gICAgfVxuICAgIG9ic2lkaWFuLlZhdWx0LnJlY3Vyc2VDaGlsZHJlbihtb250aGx5Tm90ZXNGb2xkZXIsIChub3RlKSA9PiB7XG4gICAgICAgIGlmIChub3RlIGluc3RhbmNlb2Ygb2JzaWRpYW4uVEZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBnZXREYXRlRnJvbUZpbGUobm90ZSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGdldERhdGVVSUQoZGF0ZSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgICAgICBtb250aGx5Tm90ZXNbZGF0ZVN0cmluZ10gPSBub3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG1vbnRobHlOb3Rlcztcbn1cblxuY2xhc3MgUXVhcnRlcmx5Tm90ZXNGb2xkZXJNaXNzaW5nRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gbWltaWNzIHRoZSBiZWhhdmlvciBvZiB0aGUgZGFpbHktbm90ZXMgcGx1Z2luXG4gKiBzbyBpdCB3aWxsIHJlcGxhY2Uge3tkYXRlfX0sIHt7dGl0bGV9fSwgYW5kIHt7dGltZX19IHdpdGggdGhlXG4gKiBmb3JtYXR0ZWQgdGltZXN0YW1wLlxuICpcbiAqIE5vdGU6IGl0IGhhcyBhbiBhZGRlZCBib251cyB0aGF0IGl0J3Mgbm90ICd0b2RheScgc3BlY2lmaWMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVF1YXJ0ZXJseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncygpO1xuICAgIGNvbnN0IFt0ZW1wbGF0ZUNvbnRlbnRzLCBJRm9sZEluZm9dID0gYXdhaXQgZ2V0VGVtcGxhdGVJbmZvKHRlbXBsYXRlKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGRhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBhd2FpdCBnZXROb3RlUGF0aChmb2xkZXIsIGZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBjcmVhdGVkRmlsZSA9IGF3YWl0IHZhdWx0LmNyZWF0ZShub3JtYWxpemVkUGF0aCwgdGVtcGxhdGVDb250ZW50c1xuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihkYXRlfHRpbWUpXFxzKigoWystXVxcZCspKFt5cW13ZGhzXSkpP1xccyooOi4rPyk/fX0vZ2ksIChfLCBfdGltZU9yRGF0ZSwgY2FsYywgdGltZURlbHRhLCB1bml0LCBtb21lbnRGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IHdpbmRvdy5tb21lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gZGF0ZS5jbG9uZSgpLnNldCh7XG4gICAgICAgICAgICAgICAgaG91cjogbm93LmdldChcImhvdXJcIiksXG4gICAgICAgICAgICAgICAgbWludXRlOiBub3cuZ2V0KFwibWludXRlXCIpLFxuICAgICAgICAgICAgICAgIHNlY29uZDogbm93LmdldChcInNlY29uZFwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNhbGMpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5hZGQocGFyc2VJbnQodGltZURlbHRhLCAxMCksIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1vbWVudEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQobW9tZW50Rm9ybWF0LnN1YnN0cmluZygxKS50cmltKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKmRhdGVcXHMqfX0vZ2ksIGZpbGVuYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpbWVcXHMqfX0vZ2ksIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoXCJISDptbVwiKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aXRsZVxccyp9fS9naSwgZmlsZW5hbWUpKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgd2luZG93LmFwcC5mb2xkTWFuYWdlci5zYXZlKGNyZWF0ZWRGaWxlLCBJRm9sZEluZm8pO1xuICAgICAgICByZXR1cm4gY3JlYXRlZEZpbGU7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBmaWxlOiAnJHtub3JtYWxpemVkUGF0aH0nYCwgZXJyKTtcbiAgICAgICAgbmV3IG9ic2lkaWFuLk5vdGljZShcIlVuYWJsZSB0byBjcmVhdGUgbmV3IGZpbGUuXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFF1YXJ0ZXJseU5vdGUoZGF0ZSwgcXVhcnRlcmx5KSB7XG4gICAgcmV0dXJuIHF1YXJ0ZXJseVtnZXREYXRlVUlEKGRhdGUsIFwicXVhcnRlclwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbFF1YXJ0ZXJseU5vdGVzKCkge1xuICAgIGNvbnN0IHF1YXJ0ZXJseSA9IHt9O1xuICAgIGlmICghYXBwSGFzUXVhcnRlcmx5Tm90ZXNQbHVnaW5Mb2FkZWQoKSkge1xuICAgICAgICByZXR1cm4gcXVhcnRlcmx5O1xuICAgIH1cbiAgICBjb25zdCB7IHZhdWx0IH0gPSB3aW5kb3cuYXBwO1xuICAgIGNvbnN0IHsgZm9sZGVyIH0gPSBnZXRRdWFydGVybHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBxdWFydGVybHlGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIXF1YXJ0ZXJseUZvbGRlcikge1xuICAgICAgICB0aHJvdyBuZXcgUXVhcnRlcmx5Tm90ZXNGb2xkZXJNaXNzaW5nRXJyb3IoXCJGYWlsZWQgdG8gZmluZCBxdWFydGVybHkgbm90ZXMgZm9sZGVyXCIpO1xuICAgIH1cbiAgICBvYnNpZGlhbi5WYXVsdC5yZWN1cnNlQ2hpbGRyZW4ocXVhcnRlcmx5Rm9sZGVyLCAobm90ZSkgPT4ge1xuICAgICAgICBpZiAobm90ZSBpbnN0YW5jZW9mIG9ic2lkaWFuLlRGaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gZ2V0RGF0ZUZyb21GaWxlKG5vdGUsIFwicXVhcnRlclwiKTtcbiAgICAgICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGdldERhdGVVSUQoZGF0ZSwgXCJxdWFydGVyXCIpO1xuICAgICAgICAgICAgICAgIHF1YXJ0ZXJseVtkYXRlU3RyaW5nXSA9IG5vdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcXVhcnRlcmx5O1xufVxuXG5jbGFzcyBZZWFybHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBkYWlseS1ub3RlcyBwbHVnaW5cbiAqIHNvIGl0IHdpbGwgcmVwbGFjZSB7e2RhdGV9fSwge3t0aXRsZX19LCBhbmQge3t0aW1lfX0gd2l0aCB0aGVcbiAqIGZvcm1hdHRlZCB0aW1lc3RhbXAuXG4gKlxuICogTm90ZTogaXQgaGFzIGFuIGFkZGVkIGJvbnVzIHRoYXQgaXQncyBub3QgJ3RvZGF5JyBzcGVjaWZpYy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlWWVhcmx5Tm90ZShkYXRlKSB7XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IHRlbXBsYXRlLCBmb3JtYXQsIGZvbGRlciB9ID0gZ2V0WWVhcmx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgW3RlbXBsYXRlQ29udGVudHMsIElGb2xkSW5mb10gPSBhd2FpdCBnZXRUZW1wbGF0ZUluZm8odGVtcGxhdGUpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gZGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGF3YWl0IGdldE5vdGVQYXRoKGZvbGRlciwgZmlsZW5hbWUpO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRGaWxlID0gYXdhaXQgdmF1bHQuY3JlYXRlKG5vcm1hbGl6ZWRQYXRoLCB0ZW1wbGF0ZUNvbnRlbnRzXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqKGRhdGV8dGltZSlcXHMqKChbKy1dXFxkKykoW3lxbXdkaHNdKSk/XFxzKig6Lis/KT99fS9naSwgKF8sIF90aW1lT3JEYXRlLCBjYWxjLCB0aW1lRGVsdGEsIHVuaXQsIG1vbWVudEZvcm1hdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gd2luZG93Lm1vbWVudCgpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBkYXRlLmNsb25lKCkuc2V0KHtcbiAgICAgICAgICAgICAgICBob3VyOiBub3cuZ2V0KFwiaG91clwiKSxcbiAgICAgICAgICAgICAgICBtaW51dGU6IG5vdy5nZXQoXCJtaW51dGVcIiksXG4gICAgICAgICAgICAgICAgc2Vjb25kOiBub3cuZ2V0KFwic2Vjb25kXCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY2FsYykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnREYXRlLmFkZChwYXJzZUludCh0aW1lRGVsdGEsIDEwKSwgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW9tZW50Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChtb21lbnRGb3JtYXQuc3Vic3RyaW5nKDEpLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqZGF0ZVxccyp9fS9naSwgZmlsZW5hbWUpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGltZVxccyp9fS9naSwgd2luZG93Lm1vbWVudCgpLmZvcm1hdChcIkhIOm1tXCIpKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpdGxlXFxzKn19L2dpLCBmaWxlbmFtZSkpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICB3aW5kb3cuYXBwLmZvbGRNYW5hZ2VyLnNhdmUoY3JlYXRlZEZpbGUsIElGb2xkSW5mbyk7XG4gICAgICAgIHJldHVybiBjcmVhdGVkRmlsZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGZpbGU6ICcke25vcm1hbGl6ZWRQYXRofSdgLCBlcnIpO1xuICAgICAgICBuZXcgb2JzaWRpYW4uTm90aWNlKFwiVW5hYmxlIHRvIGNyZWF0ZSBuZXcgZmlsZS5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0WWVhcmx5Tm90ZShkYXRlLCB5ZWFybHlOb3Rlcykge1xuICAgIHJldHVybiB5ZWFybHlOb3Rlc1tnZXREYXRlVUlEKGRhdGUsIFwieWVhclwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbFllYXJseU5vdGVzKCkge1xuICAgIGNvbnN0IHllYXJseU5vdGVzID0ge307XG4gICAgaWYgKCFhcHBIYXNZZWFybHlOb3Rlc1BsdWdpbkxvYWRlZCgpKSB7XG4gICAgICAgIHJldHVybiB5ZWFybHlOb3RlcztcbiAgICB9XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gZ2V0WWVhcmx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgeWVhcmx5Tm90ZXNGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIXllYXJseU5vdGVzRm9sZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBZZWFybHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvcihcIkZhaWxlZCB0byBmaW5kIHllYXJseSBub3RlcyBmb2xkZXJcIik7XG4gICAgfVxuICAgIG9ic2lkaWFuLlZhdWx0LnJlY3Vyc2VDaGlsZHJlbih5ZWFybHlOb3Rlc0ZvbGRlciwgKG5vdGUpID0+IHtcbiAgICAgICAgaWYgKG5vdGUgaW5zdGFuY2VvZiBvYnNpZGlhbi5URmlsZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IGdldERhdGVGcm9tRmlsZShub3RlLCBcInllYXJcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwieWVhclwiKTtcbiAgICAgICAgICAgICAgICB5ZWFybHlOb3Rlc1tkYXRlU3RyaW5nXSA9IG5vdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4geWVhcmx5Tm90ZXM7XG59XG5cbmZ1bmN0aW9uIGFwcEhhc0RhaWx5Tm90ZXNQbHVnaW5Mb2FkZWQoKSB7XG4gICAgY29uc3QgeyBhcHAgfSA9IHdpbmRvdztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IGRhaWx5Tm90ZXNQbHVnaW4gPSBhcHAuaW50ZXJuYWxQbHVnaW5zLnBsdWdpbnNbXCJkYWlseS1ub3Rlc1wiXTtcbiAgICBpZiAoZGFpbHlOb3Rlc1BsdWdpbiAmJiBkYWlseU5vdGVzUGx1Z2luLmVuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/LmRhaWx5Py5lbmFibGVkO1xufVxuLyoqXG4gKiBYWFg6IFwiV2Vla2x5IE5vdGVzXCIgbGl2ZSBpbiBlaXRoZXIgdGhlIENhbGVuZGFyIHBsdWdpbiBvciB0aGUgcGVyaW9kaWMtbm90ZXMgcGx1Z2luLlxuICogQ2hlY2sgYm90aCB1bnRpbCB0aGUgd2Vla2x5IG5vdGVzIGZlYXR1cmUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBDYWxlbmRhciBwbHVnaW4uXG4gKi9cbmZ1bmN0aW9uIGFwcEhhc1dlZWtseU5vdGVzUGx1Z2luTG9hZGVkKCkge1xuICAgIGNvbnN0IHsgYXBwIH0gPSB3aW5kb3c7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAoYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKFwiY2FsZW5kYXJcIikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/LndlZWtseT8uZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZCgpIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/Lm1vbnRobHk/LmVuYWJsZWQ7XG59XG5mdW5jdGlvbiBhcHBIYXNRdWFydGVybHlOb3Rlc1BsdWdpbkxvYWRlZCgpIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/LnF1YXJ0ZXJseT8uZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGFwcEhhc1llYXJseU5vdGVzUGx1Z2luTG9hZGVkKCkge1xuICAgIGNvbnN0IHsgYXBwIH0gPSB3aW5kb3c7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBwZXJpb2RpY05vdGVzID0gYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik7XG4gICAgcmV0dXJuIHBlcmlvZGljTm90ZXMgJiYgcGVyaW9kaWNOb3Rlcy5zZXR0aW5ncz8ueWVhcmx5Py5lbmFibGVkO1xufVxuZnVuY3Rpb24gZ2V0UGVyaW9kaWNOb3RlU2V0dGluZ3MoZ3JhbnVsYXJpdHkpIHtcbiAgICBjb25zdCBnZXRTZXR0aW5ncyA9IHtcbiAgICAgICAgZGF5OiBnZXREYWlseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgd2VlazogZ2V0V2Vla2x5Tm90ZVNldHRpbmdzLFxuICAgICAgICBtb250aDogZ2V0TW9udGhseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgcXVhcnRlcjogZ2V0UXVhcnRlcmx5Tm90ZVNldHRpbmdzLFxuICAgICAgICB5ZWFyOiBnZXRZZWFybHlOb3RlU2V0dGluZ3MsXG4gICAgfVtncmFudWxhcml0eV07XG4gICAgcmV0dXJuIGdldFNldHRpbmdzKCk7XG59XG5mdW5jdGlvbiBjcmVhdGVQZXJpb2RpY05vdGUoZ3JhbnVsYXJpdHksIGRhdGUpIHtcbiAgICBjb25zdCBjcmVhdGVGbiA9IHtcbiAgICAgICAgZGF5OiBjcmVhdGVEYWlseU5vdGUsXG4gICAgICAgIG1vbnRoOiBjcmVhdGVNb250aGx5Tm90ZSxcbiAgICAgICAgd2VlazogY3JlYXRlV2Vla2x5Tm90ZSxcbiAgICB9O1xuICAgIHJldHVybiBjcmVhdGVGbltncmFudWxhcml0eV0oZGF0ZSk7XG59XG5cbmV4cG9ydHMuREVGQVVMVF9EQUlMWV9OT1RFX0ZPUk1BVCA9IERFRkFVTFRfREFJTFlfTk9URV9GT1JNQVQ7XG5leHBvcnRzLkRFRkFVTFRfTU9OVEhMWV9OT1RFX0ZPUk1BVCA9IERFRkFVTFRfTU9OVEhMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuREVGQVVMVF9RVUFSVEVSTFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX1FVQVJURVJMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuREVGQVVMVF9XRUVLTFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX1dFRUtMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuREVGQVVMVF9ZRUFSTFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX1lFQVJMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuYXBwSGFzRGFpbHlOb3Rlc1BsdWdpbkxvYWRlZCA9IGFwcEhhc0RhaWx5Tm90ZXNQbHVnaW5Mb2FkZWQ7XG5leHBvcnRzLmFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZCA9IGFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuYXBwSGFzUXVhcnRlcmx5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNRdWFydGVybHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuYXBwSGFzV2Vla2x5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNXZWVrbHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuYXBwSGFzWWVhcmx5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNZZWFybHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuY3JlYXRlRGFpbHlOb3RlID0gY3JlYXRlRGFpbHlOb3RlO1xuZXhwb3J0cy5jcmVhdGVNb250aGx5Tm90ZSA9IGNyZWF0ZU1vbnRobHlOb3RlO1xuZXhwb3J0cy5jcmVhdGVQZXJpb2RpY05vdGUgPSBjcmVhdGVQZXJpb2RpY05vdGU7XG5leHBvcnRzLmNyZWF0ZVF1YXJ0ZXJseU5vdGUgPSBjcmVhdGVRdWFydGVybHlOb3RlO1xuZXhwb3J0cy5jcmVhdGVXZWVrbHlOb3RlID0gY3JlYXRlV2Vla2x5Tm90ZTtcbmV4cG9ydHMuY3JlYXRlWWVhcmx5Tm90ZSA9IGNyZWF0ZVllYXJseU5vdGU7XG5leHBvcnRzLmdldEFsbERhaWx5Tm90ZXMgPSBnZXRBbGxEYWlseU5vdGVzO1xuZXhwb3J0cy5nZXRBbGxNb250aGx5Tm90ZXMgPSBnZXRBbGxNb250aGx5Tm90ZXM7XG5leHBvcnRzLmdldEFsbFF1YXJ0ZXJseU5vdGVzID0gZ2V0QWxsUXVhcnRlcmx5Tm90ZXM7XG5leHBvcnRzLmdldEFsbFdlZWtseU5vdGVzID0gZ2V0QWxsV2Vla2x5Tm90ZXM7XG5leHBvcnRzLmdldEFsbFllYXJseU5vdGVzID0gZ2V0QWxsWWVhcmx5Tm90ZXM7XG5leHBvcnRzLmdldERhaWx5Tm90ZSA9IGdldERhaWx5Tm90ZTtcbmV4cG9ydHMuZ2V0RGFpbHlOb3RlU2V0dGluZ3MgPSBnZXREYWlseU5vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0RGF0ZUZyb21GaWxlID0gZ2V0RGF0ZUZyb21GaWxlO1xuZXhwb3J0cy5nZXREYXRlRnJvbVBhdGggPSBnZXREYXRlRnJvbVBhdGg7XG5leHBvcnRzLmdldERhdGVVSUQgPSBnZXREYXRlVUlEO1xuZXhwb3J0cy5nZXRNb250aGx5Tm90ZSA9IGdldE1vbnRobHlOb3RlO1xuZXhwb3J0cy5nZXRNb250aGx5Tm90ZVNldHRpbmdzID0gZ2V0TW9udGhseU5vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0UGVyaW9kaWNOb3RlU2V0dGluZ3MgPSBnZXRQZXJpb2RpY05vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0UXVhcnRlcmx5Tm90ZSA9IGdldFF1YXJ0ZXJseU5vdGU7XG5leHBvcnRzLmdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncyA9IGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0VGVtcGxhdGVJbmZvID0gZ2V0VGVtcGxhdGVJbmZvO1xuZXhwb3J0cy5nZXRXZWVrbHlOb3RlID0gZ2V0V2Vla2x5Tm90ZTtcbmV4cG9ydHMuZ2V0V2Vla2x5Tm90ZVNldHRpbmdzID0gZ2V0V2Vla2x5Tm90ZVNldHRpbmdzO1xuZXhwb3J0cy5nZXRZZWFybHlOb3RlID0gZ2V0WWVhcmx5Tm90ZTtcbmV4cG9ydHMuZ2V0WWVhcmx5Tm90ZVNldHRpbmdzID0gZ2V0WWVhcmx5Tm90ZVNldHRpbmdzO1xuIiwiLy8gT2JzaWRpYW4gYnVuZGxlcyBtb21lbnQuanMgYW5kIGV4cG9zZXMgaXQgYXMgd2luZG93Lm1vbWVudCBhdCBydW50aW1lLlxuLy8gSXRzIHR5cGUgaXMgZGVjbGFyZWQgZ2xvYmFsbHkgdmlhIFwiZGVjbGFyZSBnbG9iYWxcIiBpbiB0eXBlcy5kLnRzLCB3aGljaFxuLy8gd29ya3MgZmluZSBmb3Igd2hvbGUtcHJvamVjdCB0eXBlLWNoZWNraW5nICh0aGlzIHByb2plY3QncyBvd24gdHNjb25maWcsXG4vLyB0ZXN0cywgYnVpbGQpIGJ1dCBub3QgZm9yIHRvb2xzIHRoYXQgdHlwZS1jaGVjayBmaWxlcyBpbiBpc29sYXRpb24gLS1cbi8vIHRob3NlIG5ldmVyIHNlZSB0aGUgYW1iaWVudCBhdWdtZW50YXRpb24gZnJvbSB0aGF0IHNlcGFyYXRlIGZpbGUsIHNvXG4vLyBldmVyeSB3aW5kb3cubW9tZW50IHVzYWdlIHNpbGVudGx5IHJlc29sdmVzIHRvIGBhbnlgIHRoZXJlLCBjYXNjYWRpbmdcbi8vIGludG8gdW5zYWZlLSogbGludCB3YXJuaW5ncyBvbiBldmVyeSBsaW5lIHRoYXQgdG91Y2hlcyBpdHMgcmV0dXJuIHZhbHVlLlxuLy9cbi8vIFJlLWV4cG9ydGluZyB0aHJvdWdoIGEgcmVhbCBFUyBpbXBvcnQgc2lkZXN0ZXBzIHRoYXQ6IGEgbW9kdWxlIGltcG9ydCdzXG4vLyB0eXBlIGlzIHJlc29sdmVkIGZyb20gdGhpcyBmaWxlJ3Mgb3duIGRlY2xhcmVkIHR5cGUgcmVnYXJkbGVzcyBvZiBhbWJpZW50XG4vLyBkZWNsYXJhdGlvbiB2aXNpYmlsaXR5IGVsc2V3aGVyZS5cbi8vXG4vLyBVc2VzIGEgUHJveHkgaW5zdGVhZCBvZiBjYXB0dXJpbmcgd2luZG93Lm1vbWVudCBkaXJlY3RseSBhdCBtb2R1bGUtbG9hZFxuLy8gdGltZSwgc28gbGF0ZXIgbXV0YXRpb25zIG9mIHdpbmRvdy5tb21lbnQgYXJlIHN0aWxsIHJlZmxlY3RlZCAtLSBzb21lXG4vLyB0ZXN0cyBpbnRlbnRpb25hbGx5IG1vbmtleS1wYXRjaCB3aW5kb3cubW9tZW50IG1pZC10ZXN0ICh0byBleGVyY2lzZVxuLy8gZXJyb3ItaGFuZGxpbmcgYnJhbmNoZXMgYXJvdW5kIGEgdGhyb3dpbmcgLmZvcm1hdCgpKSwgYW5kIGEgcGxhaW5cbi8vIGNhcHR1cmVkIHJlZmVyZW5jZSB3b3VsZCBrZWVwIHBvaW50aW5nIGF0IHRoZSBwcmUtbW9jayBmdW5jdGlvbi5cbmNvbnN0IG1vbWVudDogdHlwZW9mIGltcG9ydChcIm1vbWVudFwiKSA9IG5ldyBQcm94eShcbiAgKCgpOiB1bmRlZmluZWQgPT4gdW5kZWZpbmVkKSBhcyB1bmtub3duIGFzIHR5cGVvZiBpbXBvcnQoXCJtb21lbnRcIiksXG4gIHtcbiAgICBhcHBseTogKF90YXJnZXQsIHRoaXNBcmcsIGFyZ3M6IHVua25vd25bXSkgPT5cbiAgICAgIFJlZmxlY3QuYXBwbHkod2luZG93Lm1vbWVudCBhcyB1bmtub3duIGFzICguLi5hOiB1bmtub3duW10pID0+IHVua25vd24sIHRoaXNBcmcsIGFyZ3MpLFxuICAgIGdldDogKF90YXJnZXQsIHByb3AsIHJlY2VpdmVyKTogdW5rbm93biA9PiBSZWZsZWN0LmdldCh3aW5kb3cubW9tZW50LCBwcm9wLCByZWNlaXZlciksXG4gIH1cbik7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudDtcbiIsIi8qKlxuICogTW9kdWxlIHBvdXIgbGUgZm9ybWF0YWdlIGRlIGRhdGVzXG4gKi9cbmltcG9ydCBtb21lbnQgZnJvbSBcIi4vd2luZG93LW1vbWVudFwiO1xuXG4vKipcbiAqIENsYXNzZSBwb3VyIGZvcm1hdGVyIGRlcyBkYXRlc1xuICovXG5leHBvcnQgY2xhc3MgRGF0ZUZvcm1hdHRlciB7XG4gIC8qKlxuICAgKiBGb3JtYXRlIHVuZSBkYXRlIHNlbG9uIGxlIGZvcm1hdCBzcMOpY2lmacOpXG4gICAqIEBwYXJhbSBkYXRlIExhIGRhdGUgw6AgZm9ybWF0ZXJcbiAgICogQHBhcmFtIGZvcm1hdCBMZSBmb3JtYXQgZGUgZGF0ZSAoZm9ybWF0IE1vbWVudC5qcylcbiAgICogQHJldHVybnMgTGEgZGF0ZSBmb3JtYXTDqWUgZW4gc3RyaW5nXG4gICAqL1xuICBzdGF0aWMgZm9ybWF0KGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChmb3JtYXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdGUgdW5lIGRhdGUgYXZlYyBoZXVyZVxuICAgKiBAcGFyYW0gZGF0ZSBMYSBkYXRlIMOgIGZvcm1hdGVyXG4gICAqIEBwYXJhbSBkYXRlRm9ybWF0IExlIGZvcm1hdCBkZSBkYXRlXG4gICAqIEBwYXJhbSB0aW1lRm9ybWF0IExlIGZvcm1hdCBkJ2hldXJlXG4gICAqIEBwYXJhbSBzZXBhcmF0b3IgTGUgc8OpcGFyYXRldXIgZW50cmUgZGF0ZSBldCBoZXVyZSAoZMOpZmF1dDogXCIgXCIpXG4gICAqIEByZXR1cm5zIExhIGRhdGUgZm9ybWF0w6llIGF2ZWMgbCdoZXVyZVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdFdpdGhUaW1lKFxuICAgIGRhdGU6IERhdGUsXG4gICAgZGF0ZUZvcm1hdDogc3RyaW5nLFxuICAgIHRpbWVGb3JtYXQ6IHN0cmluZyxcbiAgICBzZXBhcmF0b3IgPSBcIiBcIlxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGVTdHIgPSB0aGlzLmZvcm1hdChkYXRlLCBkYXRlRm9ybWF0KTtcbiAgICBjb25zdCB0aW1lU3RyID0gdGhpcy5mb3JtYXQoZGF0ZSwgdGltZUZvcm1hdCk7XG4gICAgcmV0dXJuIGAke2RhdGVTdHJ9JHtzZXBhcmF0b3J9JHt0aW1lU3RyfWA7XG4gIH1cbn1cblxuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjYuMlxuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG4gIHZhciBfX2JpbmQgPSBmdW5jdGlvbihmbiwgbWUpeyByZXR1cm4gZnVuY3Rpb24oKXsgcmV0dXJuIGZuLmFwcGx5KG1lLCBhcmd1bWVudHMpOyB9OyB9O1xuXG4gIChmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgcmV0dXJuIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByb290LmkxOG4gPSBmYWN0b3J5KCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByb290LmkxOG4gPSBmYWN0b3J5KCk7XG4gICAgfVxuICB9KSgodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZiAhPT0gbnVsbCA/IHNlbGYgOiB0aGlzKSwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIFRyYW5zbGF0b3IsIGkxOG4sIHRyYW5zbGF0b3I7XG5cbiAgICBUcmFuc2xhdG9yID0gKGZ1bmN0aW9uKCkge1xuICAgICAgZnVuY3Rpb24gVHJhbnNsYXRvcigpIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGUgPSBfX2JpbmQodGhpcy50cmFuc2xhdGUsIHRoaXMpOyAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgIHZhbHVlczoge30sXG4gICAgICAgICAgY29udGV4dHM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29udGV4dCA9IHt9O1xuICAgICAgfVxuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbih0ZXh0LCBkZWZhdWx0TnVtT3JGb3JtYXR0aW5nLCBudW1PckZvcm1hdHRpbmdPckNvbnRleHQsIGZvcm1hdHRpbmdPckNvbnRleHQsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIGRlZmF1bHRUZXh0LCBmb3JtYXR0aW5nLCBpc09iamVjdCwgbnVtO1xuXG4gICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHtcbiAgICAgICAgICBjb250ZXh0ID0gdGhpcy5nbG9iYWxDb250ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgdmFyIHR5cGU7XG5cbiAgICAgICAgICB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJmdW5jdGlvblwiIHx8IHR5cGUgPT09IFwib2JqZWN0XCIgJiYgISFvYmo7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc09iamVjdChkZWZhdWx0TnVtT3JGb3JtYXR0aW5nKSkge1xuICAgICAgICAgIGRlZmF1bHRUZXh0ID0gbnVsbDtcbiAgICAgICAgICBudW0gPSBudWxsO1xuICAgICAgICAgIGZvcm1hdHRpbmcgPSBkZWZhdWx0TnVtT3JGb3JtYXR0aW5nO1xuICAgICAgICAgIGNvbnRleHQgPSBudW1PckZvcm1hdHRpbmdPckNvbnRleHQgfHwgdGhpcy5nbG9iYWxDb250ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdE51bU9yRm9ybWF0dGluZyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgZGVmYXVsdFRleHQgPSBudWxsO1xuICAgICAgICAgICAgbnVtID0gZGVmYXVsdE51bU9yRm9ybWF0dGluZztcbiAgICAgICAgICAgIGZvcm1hdHRpbmcgPSBudW1PckZvcm1hdHRpbmdPckNvbnRleHQ7XG4gICAgICAgICAgICBjb250ZXh0ID0gZm9ybWF0dGluZ09yQ29udGV4dCB8fCB0aGlzLmdsb2JhbENvbnRleHQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmF1bHRUZXh0ID0gZGVmYXVsdE51bU9yRm9ybWF0dGluZztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbnVtT3JGb3JtYXR0aW5nT3JDb250ZXh0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgIG51bSA9IG51bU9yRm9ybWF0dGluZ09yQ29udGV4dDtcbiAgICAgICAgICAgICAgZm9ybWF0dGluZyA9IGZvcm1hdHRpbmdPckNvbnRleHQ7XG4gICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbnVtID0gbnVsbDtcbiAgICAgICAgICAgICAgZm9ybWF0dGluZyA9IG51bU9yRm9ybWF0dGluZ09yQ29udGV4dDtcbiAgICAgICAgICAgICAgY29udGV4dCA9IGZvcm1hdHRpbmdPckNvbnRleHQgfHwgdGhpcy5nbG9iYWxDb250ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPYmplY3QodGV4dCkpIHtcbiAgICAgICAgICBpZiAoaXNPYmplY3QodGV4dFsnaTE4biddKSkge1xuICAgICAgICAgICAgdGV4dCA9IHRleHRbJ2kxOG4nXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlSGFzaCh0ZXh0LCBjb250ZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0KHRleHQsIG51bSwgZm9ybWF0dGluZywgY29udGV4dCwgZGVmYXVsdFRleHQpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihkKSB7XG4gICAgICAgIHZhciBjLCBrLCB2LCBfaSwgX2xlbiwgX3JlZiwgX3JlZjEsIF9yZXN1bHRzO1xuXG4gICAgICAgIGlmICgoZC52YWx1ZXMgIT0gbnVsbCkpIHtcbiAgICAgICAgICBfcmVmID0gZC52YWx1ZXM7XG4gICAgICAgICAgZm9yIChrIGluIF9yZWYpIHtcbiAgICAgICAgICAgIHYgPSBfcmVmW2tdO1xuICAgICAgICAgICAgdGhpcy5kYXRhLnZhbHVlc1trXSA9IHY7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgoZC5jb250ZXh0cyAhPSBudWxsKSkge1xuICAgICAgICAgIF9yZWYxID0gZC5jb250ZXh0cztcbiAgICAgICAgICBfcmVzdWx0cyA9IFtdO1xuICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZjEubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICAgIGMgPSBfcmVmMVtfaV07XG4gICAgICAgICAgICBfcmVzdWx0cy5wdXNoKHRoaXMuZGF0YS5jb250ZXh0cy5wdXNoKGMpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF9yZXN1bHRzO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5zZXRDb250ZXh0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nbG9iYWxDb250ZXh0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uKGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leHRlbnNpb24gPSBleHQ7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5jbGVhckNvbnRleHQgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsQ29udGV4dFtrZXldID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc2V0Q29udGV4dCgpO1xuICAgICAgfTtcblxuICAgICAgVHJhbnNsYXRvci5wcm90b3R5cGUucmVzZXREYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgPSB7XG4gICAgICAgICAgdmFsdWVzOiB7fSxcbiAgICAgICAgICBjb250ZXh0czogW11cbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLnJlc2V0Q29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nbG9iYWxDb250ZXh0ID0ge307XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS50cmFuc2xhdGVIYXNoID0gZnVuY3Rpb24oaGFzaCwgY29udGV4dCkge1xuICAgICAgICB2YXIgaywgdjtcblxuICAgICAgICBmb3IgKGsgaW4gaGFzaCkge1xuICAgICAgICAgIHYgPSBoYXNoW2tdO1xuICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaGFzaFtrXSA9IHRoaXMudHJhbnNsYXRlVGV4dCh2LCBudWxsLCBudWxsLCBjb250ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc2g7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS50cmFuc2xhdGVUZXh0ID0gZnVuY3Rpb24odGV4dCwgbnVtLCBmb3JtYXR0aW5nLCBjb250ZXh0LCBkZWZhdWx0VGV4dCkge1xuICAgICAgICB2YXIgY29udGV4dERhdGEsIHJlc3VsdDtcblxuICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgY29udGV4dCA9IHRoaXMuZ2xvYmFsQ29udGV4dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy51c2VPcmlnaW5hbFRleHQoZGVmYXVsdFRleHQgfHwgdGV4dCwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0RGF0YSA9IHRoaXMuZ2V0Q29udGV4dERhdGEodGhpcy5kYXRhLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGNvbnRleHREYXRhICE9IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLmZpbmRUcmFuc2xhdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIGNvbnRleHREYXRhLnZhbHVlcywgZGVmYXVsdFRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZmluZFRyYW5zbGF0aW9uKHRleHQsIG51bSwgZm9ybWF0dGluZywgdGhpcy5kYXRhLnZhbHVlcywgZGVmYXVsdFRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnVzZU9yaWdpbmFsVGV4dChkZWZhdWx0VGV4dCB8fCB0ZXh0LCBudW0sIGZvcm1hdHRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5maW5kVHJhbnNsYXRpb24gPSBmdW5jdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIGRhdGEsIGRlZmF1bHRUZXh0KSB7XG4gICAgICAgIHZhciBhLCBiLCBjLCBkLCBlLCByZXN1bHQsIHRyaXBsZSwgdmFsdWUsIF9pLCBfbGVuO1xuXG4gICAgICAgIHZhbHVlID0gZGF0YVt0ZXh0XTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGlmICh0aGlzLmV4dGVuc2lvbiAmJiB0eXBlb2YgdGhpcy5leHRlbnNpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmV4dGVuc2lvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIHZhbHVlKTtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5hcHBseU51bWJlcnModmFsdWUsIG51bSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUZvcm1hdHRpbmcodmFsdWUsIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZU9yaWdpbmFsVGV4dChkZWZhdWx0VGV4dCB8fCB0ZXh0LCBudW0sIGZvcm1hdHRpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoKG51bSA9PSBudWxsKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUZvcm1hdHRpbmcodmFsdWUsIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5IHx8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgYSA9IG51bSA9PT0gbnVsbDtcbiAgICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gdmFsdWUubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICAgICAgdHJpcGxlID0gdmFsdWVbX2ldO1xuICAgICAgICAgICAgICBiID0gdHJpcGxlWzBdID09PSBudWxsO1xuICAgICAgICAgICAgICBjID0gdHJpcGxlWzFdID09PSBudWxsO1xuICAgICAgICAgICAgICBkID0gbnVtID49IHRyaXBsZVswXTtcbiAgICAgICAgICAgICAgZSA9IG51bSA8PSB0cmlwbGVbMV07XG4gICAgICAgICAgICAgIGlmIChhICYmIGIgJiYgYyB8fCAhYSAmJiAoIWIgJiYgZCAmJiAoYyB8fCBlKSB8fCBiICYmICFjICYmIGUpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5hcHBseUZvcm1hdHRpbmcodHJpcGxlWzJdLnJlcGxhY2UoXCItJW5cIiwgU3RyaW5nKC1udW0pKSwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUZvcm1hdHRpbmcocmVzdWx0LnJlcGxhY2UoXCIlblwiLCBTdHJpbmcobnVtKSksIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5hcHBseU51bWJlcnMgPSBmdW5jdGlvbihzdHIsIG51bSkge1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShcIi0lblwiLCBTdHJpbmcoLW51bSkpO1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShcIiVuXCIsIFN0cmluZyhudW0pKTtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLmdldENvbnRleHREYXRhID0gZnVuY3Rpb24oZGF0YSwgY29udGV4dCkge1xuICAgICAgICB2YXIgYywgZXF1YWwsIGtleSwgdmFsdWUsIF9pLCBfbGVuLCBfcmVmLCBfcmVmMTtcblxuICAgICAgICBpZiAoZGF0YS5jb250ZXh0cyA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgX3JlZiA9IGRhdGEuY29udGV4dHM7XG4gICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgIGMgPSBfcmVmW19pXTtcbiAgICAgICAgICBlcXVhbCA9IHRydWU7XG4gICAgICAgICAgX3JlZjEgPSBjLm1hdGNoZXM7XG4gICAgICAgICAgZm9yIChrZXkgaW4gX3JlZjEpIHtcbiAgICAgICAgICAgIHZhbHVlID0gX3JlZjFba2V5XTtcbiAgICAgICAgICAgIGVxdWFsID0gZXF1YWwgJiYgdmFsdWUgPT09IGNvbnRleHRba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVxdWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS51c2VPcmlnaW5hbFRleHQgPSBmdW5jdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcpIHtcbiAgICAgICAgaWYgKG51bSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGb3JtYXR0aW5nKHRleHQsIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGb3JtYXR0aW5nKHRleHQucmVwbGFjZShcIiVuXCIsIFN0cmluZyhudW0pKSwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLmFwcGx5Rm9ybWF0dGluZyA9IGZ1bmN0aW9uKHRleHQsIG51bSwgZm9ybWF0dGluZykge1xuICAgICAgICB2YXIgaW5kLCByZWdleDtcblxuICAgICAgICBmb3IgKGluZCBpbiBmb3JtYXR0aW5nKSB7XG4gICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKFwiJXtcIiArIGluZCArIFwifVwiLCBcImdcIik7XG4gICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShyZWdleCwgZm9ybWF0dGluZ1tpbmRdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBUcmFuc2xhdG9yO1xuXG4gICAgfSkoKTtcbiAgICB0cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0b3IoKTtcbiAgICBpMThuID0gdHJhbnNsYXRvci50cmFuc2xhdGU7XG4gICAgaTE4bi50cmFuc2xhdG9yID0gdHJhbnNsYXRvcjtcbiAgICBpMThuLmNyZWF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHZhciB0cmFucztcblxuICAgICAgdHJhbnMgPSBuZXcgVHJhbnNsYXRvcigpO1xuICAgICAgaWYgKGRhdGEgIT0gbnVsbCkge1xuICAgICAgICB0cmFucy5hZGQoZGF0YSk7XG4gICAgICB9XG4gICAgICB0cmFucy50cmFuc2xhdGUuY3JlYXRlID0gaTE4bi5jcmVhdGU7XG4gICAgICB0cmFucy50cmFuc2xhdGUudHJhbnNsYXRvciA9IHRyYW5zO1xuICAgICAgcmV0dXJuIHRyYW5zLnRyYW5zbGF0ZTtcbiAgICB9O1xuICAgIHJldHVybiBpMThuO1xuICB9KTtcblxufSkuY2FsbCh0aGlzKTtcbiIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIlRvZGF5XCIsXG4gIHRvbW9ycm93OiBcIlRvbW9ycm93XCIsXG4gIHllc3RlcmRheTogXCJZZXN0ZXJkYXlcIixcbiAgbmV4dDogXCJOZXh0XCIsXG4gIGxhc3Q6IFwiTGFzdFwiLFxuICB0aGlzOiBcIlRoaXNcIixcbiAgaW46IFwiSW5cIixcbiAgc3VuZGF5OiBcIlN1bmRheVwiLFxuICBtb25kYXk6IFwiTW9uZGF5XCIsXG4gIHR1ZXNkYXk6IFwiVHVlc2RheVwiLFxuICB3ZWRuZXNkYXk6IFwiV2VkbmVzZGF5XCIsXG4gIHRodXJzZGF5OiBcIlRodXJzZGF5XCIsXG4gIGZyaWRheTogXCJGcmlkYXlcIixcbiAgc2F0dXJkYXk6IFwiU2F0dXJkYXlcIixcbiAgaW5taW51dGVzOiBcImluICV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIGluaG91cnM6IFwiaW4gJXt0aW1lRGVsdGF9IGhvdXJzXCIsXG4gIGluZGF5czogXCJpbiAle3RpbWVEZWx0YX0gZGF5c1wiLFxuICBpbndlZWtzOiBcImluICV7dGltZURlbHRhfSB3ZWVrc1wiLFxuICBpbm1vbnRoczogXCJpbiAle3RpbWVEZWx0YX0gbW9udGhzXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF9IGRheXMgYWdvXCIsXG4gIHdlZWtzYWdvOiBcIiV7dGltZURlbHRhfSB3ZWVrcyBhZ29cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSBtb250aHMgYWdvXCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9IG1pbnV0ZXMgYWdvXCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfSBob3VycyBhZ29cIixcbiAgdGltZTogXCJUaW1lXCIsXG4gIG5vdzogXCJOb3dcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0ZXNcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBob3VyXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IGhvdXJcIixcbiAgbWludXRlOiBcIk1pbnV0ZXxNaW51dGVzfG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJIb3VyfEhvdXJzfGh8aHJ8aHJzfGhcIixcbiAgZGF5OiBcIkRheXxEYXlzfGRcIixcbiAgd2VlazogXCJXZWVrfFdlZWtzfHdcIixcbiAgbW9udGg6IFwiTW9udGh8TW9udGhzfE18bW9cIixcbiAgeWVhcjogXCJZZWFyfFllYXJzfHl8eXJ8eXJzXCIsXG4gIGFuZDogXCJBbmRcIixcbiAgYXQ6IFwiQXRcIixcbiAgZnJvbTogXCJGcm9tXCIsXG4gIHRvOiBcIlRvfFVudGlsfFRpbGxcIixcbiAgb2Y6IFwib2ZcIixcbiAgZmlyc3Q6IFwiZmlyc3RcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG4iLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCLku4rml6VcIixcbiAgdG9tb3Jyb3c6IFwi5piO5pelXCIsXG4gIHllc3RlcmRheTogXCLmmKjml6VcIixcbiAgbmV4dDogXCLmrKF857+MfOadpVwiLCAvLyBcIlRzdWdpL1lva3UvUmFpXCIgKGV4OiBSYWktc2h1ID0gU2VtYWluZSBwcm9jaGFpbmUpXG4gIGxhc3Q6IFwi5YmNfOWOu3zlhYh85pioXCIsIC8vIFwiTWFlL0t5by9TZW4vU2FrdVwiIChleDogU2VuLXNodSA9IFNlbWFpbmUgZGVybmnDqHJlKVxuICB0aGlzOiBcIuS7inzmnKx85b2TXCIsIC8vIFwiSW1hL0hvbi9Ub1wiIChleDogS29uLXNodSA9IENldHRlIHNlbWFpbmUpXG4gIGluOiBcIuOBguOBqHxhdG9cIiwgLy8gXCJBdG9cIiAoUG91ciBkaXJlIFwiRGFucyBYIG1pbnV0ZXNcIiAtPiBcIkF0byBYIGZ1blwiKVxuICBzdW5kYXk6IFwi5pel5puc5pelXCIsXG4gIG1vbmRheTogXCLmnIjmm5zml6VcIixcbiAgdHVlc2RheTogXCLngavmm5zml6VcIixcbiAgd2VkbmVzZGF5OiBcIuawtOabnOaXpVwiLFxuICB0aHVyc2RheTogXCLmnKjmm5zml6VcIixcbiAgZnJpZGF5OiBcIumHkeabnOaXpVwiLFxuICBzYXR1cmRheTogXCLlnJ/mm5zml6VcIixcbiAgaW5taW51dGVzOiBcIiV7dGltZURlbHRhfeWIhuW+jFwiLCAvLyBYIG1pbnV0ZXMgYWZ0ZXJcbiAgaW5ob3VyczogXCIle3RpbWVEZWx0YX3mmYLplpPlvoxcIixcbiAgaW5kYXlzOiBcIiV7dGltZURlbHRhfeaXpeW+jFwiLFxuICBpbndlZWtzOiBcIiV7dGltZURlbHRhfemAsemWk+W+jFwiLFxuICBpbm1vbnRoczogXCIle3RpbWVEZWx0YX3jg7bmnIjlvoxcIixcbiAgZGF5c2FnbzogXCIle3RpbWVEZWx0YX3ml6XliY1cIiwgLy8gWCBkYXlzIGFnb1xuICB3ZWVrc2FnbzogXCIle3RpbWVEZWx0YX3pgLHplpPliY1cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfeODtuaciOWJjVwiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfeWIhuWJjVwiLCAvLyBYIG1pbnV0ZXMgYWdvXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfeaZgumWk+WJjVwiLCAvLyBYIGhvdXJzIGFnb1xuICB0aW1lOiBcIuaZgumWk1wiLFxuICBub3c6IFwi5LuKXCIsIC8vIEltYSAoTWFpbnRlbmFudClcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSDliIZcIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX0g5YiGXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX0g5pmC6ZaTXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IOaZgumWk1wiLFxuICBtaW51dGU6IFwi5YiGfOOBteOCk3zjgbfjgpN8ZnVuXCIsXG4gIGhvdXI6IFwi5pmC6ZaTfOOBmOOBi+OCk3zmmYJ844GYXCIsXG4gIGRheTogXCLml6V844Gr44GhXCIsXG4gIHdlZWs6IFwi6YCxfOmAsemWk3zjgZfjgoXjgYZ844GX44KF44GG44GL44KTXCIsXG4gIG1vbnRoOiBcIuaciHzjg7bmnIh844GL44GS44GkfOOBjOOBpFwiLFxuICB5ZWFyOiBcIuW5tHzjga3jgpNcIixcbiAgb2Y6IFwi44GuXCIsXG4gIGZpcnN0OiBcIuacgOWInXznrKzkuIB85YidfOacgOWIneOBrlwiLFxuICBhbmQ6IFwi44GofOOBiuOCiOOBs1wiLFxuICBhdDogXCLjgat844GnXCIsXG4gIGZyb206IFwi44GL44KJfOOCiOOCilwiLFxuICB0bzogXCLjgb7jgad844G+44Gn44GrXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0OyIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIkF1am91cmQnaHVpXCIsXG4gIHRvbW9ycm93OiBcIkRlbWFpblwiLFxuICB5ZXN0ZXJkYXk6IFwiSGllclwiLFxuICBuZXh0OiBcInByb2NoYWlufHByb2NoYWluZXxzdWl2YW50fHN1aXZhbnRlXCIsXG4gIGxhc3Q6IFwiZGVybmllcnxkZXJuacOocmV8cGFzc8OpfHBhc3PDqWVcIixcbiAgdGhpczogXCJjZXxjZXR0ZXxjZXRcIixcbiAgaW46IFwiZGFuc1wiLFxuICBzdW5kYXk6IFwiRGltYW5jaGVcIixcbiAgbW9uZGF5OiBcIkx1bmRpXCIsXG4gIHR1ZXNkYXk6IFwiTWFyZGlcIixcbiAgd2VkbmVzZGF5OiBcIk1lcmNyZWRpXCIsXG4gIHRodXJzZGF5OiBcIkpldWRpXCIsXG4gIGZyaWRheTogXCJWZW5kcmVkaVwiLFxuICBzYXR1cmRheTogXCJTYW1lZGlcIixcbiAgaW5taW51dGVzOiBcImRhbnMgJXt0aW1lRGVsdGF9IG1pbnV0ZXNcIixcbiAgaW5ob3VyczogXCJkYW5zICV7dGltZURlbHRhfSBoZXVyZXNcIixcbiAgaW5kYXlzOiBcImRhbnMgJXt0aW1lRGVsdGF9IGpvdXJzXCIsXG4gIGlud2Vla3M6IFwiZGFucyAle3RpbWVEZWx0YX0gc2VtYWluZXNcIixcbiAgaW5tb250aHM6IFwiZGFucyAle3RpbWVEZWx0YX0gbW9pc1wiLFxuICBkYXlzYWdvOiBcImlsIHkgYSAle3RpbWVEZWx0YX0gam91cnNcIixcbiAgd2Vla3NhZ286IFwiaWwgeSBhICV7dGltZURlbHRhfSBzZW1haW5lc1wiLFxuICBtb250aHNhZ286IFwiaWwgeSBhICV7dGltZURlbHRhfSBtb2lzXCIsXG4gIG1pbnV0ZXNhZ286IFwiaWwgeSBhICV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIGhvdXJzYWdvOiBcImlsIHkgYSAle3RpbWVEZWx0YX0gaGV1cmVzXCIsXG4gIHRpbWU6IFwiaGV1cmVcIixcbiAgbm93OiBcIm1haW50ZW5hbnRcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0ZXNcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBoZXVyZVwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSBoZXVyZVwiLFxuICBtaW51dGU6IFwibWludXRlfG1pbnV0ZXN8bWlufG1pbnN8bVwiLFxuICBob3VyOiBcImhldXJlfGhldXJlc3xoXCIsXG4gIGRheTogXCJqb3VyfGpvdXJzfGp8ZFwiLFxuICB3ZWVrOiBcInNlbWFpbmV8c2VtYWluZXN8c3x3XCIsXG4gIG1vbnRoOiBcIm1vaXN8TXxtb1wiLFxuICB5ZWFyOiBcImFubsOpZXxhbm7DqWVzfGFufGFuc3xhfHlcIixcbiAgYW5kOiBcImV0XCIsXG4gIGF0OiBcIsOgfGFcIixcbiAgZnJvbTogXCJkZXxkZXB1aXN8ZHVcIixcbiAgdG86IFwiw6B8YXxqdXNxdSfDoHxqdXNxdSdhdXxhdVwiLFxuICBvZjogXCJkdXxkZVwiLFxuICBmaXJzdDogXCJwcmVtaWVyfHByZW1pw6hyZVwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDsiLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJIb2plXCIsXG4gIHRvbW9ycm93OiBcIkFtYW5ow6NcIixcbiAgeWVzdGVyZGF5OiBcIk9udGVtXCIsXG4gIG5leHQ6IFwicHLDs3hpbW98cHLDs3hpbWF8c2VndWludGVcIixcbiAgbGFzdDogXCLDumx0aW1vfMO6bHRpbWF8cGFzc2Fkb3xwYXNzYWRhXCIsXG4gIHRoaXM6IFwiZXN0ZXxlc3RhXCIsXG4gIGluOiBcImVtfGRhcXVpIGF8ZGFxdWlcIixcbiAgc3VuZGF5OiBcIkRvbWluZ29cIixcbiAgbW9uZGF5OiBcIlNlZ3VuZGEtZmVpcmFcIixcbiAgdHVlc2RheTogXCJUZXLDp2EtZmVpcmFcIixcbiAgd2VkbmVzZGF5OiBcIlF1YXJ0YS1mZWlyYVwiLFxuICB0aHVyc2RheTogXCJRdWludGEtZmVpcmFcIixcbiAgZnJpZGF5OiBcIlNleHRhLWZlaXJhXCIsXG4gIHNhdHVyZGF5OiBcIlPDoWJhZG9cIixcbiAgaW5taW51dGVzOiBcImVtICV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIGluaG91cnM6IFwiZW0gJXt0aW1lRGVsdGF9IGhvcmFzXCIsXG4gIGluZGF5czogXCJlbSAle3RpbWVEZWx0YX0gZGlhc1wiLFxuICBpbndlZWtzOiBcImVtICV7dGltZURlbHRhfSBzZW1hbmFzXCIsXG4gIGlubW9udGhzOiBcImVtICV7dGltZURlbHRhfSBtZXNlc1wiLFxuICBkYXlzYWdvOiBcImjDoSAle3RpbWVEZWx0YX0gZGlhc1wiLFxuICB3ZWVrc2FnbzogXCJow6EgJXt0aW1lRGVsdGF9IHNlbWFuYXNcIixcbiAgbW9udGhzYWdvOiBcImjDoSAle3RpbWVEZWx0YX0gbWVzZXNcIixcbiAgbWludXRlc2FnbzogXCJow6EgJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgaG91cnNhZ286IFwiaMOhICV7dGltZURlbHRhfSBob3Jhc1wiLFxuICBhZ29zdWZmaXg6IFwiYXRyw6FzfGF0cmFzXCIsXG4gIHRpbWU6IFwiaG9yYVwiLFxuICBub3c6IFwiYWdvcmFcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBob3JhXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IGhvcmFcIixcbiAgbWludXRlOiBcIm1pbnV0b3xtaW51dG9zfG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJob3JhfGhvcmFzfGhcIixcbiAgZGF5OiBcImRpYXxkaWFzfGRcIixcbiAgd2VlazogXCJzZW1hbmF8c2VtYW5hc3xzfHdcIixcbiAgbW9udGg6IFwibcOqc3xtZXNlc3xNfG1vXCIsXG4gIHllYXI6IFwiYW5vfGFub3N8YXx5XCIsXG4gIGFuZDogXCJlXCIsXG4gIGF0OiBcIsOgc3xhc3zDoHxhXCIsXG4gIGZyb206IFwiZGV8ZGVzZGVcIixcbiAgdG86IFwiYXTDqXxhb3zDoFwiLFxuICBvZjogXCJkb3xkYXxkZVwiLFxuICBmaXJzdDogXCJwcmltZWlyb3xwcmltZWlyYVwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDsiLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJIZXV0ZVwiLFxuICB0b21vcnJvdzogXCJNb3JnZW5cIixcbiAgeWVzdGVyZGF5OiBcIkdlc3Rlcm5cIixcbiAgbmV4dDogXCJuw6RjaHN0ZXJ8bsOkY2hzdGV8bsOkY2hzdGVzfG7DpGNoc3RlblwiLFxuICBsYXN0OiBcImxldHp0ZXJ8bGV0enRlfGxldHp0ZXNcIixcbiAgdGhpczogXCJkaWVzZXJ8ZGllc2V8ZGllc2VzXCIsXG4gIGluOiBcImluXCIsXG4gIHN1bmRheTogXCJTb25udGFnXCIsXG4gIG1vbmRheTogXCJNb250YWdcIixcbiAgdHVlc2RheTogXCJEaWVuc3RhZ1wiLFxuICB3ZWRuZXNkYXk6IFwiTWl0dHdvY2hcIixcbiAgdGh1cnNkYXk6IFwiRG9ubmVyc3RhZ1wiLFxuICBmcmlkYXk6IFwiRnJlaXRhZ1wiLFxuICBzYXR1cmRheTogXCJTYW1zdGFnXCIsXG4gIGlubWludXRlczogXCJpbiAle3RpbWVEZWx0YX0gTWludXRlblwiLFxuICBpbmhvdXJzOiBcImluICV7dGltZURlbHRhfSBTdHVuZGVuXCIsXG4gIGluZGF5czogXCJpbiAle3RpbWVEZWx0YX0gVGFnZW5cIixcbiAgaW53ZWVrczogXCJpbiAle3RpbWVEZWx0YX0gV29jaGVuXCIsXG4gIGlubW9udGhzOiBcImluICV7dGltZURlbHRhfSBNb25hdGVuXCIsXG4gIGRheXNhZ286IFwidm9yICV7dGltZURlbHRhfSBUYWdlblwiLFxuICB3ZWVrc2FnbzogXCJ2b3IgJXt0aW1lRGVsdGF9IFdvY2hlblwiLFxuICBtb250aHNhZ286IFwidm9yICV7dGltZURlbHRhfSBNb25hdGVuXCIsXG4gIG1pbnV0ZXNhZ286IFwidm9yICV7dGltZURlbHRhfSBNaW51dGVuXCIsXG4gIGhvdXJzYWdvOiBcInZvciAle3RpbWVEZWx0YX0gU3R1bmRlblwiLFxuICB0aW1lOiBcIlplaXRcIixcbiAgbm93OiBcImpldHp0XCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0gTWludXRlblwiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfSBNaW51dGVuXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX0gU3R1bmRlXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IFN0dW5kZVwiLFxuICBtaW51dGU6IFwiTWludXRlfE1pbnV0ZW58bWlufG1pbnN8bVwiLFxuICBob3VyOiBcIlN0dW5kZXxTdHVuZGVufFN0ZHxoXCIsXG4gIGRheTogXCJUYWd8VGFnZXxkfHRcIixcbiAgd2VlazogXCJXb2NoZXxXb2NoZW58d1wiLFxuICBtb250aDogXCJNb25hdHxNb25hdGV8TW9uYXRzfE18bW9cIixcbiAgeWVhcjogXCJKYWhyfEphaHJlfGp8eVwiLFxuICBhbmQ6IFwidW5kXCIsXG4gIGF0OiBcInVtXCIsXG4gIGZyb206IFwidm9ufGFiXCIsXG4gIHRvOiBcImJpc3xiaXMgenVtXCIsXG4gIG9mOiBcImRlc3x2b21cIixcbiAgZmlyc3Q6IFwiZXJzdGVyfGVyc3RlfGVyc3Rlc1wiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDsiLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJWYW5kYWFnXCIsXG4gIHRvbW9ycm93OiBcIk1vcmdlblwiLFxuICB5ZXN0ZXJkYXk6IFwiR2lzdGVyZW5cIixcbiAgbmV4dDogXCJ2b2xnZW5kZVwiLFxuICBsYXN0OiBcInZvcmlnZXxsYWF0c3RlXCIsXG4gIHRoaXM6IFwiZGV6ZXxkaXRcIixcbiAgaW46IFwib3ZlclwiLFxuICBzdW5kYXk6IFwiem9uZGFnXCIsXG4gIG1vbmRheTogXCJtYWFuZGFnXCIsXG4gIHR1ZXNkYXk6IFwiZGluc2RhZ1wiLFxuICB3ZWRuZXNkYXk6IFwid29lbnNkYWdcIixcbiAgdGh1cnNkYXk6IFwiZG9uZGVyZGFnXCIsXG4gIGZyaWRheTogXCJ2cmlqZGFnXCIsXG4gIHNhdHVyZGF5OiBcInphdGVyZGFnXCIsXG4gIGlubWludXRlczogXCJvdmVyICV7dGltZURlbHRhfSBtaW51dGVuXCIsXG4gIGluaG91cnM6IFwib3ZlciAle3RpbWVEZWx0YX0gdXJlblwiLFxuICBpbmRheXM6IFwib3ZlciAle3RpbWVEZWx0YX0gZGFnZW5cIixcbiAgaW53ZWVrczogXCJvdmVyICV7dGltZURlbHRhfSB3ZWtlblwiLFxuICBpbm1vbnRoczogXCJvdmVyICV7dGltZURlbHRhfSBtYWFuZGVuXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF9IGRhZ2VuIGdlbGVkZW5cIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF9IHdla2VuIGdlbGVkZW5cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSBtYWFuZGVuIGdlbGVkZW5cIixcbiAgbWludXRlc2FnbzogXCIle3RpbWVEZWx0YX0gbWludXRlbiBnZWxlZGVuXCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfSB1cmVuIGdlbGVkZW5cIixcbiAgdGltZTogXCJ0aWpkXCIsXG4gIG5vdzogXCJudVwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF9IG1pbnV0ZW5cIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX0gbWludXRlblwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IHV1clwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSB1dXJcIixcbiAgbWludXRlOiBcIm1pbnV1dHxtaW51dGVufG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJ1dXJ8dXJlbnx1fGhcIixcbiAgZGF5OiBcImRhZ3xkYWdlbnxkXCIsXG4gIHdlZWs6IFwid2Vla3x3ZWtlbnx3XCIsXG4gIG1vbnRoOiBcIm1hYW5kfG1hYW5kZW58TXxtb1wiLFxuICB5ZWFyOiBcImphYXJ8amFyZW58anx5XCIsXG4gIGFuZDogXCJlblwiLFxuICBhdDogXCJvbVwiLFxuICBmcm9tOiBcInZhbnx2YW5hZlwiLFxuICB0bzogXCJ0b3R8dG90IGVuIG1ldFwiLFxuICBvZjogXCJ2YW5cIixcbiAgZmlyc3Q6IFwiZWVyc3RlXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuIiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwiSG95XCIsXG4gIHRvbW9ycm93OiBcIk1hw7FhbmFcIixcbiAgeWVzdGVyZGF5OiBcIkF5ZXJcIixcbiAgbmV4dDogXCJwcsOzeGltb3xwcsOzeGltYXxzaWd1aWVudGVcIixcbiAgbGFzdDogXCLDumx0aW1vfMO6bHRpbWF8cGFzYWRvfHBhc2FkYVwiLFxuICB0aGlzOiBcImVzdGV8ZXN0YVwiLFxuICBpbjogXCJlbnxkZW50cm8gZGVcIixcbiAgc3VuZGF5OiBcIkRvbWluZ29cIixcbiAgbW9uZGF5OiBcIkx1bmVzXCIsXG4gIHR1ZXNkYXk6IFwiTWFydGVzXCIsXG4gIHdlZG5lc2RheTogXCJNacOpcmNvbGVzXCIsXG4gIHRodXJzZGF5OiBcIkp1ZXZlc1wiLFxuICBmcmlkYXk6IFwiVmllcm5lc1wiLFxuICBzYXR1cmRheTogXCJTw6FiYWRvXCIsXG4gIGlubWludXRlczogXCJlbiAle3RpbWVEZWx0YX0gbWludXRvc1wiLFxuICBpbmhvdXJzOiBcImVuICV7dGltZURlbHRhfSBob3Jhc1wiLFxuICBpbmRheXM6IFwiZW4gJXt0aW1lRGVsdGF9IGTDrWFzXCIsXG4gIGlud2Vla3M6IFwiZW4gJXt0aW1lRGVsdGF9IHNlbWFuYXNcIixcbiAgaW5tb250aHM6IFwiZW4gJXt0aW1lRGVsdGF9IG1lc2VzXCIsXG4gIGRheXNhZ286IFwiaGFjZSAle3RpbWVEZWx0YX0gZMOtYXNcIixcbiAgd2Vla3NhZ286IFwiaGFjZSAle3RpbWVEZWx0YX0gc2VtYW5hc1wiLFxuICBtb250aHNhZ286IFwiaGFjZSAle3RpbWVEZWx0YX0gbWVzZXNcIixcbiAgbWludXRlc2FnbzogXCJoYWNlICV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIGhvdXJzYWdvOiBcImhhY2UgJXt0aW1lRGVsdGF9IGhvcmFzXCIsXG4gIGFnb3N1ZmZpeDogXCJhdHLDoXN8YXRyYXNcIixcbiAgdGltZTogXCJob3JhXCIsXG4gIG5vdzogXCJhaG9yYVwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX0gbWludXRvc1wiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IGhvcmFcIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX0gaG9yYVwiLFxuICBtaW51dGU6IFwibWludXRvfG1pbnV0b3N8bWlufG1pbnN8bVwiLFxuICBob3VyOiBcImhvcmF8aG9yYXN8aFwiLFxuICBkYXk6IFwiZMOtYXxkw61hc3xkXCIsXG4gIHdlZWs6IFwic2VtYW5hfHNlbWFuYXN8c3x3XCIsXG4gIG1vbnRoOiBcIm1lc3xtZXNlc3xNfG1vXCIsXG4gIHllYXI6IFwiYcOxb3xhw7Fvc3xhfHlcIixcbiAgYW5kOiBcInlcIixcbiAgYXQ6IFwiYSBsYXN8YSBsYXxhfGVuXCIsXG4gIGZyb206IFwiZGV8ZGVzZGVcIixcbiAgdG86IFwiYXxoYXN0YVwiLFxuICBvZjogXCJkZXxkZWxcIixcbiAgZmlyc3Q6IFwicHJpbWVyfHByaW1lcmFcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG5cbiIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIk9nZ2lcIixcbiAgdG9tb3Jyb3c6IFwiRG9tYW5pXCIsXG4gIHllc3RlcmRheTogXCJJZXJpXCIsXG4gIG5leHQ6IFwicHJvc3NpbW98cHJvc3NpbWF8c2VndWVudGVcIixcbiAgbGFzdDogXCJ1bHRpbW98dWx0aW1hfHNjb3Jzb3xzY29yc2F8cGFzc2F0b3xwYXNzYXRhXCIsXG4gIHRoaXM6IFwicXVlc3RvfHF1ZXN0YVwiLFxuICBpbjogXCJpbnx0cmFcIixcbiAgc3VuZGF5OiBcIkRvbWVuaWNhXCIsXG4gIG1vbmRheTogXCJMdW5lZMOsXCIsXG4gIHR1ZXNkYXk6IFwiTWFydGVkw6xcIixcbiAgd2VkbmVzZGF5OiBcIk1lcmNvbGVkw6xcIixcbiAgdGh1cnNkYXk6IFwiR2lvdmVkw6xcIixcbiAgZnJpZGF5OiBcIlZlbmVyZMOsXCIsXG4gIHNhdHVyZGF5OiBcIlNhYmF0b1wiLFxuICBpbm1pbnV0ZXM6IFwidHJhICV7dGltZURlbHRhfSBtaW51dGlcIixcbiAgaW5ob3VyczogXCJ0cmEgJXt0aW1lRGVsdGF9IG9yZVwiLFxuICBpbmRheXM6IFwidHJhICV7dGltZURlbHRhfSBnaW9ybmlcIixcbiAgaW53ZWVrczogXCJ0cmEgJXt0aW1lRGVsdGF9IHNldHRpbWFuZVwiLFxuICBpbm1vbnRoczogXCJ0cmEgJXt0aW1lRGVsdGF9IG1lc2lcIixcbiAgZGF5c2FnbzogXCIle3RpbWVEZWx0YX0gZ2lvcm5pIGZhXCIsXG4gIHdlZWtzYWdvOiBcIiV7dGltZURlbHRhfSBzZXR0aW1hbmUgZmFcIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSBtZXNpIGZhXCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9IG1pbnV0aSBmYVwiLFxuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX0gb3JlIGZhXCIsXG4gIHRpbWU6IFwib3JhXCIsXG4gIG5vdzogXCJhZGVzc298b3JhXCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0gbWludXRpXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0aVwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IG9yYVwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSBvcmFcIixcbiAgbWludXRlOiBcIm1pbnV0b3xtaW51dGl8bWlufG1pbnN8bVwiLFxuICBob3VyOiBcIm9yYXxvcmV8aFwiLFxuICBkYXk6IFwiZ2lvcm5vfGdpb3JuaXxnfGRcIixcbiAgd2VlazogXCJzZXR0aW1hbmF8c2V0dGltYW5lfHN8d1wiLFxuICBtb250aDogXCJtZXNlfG1lc2l8TXxtb1wiLFxuICB5ZWFyOiBcImFubm98YW5uaXxhfHlcIixcbiAgYW5kOiBcImVcIixcbiAgYXQ6IFwiYWxsZXxhbGxhfGFcIixcbiAgZnJvbTogXCJkYXxkYWx8ZGFsbGFcIixcbiAgdG86IFwiYXxmaW5vIGF8ZmlubyBhbHxmaW5vIGFsbGFcIixcbiAgb2Y6IFwiZGVsfGRlbGxhfGRpXCIsXG4gIGZpcnN0OiBcInByaW1vfHByaW1hXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuXG4iLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCLQodC10LPQvtC00L3Rj1wiLFxuICB0b21vcnJvdzogXCLQl9Cw0LLRgtGA0LBcIixcbiAgeWVzdGVyZGF5OiBcItCS0YfQtdGA0LBcIixcbiAgbmV4dDogXCLRgdC70LXQtNGD0Y7RidC40Ll80YHQu9C10LTRg9GO0YnQsNGPfNGB0LvQtdC00YPRjtGJ0LXQtXzRgdC70LXQtNGD0Y7RidC40LVcIixcbiAgbGFzdDogXCLQv9C+0YHQu9C10LTQvdC40Ll80L/QvtGB0LvQtdC00L3Rj9GPfNC/0L7RgdC70LXQtNC90LXQtXzQv9C+0YHQu9C10LTQvdC40LV80L/RgNC+0YjQu9GL0Ll80L/RgNC+0YjQu9Cw0Y980L/RgNC+0YjQu9C+0LV80L/RgNC+0YjQu9GL0LVcIixcbiAgdGhpczogXCLRjdGC0L7RgnzRjdGC0LB80Y3RgtC+fNGN0YLQuFwiLFxuICBpbjogXCLRh9C10YDQtdC3XCIsXG4gIHN1bmRheTogXCLQktC+0YHQutGA0LXRgdC10L3RjNC1fNCS0L7RgdC60YDQtdGB0LXQvdGM0Y9cIixcbiAgbW9uZGF5OiBcItCf0L7QvdC10LTQtdC70YzQvdC40Lp80J/QvtC90LXQtNC10LvRjNC90LjQutCwXCIsXG4gIHR1ZXNkYXk6IFwi0JLRgtC+0YDQvdC40Lp80JLRgtC+0YDQvdC40LrQsFwiLFxuICB3ZWRuZXNkYXk6IFwi0KHRgNC10LTQsHzQodGA0LXQtNGLXCIsXG4gIHRodXJzZGF5OiBcItCn0LXRgtCy0LXRgNCzfNCn0LXRgtCy0LXRgNCz0LBcIixcbiAgZnJpZGF5OiBcItCf0Y/RgtC90LjRhtCwfNCf0Y/RgtC90LjRhtGLXCIsXG4gIHNhdHVyZGF5OiBcItCh0YPQsdCx0L7RgtCwfNCh0YPQsdCx0L7RgtGLXCIsXG4gIGlubWludXRlczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDQvNC40L3Rg9GCfNC80LjQvdGD0YLRg3zQvNC40L3Rg9GC0YtcIixcbiAgaW5ob3VyczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDRh9Cw0YF80YfQsNGB0LB80YfQsNGB0L7QslwiLFxuICBpbmRheXM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LTQtdC90Yx80LTQvdGPfNC00L3QtdC5XCIsXG4gIGlud2Vla3M6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0L3QtdC00LXQu9GOfNC90LXQtNC10LvQuHzQvdC10LTQtdC70YxcIixcbiAgaW5tb250aHM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LzQtdGB0Y/RhnzQvNC10YHRj9GG0LB80LzQtdGB0Y/RhtC10LJcIixcbiAgZGF5c2FnbzogXCIle3RpbWVEZWx0YX0g0LTQtdC90Yx80LTQvdGPfNC00L3QtdC5INC90LDQt9Cw0LRcIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF9INC90LXQtNC10LvRjnzQvdC10LTQtdC70Lh80L3QtdC00LXQu9GMINC90LDQt9Cw0LRcIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSDQvNC10YHRj9GGfNC80LXRgdGP0YbQsHzQvNC10YHRj9GG0LXQsiDQvdCw0LfQsNC0XCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9INC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRiyDQvdCw0LfQsNC0XCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfSDRh9Cw0YF80YfQsNGB0LB80YfQsNGB0L7QsiDQvdCw0LfQsNC0XCIsXG4gIHRpbWU6IFwi0LLRgNC10LzRj1wiLFxuICBub3c6IFwi0YHQtdC50YfQsNGBXCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0g0LzQuNC90YPRgnzQvNC40L3Rg9GC0YN80LzQuNC90YPRgtGLXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9INC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRi1wiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9INGH0LDRgXzRh9Cw0YHQsHzRh9Cw0YHQvtCyXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9INGH0LDRgXzRh9Cw0YHQsHzRh9Cw0YHQvtCyXCIsXG4gIG1pbnV0ZTogXCLQvNC40L3Rg9GC0LB80LzQuNC90YPRgtGLfNC80LjQvdGD0YJ80LzQuNC9fNC8XCIsXG4gIGhvdXI6IFwi0YfQsNGBfNGH0LDRgdCwfNGH0LDRgdC+0LJ80YdcIixcbiAgZGF5OiBcItC00LXQvdGMfNC00L3Rj3zQtNC90LXQuXzQtFwiLFxuICB3ZWVrOiBcItC90LXQtNC10LvRj3zQvdC10LTQtdC70Lh80L3QtdC00LXQu9GMfNC9fNC90LXQtFwiLFxuICBtb250aDogXCLQvNC10YHRj9GGfNC80LXRgdGP0YbQsHzQvNC10YHRj9GG0LXQsnzQvNC10YF80LxcIixcbiAgeWVhcjogXCLQs9C+0LR80LPQvtC00LB80LvQtdGCfNCzfNC7XCIsXG4gIGFuZDogXCLQuFwiLFxuICBhdDogXCLQslwiLFxuICBmcm9tOiBcItGBfNC+0YJcIixcbiAgdG86IFwi0LTQvnzQulwiLFxuICBvZjogXCLQuNC3fNC+0YJcIixcbiAgZmlyc3Q6IFwi0L/QtdGA0LLRi9C5fNC/0LXRgNCy0LDRj3zQv9C10YDQstC+0LV80L/QtdGA0LLRi9C1XCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuIiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwi0KHRjNC+0LPQvtC00L3RllwiLFxuICB0b21vcnJvdzogXCLQl9Cw0LLRgtGA0LBcIixcbiAgeWVzdGVyZGF5OiBcItCS0YfQvtGA0LBcIixcbiAgbmV4dDogXCLQvdCw0YHRgtGD0L/QvdC40Ll80L3QsNGB0YLRg9C/0L3QsHzQvdCw0YHRgtGD0L/QvdC1fNC90LDRgdGC0YPQv9C90ZZcIixcbiAgbGFzdDogXCLQvtGB0YLQsNC90L3RltC5fNC+0YHRgtCw0L3QvdGPfNC+0YHRgtCw0L3QvdGUfNC+0YHRgtCw0L3QvdGWfNC80LjQvdGD0LvQuNC5fNC80LjQvdGD0LvQsHzQvNC40L3Rg9C70LV80LzQuNC90YPQu9GWXCIsXG4gIHRoaXM6IFwi0YbQtdC5fNGG0Y980YbQtXzRhtGWXCIsXG4gIGluOiBcItGH0LXRgNC10LdcIixcbiAgc3VuZGF5OiBcItCd0LXQtNGW0LvRj3zQndC10LTRltC70ZZcIixcbiAgbW9uZGF5OiBcItCf0L7QvdC10LTRltC70L7QunzQn9C+0L3QtdC00ZbQu9C60LBcIixcbiAgdHVlc2RheTogXCLQktGW0LLRgtC+0YDQvtC6fNCS0ZbQstGC0L7RgNC60LBcIixcbiAgd2VkbmVzZGF5OiBcItCh0LXRgNC10LTQsHzQodC10YDQtdC00LhcIixcbiAgdGh1cnNkYXk6IFwi0KfQtdGC0LLQtdGAfNCn0LXRgtCy0LXRgNCz0LBcIixcbiAgZnJpZGF5OiBcItCfJ9GP0YLQvdC40YbRj3zQnyfRj9GC0L3QuNGG0ZZcIixcbiAgc2F0dXJkYXk6IFwi0KHRg9Cx0L7RgtCwfNCh0YPQsdC+0YLQuFwiLFxuICBpbm1pbnV0ZXM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0YXQstC40LvQuNC90YN80YXQstC40LvQuNC90Lh80YXQstC40LvQuNC9XCIsXG4gIGluaG91cnM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LPQvtC00LjQvdGDfNCz0L7QtNC40L3QuHzQs9C+0LTQuNC9XCIsXG4gIGluZGF5czogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDQtNC10L3RjHzQtNC90ZZ80LTQvdGW0LJcIixcbiAgaW53ZWVrczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDRgtC40LbQtNC10L3RjHzRgtC40LbQvdGWfNGC0LjQttC90ZbQslwiLFxuICBpbm1vbnRoczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDQvNGW0YHRj9GG0Yx80LzRltGB0Y/RhtGWfNC80ZbRgdGP0YbRltCyXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF9INC00LXQvdGMfNC00L3RlnzQtNC90ZbQsiDRgtC+0LzRg1wiLFxuICB3ZWVrc2FnbzogXCIle3RpbWVEZWx0YX0g0YLQuNC20LTQtdC90Yx80YLQuNC20L3RlnzRgtC40LbQvdGW0LIg0YLQvtC80YNcIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSDQvNGW0YHRj9GG0Yx80LzRltGB0Y/RhtGWfNC80ZbRgdGP0YbRltCyINGC0L7QvNGDXCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9INGF0LLQuNC70LjQvdGDfNGF0LLQuNC70LjQvdC4fNGF0LLQuNC70LjQvSDRgtC+0LzRg1wiLFxuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX0g0LPQvtC00LjQvdGDfNCz0L7QtNC40L3QuHzQs9C+0LTQuNC9INGC0L7QvNGDXCIsXG4gIHRpbWU6IFwi0YfQsNGBXCIsXG4gIG5vdzogXCLQt9Cw0YDQsNC3XCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0g0YXQstC40LvQuNC90YN80YXQstC40LvQuNC90Lh80YXQstC40LvQuNC9XCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9INGF0LLQuNC70LjQvdGDfNGF0LLQuNC70LjQvdC4fNGF0LLQuNC70LjQvVwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9INCz0L7QtNC40L3Rg3zQs9C+0LTQuNC90Lh80LPQvtC00LjQvVwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSDQs9C+0LTQuNC90YN80LPQvtC00LjQvdC4fNCz0L7QtNC40L1cIixcbiAgbWludXRlOiBcItGF0LLQuNC70LjQvdCwfNGF0LLQuNC70LjQvdC4fNGF0LLQuNC70LjQvXzRhdCyfNC8XCIsXG4gIGhvdXI6IFwi0LPQvtC00LjQvdCwfNCz0L7QtNC40L3QuHzQs9C+0LTQuNC9fNCz0L7QtHzQs1wiLFxuICBkYXk6IFwi0LTQtdC90Yx80LTQvdGWfNC00L3RltCyfNC0XCIsXG4gIHdlZWs6IFwi0YLQuNC20LTQtdC90Yx80YLQuNC20L3RlnzRgtC40LbQvdGW0LJ80YJ80YLQuNC2XCIsXG4gIG1vbnRoOiBcItC80ZbRgdGP0YbRjHzQvNGW0YHRj9GG0ZZ80LzRltGB0Y/RhtGW0LJ80LzRltGBfNC8XCIsXG4gIHllYXI6IFwi0YDRltC6fNGA0L7QutC4fNGA0L7QutGW0LJ80YBcIixcbiAgYW5kOiBcItGWXCIsXG4gIGF0OiBcItC+XCIsXG4gIGZyb206IFwi0Ld80LLRltC0XCIsXG4gIHRvOiBcItC00L580LpcIixcbiAgb2Y6IFwi0Ld80LLRltC0XCIsXG4gIGZpcnN0OiBcItC/0LXRgNGI0LjQuXzQv9C10YDRiNCwfNC/0LXRgNGI0LV80L/QtdGA0YjRllwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDtcbiIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIuS7iuWkqVwiLFxuICB0b21vcnJvdzogXCLmmI7lpKlcIixcbiAgeWVzdGVyZGF5OiBcIuaYqOWkqVwiLFxuICAvLyBGb3JtYWwgKFwi5LiL5LiA5YCLXCIvXCLkuIvkuIDkuKpcIikgYW5kIHNob3J0IHByZWZpeCAoXCLkuItcIiwgZS5nLiBcIuS4i+aYn+acn+S4gFwiL1wi5LiL5ZGo5LiAXCIpIGZvcm1zLFxuICAvLyBjb3ZlcmluZyBib3RoIFRyYWRpdGlvbmFsIGFuZCBTaW1wbGlmaWVkIHNjcmlwdC5cbiAgbmV4dDogXCLkuIvkuIDlgIt85LiL5LiA5LiqfOS4i1wiLFxuICAvLyBcIuacgOW+jC/mnIDlkI5cIiAoXCJsYXN0XCIgaW4gZ2VuZXJhbCksIFwi5LiK5LiA5YCLL+S4iuS4gOS4qlwiIChcInByZXZpb3VzXCIpLCBhbmQgc2hvcnQgXCLkuIpcIlxuICAvLyAoZS5nLiBcIuS4iuaYn+acn+S4gFwiL1wi5LiK5ZGo5LiAXCIpLlxuICBsYXN0OiBcIuacgOW+jHzmnIDlkI585LiK5LiA5YCLfOS4iuS4gOS4qnzkuIpcIixcbiAgLy8gXCLpgJnlgIsv6L+Z5LiqXCIgKGZvcm1hbCkgYW5kIHNob3J0IFwi6YCZL+i/mVwiIChlLmcuIFwi6YCZ5pif5pyf5LiAXCIvXCLov5nlkajkuIBcIikuXG4gIHRoaXM6IFwi6YCZ5YCLfOi/meS4qnzpgJl86L+ZXCIsXG4gIGluOiBcIuWcqFwiLFxuICAvLyBcIuemruaLnC/npLzmi5xcIiAoY29sbG9xdWlhbCwgb3JpZ2luYWxseSBcIndvcnNoaXAgZGF5XCIpIGlzIGFsc28gZXh0cmVtZWx5IGNvbW1vblxuICAvLyBmb3Igd2Vla2RheXMsIGUuZy4gXCLnpq7mi5zkuIBcIi9cIuekvOaLnOS4gFwiIGZvciBNb25kYXkuXG4gIHN1bmRheTogXCLmmJ/mnJ/ml6V85ZGo5pelfOmAseaXpXzmmJ/mnJ/lpKl856au5ouc5pelfOekvOaLnOaXpXznpq7mi5zlpKl856S85ouc5aSpXCIsXG4gIG1vbmRheTogXCLmmJ/mnJ/kuIB85ZGo5LiAfOmAseS4gHznpq7mi5zkuIB856S85ouc5LiAXCIsXG4gIHR1ZXNkYXk6IFwi5pif5pyf5LqMfOWRqOS6jHzpgLHkuox856au5ouc5LqMfOekvOaLnOS6jFwiLFxuICB3ZWRuZXNkYXk6IFwi5pif5pyf5LiJfOWRqOS4iXzpgLHkuIl856au5ouc5LiJfOekvOaLnOS4iVwiLFxuICB0aHVyc2RheTogXCLmmJ/mnJ/lm5t85ZGo5ZubfOmAseWbm3znpq7mi5zlm5t856S85ouc5ZubXCIsXG4gIGZyaWRheTogXCLmmJ/mnJ/kupR85ZGo5LqUfOmAseS6lHznpq7mi5zkupR856S85ouc5LqUXCIsXG4gIHNhdHVyZGF5OiBcIuaYn+acn+WFrXzlkajlha186YCx5YWtfOemruaLnOWFrXznpLzmi5zlha1cIixcbiAgaW5taW51dGVzOiBcIiV7dGltZURlbHRhfeWIhumQmOW+jFwiLFxuICBpbmhvdXJzOiBcIiV7dGltZURlbHRhfeWwj+aZguW+jFwiLFxuICBpbmRheXM6IFwiJXt0aW1lRGVsdGF95aSp5b6MXCIsXG4gIGlud2Vla3M6IFwiJXt0aW1lRGVsdGF96YCx5b6MXCIsXG4gIGlubW9udGhzOiBcIiV7dGltZURlbHRhfeWAi+aciOW+jFwiLFxuICBkYXlzYWdvOiBcIiV7dGltZURlbHRhfeWkqeWJjVwiLFxuICB3ZWVrc2FnbzogXCIle3RpbWVEZWx0YX3pgLHliY1cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfeWAi+aciOWJjVwiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfeWIhumQmOWJjVwiLFxuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX3lsI/mmYLliY1cIixcbiAgLy8gTm90IHVzZWQgZm9yIGRpc3BsYXksIG9ubHkgZm9yIG1hdGNoaW5nIFwiTiB1bml0XCIgKyB0aGlzIG1hcmtlciAoZS5nLlxuICAvLyBcIjLlpKnlvoxcIi9cIjLlpKnlkI5cIiA9IFwiMiBkYXlzXCIgKyBcIuW+jFwiL1wi5ZCOXCIgPSBcIjIgZGF5cyBsYXRlclwiKS4gS2VwdCBzZXBhcmF0ZSBmcm9tXG4gIC8vIHRoZSAle3RpbWVEZWx0YX0gdGVtcGxhdGVzIGFib3ZlICh3aGljaCBhcmUgYWxzbyB1c2VkIHZlcmJhdGltIGluXG4gIC8vIGF1dG9zdWdnZXN0IGxhYmVscyBhbmQgZG9uJ3Qgc3VwcG9ydCBcInxcIiBhbHRlcm5hdGl2ZXMgdGhlIHNhbWUgd2F5KS5cbiAgLy8gXCLkuYvlvowv5LmL5ZCOXCIgYW5kIFwi5Lul5b6ML+S7peWQjlwiIGFyZSBlcXVhbGx5IGNvbW1vbiBhbHRlcm5hdGl2ZXMgdG8gYmFyZSBcIuW+jC/lkI5cIlxuICAvLyAoZS5nLiBcIjLlpKnkuYvlvoxcIiwgXCIz5YCL5pyI5Lul5b6MXCIpLlxuICBsYXRlcjogXCLlvox85ZCOfOS5i+W+jHzkuYvlkI585Lul5b6MfOS7peWQjlwiLFxuICB0aW1lOiBcIuaZgumWk3zml7bpl7RcIixcbiAgbm93OiBcIuePvuWcqHznjrDlnKhcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfeWIhumQmFwiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfeWIhumQmFwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF95bCP5pmCXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF95bCP5pmCXCIsXG4gIG1pbnV0ZTogXCLliIbpkJh85YiG6ZKffOWIhlwiLFxuICBob3VyOiBcIuWwj+aZgnzlsI/ml7Z85pmCfOaXtlwiLFxuICBkYXk6IFwi5aSpfOaXpVwiLFxuICB3ZWVrOiBcIumAsXzlkah85pif5pyffOWAi+aYn+acn3zkuKrmmJ/mnJ9856au5oucfOekvOaLnHzlgIvnpq7mi5x85Liq56S85oucXCIsXG4gIG1vbnRoOiBcIuaciHzlgIvmnIh85Liq5pyIXCIsXG4gIHllYXI6IFwi5bm0XCIsXG4gIGFuZDogXCLlkoxcIixcbiAgYXQ6IFwi5ZyoXCIsXG4gIGZyb206IFwi5b6efOS7jnzoh6pcIixcbiAgdG86IFwi5YiwfOiHs1wiLFxuICBvZjogXCLnmoRcIixcbiAgZmlyc3Q6IFwi56ys5LiAfOesrOS4gOWAi3znrKzkuIDkuKpcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG4iLCIvLyBLb3JlYW4gc3VwcG9ydC4gVm9jYWJ1bGFyeSBmb3IgdG9kYXkvdG9tb3Jyb3cveWVzdGVyZGF5LCB3ZWVrZGF5cyxcbi8vIHRoaXMvbmV4dC9sYXN0LCB0aGUgaG91ci9taW51dGUvZGF5L3dlZWsvbW9udGgveWVhciB1bml0cywgYW5kIHRoZVxuLy8gXCJsYXRlclwiL1wiYWdvc3VmZml4XCIgcmVsYXRpdmUtZXhwcmVzc2lvbiBtYXJrZXJzIGlzIHRha2VuIGRpcmVjdGx5IGZyb21cbi8vIENyZWFtTnV0cycgdHJhbnNsYXRlS29yZWFuVG9FbmdsaXNoKCkgZGljdGlvbmFyeVxuLy8gKGh0dHBzOi8vZ2l0aHViLmNvbS9DcmVhbU51dHMvbmxkYXRlcy1vYnNpZGlhbi1rb3JlYW4sIE1JVCksIHNpbmNlIGl0J3Ncbi8vIHZvY2FidWxhcnkgYSByZWFsIEtvcmVhbi1zcGVha2luZyB1c2VyIGJhc2UgaGFzIGFscmVhZHkgYmVlbiB1c2luZy5cbi8vXG4vLyBLb3JlYW4gcGhyYXNlcyBudW1iZXJzIGluIGEgc3VmZml4IHBvc2l0aW9uIChudW1iZXIgKyB1bml0ICsgbWFya2VyLCBlLmcuXG4vLyBcIjPsnbwg7ZuEXCIgPSBcIjMgZGF5c1wiICsgXCLtm4RcIiAoXCJsYXRlclwiKSA9IFwiaW4gMyBkYXlzXCIpLCBub3QgRW5nbGlzaCdzIHByZWZpeFxuLy8gXCJpbiAzIGRheXNcIiAtLSBzbyBpbm1pbnV0ZXMvaW5kYXlzL2V0Yy4gYW5kIGRheXNhZ28vd2Vla3NhZ28vZXRjLiBiZWxvdyBhcmVcbi8vIGJ1aWx0IHN1ZmZpeC1zdHlsZSwgdGhlIHNhbWUgbWVjaGFuaXNtIGFscmVhZHkgdXNlZCBmb3IgQ2hpbmVzZSAoc2VlXG4vLyB6aC50cydzIFwibGF0ZXJcIi9cImFnb3N1ZmZpeFwiIGNvbW1lbnRzKSwgcmF0aGVyIHRoYW4gbWlycm9yaW5nIHRoZSBFbmdsaXNoXG4vLyB0ZW1wbGF0ZSBsaXRlcmFsbHkuXG4vL1xuLy8gVU5WRVJJRklFRDogXCJhbmRcIi9cImF0XCIvXCJmcm9tXCIvXCJ0b1wiL1wib2ZcIiBiZWxvdyBkb24ndCBoYXZlIGFuIGVxdWl2YWxlbnQgaW5cbi8vIENyZWFtTnV0cycgZmlsZSAoaGlzIHRyYW5zbGF0b3IgZG9lc24ndCBzdXBwb3J0IGNvbWJpbmVkIGR1cmF0aW9ucyxcbi8vIHdlZWtkYXkrdGltZSwgb3IgZGF0ZSByYW5nZXMpIGFuZCBhcmUgbXkgb3duIGJlc3QtZWZmb3J0IHBpY2tzLCBub3Rcbi8vIGNoZWNrZWQgYnkgYSBLb3JlYW4gc3BlYWtlci4gS29yZWFuIG5vcm1hbGx5IGF0dGFjaGVzIHBhcnRpY2xlcyBsaWtlIOyXkFxuLy8gKFwiYXRcIikv67aA7YSwKFwiZnJvbVwiKS/quYzsp4AoXCJ0b1wiKS/snZgoXCJvZlwiKSBkaXJlY3RseSB0byB0aGUgcHJldmlvdXMgd29yZCB3aXRoXG4vLyBubyBzcGFjZSwgd2hpbGUgdGhpcyBwbHVnaW4ncyByZWdleCBwYXR0ZXJucyByZXF1aXJlIHRoZW0gYXMgYVxuLy8gc3BhY2Utc2VwYXJhdGVkIHN0YW5kYWxvbmUgd29yZCAtLSBzbyBcIm5leHQgTW9uZGF5IGF0IDNwbVwiLSwgXCJmcm9tIE1vbmRheVxuLy8gdG8gRnJpZGF5XCItLCBcImluIDIgd2Vla3MgYW5kIDMgZGF5c1wiLSwgYW5kIFwidGhlIDE1dGggb2YgbmV4dCBtb250aFwiLXN0eWxlXG4vLyBjb21iaW5lZCBleHByZXNzaW9ucyBtYXkgbm90IG1hdGNoIG5hdHVyYWwgS29yZWFuIHBocmFzaW5nIGV2ZW4gdGhvdWdoIHRoZVxuLy8gc2ltcGxlIGV4cHJlc3Npb25zIGFib3ZlIGRvLiBUcmFja2VkIGluICM0MC5cbmNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIuyYpOuKmFwiLFxuICB0b21vcnJvdzogXCLrgrTsnbxcIixcbiAgeWVzdGVyZGF5OiBcIuyWtOygnFwiLFxuICBuZXh0OiBcIuuLpOydjFwiLFxuICBsYXN0OiBcIuyngOuCnFwiLFxuICB0aGlzOiBcIuydtOuyiFwiLFxuICBpbjogXCLslZ7snLzroZxcIixcbiAgc3VuZGF5OiBcIuydvOyalOydvFwiLFxuICBtb25kYXk6IFwi7JuU7JqU7J28XCIsXG4gIHR1ZXNkYXk6IFwi7ZmU7JqU7J28XCIsXG4gIHdlZG5lc2RheTogXCLsiJjsmpTsnbxcIixcbiAgdGh1cnNkYXk6IFwi66qp7JqU7J28XCIsXG4gIGZyaWRheTogXCLquIjsmpTsnbxcIixcbiAgc2F0dXJkYXk6IFwi7Yag7JqU7J28XCIsXG4gIGlubWludXRlczogXCIle3RpbWVEZWx0YX3rtoQg7ZuEXCIsXG4gIGluaG91cnM6IFwiJXt0aW1lRGVsdGF97Iuc6rCEIO2bhFwiLFxuICBpbmRheXM6IFwiJXt0aW1lRGVsdGF97J28IO2bhFwiLFxuICBpbndlZWtzOiBcIiV7dGltZURlbHRhfeyjvCDtm4RcIixcbiAgaW5tb250aHM6IFwiJXt0aW1lRGVsdGF96rCc7JuUIO2bhFwiLFxuICBkYXlzYWdvOiBcIiV7dGltZURlbHRhfeydvCDsoIRcIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF97KO8IOyghFwiLFxuICBtb250aHNhZ286IFwiJXt0aW1lRGVsdGF96rCc7JuUIOyghFwiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfeu2hCDsoIRcIixcbiAgaG91cnNhZ286IFwiJXt0aW1lRGVsdGF97Iuc6rCEIOyghFwiLFxuICAvLyBTdWZmaXggbWFya2VycyBmb3IgXCJOIHVuaXRcIiArIG1hcmtlciAoZS5nLiBcIjPsnbwg7ZuEXCIgPSBcImluIDMgZGF5c1wiLFxuICAvLyBcIjLso7wg7KCEXCIgPSBcIjIgd2Vla3MgYWdvXCIpIC0tIHZlcmlmaWVkIGFnYWluc3QgQ3JlYW1OdXRzJyBoYW5kbGVOYXRpdmVEYXRlRXhwcmVzc2lvbnMoKS9wcm9jZXNzTnVtYmVyUGF0dGVybigpLlxuICBsYXRlcjogXCLtm4R865KkXCIsXG4gIGFnb3N1ZmZpeDogXCLsoIRcIixcbiAgdGltZTogXCLsi5zqsIRcIixcbiAgbm93OiBcIuyngOq4iFwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF967aEXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF967aEXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX3si5zqsIRcIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX3si5zqsIRcIixcbiAgbWludXRlOiBcIuu2hFwiLFxuICBob3VyOiBcIuyLnOqwhFwiLFxuICBkYXk6IFwi7J28XCIsXG4gIHdlZWs6IFwi7KO8XCIsXG4gIG1vbnRoOiBcIuqwnOyblHzri6xcIixcbiAgeWVhcjogXCLrhYRcIixcbiAgYW5kOiBcIuq3uOumrOqzoFwiLFxuICBhdDogXCLsl5BcIixcbiAgZnJvbTogXCLrtoDthLBcIixcbiAgdG86IFwi6rmM7KeAXCIsXG4gIG9mOiBcIuydmFwiLFxuICBmaXJzdDogXCLssqtcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG4iLCJpbXBvcnQgaTE4biBmcm9tICdyb2RkZWgtaTE4bic7XG5cbmltcG9ydCBlbiBmcm9tICcuL2VuJztcbmltcG9ydCBqYSBmcm9tICcuL2phJztcbmltcG9ydCBmciBmcm9tICcuL2ZyJztcbmltcG9ydCBwdCBmcm9tICcuL3B0JztcbmltcG9ydCBkZSBmcm9tICcuL2RlJztcbmltcG9ydCBubCBmcm9tICcuL25sJztcbmltcG9ydCBlcyBmcm9tICcuL2VzJztcbmltcG9ydCBpdCBmcm9tICcuL2l0JztcbmltcG9ydCBydSBmcm9tICcuL3J1JztcbmltcG9ydCB1ayBmcm9tICcuL3VrJztcbmltcG9ydCB6aCBmcm9tICcuL3poJztcbmltcG9ydCBrbyBmcm9tICcuL2tvJztcblxuY29uc3Qgbm90Rm91bmREZWZhdWx0ID0gXCJOT1RGT1VORFwiIGFzIGNvbnN0O1xuXG50eXBlIFRyYW5zbGF0b3IgPSAoa2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nLCB2YXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBzdHJpbmc7XG5cbi8vIENhY2hlIGRlcyB0cmFkdWN0ZXVycyBwb3VyIMOpdml0ZXIgZGUgbGVzIHJlY3LDqWVyIMOgIGNoYXF1ZSBhcHBlbFxuLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiB0cmFuc2xhdG9ycyBhcmUgY3JlYXRlZCBvbmNlIGFuZCByZXVzZWRcbmNvbnN0IHRyYW5zbGF0b3JDYWNoZTogUmVjb3JkPHN0cmluZywgVHJhbnNsYXRvcj4gPSB7fTtcblxuLy8gU2hhcGUgc2hhcmVkIGJ5IGV2ZXJ5IGxhbmd1YWdlIGRpY3Q6IHNhbWUga2V5cyBhcyBgZW5gLCBidXQgZWFjaCBsYW5ndWFnZVxuLy8gaGFzIGl0cyBvd24gc3RyaW5nIHZhbHVlcyAobm90IGBlbmAncyBleGFjdCBsaXRlcmFsIHRleHQpIC0tIHVzaW5nXG4vLyBgdHlwZW9mIGVuYCBkaXJlY3RseSBoZXJlIHdvdWxkIGNvbXBhcmUgZXZlcnkgb3RoZXIgbGFuZ3VhZ2UncyB0ZXh0XG4vLyBhZ2FpbnN0IGBlbmAncyBsaXRlcmFsIEVuZ2xpc2ggc3RyaW5ncyBhbmQgYWx3YXlzIGZhaWwuXG50eXBlIExhbmdEaWN0ID0geyByZWFkb25seSBbSyBpbiBrZXlvZiB0eXBlb2YgZW5dOiBzdHJpbmcgfTtcblxuLy8gTWFwIGRlcyBtb2R1bGVzIGRlIGxhbmd1ZSBwb3VyIGZhY2lsaXRlciBsJ2FjY8Ooc1xuY29uc3QgbGFuZ3VhZ2VNb2R1bGVzOiBSZWNvcmQ8c3RyaW5nLCBMYW5nRGljdD4gPSB7XG4gIGVuLFxuICBqYSxcbiAgZnIsXG4gIHB0LFxuICBkZSxcbiAgbmwsXG4gIGVzLFxuICBpdCxcbiAgcnUsXG4gIHVrLFxuICAnemguaGFudCc6IHpoLFxuICBrbyxcbn07XG5cbi8qKlxuICogT2J0aWVudCB1biB0cmFkdWN0ZXVyIHBvdXIgdW5lIGxhbmd1ZSBkb25uw6llIChhdmVjIGNhY2hlKVxuICogR2V0cyBhIHRyYW5zbGF0b3IgZm9yIGEgZ2l2ZW4gbGFuZ3VhZ2UgKGNhY2hlZClcbiAqL1xuZnVuY3Rpb24gZ2V0VHJhbnNsYXRvcihsYW5nOiBzdHJpbmcpOiBUcmFuc2xhdG9yIHtcbiAgaWYgKCF0cmFuc2xhdG9yQ2FjaGVbbGFuZ10pIHtcbiAgICBjb25zdCBsYW5ndWFnZU1vZHVsZSA9IGxhbmd1YWdlTW9kdWxlc1tsYW5nXTtcbiAgICBpZiAobGFuZ3VhZ2VNb2R1bGUpIHtcbiAgICAgIC8vIHJvZGRlaC1pMThuJ3Mgc2hpcHBlZCB0eXBlcyBkZWNsYXJlIHRoZSAybmQgY2FsbCBhcmd1bWVudCBhc1xuICAgICAgLy8gYG51bWJlciB8IEZvcm1hdHRpbmdDb250ZXh0YCwgYnV0IGl0cyBhY3R1YWwgcnVudGltZSBBUEkgKHVzZWRcbiAgICAgIC8vIHRocm91Z2hvdXQgdGhpcyBmaWxlKSBhbHNvIGFjY2VwdHMgYSBwbGFpbiBzdHJpbmcgZGVmYXVsdCB2YWx1ZSAtLVxuICAgICAgLy8gdGhhdCBvdmVybG9hZCBqdXN0IGlzbid0IHJlZmxlY3RlZCBpbiBpdHMgLmQudHMsIGhlbmNlIHRoZSBjYXN0LlxuICAgICAgdHJhbnNsYXRvckNhY2hlW2xhbmddID0gaTE4bi5jcmVhdGUoeyB2YWx1ZXM6IGxhbmd1YWdlTW9kdWxlIH0pIGFzIHVua25vd24gYXMgVHJhbnNsYXRvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgdmVycyBsJ2FuZ2xhaXMgc2kgbGEgbGFuZ3VlIG4nZXN0IHBhcyB0cm91dsOpZVxuICAgICAgaWYgKCF0cmFuc2xhdG9yQ2FjaGVbJ2VuJ10pIHtcbiAgICAgICAgdHJhbnNsYXRvckNhY2hlWydlbiddID0gaTE4bi5jcmVhdGUoeyB2YWx1ZXM6IGVuIH0pIGFzIHVua25vd24gYXMgVHJhbnNsYXRvcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cmFuc2xhdG9yQ2FjaGVbJ2VuJ107XG4gICAgfVxuICB9XG4gIHJldHVybiB0cmFuc2xhdG9yQ2FjaGVbbGFuZ107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHQoa2V5OiBzdHJpbmcsIGxhbmc6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XG4gIGNvbnN0IGxhbmdUcmFuc2xhdG9yID0gZ2V0VHJhbnNsYXRvcihsYW5nKTtcbiAgY29uc3QgdHJhbnNsYXRpb24gPSBsYW5nVHJhbnNsYXRvcihrZXksIG5vdEZvdW5kRGVmYXVsdCwgdmFyaWFibGVzKTtcbiAgXG4gIGlmICh0cmFuc2xhdGlvbiA9PT0gbm90Rm91bmREZWZhdWx0KSB7XG4gICAgY29uc3QgZW5UcmFuc2xhdG9yID0gZ2V0VHJhbnNsYXRvcihcImVuXCIpO1xuICAgIHJldHVybiBlblRyYW5zbGF0b3Ioa2V5LCBub3RGb3VuZERlZmF1bHQsIHZhcmlhYmxlcyk7XG4gIH1cbiAgcmV0dXJuIHRyYW5zbGF0aW9uO1xufSIsImltcG9ydCB0IGZyb20gXCIuL2xhbmcvaGVscGVyXCI7XG5cbi8qKlxuICogQ29sbGVjdHMgYW5kIGNhY2hlcyB0cmFuc2xhdGVkIHdvcmRzIGFjcm9zcyBtdWx0aXBsZSBsYW5ndWFnZXMsIGFuZCBidWlsZHNcbiAqIHJlZ2V4IGFsdGVybmF0aW9ucyBmcm9tIHRoZW0uXG4gKlxuICogRXZlcnkgc3VwcG9ydGVkIGxhbmd1YWdlIGNhbiBkZWZpbmUgc2V2ZXJhbCB2YXJpYW50cyBmb3IgdGhlIHNhbWUgY29uY2VwdFxuICogKGUuZy4gRnJlbmNoIFwibmV4dFwiOiBcInByb2NoYWlufHByb2NoYWluZXxzdWl2YW50fHN1aXZhbnRlXCIpLCBhbmQgZXZlcnlcbiAqIGZlYXR1cmUgb2YgdGhlIHBhcnNlciBuZWVkcyB0byBnYXRoZXIgdGhvc2UgdmFyaWFudHMgYWNyb3NzICphbGwqIGFjdGl2ZVxuICogbGFuZ3VhZ2VzIGJlZm9yZSBidWlsZGluZyBhIHJlZ2V4IG91dCBvZiB0aGVtLiBUaGlzIGNsYXNzIGNlbnRyYWxpemVzIHRoYXRcbiAqIFwibG9vayB1cCBhIHRyYW5zbGF0aW9uIGtleSBpbiBldmVyeSBhY3RpdmUgbGFuZ3VhZ2UsIHNwbGl0IG11bHRpLXZhcmlhbnRcbiAqIGVudHJpZXMgb24gJ3wnLCB0cmltLCBkZWR1cGVcIiBwYXR0ZXJuLCB3aGljaCB1c2VkIHRvIGJlIHJlcGVhdGVkIGlubGluZVxuICogcm91Z2hseSBmaWZ0ZWVuIHRpbWVzIHRocm91Z2hvdXQgTkxEUGFyc2VyIChhbmQsIGxlc3MgZXhoYXVzdGl2ZWx5LCBpblxuICogQ29udGV4dEFuYWx5emVyIGFuZCB1dGlscy50cykuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkNvbGxlY3RvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRpb25DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZXM6IHN0cmluZ1tdKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgdHJhbnNsYXRpb24gd2l0aCBjYWNoaW5nIGZvciBwZXJmb3JtYW5jZS5cbiAgICovXG4gIHRyYW5zbGF0ZShrZXk6IHN0cmluZywgbGFuZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGAke2xhbmd9OiR7a2V5fWA7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy50cmFuc2xhdGlvbkNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICBjb25zdCB0cmFuc2xhdGVkID0gdChrZXksIGxhbmcpO1xuICAgIHRoaXMudHJhbnNsYXRpb25DYWNoZS5zZXQoY2FjaGVLZXksIHRyYW5zbGF0ZWQpO1xuICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3RzIGV2ZXJ5IHZhcmlhbnQgb2YgYGtleWAncyB0cmFuc2xhdGlvbiBhY3Jvc3MgYWxsIGFjdGl2ZSBsYW5ndWFnZXMsXG4gICAqIHNwbGl0dGluZyBtdWx0aS12YXJpYW50IGVudHJpZXMgKGUuZy4gXCJhfGJ8Y1wiKSBvbiBcInxcIiwgdHJpbW1pbmcsIGFuZFxuICAgKiBkZS1kdXBsaWNhdGluZy4gRW50cmllcyB0aGF0IGFyZW4ndCBmb3VuZCBmb3IgYSBnaXZlbiBsYW5ndWFnZSBhcmUgc2tpcHBlZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRyYW5zbGF0aW9uIGtleSAoZS5nLiBcIm5leHRcIiwgXCJtb25kYXlcIiwgXCJpbmRheXNcIilcbiAgICogQHBhcmFtIG9wdGlvbnMubG93ZXJjYXNlIC0gTG93ZXJjYXNlIGVhY2ggdmFyaWFudCAoZGVmYXVsdDogZmFsc2UpXG4gICAqL1xuICBjb2xsZWN0V29yZHMoa2V5OiBzdHJpbmcsIG9wdGlvbnM6IHsgbG93ZXJjYXNlPzogYm9vbGVhbiB9ID0ge30pOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgd29yZHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBsYW5nIG9mIHRoaXMubGFuZ3VhZ2VzKSB7XG4gICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRoaXMudHJhbnNsYXRlKGtleSwgbGFuZyk7XG4gICAgICBpZiAoIXRyYW5zbGF0aW9uIHx8IHRyYW5zbGF0aW9uID09PSBcIk5PVEZPVU5EXCIpIGNvbnRpbnVlO1xuXG4gICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgdHJhbnNsYXRpb24uc3BsaXQoXCJ8XCIpKSB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSB2YXJpYW50LnRyaW0oKTtcbiAgICAgICAgLy8gTm8gY3VycmVudCBsYW5ndWFnZSBkaWN0aW9uYXJ5IGVudHJ5IGhhcyBhbiBlbXB0eSBcInx8XCIgc2VnbWVudCBvclxuICAgICAgICAvLyBhIHRyYWlsaW5nL2xlYWRpbmcgXCJ8XCIsIHNvIHRoaXMgZ3VhcmQgY2FuJ3QgYWN0dWFsbHkgYmUgZmFsc2Ugd2l0aFxuICAgICAgICAvLyByZWFsIGRhdGEgLS0ga2VwdCBpbiBjYXNlIGEgZnV0dXJlIGRpY3Rpb25hcnkgZW50cnkgaXMgbWFsZm9ybWVkLlxuICAgICAgICBpZiAodHJpbW1lZCkge1xuICAgICAgICAgIHdvcmRzLnB1c2gob3B0aW9ucy5sb3dlcmNhc2UgPyB0cmltbWVkLnRvTG93ZXJDYXNlKCkgOiB0cmltbWVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQod29yZHMpXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSByZWdleCBhbHRlcm5hdGlvbiAoXCJhfGJ8Y1wiKSBmcm9tIGEgbGlzdCBvZiB3b3JkcywgZXNjYXBpbmcgcmVnZXhcbiAgICogc3BlY2lhbCBjaGFyYWN0ZXJzLlxuICAgKlxuICAgKiBMb25nZXN0IHdvcmRzIGFyZSBzb3J0ZWQgZmlyc3Q6IG90aGVyd2lzZSBhIHNob3J0ZXIgd29yZCB0aGF0IGlzIGEgcHJlZml4XG4gICAqIG9mIGEgbG9uZ2VyIG9uZSAoZS5nLiBGcmVuY2ggXCJwcm9jaGFpblwiIHZzIFwicHJvY2hhaW5lXCIpIGNhbiBtYXRjaCBmaXJzdFxuICAgKiBhbmQgbGVhdmUgdGhlIHJlbWFpbmluZyBsZXR0ZXJzIHRvIGJlIG1pcy1jYXB0dXJlZCBieSB3aGF0ZXZlciBjb21lcyBuZXh0XG4gICAqIGluIHRoZSBwYXR0ZXJuLlxuICAgKi9cbiAgYnVpbGRBbHRlcm5hdGlvbih3b3Jkczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IGVzY2FwZVJlZ2V4ID0gKHN0cjogc3RyaW5nKSA9PiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQod29yZHMpXVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAubWFwKGVzY2FwZVJlZ2V4KVxuICAgICAgLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZTogY29sbGVjdFdvcmRzKGtleSkgZm9sbG93ZWQgYnkgYnVpbGRBbHRlcm5hdGlvbigpIGluIG9uZSBjYWxsLlxuICAgKi9cbiAgYnVpbGRBbHRlcm5hdGlvbkZvcihrZXk6IHN0cmluZywgb3B0aW9uczogeyBsb3dlcmNhc2U/OiBib29sZWFuIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRBbHRlcm5hdGlvbih0aGlzLmNvbGxlY3RXb3JkcyhrZXksIG9wdGlvbnMpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQXBwLCBFZGl0b3IsIEVkaXRvclJhbmdlLCBFZGl0b3JQb3NpdGlvbiwgbm9ybWFsaXplUGF0aCwgVEZpbGUsIE1hcmtkb3duVmlldywgV29ya3NwYWNlIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQge1xuICBjcmVhdGVEYWlseU5vdGUsXG4gIGdldEFsbERhaWx5Tm90ZXMsXG4gIGdldERhaWx5Tm90ZSxcbn0gZnJvbSBcIm9ic2lkaWFuLWRhaWx5LW5vdGVzLWludGVyZmFjZVwiO1xuXG5pbXBvcnQgeyBEYXlPZldlZWsgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgRGF0ZUZvcm1hdHRlciB9IGZyb20gXCIuL2RhdGUtZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbkNvbGxlY3RvciB9IGZyb20gXCIuL3RyYW5zbGF0aW9uLWNvbGxlY3RvclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5cbi8vIFR5cGUgYWxpYXMgZm9yIE1vbWVudCBmcm9tIHRoZSBtb21lbnQgbGlicmFyeSBidW5kbGVkIHdpdGggT2JzaWRpYW5cbi8vIFVzaW5nIHRoZSB0eXBlIGZyb20gdGhlIG1vbWVudCBsaWJyYXJ5IHR5cGVzIHNpbmNlIG1vbWVudCBpcyBidW5kbGVkIHdpdGggT2JzaWRpYW5cbi8vIFRoZSBtb21lbnQgcGFja2FnZSBpcyBidW5kbGVkIHdpdGggT2JzaWRpYW4sIGJ1dCB0aGUgTW9tZW50IHR5cGUgaXMgbm90IGV4cG9ydGVkIGZyb20gb2JzaWRpYW4gbW9kdWxlXG50eXBlIE1vbWVudCA9IGltcG9ydChcIm1vbWVudFwiKS5Nb21lbnQ7XG5cbmNvbnN0IGRheXNPZldlZWs6IE9taXQ8RGF5T2ZXZWVrLCBcImxvY2FsZS1kZWZhdWx0XCI+W10gPSBbXG4gIFwic3VuZGF5XCIsXG4gIFwibW9uZGF5XCIsXG4gIFwidHVlc2RheVwiLFxuICBcIndlZG5lc2RheVwiLFxuICBcInRodXJzZGF5XCIsXG4gIFwiZnJpZGF5XCIsXG4gIFwic2F0dXJkYXlcIixcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdvcmRCb3VuZGFyaWVzKGVkaXRvcjogRWRpdG9yKTogRWRpdG9yUmFuZ2Uge1xuICBjb25zdCBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yKCk7XG5cbiAgY29uc3QgcG9zID0gZWRpdG9yLnBvc1RvT2Zmc2V0KGN1cnNvcik7XG4gIGNvbnN0IGVkaXRvcldpdGhDTSA9IGVkaXRvciBhcyBFZGl0b3IgJiB7IGNtPzogeyBzdGF0ZTogeyB3b3JkQXQ6IChwb3M6IG51bWJlcikgPT4geyBmcm9tOiBudW1iZXI7IHRvOiBudW1iZXIgfSB8IG51bGwgfSB9IH07XG4gIC8vIHdvcmRBdCgpIHJldHVybnMgbnVsbCB3aGVuIHRoZSBjdXJzb3IgaXNuJ3QgaW5zaWRlL2FkamFjZW50IHRvIGEgd29yZFxuICAvLyAoZW1wdHkgbGluZSwgd2hpdGVzcGFjZSwgcHVuY3R1YXRpb24tb25seSB0ZXh0KSAtLSBmYWxsIGJhY2sgdG8gYVxuICAvLyB6ZXJvLXdpZHRoIHJhbmdlIGF0IHRoZSBjdXJzb3IgaW5zdGVhZCBvZiBjcmFzaGluZy5cbiAgY29uc3Qgd29yZCA9IGVkaXRvcldpdGhDTS5jbT8uc3RhdGUud29yZEF0KHBvcyk7XG4gIGlmICghd29yZCkge1xuICAgIHJldHVybiB7IGZyb206IGN1cnNvciwgdG86IGN1cnNvciB9O1xuICB9XG4gIGNvbnN0IHdvcmRTdGFydCA9IGVkaXRvci5vZmZzZXRUb1Bvcyh3b3JkLmZyb20pO1xuICBjb25zdCB3b3JkRW5kID0gZWRpdG9yLm9mZnNldFRvUG9zKHdvcmQudG8pO1xuICByZXR1cm4ge1xuICAgIGZyb206IHdvcmRTdGFydCxcbiAgICB0bzogd29yZEVuZCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGVkVGV4dChlZGl0b3I6IEVkaXRvcik6IHN0cmluZyB7XG4gIGlmIChlZGl0b3Iuc29tZXRoaW5nU2VsZWN0ZWQoKSkge1xuICAgIHJldHVybiBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgd29yZEJvdW5kYXJpZXMgPSBnZXRXb3JkQm91bmRhcmllcyhlZGl0b3IpO1xuICAgIC8vIFNlbGVjdCB0aGUgd29yZCBhdCBjdXJzb3IgcG9zaXRpb24gdG8gZW5hYmxlIHRleHQgcmVwbGFjZW1lbnRcbiAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGRhdGUgcGFyc2luZyBjb21tYW5kcyB0byB3b3JrIGNvcnJlY3RseVxuICAgIGVkaXRvci5zZXRTZWxlY3Rpb24od29yZEJvdW5kYXJpZXMuZnJvbSwgd29yZEJvdW5kYXJpZXMudG8pO1xuICAgIHJldHVybiBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkanVzdEN1cnNvcihcbiAgZWRpdG9yOiBFZGl0b3IsXG4gIGN1cnNvcjogRWRpdG9yUG9zaXRpb24sXG4gIG5ld1N0cjogc3RyaW5nLFxuICBvbGRTdHI6IHN0cmluZ1xuKTogdm9pZCB7XG4gIGNvbnN0IGN1cnNvck9mZnNldCA9IG5ld1N0ci5sZW5ndGggLSBvbGRTdHIubGVuZ3RoO1xuICBlZGl0b3Iuc2V0Q3Vyc29yKHtcbiAgICBsaW5lOiBjdXJzb3IubGluZSxcbiAgICBjaDogY3Vyc29yLmNoICsgY3Vyc29yT2Zmc2V0LFxuICB9KTtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIHBvdXIgY29tcGF0aWJpbGl0w6kgYXZlYyBsZSBjb2RlIGV4aXN0YW50XG4gKiBAZGVwcmVjYXRlZCBVdGlsaXNlciBEYXRlRm9ybWF0dGVyLmZvcm1hdCgpIGRpcmVjdGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXR0ZWREYXRlKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIERhdGVGb3JtYXR0ZXIuZm9ybWF0KGRhdGUsIGZvcm1hdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF5T2ZNb250aCh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCAwKS5nZXREYXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRydXRoeShmbGFnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIFtcInlcIiwgXCJ5ZXNcIiwgXCIxXCIsIFwidFwiLCBcInRydWVcIl0uaW5kZXhPZihmbGFnLnRvTG93ZXJDYXNlKCkpID49IDA7XG59XG5cbi8qKlxuICogVmFsaWRlIHVuIGZvcm1hdCBNb21lbnQuanMgZXQgcmV0b3VybmUgdW4gcsOpc3VsdGF0IGF2ZWMgcHLDqXZpc3VhbGlzYXRpb25cbiAqIEBwYXJhbSBmb3JtYXQgLSBMZSBmb3JtYXQgTW9tZW50LmpzIMOgIHZhbGlkZXJcbiAqIEByZXR1cm5zIFVuIG9iamV0IGNvbnRlbmFudCB2YWxpZCAoYm9vbMOpZW4pLCBlcnJvciAob3B0aW9ubmVsKSwgcHJldmlldyAob3B0aW9ubmVsKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVNb21lbnRGb3JtYXQoZm9ybWF0OiBzdHJpbmcpOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZzsgcHJldmlldz86IHN0cmluZyB9IHtcbiAgaWYgKCFmb3JtYXQgfHwgdHlwZW9mIGZvcm1hdCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBcIkxlIGZvcm1hdCBuZSBwZXV0IHBhcyDDqnRyZSB2aWRlXCIgfTtcbiAgfVxuXG4gIC8vIExpbWl0ZXIgbGEgbG9uZ3VldXIgZHUgZm9ybWF0IHBvdXIgw6l2aXRlciBsZXMgYXR0YXF1ZXNcbiAgY29uc3QgTUFYX0ZPUk1BVF9MRU5HVEggPSAxMDA7XG4gIGlmIChmb3JtYXQubGVuZ3RoID4gTUFYX0ZPUk1BVF9MRU5HVEgpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBgTGUgZm9ybWF0IG5lIHBldXQgcGFzIGTDqXBhc3NlciAke01BWF9GT1JNQVRfTEVOR1RIfSBjYXJhY3TDqHJlc2AgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdGVzdERhdGUgPSBtb21lbnQoKTtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSB0ZXN0RGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICBcbiAgICAvLyBWw6lyaWZpZXIgcXVlIGxlIGZvcm1hdCBwcm9kdWl0IHF1ZWxxdWUgY2hvc2UgZGUgdmFsaWRlXG4gICAgaWYgKCFmb3JtYXR0ZWQgfHwgZm9ybWF0dGVkID09PSBmb3JtYXQpIHtcbiAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6IFwiRm9ybWF0IGludmFsaWRlIG91IG5vbiByZWNvbm51XCIgfTtcbiAgICB9XG4gICAgXG4gICAgLy8gVsOpcmlmaWVyIHF1ZSBsZSBmb3JtYXQgbmUgY29udGllbnQgcGFzIGRlIGNhcmFjdMOocmVzIGRhbmdlcmV1eFxuICAgIC8vIE1vbWVudC5qcyB1dGlsaXNlIGRlcyBjYXJhY3TDqHJlcyBzcMOpY2lhdXgsIG1haXMgb24gdmV1dCDDqXZpdGVyIGxlcyBpbmplY3Rpb25zXG4gICAgLy8gTGVzIGZvcm1hdHMgTW9tZW50LmpzIHZhbGlkZXMgY29udGllbm5lbnQgcHJpbmNpcGFsZW1lbnQgZGVzIGxldHRyZXMsIGNoaWZmcmVzIGV0IGNhcmFjdMOocmVzIGRlIHBvbmN0dWF0aW9uXG4gICAgY29uc3QgZGFuZ2Vyb3VzUGF0dGVybiA9IC9bPD5cIidgXS87XG4gICAgaWYgKGRhbmdlcm91c1BhdHRlcm4udGVzdChmb3JtYXQpKSB7XG4gICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBcIkxlIGZvcm1hdCBjb250aWVudCBkZXMgY2FyYWN0w6hyZXMgbm9uIGF1dG9yaXPDqXNcIiB9O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgcHJldmlldzogZm9ybWF0dGVkIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkVycmV1ciBsb3JzIGRlIGxhIHZhbGlkYXRpb24gZHUgZm9ybWF0XCIgfTtcbiAgfVxufVxuXG4vKipcbiAqIFNhbml0aXplIGV0IHZhbGlkZSB1bmUgZW50csOpZSB1dGlsaXNhdGV1ciBwb3VyIMOpdml0ZXIgbGVzIGluamVjdGlvbnNcbiAqIEBwYXJhbSBpbnB1dCAtIEwnZW50csOpZSDDoCBzYW5pdGl6ZXJcbiAqIEBwYXJhbSBtYXhMZW5ndGggLSBMb25ndWV1ciBtYXhpbWFsZSBhdXRvcmlzw6llIChkw6lmYXV0OiAyMDApXG4gKiBAcmV0dXJucyBMJ2VudHLDqWUgc2FuaXRpesOpZSBvdSBudWxsIHNpIGludmFsaWRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUlucHV0KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsLCBtYXhMZW5ndGggPSAyMDApOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFpbnB1dCB8fCB0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBMaW1pdGVyIGxhIGxvbmd1ZXVyXG4gIGNvbnN0IHRyaW1tZWQgPSBpbnB1dC50cmltKCkuc3Vic3RyaW5nKDAsIG1heExlbmd0aCk7XG4gIFxuICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFJlamV0ZXIgbGVzIGNhcmFjdMOocmVzIGRlIGNvbnRyw7RsZSBldCBsZXMgY2FyYWN0w6hyZXMgc2FucyB1c2FnZSBsw6lnaXRpbWUgZGFucyB1bmVcbiAgLy8gZXhwcmVzc2lvbiBkZSBkYXRlIGVuIGxhbmdhZ2UgbmF0dXJlbCAoZXg6IFwiPFwiLCBcIj5cIiwgXCJgXCIpLiBPbiBuJ3V0aWxpc2UgcGFzIGRlIHdoaXRlbGlzdFxuICAvLyBkZSBzY3JpcHRzIGNhciBsZXMgZGF0ZXMgZW4gbGFuZ2FnZSBuYXR1cmVsIHV0aWxpc2VudCBkZXMgbGV0dHJlcyBkZSB0b3V0ZXMgbGVzIGxhbmd1ZXNcbiAgLy8gc3VwcG9ydMOpZXMgKGxhdGluLCBjeXJpbGxpcXVlLCBqYXBvbmFpcywgY2hpbm9pcy4uLiksIGFpbnNpIHF1ZSBsJ2Fwb3N0cm9waGVcbiAgLy8gKGV4OiBcIkF1am91cmQnaHVpXCIgZW4gZnJhbsOnYWlzLCBcItCfJ9GP0YLQvdC40YbRllwiIGVuIHVrcmFpbmllbikuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4IC0tIGludGVudGlvbmFsOiB0aGlzIHJhbmdlIGlzIHRoZSBhY3R1YWwgc2FuaXRpemF0aW9uIHRhcmdldCwgbm90IGEgdHlwby5cbiAgY29uc3QgaW52YWxpZENoYXJzUGF0dGVybiA9IC9bPD5gXFx1MDAwMC1cXHUwMDFGXFx1MDA3Ri1cXHUwMDlGXS87XG5cbiAgaWYgKGludmFsaWRDaGFyc1BhdHRlcm4udGVzdCh0cmltbWVkKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRyaW1tZWQ7XG59XG5cbi8qKlxuICogVmFsaWRlIHVuIHBhcmFtw6h0cmUgVVJJIHBvdXIgw6l2aXRlciBsZXMgaW5qZWN0aW9uc1xuICogQHBhcmFtIHBhcmFtIC0gTGUgcGFyYW3DqHRyZSDDoCB2YWxpZGVyXG4gKiBAcGFyYW0gbWF4TGVuZ3RoIC0gTG9uZ3VldXIgbWF4aW1hbGUgYXV0b3Jpc8OpZSAoZMOpZmF1dDogMTAwKVxuICogQHJldHVybnMgTGUgcGFyYW3DqHRyZSB2YWxpZMOpIG91IG51bGwgc2kgaW52YWxpZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVXJpUGFyYW0ocGFyYW06IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwsIG1heExlbmd0aCA9IDEwMCk6IHN0cmluZyB8IG51bGwge1xuICByZXR1cm4gc2FuaXRpemVJbnB1dChwYXJhbSwgbWF4TGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtOdW1iZXIoZGF5T2ZXZWVrOiBPbWl0PERheU9mV2VlaywgXCJsb2NhbGUtZGVmYXVsdFwiPik6IG51bWJlciB7XG4gIHJldHVybiBkYXlzT2ZXZWVrLmluZGV4T2YoZGF5T2ZXZWVrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsZVdlZWtTdGFydCgpOiBPbWl0PERheU9mV2VlaywgXCJsb2NhbGUtZGVmYXVsdFwiPiB7XG4gIGNvbnN0IGxvY2FsZURhdGEgPSBtb21lbnQubG9jYWxlRGF0YSgpIGFzIHsgX3dlZWs/OiB7IGRvdzogbnVtYmVyIH0gfTtcbiAgY29uc3Qgc3RhcnRPZldlZWsgPSBsb2NhbGVEYXRhLl93ZWVrPy5kb3cgPz8gMDtcbiAgcmV0dXJuIGRheXNPZldlZWtbc3RhcnRPZldlZWtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVNYXJrZG93bkxpbmsoYXBwOiBBcHAsIHN1YnBhdGg6IHN0cmluZywgYWxpYXM/OiBzdHJpbmcpIHtcbiAgY29uc3QgdmF1bHRXaXRoQ29uZmlnID0gYXBwLnZhdWx0IGFzIHR5cGVvZiBhcHAudmF1bHQgJiB7IGdldENvbmZpZzogKGtleTogc3RyaW5nKSA9PiBib29sZWFuIH07XG4gIGNvbnN0IHVzZU1hcmtkb3duTGlua3MgPSB2YXVsdFdpdGhDb25maWcuZ2V0Q29uZmlnKFwidXNlTWFya2Rvd25MaW5rc1wiKTtcbiAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVBhdGgoc3VicGF0aCk7XG5cbiAgaWYgKHVzZU1hcmtkb3duTGlua3MpIHtcbiAgICBpZiAoYWxpYXMpIHtcbiAgICAgIHJldHVybiBgWyR7YWxpYXN9XSgke3BhdGgucmVwbGFjZSgvIC9nLCBcIiUyMFwiKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBbJHtzdWJwYXRofV0oJHtwYXRofSlgO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYWxpYXMpIHtcbiAgICAgIHJldHVybiBgW1ske3BhdGh9fCR7YWxpYXN9XV1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYFtbJHtwYXRofV1dYDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlRGFpbHlOb3RlKGRhdGU6IE1vbWVudCk6IFByb21pc2U8VEZpbGUgfCBudWxsPiB7XG4gIC8vIEJvcnJvd2VkIGZyb20gdGhlIFNsYXRlZCBwbHVnaW46XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90Z3Jvc2luZ2VyL3NsYXRlZC1vYnNpZGlhbi9ibG9iL21haW4vc3JjL3ZhdWx0LnRzI0wxN1xuICBjb25zdCBkZXNpcmVkTm90ZSA9IGdldERhaWx5Tm90ZShkYXRlLCBnZXRBbGxEYWlseU5vdGVzKCkpO1xuICBpZiAoZGVzaXJlZE5vdGUpIHtcbiAgICByZXR1cm4gZGVzaXJlZE5vdGU7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZURhaWx5Tm90ZShkYXRlKTtcbn1cblxuLy8gU291cmNlIGBjaHJvbm9gOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3dhbmFzaXQvY2hyb25vL2Jsb2IvNDdmMTFkYTZiNjU2Y2Q1Y2I2MWYyNDZlOGNjYTcwNjk4MzIwOGRlZC9zcmMvdXRpbHMvcGF0dGVybi50cyNMOFxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LCBXYW5hc2l0IFRhbmFraXRydW5ncnVhbmdcbnR5cGUgRGljdGlvbmFyeUxpa2UgPSBzdHJpbmdbXSB8IHsgW3dvcmQ6IHN0cmluZ106IHVua25vd24gfSB8IE1hcDxzdHJpbmcsIHVua25vd24+O1xuXG4vLyBUaGUgQXJyYXkvTWFwIGJyYW5jaGVzIGJlbG93IGFyZSB1bnJlYWNoYWJsZSB3aXRoIHRoaXMgZmlsZSdzIG9ubHkgY2FsbGVyXG4vLyAobWF0Y2hBbnlQYXR0ZXJuKCkgaXMgb25seSBldmVyIGludm9rZWQgd2l0aCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWSwgYVxuLy8gcGxhaW4gb2JqZWN0KSAtLSBrZXB0IGJlY2F1c2UgdGhleSdyZSBjb3BpZWQgdmVyYmF0aW0gZnJvbSBjaHJvbm8tbm9kZSdzXG4vLyBtb3JlIGdlbmVyaWNhbGx5LXVzZWQgb3JpZ2luYWwsIG5vdCBiZWNhdXNlIHRoZXkncmUgY3VycmVudGx5IGV4ZXJjaXNlZC5cbmZ1bmN0aW9uIGV4dHJhY3RUZXJtcyhkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5TGlrZSk6IHN0cmluZ1tdIHtcbiAgbGV0IGtleXM6IHN0cmluZ1tdO1xuICBpZiAoZGljdGlvbmFyeSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAga2V5cyA9IFsuLi5kaWN0aW9uYXJ5XTtcbiAgfSBlbHNlIGlmIChkaWN0aW9uYXJ5IGluc3RhbmNlb2YgTWFwKSB7XG4gICAga2V5cyA9IEFycmF5LmZyb20oZGljdGlvbmFyeS5rZXlzKCkpO1xuICB9IGVsc2Uge1xuICAgIGtleXMgPSBPYmplY3Qua2V5cyhkaWN0aW9uYXJ5KTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuZnVuY3Rpb24gbWF0Y2hBbnlQYXR0ZXJuKGRpY3Rpb25hcnk6IERpY3Rpb25hcnlMaWtlKTogc3RyaW5nIHtcbiAgY29uc3Qgam9pbmVkVGVybXMgPSBleHRyYWN0VGVybXMoZGljdGlvbmFyeSlcbiAgICAuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClcbiAgICAuam9pbihcInxcIilcbiAgICAucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIik7XG5cbiAgcmV0dXJuIGAoPzoke2pvaW5lZFRlcm1zfSlgO1xufVxuXG5jb25zdCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWTogeyBbd29yZDogc3RyaW5nXTogbnVtYmVyIH0gPSB7XG4gIGZpcnN0OiAxLFxuICBzZWNvbmQ6IDIsXG4gIHRoaXJkOiAzLFxuICBmb3VydGg6IDQsXG4gIGZpZnRoOiA1LFxuICBzaXh0aDogNixcbiAgc2V2ZW50aDogNyxcbiAgZWlnaHRoOiA4LFxuICBuaW50aDogOSxcbiAgdGVudGg6IDEwLFxuICBlbGV2ZW50aDogMTEsXG4gIHR3ZWxmdGg6IDEyLFxuICB0aGlydGVlbnRoOiAxMyxcbiAgZm91cnRlZW50aDogMTQsXG4gIGZpZnRlZW50aDogMTUsXG4gIHNpeHRlZW50aDogMTYsXG4gIHNldmVudGVlbnRoOiAxNyxcbiAgZWlnaHRlZW50aDogMTgsXG4gIG5pbmV0ZWVudGg6IDE5LFxuICB0d2VudGlldGg6IDIwLFxuICBcInR3ZW50eSBmaXJzdFwiOiAyMSxcbiAgXCJ0d2VudHktZmlyc3RcIjogMjEsXG4gIFwidHdlbnR5IHNlY29uZFwiOiAyMixcbiAgXCJ0d2VudHktc2Vjb25kXCI6IDIyLFxuICBcInR3ZW50eSB0aGlyZFwiOiAyMyxcbiAgXCJ0d2VudHktdGhpcmRcIjogMjMsXG4gIFwidHdlbnR5IGZvdXJ0aFwiOiAyNCxcbiAgXCJ0d2VudHktZm91cnRoXCI6IDI0LFxuICBcInR3ZW50eSBmaWZ0aFwiOiAyNSxcbiAgXCJ0d2VudHktZmlmdGhcIjogMjUsXG4gIFwidHdlbnR5IHNpeHRoXCI6IDI2LFxuICBcInR3ZW50eS1zaXh0aFwiOiAyNixcbiAgXCJ0d2VudHkgc2V2ZW50aFwiOiAyNyxcbiAgXCJ0d2VudHktc2V2ZW50aFwiOiAyNyxcbiAgXCJ0d2VudHkgZWlnaHRoXCI6IDI4LFxuICBcInR3ZW50eS1laWdodGhcIjogMjgsXG4gIFwidHdlbnR5IG5pbnRoXCI6IDI5LFxuICBcInR3ZW50eS1uaW50aFwiOiAyOSxcbiAgdGhpcnRpZXRoOiAzMCxcbiAgXCJ0aGlydHkgZmlyc3RcIjogMzEsXG4gIFwidGhpcnR5LWZpcnN0XCI6IDMxLFxufTtcblxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oXG4gIE9SRElOQUxfV09SRF9ESUNUSU9OQVJZXG4pfXxbMC05XXsxLDJ9KD86c3R8bmR8cmR8dGh8w6htZXzDqG1lfGVyfGV8ZXJ8ZXxcXFxcLik/KWA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoOiBzdHJpbmcpOiBudW1iZXIge1xuICBsZXQgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICB9XG5cbiAgLy8gUmVtb3ZlIG9yZGluYWwgc3VmZml4ZXM6IHN0LCBuZCwgcmQsIHRoLCDDqG1lLCBlciwgZSwgYW5kIHRyYWlsaW5nIGRvdFxuICBudW0gPSBudW0ucmVwbGFjZSgvKD86c3R8bmR8cmR8dGh8w6htZXxlcnxlfFxcLikkL2ksIFwiXCIpO1xuICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cblxuLyoqXG4gKiBEw6l0ZXJtaW5lIHNpIHVuZSBleHByZXNzaW9uIHRlbXBvcmVsbGUgcmVsYXRpdmUgY291cnRlIChtaW51dGVzL2hldXJlcykgZGV2cmFpdCBvbWV0dHJlIGxhIGRhdGVcbiAqIGNhciBlbGxlIHJlc3RlIGRhbnMgbGEgbcOqbWUgam91cm7DqWUgKGF1am91cmQnaHVpKVxuICogQHBhcmFtIHRleHQgLSBMZSB0ZXh0ZSBkZSBsJ2V4cHJlc3Npb24gdGVtcG9yZWxsZSAoZXg6IFwiZGFucyAxNSBtaW5cIiwgXCJpbiAyIGhvdXJzXCIsIFwiMzDliIbpkJjlvoxcIilcbiAqIEBwYXJhbSBsYW5ndWFnZXMgLSBMZXMgbGFuZ3VlcyBzdXBwb3J0w6llcyBwb3VyIGTDqXRlY3RlciBsZXMgcGF0dGVybnNcbiAqIEByZXR1cm5zIHRydWUgc2kgYydlc3QgdW5lIGV4cHJlc3Npb24gcmVsYXRpdmUgY291cnRlIHF1aSByZXN0ZSBhdWpvdXJkJ2h1aVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHRleHQ6IHN0cmluZywgbGFuZ3VhZ2VzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBsb3dlclRleHQgPSB0ZXh0LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICBjb25zdCB0YyA9IG5ldyBUcmFuc2xhdGlvbkNvbGxlY3RvcihsYW5ndWFnZXMpO1xuXG4gIGNvbnN0IGluUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoXCJpblwiKTtcbiAgY29uc3QgbWludXRlUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoXCJtaW51dGVcIik7XG4gIGNvbnN0IGhvdXJQYXR0ZXJuID0gdGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcImhvdXJcIik7XG4gIC8vIFN1ZmZpeC1zdHlsZSBsYW5ndWFnZXMgKGUuZy4gQ2hpbmVzZSBcIjMw5YiG6ZCY5b6MXCIpIG1hcmsgXCJsYXRlclwiIGluc3RlYWQgb2ZcbiAgLy8gcHJlZml4aW5nIHdpdGggXCJpblwiOyBzZWUgdHJhbnNsYXRpb24tY29sbGVjdG9yLnRzIC8gcGFyc2VyLnRzIGZvciB3aHkgdGhpc1xuICAvLyBpcyBhIHNlcGFyYXRlIGtleSBmcm9tIHRoZSBkYXkvaG91ci9taW51dGUgd29yZCBsaXN0cy5cbiAgY29uc3QgbGF0ZXJQYXR0ZXJuID0gdGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcImxhdGVyXCIpO1xuXG4gIGNvbnN0IHNob3J0UmVsYXRpdmVQYXR0ZXJuczogUmVnRXhwW10gPSBbXTtcblxuICAvLyBFdmVyeSBvbmUgb2YgdGhlIDExIHN1cHBvcnRlZCBsYW5ndWFnZXMgZGVmaW5lcyBtaW51dGUvaG91ciB0b2dldGhlclxuICAvLyB3aXRoIGluL2xhdGVyLCBzbyB0aGUgbmVzdGVkIGBpZiAobWludXRlUGF0dGVybilgL2BpZiAoaG91clBhdHRlcm4pYFxuICAvLyBjaGVja3MgYmVsb3cgY2FuJ3QgYWN0dWFsbHkgYmUgZmFsc2Ugd2hpbGUgdGhlaXIgZW5jbG9zaW5nIGBpZmAgaXMgdHJ1ZVxuICAvLyAtLSBubyBjb21iaW5hdGlvbiBvZiByZWFsIChvciB1bmtub3duKSBsYW5ndWFnZSBjb2RlcyBwcm9kdWNlcyBcImluXCIgb3JcbiAgLy8gXCJsYXRlclwiIHdpdGhvdXQgYWxzbyBwcm9kdWNpbmcgXCJtaW51dGVcIiBhbmQgXCJob3VyXCIuIEtlcHQgYXMgYSBndWFyZCBpblxuICAvLyBjYXNlIGEgZnV0dXJlIGxhbmd1YWdlIG1vZHVsZSBpcyBhdXRob3JlZCBpbmNvbXBsZXRlbHkuXG5cbiAgLy8gUHJlZml4IHN0eWxlOiBcImluIFggbWludXRlc1wiL1wiZGFucyBYIG1pblwiLy4uLlxuICBpZiAoaW5QYXR0ZXJuKSB7XG4gICAgaWYgKG1pbnV0ZVBhdHRlcm4pIHtcbiAgICAgIHNob3J0UmVsYXRpdmVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYF4oPzoke2luUGF0dGVybn0pXFxcXHMrXFxcXGQrXFxcXHMrKD86JHttaW51dGVQYXR0ZXJufSlgLCAnaScpKTtcbiAgICB9XG4gICAgaWYgKGhvdXJQYXR0ZXJuKSB7XG4gICAgICBzaG9ydFJlbGF0aXZlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGBeKD86JHtpblBhdHRlcm59KVxcXFxzK1xcXFxkK1xcXFxzKyg/OiR7aG91clBhdHRlcm59KWAsICdpJykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN1ZmZpeCBzdHlsZTogXCJYIG1pbnV0ZXNcIiArIFwibGF0ZXJcIiBtYXJrZXIsIGUuZy4gQ2hpbmVzZSBcIjMw5YiG6ZCY5b6MXCJcbiAgaWYgKGxhdGVyUGF0dGVybikge1xuICAgIGlmIChtaW51dGVQYXR0ZXJuKSB7XG4gICAgICBzaG9ydFJlbGF0aXZlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGBeXFxcXGQrXFxcXHMqKD86JHttaW51dGVQYXR0ZXJufSlcXFxccyooPzoke2xhdGVyUGF0dGVybn0pJGAsICdpJykpO1xuICAgIH1cbiAgICBpZiAoaG91clBhdHRlcm4pIHtcbiAgICAgIHNob3J0UmVsYXRpdmVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYF5cXFxcZCtcXFxccyooPzoke2hvdXJQYXR0ZXJufSlcXFxccyooPzoke2xhdGVyUGF0dGVybn0pJGAsICdpJykpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzaG9ydFJlbGF0aXZlUGF0dGVybnMuc29tZShwYXR0ZXJuID0+IHBhdHRlcm4udGVzdChsb3dlclRleHQpKTtcbn1cblxuLyoqXG4gKiBPYnRpZW50IGwnw6lkaXRldXIgYWN0aWYgZGUgbWFuacOocmUgZmxleGlibGUsIGNvbXBhdGlibGUgYXZlYyBRdWlja0FkZCBldCBhdXRyZXMgcGx1Z2luc1xuICogRXNzYWllIHBsdXNpZXVycyBtw6l0aG9kZXMgcG91ciB0cm91dmVyIGwnw6lkaXRldXIgYWN0aWZcbiAqIEBwYXJhbSB3b3Jrc3BhY2UgLSBMJ2luc3RhbmNlIFdvcmtzcGFjZSBkJ09ic2lkaWFuXG4gKiBAcmV0dXJucyBMJ8OpZGl0ZXVyIGFjdGlmIG91IG51bGwgc2kgYXVjdW4gbidlc3QgdHJvdXbDqVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlRWRpdG9yKHdvcmtzcGFjZTogV29ya3NwYWNlKTogRWRpdG9yIHwgbnVsbCB7XG4gIC8vIE3DqXRob2RlIDE6IFV0aWxpc2VyIGFjdGl2ZUVkaXRvciBzaSBkaXNwb25pYmxlIChPYnNpZGlhbiByw6ljZW50KVxuICBjb25zdCB3b3Jrc3BhY2VXaXRoQWN0aXZlRWRpdG9yID0gd29ya3NwYWNlIGFzIHR5cGVvZiB3b3Jrc3BhY2UgJiB7IGFjdGl2ZUVkaXRvcj86IHsgZWRpdG9yPzogRWRpdG9yIH0gfTtcbiAgaWYgKHdvcmtzcGFjZVdpdGhBY3RpdmVFZGl0b3IuYWN0aXZlRWRpdG9yPy5lZGl0b3IpIHtcbiAgICByZXR1cm4gd29ya3NwYWNlV2l0aEFjdGl2ZUVkaXRvci5hY3RpdmVFZGl0b3IuZWRpdG9yO1xuICB9XG5cbiAgLy8gTcOpdGhvZGUgMjogVXRpbGlzZXIgZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpIChtw6l0aG9kZSBzdGFuZGFyZClcbiAgY29uc3QgYWN0aXZlVmlldyA9IHdvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XG4gIGlmIChhY3RpdmVWaWV3Py5lZGl0b3IpIHtcbiAgICByZXR1cm4gYWN0aXZlVmlldy5lZGl0b3I7XG4gIH1cblxuICAvLyBNw6l0aG9kZSAzOiBDaGVyY2hlciBkYW5zIHRvdXMgbGVzIGxlYWZzIHBvdXIgdHJvdXZlciB1biDDqWRpdGV1ciBhY3RpZlxuICAvLyBVdGlsZSBwb3VyIFF1aWNrQWRkIGV0IGF1dHJlcyBwbHVnaW5zIHF1aSBjcsOpZW50IGRlcyDDqWRpdGV1cnMgcGVyc29ubmFsaXPDqXNcbiAgY29uc3QgYWN0aXZlTGVhZiA9IHdvcmtzcGFjZS5nZXRNb3N0UmVjZW50TGVhZigpO1xuICBpZiAoYWN0aXZlTGVhZikge1xuICAgIGNvbnN0IHZpZXcgPSBhY3RpdmVMZWFmLnZpZXc7XG4gICAgLy8gVsOpcmlmaWVyIHNpIGxhIHZ1ZSBhIHVuIMOpZGl0ZXVyXG4gICAgY29uc3Qgdmlld1dpdGhFZGl0b3IgPSB2aWV3IGFzIHR5cGVvZiB2aWV3ICYgeyBlZGl0b3I/OiBFZGl0b3IgfTtcbiAgICBpZiAodmlld1dpdGhFZGl0b3IuZWRpdG9yKSB7XG4gICAgICByZXR1cm4gdmlld1dpdGhFZGl0b3IuZWRpdG9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIE3DqXRob2RlcyA0IGV0IDU6IFBhcmNvdXJpciB0b3VzIGxlcyBsZWFmcyBtYXJrZG93biwgZW4gcHLDqWbDqXJhbnQgY2VsdWkgcXVpXG4gIC8vIGEgbGUgZm9jdXMsIHNpbm9uIGxlIHByZW1pZXIgw6lkaXRldXIgZGlzcG9uaWJsZSBlbiBkZXJuaWVyIHJlY291cnMuXG4gIGxldCBmaXJzdEF2YWlsYWJsZUVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG4gIGZvciAoY29uc3QgbGVhZiBvZiB3b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKFwibWFya2Rvd25cIikpIHtcbiAgICBjb25zdCB2aWV3ID0gbGVhZi52aWV3O1xuICAgIGlmICh2aWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3ICYmIHZpZXcuZWRpdG9yKSB7XG4gICAgICBjb25zdCBlZGl0b3JFbCA9ICh2aWV3LmVkaXRvciBhcyBFZGl0b3IgJiB7IGNtPzogeyBoYXNGb2N1cz86ICgpID0+IGJvb2xlYW4gfSB9KS5jbTtcbiAgICAgIGlmIChlZGl0b3JFbD8uaGFzRm9jdXM/LigpKSB7XG4gICAgICAgIHJldHVybiB2aWV3LmVkaXRvcjtcbiAgICAgIH1cbiAgICAgIGZpcnN0QXZhaWxhYmxlRWRpdG9yID0gZmlyc3RBdmFpbGFibGVFZGl0b3IgPz8gdmlldy5lZGl0b3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpcnN0QXZhaWxhYmxlRWRpdG9yO1xufVxuXG4vLyBFeHRyYWN0cyBhIHJlYWRhYmxlIG1lc3NhZ2UgZnJvbSBhIGNhdWdodCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuIFBsYWluXG4vLyBgU3RyaW5nKGUpYCBpcyB1bnNhZmUgZm9yIGFyYml0cmFyeSB1bmtub3duIHZhbHVlcyAoYSB0aHJvd24gcGxhaW4gb2JqZWN0XG4vLyB3b3VsZCBzdHJpbmdpZnkgdG8gdGhlIHVzZWxlc3MgXCJbb2JqZWN0IE9iamVjdF1cIiksIGJ1dCBibGFua2V0XG4vLyBgSlNPTi5zdHJpbmdpZnkoZSlgIGlzbid0IHJpZ2h0IGVpdGhlciAtLSBpdCB3b3VsZCB3cmFwIHRocm93biBzdHJpbmdzIGluXG4vLyBsaXRlcmFsIHF1b3RlcywgY2hhbmdpbmcgd2hhdCBhbHJlYWR5LXRocm93bi1zdHJpbmcgY2FsbCBzaXRlcyBsb2cuXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVFcnJvcihlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGUubWVzc2FnZTtcbiAgaWYgKHR5cGVvZiBlID09PSBcInN0cmluZ1wiKSByZXR1cm4gZTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xufSIsImltcG9ydCB7IEFwcCwgTW9kYWwsIFNldHRpbmcgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB0eXBlIE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuLi9tYWluXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuLi93aW5kb3ctbW9tZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpc3RvcnlNYW5hZ2VyTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XG4gIHByaXZhdGUgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcztcbiAgLy8gVHdvLWNsaWNrIGNvbmZpcm1hdGlvbiBmb3IgXCJDbGVhciBhbGxcIjogZmlyc3QgY2xpY2sgYXJtcyBpdCwgc2Vjb25kXG4gIC8vIGNsaWNrIChvbiB0aGUgc2FtZSByZW5kZXIpIGFjdHVhbGx5IGNsZWFycyAtLSBhdm9pZHMgd2lwaW5nIHRoZSB3aG9sZVxuICAvLyBoaXN0b3J5IGZyb20gYSBzaW5nbGUgYWNjaWRlbnRhbCBjbGljaywgd2l0aG91dCB0aGUgY29tcGxleGl0eSBvZiBhXG4gIC8vIHNlcGFyYXRlIGNvbmZpcm1hdGlvbiBtb2RhbCBvciBhIHRpbWVvdXQgdG8gcmVzZXQgdGhlIGFybWluZyBzdGF0ZS5cbiAgcHJpdmF0ZSBjbGVhckFsbEFybWVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpIHtcbiAgICBzdXBlcihhcHApO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICB9XG5cbiAgb25PcGVuKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJBbGxBcm1lZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY29udGVudEVsLmVtcHR5KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbmRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBGZXRjaGVkIGJlZm9yZSB0b3VjaGluZyB0aGUgRE9NIHNvIHRoZSBtb2RhbCBkb2Vzbid0IGZsYXNoIGFuXG4gICAgLy8gZW1wdHkvaGVhZGVyLW9ubHkgc3RhdGUgd2hpbGUgdGhlIChhc3luYykgaGlzdG9yeSBsb2FkIGlzIGluIGZsaWdodC5cbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIuZ2V0RW50cmllc0Zvck1hbmFnZW1lbnQoKTtcblxuICAgIGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xuICAgIGNvbnRlbnRFbC5lbXB0eSgpO1xuICAgIGNvbnRlbnRFbC5hZGRDbGFzcyhcIm5sZC1oaXN0b3J5LW1hbmFnZXItbW9kYWxcIik7XG5cbiAgICBjb250ZW50RWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiTWFuYWdlIHN1Z2dlc3Rpb24gaGlzdG9yeVwiIH0pO1xuXG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250ZW50RWwuY3JlYXRlRWwoXCJwXCIsIHsgdGV4dDogXCJObyBoaXN0b3J5IHlldC4gU3VnZ2VzdGlvbnMgeW91IHNlbGVjdCBmcm9tIHRoZSBhdXRvc3VnZ2VzdCBwb3B1cCB3aWxsIGFwcGVhciBoZXJlLlwiIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5ldyBTZXR0aW5nKGNvbnRlbnRFbClcbiAgICAgIC5zZXROYW1lKFwiQ2xlYXIgYWxsIGhpc3RvcnlcIilcbiAgICAgIC5zZXREZXNjKHRoaXMuY2xlYXJBbGxBcm1lZFxuICAgICAgICA/IFwiQ2xpY2sgYWdhaW4gdG8gY29uZmlybSAtLSB0aGlzIGNhbm5vdCBiZSB1bmRvbmUuXCJcbiAgICAgICAgOiBgUmVtb3ZlIGFsbCAke2VudHJpZXMubGVuZ3RofSBlbnRyaWVzLmApXG4gICAgICAuYWRkQnV0dG9uKChidXR0b24pID0+IHtcbiAgICAgICAgYnV0dG9uLnNldEJ1dHRvblRleHQodGhpcy5jbGVhckFsbEFybWVkID8gXCJDbGljayBhZ2FpbiB0byBjb25maXJtXCIgOiBcIkNsZWFyIGFsbFwiKTtcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJBbGxBcm1lZCkge1xuICAgICAgICAgIGJ1dHRvbi5zZXRXYXJuaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5jbGVhckFsbEFybWVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQWxsQXJtZWQgPSB0cnVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIuY2xlYXJIaXN0b3J5KCk7XG4gICAgICAgICAgdGhpcy5jbGVhckFsbEFybWVkID0gZmFsc2U7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgY29uc3QgbGFzdFVzZWRUZXh0ID0gbW9tZW50KGVudHJ5Lmxhc3RVc2VkKS5mcm9tTm93KCk7XG4gICAgICBjb25zdCB0aW1lc1RleHQgPSBlbnRyeS5jb3VudCA9PT0gMSA/IFwiMSB0aW1lXCIgOiBgJHtlbnRyeS5jb3VudH0gdGltZXNgO1xuXG4gICAgICBuZXcgU2V0dGluZyhjb250ZW50RWwpXG4gICAgICAgIC5zZXROYW1lKGVudHJ5LmRpc3BsYXkpXG4gICAgICAgIC5zZXREZXNjKGBVc2VkICR7dGltZXNUZXh0fSDCtyBsYXN0IHVzZWQgJHtsYXN0VXNlZFRleHR9YClcbiAgICAgICAgLmFkZEJ1dHRvbigoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgYnV0dG9uXG4gICAgICAgICAgICAuc2V0SWNvbihcInRyYXNoXCIpXG4gICAgICAgICAgICAuc2V0VG9vbHRpcChcIlJlbW92ZSB0aGlzIGVudHJ5XCIpXG4gICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIERlbGV0aW5nIGEgc2luZ2xlIGVudHJ5IGlzIGEgZGlmZmVyZW50IGFjdGlvbiBmcm9tIFwiQ2xlYXJcbiAgICAgICAgICAgICAgLy8gYWxsXCIgLS0gZG9uJ3QgbGVhdmUgdGhhdCBidXR0b24gYXJtZWQgZnJvbSBhbiBlYXJsaWVyIGNsaWNrLFxuICAgICAgICAgICAgICAvLyB3aGVyZSBhIGxhdGVyLCB1bnJlbGF0ZWQgXCJDbGVhciBhbGxcIiBjbGljayB3b3VsZCB0aGVuIHdpcGVcbiAgICAgICAgICAgICAgLy8gZXZlcnl0aGluZyB3aXRob3V0IHRoZSB1c2VyIHJlLWNvbmZpcm1pbmcgdGhhdCBzcGVjaWZpYyBpbnRlbnQuXG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJBbGxBcm1lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5oaXN0b3J5TWFuYWdlci5yZW1vdmVFbnRyeShlbnRyeS5rZXkpO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgTmF0dXJhbExhbmd1YWdlRGF0ZXMgZnJvbSBcIi4vbWFpblwiO1xuaW1wb3J0IHsgZ2V0TG9jYWxlV2Vla1N0YXJ0LCB2YWxpZGF0ZU1vbWVudEZvcm1hdCB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuL3dpbmRvdy1tb21lbnRcIjtcbmltcG9ydCBIaXN0b3J5TWFuYWdlck1vZGFsIGZyb20gXCIuL21vZGFscy9oaXN0b3J5LW1hbmFnZXItbW9kYWxcIjtcblxuLyoqXG4gKiBEYXkgb2YgdGhlIHdlZWsgdHlwZSBmb3Igd2VlayBzdGFydCBwcmVmZXJlbmNlLlxuICogQ2FuIGJlIGEgc3BlY2lmaWMgZGF5IG9yIFwibG9jYWxlLWRlZmF1bHRcIiB0byB1c2UgdGhlIHN5c3RlbSBsb2NhbGUuXG4gKi9cbmV4cG9ydCB0eXBlIERheU9mV2VlayA9XG4gIHwgXCJzdW5kYXlcIlxuICB8IFwibW9uZGF5XCJcbiAgfCBcInR1ZXNkYXlcIlxuICB8IFwid2VkbmVzZGF5XCJcbiAgfCBcInRodXJzZGF5XCJcbiAgfCBcImZyaWRheVwiXG4gIHwgXCJzYXR1cmRheVwiXG4gIHwgXCJsb2NhbGUtZGVmYXVsdFwiO1xuXG4vKipcbiAqIFBsdWdpbiBzZXR0aW5ncyBpbnRlcmZhY2UuXG4gKiBDb250YWlucyBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTmF0dXJhbCBMYW5ndWFnZSBEYXRlcyBwbHVnaW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTkxEU2V0dGluZ3Mge1xuICBhdXRvc3VnZ2VzdFRvZ2dsZUxpbms6IGJvb2xlYW47XG4gIGF1dG9jb21wbGV0ZVRyaWdnZXJQaHJhc2U6IHN0cmluZztcbiAgaXNBdXRvc3VnZ2VzdEVuYWJsZWQ6IGJvb2xlYW47XG5cbiAgZm9ybWF0OiBzdHJpbmc7XG4gIHRpbWVGb3JtYXQ6IHN0cmluZztcbiAgc2VwYXJhdG9yOiBzdHJpbmc7XG4gIHdlZWtTdGFydDogRGF5T2ZXZWVrO1xuICBsYW5ndWFnZXM6IHN0cmluZ1tdO1xuXG4gIGVuZ2xpc2g6IGJvb2xlYW47XG4gIGphcGFuZXNlOiBib29sZWFuO1xuICBmcmVuY2g6IGJvb2xlYW47XG4gIGdlcm1hbjogYm9vbGVhbjtcbiAgcG9ydHVndWVzZTogYm9vbGVhbjtcbiAgZHV0Y2g6IGJvb2xlYW47XG4gIHNwYW5pc2g6IGJvb2xlYW47XG4gIGl0YWxpYW46IGJvb2xlYW47XG4gIHJ1c3NpYW46IGJvb2xlYW47XG4gIHVrcmFpbmlhbjogYm9vbGVhbjtcbiAgY2hpbmVzZTogYm9vbGVhbjtcbiAga29yZWFuOiBib29sZWFuO1xuXG4gIG1vZGFsVG9nZ2xlTGluazogYm9vbGVhbjtcbiAgLy8gRGF0ZS1vbmx5OiB0aGUgRGF0ZSBQaWNrZXIgZGVsaWJlcmF0ZWx5IG5ldmVyIHN1cmZhY2VzIGEgdGltZSAtLSB0aGVyZSdzXG4gIC8vIG5vIHRpbWUtb2YtZGF5IGNvbnRyb2wgYW55d2hlcmUgaW4gdGhhdCBtb2RhbCdzIFVJLCBzbyBhIGZvcm1hdFxuICAvLyBpbmNsdWRpbmcgdGltZSB0b2tlbnMgd291bGQgb25seSBldmVyIGRpc3BsYXkgYSBtZWFuaW5nbGVzcyBjb25zdGFudFxuICAvLyAodGhlIHBpY2tlZCBkYXRlIG5vcm1hbGl6ZWQgdG8gbWlkbmlnaHQpLiBVc2UgdGhlIFwiSW5zZXJ0IHRoZSBjdXJyZW50XG4gIC8vIGRhdGUgYW5kIHRpbWVcIiBjb21tYW5kLCBvciB0eXBlIGEgZnVsbCBleHByZXNzaW9uIGludG8gdGhlIGF1dG9zdWdnZXN0LFxuICAvLyBmb3IgYW55dGhpbmcgdGhhdCBhY3R1YWxseSBuZWVkcyBhIHRpbWUuXG4gIG1vZGFsTW9tZW50Rm9ybWF0OiBzdHJpbmc7XG5cbiAgLy8gU21hcnQgc3VnZ2VzdGlvbnNcbiAgZW5hYmxlU21hcnRTdWdnZXN0aW9uczogYm9vbGVhbjtcbiAgZW5hYmxlSGlzdG9yeVN1Z2dlc3Rpb25zOiBib29sZWFuO1xuICBlbmFibGVDb250ZXh0U3VnZ2VzdGlvbnM6IGJvb2xlYW47XG5cbiAgLy8gU21hcnQgZGF0ZSBmb3JtYXR0aW5nXG4gIG9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VUVElOR1M6IE5MRFNldHRpbmdzID0ge1xuICBhdXRvc3VnZ2VzdFRvZ2dsZUxpbms6IHRydWUsXG4gIGF1dG9jb21wbGV0ZVRyaWdnZXJQaHJhc2U6IFwiQFwiLFxuICBpc0F1dG9zdWdnZXN0RW5hYmxlZDogdHJ1ZSxcblxuICBmb3JtYXQ6IFwiWVlZWS1NTS1ERFwiLFxuICB0aW1lRm9ybWF0OiBcIkhIOm1tXCIsXG4gIHNlcGFyYXRvcjogXCIgXCIsXG4gIHdlZWtTdGFydDogXCJsb2NhbGUtZGVmYXVsdFwiLFxuICBsYW5ndWFnZXM6IFtcImVuXCJdLFxuXG4gIGVuZ2xpc2g6IHRydWUsICAvLyBTeW5jaHJvbml6ZWQgd2l0aCBsYW5ndWFnZXM6IFtcImVuXCJdXG4gIGphcGFuZXNlOiBmYWxzZSxcbiAgZnJlbmNoOiBmYWxzZSxcbiAgZ2VybWFuOiBmYWxzZSxcbiAgcG9ydHVndWVzZTogZmFsc2UsXG4gIGR1dGNoOiBmYWxzZSxcbiAgc3BhbmlzaDogZmFsc2UsXG4gIGl0YWxpYW46IGZhbHNlLFxuICBydXNzaWFuOiBmYWxzZSxcbiAgdWtyYWluaWFuOiBmYWxzZSxcbiAgY2hpbmVzZTogZmFsc2UsXG4gIGtvcmVhbjogZmFsc2UsXG5cbiAgbW9kYWxUb2dnbGVMaW5rOiBmYWxzZSxcbiAgbW9kYWxNb21lbnRGb3JtYXQ6IFwiWVlZWS1NTS1ERFwiLFxuXG4gIC8vIFNtYXJ0IHN1Z2dlc3Rpb25zXG4gIGVuYWJsZVNtYXJ0U3VnZ2VzdGlvbnM6IHRydWUsXG4gIGVuYWJsZUhpc3RvcnlTdWdnZXN0aW9uczogdHJ1ZSxcbiAgZW5hYmxlQ29udGV4dFN1Z2dlc3Rpb25zOiB0cnVlLFxuXG4gIC8vIFNtYXJ0IGRhdGUgZm9ybWF0dGluZ1xuICBvbWl0RGF0ZUZvclNob3J0UmVsYXRpdmU6IHRydWUsXG59O1xuXG5jb25zdCB3ZWVrZGF5cyA9IFtcbiAgXCJzdW5kYXlcIixcbiAgXCJtb25kYXlcIixcbiAgXCJ0dWVzZGF5XCIsXG4gIFwid2VkbmVzZGF5XCIsXG4gIFwidGh1cnNkYXlcIixcbiAgXCJmcmlkYXlcIixcbiAgXCJzYXR1cmRheVwiLFxuXTtcblxuZXhwb3J0IGNsYXNzIE5MRFNldHRpbmdzVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG4gIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXM7XG5cbiAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpIHtcbiAgICBzdXBlcihhcHAsIHBsdWdpbik7XG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gIH1cblxuICBkaXNwbGF5KCk6IHZvaWQge1xuICAgIGNvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG4gICAgY29uc3QgbG9jYWxpemVkV2Vla2RheXMgPSBtb21lbnQud2Vla2RheXMoKTtcbiAgICBjb25zdCBsb2NhbGVXZWVrU3RhcnQgPSBnZXRMb2NhbGVXZWVrU3RhcnQoKTtcblxuICAgIGNvbnRhaW5lckVsLmVtcHR5KCk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0SGVhZGluZygpLnNldE5hbWUoXCJOYXR1cmFsIGxhbmd1YWdlIGRhdGVzXCIpO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpLnNldEhlYWRpbmcoKS5zZXROYW1lKFwiUGFyc2VyIHNldHRpbmdzXCIpO1xuXG4gICAgY29uc3QgZGF0ZUZvcm1hdFNldHRpbmcgPSBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiRGF0ZSBmb3JtYXRcIilcbiAgICAgIC5zZXREZXNjKFwiT3V0cHV0IGZvcm1hdCBmb3IgcGFyc2VkIGRhdGVzXCIpXG4gICAgICAuYWRkTW9tZW50Rm9ybWF0KCh0ZXh0KSA9PlxuICAgICAgICB0ZXh0XG4gICAgICAgICAgLnNldERlZmF1bHRGb3JtYXQoXCJZWVlZLU1NLUREXCIpXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdClcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh2YWx1ZSB8fCBcIllZWVktTU0tRERcIik7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGVkLnZhbGlkKSB7XG4gICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCA9IHZhbHVlIHx8IFwiWVlZWS1NTS1ERFwiO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgLy8gTWV0dHJlIMOgIGpvdXIgbGEgZGVzY3JpcHRpb24gYXZlYyBsYSBwcsOpdmlzdWFsaXNhdGlvbi5cbiAgICAgICAgICAgICAgLy8gdmFsaWRhdGVNb21lbnRGb3JtYXQoKSdzIGNvbnRyYWN0IGd1YXJhbnRlZXMgcHJldmlldyBpcyBzZXRcbiAgICAgICAgICAgICAgLy8gd2hlbmV2ZXIgdmFsaWQgaXMgdHJ1ZSwgc28gdGhlIFwiOiAnJ1wiIGZhbGxiYWNrIGJlbG93IGlzXG4gICAgICAgICAgICAgIC8vIHVucmVhY2hhYmxlIHdpdGggcmVhbCBkYXRhLlxuICAgICAgICAgICAgICBkYXRlRm9ybWF0U2V0dGluZy5zZXREZXNjKGBPdXRwdXQgZm9ybWF0IGZvciBwYXJzZWQgZGF0ZXMke3ZhbGlkYXRlZC5wcmV2aWV3ID8gYCAoUHJldmlldzogJHt2YWxpZGF0ZWQucHJldmlld30pYCA6IFwiXCJ9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBBZmZpY2hlciBsJ2VycmV1ciBkYW5zIGxhIGRlc2NyaXB0aW9uLiBFdmVyeSBpbnZhbGlkLWZvcm1hdFxuICAgICAgICAgICAgICAvLyByZXR1cm4gZnJvbSB2YWxpZGF0ZU1vbWVudEZvcm1hdCgpIGFsd2F5cyBzZXRzIGVycm9yLCBzbyB0aGVcbiAgICAgICAgICAgICAgLy8gXCJGb3JtYXQgaW52YWxpZGVcIiBmYWxsYmFjayBiZWxvdyBpcyB1bnJlYWNoYWJsZSB3aXRoIHJlYWwgZGF0YS5cbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdFNldHRpbmcuc2V0RGVzYyhgT3V0cHV0IGZvcm1hdCBmb3IgcGFyc2VkIGRhdGVzIC0g4pqg77iPICR7dmFsaWRhdGVkLmVycm9yIHx8IFwiRm9ybWF0IGludmFsaWRlXCJ9YCk7XG4gICAgICAgICAgICAgIC8vIE5lIHBhcyBzYXV2ZWdhcmRlciBsZSBmb3JtYXQgaW52YWxpZGUsIHJlc3RhdXJlciBsZSBwcsOpY8OpZGVudFxuICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgXG4gICAgLy8gQWZmaWNoZXIgbGEgcHLDqXZpc3VhbGlzYXRpb24gaW5pdGlhbGVcbiAgICBjb25zdCBpbml0aWFsVmFsaWRhdGlvbiA9IHZhbGlkYXRlTW9tZW50Rm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgaWYgKGluaXRpYWxWYWxpZGF0aW9uLnZhbGlkICYmIGluaXRpYWxWYWxpZGF0aW9uLnByZXZpZXcpIHtcbiAgICAgIGRhdGVGb3JtYXRTZXR0aW5nLnNldERlc2MoYE91dHB1dCBmb3JtYXQgZm9yIHBhcnNlZCBkYXRlcyAoUHJldmlldzogJHtpbml0aWFsVmFsaWRhdGlvbi5wcmV2aWV3fSlgKTtcbiAgICB9XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiV2VlayBzdGFydHMgb25cIilcbiAgICAgIC5zZXREZXNjKFwiV2hpY2ggZGF5IHRvIGNvbnNpZGVyIGFzIHRoZSBzdGFydCBvZiB0aGUgd2Vla1wiKVxuICAgICAgLmFkZERyb3Bkb3duKChkcm9wZG93bikgPT4ge1xuICAgICAgICBkcm9wZG93bi5hZGRPcHRpb24oXCJsb2NhbGUtZGVmYXVsdFwiLCBgTG9jYWxlIGRlZmF1bHQgKCR7U3RyaW5nKGxvY2FsZVdlZWtTdGFydCl9KWApO1xuICAgICAgICBsb2NhbGl6ZWRXZWVrZGF5cy5mb3JFYWNoKChkYXksIGkpID0+IHtcbiAgICAgICAgICBkcm9wZG93bi5hZGRPcHRpb24od2Vla2RheXNbaV0sIGRheSk7XG4gICAgICAgIH0pO1xuICAgICAgICBkcm9wZG93bi5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy53ZWVrU3RhcnQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGRyb3Bkb3duLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTogRGF5T2ZXZWVrKSA9PiB7XG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3Mud2Vla1N0YXJ0ID0gdmFsdWU7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0SGVhZGluZygpLnNldE5hbWUoXCJMYW5ndWFnZSBzZXR0aW5nc1wiKTtcblxuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIkVuZ2xpc2hcIiwgXCJlbmdsaXNoXCIsIFwiZW5cIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiSmFwYW5lc2VcIiwgXCJqYXBhbmVzZVwiLCBcImphXCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIkZyZW5jaFwiLCBcImZyZW5jaFwiLCBcImZyXCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIkdlcm1hblwiLCBcImdlcm1hblwiLCBcImRlXCIsIFwicGFydGlhbGx5IHN1cHBvcnRlZFwiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJQb3J0dWd1ZXNlXCIsIFwicG9ydHVndWVzZVwiLCBcInB0XCIsIFwicGFydGlhbGx5IHN1cHBvcnRlZFwiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJEdXRjaFwiLCBcImR1dGNoXCIsIFwibmxcIiwgXCJ1bmRlciBkZXZlbG9wbWVudFwiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJTcGFuaXNoXCIsIFwic3BhbmlzaFwiLCBcImVzXCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIkl0YWxpYW5cIiwgXCJpdGFsaWFuXCIsIFwiaXRcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiUnVzc2lhblwiLCBcInJ1c3NpYW5cIiwgXCJydVwiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJVa3JhaW5pYW5cIiwgXCJ1a3JhaW5pYW5cIiwgXCJ1a1wiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJDaGluZXNlIChUcmFkaXRpb25hbClcIiwgXCJjaGluZXNlXCIsIFwiemguaGFudFwiLCBcInBhcnRpYWxseSBzdXBwb3J0ZWRcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiS29yZWFuXCIsIFwia29yZWFuXCIsIFwia29cIiwgXCJwYXJ0aWFsbHkgc3VwcG9ydGVkXCIpO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpLnNldEhlYWRpbmcoKS5zZXROYW1lKFwiSG90a2V5IGZvcm1hdHRpbmcgc2V0dGluZ3NcIik7XG5cbiAgICBjb25zdCB0aW1lRm9ybWF0U2V0dGluZyA9IG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJUaW1lIGZvcm1hdFwiKVxuICAgICAgLnNldERlc2MoXCJGb3JtYXQgZm9yIHRoZSBob3RrZXlzIHRoYXQgaW5jbHVkZSB0aGUgY3VycmVudCB0aW1lXCIpXG4gICAgICAuYWRkTW9tZW50Rm9ybWF0KCh0ZXh0KSA9PlxuICAgICAgICB0ZXh0XG4gICAgICAgICAgLnNldERlZmF1bHRGb3JtYXQoXCJISDptbVwiKVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0KVxuICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlTW9tZW50Rm9ybWF0KHZhbHVlIHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGVkLnZhbGlkKSB7XG4gICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQgPSB2YWx1ZSB8fCBcIkhIOm1tXCI7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAvLyBNZXR0cmUgw6Agam91ciBsYSBkZXNjcmlwdGlvbiBhdmVjIGxhIHByw6l2aXN1YWxpc2F0aW9uIChzZWVcbiAgICAgICAgICAgICAgLy8gdGhlIGRhdGUtZm9ybWF0IHNldHRpbmcgYWJvdmU6IHRoZSBcIjogJydcIiBmYWxsYmFjayBoZXJlIGlzXG4gICAgICAgICAgICAgIC8vIHNpbWlsYXJseSB1bnJlYWNoYWJsZSBnaXZlbiB2YWxpZGF0ZU1vbWVudEZvcm1hdCgpJ3MgY29udHJhY3QpLlxuICAgICAgICAgICAgICB0aW1lRm9ybWF0U2V0dGluZy5zZXREZXNjKGBGb3JtYXQgZm9yIHRoZSBob3RrZXlzIHRoYXQgaW5jbHVkZSB0aGUgY3VycmVudCB0aW1lJHt2YWxpZGF0ZWQucHJldmlldyA/IGAgKFByZXZpZXc6ICR7dmFsaWRhdGVkLnByZXZpZXd9KWAgOiBcIlwifWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQWZmaWNoZXIgbCdlcnJldXIgZGFucyBsYSBkZXNjcmlwdGlvbiAodW5yZWFjaGFibGUgZmFsbGJhY2ssXG4gICAgICAgICAgICAgIC8vIHNhbWUgcmVhc29uaW5nIGFzIHRoZSBkYXRlLWZvcm1hdCBzZXR0aW5nIGFib3ZlKS5cbiAgICAgICAgICAgICAgdGltZUZvcm1hdFNldHRpbmcuc2V0RGVzYyhgRm9ybWF0IGZvciB0aGUgaG90a2V5cyB0aGF0IGluY2x1ZGUgdGhlIGN1cnJlbnQgdGltZSAtIOKaoO+4jyAke3ZhbGlkYXRlZC5lcnJvciB8fCBcIkZvcm1hdCBpbnZhbGlkZVwifWApO1xuICAgICAgICAgICAgICAvLyBOZSBwYXMgc2F1dmVnYXJkZXIgbGUgZm9ybWF0IGludmFsaWRlLCByZXN0YXVyZXIgbGUgcHLDqWPDqWRlbnRcbiAgICAgICAgICAgICAgdGV4dC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICBcbiAgICAvLyBBZmZpY2hlciBsYSBwcsOpdmlzdWFsaXNhdGlvbiBpbml0aWFsZVxuICAgIGNvbnN0IGluaXRpYWxUaW1lVmFsaWRhdGlvbiA9IHZhbGlkYXRlTW9tZW50Rm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQpO1xuICAgIGlmIChpbml0aWFsVGltZVZhbGlkYXRpb24udmFsaWQgJiYgaW5pdGlhbFRpbWVWYWxpZGF0aW9uLnByZXZpZXcpIHtcbiAgICAgIHRpbWVGb3JtYXRTZXR0aW5nLnNldERlc2MoYEZvcm1hdCBmb3IgdGhlIGhvdGtleXMgdGhhdCBpbmNsdWRlIHRoZSBjdXJyZW50IHRpbWUgKFByZXZpZXc6ICR7aW5pdGlhbFRpbWVWYWxpZGF0aW9uLnByZXZpZXd9KWApO1xuICAgIH1cblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJTZXBhcmF0b3JcIilcbiAgICAgIC5zZXREZXNjKFwiU2VwYXJhdG9yIGJldHdlZW4gZGF0ZSBhbmQgdGltZSBmb3IgZW50cmllcyB0aGF0IGhhdmUgYm90aFwiKVxuICAgICAgLmFkZFRleHQoKHRleHQpID0+XG4gICAgICAgIHRleHRcbiAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoXCJTZXBhcmF0b3IgaXMgZW1wdHlcIilcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VwYXJhdG9yKVxuICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnNlcGFyYXRvciA9IHZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0SGVhZGluZygpLnNldE5hbWUoXCJEYXRlIGF1dG9zdWdnZXN0XCIpO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIkVuYWJsZSBkYXRlIGF1dG9zdWdnZXN0XCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgYElucHV0IGRhdGVzIHdpdGggbmF0dXJhbCBsYW5ndWFnZS4gT3BlbiB0aGUgc3VnZ2VzdCBtZW51IHdpdGggJHt0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvY29tcGxldGVUcmlnZ2VyUGhyYXNlfWBcbiAgICAgIClcbiAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cbiAgICAgICAgdG9nZ2xlXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmlzQXV0b3N1Z2dlc3RFbmFibGVkKVxuICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmlzQXV0b3N1Z2dlc3RFbmFibGVkID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJBZGQgZGF0ZXMgYXMgbGluaz9cIilcbiAgICAgIC5zZXREZXNjKFxuICAgICAgICBcIklmIGVuYWJsZWQsIGRhdGVzIGNyZWF0ZWQgdmlhIGF1dG9zdWdnZXN0IHdpbGwgYmUgd3JhcHBlZCBpbiBbW3dpa2lsaW5rc11dXCJcbiAgICAgIClcbiAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cbiAgICAgICAgdG9nZ2xlXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmF1dG9zdWdnZXN0VG9nZ2xlTGluaylcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvc3VnZ2VzdFRvZ2dsZUxpbmsgPSB2YWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgY29uc3QgdHJpZ2dlclBocmFzZURlc2MgPSBcIkNoYXJhY3RlcihzKSB0aGF0IHdpbGwgY2F1c2UgdGhlIGRhdGUgYXV0b3N1Z2dlc3QgdG8gb3BlblwiO1xuICAgIGNvbnN0IHRyaWdnZXJQaHJhc2VTZXR0aW5nID0gbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIlRyaWdnZXIgcGhyYXNlXCIpXG4gICAgICAuc2V0RGVzYyh0cmlnZ2VyUGhyYXNlRGVzYylcbiAgICAgIC5hZGRNb21lbnRGb3JtYXQoKHRleHQpID0+XG4gICAgICAgIHRleHRcbiAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoREVGQVVMVF9TRVRUSU5HUy5hdXRvY29tcGxldGVUcmlnZ2VyUGhyYXNlKVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvY29tcGxldGVUcmlnZ2VyUGhyYXNlIHx8IFwiQFwiKVxuICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XG4gICAgICAgICAgICBpZiAodHJpbW1lZCkge1xuICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvY29tcGxldGVUcmlnZ2VyUGhyYXNlID0gdHJpbW1lZDtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgIHRyaWdnZXJQaHJhc2VTZXR0aW5nLnNldERlc2ModHJpZ2dlclBocmFzZURlc2MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQW4gZW1wdHkgdHJpZ2dlciBwaHJhc2UgbWFrZXMgb25UcmlnZ2VyKCknc1xuICAgICAgICAgICAgICAvLyBxdWVyeS5zdGFydHNXaXRoKHRyaWdnZXJQaHJhc2UpIGFsd2F5cyB0cnVlLCBzbyB0aGVcbiAgICAgICAgICAgICAgLy8gYXV0b3N1Z2dlc3QgcG9wdXAgd291bGQgZmlyZSBvbiB2aXJ0dWFsbHkgZXZlcnkga2V5c3Ryb2tlLlxuICAgICAgICAgICAgICAvLyBSZWZ1c2UgdG8gc2F2ZSBpdCwgbWF0Y2hpbmcgdGhlIERhdGUvVGltZSBmb3JtYXQgZmllbGRzIGFib3ZlLlxuICAgICAgICAgICAgICB0cmlnZ2VyUGhyYXNlU2V0dGluZy5zZXREZXNjKGAke3RyaWdnZXJQaHJhc2VEZXNjfSAtIOKaoO+4jyBUcmlnZ2VyIHBocmFzZSBjYW5ub3QgYmUgZW1wdHlgKTtcbiAgICAgICAgICAgICAgdGV4dC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvY29tcGxldGVUcmlnZ2VyUGhyYXNlIHx8IFwiQFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKS5zZXRIZWFkaW5nKCkuc2V0TmFtZShcIlNtYXJ0IHN1Z2dlc3Rpb25zXCIpO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIkVuYWJsZSBzbWFydCBzdWdnZXN0aW9uc1wiKVxuICAgICAgLnNldERlc2MoXG4gICAgICAgIFwiRW5hYmxlIGludGVsbGlnZW50IHN1Z2dlc3Rpb25zIGJhc2VkIG9uIHlvdXIgdXNhZ2UgaGlzdG9yeSBhbmQgZG9jdW1lbnQgY29udGV4dFwiXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVTbWFydFN1Z2dlc3Rpb25zKVxuICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZVNtYXJ0U3VnZ2VzdGlvbnMgPSB2YWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIkhpc3RvcnktYmFzZWQgc3VnZ2VzdGlvbnNcIilcbiAgICAgIC5zZXREZXNjKFxuICAgICAgICBcIkxlYXJuIGZyb20geW91ciBmcmVxdWVudGx5IHVzZWQgZGF0ZSBwYXR0ZXJucyBhbmQgcHJpb3JpdGl6ZSB0aGVtIGluIHN1Z2dlc3Rpb25zXCJcbiAgICAgIClcbiAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cbiAgICAgICAgdG9nZ2xlXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUhpc3RvcnlTdWdnZXN0aW9ucylcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVIaXN0b3J5U3VnZ2VzdGlvbnMgPSB2YWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIkNvbnRleHQtYmFzZWQgc3VnZ2VzdGlvbnNcIilcbiAgICAgIC5zZXREZXNjKFxuICAgICAgICBcIlN1Z2dlc3QgZGF0ZXMgYmFzZWQgb24gZGF0ZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBjdXJyZW50IGRvY3VtZW50XCJcbiAgICAgIClcbiAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cbiAgICAgICAgdG9nZ2xlXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUNvbnRleHRTdWdnZXN0aW9ucylcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVDb250ZXh0U3VnZ2VzdGlvbnMgPSB2YWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIk1hbmFnZSBoaXN0b3J5XCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJWaWV3IHlvdXIgc3VnZ2VzdGlvbiBoaXN0b3J5IGFuZCByZW1vdmUgaW5kaXZpZHVhbCBlbnRyaWVzLCBvciBjbGVhciBpdCBlbnRpcmVseVwiXG4gICAgICApXG4gICAgICAuYWRkQnV0dG9uKChidXR0b24pID0+XG4gICAgICAgIGJ1dHRvblxuICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiTWFuYWdlIGhpc3RvcnlcIilcbiAgICAgICAgICAub25DbGljaygoKSA9PiB7XG4gICAgICAgICAgICBuZXcgSGlzdG9yeU1hbmFnZXJNb2RhbCh0aGlzLmFwcCwgdGhpcy5wbHVnaW4pLm9wZW4oKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKS5zZXRIZWFkaW5nKCkuc2V0TmFtZShcIkRhdGUgZm9ybWF0dGluZ1wiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJPbWl0IGRhdGUgZm9yIHNob3J0IHJlbGF0aXZlIGV4cHJlc3Npb25zXCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJXaGVuIGVuYWJsZWQsIHNob3J0IHJlbGF0aXZlIGV4cHJlc3Npb25zIGZvciB0b2RheSAoZS5nLiwgJ2luIDE1IG1pbicsICdkYW5zIDIgaGV1cmVzJykgd2lsbCBkaXNwbGF5IG9ubHkgdGhlIHRpbWUgKGUuZy4sICcxNDozMCcpIGluc3RlYWQgb2YgJ1tbMjAyNC0wMS0xNV1dIDE0OjMwJ1wiXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5vbWl0RGF0ZUZvclNob3J0UmVsYXRpdmUpXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LCB0ZXh0OiBzdHJpbmcsIHNldHRpbmdLZXk6IGtleW9mIE5MRFNldHRpbmdzLCBjb2RlOiBzdHJpbmcsIG5vdGU/OiBzdHJpbmcpIDogU2V0dGluZyB7XG4gICAgbm90ZSA9IG5vdGUgPyBgICgke25vdGV9KWAgOiBcIlwiO1xuICAgIHJldHVybiBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKHRleHQpXG4gICAgICAuc2V0RGVzYyhgV2hldGhlciB0byBwYXJzZSAke3RleHR9IG9yIG5vdGAgKyBub3RlKVxuICAgICAgLmFkZFRvZ2dsZShsID0+XG4gICAgICAgIGxcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3Nbc2V0dGluZ0tleV0gYXMgYm9vbGVhbilcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHYpID0+IHtcbiAgICAgICAgICAgICh0aGlzLnBsdWdpbi5zZXR0aW5nc1tzZXR0aW5nS2V5XSBhcyBib29sZWFuKSA9IHY7XG4gICAgICAgICAgICB0aGlzLmVkaXRMYW5ndWFnZXMoY29kZSwgdik7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlc2V0UGFyc2VyKCk7XG4gICAgICAgICAgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVkaXRMYW5ndWFnZXMoY29kZTogc3RyaW5nLCBlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgIGlmICghdGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzLmluY2x1ZGVzKGNvZGUpKSB7XG4gICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcy5wdXNoKGNvZGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcy5pbmRleE9mKGNvZGUpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59IiwiaW1wb3J0IHsgQXBwLCBNb2RhbCwgU2V0dGluZyB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVNYXJrZG93bkxpbmssIGdldExvY2FsZVdlZWtTdGFydCwgdmFsaWRhdGVNb21lbnRGb3JtYXQsIGdldEFjdGl2ZUVkaXRvciB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHR5cGUgTmF0dXJhbExhbmd1YWdlRGF0ZXMgZnJvbSBcIi4uL21haW5cIjtcbmltcG9ydCB7IERFRkFVTFRfU0VUVElOR1MgfSBmcm9tIFwiLi4vc2V0dGluZ3NcIjtcbmltcG9ydCB0IGZyb20gXCIuLi9sYW5nL2hlbHBlclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi4vd2luZG93LW1vbWVudFwiO1xuXG50eXBlIE1vbWVudCA9IGltcG9ydChcIm1vbWVudFwiKS5Nb21lbnQ7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVQaWNrZXJNb2RhbCBleHRlbmRzIE1vZGFsIHtcbiAgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcztcbiAgcHJpdmF0ZSBzZWxlY3RlZERhdGU6IE1vbWVudDtcbiAgcHJpdmF0ZSBjdXJyZW50TW9udGg6IE1vbWVudDtcbiAgcHJpdmF0ZSBjYWxlbmRhckVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHF1aWNrQnV0dG9uc0VsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHByZXZpZXdFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBkYXRlSW5wdXRFbDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzRGFya01vZGU6IGJvb2xlYW47XG4gIHByaXZhdGUgdGhlbWVPYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGtleWJvYXJkSGFuZGxlcjogKChlOiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkRGF0ZUZuOiAoKGRhdGU6IE1vbWVudCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcykge1xuICAgIHN1cGVyKGFwcCk7XG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gICAgLy8gTm9ybWFsaXplZCB0byBtaWRuaWdodDogdGhpcyBpcyBhIGRhdGUgcGlja2VyLCBub3QgYSB0aW1lIHBpY2tlciwgYW5kXG4gICAgLy8gbm90aGluZyBpbiB0aGUgVUkgbGV0cyB0aGUgdXNlciBzZXQgYSB0aW1lLW9mLWRheS4gQ2FycnlpbmcgdGhlIHJlYWxcbiAgICAvLyBjdXJyZW50IHdhbGwtY2xvY2sgdGltZSBoZXJlIChtb21lbnQoKSkgbWVhbnQgdGhhdCBvcGVuaW5nIHRoZSBtb2RhbFxuICAgIC8vIGFuZCBpbW1lZGlhdGVseSBpbnNlcnRpbmcgcHJvZHVjZWQgd2hhdGV2ZXIgdGhlIGNsb2NrIGhhcHBlbmVkIHRvXG4gICAgLy8gcmVhZCwgbm90IGEgY2xlYW4gZGF0ZSAtLSBhbmQgZ2V0RGF0ZVN0cigpIGJlbG93IGZvcm1hdHMgKnNvbWUqXG4gICAgLy8gbW9tZW50IHdpdGggYSBmb3JtYXQgc3RyaW5nIHRoYXQgaW5jbHVkZXMgXCJISDptbVwiIGJ5IGRlZmF1bHQuXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSBtb21lbnQoKS5zdGFydE9mKFwiZGF5XCIpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoID0gbW9tZW50KCk7XG4gICAgLy8gRMOpdGVjdGVyIGxlIG1vZGUgc29tYnJlXG4gICAgdGhpcy5pc0RhcmtNb2RlID0gYWN0aXZlRG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJ0aGVtZS1kYXJrXCIpO1xuICB9XG5cbiAgb25PcGVuKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xuICAgIGNvbnRlbnRFbC5lbXB0eSgpO1xuICAgIGNvbnRlbnRFbC5hZGRDbGFzcyhcIm5sZC1kYXRlLXBpY2tlci1tb2RhbFwiKTtcblxuICAgIC8vIEFqb3V0ZXIgbGVzIHN0eWxlcyBwb3VyIGxlIG1vZGUgc29tYnJlXG4gICAgaWYgKHRoaXMuaXNEYXJrTW9kZSkge1xuICAgICAgY29udGVudEVsLmFkZENsYXNzKFwibmxkLWRhcmstbW9kZVwiKTtcbiAgICB9XG5cbiAgICBsZXQgbW9tZW50Rm9ybWF0ID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MubW9kYWxNb21lbnRGb3JtYXQ7XG4gICAgbGV0IGluc2VydEFzTGluayA9IHRoaXMucGx1Z2luLnNldHRpbmdzLm1vZGFsVG9nZ2xlTGluaztcbiAgICBsZXQgZGF0ZUlucHV0ID0gXCJcIjtcblxuICAgIC8vIFN0cmlwcyB0aGUgdHJhaWxpbmcgXCJ8XCIgdGhhdCBtYXJrcyBcImtlZXAgYXMgYWxpYXNcIiAoc2VlIHNob3VsZEluY2x1ZGVBbGlhc1xuICAgIC8vIGJlbG93KSAtLSBzaGFyZWQgc28gdGhlIGlucHV0J3Mgb25DaGFuZ2UgaGFuZGxlciBhbmQgZ2V0RGF0ZVN0cigpIGFncmVlXG4gICAgLy8gb24gZXhhY3RseSB3aGF0IHRleHQgZ2V0cyBwYXJzZWQvY2FjaGVkLlxuICAgIGNvbnN0IHN0cmlwQWxpYXNTdWZmaXggPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgICB0ZXh0LmVuZHNXaXRoKFwifFwiKSA/IHRleHQuc2xpY2UoMCwgLTEpIDogdGV4dDtcblxuICAgIGxldCBjYWNoZWRNYW51YWxQYXJzZTogeyBpbnB1dDogc3RyaW5nOyBtb21lbnQ6IE1vbWVudCB9IHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBQYXJzZXMgbWFudWFsbHktdHlwZWQgdGV4dCB2aWEgdGhlIE5MUCBwYXJzZXIsIGNhY2hpbmcgdGhlIHJlc3VsdC5cbiAgICAvLyBDYWxsZWQgZnJvbSBib3RoIHRoZSBpbnB1dCdzIG9uQ2hhbmdlIGhhbmRsZXIgKHRvIHZhbGlkYXRlL3VwZGF0ZSB0aGVcbiAgICAvLyBjYWxlbmRhciBzZWxlY3Rpb24pIGFuZCBnZXREYXRlU3RyKCkgKHRvIGJ1aWxkIHRoZSBwcmV2aWV3L291dHB1dCkgLS1cbiAgICAvLyB3aXRob3V0IHRoZSBjYWNoZSwgdHlwaW5nIGEgc2luZ2xlIGNoYXJhY3RlciBpbnZva2VkXG4gICAgLy8gcGx1Z2luLnBhcnNlRGF0ZSgpIDItMyB0aW1lcyAob25DaGFuZ2UncyBvd24gdmFsaWRhdGlvbiBjYWxsLCB0aGVuXG4gICAgLy8gdXBkYXRlU2VsZWN0ZWREYXRlIC0+IHVwZGF0ZVByZXZpZXcgLT4gZ2V0RGF0ZVN0ciwgcGx1cyBvbkNoYW5nZSdzXG4gICAgLy8gdHJhaWxpbmcgdXBkYXRlUHJldmlldygpIGNhbGwpLCB3aGljaCBtYXR0ZXJzIHNpbmNlIE5MUCBwYXJzaW5nIGlzbid0XG4gICAgLy8gZnJlZS5cbiAgICBjb25zdCBwYXJzZU1hbnVhbElucHV0ID0gKGNsZWFuVGV4dDogc3RyaW5nKTogTW9tZW50ID0+IHtcbiAgICAgIGlmIChjYWNoZWRNYW51YWxQYXJzZSAmJiBjYWNoZWRNYW51YWxQYXJzZS5pbnB1dCA9PT0gY2xlYW5UZXh0KSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRNYW51YWxQYXJzZS5tb21lbnQ7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJzZWRNb21lbnQgPSB0aGlzLnBsdWdpbi5wYXJzZURhdGUoY2xlYW5UZXh0KS5tb21lbnQ7XG4gICAgICBjYWNoZWRNYW51YWxQYXJzZSA9IHsgaW5wdXQ6IGNsZWFuVGV4dCwgbW9tZW50OiBwYXJzZWRNb21lbnQgfTtcbiAgICAgIHJldHVybiBwYXJzZWRNb21lbnQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldERhdGVTdHIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBzaG91bGRJbmNsdWRlQWxpYXMgPSBkYXRlSW5wdXQuZW5kc1dpdGgoXCJ8XCIpO1xuICAgICAgY29uc3QgY2xlYW5EYXRlSW5wdXQgPSBzdHJpcEFsaWFzU3VmZml4KGRhdGVJbnB1dCk7XG5cbiAgICAgIC8vIFZhbGlkZXIgbGUgZm9ybWF0IGF2YW50IHV0aWxpc2F0aW9uXG4gICAgICBjb25zdCBmb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQobW9tZW50Rm9ybWF0KTtcbiAgICAgIGNvbnN0IGZvcm1hdFRvVXNlID0gZm9ybWF0VmFsaWRhdGlvbi52YWxpZCA/IG1vbWVudEZvcm1hdCA6IERFRkFVTFRfU0VUVElOR1MubW9kYWxNb21lbnRGb3JtYXQ7XG5cbiAgICAgIC8vIE9ubHkgcm91bmQtdHJpcCB0aHJvdWdoIHRoZSBOTFAgcGFyc2VyIHdoZW4gdGhlIHVzZXIgYWN0dWFsbHkgdHlwZWRcbiAgICAgIC8vIHNvbWV0aGluZyBpbiB0aGUgbWFudWFsIGZpZWxkIChlLmcuIFwibmV4dCBmcmlkYXlcIikgLS0gdGhpcy5zZWxlY3RlZERhdGVcbiAgICAgIC8vIChjYWxlbmRhciBjbGlja3MsIHF1aWNrLXNlbGVjdCBidXR0b25zKSBpcyBhbHJlYWR5IGEgcmVzb2x2ZWQgbW9tZW50XG4gICAgICAvLyB3aXRoIG5vdGhpbmcgbGVmdCB0byBwYXJzZS5cbiAgICAgIGNvbnN0IHBhcnNlZE1vbWVudCA9IGNsZWFuRGF0ZUlucHV0XG4gICAgICAgID8gcGFyc2VNYW51YWxJbnB1dChjbGVhbkRhdGVJbnB1dClcbiAgICAgICAgOiB0aGlzLnNlbGVjdGVkRGF0ZTtcblxuICAgICAgLy8gVGhpcyBpcyBhIGRhdGUgcGlja2VyLCBub3QgYSB0aW1lIHBpY2tlciAtLSB0aGVyZSdzIG5vIHRpbWUtb2YtZGF5XG4gICAgICAvLyBjb250cm9sIGFueXdoZXJlIGluIHRoaXMgbW9kYWwncyBVSSwgc28gYW55IHRpbWUgdGhlIE5MUCBwYXJzZXJcbiAgICAgIC8vIG1pZ2h0IGhhdmUgaW5mZXJyZWQgZnJvbSB0eXBlZCB0ZXh0IChlLmcuIFwidG9kYXkgYXQgM3BtXCIpIGlzXG4gICAgICAvLyBkZWxpYmVyYXRlbHkgZGlzY2FyZGVkIGhlcmUsIG5vdCBqdXN0IGxlZnQgYXQgd2hhdGV2ZXIgZGVmYXVsdFxuICAgICAgLy8gY2hyb25vLW5vZGUgaGFwcGVuZWQgdG8gcHJvZHVjZS4gQ2xvbmVkIGZpcnN0OiBwYXJzZWRNb21lbnQgbWF5IGJlXG4gICAgICAvLyB0aGUgY2FjaGVkIHJlc3VsdCBmcm9tIHBhcnNlTWFudWFsSW5wdXQoKSwgYW5kIG1vbWVudCdzIG11dGF0aW5nXG4gICAgICAvLyAuc3RhcnRPZigpIHdvdWxkIG90aGVyd2lzZSBjb3JydXB0IHRoYXQgY2FjaGUgZW50cnkuXG4gICAgICBjb25zdCBtb21lbnRUb0Zvcm1hdCA9IHBhcnNlZE1vbWVudC5pc1ZhbGlkKCkgPyBwYXJzZWRNb21lbnQuY2xvbmUoKS5zdGFydE9mKFwiZGF5XCIpIDogcGFyc2VkTW9tZW50O1xuXG4gICAgICBsZXQgcGFyc2VkRGF0ZVN0cmluZyA9IG1vbWVudFRvRm9ybWF0LmlzVmFsaWQoKVxuICAgICAgICA/IG1vbWVudFRvRm9ybWF0LmZvcm1hdChmb3JtYXRUb1VzZSlcbiAgICAgICAgOiBcIlwiO1xuXG4gICAgICBpZiAoaW5zZXJ0QXNMaW5rKSB7XG4gICAgICAgIHBhcnNlZERhdGVTdHJpbmcgPSBnZW5lcmF0ZU1hcmtkb3duTGluayhcbiAgICAgICAgICB0aGlzLmFwcCxcbiAgICAgICAgICBwYXJzZWREYXRlU3RyaW5nLFxuICAgICAgICAgIHNob3VsZEluY2x1ZGVBbGlhcyA/IGNsZWFuRGF0ZUlucHV0IDogdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZWREYXRlU3RyaW5nO1xuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVQcmV2aWV3ID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucHJldmlld0VsKSB7XG4gICAgICAgIHRoaXMucHJldmlld0VsLnNldFRleHQoZ2V0RGF0ZVN0cigpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gc3luY0lucHV0IGNvbnRyb2xzIHdoZXRoZXIgdGhlIHJhdyB0ZXh0IGZpZWxkIGdldHMgb3ZlcndyaXR0ZW4gd2l0aFxuICAgIC8vIHRoZSBmb3JtYXR0ZWQgZGF0ZS4gQ2FsZW5kYXIgY2xpY2tzL3F1aWNrIGJ1dHRvbnMva2V5Ym9hcmQgbmF2IHdhbnRcbiAgICAvLyB0aGF0IChpdCdzIGhvdyB0aGUgZmllbGQgcmVmbGVjdHMgdGhlIHNlbGVjdGlvbiksIGJ1dCB0aGUgZmllbGQncyBvd25cbiAgICAvLyBvbkNoYW5nZSBoYW5kbGVyIG11c3QgTk9UIHN5bmMgaXRzZWxmIHdoaWxlIHRoZSB1c2VyIGlzIHN0aWxsIHR5cGluZ1xuICAgIC8vIGludG8gaXQgLS0gZ2V0RGF0ZVN0cigpL3VwZGF0ZVByZXZpZXcoKSBhbHJlYWR5IHNob3cgYSBsaXZlIHByZXZpZXdcbiAgICAvLyBvZiB0aGUgcGFyc2VkIHJlc3VsdCBzZXBhcmF0ZWx5LCB3aXRob3V0IHRvdWNoaW5nIHdoYXQncyBiZWluZyB0eXBlZC5cbiAgICBjb25zdCB1cGRhdGVTZWxlY3RlZERhdGUgPSAoZGF0ZTogTW9tZW50LCBzeW5jSW5wdXQgPSB0cnVlKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGUuY2xvbmUoKTtcbiAgICAgIGlmIChzeW5jSW5wdXQgJiYgdGhpcy5kYXRlSW5wdXRFbCkge1xuICAgICAgICB0aGlzLmRhdGVJbnB1dEVsLnZhbHVlID0gZGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xuICAgICAgfVxuICAgICAgdXBkYXRlUHJldmlldygpO1xuICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgIH07XG5cbiAgICAvLyBTdG9ja2VyIGxhIGZvbmN0aW9uIHBvdXIgcXUnZWxsZSBzb2l0IGFjY2Vzc2libGUgZGVwdWlzIHJlbmRlckNhbGVuZGFyXG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZERhdGVGbiA9IHVwZGF0ZVNlbGVjdGVkRGF0ZTtcblxuICAgIC8vIENvbnRhaW5lciBwcmluY2lwYWxcbiAgICBjb25zdCBjb250YWluZXIgPSBjb250ZW50RWwuY3JlYXRlRGl2KFwibmxkLWRhdGUtcGlja2VyLWNvbnRhaW5lclwiKTtcblxuICAgIC8vIFNlY3Rpb24gZGVzIGJvdXRvbnMgcmFwaWRlc1xuICAgIHRoaXMucXVpY2tCdXR0b25zRWwgPSBjb250YWluZXIuY3JlYXRlRGl2KFwibmxkLXF1aWNrLWJ1dHRvbnNcIik7XG4gICAgdGhpcy5yZW5kZXJRdWlja0J1dHRvbnModXBkYXRlU2VsZWN0ZWREYXRlKTtcblxuICAgIC8vIFNlY3Rpb24gZHUgY2FsZW5kcmllclxuICAgIGNvbnN0IGNhbGVuZGFyU2VjdGlvbiA9IGNvbnRhaW5lci5jcmVhdGVEaXYoXCJubGQtY2FsZW5kYXItc2VjdGlvblwiKTtcbiAgICBcbiAgICAvLyBOYXZpZ2F0aW9uIGR1IGNhbGVuZHJpZXJcbiAgICBjb25zdCBuYXZFbCA9IGNhbGVuZGFyU2VjdGlvbi5jcmVhdGVEaXYoXCJubGQtY2FsZW5kYXItbmF2XCIpO1xuICAgIGNvbnN0IHByZXZNb250aEJ0biA9IG5hdkVsLmNyZWF0ZUVsKFwiYnV0dG9uXCIsIHtcbiAgICAgIGNsczogXCJubGQtbmF2LWJ0blwiLFxuICAgICAgdGV4dDogXCLigLlcIixcbiAgICAgIGF0dHI6IHsgXCJhcmlhLWxhYmVsXCI6IFwiTW9pcyBwcsOpY8OpZGVudFwiIH1cbiAgICB9KTtcbiAgICBcbiAgICBjb25zdCBtb250aFllYXJFbCA9IG5hdkVsLmNyZWF0ZURpdihcIm5sZC1tb250aC15ZWFyXCIpO1xuICAgIFxuICAgIGNvbnN0IG5leHRNb250aEJ0biA9IG5hdkVsLmNyZWF0ZUVsKFwiYnV0dG9uXCIsIHtcbiAgICAgIGNsczogXCJubGQtbmF2LWJ0blwiLFxuICAgICAgdGV4dDogXCLigLpcIixcbiAgICAgIGF0dHI6IHsgXCJhcmlhLWxhYmVsXCI6IFwiTW9pcyBzdWl2YW50XCIgfVxuICAgIH0pO1xuXG4gICAgcHJldk1vbnRoQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aC5zdWJ0cmFjdCgxLCBcIm1vbnRoXCIpO1xuICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgdGhpcy51cGRhdGVNb250aFllYXJEaXNwbGF5KG1vbnRoWWVhckVsKTtcbiAgICB9KTtcblxuICAgIG5leHRNb250aEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGguYWRkKDEsIFwibW9udGhcIik7XG4gICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgICB0aGlzLnVwZGF0ZU1vbnRoWWVhckRpc3BsYXkobW9udGhZZWFyRWwpO1xuICAgIH0pO1xuXG4gICAgLy8gU8OpbGVjdGV1ciBkJ2FubsOpZSAoZHJvcGRvd24pXG4gICAgY29uc3QgeWVhclNlbGVjdCA9IG5hdkVsLmNyZWF0ZUVsKFwic2VsZWN0XCIsIHsgY2xzOiBcIm5sZC15ZWFyLXNlbGVjdFwiIH0pO1xuICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gdGhpcy5jdXJyZW50TW9udGgueWVhcigpO1xuICAgIGZvciAobGV0IHllYXIgPSBjdXJyZW50WWVhciAtIDEwOyB5ZWFyIDw9IGN1cnJlbnRZZWFyICsgMTA7IHllYXIrKykge1xuICAgICAgY29uc3Qgb3B0aW9uID0geWVhclNlbGVjdC5jcmVhdGVFbChcIm9wdGlvblwiLCB7IHRleHQ6IFN0cmluZyh5ZWFyKSwgdmFsdWU6IFN0cmluZyh5ZWFyKSB9KTtcbiAgICAgIGlmICh5ZWFyID09PSBjdXJyZW50WWVhcikge1xuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB5ZWFyU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xuICAgICAgdGhpcy5jdXJyZW50TW9udGgueWVhcihwYXJzZUludCh0YXJnZXQudmFsdWUpKTtcbiAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICAgIHRoaXMudXBkYXRlTW9udGhZZWFyRGlzcGxheShtb250aFllYXJFbCk7XG4gICAgfSk7XG5cbiAgICAvLyBTw6lsZWN0ZXVyIGRlIG1vaXMgKGRyb3Bkb3duKVxuICAgIGNvbnN0IG1vbnRoU2VsZWN0ID0gbmF2RWwuY3JlYXRlRWwoXCJzZWxlY3RcIiwgeyBjbHM6IFwibmxkLW1vbnRoLXNlbGVjdFwiIH0pO1xuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBtb21lbnQubW9udGhzKCk7XG4gICAgbW9udGhOYW1lcy5mb3JFYWNoKChtb250aCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IG1vbnRoU2VsZWN0LmNyZWF0ZUVsKFwib3B0aW9uXCIsIHsgdGV4dDogbW9udGgsIHZhbHVlOiBTdHJpbmcoaW5kZXgpIH0pO1xuICAgICAgaWYgKGluZGV4ID09PSB0aGlzLmN1cnJlbnRNb250aC5tb250aCgpKSB7XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbW9udGhTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoZSkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aC5tb250aChwYXJzZUludCh0YXJnZXQudmFsdWUpKTtcbiAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICAgIHRoaXMudXBkYXRlTW9udGhZZWFyRGlzcGxheShtb250aFllYXJFbCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZU1vbnRoWWVhckRpc3BsYXkobW9udGhZZWFyRWwpO1xuXG4gICAgLy8gQ2FsZW5kcmllclxuICAgIHRoaXMuY2FsZW5kYXJFbCA9IGNhbGVuZGFyU2VjdGlvbi5jcmVhdGVEaXYoXCJubGQtY2FsZW5kYXJcIik7XG4gICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuXG4gICAgLy8gU2VjdGlvbiBkZSBzYWlzaWUgbWFudWVsbGVcbiAgICBjb25zdCBpbnB1dFNlY3Rpb24gPSBjb250YWluZXIuY3JlYXRlRGl2KFwibmxkLWlucHV0LXNlY3Rpb25cIik7XG4gICAgY29uc3QgZGF0ZUlucHV0RWwgPSBuZXcgU2V0dGluZyhpbnB1dFNlY3Rpb24pXG4gICAgICAuc2V0TmFtZShcIkRhdGVcIilcbiAgICAgIC5zZXREZXNjKFwiXCIpXG4gICAgICAuYWRkVGV4dCgodGV4dEVsKSA9PiB7XG4gICAgICAgIHRleHRFbC5zZXRQbGFjZWhvbGRlcihcIlRvZGF5XCIpO1xuICAgICAgICB0ZXh0RWwuc2V0VmFsdWUodGhpcy5zZWxlY3RlZERhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSk7XG4gICAgICAgIHRoaXMuZGF0ZUlucHV0RWwgPSB0ZXh0RWwuaW5wdXRFbDtcblxuICAgICAgICB0ZXh0RWwub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgZGF0ZUlucHV0ID0gdmFsdWU7XG4gICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRNb21lbnQgPSBwYXJzZU1hbnVhbElucHV0KHN0cmlwQWxpYXNTdWZmaXgodmFsdWUpKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRNb21lbnQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgIC8vIHVwZGF0ZVNlbGVjdGVkRGF0ZSgpIGFscmVhZHkgY2FsbHMgdXBkYXRlUHJldmlldygpIGl0c2VsZjtcbiAgICAgICAgICAgICAgLy8gYW4gdW5jb25kaXRpb25hbCBjYWxsIGJlbG93IG9uIHRvcCBvZiB0aGlzIHdvdWxkIGp1c3RcbiAgICAgICAgICAgICAgLy8gcmUtcnVuIGdldERhdGVTdHIoKSAoYW5kLCBiZWZvcmUgcGFyc2VNYW51YWxJbnB1dCgpJ3NcbiAgICAgICAgICAgICAgLy8gY2FjaGluZywgcmUtaW52b2tlIHRoZSBOTFAgcGFyc2VyKSBmb3Igbm8gcmVhc29uLlxuICAgICAgICAgICAgICB1cGRhdGVTZWxlY3RlZERhdGUocGFyc2VkTW9tZW50LCBmYWxzZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdXBkYXRlUHJldmlldygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0ZXh0RWwuaW5wdXRFbC5mb2N1cygpLCAxMCk7XG4gICAgICB9KTtcbiAgICB0aGlzLnByZXZpZXdFbCA9IGRhdGVJbnB1dEVsLmRlc2NFbDtcbiAgICB1cGRhdGVQcmV2aWV3KCk7XG5cbiAgICAvLyBPcHRpb25zIGRlIGZvcm1hdFxuICAgIGNvbnN0IGZvcm1hdFNldHRpbmcgPSBuZXcgU2V0dGluZyhpbnB1dFNlY3Rpb24pXG4gICAgICAuc2V0TmFtZShcIkRhdGUgZm9ybWF0XCIpXG4gICAgICAuc2V0RGVzYyhcIk1vbWVudCBmb3JtYXQgdG8gYmUgdXNlZFwiKVxuICAgICAgLmFkZE1vbWVudEZvcm1hdCgobW9tZW50RWwpID0+IHtcbiAgICAgICAgbW9tZW50RWwuc2V0UGxhY2Vob2xkZXIoXCJZWVlZLU1NLUREXCIpO1xuICAgICAgICBtb21lbnRFbC5zZXRWYWx1ZShtb21lbnRGb3JtYXQpO1xuICAgICAgICBtb21lbnRFbC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh2YWx1ZS50cmltKCkgfHwgXCJZWVlZLU1NLUREXCIpO1xuICAgICAgICAgIGlmICh2YWxpZGF0ZWQudmFsaWQpIHtcbiAgICAgICAgICAgIG1vbWVudEZvcm1hdCA9IHZhbHVlLnRyaW0oKSB8fCBcIllZWVktTU0tRERcIjtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLm1vZGFsTW9tZW50Rm9ybWF0ID0gbW9tZW50Rm9ybWF0O1xuICAgICAgICAgICAgdm9pZCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgIHVwZGF0ZVByZXZpZXcoKTtcbiAgICAgICAgICAgIC8vIE1ldHRyZSDDoCBqb3VyIGxhIGRlc2NyaXB0aW9uIGF2ZWMgbGEgcHLDqXZpc3VhbGlzYXRpb25cbiAgICAgICAgICAgIGZvcm1hdFNldHRpbmcuc2V0RGVzYyhgTW9tZW50IGZvcm1hdCB0byBiZSB1c2VkJHt2YWxpZGF0ZWQucHJldmlldyA/IGAgKFByZXZpZXc6ICR7dmFsaWRhdGVkLnByZXZpZXd9KWAgOiBcIlwifWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBBZmZpY2hlciBsJ2VycmV1ciBkYW5zIGxhIGRlc2NyaXB0aW9uXG4gICAgICAgICAgICBmb3JtYXRTZXR0aW5nLnNldERlc2MoYE1vbWVudCBmb3JtYXQgdG8gYmUgdXNlZCAtIOKaoO+4jyAke3ZhbGlkYXRlZC5lcnJvciB8fCBcIkZvcm1hdCBpbnZhbGlkZVwifWApO1xuICAgICAgICAgICAgLy8gTmUgcGFzIHNhdXZlZ2FyZGVyIGxlIGZvcm1hdCBpbnZhbGlkZSwgcmVzdGF1cmVyIGxlIHByw6ljw6lkZW50XG4gICAgICAgICAgICBtb21lbnRFbC5zZXRWYWx1ZShtb21lbnRGb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICBcbiAgICAvLyBBZmZpY2hlciBsYSBwcsOpdmlzdWFsaXNhdGlvbiBpbml0aWFsZVxuICAgIGNvbnN0IGluaXRpYWxWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQobW9tZW50Rm9ybWF0KTtcbiAgICBpZiAoaW5pdGlhbFZhbGlkYXRpb24udmFsaWQgJiYgaW5pdGlhbFZhbGlkYXRpb24ucHJldmlldykge1xuICAgICAgZm9ybWF0U2V0dGluZy5zZXREZXNjKGBNb21lbnQgZm9ybWF0IHRvIGJlIHVzZWQgKFByZXZpZXc6ICR7aW5pdGlhbFZhbGlkYXRpb24ucHJldmlld30pYCk7XG4gICAgfVxuXG4gICAgbmV3IFNldHRpbmcoaW5wdXRTZWN0aW9uKVxuICAgICAgLnNldE5hbWUoXCJBZGQgYXMgbGluaz9cIilcbiAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZUVsKSA9PiB7XG4gICAgICAgIHRvZ2dsZUVsLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLm1vZGFsVG9nZ2xlTGluaykub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaW5zZXJ0QXNMaW5rID0gdmFsdWU7XG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubW9kYWxUb2dnbGVMaW5rID0gaW5zZXJ0QXNMaW5rO1xuICAgICAgICAgIHZvaWQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgdXBkYXRlUHJldmlldygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgLy8gQm91dG9ucyBkJ2FjdGlvblxuICAgIGlucHV0U2VjdGlvbi5jcmVhdGVEaXYoXCJtb2RhbC1idXR0b24tY29udGFpbmVyXCIsIChidXR0b25Db250YWluZXJFbCkgPT4ge1xuICAgICAgYnV0dG9uQ29udGFpbmVyRWxcbiAgICAgICAgLmNyZWF0ZUVsKFwiYnV0dG9uXCIsIHsgYXR0cjogeyB0eXBlOiBcImJ1dHRvblwiIH0sIHRleHQ6IFwiTmV2ZXIgbWluZFwiIH0pXG4gICAgICAgIC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4gdGhpcy5jbG9zZSgpKTtcbiAgICAgIGJ1dHRvbkNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgYXR0cjogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgIGNsczogXCJtb2QtY3RhXCIsXG4gICAgICAgIHRleHQ6IFwiSW5zZXJ0IGRhdGVcIixcbiAgICAgIH0pLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5zZXJ0RGF0ZShnZXREYXRlU3RyKCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBSYWNjb3VyY2lzIGNsYXZpZXJcbiAgICB0aGlzLmtleWJvYXJkSGFuZGxlciA9IHRoaXMuY3JlYXRlS2V5Ym9hcmRIYW5kbGVyKHByZXZNb250aEJ0biwgbmV4dE1vbnRoQnRuLCB1cGRhdGVTZWxlY3RlZERhdGUpO1xuICAgIHRoaXMuY29udGVudEVsLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMua2V5Ym9hcmRIYW5kbGVyKTtcblxuICAgIC8vIE9ic2VydmVyIGxlcyBjaGFuZ2VtZW50cyBkZSB0aMOobWVcbiAgICB0aGlzLnNldHVwVGhlbWVPYnNlcnZlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJRdWlja0J1dHRvbnModXBkYXRlU2VsZWN0ZWREYXRlOiAoZGF0ZTogTW9tZW50KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnF1aWNrQnV0dG9uc0VsKSByZXR1cm47XG5cbiAgICB0aGlzLnF1aWNrQnV0dG9uc0VsLmVtcHR5KCk7XG4gICAgdGhpcy5xdWlja0J1dHRvbnNFbC5jcmVhdGVEaXYoeyBjbHM6IFwibmxkLXF1aWNrLWJ1dHRvbnMtbGFiZWxcIiwgdGV4dDogXCJRdWljayBzZWxlY3Q6XCIgfSk7XG5cbiAgICBjb25zdCBwcmltYXJ5TGFuZyA9IHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlc1swXSB8fCBcImVuXCI7XG4gICAgXG4gICAgLy8gRm9uY3Rpb24gaGVscGVyIHBvdXIgb2J0ZW5pciBsYSBwcmVtacOocmUgdmFyaWFudGUgZCd1bmUgdHJhZHVjdGlvblxuICAgIGNvbnN0IGdldEZpcnN0VmFyaWFudCA9IChrZXk6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHQoa2V5LCBwcmltYXJ5TGFuZyk7XG4gICAgICBpZiAodHJhbnNsYXRpb24gPT09IFwiTk9URk9VTkRcIikge1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfVxuICAgICAgLy8gUHJlbmRyZSBsYSBwcmVtacOocmUgdmFyaWFudGUgc2kgcGx1c2lldXJzIChzw6lwYXLDqWVzIHBhciB8KVxuICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uLnNwbGl0KFwifFwiKVswXS50cmltKCk7XG4gICAgfTtcblxuICAgIC8vIC5zdGFydE9mKFwiZGF5XCIpIG9uIGV2ZXJ5IG9wdGlvbjogd2l0aG91dCBpdCB0aGVzZSBjYXJyaWVkIHRoZSByZWFsXG4gICAgLy8gY3VycmVudCB3YWxsLWNsb2NrIHRpbWUgKGUuZy4gY2xpY2tpbmcgXCJUb21vcnJvd1wiIGF0IDE0OjMyIHNlbGVjdGVkXG4gICAgLy8gdG9tb3Jyb3cgYXQgMTQ6MzIsIG5vdCBhIGNsZWFuIGRhdGUpLCBpbmNvbnNpc3RlbnQgd2l0aCBjYWxlbmRhci1ncmlkXG4gICAgLy8gY2xpY2tzIChhbHJlYWR5IG1pZG5pZ2h0LWJhc2VkKSBhbmQgbGlhYmxlIHRvIHRoZSBzYW1lIFwidW5leHBlY3RlZFxuICAgIC8vIHRpbWUgYmFrZWQgaW50byB0aGUgb3V0cHV0XCIgY29uZnVzaW9uIGFzIHRoZSBnZXREYXRlU3RyKCkgYnVnIGFib3ZlLlxuICAgIGNvbnN0IHF1aWNrT3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IGdldEZpcnN0VmFyaWFudChcInRvZGF5XCIpLFxuICAgICAgICBtb21lbnQ6IG1vbWVudCgpLnN0YXJ0T2YoXCJkYXlcIilcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiBnZXRGaXJzdFZhcmlhbnQoXCJ0b21vcnJvd1wiKSxcbiAgICAgICAgbW9tZW50OiBtb21lbnQoKS5hZGQoMSwgXCJkYXlcIikuc3RhcnRPZihcImRheVwiKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IGdldEZpcnN0VmFyaWFudChcInllc3RlcmRheVwiKSxcbiAgICAgICAgbW9tZW50OiBtb21lbnQoKS5zdWJ0cmFjdCgxLCBcImRheVwiKS5zdGFydE9mKFwiZGF5XCIpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogYCR7Z2V0Rmlyc3RWYXJpYW50KFwibmV4dFwiKX0gJHtnZXRGaXJzdFZhcmlhbnQoXCJ3ZWVrXCIpfWAsXG4gICAgICAgIG1vbWVudDogbW9tZW50KCkuYWRkKDEsIFwid2Vla1wiKS5zdGFydE9mKFwiZGF5XCIpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogYCR7Z2V0Rmlyc3RWYXJpYW50KFwibmV4dFwiKX0gJHtnZXRGaXJzdFZhcmlhbnQoXCJtb250aFwiKX1gLFxuICAgICAgICBtb21lbnQ6IG1vbWVudCgpLmFkZCgxLCBcIm1vbnRoXCIpLnN0YXJ0T2YoXCJkYXlcIilcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiBgJHtnZXRGaXJzdFZhcmlhbnQoXCJuZXh0XCIpfSAke2dldEZpcnN0VmFyaWFudChcInllYXJcIil9YCxcbiAgICAgICAgbW9tZW50OiBtb21lbnQoKS5hZGQoMSwgXCJ5ZWFyXCIpLnN0YXJ0T2YoXCJkYXlcIilcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IGJ1dHRvbnNDb250YWluZXIgPSB0aGlzLnF1aWNrQnV0dG9uc0VsLmNyZWF0ZURpdihcIm5sZC1xdWljay1idXR0b25zLWdyaWRcIik7XG5cbiAgICBxdWlja09wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBidXR0b24gPSBidXR0b25zQ29udGFpbmVyLmNyZWF0ZUVsKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgY2xzOiBcIm5sZC1xdWljay1idG5cIixcbiAgICAgICAgdGV4dDogb3B0aW9uLmxhYmVsLFxuICAgICAgfSk7XG5cbiAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICB1cGRhdGVTZWxlY3RlZERhdGUob3B0aW9uLm1vbWVudCk7XG4gICAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gb3B0aW9uLm1vbWVudC5jbG9uZSgpO1xuICAgICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhbGVuZGFyRWwpIHJldHVybjtcblxuICAgIHRoaXMuY2FsZW5kYXJFbC5lbXB0eSgpO1xuXG4gICAgLy8gRW4tdMOqdGVzIGRlcyBqb3VycyBkZSBsYSBzZW1haW5lXG4gICAgY29uc3Qgd2Vla1N0YXJ0ID0gdGhpcy5wbHVnaW4uc2V0dGluZ3Mud2Vla1N0YXJ0ID09PSBcImxvY2FsZS1kZWZhdWx0XCJcbiAgICAgID8gZ2V0TG9jYWxlV2Vla1N0YXJ0KClcbiAgICAgIDogdGhpcy5wbHVnaW4uc2V0dGluZ3Mud2Vla1N0YXJ0O1xuICAgIFxuICAgIGNvbnN0IHdlZWtTdGFydEluZGV4ID0gd2Vla1N0YXJ0ID09PSBcInN1bmRheVwiID8gMCA6IDE7XG4gICAgY29uc3Qgd2Vla2RheXMgPSBtb21lbnQud2Vla2RheXNTaG9ydCgpO1xuICAgIGNvbnN0IG9yZGVyZWRXZWVrZGF5cyA9IFtcbiAgICAgIC4uLndlZWtkYXlzLnNsaWNlKHdlZWtTdGFydEluZGV4KSxcbiAgICAgIC4uLndlZWtkYXlzLnNsaWNlKDAsIHdlZWtTdGFydEluZGV4KSxcbiAgICBdO1xuXG4gICAgY29uc3QgaGVhZGVyUm93ID0gdGhpcy5jYWxlbmRhckVsLmNyZWF0ZURpdihcIm5sZC1jYWxlbmRhci1oZWFkZXJcIik7XG4gICAgb3JkZXJlZFdlZWtkYXlzLmZvckVhY2goKGRheSkgPT4ge1xuICAgICAgY29uc3QgZGF5SGVhZGVyID0gaGVhZGVyUm93LmNyZWF0ZURpdihcIm5sZC1jYWxlbmRhci1kYXktaGVhZGVyXCIpO1xuICAgICAgZGF5SGVhZGVyLnNldFRleHQoZGF5KTtcbiAgICB9KTtcblxuICAgIC8vIEdyaWxsZSBkdSBjYWxlbmRyaWVyXG4gICAgY29uc3QgZ3JpZCA9IHRoaXMuY2FsZW5kYXJFbC5jcmVhdGVEaXYoXCJubGQtY2FsZW5kYXItZ3JpZFwiKTtcblxuICAgIGNvbnN0IHN0YXJ0T2ZNb250aCA9IHRoaXMuY3VycmVudE1vbnRoLmNsb25lKCkuc3RhcnRPZihcIm1vbnRoXCIpO1xuICAgIGNvbnN0IGVuZE9mTW9udGggPSB0aGlzLmN1cnJlbnRNb250aC5jbG9uZSgpLmVuZE9mKFwibW9udGhcIik7XG4gICAgXG4gICAgLy8gQ2FsY3VsZXIgbGUgZMOpYnV0IGRlIGxhIHNlbWFpbmUgc2Vsb24gbGVzIHByw6lmw6lyZW5jZXNcbiAgICBjb25zdCBzdGFydERhdGUgPSBzdGFydE9mTW9udGguY2xvbmUoKTtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBzdGFydERhdGUuZGF5KCk7XG4gICAgY29uc3QgZGlmZiA9IGRheU9mV2VlayAtIHdlZWtTdGFydEluZGV4O1xuICAgIGlmIChkaWZmIDwgMCkge1xuICAgICAgc3RhcnREYXRlLnN1YnRyYWN0KDcgKyBkaWZmLCBcImRheXNcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0RGF0ZS5zdWJ0cmFjdChkaWZmLCBcImRheXNcIik7XG4gICAgfVxuICAgIFxuICAgIC8vIENhbGN1bGVyIGxhIGZpbiBkZSBsYSBzZW1haW5lXG4gICAgY29uc3QgZW5kRGF0ZSA9IGVuZE9mTW9udGguY2xvbmUoKTtcbiAgICBjb25zdCBlbmREYXlPZldlZWsgPSBlbmREYXRlLmRheSgpO1xuICAgIGNvbnN0IGVuZERpZmYgPSAoNiArIHdlZWtTdGFydEluZGV4IC0gZW5kRGF5T2ZXZWVrKSAlIDc7XG4gICAgaWYgKGVuZERpZmYgPiAwKSB7XG4gICAgICBlbmREYXRlLmFkZChlbmREaWZmLCBcImRheXNcIik7XG4gICAgfVxuXG4gICAgY29uc3QgdG9kYXkgPSBtb21lbnQoKTtcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHN0YXJ0RGF0ZS5jbG9uZSgpO1xuXG4gICAgd2hpbGUgKGN1cnJlbnREYXRlLmlzU2FtZU9yQmVmb3JlKGVuZERhdGUsIFwiZGF5XCIpKSB7XG4gICAgICAvLyBDYXB0dXJlciBsYSBkYXRlIGFjdHVlbGxlIGRhbnMgdW5lIHZhcmlhYmxlIGxvY2FsZSBwb3VyIMOpdml0ZXIgbGVzIHByb2Jsw6htZXMgZGUgY2xvc3VyZVxuICAgICAgY29uc3QgZGF0ZUZvclRoaXNEYXkgPSBjdXJyZW50RGF0ZS5jbG9uZSgpO1xuICAgICAgY29uc3QgZGF5RWwgPSBncmlkLmNyZWF0ZURpdihcIm5sZC1jYWxlbmRhci1kYXlcIik7XG4gICAgICBjb25zdCBkYXlOdW1iZXIgPSBkYXRlRm9yVGhpc0RheS5kYXRlKCk7XG5cbiAgICAgIC8vIFN0eWxlIHNlbG9uIGxlIHR5cGUgZGUgam91clxuICAgICAgaWYgKGRhdGVGb3JUaGlzRGF5LmlzU2FtZSh0b2RheSwgXCJkYXlcIikpIHtcbiAgICAgICAgZGF5RWwuYWRkQ2xhc3MoXCJubGQtdG9kYXlcIik7XG4gICAgICB9XG4gICAgICBpZiAoZGF0ZUZvclRoaXNEYXkuaXNTYW1lKHRoaXMuc2VsZWN0ZWREYXRlLCBcImRheVwiKSkge1xuICAgICAgICBkYXlFbC5hZGRDbGFzcyhcIm5sZC1zZWxlY3RlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmICghZGF0ZUZvclRoaXNEYXkuaXNTYW1lKHRoaXMuY3VycmVudE1vbnRoLCBcIm1vbnRoXCIpKSB7XG4gICAgICAgIGRheUVsLmFkZENsYXNzKFwibmxkLW90aGVyLW1vbnRoXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXlOdW1iZXJFbCA9IGRheUVsLmNyZWF0ZURpdihcIm5sZC1kYXktbnVtYmVyXCIpO1xuICAgICAgZGF5TnVtYmVyRWwuc2V0VGV4dChTdHJpbmcoZGF5TnVtYmVyKSk7XG5cbiAgICAgIC8vIMOJdsOpbmVtZW50IGRlIGNsaWNcbiAgICAgIGRheUVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZUZuKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZERhdGVGbihkYXRlRm9yVGhpc0RheSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjdXJyZW50RGF0ZS5hZGQoMSwgXCJkYXlcIik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb250aFllYXJEaXNwbGF5KG1vbnRoWWVhckVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIG1vbnRoWWVhckVsLmVtcHR5KCk7XG4gICAgY29uc3QgbW9udGhOYW1lID0gdGhpcy5jdXJyZW50TW9udGguZm9ybWF0KFwiTU1NTVwiKTtcbiAgICBjb25zdCB5ZWFyID0gdGhpcy5jdXJyZW50TW9udGguZm9ybWF0KFwiWVlZWVwiKTtcbiAgICBjb25zdCBtb250aFNwYW4gPSBtb250aFllYXJFbC5jcmVhdGVTcGFuKCk7XG4gICAgbW9udGhTcGFuLnNldFRleHQobW9udGhOYW1lKTtcbiAgICBjb25zdCBzcGFjZVNwYW4gPSBtb250aFllYXJFbC5jcmVhdGVTcGFuKCk7XG4gICAgc3BhY2VTcGFuLnNldFRleHQoXCIgXCIpO1xuICAgIGNvbnN0IHllYXJTcGFuID0gbW9udGhZZWFyRWwuY3JlYXRlU3BhbigpO1xuICAgIHllYXJTcGFuLnNldFRleHQoeWVhcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUtleWJvYXJkSGFuZGxlcihcbiAgICBwcmV2TW9udGhCdG46IEhUTUxFbGVtZW50LFxuICAgIG5leHRNb250aEJ0bjogSFRNTEVsZW1lbnQsXG4gICAgdXBkYXRlU2VsZWN0ZWREYXRlOiAoZGF0ZTogTW9tZW50KSA9PiB2b2lkXG4gICk6IChlOiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkIHtcbiAgICByZXR1cm4gKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIC8vIMOJdml0ZXIgbGVzIHJhY2NvdXJjaXMgc2kgb24gZXN0IGRhbnMgdW4gaW5wdXRcbiAgICAgIGlmIChlLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgfHwgZS50YXJnZXQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZS5rZXkpIHtcbiAgICAgICAgY2FzZSBcIkFycm93TGVmdFwiOlxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBwcmV2TW9udGhCdG4uY2xpY2soKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFycm93UmlnaHRcIjpcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgbmV4dE1vbnRoQnRuLmNsaWNrKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJBcnJvd1VwXCI6XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoLnN1YnRyYWN0KDEsIFwibW9udGhcIik7XG4gICAgICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQXJyb3dEb3duXCI6XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoLmFkZCgxLCBcIm1vbnRoXCIpO1xuICAgICAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkhvbWVcIjpcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdXBkYXRlU2VsZWN0ZWREYXRlKG1vbWVudCgpLnN0YXJ0T2YoXCJkYXlcIikpO1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gbW9tZW50KCk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRXNjYXBlXCI6XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFRoZW1lT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgLy8gT2JzZXJ2ZXIgbGVzIGNoYW5nZW1lbnRzIGRlIGNsYXNzZSBwb3VyIGTDqXRlY3RlciBsZSBjaGFuZ2VtZW50IGRlIHRow6htZVxuICAgIHRoaXMudGhlbWVPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcbiAgICAgIGNvbnN0IHdhc0RhcmtNb2RlID0gdGhpcy5pc0RhcmtNb2RlO1xuICAgICAgdGhpcy5pc0RhcmtNb2RlID0gYWN0aXZlRG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJ0aGVtZS1kYXJrXCIpO1xuXG4gICAgICBpZiAod2FzRGFya01vZGUgIT09IHRoaXMuaXNEYXJrTW9kZSAmJiB0aGlzLmNvbnRlbnRFbCkge1xuICAgICAgICBpZiAodGhpcy5pc0RhcmtNb2RlKSB7XG4gICAgICAgICAgdGhpcy5jb250ZW50RWwuYWRkQ2xhc3MoXCJubGQtZGFyay1tb2RlXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29udGVudEVsLnJlbW92ZUNsYXNzKFwibmxkLWRhcmstbW9kZVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy50aGVtZU9ic2VydmVyLm9ic2VydmUoYWN0aXZlRG9jdW1lbnQuYm9keSwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIl0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluc2VydERhdGUoZGF0ZVN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKHRoaXMuYXBwLndvcmtzcGFjZSk7XG4gICAgaWYgKCFhY3RpdmVFZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIGFjdGl2ZUVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKGRhdGVTdHIpO1xuICB9XG5cbiAgb25DbG9zZSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcbiAgICBjb250ZW50RWwuZW1wdHkoKTtcblxuICAgIC8vIE5ldHRveWVyIGxlcyBldmVudCBsaXN0ZW5lcnNcbiAgICBpZiAodGhpcy5rZXlib2FyZEhhbmRsZXIpIHtcbiAgICAgIGNvbnRlbnRFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmtleWJvYXJkSGFuZGxlcik7XG4gICAgICB0aGlzLmtleWJvYXJkSGFuZGxlciA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gTmV0dG95ZXIgbCdvYnNlcnZlciBkZSB0aMOobWVcbiAgICBpZiAodGhpcy50aGVtZU9ic2VydmVyKSB7XG4gICAgICB0aGlzLnRoZW1lT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy50aGVtZU9ic2VydmVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCB2YXIgTWVyaWRpZW07XG4oZnVuY3Rpb24gKE1lcmlkaWVtKSB7XG4gICAgTWVyaWRpZW1bTWVyaWRpZW1bXCJBTVwiXSA9IDBdID0gXCJBTVwiO1xuICAgIE1lcmlkaWVtW01lcmlkaWVtW1wiUE1cIl0gPSAxXSA9IFwiUE1cIjtcbn0pKE1lcmlkaWVtIHx8IChNZXJpZGllbSA9IHt9KSk7XG5leHBvcnQgdmFyIFdlZWtkYXk7XG4oZnVuY3Rpb24gKFdlZWtkYXkpIHtcbiAgICBXZWVrZGF5W1dlZWtkYXlbXCJTVU5EQVlcIl0gPSAwXSA9IFwiU1VOREFZXCI7XG4gICAgV2Vla2RheVtXZWVrZGF5W1wiTU9OREFZXCJdID0gMV0gPSBcIk1PTkRBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIlRVRVNEQVlcIl0gPSAyXSA9IFwiVFVFU0RBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIldFRE5FU0RBWVwiXSA9IDNdID0gXCJXRURORVNEQVlcIjtcbiAgICBXZWVrZGF5W1dlZWtkYXlbXCJUSFVSU0RBWVwiXSA9IDRdID0gXCJUSFVSU0RBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIkZSSURBWVwiXSA9IDVdID0gXCJGUklEQVlcIjtcbiAgICBXZWVrZGF5W1dlZWtkYXlbXCJTQVRVUkRBWVwiXSA9IDZdID0gXCJTQVRVUkRBWVwiO1xufSkoV2Vla2RheSB8fCAoV2Vla2RheSA9IHt9KSk7XG5leHBvcnQgdmFyIE1vbnRoO1xuKGZ1bmN0aW9uIChNb250aCkge1xuICAgIE1vbnRoW01vbnRoW1wiSkFOVUFSWVwiXSA9IDFdID0gXCJKQU5VQVJZXCI7XG4gICAgTW9udGhbTW9udGhbXCJGRUJSVUFSWVwiXSA9IDJdID0gXCJGRUJSVUFSWVwiO1xuICAgIE1vbnRoW01vbnRoW1wiTUFSQ0hcIl0gPSAzXSA9IFwiTUFSQ0hcIjtcbiAgICBNb250aFtNb250aFtcIkFQUklMXCJdID0gNF0gPSBcIkFQUklMXCI7XG4gICAgTW9udGhbTW9udGhbXCJNQVlcIl0gPSA1XSA9IFwiTUFZXCI7XG4gICAgTW9udGhbTW9udGhbXCJKVU5FXCJdID0gNl0gPSBcIkpVTkVcIjtcbiAgICBNb250aFtNb250aFtcIkpVTFlcIl0gPSA3XSA9IFwiSlVMWVwiO1xuICAgIE1vbnRoW01vbnRoW1wiQVVHVVNUXCJdID0gOF0gPSBcIkFVR1VTVFwiO1xuICAgIE1vbnRoW01vbnRoW1wiU0VQVEVNQkVSXCJdID0gOV0gPSBcIlNFUFRFTUJFUlwiO1xuICAgIE1vbnRoW01vbnRoW1wiT0NUT0JFUlwiXSA9IDEwXSA9IFwiT0NUT0JFUlwiO1xuICAgIE1vbnRoW01vbnRoW1wiTk9WRU1CRVJcIl0gPSAxMV0gPSBcIk5PVkVNQkVSXCI7XG4gICAgTW9udGhbTW9udGhbXCJERUNFTUJFUlwiXSA9IDEyXSA9IFwiREVDRU1CRVJcIjtcbn0pKE1vbnRoIHx8IChNb250aCA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0KSB7XG4gICAgY29tcG9uZW50LmFzc2lnbihcImRheVwiLCB0YXJnZXQuZ2V0RGF0ZSgpKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwibW9udGhcIiwgdGFyZ2V0LmdldE1vbnRoKCkgKyAxKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwieWVhclwiLCB0YXJnZXQuZ2V0RnVsbFllYXIoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXNzaWduU2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXQpIHtcbiAgICBjb21wb25lbnQuYXNzaWduKFwiaG91clwiLCB0YXJnZXQuZ2V0SG91cnMoKSk7XG4gICAgY29tcG9uZW50LmFzc2lnbihcIm1pbnV0ZVwiLCB0YXJnZXQuZ2V0TWludXRlcygpKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwic2Vjb25kXCIsIHRhcmdldC5nZXRTZWNvbmRzKCkpO1xuICAgIGNvbXBvbmVudC5hc3NpZ24oXCJtaWxsaXNlY29uZFwiLCB0YXJnZXQuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgIGNvbXBvbmVudC5hc3NpZ24oXCJtZXJpZGllbVwiLCB0YXJnZXQuZ2V0SG91cnMoKSA8IDEyID8gTWVyaWRpZW0uQU0gOiBNZXJpZGllbS5QTSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW1wbHlTaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldCkge1xuICAgIGNvbXBvbmVudC5pbXBseShcImRheVwiLCB0YXJnZXQuZ2V0RGF0ZSgpKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtb250aFwiLCB0YXJnZXQuZ2V0TW9udGgoKSArIDEpO1xuICAgIGNvbXBvbmVudC5pbXBseShcInllYXJcIiwgdGFyZ2V0LmdldEZ1bGxZZWFyKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXQpIHtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIHRhcmdldC5nZXRIb3VycygpKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgdGFyZ2V0LmdldE1pbnV0ZXMoKSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIHRhcmdldC5nZXRTZWNvbmRzKCkpO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIHRhcmdldC5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgdGFyZ2V0LmdldEhvdXJzKCkgPCAxMiA/IE1lcmlkaWVtLkFNIDogTWVyaWRpZW0uUE0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0ZXMuanMubWFwIiwiaW1wb3J0IHsgV2Vla2RheSwgTW9udGggfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuZXhwb3J0IGNvbnN0IFRJTUVaT05FX0FCQlJfTUFQID0ge1xuICAgIEFDRFQ6IDYzMCxcbiAgICBBQ1NUOiA1NzAsXG4gICAgQURUOiAtMTgwLFxuICAgIEFFRFQ6IDY2MCxcbiAgICBBRVNUOiA2MDAsXG4gICAgQUZUOiAyNzAsXG4gICAgQUtEVDogLTQ4MCxcbiAgICBBS1NUOiAtNTQwLFxuICAgIEFMTVQ6IDM2MCxcbiAgICBBTVNUOiAtMTgwLFxuICAgIEFNVDogLTI0MCxcbiAgICBBTkFTVDogNzIwLFxuICAgIEFOQVQ6IDcyMCxcbiAgICBBUVRUOiAzMDAsXG4gICAgQVJUOiAtMTgwLFxuICAgIEFTVDogLTI0MCxcbiAgICBBV0RUOiA1NDAsXG4gICAgQVdTVDogNDgwLFxuICAgIEFaT1NUOiAwLFxuICAgIEFaT1Q6IC02MCxcbiAgICBBWlNUOiAzMDAsXG4gICAgQVpUOiAyNDAsXG4gICAgQk5UOiA0ODAsXG4gICAgQk9UOiAtMjQwLFxuICAgIEJSU1Q6IC0xMjAsXG4gICAgQlJUOiAtMTgwLFxuICAgIEJTVDogNjAsXG4gICAgQlRUOiAzNjAsXG4gICAgQ0FTVDogNDgwLFxuICAgIENBVDogMTIwLFxuICAgIENDVDogMzkwLFxuICAgIENEVDogLTMwMCxcbiAgICBDRVNUOiAxMjAsXG4gICAgQ0VUOiB7XG4gICAgICAgIHRpbWV6b25lT2Zmc2V0RHVyaW5nRHN0OiAyICogNjAsXG4gICAgICAgIHRpbWV6b25lT2Zmc2V0Tm9uRHN0OiA2MCxcbiAgICAgICAgZHN0U3RhcnQ6ICh5ZWFyKSA9PiBnZXRMYXN0V2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TGFzdFdlZWtkYXlPZk1vbnRoKHllYXIsIE1vbnRoLk9DVE9CRVIsIFdlZWtkYXkuU1VOREFZLCAzKSxcbiAgICB9LFxuICAgIENIQURUOiA4MjUsXG4gICAgQ0hBU1Q6IDc2NSxcbiAgICBDS1Q6IC02MDAsXG4gICAgQ0xTVDogLTE4MCxcbiAgICBDTFQ6IC0yNDAsXG4gICAgQ09UOiAtMzAwLFxuICAgIENTVDogLTM2MCxcbiAgICBDVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTUgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC02ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIENWVDogLTYwLFxuICAgIENYVDogNDIwLFxuICAgIENoU1Q6IDYwMCxcbiAgICBEQVZUOiA0MjAsXG4gICAgRUFTU1Q6IC0zMDAsXG4gICAgRUFTVDogLTM2MCxcbiAgICBFQVQ6IDE4MCxcbiAgICBFQ1Q6IC0zMDAsXG4gICAgRURUOiAtMjQwLFxuICAgIEVFU1Q6IDE4MCxcbiAgICBFRVQ6IDEyMCxcbiAgICBFR1NUOiAwLFxuICAgIEVHVDogLTYwLFxuICAgIEVTVDogLTMwMCxcbiAgICBFVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTQgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC01ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIEZKU1Q6IDc4MCxcbiAgICBGSlQ6IDcyMCxcbiAgICBGS1NUOiAtMTgwLFxuICAgIEZLVDogLTI0MCxcbiAgICBGTlQ6IC0xMjAsXG4gICAgR0FMVDogLTM2MCxcbiAgICBHQU1UOiAtNTQwLFxuICAgIEdFVDogMjQwLFxuICAgIEdGVDogLTE4MCxcbiAgICBHSUxUOiA3MjAsXG4gICAgR01UOiAwLFxuICAgIEdTVDogMjQwLFxuICAgIEdZVDogLTI0MCxcbiAgICBIQUE6IC0xODAsXG4gICAgSEFDOiAtMzAwLFxuICAgIEhBRFQ6IC01NDAsXG4gICAgSEFFOiAtMjQwLFxuICAgIEhBUDogLTQyMCxcbiAgICBIQVI6IC0zNjAsXG4gICAgSEFTVDogLTYwMCxcbiAgICBIQVQ6IC05MCxcbiAgICBIQVk6IC00ODAsXG4gICAgSEtUOiA0ODAsXG4gICAgSExWOiAtMjEwLFxuICAgIEhOQTogLTI0MCxcbiAgICBITkM6IC0zNjAsXG4gICAgSE5FOiAtMzAwLFxuICAgIEhOUDogLTQ4MCxcbiAgICBITlI6IC00MjAsXG4gICAgSE5UOiAtMTUwLFxuICAgIEhOWTogLTU0MCxcbiAgICBIT1ZUOiA0MjAsXG4gICAgSUNUOiA0MjAsXG4gICAgSURUOiAxODAsXG4gICAgSU9UOiAzNjAsXG4gICAgSVJEVDogMjcwLFxuICAgIElSS1NUOiA1NDAsXG4gICAgSVJLVDogNTQwLFxuICAgIElSU1Q6IDIxMCxcbiAgICBJU1Q6IDMzMCxcbiAgICBKU1Q6IDU0MCxcbiAgICBLR1Q6IDM2MCxcbiAgICBLUkFTVDogNDgwLFxuICAgIEtSQVQ6IDQ4MCxcbiAgICBLU1Q6IDU0MCxcbiAgICBLVVlUOiAyNDAsXG4gICAgTEhEVDogNjYwLFxuICAgIExIU1Q6IDYzMCxcbiAgICBMSU5UOiA4NDAsXG4gICAgTUFHU1Q6IDcyMCxcbiAgICBNQUdUOiA3MjAsXG4gICAgTUFSVDogLTUxMCxcbiAgICBNQVdUOiAzMDAsXG4gICAgTURUOiAtMzYwLFxuICAgIE1FU1o6IDEyMCxcbiAgICBNRVo6IDYwLFxuICAgIE1IVDogNzIwLFxuICAgIE1NVDogMzkwLFxuICAgIE1TRDogMjQwLFxuICAgIE1TSzogMTgwLFxuICAgIE1TVDogLTQyMCxcbiAgICBNVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTYgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC03ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIE1VVDogMjQwLFxuICAgIE1WVDogMzAwLFxuICAgIE1ZVDogNDgwLFxuICAgIE5DVDogNjYwLFxuICAgIE5EVDogLTkwLFxuICAgIE5GVDogNjkwLFxuICAgIE5PVlNUOiA0MjAsXG4gICAgTk9WVDogMzYwLFxuICAgIE5QVDogMzQ1LFxuICAgIE5TVDogLTE1MCxcbiAgICBOVVQ6IC02NjAsXG4gICAgTlpEVDogNzgwLFxuICAgIE5aU1Q6IDcyMCxcbiAgICBPTVNTVDogNDIwLFxuICAgIE9NU1Q6IDQyMCxcbiAgICBQRFQ6IC00MjAsXG4gICAgUEVUOiAtMzAwLFxuICAgIFBFVFNUOiA3MjAsXG4gICAgUEVUVDogNzIwLFxuICAgIFBHVDogNjAwLFxuICAgIFBIT1Q6IDc4MCxcbiAgICBQSFQ6IDQ4MCxcbiAgICBQS1Q6IDMwMCxcbiAgICBQTURUOiAtMTIwLFxuICAgIFBNU1Q6IC0xODAsXG4gICAgUE9OVDogNjYwLFxuICAgIFBTVDogLTQ4MCxcbiAgICBQVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTcgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC04ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIFBXVDogNTQwLFxuICAgIFBZU1Q6IC0xODAsXG4gICAgUFlUOiAtMjQwLFxuICAgIFJFVDogMjQwLFxuICAgIFNBTVQ6IDI0MCxcbiAgICBTQVNUOiAxMjAsXG4gICAgU0JUOiA2NjAsXG4gICAgU0NUOiAyNDAsXG4gICAgU0dUOiA0ODAsXG4gICAgU1JUOiAtMTgwLFxuICAgIFNTVDogLTY2MCxcbiAgICBUQUhUOiAtNjAwLFxuICAgIFRGVDogMzAwLFxuICAgIFRKVDogMzAwLFxuICAgIFRLVDogNzgwLFxuICAgIFRMVDogNTQwLFxuICAgIFRNVDogMzAwLFxuICAgIFRWVDogNzIwLFxuICAgIFVMQVQ6IDQ4MCxcbiAgICBVVEM6IDAsXG4gICAgVVlTVDogLTEyMCxcbiAgICBVWVQ6IC0xODAsXG4gICAgVVpUOiAzMDAsXG4gICAgVkVUOiAtMjEwLFxuICAgIFZMQVNUOiA2NjAsXG4gICAgVkxBVDogNjYwLFxuICAgIFZVVDogNjYwLFxuICAgIFdBU1Q6IDEyMCxcbiAgICBXQVQ6IDYwLFxuICAgIFdFU1Q6IDYwLFxuICAgIFdFU1o6IDYwLFxuICAgIFdFVDogMCxcbiAgICBXRVo6IDAsXG4gICAgV0ZUOiA3MjAsXG4gICAgV0dTVDogLTEyMCxcbiAgICBXR1Q6IC0xODAsXG4gICAgV0lCOiA0MjAsXG4gICAgV0lUOiA1NDAsXG4gICAgV0lUQTogNDgwLFxuICAgIFdTVDogNzgwLFxuICAgIFdUOiAwLFxuICAgIFlBS1NUOiA2MDAsXG4gICAgWUFLVDogNjAwLFxuICAgIFlBUFQ6IDYwMCxcbiAgICBZRUtTVDogMzYwLFxuICAgIFlFS1Q6IDM2MCxcbn07XG5leHBvcnQgZnVuY3Rpb24gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgbW9udGgsIHdlZWtkYXksIG4sIGhvdXIgPSAwKSB7XG4gICAgbGV0IGRheU9mTW9udGggPSAwO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgICAgZGF5T2ZNb250aCsrO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXlPZk1vbnRoKTtcbiAgICAgICAgaWYgKGRhdGUuZ2V0RGF5KCkgPT09IHdlZWtkYXkpXG4gICAgICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheU9mTW9udGgsIGhvdXIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3RXZWVrZGF5T2ZNb250aCh5ZWFyLCBtb250aCwgd2Vla2RheSwgaG91ciA9IDApIHtcbiAgICBjb25zdCBvbmVJbmRleGVkV2Vla2RheSA9IHdlZWtkYXkgPT09IDAgPyA3IDogd2Vla2RheTtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxICsgMSwgMSwgMTIpO1xuICAgIGNvbnN0IGZpcnN0V2Vla2RheU5leHRNb250aCA9IGRhdGUuZ2V0RGF5KCkgPT09IDAgPyA3IDogZGF0ZS5nZXREYXkoKTtcbiAgICBsZXQgZGF5RGlmZjtcbiAgICBpZiAoZmlyc3RXZWVrZGF5TmV4dE1vbnRoID09PSBvbmVJbmRleGVkV2Vla2RheSlcbiAgICAgICAgZGF5RGlmZiA9IDc7XG4gICAgZWxzZSBpZiAoZmlyc3RXZWVrZGF5TmV4dE1vbnRoIDwgb25lSW5kZXhlZFdlZWtkYXkpXG4gICAgICAgIGRheURpZmYgPSA3ICsgZmlyc3RXZWVrZGF5TmV4dE1vbnRoIC0gb25lSW5kZXhlZFdlZWtkYXk7XG4gICAgZWxzZVxuICAgICAgICBkYXlEaWZmID0gZmlyc3RXZWVrZGF5TmV4dE1vbnRoIC0gb25lSW5kZXhlZFdlZWtkYXk7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF5RGlmZik7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF0ZS5nZXREYXRlKCksIGhvdXIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvVGltZXpvbmVPZmZzZXQodGltZXpvbmVJbnB1dCwgZGF0ZSwgdGltZXpvbmVPdmVycmlkZXMgPSB7fSkge1xuICAgIGlmICh0aW1lem9uZUlucHV0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGltZXpvbmVJbnB1dCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gdGltZXpvbmVJbnB1dDtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2hlZFRpbWV6b25lID0gdGltZXpvbmVPdmVycmlkZXNbdGltZXpvbmVJbnB1dF0gPz8gVElNRVpPTkVfQUJCUl9NQVBbdGltZXpvbmVJbnB1dF07XG4gICAgaWYgKG1hdGNoZWRUaW1lem9uZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG1hdGNoZWRUaW1lem9uZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVkVGltZXpvbmU7XG4gICAgfVxuICAgIGlmIChkYXRlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChkYXRlID4gbWF0Y2hlZFRpbWV6b25lLmRzdFN0YXJ0KGRhdGUuZ2V0RnVsbFllYXIoKSkgJiYgIShkYXRlID4gbWF0Y2hlZFRpbWV6b25lLmRzdEVuZChkYXRlLmdldEZ1bGxZZWFyKCkpKSkge1xuICAgICAgICByZXR1cm4gbWF0Y2hlZFRpbWV6b25lLnRpbWV6b25lT2Zmc2V0RHVyaW5nRHN0O1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlZFRpbWV6b25lLnRpbWV6b25lT2Zmc2V0Tm9uRHN0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZXpvbmUuanMubWFwIiwiZXhwb3J0IGNvbnN0IEVtcHR5RHVyYXRpb24gPSB7XG4gICAgZGF5OiAwLFxuICAgIHNlY29uZDogMCxcbiAgICBtaWxsaXNlY29uZDogMCxcbn07XG5leHBvcnQgZnVuY3Rpb24gYWRkRHVyYXRpb24ocmVmLCBkdXJhdGlvbikge1xuICAgIGxldCBkYXRlID0gbmV3IERhdGUocmVmKTtcbiAgICBpZiAoZHVyYXRpb25bXCJ5XCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wieWVhclwiXSA9IGR1cmF0aW9uW1wieVwiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wieVwiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wibW9cIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJtb250aFwiXSA9IGR1cmF0aW9uW1wibW9cIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcIm1vXCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJNXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wibW9udGhcIl0gPSBkdXJhdGlvbltcIk1cIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcIk1cIl07XG4gICAgfVxuICAgIGlmIChkdXJhdGlvbltcIndcIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJ3ZWVrXCJdID0gZHVyYXRpb25bXCJ3XCJdO1xuICAgICAgICBkZWxldGUgZHVyYXRpb25bXCJ3XCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJkXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wiZGF5XCJdID0gZHVyYXRpb25bXCJkXCJdO1xuICAgICAgICBkZWxldGUgZHVyYXRpb25bXCJkXCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJoXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wiaG91clwiXSA9IGR1cmF0aW9uW1wiaFwiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wiaFwiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wibVwiXSkge1xuICAgICAgICBkdXJhdGlvbltcIm1pbnV0ZVwiXSA9IGR1cmF0aW9uW1wibVwiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wibVwiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wic1wiXSkge1xuICAgICAgICBkdXJhdGlvbltcInNlY29uZFwiXSA9IGR1cmF0aW9uW1wic1wiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wic1wiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wibXNcIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJtaWxsaXNlY29uZFwiXSA9IGR1cmF0aW9uW1wibXNcIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcIm1zXCJdO1xuICAgIH1cbiAgICBpZiAoXCJ5ZWFyXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wieWVhclwiXSk7XG4gICAgICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgZmxvb3IpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdGcmFjdGlvbiA9IGR1cmF0aW9uW1wieWVhclwiXSAtIGZsb29yO1xuICAgICAgICBpZiAocmVtYWluaW5nRnJhY3Rpb24gPiAwKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5tb250aCA9IGR1cmF0aW9uPy5tb250aCA/PyAwO1xuICAgICAgICAgICAgZHVyYXRpb24ubW9udGggKz0gcmVtYWluaW5nRnJhY3Rpb24gKiAxMjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJxdWFydGVyXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wicXVhcnRlclwiXSk7XG4gICAgICAgIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgZmxvb3IgKiAzKTtcbiAgICB9XG4gICAgaWYgKFwibW9udGhcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJtb250aFwiXSk7XG4gICAgICAgIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgZmxvb3IpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdGcmFjdGlvbiA9IGR1cmF0aW9uW1wibW9udGhcIl0gLSBmbG9vcjtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0ZyYWN0aW9uID4gMCkge1xuICAgICAgICAgICAgZHVyYXRpb24ud2VlayA9IGR1cmF0aW9uPy53ZWVrID8/IDA7XG4gICAgICAgICAgICBkdXJhdGlvbi53ZWVrICs9IHJlbWFpbmluZ0ZyYWN0aW9uICogNDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJ3ZWVrXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wid2Vla1wiXSk7XG4gICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGZsb29yICogNyk7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJ3ZWVrXCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLmRheSA9IGR1cmF0aW9uPy5kYXkgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLmRheSArPSBNYXRoLnJvdW5kKHJlbWFpbmluZ0ZyYWN0aW9uICogNyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKFwiZGF5XCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wiZGF5XCJdKTtcbiAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZmxvb3IpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdGcmFjdGlvbiA9IGR1cmF0aW9uW1wiZGF5XCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLmhvdXIgPSBkdXJhdGlvbj8uaG91ciA/PyAwO1xuICAgICAgICAgICAgZHVyYXRpb24uaG91ciArPSBNYXRoLnJvdW5kKHJlbWFpbmluZ0ZyYWN0aW9uICogMjQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChcImhvdXJcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJob3VyXCJdKTtcbiAgICAgICAgZGF0ZS5zZXRIb3VycyhkYXRlLmdldEhvdXJzKCkgKyBmbG9vcik7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJob3VyXCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1pbnV0ZSA9IGR1cmF0aW9uPy5taW51dGUgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1pbnV0ZSArPSBNYXRoLnJvdW5kKHJlbWFpbmluZ0ZyYWN0aW9uICogNjApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChcIm1pbnV0ZVwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihkdXJhdGlvbltcIm1pbnV0ZVwiXSk7XG4gICAgICAgIGRhdGUuc2V0TWludXRlcyhkYXRlLmdldE1pbnV0ZXMoKSArIGZsb29yKTtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nRnJhY3Rpb24gPSBkdXJhdGlvbltcIm1pbnV0ZVwiXSAtIGZsb29yO1xuICAgICAgICBpZiAocmVtYWluaW5nRnJhY3Rpb24gPiAwKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5zZWNvbmQgPSBkdXJhdGlvbj8uc2Vjb25kID8/IDA7XG4gICAgICAgICAgICBkdXJhdGlvbi5zZWNvbmQgKz0gTWF0aC5yb3VuZChyZW1haW5pbmdGcmFjdGlvbiAqIDYwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJzZWNvbmRcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJzZWNvbmRcIl0pO1xuICAgICAgICBkYXRlLnNldFNlY29uZHMoZGF0ZS5nZXRTZWNvbmRzKCkgKyBmbG9vcik7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJzZWNvbmRcIl0gLSBmbG9vcjtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0ZyYWN0aW9uID4gMCkge1xuICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmQgPSBkdXJhdGlvbj8ubWlsbGlzZWNvbmQgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1pbGxpc2Vjb25kICs9IE1hdGgucm91bmQocmVtYWluaW5nRnJhY3Rpb24gKiAxMDAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJtaWxsaXNlY29uZFwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihkdXJhdGlvbltcIm1pbGxpc2Vjb25kXCJdKTtcbiAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHMoZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSArIGZsb29yKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG59XG5leHBvcnQgZnVuY3Rpb24gcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgY29uc3QgcmV2ZXJzZWQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkdXJhdGlvbikge1xuICAgICAgICByZXZlcnNlZFtrZXldID0gLWR1cmF0aW9uW2tleV07XG4gICAgfVxuICAgIHJldHVybiByZXZlcnNlZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWR1cmF0aW9uLmpzLm1hcCIsImltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBhc3NpZ25TaW1pbGFyVGltZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgeyB0b1RpbWV6b25lT2Zmc2V0IH0gZnJvbSBcIi4vdGltZXpvbmUuanNcIjtcbmltcG9ydCB7IGFkZER1cmF0aW9uLCBFbXB0eUR1cmF0aW9uIH0gZnJvbSBcIi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VXaXRoVGltZXpvbmUge1xuICAgIGluc3RhbnQ7XG4gICAgdGltZXpvbmVPZmZzZXQ7XG4gICAgY29uc3RydWN0b3IoaW5zdGFudCwgdGltZXpvbmVPZmZzZXQpIHtcbiAgICAgICAgdGhpcy5pbnN0YW50ID0gaW5zdGFudCA/PyBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLnRpbWV6b25lT2Zmc2V0ID0gdGltZXpvbmVPZmZzZXQgPz8gbnVsbDtcbiAgICB9XG4gICAgc3RhdGljIGZyb21EYXRlKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWZlcmVuY2VXaXRoVGltZXpvbmUoZGF0ZSk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tSW5wdXQoaW5wdXQsIHRpbWV6b25lT3ZlcnJpZGVzKSB7XG4gICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZlcmVuY2VXaXRoVGltZXpvbmUuZnJvbURhdGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluc3RhbnQgPSBpbnB1dD8uaW5zdGFudCA/PyBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IHRvVGltZXpvbmVPZmZzZXQoaW5wdXQ/LnRpbWV6b25lLCBpbnN0YW50LCB0aW1lem9uZU92ZXJyaWRlcyk7XG4gICAgICAgIHJldHVybiBuZXcgUmVmZXJlbmNlV2l0aFRpbWV6b25lKGluc3RhbnQsIHRpbWV6b25lT2Zmc2V0KTtcbiAgICB9XG4gICAgZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCkge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGhpcy5pbnN0YW50KTtcbiAgICAgICAgaWYgKHRoaXMudGltZXpvbmVPZmZzZXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0TWludXRlcyhkYXRlLmdldE1pbnV0ZXMoKSAtIHRoaXMuZ2V0U3lzdGVtVGltZXpvbmVBZGp1c3RtZW50TWludXRlKHRoaXMuaW5zdGFudCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgICBnZXRTeXN0ZW1UaW1lem9uZUFkanVzdG1lbnRNaW51dGUoZGF0ZSwgb3ZlcnJpZGVUaW1lem9uZU9mZnNldCkge1xuICAgICAgICBpZiAoIWRhdGUpIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lem9uZU9mZnNldCA9IC1kYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgICAgIGNvbnN0IHRhcmdldFRpbWV6b25lT2Zmc2V0ID0gb3ZlcnJpZGVUaW1lem9uZU9mZnNldCA/PyB0aGlzLnRpbWV6b25lT2Zmc2V0ID8/IGN1cnJlbnRUaW1lem9uZU9mZnNldDtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lem9uZU9mZnNldCAtIHRhcmdldFRpbWV6b25lT2Zmc2V0O1xuICAgIH1cbiAgICBnZXRUaW1lem9uZU9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGltZXpvbmVPZmZzZXQgPz8gLXRoaXMuaW5zdGFudC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBQYXJzaW5nQ29tcG9uZW50cyB7XG4gICAga25vd25WYWx1ZXM7XG4gICAgaW1wbGllZFZhbHVlcztcbiAgICByZWZlcmVuY2U7XG4gICAgX3RhZ3MgPSBuZXcgU2V0KCk7XG4gICAgY29uc3RydWN0b3IocmVmZXJlbmNlLCBrbm93bkNvbXBvbmVudHMpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgICAgIHRoaXMua25vd25WYWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5pbXBsaWVkVmFsdWVzID0ge307XG4gICAgICAgIGlmIChrbm93bkNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGtub3duQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgIHRoaXMua25vd25WYWx1ZXNba2V5XSA9IGtub3duQ29tcG9uZW50c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgICAgIHRoaXMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB0aGlzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIHRoaXMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgdGhpcy5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgdGhpcy5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgdGhpcy5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKHJlZmVyZW5jZSwgZHVyYXRpb24gPSBFbXB0eUR1cmF0aW9uKSB7XG4gICAgICAgIGxldCBkYXRlID0gYWRkRHVyYXRpb24ocmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpLCBkdXJhdGlvbik7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlKTtcbiAgICAgICAgY29tcG9uZW50cy5hZGRUYWcoXCJyZXN1bHQvcmVsYXRpdmVEYXRlXCIpO1xuICAgICAgICBpZiAoXCJob3VyXCIgaW4gZHVyYXRpb24gfHwgXCJtaW51dGVcIiBpbiBkdXJhdGlvbiB8fCBcInNlY29uZFwiIGluIGR1cmF0aW9uIHx8IFwibWlsbGlzZWNvbmRcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hZGRUYWcoXCJyZXN1bHQvcmVsYXRpdmVEYXRlQW5kVGltZVwiKTtcbiAgICAgICAgICAgIGFzc2lnblNpbWlsYXJUaW1lKGNvbXBvbmVudHMsIGRhdGUpO1xuICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50cywgZGF0ZSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInRpbWV6b25lT2Zmc2V0XCIsIHJlZmVyZW5jZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50cywgZGF0ZSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwidGltZXpvbmVPZmZzZXRcIiwgcmVmZXJlbmNlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgICAgICAgICAgaWYgKFwiZGF5XCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIndlZWtkYXlcIiwgZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChcIndlZWtcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ3ZWVrZGF5XCIsIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgaWYgKFwibW9udGhcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFwieWVhclwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxuICAgIGdldChjb21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCBpbiB0aGlzLmtub3duVmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5rbm93blZhbHVlc1tjb21wb25lbnRdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnQgaW4gdGhpcy5pbXBsaWVkVmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBsaWVkVmFsdWVzW2NvbXBvbmVudF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlzQ2VydGFpbihjb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudCBpbiB0aGlzLmtub3duVmFsdWVzO1xuICAgIH1cbiAgICBnZXRDZXJ0YWluQ29tcG9uZW50cygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMua25vd25WYWx1ZXMpO1xuICAgIH1cbiAgICBpbXBseShjb21wb25lbnQsIHZhbHVlKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQgaW4gdGhpcy5rbm93blZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbXBsaWVkVmFsdWVzW2NvbXBvbmVudF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFzc2lnbihjb21wb25lbnQsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMua25vd25WYWx1ZXNbY29tcG9uZW50XSA9IHZhbHVlO1xuICAgICAgICBkZWxldGUgdGhpcy5pbXBsaWVkVmFsdWVzW2NvbXBvbmVudF07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhZGREdXJhdGlvbkFzSW1wbGllZChkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuZGF0ZVdpdGhvdXRUaW1lem9uZUFkanVzdG1lbnQoKTtcbiAgICAgICAgY29uc3QgZGF0ZSA9IGFkZER1cmF0aW9uKGN1cnJlbnREYXRlLCBkdXJhdGlvbik7XG4gICAgICAgIGlmIChcImRheVwiIGluIGR1cmF0aW9uIHx8IFwid2Vla1wiIGluIGR1cmF0aW9uIHx8IFwibW9udGhcIiBpbiBkdXJhdGlvbiB8fCBcInllYXJcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kZWxldGUoW1wiZGF5XCIsIFwid2Vla2RheVwiLCBcIm1vbnRoXCIsIFwieWVhclwiXSk7XG4gICAgICAgICAgICB0aGlzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuaW1wbHkoXCJ3ZWVrZGF5XCIsIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJzZWNvbmRcIiBpbiBkdXJhdGlvbiB8fCBcIm1pbnV0ZVwiIGluIGR1cmF0aW9uIHx8IFwiaG91clwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZShbXCJzZWNvbmRcIiwgXCJtaW51dGVcIiwgXCJob3VyXCJdKTtcbiAgICAgICAgICAgIHRoaXMuaW1wbHkoXCJzZWNvbmRcIiwgZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcIm1pbnV0ZVwiLCBkYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICB0aGlzLmltcGx5KFwiaG91clwiLCBkYXRlLmdldEhvdXJzKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZWxldGUoY29tcG9uZW50cykge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudHMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMgPSBbY29tcG9uZW50c107XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMua25vd25WYWx1ZXNbY29tcG9uZW50XTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmltcGxpZWRWYWx1ZXNbY29tcG9uZW50XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHRoaXMucmVmZXJlbmNlKTtcbiAgICAgICAgY29tcG9uZW50Lmtub3duVmFsdWVzID0ge307XG4gICAgICAgIGNvbXBvbmVudC5pbXBsaWVkVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMua25vd25WYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5rbm93blZhbHVlc1trZXldID0gdGhpcy5rbm93blZhbHVlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuaW1wbGllZFZhbHVlcykge1xuICAgICAgICAgICAgY29tcG9uZW50LmltcGxpZWRWYWx1ZXNba2V5XSA9IHRoaXMuaW1wbGllZFZhbHVlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxuICAgIGlzT25seURhdGUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0NlcnRhaW4oXCJob3VyXCIpICYmICF0aGlzLmlzQ2VydGFpbihcIm1pbnV0ZVwiKSAmJiAhdGhpcy5pc0NlcnRhaW4oXCJzZWNvbmRcIik7XG4gICAgfVxuICAgIGlzT25seVRpbWUoKSB7XG4gICAgICAgIHJldHVybiAoIXRoaXMuaXNDZXJ0YWluKFwid2Vla2RheVwiKSAmJiAhdGhpcy5pc0NlcnRhaW4oXCJkYXlcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwibW9udGhcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwieWVhclwiKSk7XG4gICAgfVxuICAgIGlzT25seVdlZWtkYXlDb21wb25lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ2VydGFpbihcIndlZWtkYXlcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwiZGF5XCIpICYmICF0aGlzLmlzQ2VydGFpbihcIm1vbnRoXCIpO1xuICAgIH1cbiAgICBpc0RhdGVXaXRoVW5rbm93blllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ2VydGFpbihcIm1vbnRoXCIpICYmICF0aGlzLmlzQ2VydGFpbihcInllYXJcIik7XG4gICAgfVxuICAgIGlzVmFsaWREYXRlKCkge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlV2l0aG91dFRpbWV6b25lQWRqdXN0bWVudCgpO1xuICAgICAgICBpZiAoZGF0ZS5nZXRGdWxsWWVhcigpICE9PSB0aGlzLmdldChcInllYXJcIikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkYXRlLmdldE1vbnRoKCkgIT09IHRoaXMuZ2V0KFwibW9udGhcIikgLSAxKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoZGF0ZS5nZXREYXRlKCkgIT09IHRoaXMuZ2V0KFwiZGF5XCIpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5nZXQoXCJob3VyXCIpICE9IG51bGwgJiYgZGF0ZS5nZXRIb3VycygpICE9IHRoaXMuZ2V0KFwiaG91clwiKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KFwibWludXRlXCIpICE9IG51bGwgJiYgZGF0ZS5nZXRNaW51dGVzKCkgIT0gdGhpcy5nZXQoXCJtaW51dGVcIikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGBbUGFyc2luZ0NvbXBvbmVudHMge1xuICAgICAgICAgICAgdGFnczogJHtKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHRoaXMuX3RhZ3MpLnNvcnQoKSl9LCBcbiAgICAgICAgICAgIGtub3duVmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMua25vd25WYWx1ZXMpfSwgXG4gICAgICAgICAgICBpbXBsaWVkVmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMuaW1wbGllZFZhbHVlcyl9fSwgXG4gICAgICAgICAgICByZWZlcmVuY2U6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5yZWZlcmVuY2UpfV1gO1xuICAgIH1cbiAgICBkYXRlKCkge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlV2l0aG91dFRpbWV6b25lQWRqdXN0bWVudCgpO1xuICAgICAgICBjb25zdCB0aW1lem9uZUFkanVzdG1lbnQgPSB0aGlzLnJlZmVyZW5jZS5nZXRTeXN0ZW1UaW1lem9uZUFkanVzdG1lbnRNaW51dGUoZGF0ZSwgdGhpcy5nZXQoXCJ0aW1lem9uZU9mZnNldFwiKSk7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIHRpbWV6b25lQWRqdXN0bWVudCAqIDYwMDAwKTtcbiAgICB9XG4gICAgYWRkVGFnKHRhZykge1xuICAgICAgICB0aGlzLl90YWdzLmFkZCh0YWcpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkVGFncyh0YWdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhZ3MuYWRkKHRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRhZ3MoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2V0KHRoaXMuX3RhZ3MpO1xuICAgIH1cbiAgICBkYXRlV2l0aG91dFRpbWV6b25lQWRqdXN0bWVudCgpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRoaXMuZ2V0KFwieWVhclwiKSwgdGhpcy5nZXQoXCJtb250aFwiKSAtIDEsIHRoaXMuZ2V0KFwiZGF5XCIpLCB0aGlzLmdldChcImhvdXJcIiksIHRoaXMuZ2V0KFwibWludXRlXCIpLCB0aGlzLmdldChcInNlY29uZFwiKSwgdGhpcy5nZXQoXCJtaWxsaXNlY29uZFwiKSk7XG4gICAgICAgIGRhdGUuc2V0RnVsbFllYXIodGhpcy5nZXQoXCJ5ZWFyXCIpKTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFBhcnNpbmdSZXN1bHQge1xuICAgIHJlZkRhdGU7XG4gICAgaW5kZXg7XG4gICAgdGV4dDtcbiAgICByZWZlcmVuY2U7XG4gICAgc3RhcnQ7XG4gICAgZW5kO1xuICAgIGNvbnN0cnVjdG9yKHJlZmVyZW5jZSwgaW5kZXgsIHRleHQsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgICAgIHRoaXMucmVmRGF0ZSA9IHJlZmVyZW5jZS5pbnN0YW50O1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydCB8fCBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlKTtcbiAgICAgICAgdGhpcy5lbmQgPSBlbmQ7XG4gICAgfVxuICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgUGFyc2luZ1Jlc3VsdCh0aGlzLnJlZmVyZW5jZSwgdGhpcy5pbmRleCwgdGhpcy50ZXh0KTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gdGhpcy5zdGFydCA/IHRoaXMuc3RhcnQuY2xvbmUoKSA6IG51bGw7XG4gICAgICAgIHJlc3VsdC5lbmQgPSB0aGlzLmVuZCA/IHRoaXMuZW5kLmNsb25lKCkgOiBudWxsO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBkYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5kYXRlKCk7XG4gICAgfVxuICAgIGFkZFRhZyh0YWcpIHtcbiAgICAgICAgdGhpcy5zdGFydC5hZGRUYWcodGFnKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kKSB7XG4gICAgICAgICAgICB0aGlzLmVuZC5hZGRUYWcodGFnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkVGFncyh0YWdzKSB7XG4gICAgICAgIHRoaXMuc3RhcnQuYWRkVGFncyh0YWdzKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kKSB7XG4gICAgICAgICAgICB0aGlzLmVuZC5hZGRUYWdzKHRhZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0YWdzKCkge1xuICAgICAgICBjb25zdCBjb21iaW5lZFRhZ3MgPSBuZXcgU2V0KHRoaXMuc3RhcnQudGFncygpKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRhZyBvZiB0aGlzLmVuZC50YWdzKCkpIHtcbiAgICAgICAgICAgICAgICBjb21iaW5lZFRhZ3MuYWRkKHRhZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkVGFncztcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSBBcnJheS5mcm9tKHRoaXMudGFncygpKS5zb3J0KCk7XG4gICAgICAgIHJldHVybiBgW1BhcnNpbmdSZXN1bHQge2luZGV4OiAke3RoaXMuaW5kZXh9LCB0ZXh0OiAnJHt0aGlzLnRleHR9JywgdGFnczogJHtKU09OLnN0cmluZ2lmeSh0YWdzKX0gLi4ufV1gO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc3VsdHMuanMubWFwIiwiZXhwb3J0IGZ1bmN0aW9uIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKHByZWZpeCwgc2luZ2xlVGltZXVuaXRQYXR0ZXJuLCBjb25uZWN0b3JQYXR0ZXJuID0gXCJcXFxcc3swLDV9LD9cXFxcc3swLDV9XCIpIHtcbiAgICBjb25zdCBzaW5nbGVUaW1ldW5pdFBhdHRlcm5Ob0NhcHR1cmUgPSBzaW5nbGVUaW1ldW5pdFBhdHRlcm4ucmVwbGFjZSgvXFwoKD8hXFw/KS9nLCBcIig/OlwiKTtcbiAgICByZXR1cm4gYCR7cHJlZml4fSR7c2luZ2xlVGltZXVuaXRQYXR0ZXJuTm9DYXB0dXJlfSg/OiR7Y29ubmVjdG9yUGF0dGVybn0ke3NpbmdsZVRpbWV1bml0UGF0dGVybk5vQ2FwdHVyZX0pezAsMTB9YDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VGVybXMoZGljdGlvbmFyeSkge1xuICAgIGxldCBrZXlzO1xuICAgIGlmIChkaWN0aW9uYXJ5IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAga2V5cyA9IFsuLi5kaWN0aW9uYXJ5XTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGljdGlvbmFyeSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICBrZXlzID0gQXJyYXkuZnJvbShkaWN0aW9uYXJ5LmtleXMoKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoZGljdGlvbmFyeSk7XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoQW55UGF0dGVybihkaWN0aW9uYXJ5KSB7XG4gICAgY29uc3Qgam9pbmVkVGVybXMgPSBleHRyYWN0VGVybXMoZGljdGlvbmFyeSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAgIC5qb2luKFwifFwiKVxuICAgICAgICAucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIik7XG4gICAgcmV0dXJuIGAoPzoke2pvaW5lZFRlcm1zfSlgO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLCJpbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gZmluZE1vc3RMaWtlbHlBRFllYXIoeWVhck51bWJlcikge1xuICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyID4gNTApIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMTkwMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMjAwMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geWVhck51bWJlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5kWWVhckNsb3Nlc3RUb1JlZihyZWZEYXRlLCBkYXksIG1vbnRoKSB7XG4gICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShyZWZEYXRlKTtcbiAgICBkYXRlLnNldE1vbnRoKG1vbnRoIC0gMSk7XG4gICAgZGF0ZS5zZXREYXRlKGRheSk7XG4gICAgY29uc3QgbmV4dFllYXIgPSBhZGREdXJhdGlvbihkYXRlLCB7IFwieWVhclwiOiAxIH0pO1xuICAgIGNvbnN0IGxhc3RZZWFyID0gYWRkRHVyYXRpb24oZGF0ZSwgeyBcInllYXJcIjogLTEgfSk7XG4gICAgaWYgKE1hdGguYWJzKG5leHRZZWFyLmdldFRpbWUoKSAtIHJlZkRhdGUuZ2V0VGltZSgpKSA8IE1hdGguYWJzKGRhdGUuZ2V0VGltZSgpIC0gcmVmRGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgIGRhdGUgPSBuZXh0WWVhcjtcbiAgICB9XG4gICAgZWxzZSBpZiAoTWF0aC5hYnMobGFzdFllYXIuZ2V0VGltZSgpIC0gcmVmRGF0ZS5nZXRUaW1lKCkpIDwgTWF0aC5hYnMoZGF0ZS5nZXRUaW1lKCkgLSByZWZEYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgZGF0ZSA9IGxhc3RZZWFyO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9eWVhcnMuanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBzdW5kYXk6IDAsXG4gICAgc3VuOiAwLFxuICAgIFwic3VuLlwiOiAwLFxuICAgIG1vbmRheTogMSxcbiAgICBtb246IDEsXG4gICAgXCJtb24uXCI6IDEsXG4gICAgdHVlc2RheTogMixcbiAgICB0dWU6IDIsXG4gICAgXCJ0dWUuXCI6IDIsXG4gICAgd2VkbmVzZGF5OiAzLFxuICAgIHdlZDogMyxcbiAgICBcIndlZC5cIjogMyxcbiAgICB0aHVyc2RheTogNCxcbiAgICB0aHVyczogNCxcbiAgICBcInRodXJzLlwiOiA0LFxuICAgIHRodXI6IDQsXG4gICAgXCJ0aHVyLlwiOiA0LFxuICAgIHRodTogNCxcbiAgICBcInRodS5cIjogNCxcbiAgICBmcmlkYXk6IDUsXG4gICAgZnJpOiA1LFxuICAgIFwiZnJpLlwiOiA1LFxuICAgIHNhdHVyZGF5OiA2LFxuICAgIHNhdDogNixcbiAgICBcInNhdC5cIjogNixcbn07XG5leHBvcnQgY29uc3QgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlkgPSB7XG4gICAgamFudWFyeTogMSxcbiAgICBmZWJydWFyeTogMixcbiAgICBtYXJjaDogMyxcbiAgICBhcHJpbDogNCxcbiAgICBtYXk6IDUsXG4gICAganVuZTogNixcbiAgICBqdWx5OiA3LFxuICAgIGF1Z3VzdDogOCxcbiAgICBzZXB0ZW1iZXI6IDksXG4gICAgb2N0b2JlcjogMTAsXG4gICAgbm92ZW1iZXI6IDExLFxuICAgIGRlY2VtYmVyOiAxMixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICBqYW46IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgZmViOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIG1hcjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBhcHI6IDQsXG4gICAgXCJhcHIuXCI6IDQsXG4gICAganVuOiA2LFxuICAgIFwianVuLlwiOiA2LFxuICAgIGp1bDogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBhdWc6IDgsXG4gICAgXCJhdWcuXCI6IDgsXG4gICAgc2VwOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIHNlcHQ6IDksXG4gICAgXCJzZXB0LlwiOiA5LFxuICAgIG9jdDogMTAsXG4gICAgXCJvY3QuXCI6IDEwLFxuICAgIG5vdjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIGRlYzogMTIsXG4gICAgXCJkZWMuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBvbmU6IDEsXG4gICAgdHdvOiAyLFxuICAgIHRocmVlOiAzLFxuICAgIGZvdXI6IDQsXG4gICAgZml2ZTogNSxcbiAgICBzaXg6IDYsXG4gICAgc2V2ZW46IDcsXG4gICAgZWlnaHQ6IDgsXG4gICAgbmluZTogOSxcbiAgICB0ZW46IDEwLFxuICAgIGVsZXZlbjogMTEsXG4gICAgdHdlbHZlOiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgZmlyc3Q6IDEsXG4gICAgc2Vjb25kOiAyLFxuICAgIHRoaXJkOiAzLFxuICAgIGZvdXJ0aDogNCxcbiAgICBmaWZ0aDogNSxcbiAgICBzaXh0aDogNixcbiAgICBzZXZlbnRoOiA3LFxuICAgIGVpZ2h0aDogOCxcbiAgICBuaW50aDogOSxcbiAgICB0ZW50aDogMTAsXG4gICAgZWxldmVudGg6IDExLFxuICAgIHR3ZWxmdGg6IDEyLFxuICAgIHRoaXJ0ZWVudGg6IDEzLFxuICAgIGZvdXJ0ZWVudGg6IDE0LFxuICAgIGZpZnRlZW50aDogMTUsXG4gICAgc2l4dGVlbnRoOiAxNixcbiAgICBzZXZlbnRlZW50aDogMTcsXG4gICAgZWlnaHRlZW50aDogMTgsXG4gICAgbmluZXRlZW50aDogMTksXG4gICAgdHdlbnRpZXRoOiAyMCxcbiAgICBcInR3ZW50eSBmaXJzdFwiOiAyMSxcbiAgICBcInR3ZW50eS1maXJzdFwiOiAyMSxcbiAgICBcInR3ZW50eSBzZWNvbmRcIjogMjIsXG4gICAgXCJ0d2VudHktc2Vjb25kXCI6IDIyLFxuICAgIFwidHdlbnR5IHRoaXJkXCI6IDIzLFxuICAgIFwidHdlbnR5LXRoaXJkXCI6IDIzLFxuICAgIFwidHdlbnR5IGZvdXJ0aFwiOiAyNCxcbiAgICBcInR3ZW50eS1mb3VydGhcIjogMjQsXG4gICAgXCJ0d2VudHkgZmlmdGhcIjogMjUsXG4gICAgXCJ0d2VudHktZmlmdGhcIjogMjUsXG4gICAgXCJ0d2VudHkgc2l4dGhcIjogMjYsXG4gICAgXCJ0d2VudHktc2l4dGhcIjogMjYsXG4gICAgXCJ0d2VudHkgc2V2ZW50aFwiOiAyNyxcbiAgICBcInR3ZW50eS1zZXZlbnRoXCI6IDI3LFxuICAgIFwidHdlbnR5IGVpZ2h0aFwiOiAyOCxcbiAgICBcInR3ZW50eS1laWdodGhcIjogMjgsXG4gICAgXCJ0d2VudHkgbmludGhcIjogMjksXG4gICAgXCJ0d2VudHktbmludGhcIjogMjksXG4gICAgXCJ0aGlydGlldGhcIjogMzAsXG4gICAgXCJ0aGlydHkgZmlyc3RcIjogMzEsXG4gICAgXCJ0aGlydHktZmlyc3RcIjogMzEsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZX05PX0FCQlIgPSB7XG4gICAgc2Vjb25kOiBcInNlY29uZFwiLFxuICAgIHNlY29uZHM6IFwic2Vjb25kXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZXM6IFwibWludXRlXCIsXG4gICAgaG91cjogXCJob3VyXCIsXG4gICAgaG91cnM6IFwiaG91clwiLFxuICAgIGRheTogXCJkYXlcIixcbiAgICBkYXlzOiBcImRheVwiLFxuICAgIHdlZWs6IFwid2Vla1wiLFxuICAgIHdlZWtzOiBcIndlZWtcIixcbiAgICBtb250aDogXCJtb250aFwiLFxuICAgIG1vbnRoczogXCJtb250aFwiLFxuICAgIHF1YXJ0ZXI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXJzOiBcInF1YXJ0ZXJcIixcbiAgICB5ZWFyOiBcInllYXJcIixcbiAgICB5ZWFyczogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIHM6IFwic2Vjb25kXCIsXG4gICAgc2VjOiBcInNlY29uZFwiLFxuICAgIHNlY29uZDogXCJzZWNvbmRcIixcbiAgICBzZWNvbmRzOiBcInNlY29uZFwiLFxuICAgIG06IFwibWludXRlXCIsXG4gICAgbWluOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnM6IFwibWludXRlXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZXM6IFwibWludXRlXCIsXG4gICAgaDogXCJob3VyXCIsXG4gICAgaHI6IFwiaG91clwiLFxuICAgIGhyczogXCJob3VyXCIsXG4gICAgaG91cjogXCJob3VyXCIsXG4gICAgaG91cnM6IFwiaG91clwiLFxuICAgIGQ6IFwiZGF5XCIsXG4gICAgZGF5OiBcImRheVwiLFxuICAgIGRheXM6IFwiZGF5XCIsXG4gICAgdzogXCJ3ZWVrXCIsXG4gICAgd2VlazogXCJ3ZWVrXCIsXG4gICAgd2Vla3M6IFwid2Vla1wiLFxuICAgIG1vOiBcIm1vbnRoXCIsXG4gICAgbW9uOiBcIm1vbnRoXCIsXG4gICAgbW9zOiBcIm1vbnRoXCIsXG4gICAgbW9udGg6IFwibW9udGhcIixcbiAgICBtb250aHM6IFwibW9udGhcIixcbiAgICBxdHI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXJzOiBcInF1YXJ0ZXJcIixcbiAgICB5OiBcInllYXJcIixcbiAgICB5cjogXCJ5ZWFyXCIsXG4gICAgeWVhcjogXCJ5ZWFyXCIsXG4gICAgeWVhcnM6IFwieWVhclwiLFxuICAgIC4uLlRJTUVfVU5JVF9ESUNUSU9OQVJZX05PX0FCQlIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1xcXFwuWzAtOV0rfGhhbGYoPzpcXFxcc3swLDJ9YW4/KT98YW4/XFxcXGIoPzpcXFxcc3swLDJ9ZmV3KT98ZmV3fHNldmVyYWx8dGhlfGE/XFxcXHN7MCwyfWNvdXBsZVxcXFxzezAsMn0oPzpvZik/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwiYVwiIHx8IG51bSA9PT0gXCJhblwiIHx8IG51bSA9PSBcInRoZVwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2Zldy8pKSB7XG4gICAgICAgIHJldHVybiAzO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2hhbGYvKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2NvdXBsZS8pKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL3NldmVyYWwvKSkge1xuICAgICAgICByZXR1cm4gNztcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZKX18WzAtOV17MSwyfSg/OnN0fG5kfHJkfHRoKT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgbGV0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgbnVtID0gbnVtLnJlcGxhY2UoLyg/OnN0fG5kfHJkfHRoKSQvaSwgXCJcIik7XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlsxLTldWzAtOV17MCwzfVxcXFxzezAsMn0oPzpCRXxBRHxCQ3xCQ0V8Q0UpfFsxLTldWzAtOV17M318WzUtOV1bMC05XXwyWzAtNV0pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXIobWF0Y2gpIHtcbiAgICBpZiAoL0JFL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC9CRS9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKSAtIDU0MztcbiAgICB9XG4gICAgaWYgKC9CQ0U/L2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC9CQ0U/L2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gLXBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgaWYgKC8oQUR8Q0UpL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC8oQUR8Q0UpL2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBjb25zdCByYXdZZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgIHJldHVybiBmaW5kTW9zdExpa2VseUFEWWVhcihyYXdZZWFyTnVtYmVyKTtcbn1cbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiA9IGAoJHtOVU1CRVJfUEFUVEVSTn0pXFxcXHN7MCwzfSgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDN9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZX05PX0FCQlIpfSlgO1xuY29uc3QgVElNRV9VTklUX0NPTk5FQ1RPUl9QQVRURVJOID0gYFxcXFxzezAsNX0sPyg/OlxcXFxzKmFuZCk/XFxcXHN7MCw1fWA7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OmFib3V0fGFyb3VuZClcXFxcc3swLDN9KT9gLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFRJTUVfVU5JVF9DT05ORUNUT1JfUEFUVEVSTik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihgKD86KD86YWJvdXR8YXJvdW5kKVxcXFxzezAsM30pP2AsIFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOLCBUSU1FX1VOSVRfQ09OTkVDVE9SX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCkudHJpbSgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKGZyYWdtZW50cykubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgaWYgKG1hdGNoWzBdLm1hdGNoKC9eW2EtekEtWl0rJC8pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImV4cG9ydCBjbGFzcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuSGFzQ2hhbmdlKGNvbnRleHQsIGN1cnJlbnRJbm5lclBhdHRlcm4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXJQYXR0ZXJuKGNvbnRleHQpICE9PSBjdXJyZW50SW5uZXJQYXR0ZXJuO1xuICAgIH1cbiAgICBwYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gYChcXFxcV3xeKWA7XG4gICAgfVxuICAgIGNhY2hlZElubmVyUGF0dGVybiA9IG51bGw7XG4gICAgY2FjaGVkUGF0dGVybiA9IG51bGw7XG4gICAgcGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZElubmVyUGF0dGVybikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlubmVyUGF0dGVybkhhc0NoYW5nZShjb250ZXh0LCB0aGlzLmNhY2hlZElubmVyUGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYXR0ZXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGVkSW5uZXJQYXR0ZXJuID0gdGhpcy5pbm5lclBhdHRlcm4oY29udGV4dCk7XG4gICAgICAgIHRoaXMuY2FjaGVkUGF0dGVybiA9IG5ldyBSZWdFeHAoYCR7dGhpcy5wYXR0ZXJuTGVmdEJvdW5kYXJ5KCl9JHt0aGlzLmNhY2hlZElubmVyUGF0dGVybi5zb3VyY2V9YCwgdGhpcy5jYWNoZWRJbm5lclBhdHRlcm4uZmxhZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYXR0ZXJuO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IG1hdGNoWzFdID8/IFwiXCI7XG4gICAgICAgIG1hdGNoLmluZGV4ID0gbWF0Y2guaW5kZXggKyBoZWFkZXIubGVuZ3RoO1xuICAgICAgICBtYXRjaFswXSA9IG1hdGNoWzBdLnN1YnN0cmluZyhoZWFkZXIubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCBtYXRjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbWF0Y2hbaSAtIDFdID0gbWF0Y2hbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTl9XSVRIX09QVElPTkFMX1BSRUZJWCA9IG5ldyBSZWdFeHAoYCg/Oig/OndpdGhpbnxpbnxmb3IpXFxcXHMqKT9gICtcbiAgICBgKD86KD86YWJvdXR8YXJvdW5kfHJvdWdobHl8YXBwcm94aW1hdGVseXxqdXN0KVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFBBVFRFUk5fV0lUSF9QUkVGSVggPSBuZXcgUmVnRXhwKGAoPzp3aXRoaW58aW58Zm9yKVxcXFxzKmAgK1xuICAgIGAoPzooPzphYm91dHxhcm91bmR8cm91Z2hseXxhcHByb3hpbWF0ZWx5fGp1c3QpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUEFUVEVSTl9XSVRIX1BSRUZJWF9TVFJJQ1QgPSBuZXcgUmVnRXhwKGAoPzp3aXRoaW58aW58Zm9yKVxcXFxzKmAgK1xuICAgIGAoPzooPzphYm91dHxhcm91bmR8cm91Z2hseXxhcHByb3hpbWF0ZWx5fGp1c3QpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy5zdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gUEFUVEVSTl9XSVRIX1BSRUZJWF9TVFJJQ1Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9uLmZvcndhcmREYXRlID8gUEFUVEVSTl9XSVRIX09QVElPTkFMX1BSRUZJWCA6IFBBVFRFUk5fV0lUSF9QUkVGSVg7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15mb3JcXHMqdGhlXFxzKlxcdysvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGlmICghdGltZVVuaXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKD86b25cXFxcc3swLDN9KT9gICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgYCg/OmAgK1xuICAgIGBcXFxcc3swLDN9KD86dG98XFxcXC18XFxcXOKAk3x1bnRpbHx0aHJvdWdofHRpbGwpP1xcXFxzezAsM31gICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBgKD86LXwvfFxcXFxzezAsM30oPzpvZik/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlwiICtcbiAgICBgKD86LXwvfCw/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7WUVBUl9QQVRURVJOfSg/IVxcXFx3KSlgICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86LXwvfFxcXFxzKiw/XFxcXHMqKVwiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pKD8hXFxcXHMqKD86YW18cG0pKVxcXFxzKmAgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiKD86dG98XFxcXC0pXFxcXHMqXCIgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlcXFxccypgICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD86XCIgK1xuICAgIGAoPzotfC98XFxcXHMqLFxcXFxzKnxcXFxccyspYCArXG4gICAgYCgke1lFQVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpKD8hXFxcXDpcXFxcZClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX0dST1VQID0gMjtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzaG91bGRTa2lwWWVhckxpa2VEYXRlO1xuICAgIGNvbnN0cnVjdG9yKHNob3VsZFNraXBZZWFyTGlrZURhdGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zaG91bGRTa2lwWWVhckxpa2VEYXRlID0gc2hvdWxkU2tpcFllYXJMaWtlRGF0ZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkU2tpcFllYXJMaWtlRGF0ZSkge1xuICAgICAgICAgICAgaWYgKCFtYXRjaFtEQVRFX1RPX0dST1VQXSAmJiAhbWF0Y2hbWUVBUl9HUk9VUF0gJiYgbWF0Y2hbREFURV9HUk9VUF0ubWF0Y2goL14yWzAtNV0kLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dFxuICAgICAgICAgICAgLmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZFRhZyhcInBhcnNlci9FTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlclwiKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gY29tcG9uZW50cztcbiAgICAgICAgcmVzdWx0LmVuZCA9IGNvbXBvbmVudHMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlksIE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKCg/OmluKVxcXFxzKik/YCArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgYFxcXFxzKmAgK1xuICAgIGAoPzpgICtcbiAgICBgKD86LHwtfG9mKT9cXFxccyooJHtZRUFSX1BBVFRFUk59KT9gICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKVwiLCBcImlcIik7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDI7XG5jb25zdCBZRUFSX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTW9udGhOYW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb250aE5hbWUgPSBtYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobWF0Y2hbMF0ubGVuZ3RoIDw9IDMgJiYgIUZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZW21vbnRoTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCArIChtYXRjaFtQUkVGSVhfR1JPVVBdIHx8IFwiXCIpLmxlbmd0aCwgbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgMSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hZGRUYWcoXCJwYXJzZXIvRU5Nb250aE5hbWVQYXJzZXJcIik7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttb250aE5hbWVdO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCAxLCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5Nb250aE5hbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoWzAtOV17NH0pWy1cXFxcLlxcXFwvXFxcXHNdYCArXG4gICAgYCg/Oigke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pfChbMC05XXsxLDJ9KSlbLVxcXFwuXFxcXC9cXFxcc11gICtcbiAgICBgKFswLTldezEsMn0pYCArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBZRUFSX05VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05VTUJFUl9HUk9VUCA9IDM7XG5jb25zdCBEQVRFX05VTUJFUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlllYXJNb250aERheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb250aERhdGVPcmRlcjtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb250aERhdGVPcmRlcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vbnRoRGF0ZU9yZGVyID0gc3RyaWN0TW9udGhEYXRlT3JkZXI7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9OVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgbGV0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfTlVNQkVSX0dST1VQXSk7XG4gICAgICAgIGxldCBtb250aCA9IG1hdGNoW01PTlRIX05VTUJFUl9HUk9VUF1cbiAgICAgICAgICAgID8gcGFyc2VJbnQobWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXSlcbiAgICAgICAgICAgIDogTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgaWYgKG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdHJpY3RNb250aERhdGVPcmRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRheSA+PSAxICYmIGRheSA8PSAxMikge1xuICAgICAgICAgICAgICAgIFttb250aCwgZGF5XSA9IFtkYXksIG1vbnRoXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5IDwgMSB8fCBkYXkgPiAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICAgICAgeWVhcjogeWVhcixcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlllYXJNb250aERheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFswLTldfDBbMS05XXwxWzAxMl0pLyhbMC05XXs0fSlcIiArIFwiXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCkuaW1wbHkoXCJkYXlcIiwgMSkuYXNzaWduKFwibW9udGhcIiwgbW9udGgpLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5mdW5jdGlvbiBwcmltYXJ5VGltZVBhdHRlcm4obGVmdEJvdW5kYXJ5LCBwcmltYXJ5UHJlZml4LCBwcmltYXJ5U3VmZml4LCBmbGFncykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGAke2xlZnRCb3VuZGFyeX1gICtcbiAgICAgICAgYCR7cHJpbWFyeVByZWZpeH1gICtcbiAgICAgICAgYChcXFxcZHsxLDR9KWAgK1xuICAgICAgICBgKD86YCArXG4gICAgICAgIGAoPzpcXFxcLnw6fO+8milgICtcbiAgICAgICAgYChcXFxcZHsxLDJ9KWAgK1xuICAgICAgICBgKD86YCArXG4gICAgICAgIGAoPzo6fO+8milgICtcbiAgICAgICAgYChcXFxcZHsyfSlgICtcbiAgICAgICAgYCg/OlxcXFwuKFxcXFxkezEsNn0pKT9gICtcbiAgICAgICAgYCk/YCArXG4gICAgICAgIGApP2AgK1xuICAgICAgICBgKD86XFxcXHMqKGFcXFxcLm1cXFxcLnxwXFxcXC5tXFxcXC58YW0/fHBtPykpP2AgK1xuICAgICAgICBgJHtwcmltYXJ5U3VmZml4fWAsIGZsYWdzKTtcbn1cbmZ1bmN0aW9uIGZvbGxvd2luZ1RpbWVQYXR0ZW4oZm9sbG93aW5nUGhhc2UsIGZvbGxvd2luZ1N1ZmZpeCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKCR7Zm9sbG93aW5nUGhhc2V9KWAgK1xuICAgICAgICBgKFxcXFxkezEsNH0pYCArXG4gICAgICAgIGAoPzpgICtcbiAgICAgICAgYCg/OlxcXFwufFxcXFw6fFxcXFzvvJopYCArXG4gICAgICAgIGAoXFxcXGR7MSwyfSlgICtcbiAgICAgICAgYCg/OmAgK1xuICAgICAgICBgKD86XFxcXC58XFxcXDp8XFxcXO+8milgICtcbiAgICAgICAgYChcXFxcZHsxLDJ9KSg/OlxcXFwuKFxcXFxkezEsNn0pKT9gICtcbiAgICAgICAgYCk/YCArXG4gICAgICAgIGApP2AgK1xuICAgICAgICBgKD86XFxcXHMqKGFcXFxcLm1cXFxcLnxwXFxcXC5tXFxcXC58YW0/fHBtPykpP2AgK1xuICAgICAgICBgJHtmb2xsb3dpbmdTdWZmaXh9YCwgXCJpXCIpO1xufVxuY29uc3QgSE9VUl9HUk9VUCA9IDI7XG5jb25zdCBNSU5VVEVfR1JPVVAgPSAzO1xuY29uc3QgU0VDT05EX0dST1VQID0gNDtcbmNvbnN0IE1JTExJX1NFQ09ORF9HUk9VUCA9IDU7XG5jb25zdCBBTV9QTV9IT1VSX0dST1VQID0gNjtcbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBwYXR0ZXJuRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBcImlcIjtcbiAgICB9XG4gICAgcHJpbWFyeVBhdHRlcm5MZWZ0Qm91bmRhcnkoKSB7XG4gICAgICAgIHJldHVybiBgKF58XFxcXHN8VHxcXFxcYilgO1xuICAgIH1cbiAgICBwcmltYXJ5U3VmZml4KCkge1xuICAgICAgICByZXR1cm4gYCg/IS8pKD89XFxcXFd8JClgO1xuICAgIH1cbiAgICBmb2xsb3dpbmdTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBgKD8hLykoPz1cXFxcV3wkKWA7XG4gICAgfVxuICAgIHBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQcmltYXJ5VGltZVBhdHRlcm5UaHJvdWdoQ2FjaGUoKTtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBzdGFydENvbXBvbmVudHMgPSB0aGlzLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICBpZiAoIXN0YXJ0Q29tcG9uZW50cykge1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLm1hdGNoKC9eXFxkezR9LykpIHtcbiAgICAgICAgICAgICAgICBtYXRjaC5pbmRleCArPSA0O1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzFdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdGV4dCA9IG1hdGNoWzBdLnN1YnN0cmluZyhtYXRjaFsxXS5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQoaW5kZXgsIHRleHQsIHN0YXJ0Q29tcG9uZW50cyk7XG4gICAgICAgIG1hdGNoLmluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nVGV4dCA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcobWF0Y2guaW5kZXgpO1xuICAgICAgICBjb25zdCBmb2xsb3dpbmdQYXR0ZXJuID0gdGhpcy5nZXRGb2xsb3dpbmdUaW1lUGF0dGVyblRocm91Z2hDYWNoZSgpO1xuICAgICAgICBjb25zdCBmb2xsb3dpbmdNYXRjaCA9IGZvbGxvd2luZ1BhdHRlcm4uZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICAgICAgaWYgKHRleHQubWF0Y2goL15cXGR7Myw0fS8pICYmIGZvbGxvd2luZ01hdGNoKSB7XG4gICAgICAgICAgICBpZiAoZm9sbG93aW5nTWF0Y2hbMF0ubWF0Y2goL15cXHMqKFsrLV0pXFxzKlxcZHsyLDR9JC8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9sbG93aW5nTWF0Y2hbMF0ubWF0Y2goL15cXHMqKFsrLV0pXFxzKlxcZHsyfVxcV1xcZHsyfS8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb2xsb3dpbmdNYXRjaCB8fFxuICAgICAgICAgICAgZm9sbG93aW5nTWF0Y2hbMF0ubWF0Y2goL15cXHMqKFsrLV0pXFxzKlxcZHszLDR9JC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVja0FuZFJldHVybldpdGhvdXRGb2xsb3dpbmdQYXR0ZXJuKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LmVuZCA9IHRoaXMuZXh0cmFjdEZvbGxvd2luZ1RpbWVDb21wb25lbnRzKGNvbnRleHQsIGZvbGxvd2luZ01hdGNoLCByZXN1bHQpO1xuICAgICAgICBpZiAocmVzdWx0LmVuZCkge1xuICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gZm9sbG93aW5nTWF0Y2hbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tBbmRSZXR1cm5XaXRoRm9sbG93aW5nUGF0dGVybihyZXN1bHQpO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoLCBzdHJpY3QgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBsZXQgbWludXRlID0gMDtcbiAgICAgICAgbGV0IG1lcmlkaWVtID0gbnVsbDtcbiAgICAgICAgbGV0IGhvdXIgPSBwYXJzZUludChtYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hbSE9VUl9HUk9VUF0ubGVuZ3RoID09IDQgJiYgbWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBudWxsICYmICFtYXRjaFtBTV9QTV9IT1VSX0dST1VQXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc3RyaWN0TW9kZSB8fCBtYXRjaFtNSU5VVEVfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1pbnV0ZSA9IGhvdXIgJSAxMDA7XG4gICAgICAgICAgICBob3VyID0gTWF0aC5mbG9vcihob3VyIC8gMTAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXS5sZW5ndGggPT0gMSAmJiAhbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID4gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtNSUxMSV9TRUNPTkRfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kID0gcGFyc2VJbnQobWF0Y2hbTUlMTElfU0VDT05EX0dST1VQXS5zdWJzdHJpbmcoMCwgMykpO1xuICAgICAgICAgICAgaWYgKG1pbGxpc2Vjb25kID49IDEwMDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbGxpc2Vjb25kXCIsIG1pbGxpc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBwYXJzZUludChtYXRjaFtTRUNPTkRfR1JPVVBdKTtcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gNjApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInNlY29uZFwiLCBzZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbiAgICBleHRyYWN0Rm9sbG93aW5nVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBpZiAobWF0Y2hbTUlMTElfU0VDT05EX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBtaWxsaXNlY29uZCA9IHBhcnNlSW50KG1hdGNoW01JTExJX1NFQ09ORF9HUk9VUF0uc3Vic3RyaW5nKDAsIDMpKTtcbiAgICAgICAgICAgIGlmIChtaWxsaXNlY29uZCA+PSAxMDAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtaWxsaXNlY29uZFwiLCBtaWxsaXNlY29uZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW1NFQ09ORF9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gcGFyc2VJbnQobWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaG91ciA9IHBhcnNlSW50KG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCB8fCBob3VyID4gMjQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID49IDEyKSB7XG4gICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtBTV9QTV9IT1VSX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wb25lbnRzLmlzQ2VydGFpbihcImRheVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBjb21wb25lbnRzLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFtcG0gPT0gXCJwXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikpIHtcbiAgICAgICAgICAgICAgICBpZiAobWVyaWRpZW0gPT0gTWVyaWRpZW0uQU0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgPT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSAhPSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gPj0gMCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEF0UE0gPSByZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikgJiYgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgPiAxMjtcbiAgICAgICAgICAgIGlmIChzdGFydEF0UE0pIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgLSAxMiA+IGhvdXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA8PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgaG91ciArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPD0gMTIpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnRzLmRhdGUoKS5nZXRUaW1lKCkgPCByZXN1bHQuc3RhcnQuZGF0ZSgpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBjb21wb25lbnRzLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbiAgICBjaGVja0FuZFJldHVybldpdGhvdXRGb2xsb3dpbmdQYXR0ZXJuKHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQkLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXlxcZFxcZFxcZCskLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXFxkW2FwQVBdJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbmRpbmdXaXRoTnVtYmVycyA9IHJlc3VsdC50ZXh0Lm1hdGNoKC9bXlxcZDouXShcXGRbXFxkLl0rKSQvKTtcbiAgICAgICAgaWYgKGVuZGluZ1dpdGhOdW1iZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRpbmdOdW1iZXJzID0gZW5kaW5nV2l0aE51bWJlcnNbMV07XG4gICAgICAgICAgICBpZiAodGhpcy5zdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZW5kaW5nTnVtYmVycy5pbmNsdWRlcyhcIi5cIikgJiYgIWVuZGluZ051bWJlcnMubWF0Y2goL1xcZChcXC5cXGR7Mn0pKyQvKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW5kaW5nTnVtYmVyVmFsID0gcGFyc2VJbnQoZW5kaW5nTnVtYmVycyk7XG4gICAgICAgICAgICBpZiAoZW5kaW5nTnVtYmVyVmFsID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjaGVja0FuZFJldHVybldpdGhGb2xsb3dpbmdQYXR0ZXJuKHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQrLVxcZCskLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVuZGluZ1dpdGhOdW1iZXJzID0gcmVzdWx0LnRleHQubWF0Y2goL1teXFxkOi5dKFxcZFtcXGQuXSspXFxzKi1cXHMqKFxcZFtcXGQuXSspJC8pO1xuICAgICAgICBpZiAoZW5kaW5nV2l0aE51bWJlcnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0aW5nTnVtYmVycyA9IGVuZGluZ1dpdGhOdW1iZXJzWzFdO1xuICAgICAgICAgICAgY29uc3QgZW5kaW5nTnVtYmVycyA9IGVuZGluZ1dpdGhOdW1iZXJzWzJdO1xuICAgICAgICAgICAgaWYgKGVuZGluZ051bWJlcnMuaW5jbHVkZXMoXCIuXCIpICYmICFlbmRpbmdOdW1iZXJzLm1hdGNoKC9cXGQoXFwuXFxkezJ9KSskLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVuZGluZ051bWJlclZhbCA9IHBhcnNlSW50KGVuZGluZ051bWJlcnMpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRpbmdOdW1iZXJWYWwgPSBwYXJzZUludChzdGFydGluZ051bWJlcnMpO1xuICAgICAgICAgICAgaWYgKGVuZGluZ051bWJlclZhbCA+IDI0IHx8IHN0YXJ0aW5nTnVtYmVyVmFsID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjYWNoZWRQcmltYXJ5UHJlZml4ID0gbnVsbDtcbiAgICBjYWNoZWRQcmltYXJ5U3VmZml4ID0gbnVsbDtcbiAgICBjYWNoZWRQcmltYXJ5VGltZVBhdHRlcm4gPSBudWxsO1xuICAgIGdldFByaW1hcnlUaW1lUGF0dGVyblRocm91Z2hDYWNoZSgpIHtcbiAgICAgICAgY29uc3QgcHJpbWFyeVByZWZpeCA9IHRoaXMucHJpbWFyeVByZWZpeCgpO1xuICAgICAgICBjb25zdCBwcmltYXJ5U3VmZml4ID0gdGhpcy5wcmltYXJ5U3VmZml4KCk7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZFByaW1hcnlQcmVmaXggPT09IHByaW1hcnlQcmVmaXggJiYgdGhpcy5jYWNoZWRQcmltYXJ5U3VmZml4ID09PSBwcmltYXJ5U3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQcmltYXJ5VGltZVBhdHRlcm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZWRQcmltYXJ5VGltZVBhdHRlcm4gPSBwcmltYXJ5VGltZVBhdHRlcm4odGhpcy5wcmltYXJ5UGF0dGVybkxlZnRCb3VuZGFyeSgpLCBwcmltYXJ5UHJlZml4LCBwcmltYXJ5U3VmZml4LCB0aGlzLnBhdHRlcm5GbGFncygpKTtcbiAgICAgICAgdGhpcy5jYWNoZWRQcmltYXJ5UHJlZml4ID0gcHJpbWFyeVByZWZpeDtcbiAgICAgICAgdGhpcy5jYWNoZWRQcmltYXJ5U3VmZml4ID0gcHJpbWFyeVN1ZmZpeDtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUHJpbWFyeVRpbWVQYXR0ZXJuO1xuICAgIH1cbiAgICBjYWNoZWRGb2xsb3dpbmdQaGFzZSA9IG51bGw7XG4gICAgY2FjaGVkRm9sbG93aW5nU3VmZml4ID0gbnVsbDtcbiAgICBjYWNoZWRGb2xsb3dpbmdUaW1lUGF0dGVuID0gbnVsbDtcbiAgICBnZXRGb2xsb3dpbmdUaW1lUGF0dGVyblRocm91Z2hDYWNoZSgpIHtcbiAgICAgICAgY29uc3QgZm9sbG93aW5nUGhhc2UgPSB0aGlzLmZvbGxvd2luZ1BoYXNlKCk7XG4gICAgICAgIGNvbnN0IGZvbGxvd2luZ1N1ZmZpeCA9IHRoaXMuZm9sbG93aW5nU3VmZml4KCk7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZEZvbGxvd2luZ1BoYXNlID09PSBmb2xsb3dpbmdQaGFzZSAmJiB0aGlzLmNhY2hlZEZvbGxvd2luZ1N1ZmZpeCA9PT0gZm9sbG93aW5nU3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRGb2xsb3dpbmdUaW1lUGF0dGVuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGVkRm9sbG93aW5nVGltZVBhdHRlbiA9IGZvbGxvd2luZ1RpbWVQYXR0ZW4oZm9sbG93aW5nUGhhc2UsIGZvbGxvd2luZ1N1ZmZpeCk7XG4gICAgICAgIHRoaXMuY2FjaGVkRm9sbG93aW5nUGhhc2UgPSBmb2xsb3dpbmdQaGFzZTtcbiAgICAgICAgdGhpcy5jYWNoZWRGb2xsb3dpbmdTdWZmaXggPSBmb2xsb3dpbmdTdWZmaXg7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEZvbGxvd2luZ1RpbWVQYXR0ZW47XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcihzdHJpY3RNb2RlKTtcbiAgICB9XG4gICAgZm9sbG93aW5nUGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBcIlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnHx0b3x1bnRpbHx0aHJvdWdofHRpbGx8XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/Oig/OmF0fGZyb20pXFxcXHMqKT8/XCI7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/OlxcXFxzKig/Om9cXFxcVypjbG9ja3xhdFxcXFxzKm5pZ2h0fGluXFxcXHMqdGhlXFxcXHMqKD86bW9ybmluZ3xhZnRlcm5vb24pKSk/KD8hLykoPz1cXFxcV3wkKVwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICAgICAgaWYgKCFjb21wb25lbnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbMF0uZW5kc1dpdGgoXCJuaWdodFwiKSkge1xuICAgICAgICAgICAgY29uc3QgaG91ciA9IGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKTtcbiAgICAgICAgICAgIGlmIChob3VyID49IDYgJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwiYWZ0ZXJub29uXCIpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICBpZiAoaG91ciA+PSAwICYmIGhvdXIgPD0gNikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwibW9ybmluZ1wiKSkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzLmFkZFRhZyhcInBhcnNlci9FTlRpbWVFeHByZXNzaW9uUGFyc2VyXCIpO1xuICAgIH1cbiAgICBleHRyYWN0Rm9sbG93aW5nVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCBmb2xsb3dpbmdDb21wb25lbnRzID0gc3VwZXIuZXh0cmFjdEZvbGxvd2luZ1RpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoLCByZXN1bHQpO1xuICAgICAgICBpZiAoZm9sbG93aW5nQ29tcG9uZW50cykge1xuICAgICAgICAgICAgZm9sbG93aW5nQ29tcG9uZW50cy5hZGRUYWcoXCJwYXJzZXIvRU5UaW1lRXhwcmVzc2lvblBhcnNlclwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9sbG93aW5nQ29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmFnb3xiZWZvcmV8ZWFybGllcikoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFNUUklDVF9QQVRURVJOID0gbmV3IFJlZ0V4cChgKCR7VElNRV9VTklUU19OT19BQkJSX1BBVFRFUk59KVxcXFxzezAsNX0oPzphZ298YmVmb3JlfGVhcmxpZXIpKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmljdE1vZGUgPyBTVFJJQ1RfUEFUVEVSTiA6IFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBpZiAoIWR1cmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHtUSU1FX1VOSVRTX1BBVFRFUk59KVxcXFxzezAsNX0oPzpsYXRlcnxhZnRlcnxmcm9tIG5vd3xoZW5jZWZvcnRofGZvcndhcmR8b3V0KWAgKyBcIig/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBTVFJJQ1RfUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOfSlcXFxcc3swLDV9KGxhdGVyfGFmdGVyfGZyb20gbm93KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgR1JPVVBfTlVNX1RJTUVVTklUUyA9IDE7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaWN0TW9kZSA/IFNUUklDVF9QQVRURVJOIDogUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbR1JPVVBfTlVNX1RJTUVVTklUU10pO1xuICAgICAgICBpZiAoIXRpbWVVbml0cykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIuanMubWFwIiwiZXhwb3J0IGNsYXNzIEZpbHRlciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZmlsdGVyKChyKSA9PiB0aGlzLmlzVmFsaWQoY29udGV4dCwgcikpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VkUmVzdWx0cyA9IFtdO1xuICAgICAgICBsZXQgY3VyUmVzdWx0ID0gcmVzdWx0c1swXTtcbiAgICAgICAgbGV0IG5leHRSZXN1bHQgPSBudWxsO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG5leHRSZXN1bHQgPSByZXN1bHRzW2ldO1xuICAgICAgICAgICAgY29uc3QgdGV4dEJldHdlZW4gPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKGN1clJlc3VsdC5pbmRleCArIGN1clJlc3VsdC50ZXh0Lmxlbmd0aCwgbmV4dFJlc3VsdC5pbmRleCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJSZXN1bHQsIG5leHRSZXN1bHQsIGNvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VkUmVzdWx0cy5wdXNoKGN1clJlc3VsdCk7XG4gICAgICAgICAgICAgICAgY3VyUmVzdWx0ID0gbmV4dFJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBjdXJSZXN1bHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBuZXh0UmVzdWx0O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFJlc3VsdCA9IHRoaXMubWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBsZWZ0LCByaWdodCwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gbWVyZ2VkICR7bGVmdH0gYW5kICR7cmlnaHR9IGludG8gJHttZXJnZWRSZXN1bHR9YCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3VyUmVzdWx0ID0gbWVyZ2VkUmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJSZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgICAgbWVyZ2VkUmVzdWx0cy5wdXNoKGN1clJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lcmdlZFJlc3VsdHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWJzdHJhY3RSZWZpbmVycy5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi9hYnN0cmFjdFJlZmluZXJzLmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiAhY3VycmVudFJlc3VsdC5lbmQgJiYgIW5leHRSZXN1bHQuZW5kICYmIHRleHRCZXR3ZWVuLm1hdGNoKHRoaXMucGF0dGVybkJldHdlZW4oKSkgIT0gbnVsbDtcbiAgICB9XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBmcm9tUmVzdWx0LCB0b1Jlc3VsdCkge1xuICAgICAgICBpZiAoIWZyb21SZXN1bHQuc3RhcnQuaXNPbmx5V2Vla2RheUNvbXBvbmVudCgpICYmICF0b1Jlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkpIHtcbiAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmdldENlcnRhaW5Db21wb25lbnRzKCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFmcm9tUmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21SZXN1bHQuc3RhcnQuaW1wbHkoa2V5LCB0b1Jlc3VsdC5zdGFydC5nZXQoa2V5KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmdldENlcnRhaW5Db21wb25lbnRzKCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0b1Jlc3VsdC5zdGFydC5pc0NlcnRhaW4oa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB0b1Jlc3VsdC5zdGFydC5pbXBseShrZXksIGZyb21SZXN1bHQuc3RhcnQuZ2V0KGtleSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcm9tUmVzdWx0LnN0YXJ0LmRhdGUoKSA+IHRvUmVzdWx0LnN0YXJ0LmRhdGUoKSkge1xuICAgICAgICAgICAgbGV0IGZyb21EYXRlID0gZnJvbVJlc3VsdC5zdGFydC5kYXRlKCk7XG4gICAgICAgICAgICBsZXQgdG9EYXRlID0gdG9SZXN1bHQuc3RhcnQuZGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHRvUmVzdWx0LnN0YXJ0LmlzT25seVdlZWtkYXlDb21wb25lbnQoKSAmJiBhZGREdXJhdGlvbih0b0RhdGUsIHsgZGF5OiA3IH0pID4gZnJvbURhdGUpIHtcbiAgICAgICAgICAgICAgICB0b0RhdGUgPSBhZGREdXJhdGlvbih0b0RhdGUsIHsgZGF5OiA3IH0pO1xuICAgICAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIHRvRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgdG9EYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB0b1Jlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgdG9EYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZnJvbVJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkgJiYgYWRkRHVyYXRpb24oZnJvbURhdGUsIHsgZGF5OiAtNyB9KSA8IHRvRGF0ZSkge1xuICAgICAgICAgICAgICAgIGZyb21EYXRlID0gYWRkRHVyYXRpb24oZnJvbURhdGUsIHsgZGF5OiAtNyB9KTtcbiAgICAgICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGZyb21EYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgZnJvbVJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIGZyb21EYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBmcm9tRGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRvUmVzdWx0LnN0YXJ0LmlzRGF0ZVdpdGhVbmtub3duWWVhcigpICYmIGFkZER1cmF0aW9uKHRvRGF0ZSwgeyB5ZWFyOiAxIH0pID4gZnJvbURhdGUpIHtcbiAgICAgICAgICAgICAgICB0b0RhdGUgPSBhZGREdXJhdGlvbih0b0RhdGUsIHsgeWVhcjogMSB9KTtcbiAgICAgICAgICAgICAgICB0b1Jlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgdG9EYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZnJvbVJlc3VsdC5zdGFydC5pc0RhdGVXaXRoVW5rbm93blllYXIoKSAmJiBhZGREdXJhdGlvbihmcm9tRGF0ZSwgeyB5ZWFyOiAtMSB9KSA8IHRvRGF0ZSkge1xuICAgICAgICAgICAgICAgIGZyb21EYXRlID0gYWRkRHVyYXRpb24oZnJvbURhdGUsIHsgeWVhcjogLTEgfSk7XG4gICAgICAgICAgICAgICAgZnJvbVJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZnJvbURhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBbdG9SZXN1bHQsIGZyb21SZXN1bHRdID0gW2Zyb21SZXN1bHQsIHRvUmVzdWx0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBmcm9tUmVzdWx0LmNsb25lKCk7XG4gICAgICAgIHJlc3VsdC5zdGFydCA9IGZyb21SZXN1bHQuc3RhcnQ7XG4gICAgICAgIHJlc3VsdC5lbmQgPSB0b1Jlc3VsdC5zdGFydDtcbiAgICAgICAgcmVzdWx0LmluZGV4ID0gTWF0aC5taW4oZnJvbVJlc3VsdC5pbmRleCwgdG9SZXN1bHQuaW5kZXgpO1xuICAgICAgICBpZiAoZnJvbVJlc3VsdC5pbmRleCA8IHRvUmVzdWx0LmluZGV4KSB7XG4gICAgICAgICAgICByZXN1bHQudGV4dCA9IGZyb21SZXN1bHQudGV4dCArIHRleHRCZXR3ZWVuICsgdG9SZXN1bHQudGV4dDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC50ZXh0ID0gdG9SZXN1bHQudGV4dCArIHRleHRCZXR3ZWVuICsgZnJvbVJlc3VsdC50ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKHRvfC184oCTfHVudGlsfHRocm91Z2h8dGlsbClcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi91dGlscy9kYXRlcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGF0ZVRpbWVSZXN1bHQoZGF0ZVJlc3VsdCwgdGltZVJlc3VsdCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGRhdGVSZXN1bHQuY2xvbmUoKTtcbiAgICBjb25zdCBiZWdpbkRhdGUgPSBkYXRlUmVzdWx0LnN0YXJ0O1xuICAgIGNvbnN0IGJlZ2luVGltZSA9IHRpbWVSZXN1bHQuc3RhcnQ7XG4gICAgcmVzdWx0LnN0YXJ0ID0gbWVyZ2VEYXRlVGltZUNvbXBvbmVudChiZWdpbkRhdGUsIGJlZ2luVGltZSk7XG4gICAgaWYgKGRhdGVSZXN1bHQuZW5kICE9IG51bGwgfHwgdGltZVJlc3VsdC5lbmQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBlbmREYXRlID0gZGF0ZVJlc3VsdC5lbmQgPT0gbnVsbCA/IGRhdGVSZXN1bHQuc3RhcnQgOiBkYXRlUmVzdWx0LmVuZDtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IHRpbWVSZXN1bHQuZW5kID09IG51bGwgPyB0aW1lUmVzdWx0LnN0YXJ0IDogdGltZVJlc3VsdC5lbmQ7XG4gICAgICAgIGNvbnN0IGVuZERhdGVUaW1lID0gbWVyZ2VEYXRlVGltZUNvbXBvbmVudChlbmREYXRlLCBlbmRUaW1lKTtcbiAgICAgICAgaWYgKGRhdGVSZXN1bHQuZW5kID09IG51bGwgJiYgZW5kRGF0ZVRpbWUuZGF0ZSgpLmdldFRpbWUoKSA8IHJlc3VsdC5zdGFydC5kYXRlKCkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0RGF5ID0gbmV3IERhdGUoZW5kRGF0ZVRpbWUuZGF0ZSgpLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgIGlmIChlbmREYXRlVGltZS5pc0NlcnRhaW4oXCJkYXlcIikpIHtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShlbmREYXRlVGltZSwgbmV4dERheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJEYXRlKGVuZERhdGVUaW1lLCBuZXh0RGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuZW5kID0gZW5kRGF0ZVRpbWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEYXRlVGltZUNvbXBvbmVudChkYXRlQ29tcG9uZW50LCB0aW1lQ29tcG9uZW50KSB7XG4gICAgY29uc3QgZGF0ZVRpbWVDb21wb25lbnQgPSBkYXRlQ29tcG9uZW50LmNsb25lKCk7XG4gICAgaWYgKHRpbWVDb21wb25lbnQuaXNDZXJ0YWluKFwiaG91clwiKSkge1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJob3VyXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmFzc2lnbihcIm1pbnV0ZVwiLCB0aW1lQ29tcG9uZW50LmdldChcIm1pbnV0ZVwiKSk7XG4gICAgICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcInNlY29uZFwiKSkge1xuICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuYXNzaWduKFwic2Vjb25kXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwic2Vjb25kXCIpKTtcbiAgICAgICAgICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcIm1pbGxpc2Vjb25kXCIpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuYXNzaWduKFwibWlsbGlzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJtaWxsaXNlY29uZFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWlsbGlzZWNvbmRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJzZWNvbmRcIikpO1xuICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCB0aW1lQ29tcG9uZW50LmdldChcIm1pbGxpc2Vjb25kXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWludXRlXCIpKTtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJzZWNvbmRcIikpO1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWlsbGlzZWNvbmRcIikpO1xuICAgIH1cbiAgICBpZiAodGltZUNvbXBvbmVudC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCB0aW1lQ29tcG9uZW50LmdldChcInRpbWV6b25lT2Zmc2V0XCIpKTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZUhhc01lYW5pbmdmdWxNZXJpZGllbSA9IGRhdGVDb21wb25lbnQuZ2V0KFwibWVyaWRpZW1cIikgIT0gbnVsbCAmJlxuICAgICAgICAoZGF0ZUNvbXBvbmVudC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSB8fFxuICAgICAgICAgICAgQXJyYXkuZnJvbShkYXRlQ29tcG9uZW50LnRhZ3MoKSkuc29tZSgodCkgPT4gdC5zdGFydHNXaXRoKFwiY2FzdWFsUmVmZXJlbmNlL1wiKSkpO1xuICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpKSB7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmFzc2lnbihcIm1lcmlkaWVtXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWVyaWRpZW1cIikpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aW1lQ29tcG9uZW50LmdldChcIm1lcmlkaWVtXCIpICE9IG51bGwgJiYgIWRhdGVIYXNNZWFuaW5nZnVsTWVyaWRpZW0pIHtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCB0aW1lQ29tcG9uZW50LmdldChcIm1lcmlkaWVtXCIpKTtcbiAgICB9XG4gICAgaWYgKGRhdGVUaW1lQ29tcG9uZW50LmdldChcIm1lcmlkaWVtXCIpID09IE1lcmlkaWVtLlBNICYmIGRhdGVUaW1lQ29tcG9uZW50LmdldChcImhvdXJcIikgPCAxMikge1xuICAgICAgICBpZiAodGltZUNvbXBvbmVudC5pc0NlcnRhaW4oXCJob3VyXCIpKSB7XG4gICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJob3VyXCIsIGRhdGVUaW1lQ29tcG9uZW50LmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgZGF0ZVRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkYXRlVGltZUNvbXBvbmVudC5hZGRUYWdzKGRhdGVDb21wb25lbnQudGFncygpKTtcbiAgICBkYXRlVGltZUNvbXBvbmVudC5hZGRUYWdzKHRpbWVDb21wb25lbnQudGFncygpKTtcbiAgICByZXR1cm4gZGF0ZVRpbWVDb21wb25lbnQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnaW5nQ2FsY3VsYXRpb24uanMubWFwIiwiaW1wb3J0IHsgTWVyZ2luZ1JlZmluZXIgfSBmcm9tIFwiLi4vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgbWVyZ2VEYXRlVGltZVJlc3VsdCB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi9tZXJnaW5nQ2FsY3VsYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiAoKChjdXJyZW50UmVzdWx0LnN0YXJ0LmlzT25seURhdGUoKSAmJiBuZXh0UmVzdWx0LnN0YXJ0LmlzT25seVRpbWUoKSkgfHxcbiAgICAgICAgICAgIChuZXh0UmVzdWx0LnN0YXJ0LmlzT25seURhdGUoKSAmJiBjdXJyZW50UmVzdWx0LnN0YXJ0LmlzT25seVRpbWUoKSkpICYmXG4gICAgICAgICAgICB0ZXh0QmV0d2Vlbi5tYXRjaCh0aGlzLnBhdHRlcm5CZXR3ZWVuKCkpICE9IG51bGwpO1xuICAgIH1cbiAgICBtZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY3VycmVudFJlc3VsdC5zdGFydC5pc09ubHlEYXRlKClcbiAgICAgICAgICAgID8gbWVyZ2VEYXRlVGltZVJlc3VsdChjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KVxuICAgICAgICAgICAgOiBtZXJnZURhdGVUaW1lUmVzdWx0KG5leHRSZXN1bHQsIGN1cnJlbnRSZXN1bHQpO1xuICAgICAgICByZXN1bHQuaW5kZXggPSBjdXJyZW50UmVzdWx0LmluZGV4O1xuICAgICAgICByZXN1bHQudGV4dCA9IGN1cnJlbnRSZXN1bHQudGV4dCArIHRleHRCZXR3ZWVuICsgbmV4dFJlc3VsdC50ZXh0O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXlxcXFxzKihUfGF0fGFmdGVyfGJlZm9yZXxvbnxvZnwsfC18XFxcXC584oiZfDopP1xcXFxzKiRcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5NZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyB0b1RpbWV6b25lT2Zmc2V0IH0gZnJvbSBcIi4uLy4uL3RpbWV6b25lLmpzXCI7XG5jb25zdCBUSU1FWk9ORV9OQU1FX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXlxcXFxzKiw/XFxcXHMqXFxcXCg/KFtBLVpdezIsNH0pXFxcXCk/KD89XFxcXFd8JClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXh0cmFjdFRpbWV6b25lQWJiclJlZmluZXIge1xuICAgIHRpbWV6b25lT3ZlcnJpZGVzO1xuICAgIGNvbnN0cnVjdG9yKHRpbWV6b25lT3ZlcnJpZGVzKSB7XG4gICAgICAgIHRoaXMudGltZXpvbmVPdmVycmlkZXMgPSB0aW1lem9uZU92ZXJyaWRlcztcbiAgICB9XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgY29uc3QgdGltZXpvbmVPdmVycmlkZXMgPSBjb250ZXh0Lm9wdGlvbi50aW1lem9uZXMgPz8ge307XG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWZmaXggPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IFRJTUVaT05FX05BTUVfUEFUVEVSTi5leGVjKHN1ZmZpeCk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGltZXpvbmVBYmJyID0gbWF0Y2hbMV0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZkRhdGUgPSByZXN1bHQuc3RhcnQuZGF0ZSgpID8/IHJlc3VsdC5yZWZEYXRlID8/IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBjb25zdCB0ek92ZXJyaWRlcyA9IHsgLi4udGhpcy50aW1lem9uZU92ZXJyaWRlcywgLi4udGltZXpvbmVPdmVycmlkZXMgfTtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZFRpbWV6b25lT2Zmc2V0ID0gdG9UaW1lem9uZU9mZnNldCh0aW1lem9uZUFiYnIsIHJlZkRhdGUsIHR6T3ZlcnJpZGVzKTtcbiAgICAgICAgICAgIGlmIChleHRyYWN0ZWRUaW1lem9uZU9mZnNldCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEV4dHJhY3RpbmcgdGltZXpvbmU6ICcke3RpbWV6b25lQWJicn0nIGludG86ICR7ZXh0cmFjdGVkVGltZXpvbmVPZmZzZXR9IGZvcjogJHtyZXN1bHQuc3RhcnR9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lem9uZU9mZnNldCA9IHJlc3VsdC5zdGFydC5nZXQoXCJ0aW1lem9uZU9mZnNldFwiKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50VGltZXpvbmVPZmZzZXQgIT09IG51bGwgJiYgZXh0cmFjdGVkVGltZXpvbmVPZmZzZXQgIT0gY3VycmVudFRpbWV6b25lT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lem9uZUFiYnIgIT0gbWF0Y2hbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuaXNPbmx5RGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWV6b25lQWJiciAhPSBtYXRjaFsxXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCBleHRyYWN0ZWRUaW1lem9uZU9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0LmVuZCAhPSBudWxsICYmICFyZXN1bHQuZW5kLmlzQ2VydGFpbihcInRpbWV6b25lT2Zmc2V0XCIpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCBleHRyYWN0ZWRUaW1lem9uZU9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FeHRyYWN0VGltZXpvbmVBYmJyUmVmaW5lci5qcy5tYXAiLCJjb25zdCBUSU1FWk9ORV9PRkZTRVRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCJeXFxcXHMqKD86XFxcXCg/KD86R01UfFVUQylcXFxccz8pPyhbKy1dKShcXFxcZHsxLDJ9KSg/Ojo/KFxcXFxkezJ9KSk/XFxcXCk/XCIsIFwiaVwiKTtcbmNvbnN0IFRJTUVaT05FX09GRlNFVF9TSUdOX0dST1VQID0gMTtcbmNvbnN0IFRJTUVaT05FX09GRlNFVF9IT1VSX09GRlNFVF9HUk9VUCA9IDI7XG5jb25zdCBUSU1FWk9ORV9PRkZTRVRfTUlOVVRFX09GRlNFVF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyIHtcbiAgICByZWZpbmUoY29udGV4dCwgcmVzdWx0cykge1xuICAgICAgICByZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcocmVzdWx0LmluZGV4ICsgcmVzdWx0LnRleHQubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gVElNRVpPTkVfT0ZGU0VUX1BBVFRFUk4uZXhlYyhzdWZmaXgpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFeHRyYWN0aW5nIHRpbWV6b25lOiAnJHttYXRjaFswXX0nIGludG8gOiAke3Jlc3VsdH1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaG91ck9mZnNldCA9IHBhcnNlSW50KG1hdGNoW1RJTUVaT05FX09GRlNFVF9IT1VSX09GRlNFVF9HUk9VUF0pO1xuICAgICAgICAgICAgY29uc3QgbWludXRlT2Zmc2V0ID0gcGFyc2VJbnQobWF0Y2hbVElNRVpPTkVfT0ZGU0VUX01JTlVURV9PRkZTRVRfR1JPVVBdIHx8IFwiMFwiKTtcbiAgICAgICAgICAgIGxldCB0aW1lem9uZU9mZnNldCA9IGhvdXJPZmZzZXQgKiA2MCArIG1pbnV0ZU9mZnNldDtcbiAgICAgICAgICAgIGlmICh0aW1lem9uZU9mZnNldCA+IDE0ICogNjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbVElNRVpPTkVfT0ZGU0VUX1NJR05fR1JPVVBdID09PSBcIi1cIikge1xuICAgICAgICAgICAgICAgIHRpbWV6b25lT2Zmc2V0ID0gLXRpbWV6b25lT2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgdGltZXpvbmVPZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInRpbWV6b25lT2Zmc2V0XCIsIHRpbWV6b25lT2Zmc2V0KTtcbiAgICAgICAgICAgIHJlc3VsdC50ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lci5qcy5tYXAiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBPdmVybGFwUmVtb3ZhbFJlZmluZXIge1xuICAgIHJlZmluZShjb250ZXh0LCByZXN1bHRzKSB7XG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkUmVzdWx0cyA9IFtdO1xuICAgICAgICBsZXQgcHJldlJlc3VsdCA9IHJlc3VsdHNbMF07XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzdWx0c1tpXTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaW5kZXggPj0gcHJldlJlc3VsdC5pbmRleCArIHByZXZSZXN1bHQudGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZFJlc3VsdHMucHVzaChwcmV2UmVzdWx0KTtcbiAgICAgICAgICAgICAgICBwcmV2UmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGtlcHQgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlbW92ZWQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC50ZXh0Lmxlbmd0aCA+IHByZXZSZXN1bHQudGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBrZXB0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHJlbW92ZWQgPSBwcmV2UmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAga2VwdCA9IHByZXZSZXN1bHQ7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gcmVtb3ZlICR7cmVtb3ZlZH0gYnkgJHtrZXB0fWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmV2UmVzdWx0ID0ga2VwdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldlJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZFJlc3VsdHMucHVzaChwcmV2UmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWRSZXN1bHRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU92ZXJsYXBSZW1vdmFsUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBXZWVrZGF5IH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi9yZXN1bHRzLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkocmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcikge1xuICAgIGNvbnN0IHJlZkRhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgY29uc3QgZGF5c1RvV2Vla2RheSA9IGdldERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIGxldCBjb21wb25lbnRzID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSk7XG4gICAgY29tcG9uZW50cyA9IGNvbXBvbmVudHMuYWRkRHVyYXRpb25Bc0ltcGxpZWQoeyBkYXk6IGRheXNUb1dlZWtkYXkgfSk7XG4gICAgY29tcG9uZW50cy5hc3NpZ24oXCJ3ZWVrZGF5XCIsIHdlZWtkYXkpO1xuICAgIHJldHVybiBjb21wb25lbnRzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSwgbW9kaWZpZXIpIHtcbiAgICBjb25zdCByZWZXZWVrZGF5ID0gcmVmRGF0ZS5nZXREYXkoKTtcbiAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7XG4gICAgICAgIGNhc2UgXCJ0aGlzXCI6XG4gICAgICAgICAgICByZXR1cm4gZ2V0RGF5c0ZvcndhcmRUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSk7XG4gICAgICAgIGNhc2UgXCJsYXN0XCI6XG4gICAgICAgICAgICByZXR1cm4gZ2V0QmFja3dhcmREYXlzVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpO1xuICAgICAgICBjYXNlIFwibmV4dFwiOlxuICAgICAgICAgICAgaWYgKHJlZldlZWtkYXkgPT0gV2Vla2RheS5TVU5EQVkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2Vla2RheSA9PSBXZWVrZGF5LlNVTkRBWSA/IDcgOiB3ZWVrZGF5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlZldlZWtkYXkgPT0gV2Vla2RheS5TQVRVUkRBWSkge1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5ID09IFdlZWtkYXkuU0FUVVJEQVkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA3O1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5ID09IFdlZWtkYXkuU1VOREFZKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gODtcbiAgICAgICAgICAgICAgICByZXR1cm4gMSArIHdlZWtkYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2Vla2RheSA8IHJlZldlZWtkYXkgJiYgd2Vla2RheSAhPSBXZWVrZGF5LlNVTkRBWSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCB3ZWVrZGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCB3ZWVrZGF5KSArIDc7XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZXREYXlzVG9XZWVrZGF5Q2xvc2VzdChyZWZEYXRlLCB3ZWVrZGF5KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXlzVG9XZWVrZGF5Q2xvc2VzdChyZWZEYXRlLCB3ZWVrZGF5KSB7XG4gICAgY29uc3QgYmFja3dhcmQgPSBnZXRCYWNrd2FyZERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSk7XG4gICAgY29uc3QgZm9yd2FyZCA9IGdldERheXNGb3J3YXJkVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpO1xuICAgIHJldHVybiBmb3J3YXJkIDwgLWJhY2t3YXJkID8gZm9yd2FyZCA6IGJhY2t3YXJkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERheXNGb3J3YXJkVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpIHtcbiAgICBjb25zdCByZWZXZWVrZGF5ID0gcmVmRGF0ZS5nZXREYXkoKTtcbiAgICBsZXQgZm9yd2FyZENvdW50ID0gd2Vla2RheSAtIHJlZldlZWtkYXk7XG4gICAgaWYgKGZvcndhcmRDb3VudCA8IDApIHtcbiAgICAgICAgZm9yd2FyZENvdW50ICs9IDc7XG4gICAgfVxuICAgIHJldHVybiBmb3J3YXJkQ291bnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFja3dhcmREYXlzVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpIHtcbiAgICBjb25zdCByZWZXZWVrZGF5ID0gcmVmRGF0ZS5nZXREYXkoKTtcbiAgICBsZXQgYmFja3dhcmRDb3VudCA9IHdlZWtkYXkgLSByZWZXZWVrZGF5O1xuICAgIGlmIChiYWNrd2FyZENvdW50ID49IDApIHtcbiAgICAgICAgYmFja3dhcmRDb3VudCAtPSA3O1xuICAgIH1cbiAgICByZXR1cm4gYmFja3dhcmRDb3VudDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdlZWtkYXlzLmpzLm1hcCIsImltcG9ydCAqIGFzIGRhdGVzIGZyb20gXCIuLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgaW1wbHlTaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgYWRkRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmltcG9ydCB7IGdldERheXNGb3J3YXJkVG9XZWVrZGF5IH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3J3YXJkRGF0ZVJlZmluZXIge1xuICAgIHJlZmluZShjb250ZXh0LCByZXN1bHRzKSB7XG4gICAgICAgIGlmICghY29udGV4dC5vcHRpb24uZm9yd2FyZERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVmRGF0ZSA9IGNvbnRleHQucmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc09ubHlUaW1lKCkgJiYgY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudCA+IHJlc3VsdC5zdGFydC5kYXRlKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWZEYXRlID0gY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmRm9sbG93aW5nRGF5ID0gbmV3IERhdGUocmVmRGF0ZSk7XG4gICAgICAgICAgICAgICAgcmVmRm9sbG93aW5nRGF5LnNldERhdGUocmVmRm9sbG93aW5nRGF5LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIGRhdGVzLmltcGx5U2ltaWxhckRhdGUocmVzdWx0LnN0YXJ0LCByZWZGb2xsb3dpbmdEYXkpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGFkanVzdGVkICR7cmVzdWx0fSB0aW1lIGZyb20gdGhlIHJlZiBkYXRlICgke3JlZkRhdGV9KSB0byB0aGUgZm9sbG93aW5nIGRheSAoJHtyZWZGb2xsb3dpbmdEYXl9KWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZW5kICYmIHJlc3VsdC5lbmQuaXNPbmx5VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVzLmltcGx5U2ltaWxhckRhdGUocmVzdWx0LmVuZCwgcmVmRm9sbG93aW5nRGF5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5kYXRlKCkgPiByZXN1bHQuZW5kLmRhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmRm9sbG93aW5nRGF5LnNldERhdGUocmVmRm9sbG93aW5nRGF5LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMuaW1wbHlTaW1pbGFyRGF0ZShyZXN1bHQuZW5kLCByZWZGb2xsb3dpbmdEYXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkgJiYgcmVmRGF0ZSA+IHJlc3VsdC5zdGFydC5kYXRlKCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF5c1RvQWRkID0gZ2V0RGF5c0ZvcndhcmRUb1dlZWtkYXkocmVmRGF0ZSwgcmVzdWx0LnN0YXJ0LmdldChcIndlZWtkYXlcIikpIHx8IDc7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZGVkV2Vla2RheSA9IGFkZER1cmF0aW9uKHJlZkRhdGUsIHsgZGF5OiBkYXlzVG9BZGQgfSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyRGF0ZShyZXN1bHQuc3RhcnQsIGZvcndhcmRlZFdlZWtkYXkpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGFkanVzdGVkICR7cmVzdWx0fSB3ZWVrZGF5ICgke3Jlc3VsdC5zdGFydH0pYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQgJiYgcmVzdWx0LnN0YXJ0LmRhdGUoKSA+IHJlc3VsdC5lbmQuZGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXlzVG9BZGQgPSBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCByZXN1bHQuc3RhcnQuZ2V0KFwid2Vla2RheVwiKSkgfHwgNztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZGVkV2Vla2RheSA9IGFkZER1cmF0aW9uKHJlZkRhdGUsIHsgZGF5OiBkYXlzVG9BZGQgfSk7XG4gICAgICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhckRhdGUocmVzdWx0LmVuZCwgZm9yd2FyZGVkV2Vla2RheSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBhZGp1c3RlZCAke3Jlc3VsdH0gd2Vla2RheSAoJHtyZXN1bHQuZW5kfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc0RhdGVXaXRoVW5rbm93blllYXIoKSAmJiByZWZEYXRlID4gcmVzdWx0LnN0YXJ0LmRhdGUoKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMyAmJiByZWZEYXRlID4gcmVzdWx0LnN0YXJ0LmRhdGUoKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgcmVzdWx0LnN0YXJ0LmdldChcInllYXJcIikgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGFkanVzdGVkICR7cmVzdWx0fSB5ZWFyICgke3Jlc3VsdC5zdGFydH0pYCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVuZCAmJiAhcmVzdWx0LmVuZC5pc0NlcnRhaW4oXCJ5ZWFyXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwieWVhclwiLCByZXN1bHQuZW5kLmdldChcInllYXJcIikgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gYWRqdXN0ZWQgJHtyZXN1bHR9IG1vbnRoICgke3Jlc3VsdC5zdGFydH0pYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZvcndhcmREYXRlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBGaWx0ZXIgfSBmcm9tIFwiLi4vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVW5saWtlbHlGb3JtYXRGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpc1ZhbGlkKGNvbnRleHQsIHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnRleHQucmVwbGFjZShcIiBcIiwgXCJcIikubWF0Y2goL15cXGQqKFxcLlxcZCopPyQvKSkge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFJlbW92aW5nIHVubGlrZWx5IHJlc3VsdCAnJHtyZXN1bHQudGV4dH0nYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc3VsdC5zdGFydC5pc1ZhbGlkRGF0ZSgpKSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVtb3ZpbmcgaW52YWxpZCByZXN1bHQ6ICR7cmVzdWx0fSAoJHtyZXN1bHQuc3RhcnR9KWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5lbmQgJiYgIXJlc3VsdC5lbmQuaXNWYWxpZERhdGUoKSkge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFJlbW92aW5nIGludmFsaWQgcmVzdWx0OiAke3Jlc3VsdH0gKCR7cmVzdWx0LmVuZH0pYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N0cmljdE1vZGVWYWxpZChjb250ZXh0LCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpc1N0cmljdE1vZGVWYWxpZChjb250ZXh0LCByZXN1bHQpIHtcbiAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAoU3RyaWN0KSBSZW1vdmluZyB3ZWVrZGF5IG9ubHkgY29tcG9uZW50OiAke3Jlc3VsdH0gKCR7cmVzdWx0LmVuZH0pYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Vbmxpa2VseUZvcm1hdEZpbHRlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoWzAtOV17NH0pXFxcXC0oWzAtOV17MSwyfSlcXFxcLShbMC05XXsxLDJ9KVwiICtcbiAgICBcIig/OlRcIiArXG4gICAgXCIoWzAtOV17MSwyfSk6KFswLTldezEsMn0pXCIgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiOihbMC05XXsxLDJ9KSg/OlxcXFwuKFxcXFxkezEsNH0pKT9cIiArXG4gICAgXCIpP1wiICtcbiAgICBcIihcIiArXG4gICAgXCJafChbKy1dXFxcXGR7Mn0pOj8oXFxcXGR7Mn0pP1wiICtcbiAgICBcIik/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBZRUFSX05VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBNT05USF9OVU1CRVJfR1JPVVAgPSAyO1xuY29uc3QgREFURV9OVU1CRVJfR1JPVVAgPSAzO1xuY29uc3QgSE9VUl9OVU1CRVJfR1JPVVAgPSA0O1xuY29uc3QgTUlOVVRFX05VTUJFUl9HUk9VUCA9IDU7XG5jb25zdCBTRUNPTkRfTlVNQkVSX0dST1VQID0gNjtcbmNvbnN0IE1JTExJU0VDT05EX05VTUJFUl9HUk9VUCA9IDc7XG5jb25zdCBUWkRfR1JPVVAgPSA4O1xuY29uc3QgVFpEX0hPVVJfT0ZGU0VUX0dST1VQID0gOTtcbmNvbnN0IFRaRF9NSU5VVEVfT0ZGU0VUX0dST1VQID0gMTA7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJU09Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIFwieWVhclwiOiBwYXJzZUludChtYXRjaFtZRUFSX05VTUJFUl9HUk9VUF0pLFxuICAgICAgICAgICAgXCJtb250aFwiOiBwYXJzZUludChtYXRjaFtNT05USF9OVU1CRVJfR1JPVVBdKSxcbiAgICAgICAgICAgIFwiZGF5XCI6IHBhcnNlSW50KG1hdGNoW0RBVEVfTlVNQkVSX0dST1VQXSksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobWF0Y2hbSE9VUl9OVU1CRVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBwYXJzZUludChtYXRjaFtIT1VSX05VTUJFUl9HUk9VUF0pKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWludXRlXCIsIHBhcnNlSW50KG1hdGNoW01JTlVURV9OVU1CRVJfR1JPVVBdKSk7XG4gICAgICAgICAgICBpZiAobWF0Y2hbU0VDT05EX05VTUJFUl9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwic2Vjb25kXCIsIHBhcnNlSW50KG1hdGNoW1NFQ09ORF9OVU1CRVJfR1JPVVBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbTUlMTElTRUNPTkRfTlVNQkVSX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtaWxsaXNlY29uZFwiLCBwYXJzZUludChtYXRjaFtNSUxMSVNFQ09ORF9OVU1CRVJfR1JPVVBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbVFpEX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoW1RaRF9IT1VSX09GRlNFVF9HUk9VUF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaG91ck9mZnNldCA9IHBhcnNlSW50KG1hdGNoW1RaRF9IT1VSX09GRlNFVF9HUk9VUF0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWludXRlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoW1RaRF9NSU5VVEVfT0ZGU0VUX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW51dGVPZmZzZXQgPSBwYXJzZUludChtYXRjaFtUWkRfTUlOVVRFX09GRlNFVF9HUk9VUF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGhvdXJPZmZzZXQgKiA2MDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSBtaW51dGVPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbWludXRlT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgb2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cy5hZGRUYWcoXCJwYXJzZXIvSVNPRm9ybWF0UGFyc2VyXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlTT0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi9hYnN0cmFjdFJlZmluZXJzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIGV4dGVuZHMgTWVyZ2luZ1JlZmluZXIge1xuICAgIG1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCBuZXdSZXN1bHQgPSBuZXh0UmVzdWx0LmNsb25lKCk7XG4gICAgICAgIG5ld1Jlc3VsdC5pbmRleCA9IGN1cnJlbnRSZXN1bHQuaW5kZXg7XG4gICAgICAgIG5ld1Jlc3VsdC50ZXh0ID0gY3VycmVudFJlc3VsdC50ZXh0ICsgdGV4dEJldHdlZW4gKyBuZXdSZXN1bHQudGV4dDtcbiAgICAgICAgbmV3UmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgY3VycmVudFJlc3VsdC5zdGFydC5nZXQoXCJ3ZWVrZGF5XCIpKTtcbiAgICAgICAgaWYgKG5ld1Jlc3VsdC5lbmQpIHtcbiAgICAgICAgICAgIG5ld1Jlc3VsdC5lbmQuYXNzaWduKFwid2Vla2RheVwiLCBjdXJyZW50UmVzdWx0LnN0YXJ0LmdldChcIndlZWtkYXlcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdSZXN1bHQ7XG4gICAgfVxuICAgIHNob3VsZE1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCB3ZWVrZGF5VGhlbk5vcm1hbERhdGUgPSBjdXJyZW50UmVzdWx0LnN0YXJ0LmlzT25seVdlZWtkYXlDb21wb25lbnQoKSAmJlxuICAgICAgICAgICAgIWN1cnJlbnRSZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwiaG91clwiKSAmJlxuICAgICAgICAgICAgbmV4dFJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJkYXlcIik7XG4gICAgICAgIHJldHVybiB3ZWVrZGF5VGhlbk5vcm1hbERhdGUgJiYgdGV4dEJldHdlZW4ubWF0Y2goL14sP1xccyokLykgIT0gbnVsbDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBFeHRyYWN0VGltZXpvbmVBYmJyUmVmaW5lciBmcm9tIFwiLi9jb21tb24vcmVmaW5lcnMvRXh0cmFjdFRpbWV6b25lQWJiclJlZmluZXIuanNcIjtcbmltcG9ydCBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzXCI7XG5pbXBvcnQgT3ZlcmxhcFJlbW92YWxSZWZpbmVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9PdmVybGFwUmVtb3ZhbFJlZmluZXIuanNcIjtcbmltcG9ydCBGb3J3YXJkRGF0ZVJlZmluZXIgZnJvbSBcIi4vY29tbW9uL3JlZmluZXJzL0ZvcndhcmREYXRlUmVmaW5lci5qc1wiO1xuaW1wb3J0IFVubGlrZWx5Rm9ybWF0RmlsdGVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9Vbmxpa2VseUZvcm1hdEZpbHRlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9jb21tb24vcGFyc2Vycy9JU09Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbiwgc3RyaWN0TW9kZSA9IGZhbHNlKSB7XG4gICAgY29uZmlndXJhdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IElTT0Zvcm1hdFBhcnNlcigpKTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzLnVuc2hpZnQobmV3IE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy51bnNoaWZ0KG5ldyBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyKCkpO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMudW5zaGlmdChuZXcgT3ZlcmxhcFJlbW92YWxSZWZpbmVyKCkpO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMucHVzaChuZXcgRXh0cmFjdFRpbWV6b25lQWJiclJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBPdmVybGFwUmVtb3ZhbFJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBGb3J3YXJkRGF0ZVJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBVbmxpa2VseUZvcm1hdEZpbHRlcihzdHJpY3RNb2RlKSk7XG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWd1cmF0aW9ucy5qcy5tYXAiLCJpbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgYXNzaWduU2ltaWxhclRpbWUsIGltcGx5U2ltaWxhclRpbWUgfSBmcm9tIFwiLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gbm93KHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IHRhcmdldERhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgYXNzaWduU2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgcmVmZXJlbmNlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2Uvbm93XCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9kYXkocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgdGFyZ2V0RGF0ZSA9IHJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgY29tcG9uZW50LmRlbGV0ZShcIm1lcmlkaWVtXCIpO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvdG9kYXlcIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB5ZXN0ZXJkYXkocmVmZXJlbmNlKSB7XG4gICAgcmV0dXJuIHRoZURheUJlZm9yZShyZWZlcmVuY2UsIDEpLmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS95ZXN0ZXJkYXlcIik7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9tb3Jyb3cocmVmZXJlbmNlKSB7XG4gICAgcmV0dXJuIHRoZURheUFmdGVyKHJlZmVyZW5jZSwgMSkuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL3RvbW9ycm93XCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRoZURheUJlZm9yZShyZWZlcmVuY2UsIG51bURheSkge1xuICAgIHJldHVybiB0aGVEYXlBZnRlcihyZWZlcmVuY2UsIC1udW1EYXkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRoZURheUFmdGVyKHJlZmVyZW5jZSwgbkRheXMpIHtcbiAgICBjb25zdCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgIG5ld0RhdGUuc2V0RGF0ZShuZXdEYXRlLmdldERhdGUoKSArIG5EYXlzKTtcbiAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5ld0RhdGUpO1xuICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBuZXdEYXRlKTtcbiAgICBjb21wb25lbnQuZGVsZXRlKFwibWVyaWRpZW1cIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b25pZ2h0KHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMjIpIHtcbiAgICBjb25zdCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS90b25pZ2h0XCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbGFzdE5pZ2h0KHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMCkge1xuICAgIGxldCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBpZiAodGFyZ2V0RGF0ZS5nZXRIb3VycygpIDwgNikge1xuICAgICAgICB0YXJnZXREYXRlID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkgLSAyNCAqIDYwICogNjAgKiAxMDAwKTtcbiAgICB9XG4gICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIGltcGx5SG91cik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBldmVuaW5nKHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMjApIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2V2ZW5pbmdcIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB5ZXN0ZXJkYXlFdmVuaW5nKHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMjApIHtcbiAgICBsZXQgdGFyZ2V0RGF0ZSA9IHJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgdGFyZ2V0RGF0ZSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpIC0gMjQgKiA2MCAqIDYwICogMTAwMCk7XG4gICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIGltcGx5SG91cik7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UveWVzdGVyZGF5XCIpO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvZXZlbmluZ1wiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1pZG5pZ2h0KHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBpZiAocmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpLmdldEhvdXJzKCkgPiAyKSB7XG4gICAgICAgIGNvbXBvbmVudC5hZGREdXJhdGlvbkFzSW1wbGllZCh7IGRheTogMSB9KTtcbiAgICB9XG4gICAgY29tcG9uZW50LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL21pZG5pZ2h0XCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbW9ybmluZyhyZWZlcmVuY2UsIGltcGx5SG91ciA9IDYpIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbW9ybmluZ1wiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFmdGVybm9vbihyZWZlcmVuY2UsIGltcGx5SG91ciA9IDE1KSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIGltcGx5SG91cik7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2FmdGVybm9vblwiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vb24ocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwiaG91clwiLCAxMik7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL25vb25cIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNhc3VhbFJlZmVyZW5jZXMuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvKG5vd3x0b2RheXx0b25pZ2h0fHRvbW9ycm93fG92ZXJtb3Jyb3d8dG1yfHRtcnd8eWVzdGVyZGF5fGxhc3RcXHMqbmlnaHQpKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTkNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBsZXQgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJub3dcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9kYXlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ5ZXN0ZXJkYXlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9tb3Jyb3dcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ0bXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ0bXJ3XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9uaWdodFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9uaWdodChjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwib3Zlcm1vcnJvd1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC9sYXN0XFxzKm5pZ2h0LykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldERhdGUuZ2V0SG91cnMoKSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzRGF5ID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNEYXkuc2V0RGF0ZShwcmV2aW91c0RheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBwcmV2aW91c0RheTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwicGFyc2VyL0VOQ2FzdWFsRGF0ZVBhcnNlclwiKTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTkNhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgKiBhcyBjYXN1YWxSZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IC8oPzp0aGlzKT9cXHN7MCwzfShtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0fG1pZG5pZ2h0fG1pZGRheXxub29uKSg/PVxcV3wkKS9pO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5DYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBsZXQgY29tcG9uZW50ID0gbnVsbDtcbiAgICAgICAgc3dpdGNoIChtYXRjaFsxXS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiYWZ0ZXJub29uXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY2FzdWFsUmVmZXJlbmNlcy5hZnRlcm5vb24oY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImV2ZW5pbmdcIjpcbiAgICAgICAgICAgIGNhc2UgXCJuaWdodFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IGNhc3VhbFJlZmVyZW5jZXMuZXZlbmluZyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWlkbmlnaHRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBjYXN1YWxSZWZlcmVuY2VzLm1pZG5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtb3JuaW5nXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY2FzdWFsUmVmZXJlbmNlcy5tb3JuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub29uXCI6XG4gICAgICAgICAgICBjYXNlIFwibWlkZGF5XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY2FzdWFsUmVmZXJlbmNlcy5ub29uKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwicGFyc2VyL0VOQ2FzdWFsVGltZVBhcnNlclwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuaW1wb3J0IHsgV2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86b25cXFxccyo/KT9cIiArXG4gICAgXCIoPzoodGhpc3xsYXN0fHBhc3R8bmV4dClcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9fHdlZWtlbmR8d2Vla2RheSlgICtcbiAgICBcIig/OlxcXFxzKig/OlxcXFwsfFxcXFwpfFxcXFzvvIkpKT9cIiArXG4gICAgXCIoPzpcXFxccyooPzpvZlxcXFxzKik/KHRoaXN8bGFzdHxwYXN0fG5leHQpXFxcXHMqd2Vlayk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQgPT0gXCJsYXN0XCIgfHwgbW9kaWZpZXJXb3JkID09IFwicGFzdFwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcIm5leHRcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQgPT0gXCJ0aGlzXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJ0aGlzXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2Vla2RheV93b3JkID0gbWF0Y2hbV0VFS0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHdlZWtkYXk7XG4gICAgICAgIGlmIChXRUVLREFZX0RJQ1RJT05BUllbd2Vla2RheV93b3JkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW3dlZWtkYXlfd29yZF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2Vla2RheV93b3JkID09IFwid2Vla2VuZFwiKSB7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gbW9kaWZpZXIgPT0gXCJsYXN0XCIgPyBXZWVrZGF5LlNVTkRBWSA6IFdlZWtkYXkuU0FUVVJEQVk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2Vla2RheV93b3JkID09IFwid2Vla2RheVwiKSB7XG4gICAgICAgICAgICBjb25zdCByZWZXZWVrZGF5ID0gY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCkuZ2V0RGF5KCk7XG4gICAgICAgICAgICBpZiAocmVmV2Vla2RheSA9PSBXZWVrZGF5LlNVTkRBWSB8fCByZWZXZWVrZGF5ID09IFdlZWtkYXkuU0FUVVJEQVkpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gbW9kaWZpZXIgPT0gXCJsYXN0XCIgPyBXZWVrZGF5LkZSSURBWSA6IFdlZWtkYXkuTU9OREFZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHJlZldlZWtkYXkgLSAxO1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBtb2RpZmllciA9PSBcImxhc3RcIiA/IHdlZWtkYXkgLSAxIDogd2Vla2RheSArIDE7XG4gICAgICAgICAgICAgICAgd2Vla2RheSA9ICh3ZWVrZGF5ICUgNSkgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5XZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCh0aGlzfGxhc3R8cGFzdHxuZXh0fGFmdGVyXFxcXHMqdGhpcylcXFxccyooJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSkoPz1cXFxccyopYCArIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9ESUZJRVJfV09SRF9HUk9VUCA9IDE7XG5jb25zdCBSRUxBVElWRV9XT1JEX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb2RpZmllciA9IG1hdGNoW01PRElGSUVSX1dPUkRfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHVuaXRXb3JkID0gbWF0Y2hbUkVMQVRJVkVfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGltZXVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVt1bml0V29yZF07XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcIm5leHRcIiB8fCBtb2RpZmllci5zdGFydHNXaXRoKFwiYWZ0ZXJcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHt9O1xuICAgICAgICAgICAgdGltZVVuaXRzW3RpbWV1bml0XSA9IDE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcImxhc3RcIiB8fCBtb2RpZmllciA9PSBcInBhc3RcIikge1xuICAgICAgICAgICAgY29uc3QgdGltZVVuaXRzID0ge307XG4gICAgICAgICAgICB0aW1lVW5pdHNbdGltZXVuaXRdID0gLTE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAodW5pdFdvcmQubWF0Y2goL3dlZWsvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRXb3JkLm1hdGNoKC9tb250aC9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdFdvcmQubWF0Y2goL3llYXIvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyLCBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoW15cXFxcZF18XilcIiArXG4gICAgXCIoWzAtM117MCwxfVswLTldezF9KVtcXFxcL1xcXFwuXFxcXC1dKFswLTNdezAsMX1bMC05XXsxfSlcIiArXG4gICAgXCIoPzpbXFxcXC9cXFxcLlxcXFwtXShbMC05XXs0fXxbMC05XXsyfSkpP1wiICtcbiAgICBcIihcXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBPUEVOSU5HX0dST1VQID0gMTtcbmNvbnN0IEVORElOR19HUk9VUCA9IDU7XG5jb25zdCBGSVJTVF9OVU1CRVJTX0dST1VQID0gMjtcbmNvbnN0IFNFQ09ORF9OVU1CRVJTX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIHtcbiAgICBncm91cE51bWJlck1vbnRoO1xuICAgIGdyb3VwTnVtYmVyRGF5O1xuICAgIGNvbnN0cnVjdG9yKGxpdHRsZUVuZGlhbikge1xuICAgICAgICB0aGlzLmdyb3VwTnVtYmVyTW9udGggPSBsaXR0bGVFbmRpYW4gPyBTRUNPTkRfTlVNQkVSU19HUk9VUCA6IEZJUlNUX05VTUJFUlNfR1JPVVA7XG4gICAgICAgIHRoaXMuZ3JvdXBOdW1iZXJEYXkgPSBsaXR0bGVFbmRpYW4gPyBGSVJTVF9OVU1CRVJTX0dST1VQIDogU0VDT05EX05VTUJFUlNfR1JPVVA7XG4gICAgfVxuICAgIHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFtPUEVOSU5HX0dST1VQXS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGluZGV4RW5kID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggLSBtYXRjaFtFTkRJTkdfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdGV4dEJlZm9yZSA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKHRleHRCZWZvcmUubWF0Y2goXCJcXFxcZC8/JFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXhFbmQgPCBjb250ZXh0LnRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0QWZ0ZXIgPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKGluZGV4RW5kKTtcbiAgICAgICAgICAgIGlmICh0ZXh0QWZ0ZXIubWF0Y2goXCJeLz9cXFxcZFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXh0ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpO1xuICAgICAgICBpZiAodGV4dC5tYXRjaCgvXlxcZFxcLlxcZCQvKSB8fCB0ZXh0Lm1hdGNoKC9eXFxkXFwuXFxkezEsMn1cXC5cXGR7MSwyfVxccyokLykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1hdGNoW1lFQVJfR1JPVVBdICYmIHRleHQuaW5kZXhPZihcIi9cIikgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KGluZGV4LCB0ZXh0KTtcbiAgICAgICAgbGV0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbdGhpcy5ncm91cE51bWJlck1vbnRoXSk7XG4gICAgICAgIGxldCBkYXkgPSBwYXJzZUludChtYXRjaFt0aGlzLmdyb3VwTnVtYmVyRGF5XSk7XG4gICAgICAgIGlmIChtb250aCA8IDEgfHwgbW9udGggPiAxMikge1xuICAgICAgICAgICAgaWYgKG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF5ID49IDEgJiYgZGF5IDw9IDEyICYmIG1vbnRoIDw9IDMxKSB7XG4gICAgICAgICAgICAgICAgICAgIFtkYXksIG1vbnRoXSA9IFttb250aCwgZGF5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5IDwgMSB8fCBkYXkgPiAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZE1vc3RMaWtlbHlBRFllYXIocmF3WWVhck51bWJlcik7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0LmFkZFRhZyhcInBhcnNlci9TbGFzaERhdGVGb3JtYXRQYXJzZXJcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCh0aGlzfGxhc3R8cGFzdHxuZXh0fGFmdGVyfFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFBBVFRFUk5fTk9fQUJCUiA9IG5ldyBSZWdFeHAoYCh0aGlzfGxhc3R8cGFzdHxuZXh0fGFmdGVyfFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19OT19BQkJSX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGFsbG93QWJicmV2aWF0aW9ucztcbiAgICBjb25zdHJ1Y3RvcihhbGxvd0FiYnJldmlhdGlvbnMgPSB0cnVlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID0gYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbG93QWJicmV2aWF0aW9ucyA/IFBBVFRFUk4gOiBQQVRURVJOX05PX0FCQlI7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzJdKTtcbiAgICAgICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsYXN0XCI6XG4gICAgICAgICAgICBjYXNlIFwicGFzdFwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHJldmVyc2VEdXJhdGlvbihkdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgZHVyYXRpb24pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5mdW5jdGlvbiBJc1Bvc2l0aXZlRm9sbG93aW5nUmVmZXJlbmNlKHJlc3VsdCkge1xuICAgIHJldHVybiByZXN1bHQudGV4dC5tYXRjaCgvXlsrLV0vaSkgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIElzTmVnYXRpdmVGb2xsb3dpbmdSZWZlcmVuY2UocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9eLS9pKSAhPSBudWxsO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZVJlbGF0aXZlQWZ0ZXJEYXRlUmVmaW5lciBleHRlbmRzIE1lcmdpbmdSZWZpbmVyIHtcbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgaWYgKCF0ZXh0QmV0d2Vlbi5tYXRjaCgvXlxccyokL2kpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIElzUG9zaXRpdmVGb2xsb3dpbmdSZWZlcmVuY2UobmV4dFJlc3VsdCkgfHwgSXNOZWdhdGl2ZUZvbGxvd2luZ1JlZmVyZW5jZShuZXh0UmVzdWx0KTtcbiAgICB9XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0LCBjb250ZXh0KSB7XG4gICAgICAgIGxldCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG5leHRSZXN1bHQudGV4dCk7XG4gICAgICAgIGlmIChJc05lZ2F0aXZlRm9sbG93aW5nUmVmZXJlbmNlKG5leHRSZXN1bHQpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKFJlZmVyZW5jZVdpdGhUaW1lem9uZS5mcm9tRGF0ZShjdXJyZW50UmVzdWx0LnN0YXJ0LmRhdGUoKSksIHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2luZ1Jlc3VsdChjdXJyZW50UmVzdWx0LnJlZmVyZW5jZSwgY3VycmVudFJlc3VsdC5pbmRleCwgYCR7Y3VycmVudFJlc3VsdC50ZXh0fSR7dGV4dEJldHdlZW59JHtuZXh0UmVzdWx0LnRleHR9YCwgY29tcG9uZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5NZXJnZVJlbGF0aXZlQWZ0ZXJEYXRlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5mdW5jdGlvbiBoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9cXHMrKGJlZm9yZXxmcm9tKSQvaSkgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGhhc0ltcGxpZWRMYXRlclJlZmVyZW5jZURhdGUocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9cXHMrKGFmdGVyfHNpbmNlKSQvaSkgIT0gbnVsbDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTWVyZ2VSZWxhdGl2ZUZvbGxvd0J5RGF0ZVJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyokL2k7XG4gICAgfVxuICAgIHNob3VsZE1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBpZiAoIXRleHRCZXR3ZWVuLm1hdGNoKHRoaXMucGF0dGVybkJldHdlZW4oKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWhhc0ltcGxpZWRFYXJsaWVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSAmJiAhaGFzSW1wbGllZExhdGVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwiZGF5XCIpICYmICEhbmV4dFJlc3VsdC5zdGFydC5nZXQoXCJtb250aFwiKSAmJiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwieWVhclwiKTtcbiAgICB9XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIGxldCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24oY3VycmVudFJlc3VsdC50ZXh0KTtcbiAgICAgICAgaWYgKGhhc0ltcGxpZWRFYXJsaWVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoUmVmZXJlbmNlV2l0aFRpbWV6b25lLmZyb21EYXRlKG5leHRSZXN1bHQuc3RhcnQuZGF0ZSgpKSwgZHVyYXRpb24pO1xuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdSZXN1bHQobmV4dFJlc3VsdC5yZWZlcmVuY2UsIGN1cnJlbnRSZXN1bHQuaW5kZXgsIGAke2N1cnJlbnRSZXN1bHQudGV4dH0ke3RleHRCZXR3ZWVufSR7bmV4dFJlc3VsdC50ZXh0fWAsIGNvbXBvbmVudHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOTWVyZ2VSZWxhdGl2ZUZvbGxvd0J5RGF0ZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBZRUFSX1NVRkZJWF9QQVRURVJOID0gbmV3IFJlZ0V4cChgXlxcXFxzKigke1lFQVJfUEFUVEVSTn0pYCwgXCJpXCIpO1xuY29uc3QgWUVBUl9HUk9VUCA9IDE7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTkV4dHJhY3RZZWFyU3VmZml4UmVmaW5lciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgcmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzRGF0ZVdpdGhVbmtub3duWWVhcigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3VmZml4ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHQudGV4dC5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBZRUFSX1NVRkZJWF9QQVRURVJOLmV4ZWMoc3VmZml4KTtcbiAgICAgICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0udHJpbSgpLmxlbmd0aCA8PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEV4dHJhY3RpbmcgeWVhcjogJyR7bWF0Y2hbMF19JyBpbnRvIDogJHtyZXN1bHR9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTkV4dHJhY3RZZWFyU3VmZml4UmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Fic3RyYWN0UmVmaW5lcnMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVW5saWtlbHlGb3JtYXRGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cbiAgICBpc1ZhbGlkKGNvbnRleHQsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gcmVzdWx0LnRleHQudHJpbSgpO1xuICAgICAgICBpZiAodGV4dCA9PT0gY29udGV4dC50ZXh0LnRyaW0oKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQudG9Mb3dlckNhc2UoKSA9PT0gXCJtYXlcIikge1xuICAgICAgICAgICAgY29uc3QgdGV4dEJlZm9yZSA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcoMCwgcmVzdWx0LmluZGV4KS50cmltKCk7XG4gICAgICAgICAgICBpZiAoIXRleHRCZWZvcmUubWF0Y2goL1xcYihpbikkL2kpKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBSZW1vdmluZyB1bmxpa2VseSByZXN1bHQ6ICR7cmVzdWx0fWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dC50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKFwidGhlIHNlY29uZFwiKSkge1xuICAgICAgICAgICAgY29uc3QgdGV4dEFmdGVyID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHQudGV4dC5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICh0ZXh0QWZ0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVtb3ZpbmcgdW5saWtlbHkgcmVzdWx0OiAke3Jlc3VsdH1gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlVubGlrZWx5Rm9ybWF0RmlsdGVyLmpzLm1hcCIsImltcG9ydCBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0VOTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5Nb250aE5hbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTk1vbnRoTmFtZVBhcnNlci5qc1wiO1xuaW1wb3J0IEVOWWVhck1vbnRoRGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5ZZWFyTW9udGhEYXlQYXJzZXIuanNcIjtcbmltcG9ydCBFTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IEVOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5NZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvRU5NZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0VOTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgRU5DYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5DYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5DYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5DYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5XZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5XZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5SZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5NZXJnZVJlbGF0aXZlQWZ0ZXJEYXRlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FTk1lcmdlUmVsYXRpdmVBZnRlckRhdGVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRU5NZXJnZVJlbGF0aXZlRm9sbG93QnlEYXRlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FTk1lcmdlUmVsYXRpdmVGb2xsb3dCeURhdGVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgT3ZlcmxhcFJlbW92YWxSZWZpbmVyIGZyb20gXCIuLi8uLi9jb21tb24vcmVmaW5lcnMvT3ZlcmxhcFJlbW92YWxSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRU5FeHRyYWN0WWVhclN1ZmZpeFJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvRU5FeHRyYWN0WWVhclN1ZmZpeFJlZmluZXIuanNcIjtcbmltcG9ydCBFTlVubGlrZWx5Rm9ybWF0RmlsdGVyIGZyb20gXCIuL3JlZmluZXJzL0VOVW5saWtlbHlGb3JtYXRGaWx0ZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVORGVmYXVsdENvbmZpZ3VyYXRpb24ge1xuICAgIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5jcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCBsaXR0bGVFbmRpYW4pO1xuICAgICAgICBvcHRpb24ucGFyc2Vycy5wdXNoKG5ldyBFTkNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVOQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICAgICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgRU5Nb250aE5hbWVQYXJzZXIoKSk7XG4gICAgICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVOUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgICAgICBvcHRpb24ucGFyc2Vycy5wdXNoKG5ldyBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIoKSk7XG4gICAgICAgIG9wdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBFTlVubGlrZWx5Rm9ybWF0RmlsdGVyKCkpO1xuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cbiAgICBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlLCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5XZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICAgICAgbmV3IEVOU2xhc2hNb250aEZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgICAgIG5ldyBFTlRpbWVFeHByZXNzaW9uUGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVmaW5lcnM6IFtuZXcgRU5NZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICAgICAgfSwgc3RyaWN0TW9kZSk7XG4gICAgICAgIG9wdGlvbnMucGFyc2Vycy51bnNoaWZ0KG5ldyBFTlllYXJNb250aERheVBhcnNlcihzdHJpY3RNb2RlKSk7XG4gICAgICAgIG9wdGlvbnMucmVmaW5lcnMudW5zaGlmdChuZXcgRU5NZXJnZVJlbGF0aXZlRm9sbG93QnlEYXRlUmVmaW5lcigpKTtcbiAgICAgICAgb3B0aW9ucy5yZWZpbmVycy51bnNoaWZ0KG5ldyBFTk1lcmdlUmVsYXRpdmVBZnRlckRhdGVSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnVuc2hpZnQobmV3IE92ZXJsYXBSZW1vdmFsUmVmaW5lcigpKTtcbiAgICAgICAgb3B0aW9ucy5yZWZpbmVycy5wdXNoKG5ldyBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnB1c2gobmV3IEVORXh0cmFjdFllYXJTdWZmaXhSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnB1c2gobmV3IEVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCkpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWd1cmF0aW9uLmpzLm1hcCIsImltcG9ydCB7IFJlZmVyZW5jZVdpdGhUaW1lem9uZSwgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQgfSBmcm9tIFwiLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgRU5EZWZhdWx0Q29uZmlndXJhdGlvbiBmcm9tIFwiLi9sb2NhbGVzL2VuL2NvbmZpZ3VyYXRpb24uanNcIjtcbmV4cG9ydCBjbGFzcyBDaHJvbm8ge1xuICAgIHBhcnNlcnM7XG4gICAgcmVmaW5lcnM7XG4gICAgZGVmYXVsdENvbmZpZyA9IG5ldyBFTkRlZmF1bHRDb25maWd1cmF0aW9uKCk7XG4gICAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbikge1xuICAgICAgICBjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbiB8fCB0aGlzLmRlZmF1bHRDb25maWcuY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpO1xuICAgICAgICB0aGlzLnBhcnNlcnMgPSBbLi4uY29uZmlndXJhdGlvbi5wYXJzZXJzXTtcbiAgICAgICAgdGhpcy5yZWZpbmVycyA9IFsuLi5jb25maWd1cmF0aW9uLnJlZmluZXJzXTtcbiAgICB9XG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2hyb25vKHtcbiAgICAgICAgICAgIHBhcnNlcnM6IFsuLi50aGlzLnBhcnNlcnNdLFxuICAgICAgICAgICAgcmVmaW5lcnM6IFsuLi50aGlzLnJlZmluZXJzXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBhcnNlRGF0ZSh0ZXh0LCByZWZlcmVuY2VEYXRlLCBvcHRpb24pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMucGFyc2UodGV4dCwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMubGVuZ3RoID4gMCA/IHJlc3VsdHNbMF0uc3RhcnQuZGF0ZSgpIDogbnVsbDtcbiAgICB9XG4gICAgcGFyc2UodGV4dCwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgUGFyc2luZ0NvbnRleHQodGV4dCwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9uKTtcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgdGhpcy5wYXJzZXJzLmZvckVhY2goKHBhcnNlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVzdWx0cyA9IENocm9uby5leGVjdXRlUGFyc2VyKGNvbnRleHQsIHBhcnNlcik7XG4gICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQocGFyc2VkUmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVmaW5lcnMuZm9yRWFjaChmdW5jdGlvbiAocmVmaW5lcikge1xuICAgICAgICAgICAgcmVzdWx0cyA9IHJlZmluZXIucmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHN0YXRpYyBleGVjdXRlUGFyc2VyKGNvbnRleHQsIHBhcnNlcikge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBwYXJzZXIucGF0dGVybihjb250ZXh0KTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gY29udGV4dC50ZXh0O1xuICAgICAgICBsZXQgcmVtYWluaW5nVGV4dCA9IGNvbnRleHQudGV4dDtcbiAgICAgICAgbGV0IG1hdGNoID0gcGF0dGVybi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXggKyBvcmlnaW5hbFRleHQubGVuZ3RoIC0gcmVtYWluaW5nVGV4dC5sZW5ndGg7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyLmV4dHJhY3QoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gb3JpZ2luYWxUZXh0LnN1YnN0cmluZyhtYXRjaC5pbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIG1hdGNoID0gcGF0dGVybi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHBhcnNlZFJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUGFyc2luZ1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIHBhcnNlZFJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFBhcnNpbmdDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzdWx0LnN0YXJ0ID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEluZGV4ID0gcGFyc2VkUmVzdWx0LmluZGV4O1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVGV4dCA9IHBhcnNlZFJlc3VsdC50ZXh0O1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiBjb25zb2xlLmxvZyhgJHtwYXJzZXIuY29uc3RydWN0b3IubmFtZX0gZXh0cmFjdGVkIChhdCBpbmRleD0ke3BhcnNlZEluZGV4fSkgJyR7cGFyc2VkVGV4dH0nYCkpO1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHBhcnNlZFJlc3VsdCk7XG4gICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gb3JpZ2luYWxUZXh0LnN1YnN0cmluZyhwYXJzZWRJbmRleCArIHBhcnNlZFRleHQubGVuZ3RoKTtcbiAgICAgICAgICAgIG1hdGNoID0gcGF0dGVybi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBQYXJzaW5nQ29udGV4dCB7XG4gICAgdGV4dDtcbiAgICBvcHRpb247XG4gICAgcmVmZXJlbmNlO1xuICAgIHJlZkRhdGU7XG4gICAgY29uc3RydWN0b3IodGV4dCwgcmVmRGF0ZSwgb3B0aW9uKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHRoaXMub3B0aW9uID0gb3B0aW9uID8/IHt9O1xuICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IFJlZmVyZW5jZVdpdGhUaW1lem9uZS5mcm9tSW5wdXQocmVmRGF0ZSwgdGhpcy5vcHRpb24udGltZXpvbmVzKTtcbiAgICAgICAgdGhpcy5yZWZEYXRlID0gdGhpcy5yZWZlcmVuY2UuaW5zdGFudDtcbiAgICB9XG4gICAgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoY29tcG9uZW50cykge1xuICAgICAgICBpZiAoY29tcG9uZW50cyBpbnN0YW5jZW9mIFBhcnNpbmdDb21wb25lbnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdDb21wb25lbnRzKHRoaXMucmVmZXJlbmNlLCBjb21wb25lbnRzKTtcbiAgICB9XG4gICAgY3JlYXRlUGFyc2luZ1Jlc3VsdChpbmRleCwgdGV4dE9yRW5kSW5kZXgsIHN0YXJ0Q29tcG9uZW50cywgZW5kQ29tcG9uZW50cykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gdHlwZW9mIHRleHRPckVuZEluZGV4ID09PSBcInN0cmluZ1wiID8gdGV4dE9yRW5kSW5kZXggOiB0aGlzLnRleHQuc3Vic3RyaW5nKGluZGV4LCB0ZXh0T3JFbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gc3RhcnRDb21wb25lbnRzID8gdGhpcy5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cyhzdGFydENvbXBvbmVudHMpIDogbnVsbDtcbiAgICAgICAgY29uc3QgZW5kID0gZW5kQ29tcG9uZW50cyA/IHRoaXMuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoZW5kQ29tcG9uZW50cykgOiBudWxsO1xuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdSZXN1bHQodGhpcy5yZWZlcmVuY2UsIGluZGV4LCB0ZXh0LCBzdGFydCwgZW5kKTtcbiAgICB9XG4gICAgZGVidWcoYmxvY2spIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uLmRlYnVnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb24uZGVidWcgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uLmRlYnVnKGJsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLm9wdGlvbi5kZWJ1ZztcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmRlYnVnKGJsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNocm9uby5qcy5tYXAiLCJpbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgRU5EZWZhdWx0Q29uZmlndXJhdGlvbiBmcm9tIFwiLi9jb25maWd1cmF0aW9uLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBFTkRlZmF1bHRDb25maWd1cmF0aW9uKCk7XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjb25maWd1cmF0aW9uLmNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oZmFsc2UpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNvbmZpZ3VyYXRpb24uY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlLCBmYWxzZSkpO1xuZXhwb3J0IGNvbnN0IEdCID0gbmV3IENocm9ubyhjb25maWd1cmF0aW9uLmNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERVRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86dW18dm9uKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8YmlzKVxcXFxzKlwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaFswXS5tYXRjaCgvXlxccypcXGR7NH1cXHMqJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgIFwic29ubnRhZ1wiOiAwLFxuICAgIFwic29cIjogMCxcbiAgICBcIm1vbnRhZ1wiOiAxLFxuICAgIFwibW9cIjogMSxcbiAgICBcImRpZW5zdGFnXCI6IDIsXG4gICAgXCJkaVwiOiAyLFxuICAgIFwibWl0dHdvY2hcIjogMyxcbiAgICBcIm1pXCI6IDMsXG4gICAgXCJkb25uZXJzdGFnXCI6IDQsXG4gICAgXCJkb1wiOiA0LFxuICAgIFwiZnJlaXRhZ1wiOiA1LFxuICAgIFwiZnJcIjogNSxcbiAgICBcInNhbXN0YWdcIjogNixcbiAgICBcInNhXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJqYW51YXJcIjogMSxcbiAgICBcImrDpG5uZXJcIjogMSxcbiAgICBcImphbm5lclwiOiAxLFxuICAgIFwiamFuXCI6IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgXCJmZWJydWFyXCI6IDIsXG4gICAgXCJmZWJlclwiOiAyLFxuICAgIFwiZmViXCI6IDIsXG4gICAgXCJmZWIuXCI6IDIsXG4gICAgXCJtw6RyelwiOiAzLFxuICAgIFwibWFlcnpcIjogMyxcbiAgICBcIm3DpHJcIjogMyxcbiAgICBcIm3DpHIuXCI6IDMsXG4gICAgXCJtcnpcIjogMyxcbiAgICBcIm1yei5cIjogMyxcbiAgICBcImFwcmlsXCI6IDQsXG4gICAgXCJhcHJcIjogNCxcbiAgICBcImFwci5cIjogNCxcbiAgICBcIm1haVwiOiA1LFxuICAgIFwianVuaVwiOiA2LFxuICAgIFwianVuXCI6IDYsXG4gICAgXCJqdW4uXCI6IDYsXG4gICAgXCJqdWxpXCI6IDcsXG4gICAgXCJqdWxcIjogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBcImF1Z3VzdFwiOiA4LFxuICAgIFwiYXVnXCI6IDgsXG4gICAgXCJhdWcuXCI6IDgsXG4gICAgXCJzZXB0ZW1iZXJcIjogOSxcbiAgICBcInNlcFwiOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIFwic2VwdFwiOiA5LFxuICAgIFwic2VwdC5cIjogOSxcbiAgICBcIm9rdG9iZXJcIjogMTAsXG4gICAgXCJva3RcIjogMTAsXG4gICAgXCJva3QuXCI6IDEwLFxuICAgIFwibm92ZW1iZXJcIjogMTEsXG4gICAgXCJub3ZcIjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIFwiZGV6ZW1iZXJcIjogMTIsXG4gICAgXCJkZXpcIjogMTIsXG4gICAgXCJkZXouXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcImVpbnNcIjogMSxcbiAgICBcImVpbmVcIjogMSxcbiAgICBcImVpbmVtXCI6IDEsXG4gICAgXCJlaW5lblwiOiAxLFxuICAgIFwiZWluZXJcIjogMSxcbiAgICBcInp3ZWlcIjogMixcbiAgICBcImRyZWlcIjogMyxcbiAgICBcInZpZXJcIjogNCxcbiAgICBcImbDvG5mXCI6IDUsXG4gICAgXCJmdWVuZlwiOiA1LFxuICAgIFwic2VjaHNcIjogNixcbiAgICBcInNpZWJlblwiOiA3LFxuICAgIFwiYWNodFwiOiA4LFxuICAgIFwibmV1blwiOiA5LFxuICAgIFwiemVoblwiOiAxMCxcbiAgICBcImVsZlwiOiAxMSxcbiAgICBcInp3w7ZsZlwiOiAxMixcbiAgICBcInp3b2VsZlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgVElNRV9VTklUX0RJQ1RJT05BUlkgPSB7XG4gICAgc2VrOiBcInNlY29uZFwiLFxuICAgIHNla3VuZGU6IFwic2Vjb25kXCIsXG4gICAgc2VrdW5kZW46IFwic2Vjb25kXCIsXG4gICAgbWluOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZTogXCJtaW51dGVcIixcbiAgICBtaW51dGVuOiBcIm1pbnV0ZVwiLFxuICAgIGg6IFwiaG91clwiLFxuICAgIHN0ZDogXCJob3VyXCIsXG4gICAgc3R1bmRlOiBcImhvdXJcIixcbiAgICBzdHVuZGVuOiBcImhvdXJcIixcbiAgICB0YWc6IFwiZGF5XCIsXG4gICAgdGFnZTogXCJkYXlcIixcbiAgICB0YWdlbjogXCJkYXlcIixcbiAgICB3b2NoZTogXCJ3ZWVrXCIsXG4gICAgd29jaGVuOiBcIndlZWtcIixcbiAgICBtb25hdDogXCJtb250aFwiLFxuICAgIG1vbmF0ZTogXCJtb250aFwiLFxuICAgIG1vbmF0ZW46IFwibW9udGhcIixcbiAgICBtb25hdHM6IFwibW9udGhcIixcbiAgICBxdWFydGFsOiBcInF1YXJ0ZXJcIixcbiAgICBxdWFydGFsczogXCJxdWFydGVyXCIsXG4gICAgcXVhcnRhbGU6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0YWxlbjogXCJxdWFydGVyXCIsXG4gICAgYTogXCJ5ZWFyXCIsXG4gICAgajogXCJ5ZWFyXCIsXG4gICAganI6IFwieWVhclwiLFxuICAgIGphaHI6IFwieWVhclwiLFxuICAgIGphaHJlOiBcInllYXJcIixcbiAgICBqYWhyZW46IFwieWVhclwiLFxuICAgIGphaHJlczogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1xcXFwuWzAtOV0rfGhhbGI/fGhhbGJlP3xlaW5pZ2VuP3x3ZW5pZ2VuP3xtZWhyZXJlbj8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJlaW5cIiB8fCBudW0gPT09IFwiZWluZXJcIiB8fCBudW0gPT09IFwiZWluZW1cIiB8fCBudW0gPT09IFwiZWluZW5cIiB8fCBudW0gPT09IFwiZWluZVwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL3dlbmlnZW4vKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9oYWxiLykgfHwgbnVtLm1hdGNoKC9oYWxiZW4vKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2VpbmlnZW4vKSkge1xuICAgICAgICByZXR1cm4gMztcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9tZWhyZXJlbi8pKSB7XG4gICAgICAgIHJldHVybiA3O1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IGAoPzpbMC05XXsxLDR9KD86XFxcXHMqW3ZuXVxcXFwuP1xcXFxzKig/OkMoPzpocik/fCg/OnVcXFxcLj98ZFxcXFwuPyg/OlxcXFxzKmdcXFxcLj8pPyk/XFxcXHMqWilcXFxcLj98XFxcXHMqKD86dVxcXFwuP3xkXFxcXC4/KD86XFxcXHMqZ1xcXFwuKT8pXFxcXHMqWlxcXFwuPyk/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC92L2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2dpLCBcIlwiKSk7XG4gICAgfVxuICAgIGlmICgvbi9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2dpLCBcIlwiKSk7XG4gICAgfVxuICAgIGlmICgvei9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2dpLCBcIlwiKSk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnRzO1xufVxuZnVuY3Rpb24gY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaFsxXSk7XG4gICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgIGZyYWdtZW50c1t1bml0XSA9IG51bTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86YVttbl1cXFxccyo/KT9cIiArXG4gICAgXCIoPzooZGllc2VbbW5dfGxldHp0ZVttbl18big/OsOkfGFlKWNoc3RlW21uXSlcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKihkaWVzZXxsZXR6dGV8big/OsOkfGFlKWNoc3RlKVxcXFxzKndvY2hlKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgU1VGRklYX0dST1VQID0gMztcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1NVRkZJWF9HUk9VUF07XG4gICAgICAgIGxldCBtb2RpZmllcldvcmQgPSBwcmVmaXggfHwgcG9zdGZpeDtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkIHx8IFwiXCI7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAobW9kaWZpZXJXb3JkLm1hdGNoKC9sZXR6dGUvKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQubWF0Y2goL2Noc3RlLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkLm1hdGNoKC9kaWVzZS8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgb2Zmc2V0LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5jb25zdCBGSVJTVF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXnxcXFxcc3xUKVwiICtcbiAgICBcIig/Oig/OnVtfHZvbilcXFxccyopP1wiICtcbiAgICBcIihcXFxcZHsxLDJ9KSg/Omh8Oik/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86bXw6KT8pP1wiICtcbiAgICBcIig/OihcXFxcZHsxLDJ9KSg/OnMpPyk/XCIgK1xuICAgIFwiKD86XFxcXHMqVWhyKT9cIiArXG4gICAgXCIoPzpcXFxccyoobW9yZ2Vuc3x2b3JtaXR0YWdzfG5hY2htaXR0YWdzfGFiZW5kc3xuYWNodHN8YW1cXFxccysoPzpNb3JnZW58Vm9ybWl0dGFnfE5hY2htaXR0YWd8QWJlbmQpfGluXFxcXHMrZGVyXFxcXHMrTmFjaHQpKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBTRUNPTkRfUkVHX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXlxcXFxzKihcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8YmlzKD86XFxcXHMrdW0pP3xcXFxcPylcXFxccypcIiArXG4gICAgXCIoXFxcXGR7MSwyfSkoPzpofDopP1wiICtcbiAgICBcIig/OihcXFxcZHsxLDJ9KSg/Om18Oik/KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzpzKT8pP1wiICtcbiAgICBcIig/OlxcXFxzKlVocik/XCIgK1xuICAgIFwiKD86XFxcXHMqKG1vcmdlbnN8dm9ybWl0dGFnc3xuYWNobWl0dGFnc3xhYmVuZHN8bmFjaHRzfGFtXFxcXHMrKD86TW9yZ2VufFZvcm1pdHRhZ3xOYWNobWl0dGFnfEFiZW5kKXxpblxcXFxzK2RlclxcXFxzK05hY2h0KSk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgSE9VUl9HUk9VUCA9IDI7XG5jb25zdCBNSU5VVEVfR1JPVVAgPSAzO1xuY29uc3QgU0VDT05EX0dST1VQID0gNDtcbmNvbnN0IEFNX1BNX0hPVVJfR1JPVVAgPSA1O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIEZJUlNUX1JFR19QQVRURVJOO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCArIG1hdGNoWzFdLmxlbmd0aCwgbWF0Y2hbMF0uc3Vic3RyaW5nKG1hdGNoWzFdLmxlbmd0aCkpO1xuICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGR7NH0kLykpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydCA9IERFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5leHRyYWN0VGltZUNvbXBvbmVudChyZXN1bHQuc3RhcnQuY2xvbmUoKSwgbWF0Y2gpO1xuICAgICAgICBpZiAoIXJlc3VsdC5zdGFydCkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVtYWluaW5nVGV4dCA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBjb25zdCBzZWNvbmRNYXRjaCA9IFNFQ09ORF9SRUdfUEFUVEVSTi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2gpIHtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQgPSBERVNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuZXh0cmFjdFRpbWVDb21wb25lbnQocmVzdWx0LnN0YXJ0LmNsb25lKCksIHNlY29uZE1hdGNoKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuZW5kKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gc2Vjb25kTWF0Y2hbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgc3RhdGljIGV4dHJhY3RUaW1lQ29tcG9uZW50KGV4dHJhY3RpbmdDb21wb25lbnRzLCBtYXRjaCkge1xuICAgICAgICBsZXQgaG91ciA9IDA7XG4gICAgICAgIGxldCBtaW51dGUgPSAwO1xuICAgICAgICBsZXQgbWVyaWRpZW0gPSBudWxsO1xuICAgICAgICBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWludXRlID49IDYwIHx8IGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtLm1hdGNoKC9tb3JnZW58dm9ybWl0dGFnLykpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtLm1hdGNoKC9uYWNobWl0dGFnfGFiZW5kLykpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFtcG0ubWF0Y2goL25hY2h0LykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgaG91cik7XG4gICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtTRUNPTkRfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcInNlY29uZFwiLCBzZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHRyYWN0aW5nQ29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERVNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKGJpcyg/OlxccyooPzphbXx6dW0pKT98LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooVHx1bXxhbXwsfC0pP1xcXFxzKiRcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERUNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oZGllc2VuKT9cXHMqKG1vcmdlbnx2b3JtaXR0YWd8bWl0dGFncz98bmFjaG1pdHRhZ3xhYmVuZHxuYWNodHxtaXR0ZXJuYWNodCkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IHRpbWVLZXl3b3JkUGF0dGVybiA9IG1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICByZXR1cm4gREVDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkUGF0dGVybik7XG4gICAgfVxuICAgIHN0YXRpYyBleHRyYWN0VGltZUNvbXBvbmVudHMoY29tcG9uZW50LCB0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgc3dpdGNoICh0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgICAgIGNhc2UgXCJtb3JnZW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInZvcm1pdHRhZ1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgOSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWl0dGFnXCI6XG4gICAgICAgICAgICBjYXNlIFwibWl0dGFnc1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5hY2htaXR0YWdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJhYmVuZFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5hY2h0XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWl0dGVybmFjaHRcIjpcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmdldChcImhvdXJcIikgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGREdXJhdGlvbkFzSW1wbGllZCh7IFwiZGF5XCI6IDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERUNhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IERFQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9ERUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChqZXR6dHxoZXV0ZXxtb3JnZW58w7xiZXJtb3JnZW58dWViZXJtb3JnZW58Z2VzdGVybnx2b3JnZXN0ZXJufGxldHp0ZVxcXFxzKm5hY2h0KWAgK1xuICAgIGAoPzpcXFxccyoobW9yZ2VufHZvcm1pdHRhZ3xtaXR0YWdzP3xuYWNobWl0dGFnfGFiZW5kfG5hY2h0fG1pdHRlcm5hY2h0KSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBUSU1FX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgICAgIGNvbnN0IGRhdGVLZXl3b3JkID0gKG1hdGNoW0RBVEVfR1JPVVBdIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWVLZXl3b3JkID0gKG1hdGNoW1RJTUVfR1JPVVBdIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAoZGF0ZUtleXdvcmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqZXR6dFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJoZXV0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdlblwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogMSB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLDvGJlcm1vcmdlblwiOlxuICAgICAgICAgICAgY2FzZSBcInVlYmVybW9yZ2VuXCI6XG4gICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IGFkZER1cmF0aW9uKHRhcmdldERhdGUsIHsgZGF5OiAyIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImdlc3Rlcm5cIjpcbiAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gYWRkRHVyYXRpb24odGFyZ2V0RGF0ZSwgeyBkYXk6IC0xIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInZvcmdlc3Rlcm5cIjpcbiAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gYWRkRHVyYXRpb24odGFyZ2V0RGF0ZSwgeyBkYXk6IC0yIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZUtleXdvcmQubWF0Y2goL2xldHp0ZVxccypuYWNodC8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXREYXRlLmdldEhvdXJzKCkgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gYWRkRHVyYXRpb24odGFyZ2V0RGF0ZSwgeyBkYXk6IC0xIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lS2V5d29yZCkge1xuICAgICAgICAgICAgY29tcG9uZW50ID0gREVDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzphbVxcXFxzKj8pP1wiICtcbiAgICBcIig/OmRlblxcXFxzKj8pP1wiICtcbiAgICBgKFswLTldezEsMn0pXFxcXC5gICtcbiAgICBgKD86XFxcXHMqKD86YmlzKD86XFxcXHMqKD86YW18enVtKSk/fFxcXFwtfFxcXFzigJN8XFxcXHMpXFxcXHMqKFswLTldezEsMn0pXFxcXC4/KT9cXFxccypgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86KD86LXwvfCw/XFxcXHMqKSgke1lFQVJfUEFUVEVSTn0oPyFbXlxcXFxzXVxcXFxkKSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBOVU1CRVJfUEFUVEVSTiwgcGFyc2VOdW1iZXJQYXR0ZXJuLCBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86XFxcXHMqKCg/Om7DpGNoc3RlfGtvbW1lbmRlfGZvbGdlbmRlfGxldHp0ZXx2ZXJnYW5nZW5lfHZvcmlnZXx2b3IoPzpoZXJ8YW4pZ2VnYW5nZW5lKSg/OnN8bnxtfHIpP3x2b3J8aW4pXFxcXHMqKT9gICtcbiAgICAgICAgICAgIGAoJHtOVU1CRVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKihuw6RjaHN0ZXxrb21tZW5kZXxmb2xnZW5kZXxsZXR6dGV8dmVyZ2FuZ2VuZXx2b3JpZ2V8dm9yKD86aGVyfGFuKWdlZ2FuZ2VuZSkoPzpzfG58bXxyKT8pP2AgK1xuICAgICAgICAgICAgYFxcXFxzKigke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbnVtID0gbWF0Y2hbMl0gPyBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMl0pIDogMTtcbiAgICAgICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzRdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBsZXQgdGltZVVuaXRzID0ge307XG4gICAgICAgIHRpbWVVbml0c1t1bml0XSA9IG51bTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbWF0Y2hbMV0gfHwgbWF0Y2hbM10gfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXIgPSBtb2RpZmllci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKC92b3IvLnRlc3QobW9kaWZpZXIpIHx8IC9sZXR6dGUvLnRlc3QobW9kaWZpZXIpIHx8IC92ZXJnYW5nZW4vLnRlc3QobW9kaWZpZXIpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86aW58ZsO8cnx3w6RocmVuZClcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgSVNPRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9JU09Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBERVRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IERFV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IERFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IERFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0RFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgREVNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9ERU1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgREVDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVDYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgREVDYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVDYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgREVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9ERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IERFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IERFVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9ERVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBERUNhc3VhbFRpbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgREVDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IERFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgSVNPRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgREVUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IERFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IERFTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgREVXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgREVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBERU1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLCBuZXcgREVNZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAvKG1haW50ZW5hbnR8YXVqb3VyZCdodWl8ZGVtYWlufGhpZXJ8Y2V0dGVcXHMqbnVpdHxsYVxccyp2ZWlsbGUpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAobG93ZXJUZXh0KSB7XG4gICAgICAgICAgICBjYXNlIFwibWFpbnRlbmFudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiYXVqb3VyZCdodWlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaGllclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiZGVtYWluXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC9jZXR0ZVxccypudWl0LykpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobG93ZXJUZXh0Lm1hdGNoKC9sYVxccyp2ZWlsbGUvKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0RheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNEYXkuc2V0RGF0ZShwcmV2aW91c0RheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBwcmV2aW91c0RheSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gLyhjZXQ/KT9cXHMqKG1hdGlufHNvaXJ8YXByw6hzLW1pZGl8YXByZW18YSBtaWRpfMOgIG1pbnVpdCkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHN1ZmZpeExvd2VyID0gbWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKHN1ZmZpeExvd2VyKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXByw6hzLW1pZGlcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhcHJlbVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTQpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic29pclwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWF0aW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYSBtaWRpXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLDoCBtaW51aXRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzpbw6BhXSlcXFxccyopP1wiO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfFvDoGFdfFxcXFw/KVxcXFxzKlwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaFswXS5tYXRjaCgvXlxccypcXGR7NH1cXHMqJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeXFxcXHMqKFR8w6B8YXxhdXx2ZXJzfGRlfCx8LSk/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUk1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijDoHxhfGF1fC0pXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUk1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJkaW1hbmNoZVwiOiAwLFxuICAgIFwiZGltXCI6IDAsXG4gICAgXCJsdW5kaVwiOiAxLFxuICAgIFwibHVuXCI6IDEsXG4gICAgXCJtYXJkaVwiOiAyLFxuICAgIFwibWFyXCI6IDIsXG4gICAgXCJtZXJjcmVkaVwiOiAzLFxuICAgIFwibWVyXCI6IDMsXG4gICAgXCJqZXVkaVwiOiA0LFxuICAgIFwiamV1XCI6IDQsXG4gICAgXCJ2ZW5kcmVkaVwiOiA1LFxuICAgIFwidmVuXCI6IDUsXG4gICAgXCJzYW1lZGlcIjogNixcbiAgICBcInNhbVwiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIFwiamFudmllclwiOiAxLFxuICAgIFwiamFuXCI6IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgXCJmw6l2cmllclwiOiAyLFxuICAgIFwiZsOpdlwiOiAyLFxuICAgIFwiZsOpdi5cIjogMixcbiAgICBcImZldnJpZXJcIjogMixcbiAgICBcImZldlwiOiAyLFxuICAgIFwiZmV2LlwiOiAyLFxuICAgIFwibWFyc1wiOiAzLFxuICAgIFwibWFyXCI6IDMsXG4gICAgXCJtYXIuXCI6IDMsXG4gICAgXCJhdnJpbFwiOiA0LFxuICAgIFwiYXZyXCI6IDQsXG4gICAgXCJhdnIuXCI6IDQsXG4gICAgXCJtYWlcIjogNSxcbiAgICBcImp1aW5cIjogNixcbiAgICBcImp1blwiOiA2LFxuICAgIFwianVpbGxldFwiOiA3LFxuICAgIFwianVpbFwiOiA3LFxuICAgIFwianVsXCI6IDcsXG4gICAgXCJqdWwuXCI6IDcsXG4gICAgXCJhb8O7dFwiOiA4LFxuICAgIFwiYW91dFwiOiA4LFxuICAgIFwic2VwdGVtYnJlXCI6IDksXG4gICAgXCJzZXBcIjogOSxcbiAgICBcInNlcC5cIjogOSxcbiAgICBcInNlcHRcIjogOSxcbiAgICBcInNlcHQuXCI6IDksXG4gICAgXCJvY3RvYnJlXCI6IDEwLFxuICAgIFwib2N0XCI6IDEwLFxuICAgIFwib2N0LlwiOiAxMCxcbiAgICBcIm5vdmVtYnJlXCI6IDExLFxuICAgIFwibm92XCI6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBcImTDqWNlbWJyZVwiOiAxMixcbiAgICBcImRlY2VtYnJlXCI6IDEyLFxuICAgIFwiZGVjXCI6IDEyLFxuICAgIFwiZGVjLlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ1blwiOiAxLFxuICAgIFwiZGV1eFwiOiAyLFxuICAgIFwidHJvaXNcIjogMyxcbiAgICBcInF1YXRyZVwiOiA0LFxuICAgIFwiY2lucVwiOiA1LFxuICAgIFwic2l4XCI6IDYsXG4gICAgXCJzZXB0XCI6IDcsXG4gICAgXCJodWl0XCI6IDgsXG4gICAgXCJuZXVmXCI6IDksXG4gICAgXCJkaXhcIjogMTAsXG4gICAgXCJvbnplXCI6IDExLFxuICAgIFwiZG91emVcIjogMTIsXG4gICAgXCJ0cmVpemVcIjogMTMsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VjXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWNvbmRlXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWNvbmRlc1wiOiBcInNlY29uZFwiLFxuICAgIFwibWluXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW5zXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dGVcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0ZXNcIjogXCJtaW51dGVcIixcbiAgICBcImhcIjogXCJob3VyXCIsXG4gICAgXCJoclwiOiBcImhvdXJcIixcbiAgICBcImhyc1wiOiBcImhvdXJcIixcbiAgICBcImhldXJlXCI6IFwiaG91clwiLFxuICAgIFwiaGV1cmVzXCI6IFwiaG91clwiLFxuICAgIFwiam91clwiOiBcImRheVwiLFxuICAgIFwiam91cnNcIjogXCJkYXlcIixcbiAgICBcInNlbWFpbmVcIjogXCJ3ZWVrXCIsXG4gICAgXCJzZW1haW5lc1wiOiBcIndlZWtcIixcbiAgICBcIm1vaXNcIjogXCJtb250aFwiLFxuICAgIFwidHJpbWVzdHJlXCI6IFwicXVhcnRlclwiLFxuICAgIFwidHJpbWVzdHJlc1wiOiBcInF1YXJ0ZXJcIixcbiAgICBcImFuc1wiOiBcInllYXJcIixcbiAgICBcImFubsOpZVwiOiBcInllYXJcIixcbiAgICBcImFubsOpZXNcIjogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1xcXFwuWzAtOV0rfHVuZT9cXFxcYnxxdWVscXVlcz98ZGVtaS0/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwidW5lXCIgfHwgbnVtID09PSBcInVuXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvcXVlbHF1ZXM/LykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvZGVtaS0/LykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OlswLTldezEsMn0oPzplcik/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGxldCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIG51bSA9IG51bS5yZXBsYWNlKC8oPzplcikkL2ksIFwiXCIpO1xuICAgIHJldHVybiBwYXJzZUludChudW0pO1xufVxuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IGAoPzpbMS05XVswLTldezAsM31cXFxccyooPzpBQ3xBRHxwXFxcXC5cXFxccypDKD86aHI/KT9cXFxcLlxcXFxzKm5cXFxcLil8WzEtMl1bMC05XXszfXxbNS05XVswLTldKWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC9BQy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvQkMvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBpZiAoL0FEL2kudGVzdChtYXRjaCkgfHwgL0MvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL1teXFxkXSsvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGxldCB5ZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyID4gNTApIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMTkwMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMjAwMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geWVhck51bWJlcjtcbn1cbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiA9IGAoJHtOVU1CRVJfUEFUVEVSTn0pXFxcXHN7MCw1fSgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KVxcXFxzezAsNX1gO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbmZ1bmN0aW9uIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFsyXS50b0xvd2VyQ2FzZSgpXTtcbiAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgV0VFS0RBWV9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86KD86XFxcXCx8XFxcXCh8XFxcXO+8iClcXFxccyopP1wiICtcbiAgICBcIig/Oig/OmNlKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKGRlcm5pZXJ8cHJvY2hhaW4pXFxcXHMqKT9cIiArXG4gICAgXCIoPz1cXFxcV3xcXFxcZHwkKVwiLCBcImlcIik7XG5jb25zdCBXRUVLREFZX0dST1VQID0gMTtcbmNvbnN0IFBPU1RGSVhfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGlmICh3ZWVrZGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdWZmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgc3VmZml4ID0gc3VmZml4IHx8IFwiXCI7XG4gICAgICAgIHN1ZmZpeCA9IHN1ZmZpeC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAoc3VmZml4ID09IFwiZGVybmllclwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN1ZmZpeCA9PSBcInByb2NoYWluXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5jb25zdCBGSVJTVF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXnxcXFxcc3xUKVwiICtcbiAgICBcIig/Oig/OlvDoGFdKVxcXFxzKik/XCIgK1xuICAgIFwiKFxcXFxkezEsMn0pKD86aHw6KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzptfDopPyk/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86c3w6KT8pP1wiICtcbiAgICBcIig/OlxcXFxzKihBXFxcXC5NXFxcXC58UFxcXFwuTVxcXFwufEFNP3xQTT8pKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBTRUNPTkRfUkVHX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXlxcXFxzKihcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8W8OgYV18XFxcXD8pXFxcXHMqXCIgK1xuICAgIFwiKFxcXFxkezEsMn0pKD86aHw6KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzptfDopPyk/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86c3w6KT8pP1wiICtcbiAgICBcIig/OlxcXFxzKihBXFxcXC5NXFxcXC58UFxcXFwuTVxcXFwufEFNP3xQTT8pKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBIT1VSX0dST1VQID0gMjtcbmNvbnN0IE1JTlVURV9HUk9VUCA9IDM7XG5jb25zdCBTRUNPTkRfR1JPVVAgPSA0O1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUCA9IDU7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUlNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIHBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gRklSU1RfUkVHX1BBVFRFUk47XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4ICsgbWF0Y2hbMV0ubGVuZ3RoLCBtYXRjaFswXS5zdWJzdHJpbmcobWF0Y2hbMV0ubGVuZ3RoKSk7XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXlxcZHs0fSQvKSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gRlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50KHJlc3VsdC5zdGFydC5jbG9uZSgpLCBtYXRjaCk7XG4gICAgICAgIGlmICghcmVzdWx0LnN0YXJ0KSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW1haW5pbmdUZXh0ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHNlY29uZE1hdGNoID0gU0VDT05EX1JFR19QQVRURVJOLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaCkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IEZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5leHRyYWN0VGltZUNvbXBvbmVudChyZXN1bHQuc3RhcnQuY2xvbmUoKSwgc2Vjb25kTWF0Y2gpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGV4dCArPSBzZWNvbmRNYXRjaFswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBzdGF0aWMgZXh0cmFjdFRpbWVDb21wb25lbnQoZXh0cmFjdGluZ0NvbXBvbmVudHMsIG1hdGNoKSB7XG4gICAgICAgIGxldCBob3VyID0gMDtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IG51bGw7XG4gICAgICAgIGhvdXIgPSBwYXJzZUludChtYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIGlmIChtYXRjaFtNSU5VVEVfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjAgfHwgaG91ciA+IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+PSAxMikge1xuICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5QTTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPiAxMilcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGFtcG0gPSBtYXRjaFtBTV9QTV9IT1VSX0dST1VQXVswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKGFtcG0gPT0gXCJhXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtID09IFwicFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5QTTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJtaW51dGVcIiwgbWludXRlKTtcbiAgICAgICAgaWYgKG1lcmlkaWVtICE9PSBudWxsKSB7XG4gICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgZXh0cmFjdGluZ0NvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBwYXJzZUludChtYXRjaFtTRUNPTkRfR1JPVVBdKTtcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gNjApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXh0cmFjdGluZ0NvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBPUkRJTkFMX05VTUJFUl9QQVRURVJOLCBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpvblxcXFxzKj8pP1wiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgYCg/OlxcXFxzKig/OmF1fFxcXFwtfFxcXFzigJN8anVzcXUnYXU/fFxcXFxzKVxcXFxzKigke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KSk/YCArXG4gICAgYCg/Oi18L3xcXFxccyooPzpkZSk/XFxcXHMqKWAgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGAoPzooPzotfC98LD9cXFxccyopKCR7WUVBUl9QQVRURVJOfSg/IVteXFxcXHNdXFxcXGQpKSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgaWwgeSBhXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz0oPzpcXFxcV3wkKSlgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0VGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIG91dHB1dFRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86ZGFuc3xlbnxwb3VyfHBlbmRhbnR8ZGUpXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTlVNQkVSX1BBVFRFUk4sIHBhcnNlTnVtYmVyUGF0dGVybiwgVElNRV9VTklUX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCg/Omxlcz98bGF8bCd8ZHV8ZGVzPylcXFxccypgICtcbiAgICAgICAgICAgIGAoJHtOVU1CRVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKihwcm9jaGFpbmU/cz98ZGVybmlbZcOoXXJlP3M/fHBhc3Nbw6llXWU/cz98cHJbw6llXWNbw6llXWRlbnRzP3xzdWl2YW50ZT9zPykpP2AgK1xuICAgICAgICAgICAgYFxcXFxzKigke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKihwcm9jaGFpbmU/cz98ZGVybmlbZcOoXXJlP3M/fHBhc3Nbw6llXWU/cz98cHJbw6llXWNbw6llXWRlbnRzP3xzdWl2YW50ZT9zPykpP2AsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IG1hdGNoWzFdID8gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKSA6IDE7XG4gICAgICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFszXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHt9O1xuICAgICAgICB0aW1lVW5pdHNbdW5pdF0gPSBudW07XG4gICAgICAgIGxldCBtb2RpZmllciA9IG1hdGNoWzJdIHx8IG1hdGNoWzRdIHx8IFwiXCI7XG4gICAgICAgIG1vZGlmaWVyID0gbW9kaWZpZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFtb2RpZmllcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvZGVybmlbZcOoXXJlP3M/Ly50ZXN0KG1vZGlmaWVyKSB8fCAvcGFzc1vDqWVdZT9zPy8udGVzdChtb2RpZmllcikgfHwgL3ByW8OpZV1jW8OpZV1kZW50cz8vLnRlc3QobW9kaWZpZXIpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IEZSQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IEZSQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRlJUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBGUk1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0ZSTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCBGUk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9GUk1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEZSV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IEZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IEZSTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBGUlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9GUlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRlJUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBGUkNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRlJDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgRlJNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBGUlRpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBGUldlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgRlJNZXJnZURhdGVUaW1lUmVmaW5lcigpLCBuZXcgRlJNZXJnZURhdGVSYW5nZVJlZmluZXIoKV0sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJleHBvcnQgY29uc3QgTlVNQkVSID0ge1xuICAgIFwi6Zu2XCI6IDAsXG4gICAgXCLjgIdcIjogMCxcbiAgICBcIuS4gFwiOiAxLFxuICAgIFwi5LqMXCI6IDIsXG4gICAgXCLkuIlcIjogMyxcbiAgICBcIuWbm1wiOiA0LFxuICAgIFwi5LqUXCI6IDUsXG4gICAgXCLlha1cIjogNixcbiAgICBcIuS4g1wiOiA3LFxuICAgIFwi5YWrXCI6IDgsXG4gICAgXCLkuZ1cIjogOSxcbiAgICBcIuWNgVwiOiAxMCxcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9PRkZTRVQgPSB7XG4gICAgXCLml6VcIjogMCxcbiAgICBcIuaciFwiOiAxLFxuICAgIFwi54GrXCI6IDIsXG4gICAgXCLmsLRcIjogMyxcbiAgICBcIuacqFwiOiA0LFxuICAgIFwi6YeRXCI6IDUsXG4gICAgXCLlnJ9cIjogNixcbn07XG5leHBvcnQgZnVuY3Rpb24gdG9IYW5rYWt1KHRleHQpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRleHQpXG4gICAgICAgIC5yZXBsYWNlKC9cXHUyMDE5L2csIFwiXFx1MDAyN1wiKVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAxRC9nLCBcIlxcdTAwMjJcIilcbiAgICAgICAgLnJlcGxhY2UoL1xcdTMwMDAvZywgXCJcXHUwMDIwXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXHVGRkU1L2csIFwiXFx1MDBBNVwiKVxuICAgICAgICAucmVwbGFjZSgvW1xcdUZGMDFcXHVGRjAzLVxcdUZGMDZcXHVGRjA4XFx1RkYwOVxcdUZGMEMtXFx1RkYxOVxcdUZGMUMtXFx1RkYxRlxcdUZGMjEtXFx1RkYzQlxcdUZGM0RcXHVGRjNGXFx1RkY0MS1cXHVGRjVCXFx1RkY1RFxcdUZGNUVdL2csIGFscGhhTnVtKTtcbn1cbmZ1bmN0aW9uIGFscGhhTnVtKHRva2VuKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodG9rZW4uY2hhckNvZGVBdCgwKSAtIDY1MjQ4KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBqYVN0cmluZ1RvTnVtYmVyKHRleHQpIHtcbiAgICBsZXQgbnVtYmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHRbaV07XG4gICAgICAgIGlmIChjaGFyID09PSBcIuWNgVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPT09IDAgPyBOVU1CRVJbY2hhcl0gOiBudW1iZXIgKiBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gTlVNQkVSW2NoYXJdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW1iZXI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgdG9IYW5rYWt1IH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvKD86KD86KFvlkIzku4rmnKxdKXwoKOaYreWSjHzlubPmiJB85Luk5ZKMKT8oWzAtOe+8kC3vvJldezEsNH185YWDKSkp5bm0XFxzKik/KFswLTnvvJAt77yZXXsxLDJ9KeaciFxccyooWzAtOe+8kC3vvJldezEsMn0p5pelL2k7XG5jb25zdCBTUEVDSUFMX1lFQVJfR1JPVVAgPSAxO1xuY29uc3QgVFlQSUNBTF9ZRUFSX0dST1VQID0gMjtcbmNvbnN0IEVSQV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX05VTUJFUl9HUk9VUCA9IDQ7XG5jb25zdCBNT05USF9HUk9VUCA9IDU7XG5jb25zdCBEQVlfR1JPVVAgPSA2O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBTdGFuZGFyZFBhcnNlciB7XG4gICAgcGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludCh0b0hhbmtha3UobWF0Y2hbTU9OVEhfR1JPVVBdKSk7XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaFtEQVlfR1JPVVBdKSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1hdGNoW1NQRUNJQUxfWUVBUl9HUk9VUF0gJiYgbWF0Y2hbU1BFQ0lBTF9ZRUFSX0dST1VQXS5tYXRjaChcIuWQjHzku4p85pysXCIpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCkuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW1RZUElDQUxfWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1UZXh0ID0gbWF0Y2hbWUVBUl9OVU1CRVJfR1JPVVBdO1xuICAgICAgICAgICAgbGV0IHllYXIgPSB5ZWFyTnVtVGV4dCA9PSBcIuWFg1wiID8gMSA6IHBhcnNlSW50KHRvSGFua2FrdSh5ZWFyTnVtVGV4dCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoW0VSQV9HUk9VUF0gPT0gXCLku6TlkoxcIikge1xuICAgICAgICAgICAgICAgIHllYXIgKz0gMjAxODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoW0VSQV9HUk9VUF0gPT0gXCLlubPmiJBcIikge1xuICAgICAgICAgICAgICAgIHllYXIgKz0gMTk4ODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoW0VSQV9HUk9VUF0gPT0gXCLmmK3lkoxcIikge1xuICAgICAgICAgICAgICAgIHllYXIgKz0gMTkyNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBTdGFuZGFyZFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo44GL44KJfO+8jXzjg7x8LXzvvZ58filcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUpQTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IC/ku4rml6V844GN44KH44GGfOacrOaXpXzjgbvjgpPjgZjjgaR85pio5pelfOOBjeOBruOBhnzmmI7ml6V844GC44GX44GffOS7iuWknHzjgZPjgpPjgoR85LuK5aSVfOOBk+OCk+OChuOBhnzku4rmmal844GT44KT44Gw44KTfOS7iuacnXzjgZHjgZUvaTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVRleHRUb0thbmppKHRleHQpIHtcbiAgICBzd2l0Y2ggKHRleHQpIHtcbiAgICAgICAgY2FzZSBcIuOBjeOCh+OBhlwiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5LuK5pelXCI7XG4gICAgICAgIGNhc2UgXCLjgbvjgpPjgZjjgaRcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuacrOaXpVwiO1xuICAgICAgICBjYXNlIFwi44GN44Gu44GGXCI6XG4gICAgICAgICAgICByZXR1cm4gXCLmmKjml6VcIjtcbiAgICAgICAgY2FzZSBcIuOBguOBl+OBn1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5piO5pelXCI7XG4gICAgICAgIGNhc2UgXCLjgZPjgpPjgoRcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuS7iuWknFwiO1xuICAgICAgICBjYXNlIFwi44GT44KT44KG44GGXCI6XG4gICAgICAgICAgICByZXR1cm4gXCLku4rlpJVcIjtcbiAgICAgICAgY2FzZSBcIuOBk+OCk+OBsOOCk1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5LuK5pmpXCI7XG4gICAgICAgIGNhc2UgXCLjgZHjgZVcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuS7iuacnVwiO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBDYXN1YWxEYXRlUGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gbm9ybWFsaXplVGV4dFRvS2FuamkobWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKHRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCLmmKjml6VcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIuaYjuaXpVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbW9ycm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLmnKzml6VcIjpcbiAgICAgICAgICAgIGNhc2UgXCLku4rml6VcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQgPT0gXCLku4rlpJxcIiB8fCB0ZXh0ID09IFwi5LuK5aSVXCIgfHwgdGV4dCA9PSBcIuS7iuaZqVwiKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0ZXh0Lm1hdGNoKFwi5LuK5pydXCIpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUpQQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX09GRlNFVCB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIigoPzxwcmVmaXg+5YmN44GufOasoeOBrnzku4rpgLEpKT8oPzx3ZWVrZGF5PlwiICsgT2JqZWN0LmtleXMoV0VFS0RBWV9PRkZTRVQpLmpvaW4oXCJ8XCIpICsgXCIpKD865puc5pelfOabnClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBXZWVrZGF5UGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoLmdyb3Vwcy5wcmVmaXggfHwgXCJcIjtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKHByZWZpeC5tYXRjaCgv5YmN44GuLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJsYXN0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJlZml4Lm1hdGNoKC/mrKHjga4vKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXgubWF0Y2goL+S7iumAsS8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgb2Zmc2V0LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyLCBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgdG9IYW5rYWt1IH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoWzAtOe+8kC3vvJldezR9W1xcXFwvfFxcXFzvvI9dKT9cIiArIFwiKFswLTHvvJAt77yRXXswLDF9WzAtOe+8kC3vvJldezF9KSg/OltcXFxcL3xcXFxc77yPXShbMC0z77yQLe+8k117MCwxfVswLTnvvJAt77yZXXsxfSkpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAyO1xuY29uc3QgREFZX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpQU2xhc2hEYXRlRm9ybWF0UGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoW01PTlRIX0dST1VQXSkpO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludCh0b0hhbmtha3UobWF0Y2hbREFZX0dST1VQXSkpO1xuICAgICAgICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXkgPCAxIHx8IGRheSA+IDMxKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIHJlc3VsdC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgcmF3WWVhck51bWJlciA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaFtZRUFSX0dST1VQXSkpO1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xuICAgICAgICAgICAgcmVzdWx0LmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudCwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBTbGFzaERhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgTlVNQkVSLCBqYVN0cmluZ1RvTnVtYmVyLCB0b0hhbmtha3UgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBGSVJTVF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpcIiArXG4gICAgXCIo5Y2I5YmNfOWNiOW+jHxBLk0ufFAuTS58QU18UE0pXCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yM44CBXSopXCIgK1xuICAgIFwiKD86KFswLTnvvJAt77yZXSt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspKD86XFxcXHMqKSg/OuaZgig/IemWkyl8OnzvvJopXCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihbMC0577yQLe+8mV0rfOWNinxbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/OuWIhnw6fO+8mik/XCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihbMC0577yQLe+8mV0rfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD8656eSKT8pXCIgK1xuICAgIFwiKD86XFxcXHMqKEEuTS58UC5NLnxBTT98UE0/KSk/XCIsIFwiaVwiKTtcbmNvbnN0IFNFQ09ORF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpeXFxcXHMqKD8644GL44KJfFxcXFwtfFxcXFzigJN8XFxcXO+8jXxcXFxcfnxcXFxc44CcKVxcXFxzKilcIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCIo5Y2I5YmNfOWNiOW+jHxBLk0ufFAuTS58QU18UE0pXCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yM44CBXSopXCIgK1xuICAgIFwiKD86KFswLTnvvJAt77yZXSt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspKD86XFxcXHMqKSg/OuaZgnw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFswLTnvvJAt77yZXSt85Y2KfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD865YiGfDp877yaKT9cIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFswLTnvvJAt77yZXSt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUF8xID0gMTtcbmNvbnN0IEhPVVJfR1JPVVAgPSAyO1xuY29uc3QgTUlOVVRFX0dST1VQID0gMztcbmNvbnN0IFNFQ09ORF9HUk9VUCA9IDQ7XG5jb25zdCBBTV9QTV9IT1VSX0dST1VQXzIgPSA1O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBGSVJTVF9SRUdfUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaC5pbmRleCA+IDAgJiYgY29udGV4dC50ZXh0W21hdGNoLmluZGV4IC0gMV0ubWF0Y2goL1xcdy8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gY3JlYXRlVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2hbSE9VUl9HUk9VUF0sIG1hdGNoW01JTlVURV9HUk9VUF0sIG1hdGNoW1NFQ09ORF9HUk9VUF0sIG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBfMV0gPz8gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF8yXSk7XG4gICAgICAgIGlmICghcmVzdWx0LnN0YXJ0KSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBtYXRjaCA9IFNFQ09ORF9SRUdfUEFUVEVSTi5leGVjKGNvbnRleHQudGV4dC5zdWJzdHJpbmcocmVzdWx0LmluZGV4ICsgcmVzdWx0LnRleHQubGVuZ3RoKSk7XG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnRleHQgPSByZXN1bHQudGV4dCArIG1hdGNoWzBdO1xuICAgICAgICByZXN1bHQuZW5kID0gY3JlYXRlVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2hbSE9VUl9HUk9VUF0sIG1hdGNoW01JTlVURV9HUk9VUF0sIG1hdGNoW1NFQ09ORF9HUk9VUF0sIG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBfMV0gPz8gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF8yXSk7XG4gICAgICAgIGlmICghcmVzdWx0LmVuZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXN1bHQuZW5kLmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpICYmIHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIHJlc3VsdC5zdGFydC5nZXQoXCJtZXJpZGllbVwiKSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcIm1lcmlkaWVtXCIpID09PSBNZXJpZGllbS5QTSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSAtIDEyID4gcmVzdWx0LmVuZC5nZXQoXCJob3VyXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5lbmQuZ2V0KFwiaG91clwiKSA8IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiaG91clwiLCByZXN1bHQuZW5kLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQuZW5kLmRhdGUoKS5nZXRUaW1lKCkgPCByZXN1bHQuc3RhcnQuZGF0ZSgpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcImRheVwiLCByZXN1bHQuZW5kLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2hIb3VyLCBtYXRjaE1pbnV0ZSwgbWF0Y2hTZWNvbmQsIG1hdGNoQW1QbSkge1xuICAgIGxldCBob3VyID0gMDtcbiAgICBsZXQgbWVyaWRpZW0gPSAtMTtcbiAgICBsZXQgdGFyZ2V0Q29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICBob3VyID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoSG91cikpO1xuICAgIGlmIChpc05hTihob3VyKSkge1xuICAgICAgICBob3VyID0gamFTdHJpbmdUb051bWJlcihtYXRjaEhvdXIpO1xuICAgIH1cbiAgICBpZiAoaG91ciA+IDI0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAobWF0Y2hNaW51dGUpIHtcbiAgICAgICAgbGV0IG1pbnV0ZTtcbiAgICAgICAgaWYgKG1hdGNoTWludXRlID09PSBcIuWNilwiKSB7XG4gICAgICAgICAgICBtaW51dGUgPSAzMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaE1pbnV0ZSkpO1xuICAgICAgICAgICAgaWYgKGlzTmFOKG1pbnV0ZSkpIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBqYVN0cmluZ1RvTnVtYmVyKG1hdGNoTWludXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWludXRlID49IDYwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHRhcmdldENvbXBvbmVudHMuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgfVxuICAgIGlmIChtYXRjaFNlY29uZCkge1xuICAgICAgICBsZXQgc2Vjb25kID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoU2Vjb25kKSk7XG4gICAgICAgIGlmIChpc05hTihzZWNvbmQpKSB7XG4gICAgICAgICAgICBzZWNvbmQgPSBqYVN0cmluZ1RvTnVtYmVyKG1hdGNoU2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHRhcmdldENvbXBvbmVudHMuYXNzaWduKFwic2Vjb25kXCIsIHNlY29uZCk7XG4gICAgfVxuICAgIGlmIChtYXRjaEFtUG0pIHtcbiAgICAgICAgaWYgKGhvdXIgPiAxMikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgQU1QTVN0cmluZyA9IG1hdGNoQW1QbTtcbiAgICAgICAgaWYgKEFNUE1TdHJpbmcgPT09IFwi5Y2I5YmNXCIgfHwgQU1QTVN0cmluZ1swXS50b0xvd2VyQ2FzZSgpID09PSBcImFcIikge1xuICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMilcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBTVBNU3RyaW5nID09PSBcIuWNiOW+jFwiIHx8IEFNUE1TdHJpbmdbMF0udG9Mb3dlckNhc2UoKSA9PT0gXCJwXCIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRhcmdldENvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBob3VyKTtcbiAgICBpZiAobWVyaWRpZW0gPj0gMCkge1xuICAgICAgICB0YXJnZXRDb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgIHRhcmdldENvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRDb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRDb21wb25lbnRzO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpQTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijjga4pP1xccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIGV4dGVuZHMgTWVyZ2luZ1JlZmluZXIge1xuICAgIG1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCBuZXdSZXN1bHQgPSBjdXJyZW50UmVzdWx0LmNsb25lKCk7XG4gICAgICAgIG5ld1Jlc3VsdC50ZXh0ID0gY3VycmVudFJlc3VsdC50ZXh0ICsgdGV4dEJldHdlZW4gKyBuZXh0UmVzdWx0LnRleHQ7XG4gICAgICAgIG5ld1Jlc3VsdC5zdGFydC5hc3NpZ24oXCJ3ZWVrZGF5XCIsIG5leHRSZXN1bHQuc3RhcnQuZ2V0KFwid2Vla2RheVwiKSk7XG4gICAgICAgIGlmIChuZXdSZXN1bHQuZW5kKSB7XG4gICAgICAgICAgICBuZXdSZXN1bHQuZW5kLmFzc2lnbihcIndlZWtkYXlcIiwgbmV4dFJlc3VsdC5zdGFydC5nZXQoXCJ3ZWVrZGF5XCIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3UmVzdWx0O1xuICAgIH1cbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsRGF0ZVRoZW5XZWVrZGF5ID0gY3VycmVudFJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJkYXlcIikgJiZcbiAgICAgICAgICAgIG5leHRSZXN1bHQuc3RhcnQuaXNPbmx5V2Vla2RheUNvbXBvbmVudCgpICYmXG4gICAgICAgICAgICAhbmV4dFJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJob3VyXCIpO1xuICAgICAgICByZXR1cm4gbm9ybWFsRGF0ZVRoZW5XZWVrZGF5ICYmIHRleHRCZXR3ZWVuLm1hdGNoKC9eWyzjgIHjga5dP1xccyokLykgIT09IG51bGw7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfT0ZGU0VUIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86XFxcXCh8XFxcXO+8iCkoPzx3ZWVrZGF5PlwiICsgT2JqZWN0LmtleXMoV0VFS0RBWV9PRkZTRVQpLmpvaW4oXCJ8XCIpICsgXCIpKD86XFxcXCl8XFxcXO+8iSlcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBXZWVrZGF5V2l0aFBhcmVudGhlc2VzUGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgb2Zmc2V0KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1KUFdlZWtkYXlXaXRoUGFyZW50aGVzZXNQYXJzZXIuanMubWFwIiwiaW1wb3J0IEpQU3RhbmRhcmRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9KUFN0YW5kYXJkUGFyc2VyLmpzXCI7XG5pbXBvcnQgSlBNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvSlBNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBKUENhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9KUENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBKUFdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9KUFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBKUFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0pQU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgSlBUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0pQVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBKUE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0pQTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBKUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvSlBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5pbXBvcnQgSlBXZWVrZGF5V2l0aFBhcmVudGhlc2VzUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvSlBXZWVrZGF5V2l0aFBhcmVudGhlc2VzUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBKUENhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uKHtcbiAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgbmV3IEpQU3RhbmRhcmRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUFdlZWtkYXlXaXRoUGFyZW50aGVzZXNQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUFNsYXNoRGF0ZUZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEpQVGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtcbiAgICAgICAgICAgIG5ldyBKUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUE1lcmdlRGF0ZVRpbWVSZWZpbmVyKCksXG4gICAgICAgICAgICBuZXcgSlBNZXJnZURhdGVSYW5nZVJlZmluZXIoKSxcbiAgICAgICAgXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzID0gY29uZmlndXJhdGlvbi5yZWZpbmVycy5maWx0ZXIoKHJlZmluZXIpID0+ICEocmVmaW5lciBpbnN0YW5jZW9mIE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIpKTtcbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJkb21pbmdvXCI6IDAsXG4gICAgXCJkb21cIjogMCxcbiAgICBcInNlZ3VuZGFcIjogMSxcbiAgICBcInNlZ3VuZGEtZmVpcmFcIjogMSxcbiAgICBcInNlZ1wiOiAxLFxuICAgIFwidGVyw6dhXCI6IDIsXG4gICAgXCJ0ZXLDp2EtZmVpcmFcIjogMixcbiAgICBcInRlclwiOiAyLFxuICAgIFwicXVhcnRhXCI6IDMsXG4gICAgXCJxdWFydGEtZmVpcmFcIjogMyxcbiAgICBcInF1YVwiOiAzLFxuICAgIFwicXVpbnRhXCI6IDQsXG4gICAgXCJxdWludGEtZmVpcmFcIjogNCxcbiAgICBcInF1aVwiOiA0LFxuICAgIFwic2V4dGFcIjogNSxcbiAgICBcInNleHRhLWZlaXJhXCI6IDUsXG4gICAgXCJzZXhcIjogNSxcbiAgICBcInPDoWJhZG9cIjogNixcbiAgICBcInNhYmFkb1wiOiA2LFxuICAgIFwic2FiXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJqYW5laXJvXCI6IDEsXG4gICAgXCJqYW5cIjogMSxcbiAgICBcImphbi5cIjogMSxcbiAgICBcImZldmVyZWlyb1wiOiAyLFxuICAgIFwiZmV2XCI6IDIsXG4gICAgXCJmZXYuXCI6IDIsXG4gICAgXCJtYXLDp29cIjogMyxcbiAgICBcIm1hclwiOiAzLFxuICAgIFwibWFyLlwiOiAzLFxuICAgIFwiYWJyaWxcIjogNCxcbiAgICBcImFiclwiOiA0LFxuICAgIFwiYWJyLlwiOiA0LFxuICAgIFwibWFpb1wiOiA1LFxuICAgIFwibWFpXCI6IDUsXG4gICAgXCJtYWkuXCI6IDUsXG4gICAgXCJqdW5ob1wiOiA2LFxuICAgIFwianVuXCI6IDYsXG4gICAgXCJqdW4uXCI6IDYsXG4gICAgXCJqdWxob1wiOiA3LFxuICAgIFwianVsXCI6IDcsXG4gICAgXCJqdWwuXCI6IDcsXG4gICAgXCJhZ29zdG9cIjogOCxcbiAgICBcImFnb1wiOiA4LFxuICAgIFwiYWdvLlwiOiA4LFxuICAgIFwic2V0ZW1icm9cIjogOSxcbiAgICBcInNldFwiOiA5LFxuICAgIFwic2V0LlwiOiA5LFxuICAgIFwib3V0dWJyb1wiOiAxMCxcbiAgICBcIm91dFwiOiAxMCxcbiAgICBcIm91dC5cIjogMTAsXG4gICAgXCJub3ZlbWJyb1wiOiAxMSxcbiAgICBcIm5vdlwiOiAxMSxcbiAgICBcIm5vdi5cIjogMTEsXG4gICAgXCJkZXplbWJyb1wiOiAxMixcbiAgICBcImRlelwiOiAxMixcbiAgICBcImRlei5cIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IFwiWzAtOV17MSw0fSg/IVteXFxcXHNdXFxcXGQpKD86XFxcXHMqW2F8ZF1cXFxcLj9cXFxccypjXFxcXC4/fFxcXFxzKmFcXFxcLj9cXFxccypkXFxcXC4/KT9cIjtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXIobWF0Y2gpIHtcbiAgICBpZiAobWF0Y2gubWF0Y2goL15bMC05XXsxLDR9JC8pKSB7XG4gICAgICAgIGxldCB5ZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgICAgICBpZiAoeWVhck51bWJlciA8IDEwMCkge1xuICAgICAgICAgICAgaWYgKHllYXJOdW1iZXIgPiA1MCkge1xuICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMTkwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMjAwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhck51bWJlcjtcbiAgICB9XG4gICAgaWYgKG1hdGNoLm1hdGNoKC9hXFwuP1xccypjXFwuPy9pKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL2FcXC4/XFxzKmNcXC4/L2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gLXBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86KGVzdGV8ZXN0YXxwYXNzYWRvfHByW2/Ds114aW1vKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKGVzdGV8ZXN0YXxwYXNzYWRvfHByW8Ozb114aW1vKVxcXFxzKnNlbWFuYSk/XCIgK1xuICAgIFwiKD89XFxcXFd8XFxcXGR8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKHdlZWtkYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbm9ybSA9IHByZWZpeCB8fCBwb3N0Zml4IHx8IFwiXCI7XG4gICAgICAgIG5vcm0gPSBub3JtLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChub3JtID09IFwicGFzc2Fkb1wiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vcm0gPT0gXCJwcsOzeGltb1wiIHx8IG5vcm0gPT0gXCJwcm94aW1vXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9ybSA9PSBcImVzdGVcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QVFdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVFRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86YW8/fMOgcz98ZGFzfGRhfGRlfGRvKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8YSg/Om8pP3xcXFxcPylcXFxccypcIjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QVFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUFRNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooPzosfMOgKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKD86LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pKD86wrp8wqp8wrApP2AgK1xuICAgIFwiKD86XFxcXHMqKD86ZGVzZGV8ZGV8XFxcXC18XFxcXOKAk3xhbz98XFxcXHMpXFxcXHMqKFswLTldezEsMn0pKD86wrp8wqp8wrApPyk/XFxcXHMqKD86ZGUpP1xcXFxzKlwiICtcbiAgICBgKD86LXwvfFxcXFxzKig/OmRlfCwpP1xcXFxzKilgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86XFxcXHMqKD86ZGV8LCk/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUFRNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVENhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oYWdvcmF8aG9qZXxhbWFuaGF8YW1hbmjDo3xvbnRlbSkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhZ29yYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaG9qZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJhbWFuaGFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhbWFuaMOjXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm9udGVtXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUFRDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIC8oPzplc3RhXFxzKik/KG1hbmhhfG1hbmjDo3x0YXJkZXxtZWlhLW5vaXRlfG1laW8tZGlhfG5vaXRlKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0YXJkZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2FmdGVybm9vblwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub2l0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2V2ZW5pbmdcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWFuaGFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJtYW5ow6NcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL21vcm5pbmdcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWVpYS1ub2l0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbWlkbmlnaHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWVpby1kaWFcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9ub29uXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UFRDYXN1YWxUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBQVFdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9QVFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBQVFRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUFRUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFBUTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvUFRNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IFBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1BUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgUFRNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9QVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IFBUQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1BUQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFBUQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1BUQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgUFRDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IFBUQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgUFRXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgUFRUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFBUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFBUTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IFBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKHRvdHwtKVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXlxcXFxzKihvbXxuYXx2b29yfGluIGRlfCx8LSk/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gLyhudXx2YW5kYWFnfG1vcmdlbnxtb3JnZW5kfGdpc3RlcmVuKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGxvd2VyVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcIm51XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJ2YW5kYWFnXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdlblwiOlxuICAgICAgICAgICAgY2FzZSBcIm1vcmdlbmRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiZ2lzdGVyZW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBEQVlfR1JPVVAgPSAxO1xuY29uc3QgTU9NRU5UX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiAvKGRlemUpP1xccyoobmFtaWRkYWd8YXZvbmR8bWlkZGVybmFjaHR8b2NodGVuZHxtaWRkYWd8J3MgbWlkZGFnc3wncyBhdm9uZHN8J3Mgb2NodGVuZHMpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBdID09PSBcImRlemVcIikge1xuICAgICAgICAgICAgY29tcG9uZW50LmFzc2lnbihcImRheVwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5hc3NpZ24oXCJtb250aFwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50LmFzc2lnbihcInllYXJcIiwgY29udGV4dC5yZWZEYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAobWF0Y2hbTU9NRU5UX0dST1VQXS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwibmFtaWRkYWdcIjpcbiAgICAgICAgICAgIGNhc2UgXCIncyBuYW1pZGRhZ3NcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9hZnRlcm5vb25cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYXZvbmRcIjpcbiAgICAgICAgICAgIGNhc2UgXCIncyBhdm9uZHMnXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMjApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvZXZlbmluZ1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkZXJuYWNodFwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbWlkbmlnaHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwib2NodGVuZFwiOlxuICAgICAgICAgICAgY2FzZSBcIidzIG9jaHRlbmRzXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9tb3JuaW5nXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1pZGRhZ1wiOlxuICAgICAgICAgICAgY2FzZSBcIidzIG1pZGRhZ3NcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9ub29uXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxDYXN1YWxUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgem9uZGFnOiAwLFxuICAgIHpvbjogMCxcbiAgICBcInpvbi5cIjogMCxcbiAgICB6bzogMCxcbiAgICBcInpvLlwiOiAwLFxuICAgIG1hYW5kYWc6IDEsXG4gICAgbWE6IDEsXG4gICAgXCJtYS5cIjogMSxcbiAgICBkaW5zZGFnOiAyLFxuICAgIGRpbjogMixcbiAgICBcImRpbi5cIjogMixcbiAgICBkaTogMixcbiAgICBcImRpLlwiOiAyLFxuICAgIHdvZW5zZGFnOiAzLFxuICAgIHdvZTogMyxcbiAgICBcIndvZS5cIjogMyxcbiAgICB3bzogMyxcbiAgICBcIndvLlwiOiAzLFxuICAgIGRvbmRlcmRhZzogNCxcbiAgICBkb25kOiA0LFxuICAgIFwiZG9uZC5cIjogNCxcbiAgICBkbzogNCxcbiAgICBcImRvLlwiOiA0LFxuICAgIHZyaWpkYWc6IDUsXG4gICAgdnJpajogNSxcbiAgICBcInZyaWouXCI6IDUsXG4gICAgdnI6IDUsXG4gICAgXCJ2ci5cIjogNSxcbiAgICB6YXRlcmRhZzogNixcbiAgICB6YXQ6IDYsXG4gICAgXCJ6YXQuXCI6IDYsXG4gICAgXCJ6YVwiOiA2LFxuICAgIFwiemEuXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgamFudWFyaTogMSxcbiAgICBqYW46IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgZmVicnVhcmk6IDIsXG4gICAgZmViOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIG1hYXJ0OiAzLFxuICAgIG1hcjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBtcnQ6IDMsXG4gICAgXCJtcnQuXCI6IDMsXG4gICAgYXByaWw6IDQsXG4gICAgYXByOiA0LFxuICAgIFwiYXByLlwiOiA0LFxuICAgIG1laTogNSxcbiAgICBqdW5pOiA2LFxuICAgIGp1bjogNixcbiAgICBcImp1bi5cIjogNixcbiAgICBqdWxpOiA3LFxuICAgIGp1bDogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBhdWd1c3R1czogOCxcbiAgICBhdWc6IDgsXG4gICAgXCJhdWcuXCI6IDgsXG4gICAgc2VwdGVtYmVyOiA5LFxuICAgIHNlcDogOSxcbiAgICBcInNlcC5cIjogOSxcbiAgICBzZXB0OiA5LFxuICAgIFwic2VwdC5cIjogOSxcbiAgICBva3RvYmVyOiAxMCxcbiAgICBva3Q6IDEwLFxuICAgIFwib2t0LlwiOiAxMCxcbiAgICBub3ZlbWJlcjogMTEsXG4gICAgbm92OiAxMSxcbiAgICBcIm5vdi5cIjogMTEsXG4gICAgZGVjZW1iZXI6IDEyLFxuICAgIGRlYzogMTIsXG4gICAgXCJkZWMuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBlZW46IDEsXG4gICAgdHdlZTogMixcbiAgICBkcmllOiAzLFxuICAgIHZpZXI6IDQsXG4gICAgdmlqZjogNSxcbiAgICB6ZXM6IDYsXG4gICAgemV2ZW46IDcsXG4gICAgYWNodDogOCxcbiAgICBuZWdlbjogOSxcbiAgICB0aWVuOiAxMCxcbiAgICBlbGY6IDExLFxuICAgIHR3YWFsZjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IE9SRElOQUxfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIGVlcnN0ZTogMSxcbiAgICB0d2VlZGU6IDIsXG4gICAgZGVyZGU6IDMsXG4gICAgdmllcmRlOiA0LFxuICAgIHZpamZkZTogNSxcbiAgICB6ZXNkZTogNixcbiAgICB6ZXZlbmRlOiA3LFxuICAgIGFjaHRzdGU6IDgsXG4gICAgbmVnZW5kZTogOSxcbiAgICB0aWVuZGU6IDEwLFxuICAgIGVsZmRlOiAxMSxcbiAgICB0d2FhbGZkZTogMTIsXG4gICAgZGVydGllbmRlOiAxMyxcbiAgICB2ZWVydGllbmRlOiAxNCxcbiAgICB2aWpmdGllbmRlOiAxNSxcbiAgICB6ZXN0aWVuZGU6IDE2LFxuICAgIHpldmVudGllbmRlOiAxNyxcbiAgICBhY2h0dGllbmRlOiAxOCxcbiAgICBuZWdlbnRpZW5kZTogMTksXG4gICAgdHdpbnRpZ3N0ZTogMjAsXG4gICAgXCJlZW5lbnR3aW50aWdzdGVcIjogMjEsXG4gICAgXCJ0d2Vlw6tudHdpbnRpZ3N0ZVwiOiAyMixcbiAgICBcImRyaWVlbnR3aW50aWdzdGVcIjogMjMsXG4gICAgXCJ2aWVyZW50d2ludGlnc3RlXCI6IDI0LFxuICAgIFwidmlqZmVudHdpbnRpZ3N0ZVwiOiAyNSxcbiAgICBcInplc2VudHdpbnRpZ3N0ZVwiOiAyNixcbiAgICBcInpldmVuZW50d2ludGlnc3RlXCI6IDI3LFxuICAgIFwiYWNodGVudHdpbnRpZ1wiOiAyOCxcbiAgICBcIm5lZ2VuZW50d2ludGlnXCI6IDI5LFxuICAgIFwiZGVydGlnc3RlXCI6IDMwLFxuICAgIFwiZWVuZW5kZXJ0aWdzdGVcIjogMzEsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIHNlYzogXCJzZWNvbmRcIixcbiAgICBzZWNvbmQ6IFwic2Vjb25kXCIsXG4gICAgc2Vjb25kZW46IFwic2Vjb25kXCIsXG4gICAgbWluOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnM6IFwibWludXRlXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV1dDogXCJtaW51dGVcIixcbiAgICBtaW51dGVuOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV1dGplOiBcIm1pbnV0ZVwiLFxuICAgIGg6IFwiaG91clwiLFxuICAgIGhyOiBcImhvdXJcIixcbiAgICBocnM6IFwiaG91clwiLFxuICAgIHV1cjogXCJob3VyXCIsXG4gICAgdTogXCJob3VyXCIsXG4gICAgdXJlbjogXCJob3VyXCIsXG4gICAgZGFnOiBcImRheVwiLFxuICAgIGRhZ2VuOiBcImRheVwiLFxuICAgIHdlZWs6IFwid2Vla1wiLFxuICAgIHdla2VuOiBcIndlZWtcIixcbiAgICBtYWFuZDogXCJtb250aFwiLFxuICAgIG1hYW5kZW46IFwibW9udGhcIixcbiAgICBqYWFyOiBcInllYXJcIixcbiAgICBqcjogXCJ5ZWFyXCIsXG4gICAgamFyZW46IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBOVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSl9fFswLTldK3xbMC05XStbXFxcXC4sXVswLTldK3xoYWx2ZT98aGFsZnxwYWFyKWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwicGFhclwiKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwiaGFsZlwiIHx8IG51bS5tYXRjaCgvaGFsdmU/LykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtLnJlcGxhY2UoXCIsXCIsIFwiLlwiKSk7XG59XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihPUkRJTkFMX1dPUkRfRElDVElPTkFSWSl9fFswLTldezEsMn0oPzpzdGV8ZGUpPylgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBsZXQgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBudW0gPSBudW0ucmVwbGFjZSgvKD86c3RlfGRlKSQvaSwgXCJcIik7XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlsxLTldWzAtOV17MCwzfVxcXFxzKig/OnZvb3IgQ2hyaXN0dXN8bmEgQ2hyaXN0dXMpfFsxLTJdWzAtOV17M318WzUtOV1bMC05XSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmICgvdm9vciBDaHJpc3R1cy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvdm9vciBDaHJpc3R1cy9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGlmICgvbmEgQ2hyaXN0dXMvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL25hIENocmlzdHVzL2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBjb25zdCByYXdZZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgIHJldHVybiBmaW5kTW9zdExpa2VseUFEWWVhcihyYXdZZWFyTnVtYmVyKTtcbn1cbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiA9IGAoJHtOVU1CRVJfUEFUVEVSTn0pXFxcXHN7MCw1fSgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KVxcXFxzezAsNX1gO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OmJpbm5lbnxpbilcXFxccyopP2AsIFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTik7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAoPzpiaW5uZW58aW58YmlubmVuIGRlfHZvb3IpXFxcXHMqYCArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBgKD89XFxcXFd8JClgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi8uLi9ubC9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Oig/OlxcXFwsfFxcXFwofFxcXFzvvIgpXFxcXHMqKT9cIiArXG4gICAgXCIoPzpvcFxcXFxzKj8pP1wiICtcbiAgICBcIig/OihkZXplfHZvcmlnZXx2b2xnZW5kZSlcXFxccyooPzp3ZWVrXFxcXHMqKT8pP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcInZvcmlnZVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcInZvbGdlbmRlXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwiZGV6ZVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86b25cXFxccyo/KT9cIiArXG4gICAgYCgke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KWAgK1xuICAgIFwiKD86XFxcXHMqXCIgK1xuICAgIFwiKD86dG90fFxcXFwtfFxcXFzigJN8dW50aWx8dGhyb3VnaHx0aWxsfFxcXFxzKVxcXFxzKlwiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/Oi18L3xcXFxccyooPzpvZik/XFxcXHMqKVwiICtcbiAgICBcIihcIiArXG4gICAgbWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpICtcbiAgICBcIilcIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCIoPzotfC98LD9cXFxccyopXCIgK1xuICAgIGAoJHtZRUFSX1BBVFRFUk59KD8hW15cXFxcc11cXFxcZCkpYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gY29tcG9uZW50cztcbiAgICAgICAgcmVzdWx0LmVuZCA9IGNvbXBvbmVudHMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGBcXFxccypgICtcbiAgICBgKD86YCArXG4gICAgYFssLV0/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSk/YCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVteXFxcXHNcXFxcd118XFxcXHMrW14wLTldfFxcXFxzKyR8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDE7XG5jb25zdCBZRUFSX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MTW9udGhOYW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aE5hbWUgPSBtYXRjaFtNT05USF9OQU1FX0dST1VQXTtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21vbnRoTmFtZS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCAxLCBtb250aCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTE1vbnRoTmFtZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFswLTldfDBbMS05XXwxWzAxMl0pLyhbMC05XXs0fSlcIiArIFwiXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxTbGFzaE1vbnRoRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCkuaW1wbHkoXCJkYXlcIiwgMSkuYXNzaWduKFwibW9udGhcIiwgbW9udGgpLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxTbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/Oig/Om9tKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8b218XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/OlxcXFxzKig/OnV1cikpPyg/IS8pKD89XFxcXFd8JClcIjtcbiAgICB9XG4gICAgZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15cXHMqXFxkezR9XFxzKiQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoWzAtOV17NH0pW1xcXFwuXFxcXC9cXFxcc11gICtcbiAgICBgKD86KCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSl8KFswLTldezEsMn0pKVtcXFxcLlxcXFwvXFxcXHNdYCArXG4gICAgYChbMC05XXsxLDJ9KWAgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgWUVBUl9OVU1CRVJfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OVU1CRVJfR1JPVVAgPSAzO1xuY29uc3QgREFURV9OVU1CRVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gbWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXVxuICAgICAgICAgICAgPyBwYXJzZUludChtYXRjaFtNT05USF9OVU1CRVJfR1JPVVBdKVxuICAgICAgICAgICAgOiBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChtYXRjaFtZRUFSX05VTUJFUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFtEQVRFX05VTUJFUl9HUk9VUF0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF5OiBkYXksXG4gICAgICAgICAgICBtb250aDogbW9udGgsXG4gICAgICAgICAgICB5ZWFyOiB5ZWFyLFxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IFRJTUVfT0ZfREFZX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MQ2FzdWFsRGF0ZVRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oZ2lzdGVyZW58bW9yZ2VufHZhbikob2NodGVuZHxtaWRkYWd8bmFtaWRkYWd8YXZvbmR8bmFjaHQpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXRlVGV4dCA9IG1hdGNoW0RBVEVfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWVUZXh0ID0gbWF0Y2hbVElNRV9PRl9EQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgc3dpdGNoIChkYXRlVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcImdpc3RlcmVuXCI6XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNEYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNEYXkuc2V0RGF0ZShwcmV2aW91c0RheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHByZXZpb3VzRGF5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ2YW5cIjpcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdlblwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aW1lVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcIm9jaHRlbmRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkYWdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibmFtaWRkYWdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYXZvbmRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTENhc3VhbERhdGVUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKGRpdHxkZXplfHZvcmlnfGFmZ2Vsb3BlbnwoPzphYW4pP2tvbWVuZHxvdmVyfFxcXFwrfC0pZT9cXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUFJFRklYX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgVElNRV9VTklUX1dPUkRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbVElNRV9VTklUX1dPUkRfR1JPVVBdKTtcbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ2b3JpZ1wiOlxuICAgICAgICAgICAgY2FzZSBcImFmZ2Vsb3BlblwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoZGl0fGRlemV8KD86YWFuKT9rb21lbmR8dm9sZ2VuZHxhZmdlbG9wZW58dm9yaWcpZT9cXFxccyooJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSkoPz1cXFxccyopYCArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBNT0RJRklFUl9XT1JEX0dST1VQID0gMTtcbmNvbnN0IFJFTEFUSVZFX1dPUkRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gbWF0Y2hbTU9ESUZJRVJfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFdvcmQgPSBtYXRjaFtSRUxBVElWRV9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1ldW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW3VuaXRXb3JkXTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwidm9sZ2VuZFwiIHx8IG1vZGlmaWVyID09IFwia29tZW5kXCIgfHwgbW9kaWZpZXIgPT0gXCJhYW5rb21lbmRcIikge1xuICAgICAgICAgICAgY29uc3QgdGltZVVuaXRzID0ge307XG4gICAgICAgICAgICB0aW1lVW5pdHNbdGltZXVuaXRdID0gMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwiYWZnZWxvcGVuXCIgfHwgbW9kaWZpZXIgPT0gXCJ2b3JpZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh1bml0V29yZC5tYXRjaCgvd2Vlay9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdFdvcmQubWF0Y2goL21hYW5kL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0V29yZC5tYXRjaCgvamFhci9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNb250aCgwKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXCIgKyBcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCIoPzpnZWxlZGVufHZvb3J8ZWVyZGVyKSg/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBTVFJJQ1RfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCJcIiArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBcImdlbGVkZW4oPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpY3RNb2RlID8gU1RSSUNUX1BBVFRFUk4gOiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGNvbnN0IG91dHB1dFRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBvdXRwdXRUaW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIlwiICsgXCIoXCIgKyBUSU1FX1VOSVRTX1BBVFRFUk4gKyBcIilcIiArIFwiKGxhdGVyfG5hfHZhbmFmIG51fHZvb3J0YWFufHZvb3J1aXR8dWl0KVwiICsgXCIoPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuY29uc3QgU1RSSUNUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXCIgKyBcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCIobGF0ZXJ8dmFuYWYgbnUpXCIgKyBcIig/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBHUk9VUF9OVU1fVElNRVVOSVRTID0gMTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpY3RNb2RlID8gU1RSSUNUX1BBVFRFUk4gOiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZnJhZ21lbnRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFtHUk9VUF9OVU1fVElNRVVOSVRTXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIGZyYWdtZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgTkxNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvTkxNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBOTE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL05MTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCBOTENhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBOTENhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTENhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgTkxXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgTkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IE5MTW9udGhOYW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxNb250aE5hbWVQYXJzZXIuanNcIjtcbmltcG9ydCBOTFNsYXNoTW9udGhGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTFNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBOTFRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IE5MQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIuanNcIjtcbmltcG9ydCBOTENhc3VhbERhdGVUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxDYXN1YWxEYXRlVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL05MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBOTFRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL05MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgTkxDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBOTENhc3VhbERhdGVUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MTW9udGhOYW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgTkxUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgTkxNb250aE5hbWVQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBOTFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBOTENhc3VhbFllYXJNb250aERheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MU2xhc2hNb250aEZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MVGltZUV4cHJlc3Npb25QYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBuZXcgTkxUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBOTFRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IE5MTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IE5MTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiZXhwb3J0IGNvbnN0IE5VTUJFUiA9IHtcbiAgICBcIumbtlwiOiAwLFxuICAgIFwi44CHXCI6IDAsXG4gICAgXCLkuIBcIjogMSxcbiAgICBcIuS6jFwiOiAyLFxuICAgIFwi5LikXCI6IDIsXG4gICAgXCLkuIlcIjogMyxcbiAgICBcIuWbm1wiOiA0LFxuICAgIFwi5LqUXCI6IDUsXG4gICAgXCLlha1cIjogNixcbiAgICBcIuS4g1wiOiA3LFxuICAgIFwi5YWrXCI6IDgsXG4gICAgXCLkuZ1cIjogOSxcbiAgICBcIuWNgVwiOiAxMCxcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9PRkZTRVQgPSB7XG4gICAgXCLlpKlcIjogMCxcbiAgICBcIuaXpVwiOiAwLFxuICAgIFwi5LiAXCI6IDEsXG4gICAgXCLkuoxcIjogMixcbiAgICBcIuS4iVwiOiAzLFxuICAgIFwi5ZubXCI6IDQsXG4gICAgXCLkupRcIjogNSxcbiAgICBcIuWFrVwiOiA2LFxufTtcbmV4cG9ydCBmdW5jdGlvbiB6aFN0cmluZ1RvTnVtYmVyKHRleHQpIHtcbiAgICBsZXQgbnVtYmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHRbaV07XG4gICAgICAgIGlmIChjaGFyID09PSBcIuWNgVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPT09IDAgPyBOVU1CRVJbY2hhcl0gOiBudW1iZXIgKiBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gTlVNQkVSW2NoYXJdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW1iZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gemhTdHJpbmdUb1llYXIodGV4dCkge1xuICAgIGxldCBzdHJpbmcgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGFyID0gdGV4dFtpXTtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nICsgTlVNQkVSW2NoYXJdO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciwgemhTdHJpbmdUb1llYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBZRUFSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMjtcbmNvbnN0IERBWV9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsyLDR9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgICAgICAgICBcIl17NH18XCIgK1xuICAgICAgICAgICAgXCJbXCIgK1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICAgICAgICAgIFwiXXsyfVwiICtcbiAgICAgICAgICAgIFwiKT9cIiArXG4gICAgICAgICAgICBcIig/OlxcXFxzKilcIiArXG4gICAgICAgICAgICBcIig/OuW5tCk/XCIgK1xuICAgICAgICAgICAgXCIoPzpbXFxcXHN8LHzvvIxdKilcIiArXG4gICAgICAgICAgICBcIihcIiArXG4gICAgICAgICAgICBcIlxcXFxkezEsMn18XCIgK1xuICAgICAgICAgICAgXCJbXCIgK1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICAgICAgICAgIFwiXXsxLDN9XCIgK1xuICAgICAgICAgICAgXCIpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoPzrmnIgpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsxLDJ9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgICAgICAgICBcIl17MSwzfVwiICtcbiAgICAgICAgICAgIFwiKT9cIiArXG4gICAgICAgICAgICBcIig/OlxcXFxzKilcIiArXG4gICAgICAgICAgICBcIig/OuaXpXzlj7cpP1wiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBsZXQgbW9udGggPSBwYXJzZUludChtYXRjaFtNT05USF9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4obW9udGgpKVxuICAgICAgICAgICAgbW9udGggPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBdKSB7XG4gICAgICAgICAgICBsZXQgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFZX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZGF5KSlcbiAgICAgICAgICAgICAgICBkYXkgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW0RBWV9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGNvbnRleHQucmVmRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IHllYXIgPSBwYXJzZUludChtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oeWVhcikpXG4gICAgICAgICAgICAgICAgeWVhciA9IHpoU3RyaW5nVG9ZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnNEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYWRkRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdK3zljYp85YegKSg/OlxcXFxzKilcIiArXG4gICAgXCIoPzrkuKopP1wiICtcbiAgICBcIijnp5IoPzrpkp8pP3zliIbpkp985bCP5pe2fOmSn3zml6V85aSpfOaYn+acn3znpLzmi5x85pyIfOW5tClcIiArXG4gICAgXCIoPzooPzrkuYt86L+HKT/lkI58KD865LmLKT/lhoUpXCIsIFwiaVwiKTtcbmNvbnN0IE5VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBVTklUX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgbGV0IG51bWJlciA9IHBhcnNlSW50KG1hdGNoW05VTUJFUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgbnVtYmVyID0gemhTdHJpbmdUb051bWJlcihtYXRjaFtOVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RyaW5nID0gbWF0Y2hbTlVNQkVSX0dST1VQXTtcbiAgICAgICAgICAgIGlmIChzdHJpbmcgPT09IFwi5YegXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3RyaW5nID09PSBcIuWNilwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gMC41O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgY29uc3QgdW5pdCA9IG1hdGNoW1VOSVRfR1JPVVBdO1xuICAgICAgICBjb25zdCB1bml0QWJiciA9IHVuaXRbMF07XG4gICAgICAgIGlmICh1bml0QWJici5tYXRjaCgvW+aXpeWkqeaYn+ekvOaciOW5tF0vKSkge1xuICAgICAgICAgICAgaWYgKHVuaXRBYmJyID09IFwi5pelXCIgfHwgdW5pdEFiYnIgPT0gXCLlpKlcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLmRheSA9IG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHVuaXRBYmJyID09IFwi5pifXCIgfHwgdW5pdEFiYnIgPT0gXCLnpLxcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLndlZWsgPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuaciFwiKSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubW9udGggPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuW5tFwiKSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ueWVhciA9IG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBhZGREdXJhdGlvbihjb250ZXh0LnJlZkRhdGUsIGR1cmF0aW9uKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVuaXRBYmJyID09IFwi56eSXCIpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLnNlY29uZCA9IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuWIhlwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5taW51dGUgPSBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLlsI9cIiB8fCB1bml0QWJiciA9PSBcIumSn1wiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5ob3VyID0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBhZGREdXJhdGlvbihjb250ZXh0LnJlZkRhdGUsIGR1cmF0aW9uKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgZGF0ZS5nZXRIb3VycygpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1pbnV0ZVwiLCBkYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJzZWNvbmRcIiwgZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgV0VFS0RBWV9PRkZTRVQgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/PHByZWZpeD7kuIp85LiLfOi/mSkoPzrkuKopPyg/OuaYn+acn3znpLzmi5x85ZGoKSg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIilcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNSZWxhdGlvbldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoLmdyb3Vwcy5wcmVmaXg7XG4gICAgICAgIGlmIChwcmVmaXggPT0gXCLkuIpcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLkuItcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLov5lcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGxldCBzdGFydE1vbWVudEZpeGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlZk9mZnNldCA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcImxhc3RcIiB8fCBtb2RpZmllciA9PSBcInBhc3RcIikge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgKG9mZnNldCAtIDcgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgICAgIHN0YXJ0TW9tZW50Rml4ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyID09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAob2Zmc2V0ICsgNyAtIHJlZk9mZnNldCkpO1xuICAgICAgICAgICAgc3RhcnRNb21lbnRGaXhlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXIgPT0gXCJ0aGlzXCIpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIChvZmZzZXQgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkaWZmID0gb2Zmc2V0IC0gcmVmT2Zmc2V0O1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgLSA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiAtPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgKyA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiArPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgb2Zmc2V0KTtcbiAgICAgICAgaWYgKHN0YXJ0TW9tZW50Rml4ZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IEZJUlNUX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OuS7jnzoh6opP1wiICtcbiAgICBcIig/OlwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKOaXqXzmnJ185pmaKXxcIiArXG4gICAgXCIo5LiKKD865Y2IKXzml6koPzrkuIopfOS4iyg/OuWNiCl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpfFwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKD865pelfOWkqSlcIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KOS4iig/OuWNiCl85pepKD865LiKKXzkuIsoPzrljYgpfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKykoPzpcXFxccyopKD8654K5fOaXtnw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3zljYp85q2jfOaVtHxbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/OuWIhnw6fO+8mik/XCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgU0VDT05EX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Ol5cXFxccyooPzrliLB86IezfFxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnClcXFxccyopXCIgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlkI585aSn5ZCOfOaYqCko5pepfOacnXzmmZopfFwiICtcbiAgICBcIijkuIooPzrljYgpfOaXqSg/OuS4iil85LiLKD865Y2IKXzmmZooPzrkuIopfOWknCg/OuaZmik/fOS4rSg/OuWNiCl85YeMKD865pmoKSl8XCIgK1xuICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlkI585aSn5ZCOfOaYqCkoPzrml6V85aSpKVwiICtcbiAgICBcIig/OltcXFxccyzvvIxdKilcIiArXG4gICAgXCIoPzoo5LiKKD865Y2IKXzml6koPzrkuIopfOS4iyg/OuWNiCl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpKT9cIiArXG4gICAgXCIpP1wiICtcbiAgICBcIig/OltcXFxccyzvvIxdKilcIiArXG4gICAgXCIoPzooXFxcXGQrfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKSg/OlxcXFxzKikoPzrngrl85pe2fDp877yaKVwiICtcbiAgICBcIig/OlxcXFxzKilcIiArXG4gICAgXCIoXFxcXGQrfOWNinzmraN85pW0fFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD865YiGfDp877yaKT9cIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/Ouenkik/KVwiICtcbiAgICBcIig/OlxcXFxzKihBLk0ufFAuTS58QU0/fFBNPykpP1wiLCBcImlcIik7XG5jb25zdCBEQVlfR1JPVVBfMSA9IDE7XG5jb25zdCBaSF9BTV9QTV9IT1VSX0dST1VQXzEgPSAyO1xuY29uc3QgWkhfQU1fUE1fSE9VUl9HUk9VUF8yID0gMztcbmNvbnN0IERBWV9HUk9VUF8zID0gNDtcbmNvbnN0IFpIX0FNX1BNX0hPVVJfR1JPVVBfMyA9IDU7XG5jb25zdCBIT1VSX0dST1VQID0gNjtcbmNvbnN0IE1JTlVURV9HUk9VUCA9IDc7XG5jb25zdCBTRUNPTkRfR1JPVVAgPSA4O1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUCA9IDk7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBwYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gXCIoKVwiO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBGSVJTVF9SRUdfUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaC5pbmRleCA+IDAgJiYgY29udGV4dC50ZXh0W21hdGNoLmluZGV4IC0gMV0ubWF0Y2goL1xcdy8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnQgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBtYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVmZXJlbmNlLmluc3RhbnQuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5pioXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WQjlwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgc3RhcnRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBzdGFydE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLmmKhcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlkI5cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBzdGFydE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIHN0YXJ0TW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIHN0YXJ0TW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBob3VyID0gMDtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmQgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgICAgICAgIGhvdXIgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuato1wiIHx8IG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmlbRcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtID09IFwicFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzEgPSBtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgemhBTVBNMSA9IHpoQU1QTVN0cmluZzFbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMSA9PSBcIuaXqVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTEgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmcyID0gbWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8yXTtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pepXCIgfHwgemhBTVBNMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTIgPT0gXCLkuItcIiB8fCB6aEFNUE0yID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgemhBTVBNU3RyaW5nMyA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM107XG4gICAgICAgICAgICBjb25zdCB6aEFNUE0zID0gemhBTVBNU3RyaW5nM1swXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0zID09IFwi5LiKXCIgfHwgemhBTVBNMyA9PSBcIuaXqVwiIHx8IHpoQU1QTTMgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0zID09IFwi5LiLXCIgfHwgemhBTVBNMyA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBTRUNPTkRfUkVHX1BBVFRFUk4uZXhlYyhjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCkpO1xuICAgICAgICBpZiAoIXNlY29uZE1hdGNoKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbmRNb21lbnQgPSBuZXcgRGF0ZShzdGFydE1vbWVudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbREFZX0dST1VQXzFdIHx8IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgZW5kTW9tZW50ID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5lbmQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVmZXJlbmNlLmluc3RhbnQuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLliY1cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlkI5cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgKyAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKflkI5cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiZGF5XCIsIGVuZE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJtb250aFwiLCBlbmRNb21lbnQuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJ5ZWFyXCIsIGVuZE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBzZWNvbmRNYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWQjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WQjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kTW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcInllYXJcIiwgZW5kTW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcImRheVwiLCBlbmRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtb250aFwiLCBlbmRNb21lbnQuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcInllYXJcIiwgZW5kTW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGhvdXIgPSAwO1xuICAgICAgICBtaW51dGUgPSAwO1xuICAgICAgICBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IHNlY29uZCA9IHBhcnNlSW50KHNlY29uZE1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmQgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwic2Vjb25kXCIsIHNlY29uZCk7XG4gICAgICAgIH1cbiAgICAgICAgaG91ciA9IHBhcnNlSW50KHNlY29uZE1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgaWYgKGlzTmFOKGhvdXIpKSB7XG4gICAgICAgICAgICBob3VyID0gemhTdHJpbmdUb051bWJlcihzZWNvbmRNYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdID09IFwi5Y2KXCIpIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSAzMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmraNcIiB8fCBzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdID09IFwi5pW0XCIpIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWludXRlID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKG1pbnV0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWludXRlID0gemhTdHJpbmdUb051bWJlcihzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaG91ciA+IDEwMCkge1xuICAgICAgICAgICAgbWludXRlID0gaG91ciAlIDEwMDtcbiAgICAgICAgICAgIGhvdXIgPSBNYXRoLmZsb29yKGhvdXIgLyAxMDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID4gMjQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID49IDEyKSB7XG4gICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA+IDEyKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29uc3QgYW1wbSA9IHNlY29uZE1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcImFcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgIT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpICsgMTIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzEgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgemhBTVBNMSA9IHpoQU1QTVN0cmluZzFbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMSA9PSBcIuaXqVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTEgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmcyID0gc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8yXTtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pepXCIgfHwgemhBTVBNMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTIgPT0gXCLkuItcIiB8fCB6aEFNUE0yID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgemhBTVBNU3RyaW5nMyA9IHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM107XG4gICAgICAgICAgICBjb25zdCB6aEFNUE0zID0gemhBTVBNU3RyaW5nM1swXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0zID09IFwi5LiKXCIgfHwgemhBTVBNMyA9PSBcIuaXqVwiIHx8IHpoQU1QTTMgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0zID09IFwi5LiLXCIgfHwgemhBTVBNMyA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC50ZXh0ID0gcmVzdWx0LnRleHQgKyBzZWNvbmRNYXRjaFswXTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gPj0gMCkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEF0UE0gPSByZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikgJiYgcmVzdWx0LnN0YXJ0LmdldChcIm1lcmlkaWVtXCIpID09IDE7XG4gICAgICAgICAgICBpZiAoc3RhcnRBdFBNICYmIHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpID4gaG91cikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtZXJpZGllbVwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPiAxMikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0LmVuZC5kYXRlKCkuZ2V0VGltZSgpIDwgcmVzdWx0LnN0YXJ0LmRhdGUoKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJkYXlcIiwgcmVzdWx0LmVuZC5nZXQoXCJkYXlcIikgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgV0VFS0RBWV9PRkZTRVQgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OuaYn+acn3znpLzmi5x85ZGoKSg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIilcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3QgZGF5T2ZXZWVrID0gbWF0Y2guZ3JvdXBzLndlZWtkYXk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFdFRUtEQVlfT0ZGU0VUW2RheU9mV2Vla107XG4gICAgICAgIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0TW9tZW50Rml4ZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVmT2Zmc2V0ID0gZGF0ZS5nZXREYXkoKTtcbiAgICAgICAgbGV0IGRpZmYgPSBvZmZzZXQgLSByZWZPZmZzZXQ7XG4gICAgICAgIGlmIChNYXRoLmFicyhkaWZmIC0gNykgPCBNYXRoLmFicyhkaWZmKSkge1xuICAgICAgICAgICAgZGlmZiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChNYXRoLmFicyhkaWZmICsgNykgPCBNYXRoLmFicyhkaWZmKSkge1xuICAgICAgICAgICAgZGlmZiArPSA3O1xuICAgICAgICB9XG4gICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGRpZmYpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwid2Vla2RheVwiLCBvZmZzZXQpO1xuICAgICAgICBpZiAoc3RhcnRNb21lbnRGaXhlZCkge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW5zV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IE5PV19HUk9VUCA9IDE7XG5jb25zdCBEQVlfR1JPVVBfMSA9IDI7XG5jb25zdCBUSU1FX0dST1VQXzEgPSAzO1xuY29uc3QgVElNRV9HUk9VUF8yID0gNDtcbmNvbnN0IERBWV9HUk9VUF8zID0gNTtcbmNvbnN0IFRJTUVfR1JPVVBfMyA9IDY7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiKOiAjOWutnznq4soPzrliLt85Y2zKXzljbPliLspfFwiICtcbiAgICAgICAgICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlvox85aSn5b6MfOiBvXzmmKh85bCLfOeQtCko5pepfOacnXzmmZopfFwiICtcbiAgICAgICAgICAgIFwiKOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKXxcIiArXG4gICAgICAgICAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKD865pelfOWkqSlcIiArXG4gICAgICAgICAgICBcIig/OltcXFxcc3wsfO+8jF0qKVwiICtcbiAgICAgICAgICAgIFwiKD86KOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChpbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCByZWZEYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKG1hdGNoW05PV19HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgcmVmRGF0ZS5nZXRIb3VycygpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1pbnV0ZVwiLCByZWZEYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJzZWNvbmRcIiwgcmVmRGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgcmVmRGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbREFZX0dST1VQXzFdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXkxID0gbWF0Y2hbREFZX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgdGltZTEgPSBtYXRjaFtUSU1FX0dST1VQXzFdO1xuICAgICAgICAgICAgaWYgKGRheTEgPT0gXCLmmI5cIiB8fCBkYXkxID09IFwi6IG9XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVmRGF0ZS5nZXRIb3VycygpID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5pioXCIgfHwgZGF5MSA9PSBcIuWwi1wiIHx8IGRheTEgPT0gXCLnkLRcIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlvoxcIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+W+jFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGltZTEgPT0gXCLml6lcIiB8fCB0aW1lMSA9PSBcIuacnVwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUxID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtUSU1FX0dST1VQXzJdKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lU3RyaW5nMiA9IG1hdGNoW1RJTUVfR1JPVVBfMl07XG4gICAgICAgICAgICBjb25zdCB0aW1lMiA9IHRpbWVTdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHRpbWUyID09IFwi5pepXCIgfHwgdGltZTIgPT0gXCLmnJ1cIiB8fCB0aW1lMiA9PSBcIuS4ilwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUyID09IFwi5LiLXCIgfHwgdGltZTIgPT0gXCLmmY9cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLkuK1cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLlpJxcIiB8fCB0aW1lMiA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiIHx8IGRheTMgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIGlmIChyZWZEYXRlLmdldEhvdXJzKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLmmKhcIiB8fCBkYXkzID09IFwi5bCLXCIgfHwgZGF5MyA9PSBcIueQtFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuW+jFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmczID0gbWF0Y2hbVElNRV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmICh0aW1lU3RyaW5nMykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWUzID0gdGltZVN0cmluZzNbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRpbWUzID09IFwi5pepXCIgfHwgdGltZTMgPT0gXCLmnJ1cIiB8fCB0aW1lMyA9PSBcIuS4ilwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5LiLXCIgfHwgdGltZTMgPT0gXCLmmY9cIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5LitXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lMyA9PSBcIuWknFwiIHx8IHRpbWUzID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lMyA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50Q2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJleHBvcnQgY29uc3QgTlVNQkVSID0ge1xuICAgIFwi6Zu2XCI6IDAsXG4gICAgXCLkuIBcIjogMSxcbiAgICBcIuS6jFwiOiAyLFxuICAgIFwi5YWpXCI6IDIsXG4gICAgXCLkuIlcIjogMyxcbiAgICBcIuWbm1wiOiA0LFxuICAgIFwi5LqUXCI6IDUsXG4gICAgXCLlha1cIjogNixcbiAgICBcIuS4g1wiOiA3LFxuICAgIFwi5YWrXCI6IDgsXG4gICAgXCLkuZ1cIjogOSxcbiAgICBcIuWNgVwiOiAxMCxcbiAgICBcIuW7v1wiOiAyMCxcbiAgICBcIuWNhVwiOiAzMCxcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9PRkZTRVQgPSB7XG4gICAgXCLlpKlcIjogMCxcbiAgICBcIuaXpVwiOiAwLFxuICAgIFwi5LiAXCI6IDEsXG4gICAgXCLkuoxcIjogMixcbiAgICBcIuS4iVwiOiAzLFxuICAgIFwi5ZubXCI6IDQsXG4gICAgXCLkupRcIjogNSxcbiAgICBcIuWFrVwiOiA2LFxufTtcbmV4cG9ydCBmdW5jdGlvbiB6aFN0cmluZ1RvTnVtYmVyKHRleHQpIHtcbiAgICBsZXQgbnVtYmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHRbaV07XG4gICAgICAgIGlmIChjaGFyID09PSBcIuWNgVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPT09IDAgPyBOVU1CRVJbY2hhcl0gOiBudW1iZXIgKiBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gTlVNQkVSW2NoYXJdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW1iZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gemhTdHJpbmdUb1llYXIodGV4dCkge1xuICAgIGxldCBzdHJpbmcgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGFyID0gdGV4dFtpXTtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nICsgTlVNQkVSW2NoYXJdO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciwgemhTdHJpbmdUb1llYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBZRUFSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMjtcbmNvbnN0IERBWV9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnREYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsyLDR9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICsgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICsgXCJdezR9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICsgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICsgXCJdezJ9XCIgK1xuICAgICAgICAgICAgXCIpP1wiICtcbiAgICAgICAgICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICAgICAgICAgIFwiKD865bm0KT9cIiArXG4gICAgICAgICAgICBcIig/OltcXFxcc3wsfO+8jF0qKVwiICtcbiAgICAgICAgICAgIFwiKFwiICtcbiAgICAgICAgICAgIFwiXFxcXGR7MSwyfXxcIiArXG4gICAgICAgICAgICBcIltcIiArIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArIFwiXXsxLDJ9XCIgK1xuICAgICAgICAgICAgXCIpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoPzrmnIgpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsxLDJ9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICsgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICsgXCJdezEsMn1cIiArXG4gICAgICAgICAgICBcIik/XCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoPzrml6V86JmfKT9cIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgbGV0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbTU9OVEhfR1JPVVBdKTtcbiAgICAgICAgaWYgKGlzTmFOKG1vbnRoKSlcbiAgICAgICAgICAgIG1vbnRoID0gemhTdHJpbmdUb051bWJlcihtYXRjaFtNT05USF9HUk9VUF0pO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbREFZX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBWV9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKGRheSkpXG4gICAgICAgICAgICAgICAgZGF5ID0gemhTdHJpbmdUb051bWJlcihtYXRjaFtEQVlfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGxldCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHllYXIpKVxuICAgICAgICAgICAgICAgIHllYXIgPSB6aFN0cmluZ1RvWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgY29udGV4dC5yZWZEYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50RGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFkZER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgeyBOVU1CRVIsIHpoU3RyaW5nVG9OdW1iZXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSt85Y2KfOW5vikoPzpcXFxccyopXCIgK1xuICAgIFwiKD865YCLKT9cIiArXG4gICAgXCIo56eSKD866ZCYKT985YiG6ZCYfOWwj+aZgnzpkJh85pelfOWkqXzmmJ/mnJ9856au5oucfOaciHzlubQpXCIgK1xuICAgIFwiKD86KD865LmLfOmBjik/5b6MfCg/OuS5iyk/5YWnKVwiLCBcImlcIik7XG5jb25zdCBOVU1CRVJfR1JPVVAgPSAxO1xuY29uc3QgVU5JVF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGxldCBudW1iZXIgPSBwYXJzZUludChtYXRjaFtOVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgIG51bWJlciA9IHpoU3RyaW5nVG9OdW1iZXIobWF0Y2hbTlVNQkVSX0dST1VQXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZyA9IG1hdGNoW05VTUJFUl9HUk9VUF07XG4gICAgICAgICAgICBpZiAoc3RyaW5nID09PSBcIuW5vlwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG51bWJlciA9IDAuNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0ge307XG4gICAgICAgIGNvbnN0IHVuaXQgPSBtYXRjaFtVTklUX0dST1VQXTtcbiAgICAgICAgY29uc3QgdW5pdEFiYnIgPSB1bml0WzBdO1xuICAgICAgICBpZiAodW5pdEFiYnIubWF0Y2goL1vml6XlpKnmmJ/npq7mnIjlubRdLykpIHtcbiAgICAgICAgICAgIGlmICh1bml0QWJiciA9PSBcIuaXpVwiIHx8IHVuaXRBYmJyID09IFwi5aSpXCIpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi5kYXkgPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuaYn1wiIHx8IHVuaXRBYmJyID09IFwi56auXCIpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi53ZWVrID0gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLmnIhcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLm1vbnRoID0gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLlubRcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLnllYXIgPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gYWRkRHVyYXRpb24oY29udGV4dC5yZWZEYXRlLCBkdXJhdGlvbik7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bml0QWJiciA9PSBcIuenklwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5zZWNvbmQgPSBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLliIZcIikge1xuICAgICAgICAgICAgZHVyYXRpb24ubWludXRlID0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRBYmJyID09IFwi5bCPXCIgfHwgdW5pdEFiYnIgPT0gXCLpkJhcIikge1xuICAgICAgICAgICAgZHVyYXRpb24uaG91ciA9IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gYWRkRHVyYXRpb24oY29udGV4dC5yZWZEYXRlLCBkdXJhdGlvbik7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGRhdGUuZ2V0SG91cnMoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtaW51dGVcIiwgZGF0ZS5nZXRNaW51dGVzKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwic2Vjb25kXCIsIGRhdGUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IFdFRUtEQVlfT0ZGU0VUIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzxwcmVmaXg+5LiKfOS7inzkuIt86YCZfOWRoikoPzrlgIspPyg/OuaYn+acn3znpq7mi5x86YCxKSg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIilcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoLmdyb3Vwcy5wcmVmaXg7XG4gICAgICAgIGlmIChwcmVmaXggPT0gXCLkuIpcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLkuItcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLku4pcIiB8fCBwcmVmaXggPT0gXCLpgJlcIiB8fCBwcmVmaXggPT0gXCLlkaJcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGxldCBzdGFydE1vbWVudEZpeGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlZk9mZnNldCA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcImxhc3RcIiB8fCBtb2RpZmllciA9PSBcInBhc3RcIikge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgKG9mZnNldCAtIDcgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgICAgIHN0YXJ0TW9tZW50Rml4ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyID09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAob2Zmc2V0ICsgNyAtIHJlZk9mZnNldCkpO1xuICAgICAgICAgICAgc3RhcnRNb21lbnRGaXhlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXIgPT0gXCJ0aGlzXCIpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIChvZmZzZXQgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkaWZmID0gb2Zmc2V0IC0gcmVmT2Zmc2V0O1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgLSA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiAtPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgKyA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiArPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgb2Zmc2V0KTtcbiAgICAgICAgaWYgKHN0YXJ0TW9tZW50Rml4ZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFudFJlbGF0aW9uV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IEZJUlNUX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OueUsXzlvp586IeqKT9cIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCIo5LuKfOaYjnzliY185aSn5YmNfOW+jHzlpKflvox86IG9fOaYqHzlsIt855C0KSjml6l85pydfOaZmil8XCIgK1xuICAgIFwiKOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKXxcIiArXG4gICAgXCIo5LuKfOaYjnzliY185aSn5YmNfOW+jHzlpKflvox86IG9fOaYqHzlsIt855C0KSg/OuaXpXzlpKkpXCIgK1xuICAgIFwiKD86W1xcXFxzLO+8jF0qKVwiICtcbiAgICBcIig/OijkuIooPzrljYh85pmdKXzmnJ0oPzrml6kpfOaXqSg/OuS4iil85LiLKD865Y2IfOaZnSl85pmPKD865pmdKXzmmZooPzrkuIopfOWknCg/OuaZmik/fOS4rSg/OuWNiCl85YeMKD865pmoKSkpP1wiICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD86W1xcXFxzLO+8jF0qKVwiICtcbiAgICBcIig/OihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspKD86XFxcXHMqKSg/Oum7nnzmmYJ8OnzvvJopXCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt85Y2KfOato3zmlbR8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrliIZ8OnzvvJopP1wiICtcbiAgICBcIig/OlxcXFxzKilcIiArXG4gICAgXCIoXFxcXGQrfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD8656eSKT8pXCIgK1xuICAgIFwiKD86XFxcXHMqKEEuTS58UC5NLnxBTT98UE0/KSk/XCIsIFwiaVwiKTtcbmNvbnN0IFNFQ09ORF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpeXFxcXHMqKD865YiwfOiHs3xcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJwpXFxcXHMqKVwiICtcbiAgICBcIig/OlwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKOaXqXzmnJ185pmaKXxcIiArXG4gICAgXCIo5LiKKD865Y2IfOaZnSl85pydKD865pepKXzml6koPzrkuIopfOS4iyg/OuWNiHzmmZ0pfOaZjyg/OuaZnSl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpfFwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKD865pelfOWkqSlcIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKykoPzpcXFxccyopKD866buefOaZgnw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3zljYp85q2jfOaVtHxbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/OuWIhnw6fO+8mik/XCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgREFZX0dST1VQXzEgPSAxO1xuY29uc3QgWkhfQU1fUE1fSE9VUl9HUk9VUF8xID0gMjtcbmNvbnN0IFpIX0FNX1BNX0hPVVJfR1JPVVBfMiA9IDM7XG5jb25zdCBEQVlfR1JPVVBfMyA9IDQ7XG5jb25zdCBaSF9BTV9QTV9IT1VSX0dST1VQXzMgPSA1O1xuY29uc3QgSE9VUl9HUk9VUCA9IDY7XG5jb25zdCBNSU5VVEVfR1JPVVAgPSA3O1xuY29uc3QgU0VDT05EX0dST1VQID0gODtcbmNvbnN0IEFNX1BNX0hPVVJfR1JPVVAgPSA5O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFwiKClcIjtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gRklSU1RfUkVHX1BBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2guaW5kZXggPiAwICYmIGNvbnRleHQudGV4dFttYXRjaC5pbmRleCAtIDFdLm1hdGNoKC9cXHcvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAobWF0Y2hbREFZX0dST1VQXzFdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXkxID0gbWF0Y2hbREFZX0dST1VQXzFdO1xuICAgICAgICAgICAgaWYgKGRheTEgPT0gXCLmmI5cIiB8fCBkYXkxID09IFwi6IG9XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZWZEYXRlLmdldEhvdXJzKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuaYqFwiIHx8IGRheTEgPT0gXCLlsItcIiB8fCBkYXkxID09IFwi55C0XCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+W+jFwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgc3RhcnRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBzdGFydE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiIHx8IGRheTMgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5pioXCIgfHwgZGF5MyA9PSBcIuWwi1wiIHx8IGRheTMgPT0gXCLnkLRcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlvoxcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBzdGFydE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIHN0YXJ0TW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIHN0YXJ0TW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBob3VyID0gMDtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSkge1xuICAgICAgICAgICAgdmFyIHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmQgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgICAgICAgIGhvdXIgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuato1wiIHx8IG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmlbRcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB2YXIgYW1wbSA9IG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcImFcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdKSB7XG4gICAgICAgICAgICB2YXIgemhBTVBNU3RyaW5nMSA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV07XG4gICAgICAgICAgICB2YXIgemhBTVBNMSA9IHpoQU1QTVN0cmluZzFbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMSA9PSBcIuacnVwiIHx8IHpoQU1QTTEgPT0gXCLml6lcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0xID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8yXSkge1xuICAgICAgICAgICAgdmFyIHpoQU1QTVN0cmluZzIgPSBtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdO1xuICAgICAgICAgICAgdmFyIHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pydXCIgfHwgemhBTVBNMiA9PSBcIuaXqVwiIHx8IHpoQU1QTTIgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0yID09IFwi5LiLXCIgfHwgemhBTVBNMiA9PSBcIuaZj1wiIHx8IHpoQU1QTTIgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzNdKSB7XG4gICAgICAgICAgICB2YXIgemhBTVBNU3RyaW5nMyA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM107XG4gICAgICAgICAgICB2YXIgemhBTVBNMyA9IHpoQU1QTVN0cmluZzNbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMyA9PSBcIuS4ilwiIHx8IHpoQU1QTTMgPT0gXCLmnJ1cIiB8fCB6aEFNUE0zID09IFwi5pepXCIgfHwgemhBTVBNMyA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTMgPT0gXCLkuItcIiB8fCB6aEFNUE0zID09IFwi5pmPXCIgfHwgemhBTVBNMyA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBTRUNPTkRfUkVHX1BBVFRFUk4uZXhlYyhjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCkpO1xuICAgICAgICBpZiAoIXNlY29uZE1hdGNoKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbmRNb21lbnQgPSBuZXcgRGF0ZShzdGFydE1vbWVudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbREFZX0dST1VQXzFdIHx8IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgZW5kTW9tZW50ID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5lbmQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiIHx8IGRheTEgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlZkRhdGUuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIiB8fCBkYXkxID09IFwi5bCLXCIgfHwgZGF5MSA9PSBcIueQtFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuW+jFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+W+jFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kTW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcInllYXJcIiwgZW5kTW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgZGF5MyA9IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmIChkYXkzID09IFwi5piOXCIgfHwgZGF5MyA9PSBcIuiBvVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiIHx8IGRheTMgPT0gXCLlsItcIiB8fCBkYXkzID09IFwi55C0XCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwibW9udGhcIiwgZW5kTW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwieWVhclwiLCBlbmRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwiZGF5XCIsIGVuZE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwieWVhclwiLCBlbmRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaG91ciA9IDA7XG4gICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgIG1lcmlkaWVtID0gLTE7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtTRUNPTkRfR1JPVVBdKSB7XG4gICAgICAgICAgICBsZXQgc2Vjb25kID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oc2Vjb25kKSkge1xuICAgICAgICAgICAgICAgIHNlY29uZCA9IHpoU3RyaW5nVG9OdW1iZXIoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgICAgICAgIGhvdXIgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuato1wiIHx8IHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmlbRcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB2YXIgYW1wbSA9IHNlY29uZE1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcImFcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgIT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpICsgMTIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzEgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdO1xuICAgICAgICAgICAgdmFyIHpoQU1QTTEgPSB6aEFNUE1TdHJpbmcxWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTEgPT0gXCLmnJ1cIiB8fCB6aEFNUE0xID09IFwi5pepXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoemhBTVBNMSA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMl0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzIgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdO1xuICAgICAgICAgICAgdmFyIHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pydXCIgfHwgemhBTVBNMiA9PSBcIuaXqVwiIHx8IHpoQU1QTTIgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0yID09IFwi5LiLXCIgfHwgemhBTVBNMiA9PSBcIuaZj1wiIHx8IHpoQU1QTTIgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzNdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmczID0gc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXTtcbiAgICAgICAgICAgIHZhciB6aEFNUE0zID0gemhBTVBNU3RyaW5nM1swXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0zID09IFwi5LiKXCIgfHwgemhBTVBNMyA9PSBcIuacnVwiIHx8IHpoQU1QTTMgPT0gXCLml6lcIiB8fCB6aEFNUE0zID09IFwi5YeMXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoemhBTVBNMyA9PSBcIuS4i1wiIHx8IHpoQU1QTTMgPT0gXCLmmY9cIiB8fCB6aEFNUE0zID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnRleHQgPSByZXN1bHQudGV4dCArIHNlY29uZE1hdGNoWzBdO1xuICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImhvdXJcIiwgaG91cik7XG4gICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0QXRQTSA9IHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSAmJiByZXN1bHQuc3RhcnQuZ2V0KFwibWVyaWRpZW1cIikgPT0gMTtcbiAgICAgICAgICAgIGlmIChzdGFydEF0UE0gJiYgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgPiBob3VyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQuZW5kLmRhdGUoKS5nZXRUaW1lKCkgPCByZXN1bHQuc3RhcnQuZGF0ZSgpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcImRheVwiLCByZXN1bHQuZW5kLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBXRUVLREFZX09GRlNFVCB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD865pif5pyffOemruaLnHzpgLEpKD88d2Vla2RheT5cIiArIE9iamVjdC5rZXlzKFdFRUtEQVlfT0ZGU0VUKS5qb2luKFwifFwiKSArIFwiKVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFudFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnRGaXhlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCByZWZPZmZzZXQgPSBkYXRlLmdldERheSgpO1xuICAgICAgICBsZXQgZGlmZiA9IG9mZnNldCAtIHJlZk9mZnNldDtcbiAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgLSA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICBkaWZmIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgKyA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICBkaWZmICs9IDc7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ3ZWVrZGF5XCIsIG9mZnNldCk7XG4gICAgICAgIGlmIChzdGFydE1vbWVudEZpeGVkKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnRXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo6IezfOWIsHxcXC18XFx+fO+9nnzvvI1844O8KVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0V4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgWkhIYW50Q2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFudENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnREYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW50RGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW50RGVhZGxpbmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFudFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50V2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFudFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBoYW50ID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKCk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgWkhIYW50Q2FzdWFsRGF0ZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uKHtcbiAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgbmV3IFpISGFudERhdGVQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnRXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIoKSwgbmV3IFpISGFudE1lcmdlRGF0ZVRpbWVSZWZpbmVyKCldLFxuICAgIH0pO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMgPSBjb25maWd1cmF0aW9uLnJlZmluZXJzLmZpbHRlcigocmVmaW5lcikgPT4gIShyZWZpbmVyIGluc3RhbmNlb2YgRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lcikpO1xuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBOT1dfR1JPVVAgPSAxO1xuY29uc3QgREFZX0dST1VQXzEgPSAyO1xuY29uc3QgVElNRV9HUk9VUF8xID0gMztcbmNvbnN0IFRJTUVfR1JPVVBfMiA9IDQ7XG5jb25zdCBEQVlfR1JPVVBfMyA9IDU7XG5jb25zdCBUSU1FX0dST1VQXzMgPSA2O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW5zQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIijnjrDlnKh856uLKD865Yi7fOWNsyl85Y2z5Yi7KXxcIiArXG4gICAgICAgICAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKOaXqXzmmZopfFwiICtcbiAgICAgICAgICAgIFwiKOS4iig/OuWNiCl85pepKD865LiKKXzkuIsoPzrljYgpfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKXxcIiArXG4gICAgICAgICAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKD865pelfOWkqSlcIiArXG4gICAgICAgICAgICBcIig/OltcXFxcc3wsfO+8jF0qKVwiICtcbiAgICAgICAgICAgIFwiKD86KOS4iig/OuWNiCl85pepKD865LiKKXzkuIsoPzrljYgpfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChpbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCByZWZEYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKG1hdGNoW05PV19HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgcmVmRGF0ZS5nZXRIb3VycygpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1pbnV0ZVwiLCByZWZEYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJzZWNvbmRcIiwgcmVmRGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgcmVmRGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbREFZX0dST1VQXzFdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXkxID0gbWF0Y2hbREFZX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgdGltZTEgPSBtYXRjaFtUSU1FX0dST1VQXzFdO1xuICAgICAgICAgICAgaWYgKGRheTEgPT0gXCLmmI5cIikge1xuICAgICAgICAgICAgICAgIGlmIChyZWZEYXRlLmdldEhvdXJzKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlkI5cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WQjlwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGltZTEgPT0gXCLml6lcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMSA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbVElNRV9HUk9VUF8yXSkge1xuICAgICAgICAgICAgY29uc3QgdGltZVN0cmluZzIgPSBtYXRjaFtUSU1FX0dST1VQXzJdO1xuICAgICAgICAgICAgY29uc3QgdGltZTIgPSB0aW1lU3RyaW5nMlswXTtcbiAgICAgICAgICAgIGlmICh0aW1lMiA9PSBcIuaXqVwiIHx8IHRpbWUyID09IFwi5LiKXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLkuItcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLkuK1cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLlpJxcIiB8fCB0aW1lMiA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZkRhdGUuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWQjlwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmczID0gbWF0Y2hbVElNRV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmICh0aW1lU3RyaW5nMykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWUzID0gdGltZVN0cmluZzNbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRpbWUzID09IFwi5pepXCIgfHwgdGltZTMgPT0gXCLkuIpcIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lMyA9PSBcIuS4i1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGltZTMgPT0gXCLkuK1cIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5aScXCIgfHwgdGltZTMgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5YeMXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnNDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo6IezfOWIsHwtfH58772efO+8jXzjg7wpXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnNNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lci5qc1wiO1xuaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBaSEhhbnNDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW5zQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc0RhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnNEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zRGVhZGxpbmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnNXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW5zV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc01lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9aSEhhbnNNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBaSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9aSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGhhbnMgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBaSEhhbnNDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgWkhIYW5zRGF0ZVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1dlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFpISGFuc01lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLCBuZXcgWkhIYW5zTWVyZ2VEYXRlVGltZVJlZmluZXIoKV0sXG4gICAgfSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycyA9IGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMuZmlsdGVyKChyZWZpbmVyKSA9PiAhKHJlZmluZXIgaW5zdGFuY2VvZiBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyKSk7XG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IEV4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzXCI7XG5pbXBvcnQgWkhIYW5zRGF0ZVBhcnNlciBmcm9tIFwiLi9oYW5zL3BhcnNlcnMvWkhIYW5zRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyIGZyb20gXCIuL2hhbnMvcGFyc2Vycy9aSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlciBmcm9tIFwiLi9oYW5zL3BhcnNlcnMvWkhIYW5zUmVsYXRpb25XZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vaGFucy9wYXJzZXJzL1pISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zV2Vla2RheVBhcnNlciBmcm9tIFwiLi9oYW5zL3BhcnNlcnMvWkhIYW5zV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudENhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vaGFudC9wYXJzZXJzL1pISGFudENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnREYXRlUGFyc2VyIGZyb20gXCIuL2hhbnQvcGFyc2Vycy9aSEhhbnREYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50RGVhZGxpbmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vaGFudC9wYXJzZXJzL1pISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50UmVsYXRpb25XZWVrZGF5UGFyc2VyIGZyb20gXCIuL2hhbnQvcGFyc2Vycy9aSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9oYW50L3BhcnNlcnMvWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRXZWVrZGF5UGFyc2VyIGZyb20gXCIuL2hhbnQvcGFyc2Vycy9aSEhhbnRXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL2hhbnQvcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vaGFudC9yZWZpbmVycy9aSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0ICogYXMgaGFudCBmcm9tIFwiLi9oYW50L2luZGV4LmpzXCI7XG5leHBvcnQgKiBhcyBoYW5zIGZyb20gXCIuL2hhbnMvaW5kZXguanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbigpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFpISGFudENhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBaSEhhbnREYXRlUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW5zRGF0ZVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudFJlbGF0aW9uV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW5zRGVhZGxpbmVGb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCksIG5ldyBaSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICB9KTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzID0gY29uZmlndXJhdGlvbi5yZWZpbmVycy5maWx0ZXIoKHJlZmluZXIpID0+ICEocmVmaW5lciBpbnN0YW5jZW9mIEV4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIpKTtcbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBSRUdFWF9QQVJUUyA9IHtcbiAgICBsZWZ0Qm91bmRhcnk6IFwiKFteXFxcXHB7TH1cXFxccHtOfV9dfF4pXCIsXG4gICAgcmlnaHRCb3VuZGFyeTogXCIoPz1bXlxcXFxwe0x9XFxcXHB7Tn1fXXwkKVwiLFxuICAgIGZsYWdzOiBcIml1XCIsXG59O1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICDQstC+0YHQutGA0LXRgdC10L3RjNC1OiAwLFxuICAgINCy0L7RgdC60YDQtdGB0LXQvdGM0Y86IDAsXG4gICAg0LLRgdC6OiAwLFxuICAgIFwi0LLRgdC6LlwiOiAwLFxuICAgINC/0L7QvdC10LTQtdC70YzQvdC40Lo6IDEsXG4gICAg0L/QvtC90LXQtNC10LvRjNC90LjQutCwOiAxLFxuICAgINC/0L06IDEsXG4gICAgXCLQv9C9LlwiOiAxLFxuICAgINCy0YLQvtGA0L3QuNC6OiAyLFxuICAgINCy0YLQvtGA0L3QuNC60LA6IDIsXG4gICAg0LLRgjogMixcbiAgICBcItCy0YIuXCI6IDIsXG4gICAg0YHRgNC10LTQsDogMyxcbiAgICDRgdGA0LXQtNGLOiAzLFxuICAgINGB0YDQtdC00YM6IDMsXG4gICAg0YHRgDogMyxcbiAgICBcItGB0YAuXCI6IDMsXG4gICAg0YfQtdGC0LLQtdGA0LM6IDQsXG4gICAg0YfQtdGC0LLQtdGA0LPQsDogNCxcbiAgICDRh9GCOiA0LFxuICAgIFwi0YfRgi5cIjogNCxcbiAgICDQv9GP0YLQvdC40YbQsDogNSxcbiAgICDQv9GP0YLQvdC40YbRgzogNSxcbiAgICDQv9GP0YLQvdC40YbRizogNSxcbiAgICDQv9GCOiA1LFxuICAgIFwi0L/Rgi5cIjogNSxcbiAgICDRgdGD0LHQsdC+0YLQsDogNixcbiAgICDRgdGD0LHQsdC+0YLRgzogNixcbiAgICDRgdGD0LHQsdC+0YLRizogNixcbiAgICDRgdCxOiA2LFxuICAgIFwi0YHQsS5cIjogNixcbn07XG5leHBvcnQgY29uc3QgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlkgPSB7XG4gICAg0Y/QvdCy0LDRgNGMOiAxLFxuICAgINGP0L3QstCw0YDRjzogMSxcbiAgICDRj9C90LLQsNGA0LU6IDEsXG4gICAg0YTQtdCy0YDQsNC70Yw6IDIsXG4gICAg0YTQtdCy0YDQsNC70Y86IDIsXG4gICAg0YTQtdCy0YDQsNC70LU6IDIsXG4gICAg0LzQsNGA0YI6IDMsXG4gICAg0LzQsNGA0YLQsDogMyxcbiAgICDQvNCw0YDRgtC1OiAzLFxuICAgINCw0L/RgNC10LvRjDogNCxcbiAgICDQsNC/0YDQtdC70Y86IDQsXG4gICAg0LDQv9GA0LXQu9C1OiA0LFxuICAgINC80LDQuTogNSxcbiAgICDQvNCw0Y86IDUsXG4gICAg0LzQsNC1OiA1LFxuICAgINC40Y7QvdGMOiA2LFxuICAgINC40Y7QvdGPOiA2LFxuICAgINC40Y7QvdC1OiA2LFxuICAgINC40Y7Qu9GMOiA3LFxuICAgINC40Y7Qu9GPOiA3LFxuICAgINC40Y7Qu9C1OiA3LFxuICAgINCw0LLQs9GD0YHRgjogOCxcbiAgICDQsNCy0LPRg9GB0YLQsDogOCxcbiAgICDQsNCy0LPRg9GB0YLQtTogOCxcbiAgICDRgdC10L3RgtGP0LHRgNGMOiA5LFxuICAgINGB0LXQvdGC0Y/QsdGA0Y86IDksXG4gICAg0YHQtdC90YLRj9Cx0YDQtTogOSxcbiAgICDQvtC60YLRj9Cx0YDRjDogMTAsXG4gICAg0L7QutGC0Y/QsdGA0Y86IDEwLFxuICAgINC+0LrRgtGP0LHRgNC1OiAxMCxcbiAgICDQvdC+0Y/QsdGA0Yw6IDExLFxuICAgINC90L7Rj9Cx0YDRjzogMTEsXG4gICAg0L3QvtGP0LHRgNC1OiAxMSxcbiAgICDQtNC10LrQsNCx0YDRjDogMTIsXG4gICAg0LTQtdC60LDQsdGA0Y86IDEyLFxuICAgINC00LXQutCw0LHRgNC1OiAxMixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICDRj9C90LI6IDEsXG4gICAgXCLRj9C90LIuXCI6IDEsXG4gICAg0YTQtdCyOiAyLFxuICAgIFwi0YTQtdCyLlwiOiAyLFxuICAgINC80LDRgDogMyxcbiAgICBcItC80LDRgC5cIjogMyxcbiAgICDQsNC/0YA6IDQsXG4gICAgXCLQsNC/0YAuXCI6IDQsXG4gICAg0LDQstCzOiA4LFxuICAgIFwi0LDQstCzLlwiOiA4LFxuICAgINGB0LXQvTogOSxcbiAgICBcItGB0LXQvS5cIjogOSxcbiAgICDQvtC60YI6IDEwLFxuICAgIFwi0L7QutGCLlwiOiAxMCxcbiAgICDQvdC+0Y86IDExLFxuICAgIFwi0L3QvtGPLlwiOiAxMSxcbiAgICDQtNC10Lo6IDEyLFxuICAgIFwi0LTQtdC6LlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAg0L7QtNC40L06IDEsXG4gICAg0L7QtNC90LA6IDEsXG4gICAg0L7QtNC90L7QuTogMSxcbiAgICDQvtC00L3RgzogMSxcbiAgICDQtNCy0LU6IDIsXG4gICAg0LTQstCwOiAyLFxuICAgINC00LLRg9GFOiAyLFxuICAgINGC0YDQuDogMyxcbiAgICDRgtGA0LXRhTogMyxcbiAgICDRgtGA0ZHRhTogMyxcbiAgICDRh9C10YLRi9GA0LU6IDQsXG4gICAg0YfQtdGC0YvRgNC10YU6IDQsXG4gICAg0YfQtdGC0YvRgNGR0YU6IDQsXG4gICAg0L/Rj9GC0Yw6IDUsXG4gICAg0L/Rj9GC0Lg6IDUsXG4gICAg0YjQtdGB0YLRjDogNixcbiAgICDRiNC10YHRgtC4OiA2LFxuICAgINGB0LXQvNGMOiA3LFxuICAgINGB0LXQvNC4OiA3LFxuICAgINCy0L7RgdC10LzRjDogOCxcbiAgICDQstC+0YHRjNC80Lg6IDgsXG4gICAg0LTQtdCy0Y/RgtGMOiA5LFxuICAgINC00LXQstGP0YLQuDogOSxcbiAgICDQtNC10YHRj9GC0Yw6IDEwLFxuICAgINC00LXRgdGP0YLQuDogMTAsXG4gICAg0L7QtNC40L3QvdCw0LTRhtCw0YLRjDogMTEsXG4gICAg0L7QtNC40L3QvdCw0LTRhtCw0YLQuDogMTEsXG4gICAg0LTQstC10L3QsNC00YbQsNGC0Yw6IDEyLFxuICAgINC00LLQtdC90LDQtNGG0LDRgtC4OiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAg0L/QtdGA0LLQvtC1OiAxLFxuICAgINC/0LXRgNCy0L7Qs9C+OiAxLFxuICAgINCy0YLQvtGA0L7QtTogMixcbiAgICDQstGC0L7RgNC+0LPQvjogMixcbiAgICDRgtGA0LXRgtGM0LU6IDMsXG4gICAg0YLRgNC10YLRjNC10LPQvjogMyxcbiAgICDRh9C10YLQstC10YDRgtC+0LU6IDQsXG4gICAg0YfQtdGC0LLQtdGA0YLQvtCz0L46IDQsXG4gICAg0L/Rj9GC0L7QtTogNSxcbiAgICDQv9GP0YLQvtCz0L46IDUsXG4gICAg0YjQtdGB0YLQvtC1OiA2LFxuICAgINGI0LXRgdGC0L7Qs9C+OiA2LFxuICAgINGB0LXQtNGM0LzQvtC1OiA3LFxuICAgINGB0LXQtNGM0LzQvtCz0L46IDcsXG4gICAg0LLQvtGB0YzQvNC+0LU6IDgsXG4gICAg0LLQvtGB0YzQvNC+0LPQvjogOCxcbiAgICDQtNC10LLRj9GC0L7QtTogOSxcbiAgICDQtNC10LLRj9GC0L7Qs9C+OiA5LFxuICAgINC00LXRgdGP0YLQvtC1OiAxMCxcbiAgICDQtNC10YHRj9GC0L7Qs9C+OiAxMCxcbiAgICDQvtC00LjQvdC90LDQtNGG0LDRgtC+0LU6IDExLFxuICAgINC+0LTQuNC90L3QsNC00YbQsNGC0L7Qs9C+OiAxMSxcbiAgICDQtNCy0LXQvdCw0LTRhtCw0YLQvtC1OiAxMixcbiAgICDQtNCy0LXQvdCw0LTRhtCw0YLQvtCz0L46IDEyLFxuICAgINGC0YDQuNC90LDQtNGG0LDRgtC+0LU6IDEzLFxuICAgINGC0YDQuNC90LDQtNGG0LDRgtC+0LPQvjogMTMsXG4gICAg0YfQtdGC0YvRgNC90LDQtNGG0LDRgtC+0LU6IDE0LFxuICAgINGH0LXRgtGL0YDQvdCw0LTRhtCw0YLQvtCz0L46IDE0LFxuICAgINC/0Y/RgtC90LDQtNGG0LDRgtC+0LU6IDE1LFxuICAgINC/0Y/RgtC90LDQtNGG0LDRgtC+0LPQvjogMTUsXG4gICAg0YjQtdGB0YLQvdCw0LTRhtCw0YLQvtC1OiAxNixcbiAgICDRiNC10YHRgtC90LDQtNGG0LDRgtC+0LPQvjogMTYsXG4gICAg0YHQtdC80L3QsNC00YbQsNGC0L7QtTogMTcsXG4gICAg0YHQtdC80L3QsNC00YbQsNGC0L7Qs9C+OiAxNyxcbiAgICDQstC+0YHQtdC80L3QsNC00YbQsNGC0L7QtTogMTgsXG4gICAg0LLQvtGB0LXQvNC90LDQtNGG0LDRgtC+0LPQvjogMTgsXG4gICAg0LTQtdCy0Y/RgtC90LDQtNGG0LDRgtC+0LU6IDE5LFxuICAgINC00LXQstGP0YLQvdCw0LTRhtCw0YLQvtCz0L46IDE5LFxuICAgINC00LLQsNC00YbQsNGC0L7QtTogMjAsXG4gICAg0LTQstCw0LTRhtCw0YLQvtCz0L46IDIwLFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQv9C10YDQstC+0LVcIjogMjEsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC/0LXRgNCy0L7Qs9C+XCI6IDIxLFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQstGC0L7RgNC+0LVcIjogMjIsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINCy0YLQvtGA0L7Qs9C+XCI6IDIyLFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDRgtGA0LXRgtGM0LVcIjogMjMsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGC0YDQtdGC0YzQtdCz0L5cIjogMjMsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGH0LXRgtCy0LXRgNGC0L7QtVwiOiAyNCxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YfQtdGC0LLQtdGA0YLQvtCz0L5cIjogMjQsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC/0Y/RgtC+0LVcIjogMjUsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC/0Y/RgtC+0LPQvlwiOiAyNSxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YjQtdGB0YLQvtC1XCI6IDI2LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDRiNC10YHRgtC+0LPQvlwiOiAyNixcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YHQtdC00YzQvNC+0LVcIjogMjcsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGB0LXQtNGM0LzQvtCz0L5cIjogMjcsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINCy0L7RgdGM0LzQvtC1XCI6IDI4LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQstC+0YHRjNC80L7Qs9C+XCI6IDI4LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQtNC10LLRj9GC0L7QtVwiOiAyOSxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0LTQtdCy0Y/RgtC+0LPQvlwiOiAyOSxcbiAgICBcItGC0YDQuNC00YbQsNGC0L7QtVwiOiAzMCxcbiAgICBcItGC0YDQuNC00YbQsNGC0L7Qs9C+XCI6IDMwLFxuICAgIFwi0YLRgNC40LTRhtCw0YLRjCDQv9C10YDQstC+0LVcIjogMzEsXG4gICAgXCLRgtGA0LjQtNGG0LDRgtGMINC/0LXRgNCy0L7Qs9C+XCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICDRgdC10Lo6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00LA6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC0OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNGLOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNGDOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutCwOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutC4OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQtdC6OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutGDOiBcInNlY29uZFwiLFxuICAgINC80LjQvTogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0LA6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgjogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0Ys6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgtGDOiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQvtC6OiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQutC4OiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQutGDOiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQvtGH0LXQujogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0L7Rh9C60Lg6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgtC+0YfQutGDOiBcIm1pbnV0ZVwiLFxuICAgINGH0LDRgTogXCJob3VyXCIsXG4gICAg0YfQsNGB0L7QsjogXCJob3VyXCIsXG4gICAg0YfQsNGB0LA6IFwiaG91clwiLFxuICAgINGH0LDRgdGDOiBcImhvdXJcIixcbiAgICDRh9Cw0YHQuNC60L7QsjogXCJob3VyXCIsXG4gICAg0YfQsNGB0LjQutCwOiBcImhvdXJcIixcbiAgICDRh9Cw0YHQuNC60LU6IFwiaG91clwiLFxuICAgINGH0LDRgdC40Lo6IFwiaG91clwiLFxuICAgINC00LXQvdGMOiBcImRheVwiLFxuICAgINC00L3RjzogXCJkYXlcIixcbiAgICDQtNC90LXQuTogXCJkYXlcIixcbiAgICDRgdGD0YLQvtC6OiBcImRheVwiLFxuICAgINGB0YPRgtC60Lg6IFwiZGF5XCIsXG4gICAg0L3QtdC00LXQu9GPOiBcIndlZWtcIixcbiAgICDQvdC10LTQtdC70LU6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvQuDogXCJ3ZWVrXCIsXG4gICAg0L3QtdC00LXQu9GOOiBcIndlZWtcIixcbiAgICDQvdC10LTQtdC70Yw6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvRjNC60LU6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvRjNC60Lg6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvQtdC6OiBcIndlZWtcIixcbiAgICDQvNC10YHRj9GGOiBcIm1vbnRoXCIsXG4gICAg0LzQtdGB0Y/RhtC1OiBcIm1vbnRoXCIsXG4gICAg0LzQtdGB0Y/RhtC10LI6IFwibW9udGhcIixcbiAgICDQvNC10YHRj9GG0LA6IFwibW9udGhcIixcbiAgICDQutCy0LDRgNGC0LDQuzogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvQtTogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvQvtCyOiBcInF1YXJ0ZXJcIixcbiAgICDQs9C+0LQ6IFwieWVhclwiLFxuICAgINCz0L7QtNCwOiBcInllYXJcIixcbiAgICDQs9C+0LTRgzogXCJ5ZWFyXCIsXG4gICAg0LPQvtC00L7QsjogXCJ5ZWFyXCIsXG4gICAg0LvQtdGCOiBcInllYXJcIixcbiAgICDQs9C+0LTQuNC6OiBcInllYXJcIixcbiAgICDQs9C+0LTQuNC60LA6IFwieWVhclwiLFxuICAgINCz0L7QtNC40LrQvtCyOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt80L/QvtC7fNC90LXRgdC60L7Qu9GM0LrQvnzQv9Cw0YAoPzrRi3zRgyl8XFxcXHN7MCwzfSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgaWYgKG51bS5tYXRjaCgv0L3QtdGB0LrQvtC70YzQutC+LykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgv0L/QvtC7LykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC/Qv9Cw0YAvKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtID09PSBcIlwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XXsxLDJ9KD860LPQvnzQvtCz0L580LV80L7QtSk/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5jb25zdCB5ZWFyID0gXCIoPzpcXFxccysoPzrQs9C+0LTRg3zQs9C+0LTQsHzQs9C+0LR80LN80LMuKSk/XCI7XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlsxLTldWzAtOV17MCwzfSR7eWVhcn1cXFxccyooPzrQvS7RjS580LTQviDQvS7RjS580L0uINGNLnzQtNC+INC9LiDRjS4pfFsxLTJdWzAtOV17M30ke3llYXJ9fFs1LTldWzAtOV0ke3llYXJ9KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC8o0LPQvtC0fNCz0L7QtNCwfNCzfNCzLikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjQs9C+0LR80LPQvtC00LB80LN80LMuKS9pLCBcIlwiKTtcbiAgICB9XG4gICAgaWYgKC8o0LTQviDQvS7RjS580LTQviDQvS4g0Y0uKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKNC00L4g0L0u0Y0ufNC00L4g0L0uINGNLikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBpZiAoLyjQvS4g0Y0ufNC9LtGNLikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjQvS4g0Y0ufNC9LtGNLikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDN9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYDtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUkVHRVggPSBuZXcgUmVnRXhwKFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiwgXCJpXCIpO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfUEFUVEVSTiA9IHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKGAoPzooPzrQvtC60L7Qu9C+fNC/0YDQuNC80LXRgNC90L4pXFxcXHN7MCwzfSk/YCwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBgKD86KD860L7QutC+0LvQvnzQv9GA0LjQvNC10YDQvdC+KVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkke1JFR0VYX1BBUlRTLnJpZ2h0Qm91bmRhcnl9YDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmxlZnRCb3VuZGFyeTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9uLmZvcndhcmREYXRlXG4gICAgICAgICAgICA/IG5ldyBSZWdFeHAoUEFUVEVSTiwgUkVHRVhfUEFSVFMuZmxhZ3MpXG4gICAgICAgICAgICA6IG5ldyBSZWdFeHAoYCg/OtCyINGC0LXRh9C10L3QuNC1fNCyINGC0LXRh9C10L3QuNC4KVxcXFxzKiR7UEFUVEVSTn1gLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5leHBvcnQgY2xhc3MgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmxlZnRCb3VuZGFyeTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodGhpcy5pbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCksIFJFR0VYX1BBUlRTLmZsYWdzKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuSGFzQ2hhbmdlKGNvbnRleHQsIGN1cnJlbnRJbm5lclBhdHRlcm4pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAke3RoaXMuaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpfSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGAoPzrRgSk/XFxcXHMqKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgICAgICAgICBgKD86YCArXG4gICAgICAgICAgICBgXFxcXHN7MCwzfSg/OtC/0L58LXzigJN80LTQvik/XFxcXHN7MCwzfWAgK1xuICAgICAgICAgICAgYCgke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KWAgK1xuICAgICAgICAgICAgYCk/YCArXG4gICAgICAgICAgICBgKD86LXxcXFxcL3xcXFxcc3swLDN9KD86b2YpP1xcXFxzezAsM30pYCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGAoPzotfFxcXFwvfCw/XFxcXHN7MCwzfSlgICtcbiAgICAgICAgICAgIGAoJHtZRUFSX1BBVFRFUk59KD8hW15cXFxcc11cXFxcZCkpYCArXG4gICAgICAgICAgICBgKT9gO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSwgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IFlFQVJfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVNb250aE5hbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChgKCg/OtCyKVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGBcXFxccypgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGBbLC1dP1xcXFxzKigke1lFQVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCk/YCArXG4gICAgICAgICAgICBgKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKWApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lID0gbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA8PSAzICYmICFGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWVttb250aE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbW9udGhOYW1lXTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgMSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVTW9udGhOYW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCB7IFJFR0VYX1BBUlRTIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoc3RyaWN0TW9kZSk7XG4gICAgfVxuICAgIHBhdHRlcm5GbGFncygpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmZsYWdzO1xuICAgIH1cbiAgICBwcmltYXJ5UGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIGAoXnxcXFxcc3xUfCg/OlteXFxcXHB7TH1cXFxccHtOfV9dKSlgO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIGBcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx80LTQvnzQuHzQv9C+fFxcXFw/KVxcXFxzKmA7XG4gICAgfVxuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBgKD86KD860LJ80YEpXFxcXHMqKT8/YDtcbiAgICB9XG4gICAgcHJpbWFyeVN1ZmZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGAoPzpcXFxccyooPzrRg9GC0YDQsHzQstC10YfQtdGA0LB80L/QvtGB0LvQtSDQv9C+0LvRg9C00L3RjykpPyg/IVxcXFwvKSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItCy0LXRh9C10YDQsFwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gNiAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItC/0L7RgdC70LUg0L/QvtC70YPQtNC90Y9cIikpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID49IDAgJiYgaG91ciA8PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwi0YPRgtGA0LBcIikpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKCR7VElNRV9VTklUU19QQVRURVJOfSlcXFxcc3swLDV90L3QsNC30LDQtCg/PSg/OlxcXFxXfCQpKWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0VGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIG91dHB1dFRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo0Lgg0LTQvnzQuCDQv9C+fNC00L580L/QvnwtKVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVU1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBeXFxcXHMqKFR80LJ8LHwtKT9cXFxccyokYCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVUNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCg/OtGBfNGB0L4pP1xcXFxzKijRgdC10LPQvtC00L3Rj3zQstGH0LXRgNCwfNC30LDQstGC0YDQsHzQv9C+0YHQu9C10LfQsNCy0YLRgNCwfNC/0L7RgdC70LXQv9C+0YHQu9C10LfQsNCy0YLRgNCwfNC/0L7Qt9Cw0L/QvtC30LDQstGH0LXRgNCwfNC/0L7Qt9Cw0LLRh9C10YDQsClgO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGxvd2VyVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcItGB0LXQs9C+0LTQvdGPXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcItCy0YfQtdGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcItC30LDQstGC0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbW9ycm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9C+0YHQu9C10LfQsNCy0YLRgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7RgdC70LXQv9C+0YHQu9C10LfQsNCy0YLRgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDMpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7Qt9Cw0LLRh9C10YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUJlZm9yZShjb250ZXh0LnJlZmVyZW5jZSwgMik7XG4gICAgICAgICAgICBjYXNlIFwi0L/QvtC30LDQv9C+0LfQsNCy0YfQtdGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50aGVEYXlCZWZvcmUoY29udGV4dC5yZWZlcmVuY2UsIDMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVUNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCjRgdC10LnRh9Cw0YF80L/RgNC+0YjQu9GL0LxcXFxccyrQstC10YfQtdGA0L7QvHzQv9GA0L7RiNC70L7QuVxcXFxzKtC90L7Rh9GM0Y580YHQu9C10LTRg9GO0YnQtdC5XFxcXHMq0L3QvtGH0YzRjnzRgdC10LPQvtC00L3Rj1xcXFxzKtC90L7Rh9GM0Y580Y3RgtC+0LlcXFxccyrQvdC+0YfRjNGOfNC90L7Rh9GM0Y580Y3RgtC40Lwg0YPRgtGA0L7QvHzRg9GC0YDQvtC8fNGD0YLRgNCwfNCyXFxcXHMq0L/QvtC70LTQtdC90Yx80LLQtdGH0LXRgNC+0Lx80LLQtdGH0LXRgNCwfNCyXFxcXHMq0L/QvtC70L3QvtGH0YwpYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChsb3dlclRleHQgPT09IFwi0YHQtdC50YfQsNGBXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dCA9PT0gXCLQstC10YfQtdGA0L7QvFwiIHx8IGxvd2VyVGV4dCA9PT0gXCLQstC10YfQtdGA0LBcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMuZXZlbmluZyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5lbmRzV2l0aChcItGD0YLRgNC+0LxcIikgfHwgbG93ZXJUZXh0LmVuZHNXaXRoKFwi0YPRgtGA0LBcIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1vcm5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL9CyXFxzKtC/0L7Qu9C00LXQvdGMLykpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vb24oY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL9C/0YDQvtGI0LvQvtC5XFxzKtC90L7Rh9GM0Y4vKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubGFzdE5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/Qv9GA0L7RiNC70YvQvFxccyrQstC10YfQtdGA0L7QvC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXlFdmVuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/RgdC70LXQtNGD0Y7RidC10LlcXHMq0L3QvtGH0YzRji8pKSB7XG4gICAgICAgICAgICBjb25zdCBkYXlzVG9BZGQgPSB0YXJnZXREYXRlLmdldEhvdXJzKCkgPCAyMiA/IDEgOiAyO1xuICAgICAgICAgICAgY29uc3QgbmV4dERheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIG5leHREYXkuc2V0RGF0ZShuZXh0RGF5LmdldERhdGUoKSArIGRheXNUb0FkZCk7XG4gICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/QslxccyrQv9C+0LvQvdC+0YfRjC8pIHx8IGxvd2VyVGV4dC5lbmRzV2l0aChcItC90L7Rh9GM0Y5cIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1pZG5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVVdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoPzooPzosfFxcXFwofO+8iClcXFxccyopP2AgK1xuICAgICAgICAgICAgYCg/OtCyXFxcXHMqPyk/YCArXG4gICAgICAgICAgICBgKD86KNGN0YLRg3zRjdGC0L7RgnzQv9GA0L7RiNC70YvQuXzQv9GA0L7RiNC70YPRjnzRgdC70LXQtNGD0Y7RidC40Ll80YHQu9C10LTRg9GO0YnRg9GOfNGB0LvQtdC00YPRjtGJ0LXQs9C+KVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKig/Oix8XFxcXCl877yJKSk/YCArXG4gICAgICAgICAgICBgKD86XFxcXHMq0L3QsFxcXFxzKijRjdGC0L7QuXzQv9GA0L7RiNC70L7QuXzRgdC70LXQtNGD0Y7RidC10LkpXFxcXHMq0L3QtdC00LXQu9C1KT9gKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcItC/0YDQvtGI0LvRi9C5XCIgfHwgbW9kaWZpZXJXb3JkID09IFwi0L/RgNC+0YjQu9GD0Y5cIiB8fCBtb2RpZmllcldvcmQgPT0gXCLQv9GA0L7RiNC70L7QuVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcItGB0LvQtdC00YPRjtGJ0LjQuVwiIHx8XG4gICAgICAgICAgICBtb2RpZmllcldvcmQgPT0gXCLRgdC70LXQtNGD0Y7RidGD0Y5cIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXJXb3JkID09IFwi0YHQu9C10LTRg9GO0YnQtdC5XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItGB0LvQtdC00YPRjtGJ0LXQs9C+XCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwi0Y3RgtC+0YJcIiB8fCBtb2RpZmllcldvcmQgPT0gXCLRjdGC0YNcIiB8fCBtb2RpZmllcldvcmQgPT0gXCLRjdGC0L7QuVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmNvbnN0IE1PRElGSUVSX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgUkVMQVRJVkVfV09SRF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVVJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKNCyINC/0YDQvtGI0LvQvtC8fNC90LAg0L/RgNC+0YjQu9C+0Ll80L3QsCDRgdC70LXQtNGD0Y7RidC10Ll80LIg0YHQu9C10LTRg9GO0YnQtdC8fNC90LAg0Y3RgtC+0Ll80LIg0Y3RgtC+0LwpXFxcXHMqKCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gbWF0Y2hbTU9ESUZJRVJfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFdvcmQgPSBtYXRjaFtSRUxBVElWRV9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1ldW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW3VuaXRXb3JkXTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwi0L3QsCDRgdC70LXQtNGD0Y7RidC10LlcIiB8fCBtb2RpZmllciA9PSBcItCyINGB0LvQtdC00YPRjtGJ0LXQvFwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCLQsiDQv9GA0L7RiNC70L7QvFwiIHx8IG1vZGlmaWVyID09IFwi0L3QsCDQv9GA0L7RiNC70L7QuVwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh0aW1ldW5pdC5tYXRjaCgvd2Vlay9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGltZXVuaXQubWF0Y2goL21vbnRoL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aW1ldW5pdC5tYXRjaCgveWVhci9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNb250aCgwKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKNGN0YLQuHzQv9C+0YHQu9C10LTQvdC40LV80L/RgNC+0YjQu9GL0LV80YHQu9C10LTRg9GO0YnQuNC1fNC/0L7RgdC70LV80YHQv9GD0YHRgtGPfNGH0LXRgNC10Ld8XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsyXSk7XG4gICAgICAgIHN3aXRjaCAocHJlZml4KSB7XG4gICAgICAgICAgICBjYXNlIFwi0L/QvtGB0LvQtdC00L3QuNC1XCI6XG4gICAgICAgICAgICBjYXNlIFwi0L/RgNC+0YjQu9GL0LVcIjpcbiAgICAgICAgICAgIGNhc2UgXCItXCI6XG4gICAgICAgICAgICAgICAgdGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IFJVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IFJVTW9udGhOYW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVNb250aE5hbWVQYXJzZXIuanNcIjtcbmltcG9ydCBSVVRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFJVVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvUlVNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBSVU1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1JVTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgUlVDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVDYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVDYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVDYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBSVUNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgUlVDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFJVTW9udGhOYW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFJVUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFJVVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKHRydWUpLFxuICAgICAgICAgICAgbmV3IFJVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBSVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFJVV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFJVVGltZUV4cHJlc3Npb25QYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBuZXcgUlVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBSVU1lcmdlRGF0ZVRpbWVSZWZpbmVyKCksIG5ldyBSVU1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcImRvbWluZ29cIjogMCxcbiAgICBcImRvbVwiOiAwLFxuICAgIFwibHVuZXNcIjogMSxcbiAgICBcImx1blwiOiAxLFxuICAgIFwibWFydGVzXCI6IDIsXG4gICAgXCJtYXJcIjogMixcbiAgICBcIm1pw6lyY29sZXNcIjogMyxcbiAgICBcIm1pZXJjb2xlc1wiOiAzLFxuICAgIFwibWnDqVwiOiAzLFxuICAgIFwibWllXCI6IDMsXG4gICAgXCJqdWV2ZXNcIjogNCxcbiAgICBcImp1ZVwiOiA0LFxuICAgIFwidmllcm5lc1wiOiA1LFxuICAgIFwidmllXCI6IDUsXG4gICAgXCJzw6FiYWRvXCI6IDYsXG4gICAgXCJzYWJhZG9cIjogNixcbiAgICBcInPDoWJcIjogNixcbiAgICBcInNhYlwiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIFwiZW5lcm9cIjogMSxcbiAgICBcImVuZVwiOiAxLFxuICAgIFwiZW5lLlwiOiAxLFxuICAgIFwiZmVicmVyb1wiOiAyLFxuICAgIFwiZmViXCI6IDIsXG4gICAgXCJmZWIuXCI6IDIsXG4gICAgXCJtYXJ6b1wiOiAzLFxuICAgIFwibWFyXCI6IDMsXG4gICAgXCJtYXIuXCI6IDMsXG4gICAgXCJhYnJpbFwiOiA0LFxuICAgIFwiYWJyXCI6IDQsXG4gICAgXCJhYnIuXCI6IDQsXG4gICAgXCJtYXlvXCI6IDUsXG4gICAgXCJtYXlcIjogNSxcbiAgICBcIm1heS5cIjogNSxcbiAgICBcImp1bmlvXCI6IDYsXG4gICAgXCJqdW5cIjogNixcbiAgICBcImp1bi5cIjogNixcbiAgICBcImp1bGlvXCI6IDcsXG4gICAgXCJqdWxcIjogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBcImFnb3N0b1wiOiA4LFxuICAgIFwiYWdvXCI6IDgsXG4gICAgXCJhZ28uXCI6IDgsXG4gICAgXCJzZXB0aWVtYnJlXCI6IDksXG4gICAgXCJzZXRpZW1icmVcIjogOSxcbiAgICBcInNlcFwiOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIFwib2N0dWJyZVwiOiAxMCxcbiAgICBcIm9jdFwiOiAxMCxcbiAgICBcIm9jdC5cIjogMTAsXG4gICAgXCJub3ZpZW1icmVcIjogMTEsXG4gICAgXCJub3ZcIjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIFwiZGljaWVtYnJlXCI6IDEyLFxuICAgIFwiZGljXCI6IDEyLFxuICAgIFwiZGljLlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ1bm9cIjogMSxcbiAgICBcImRvc1wiOiAyLFxuICAgIFwidHJlc1wiOiAzLFxuICAgIFwiY3VhdHJvXCI6IDQsXG4gICAgXCJjaW5jb1wiOiA1LFxuICAgIFwic2Vpc1wiOiA2LFxuICAgIFwic2lldGVcIjogNyxcbiAgICBcIm9jaG9cIjogOCxcbiAgICBcIm51ZXZlXCI6IDksXG4gICAgXCJkaWV6XCI6IDEwLFxuICAgIFwib25jZVwiOiAxMSxcbiAgICBcImRvY2VcIjogMTIsXG4gICAgXCJ0cmVjZVwiOiAxMyxcbn07XG5leHBvcnQgY29uc3QgVElNRV9VTklUX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJzZWNcIjogXCJzZWNvbmRcIixcbiAgICBcInNlZ3VuZG9cIjogXCJzZWNvbmRcIixcbiAgICBcInNlZ3VuZG9zXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW5cIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnNcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0b1wiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXRvc1wiOiBcIm1pbnV0ZVwiLFxuICAgIFwiaFwiOiBcImhvdXJcIixcbiAgICBcImhyXCI6IFwiaG91clwiLFxuICAgIFwiaHJzXCI6IFwiaG91clwiLFxuICAgIFwiaG9yYVwiOiBcImhvdXJcIixcbiAgICBcImhvcmFzXCI6IFwiaG91clwiLFxuICAgIFwiZMOtYVwiOiBcImRheVwiLFxuICAgIFwiZMOtYXNcIjogXCJkYXlcIixcbiAgICBcInNlbWFuYVwiOiBcIndlZWtcIixcbiAgICBcInNlbWFuYXNcIjogXCJ3ZWVrXCIsXG4gICAgXCJtZXNcIjogXCJtb250aFwiLFxuICAgIFwibWVzZXNcIjogXCJtb250aFwiLFxuICAgIFwiY3VhcnRvXCI6IFwicXVhcnRlclwiLFxuICAgIFwiY3VhcnRvc1wiOiBcInF1YXJ0ZXJcIixcbiAgICBcImHDsW9cIjogXCJ5ZWFyXCIsXG4gICAgXCJhw7Fvc1wiOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt8dW4/fHVubz98dW5hP3xhbGd1bm9zP3x1bm9zP3xkZW1pLT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJ1blwiIHx8IG51bSA9PT0gXCJ1bmFcIiB8fCBudW0gPT09IFwidW5vXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvYWxndW5vcz8vKSkge1xuICAgICAgICByZXR1cm4gMztcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC91bm9zPy8pKSB7XG4gICAgICAgIHJldHVybiAzO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL21lZGlhPy8pKSB7XG4gICAgICAgIHJldHVybiAwLjU7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUZsb2F0KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gXCJbMC05XXsxLDR9KD8hW15cXFxcc11cXFxcZCkoPzpcXFxccypbYXxkXVxcXFwuP1xcXFxzKmNcXFxcLj98XFxcXHMqYVxcXFwuP1xcXFxzKmRcXFxcLj8pP1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmIChtYXRjaC5tYXRjaCgvXlswLTldezEsNH0kLykpIHtcbiAgICAgICAgbGV0IHllYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgICAgICBpZiAoeWVhck51bWJlciA+IDUwKSB7XG4gICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJOdW1iZXIgKyAxOTAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJOdW1iZXIgKyAyMDAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5ZWFyTnVtYmVyO1xuICAgIH1cbiAgICBpZiAobWF0Y2gubWF0Y2goL2FcXC4/XFxzKmNcXC4/L2kpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvYVxcLj9cXHMqY1xcLj8vaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnRzO1xufVxuZnVuY3Rpb24gY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaFsxXSk7XG4gICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgIGZyYWdtZW50c1t1bml0XSA9IG51bTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86KGVzdGV8ZXN0YXxwYXNhZG98cHJbb8OzXXhpbW8pXFxcXHMqKT9cIiArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlxcXFxzKig/OlxcXFwsfFxcXFwpfFxcXFzvvIkpKT9cIiArXG4gICAgXCIoPzpcXFxccyooZXN0ZXxlc3RhfHBhc2Fkb3xwclvDs29deGltbylcXFxccypzZW1hbmEpP1wiICtcbiAgICBcIig/PVxcXFxXfFxcXFxkfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBXRUVLREFZX0dST1VQID0gMjtcbmNvbnN0IFBPU1RGSVhfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRVNXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGlmICh3ZWVrZGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgbGV0IG5vcm0gPSBwcmVmaXggfHwgcG9zdGZpeCB8fCBcIlwiO1xuICAgICAgICBub3JtID0gbm9ybS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAobm9ybSA9PSBcInBhc2Fkb1wiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vcm0gPT0gXCJwcsOzeGltb1wiIHx8IG5vcm0gPT0gXCJwcm94aW1vXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9ybSA9PSBcImVzdGVcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU1dlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU1RpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86YXNsYXN8ZGVzbGFzfGxhcz98YWw/fGRlfGRlbClcXFxccyopP1wiO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfGEoPzpsKT98XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RVNUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeXFxcXHMqKD86LHxkZXxhc2xhc3xhKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVTTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKD86LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVTTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pKD86wrp8wqp8wrApP2AgK1xuICAgIFwiKD86XFxcXHMqKD86ZGVzZGV8ZGV8XFxcXC18XFxcXOKAk3xhbz98XFxcXHMpXFxcXHMqKFswLTldezEsMn0pKD86wrp8wqp8wrApPyk/XFxcXHMqKD86ZGUpP1xcXFxzKlwiICtcbiAgICBgKD86LXwvfFxcXFxzKig/OmRlfCwpP1xcXFxzKilgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86XFxcXHMqKD86ZGV8LCk/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRVNNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU01vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU0Nhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oYWhvcmF8aG95fG1hw7FhbmF8YXllcikoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhaG9yYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaG95XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm1hw7FhbmFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiYXllclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU0Nhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUsIGltcGx5U2ltaWxhclRpbWUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiAvKD86ZXN0YVxccyopPyhtYcOxYW5hfHRhcmRlfG1lZGlhbm9jaGV8bWVkaW9kaWF8bWVkaW9kw61hfG5vY2hlKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0YXJkZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2FmdGVybm9vblwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub2NoZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2V2ZW5pbmdcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWHDsWFuYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbW9ybmluZ1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZWRpYW5vY2hlXCI6XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dERheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9taWRuaWdodFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZWRpb2RpYVwiOlxuICAgICAgICAgICAgY2FzZSBcIm1lZGlvZMOtYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL25vb25cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU0Nhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCg/OmVufHBvcnxkdXJhbnRlfGRlfGRlbnRybyBkZSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRVNXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRVNXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgRVNUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0VTVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBFU01lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0VTTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCBFU01lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FU01lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEVTTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRVNNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBFU0Nhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FU0Nhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBFU0Nhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FU0Nhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBFU1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgRVNDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVTQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgRVNXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRVNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEVTTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBFU01lcmdlRGF0ZVRpbWVSZWZpbmVyKCksIG5ldyBFU01lcmdlRGF0ZVJhbmdlUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBSRUdFWF9QQVJUUyA9IHtcbiAgICBsZWZ0Qm91bmRhcnk6IFwiKFteXFxcXHB7TH1cXFxccHtOfV9dfF4pXCIsXG4gICAgcmlnaHRCb3VuZGFyeTogXCIoPz1bXlxcXFxwe0x9XFxcXHB7Tn1fXXwkKVwiLFxuICAgIGZsYWdzOiBcIml1XCIsXG59O1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcItC90LXQtNGW0LvRj1wiOiAwLFxuICAgIFwi0L3QtdC00ZbQu9GWXCI6IDAsXG4gICAgXCLQvdC10LTRltC70Y5cIjogMCxcbiAgICBcItC90LRcIjogMCxcbiAgICBcItC90LQuXCI6IDAsXG4gICAgXCLQv9C+0L3QtdC00ZbQu9C+0LpcIjogMSxcbiAgICBcItC/0L7QvdC10LTRltC70LrQsFwiOiAxLFxuICAgIFwi0L/QvVwiOiAxLFxuICAgIFwi0L/QvS5cIjogMSxcbiAgICBcItCy0ZbQstGC0L7RgNC+0LpcIjogMixcbiAgICBcItCy0ZbQstGC0L7RgNC60LBcIjogMixcbiAgICBcItCy0YJcIjogMixcbiAgICBcItCy0YIuXCI6IDIsXG4gICAgXCLRgdC10YDQtdC00LBcIjogMyxcbiAgICBcItGB0LXRgNC10LTQuFwiOiAzLFxuICAgIFwi0YHQtdGA0LXQtNGDXCI6IDMsXG4gICAgXCLRgdGAXCI6IDMsXG4gICAgXCLRgdGALlwiOiAzLFxuICAgIFwi0YfQtdGC0LLQtdGAXCI6IDQsXG4gICAgXCLRh9C10YLQstC10YDQs9CwXCI6IDQsXG4gICAgXCLRh9C10YLQstC10YDQs9GDXCI6IDQsXG4gICAgXCLRh9GCXCI6IDQsXG4gICAgXCLRh9GCLlwiOiA0LFxuICAgIFwi0L8n0Y/RgtC90LjRhtGPXCI6IDUsXG4gICAgXCLQvyfRj9GC0L3QuNGG0ZZcIjogNSxcbiAgICBcItC/J9GP0YLQvdC40YbRjlwiOiA1LFxuICAgIFwi0L/RglwiOiA1LFxuICAgIFwi0L/Rgi5cIjogNSxcbiAgICBcItGB0YPQsdC+0YLQsFwiOiA2LFxuICAgIFwi0YHRg9Cx0L7RgtC4XCI6IDYsXG4gICAgXCLRgdGD0LHQvtGC0YNcIjogNixcbiAgICBcItGB0LFcIjogNixcbiAgICBcItGB0LEuXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZID0ge1xuICAgIFwi0YHRltGH0LXQvdGMXCI6IDEsXG4gICAgXCLRgdGW0YfQvdGPXCI6IDEsXG4gICAgXCLRgdGW0YfQvdGWXCI6IDEsXG4gICAgXCLQu9GO0YLQuNC5XCI6IDIsXG4gICAgXCLQu9GO0YLQvtCz0L5cIjogMixcbiAgICBcItC70Y7RgtC+0LzRg1wiOiAyLFxuICAgIFwi0LHQtdGA0LXQt9C10L3RjFwiOiAzLFxuICAgIFwi0LHQtdGA0LXQt9C90Y9cIjogMyxcbiAgICBcItCx0LXRgNC10LfQvdGWXCI6IDMsXG4gICAgXCLQutCy0ZbRgtC10L3RjFwiOiA0LFxuICAgIFwi0LrQstGW0YLQvdGPXCI6IDQsXG4gICAgXCLQutCy0ZbRgtC90ZZcIjogNCxcbiAgICBcItGC0YDQsNCy0LXQvdGMXCI6IDUsXG4gICAgXCLRgtGA0LDQstC90Y9cIjogNSxcbiAgICBcItGC0YDQsNCy0L3RllwiOiA1LFxuICAgIFwi0YfQtdGA0LLQtdC90YxcIjogNixcbiAgICBcItGH0LXRgNCy0L3Rj1wiOiA2LFxuICAgIFwi0YfQtdGA0LLQvdGWXCI6IDYsXG4gICAgXCLQu9C40L/QtdC90YxcIjogNyxcbiAgICBcItC70LjQv9C90Y9cIjogNyxcbiAgICBcItC70LjQv9C90ZZcIjogNyxcbiAgICBcItGB0LXRgNC/0LXQvdGMXCI6IDgsXG4gICAgXCLRgdC10YDQv9C90Y9cIjogOCxcbiAgICBcItGB0LXRgNC/0L3RllwiOiA4LFxuICAgIFwi0LLQtdGA0LXRgdC10L3RjFwiOiA5LFxuICAgIFwi0LLQtdGA0LXRgdC90Y9cIjogOSxcbiAgICBcItCy0LXRgNC10YHQvdGWXCI6IDksXG4gICAgXCLQttC+0LLRgtC10L3RjFwiOiAxMCxcbiAgICBcItC20L7QstGC0L3Rj1wiOiAxMCxcbiAgICBcItC20L7QstGC0L3RllwiOiAxMCxcbiAgICBcItC70LjRgdGC0L7Qv9Cw0LRcIjogMTEsXG4gICAgXCLQu9C40YHRgtC+0L/QsNC00LBcIjogMTEsXG4gICAgXCLQu9C40YHRgtC+0L/QsNC00YNcIjogMTEsXG4gICAgXCLQs9GA0YPQtNC10L3RjFwiOiAxMixcbiAgICBcItCz0YDRg9C00L3Rj1wiOiAxMixcbiAgICBcItCz0YDRg9C00L3RllwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICBcItGB0ZbRh1wiOiAxLFxuICAgIFwi0YHRltGHLlwiOiAxLFxuICAgIFwi0LvRjtGCXCI6IDIsXG4gICAgXCLQu9GO0YIuXCI6IDIsXG4gICAgXCLQsdC10YBcIjogMyxcbiAgICBcItCx0LXRgC5cIjogMyxcbiAgICBcItC60LLRltGCXCI6IDQsXG4gICAgXCLQutCy0ZbRgi5cIjogNCxcbiAgICBcItGC0YDQsNCyXCI6IDUsXG4gICAgXCLRgtGA0LDQsi5cIjogNSxcbiAgICBcItGH0LXRgNCyXCI6IDYsXG4gICAgXCLRh9C10YDQsi5cIjogNixcbiAgICBcItC70LjQv1wiOiA3LFxuICAgIFwi0LvQuNC/LlwiOiA3LFxuICAgIFwi0YHQtdGA0L9cIjogOCxcbiAgICBcItGB0LXRgNC/LlwiOiA4LFxuICAgIFwi0YHQtdGAXCI6IDgsXG4gICAgXCJj0LXRgC5cIjogOCxcbiAgICBcItCy0LXRgFwiOiA5LFxuICAgIFwi0LLQtdGALlwiOiA5LFxuICAgIFwi0LLQtdGA0LXRgVwiOiA5LFxuICAgIFwi0LLQtdGA0LXRgS5cIjogOSxcbiAgICBcItC20L7QstGCXCI6IDEwLFxuICAgIFwi0LbQvtCy0YIuXCI6IDEwLFxuICAgIFwi0LvQuNGB0YLQvtC/XCI6IDExLFxuICAgIFwi0LvQuNGB0YLQvtC/LlwiOiAxMSxcbiAgICBcItCz0YDRg9C0XCI6IDEyLFxuICAgIFwi0LPRgNGD0LQuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcItC+0LTQuNC9XCI6IDEsXG4gICAgXCLQvtC00L3QsFwiOiAxLFxuICAgIFwi0L7QtNC90L7Rl1wiOiAxLFxuICAgIFwi0L7QtNC90YNcIjogMSxcbiAgICBcItC00LLRllwiOiAyLFxuICAgIFwi0LTQstCwXCI6IDIsXG4gICAgXCLQtNCy0L7RhVwiOiAyLFxuICAgIFwi0YLRgNC4XCI6IDMsXG4gICAgXCLRgtGA0YzQvtGFXCI6IDMsXG4gICAgXCLRh9C+0YLQuNGA0LhcIjogNCxcbiAgICBcItGH0L7RgtC40YDRjNC+0YVcIjogNCxcbiAgICBcItC/J9GP0YLRjFwiOiA1LFxuICAgIFwi0L8n0Y/RgtC4XCI6IDUsXG4gICAgXCLRiNGW0YHRgtGMXCI6IDYsXG4gICAgXCLRiNC10YHRgtC4XCI6IDYsXG4gICAgXCLRgdGW0LxcIjogNyxcbiAgICBcItGB0LXQvNC4XCI6IDcsXG4gICAgXCLQstGW0YHRltC8XCI6IDgsXG4gICAgXCLQstC+0YHRjNC80LhcIjogOCxcbiAgICBcItC00LXQsifRj9GC0YxcIjogOSxcbiAgICBcItC00LXQsifRj9GC0LhcIjogOSxcbiAgICBcItC00LXRgdGP0YLRjFwiOiAxMCxcbiAgICBcItC00LXRgdGP0YLQuFwiOiAxMCxcbiAgICBcItC+0LTQuNC90LDQtNGG0Y/RgtGMXCI6IDExLFxuICAgIFwi0L7QtNC40L3QsNC00YbRj9GC0LhcIjogMTEsXG4gICAgXCLQtNCy0LDQvdCw0LTRhtGP0YLRjFwiOiAxMixcbiAgICBcItC00LLQsNC90LDQtNGG0Y/RgtC4XCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcItC/0LXRgNGI0LVcIjogMSxcbiAgICBcItC/0LXRgNGI0L7Qs9C+XCI6IDEsXG4gICAgXCLQtNGA0YPQs9C1XCI6IDIsXG4gICAgXCLQtNGA0YPQs9C+0LPQvlwiOiAyLFxuICAgIFwi0YLRgNC10YLRlFwiOiAzLFxuICAgIFwi0YLRgNC10YLRjNC+0LPQvlwiOiAzLFxuICAgIFwi0YfQtdGC0LLQtdGA0YLQtVwiOiA0LFxuICAgIFwi0YfQtdGC0LLQtdGA0YLQvtCz0L5cIjogNCxcbiAgICBcItC/J9GP0YLQtVwiOiA1LFxuICAgIFwi0L8n0Y/RgtC+0LPQvlwiOiA1LFxuICAgIFwi0YjQvtGB0YLQtVwiOiA2LFxuICAgIFwi0YjQvtGB0YLQvtCz0L5cIjogNixcbiAgICBcItGB0YzQvtC80LVcIjogNyxcbiAgICBcItGB0YzQvtC80L7Qs9C+XCI6IDcsXG4gICAgXCLQstC+0YHRjNC80LVcIjogOCxcbiAgICBcItCy0L7RgdGM0LzQvtCz0L5cIjogOCxcbiAgICBcItC00LXQsifRj9GC0LVcIjogOSxcbiAgICBcItC00LXQsifRj9GC0L7Qs9C+XCI6IDksXG4gICAgXCLQtNC10YHRj9GC0LVcIjogMTAsXG4gICAgXCLQtNC10YHRj9GC0L7Qs9C+XCI6IDEwLFxuICAgIFwi0L7QtNC40L3QsNC00YbRj9GC0LVcIjogMTEsXG4gICAgXCLQvtC00LjQvdCw0LTRhtGP0YLQvtCz0L5cIjogMTEsXG4gICAgXCLQtNCy0LDQvdCw0LTRhtGP0YLQtVwiOiAxMixcbiAgICBcItC00LLQsNC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxMixcbiAgICBcItGC0YDQuNC90LDQtNGG0Y/RgtC1XCI6IDEzLFxuICAgIFwi0YLRgNC40L3QsNC00YbRj9GC0L7Qs9C+XCI6IDEzLFxuICAgIFwi0YfQvtGC0LjRgNC90LDQtNGG0Y/RgtC1XCI6IDE0LFxuICAgIFwi0YfQvtGC0LjQvdGA0L3QsNC00YbRj9GC0L7Qs9C+XCI6IDE0LFxuICAgIFwi0L8n0Y/RgtC90LDQtNGG0Y/RgtC1XCI6IDE1LFxuICAgIFwi0L8n0Y/RgtC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxNSxcbiAgICBcItGI0ZbRgdGC0L3QsNC00YbRj9GC0LVcIjogMTYsXG4gICAgXCLRiNGW0YHRgtC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxNixcbiAgICBcItGB0ZbQvNC90LDQtNGG0Y/RgtC1XCI6IDE3LFxuICAgIFwi0YHRltC80L3QsNC00YbRj9GC0L7Qs9C+XCI6IDE3LFxuICAgIFwi0LLRltGB0ZbQvNC90LDQtNGG0Y/RgtC1XCI6IDE4LFxuICAgIFwi0LLRltGB0ZbQvNC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxOCxcbiAgICBcItC00LXQsifRj9GC0L3QsNC00YbRj9GC0LVcIjogMTksXG4gICAgXCLQtNC10LIn0Y/RgtC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxOSxcbiAgICBcItC00LLQsNC00YbRj9GC0LVcIjogMjAsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtC+0LPQvlwiOiAyMCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0L/QtdGA0YjQtVwiOiAyMSxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0L/QtdGA0YjQvtCz0L5cIjogMjEsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINC00YDRg9Cz0LVcIjogMjIsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINC00YDRg9Cz0L7Qs9C+XCI6IDIyLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRgtGA0LXRgtGUXCI6IDIzLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRgtGA0LXRgtGM0L7Qs9C+XCI6IDIzLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRh9C10YLQstC10YDRgtC1XCI6IDI0LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRh9C10YLQstC10YDRgtC+0LPQvlwiOiAyNCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0L8n0Y/RgtC1XCI6IDI1LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDQvyfRj9GC0L7Qs9C+XCI6IDI1LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRiNC+0YHRgtC1XCI6IDI2LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRiNC+0YHRgtC+0LPQvlwiOiAyNixcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0YHRjNC+0LzQtVwiOiAyNyxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0YHRjNC+0LzQvtCz0L5cIjogMjcsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINCy0L7RgdGM0LzQtVwiOiAyOCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LLQvtGB0YzQvNC+0LPQvlwiOiAyOCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LTQtdCyJ9GP0YLQtVwiOiAyOSxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LTQtdCyJ9GP0YLQvtCz0L5cIjogMjksXG4gICAgXCLRgtGA0LjQtNGG0Y/RgtC1XCI6IDMwLFxuICAgIFwi0YLRgNC40LTRhtGP0YLQvtCz0L5cIjogMzAsXG4gICAgXCLRgtGA0LjQtNGG0Y/RgtGMINC/0LXRgNGI0LVcIjogMzEsXG4gICAgXCLRgtGA0LjQtNGG0Y/RgtGMINC/0LXRgNGI0L7Qs9C+XCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICDRgdC10Lo6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00LA6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC0OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC4OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNGDOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQvtC6OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutC4OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutGDOiBcInNlY29uZFwiLFxuICAgINGF0LI6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC90LA6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC9OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC4OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdGDOiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0Lo6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC90LrQuDogXCJtaW51dGVcIixcbiAgICDRhdCy0LjQu9C40L3QutGDOiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0YfQvtC6OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0YfQutC4OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0YfQutGDOiBcIm1pbnV0ZVwiLFxuICAgINCz0L7QtDogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdCwOiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC9OiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC90Lg6IFwiaG91clwiLFxuICAgINCz0L7QtNC40L3RgzogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdC60LA6IFwiaG91clwiLFxuICAgINCz0L7QtNC40L3QvtC6OiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC90LrQuDogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdC60YM6IFwiaG91clwiLFxuICAgINC00LXQvdGMOiBcImRheVwiLFxuICAgINC00L3RjzogXCJkYXlcIixcbiAgICDQtNC90ZbQsjogXCJkYXlcIixcbiAgICDQtNC90ZY6IFwiZGF5XCIsXG4gICAg0LTQvtCx0LA6IFwiZGF5XCIsXG4gICAg0LTQvtCx0YM6IFwiZGF5XCIsXG4gICAg0YLQuNC20LTQtdC90Yw6IFwid2Vla1wiLFxuICAgINGC0LjQttC90Y46IFwid2Vla1wiLFxuICAgINGC0LjQttC90Y86IFwid2Vla1wiLFxuICAgINGC0LjQttC90ZY6IFwid2Vla1wiLFxuICAgINGC0LjQttC90ZbQsjogXCJ3ZWVrXCIsXG4gICAg0LzRltGB0Y/RhtGMOiBcIm1vbnRoXCIsXG4gICAg0LzRltGB0Y/RhtGW0LI6IFwibW9udGhcIixcbiAgICDQvNGW0YHRj9GG0ZY6IFwibW9udGhcIixcbiAgICDQvNGW0YHRj9GG0Y86IFwibW9udGhcIixcbiAgICDQutCy0LDRgNGC0LDQuzogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvRgzogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvQsDogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvRltCyOiBcInF1YXJ0ZXJcIixcbiAgICDQutCy0LDRgNGC0LDQu9GWOiBcInF1YXJ0ZXJcIixcbiAgICDRgNGW0Lo6IFwieWVhclwiLFxuICAgINGA0L7QutGDOiBcInllYXJcIixcbiAgICDRgNC+0YbRljogXCJ5ZWFyXCIsXG4gICAg0YDQvtC60ZbQsjogXCJ5ZWFyXCIsXG4gICAg0YDQvtC60Lg6IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBOVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSl9fFswLTldK3xbMC05XStcXFxcLlswLTldK3zQv9GW0LJ80LTQtdC60ZbQu9GM0LrQsHzQv9Cw0YAoPzrRgyl8XFxcXHN7MCwzfSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgaWYgKG51bS5tYXRjaCgv0LTQtdC60ZbQu9GM0LrQsC8pKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL9C/0ZbQsi8pKSB7XG4gICAgICAgIHJldHVybiAwLjU7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgv0L/QsNGALykpIHtcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJcIikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZKX18WzAtOV17MSwyfSg/OtCz0L580L7Qs9C+fNC1KT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cbmNvbnN0IHllYXIgPSBcIig/OlxcXFxzKyg/OtGA0L7QutGDfNGA0ZbQunzRgHzRgC4pKT9cIjtcbmV4cG9ydCBjb25zdCBZRUFSX1BBVFRFUk4gPSBgKD86WzEtOV1bMC05XXswLDN9JHt5ZWFyfVxcXFxzKig/OtC9LtC1LnzQtNC+INC9LtC1LnzQvS4g0LUufNC00L4g0L0uINC1Lil8WzEtMl1bMC05XXszfSR7eWVhcn18WzUtOV1bMC05XSR7eWVhcn0pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgaWYgKC8o0YDRltC6fNGA0L7QutGDfNGAfNGALikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjRgNGW0Lp80YDQvtC60YN80YB80YAuKS9pLCBcIlwiKTtcbiAgICB9XG4gICAgaWYgKC8o0LTQviDQvS7QtS580LTQviDQvS4g0LUuKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKNC00L4g0L0u0LUufNC00L4g0L0uINC1LikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBpZiAoLyjQvS4g0LUufNC9LtC1LikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjQvS4g0LUufNC9LtC1LikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDN9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYDtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUkVHRVggPSBuZXcgUmVnRXhwKFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiwgXCJpXCIpO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfUEFUVEVSTiA9IHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKGAoPzooPzrQsdC70LjQt9GM0LrQvnzQv9GA0LjQsdC70LjQt9C90L4pXFxcXHN7MCwzfSk/YCwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBgKD86KD860L/RgNC40LHQu9C40LfQvdC+fNC+0YDRltGU0L3RgtC+0LLQvdC+KVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkke1JFR0VYX1BBUlRTLnJpZ2h0Qm91bmRhcnl9YDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmxlZnRCb3VuZGFyeTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9uLmZvcndhcmREYXRlXG4gICAgICAgICAgICA/IG5ldyBSZWdFeHAoUEFUVEVSTiwgXCJpXCIpXG4gICAgICAgICAgICA6IG5ldyBSZWdFeHAoYCg/OtC/0YDQvtGC0Y/Qs9C+0Lx80L3QsCDQv9GA0L7RgtGP0LfRlnzQv9GA0L7RgtGP0LPQvtC8fNGD0L/RgNC+0LTQvtCy0LZ80LLQv9GA0L7QtNC+0LLQtilcXFxccyoke1BBVFRFUk59YCwgUkVHRVhfUEFSVFMuZmxhZ3MpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IFJFR0VYX1BBUlRTIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuZXhwb3J0IGNsYXNzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHBhdHRlcm5MZWZ0Qm91bmRhcnkoKSB7XG4gICAgICAgIHJldHVybiBSRUdFWF9QQVJUUy5sZWZ0Qm91bmRhcnk7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHRoaXMuaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybkhhc0NoYW5nZShjb250ZXh0LCBjdXJyZW50SW5uZXJQYXR0ZXJuKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgJHt0aGlzLmlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KX0ke1JFR0VYX1BBUlRTLnJpZ2h0Qm91bmRhcnl9YCwgUkVHRVhfUEFSVFMuZmxhZ3MpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXJQYXR0ZXJuIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiwgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoPzrQt3zRltC3KT9cXFxccyooJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGBcXFxcc3swLDN9KD860L/QvnwtfOKAk3zQtNC+KT9cXFxcc3swLDN9YCArXG4gICAgICAgICAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgICAgICAgICBgKT9gICtcbiAgICAgICAgICAgIGAoPzotfFxcXFwvfFxcXFxzezAsM30oPzpvZik/XFxcXHN7MCwzfSlgICtcbiAgICAgICAgICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OmAgK1xuICAgICAgICAgICAgYCg/Oi18XFxcXC98LD9cXFxcc3swLDN9KWAgK1xuICAgICAgICAgICAgYCgke1lFQVJfUEFUVEVSTn0oPyFbXlxcXFxzXVxcXFxkKSlgICtcbiAgICAgICAgICAgIGApP2ApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyUGF0dGVybihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZLCBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IFlFQVJfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVWtNb250aE5hbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChgKCg/OtCyfNGDKVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGBcXFxccypgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGBbLC1dP1xcXFxzKigke1lFQVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCk/YCArXG4gICAgICAgICAgICBgKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKWApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lID0gbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA8PSAzICYmICFGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWVttb250aE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbW9udGhOYW1lXTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyUGF0dGVybihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LCAxLCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtNb250aE5hbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IHsgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1RpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcihzdHJpY3RNb2RlKTtcbiAgICB9XG4gICAgcGF0dGVybkZsYWdzKCkge1xuICAgICAgICByZXR1cm4gUkVHRVhfUEFSVFMuZmxhZ3M7XG4gICAgfVxuICAgIHByaW1hcnlQYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gYChefFxcXFxzfFR8KD86W15cXFxccHtMfVxcXFxwe059X10pKWA7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gYFxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnHzQtNC+fNGWfNC/0L58XFxcXD8pXFxcXHMqYDtcbiAgICB9XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGAoPzooPzrQsnzRg3zQvnzQvtCxfNC3fNGW0Ld80LLRltC0KVxcXFxzKik/P2A7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBgKD86XFxcXHMqKD860YDQsNC90LrRg3zQstC10YfQvtGA0LB80L/QviDQvtCx0ZbQtNGWfNC/0ZbRgdC70Y8g0L7QsdGW0LTRgykpPyg/IVxcXFwvKSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItCy0LXRh9C+0YDQsFwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gNiAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItC/0L4g0L7QsdGW0LTRllwiKSB8fCBtYXRjaFswXS5lbmRzV2l0aChcItC/0ZbRgdC70Y8g0L7QsdGW0LTRg1wiKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gMCAmJiBob3VyIDw9IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0uZW5kc1dpdGgoXCLRgNCw0L3QutGDXCIpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaG91ciA9IGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fdGC0L7QvNGDKD89KD86XFxcXFd8JCkpYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBvdXRwdXRUaW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgb3V0cHV0VGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS01lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijRliDQtNC+fNGWINC/0L580LTQvnzQv9C+fC0pXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS01lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5cXFxccyooVHzQsnzRg3zQvnwsfC0pP1xcXFxzKiRgKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKD860Ld80ZbQt3zQstGW0LQpP1xcXFxzKijRgdGM0L7Qs9C+0LTQvdGWfNCy0YfQvtGA0LB80LfQsNCy0YLRgNCwfNC/0ZbRgdC70Y/Qt9Cw0LLRgtGA0LB80L/RltGB0LvRj9C/0ZbRgdC70Y/Qt9Cw0LLRgtGA0LB80L/QvtC30LDQv9C+0LfQsNCy0YfQvtGA0LB80L/QvtC30LDQstGH0L7RgNCwKWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAobG93ZXJUZXh0KSB7XG4gICAgICAgICAgICBjYXNlIFwi0YHRjNC+0LPQvtC00L3RllwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLQstGH0L7RgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLQt9Cw0LLRgtGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwi0L/RltGB0LvRj9C30LDQstGC0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUFmdGVyKGNvbnRleHQucmVmZXJlbmNlLCAyKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9GW0YHQu9GP0L/RltGB0LvRj9C30LDQstGC0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUFmdGVyKGNvbnRleHQucmVmZXJlbmNlLCAzKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9C+0LfQsNCy0YfQvtGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50aGVEYXlCZWZvcmUoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7Qt9Cw0L/QvtC30LDQstGH0L7RgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QmVmb3JlKGNvbnRleHQucmVmZXJlbmNlLCAzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGAo0LfQsNGA0LDQt3zQvNC40L3Rg9C70L7Qs9C+XFxcXHMq0LLQtdGH0L7RgNCwfNC80LjQvdGD0LvQvtGXXFxcXHMq0L3QvtGH0ZZ80L3QsNGB0YLRg9C/0L3QvtGXXFxcXHMq0L3QvtGH0ZZ80YHRjNC+0LPQvtC00L3RllxcXFxzKtCy0L3QvtGH0ZZ80YbRltGU0ZdcXFxccyrQvdC+0YfRlnzRhtGM0L7Qs9C+INGA0LDQvdC60YN80LLRgNCw0L3RhtGWfNGA0LDQvdC60YN80LfRgNCw0L3QutGDfNC+0L/RltCy0LTQvdGWfNCy0LLQtdGH0LXRgNGWfNCy0LXRh9C+0YDQsHzQvtC/0ZbQstC90L7Rh9GWfNCy0L3QvtGH0ZYpYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChsb3dlclRleHQgPT09IFwi0LfQsNGA0LDQt1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQgPT09IFwi0LLQstC10YfQtdGA0ZZcIiB8fCBsb3dlclRleHQgPT09IFwi0LLQtdGH0L7RgNCwXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLmV2ZW5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQuZW5kc1dpdGgoXCLQstGA0LDQvdGG0ZZcIikgfHwgbG93ZXJUZXh0LmVuZHNXaXRoKFwi0YDQsNC90LrRg1wiKSB8fCBsb3dlclRleHQuZW5kc1dpdGgoXCLQt9GA0LDQvdC60YNcIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1vcm5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQuZW5kc1dpdGgoXCLQvtC/0ZbQstC00L3RllwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubm9vbihjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5tYXRjaCgv0LzQuNC90YPQu9C+0ZdcXHMq0L3QvtGH0ZYvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubGFzdE5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/QvNC40L3Rg9C70L7Qs9C+XFxzKtCy0LXRh9C+0YDQsC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXlFdmVuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/QvdCw0YHRgtGD0L/QvdC+0ZdcXHMq0L3QvtGH0ZYvKSkge1xuICAgICAgICAgICAgY29uc3QgZGF5c1RvQWRkID0gdGFyZ2V0RGF0ZS5nZXRIb3VycygpIDwgMjIgPyAxIDogMjtcbiAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyBkYXlzVG9BZGQpO1xuICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5tYXRjaCgv0YbRltGU0ZdcXHMq0L3QvtGH0ZYvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubWlkbmlnaHQoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQuZW5kc1dpdGgoXCLQvtC/0ZbQstC90L7Rh9GWXCIpIHx8IGxvd2VyVGV4dC5lbmRzV2l0aChcItCy0L3QvtGH0ZZcIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1pZG5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1dlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoPzooPzosfFxcXFwofO+8iClcXFxccyopP2AgK1xuICAgICAgICAgICAgYCg/OtCyXFxcXHMqPyk/YCArXG4gICAgICAgICAgICBgKD860YNcXFxccyo/KT9gICtcbiAgICAgICAgICAgIGAoPzoo0YbQtdC5fNC80LjQvdGD0LvQvtCz0L580LzQuNC90YPQu9C40Ll80L/QvtC/0LXRgNC10LTQvdGW0Ll80L/QvtC/0LXRgNC10LTQvdGM0L7Qs9C+fNC90LDRgdGC0YPQv9C90L7Qs9C+fNC90LDRgdGC0YPQv9C90LjQuXzQvdCw0YHRgtGD0L/QvdC+0LzRgylcXFxccyopP2AgK1xuICAgICAgICAgICAgYCgke21hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGAoPzpcXFxccyooPzosfFxcXFwpfO+8iSkpP2AgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKijQvdCwfNGDfNCyKVxcXFxzKijRhtGM0L7QvNGDfNC80LjQvdGD0LvQvtC80YN80L3QsNGB0YLRg9C/0L3QvtC80YMpXFxcXHMq0YLQuNC20L3Rlik/YCk7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQgPT0gXCLQvNC40L3Rg9C70L7Qs9C+XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItC80LjQvdGD0LvQuNC5XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItC/0L7Qv9C10YDQtdC00L3RltC5XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItC/0L7Qv9C10YDQtdC00L3RjNC+0LPQvlwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcItC90LDRgdGC0YPQv9C90L7Qs9C+XCIgfHwgbW9kaWZpZXJXb3JkID09IFwi0L3QsNGB0YLRg9C/0L3QuNC5XCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwi0YbQtdC5XCIgfHwgbW9kaWZpZXJXb3JkID09IFwi0YbRjNC+0LPQvlwiIHx8IG1vZGlmaWVyV29yZCA9PSBcItGG0YzQvtC80YNcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1dlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBNT0RJRklFUl9XT1JEX0dST1VQID0gMTtcbmNvbnN0IFJFTEFUSVZFX1dPUkRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAo0LIg0LzQuNC90YPQu9C+0LzRg3zRgyDQvNC40L3Rg9C70L7QvNGDfNC90LAg0LzQuNC90YPQu9C+0LzRg3zQvNC40L3Rg9C70L7Qs9C+fNC90LAg0L3QsNGB0YLRg9C/0L3QvtC80YN80LIg0L3QsNGB0YLRg9C/0L3QvtC80YN80YMg0L3QsNGB0YLRg9C/0L3QvtC80YN80L3QsNGB0YLRg9C/0L3QvtCz0L580L3QsCDRhtGM0L7QvNGDfNCyINGG0YzQvtC80YN80YMg0YbRjNC+0LzRg3zRhtGM0L7Qs9C+KVxcXFxzKmAgK1xuICAgICAgICAgICAgYCgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KSg/PVxcXFxzKilgKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gbWF0Y2hbTU9ESUZJRVJfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFdvcmQgPSBtYXRjaFtSRUxBVElWRV9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1ldW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW3VuaXRXb3JkXTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwi0L3QsCDQvdCw0YHRgtGD0L/QvdC+0LzRg1wiIHx8XG4gICAgICAgICAgICBtb2RpZmllciA9PSBcItCyINC90LDRgdGC0YPQv9C90L7QvNGDXCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyID09IFwi0YMg0L3QsNGB0YLRg9C/0L3QvtC80YNcIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXIgPT0gXCLQvdCw0YHRgtGD0L/QvdC+0LPQvlwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCLQvdCwINC80LjQvdGD0LvQvtC80YNcIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXIgPT0gXCLQsiDQvNC40L3Rg9C70L7QvNGDXCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyID09IFwi0YMg0LzQuNC90YPQu9C+0LzRg1wiIHx8XG4gICAgICAgICAgICBtb2RpZmllciA9PSBcItC80LjQvdGD0LvQvtCz0L5cIikge1xuICAgICAgICAgICAgY29uc3QgdGltZVVuaXRzID0ge307XG4gICAgICAgICAgICB0aW1lVW5pdHNbdGltZXVuaXRdID0gLTE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAodGltZXVuaXQubWF0Y2goL3dlZWsvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRpbWV1bml0Lm1hdGNoKC9tb250aC9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGltZXVuaXQubWF0Y2goL3llYXIvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1RpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCjRhtGWfNC+0YHRgtCw0L3QvdGWfNC80LjQvdGD0LvRlnzQvNCw0LnQsdGD0YLQvdGWfNC90LDRgdGC0YPQv9C90ZZ80L/RltGB0LvRj3zRh9C10YDQtdC3fFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSlgO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbM10pO1xuICAgICAgICBzd2l0Y2ggKHByZWZpeCkge1xuICAgICAgICAgICAgY2FzZSBcItC+0YHRgtCw0L3QvdGWXCI6XG4gICAgICAgICAgICBjYXNlIFwi0LzQuNC90YPQu9GWXCI6XG4gICAgICAgICAgICBjYXNlIFwiLVwiOlxuICAgICAgICAgICAgICAgIHRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCBVS1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFVLTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBVa01vbnRoTmFtZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLTW9udGhOYW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgVUtUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBVS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFVLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1VLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgVUtNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9VS01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IFVLQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFVLQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IFVLV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFVLUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFVLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBVS0Nhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgVUtDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFVrTW9udGhOYW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFVLUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFVLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIodHJ1ZSksXG4gICAgICAgICAgICBuZXcgVUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFVLTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVUtXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVUtUaW1lRXhwcmVzc2lvblBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBVS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFVLTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IFVLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcImRvbWVuaWNhXCI6IDAsXG4gICAgXCJkb21cIjogMCxcbiAgICBcImx1bmVkw6xcIjogMSxcbiAgICBcImx1blwiOiAxLFxuICAgIFwibWFydGVkw6xcIjogMixcbiAgICBcIm1hclwiOiAyLFxuICAgIFwibWVyY29sZWTDrFwiOiAzLFxuICAgIFwibWVyY1wiOiAzLFxuICAgIFwiZ2lvdmVkw6xcIjogNCxcbiAgICBcImdpb3ZcIjogNCxcbiAgICBcInZlbmVyZMOsXCI6IDUsXG4gICAgXCJ2ZW5cIjogNSxcbiAgICBcInNhYmF0b1wiOiA2LFxuICAgIFwic2FiXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZID0ge307XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICBcImdlbm5haW9cIjogMSxcbiAgICBcImdlblwiOiAxLFxuICAgIFwiZ2VuLlwiOiAxLFxuICAgIFwiZmViYnJhaW9cIjogMixcbiAgICBcImZlYlwiOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIFwiZmVicmFpb1wiOiAyLFxuICAgIFwiZmViYlwiOiAyLFxuICAgIFwiZmViYi5cIjogMixcbiAgICBcIm1hcnpvXCI6IDMsXG4gICAgXCJtYXJcIjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBcImFwcmlsZVwiOiA0LFxuICAgIFwiYXByXCI6IDQsXG4gICAgXCJhcHIuXCI6IDQsXG4gICAgXCJtYWdnaW9cIjogNSxcbiAgICBcIm1hZ1wiOiA1LFxuICAgIFwiZ2l1Z25vXCI6IDYsXG4gICAgXCJnaXVcIjogNixcbiAgICBcImx1Z2xpb1wiOiA3LFxuICAgIFwibHVnXCI6IDcsXG4gICAgXCJsdWdsXCI6IDcsXG4gICAgXCJsdWcuXCI6IDcsXG4gICAgXCJhZ29zdG9cIjogOCxcbiAgICBcImFnb1wiOiA4LFxuICAgIFwic2V0dGVtYnJlXCI6IDksXG4gICAgXCJzZXRcIjogOSxcbiAgICBcInNldC5cIjogOSxcbiAgICBcInNldHRcIjogOSxcbiAgICBcInNldHQuXCI6IDksXG4gICAgXCJvdHRvYnJlXCI6IDEwLFxuICAgIFwib3R0XCI6IDEwLFxuICAgIFwib3R0LlwiOiAxMCxcbiAgICBcIm5vdmVtYnJlXCI6IDExLFxuICAgIFwibm92XCI6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBcImRpY2VtYnJlXCI6IDEyLFxuICAgIFwiZGljXCI6IDEyLFxuICAgIFwiZGljZVwiOiAxMixcbiAgICBcImRpYy5cIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IElOVEVHRVJfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIFwidW5vXCI6IDEsXG4gICAgXCJkdWVcIjogMixcbiAgICBcInRyZVwiOiAzLFxuICAgIFwicXVhdHRyb1wiOiA0LFxuICAgIFwiY2lucXVlXCI6IDUsXG4gICAgXCJzZWlcIjogNixcbiAgICBcInNldHRlXCI6IDcsXG4gICAgXCJvdHRvXCI6IDgsXG4gICAgXCJub3ZlXCI6IDksXG4gICAgXCJkaWVjaVwiOiAxMCxcbiAgICBcInVuZGljaVwiOiAxMSxcbiAgICBcImRvZGljaVwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJwcmltb1wiOiAxLFxuICAgIFwic2Vjb25kb1wiOiAyLFxuICAgIFwidGVyem9cIjogMyxcbiAgICBcInF1YXJ0b1wiOiA0LFxuICAgIFwicXVpbnRvXCI6IDUsXG4gICAgXCJzZXN0b1wiOiA2LFxuICAgIFwic2V0dGltb1wiOiA3LFxuICAgIFwib3R0YXZvXCI6IDgsXG4gICAgXCJub25vXCI6IDksXG4gICAgXCJkZWNpbW9cIjogMTAsXG4gICAgXCJ1bmRpY2VzaW1vXCI6IDExLFxuICAgIFwiZG9kaWNlc2ltb1wiOiAxMixcbiAgICBcInRyZWRpY2VzaW1vXCI6IDEzLFxuICAgIFwicXVhdHRvcmRpY2VzaW1vXCI6IDE0LFxuICAgIFwicXVpbmRpY2VzaW1vXCI6IDE1LFxuICAgIFwic2VkaWNlc2ltb1wiOiAxNixcbiAgICBcImRpY2lhc3NldHRlc2ltb1wiOiAxNyxcbiAgICBcImRpY2lvdHRlc2ltb1wiOiAxOCxcbiAgICBcImRpY2lhbm5vdmVzaW1vXCI6IDE5LFxuICAgIFwidmVudGVzaW1vXCI6IDIwLFxuICAgIFwidmVudHVuZXNpbW9cIjogMjEsXG4gICAgXCJ2ZW50aWR1ZXNpbW9cIjogMjIsXG4gICAgXCJ2ZW50aXRyZWVzaW1vXCI6IDIzLFxuICAgIFwidmVudGlxdWF0dHJlc2ltb1wiOiAyNCxcbiAgICBcInZlbnRpY2lucXVlc2ltb1wiOiAyNSxcbiAgICBcInZlbnRpc2VpZXNpbW9cIjogMjYsXG4gICAgXCJ2ZW50aXNldHRlc2ltb1wiOiAyNyxcbiAgICBcInZlbnRvdHRlc2ltb1wiOiAyOCxcbiAgICBcInZlbnRpbm92ZXNpbW9cIjogMjksXG4gICAgXCJ0cmVudGVzaW1vXCI6IDMwLFxuICAgIFwidHJlbnR1bmVzaW1vXCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICBcInNlY1wiOiBcInNlY29uZFwiLFxuICAgIFwic2Vjb25kb1wiOiBcInNlY29uZFwiLFxuICAgIFwic2Vjb25kaVwiOiBcInNlY29uZFwiLFxuICAgIFwibWluXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW5zXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dGlcIjogXCJtaW51dGVcIixcbiAgICBcImhcIjogXCJob3VyXCIsXG4gICAgXCJoclwiOiBcImhvdXJcIixcbiAgICBcIm9cIjogXCJob3VyXCIsXG4gICAgXCJvcmFcIjogXCJob3VyXCIsXG4gICAgXCJvcmVcIjogXCJob3VyXCIsXG4gICAgXCJnaW9ybm9cIjogXCJkYXlcIixcbiAgICBcImdpb3JuaVwiOiBcImRheVwiLFxuICAgIFwic2V0dGltYW5hXCI6IFwid2Vla1wiLFxuICAgIFwic2V0dGltYW5lXCI6IFwid2Vla1wiLFxuICAgIFwibWVzZVwiOiBcIm1vbnRoXCIsXG4gICAgXCJ0cmltZXN0cmVcIjogXCJxdWFydGVyXCIsXG4gICAgXCJ0cmltZXN0cmlcIjogXCJxdWFydGVyXCIsXG4gICAgXCJhbm5pXCI6IFwieWVhclwiLFxuICAgIFwiYW5ub1wiOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt8aGFsZig/OlxcXFxzezAsMn11bj8pP3x1bj9cXFxcYig/OlxcXFxzezAsMn1xdWFsY3Vubyk/fHF1YWxjdW5vfG1vbHRpfGE/XFxcXHN7MCwyfWFsY3VuaVxcXFxzezAsMn0oPzpvZik/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwidW5cIiB8fCBudW0gPT09IFwidW5hXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvYWxjdW5pLykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvbWV0w6EvKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL3BhaW8vKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9tb2x0aS8pKSB7XG4gICAgICAgIHJldHVybiA3O1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XXsxLDJ9KD86bW98bmRvfHJ6b3xzaW1vfGVzaW1vKT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgbGV0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgbnVtID0gbnVtLnJlcGxhY2UoLyg/Omltb3xuZG98cnpvfHJ0b3xudG98c3RvfHRhdm98bm9ub3xjaW1vfHRpbW98ZXNpbW8pJC9pLCBcIlwiKTtcbiAgICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBZRUFSX1BBVFRFUk4gPSBgKD86WzEtOV1bMC05XXswLDN9XFxcXHN7MCwyfSg/OkJFfEFEfEJDfEJDRXxDRSl8WzEtMl1bMC05XXszfXxbNS05XVswLTldKWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC9CRS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvQkUvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCkgLSA1NDM7XG4gICAgfVxuICAgIGlmICgvQkNFPy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvQkNFPy9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGlmICgvKEFEfENFKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKEFEfENFKS9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgY29uc3QgcmF3WWVhck51bWJlciA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICByZXR1cm4gZmluZE1vc3RMaWtlbHlBRFllYXIocmF3WWVhck51bWJlcik7XG59XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4gPSBgKCR7TlVNQkVSX1BBVFRFUk59KVxcXFxzezAsM30oJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OmFib3V0fGFyb3VuZClcXFxcc3swLDN9KT9gLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCkudHJpbSgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbmZ1bmN0aW9uIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFsyXS50b0xvd2VyQ2FzZSgpXTtcbiAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOX1dJVEhfUFJFRklYID0gbmV3IFJlZ0V4cChgKD86d2l0aGlufGlufGZvcilcXFxccypgICtcbiAgICBgKD86KD86cGnDuSBvIG1lbm98aW50b3Jub3xhcHByb3NzaW1hdGl2YW1lbnRlfHZlcnNvfHZlcnNvIGxlKVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFBBVFRFUk5fV0lUSE9VVF9QUkVGSVggPSBuZXcgUmVnRXhwKGAoPzooPzpwacO5IG8gbWVub3xpbnRvcm5vfGFwcHJvc3NpbWF0aXZhbWVudGV8dmVyc298dmVyc28gbGUpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gY29udGV4dC5vcHRpb24uZm9yd2FyZERhdGUgPyBQQVRURVJOX1dJVEhPVVRfUFJFRklYIDogUEFUVEVSTl9XSVRIX1BSRUZJWDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKD86b25cXFxcc3swLDN9KT9gICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgYCg/OmAgK1xuICAgIGBcXFxcc3swLDN9KD86YWx8XFxcXC18XFxcXOKAk3xmaW5vfGFsbGV8YWxsbyk/XFxcXHN7MCwzfWAgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICBcIik/XCIgK1xuICAgIGAoPzotfC98XFxcXHN7MCwzfSg/OmRhbCk/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlwiICtcbiAgICBgKD86LXwvfCw/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7WUVBUl9QQVRURVJOfSg/IVteXFxcXHNdXFxcXGQpKWAgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiwgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzotfC98XFxcXHMqLD9cXFxccyopXCIgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSkoPyFcXFxccyooPzphbXxwbSkpXFxcXHMqYCArXG4gICAgXCIoPzpcIiArXG4gICAgXCIoPzphbHxcXFxcLXxcXFxcYWxsZXxcXFxcZGVsfFxcXFxzKVxcXFxzKlwiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pXFxcXHMqYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/OlwiICtcbiAgICBcIig/Oi18L3xcXFxccyosP1xcXFxzKilcIiArXG4gICAgYCgke1lFQVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpKD8hXFxcXDpcXFxcZClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX0dST1VQID0gMjtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cyh7XG4gICAgICAgICAgICBkYXk6IGRheSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWF0Y2hbREFURV9UT19HUk9VUF0pIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfVE9fR1JPVVBdKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIHJlc3VsdC5zdGFydCA9IGNvbXBvbmVudHM7XG4gICAgICAgIHJlc3VsdC5lbmQgPSBjb21wb25lbnRzLmNsb25lKCk7XG4gICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiZGF5XCIsIGVuZERhdGUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZLCBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgoPzppbilcXFxccyopP2AgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGBcXFxccypgICtcbiAgICBgKD86YCArXG4gICAgYFssLV0/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSk/YCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVteXFxcXHNcXFxcd118XFxcXHMrW14wLTldfFxcXFxzKyR8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAyO1xuY29uc3QgWUVBUl9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lID0gbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA8PSAzICYmICFGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWVttb250aE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXggKyAobWF0Y2hbUFJFRklYX0dST1VQXSB8fCBcIlwiKS5sZW5ndGgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbW9udGhOYW1lXTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgMSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTW9udGhOYW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezR9KVtcXFxcLlxcXFwvXFxcXHNdYCArXG4gICAgYCg/Oigke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pfChbMC05XXsxLDJ9KSlbXFxcXC5cXFxcL1xcXFxzXWAgK1xuICAgIGAoWzAtOV17MSwyfSlgICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfTlVNQkVSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTlVNQkVSX0dST1VQID0gMztcbmNvbnN0IERBVEVfTlVNQkVSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb250aCA9IG1hdGNoW01PTlRIX05VTUJFUl9HUk9VUF1cbiAgICAgICAgICAgID8gcGFyc2VJbnQobWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXSlcbiAgICAgICAgICAgIDogTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgaWYgKG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9OVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFURV9OVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICAgICAgeWVhcjogeWVhcixcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVENhc3VhbFllYXJNb250aERheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFswLTldfDBbMS05XXwxWzAxMl0pLyhbMC05XXs0fSlcIiArIFwiXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCkuaW1wbHkoXCJkYXlcIiwgMSkuYXNzaWduKFwibW9udGhcIiwgbW9udGgpLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRTbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKHN0cmljdE1vZGUpO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfHRvfFxcXFw/KVxcXFxzKlwiO1xuICAgIH1cbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzphbGxlfGRhbGxlKVxcXFxzKik/P1wiO1xuICAgIH1cbiAgICBwcmltYXJ5U3VmZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzpcXFxccyooPzppbiBwdW50b3xvXFxcXFcqaW4gcHVudG98KD86ZGl8ZGVsfGRlbGxhfGlufGFsfGFsbGF8YWxsZSlcXFxccyooPzptYXR0aW5hfHBvbWVyaWdnaW98c2VyYSkpKT8oPyEvKSg/PVxcXFxXfCQpXCI7XG4gICAgfVxuICAgIGV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwic2VyYVwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gNiAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcInBvbWVyaWdnaW9cIikpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID49IDAgJiYgaG91ciA8PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwibWF0dGluYVwiKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgY29tcG9uZW50cy5nZXQoXCJob3VyXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmZhfHByaW1hfHByZWNlZGVudGUpKD89KD86XFxcXFd8JCkpYCwgXCJpXCIpO1xuY29uc3QgU1RSSUNUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHtUSU1FX1VOSVRTX1BBVFRFUk59KVxcXFxzezAsNX1mYSg/PSg/OlxcXFxXfCQpKWAsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaWN0TW9kZSA/IFNUUklDVF9QQVRURVJOIDogUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBvdXRwdXRUaW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgb3V0cHV0VGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVFRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmRvcG98cGnDuSB0YXJkaXxkYSBhZGVzc298YXZhbnRpfG9sdHJlfGEgc2VndWlyZSlgICsgXCIoPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuY29uc3QgU1RSSUNUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXCIgKyBcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCIoZG9wb3xwacO5IHRhcmRpKVwiICsgXCIoPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuY29uc3QgR1JPVVBfTlVNX1RJTUVVTklUUyA9IDE7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaWN0TW9kZSA/IFNUUklDVF9QQVRURVJOIDogUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbR1JPVVBfTlVNX1RJTUVVTklUU10pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBmcmFnbWVudHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoodG98LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooVHxhbGxlfGRvcG98cHJpbWF8aWx8ZGl8ZGVsfGRlbGxlfCx8LSk/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gLyhvcmF8b2dnaXxzdGFzZXJhfHF1ZXN0YSBzZXJhfGRvbWFuaXxkbW58aWVyaVxccypzZXJhKSg/PVxcV3wkKS9pO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSVRDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJvcmFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm9nZ2lcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaWVyaVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiZG9tYW5pXCI6XG4gICAgICAgICAgICBjYXNlIFwiZG1uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcInN0YXNlcmFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJxdWVzdGEgc2VyYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbmlnaHQoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC9pZXJpXFxzKnNlcmEvKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0RGF0ZS5nZXRIb3VycygpID4gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNEYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0RheS5zZXREYXRlKHByZXZpb3VzRGF5LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IHByZXZpb3VzRGF5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gLyg/OnF1ZXN0b3xxdWVzdGEpP1xcc3swLDN9KG1hdHRpbmF8cG9tZXJpZ2dpb3xzZXJhfG5vdHRlfG1lenphbm90dGV8bWV6em9naW9ybm8pKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJVENhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChtYXRjaFsxXS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwicG9tZXJpZ2dpb1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzZXJhXCI6XG4gICAgICAgICAgICBjYXNlIFwibm90dGVcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWV6emFub3R0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1hdHRpbmFcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZXp6b2dpb3Jub1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86aWxcXFxccyo/KT9cIiArXG4gICAgXCIoPzoocXVlc3RhfGwndWx0aW1hfHNjb3JzYXxwcm9zc2ltYSlcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKihxdWVzdGF8bCd1bHRpbWF8c2NvcnNhfHByb3NzaW1hKVxcXFxzKnNldHRpbWFuYSk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJVFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcInVsdGltYVwiIHx8IG1vZGlmaWVyV29yZCA9PSBcInNjb3JzYVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidWx0aW1hXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwicHJvc3NpbWFcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInByb3NzaW1hXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwicXVlc3RhXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJxdWVzdGFcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVFdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKHF1ZXN0b3x1bHRpbW98c2NvcnNvfHByb3NzaW1vfGRvcG9cXFxccypxdWVzdG98cXVlc3RhfHVsdGltYXxzY29yc2F8cHJvc3NpbWFcXFxccypxdWVzdGEpXFxcXHMqKCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pKD89XFxcXHMqKWAgKyBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IE1PRElGSUVSX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgUkVMQVRJVkVfV09SRF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJVFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBtYXRjaFtNT0RJRklFUl9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB1bml0V29yZCA9IG1hdGNoW1JFTEFUSVZFX1dPUkRfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWV1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbdW5pdFdvcmRdO1xuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCJwcm9zc2ltb1wiIHx8IG1vZGlmaWVyLnN0YXJ0c1dpdGgoXCJkb3BvXCIpKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCJwcmltYVwiIHx8IG1vZGlmaWVyID09IFwicHJlY2VkZW50ZVwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh1bml0V29yZC5tYXRjaCgvc2V0dGltYW5hL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkYXRlLmdldERheSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0V29yZC5tYXRjaCgvbWVzZS9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdFdvcmQubWF0Y2goL2Fubm8vaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKHF1ZXN0b3x1bHRpbW98cGFzc2F0b3xwcm9zc2ltb3xkb3BvfHF1ZXN0YXx1bHRpbWF8cGFzc2F0YXxwcm9zc2ltYXxcXFxcK3wtKVxcXFxzKigke1RJTUVfVU5JVFNfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzJdKTtcbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsYXN0XCI6XG4gICAgICAgICAgICBjYXNlIFwicGFzdFwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5mdW5jdGlvbiBoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9cXHMrKHByaW1hfGRhbCkkL2kpICE9IG51bGw7XG59XG5mdW5jdGlvbiBoYXNJbXBsaWVkTGF0ZXJSZWZlcmVuY2VEYXRlKHJlc3VsdCkge1xuICAgIHJldHVybiByZXN1bHQudGV4dC5tYXRjaCgvXFxzKyhkb3BvfGRhbHxmaW5vKSQvaSkgIT0gbnVsbDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTWVyZ2VSZWxhdGl2ZURhdGVSZWZpbmVyIGV4dGVuZHMgTWVyZ2luZ1JlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqJC9pO1xuICAgIH1cbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgaWYgKCF0ZXh0QmV0d2Vlbi5tYXRjaCh0aGlzLnBhdHRlcm5CZXR3ZWVuKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUoY3VycmVudFJlc3VsdCkgJiYgIWhhc0ltcGxpZWRMYXRlclJlZmVyZW5jZURhdGUoY3VycmVudFJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISFuZXh0UmVzdWx0LnN0YXJ0LmdldChcImRheVwiKSAmJiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwibW9udGhcIikgJiYgISFuZXh0UmVzdWx0LnN0YXJ0LmdldChcInllYXJcIik7XG4gICAgfVxuICAgIG1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBsZXQgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihjdXJyZW50UmVzdWx0LnRleHQpO1xuICAgICAgICBpZiAoaGFzSW1wbGllZEVhcmxpZXJSZWZlcmVuY2VEYXRlKGN1cnJlbnRSZXN1bHQpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKFJlZmVyZW5jZVdpdGhUaW1lem9uZS5mcm9tRGF0ZShuZXh0UmVzdWx0LnN0YXJ0LmRhdGUoKSksIHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2luZ1Jlc3VsdChuZXh0UmVzdWx0LnJlZmVyZW5jZSwgY3VycmVudFJlc3VsdC5pbmRleCwgYCR7Y3VycmVudFJlc3VsdC50ZXh0fSR7dGV4dEJldHdlZW59JHtuZXh0UmVzdWx0LnRleHR9YCwgY29tcG9uZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRNZXJnZVJlbGF0aXZlRGF0ZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IEVOTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvSVRNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBFTk1vbnRoTmFtZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUTW9udGhOYW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5DYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVENhc3VhbFllYXJNb250aERheVBhcnNlci5qc1wiO1xuaW1wb3J0IEVOU2xhc2hNb250aEZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUU2xhc2hNb250aEZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEVOVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9JVE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEVOTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvSVRNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCBFTkNhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBFTkNhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVENhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBFTldlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBJVFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlUmVsYXRpdmVEYXRlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9JVE1lcmdlUmVsYXRpdmVEYXRlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihmYWxzZSkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlLCBmYWxzZSkpO1xuZXhwb3J0IGNvbnN0IEdCID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCB0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRU5DYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEVOQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBFTk1vbnRoTmFtZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBJVFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlLCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEVOV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEVOQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5UaW1lRXhwcmVzc2lvblBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgbmV3IEVOVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgRU5NZXJnZVJlbGF0aXZlRGF0ZVJlZmluZXIoKSwgbmV3IEVOTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IEVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcInPDtm5kYWdcIjogMCxcbiAgICBcInPDtm5cIjogMCxcbiAgICBcInNvXCI6IDAsXG4gICAgXCJtw6VuZGFnXCI6IDEsXG4gICAgXCJtw6VuXCI6IDEsXG4gICAgXCJtw6VcIjogMSxcbiAgICBcInRpc2RhZ1wiOiAyLFxuICAgIFwidGlzXCI6IDIsXG4gICAgXCJ0aVwiOiAyLFxuICAgIFwib25zZGFnXCI6IDMsXG4gICAgXCJvbnNcIjogMyxcbiAgICBcIm9uXCI6IDMsXG4gICAgXCJ0b3JzZGFnXCI6IDQsXG4gICAgXCJ0b3JzXCI6IDQsXG4gICAgXCJ0b1wiOiA0LFxuICAgIFwiZnJlZGFnXCI6IDUsXG4gICAgXCJmcmVcIjogNSxcbiAgICBcImZyXCI6IDUsXG4gICAgXCJsw7ZyZGFnXCI6IDYsXG4gICAgXCJsw7ZyXCI6IDYsXG4gICAgXCJsw7ZcIjogNixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICBcImphbnVhcmlcIjogMSxcbiAgICBcImphblwiOiAxLFxuICAgIFwiamFuLlwiOiAxLFxuICAgIFwiZmVicnVhcmlcIjogMixcbiAgICBcImZlYlwiOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIFwibWFyc1wiOiAzLFxuICAgIFwibWFyXCI6IDMsXG4gICAgXCJtYXIuXCI6IDMsXG4gICAgXCJhcHJpbFwiOiA0LFxuICAgIFwiYXByXCI6IDQsXG4gICAgXCJhcHIuXCI6IDQsXG4gICAgXCJtYWpcIjogNSxcbiAgICBcImp1bmlcIjogNixcbiAgICBcImp1blwiOiA2LFxuICAgIFwianVuLlwiOiA2LFxuICAgIFwianVsaVwiOiA3LFxuICAgIFwianVsXCI6IDcsXG4gICAgXCJqdWwuXCI6IDcsXG4gICAgXCJhdWd1c3RpXCI6IDgsXG4gICAgXCJhdWdcIjogOCxcbiAgICBcImF1Zy5cIjogOCxcbiAgICBcInNlcHRlbWJlclwiOiA5LFxuICAgIFwic2VwXCI6IDksXG4gICAgXCJzZXAuXCI6IDksXG4gICAgXCJzZXB0XCI6IDksXG4gICAgXCJva3RvYmVyXCI6IDEwLFxuICAgIFwib2t0XCI6IDEwLFxuICAgIFwib2t0LlwiOiAxMCxcbiAgICBcIm5vdmVtYmVyXCI6IDExLFxuICAgIFwibm92XCI6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBcImRlY2VtYmVyXCI6IDEyLFxuICAgIFwiZGVjXCI6IDEyLFxuICAgIFwiZGVjLlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfRElDVElPTkFSWSA9IHtcbiAgICBcImbDtnJzdGFcIjogMSxcbiAgICBcImFuZHJhXCI6IDIsXG4gICAgXCJ0cmVkamVcIjogMyxcbiAgICBcImZqw6RyZGVcIjogNCxcbiAgICBcImZlbXRlXCI6IDUsXG4gICAgXCJzasOkdHRlXCI6IDYsXG4gICAgXCJzanVuZGVcIjogNyxcbiAgICBcIsOldHRvbmRlXCI6IDgsXG4gICAgXCJuaW9uZGVcIjogOSxcbiAgICBcInRpb25kZVwiOiAxMCxcbiAgICBcImVsZnRlXCI6IDExLFxuICAgIFwidG9sZnRlXCI6IDEyLFxuICAgIFwidHJldHRvbmRlXCI6IDEzLFxuICAgIFwiZmpvcnRvbmRlXCI6IDE0LFxuICAgIFwiZmVtdG9uZGVcIjogMTUsXG4gICAgXCJzZXh0b25kZVwiOiAxNixcbiAgICBcInNqdXR0b25kZVwiOiAxNyxcbiAgICBcImFydG9uZGVcIjogMTgsXG4gICAgXCJuaXR0b25kZVwiOiAxOSxcbiAgICBcInRqdWdvbmRlXCI6IDIwLFxuICAgIFwidGp1Z29mw7Zyc3RhXCI6IDIxLFxuICAgIFwidGp1Z29hbmRyYVwiOiAyMixcbiAgICBcInRqdWdvdHJlZGplXCI6IDIzLFxuICAgIFwidGp1Z29masOkcmRlXCI6IDI0LFxuICAgIFwidGp1Z29mZW10ZVwiOiAyNSxcbiAgICBcInRqdWdvc2rDpHR0ZVwiOiAyNixcbiAgICBcInRqdWdvc2p1bmRlXCI6IDI3LFxuICAgIFwidGp1Z2/DpXR0b25kZVwiOiAyOCxcbiAgICBcInRqdWdvbmlvbmRlXCI6IDI5LFxuICAgIFwidHJldHRpb25kZVwiOiAzMCxcbiAgICBcInRyZXR0aW9mw7Zyc3RhXCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcImVuXCI6IDEsXG4gICAgXCJldHRcIjogMSxcbiAgICBcInR2w6VcIjogMixcbiAgICBcInRyZVwiOiAzLFxuICAgIFwiZnlyYVwiOiA0LFxuICAgIFwiZmVtXCI6IDUsXG4gICAgXCJzZXhcIjogNixcbiAgICBcInNqdVwiOiA3LFxuICAgIFwiw6V0dGFcIjogOCxcbiAgICBcIm5pb1wiOiA5LFxuICAgIFwidGlvXCI6IDEwLFxuICAgIFwiZWx2YVwiOiAxMSxcbiAgICBcInRvbHZcIjogMTIsXG4gICAgXCJ0cmV0dG9uXCI6IDEzLFxuICAgIFwiZmpvcnRvblwiOiAxNCxcbiAgICBcImZlbXRvblwiOiAxNSxcbiAgICBcInNleHRvblwiOiAxNixcbiAgICBcInNqdXR0b25cIjogMTcsXG4gICAgXCJhcnRvblwiOiAxOCxcbiAgICBcIm5pdHRvblwiOiAxOSxcbiAgICBcInRqdWdvXCI6IDIwLFxuICAgIFwidHJldHRp0L5cIjogMzAsXG4gICAgXCJmeXJ0aW9cIjogNDAsXG4gICAgXCJmZW10aW9cIjogNTAsXG4gICAgXCJzZXh0aW9cIjogNjAsXG4gICAgXCJzanV0dGlvXCI6IDcwLFxuICAgIFwiw6V0dGlvXCI6IDgwLFxuICAgIFwibml0dGlvXCI6IDkwLFxuICAgIFwiaHVuZHJhXCI6IDEwMCxcbiAgICBcInR1c2VuXCI6IDEwMDAsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VrXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bmRcIjogXCJzZWNvbmRcIixcbiAgICBcInNla3VuZGVyXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW5cIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0XCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dGVyXCI6IFwibWludXRlXCIsXG4gICAgXCJ0aW1cIjogXCJob3VyXCIsXG4gICAgXCJ0aW1tZVwiOiBcImhvdXJcIixcbiAgICBcInRpbW1hclwiOiBcImhvdXJcIixcbiAgICBcImRhZ1wiOiBcImRheVwiLFxuICAgIFwiZGFnYXJcIjogXCJkYXlcIixcbiAgICBcInZlY2thXCI6IFwid2Vla1wiLFxuICAgIFwidmVja29yXCI6IFwid2Vla1wiLFxuICAgIFwibcOlblwiOiBcIm1vbnRoXCIsXG4gICAgXCJtw6VuYWRcIjogXCJtb250aFwiLFxuICAgIFwibcOlbmFkZXJcIjogXCJtb250aFwiLFxuICAgIFwiw6VyXCI6IFwieWVhclwiLFxuICAgIFwia3ZhcnTQsGxcIjogXCJxdWFydGVyXCIsXG4gICAgXCJrdmFydGFsXCI6IFwicXVhcnRlclwiLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfTk9fQUJCUl9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VrdW5kXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bmRlclwiOiBcInNlY29uZFwiLFxuICAgIFwibWludXRcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0ZXJcIjogXCJtaW51dGVcIixcbiAgICBcInRpbW1lXCI6IFwiaG91clwiLFxuICAgIFwidGltbWFyXCI6IFwiaG91clwiLFxuICAgIFwiZGFnXCI6IFwiZGF5XCIsXG4gICAgXCJkYWdhclwiOiBcImRheVwiLFxuICAgIFwidmVja2FcIjogXCJ3ZWVrXCIsXG4gICAgXCJ2ZWNrb3JcIjogXCJ3ZWVrXCIsXG4gICAgXCJtw6VuYWRcIjogXCJtb250aFwiLFxuICAgIFwibcOlbmFkZXJcIjogXCJtb250aFwiLFxuICAgIFwiw6VyXCI6IFwieWVhclwiLFxuICAgIFwia3ZhcnRhbFwiOiBcInF1YXJ0ZXJcIixcbn07XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18XFxcXGQrKWA7XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihPUkRJTkFMX05VTUJFUl9ESUNUSU9OQVJZKX18XFxcXGR7MSwyfSg/OmV8OmUpKWA7XG5leHBvcnQgY29uc3QgVElNRV9VTklUX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkpfSlcXFxcc3swLDV9YDtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9OT19BQkJSX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfTlVNQkVSX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX05VTUJFUl9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUludChudW0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmICgvXFxkKy8udGVzdChtYXRjaCkpIHtcbiAgICAgICAgbGV0IHllYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgICAgICB5ZWFyTnVtYmVyID0gZmluZE1vc3RMaWtlbHlBRFllYXIoeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXJOdW1iZXI7XG4gICAgfVxuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86cMOlXFxcXHMqPyk/XCIgK1xuICAgIFwiKD86KGbDtnJyYXxzZW5hc3RlfG7DpHN0YXxrb21tYW5kZSlcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKihmw7ZycmF8c2VuYXN0ZXxuw6RzdGF8a29tbWFuZGUpXFxcXHMqdmVja2EpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBTVUZGSVhfR1JPVVAgPSAzO1xuY29uc3QgV0VFS0RBWV9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTVldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFdFRUtEQVlfRElDVElPTkFSWVtkYXlPZldlZWtdO1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfR1JPVVBdO1xuICAgICAgICBjb25zdCBwb3N0Zml4ID0gbWF0Y2hbU1VGRklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQubWF0Y2goL2bDtnJyYXxzZW5hc3RlLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJsYXN0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkLm1hdGNoKC9uw6RzdGF8a29tbWFuZGUvKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIG9mZnNldCwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNWV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86ZGVuXFxcXHMqPyk/XCIgK1xuICAgIGAoWzAtOV17MSwyfSlgICtcbiAgICBgKD86XFxcXHMqKD86dGlsbHxcXFxcLXxcXFxc4oCTfFxcXFxzKVxcXFxzKihbMC05XXsxLDJ9KSk/XFxcXHMqYCArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgYCg/Oig/Oi18L3wsP1xcXFxzKikoWzAtOV17NH0oPyFbXlxcXFxzXVxcXFxkKSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU1ZNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoZGVubmF8ZGVuIGjDpHJ8ZsO2cnJhfHBhc3NlcmFkZXxuw6RzdGF8a29tbWFuZGV8ZWZ0ZXJ8XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUEFUVEVSTl9OT19BQkJSID0gbmV3IFJlZ0V4cChgKGRlbm5hfGRlbiBow6RyfGbDtnJyYXxwYXNzZXJhZGV8bsOkc3RhfGtvbW1hbmRlfGVmdGVyfFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19OT19BQkJSX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU1ZUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGFsbG93QWJicmV2aWF0aW9ucztcbiAgICBjb25zdHJ1Y3RvcihhbGxvd0FiYnJldmlhdGlvbnMgPSB0cnVlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID0gYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbG93QWJicmV2aWF0aW9ucyA/IFBBVFRFUk4gOiBQQVRURVJOX05PX0FCQlI7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzJdKTtcbiAgICAgICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJmw7ZycmFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwYXNzZXJhZGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCItXCI6XG4gICAgICAgICAgICAgICAgZHVyYXRpb24gPSByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIGR1cmF0aW9uKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TVlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAobnV8aWRhZ3xpbW9yZ29ufMO2dmVybW9yZ29ufGlnw6VyfGbDtnJyZ8OlcnxpXFxcXHMqZsO2cnJnw6VyKWAgK1xuICAgIGAoPzpcXFxccyooPzpww6VcXFxccyopPyhtb3Jnb25lbj98ZsO2cm1pZGRhZ2VuP3xtaWRkYWdlbj98ZWZ0ZXJtaWRkYWdlbj98a3bDpGxsZW4/fG5hdHRlbj98bWlkbmF0dCkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgVElNRV9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTVkNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBkYXRlS2V5d29yZCA9IChtYXRjaFtEQVRFX0dST1VQXSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1lS2V5d29yZCA9IChtYXRjaFtUSU1FX0dST1VQXSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGRhdGVLZXl3b3JkKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWRhZ1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImltb3Jnb25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJpbW9yblwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWfDpXJcIjpcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0RheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0RheS5zZXREYXRlKHByZXZpb3VzRGF5LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgcHJldmlvdXNEYXkpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBwcmV2aW91c0RheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZsO2cnJnw6VyXCI6XG4gICAgICAgICAgICBjYXNlIFwiaSBmw7ZycmfDpXJcIjpcbiAgICAgICAgICAgICAgICBjb25zdCB0d29EYXlzQWdvID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgIHR3b0RheXNBZ28uc2V0RGF0ZSh0d29EYXlzQWdvLmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdHdvRGF5c0Fnbyk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHR3b0RheXNBZ28pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodGltZUtleXdvcmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJtb3Jnb25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJtb3Jnb25lblwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJmw7ZybWlkZGFnXCI6XG4gICAgICAgICAgICBjYXNlIFwiZsO2cm1pZGRhZ2VuXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1pZGRhZ1wiOlxuICAgICAgICAgICAgY2FzZSBcIm1pZGRhZ2VuXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJlZnRlcm1pZGRhZ1wiOlxuICAgICAgICAgICAgY2FzZSBcImVmdGVybWlkZGFnZW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImt2w6RsbFwiOlxuICAgICAgICAgICAgY2FzZSBcImt2w6RsbGVuXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJuYXR0XCI6XG4gICAgICAgICAgICBjYXNlIFwibmF0dGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwibWlkbmF0dFwiOlxuICAgICAgICAgICAgICAgIGlmICh0aW1lS2V5d29yZCA9PT0gXCJtaWRuYXR0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TVkNhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgU1ZXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvU1ZXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgU1ZNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9TVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IFNWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1NWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFNWQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1NWQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgU1ZDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSwgbGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBTVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFNWV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFNWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW10sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZJVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzprbG98a2VsbG8pXFxcXHMqKT9cIjtcbiAgICB9XG4gICAgZm9sbG93aW5nUGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBcIlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnClcXFxccypcIjtcbiAgICB9XG4gICAgZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15cXHMqXFxkezR9XFxzKiQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcInN1bm51bnRhaVwiOiAwLFxuICAgIFwic3VubnVudGFpbmFcIjogMCxcbiAgICBcInN1XCI6IDAsXG4gICAgXCJtYWFuYW50YWlcIjogMSxcbiAgICBcIm1hYW5hbnRhaW5hXCI6IDEsXG4gICAgXCJtYVwiOiAxLFxuICAgIFwidGlpc3RhaVwiOiAyLFxuICAgIFwidGlpc3RhaW5hXCI6IDIsXG4gICAgXCJ0aVwiOiAyLFxuICAgIFwia2Vza2l2aWlra29cIjogMyxcbiAgICBcImtlc2tpdmlpa2tvbmFcIjogMyxcbiAgICBcImtlXCI6IDMsXG4gICAgXCJ0b3JzdGFpXCI6IDQsXG4gICAgXCJ0b3JzdGFpbmFcIjogNCxcbiAgICBcInRvXCI6IDQsXG4gICAgXCJwZXJqYW50YWlcIjogNSxcbiAgICBcInBlcmphbnRhaW5hXCI6IDUsXG4gICAgXCJwZVwiOiA1LFxuICAgIFwibGF1YW50YWlcIjogNixcbiAgICBcImxhdWFudGFpbmFcIjogNixcbiAgICBcImxhXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ0YW1taWt1dVwiOiAxLFxuICAgIFwidGFtbWlrdXV0YVwiOiAxLFxuICAgIFwidGFtbWlrdXVuXCI6IDEsXG4gICAgXCJ0YW1taVwiOiAxLFxuICAgIFwiaGVsbWlrdXVcIjogMixcbiAgICBcImhlbG1pa3V1dGFcIjogMixcbiAgICBcImhlbG1pa3V1blwiOiAyLFxuICAgIFwiaGVsbWlcIjogMixcbiAgICBcIm1hYWxpc2t1dVwiOiAzLFxuICAgIFwibWFhbGlza3V1dGFcIjogMyxcbiAgICBcIm1hYWxpc2t1dW5cIjogMyxcbiAgICBcIm1hYWxpc1wiOiAzLFxuICAgIFwiaHVodGlrdXVcIjogNCxcbiAgICBcImh1aHRpa3V1dGFcIjogNCxcbiAgICBcImh1aHRpa3V1blwiOiA0LFxuICAgIFwiaHVodGlcIjogNCxcbiAgICBcInRvdWtva3V1XCI6IDUsXG4gICAgXCJ0b3Vrb2t1dXRhXCI6IDUsXG4gICAgXCJ0b3Vrb2t1dW5cIjogNSxcbiAgICBcInRvdWtvXCI6IDUsXG4gICAgXCJrZXPDpGt1dVwiOiA2LFxuICAgIFwia2Vzw6RrdXV0YVwiOiA2LFxuICAgIFwia2Vzw6RrdXVuXCI6IDYsXG4gICAgXCJrZXPDpFwiOiA2LFxuICAgIFwiaGVpbsOka3V1XCI6IDcsXG4gICAgXCJoZWluw6RrdXV0YVwiOiA3LFxuICAgIFwiaGVpbsOka3V1blwiOiA3LFxuICAgIFwiaGVpbsOkXCI6IDcsXG4gICAgXCJlbG9rdXVcIjogOCxcbiAgICBcImVsb2t1dXRhXCI6IDgsXG4gICAgXCJlbG9rdXVuXCI6IDgsXG4gICAgXCJlbG9cIjogOCxcbiAgICBcInN5eXNrdXVcIjogOSxcbiAgICBcInN5eXNrdXV0YVwiOiA5LFxuICAgIFwic3l5c2t1dW5cIjogOSxcbiAgICBcInN5eXNcIjogOSxcbiAgICBcImxva2FrdXVcIjogMTAsXG4gICAgXCJsb2tha3V1dGFcIjogMTAsXG4gICAgXCJsb2tha3V1blwiOiAxMCxcbiAgICBcImxva2FcIjogMTAsXG4gICAgXCJtYXJyYXNrdXVcIjogMTEsXG4gICAgXCJtYXJyYXNrdXV0YVwiOiAxMSxcbiAgICBcIm1hcnJhc2t1dW5cIjogMTEsXG4gICAgXCJtYXJyYXNcIjogMTEsXG4gICAgXCJqb3VsdWt1dVwiOiAxMixcbiAgICBcImpvdWx1a3V1dGFcIjogMTIsXG4gICAgXCJqb3VsdWt1dW5cIjogMTIsXG4gICAgXCJqb3VsdVwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ5a3NpXCI6IDEsXG4gICAgXCJ5aGRlblwiOiAxLFxuICAgIFwia2Frc2lcIjogMixcbiAgICBcImthaGRlblwiOiAyLFxuICAgIFwia29sbWVcIjogMyxcbiAgICBcImtvbG1lblwiOiAzLFxuICAgIFwibmVsasOkXCI6IDQsXG4gICAgXCJuZWxqw6RuXCI6IDQsXG4gICAgXCJ2aWlzaVwiOiA1LFxuICAgIFwidmlpZGVuXCI6IDUsXG4gICAgXCJrdXVzaVwiOiA2LFxuICAgIFwia3V1ZGVuXCI6IDYsXG4gICAgXCJzZWl0c2Vtw6RuXCI6IDcsXG4gICAgXCJrYWhkZWtzYW5cIjogOCxcbiAgICBcInloZGVrc8OkblwiOiA5LFxuICAgIFwia3ltbWVuZW5cIjogMTAsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwic1wiOiBcInNlY29uZFwiLFxuICAgIFwic2VrXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bnRpXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bnRpYVwiOiBcInNlY29uZFwiLFxuICAgIFwic2VrdW5uaW5cIjogXCJzZWNvbmRcIixcbiAgICBcIm1pblwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXV0dGlcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV1dHRpYVwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXV0aW5cIjogXCJtaW51dGVcIixcbiAgICBcInRcIjogXCJob3VyXCIsXG4gICAgXCJ0dW50aVwiOiBcImhvdXJcIixcbiAgICBcInR1bnRpYVwiOiBcImhvdXJcIixcbiAgICBcInR1bm5pblwiOiBcImhvdXJcIixcbiAgICBcInB2XCI6IFwiZGF5XCIsXG4gICAgXCJww6RpdsOkXCI6IFwiZGF5XCIsXG4gICAgXCJww6RpdsOkw6RcIjogXCJkYXlcIixcbiAgICBcInDDpGl2w6RuXCI6IFwiZGF5XCIsXG4gICAgXCJ2a1wiOiBcIndlZWtcIixcbiAgICBcInZpaWtrb1wiOiBcIndlZWtcIixcbiAgICBcInZpaWtrb2FcIjogXCJ3ZWVrXCIsXG4gICAgXCJ2aWlrb25cIjogXCJ3ZWVrXCIsXG4gICAgXCJra1wiOiBcIm1vbnRoXCIsXG4gICAgXCJrdXVrYXVzaVwiOiBcIm1vbnRoXCIsXG4gICAgXCJrdXVrYXV0dGFcIjogXCJtb250aFwiLFxuICAgIFwia3V1a2F1ZGVuXCI6IFwibW9udGhcIixcbiAgICBcInZ1b3NpXCI6IFwieWVhclwiLFxuICAgIFwidnVvdHRhXCI6IFwieWVhclwiLFxuICAgIFwidnVvZGVuXCI6IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfTk9fQUJCUl9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VrdW50aVwiOiBcInNlY29uZFwiLFxuICAgIFwic2VrdW50aWFcIjogXCJzZWNvbmRcIixcbiAgICBcInNla3VubmluXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW51dXR0aVwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXV0dGlhXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dXRpblwiOiBcIm1pbnV0ZVwiLFxuICAgIFwidHVudGlcIjogXCJob3VyXCIsXG4gICAgXCJ0dW50aWFcIjogXCJob3VyXCIsXG4gICAgXCJ0dW5uaW5cIjogXCJob3VyXCIsXG4gICAgXCJww6RpdsOkXCI6IFwiZGF5XCIsXG4gICAgXCJww6RpdsOkw6RcIjogXCJkYXlcIixcbiAgICBcInDDpGl2w6RuXCI6IFwiZGF5XCIsXG4gICAgXCJ2aWlra29cIjogXCJ3ZWVrXCIsXG4gICAgXCJ2aWlra29hXCI6IFwid2Vla1wiLFxuICAgIFwidmlpa29uXCI6IFwid2Vla1wiLFxuICAgIFwia3V1a2F1c2lcIjogXCJtb250aFwiLFxuICAgIFwia3V1a2F1dHRhXCI6IFwibW9udGhcIixcbiAgICBcImt1dWthdWRlblwiOiBcIm1vbnRoXCIsXG4gICAgXCJ2dW9zaVwiOiBcInllYXJcIixcbiAgICBcInZ1b3R0YVwiOiBcInllYXJcIixcbiAgICBcInZ1b2RlblwiOiBcInllYXJcIixcbn07XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18XFxcXGQrKWA7XG5leHBvcnQgY29uc3QgVElNRV9VTklUX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkpfSlcXFxcc3swLDV9YDtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9OT19BQkJSX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC9cXGQrLy50ZXN0KG1hdGNoKSkge1xuICAgICAgICBsZXQgeWVhck51bWJlciA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICAgICAgaWYgKHllYXJOdW1iZXIgPCAxMDApIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSBmaW5kTW9zdExpa2VseUFEWWVhcih5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhck51bWJlcjtcbiAgICB9XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Oig/OlxcXFwsfFxcXFwofFxcXFzvvIgpXFxcXHMqKT9cIiArXG4gICAgXCIoPzoodmlpbWV8ZWRlbGxpbmVufGVkZWxsaXNlbsOkfGVuc2l8c2V1cmFhdmF8c2V1cmFhdmFuYXx0w6Rtw6R8dMOkbsOkKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKHZpaW1lfGVuc2l8c2V1cmFhdmEpXFxcXHMqdmlpa29sbGEpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBXRUVLREFZX0dST1VQID0gMjtcbmNvbnN0IFNVRkZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSVdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFdFRUtEQVlfRElDVElPTkFSWVtkYXlPZldlZWtdO1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfR1JPVVBdO1xuICAgICAgICBjb25zdCBwb3N0Zml4ID0gbWF0Y2hbU1VGRklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQubWF0Y2goL3ZpaW1lfGVkZWxsaW5lbnxlZGVsbGlzZW7DpC8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZC5tYXRjaCgvZW5zaXxzZXVyYWF2YXxzZXVyYWF2YW5hLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCBvZmZzZXQsIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GSVdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pXFxcXC4/YCArXG4gICAgYCg/OlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXHMpXFxcXHMqKFswLTldezEsMn0pXFxcXC4/KT9cXFxccypgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86KD86LXwvfCw/XFxcXHMqKShbMC05XXs0fSg/IVteXFxcXHNdXFxcXGQpKSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFURV9HUk9VUF0pO1xuICAgICAgICBpZiAoZGF5ID4gMzEpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFtEQVRFX0dST1VQXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhck51bWJlciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbREFURV9UT19HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZUludChtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChzZXVyYWF2YXxzZXVyYWF2YXR8c2V1cmFhdmllbnxlZGVsbGluZW58ZWRlbGxpc2V0fGVkZWxsaXN0ZW58dmlpbWVpc2V0fHZpaW1laXN0ZW58a3VsdW5lZXR8a3VsdW5laWRlbnxcXFxcK3wtKVxcXFxzKigke1RJTUVfVU5JVFNfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBQQVRURVJOX05PX0FCQlIgPSBuZXcgUmVnRXhwKGAoc2V1cmFhdmF8c2V1cmFhdmF0fHNldXJhYXZpZW58ZWRlbGxpbmVufGVkZWxsaXNldHxlZGVsbGlzdGVufHZpaW1laXNldHx2aWltZWlzdGVufGt1bHVuZWV0fGt1bHVuZWlkZW58XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIGNvbnN0cnVjdG9yKGFsbG93QWJicmV2aWF0aW9ucyA9IHRydWUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hbGxvd0FiYnJldmlhdGlvbnMgPSBhbGxvd0FiYnJldmlhdGlvbnM7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID8gUEFUVEVSTiA6IFBBVFRFUk5fTk9fQUJCUjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMl0pO1xuICAgICAgICBpZiAoIWR1cmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHByZWZpeCkge1xuICAgICAgICAgICAgY2FzZSBcImVkZWxsaW5lblwiOlxuICAgICAgICAgICAgY2FzZSBcImVkZWxsaXNldFwiOlxuICAgICAgICAgICAgY2FzZSBcImVkZWxsaXN0ZW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJ2aWltZWlzZXRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ2aWltZWlzdGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwia3VsdW5lZXRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJrdWx1bmVpZGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwiLVwiOlxuICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBkdXJhdGlvbik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHMqc2l0dGVuKD89XFxcXFd8JClgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0VGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIG91dHB1dFRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZJVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKCR7VElNRV9VTklUU19QQVRURVJOfSlcXFxccyooPzpzaXPDpGxsw6R8a3VsdWVzc2F8cMOkw6RzdMOkKSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSUNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8odMOkbsOkXFxzKik/KGFhbXVsbGF8YWFtdW5hfGFhbXVww6RpdsOkbGzDpHxww6RpdsOkbGzDpHxpbHRhcMOkaXbDpGxsw6R8aWxsYWxsYXx5w7ZsbMOkfGtlc2tpecO2bGzDpCkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IHRpbWVLZXl3b3JkUGF0dGVybiA9IG1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICByZXR1cm4gRklDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkUGF0dGVybik7XG4gICAgfVxuICAgIHN0YXRpYyBleHRyYWN0VGltZUNvbXBvbmVudHMoY29tcG9uZW50LCB0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgc3dpdGNoICh0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgICAgIGNhc2UgXCJhYW11bGxhXCI6XG4gICAgICAgICAgICBjYXNlIFwiYWFtdW5hXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJhYW11cMOkaXbDpGxsw6RcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInDDpGl2w6RsbMOkXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWx0YXDDpGl2w6RsbMOkXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWxsYWxsYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInnDtmxsw6RcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJrZXNraXnDtmxsw6RcIjpcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmdldChcImhvdXJcIikgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGREdXJhdGlvbkFzSW1wbGllZCh7IFwiZGF5XCI6IDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GSUNhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IEZJQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9GSUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChueXR8dMOkbsOkw6RufGh1b21lbm5hfHlsaWh1b21lbm5hfGVpbGVufHRvaXNzYXDDpGl2w6Ruw6R8dmlpbWVcXFxccyp5w7Zuw6QpYCArXG4gICAgYCg/OlxcXFxzKihhYW11bGxhfGFhbXVuYXxhYW11cMOkaXbDpGxsw6R8cMOkaXbDpGxsw6R8aWx0YXDDpGl2w6RsbMOkfGlsbGFsbGF8ecO2bGzDpHxrZXNraXnDtmxsw6QpKT9gICtcbiAgICBgKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IFRJTUVfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRklDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICAgICAgY29uc3QgZGF0ZUtleXdvcmQgPSAobWF0Y2hbREFURV9HUk9VUF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGltZUtleXdvcmQgPSAobWF0Y2hbVElNRV9HUk9VUF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChkYXRlS2V5d29yZCkge1xuICAgICAgICAgICAgY2FzZSBcIm55dFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0w6Ruw6TDpG5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJodW9tZW5uYVwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogMSB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ5bGlodW9tZW5uYVwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogMiB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJlaWxlblwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTEgfSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9pc3NhcMOkaXbDpG7DpFwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTIgfSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmIChkYXRlS2V5d29yZC5tYXRjaCgvdmlpbWVcXHMqecO2bsOkLykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldERhdGUuZ2V0SG91cnMoKSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTEgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWVLZXl3b3JkKSB7XG4gICAgICAgICAgICBjb21wb25lbnQgPSBGSUNhc3VhbFRpbWVQYXJzZXIuZXh0cmFjdFRpbWVDb21wb25lbnRzKGNvbXBvbmVudCwgdGltZUtleXdvcmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSU1lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKigtfOKAkylcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRklNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooVHxrbG98a2VsbG98LHwtKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRklUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBGSVdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9GSVdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBGSU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzXCI7XG5pbXBvcnQgRklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBGSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEZJQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IEZJQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IEZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0ZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRklNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9GSU1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBGSUNhc3VhbFRpbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRklDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgSVNPRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgRklUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRklXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgRklNZXJnZURhdGVSYW5nZVJlZmluZXIoKSwgbmV3IEZJTWVyZ2VEYXRlVGltZVJlZmluZXIoKV0sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgIFwiY2hcXHUxZWU3IG5oXFx1MWVhZHRcIjogMCxcbiAgICBcImNuXCI6IDAsXG4gICAgXCJ0aFxcdTFlZTkgaGFpXCI6IDEsXG4gICAgXCJ0MlwiOiAxLFxuICAgIFwidGhcXHUxZWU5IGJhXCI6IDIsXG4gICAgXCJ0M1wiOiAyLFxuICAgIFwidGhcXHUxZWU5IHRcXHUwMWIwXCI6IDMsXG4gICAgXCJ0NFwiOiAzLFxuICAgIFwidGhcXHUxZWU5IG5cXHUwMTAzbVwiOiA0LFxuICAgIFwidDVcIjogNCxcbiAgICBcInRoXFx1MWVlOSBzXFx1MDBlMXVcIjogNSxcbiAgICBcInQ2XCI6IDUsXG4gICAgXCJ0aFxcdTFlZTkgYlxcdTFlYTN5XCI6IDYsXG4gICAgXCJ0N1wiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIFwidGhcXHUwMGUxbmcgMVwiOiAxLFxuICAgIFwidGhcXHUwMGUxbmcgbVxcdTFlZDl0XCI6IDEsXG4gICAgXCJ0aFxcdTAwZTFuZyBnaVxcdTAwZWFuZ1wiOiAxLFxuICAgIFwidGhcXHUwMGUxbmcgMlwiOiAyLFxuICAgIFwidGhcXHUwMGUxbmcgaGFpXCI6IDIsXG4gICAgXCJ0aFxcdTAwZTFuZyAzXCI6IDMsXG4gICAgXCJ0aFxcdTAwZTFuZyBiYVwiOiAzLFxuICAgIFwidGhcXHUwMGUxbmcgNFwiOiA0LFxuICAgIFwidGhcXHUwMGUxbmcgdFxcdTAxYjBcIjogNCxcbiAgICBcInRoXFx1MDBlMW5nIDVcIjogNSxcbiAgICBcInRoXFx1MDBlMW5nIG5cXHUwMTAzbVwiOiA1LFxuICAgIFwidGhcXHUwMGUxbmcgNlwiOiA2LFxuICAgIFwidGhcXHUwMGUxbmcgc1xcdTAwZTF1XCI6IDYsXG4gICAgXCJ0aFxcdTAwZTFuZyA3XCI6IDcsXG4gICAgXCJ0aFxcdTAwZTFuZyBiXFx1MWVhM3lcIjogNyxcbiAgICBcInRoXFx1MDBlMW5nIDhcIjogOCxcbiAgICBcInRoXFx1MDBlMW5nIHRcXHUwMGUxbVwiOiA4LFxuICAgIFwidGhcXHUwMGUxbmcgOVwiOiA5LFxuICAgIFwidGhcXHUwMGUxbmcgY2hcXHUwMGVkblwiOiA5LFxuICAgIFwidGhcXHUwMGUxbmcgMTBcIjogMTAsXG4gICAgXCJ0aFxcdTAwZTFuZyBtXFx1MDFiMFxcdTFlZGRpXCI6IDEwLFxuICAgIFwidGhcXHUwMGUxbmcgMTFcIjogMTEsXG4gICAgXCJ0aFxcdTAwZTFuZyBtXFx1MDFiMFxcdTFlZGRpIG1cXHUxZWQ5dFwiOiAxMSxcbiAgICBcInRoXFx1MDBlMW5nIDEyXCI6IDEyLFxuICAgIFwidGhcXHUwMGUxbmcgbVxcdTAxYjBcXHUxZWRkaSBoYWlcIjogMTIsXG4gICAgXCJ0aFxcdTAwZTFuZyBjaFxcdTFlYTFwXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcIm1cXHUxZWQ5dFwiOiAxLFxuICAgIFwiaGFpXCI6IDIsXG4gICAgXCJiYVwiOiAzLFxuICAgIFwiYlxcdTFlZDFuXCI6IDQsXG4gICAgXCJuXFx1MDEwM21cIjogNSxcbiAgICBcInNcXHUwMGUxdVwiOiA2LFxuICAgIFwiYlxcdTFlYTN5XCI6IDcsXG4gICAgXCJ0XFx1MDBlMW1cIjogOCxcbiAgICBcImNoXFx1MDBlZG5cIjogOSxcbiAgICBcIm1cXHUwMWIwXFx1MWVkZGlcIjogMTAsXG4gICAgXCJtXFx1MDFiMFxcdTFlZGRpIG1cXHUxZWQ5dFwiOiAxMSxcbiAgICBcIm1cXHUwMWIwXFx1MWVkZGkgaGFpXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICBcImdpXFx1MDBlMnlcIjogXCJzZWNvbmRcIixcbiAgICBcInBoXFx1MDBmYXRcIjogXCJtaW51dGVcIixcbiAgICBcImdpXFx1MWVkZFwiOiBcImhvdXJcIixcbiAgICBcIm5nXFx1MDBlMHlcIjogXCJkYXlcIixcbiAgICBcInR1XFx1MWVhN25cIjogXCJ3ZWVrXCIsXG4gICAgXCJ0aFxcdTAwZTFuZ1wiOiBcIm1vbnRoXCIsXG4gICAgXCJuXFx1MDEwM21cIjogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gXCIoPzpcIiArIG1hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSkgKyBcInxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSspXCI7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IFwiKD86WzAtOV17MSw0fSg/OlxcXFxzKlRDTik/KVwiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGNvbnN0IHVwcGVyID0gbWF0Y2gudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBudW0gPSBwYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2csIFwiXCIpKTtcbiAgICBpZiAoL1RDTi8udGVzdCh1cHBlcikpXG4gICAgICAgIHJldHVybiAtbnVtO1xuICAgIHJldHVybiBmaW5kTW9zdExpa2VseUFEWWVhcihudW0pO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gXCIoXCIgKyBOVU1CRVJfUEFUVEVSTiArIFwiKVxcXFxzezAsNX0oXCIgKyBtYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpICsgXCIpXFxcXHN7MCw1fVwiO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86bmdcXHUwMGUweVxcXFxzKik/XCIgK1xuICAgIFwiKFswLTldezEsMn0pXCIgK1xuICAgIFwiXFxcXHMqdGhcXHUwMGUxbmdcXFxccypcIiArXG4gICAgXCIoWzAtOV17MSwyfSlcIiArXG4gICAgXCIoPzpcXFxccypuXFx1MDEwM21cXFxccyooXCIgK1xuICAgIFlFQVJfUEFUVEVSTiArXG4gICAgXCIpKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBEQVlfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAyO1xuY29uc3QgWUVBUl9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSVN0YW5kYXJkUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFtEQVlfR1JPVVBdKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludChtYXRjaFtNT05USF9HUk9VUF0pO1xuICAgICAgICBpZiAoZGF5ID4gMzEgfHwgbW9udGggPiAxMilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJU3RhbmRhcmRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSwgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihcIiArIG1hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKSArIFwiKVwiICsgXCIoPzpcXFxccyooPzpuxINtfC8pXFxcXHMqKFwiICsgWUVBUl9QQVRURVJOICsgXCIpKT9cIiArIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAxO1xuY29uc3QgWUVBUl9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSU1vbnRoWWVhclBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgaWYgKCFtb250aClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBjb250ZXh0LnJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJTW9udGhZZWFyUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OlxcXFxibsSDbVxcXFxzKihcIiArIFlFQVJfUEFUVEVSTiArIFwiKXxcXFxcYihbMC05XXsxLDR9KVxcXFxzKihUQ04pKSg/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfV0lUSF9OQU1fR1JPVVAgPSAxO1xuY29uc3QgQkFSRV9CQ19ZRUFSX0dST1VQID0gMjtcbmNvbnN0IEJBUkVfQkNfU1VGRklYX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJWWVhclBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHllYXJUZXh0O1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9XSVRIX05BTV9HUk9VUF0pIHtcbiAgICAgICAgICAgIHllYXJUZXh0ID0gbWF0Y2hbWUVBUl9XSVRIX05BTV9HUk9VUF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5ZWFyVGV4dCA9IG1hdGNoW0JBUkVfQkNfWUVBUl9HUk9VUF0gKyBcIiBcIiArIG1hdGNoW0JBUkVfQkNfU1VGRklYX0dST1VQXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgcGFyc2VZZWFyKHllYXJUZXh0KSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIDEpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgMSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklZZWFyUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvXFxiKGjDtG0gbmF5fGjDtG0gcXVhfGjDtG0ga2lhfG5nw6B5IG1haXxuZ8OgeSBraWF8YsOieSBnaeG7nXxsw7pjIG7DoHkpKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSUNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2hbMV0udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImLDonkgZ2nhu51cIjpcbiAgICAgICAgICAgIGNhc2UgXCJsw7pjIG7DoHlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcImjDtG0gbmF5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcImjDtG0gcXVhXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJow7RtIGtpYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUJlZm9yZShjb250ZXh0LnJlZmVyZW5jZSwgMik7XG4gICAgICAgICAgICBjYXNlIFwibmfDoHkgbWFpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm5nw6B5IGtpYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUFmdGVyKGNvbnRleHQucmVmZXJlbmNlLCAyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gLyhideG7lWlcXHMqKT8oc8Ohbmcgc+G7m218c8Ohbmd8dHLGsGF8Y2hp4buBdXx04buRaXzEkcOqbXxu4butYSDEkcOqbXxiw6xuaCBtaW5oKSg/PVxcV3wkKS9pO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBjb250ZXh0LnJlZkRhdGUpO1xuICAgICAgICByZXR1cm4gVklDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIG1hdGNoWzJdLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgICBzdGF0aWMgZXh0cmFjdFRpbWVDb21wb25lbnRzKGNvbXBvbmVudCwga2V5d29yZCkge1xuICAgICAgICBzd2l0Y2ggKGtleXdvcmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJiXFx1MDBlY25oIG1pbmhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzXFx1MDBlMW5nIHNcXHUxZWRibVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzXFx1MDBlMW5nXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRyXFx1MDFiMGFcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNoaVxcdTFlYzF1XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0XFx1MWVkMWlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIlxcdTAxMTFcXHUwMGVhbVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMjIpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiblxcdTFlZWRhIFxcdTAxMTFcXHUwMGVhbVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXCIgK1xuICAgIG1hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpICtcbiAgICBcIilcIiArXG4gICAgXCIoPzpcXFxccyoobsOgeXx04bubaXxzYXUoPyFcXFxccypraGkpfHF1YSkpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAxO1xuY29uc3QgTU9ESUZJRVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkb3dUZXh0ID0gbWF0Y2hbV0VFS0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgZG93ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2Rvd1RleHRdO1xuICAgICAgICBpZiAoZG93ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBtYXRjaFtNT0RJRklFUl9HUk9VUF07XG4gICAgICAgIGxldCBtb2RpZmllclR5cGUgPSBudWxsO1xuICAgICAgICBpZiAobW9kaWZpZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBtb2RpZmllci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKG0uaW5jbHVkZXMoXCJ04bubaVwiKSB8fCBtLmluY2x1ZGVzKFwic2F1XCIpKVxuICAgICAgICAgICAgICAgIG1vZGlmaWVyVHlwZSA9IFwibmV4dFwiO1xuICAgICAgICAgICAgZWxzZSBpZiAobS5pbmNsdWRlcyhcInF1YVwiKSlcbiAgICAgICAgICAgICAgICBtb2RpZmllclR5cGUgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIGRvdywgbW9kaWZpZXJUeXBlKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSVdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpsXFx1MDBmYWNcXFxccyp8dlxcdTAwZTBvXFxcXHMqKT9cIiArXG4gICAgXCIoWzAtOV17MSwyfSlcIiArXG4gICAgXCIoPzpcXFxccypnaVxcdTFlZGRcXFxccyooWzAtOV17MSwyfSk/XFxcXHMqKD86cGhcXHUwMGZhdFxcXFxzKik/XCIgK1xuICAgIFwiKHNcXHUwMGUxbmd8dHJcXHUwMWIwYXxjaGlcXHUxZWMxdXx0XFx1MWVkMWl8XFx1MDExMVxcdTAwZWFtKT9cIiArXG4gICAgXCJ8OihbMC05XXsyfSkpXCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgSE9VUl9HUk9VUCA9IDE7XG5jb25zdCBNSU5VVEVfR0lPX0dST1VQID0gMjtcbmNvbnN0IE1FUklESUVNX0dST1VQID0gMztcbmNvbnN0IE1JTlVURV9DT0xPTl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSVRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaG91ciA+IDIzKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiaG91clwiLCBob3VyKTtcbiAgICAgICAgY29uc3QgbWludXRlID0gbWF0Y2hbTUlOVVRFX0NPTE9OX0dST1VQXVxuICAgICAgICAgICAgPyBwYXJzZUludChtYXRjaFtNSU5VVEVfQ09MT05fR1JPVVBdKVxuICAgICAgICAgICAgOiBtYXRjaFtNSU5VVEVfR0lPX0dST1VQXVxuICAgICAgICAgICAgICAgID8gcGFyc2VJbnQobWF0Y2hbTUlOVVRFX0dJT19HUk9VUF0pXG4gICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICBpZiAobWludXRlID49IDYwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtaW51dGVcIiwgbWludXRlKTtcbiAgICAgICAgY29uc3QgbWVyaWRpZW0gPSBtYXRjaFtNRVJJRElFTV9HUk9VUF0/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChtZXJpZGllbSA9PT0gXCJzw6FuZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1lcmlkaWVtID09PSBcInRyxrBhXCIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIgKyAxMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgaG91ciA+PSAxMiA/IE1lcmlkaWVtLlBNIDogTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1lcmlkaWVtID09PSBcImNoaeG7gXVcIiB8fCBtZXJpZGllbSA9PT0gXCJ04buRaVwiIHx8IG1lcmlkaWVtID09PSBcIsSRw6ptXCIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIgKyAxMik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSVRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCJcXFxcc3swLDV9KD86dHJcXHUwMWIwXFx1MWVkYmN8cXVhKSg/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGlmICghZHVyYXRpb24pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBcIlxcXFxzezAsNX0oPzpzYXV8blxcdTFlZWZhfHRcXHUxZWRiaXx0aVxcdTFlYmZwKSg/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgaWYgKCFkdXJhdGlvbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBkdXJhdGlvbik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzp0cm9uZ1xcXFxzKig/OnZcXHUwMGYybmdcXFxccyopPylcIiArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGlmICghdGltZVVuaXRzKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSwgTlVNQkVSX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmNvbnN0IENBU1VBTF9VTklUX1BBVFRFUk4gPSBcIig/OlwiICsgTlVNQkVSX1BBVFRFUk4gKyBcIlxcXFxzezAsNX0pPyg/OlwiICsgbWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKSArIFwiKVwiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIobsOgeXx0csaw4bubY3xxdWF8c2F1fHThu5tpfHRp4bq/cClcXFxccyooXCIgK1xuICAgIENBU1VBTF9VTklUX1BBVFRFUk4gK1xuICAgIFwiKVwiICtcbiAgICBcInwoXCIgK1xuICAgIENBU1VBTF9VTklUX1BBVFRFUk4gK1xuICAgIFwiKVxcXFxzKihuw6B5fHRyxrDhu5tjfHF1YXxzYXV8dOG7m2l8dGnhur9wKVwiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSAobWF0Y2hbMV0gfHwgbWF0Y2hbNF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFRleHQgPSAobWF0Y2hbMl0gfHwgbWF0Y2hbM10gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGR1cmF0aW9uID0gcGFyc2VEdXJhdGlvbih1bml0VGV4dCk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhkdXJhdGlvbikubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbdW5pdFRleHRdO1xuICAgICAgICAgICAgaWYgKCF1bml0KVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7IFt1bml0XTogMSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RpZmllciA9PT0gXCJ0csaw4bubY1wiIHx8IG1vZGlmaWVyID09PSBcInF1YVwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHJldmVyc2VEdXJhdGlvbihkdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgZHVyYXRpb24pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyooPzrigJN8LXzEkeG6v258dOG7m2l8dsOgKVxccyokLztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKig/OmzDumN8dsOgb3wsfFR8LSk/XFxzKiQvO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZXh0ZW5kcyBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIHtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSVN0YW5kYXJkUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklTdGFuZGFyZFBhcnNlci5qc1wiO1xuaW1wb3J0IFZJTW9udGhZZWFyUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklNb250aFllYXJQYXJzZXIuanNcIjtcbmltcG9ydCBWSVllYXJQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVllYXJQYXJzZXIuanNcIjtcbmltcG9ydCBWSUNhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSUNhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBWSUNhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBWSVdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBWSVRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgVklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1ZJVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSU1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9WSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IFZJTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvVklNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IFZJTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9WSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKHRydWUpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCBsaXR0bGVFbmRpYW4pO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFZJQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBWSUNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgVklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSwgbGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBWSVN0YW5kYXJkUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVklNb250aFllYXJQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSVllYXJQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSVdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSVRpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBWSVRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBuZXcgVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtcbiAgICAgICAgICAgIG5ldyBWSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSU1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLFxuICAgICAgICAgICAgbmV3IFZJTWVyZ2VEYXRlVGltZVJlZmluZXIoKSxcbiAgICAgICAgXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCAqIGFzIGVuIGZyb20gXCIuL2xvY2FsZXMvZW4vaW5kZXguanNcIjtcbmltcG9ydCB7IENocm9ubywgUGFyc2luZ0NvbnRleHQgfSBmcm9tIFwiLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5leHBvcnQgeyBlbiwgQ2hyb25vLCBQYXJzaW5nQ29udGV4dCwgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmltcG9ydCAqIGFzIGRlIGZyb20gXCIuL2xvY2FsZXMvZGUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGZyIGZyb20gXCIuL2xvY2FsZXMvZnIvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGphIGZyb20gXCIuL2xvY2FsZXMvamEvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHB0IGZyb20gXCIuL2xvY2FsZXMvcHQvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIG5sIGZyb20gXCIuL2xvY2FsZXMvbmwvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHpoIGZyb20gXCIuL2xvY2FsZXMvemgvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHJ1IGZyb20gXCIuL2xvY2FsZXMvcnUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGVzIGZyb20gXCIuL2xvY2FsZXMvZXMvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHVrIGZyb20gXCIuL2xvY2FsZXMvdWsvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGl0IGZyb20gXCIuL2xvY2FsZXMvaXQvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHN2IGZyb20gXCIuL2xvY2FsZXMvc3YvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGZpIGZyb20gXCIuL2xvY2FsZXMvZmkvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHZpIGZyb20gXCIuL2xvY2FsZXMvdmkvaW5kZXguanNcIjtcbmV4cG9ydCB7IGRlLCBmciwgamEsIHB0LCBubCwgemgsIHJ1LCBlcywgdWssIGl0LCBzdiwgZmksIHZpIH07XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gZW4uc3RyaWN0O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IGVuLmNhc3VhbDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qKlxuICogU3lzdMOobWUgZGUgbG9nZ2luZyBzdHJ1Y3R1csOpIHBvdXIgTmF0dXJhbCBMYW5ndWFnZSBEYXRlc1xuICovXG5cbmV4cG9ydCB0eXBlIExvZ0xldmVsID0gJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcic7XG5cbi8qKlxuICogRm9ybWF0ZSB1bmUgZW50csOpZSBkZSBsb2cgYXZlYyB0aW1lc3RhbXBcbiAqL1xuZnVuY3Rpb24gZm9ybWF0TG9nRW50cnkobGV2ZWw6IExvZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiB1bmtub3duKTogc3RyaW5nIHtcbiAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICBcbiAgaWYgKGNvbnRleHQpIHtcbiAgICByZXR1cm4gYFske3RpbWVzdGFtcH1dIFske2xldmVsLnRvVXBwZXJDYXNlKCl9XSAke21lc3NhZ2V9IHwgQ29udGV4dDogJHtKU09OLnN0cmluZ2lmeShjb250ZXh0KX1gO1xuICB9XG4gIHJldHVybiBgWyR7dGltZXN0YW1wfV0gWyR7bGV2ZWwudG9VcHBlckNhc2UoKX1dICR7bWVzc2FnZX1gO1xufVxuXG4vKipcbiAqIFN5c3TDqG1lIGRlIGxvZ2dpbmcgc3RydWN0dXLDqVxuICovXG5leHBvcnQgY29uc3QgbG9nZ2VyID0ge1xuICAvKipcbiAgICogTG9nIGRlIG5pdmVhdSBkZWJ1ZyAocG91ciBsZSBkw6l2ZWxvcHBlbWVudClcbiAgICovXG4gIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2dFbnRyeSgnZGVidWcnLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgICBjb25zb2xlLmRlYnVnKGZvcm1hdHRlZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExvZyBkZSBuaXZlYXUgaW5mbyAoaW5mb3JtYXRpb25zIGfDqW7DqXJhbGVzKVxuICAgKi9cbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TG9nRW50cnkoJ2luZm8nLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgICBjb25zb2xlLmRlYnVnKGZvcm1hdHRlZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExvZyBkZSBuaXZlYXUgd2FybiAoYXZlcnRpc3NlbWVudHMpXG4gICAqL1xuICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2dFbnRyeSgnd2FybicsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgIGNvbnNvbGUud2Fybihmb3JtYXR0ZWQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBMb2cgZGUgbml2ZWF1IGVycm9yIChlcnJldXJzKVxuICAgKi9cbiAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBjb250ZXh0PzogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdExvZ0VudHJ5KCdlcnJvcicsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0dGVkKTtcbiAgfSxcbn07XG5cbiIsIi8vIENIQU5HRU1FTlQgSUNJIDogT24gdXRpbGlzZSBcImltcG9ydCAqIGFzIGNocm9ub1wiIGNhciBsYSB2ZXJzaW9uIDIueCBuJ2EgcGx1cyBkJ2V4cG9ydCBwYXIgZMOpZmF1dFxuaW1wb3J0ICogYXMgY2hyb25vIGZyb20gXCJjaHJvbm8tbm9kZVwiO1xuaW1wb3J0IHsgQ2hyb25vLCBQYXJzZXIsIFBhcnNpbmdDb250ZXh0LCBSZWZpbmVyIH0gZnJvbSBcImNocm9uby1ub2RlXCI7XG5pbXBvcnQgeyBPUkRJTkFMX05VTUJFUl9QQVRURVJOLCBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLCBkZXNjcmliZUVycm9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dlclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5cbi8vIExvY2FsIHR5cGUgZGVmaW5pdGlvbiBtYXRjaGluZyBjaHJvbm8tbm9kZSdzIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXG4vLyBDb25maWd1cmF0aW9uIGlzIG5vdCBleHBvcnRlZCBmcm9tIHRoZSBtYWluIG1vZHVsZSwgc28gd2UgZGVmaW5lIGl0IGxvY2FsbHlcbmludGVyZmFjZSBDaHJvbm9Db25maWd1cmF0aW9uIHtcbiAgcGFyc2VyczogUGFyc2VyW107XG4gIHJlZmluZXJzOiBSZWZpbmVyW107XG59XG5cbmZ1bmN0aW9uIGdldE9yZGluYWxEYXRlUGFyc2VyKCkge1xuICByZXR1cm4gKHtcbiAgICBwYXR0ZXJuOiAoKSA9PiBuZXcgUmVnRXhwKE9SRElOQUxfTlVNQkVSX1BBVFRFUk4pLFxuICAgIGV4dHJhY3Q6IChjb250ZXh0OiBQYXJzaW5nQ29udGV4dCwgbWF0Y2g6IFJlZ0V4cE1hdGNoQXJyYXkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRheTogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFswXSksXG4gICAgICAgIC8vIG1vbWVudCguLi4pLm1vbnRoKCkgaXMgMC1pbmRleGVkIChKYW49MCksIGJ1dCBjaHJvbm8tbm9kZSdzXG4gICAgICAgIC8vIFBhcnNpbmdDb21wb25lbnRzLm1vbnRoIGlzIDEtaW5kZXhlZCAoSmFuPTEpIC0tIHZlcmlmaWVkIGFnYWluc3RcbiAgICAgICAgLy8gY2hyb25vLW5vZGUncyBvd24gbG9jYWxlIGNvbnN0YW50cy4gV2l0aG91dCB0aGUgKzEgdGhpcyBhbHdheXNcbiAgICAgICAgLy8gcmVzb2x2ZWQgdG8gdGhlIHdyb25nIG1vbnRoIChhbmQsIHZpYSBmb3J3YXJkRGF0ZSwgc29tZXRpbWVzIHRoZVxuICAgICAgICAvLyB3cm9uZyB5ZWFyIHRvbykuXG4gICAgICAgIC8vIE11c3QgdXNlIGNvbnRleHQucmVmRGF0ZSAodGhlIGRhdGUgY2hyb25vIHdhcyBhc2tlZCB0byBwYXJzZVxuICAgICAgICAvLyByZWxhdGl2ZSB0byksIG5vdCBtb21lbnQoKSAodGhlIHJlYWwgY3VycmVudCB3YWxsLWNsb2NrIHRpbWUpOlxuICAgICAgICAvLyBjYWxsZXJzIGNhbiBhbmQgZG8gcGFzcyBhbiBleHBsaWNpdCByZWZlcmVuY2UgZGF0ZSwgZS5nLiB0ZXN0cywgb3JcbiAgICAgICAgLy8gZ2V0UGFyc2VkRGF0ZVJlc3VsdCgpJ3MgY2FsbGVycyBpbiBwYXJzZXIudHMuXG4gICAgICAgIG1vbnRoOiBtb21lbnQoY29udGV4dC5yZWZEYXRlKS5tb250aCgpICsgMSxcbiAgICAgIH07XG4gICAgfSxcbiAgfSBhcyBQYXJzZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDaHJvbm9zKGxhbmd1YWdlczogc3RyaW5nW10pOiBDaHJvbm9bXSB7XG4gIGNvbnN0IGxvY2FsZSA9IG1vbWVudC5sb2NhbGUoKTtcbiAgY29uc3QgaXNHQiA9IGxvY2FsZSA9PT0gJ2VuLWdiJztcblxuICBjb25zdCBjaHJvbm9zOiBDaHJvbm9bXSA9IFtdO1xuICBjb25zdCBvcmRpbmFsRGF0ZVBhcnNlciA9IGdldE9yZGluYWxEYXRlUGFyc2VyKCk7XG4gIC8vIEJ1aWxkcyBhIENocm9ubyBpbnN0YW5jZSBmb3IgYSBsb2NhbGUgbW9kdWxlLCBzdXBwb3J0aW5nIGJvdGggY2hyb25vLW5vZGVcbiAgLy8gQVBJIHNoYXBlczogb2xkZXIgbG9jYWxlcyBzdGlsbCBleHBvc2UgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihpc0dCKSxcbiAgLy8gYnV0IGFzIG9mIGNocm9uby1ub2RlIDIueCB0aGUgXCJlblwiIGxvY2FsZSBpbnN0ZWFkIGV4cG9ydHMgcHJlLWJ1aWx0XG4gIC8vIENocm9ubyBpbnN0YW5jZXMgKGNhc3VhbC9HQi9zdHJpY3QpIHdpdGggbm8gY29uZmlnIGZhY3RvcnkgYXQgYWxsLiBBXG4gIC8vIGxvY2FsZSBtaXNzaW5nIGJvdGggd291bGQgcHJldmlvdXNseSBiZSBzaWxlbnRseSB0cmVhdGVkIGFzIHVuc3VwcG9ydGVkXG4gIC8vIChsb2dnZWQgYXQgXCJ3YXJuXCIgb25seSkgYW5kIGV2ZXJ5IG1hdGNoIGZvciB0aGF0IGxhbmd1YWdlIHdvdWxkIGZhbGxcbiAgLy8gdGhyb3VnaCB0byB0b2RheS9ub3cgd2l0aCBubyB2aXNpYmxlIGVycm9yIC0tIHRoaXMgaGFwcGVuZWQgZm9yIEVuZ2xpc2hcbiAgLy8gc3BlY2lmaWNhbGx5LCBmb3IgZXZlcnkgdXNlciB3aG8gZW5hYmxlZCBpdCwgc2luY2UgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvblxuICAvLyBpcyBleGFjdGx5IHdoYXQgZGlzYXBwZWFyZWQgZnJvbSB0aGF0IG1vZHVsZS5cbiAgY29uc3QgYnVpbGRDaHJvbm9Gb3JNb2R1bGUgPSAobGFuZ01vZHVsZToge1xuICAgIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24/OiAoaXNHQjogYm9vbGVhbikgPT4gdW5rbm93bjtcbiAgICBjYXN1YWw/OiBDaHJvbm87XG4gICAgR0I/OiBDaHJvbm87XG4gIH0gfCB1bmRlZmluZWQpOiBDaHJvbm8gfCBudWxsID0+IHtcbiAgICBpZiAoIWxhbmdNb2R1bGUpIHJldHVybiBudWxsO1xuICAgIGlmIChsYW5nTW9kdWxlLmNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGxhbmdNb2R1bGUuY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihpc0dCKTtcbiAgICAgIC8vIENocm9ubyBjb25zdHJ1Y3RvciBhY2NlcHRzIENvbmZpZ3VyYXRpb24gdHlwZSAtIGNhc3QgbmVlZGVkIGJlY2F1c2UgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbiByZXR1cm5zIHVua25vd25cbiAgICAgIHJldHVybiBuZXcgQ2hyb25vKGNvbmZpZyBhcyBDaHJvbm9Db25maWd1cmF0aW9uKTtcbiAgICB9XG4gICAgaWYgKGxhbmdNb2R1bGUuY2FzdWFsKSB7XG4gICAgICAvLyBDbG9uZSBzbyB3ZSBkb24ndCBtdXRhdGUgY2hyb25vLW5vZGUncyBzaGFyZWQgc2luZ2xldG9uIGluc3RhbmNlXG4gICAgICAvLyAobXVsdGlwbGUgTkxEUGFyc2VyIGluc3RhbmNlcyB3b3VsZCBvdGhlcndpc2UgYWxsIHB1c2ggdGhlaXIgb3duXG4gICAgICAvLyBvcmRpbmFsRGF0ZVBhcnNlciBvbnRvIHRoZSBzYW1lIHNoYXJlZCBvYmplY3QpLlxuICAgICAgY29uc3QgYmFzZSA9IChpc0dCICYmIGxhbmdNb2R1bGUuR0IpID8gbGFuZ01vZHVsZS5HQiA6IGxhbmdNb2R1bGUuY2FzdWFsO1xuICAgICAgcmV0dXJuIGJhc2UuY2xvbmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgbGFuZ3VhZ2VzLmZvckVhY2gobCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE9uIGFjY8OoZGUgYXV4IGxhbmd1ZXMgZHluYW1pcXVlbWVudCB2aWEgUmVjb3JkXG4gICAgICBjb25zdCBsYW5nTW9kdWxlID0gKGNocm9ubyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbF0gYXMge1xuICAgICAgICBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uPzogKGlzR0I6IGJvb2xlYW4pID0+IHVua25vd247XG4gICAgICAgIGNhc3VhbD86IENocm9ubztcbiAgICAgICAgR0I/OiBDaHJvbm87XG4gICAgICB9IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgYyA9IGJ1aWxkQ2hyb25vRm9yTW9kdWxlKGxhbmdNb2R1bGUpO1xuICAgICAgaWYgKCFjKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBMYW5ndWFnZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IGNocm9uby1ub2RlYCwgeyBsYW5ndWFnZTogbCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYy5wYXJzZXJzLnB1c2gob3JkaW5hbERhdGVQYXJzZXIpO1xuICAgICAgY2hyb25vcy5wdXNoKGMpO1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiQ2hyb25vIGluaXRpYWxpemVkIGZvciBsYW5ndWFnZVwiLCB7IGxhbmd1YWdlOiBsIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBpbml0aWFsaXplIGNocm9ubyBmb3IgbGFuZ3VhZ2VgLCB7XG4gICAgICAgIGxhbmd1YWdlOiBsLFxuICAgICAgICBlcnJvcjogZGVzY3JpYmVFcnJvcihlcnJvciksXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFNpIGF1Y3VuZSBsYW5ndWUgbidhIHB1IMOqdHJlIGluaXRpYWxpc8OpZSwgdXRpbGlzZXIgbCdhbmdsYWlzIHBhciBkw6lmYXV0XG4gIGlmIChjaHJvbm9zLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZ2dlci53YXJuKCdObyBsYW5ndWFnZXMgY291bGQgYmUgaW5pdGlhbGl6ZWQsIGF0dGVtcHRpbmcgRW5nbGlzaCBmYWxsYmFjaycpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbk1vZHVsZSA9IChjaHJvbm8gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmVuIGFzIHtcbiAgICAgICAgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbj86IChpc0dCOiBib29sZWFuKSA9PiB1bmtub3duO1xuICAgICAgICBjYXN1YWw/OiBDaHJvbm87XG4gICAgICAgIEdCPzogQ2hyb25vO1xuICAgICAgfSB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGMgPSBidWlsZENocm9ub0Zvck1vZHVsZShlbk1vZHVsZSk7XG4gICAgICBpZiAoYykge1xuICAgICAgICBjLnBhcnNlcnMucHVzaChvcmRpbmFsRGF0ZVBhcnNlcik7XG4gICAgICAgIGNocm9ub3MucHVzaChjKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0RlZmF1bHQgRW5nbGlzaCBjaHJvbm8gaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0VuZ2xpc2ggY2hyb25vIG1vZHVsZSBub3QgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGluaXRpYWxpemUgZGVmYXVsdCBFbmdsaXNoIGNocm9ubycsIHtcbiAgICAgICAgZXJyb3I6IGRlc2NyaWJlRXJyb3IoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNocm9ub3M7XG59IiwiaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcImNocm9uby1ub2RlXCI7XG5pbXBvcnQgdCBmcm9tIFwiLi9sYW5nL2hlbHBlclwiO1xuXG4vKipcbiAqIEludGVyZmFjZSBwb3VyIGxlcyBkw6lwZW5kYW5jZXMgbsOpY2Vzc2FpcmVzIMOgIGxhIGTDqXRlY3Rpb24gZCdoZXVyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVEZXRlY3RvckRlcGVuZGVuY2llcyB7XG4gIGxhbmd1YWdlczogc3RyaW5nW107XG4gIGNocm9ub3M6IENocm9ub1tdO1xuICByZWdleFJlbGF0aXZlOiBSZWdFeHA7XG4gIHJlZ2V4UmVsYXRpdmVDb21iaW5lZDogUmVnRXhwO1xuICByZWdleFdlZWtkYXk6IFJlZ0V4cDtcbiAgcmVnZXhXZWVrZGF5V2l0aFRpbWU6IFJlZ0V4cDtcbn1cblxuLyoqXG4gKiBDbGFzc2UgcG91ciBkw6l0ZWN0ZXIgc2kgdW4gdGV4dGUgY29udGllbnQgdW5lIGNvbXBvc2FudGUgZCdoZXVyZVxuICovXG5leHBvcnQgY2xhc3MgVGltZURldGVjdG9yIHtcbiAgcHJpdmF0ZSBsYW5ndWFnZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIGNocm9ub3M6IENocm9ub1tdO1xuICBwcml2YXRlIHJlZ2V4UmVsYXRpdmU6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWdleFJlbGF0aXZlQ29tYmluZWQ6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWdleFdlZWtkYXk6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWdleFdlZWtkYXlXaXRoVGltZTogUmVnRXhwO1xuXG4gIGNvbnN0cnVjdG9yKGRlcGVuZGVuY2llczogVGltZURldGVjdG9yRGVwZW5kZW5jaWVzKSB7XG4gICAgdGhpcy5sYW5ndWFnZXMgPSBkZXBlbmRlbmNpZXMubGFuZ3VhZ2VzO1xuICAgIHRoaXMuY2hyb25vcyA9IGRlcGVuZGVuY2llcy5jaHJvbm9zO1xuICAgIHRoaXMucmVnZXhSZWxhdGl2ZSA9IGRlcGVuZGVuY2llcy5yZWdleFJlbGF0aXZlO1xuICAgIHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkID0gZGVwZW5kZW5jaWVzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZDtcbiAgICB0aGlzLnJlZ2V4V2Vla2RheSA9IGRlcGVuZGVuY2llcy5yZWdleFdlZWtkYXk7XG4gICAgdGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSA9IGRlcGVuZGVuY2llcy5yZWdleFdlZWtkYXlXaXRoVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWw6lyaWZpZSBzaSBsZSB0ZXh0ZSBjb250aWVudCB1bmUgY29tcG9zYW50ZSBkJ2hldXJlXG4gICAqL1xuICBoYXNUaW1lQ29tcG9uZW50KHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIDEuIElmIGl0J3MgXCJub3dcIiBpbiBhbnkgbGFuZ3VhZ2UsIFlFUy5cbiAgICAvLyBUcmFuc2xhdGlvbnMgY2FuIGxpc3Qgc2V2ZXJhbCB2YXJpYW50cyBwaXBlLXNlcGFyYXRlZCAoZS5nLiBJdGFsaWFuXG4gICAgLy8gXCJhZGVzc298b3JhXCIsIENoaW5lc2UgXCLnj77lnKh8546w5ZyoXCIpOyBzcGxpdCBlYWNoIGxhbmd1YWdlJ3MgXCJub3dcIiBlbnRyeVxuICAgIC8vIGRpcmVjdGx5IGluc3RlYWQgb2YgdHJ5aW5nIHRvIG1hdGNoIGluZGl2aWR1YWwgaW1tZWRpYXRlS2V5d29yZHNcbiAgICAvLyBlbnRyaWVzIChhbHJlYWR5IHNwbGl0LCBmb3IgYWxsIG9mIG5vdy90b2RheS90b21vcnJvdy95ZXN0ZXJkYXlcbiAgICAvLyBjb21iaW5lZCkgYWdhaW5zdCB0aGUgcmF3LCB1bnNwbGl0IHRyYW5zbGF0aW9uIHN0cmluZywgd2hpY2ggY291bGRcbiAgICAvLyBuZXZlciBlcXVhbCBhIHNpbmdsZSBhbHJlYWR5LXNwbGl0IHZhcmlhbnQuXG4gICAgY29uc3Qgbm93V29yZHMgPSB0aGlzLmxhbmd1YWdlcy5mbGF0TWFwKGxhbmcgPT5cbiAgICAgIHQoJ25vdycsIGxhbmcpLnRvTG93ZXJDYXNlKCkuc3BsaXQoJ3wnKS5tYXAodyA9PiB3LnRyaW0oKSkuZmlsdGVyKHcgPT4gdylcbiAgICApO1xuICAgIC8vIEV4YWN0LCBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGFnYWluc3QgdGhlIHdob2xlIHN0cmluZyAtLSBubyBuZWVkIHRvXG4gICAgLy8gY29tcGlsZSBhIFJlZ0V4cCBwZXIgd29yZCBwZXIgY2FsbCBmb3IgdGhhdCwgYSBwbGFpbiBsb3dlcmNhc2UgK1xuICAgIC8vIGluY2x1ZGVzKCkgZG9lcyB0aGUgc2FtZSB0aGluZyBtb3JlIHNpbXBseSBhbmQgbW9yZSBjaGVhcGx5LlxuICAgIGlmIChub3dXb3Jkcy5pbmNsdWRlcyh0ZXh0LnRvTG93ZXJDYXNlKCkudHJpbSgpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gMi4gRmlyc3QgY2hlY2sgY29tYmluYXRpb25zIFwiaW4gWCB3ZWVrcyBhbmQgWSBkYXlzXCJcbiAgICBjb25zdCByZWxDb21iaW5lZE1hdGNoID0gdGV4dC5tYXRjaCh0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZCk7XG4gICAgaWYgKHJlbENvbWJpbmVkTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdW5pdFN0cjEgPSByZWxDb21iaW5lZE1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHVuaXRTdHIyID0gcmVsQ29tYmluZWRNYXRjaFs0XS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAvLyBJZiBvbmUgb2YgdGhlIHVuaXRzIGlzIGhvdXJzIG9yIG1pbnV0ZXMgLT4gWUVTXG4gICAgICAgIGlmICh1bml0U3RyMS5zdGFydHNXaXRoKCdoJykgfHwgdW5pdFN0cjEgPT09ICdtJyB8fCB1bml0U3RyMS5zdGFydHNXaXRoKCdtaW4nKSB8fFxuICAgICAgICAgICAgdW5pdFN0cjIuc3RhcnRzV2l0aCgnaCcpIHx8IHVuaXRTdHIyID09PSAnbScgfHwgdW5pdFN0cjIuc3RhcnRzV2l0aCgnbWluJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyd2lzZSAtPiBOTyAoZGF5cywgd2Vla3MsIG1vbnRocywgeWVhcnMpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAzLiBJZiBpdCdzIGEgc2ltcGxlIGRlbGF5IGluIEhPVVJTIG9yIE1JTlVURVMgLT4gWUVTXG4gICAgY29uc3QgcmVsTWF0Y2ggPSB0ZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZSk7XG4gICAgaWYgKHJlbE1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHVuaXRTdHIgPSByZWxNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAvLyBtLCBtaW4sIG1pbnV0ZXMsIGgsIGhvdXJzLi4uXG4gICAgICAgIGlmICh1bml0U3RyLnN0YXJ0c1dpdGgoJ2gnKSB8fCB1bml0U3RyID09PSAnbScgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdtaW4nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGF5cywgbW9udGhzLCB5ZWFycyAtPiBOT1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gNC4gSWYgaXQncyBhIHNwZWNpZmljIGRheSB3aXRoIHRpbWUgKE5leHQgTW9uZGF5IGF0IDNwbSkgLT4gWUVTXG4gICAgaWYgKHRoaXMucmVnZXhXZWVrZGF5V2l0aFRpbWUgJiYgdGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZS50ZXN0KHRleHQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gNS4gSWYgaXQncyBhIHNwZWNpZmljIGRheSB3aXRob3V0IHRpbWUgKE5leHQgTW9uZGF5KSBvciBUb21vcnJvdyAtPiBOTyAoR2VuZXJhbGx5IHdlIGp1c3Qgd2FudCB0aGUgZGF0ZSlcbiAgICAvLyBJZiB5b3Ugd2FudCB0aW1lIGZvciBcIlRvbW9ycm93XCIsIHJlbW92ZSB0aGUgbGluZXMgYmVsb3cuXG4gICAgaWYgKHRoaXMucmVnZXhXZWVrZGF5LnRlc3QodGV4dCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgdG9kYXkvdG9tb3Jyb3cveWVzdGVyZGF5IGtleXdvcmRzIGluIGFsbCBsYW5ndWFnZXNcbiAgICBjb25zdCBkYXRlS2V5d29yZHMgPSBbJ3RvZGF5JywgJ3RvbW9ycm93JywgJ3llc3RlcmRheSddO1xuICAgIGNvbnN0IGRhdGVXb3Jkczogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBkYXRlS2V5d29yZHMpIHtcbiAgICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgICAvLyB0KCkgYWx3YXlzIGZhbGxzIGJhY2sgdG8gRW5nbGlzaCAobGFuZy9oZWxwZXIudHMpLCBhbmQgZW4udHNcbiAgICAgICAgLy8gYWx3YXlzIGRlZmluZXMgdG9kYXkvdG9tb3Jyb3cveWVzdGVyZGF5LCBzbyB0aGlzIGd1YXJkIGNhbid0XG4gICAgICAgIC8vIGFjdHVhbGx5IGJlIGZhbHNlIGZvciB0aGVzZSB0aHJlZSBrZXlzIC0tIGtlcHQgZm9yIHNhZmV0eSBpbiBjYXNlXG4gICAgICAgIC8vIHRoYXQgaW52YXJpYW50IGV2ZXIgY2hhbmdlcy5cbiAgICAgICAgY29uc3Qgd29yZCA9IHQoa2V5LCBsYW5nKTtcbiAgICAgICAgaWYgKHdvcmQgJiYgd29yZCAhPT0gXCJOT1RGT1VORFwiKSB7XG4gICAgICAgICAgZGF0ZVdvcmRzLnB1c2god29yZC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0ZVdvcmRzLnNvbWUodyA9PiBuZXcgUmVnRXhwKGBeJHt3LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyl9JGAsICdpJykudGVzdCh0ZXh0KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGFzayB0aGUgbGlicmFyeSBpZiBpdCBzZWVzIGFuIGV4cGxpY2l0IHRpbWUgKGV4OiBcIlRvbW9ycm93IGF0IDVwbVwiKVxuICAgIGlmICghdGhpcy5jaHJvbm9zKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNocm9ub3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFJlc3VsdCA9IGMucGFyc2UodGV4dCk7XG4gICAgICAgIGlmIChwYXJzZWRSZXN1bHQgJiYgcGFyc2VkUmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBzdGFydCA9IHBhcnNlZFJlc3VsdFswXS5zdGFydDtcbiAgICAgICAgICBpZiAoc3RhcnQgJiYgKHN0YXJ0LmlzQ2VydGFpbihcImhvdXJcIikgfHwgc3RhcnQuaXNDZXJ0YWluKFwibWludXRlXCIpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIHBhcnNpbmcgZXJyb3JzXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4iLCIvKipcbiAqIEltcGzDqW1lbnRhdGlvbiBkJ3VuIGNhY2hlIExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgYXZlYyBsaW1pdGUgZGUgdGFpbGxlXG4gKiBVdGlsaXPDqSBwb3VyIGxpbWl0ZXIgbGEgbcOpbW9pcmUgdXRpbGlzw6llIHBhciBsZXMgY2FjaGVzXG4gKi9cbmV4cG9ydCBjbGFzcyBMUlVDYWNoZTxLLCBWPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4U2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIGNhY2hlOiBNYXA8SywgVj47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgTFJVIGNhY2hlIHdpdGggdGhlIHNwZWNpZmllZCBtYXhpbXVtIHNpemVcbiAgICogXG4gICAqIEBwYXJhbSBtYXhTaXplIC0gTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gc3RvcmUgaW4gdGhlIGNhY2hlIChkZWZhdWx0OiA1MDApXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtYXhTaXplID0gNTAwKSB7XG4gICAgaWYgKG1heFNpemUgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTFJVIENhY2hlIG1heFNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5tYXhTaXplID0gbWF4U2l6ZTtcbiAgICB0aGlzLmNhY2hlID0gbmV3IE1hcDxLLCBWPigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGtleSBleGlzdHMgaW4gdGhlIGNhY2hlXG4gICAqIFbDqXJpZmllIHNpIHVuZSBjbMOpIGV4aXN0ZSBkYW5zIGxlIGNhY2hlXG4gICAqIFxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBjaGVja1xuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBrZXkgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGhhcyhrZXk6IEspOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5oYXMoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW50IHVuZSB2YWxldXIgZHUgY2FjaGUgZXQgbGEgbWFycXVlIGNvbW1lIHLDqWNlbW1lbnQgdXRpbGlzw6llXG4gICAqIEdldHMgYSB2YWx1ZSBmcm9tIHRoZSBjYWNoZSBieSBrZXlcbiAgICogSWYgdGhlIGtleSBleGlzdHMsIGl0IGlzIG1vdmVkIHRvIHRoZSBlbmQgKG1vc3QgcmVjZW50bHkgdXNlZClcbiAgICogXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIHJldHJpZXZlXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSwgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0KGtleTogSyk6IFYgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRMOpcGxhY2VyIGxhIGNsw6kgw6AgbGEgZmluIChtb3N0IHJlY2VudGx5IHVzZWQpXG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBam91dGUgb3UgbWV0IMOgIGpvdXIgdW5lIHZhbGV1ciBkYW5zIGxlIGNhY2hlXG4gICAqIFNldHMgYSB2YWx1ZSBpbiB0aGUgY2FjaGVcbiAgICogSWYgdGhlIGtleSBhbHJlYWR5IGV4aXN0cywgaXQgaXMgdXBkYXRlZCBhbmQgbW92ZWQgdG8gdGhlIGVuZFxuICAgKiBTaSBsYSB0YWlsbGUgbWF4aW1hbGUgZXN0IGF0dGVpbnRlLCBzdXBwcmltZSBsJ2VudHLDqWUgbGEgbW9pbnMgcsOpY2VtbWVudCB1dGlsaXPDqWVcbiAgICogXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIHNldFxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc3RvcmVcbiAgICovXG4gIHNldChrZXk6IEssIHZhbHVlOiBWKTogdm9pZCB7XG4gICAgLy8gU2kgbGEgY2zDqSBleGlzdGUgZMOpasOgLCBsYSBzdXBwcmltZXIgZCdhYm9yZCBwb3VyIGxhIGTDqXBsYWNlciDDoCBsYSBmaW5cbiAgICBpZiAodGhpcy5jYWNoZS5oYXMoa2V5KSkge1xuICAgICAgdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2FjaGUuc2l6ZSA+PSB0aGlzLm1heFNpemUpIHtcbiAgICAgIC8vIFN1cHByaW1lciBsJ2VudHLDqWUgbGEgbW9pbnMgcsOpY2VtbWVudCB1dGlsaXPDqWUgKHByZW1pw6hyZSBlbnRyw6llKVxuICAgICAgLy8gTWFwIGl0ZXJhdG9yJ3MgSXRlcmF0b3JSZXN1bHQudmFsdWUgdHlwZSBkZWZhdWx0cyB0byBcIlQgfCBhbnlcIiAodGhlXG4gICAgICAvLyByZXR1cm4tcG9zaXRpb24gdHlwZSBwYXJhbSBkZWZhdWx0cyB0byBhbnkpLCB3aGljaCBUUyBjb2xsYXBzZXMgdG9cbiAgICAgIC8vIGFueSAtLSBjYXN0IGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4ganVzdCBhbm5vdGF0aW5nIHRoZSB2YXJpYWJsZS5cbiAgICAgIGNvbnN0IGZpcnN0S2V5ID0gdGhpcy5jYWNoZS5rZXlzKCkubmV4dCgpLnZhbHVlIGFzIEsgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoZmlyc3RLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShmaXJzdEtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFqb3V0ZXIgbGEgbm91dmVsbGUgZW50csOpZSDDoCBsYSBmaW5cbiAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdXBwcmltZSB1bmUgZW50csOpZSBkdSBjYWNoZVxuICAgKiBEZWxldGVzIGFuIGVudHJ5IGZyb20gdGhlIGNhY2hlXG4gICAqIFxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBkZWxldGVcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUga2V5IHdhcyBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGRlbGV0ZShrZXk6IEspOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaWRlIGNvbXBsw6h0ZW1lbnQgbGUgY2FjaGVcbiAgICogQ2xlYXJzIGFsbCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4gICAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgbGEgdGFpbGxlIGFjdHVlbGxlIGR1IGNhY2hlXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgY2FjaGVcbiAgICogXG4gICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGNhY2hlXG4gICAqL1xuICBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgbGEgdGFpbGxlIG1heGltYWxlIGR1IGNhY2hlXG4gICAqIEdldHMgdGhlIG1heGltdW0gc2l6ZSBsaW1pdCBvZiB0aGUgY2FjaGVcbiAgICogXG4gICAqIEByZXR1cm5zIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzdG9yZWRcbiAgICovXG4gIGdldCBtYXhTaXplTGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tYXhTaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG91cm5lIHVuIGl0w6lyYXRldXIgc3VyIHRvdXRlcyBsZXMgZW50csOpZXMgZHUgY2FjaGVcbiAgICogUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIGFsbCBlbnRyaWVzIGluIHRoZSBjYWNoZVxuICAgKiBVdGlsZSBwb3VyIGxlIG5ldHRveWFnZSBww6lyaW9kaXF1ZVxuICAgKiBVc2VmdWwgZm9yIHBlcmlvZGljIGNsZWFudXBcbiAgICogXG4gICAqIEByZXR1cm5zIEl0ZXJhdG9yIG92ZXIgW2tleSwgdmFsdWVdIHBhaXJzXG4gICAqL1xuICBlbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0ssIFZdPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZW50cmllcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG91cm5lIHVuIGl0w6lyYXRldXIgc3VyIHRvdXRlcyBsZXMgY2zDqXMgZHUgY2FjaGVcbiAgICogUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIGFsbCBrZXlzIGluIHRoZSBjYWNoZVxuICAgKiBcbiAgICogQHJldHVybnMgSXRlcmF0b3Igb3ZlciBrZXlzXG4gICAqL1xuICBrZXlzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8Sz4ge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmtleXMoKTtcbiAgfVxufVxuXG4iLCJpbXBvcnQgeyBDaHJvbm8sIFBhcnNlZFJlc3VsdCwgUGFyc2luZ09wdGlvbiB9IGZyb20gXCJjaHJvbm8tbm9kZVwiO1xuaW1wb3J0IGdldENocm9ub3MgZnJvbSBcIi4vY2hyb25vXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IFRpbWVEZXRlY3RvciB9IGZyb20gXCIuL3RpbWUtZGV0ZWN0b3JcIjtcbmltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSBcIi4vbHJ1LWNhY2hlXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbkNvbGxlY3RvciB9IGZyb20gXCIuL3RyYW5zbGF0aW9uLWNvbGxlY3RvclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5cbmltcG9ydCB7IERheU9mV2VlayB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQge1xuICBnZXRMb2NhbGVXZWVrU3RhcnQsXG4gIGdldFdlZWtOdW1iZXIsXG4gIE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sXG4gIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gIGRlc2NyaWJlRXJyb3IsXG59IGZyb20gXCIuL3V0aWxzXCI7XG5cblxuLy8gVHlwZSBhbGlhcyBmb3IgTW9tZW50IGZyb20gdGhlIG1vbWVudCBsaWJyYXJ5IGJ1bmRsZWQgd2l0aCBPYnNpZGlhblxuLy8gVXNpbmcgdGhlIHR5cGUgZnJvbSB0aGUgbW9tZW50IGxpYnJhcnkgdHlwZXMgc2luY2UgbW9tZW50IGlzIGJ1bmRsZWQgd2l0aCBPYnNpZGlhblxuLy8gVGhlIG1vbWVudCBwYWNrYWdlIGlzIGJ1bmRsZWQgd2l0aCBPYnNpZGlhbiwgYnV0IHRoZSBNb21lbnQgdHlwZSBpcyBub3QgZXhwb3J0ZWQgZnJvbSBvYnNpZGlhbiBtb2R1bGVcbnR5cGUgTW9tZW50ID0gaW1wb3J0KFwibW9tZW50XCIpLk1vbWVudDtcblxudHlwZSBUaW1lVW5pdCA9ICdtaW51dGVzJyB8ICdob3VycycgfCAnZGF5cycgfCAnd2Vla3MnIHwgJ21vbnRocycgfCAneWVhcnMnO1xuXG4vKipcbiAqIFJlc3VsdCBvYmplY3QgcmV0dXJuZWQgYnkgZGF0ZSBwYXJzaW5nIG1ldGhvZHMuXG4gKiBDb250YWlucyB0aGUgcGFyc2VkIGRhdGUgaW4gbXVsdGlwbGUgZm9ybWF0cyBmb3IgY29udmVuaWVuY2UuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXN1bHQgPSBwbHVnaW4ucGFyc2VEYXRlKFwidG9tb3Jyb3dcIik7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9ybWF0dGVkU3RyaW5nKTsgLy8gXCIyMDI1LTAxLTA2XCJcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5kYXRlKTsgLy8gRGF0ZSBvYmplY3RcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5tb21lbnQuZm9ybWF0KFwiZGRkZFwiKSk7IC8vIFwiTW9uZGF5XCJcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5MRFJlc3VsdCB7XG4gIC8qKiBGb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0ICovXG4gIGZvcm1hdHRlZFN0cmluZzogc3RyaW5nO1xuICAvKiogTmF0aXZlIEphdmFTY3JpcHQgRGF0ZSBvYmplY3QgKi9cbiAgZGF0ZTogRGF0ZTtcbiAgLyoqIE1vbWVudC5qcyBvYmplY3QgZm9yIGFkdmFuY2VkIGRhdGUgbWFuaXB1bGF0aW9uICovXG4gIG1vbWVudDogTW9tZW50O1xufVxuXG4vKipcbiAqIFJlc3VsdCBvYmplY3QgcmV0dXJuZWQgYnkgZGF0ZSByYW5nZSBwYXJzaW5nIG1ldGhvZHMuXG4gKiBDb250YWlucyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBvZiBhIHBhcnNlZCByYW5nZSwgcGx1cyBhIGxpc3Qgb2YgYWxsIGRhdGVzIGluIHRoZSByYW5nZS5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJhbmdlID0gcGx1Z2luLnBhcnNlRGF0ZVJhbmdlKFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCIpO1xuICogaWYgKHJhbmdlKSB7XG4gKiAgIGNvbnNvbGUubG9nKHJhbmdlLnN0YXJ0RGF0ZSk7IC8vIERhdGUgb2JqZWN0IGZvciBNb25kYXlcbiAqICAgY29uc29sZS5sb2cocmFuZ2UuZW5kRGF0ZSk7IC8vIERhdGUgb2JqZWN0IGZvciBGcmlkYXlcbiAqICAgY29uc29sZS5sb2cocmFuZ2UuZGF0ZUxpc3Q/Lmxlbmd0aCk7IC8vIDUgKE1vbmRheSB0aHJvdWdoIEZyaWRheSlcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5MRFJhbmdlUmVzdWx0IHtcbiAgLyoqIEZvcm1hdHRlZCByYW5nZSBzdHJpbmcgKGUuZy4sIFwiMjAyNS0wMS0wNiB0byAyMDI1LTAxLTEwXCIpICovXG4gIGZvcm1hdHRlZFN0cmluZzogc3RyaW5nO1xuICAvKiogU3RhcnQgZGF0ZSBvZiB0aGUgcmFuZ2UgYXMgYSBuYXRpdmUgRGF0ZSBvYmplY3QgKi9cbiAgc3RhcnREYXRlOiBEYXRlO1xuICAvKiogRW5kIGRhdGUgb2YgdGhlIHJhbmdlIGFzIGEgbmF0aXZlIERhdGUgb2JqZWN0ICovXG4gIGVuZERhdGU6IERhdGU7XG4gIC8qKiBTdGFydCBkYXRlIGFzIGEgTW9tZW50LmpzIG9iamVjdCAqL1xuICBzdGFydE1vbWVudDogTW9tZW50O1xuICAvKiogRW5kIGRhdGUgYXMgYSBNb21lbnQuanMgb2JqZWN0ICovXG4gIGVuZE1vbWVudDogTW9tZW50O1xuICAvKiogQWx3YXlzIHRydWUgZm9yIHJhbmdlIHJlc3VsdHMgKi9cbiAgaXNSYW5nZTogdHJ1ZTtcbiAgLyoqIE9wdGlvbmFsIGxpc3Qgb2YgYWxsIGRhdGVzIGluIHRoZSByYW5nZSBhcyBNb21lbnQgb2JqZWN0cyAqL1xuICBkYXRlTGlzdD86IE1vbWVudFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTERQYXJzZXIge1xuICBjaHJvbm9zOiBDaHJvbm9bXTtcbiAgbGFuZ3VhZ2VzOiBzdHJpbmdbXTtcbiAgXG4gIC8vIER5bmFtaWMgcmVnZXggZ2VuZXJhdGVkIGZyb20gdHJhbnNsYXRpb25zXG4gIHJlZ2V4UmVsYXRpdmU6IFJlZ0V4cDtcbiAgcmVnZXhSZWxhdGl2ZUNvbWJpbmVkOiBSZWdFeHA7IC8vIEZvciBcImluIDIgd2Vla3MgYW5kIDMgZGF5c1wiXG4gIHJlZ2V4V2Vla2RheTogUmVnRXhwO1xuICByZWdleFdlZWtkYXlXaXRoVGltZTogUmVnRXhwOyAvLyBGb3IgXCJuZXh0IE1vbmRheSBhdCAzcG1cIlxuICByZWdleFdlZWtkYXlPbmx5OiBSZWdFeHA7IC8vIEZvciBcIndlZG5lc2RheVwiICh3aXRob3V0IHByZWZpeClcbiAgcmVnZXhEYXRlUmFuZ2U6IFJlZ0V4cDsgLy8gRm9yIFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCJcbiAgcmVnZXhPcmRpbmFsT2ZNb250aDogUmVnRXhwOyAvLyBGb3IgXCJ0aGUgMTV0aCBvZiBuZXh0IG1vbnRoXCJcbiAgcmVnZXhMYXN0RGF5T2ZNb250aDogUmVnRXhwOyAvLyBGb3IgXCJsYXN0IGRheSBvZiBtb250aFwiXG4gIHJlZ2V4V2Vla2RheU9mTW9udGg6IFJlZ0V4cDsgLy8gRm9yIFwiZmlyc3QgTW9uZGF5IG9mIG1vbnRoXCJcbiAgLy8gRm9yIHN1ZmZpeCBsYW5ndWFnZXMgdGhhdCBwdXQgdGhlIHF1YW50aWZpZXIvdW5pdCBiZWZvcmUgdGhlIFwibGF0ZXJcIiBtYXJrZXJcbiAgLy8gaW5zdGVhZCBvZiBhbiBcImluXCIgcHJlZml4IChlLmcuIENoaW5lc2UgXCIy5aSp5b6MXCIgPSBcIjIgZGF5c1wiICsgXCLlvoxcIiA9IFwibGF0ZXJcIikuXG4gIHJlZ2V4UmVsYXRpdmVTdWZmaXg6IFJlZ0V4cCB8IG51bGw7XG4gIHJlZ2V4UmVsYXRpdmVDb21iaW5lZFN1ZmZpeDogUmVnRXhwIHwgbnVsbDsgLy8gRm9yIFwiMumAseWSjDPlpKnlvoxcIiAoMiB3ZWVrcyBhbmQgMyBkYXlzIGxhdGVyKVxuICAvLyBNaXJyb3Igb2YgcmVnZXhSZWxhdGl2ZVN1ZmZpeCBmb3IgdGhlIFBBU1QgZGlyZWN0aW9uIChlLmcuIFBvcnR1Z3Vlc2VcbiAgLy8gXCIzIGRpYXMgYXRyw6FzXCIgPSBcIjMgZGF5c1wiICsgXCJhdHLDoXNcIiA9IFwiYWdvXCIpLlxuICByZWdleEFnb1N1ZmZpeDogUmVnRXhwIHwgbnVsbDtcbiAgXG4gIC8vIEtleXdvcmRzIGZvciBhbGwgbGFuZ3VhZ2VzXG4gIGltbWVkaWF0ZUtleXdvcmRzOiBTZXQ8c3RyaW5nPjtcbiAgcHJlZml4S2V5d29yZHM6IHsgdGhpczogU2V0PHN0cmluZz47IG5leHQ6IFNldDxzdHJpbmc+OyBsYXN0OiBTZXQ8c3RyaW5nPiB9O1xuICB0aW1lVW5pdE1hcDogTWFwPHN0cmluZywgVGltZVVuaXQ+O1xuICBcbiAgLy8gQ2FjaGUgZm9yIHBhcnNlZCBkYXRlcyAoTFJVIGF2ZWMgbGltaXRlIGRlIDUwMCBlbnRyw6llcylcbiAgcHJpdmF0ZSBjYWNoZTogTFJVQ2FjaGU8c3RyaW5nLCBEYXRlPjtcbiAgcHJpdmF0ZSBjYWNoZURheTogbnVtYmVyOyAvLyBEYXkgb2YgeWVhciBmb3IgY2FjaGUgaW52YWxpZGF0aW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX0NBQ0hFX1NJWkUgPSA1MDA7XG4gIFxuICAvLyBDb2xsZWN0cy9jYWNoZXMgdHJhbnNsYXRpb25zIGFjcm9zcyBhbGwgYWN0aXZlIGxhbmd1YWdlcyBhbmQgYnVpbGRzXG4gIC8vIHJlZ2V4IGFsdGVybmF0aW9ucyBmcm9tIHRoZW0gKHNlZSB0cmFuc2xhdGlvbi1jb2xsZWN0b3IudHMpXG4gIHByaXZhdGUgdGM6IFRyYW5zbGF0aW9uQ29sbGVjdG9yO1xuXG4gIC8vIFRpbWUgZGV0ZWN0b3JcbiAgcHJpdmF0ZSB0aW1lRGV0ZWN0b3I6IFRpbWVEZXRlY3RvcjtcblxuICBjb25zdHJ1Y3RvcihsYW5ndWFnZXM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5sYW5ndWFnZXMgPSBsYW5ndWFnZXM7XG4gICAgdGhpcy5jaHJvbm9zID0gZ2V0Q2hyb25vcyhsYW5ndWFnZXMpO1xuICAgIHRoaXMudGMgPSBuZXcgVHJhbnNsYXRpb25Db2xsZWN0b3IobGFuZ3VhZ2VzKTtcbiAgICB0aGlzLmluaXRpYWxpemVSZWdleCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUtleXdvcmRzKCk7XG4gICAgdGhpcy5jYWNoZSA9IG5ldyBMUlVDYWNoZTxzdHJpbmcsIERhdGU+KHRoaXMuTUFYX0NBQ0hFX1NJWkUpO1xuICAgIHRoaXMuY2FjaGVEYXkgPSB0aGlzLmdldERheU9mWWVhcigpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdGltZSBkZXRlY3RvclxuICAgIHRoaXMudGltZURldGVjdG9yID0gbmV3IFRpbWVEZXRlY3Rvcih7XG4gICAgICBsYW5ndWFnZXM6IHRoaXMubGFuZ3VhZ2VzLFxuICAgICAgY2hyb25vczogdGhpcy5jaHJvbm9zLFxuICAgICAgcmVnZXhSZWxhdGl2ZTogdGhpcy5yZWdleFJlbGF0aXZlLFxuICAgICAgcmVnZXhSZWxhdGl2ZUNvbWJpbmVkOiB0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZCxcbiAgICAgIHJlZ2V4V2Vla2RheTogdGhpcy5yZWdleFdlZWtkYXksXG4gICAgICByZWdleFdlZWtkYXlXaXRoVGltZTogdGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemVzIGR5bmFtaWMgcmVnZXggZnJvbSB0cmFuc2xhdGlvbnNcbiAgcHJpdmF0ZSBpbml0aWFsaXplUmVnZXgoKTogdm9pZCB7XG4gICAgY29uc3QgaW5Xb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwiaW5cIik7XG4gICAgY29uc3QgbmV4dFdvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoXCJuZXh0XCIpO1xuICAgIGNvbnN0IGxhc3RXb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwibGFzdFwiKTtcbiAgICBjb25zdCB0aGlzV29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcInRoaXNcIik7XG4gICAgY29uc3QgYW5kV29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImFuZFwiKTtcbiAgICBjb25zdCBhdFdvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoXCJhdFwiKTtcbiAgICBjb25zdCBmcm9tV29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImZyb21cIik7XG4gICAgY29uc3QgdG9Xb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwidG9cIik7XG5cbiAgICAvLyBDb2xsZWN0IHdlZWtkYXlzIChsb3dlcmNhc2VkKSBhY3Jvc3MgYWxsIGxhbmd1YWdlcywgcGx1cyB0aGUgY29tbW9uXG4gICAgLy8gRW5nbGlzaCBhYmJyZXZpYXRpb25zIChtb24vdHVlLy4uLikgd2hpY2ggYXJlbid0IHBhcnQgb2YgdGhlIGRpY3Rpb25hcnkuXG4gICAgY29uc3Qgd2Vla2RheUtleXMgPSBbJ3N1bmRheScsICdtb25kYXknLCAndHVlc2RheScsICd3ZWRuZXNkYXknLCAndGh1cnNkYXknLCAnZnJpZGF5JywgJ3NhdHVyZGF5J107XG4gICAgY29uc3Qgd2Vla2RheXMgPSB3ZWVrZGF5S2V5cy5mbGF0TWFwKGtleSA9PiB0aGlzLnRjLmNvbGxlY3RXb3JkcyhrZXksIHsgbG93ZXJjYXNlOiB0cnVlIH0pKTtcbiAgICBpZiAodGhpcy5sYW5ndWFnZXMuaW5jbHVkZXMoJ2VuJykpIHtcbiAgICAgIHdlZWtkYXlzLnB1c2goJ21vbicsICd0dWUnLCAnd2VkJywgJ3RodScsICdmcmknLCAnc2F0JywgJ3N1bicpO1xuICAgIH1cblxuICAgIC8vIENvbGxlY3QgdGltZSB1bml0cyAobWludXRlL2hvdXIvZGF5L3dlZWsvbW9udGgveWVhcikgYWNyb3NzIGFsbCBsYW5ndWFnZXNcbiAgICBjb25zdCB0aW1lVW5pdEtleXMgPSBbJ21pbnV0ZScsICdob3VyJywgJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXTtcbiAgICBjb25zdCB0aW1lVW5pdHMgPSB0aW1lVW5pdEtleXMuZmxhdE1hcChrZXkgPT4gdGhpcy50Yy5jb2xsZWN0V29yZHMoa2V5KSk7XG5cbiAgICBjb25zdCBpblBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oaW5Xb3Jkcyk7XG4gICAgY29uc3QgcHJlZml4UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihbLi4udGhpc1dvcmRzLCAuLi5uZXh0V29yZHMsIC4uLmxhc3RXb3Jkc10pO1xuICAgIGNvbnN0IHdlZWtkYXlQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKHdlZWtkYXlzKTtcbiAgICBjb25zdCB0aW1lVW5pdFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24odGltZVVuaXRzKTtcbiAgICBjb25zdCBhbmRQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKGFuZFdvcmRzKTtcbiAgICBjb25zdCBhdFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oYXRXb3Jkcyk7XG4gICAgY29uc3QgZnJvbVBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oZnJvbVdvcmRzKTtcbiAgICBjb25zdCB0b1BhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24odG9Xb3Jkcyk7XG5cbiAgICAvLyBTaW1wbGUgcmVnZXggZm9yIFwiaW4gMiBtaW51dGVzXCJcbiAgICB0aGlzLnJlZ2V4UmVsYXRpdmUgPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooPzoke2luUGF0dGVybn0pXFxcXHMrKFxcXFxkKylcXFxccyooJHt0aW1lVW5pdFBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFJlZ2V4IGZvciBjb21iaW5hdGlvbnMgXCJpbiAyIHdlZWtzIGFuZCAzIGRheXNcIlxuICAgIHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeXFxcXHMqKD86JHtpblBhdHRlcm59KVxcXFxzKyhcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccysoPzoke2FuZFBhdHRlcm59KVxcXFxzKyhcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBTaW1wbGUgcmVnZXggZm9yIFwibmV4dCBNb25kYXlcIlxuICAgIC8vIFVzZXMgXFxzKiAobm90IFxccyspIGJldHdlZW4gcHJlZml4IGFuZCB3ZWVrZGF5IHNvIGxhbmd1YWdlcyB3aXRob3V0IHNwYWNlc1xuICAgIC8vIGJldHdlZW4gd29yZHMgKGUuZy4gQ2hpbmVzZSBcIuS4i+S4gOWAi+aYn+acn+S4gFwiKSBzdGlsbCBtYXRjaC5cbiAgICB0aGlzLnJlZ2V4V2Vla2RheSA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKigke3ByZWZpeFBhdHRlcm59KVxcXFxzKigke3dlZWtkYXlQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBSZWdleCBmb3IgXCJuZXh0IE1vbmRheSBhdCAzcG1cIiAtIGNhcHR1cmVzIGRheSBhbmQgdGltZVxuICAgIHRoaXMucmVnZXhXZWVrZGF5V2l0aFRpbWUgPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooJHtwcmVmaXhQYXR0ZXJufSlcXFxccyooJHt3ZWVrZGF5UGF0dGVybn0pXFxcXHMrKD86JHthdFBhdHRlcm59KVxcXFxzKyguKykkYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBSZWdleCBmb3Igc2ltcGxlIHdlZWtkYXkgd2l0aG91dCBwcmVmaXggKGUuZy4sIFwid2VkbmVzZGF5XCIsIFwiZnJpZGF5XCIpXG4gICAgdGhpcy5yZWdleFdlZWtkYXlPbmx5ID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeXFxcXHMqKCR7d2Vla2RheVBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFJlZ2V4IGZvciBcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiIC0gY2FwdHVyZXMgdHdvIHdlZWtkYXlzXG4gICAgdGhpcy5yZWdleERhdGVSYW5nZSA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKig/OiR7ZnJvbVBhdHRlcm59KVxcXFxzKigke3dlZWtkYXlQYXR0ZXJufSlcXFxccyooPzoke3RvUGF0dGVybn0pXFxcXHMqKCR7d2Vla2RheVBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIGNvbnN0IG9mUGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcIm9mXCIpO1xuICAgIGNvbnN0IGZpcnN0UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcImZpcnN0XCIpO1xuXG4gICAgLy8gUmVnZXggZm9yIFwidGhlIDE1dGggb2YgbmV4dCBtb250aFwiIG9yIFwibGUgMTUgZHUgbW9pcyBwcm9jaGFpblwiXG4gICAgLy8gUGF0dGVybjogKG9wdGlvbmFsIFwidGhlXCIvXCJsZVwiL1wiZGVyXCIpIChvcmRpbmFsIG51bWJlciBsaWtlIFwiMTV0aFwiLCBcIjE1w6htZVwiLCBcIjE1LlwiKSBcIm9mXCIvXCJkdVwiL1wiZGVzXCIgKG5leHQvbGFzdC90aGlzKSAobW9udGgpXG4gICAgLy8gQWxzbyBoYW5kbGVzIEZyZW5jaCBpbnZlcnNpb246IFwibGUgMTUgZHUgbW9pcyBwcm9jaGFpblwiIChtb250aCBiZWZvcmUgcHJlZml4KVxuICAgIC8vIEFsc28gaGFuZGxlcyBHZXJtYW46IFwiZGVyIDE1LiBkZXMgbsOkY2hzdGVuIE1vbmF0c1wiIChwcmVmaXggYmV0d2VlbiBcIm9mXCIgYW5kIG1vbnRoKVxuICAgIC8vIFVzaW5nIE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gZnJvbSB1dGlscy50cyBmb3Igb3JkaW5hbCBtYXRjaGluZ1xuICAgIHRoaXMucmVnZXhPcmRpbmFsT2ZNb250aCA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKig/OnRoZXxsZXxkZXJ8ZGFzfGVsfGlsfG98ZGV8aGV0KT9cXFxccyooJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlcXFxccysoPzoke29mUGF0dGVybn0pXFxcXHMrKD86KCR7cHJlZml4UGF0dGVybn0pXFxcXHMrKT8oJHt0aW1lVW5pdFBhdHRlcm59KSg/OlxcXFxzKygke3ByZWZpeFBhdHRlcm59KSk/XFxcXHMqJGAsXG4gICAgICAnaSdcbiAgICApO1xuXG4gICAgLy8gUmVnZXggZm9yIFwibGFzdCBkYXkgb2YgbW9udGhcIiBvciBcImRlcm5pZXIgam91ciBkdSBtb2lzXCJcbiAgICBjb25zdCBkYXlQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uRm9yKFwiZGF5XCIpO1xuXG4gICAgLy8gTWFrZSBwcmVmaXggb3B0aW9uYWwgLSBcImxhc3QgZGF5IG9mIG1vbnRoXCIgd2l0aG91dCBwcmVmaXggbWVhbnMgXCJ0aGlzIG1vbnRoXCJcbiAgICAvLyBcImxhc3RcIiBoZXJlIGlzIGFuIGFkamVjdGl2ZSBtb2RpZnlpbmcgXCJkYXlcIiwgbm90IGEgdGVtcG9yYWwgcHJlZml4XG4gICAgLy8gQWxzbyBoYW5kbGUgRnJlbmNoIGludmVyc2lvbjogXCJkZXJuaWVyIGpvdXIgZHUgbW9pcyBwcm9jaGFpblwiIChtb250aCBiZWZvcmUgcHJlZml4KVxuICAgIC8vIFBhdHRlcm46IChvcHRpb25hbCBwcmVmaXgpIFwibGFzdFwiIChkYXkgd29yZCkgXCJvZlwiIChvcHRpb25hbCBwcmVmaXgpIChtb250aCkgKG9wdGlvbmFsIHByZWZpeCBhZnRlciBtb250aClcbiAgICAvLyBSZXVzZSBsYXN0V29yZHMgY29sbGVjdGVkIGFib3ZlIChsaW5lIDE0OC0xNTApXG4gICAgY29uc3QgbGFzdEFkamVjdGl2ZVBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24obGFzdFdvcmRzKTtcbiAgICBcbiAgICB0aGlzLnJlZ2V4TGFzdERheU9mTW9udGggPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooPzooJHtwcmVmaXhQYXR0ZXJufSlcXFxccyspPygke2xhc3RBZGplY3RpdmVQYXR0ZXJufSlcXFxccysoJHtkYXlQYXR0ZXJufSlcXFxccysoPzoke29mUGF0dGVybn0pXFxcXHMrKD86KCR7cHJlZml4UGF0dGVybn0pXFxcXHMrKT8oJHt0aW1lVW5pdFBhdHRlcm59KSg/OlxcXFxzKygke3ByZWZpeFBhdHRlcm59KSk/XFxcXHMqJGAsXG4gICAgICAnaSdcbiAgICApO1xuXG4gICAgLy8gUmVnZXggZm9yIFwiZmlyc3QgTW9uZGF5IG9mIG1vbnRoXCIgb3IgXCJwcmVtaWVyIGx1bmRpIGR1IG1vaXNcIiBvciBcImxhc3QgTW9uZGF5IG9mIG1vbnRoXCJcbiAgICAvLyBBbHNvIGhhbmRsZSBGcmVuY2ggaW52ZXJzaW9uOiBcInByZW1pZXIgbHVuZGkgZHUgbW9pcyBwcm9jaGFpblwiIChtb250aCBiZWZvcmUgcHJlZml4KVxuICAgIHRoaXMucmVnZXhXZWVrZGF5T2ZNb250aCA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKigke2ZpcnN0UGF0dGVybn18JHtwcmVmaXhQYXR0ZXJufSlcXFxccysoJHt3ZWVrZGF5UGF0dGVybn0pXFxcXHMrKD86JHtvZlBhdHRlcm59KVxcXFxzKyg/Oigke3ByZWZpeFBhdHRlcm59KVxcXFxzKyk/KCR7dGltZVVuaXRQYXR0ZXJufSkoPzpcXFxccysoJHtwcmVmaXhQYXR0ZXJufSkpP1xcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFN1ZmZpeC1zdHlsZSBsYW5ndWFnZXMgKGUuZy4gQ2hpbmVzZSBcIjLlpKnlvoxcIi9cIjLlpKnlkI5cIiwgSmFwYW5lc2UgXCIy5pel5b6MXCIpIHB1dFxuICAgIC8vIHRoZSBcImxhdGVyXCIgbWFya2VyIGFmdGVyIHRoZSBudW1iZXIgYW5kIHVuaXQgaW5zdGVhZCBvZiB1c2luZyBhbiBcImluXCJcbiAgICAvLyBwcmVmaXguIEVhY2ggbGFuZ3VhZ2UgY2FuIGxpc3QgaXRzIG1hcmtlcihzKSBleHBsaWNpdGx5IHVuZGVyIHRoZVxuICAgIC8vIFwibGF0ZXJcIiBrZXkgKGUuZy4gQ2hpbmVzZSBcIuW+jHzlkI5cIiBmb3IgYm90aCBzY3JpcHRzKTsgdGhpcyBrZXkgaXMgbmV2ZXJcbiAgICAvLyB1c2VkIGZvciBkaXNwbGF5L2ludGVycG9sYXRpb24sIG9ubHkgZm9yIHRoaXMgbWF0Y2hpbmcsIHNvIGl0J3Mgc2FmZSB0b1xuICAgIC8vIGxpc3QgbXVsdGlwbGUgc2NyaXB0IHZhcmlhbnRzIHdpdGggXCJ8XCIgdGhlIHNhbWUgd2F5IHdlZWtkYXkvcHJlZml4IHdvcmRzXG4gICAgLy8gZG8uIFRoZSBcImluZGF5c1wiIHRlbXBsYXRlIGl0c2VsZiBtdXN0IHN0YXkgYSBzaW5nbGUgZm9ybSBzaW5jZSBpdCdzXG4gICAgLy8gYWxzbyB1c2VkIHZlcmJhdGltIGluIGF1dG9zdWdnZXN0IGxhYmVscywgYW5kIHRlbXBsYXRlcyB3aXRoXG4gICAgLy8gJXt0aW1lRGVsdGF9IGRvbid0IGdldCBzcGxpdCBvbiBcInxcIiBsaWtlIHBsYWluIHdvcmQgbGlzdHMgZG8uXG4gICAgLy9cbiAgICAvLyBMYW5ndWFnZXMgdGhhdCBkb24ndCBkZWZpbmUgXCJsYXRlclwiIGZhbGwgYmFjayB0byBpbmZlcnJpbmcgdGhlIG1hcmtlclxuICAgIC8vIGZyb20gdGhlaXIgXCJpbmRheXNcIiB0ZW1wbGF0ZSAoZS5nLiBcIiV7dGltZURlbHRhfeWkqeW+jFwiIC0+IG1hcmtlciBcIuW+jFwiKSxcbiAgICAvLyBzbyB0aGlzIHN0aWxsIHdvcmtzIGZvciBhbnkgbGFuZ3VhZ2UgYXV0aG9yZWQgd2l0aG91dCB0aGUgZXh0cmEga2V5LlxuICAgIGNvbnN0IHN1ZmZpeE1hcmtlcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IGxhbmcgb2YgdGhpcy5sYW5ndWFnZXMpIHtcbiAgICAgIGNvbnN0IGxhdGVyV29yZCA9IHRoaXMudGMudHJhbnNsYXRlKCdsYXRlcicsIGxhbmcpO1xuICAgICAgaWYgKGxhdGVyV29yZCAmJiBsYXRlcldvcmQgIT09ICdOT1RGT1VORCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBtYXJrZXIgb2YgbGF0ZXJXb3JkLnNwbGl0KCd8JykubWFwKHcgPT4gdy50cmltKCkpLmZpbHRlcih3ID0+IHcpKSB7XG4gICAgICAgICAgc3VmZml4TWFya2Vycy5hZGQobWFya2VyKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnRjLnRyYW5zbGF0ZSgnaW5kYXlzJywgbGFuZyk7XG4gICAgICBpZiAoIXRlbXBsYXRlIHx8IHRlbXBsYXRlID09PSAnTk9URk9VTkQnIHx8IHRlbXBsYXRlLmluZGV4T2YoJyV7dGltZURlbHRhfScpICE9PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVtYWluZGVyID0gdGVtcGxhdGUuc2xpY2UoJyV7dGltZURlbHRhfScubGVuZ3RoKTtcbiAgICAgIGNvbnN0IGRheVdvcmQgPSB0aGlzLnRjLnRyYW5zbGF0ZSgnZGF5JywgbGFuZyk7XG4gICAgICBpZiAoIWRheVdvcmQgfHwgZGF5V29yZCA9PT0gJ05PVEZPVU5EJykgY29udGludWU7XG4gICAgICBjb25zdCB1bml0VXNlZCA9IGRheVdvcmQuc3BsaXQoJ3wnKS5tYXAodyA9PiB3LnRyaW0oKSkuZmlsdGVyKHcgPT4gdykuZmluZCh2ID0+IHJlbWFpbmRlci5zdGFydHNXaXRoKHYpKTtcbiAgICAgIGlmICghdW5pdFVzZWQpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgbWFya2VyID0gcmVtYWluZGVyLnNsaWNlKHVuaXRVc2VkLmxlbmd0aCkudHJpbSgpO1xuICAgICAgaWYgKG1hcmtlcikgc3VmZml4TWFya2Vycy5hZGQobWFya2VyKTtcbiAgICB9XG5cbiAgICBpZiAoc3VmZml4TWFya2Vycy5zaXplID4gMCkge1xuICAgICAgY29uc3Qgc3VmZml4UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihBcnJheS5mcm9tKHN1ZmZpeE1hcmtlcnMpKTtcbiAgICAgIHRoaXMucmVnZXhSZWxhdGl2ZVN1ZmZpeCA9IG5ldyBSZWdFeHAoXG4gICAgICAgIGBeXFxcXHMqKFxcXFxkKylcXFxccyooJHt0aW1lVW5pdFBhdHRlcm59KVxcXFxzKig/OiR7c3VmZml4UGF0dGVybn0pXFxcXHMqJGAsXG4gICAgICAgICdpJ1xuICAgICAgKTtcbiAgICAgIHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkU3VmZml4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgYF5cXFxccyooXFxcXGQrKVxcXFxzKigke3RpbWVVbml0UGF0dGVybn0pXFxcXHMqKD86JHthbmRQYXR0ZXJufSlcXFxccyooXFxcXGQrKVxcXFxzKigke3RpbWVVbml0UGF0dGVybn0pXFxcXHMqKD86JHtzdWZmaXhQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICAgJ2knXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlZ2V4UmVsYXRpdmVTdWZmaXggPSBudWxsO1xuICAgICAgdGhpcy5yZWdleFJlbGF0aXZlQ29tYmluZWRTdWZmaXggPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFN1ZmZpeC1zdHlsZSBQQVNUIGxhbmd1YWdlcyAoZS5nLiBQb3J0dWd1ZXNlIFwiMyBkaWFzIGF0csOhc1wiID0gXCIzIGRheXNcIlxuICAgIC8vICsgXCJhdHLDoXNcIiA9IFwiYWdvXCIpLCB0aGUgcGFzdC1kaXJlY3Rpb24gbWlycm9yIG9mIHRoZSBcImxhdGVyXCIgbWVjaGFuaXNtXG4gICAgLy8gYWJvdmUuIFVubGlrZSBcImxhdGVyXCIsIHRoZXJlJ3Mgbm8gdGVtcGxhdGUgdG8gaW5mZXIgdGhpcyBtYXJrZXIgZnJvbVxuICAgIC8vICh0aGUgZGF5c2FnbyB0ZW1wbGF0ZSBhbHJlYWR5IGhhcyBpdHMgb3duICV7dGltZURlbHRhfS1wcmVmaXggZm9ybSwgXCJow6FcbiAgICAvLyAle3RpbWVEZWx0YX0gZGlhc1wiLCB3aGljaCBkb2Vzbid0IGltcGx5IGEgc3VmZml4IHZhcmlhbnQgYWxzbyBleGlzdHMpLFxuICAgIC8vIHNvIGxhbmd1YWdlcyBtdXN0IG9wdCBpbiBleHBsaWNpdGx5IHZpYSB0aGUgXCJhZ29zdWZmaXhcIiBrZXkuXG4gICAgY29uc3QgYWdvU3VmZml4TWFya2VycyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgYWdvU3VmZml4V29yZCA9IHRoaXMudGMudHJhbnNsYXRlKCdhZ29zdWZmaXgnLCBsYW5nKTtcbiAgICAgIGlmIChhZ29TdWZmaXhXb3JkICYmIGFnb1N1ZmZpeFdvcmQgIT09ICdOT1RGT1VORCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBtYXJrZXIgb2YgYWdvU3VmZml4V29yZC5zcGxpdCgnfCcpLm1hcCh3ID0+IHcudHJpbSgpKS5maWx0ZXIodyA9PiB3KSkge1xuICAgICAgICAgIGFnb1N1ZmZpeE1hcmtlcnMuYWRkKG1hcmtlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWdvU3VmZml4TWFya2Vycy5zaXplID4gMCkge1xuICAgICAgY29uc3QgYWdvU3VmZml4UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihBcnJheS5mcm9tKGFnb1N1ZmZpeE1hcmtlcnMpKTtcbiAgICAgIHRoaXMucmVnZXhBZ29TdWZmaXggPSBuZXcgUmVnRXhwKFxuICAgICAgICBgXlxcXFxzKihcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccyooPzoke2Fnb1N1ZmZpeFBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgICAnaSdcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVnZXhBZ29TdWZmaXggPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIEluaXRpYWxpemVzIGtleXdvcmRzIGZvciBmYXN0IGRldGVjdGlvblxuICBwcml2YXRlIGluaXRpYWxpemVLZXl3b3JkcygpOiB2b2lkIHtcbiAgICB0aGlzLmltbWVkaWF0ZUtleXdvcmRzID0gbmV3IFNldChcbiAgICAgIFsnbm93JywgJ3RvZGF5JywgJ3RvbW9ycm93JywgJ3llc3RlcmRheSddLmZsYXRNYXAoa2V5ID0+IHRoaXMudGMuY29sbGVjdFdvcmRzKGtleSwgeyBsb3dlcmNhc2U6IHRydWUgfSkpXG4gICAgKTtcbiAgICB0aGlzLnByZWZpeEtleXdvcmRzID0ge1xuICAgICAgdGhpczogbmV3IFNldCh0aGlzLnRjLmNvbGxlY3RXb3JkcyhcInRoaXNcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkpLFxuICAgICAgbmV4dDogbmV3IFNldCh0aGlzLnRjLmNvbGxlY3RXb3JkcyhcIm5leHRcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkpLFxuICAgICAgbGFzdDogbmV3IFNldCh0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImxhc3RcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkpLFxuICAgIH07XG5cbiAgICAvLyBUaW1lIHVuaXRzIHdpdGggbWFwcGluZyB0byBNb21lbnQuanMgdW5pdHNcbiAgICBjb25zdCB1bml0TWFwcGluZ3M6IHsga2V5OiBzdHJpbmc7IG1vbWVudFVuaXQ6IFRpbWVVbml0IH1bXSA9IFtcbiAgICAgIHsga2V5OiAnbWludXRlJywgbW9tZW50VW5pdDogJ21pbnV0ZXMnIH0sXG4gICAgICB7IGtleTogJ2hvdXInLCBtb21lbnRVbml0OiAnaG91cnMnIH0sXG4gICAgICB7IGtleTogJ2RheScsIG1vbWVudFVuaXQ6ICdkYXlzJyB9LFxuICAgICAgeyBrZXk6ICd3ZWVrJywgbW9tZW50VW5pdDogJ3dlZWtzJyB9LFxuICAgICAgeyBrZXk6ICdtb250aCcsIG1vbWVudFVuaXQ6ICdtb250aHMnIH0sXG4gICAgICB7IGtleTogJ3llYXInLCBtb21lbnRVbml0OiAneWVhcnMnIH0sXG4gICAgXTtcbiAgICB0aGlzLnRpbWVVbml0TWFwID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgbWFwcGluZyBvZiB1bml0TWFwcGluZ3MpIHtcbiAgICAgIGZvciAoY29uc3Qgd29yZCBvZiB0aGlzLnRjLmNvbGxlY3RXb3JkcyhtYXBwaW5nLmtleSwgeyBsb3dlcmNhc2U6IHRydWUgfSkpIHtcbiAgICAgICAgdGhpcy50aW1lVW5pdE1hcC5zZXQod29yZCwgbWFwcGluZy5tb21lbnRVbml0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAtLS0gVVRJTElUWSBGVU5DVElPTjogREFZIE5BTUUg4oaSIE5VTUVSSUMgSU5ERVggQ09OVkVSU0lPTiAtLS1cbiAgLy8gQ29udmVydHMgZGF5IG5hbWVzIGZyb20gYWxsIGxhbmd1YWdlcyB0byBudW1lcmljIGluZGljZXMgKDAtNilcbiAgLy8gTW9tZW50LmpzIHVzZXM6IDA9U3VuZGF5LCAxPU1vbmRheSwgMj1UdWVzZGF5LCAzPVdlZG5lc2RheSwgND1UaHVyc2RheSwgNT1GcmlkYXksIDY9U2F0dXJkYXlcbiAgcHJpdmF0ZSBnZXREYXlPZldlZWtJbmRleChkYXlOYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBkYXlOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBFbmdsaXNoIGRheSBuYW1lcy9hYmJyZXZpYXRpb25zLCBhbHdheXMgYXZhaWxhYmxlIHJlZ2FyZGxlc3Mgb2YgYWN0aXZlIGxhbmd1YWdlc1xuICAgIGNvbnN0IGRheU1hcDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHtcbiAgICAgICdzdW5kYXknOiAwLCAnc3VuJzogMCxcbiAgICAgICdtb25kYXknOiAxLCAnbW9uJzogMSxcbiAgICAgICd0dWVzZGF5JzogMiwgJ3R1ZSc6IDIsICd0dWVzJzogMixcbiAgICAgICd3ZWRuZXNkYXknOiAzLCAnd2VkJzogMyxcbiAgICAgICd0aHVyc2RheSc6IDQsICd0aHUnOiA0LCAndGh1cic6IDQsICd0aHVycyc6IDQsXG4gICAgICAnZnJpZGF5JzogNSwgJ2ZyaSc6IDUsXG4gICAgICAnc2F0dXJkYXknOiA2LCAnc2F0JzogNixcbiAgICB9O1xuXG4gICAgLy8gQWRkIGRheXMgZnJvbSBhbGwgZW5hYmxlZCBsYW5ndWFnZXNcbiAgICBjb25zdCBkYXlLZXlzID0gWydzdW5kYXknLCAnbW9uZGF5JywgJ3R1ZXNkYXknLCAnd2VkbmVzZGF5JywgJ3RodXJzZGF5JywgJ2ZyaWRheScsICdzYXR1cmRheSddO1xuICAgIGRheUtleXMuZm9yRWFjaCgoa2V5LCBpKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgdGhpcy50Yy5jb2xsZWN0V29yZHMoa2V5LCB7IGxvd2VyY2FzZTogdHJ1ZSB9KSkge1xuICAgICAgICBkYXlNYXBbdmFyaWFudF0gPSBpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRheU1hcFtub3JtYWxpemVkXSA/PyAwOyAvLyBEZWZhdWx0IHRvIFN1bmRheSBpZiBub3QgcmVjb2duaXplZFxuICB9XG5cbiAgLy8gLS0tIENBQ0hFIFVUSUxJVElFUyAtLS1cbiAgLy8gR2V0IGRheSBvZiB5ZWFyICgxLTM2NS8zNjYpIGZvciBjYWNoZSBpbnZhbGlkYXRpb25cbiAgcHJpdmF0ZSBnZXREYXlPZlllYXIoKTogbnVtYmVyIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIDAsIDApO1xuICAgIGNvbnN0IGRpZmYgPSBub3cuZ2V0VGltZSgpIC0gc3RhcnQuZ2V0VGltZSgpO1xuICAgIHJldHVybiBNYXRoLmZsb29yKGRpZmYgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkpO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgY2FjaGUga2V5IGZyb20gc2VsZWN0ZWRUZXh0LCB3ZWVrU3RhcnRQcmVmZXJlbmNlLCBhbmQgY3VycmVudCBkYXlcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNhY2hlS2V5KHNlbGVjdGVkVGV4dDogc3RyaW5nLCB3ZWVrU3RhcnRQcmVmZXJlbmNlOiBEYXlPZldlZWspOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1cnJlbnREYXkgPSB0aGlzLmdldERheU9mWWVhcigpO1xuICAgIC8vIEluY2x1ZGUgZGF5IGluIGtleSB0byBhdXRvbWF0aWNhbGx5IGludmFsaWRhdGUgY2FjaGUgd2hlbiBkYXkgY2hhbmdlc1xuICAgIHJldHVybiBgJHtzZWxlY3RlZFRleHQudHJpbSgpfXwke3dlZWtTdGFydFByZWZlcmVuY2V9fCR7Y3VycmVudERheX1gO1xuICB9XG5cbiAgLy8gU3RvcmUgcmVzdWx0IGluIGNhY2hlIGFuZCByZXR1cm4gaXRcbiAgcHJpdmF0ZSBjYWNoZUFuZFJldHVybihjYWNoZUtleTogc3RyaW5nLCByZXN1bHQ6IERhdGUpOiBEYXRlIHtcbiAgICAvLyBDcsOpZXIgdW5lIG5vdXZlbGxlIGluc3RhbmNlIGRlIERhdGUgcG91ciDDqXZpdGVyIGxlcyByw6lmw6lyZW5jZXMgcGFydGFnw6llc1xuICAgIGNvbnN0IGNhY2hlZERhdGUgPSBuZXcgRGF0ZShyZXN1bHQuZ2V0VGltZSgpKTtcbiAgICB0aGlzLmNhY2hlLnNldChjYWNoZUtleSwgY2FjaGVkRGF0ZSk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHJlc3VsdC5nZXRUaW1lKCkpO1xuICB9XG5cbiAgLy8gLS0tIE1BSU4gRU5HSU5FIC0tLVxuICAvKipcbiAgICogUGFyc2VzIGEgbmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZyBhbmQgcmV0dXJucyBhIERhdGUgb2JqZWN0LlxuICAgKiBcbiAgICogU3VwcG9ydHMgbXVsdGlwbGUgbGFuZ3VhZ2VzIGFuZCB2YXJpb3VzIGRhdGUgZXhwcmVzc2lvbnM6XG4gICAqIC0gSW1tZWRpYXRlIGRhdGVzOiBcInRvZGF5XCIsIFwidG9tb3Jyb3dcIiwgXCJ5ZXN0ZXJkYXlcIiwgXCJub3dcIlxuICAgKiAtIFJlbGF0aXZlIGRhdGVzOiBcImluIDIgZGF5c1wiLCBcImluIDMgd2Vla3NcIiwgXCJpbiAxIG1vbnRoXCJcbiAgICogLSBDb21iaW5lZCBkdXJhdGlvbnM6IFwiaW4gMiB3ZWVrcyBhbmQgMyBkYXlzXCJcbiAgICogLSBXZWVrZGF5czogXCJuZXh0IE1vbmRheVwiLCBcImxhc3QgRnJpZGF5XCIsIFwidGhpcyBXZWRuZXNkYXlcIlxuICAgKiAtIFdlZWtkYXlzIHdpdGggdGltZTogXCJuZXh0IE1vbmRheSBhdCAzcG1cIlxuICAgKiAtIFBlcmlvZHM6IFwibmV4dCB3ZWVrXCIsIFwibmV4dCBtb250aFwiLCBcIm5leHQgeWVhclwiXG4gICAqIFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRUZXh0IC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZyB0byBwYXJzZSAoZS5nLiwgXCJ0b21vcnJvd1wiLCBcImluIDIgZGF5c1wiLCBcIm5leHQgTW9uZGF5XCIpXG4gICAqIEBwYXJhbSB3ZWVrU3RhcnRQcmVmZXJlbmNlIC0gRGF5IG9mIHdlZWsgdG8gY29uc2lkZXIgYXMgd2VlayBzdGFydCAoYWZmZWN0cyBcIm5leHQgd2Vla1wiIGNhbGN1bGF0aW9ucylcbiAgICogQHJldHVybnMgUGFyc2VkIERhdGUgb2JqZWN0LCBvciBjdXJyZW50IGRhdGUgaWYgcGFyc2luZyBmYWlsc1xuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBwYXJzZXIgPSBuZXcgTkxEUGFyc2VyKFsnZW4nLCAnZnInXSk7XG4gICAqIGNvbnN0IGRhdGUgPSBwYXJzZXIuZ2V0UGFyc2VkRGF0ZShcInRvbW9ycm93XCIsIFwibW9uZGF5XCIpO1xuICAgKiBjb25zb2xlLmxvZyhkYXRlKTsgLy8gRGF0ZSBvYmplY3QgZm9yIHRvbW9ycm93XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0UGFyc2VkRGF0ZShzZWxlY3RlZFRleHQ6IHN0cmluZywgd2Vla1N0YXJ0UHJlZmVyZW5jZTogRGF5T2ZXZWVrKTogRGF0ZSB7XG4gICAgLy8gTmV0dG95ZXIgbGVzIGNhcmFjdMOocmVzIHNww6ljaWF1eCBlbiBmaW4gZGUgY2hhw65uZSAoZXg6IFwidG9tb3Jyb3chISFcIilcbiAgICBjb25zdCBjbGVhbmVkVGV4dCA9IHNlbGVjdGVkVGV4dC50cmltKCkucmVwbGFjZSgvWyE/Ll0rJC8sICcnKTtcbiAgICBjb25zdCB0ZXh0ID0gY2xlYW5lZFRleHQudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIFwibm93XCIvXCJ0b2RheVwiLCBcIlggYWdvXCIsIGFuZCBcImluIFggdW5pdHNcIiBhbGwgcmVzb2x2ZSByZWxhdGl2ZSB0byB0aGVcbiAgICAvLyBleGFjdCBjdXJyZW50IGluc3RhbnQgKG5vdCBqdXN0IHRoZSBjdXJyZW50IGRheSksIHNvIGNhY2hpbmcgdGhlbSBhdFxuICAgIC8vIHRoZSBjYWNoZSdzIGRheS1zaXplZCBncmFudWxhcml0eSB3b3VsZCByZXR1cm4gYSBzdGFsZSB0aW1lIG9uIGV2ZXJ5XG4gICAgLy8gY2FsbCBhZnRlciB0aGUgZmlyc3Qgd2l0aGluIHRoYXQgZGF5IChlLmcuIFwiaW4gMjAgbWludXRlc1wiIG9yIFwibm93XCJcbiAgICAvLyBhbHdheXMgcmV0dXJuaW5nIHRoZSBmaXJzdCByZXN1bHQgdGhleSBldmVyIHByb2R1Y2VkIHRoYXQgZGF5KS5cbiAgICAvLyBBbHdheXMgY29tcHV0ZSB0aGVzZSBmcmVzaCwgYnlwYXNzaW5nIHRoZSBjYWNoZSBlbnRpcmVseS5cbiAgICAvLyBcInRvbW9ycm93XCIvXCJ5ZXN0ZXJkYXlcIiByZXNvbHZlIHRvIGEgc3BlY2lmaWMgY2FsZW5kYXIgZGF5IGxpa2UgdGhlXG4gICAgLy8gb3RoZXIgY2FjaGVkIGV4cHJlc3Npb25zIGJlbG93LCBzbyB0aGV5IHN0YXkgb24gdGhlIGNhY2hlZCBwYXRoXG4gICAgLy8gKGhhbmRsZWQgYnkgdHJ5SW1tZWRpYXRlS2V5d29yZHMgZnVydGhlciBkb3duKS5cbiAgICBjb25zdCBub3dXb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKCdub3cnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KTtcbiAgICBjb25zdCB0b2RheVdvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoJ3RvZGF5JywgeyBsb3dlcmNhc2U6IHRydWUgfSk7XG4gICAgY29uc3Qgdm9sYXRpbGVSZXN1bHQgPVxuICAgICAgKG5vd1dvcmRzLmluY2x1ZGVzKHRleHQpIHx8IHRvZGF5V29yZHMuaW5jbHVkZXModGV4dCkgPyBuZXcgRGF0ZSgpIDogbnVsbCkgPz9cbiAgICAgIHRoaXMudHJ5UGFzdEV4cHJlc3Npb25zKHRleHQsIGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlSZWxhdGl2ZUNhbGN1bGF0aW9uKGNsZWFuZWRUZXh0KTtcbiAgICBpZiAodm9sYXRpbGVSZXN1bHQpIHJldHVybiB2b2xhdGlsZVJlc3VsdDtcblxuICAgIC8vIFbDqXJpZmllciBzaSBsZSBqb3VyIGEgY2hhbmfDqSBwb3VyIGludmFsaWRlciBsZSBjYWNoZVxuICAgIGNvbnN0IGN1cnJlbnREYXkgPSB0aGlzLmdldERheU9mWWVhcigpO1xuICAgIGlmIChjdXJyZW50RGF5ICE9PSB0aGlzLmNhY2hlRGF5KSB7XG4gICAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgICB0aGlzLmNhY2hlRGF5ID0gY3VycmVudERheTtcbiAgICB9XG5cbiAgICAvLyBHw6luw6lyZXIgbGEgY2zDqSBkdSBjYWNoZSBhdmVjIGxlIHRleHRlIG5ldHRvecOpIHBvdXIgcXVlIFwidG9tb3Jyb3dcIiBldCBcInRvbW9ycm93ISEhXCIgdXRpbGlzZW50IGxhIG3Dqm1lIGNsw6lcbiAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuZ2VuZXJhdGVDYWNoZUtleShjbGVhbmVkVGV4dCwgd2Vla1N0YXJ0UHJlZmVyZW5jZSk7XG5cbiAgICAvLyBWw6lyaWZpZXIgbGUgY2FjaGUgYXZhbnQgZGUgcGFyc2VyXG4gICAgY29uc3QgY2FjaGVkRGF0ZSA9IHRoaXMuY2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAoY2FjaGVkRGF0ZSkge1xuICAgICAgLy8gQ3LDqWVyIHVuZSBub3V2ZWxsZSBpbnN0YW5jZSBkZSBEYXRlIHBvdXIgw6l2aXRlciBsZXMgcsOpZsOpcmVuY2VzIHBhcnRhZ8OpZXNcbiAgICAgIHJldHVybiBuZXcgRGF0ZShjYWNoZWREYXRlLmdldFRpbWUoKSk7XG4gICAgfVxuXG4gICAgLy8gRWFjaCB0cnkqKCkgbWV0aG9kIGJlbG93IHJldHVybnMgbnVsbCB3aGVuIGl0IGRvZXNuJ3QgcmVjb2duaXplIHRoZVxuICAgIC8vIGlucHV0LCBsZXR0aW5nIHRoZSBuZXh0IGxldmVsIGhhdmUgYSBzaG90IC0tIHNhbWUgTEVWRUwgMS00IG9yZGVyIHRoaXNcbiAgICAvLyBmaWxlIGhhcyBhbHdheXMgdXNlZCwganVzdCBzcGxpdCBpbnRvIG5hbWVkLCBpbmRlcGVuZGVudGx5IHJlYWRhYmxlXG4gICAgLy8gbWV0aG9kcyBpbnN0ZWFkIG9mIG9uZSBmdW5jdGlvbiB0aGF0IHVzZWQgdG8gcnVuIH41NzAgbGluZXMuXG4gICAgY29uc3QgcmVzdWx0ID1cbiAgICAgIHRoaXMudHJ5SW1tZWRpYXRlS2V5d29yZHModGV4dCkgPz9cbiAgICAgIHRoaXMudHJ5RGF0ZVJhbmdlU2hvcnRjdXQoY2xlYW5lZFRleHQpID8/XG4gICAgICB0aGlzLnRyeVdlZWtkYXlzKGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlPcmRpbmFsT2ZNb250aChjbGVhbmVkVGV4dCkgPz9cbiAgICAgIHRoaXMudHJ5TGFzdERheU9mTW9udGgoY2xlYW5lZFRleHQpID8/XG4gICAgICB0aGlzLnRyeVdlZWtkYXlPZk1vbnRoKGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlOZXh0UGVyaW9kU2hvcnRjdXQoY2xlYW5lZFRleHQpID8/XG4gICAgICB0aGlzLmNocm9ub0ZhbGxiYWNrKHNlbGVjdGVkVGV4dCwgd2Vla1N0YXJ0UHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZUFuZFJldHVybihjYWNoZUtleSwgcmVzdWx0KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAxOiBJTU1FRElBVEUgS0VZV09SRFMgKFNwZWVkIGFuZCBQcmVjaXNpb24pXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeUltbWVkaWF0ZUtleXdvcmRzKHRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuaW1tZWRpYXRlS2V5d29yZHMuaGFzKHRleHQpKSByZXR1cm4gbnVsbDtcblxuICAgIGlmICh0aGlzLnRjLmNvbGxlY3RXb3Jkcygnbm93JywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXModGV4dCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ3RvZGF5JywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXModGV4dCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ3RvbW9ycm93JywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXModGV4dCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoMSwgJ2RheXMnKS50b0RhdGUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGMuY29sbGVjdFdvcmRzKCd5ZXN0ZXJkYXknLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyh0ZXh0KSkge1xuICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXlzJykudG9EYXRlKCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExFVkVMIDEuNTogUEFTVCBFWFBSRVNTSU9OUyAoMiBkYXlzIGFnbywgaWwgeSBhIDMgbWluKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSB0cnlQYXN0RXhwcmVzc2lvbnModGV4dDogc3RyaW5nLCBjbGVhbmVkVGV4dDogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIC8vIENoZWNrIGZvciBcImFnb1wiIGV4cHJlc3Npb25zIGluIEVuZ2xpc2ggKGUuZy4sIFwiMiBkYXlzIGFnb1wiKS4gVW5saWtlXG4gICAgLy8gZXZlcnkgb3RoZXIgdW5pdC1jYXB0dXJpbmcgcmVnZXggaW4gdGhpcyBmaWxlLCB0aGlzIG9uZSBjYXB0dXJlcyB0aGVcbiAgICAvLyB1bml0IGdlbmVyaWNhbGx5IChcXHcrLCBub3QgcmVzdHJpY3RlZCB0byBrbm93biB0cmFuc2xhdGVkIHdvcmRzKSwgc29cbiAgICAvLyBndWVzc1VuaXQoKSdzIGFiYnJldmlhdGlvbi1ndWVzc2luZyBmYWxsYmFjayBpcyBnZW51aW5lbHkgcmVhY2hhYmxlXG4gICAgLy8gaGVyZSBmb3IgdW5pdHMgbm8gZW5hYmxlZCBsYW5ndWFnZSdzIGRpY3Rpb25hcnkgcmVjb2duaXplcy5cbiAgICBjb25zdCBhZ29NYXRjaCA9IHRleHQubWF0Y2goL14oXFxkKylcXHMrKFxcdyspXFxzK2FnbyQvaSk7XG4gICAgaWYgKGFnb01hdGNoKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGFnb01hdGNoWzFdKTtcbiAgICAgIGNvbnN0IHVuaXRTdHIgPSBhZ29NYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHVuaXQgPSB0aGlzLmd1ZXNzVW5pdCh1bml0U3RyKTtcbiAgICAgIHJldHVybiBtb21lbnQoKS5zdWJ0cmFjdCh2YWx1ZSwgdW5pdCkudG9EYXRlKCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHBhc3QgZXhwcmVzc2lvbnMgaW4gYWxsIGxhbmd1YWdlcyAoZS5nLiwgXCJpbCB5IGEgMyBtaW51dGVzXCIsIFwidm9yIDIgU3R1bmRlblwiLCBldGMuKVxuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgbWludXRlc0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcIm1pbnV0ZXNhZ29cIiwgbGFuZyk7XG4gICAgICBjb25zdCBob3Vyc0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcImhvdXJzYWdvXCIsIGxhbmcpO1xuICAgICAgY29uc3QgZGF5c0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcImRheXNhZ29cIiwgbGFuZyk7XG4gICAgICBjb25zdCB3ZWVrc0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcIndlZWtzYWdvXCIsIGxhbmcpO1xuICAgICAgY29uc3QgbW9udGhzQWdvUGF0dGVybiA9IHRoaXMudGMudHJhbnNsYXRlKFwibW9udGhzYWdvXCIsIGxhbmcpO1xuXG4gICAgICBjb25zdCBwYXR0ZXJucyA9IFtcbiAgICAgICAgeyBwYXR0ZXJuOiBtaW51dGVzQWdvUGF0dGVybiwgdW5pdDogJ21pbnV0ZXMnIGFzIGNvbnN0IH0sXG4gICAgICAgIHsgcGF0dGVybjogaG91cnNBZ29QYXR0ZXJuLCB1bml0OiAnaG91cnMnIGFzIGNvbnN0IH0sXG4gICAgICAgIHsgcGF0dGVybjogZGF5c0Fnb1BhdHRlcm4sIHVuaXQ6ICdkYXlzJyBhcyBjb25zdCB9LFxuICAgICAgICB7IHBhdHRlcm46IHdlZWtzQWdvUGF0dGVybiwgdW5pdDogJ3dlZWtzJyBhcyBjb25zdCB9LFxuICAgICAgICB7IHBhdHRlcm46IG1vbnRoc0Fnb1BhdHRlcm4sIHVuaXQ6ICdtb250aHMnIGFzIGNvbnN0IH0sXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IHsgcGF0dGVybiwgdW5pdCB9IG9mIHBhdHRlcm5zKSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gdGhpcy5idWlsZEFnb1JlZ2V4KHBhdHRlcm4pO1xuICAgICAgICBpZiAocmVnZXgpIHtcbiAgICAgICAgICBjb25zdCBtYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHJlZ2V4KTtcbiAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQobWF0Y2hbMV0pO1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdWZmaXgtc3R5bGUgcGFzdCBleHByZXNzaW9ucywgZS5nLiBQb3J0dWd1ZXNlIFwiMyBkaWFzIGF0csOhc1wiICgzIGRheXMgYWdvKVxuICAgIGNvbnN0IGFnb1N1ZmZpeE1hdGNoID0gdGhpcy5yZWdleEFnb1N1ZmZpeCA/IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhBZ29TdWZmaXgpIDogbnVsbDtcbiAgICBpZiAoYWdvU3VmZml4TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQoYWdvU3VmZml4TWF0Y2hbMV0pO1xuICAgICAgY29uc3QgdW5pdFN0ciA9IGFnb1N1ZmZpeE1hdGNoWzJdLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgY29uc3QgdW5pdCA9IHRoaXMuZ3Vlc3NVbml0KHVuaXRTdHIpO1xuICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENvbnZlcnRzIGFuIFwiWCBhZ29cIiB0cmFuc2xhdGlvbiB0ZW1wbGF0ZSBpbnRvIGEgbWF0Y2hpbmcgcmVnZXguXG4gIC8vIEV4YW1wbGU6IFwiaWwgeSBhICV7dGltZURlbHRhfSBtaW51dGVzXCIgLT4gXCJpbCB5IGEgKFxcZCspIG1pbnV0ZXNcIlxuICAvLyBFeGFtcGxlOiBcItGH0LXRgNC10LcgJXt0aW1lRGVsdGF9INC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRiyDQvdCw0LfQsNC0XCIgKFJ1c3NpYW5cbiAgLy8gZ3JhbW1hdGljYWwgZm9ybXMpIC0+IFwi0YfQtdGA0LXQtyAoXFxkKykgKD860LzQuNC90YPRgnzQvNC40L3Rg9GC0YN80LzQuNC90YPRgtGLKSDQvdCw0LfQsNC0XCJcbiAgLy8gRXhhbXBsZTogXCIle3RpbWVEZWx0YX3lpKnliY1cIiAoQ2hpbmVzZSwgbm8gc3BhY2VzKSAtPiBcIihcXGQrKeWkqeWJjVwiXG4gIHByaXZhdGUgYnVpbGRBZ29SZWdleChwYXR0ZXJuOiBzdHJpbmcpOiBSZWdFeHAgfCBudWxsIHtcbiAgICBpZiAoIXBhdHRlcm4gfHwgcGF0dGVybiA9PT0gXCJOT1RGT1VORFwiKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGVzY2FwZVJlZ2V4ID0gKHN0cjogc3RyaW5nKSA9PiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbiAgICAvLyBQbGFjZWhvbGRlciBzd2FwcGVkIGluIGJlZm9yZSBlc2NhcGluZyBhbmQgYmFjayBvdXQgYWZ0ZXJ3YXJkcywgc29cbiAgICAvLyAle3RpbWVEZWx0YX0gYmVjb21lcyBhIHJlYWwgY2FwdHVyZSBncm91cCBpbnN0ZWFkIG9mIGJlaW5nIG1hbmdsZWQgYnlcbiAgICAvLyBlc2NhcGluZyBpdHMgb3duIGluc2VydGVkIFwiKFxcZCspXCIsIGFuZCBzbyBpdCBzdGlsbCB3b3JrcyB3aGVuIGVtYmVkZGVkXG4gICAgLy8gaW4gYSB0b2tlbiB3aXRoIG5vIHN1cnJvdW5kaW5nIHdoaXRlc3BhY2UgKGUuZy4gQ2hpbmVzZSBcIiV7dGltZURlbHRhfeWkqeWJjVwiKS5cbiAgICBjb25zdCBQTEFDRUhPTERFUiA9ICdcXHUwMDAwVElNRURFTFRBXFx1MDAwMCc7XG5cbiAgICBjb25zdCByZWdleFN0ciA9IHBhdHRlcm5cbiAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAubWFwKHRva2VuID0+IHtcbiAgICAgICAgY29uc3Qgd2l0aFBsYWNlaG9sZGVyID0gdG9rZW4ucmVwbGFjZSgvJVxce3RpbWVEZWx0YVxcfS9nLCBQTEFDRUhPTERFUik7XG4gICAgICAgIC8vIFwifFwiIGluc2lkZSBhIHRva2VuIG1lYW5zIG11bHRpcGxlIGdyYW1tYXRpY2FsIGZvcm1zIG9mIHRoZSBzYW1lXG4gICAgICAgIC8vIHdvcmQgKGUuZy4gUnVzc2lhbiBcItC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRi1wiKTogdHVybiBpdCBpbnRvIGFuXG4gICAgICAgIC8vIGFsdGVybmF0aW9uIGluc3RlYWQgb2YgZXNjYXBpbmcgaXQgaW50byBhIGxpdGVyYWwgcGlwZS5cbiAgICAgICAgaWYgKHdpdGhQbGFjZWhvbGRlci5pbmNsdWRlcygnfCcpKSB7XG4gICAgICAgICAgY29uc3QgYWx0ZXJuYXRpdmVzID0gd2l0aFBsYWNlaG9sZGVyXG4gICAgICAgICAgICAuc3BsaXQoJ3wnKVxuICAgICAgICAgICAgLm1hcChhbHQgPT4gZXNjYXBlUmVnZXgoYWx0KS5zcGxpdChQTEFDRUhPTERFUikuam9pbignKFxcXFxkKyknKSk7XG4gICAgICAgICAgcmV0dXJuIGAoPzoke2FsdGVybmF0aXZlcy5qb2luKCd8Jyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVzY2FwZVJlZ2V4KHdpdGhQbGFjZWhvbGRlcikuc3BsaXQoUExBQ0VIT0xERVIpLmpvaW4oJyhcXFxcZCspJyk7XG4gICAgICB9KVxuICAgICAgLmpvaW4oJ1xcXFxzKycpO1xuXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4ke3JlZ2V4U3RyfSRgLCAnaScpO1xuICB9XG5cbiAgLy8gU2hhcmVkIGFiYnJldmlhdGlvbi1ndWVzc2luZyBmYWxsYmFjayBmb3IgdW5pdCB3b3JkcyB0aGF0IGFyZW4ndCBpbiBhbnlcbiAgLy8gZW5hYmxlZCBsYW5ndWFnZSdzIGRpY3Rpb25hcnkuIE9ubHkgcmVhY2hhYmxlIGZyb20gY2FsbGVycyB3aG9zZSByZWdleFxuICAvLyBjYXB0dXJlcyB0aGUgdW5pdCBnZW5lcmljYWxseSAodGhlIGhhcmRjb2RlZCBFbmdsaXNoIFwiYWdvXCIgcmVnZXggYWJvdmUsXG4gIC8vIGFuZCB0aGUgbXVsdGktdW5pdCBcImluIFggYW5kIFlcIiBzcGxpdCBiZWxvdykgLS0gcmVnZXhSZWxhdGl2ZSBhbmQgdGhlXG4gIC8vIHN1ZmZpeCByZWdleGVzIHJlc3RyaWN0IHRoZWlyIGNhcHR1cmUgZ3JvdXAgdG8gYWxyZWFkeS1rbm93biB3b3Jkcywgc29cbiAgLy8gdGhpcyBmYWxsYmFjayBjYW4gbmV2ZXIgZmlyZSBmb3IgdGhlbSAodmVyaWZpZWQgZW1waXJpY2FsbHkgYmVmb3JlIHRoZVxuICAvLyBkZWFkIGJyYW5jaGVzIHRoYXQgdXNlZCB0byBzaXQgaW4gdGhvc2UgcGF0aHMgd2VyZSByZW1vdmVkKS5cbiAgcHJpdmF0ZSBndWVzc1VuaXQodW5pdFN0cjogc3RyaW5nKTogVGltZVVuaXQge1xuICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMudGltZVVuaXRNYXAuZ2V0KHVuaXRTdHIpO1xuICAgIGlmIChtYXBwZWQpIHtcbiAgICAgIHJldHVybiBtYXBwZWQ7XG4gICAgfVxuICAgIGlmICh1bml0U3RyLnN0YXJ0c1dpdGgoJ2gnKSkgcmV0dXJuICdob3Vycyc7XG4gICAgZWxzZSBpZiAodW5pdFN0ci5zdGFydHNXaXRoKCdkJykgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdqJykpIHJldHVybiAnZGF5cyc7XG4gICAgZWxzZSBpZiAodW5pdFN0ci5zdGFydHNXaXRoKCd3JykgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdzJykpIHJldHVybiAnd2Vla3MnO1xuICAgIGVsc2UgaWYgKHVuaXRTdHIgPT09ICdtJyB8fCB1bml0U3RyLnN0YXJ0c1dpdGgoJ21pbicpKSByZXR1cm4gJ21pbnV0ZXMnO1xuICAgIGVsc2UgaWYgKHVuaXRTdHIuc3RhcnRzV2l0aCgnbW8nKSB8fCB1bml0U3RyID09PSAnTScgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdtb2lzJykpIHJldHVybiAnbW9udGhzJztcbiAgICBlbHNlIGlmICh1bml0U3RyLnN0YXJ0c1dpdGgoJ3knKSB8fCB1bml0U3RyLnN0YXJ0c1dpdGgoJ2EnKSkgcmV0dXJuICd5ZWFycyc7XG4gICAgcmV0dXJuICdkYXlzJztcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAyOiBSRUxBVElWRSBDQUxDVUxBVElPTiAoaW4gMiBtaW51dGVzLCBpbiAxIHllYXIuLi4pXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeVJlbGF0aXZlQ2FsY3VsYXRpb24oY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICAvLyBGaXJzdCBjaGVjayBjb21iaW5hdGlvbnMgXCJpbiAyIHdlZWtzIGFuZCAzIGRheXNcIiBvciBtdWx0aXBsZSBjb21iaW5hdGlvbnNcbiAgICAvLyBUcnkgdG8gcGFyc2UgbXVsdGlwbGUgY29tYmluYXRpb25zIGxpa2UgXCJpbiAxIHllYXIgYW5kIDIgbW9udGhzIGFuZCAzIHdlZWtzIGFuZCA0IGRheXNcIlxuICAgIGxldCBoYXNNdWx0aVVuaXRzID0gZmFsc2U7XG4gICAgY29uc3QgdG90YWxNb21lbnQgPSBtb21lbnQoKTtcblxuICAgIC8vIFRyeSB0byBtYXRjaCBhbGwgXCJYIHVuaXRcIiBwYXR0ZXJucyBhZnRlciBcImluXCJcbiAgICBjb25zdCBpblBhdHRlcm5zID0gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMubGFuZ3VhZ2VzLm1hcChsID0+IHRoaXMudGMudHJhbnNsYXRlKFwiaW5cIiwgbCkpLmZpbHRlcih2ID0+IHYgIT09IFwiTk9URk9VTkRcIikuZmxhdE1hcCh2ID0+IHYuc3BsaXQoXCJ8XCIpKSkpO1xuICAgIGNvbnN0IGFuZFBhdHRlcm5zID0gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMubGFuZ3VhZ2VzLm1hcChsID0+IHRoaXMudGMudHJhbnNsYXRlKFwiYW5kXCIsIGwpKS5maWx0ZXIodiA9PiB2ICE9PSBcIk5PVEZPVU5EXCIpLmZsYXRNYXAodiA9PiB2LnNwbGl0KFwifFwiKSkpKTtcblxuICAgIGNvbnN0IGluUmVnZXggPSBuZXcgUmVnRXhwKGBeKCR7dGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKGluUGF0dGVybnMpfSlcXFxccytgLCAnaScpO1xuICAgIGNvbnN0IGFuZFJlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXHMrKCR7dGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKGFuZFBhdHRlcm5zKX0pXFxcXHMrYCwgJ2dpJyk7XG5cbiAgICBpZiAoY2xlYW5lZFRleHQubWF0Y2goaW5SZWdleCkpIHtcbiAgICAgIGNvbnN0IHdpdGhvdXRJbiA9IGNsZWFuZWRUZXh0LnJlcGxhY2UoaW5SZWdleCwgJycpO1xuICAgICAgY29uc3QgcGFydHMgPSB3aXRob3V0SW4uc3BsaXQoYW5kUmVnZXgpLmZpbHRlcihwID0+IHAgJiYgIWFuZFBhdHRlcm5zLnNvbWUoYSA9PiBhLnRvTG93ZXJDYXNlKCkgPT09IHAudHJpbSgpLnRvTG93ZXJDYXNlKCkpKTtcblxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgIC8vIE11bHRpcGxlIHVuaXRzIGRldGVjdGVkICgyIG9yIG1vcmUpXG4gICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgICAgIGNvbnN0IHVuaXRNYXRjaCA9IHBhcnQudHJpbSgpLm1hdGNoKC9eKFxcZCspXFxzKyhbXlxcc10rKSQvaSk7XG4gICAgICAgICAgaWYgKHVuaXRNYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh1bml0TWF0Y2hbMV0pO1xuICAgICAgICAgICAgY29uc3QgdW5pdFN0ciA9IHVuaXRNYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgICAgIHRvdGFsTW9tZW50LmFkZCh2YWx1ZSwgdGhpcy5ndWVzc1VuaXQodW5pdFN0cikpO1xuICAgICAgICAgICAgaGFzTXVsdGlVbml0cyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNNdWx0aVVuaXRzKSB7XG4gICAgICAgICAgcmV0dXJuIHRvdGFsTW9tZW50LnRvRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3VmZml4LXN0eWxlIGNvbWJpbmF0aW9ucywgZS5nLiBDaGluZXNlIFwiMumAseWSjDPlpKnlvoxcIiAoMiB3ZWVrcyBhbmQgMyBkYXlzIGxhdGVyKVxuICAgIGNvbnN0IHJlbENvbWJpbmVkU3VmZml4TWF0Y2ggPSB0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZFN1ZmZpeCA/IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkU3VmZml4KSA6IG51bGw7XG4gICAgaWYgKHJlbENvbWJpbmVkU3VmZml4TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHBhcnNlSW50KHJlbENvbWJpbmVkU3VmZml4TWF0Y2hbMV0pO1xuICAgICAgY29uc3QgdW5pdFN0cjEgPSByZWxDb21iaW5lZFN1ZmZpeE1hdGNoWzJdLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgY29uc3QgdmFsdWUyID0gcGFyc2VJbnQocmVsQ29tYmluZWRTdWZmaXhNYXRjaFszXSk7XG4gICAgICBjb25zdCB1bml0U3RyMiA9IHJlbENvbWJpbmVkU3VmZml4TWF0Y2hbNF0udG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgIGNvbnN0IHVuaXQxID0gdGhpcy5ndWVzc1VuaXQodW5pdFN0cjEpO1xuICAgICAgY29uc3QgdW5pdDIgPSB0aGlzLmd1ZXNzVW5pdCh1bml0U3RyMik7XG5cbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQodmFsdWUxLCB1bml0MSkuYWRkKHZhbHVlMiwgdW5pdDIpLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIFRoZW4gY2hlY2sgc2ltcGxlIGV4cHJlc3Npb25zIFwiaW4gMiBtaW51dGVzXCJcbiAgICBjb25zdCByZWxNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZSk7XG4gICAgaWYgKHJlbE1hdGNoKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHJlbE1hdGNoWzFdKTtcbiAgICAgIGNvbnN0IHVuaXRTdHIgPSByZWxNYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgICAgLy8gdW5pdFN0ciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcmVnaXN0ZXJlZCBrZXkgaGVyZTogcmVnZXhSZWxhdGl2ZSdzXG4gICAgICAvLyB1bml0IGNhcHR1cmUgZ3JvdXAgaXMgYnVpbHQgZnJvbSB0aGlzLnRjLmNvbGxlY3RXb3JkcygpIGZvciB0aGUgc2FtZVxuICAgICAgLy8gc2l4IGtleXMgdGhhdCBwb3B1bGF0ZSB0aW1lVW5pdE1hcCwgc28gYSBzdWNjZXNzZnVsIHJlZ2V4IG1hdGNoXG4gICAgICAvLyBhbHJlYWR5IGltcGxpZXMgYSBoaXQgLS0gdGhlIGZhbGxiYWNrIGJlbG93IGlzIHVucmVhY2hhYmxlLlxuICAgICAgY29uc3QgdW5pdCA9IHRoaXMudGltZVVuaXRNYXAuZ2V0KHVuaXRTdHIpID8/IHRoaXMuZ3Vlc3NVbml0KHVuaXRTdHIpO1xuXG4gICAgICAvLyBNb21lbnRKUyBoYW5kbGVzIHllYXIgdHJhbnNpdGlvbnMgcGVyZmVjdGx5XG4gICAgICByZXR1cm4gbW9tZW50KCkuYWRkKHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBTdWZmaXgtc3R5bGUgc2ltcGxlIGV4cHJlc3Npb25zLCBlLmcuIENoaW5lc2UgXCIy5aSp5b6MXCIgKDIgZGF5cyBsYXRlcilcbiAgICBjb25zdCByZWxTdWZmaXhNYXRjaCA9IHRoaXMucmVnZXhSZWxhdGl2ZVN1ZmZpeCA/IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZVN1ZmZpeCkgOiBudWxsO1xuICAgIGlmIChyZWxTdWZmaXhNYXRjaCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChyZWxTdWZmaXhNYXRjaFsxXSk7XG4gICAgICBjb25zdCB1bml0U3RyID0gcmVsU3VmZml4TWF0Y2hbMl0udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICBjb25zdCB1bml0ID0gdGhpcy5ndWVzc1VuaXQodW5pdFN0cik7XG4gICAgICByZXR1cm4gbW9tZW50KCkuYWRkKHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAyLjU6IERBVEUgUkFOR0VTIChmcm9tIE1vbmRheSB0byBGcmlkYXkpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSZXR1cm5zIGp1c3QgdGhlIHN0YXJ0IGRhdGUsIGZvciBnZXRQYXJzZWREYXRlKCkncyBzaW5nbGUtRGF0ZSBjb250cmFjdFxuICAvLyAtLSBzZWUgZ2V0UGFyc2VkRGF0ZVJhbmdlKCkgZm9yIHRoZSBmdWxsIHJhbmdlIHdpdGggYSBkYXRlIGxpc3QuXG4gIHByaXZhdGUgdHJ5RGF0ZVJhbmdlU2hvcnRjdXQoY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBjb25zdCByYW5nZU1hdGNoID0gY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleERhdGVSYW5nZSk7XG4gICAgaWYgKCFyYW5nZU1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHN0YXJ0RGF5TmFtZSA9IHJhbmdlTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtID0gbW9tZW50KCk7XG4gICAgY29uc3Qgc3RhcnREYXlJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoc3RhcnREYXlOYW1lKTtcblxuICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gbW9tZW50KCkuZGF5KHN0YXJ0RGF5SW5kZXgpO1xuICAgIGlmIChzdGFydE1vbWVudC5pc0JlZm9yZShtLCAnZGF5JykpIHtcbiAgICAgIHN0YXJ0TW9tZW50LmFkZCgxLCAnd2VlaycpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFydE1vbWVudC50b0RhdGUoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAzOiBXRUVLREFZUyAobmV4dCBmcmlkYXkuLi4pXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeVdlZWtkYXlzKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgLy8gRmlyc3QgY2hlY2sgXCJuZXh0IE1vbmRheSBhdCAzcG1cIlxuICAgIGNvbnN0IHdlZWtXaXRoVGltZU1hdGNoID0gY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSk7XG4gICAgaWYgKHdlZWtXaXRoVGltZU1hdGNoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSB3ZWVrV2l0aFRpbWVNYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgZGF5TmFtZSA9IHdlZWtXaXRoVGltZU1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCB0aW1lUGFydCA9IHdlZWtXaXRoVGltZU1hdGNoWzNdLnRyaW0oKTtcblxuICAgICAgY29uc3QgbSA9IG1vbWVudCgpO1xuICAgICAgY29uc3QgZGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGRheU5hbWUpO1xuXG4gICAgICBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy50aGlzLmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uZGF5KGRheUluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uYWRkKDEsICd3ZWVrcycpLmRheShkYXlJbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgICAvLyBQb3VyIFwibGFzdC9kZXJuaWVyIDxqb3VyPlwiLCBvbiBjaWJsZSB0b3Vqb3VycyBsYSBzZW1haW5lIHByw6ljw6lkZW50ZVxuICAgICAgICBtLmRheShkYXlJbmRleCkuc3VidHJhY3QoMSwgJ3dlZWsnKTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFyc2UgdGltZSB3aXRoIGNocm9uby1ub2RlLiBnZXRQYXJzZWREYXRlUmVzdWx0IHJldHVybnMgbnVsbFxuICAgICAgLy8gKHJhdGhlciB0aGFuIGEgXCJub3dcIiBwbGFjZWhvbGRlcikgd2hlbiBub3RoaW5nIG1hdGNoZWQsIHNvIGEgdGltZVxuICAgICAgLy8gcGFydCBjaHJvbm8tbm9kZSBjYW4ndCBwYXJzZSAoZS5nLiBcIm5leHQgTW9uZGF5IGF0IHp6cXF4eFwiKSBmYWxsc1xuICAgICAgLy8gYmFjayB0byB0aGUgYWxyZWFkeS1jb21wdXRlZCB3ZWVrZGF5IGRhdGUgYmVsb3csIGluc3RlYWQgb2ZcbiAgICAgIC8vIHNpbGVudGx5IGRpc2NhcmRpbmcgaXQgaW4gZmF2b3Igb2YgdGhlIGFjdHVhbCBjdXJyZW50IGRhdGUvdGltZS5cbiAgICAgIGNvbnN0IHRpbWVSZXN1bHQgPSB0aGlzLmdldFBhcnNlZERhdGVSZXN1bHQodGltZVBhcnQsIG0udG9EYXRlKCkpO1xuICAgICAgaWYgKHRpbWVSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVSZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRpbWUgcGFyc2luZyBmYWlscywgcmV0dXJuIGp1c3QgdGhlIGRhdGVcbiAgICAgIHJldHVybiBtLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIFRoZW4gY2hlY2sgc2ltcGxlIGV4cHJlc3Npb25zIFwibmV4dCBNb25kYXlcIlxuICAgIGNvbnN0IHdlZWtNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhXZWVrZGF5KTtcbiAgICBpZiAod2Vla01hdGNoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSB3ZWVrTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGRheU5hbWUgPSB3ZWVrTWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcblxuICAgICAgY29uc3QgbSA9IG1vbWVudCgpO1xuICAgICAgY29uc3QgZGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGRheU5hbWUpO1xuXG4gICAgICBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy50aGlzLmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uZGF5KGRheUluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uYWRkKDEsICd3ZWVrcycpLmRheShkYXlJbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgICAvLyBQb3VyIFwibGFzdC9kZXJuaWVyIDxqb3VyPlwiLCBvbiBjaWJsZSB0b3Vqb3VycyBsYSBzZW1haW5lIHByw6ljw6lkZW50ZVxuICAgICAgICBtLmRheShkYXlJbmRleCkuc3VidHJhY3QoMSwgJ3dlZWsnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciB3ZWVrZGF5IHdpdGhvdXQgcHJlZml4IChlLmcuLCBcIndlZG5lc2RheVwiLCBcImZyaWRheVwiKVxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIFwibmV4dCBbZGF5XVwiIG9yIFwidGhpcyBbZGF5XVwiIGlmIHRvZGF5XG4gICAgY29uc3Qgd2Vla09ubHlNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhXZWVrZGF5T25seSk7XG4gICAgaWYgKHdlZWtPbmx5TWF0Y2gpIHtcbiAgICAgIGNvbnN0IGRheU5hbWUgPSB3ZWVrT25seU1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBtID0gbW9tZW50KCk7XG4gICAgICBjb25zdCBkYXlJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoZGF5TmFtZSk7XG5cbiAgICAgIG0uZGF5KGRheUluZGV4KTtcbiAgICAgIC8vIElmIHRoZSBkYXkgaXMgaW4gdGhlIHBhc3QgKGJlZm9yZSB0b2RheSksIG1vdmUgdG8gbmV4dCB3ZWVrXG4gICAgICBpZiAobS5pc0JlZm9yZShtb21lbnQoKSwgJ2RheScpKSB7XG4gICAgICAgIG0uYWRkKDEsICd3ZWVrJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAzLjVhOiBcInRoZSBYdGggb2YgbmV4dCBtb250aFwiIC8gXCJ0aGUgTnRoIG9mIG5leHQgeWVhclwiXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeU9yZGluYWxPZk1vbnRoKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3Qgb3JkaW5hbE9mTW9udGhNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhPcmRpbmFsT2ZNb250aCk7XG4gICAgaWYgKCFvcmRpbmFsT2ZNb250aE1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG9yZGluYWxTdHIgPSBvcmRpbmFsT2ZNb250aE1hdGNoWzFdLnRyaW0oKTtcbiAgICAvLyBHcm91cHM6IFsxXT1vcmRpbmFsLCBbMl09cHJlZml4IGJlZm9yZSBtb250aCAob3B0aW9uYWwpLCBbM109bW9udGgsIFs0XT1wcmVmaXggYWZ0ZXIgbW9udGggKG9wdGlvbmFsLCBmb3IgRnJlbmNoKVxuICAgIGNvbnN0IHByZWZpeEJlZm9yZSA9IG9yZGluYWxPZk1vbnRoTWF0Y2hbMl0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgY29uc3QgcGVyaW9kU3RyID0gb3JkaW5hbE9mTW9udGhNYXRjaFszXT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwcmVmaXhBZnRlciA9IG9yZGluYWxPZk1vbnRoTWF0Y2hbNF0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgICAvLyBVc2UgcHJlZml4IGFmdGVyIG1vbnRoIGlmIHByZXNlbnQgKEZyZW5jaCBpbnZlcnNpb24pLCBvdGhlcndpc2UgcHJlZml4IGJlZm9yZVxuICAgIGNvbnN0IHByZWZpeCA9IHByZWZpeEFmdGVyIHx8IHByZWZpeEJlZm9yZTtcblxuICAgIC8vIFBhcnNlIG9yZGluYWwgbnVtYmVyIChlLmcuLCBcIjE1dGhcIiAtPiAxNSwgXCJmaXJzdFwiIC0+IDEpXG4gICAgY29uc3QgZGF5TnVtYmVyID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihvcmRpbmFsU3RyKTtcblxuICAgIC8vIERldGVybWluZSB3aGljaCBwZXJpb2QgKG1vbnRoL3llYXIpIHRvIHRhcmdldFxuICAgIGNvbnN0IHRhcmdldE1vbWVudCA9IG1vbWVudCgpO1xuICAgIGNvbnN0IGlzTW9udGggPSB0aGlzLnRjLmNvbGxlY3RXb3JkcygnbW9udGgnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyhwZXJpb2RTdHIpO1xuICAgIGNvbnN0IGlzWWVhciA9ICFpc01vbnRoICYmIHRoaXMudGMuY29sbGVjdFdvcmRzKCd5ZWFyJywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocGVyaW9kU3RyKTtcblxuICAgIGlmIChpc01vbnRoKSB7XG4gICAgICBpZiAocHJlZml4ICYmIHRoaXMucHJlZml4S2V5d29yZHMubmV4dC5oYXMocHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICdtb250aHMnKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgfSBlbHNlIGlmIChwcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5zdWJ0cmFjdCgxLCAnbW9udGhzJykuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwidGhpc1wiL25vIHByZWZpeCBib3RoIG1lYW4gXCJ0aGlzIG1vbnRoXCJcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgZGF5IG9mIG1vbnRoIChjbGFtcCB0byB2YWxpZCByYW5nZSlcbiAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gdGFyZ2V0TW9tZW50LmRheXNJbk1vbnRoKCk7XG4gICAgICBjb25zdCB0YXJnZXREYXkgPSBNYXRoLm1pbihkYXlOdW1iZXIsIGRheXNJbk1vbnRoKTtcbiAgICAgIHRhcmdldE1vbWVudC5kYXRlKHRhcmdldERheSk7XG4gICAgfSBlbHNlIGlmIChpc1llYXIpIHtcbiAgICAgIGlmIChwcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5hZGQoMSwgJ3llYXJzJykuc3RhcnRPZigneWVhcicpO1xuICAgICAgfSBlbHNlIGlmIChwcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5zdWJ0cmFjdCgxLCAneWVhcnMnKS5zdGFydE9mKCd5ZWFyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3RhcnRPZigneWVhcicpO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3IgeWVhciwgaW50ZXJwcmV0IGFzIGRheSBvZiB5ZWFyICgxLTM2NS8zNjYpXG4gICAgICBjb25zdCBkYXlzSW5ZZWFyID0gdGFyZ2V0TW9tZW50LmlzTGVhcFllYXIoKSA/IDM2NiA6IDM2NTtcbiAgICAgIGNvbnN0IHRhcmdldERheU9mWWVhciA9IE1hdGgubWluKGRheU51bWJlciwgZGF5c0luWWVhcik7XG4gICAgICB0YXJnZXRNb21lbnQuZGF5T2ZZZWFyKHRhcmdldERheU9mWWVhcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldE1vbWVudC50b0RhdGUoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAzLjViOiBcImxhc3QgZGF5IG9mIG1vbnRoXCIgLyBcImRlcm5pZXIgam91ciBkdSBtb2lzXCJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHByaXZhdGUgdHJ5TGFzdERheU9mTW9udGgoY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBjb25zdCBsYXN0RGF5T2ZNb250aE1hdGNoID0gY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleExhc3REYXlPZk1vbnRoKTtcbiAgICBpZiAoIWxhc3REYXlPZk1vbnRoTWF0Y2gpIHJldHVybiBudWxsO1xuXG4gICAgLy8gR3JvdXBzOiBbMV09cHJlZml4IGJlZm9yZSBcImxhc3RcIiAob3B0aW9uYWwpLCBbMl09XCJsYXN0XCIsIFszXT1kYXksIFs0XT1wcmVmaXggYmVmb3JlIG1vbnRoIChvcHRpb25hbCksIFs1XT1tb250aCwgWzZdPXByZWZpeCBhZnRlciBtb250aCAob3B0aW9uYWwsIGZvciBGcmVuY2gpXG4gICAgY29uc3QgcHJlZml4QmVmb3JlID0gbGFzdERheU9mTW9udGhNYXRjaFsxXT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwZXJpb2RTdHIgPSBsYXN0RGF5T2ZNb250aE1hdGNoWzVdPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgIGNvbnN0IHByZWZpeEFmdGVyID0gbGFzdERheU9mTW9udGhNYXRjaFs2XT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwcmVmaXhCZWZvcmVNb250aCA9IGxhc3REYXlPZk1vbnRoTWF0Y2hbNF0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgICAvLyBVc2UgcHJlZml4IGFmdGVyIG1vbnRoIGlmIHByZXNlbnQgKEZyZW5jaCBpbnZlcnNpb24pLCBvdGhlcndpc2UgcHJlZml4IGJlZm9yZSBtb250aCwgb3RoZXJ3aXNlIHByZWZpeCBiZWZvcmUgXCJsYXN0XCJcbiAgICBjb25zdCBwcmVmaXggPSBwcmVmaXhBZnRlciB8fCBwcmVmaXhCZWZvcmVNb250aCB8fCBwcmVmaXhCZWZvcmU7XG5cbiAgICBjb25zdCB0YXJnZXRNb21lbnQgPSBtb21lbnQoKTtcbiAgICBjb25zdCBpc01vbnRoID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoJ21vbnRoJywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocGVyaW9kU3RyKTtcbiAgICBpZiAoIWlzTW9udGgpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLm5leHQuaGFzKHByZWZpeCkpIHtcbiAgICAgIHRhcmdldE1vbWVudC5hZGQoMSwgJ21vbnRocycpLmVuZE9mKCdtb250aCcpO1xuICAgIH0gZWxzZSBpZiAocHJlZml4ICYmIHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgdGFyZ2V0TW9tZW50LnN1YnRyYWN0KDEsICdtb250aHMnKS5lbmRPZignbW9udGgnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gXCJ0aGlzXCIvbm8gcHJlZml4IGJvdGggbWVhbiBcInRoaXMgbW9udGhcIlxuICAgICAgdGFyZ2V0TW9tZW50LmVuZE9mKCdtb250aCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRNb21lbnQudG9EYXRlKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVWRUwgMy41YzogXCJmaXJzdCBNb25kYXkgb2YgbW9udGhcIiAvIFwibGFzdCBGcmlkYXkgb2YgbmV4dCBtb250aFwiXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeVdlZWtkYXlPZk1vbnRoKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3Qgd2Vla2RheU9mTW9udGhNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhXZWVrZGF5T2ZNb250aCk7XG4gICAgaWYgKCF3ZWVrZGF5T2ZNb250aE1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIEdyb3VwczogWzFdPWZpcnN0L3ByZWZpeCwgWzJdPXdlZWtkYXksIFszXT1wcmVmaXggYmVmb3JlIG1vbnRoIChvcHRpb25hbCksIFs0XT1tb250aCwgWzVdPXByZWZpeCBhZnRlciBtb250aCAob3B0aW9uYWwsIGZvciBGcmVuY2gpXG4gICAgY29uc3QgcHJlZml4T3JGaXJzdCA9IHdlZWtkYXlPZk1vbnRoTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBkYXlOYW1lID0gd2Vla2RheU9mTW9udGhNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHByZWZpeEJlZm9yZU1vbnRoID0gd2Vla2RheU9mTW9udGhNYXRjaFszXT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwZXJpb2RTdHIgPSB3ZWVrZGF5T2ZNb250aE1hdGNoWzRdPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgIGNvbnN0IHByZWZpeEFmdGVyID0gd2Vla2RheU9mTW9udGhNYXRjaFs1XT8udG9Mb3dlckNhc2UoKSB8fCAnJztcblxuICAgIC8vIFVzZSBwcmVmaXggYWZ0ZXIgbW9udGggaWYgcHJlc2VudCAoRnJlbmNoIGludmVyc2lvbiksIG90aGVyd2lzZSBwcmVmaXggYmVmb3JlIG1vbnRoLCBvdGhlcndpc2UgcHJlZml4T3JGaXJzdFxuICAgIGNvbnN0IG1vbnRoUHJlZml4ID0gcHJlZml4QWZ0ZXIgfHwgcHJlZml4QmVmb3JlTW9udGg7XG5cbiAgICBjb25zdCBkYXlJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoZGF5TmFtZSk7XG4gICAgY29uc3QgaXNGaXJzdCA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwiZmlyc3RcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocHJlZml4T3JGaXJzdCk7XG4gICAgY29uc3QgaXNNb250aCA9IHRoaXMudGMuY29sbGVjdFdvcmRzKCdtb250aCcsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZFN0cik7XG4gICAgaWYgKCFpc01vbnRoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGlzTGFzdCA9ICFpc0ZpcnN0ICYmIHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4T3JGaXJzdCk7XG4gICAgbGV0IHRhcmdldE1vbWVudCA9IG1vbWVudCgpO1xuXG4gICAgaWYgKGlzRmlyc3QpIHtcbiAgICAgIC8vIEZpcnN0IHdlZWtkYXkgb2YgbW9udGhcbiAgICAgIGlmIChtb250aFByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLm5leHQuaGFzKG1vbnRoUHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICdtb250aHMnKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgfSBlbHNlIGlmIChtb250aFByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLmxhc3QuaGFzKG1vbnRoUHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3VidHJhY3QoMSwgJ21vbnRocycpLnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgd2Vla2RheSBpbiB0aGUgdGFyZ2V0IG1vbnRoXG4gICAgICBjb25zdCBmaXJzdERheU9mTW9udGggPSB0YXJnZXRNb21lbnQuY2xvbmUoKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgY29uc3QgZmlyc3RXZWVrZGF5SW5kZXggPSBmaXJzdERheU9mTW9udGguZGF5KCk7XG4gICAgICBjb25zdCBkYXlzVG9BZGQgPSAoZGF5SW5kZXggLSBmaXJzdFdlZWtkYXlJbmRleCArIDcpICUgNztcbiAgICAgIHRhcmdldE1vbWVudCA9IGZpcnN0RGF5T2ZNb250aC5hZGQoZGF5c1RvQWRkLCAnZGF5cycpO1xuICAgIH0gZWxzZSBpZiAoaXNMYXN0KSB7XG4gICAgICAvLyBMYXN0IHdlZWtkYXkgb2YgbW9udGhcbiAgICAgIGlmIChtb250aFByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLm5leHQuaGFzKG1vbnRoUHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICdtb250aHMnKS5lbmRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSBpZiAobW9udGhQcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0Lmhhcyhtb250aFByZWZpeCkpIHtcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN1YnRyYWN0KDEsICdtb250aHMnKS5lbmRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwidGhpc1wiL25vIHByZWZpeCBib3RoIG1lYW4gXCJ0aGlzIG1vbnRoXCJcbiAgICAgICAgdGFyZ2V0TW9tZW50LmVuZE9mKCdtb250aCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBGaW5kIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIHdlZWtkYXkgYnkgZ29pbmcgdG8gZW5kIG9mIG1vbnRoIGFuZCB3b3JraW5nIGJhY2t3YXJkc1xuICAgICAgY29uc3QgbGFzdERheU9mTW9udGggPSB0YXJnZXRNb21lbnQuY2xvbmUoKS5lbmRPZignbW9udGgnKTtcbiAgICAgIGNvbnN0IGxhc3RXZWVrZGF5SW5kZXggPSBsYXN0RGF5T2ZNb250aC5kYXkoKTtcbiAgICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGxhc3RXZWVrZGF5SW5kZXggLSBkYXlJbmRleCArIDcpICUgNztcbiAgICAgIHRhcmdldE1vbWVudCA9IGxhc3REYXlPZk1vbnRoLnN1YnRyYWN0KGRheXNUb1N1YnRyYWN0LCAnZGF5cycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcmVmaXgtYmFzZWQgKG5leHQvdGhpcykgLSBkZWZhdWx0IHRvIGZpcnN0XG4gICAgICBpZiAobW9udGhQcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0Lmhhcyhtb250aFByZWZpeCkpIHtcbiAgICAgICAgdGFyZ2V0TW9tZW50LmFkZCgxLCAnbW9udGhzJykuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwidGhpc1wiL25vIHByZWZpeCBib3RoIG1lYW4gXCJ0aGlzIG1vbnRoXCJcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHdlZWtkYXkgaW4gdGhlIHRhcmdldCBtb250aFxuICAgICAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gdGFyZ2V0TW9tZW50LmNsb25lKCkuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIGNvbnN0IGZpcnN0V2Vla2RheUluZGV4ID0gZmlyc3REYXlPZk1vbnRoLmRheSgpO1xuICAgICAgY29uc3QgZGF5c1RvQWRkID0gKGRheUluZGV4IC0gZmlyc3RXZWVrZGF5SW5kZXggKyA3KSAlIDc7XG4gICAgICB0YXJnZXRNb21lbnQgPSBmaXJzdERheU9mTW9udGguYWRkKGRheXNUb0FkZCwgJ2RheXMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0TW9tZW50LnRvRGF0ZSgpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExFVkVMIDRhOiBcIm5leHQgbW9udGhcIiAvIFwibmV4dCB5ZWFyXCIgc2hvcnRjdXQgKGJlZm9yZSBmYWxsaW5nIHRvIGNocm9uby1ub2RlKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTm90ZTogXCJuZXh0IHdlZWtcIiBpcyBpbnRlbnRpb25hbGx5IE5PVCBoYW5kbGVkIGhlcmUgLS0gaXQncyBsZWZ0IHRvXG4gIC8vIGdldFBhcnNlZERhdGVSYW5nZSgpIHRvIGdlbmVyYXRlIGEgZnVsbCBkYXRlIGxpc3QsIHNvIHRoYXQgY2FzZSBmYWxsc1xuICAvLyB0aHJvdWdoIHRvIHRoZSBjaHJvbm8tbm9kZSBmYWxsYmFjayBpbnN0ZWFkLlxuICBwcml2YXRlIHRyeU5leHRQZXJpb2RTaG9ydGN1dChjbGVhbmVkVGV4dDogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIC8vIFVzZXMgXFxzKiAobm90IFxccyspIHNvIHRoaXMgYWxzbyBtYXRjaGVzIGxhbmd1YWdlcyB3aXRob3V0IHNwYWNlcyBiZXR3ZWVuXG4gICAgLy8gd29yZHMgKGUuZy4gQ2hpbmVzZSBcIuS4i+S4gOWAi+aYn+acn1wiKS4gVGhlIHBlcmlvZCBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIGtub3duXG4gICAgLy8gd2Vlay9tb250aC95ZWFyIHdvcmRzIGRpcmVjdGx5IChub3QgYSBnZW5lcmljIFxcUysvXFx3KyBjYXB0dXJlKTogb3RoZXJ3aXNlIGFcbiAgICAvLyBzaG9ydGVyIHdvcmQgdGhhdCBpcyBhIHByZWZpeCBvZiBhIGxvbmdlciBvbmUgKGUuZy4gRnJlbmNoIFwicHJvY2hhaW5cIiB2c1xuICAgIC8vIFwicHJvY2hhaW5lXCIpIGNhbiBtYXRjaCBmaXJzdCBhbmQgbGVhdmUgdGhlIHJlbWFpbmluZyBsZXR0ZXJzIHRvIGJlXG4gICAgLy8gbWlzLWNhcHR1cmVkIGFzIHRoZSBwZXJpb2QuXG4gICAgY29uc3QgbmV4dFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oQXJyYXkuZnJvbSh0aGlzLnByZWZpeEtleXdvcmRzLm5leHQpKTtcbiAgICBjb25zdCBwZXJpb2RXb3Jkc0FsbCA9IFsnd2VlaycsICdtb250aCcsICd5ZWFyJ10uZmxhdE1hcChrZXkgPT4gdGhpcy50Yy5jb2xsZWN0V29yZHMoa2V5KSk7XG4gICAgY29uc3QgcGVyaW9kUGF0dGVybkFsbCA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihwZXJpb2RXb3Jkc0FsbCk7XG4gICAgY29uc3QgbmV4dERhdGVNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKG5ldyBSZWdFeHAoYCgke25leHRQYXR0ZXJufSlcXFxccyooJHtwZXJpb2RQYXR0ZXJuQWxsfSlgLCAnaScpKTtcbiAgICBpZiAoIW5leHREYXRlTWF0Y2gpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcGVyaW9kID0gbmV4dERhdGVNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGlzTmV4dFdlZWsgPSB0aGlzLnRjLmNvbGxlY3RXb3Jkcygnd2VlaycsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZCk7XG4gICAgaWYgKGlzTmV4dFdlZWspIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHRoaXMudGMuY29sbGVjdFdvcmRzKCdtb250aCcsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoMSwgJ21vbnRocycpLnN0YXJ0T2YoJ21vbnRoJykudG9EYXRlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRjLmNvbGxlY3RXb3JkcygneWVhcicsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoMSwgJ3llYXJzJykuc3RhcnRPZigneWVhcicpLnRvRGF0ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCA0YjogVEhFIFJFU1QgKGNocm9uby1ub2RlIGxpYnJhcnksIGZpbmFsIGZhbGxiYWNrKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSBjaHJvbm9GYWxsYmFjayhzZWxlY3RlZFRleHQ6IHN0cmluZywgd2Vla1N0YXJ0UHJlZmVyZW5jZTogRGF5T2ZXZWVrKTogRGF0ZSB7XG4gICAgaWYgKCF0aGlzLmNocm9ub3MgfHwgdGhpcy5jaHJvbm9zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBEYXRlKCk7XG5cbiAgICAvLyBXZSB1c2UgdGhlIFwiQmVzdCBTY29yZVwiIHRlY2huaXF1ZSB0byBjaG9vc2UgYmV0d2VlbiBFTiBhbmQgRlJcbiAgICBjb25zdCB3ZWVrU3RhcnQgPSB3ZWVrU3RhcnRQcmVmZXJlbmNlID09PSBcImxvY2FsZS1kZWZhdWx0XCIgPyBnZXRMb2NhbGVXZWVrU3RhcnQoKSA6IHdlZWtTdGFydFByZWZlcmVuY2U7XG4gICAgY29uc3QgbG9jYWxlID0geyB3ZWVrU3RhcnQ6IGdldFdlZWtOdW1iZXIod2Vla1N0YXJ0KSB9O1xuICAgIGNvbnN0IHJlZmVyZW5jZURhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgLy8gU3RhbmRhcmQgbGlicmFyeSBjYWxsIHdpdGggZm9yY2VkIGZvcndhcmREYXRlXG4gICAgY29uc3QgY2hyb25vUmVzdWx0ID0gdGhpcy5nZXRQYXJzZWREYXRlUmVzdWx0KHNlbGVjdGVkVGV4dCwgcmVmZXJlbmNlRGF0ZSwge1xuICAgICAgbG9jYWxlLFxuICAgICAgZm9yd2FyZERhdGU6IHRydWVcbiAgICB9IGFzIFBhcnNpbmdPcHRpb24pO1xuICAgIC8vIE5vdGhpbmcgbWF0Y2hlZCBhbnl3aGVyZTogdGhpcyBpcyB0aGUgZmluYWwgZmFsbGJhY2sgbGV2ZWwsIHNvIChwZXJcbiAgICAvLyB0aGlzIG1ldGhvZCdzIGRvY3VtZW50ZWQgY29udHJhY3QpIGZhbGwgYmFjayB0byB0aGUgY3VycmVudCBkYXRlLlxuICAgIHJldHVybiBjaHJvbm9SZXN1bHQgPz8gbmV3IERhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgcmFuZ2Ugc3RyaW5nIGFuZCByZXR1cm5zIGEgcmFuZ2UgcmVzdWx0LlxuICAgKiBcbiAgICogU3VwcG9ydHMgdmFyaW91cyByYW5nZSBleHByZXNzaW9uczpcbiAgICogLSBXZWVrZGF5IHJhbmdlczogXCJmcm9tIE1vbmRheSB0byBGcmlkYXlcIlxuICAgKiAtIFdlZWsgcmFuZ2VzOiBcIm5leHQgd2Vla1wiIChyZXR1cm5zIGFsbCBkYXlzIG9mIG5leHQgd2VlaylcbiAgICogLSBXb3JrcyBpbiBhbGwgZW5hYmxlZCBsYW5ndWFnZXMgd2l0aCBuYXRpdmUgdHJhbnNsYXRpb25zXG4gICAqIFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRUZXh0IC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHJhbmdlIHN0cmluZyAoZS5nLiwgXCJmcm9tIE1vbmRheSB0byBGcmlkYXlcIiwgXCJuZXh0IHdlZWtcIilcbiAgICogQHBhcmFtIHdlZWtTdGFydFByZWZlcmVuY2UgLSBEYXkgb2Ygd2VlayB0byBjb25zaWRlciBhcyB3ZWVrIHN0YXJ0XG4gICAqIEByZXR1cm5zIE5MRFJhbmdlUmVzdWx0IG9iamVjdCB3aXRoIHN0YXJ0L2VuZCBkYXRlcyBhbmQgZGF0ZSBsaXN0LCBvciBudWxsIGlmIG5vdCBhIHJhbmdlXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBhcnNlciA9IG5ldyBOTERQYXJzZXIoWydlbicsICdmciddKTtcbiAgICogY29uc3QgcmFuZ2UgPSBwYXJzZXIuZ2V0UGFyc2VkRGF0ZVJhbmdlKFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCIsIFwibW9uZGF5XCIpO1xuICAgKiBpZiAocmFuZ2UpIHtcbiAgICogICBjb25zb2xlLmxvZyhyYW5nZS5kYXRlTGlzdD8ubGVuZ3RoKTsgLy8gNSAoTW9uZGF5IHRocm91Z2ggRnJpZGF5KVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0UGFyc2VkRGF0ZVJhbmdlKHNlbGVjdGVkVGV4dDogc3RyaW5nLCB3ZWVrU3RhcnRQcmVmZXJlbmNlOiBEYXlPZldlZWspOiBOTERSYW5nZVJlc3VsdCB8IG51bGwge1xuICAgIC8vIENoZWNrIFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCJcbiAgICBjb25zdCByYW5nZU1hdGNoID0gc2VsZWN0ZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhEYXRlUmFuZ2UpO1xuICAgIGlmIChyYW5nZU1hdGNoKSB7XG4gICAgICBjb25zdCBzdGFydERheU5hbWUgPSByYW5nZU1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBlbmREYXlOYW1lID0gcmFuZ2VNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgXG4gICAgICBjb25zdCBtID0gbW9tZW50KCk7XG4gICAgICBjb25zdCBzdGFydERheUluZGV4ID0gdGhpcy5nZXREYXlPZldlZWtJbmRleChzdGFydERheU5hbWUpO1xuICAgICAgY29uc3QgZW5kRGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGVuZERheU5hbWUpO1xuICAgICAgXG4gICAgICAvLyBGaW5kIG5leHQgc3RhcnQgZGF5XG4gICAgICBjb25zdCBzdGFydE1vbWVudCA9IG1vbWVudCgpLmRheShzdGFydERheUluZGV4KTtcbiAgICAgIGlmIChzdGFydE1vbWVudC5pc0JlZm9yZShtLCAnZGF5JykpIHtcbiAgICAgICAgc3RhcnRNb21lbnQuYWRkKDEsICd3ZWVrJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZpbmQgbmV4dCBlbmQgZGF5IChtdXN0IGJlIGFmdGVyIG9yIGVxdWFsIHRvIHN0YXJ0IGRheSlcbiAgICAgIGxldCBlbmRNb21lbnQgPSBtb21lbnQoKS5kYXkoZW5kRGF5SW5kZXgpO1xuICAgICAgLy8gSWYgZW5kIGRheSBpcyBiZWZvcmUgc3RhcnQgZGF5LCB0YWtlIHRoZSBvbmUgZnJvbSBuZXh0IHdlZWtcbiAgICAgIGlmIChlbmRNb21lbnQuaXNCZWZvcmUoc3RhcnRNb21lbnQsICdkYXknKSkge1xuICAgICAgICBlbmRNb21lbnQuYWRkKDEsICd3ZWVrJyk7XG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgZW5kTW9tZW50IGlzIGFsd2F5cyBhZnRlciBvciBlcXVhbCB0byBzdGFydE1vbWVudFxuICAgICAgaWYgKGVuZE1vbWVudC5pc0JlZm9yZShzdGFydE1vbWVudCwgJ2RheScpKSB7XG4gICAgICAgIGVuZE1vbWVudCA9IHN0YXJ0TW9tZW50LmNsb25lKCkuYWRkKDEsICd3ZWVrJykuZGF5KGVuZERheUluZGV4KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgZm9ybWF0ID0gXCJZWVlZLU1NLUREXCI7XG4gICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IHN0YXJ0TW9tZW50LmZvcm1hdChmb3JtYXQpO1xuICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZW5kTW9tZW50LmZvcm1hdChmb3JtYXQpO1xuICAgICAgXG4gICAgICAvLyBHZW5lcmF0ZSBsaXN0IG9mIGFsbCBkYXRlcyBpbiByYW5nZVxuICAgICAgY29uc3QgZGF0ZUxpc3Q6IE1vbWVudFtdID0gW107XG4gICAgICBjb25zdCBjdXJyZW50TW9tZW50ID0gc3RhcnRNb21lbnQuY2xvbmUoKTtcbiAgICAgIHdoaWxlIChjdXJyZW50TW9tZW50LmlzU2FtZU9yQmVmb3JlKGVuZE1vbWVudCwgJ2RheScpKSB7XG4gICAgICAgIGRhdGVMaXN0LnB1c2goY3VycmVudE1vbWVudC5jbG9uZSgpKTtcbiAgICAgICAgY3VycmVudE1vbWVudC5hZGQoMSwgJ2RheScpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCByZXN1bHQ6IE5MRFJhbmdlUmVzdWx0ID0ge1xuICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IGAke3N0YXJ0Rm9ybWF0dGVkfSB0byAke2VuZEZvcm1hdHRlZH1gLFxuICAgICAgICBzdGFydERhdGU6IHN0YXJ0TW9tZW50LnRvRGF0ZSgpLFxuICAgICAgICBlbmREYXRlOiBlbmRNb21lbnQudG9EYXRlKCksXG4gICAgICAgIHN0YXJ0TW9tZW50OiBzdGFydE1vbWVudC5jbG9uZSgpLFxuICAgICAgICBlbmRNb21lbnQ6IGVuZE1vbWVudC5jbG9uZSgpLFxuICAgICAgICBpc1JhbmdlOiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICBkYXRlTGlzdDogZGF0ZUxpc3QsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgXCJuZXh0IHdlZWtcIiBhcyByYW5nZSAoYm90aCBcIm5leHQgd2Vla1wiIGFuZCBcIndlZWsgbmV4dFwiIGZvciBsYW5ndWFnZXMgbGlrZSBGcmVuY2gpXG4gICAgLy8gVXNlcyBcXHMqIChub3QgXFxzKykgc28gdGhpcyBhbHNvIG1hdGNoZXMgbGFuZ3VhZ2VzIHdpdGhvdXQgc3BhY2VzIGJldHdlZW5cbiAgICAvLyB3b3JkcyAoZS5nLiBDaGluZXNlIFwi5LiL5LiA5YCL5pif5pyfXCIpLiBUaGUgcGVyaW9kIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUga25vd25cbiAgICAvLyBcIndlZWtcIiB3b3JkcyBkaXJlY3RseSAobm90IGEgZ2VuZXJpYyBcXFMrL1xcdysgY2FwdHVyZSk6IG90aGVyd2lzZSBhIHNob3J0ZXJcbiAgICAvLyB3b3JkIHRoYXQgaXMgYSBwcmVmaXggb2YgYSBsb25nZXIgb25lIChlLmcuIEZyZW5jaCBcInByb2NoYWluXCIgdnMgXCJwcm9jaGFpbmVcIilcbiAgICAvLyBjYW4gbWF0Y2ggZmlyc3QgYW5kIGxlYXZlIHRoZSByZW1haW5pbmcgbGV0dGVycyB0byBiZSBtaXMtY2FwdHVyZWQgYXMgdGhlIHBlcmlvZC5cbiAgICBjb25zdCBuZXh0UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihBcnJheS5mcm9tKHRoaXMucHJlZml4S2V5d29yZHMubmV4dCkpO1xuICAgIGNvbnN0IHdlZWtQYXR0ZXJuQWxsID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uRm9yKCd3ZWVrJyk7XG4gICAgLy8gRmlyc3QgdHJ5IFwibmV4dCB3ZWVrXCIgcGF0dGVyblxuICAgIGxldCBuZXh0V2Vla01hdGNoID0gc2VsZWN0ZWRUZXh0Lm1hdGNoKG5ldyBSZWdFeHAoYCgke25leHRQYXR0ZXJufSlcXFxccyooJHt3ZWVrUGF0dGVybkFsbH0pYCwgJ2knKSk7XG4gICAgbGV0IHBlcmlvZEluZGV4ID0gMjsgLy8gSW5kZXggb2YgcGVyaW9kIGluIG1hdGNoIGFycmF5XG4gICAgaWYgKCFuZXh0V2Vla01hdGNoKSB7XG4gICAgICAvLyBUcnkgcmV2ZXJzZSBwYXR0ZXJuIFwid2VlayBuZXh0XCIgZm9yIGxhbmd1YWdlcyBsaWtlIEZyZW5jaFxuICAgICAgbmV4dFdlZWtNYXRjaCA9IHNlbGVjdGVkVGV4dC5tYXRjaChuZXcgUmVnRXhwKGAoJHt3ZWVrUGF0dGVybkFsbH0pXFxcXHMqKCR7bmV4dFBhdHRlcm59KWAsICdpJykpO1xuICAgICAgaWYgKG5leHRXZWVrTWF0Y2gpIHtcbiAgICAgICAgcGVyaW9kSW5kZXggPSAxOyAvLyBQZXJpb2QgaXMgbm93IGF0IGluZGV4IDFcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5leHRXZWVrTWF0Y2gpIHtcbiAgICAgIGNvbnN0IHBlcmlvZCA9IG5leHRXZWVrTWF0Y2hbcGVyaW9kSW5kZXhdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ3dlZWsnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyhwZXJpb2QpKSB7XG4gICAgICAgIC8vIE5leHQgd2VlayAtPiByZXR1cm4gZnJvbSBNb25kYXkgdG8gU3VuZGF5IG9mIG5leHQgd2Vla1xuICAgICAgICBjb25zdCB3ZWVrU3RhcnQgPSB3ZWVrU3RhcnRQcmVmZXJlbmNlID09PSBcImxvY2FsZS1kZWZhdWx0XCIgPyBnZXRMb2NhbGVXZWVrU3RhcnQoKSA6IHdlZWtTdGFydFByZWZlcmVuY2U7XG4gICAgICAgIGNvbnN0IHdlZWtTdGFydEluZGV4ID0gdGhpcy5nZXREYXlPZldlZWtJbmRleChTdHJpbmcod2Vla1N0YXJ0KSk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQoKS5hZGQoMSwgJ3dlZWtzJykuZGF5KHdlZWtTdGFydEluZGV4KTtcbiAgICAgICAgY29uc3QgZW5kTW9tZW50ID0gc3RhcnRNb21lbnQuY2xvbmUoKS5hZGQoNiwgJ2RheXMnKTtcblxuICAgICAgICBjb25zdCBmb3JtYXQgPSBcIllZWVktTU0tRERcIjtcbiAgICAgICAgY29uc3Qgc3RhcnRGb3JtYXR0ZWQgPSBzdGFydE1vbWVudC5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZW5kTW9tZW50LmZvcm1hdChmb3JtYXQpO1xuXG4gICAgICAgIC8vIEdlbmVyYXRlIGxpc3Qgb2YgYWxsIGRhdGVzIGluIHJhbmdlXG4gICAgICAgIGNvbnN0IGRhdGVMaXN0OiBNb21lbnRbXSA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50TW9tZW50ID0gc3RhcnRNb21lbnQuY2xvbmUoKTtcbiAgICAgICAgd2hpbGUgKGN1cnJlbnRNb21lbnQuaXNTYW1lT3JCZWZvcmUoZW5kTW9tZW50LCAnZGF5JykpIHtcbiAgICAgICAgICBkYXRlTGlzdC5wdXNoKGN1cnJlbnRNb21lbnQuY2xvbmUoKSk7XG4gICAgICAgICAgY3VycmVudE1vbWVudC5hZGQoMSwgJ2RheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBOTERSYW5nZVJlc3VsdCA9IHtcbiAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IGAke3N0YXJ0Rm9ybWF0dGVkfSB0byAke2VuZEZvcm1hdHRlZH1gLFxuICAgICAgICAgIHN0YXJ0RGF0ZTogc3RhcnRNb21lbnQudG9EYXRlKCksXG4gICAgICAgICAgZW5kRGF0ZTogZW5kTW9tZW50LnRvRGF0ZSgpLFxuICAgICAgICAgIHN0YXJ0TW9tZW50OiBzdGFydE1vbWVudC5jbG9uZSgpLFxuICAgICAgICAgIGVuZE1vbWVudDogZW5kTW9tZW50LmNsb25lKCksXG4gICAgICAgICAgaXNSYW5nZTogdHJ1ZSBhcyBjb25zdCxcbiAgICAgICAgICBkYXRlTGlzdDogZGF0ZUxpc3QsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyAtLS0gVVRJTElUWSBGVU5DVElPTjogV0hPIEhBUyBUSEUgQkVTVCBTQ09SRT8gLS0tXG4gIC8vIFJldHVybnMgbnVsbCAocmF0aGVyIHRoYW4gYSBcIm5vd1wiIHBsYWNlaG9sZGVyKSB3aGVuIGNocm9uby1ub2RlIGZvdW5kIG5vXG4gIC8vIG1hdGNoLCBzbyBjYWxsZXJzIGNhbiB0ZWxsIFwibm90aGluZyBwYXJzZWRcIiBhcGFydCBmcm9tIFwicGFyc2VkIHRvIHJpZ2h0XG4gIC8vIG5vd1wiIGFuZCBmYWxsIGJhY2sgYWNjb3JkaW5nbHkgaW5zdGVhZCBvZiBzaWxlbnRseSBhY2NlcHRpbmcgYSBib2d1c1xuICAvLyBjdXJyZW50LWRhdGUvdGltZSByZXN1bHQuXG4gIGdldFBhcnNlZERhdGVSZXN1bHQodGV4dDogc3RyaW5nLCByZWZlcmVuY2VEYXRlPzogRGF0ZSwgb3B0aW9uPzogUGFyc2luZ09wdGlvbik6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY2hyb25vcyB8fCB0aGlzLmNocm9ub3MubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgYmVzdFJlc3VsdDogUGFyc2VkUmVzdWx0IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGJlc3RTY29yZSA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaHJvbm9zKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYy5wYXJzZSh0ZXh0LCByZWZlcmVuY2VEYXRlLCBvcHRpb24pO1xuICAgICAgICAvLyBjaHJvbm8gY2FuIHJldHVybiBzZXZlcmFsIGRpc2pvaW50IG1hdGNoZXMgZm9yIG9uZSBzdHJpbmcgKGUuZy5cbiAgICAgICAgLy8gXCJ0b2RheSBpbiAzIG1pbnV0ZXNcIiAtPiBbXCJ0b2RheVwiLCBcImluIDMgbWludXRlc1wiXSwgcGFyc2VkIGFzIHR3b1xuICAgICAgICAvLyBpbmRlcGVuZGVudCBjYW5kaWRhdGVzLCBuZWl0aGVyIGNvbnRhaW5pbmcgdGhlIG90aGVyKS4gQ29tcGFyaW5nXG4gICAgICAgIC8vIGV2ZXJ5IGNhbmRpZGF0ZSdzIHNjb3JlIC0tIG5vdCBqdXN0IHJlc3VsdHNbMF0gLS0gbWVhbnMgdGhlIG1vcmVcbiAgICAgICAgLy8gc3BlY2lmaWMvaW5mb3JtYXRpdmUgb25lIHdpbnMgaW5zdGVhZCBvZiBhbHdheXMgcGlja2luZyB3aGljaGV2ZXJcbiAgICAgICAgLy8gY2hyb25vIGhhcHBlbmVkIHRvIGxpc3QgZmlyc3QsIHdoaWNoIHNpbGVudGx5IGRpc2NhcmRlZCBcImluIDNcbiAgICAgICAgLy8gbWludXRlc1wiIGFuZCByZXR1cm5lZCB0aGUgY3VycmVudCB0aW1lIHVubW9kaWZpZWQuXG4gICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgcmVzdWx0cyB8fCBbXSkge1xuICAgICAgICAgIGlmIChtYXRjaC50ZXh0Lmxlbmd0aCA+IGJlc3RTY29yZSkge1xuICAgICAgICAgICAgYmVzdFNjb3JlID0gbWF0Y2gudGV4dC5sZW5ndGg7XG4gICAgICAgICAgICBiZXN0UmVzdWx0ID0gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdDaHJvbm8gcGFyc2luZyBlcnJvciBpbiBnZXRQYXJzZWREYXRlUmVzdWx0Jywge1xuICAgICAgICAgIHRleHQsXG4gICAgICAgICAgZXJyb3I6IGRlc2NyaWJlRXJyb3IoZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVzdFJlc3VsdCA/IGJlc3RSZXN1bHQuc3RhcnQuZGF0ZSgpIDogbnVsbDtcbiAgfVxuXG4gIGdldFBhcnNlZFJlc3VsdCh0ZXh0OiBzdHJpbmcpOiBQYXJzZWRSZXN1bHRbXSB7XG4gICAgaWYgKCF0aGlzLmNocm9ub3MpIHJldHVybiBbXTtcbiAgICBsZXQgYmVzdFJlc3VsdHM6IFBhcnNlZFJlc3VsdFtdID0gW107XG4gICAgbGV0IGJlc3RTY29yZSA9IDA7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hyb25vcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGMucGFyc2UodGV4dCk7XG4gICAgICAgIGlmIChyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChyZXN1bHRzWzBdLnRleHQubGVuZ3RoID4gYmVzdFNjb3JlKSB7XG4gICAgICAgICAgICBiZXN0U2NvcmUgPSByZXN1bHRzWzBdLnRleHQubGVuZ3RoO1xuICAgICAgICAgICAgYmVzdFJlc3VsdHMgPSByZXN1bHRzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybignQ2hyb25vIHBhcnNpbmcgZXJyb3IgaW4gZ2V0UGFyc2VkUmVzdWx0Jywge1xuICAgICAgICAgIHRleHQsXG4gICAgICAgICAgZXJyb3I6IGRlc2NyaWJlRXJyb3IoZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVzdFJlc3VsdHM7XG4gIH1cblxuICAvLyAtLS0gVElNRSBERVRFQ1RJT04gKEZPUiBESVNQTEFZKSAtLS1cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHRleHQgc3RyaW5nIGNvbnRhaW5zIGEgdGltZSBjb21wb25lbnQuXG4gICAqIFxuICAgKiBEZXRlY3RzIHZhcmlvdXMgdGltZSBleHByZXNzaW9uczpcbiAgICogLSBFeHBsaWNpdCB0aW1lczogXCJhdCAzcG1cIiwgXCJhdCAxNTowMFwiLCBcIsOgIDE1aFwiXG4gICAqIC0gVGltZSBpbiByZWxhdGl2ZSBleHByZXNzaW9uczogXCJpbiAyIGhvdXJzXCIsIFwiZGFucyAyIGhldXJlc1wiXG4gICAqIC0gV29ya3Mgd2l0aCBhbGwgZW5hYmxlZCBsYW5ndWFnZXNcbiAgICogXG4gICAqIEBwYXJhbSB0ZXh0IC0gVGV4dCBzdHJpbmcgdG8gY2hlY2sgZm9yIHRpbWUgY29tcG9uZW50XG4gICAqIEByZXR1cm5zIHRydWUgaWYgYSB0aW1lIGNvbXBvbmVudCBpcyBkZXRlY3RlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBhcnNlciA9IG5ldyBOTERQYXJzZXIoWydlbicsICdmciddKTtcbiAgICogcGFyc2VyLmhhc1RpbWVDb21wb25lbnQoXCJuZXh0IE1vbmRheSBhdCAzcG1cIik7IC8vIHRydWVcbiAgICogcGFyc2VyLmhhc1RpbWVDb21wb25lbnQoXCJ0b21vcnJvd1wiKTsgLy8gZmFsc2VcbiAgICogcGFyc2VyLmhhc1RpbWVDb21wb25lbnQoXCJpbiAyIGhvdXJzXCIpOyAvLyB0cnVlXG4gICAqIGBgYFxuICAgKi9cbiAgaGFzVGltZUNvbXBvbmVudCh0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50aW1lRGV0ZWN0b3IuaGFzVGltZUNvbXBvbmVudCh0ZXh0KTtcbiAgfVxuXG4gIC8vIC0tLSBDQUNIRSBTVEFUSVNUSUNTIChGT1IgTU9OSVRPUklORykgLS0tXG4gIC8qKlxuICAgKiBSZXRvdXJuZSBsZXMgc3RhdGlzdGlxdWVzIGR1IGNhY2hlIGRlIHBhcnNpbmdcbiAgICovXG4gIGdldENhY2hlU3RhdHMoKTogeyBzaXplOiBudW1iZXI7IG1heFNpemU6IG51bWJlciB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2l6ZTogdGhpcy5jYWNoZS5zaXplLFxuICAgICAgbWF4U2l6ZTogdGhpcy5jYWNoZS5tYXhTaXplTGltaXQsXG4gICAgfTtcbiAgfVxufSIsImltcG9ydCB7XG4gIEFwcCxcbiAgRWRpdG9yLFxuICBFZGl0b3JQb3NpdGlvbixcbiAgRWRpdG9yU3VnZ2VzdCxcbiAgRWRpdG9yU3VnZ2VzdENvbnRleHQsXG4gIEVkaXRvclN1Z2dlc3RUcmlnZ2VySW5mbyxcbiAgVEZpbGUsXG59IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHR5cGUgTmF0dXJhbExhbmd1YWdlRGF0ZXMgZnJvbSBcIi4uL21haW5cIjtcbmltcG9ydCB0IGZyb20gXCIuLi9sYW5nL2hlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVNYXJrZG93bkxpbmssIHNob3VsZE9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZSwgZ2V0QWN0aXZlRWRpdG9yIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2VyXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuLi93aW5kb3ctbW9tZW50XCI7XG5cbmZ1bmN0aW9uIGVzY2FwZVJlZ2V4KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xufVxuXG4vLyBPcHRpbWFsIFN0cmluZyBBbGlnbm1lbnQgKE9TQSkgZWRpdCBkaXN0YW5jZTogbGlrZSBMZXZlbnNodGVpbiwgYnV0IGFsc29cbi8vIHRyZWF0cyBzd2FwcGluZyB0d28gYWRqYWNlbnQgY2hhcmFjdGVycyBhcyBhIHNpbmdsZSBlZGl0IChlLmcuIFwiaGVpclwiIHZzXG4vLyBcImhpZXJcIiBpcyBkaXN0YW5jZSAxLCBub3QgMikgLS0gYW4gYWRqYWNlbnQtbGV0dGVyIHRyYW5zcG9zaXRpb24gaXMgb25lIG9mXG4vLyB0aGUgbW9zdCBjb21tb24gdHlwaW5nIG1pc3Rha2VzLCBhbmQgcGxhaW4gTGV2ZW5zaHRlaW4gd291bGQgb3RoZXJ3aXNlXG4vLyBjb3VudCBpdCBhcyB0d28gc3Vic3RpdHV0aW9ucyBhbmQgcHVzaCBpdCBwYXN0IHRoZSB0aHJlc2hvbGQgaW5cbi8vIGZ1enp5TWF0Y2hlc1F1ZXJ5KCkgYmVsb3cuIFNwYWNlIGlzIGtlcHQgdG8gdGhyZWUgcm9sbGluZyByb3dzIG9mIGxlbmd0aFxuLy8gYi5sZW5ndGggKyAxIChpbnN0ZWFkIG9mIGEgZnVsbCAoYS5sZW5ndGgrMSkgeCAoYi5sZW5ndGgrMSkgdGFibGUpIHNpbmNlXG4vLyB0aGlzIHJ1bnMgb24gZXZlcnkga2V5c3Ryb2tlIGFnYWluc3QgZXZlcnkgY2FuZGlkYXRlLlxuZnVuY3Rpb24gZWRpdERpc3RhbmNlKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgbiA9IGIubGVuZ3RoO1xuICBsZXQgdHdvUm93c0FnbyA9IG5ldyBBcnJheTxudW1iZXI+KG4gKyAxKS5maWxsKDApO1xuICBsZXQgcHJldlJvdyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IG4gKyAxIH0sIChfLCBqKSA9PiBqKTtcbiAgbGV0IGN1cnJlbnRSb3cgPSBuZXcgQXJyYXk8bnVtYmVyPihuICsgMSkuZmlsbCgwKTtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8PSBhLmxlbmd0aDsgaSsrKSB7XG4gICAgY3VycmVudFJvd1swXSA9IGk7XG4gICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XG4gICAgICBjb25zdCBjb3N0ID0gYVtpIC0gMV0gPT09IGJbaiAtIDFdID8gMCA6IDE7XG4gICAgICBsZXQgdmFsdWUgPSBNYXRoLm1pbihcbiAgICAgICAgcHJldlJvd1tqXSArIDEsIC8vIGRlbGV0aW9uXG4gICAgICAgIGN1cnJlbnRSb3dbaiAtIDFdICsgMSwgLy8gaW5zZXJ0aW9uXG4gICAgICAgIHByZXZSb3dbaiAtIDFdICsgY29zdCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICk7XG4gICAgICBpZiAoaSA+IDEgJiYgaiA+IDEgJiYgYVtpIC0gMV0gPT09IGJbaiAtIDJdICYmIGFbaSAtIDJdID09PSBiW2ogLSAxXSkge1xuICAgICAgICB2YWx1ZSA9IE1hdGgubWluKHZhbHVlLCB0d29Sb3dzQWdvW2ogLSAyXSArIDEpOyAvLyB0cmFuc3Bvc2l0aW9uXG4gICAgICB9XG4gICAgICBjdXJyZW50Um93W2pdID0gdmFsdWU7XG4gICAgfVxuICAgIFt0d29Sb3dzQWdvLCBwcmV2Um93LCBjdXJyZW50Um93XSA9IFtwcmV2Um93LCBjdXJyZW50Um93LCB0d29Sb3dzQWdvXTtcbiAgfVxuICByZXR1cm4gcHJldlJvd1tuXTtcbn1cblxuLy8gUHJlZml4IG1hdGNoIGlmIHBvc3NpYmxlIChmYXN0LCBleGFjdCwgYW5kIHRoZSBvbmx5IGJlaGF2aW9yIGZvciBxdWVyaWVzXG4vLyB0b28gc2hvcnQgdG8gZnV6enktbWF0Y2ggcmVsaWFibHkpOyBvdGhlcndpc2UgdG9sZXJhdGUgYSBzbWFsbCBlZGl0XG4vLyBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBxdWVyeSBhbmQgY2FuZGlkYXRlIHByZWZpeGVzIG9mIHNpbWlsYXIgbGVuZ3RoLCBzbyBhXG4vLyBzaW5nbGUgd3JvbmcvbWlzc2luZy90cmFuc3Bvc2VkIGxldHRlciBuZWFyIHRoZSBzdGFydCBvZiB0aGUgcXVlcnkgc3RpbGxcbi8vIHN1cmZhY2VzIHRoZSBpbnRlbmRlZCBzdWdnZXN0aW9uIGluc3RlYWQgb2Ygbm9uZSBhdCBhbGwuIENoZWNrcyBhIHdpbmRvd1xuLy8gb2YgcHJlZml4IGxlbmd0aHMgYXJvdW5kIHRoZSBxdWVyeSdzIG93biBsZW5ndGggKHF1ZXJ5Lmxlbmd0aCDCsSB0aHJlc2hvbGQpXG4vLyByYXRoZXIgdGhhbiBhIHNpbmdsZSBmaXhlZC1sZW5ndGggc2xpY2UgLS0gY29tcGFyaW5nIGFnYWluc3QgYSBwcmVmaXhcbi8vIHRoYXQncyBmb3JjZWQgdG8gYmUgbG9uZ2VyIHRoYW4gdGhlIHF1ZXJ5IGJ5IG1vcmUgdGhhbiB0aGUgdGhyZXNob2xkIHdvdWxkXG4vLyBvdGhlcndpc2UgbWFrZSB0aGUgZWRpdCBkaXN0YW5jZSBhdCBsZWFzdCB0aGF0IGxlbmd0aCBkaWZmZXJlbmNlLCB3aGljaFxuLy8gY2FuIGV4Y2VlZCB0aGUgdGhyZXNob2xkIGV2ZW4gZm9yIGFuIGV4YWN0LXByZWZpeCBtYXRjaCAoZS5nLiBcInRvbXVyXCJcbi8vIGFnYWluc3QgYSBmaXhlZCA3LWNoYXJhY3RlciBzbGljZSBvZiBcInRvbW9ycm93XCIgaXMgYWxyZWFkeSAyIGVkaXRzIGF3YXlcbi8vIGJlZm9yZSBhY2NvdW50aW5nIGZvciB0aGUgYWN0dWFsIHR5cG8pLiBPbmx5IHVzZWQgZm9yIHNob3J0LCBmaXhlZFxuLy8gY2FuZGlkYXRlIGxpc3RzICh0b2RheS90b21vcnJvdywgd2Vla2RheXMsIGhpc3RvcnkvY29udGV4dCkgLS0gdGhlXG4vLyBtdWx0aS1zdGFnZSBwcm9ncmVzc2l2ZS10eXBpbmcgc3VnZ2VzdGlvbiBnZW5lcmF0b3JzIGVsc2V3aGVyZSBpbiB0aGlzXG4vLyBmaWxlIGtlZXAgc3RyaWN0IHByZWZpeCBtYXRjaGluZywgc2luY2UgZnV6enkgbWF0Y2hpbmcgaW50ZXJhY3RzXG4vLyB1bnByZWRpY3RhYmx5IHdpdGggdGhlaXIgcGFydGlhbC1jb21wbGV0aW9uIGxvZ2ljLlxuZnVuY3Rpb24gZnV6enlNYXRjaGVzUXVlcnkoY2FuZGlkYXRlOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgYyA9IGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBxID0gcXVlcnkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCFxIHx8IGMuc3RhcnRzV2l0aChxKSkgcmV0dXJuIHRydWU7XG4gIGlmIChxLmxlbmd0aCA8PSAyKSByZXR1cm4gZmFsc2U7IC8vIHRvbyBzaG9ydCB0byBmdXp6eS1tYXRjaCB3aXRob3V0IG5vaXNlXG4gIGNvbnN0IHRocmVzaG9sZCA9IHEubGVuZ3RoIDw9IDUgPyAxIDogMjtcbiAgY29uc3QgbWluTGVuID0gTWF0aC5tYXgoMSwgcS5sZW5ndGggLSB0aHJlc2hvbGQpO1xuICBjb25zdCBtYXhMZW4gPSBNYXRoLm1pbihjLmxlbmd0aCwgcS5sZW5ndGggKyB0aHJlc2hvbGQpO1xuICBmb3IgKGxldCBsZW4gPSBtaW5MZW47IGxlbiA8PSBtYXhMZW47IGxlbisrKSB7XG4gICAgaWYgKGVkaXREaXN0YW5jZShjLnNsaWNlKDAsIGxlbiksIHEpIDw9IHRocmVzaG9sZCkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRlU3VnZ2VzdCBleHRlbmRzIEVkaXRvclN1Z2dlc3Q8c3RyaW5nPiB7XG4gIHByaXZhdGUgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcztcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcykge1xuICAgIHN1cGVyKGFwcCk7XG4gICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cbiAgICAvLyBUeXBlIGFzc2VydGlvbiBuZWVkZWQ6IE9ic2lkaWFuJ3MgRWRpdG9yU3VnZ2VzdCBzY29wZSBkb2Vzbid0IGV4cG9zZSByZWdpc3RlciBtZXRob2QgaW4gdHlwZXMsXG4gICAgLy8gYnV0IGl0IGV4aXN0cyBhdCBydW50aW1lLiBUaGlzIGFsbG93cyB1cyB0byByZWdpc3RlciBjdXN0b20ga2V5Ym9hcmQgc2hvcnRjdXRzLlxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zY29wZSBhcyB0eXBlb2YgdGhpcy5zY29wZSAmIHtcbiAgICAgIHJlZ2lzdGVyOiAobW9kaWZpZXJzOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiBib29sZWFuKSA9PiB2b2lkO1xuICAgIH07XG4gICAgc2NvcGUucmVnaXN0ZXIoW1wiU2hpZnRcIl0sIFwiRW50ZXJcIiwgKGV2dDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgLy8gVHlwZSBhc3NlcnRpb24gbmVlZGVkOiBFZGl0b3JTdWdnZXN0J3MgaW50ZXJuYWwgc3VnZ2VzdGlvbnMgQVBJIGlzIG5vdCBmdWxseSB0eXBlZC5cbiAgICAgIC8vIFRoaXMgYWxsb3dzIGFjY2VzcyB0byB1c2VTZWxlY3RlZEl0ZW0gbWV0aG9kIHdoaWNoIGV4aXN0cyBhdCBydW50aW1lIGZvciBTaGlmdCtFbnRlciBmdW5jdGlvbmFsaXR5LlxuICAgICAgY29uc3QgZWRpdG9yU3VnZ2VzdCA9IHRoaXMgYXMgdW5rbm93biBhcyB7XG4gICAgICAgIHN1Z2dlc3Rpb25zOiB7IHVzZVNlbGVjdGVkSXRlbTogKGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCB9O1xuICAgICAgfTtcbiAgICAgIGVkaXRvclN1Z2dlc3Quc3VnZ2VzdGlvbnMudXNlU2VsZWN0ZWRJdGVtKGV2dCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b3N1Z2dlc3RUb2dnbGVMaW5rKSB7XG4gICAgICB0aGlzLnNldEluc3RydWN0aW9ucyhbeyBjb21tYW5kOiBcIlNoaWZ0XCIsIHB1cnBvc2U6IFwiS2VlcCB0ZXh0IGFzIGFsaWFzXCIgfV0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFN1Z2dlc3Rpb25zKGNvbnRleHQ6IEVkaXRvclN1Z2dlc3RDb250ZXh0KTogc3RyaW5nW10ge1xuICAgIC8vIGhhbmRsZSBubyBtYXRjaGVzXG4gICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSB0aGlzLmdldERhdGVTdWdnZXN0aW9ucyhjb250ZXh0KTtcbiAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID8gc3VnZ2VzdGlvbnMgOiBbIGNvbnRleHQucXVlcnkgXTtcbiAgfVxuXG4gIGdldERhdGVTdWdnZXN0aW9ucyhjb250ZXh0OiBFZGl0b3JTdWdnZXN0Q29udGV4dCk6IHN0cmluZ1tdIHtcbiAgICAvLyBSw6ljdXDDqXJlciBsZXMgc3VnZ2VzdGlvbnMgc3RhbmRhcmRcbiAgICBjb25zdCBzdGFuZGFyZFN1Z2dlc3Rpb25zID0gdGhpcy51bmlxdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzLmZsYXRNYXAoXG4gICAgICBsYW5ndWFnZSA9PiB7XG4gICAgICAgIGxldCBzdWdnZXN0aW9ucyA9IHRoaXMuZ2V0VGltZVN1Z2dlc3Rpb25zKGNvbnRleHQucXVlcnksIGxhbmd1YWdlKTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb25zKVxuICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9ucztcbiAgICAgICAgXG4gICAgICAgIHN1Z2dlc3Rpb25zID0gdGhpcy5nZXRJbW1lZGlhdGVTdWdnZXN0aW9ucyhjb250ZXh0LnF1ZXJ5LCBsYW5ndWFnZSk7XG4gICAgICAgIGlmIChzdWdnZXN0aW9ucylcbiAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbnM7XG5cbiAgICAgICAgc3VnZ2VzdGlvbnMgPSB0aGlzLmdldFJlbGF0aXZlU3VnZ2VzdGlvbnMoY29udGV4dC5xdWVyeSwgbGFuZ3VhZ2UpO1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zO1xuXG4gICAgICAgIHN1Z2dlc3Rpb25zID0gdGhpcy5nZXRXZWVrZGF5U3VnZ2VzdGlvbnMoY29udGV4dC5xdWVyeSwgbGFuZ3VhZ2UpO1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRTdWdnZXN0aW9ucyhjb250ZXh0LnF1ZXJ5LCBsYW5ndWFnZSk7XG4gICAgICB9XG4gICAgKSk7XG5cbiAgICAvLyBTaSBsZXMgc3VnZ2VzdGlvbnMgaW50ZWxsaWdlbnRlcyBzb250IGTDqXNhY3RpdsOpZXMsIHJldG91cm5lciBsZXMgc3VnZ2VzdGlvbnMgc3RhbmRhcmRcbiAgICBpZiAoIXRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZVNtYXJ0U3VnZ2VzdGlvbnMpIHtcbiAgICAgIHJldHVybiBzdGFuZGFyZFN1Z2dlc3Rpb25zO1xuICAgIH1cblxuICAgIC8vIFLDqWN1cMOpcmVyIGxlcyBzdWdnZXN0aW9ucyBpbnRlbGxpZ2VudGVzIChoaXN0b3JpcXVlICsgY29udGV4dGUpXG4gICAgY29uc3Qgc21hcnRTdWdnZXN0aW9ucyA9IHRoaXMuZ2V0U21hcnRTdWdnZXN0aW9ucyhjb250ZXh0LCBzdGFuZGFyZFN1Z2dlc3Rpb25zKTtcblxuICAgIC8vIEZ1c2lvbm5lciA6IHN1Z2dlc3Rpb25zIGludGVsbGlnZW50ZXMgZW4gcHJpb3JpdMOpLCBwdWlzIHN1Z2dlc3Rpb25zIHN0YW5kYXJkXG4gICAgY29uc3QgbWVyZ2VkID0gWy4uLnNtYXJ0U3VnZ2VzdGlvbnNdO1xuICAgIGZvciAoY29uc3Qgc3VnZ2VzdGlvbiBvZiBzdGFuZGFyZFN1Z2dlc3Rpb25zKSB7XG4gICAgICBpZiAoIW1lcmdlZC5pbmNsdWRlcyhzdWdnZXN0aW9uKSkge1xuICAgICAgICBtZXJnZWQucHVzaChzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWN1cMOocmUgbGVzIHN1Z2dlc3Rpb25zIGludGVsbGlnZW50ZXMgYmFzw6llcyBzdXIgbCdoaXN0b3JpcXVlIGV0IGxlIGNvbnRleHRlXG4gICAqL1xuICBwcml2YXRlIGdldFNtYXJ0U3VnZ2VzdGlvbnMoY29udGV4dDogRWRpdG9yU3VnZ2VzdENvbnRleHQsIF9zdGFuZGFyZFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzbWFydFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHF1ZXJ5ID0gY29udGV4dC5xdWVyeS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gU3VnZ2VzdGlvbnMgYmFzw6llcyBzdXIgbCdoaXN0b3JpcXVlXG4gICAgaWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUhpc3RvcnlTdWdnZXN0aW9ucyAmJiB0aGlzLnBsdWdpbi5oaXN0b3J5TWFuYWdlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGlzdG9yeVN1Z2dlc3Rpb25zID0gdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIuZ2V0VG9wU3VnZ2VzdGlvbnNTeW5jKDE1KTtcbiAgICAgICAgZm9yIChjb25zdCBzdWdnZXN0aW9uIG9mIGhpc3RvcnlTdWdnZXN0aW9ucykge1xuICAgICAgICAgIC8vIFbDqXJpZmllciBxdWUgbGEgc3VnZ2VzdGlvbiBjb3JyZXNwb25kIMOgIGxhIHJlcXXDqnRlICh0b2zDqHJlIHVuZSBwZXRpdGUgZmF1dGUgZGUgZnJhcHBlKVxuICAgICAgICAgIGlmIChmdXp6eU1hdGNoZXNRdWVyeShzdWdnZXN0aW9uLCBxdWVyeSkgJiYgIXNtYXJ0U3VnZ2VzdGlvbnMuaW5jbHVkZXMoc3VnZ2VzdGlvbikpIHtcbiAgICAgICAgICAgIHNtYXJ0U3VnZ2VzdGlvbnMucHVzaChzdWdnZXN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmVyIGxlcyBlcnJldXJzIHNpbGVuY2lldXNlbWVudFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1Z2dlc3Rpb25zIGJhc8OpZXMgc3VyIGxlIGNvbnRleHRlXG4gICAgaWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUNvbnRleHRTdWdnZXN0aW9ucyAmJiB0aGlzLnBsdWdpbi5jb250ZXh0QW5hbHl6ZXIgJiYgY29udGV4dC5lZGl0b3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRJbmZvID0gdGhpcy5wbHVnaW4uY29udGV4dEFuYWx5emVyLmFuYWx5emVDb250ZXh0U3luYyhcbiAgICAgICAgICBjb250ZXh0LmVkaXRvcixcbiAgICAgICAgICBjb250ZXh0LnN0YXJ0LmxpbmVcbiAgICAgICAgKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEFqb3V0ZXIgbGVzIGRhdGVzIHRyb3V2w6llcyBkYW5zIGxlIGNvbnRleHRlICh0b2zDqHJlIHVuZSBwZXRpdGUgZmF1dGUgZGUgZnJhcHBlKVxuICAgICAgICBmb3IgKGNvbnN0IGRhdGVTdHIgb2YgY29udGV4dEluZm8uZGF0ZXNJbkNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoZnV6enlNYXRjaGVzUXVlcnkoZGF0ZVN0ciwgcXVlcnkpICYmICFzbWFydFN1Z2dlc3Rpb25zLmluY2x1ZGVzKGRhdGVTdHIpKSB7XG4gICAgICAgICAgICBzbWFydFN1Z2dlc3Rpb25zLnB1c2goZGF0ZVN0cik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlciBsZXMgZXJyZXVycyBzaWxlbmNpZXVzZW1lbnRcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc21hcnRTdWdnZXN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGltZVN1Z2dlc3Rpb25zKGlucHV0U3RyOiBzdHJpbmcsIGxhbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAvLyBPbmx5IHRoZSBmaXJzdCB2YXJpYW50IG9mIGEgcGlwZS1zZXBhcmF0ZWQgdHJhbnNsYXRpb24gKGUuZy4gQ2hpbmVzZVxuICAgIC8vIFwi5pmC6ZaTfOaXtumXtFwiKSBpcyB1c2VkIGZvciBkaXNwbGF5L21hdGNoaW5nIC0tIGVtYmVkZGluZyB0aGUgcmF3XG4gICAgLy8gbXVsdGktdmFyaWFudCBzdHJpbmcgd291bGQgYm90aCBnYXJibGUgdGhlIHN1Z2dlc3Rpb24gdGV4dCBhbmQsIHNpbmNlXG4gICAgLy8gXCJ8XCIgaXMgYSByZWdleCBtZXRhY2hhcmFjdGVyLCBzaWxlbnRseSBicmVhayB0aGUgXCJeXCIgYW5jaG9yIGJlbG93LlxuICAgIGNvbnN0IHRpbWVXb3JkID0gdChcInRpbWVcIiwgbGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICBjb25zdCBub3dXb3JkID0gdChcIm5vd1wiLCBsYW5nKS5zcGxpdCgnfCcpWzBdO1xuICAgIGlmIChpbnB1dFN0ci5tYXRjaChuZXcgUmVnRXhwKGBeJHtlc2NhcGVSZWdleCh0aW1lV29yZCl9YCwgXCJpXCIpKSkge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBbXG4gICAgICAgIG5vd1dvcmQsXG4gICAgICAgIHQoXCJwbHVzbWludXRlc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogXCIxNVwiIH0pLFxuICAgICAgICB0KFwicGx1c2hvdXJcIiwgbGFuZywgeyB0aW1lRGVsdGE6IFwiMVwiIH0pLFxuICAgICAgICB0KFwibWludXNtaW51dGVzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBcIjE1XCIgfSksXG4gICAgICAgIHQoXCJtaW51c2hvdXJcIiwgbGFuZywgeyB0aW1lRGVsdGE6IFwiMVwiIH0pLFxuICAgICAgXVxuICAgICAgICAubWFwKHZhbCA9PiBgJHt0aW1lV29yZH06JHt2YWx9YClcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGlucHV0U3RyLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9ucy5sZW5ndGggPiAwID8gc3VnZ2VzdGlvbnMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbW1lZGlhdGVTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gRXNjYXBlIGVhY2ggdHJhbnNsYXRpb24ncyB2YXJpYW50cyBpbmRpdmlkdWFsbHkgYmVmb3JlIGpvaW5pbmcgaW50b1xuICAgIC8vIGFuIGFsdGVybmF0aW9uOiBhIGxhbmd1YWdlJ3Mgb3duIFwifFwiLXNlcGFyYXRlZCB2YXJpYW50cyBzdGF5XG4gICAgLy8gbWVhbmluZ2Z1bCBhbHRlcm5hdGlvbiwgYnV0IGFueSBvdGhlciByZWdleCBtZXRhY2hhcmFjdGVyIG9uZSBtaWdodFxuICAgIC8vIGNvbnRhaW4gY2FuJ3QgY29ycnVwdCB0aGUgcGF0dGVybi4gQW5jaG9yZWQgd2l0aCBcIl5cIiBsaWtlIHRoZSBvdGhlclxuICAgIC8vIHN1Z2dlc3Rpb24gZ2VuZXJhdG9ycyBpbiB0aGlzIGZpbGUgLS0gb3RoZXJ3aXNlIGEgc2hvcnQsIGNvbW1vblxuICAgIC8vIHN1YnN0cmluZyAoZS5nLiBDaGluZXNlIFwibmV4dFwiOiBcIuS4i+S4gOWAi3zkuIvkuIDkuKp85LiLXCIsIHRoZSBsYXN0IHZhcmlhbnRcbiAgICAvLyBiZWluZyBhIHNpbmdsZSBiYXJlIGNoYXJhY3RlcikgY2FuIG1hdGNoIGluIHRoZSBtaWRkbGUgb2YgdW5yZWxhdGVkXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgYnVpbGRQYXR0ZXJuID0gKHRyYW5zbGF0aW9uOiBzdHJpbmcpID0+XG4gICAgICB0cmFuc2xhdGlvbi5zcGxpdCgnfCcpLm1hcCh2ID0+IGVzY2FwZVJlZ2V4KHYudHJpbSgpKSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ3wnKTtcbiAgICBjb25zdCBwcmVmaXhQYXR0ZXJuID0gW3QoXCJuZXh0XCIsIGxhbmcpLCB0KFwibGFzdFwiLCBsYW5nKSwgdChcInRoaXNcIiwgbGFuZyldXG4gICAgICAubWFwKGJ1aWxkUGF0dGVybilcbiAgICAgIC5qb2luKCd8Jyk7XG4gICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChgXigke3ByZWZpeFBhdHRlcm59KWAsIFwiaVwiKTtcbiAgICBjb25zdCBtYXRjaCA9IGlucHV0U3RyLm1hdGNoKHJlZ2V4cClcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IG1hdGNoWzFdXG4gICAgICAvLyBQcmVuZHJlIHNldWxlbWVudCBsYSBwcmVtacOocmUgdmFyaWFudGUgKGF2YW50IGxlIHwpIHBvdXIgbGVzIHN1Z2dlc3Rpb25zXG4gICAgICBjb25zdCBnZXRGaXJzdFZhcmlhbnQgPSAodmFsOiBzdHJpbmcpID0+IHZhbC5zcGxpdCgnfCcpWzBdO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBbXG4gICAgICAgIHQoXCJ3ZWVrXCIsIGxhbmcpLFxuICAgICAgICB0KFwibW9udGhcIiwgbGFuZyksXG4gICAgICAgIHQoXCJ5ZWFyXCIsIGxhbmcpLFxuICAgICAgICB0KFwic3VuZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwibW9uZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwidHVlc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcIndlZG5lc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcInRodXJzZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwiZnJpZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwic2F0dXJkYXlcIiwgbGFuZyksXG4gICAgICBdXG4gICAgICAgIC5tYXAodmFsID0+IHtcbiAgICAgICAgICBjb25zdCBmaXJzdFZhcmlhbnQgPSBnZXRGaXJzdFZhcmlhbnQodmFsKTtcbiAgICAgICAgICAvLyBDYXBpdGFsaXNlciBsYSBwcmVtacOocmUgbGV0dHJlIHBvdXIgdW4gbWVpbGxldXIgYWZmaWNoYWdlXG4gICAgICAgICAgcmV0dXJuIGZpcnN0VmFyaWFudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGZpcnN0VmFyaWFudC5zbGljZSgxKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCh2YWwgPT4gYCR7cmVmZXJlbmNlfSAke3ZhbH1gKVxuICAgICAgICAuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVsYXRpdmVTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gVsOpcmlmaWVyIGQnYWJvcmQgbGVzIGV4cHJlc3Npb25zIGNvbWJpbsOpZXMgY29tbWUgXCJpbiAxIG1vbnRoIGFuZFwiIG91IFwiZGFucyAxIG1vaXMgZXRcIlxuICAgIC8vIFBlcm1ldHRyZSBsYSBzYWlzaWUgcHJvZ3Jlc3NpdmUgOiBcImluIDEgbW9udGggYW5kXCIsIFwiaW4gMSBtb250aCBhbmQgM1wiLCBcImluIDMgbW9udGggYW5kXCIsIGV0Yy5cbiAgICBjb25zdCBhbmRQYXR0ZXJuID0gdChcImFuZFwiLCBsYW5nKS5zcGxpdCgnfCcpWzBdOyAvLyBQcmVuZHJlIGxhIHByZW1pw6hyZSB2YXJpYW50ZVxuICAgIC8vIFJlZ2V4IHBsdXMgZmxleGlibGUgcXVpIHBlcm1ldCBsYSBzYWlzaWUgYXByw6hzIFwiYW5kXCJcbiAgICBjb25zdCBjb21iaW5lZFJlZ2V4ID0gbmV3IFJlZ0V4cChgXigke3QoXCJpblwiLCBsYW5nKX0gKT8oWystXT9cXFxcZCspXFxcXHMrKCR7dChcIm1pbnV0ZVwiLCBsYW5nKX18JHt0KFwiaG91clwiLCBsYW5nKX18JHt0KFwiZGF5XCIsIGxhbmcpfXwke3QoXCJ3ZWVrXCIsIGxhbmcpfXwke3QoXCJtb250aFwiLCBsYW5nKX18JHt0KFwieWVhclwiLCBsYW5nKX0pXFxcXHMrKCR7YW5kUGF0dGVybn0pKFxcXFxzKy4qKT8kYCwgXCJpXCIpO1xuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2ggPSBpbnB1dFN0ci5tYXRjaChjb21iaW5lZFJlZ2V4KTtcbiAgICBpZiAoY29tYmluZWRNYXRjaCkge1xuICAgICAgY29uc3QgYWZ0ZXJBbmQgPSBjb21iaW5lZE1hdGNoWzVdID8gY29tYmluZWRNYXRjaFs1XS50cmltKCkgOiAnJztcbiAgICAgIFxuICAgICAgLy8gRXh0cmFpcmUgbGEgcGFydGllIGF2YW50IFwiYW5kXCIgcG91ciByZWNvbnN0cnVpcmUgY29ycmVjdGVtZW50XG4gICAgICBjb25zdCBiZWZvcmVBbmQgPSBpbnB1dFN0ci5zdWJzdHJpbmcoMCwgaW5wdXRTdHIuaW5kZXhPZihjb21iaW5lZE1hdGNoWzRdKSArIGNvbWJpbmVkTWF0Y2hbNF0ubGVuZ3RoKS50cmltRW5kKCk7XG4gICAgICBcbiAgICAgIC8vIFNpIG9uIGEgZMOpasOgIGNvbW1lbmPDqSDDoCB0YXBlciBhcHLDqHMgXCJhbmRcIiwgZXh0cmFpcmUgbGUgbm9tYnJlIHMnaWwgeSBlbiBhIHVuXG4gICAgICBsZXQgc3VnZ2VzdGVkTnVtYmVyID0gXCIxXCI7XG4gICAgICBsZXQgYWZ0ZXJBbmRXaXRob3V0TnVtYmVyID0gYWZ0ZXJBbmQ7XG4gICAgICBpZiAoYWZ0ZXJBbmQpIHtcbiAgICAgICAgY29uc3QgbnVtYmVyTWF0Y2ggPSBhZnRlckFuZC5tYXRjaCgvXihcXGQrKSguKikkLyk7XG4gICAgICAgIGlmIChudW1iZXJNYXRjaCkge1xuICAgICAgICAgIHN1Z2dlc3RlZE51bWJlciA9IG51bWJlck1hdGNoWzFdO1xuICAgICAgICAgIGFmdGVyQW5kV2l0aG91dE51bWJlciA9IG51bWJlck1hdGNoWzJdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtcbiAgICAgICAgdChcImlubWludXRlc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogc3VnZ2VzdGVkTnVtYmVyIH0pLFxuICAgICAgICB0KFwiaW5ob3Vyc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogc3VnZ2VzdGVkTnVtYmVyIH0pLFxuICAgICAgICB0KFwiaW5kYXlzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBzdWdnZXN0ZWROdW1iZXIgfSksXG4gICAgICAgIHQoXCJpbndlZWtzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBzdWdnZXN0ZWROdW1iZXIgfSksXG4gICAgICAgIHQoXCJpbm1vbnRoc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogc3VnZ2VzdGVkTnVtYmVyIH0pLFxuICAgICAgXVxuICAgICAgICAubWFwKHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHVuaXRQYXJ0ID0gcy5yZXBsYWNlKC9eZGFucyB8XmluIC9pLCAnJyk7XG4gICAgICAgICAgLy8gdW5pdFBhcnQgZXN0IGNvbW1lIFwiMyBkYXlzXCIgb3UgXCI1IG1pbnV0ZXNcIlxuICAgICAgICAgIGlmIChhZnRlckFuZCkge1xuICAgICAgICAgICAgLy8gU2kgb24gYSBkw6lqw6AgY29tbWVuY8OpIMOgIHRhcGVyLCBjb21wbMOpdGVyIGludGVsbGlnZW1tZW50XG4gICAgICAgICAgICAvLyB1bml0UGFydCBjb21tZW5jZSBwYXIgbGUgbm9tYnJlIChleDogXCIzIGRheXNcIilcbiAgICAgICAgICAgIGNvbnN0IHVuaXRXb3JkcyA9IHVuaXRQYXJ0LnNwbGl0KCcgJyk7XG4gICAgICAgICAgICBpZiAodW5pdFdvcmRzLmxlbmd0aCA+IDEgJiYgdW5pdFdvcmRzWzBdID09PSBzdWdnZXN0ZWROdW1iZXIpIHtcbiAgICAgICAgICAgICAgLy8gTGUgbm9tYnJlIGNvcnJlc3BvbmQsIG9uIHBldXQgc3VnZ8OpcmVyIGxlIHJlc3RlIChleDogXCJkYXlzXCIpXG4gICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IHVuaXRQYXJ0LnN1YnN0cmluZyhzdWdnZXN0ZWROdW1iZXIubGVuZ3RoKS50cmltKCk7XG4gICAgICAgICAgICAgIGlmIChhZnRlckFuZFdpdGhvdXROdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBTaSBvbiBhIHRhcMOpIHF1ZWxxdWUgY2hvc2UgYXByw6hzIGxlIG5vbWJyZSwgdsOpcmlmaWVyIHNpIMOnYSBjb3JyZXNwb25kXG4gICAgICAgICAgICAgICAgLy8gTk9URToga25vd24gcm91Z2ggZWRnZSAtLSB0aGlzIGRyb3BzIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZVxuICAgICAgICAgICAgICAgIC8vIG51bWJlciBhbmQgdW5pdCAoZS5nLiB0eXBpbmcgXCIzIGRheVwiIGFmdGVyIFwiYW5kXCIgcHJvZHVjZXNcbiAgICAgICAgICAgICAgICAvLyBcIi4uLmFuZCAzc1wiIGluc3RlYWQgb2YgXCIuLi5hbmQgMyBkYXlzXCIpLCBzbyB0aGUgcmVidWlsdFxuICAgICAgICAgICAgICAgIC8vIGNhbmRpZGF0ZSB0aGVuIGZhaWxzIHRoZSBvdXRlciBwcmVmaXggZmlsdGVyIGJlbG93IGFuZCB0aGlzXG4gICAgICAgICAgICAgICAgLy8gd2hvbGUgYnJhbmNoIHNpbGVudGx5IGNvbnRyaWJ1dGVzIG5vIHN1Z2dlc3Rpb24uIFZlcmlmaWVkXG4gICAgICAgICAgICAgICAgLy8gYXMgdGhlIGFjdHVhbCBjdXJyZW50IGJlaGF2aW9yOyBsZWZ0IGFsb25lIGFzIGEgbmFycm93XG4gICAgICAgICAgICAgICAgLy8gYXV0b3N1Z2dlc3QtdGV4dCBwb2xpc2ggaXNzdWUgcmF0aGVyIHRoYW4gZml4ZWQgaGVyZS5cbiAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChhZnRlckFuZFdpdGhvdXROdW1iZXIudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtiZWZvcmVBbmR9ICR7c3VnZ2VzdGVkTnVtYmVyfSR7cmVtYWluaW5nLnN1YnN0cmluZyhhZnRlckFuZFdpdGhvdXROdW1iZXIubGVuZ3RoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBPbiBhIGp1c3RlIHRhcMOpIGxlIG5vbWJyZSwgc3VnZ8OpcmVyIGxlIHJlc3RlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2JlZm9yZUFuZH0gJHt1bml0UGFydH1gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZWFjaGVkIGZvciBsYW5ndWFnZXMgdGhhdCBkb24ndCBzZXBhcmF0ZSB0aGUgbnVtYmVyIGFuZCB1bml0XG4gICAgICAgICAgICAvLyB3aXRoIGEgc3BhY2UgKGUuZy4gQ2hpbmVzZSBcIjPlpKnlvoxcIiwgSmFwYW5lc2UgXCIz5pel5b6MXCIpOiB1bml0UGFydFxuICAgICAgICAgICAgLy8gdGhlbiBoYXMgbm8gc3BhY2UgYXQgYWxsLCBzbyB1bml0V29yZHMubGVuZ3RoID4gMSBhYm92ZSBpc1xuICAgICAgICAgICAgLy8gZmFsc2UgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBudW1iZXIgbWF0Y2hlcy4gTm90ZSB0aGlzIGhhc1xuICAgICAgICAgICAgLy8gaXRzIG93biByb3VnaCBlZGdlIHN5bW1ldHJpYyB0byB0aGUgb25lIGFib3ZlIC0tIHNpbmNlXG4gICAgICAgICAgICAvLyB1bml0UGFydCBoYXMgbm8gc3BhY2UsIHVuaXRQYXJ0LmluZGV4T2YoJyAnKSBpcyAtMSBhbmRcbiAgICAgICAgICAgIC8vIHVuaXRXaXRob3V0TnVtYmVyIGVuZHMgdXAgYmVpbmcgdGhlICp3aG9sZSogdW5pdFBhcnRcbiAgICAgICAgICAgIC8vIChpbmNsdWRpbmcgaXRzIG93biBsZWFkaW5nIG51bWJlciksIHNvIHRoZSByZXR1cm5lZCBzdWdnZXN0aW9uXG4gICAgICAgICAgICAvLyBkdXBsaWNhdGVzIHRoZSBudW1iZXIgKGUuZy4gXCLlnKggMyDlpKkg5ZKMIDQgNOWIhumQmOW+jFwiIGluc3RlYWQgb2ZcbiAgICAgICAgICAgIC8vIFwiLi4u5ZKMIDTliIbpkJjlvoxcIikuIFZlcmlmaWVkIGFzIHRoZSBhY3R1YWwgY3VycmVudCBiZWhhdmlvcjtcbiAgICAgICAgICAgIC8vIGxlZnQgYWxvbmUgYXMgdGhlIHNhbWUga2luZCBvZiBuYXJyb3cgYXV0b3N1Z2dlc3QtdGV4dCBwb2xpc2hcbiAgICAgICAgICAgIC8vIGlzc3VlIGFzIHRoZSBvbmUgZG9jdW1lbnRlZCBhYm92ZSwgbm90IGZpeGVkIGhlcmUuXG4gICAgICAgICAgICBjb25zdCB1bml0V2l0aG91dE51bWJlciA9IHVuaXRQYXJ0LnN1YnN0cmluZyh1bml0UGFydC5pbmRleE9mKCcgJykgKyAxKTtcbiAgICAgICAgICAgIGlmICh1bml0V2l0aG91dE51bWJlci50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoYWZ0ZXJBbmQudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGAke2JlZm9yZUFuZH0gJHtzdWdnZXN0ZWROdW1iZXJ9ICR7dW5pdFdpdGhvdXROdW1iZXJ9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYCR7YmVmb3JlQW5kfSAke3VuaXRQYXJ0fWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFbDqXJpZmllciBsZXMgcGxhZ2VzIGRlIGRhdGVzIHBhcnRpZWxsZXMgY29tbWUgXCJkZSBsdW5kaSDDoFwiIG91IFwiZnJvbSBtb25kYXkgdG9cIlxuICAgIC8vIFBlcm1ldHRyZSBsYSBzYWlzaWUgcHJvZ3Jlc3NpdmUgOiBcImRlIGx1bmRpIGFcIiwgXCJkZSBsdW5kaSBhIHZcIiwgXCJkZSBsdW5kaSBhIHZlXCIsIGV0Yy5cbiAgICBjb25zdCBmcm9tUGF0dGVybiA9IHQoXCJmcm9tXCIsIGxhbmcpLnNwbGl0KCd8JylbMF07XG4gICAgY29uc3QgdG9QYXR0ZXJuID0gdChcInRvXCIsIGxhbmcpLnNwbGl0KCd8JylbMF07XG4gICAgLy8gUmVnZXggcGx1cyBmbGV4aWJsZSBxdWkgcGVybWV0IGxhIHNhaXNpZSBwcm9ncmVzc2l2ZSBhcHLDqHMgXCLDoFwiIG91IFwiYVwiXG4gICAgY29uc3QgcmFuZ2VQYXJ0aWFsUmVnZXggPSBuZXcgUmVnRXhwKGBeKCR7ZnJvbVBhdHRlcm59fGRlfGR1KVxcXFxzKygke3QoXCJzdW5kYXlcIiwgbGFuZyl9fCR7dChcIm1vbmRheVwiLCBsYW5nKX18JHt0KFwidHVlc2RheVwiLCBsYW5nKX18JHt0KFwid2VkbmVzZGF5XCIsIGxhbmcpfXwke3QoXCJ0aHVyc2RheVwiLCBsYW5nKX18JHt0KFwiZnJpZGF5XCIsIGxhbmcpfXwke3QoXCJzYXR1cmRheVwiLCBsYW5nKX0pXFxcXHMrKCR7dG9QYXR0ZXJufXzDoHxhKShcXFxccysuKik/JGAsIFwiaVwiKTtcbiAgICBjb25zdCByYW5nZVBhcnRpYWxNYXRjaCA9IGlucHV0U3RyLm1hdGNoKHJhbmdlUGFydGlhbFJlZ2V4KTtcbiAgICBpZiAocmFuZ2VQYXJ0aWFsTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGFmdGVyVG8gPSByYW5nZVBhcnRpYWxNYXRjaFs0XSA/IHJhbmdlUGFydGlhbE1hdGNoWzRdLnRyaW0oKSA6ICcnO1xuICAgICAgLy8gRXh0cmFpcmUgbGEgcGFydGllIGF2YW50IFwiw6BcIiBvdSBcImFcIiBwb3VyIHJlY29uc3RydWlyZSBjb3JyZWN0ZW1lbnRcbiAgICAgIGNvbnN0IGJlZm9yZVRvID0gaW5wdXRTdHIuc3Vic3RyaW5nKDAsIGlucHV0U3RyLmluZGV4T2YocmFuZ2VQYXJ0aWFsTWF0Y2hbM10pICsgcmFuZ2VQYXJ0aWFsTWF0Y2hbM10ubGVuZ3RoKS50cmltRW5kKCk7XG4gICAgICBcbiAgICAgIC8vIEfDqW7DqXJlciBkZXMgc3VnZ2VzdGlvbnMgcG91ciBsZXMgam91cnMgZGUgZmluIHBvc3NpYmxlc1xuICAgICAgY29uc3QgYWxsRGF5cyA9IFtcbiAgICAgICAgdChcInN1bmRheVwiLCBsYW5nKSxcbiAgICAgICAgdChcIm1vbmRheVwiLCBsYW5nKSxcbiAgICAgICAgdChcInR1ZXNkYXlcIiwgbGFuZyksXG4gICAgICAgIHQoXCJ3ZWRuZXNkYXlcIiwgbGFuZyksXG4gICAgICAgIHQoXCJ0aHVyc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcImZyaWRheVwiLCBsYW5nKSxcbiAgICAgICAgdChcInNhdHVyZGF5XCIsIGxhbmcpLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gYWxsRGF5c1xuICAgICAgICAubWFwKGRheSA9PiB7XG4gICAgICAgICAgaWYgKGFmdGVyVG8pIHtcbiAgICAgICAgICAgIC8vIFNpIG9uIGEgZMOpasOgIGNvbW1lbmPDqSDDoCB0YXBlciwgZmlsdHJlciBsZXMgam91cnMgcXVpIGNvbW1lbmNlbnQgcGFyIGNlIHRleHRlXG4gICAgICAgICAgICBpZiAoZGF5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChhZnRlclRvLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIC8vIFJlbXBsYWNlciBcImFmdGVyVG9cIiBwYXIgbGUgam91ciBjb21wbGV0XG4gICAgICAgICAgICAgIHJldHVybiBgJHtiZWZvcmVUb30gJHtkYXl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYCR7YmVmb3JlVG99ICR7ZGF5fWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFBhdHRlcm4gc3RhbmRhcmQgcG91ciBsZXMgZGF0ZXMgcmVsYXRpdmVzIHNpbXBsZXNcbiAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKGBeKCR7dChcImluXCIsIGxhbmcpfSApPyhbKy1dP1xcXFxkKylgLCBcImlcIilcbiAgICBjb25zdCByZWxhdGl2ZURhdGUgPSBpbnB1dFN0ci5tYXRjaChyZWdleHApO1xuICAgIGlmIChyZWxhdGl2ZURhdGUpIHtcbiAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IHJlbGF0aXZlRGF0ZVtyZWxhdGl2ZURhdGUubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtcbiAgICAgICAgdChcImlubWludXRlc1wiLCBsYW5nLCB7IHRpbWVEZWx0YSB9KSxcbiAgICAgICAgdChcImluaG91cnNcIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJpbmRheXNcIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJpbndlZWtzXCIsIGxhbmcsIHsgdGltZURlbHRhIH0pLFxuICAgICAgICB0KFwiaW5tb250aHNcIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJtaW51dGVzYWdvXCIsIGxhbmcsIHsgdGltZURlbHRhIH0pLFxuICAgICAgICB0KFwiaG91cnNhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJkYXlzYWdvXCIsIGxhbmcsIHsgdGltZURlbHRhIH0pLFxuICAgICAgICB0KFwid2Vla3NhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJtb250aHNhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICBdLmZpbHRlcihpdGVtcyA9PiBpdGVtcy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoaW5wdXRTdHIudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIGFuIGVtcHR5IGFycmF5IGhlcmU6IGFueSBkaWdpdC1sZWQgaW5wdXQgKGluY2x1ZGluZ1xuICAgICAgLy8gc3VmZml4LXN0eWxlIFwiMyBkaWFzIGF0csOhc1wiKSBtYXRjaGVzIHRoaXMgcmVnZXhwIHRvbywgc2luY2UgaXRzXG4gICAgICAvLyBwcmVmaXggZ3JvdXAgaXMgb3B0aW9uYWwgLS0gcmV0dXJuaW5nIHVuY29uZGl0aW9uYWxseSB3b3VsZCBtYWtlXG4gICAgICAvLyB0aGUgc3VmZml4LXBhdHRlcm4gY2hlY2sgYmVsb3cgdW5yZWFjaGFibGUgZGVhZCBjb2RlIGZvciBldmVyeVxuICAgICAgLy8gc3VmZml4LW9ubHkgbGFuZ3VhZ2UuXG4gICAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3VmZml4LXN0eWxlIHBhc3QgZXhwcmVzc2lvbnMsIGUuZy4gUG9ydHVndWVzZS9TcGFuaXNoIFwiMyBkaWFzIGF0csOhc1wiXG4gICAgLy8gKFggdW5pdCArIGFnb3N1ZmZpeCBtYXJrZXIpLCB0aGUgcGFzdC10ZW5zZSBtaXJyb3Igb2YgdGhlIHByZWZpeFxuICAgIC8vIHN1Z2dlc3Rpb25zIGFib3ZlLlxuICAgIGNvbnN0IGFnb1N1ZmZpeCA9IHQoXCJhZ29zdWZmaXhcIiwgbGFuZyk7XG4gICAgaWYgKGFnb1N1ZmZpeCAmJiBhZ29TdWZmaXggIT09IFwiTk9URk9VTkRcIikge1xuICAgICAgY29uc3Qgc3VmZml4TWF0Y2ggPSBpbnB1dFN0ci5tYXRjaCgvXihcXGQrKVxccysoXFx3KikvaSk7XG4gICAgICBpZiAoc3VmZml4TWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZURlbHRhID0gc3VmZml4TWF0Y2hbMV07XG4gICAgICAgIGNvbnN0IHN1ZmZpeFZhcmlhbnQgPSBhZ29TdWZmaXguc3BsaXQoJ3wnKVswXTtcblxuICAgICAgICBjb25zdCB1bml0VHlwZXMgPSBbJ21pbnV0ZScsICdob3VyJywgJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXTtcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdW5pdFR5cGUgb2YgdW5pdFR5cGVzKSB7XG4gICAgICAgICAgY29uc3Qgd29yZHMgPSB0KHVuaXRUeXBlLCBsYW5nKS5zcGxpdCgnfCcpLm1hcCh3ID0+IHcudHJpbSgpKS5zbGljZSgwLCAyKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goYCR7dGltZURlbHRhfSAke3dvcmR9ICR7c3VmZml4VmFyaWFudH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHN1Z2dlc3Rpb25zLmZpbHRlcihpdGVtID0+IGl0ZW0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGlucHV0U3RyLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgICAgaWYgKGZpbHRlcmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFdlZWtkYXlTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gTGUgcGFyc2VyIHBldXQgZ8OpcmVyIGxlcyBhYnLDqXZpYXRpb25zICh0aHUsIG1vbiwgc2F0LCBldGMuKSwgZG9uYyBvbiBkb2l0IGxlcyBwcm9wb3NlciBhdXNzaVxuICAgIGNvbnN0IHdlZWtkYXlzID0gW1xuICAgICAgeyBrZXk6ICdzdW5kYXknLCBhYmJyOiBbJ3N1biddIH0sXG4gICAgICB7IGtleTogJ21vbmRheScsIGFiYnI6IFsnbW9uJ10gfSxcbiAgICAgIHsga2V5OiAndHVlc2RheScsIGFiYnI6IFsndHVlJywgJ3R1ZXMnXSB9LFxuICAgICAgeyBrZXk6ICd3ZWRuZXNkYXknLCBhYmJyOiBbJ3dlZCddIH0sXG4gICAgICB7IGtleTogJ3RodXJzZGF5JywgYWJicjogWyd0aHUnLCAndGh1cicsICd0aHVycyddIH0sXG4gICAgICB7IGtleTogJ2ZyaWRheScsIGFiYnI6IFsnZnJpJ10gfSxcbiAgICAgIHsga2V5OiAnc2F0dXJkYXknLCBhYmJyOiBbJ3NhdCddIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IGlucHV0TG93ZXIgPSBpbnB1dFN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBkYXkgb2Ygd2Vla2RheXMpIHtcbiAgICAgIC8vIHQoKSBhbHdheXMgZmFsbHMgYmFjayB0byBFbmdsaXNoLCBhbmQgZW4udHMgYWx3YXlzIGRlZmluZXMgYWxsXG4gICAgICAvLyBzZXZlbiB3ZWVrZGF5cywgc28gdGhpcyBndWFyZCBjYW4ndCBhY3R1YWxseSBiZSBmYWxzZS5cbiAgICAgIGNvbnN0IGRheU5hbWUgPSB0KGRheS5rZXksIGxhbmcpO1xuICAgICAgaWYgKCFkYXlOYW1lIHx8IGRheU5hbWUgPT09IFwiTk9URk9VTkRcIikgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGZpcnN0VmFyaWFudCA9IGRheU5hbWUuc3BsaXQoJ3wnKVswXS50cmltKCk7XG4gICAgICBjb25zdCBkYXlOYW1lTG93ZXIgPSBmaXJzdFZhcmlhbnQudG9Mb3dlckNhc2UoKTtcblxuICAgICAgLy8gVsOpcmlmaWVyIHNpIGxlIG5vbSBjb21wbGV0IGNvbW1lbmNlIHBhciBsJ2lucHV0ICh0b2zDqHJlIHVuZSBwZXRpdGUgZmF1dGUgZGUgZnJhcHBlKVxuICAgICAgaWYgKGZ1enp5TWF0Y2hlc1F1ZXJ5KGRheU5hbWVMb3dlciwgaW5wdXRMb3dlcikpIHtcbiAgICAgICAgY29uc3QgY2FwaXRhbGl6ZWQgPSBmaXJzdFZhcmlhbnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBmaXJzdFZhcmlhbnQuc2xpY2UoMSk7XG4gICAgICAgIGlmICghc3VnZ2VzdGlvbnMuaW5jbHVkZXMoY2FwaXRhbGl6ZWQpKSB7XG4gICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChjYXBpdGFsaXplZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVsOpcmlmaWVyIHNpIHVuZSBhYnLDqXZpYXRpb24gY29ycmVzcG9uZCAtLSB0aGUgYWJicmV2aWF0aW9ucyBiZWxvdyBhcmVcbiAgICAgIC8vIEVuZ2xpc2gtb25seSAoZS5nLiBcIm1vblwiKSwgYnV0IGRheU5hbWUvZmlyc3RWYXJpYW50IGlzIHRyYW5zbGF0ZWRcbiAgICAgIC8vIChlLmcuIEZyZW5jaCBcImx1bmRpXCIpLCBzbyBmb3IgYW55IG5vbi1FbmdsaXNoIGxhbmd1YWdlIHRoZSBmdWxsLW5hbWVcbiAgICAgIC8vIGNoZWNrIGFib3ZlIG5ldmVyIG1hdGNoZXMgd2hpbGUgdGhpcyBhYmJyZXZpYXRpb24gY2hlY2sgc3RpbGwgZG9lcy5cbiAgICAgIC8vIFRoaXMgaXMgd2hhdCBsZXRzIEVuZ2xpc2ggd2Vla2RheSBhYmJyZXZpYXRpb25zIHdvcmsgYXMgYSBzaG9ydGN1dFxuICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGljaCBsYW5ndWFnZSBpcyBhY3RpdmUgKHZlcmlmaWVkOiB0eXBpbmcgXCJtb25cIiB3aXRoXG4gICAgICAvLyBvbmx5IEZyZW5jaCBlbmFibGVkIGNvcnJlY3RseSBzdWdnZXN0cyBcIkx1bmRpXCIpLlxuICAgICAgZm9yIChjb25zdCBhYmJyIG9mIGRheS5hYmJyKSB7XG4gICAgICAgIGlmIChhYmJyLnN0YXJ0c1dpdGgoaW5wdXRMb3dlcikpIHtcbiAgICAgICAgICBjb25zdCBjYXBpdGFsaXplZCA9IGZpcnN0VmFyaWFudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGZpcnN0VmFyaWFudC5zbGljZSgxKTtcbiAgICAgICAgICBpZiAoIXN1Z2dlc3Rpb25zLmluY2x1ZGVzKGNhcGl0YWxpemVkKSkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChjYXBpdGFsaXplZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyBzdWdnZXN0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFN1Z2dlc3Rpb25zKGlucHV0U3RyOiBzdHJpbmcsIGxhbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgdChcInRvZGF5XCIsIGxhbmcpLFxuICAgICAgdChcInllc3RlcmRheVwiLCBsYW5nKSxcbiAgICAgIHQoXCJ0b21vcnJvd1wiLCBsYW5nKSxcbiAgICBdLmZpbHRlcihpdGVtID0+IGZ1enp5TWF0Y2hlc1F1ZXJ5KGl0ZW0sIGlucHV0U3RyKSk7XG4gIH1cblxuICByZW5kZXJTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZywgZWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlldyA9IHRoaXMucmVzb2x2ZVByZXZpZXdUZXh0KHN1Z2dlc3Rpb24pO1xuICAgIGlmICghcHJldmlldyB8fCBwcmV2aWV3ID09PSBzdWdnZXN0aW9uKSB7XG4gICAgICBlbC5zZXRUZXh0KHN1Z2dlc3Rpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBPYnNpZGlhbiByZWN5Y2xlcyBzdWdnZXN0aW9uLXJvdyBlbGVtZW50cyBhY3Jvc3MgcmVuZGVycyAodmlydHVhbGl6ZWRcbiAgICAvLyBsaXN0KSwgc28gYSBzdGFsZSBwcmV2aW91cyByZW5kZXIncyBjb250ZW50IG11c3QgYmUgY2xlYXJlZCBiZWZvcmVcbiAgICAvLyBhcHBlbmRpbmcgbmV3IHNwYW5zIC0tIG90aGVyd2lzZSBvbGQgdGV4dC9zcGFucyBzdGFjayB1cCBvbiB0b3Agb2ZcbiAgICAvLyBlYWNoIG90aGVyIG9uIHRoZSByZXVzZWQgZWxlbWVudC5cbiAgICBlbC5lbXB0eSgpO1xuICAgIGVsLmFkZENsYXNzKFwibmxkLXN1Z2dlc3Rpb24taXRlbVwiKTtcbiAgICBlbC5jcmVhdGVTcGFuKHsgY2xzOiBcIm5sZC1zdWdnZXN0aW9uLXRleHRcIiwgdGV4dDogc3VnZ2VzdGlvbiB9KTtcbiAgICBlbC5jcmVhdGVTcGFuKHsgY2xzOiBcIm5sZC1zdWdnZXN0aW9uLXByZXZpZXdcIiwgdGV4dDogcHJldmlldyB9KTtcbiAgfVxuXG4gIC8vIFJlc29sdmVzIGEgc3VnZ2VzdGlvbiB0byB0aGUgcGxhaW4tdGV4dCBkYXRlL3RpbWUgaXQgd291bGQgYWN0dWFsbHlcbiAgLy8gaW5zZXJ0IChubyBbW2xpbmtzXV0sIG5vIGFsaWFzKSAtLSBzaG93biBuZXh0IHRvIHRoZSBzdWdnZXN0aW9uIGluIHRoZVxuICAvLyBkcm9wZG93biBzbyB0aGUgdXNlciBjYW4gc2VlIHRoZSByZXNvbHZlZCB2YWx1ZSBiZWZvcmUgcGlja2luZyBvbmUuXG4gIC8vIERlbGliZXJhdGVseSBtaXJyb3JzIHNlbGVjdFN1Z2dlc3Rpb24oKSdzIG93biBkYXRlL3RpbWUgcmVzb2x1dGlvblxuICAvLyAodGltZS1zdWdnZXN0aW9uIC8gZGF0ZS1yYW5nZSAvIGh5YnJpZC1kYXRlLXRpbWUgYnJhbmNoZXMpIHNvIHRoZVxuICAvLyBwcmV2aWV3IGNhbiBuZXZlciBzaG93IHNvbWV0aGluZyBkaWZmZXJlbnQgZnJvbSB3aGF0IHNlbGVjdGluZyB0aGVcbiAgLy8gc3VnZ2VzdGlvbiBhY3R1YWxseSBwcm9kdWNlcyAtLSBhbmQsIHVubGlrZSBzZWxlY3RTdWdnZXN0aW9uKCksIG5ldmVyXG4gIC8vIHRvdWNoZXMgdGhlIGVkaXRvciBvciBoaXN0b3J5IGFuZCBjYW4ndCB0aHJvdzogYSBwYXJzaW5nIGZhaWx1cmUgaGVyZVxuICAvLyBqdXN0IG1lYW5zIG5vIHByZXZpZXcgaXMgc2hvd24sIG5vdCBhIGJyb2tlbiBzdWdnZXN0aW9uIGxpc3QuXG4gIHByaXZhdGUgcmVzb2x2ZVByZXZpZXdUZXh0KHN1Z2dlc3Rpb246IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uSXNUaW1lKHN1Z2dlc3Rpb24pKSB7XG4gICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gc3VnZ2VzdGlvbi5zdWJzdHJpbmcodGhpcy5nZXRUaW1lUHJlZml4TGVuZ3RoKHN1Z2dlc3Rpb24pKTtcbiAgICAgICAgY29uc3QgcGFyc2VkVGltZSA9IHRoaXMucGx1Z2luLnBhcnNlVGltZSh0aW1lUGFydCk7XG4gICAgICAgIC8vIHBhcnNlRGF0ZSgpL3BhcnNlVGltZSgpIG5ldmVyIHRocm93IC0tIG9uIHVucGFyc2VhYmxlIGlucHV0IHRoZXlcbiAgICAgICAgLy8gcmV0dXJuIGFuIE5MRFJlc3VsdCB3aXRoIGZvcm1hdHRlZFN0cmluZyBcIkludmFsaWQgZGF0ZVwiIGFuZCBhblxuICAgICAgICAvLyBpbnZhbGlkIG1vbWVudCwgbm90IGFuIGV4Y2VwdGlvbi4gQ2hlY2tpbmcgaXNWYWxpZCgpIGV4cGxpY2l0bHkgaXNcbiAgICAgICAgLy8gd2hhdCBhY3R1YWxseSBjYXRjaGVzIHRoYXQgY2FzZSAodGhlIHRyeS9jYXRjaCBiZWxvdyBpcyBvbmx5IGFcbiAgICAgICAgLy8gc2FmZXR5IG5ldCBmb3IgZ2VudWluZWx5IHVuZXhwZWN0ZWQgZXJyb3JzIGVsc2V3aGVyZSBpbiB0aGlzIG1ldGhvZCkuXG4gICAgICAgIGlmICghcGFyc2VkVGltZS5tb21lbnQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlZFRpbWUuZm9ybWF0dGVkU3RyaW5nO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRlUmFuZ2UgPSB0aGlzLnBsdWdpbi5wYXJzZURhdGVSYW5nZShzdWdnZXN0aW9uKTtcbiAgICAgIGlmIChkYXRlUmFuZ2UpIHtcbiAgICAgICAgaWYgKGRhdGVSYW5nZS5kYXRlTGlzdCAmJiBkYXRlUmFuZ2UuZGF0ZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiBkYXRlUmFuZ2UuZGF0ZUxpc3QubWFwKG0gPT4gbS5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KSkuam9pbignLCAnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IGRhdGVSYW5nZS5zdGFydE1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZGF0ZVJhbmdlLmVuZE1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgY29uc3QgcHJpbWFyeUxhbmcgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXNbMF0gfHwgJ2VuJztcbiAgICAgICAgY29uc3QgdG9UcmFuc2xhdGlvbiA9IHQoXCJ0b1wiLCBwcmltYXJ5TGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICAgICAgcmV0dXJuIGAke3N0YXJ0Rm9ybWF0dGVkfSAke3RvVHJhbnNsYXRpb259ICR7ZW5kRm9ybWF0dGVkfWA7XG4gICAgICB9XG5cbiAgICAgIGxldCBoYXNUaW1lID0gdGhpcy5wbHVnaW4uaGFzVGltZUNvbXBvbmVudChzdWdnZXN0aW9uKTtcbiAgICAgIGlmICghaGFzVGltZSkge1xuICAgICAgICBjb25zdCBleHBsaWNpdFRpbWVSZWdleCA9IC9cXGQrXFxzKihtaW58bWluc3xtaW51dGV8bWludXRlc3xofGhvdXJ8aG91cnN8aGV1cmV8aGV1cmVzfHNlY3xzZWNvbmR8c2Vjb25kcykoPyFbYS16XSkvaTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb24ubWF0Y2goZXhwbGljaXRUaW1lUmVnZXgpKSB7XG4gICAgICAgICAgaGFzVGltZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyc2VkUmVzdWx0ID0gdGhpcy5wbHVnaW4ucGFyc2VEYXRlKHN1Z2dlc3Rpb24pO1xuICAgICAgaWYgKCFwYXJzZWRSZXN1bHQubW9tZW50LmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNUaW1lKSB7XG4gICAgICAgIGNvbnN0IGlzVG9kYXkgPSBwYXJzZWRSZXN1bHQubW9tZW50LmlzU2FtZShtb21lbnQoKSwgJ2RheScpO1xuICAgICAgICBjb25zdCBpc1JlbGF0aXZlU2hvcnRUZXJtID0gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHN1Z2dlc3Rpb24sIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gICAgICAgIGNvbnN0IHNob3VsZE9taXREYXRlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlICYmIGlzVG9kYXkgJiYgaXNSZWxhdGl2ZVNob3J0VGVybTtcbiAgICAgICAgY29uc3QgdGltZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgIGlmIChzaG91bGRPbWl0RGF0ZSkge1xuICAgICAgICAgIHJldHVybiB0aW1lUGFydDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgIHJldHVybiBgJHtkYXRlUGFydH0gJHt0aW1lUGFydH1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlZFJlc3VsdC5mb3JtYXR0ZWRTdHJpbmc7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdEYXRlU3VnZ2VzdDogZmFpbGVkIHRvIHJlc29sdmUgYXV0b3N1Z2dlc3QgcHJldmlldycsIHsgc3VnZ2VzdGlvbiwgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gVXRpbGlzZXIgbCfDqWRpdGV1ciBkdSBjb250ZXh0ZSBzaSBkaXNwb25pYmxlLCBzaW5vbiBjaGVyY2hlciBsJ8OpZGl0ZXVyIGFjdGlmXG4gICAgbGV0IGVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHRoaXMuY29udGV4dD8uZWRpdG9yKSB7XG4gICAgICBlZGl0b3IgPSB0aGlzLmNvbnRleHQuZWRpdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICBlZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3IodGhpcy5hcHAud29ya3NwYWNlKTtcbiAgICB9XG5cbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluY2x1ZGVBbGlhcyA9IGV2ZW50LnNoaWZ0S2V5O1xuICAgIC8vIFdoZW4ga2VlcGluZyB0aGUgdHlwZWQgdGV4dCBhcyBhbGlhcyAoU2hpZnQpLCBwcmVmZXIgd2hhdCB0aGUgdXNlclxuICAgIC8vIGFjdHVhbGx5IHR5cGVkIG92ZXIgdGhlIHN1Z2dlc3Rpb24ncyBjYW5vbmljYWwgZGljdGlvbmFyeSBjYXNpbmdcbiAgICAvLyAoZS5nLiBGcmVuY2ggXCJkZW1haW5cIiB2cyB0aGUgZGljdGlvbmFyeSdzIFwiRGVtYWluXCIpIC0tIGJ1dCBvbmx5IHdoZW5cbiAgICAvLyB0aGV5IHR5cGVkIHRoZSBjb21wbGV0ZSB3b3JkL3BocmFzZSwganVzdCBpbiBhIGRpZmZlcmVudCBjYXNpbmc7IGFcbiAgICAvLyBwYXJ0aWFsIHF1ZXJ5IChcImRlbWFpXCIpIHdvdWxkIG1ha2UgZm9yIGEgYnJva2VuLWxvb2tpbmcgYWxpYXMsIHNvXG4gICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBmdWxsIHN1Z2dlc3Rpb24gdGV4dCBpbiB0aGF0IGNhc2UuIExhbmd1YWdlLWFnbm9zdGljOlxuICAgIC8vIHRoaXMgb25seSBjb21wYXJlcyB0aGUgdHlwZWQgdGV4dCB0byB0aGUgc3VnZ2VzdGlvbiB0ZXh0LlxuICAgIGNvbnN0IHR5cGVkUXVlcnkgPSB0aGlzLmNvbnRleHQ/LnF1ZXJ5O1xuICAgIGNvbnN0IGFsaWFzVGV4dCA9ICh0eXBlZFF1ZXJ5ICYmIHR5cGVkUXVlcnkudG9Mb3dlckNhc2UoKSA9PT0gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpKVxuICAgICAgPyB0eXBlZFF1ZXJ5XG4gICAgICA6IHN1Z2dlc3Rpb247XG4gICAgbGV0IGRhdGVTdHIgPSBcIlwiO1xuICAgIGxldCBtYWtlSW50b0xpbmsgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvc3VnZ2VzdFRvZ2dsZUxpbms7XG5cbiAgICAvLyBXZSBjaGVjayBpZiB0aGUgaW5wdXQgY29udGFpbnMgYSB0aW1lIGNvbXBvbmVudCB1c2luZyB0aGUgcGFyc2VyIGxvZ2ljLlxuICAgIGxldCBoYXNUaW1lID0gdGhpcy5wbHVnaW4uaGFzVGltZUNvbXBvbmVudChzdWdnZXN0aW9uKTtcblxuICAgIC8vIC0tLSBDT1JSRUNUSU9OIE1VTFRJTEFOR1VFIC0tLVxuICAgIC8vIFNpIGxlIHBhcnNlciBuJ2EgcGFzIGTDqXRlY3TDqSBsJ2hldXJlIChzb3V2ZW50IGxlIGNhcyBlbiBhbmdsYWlzIHBvdXIgXCJpbiAyIG1pbnV0ZXNcIiksXG4gICAgLy8gb24gZm9yY2UgbGEgZMOpdGVjdGlvbiBzaSBvbiB2b2l0IGRlcyBtb3RzIGNsw6lzIGV4cGxpY2l0ZXMgKG1pbiwgaG91ciwgZXRjKS5cbiAgICAvLyBJTVBPUlRBTlQ6IE5lIHBhcyBtYXRjaGVyIFwibVwiIGRhbnMgXCJtb250aFwiIC0gdsOpcmlmaWVyIHF1ZSBjJ2VzdCBiaWVuIHVuIG1vdCBkZSB0ZW1wc1xuICAgIGlmICghaGFzVGltZSkge1xuICAgICAgLy8gUmVnZXggcG91ciBkw6l0ZWN0ZXIgdW4gY2hpZmZyZSBzdWl2aSBkZSBtaW4vaG91ci9oZXVyZS9oIChtYWlzIHBhcyBcIm1cIiBzZXVsIHF1aSBwb3VycmFpdCDDqnRyZSBcIm1vbnRoXCIpXG4gICAgICAvLyBPbiB2w6lyaWZpZSBxdWUgXCJtXCIgZXN0IHN1aXZpIGRlIFwiaW5cIiwgXCJpbnNcIiwgb3UgZXN0IGVuIGZpbiBkZSBtb3QsIGV0IHBhcyBcIm9udGhcIiAobW9udGgpXG4gICAgICBjb25zdCBleHBsaWNpdFRpbWVSZWdleCA9IC9cXGQrXFxzKihtaW58bWluc3xtaW51dGV8bWludXRlc3xofGhvdXJ8aG91cnN8aGV1cmV8aGV1cmVzfHNlY3xzZWNvbmR8c2Vjb25kcykoPyFbYS16XSkvaTtcbiAgICAgIGlmIChzdWdnZXN0aW9uLm1hdGNoKGV4cGxpY2l0VGltZVJlZ2V4KSkge1xuICAgICAgICBoYXNUaW1lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25Jc1RpbWUoc3VnZ2VzdGlvbikpIHtcbiAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gc3VnZ2VzdGlvbi5zdWJzdHJpbmcodGhpcy5nZXRUaW1lUHJlZml4TGVuZ3RoKHN1Z2dlc3Rpb24pKTtcbiAgICAgIGRhdGVTdHIgPSB0aGlzLnBsdWdpbi5wYXJzZVRpbWUodGltZVBhcnQpLmZvcm1hdHRlZFN0cmluZztcbiAgICAgIG1ha2VJbnRvTGluayA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWw6lyaWZpZXIgZCdhYm9yZCBzaSBjJ2VzdCB1bmUgcGxhZ2UgZGUgZGF0ZXNcbiAgICAgIGNvbnN0IGRhdGVSYW5nZSA9IHRoaXMucGx1Z2luLnBhcnNlRGF0ZVJhbmdlKHN1Z2dlc3Rpb24pO1xuICAgICAgXG4gICAgICBpZiAoZGF0ZVJhbmdlKSB7XG4gICAgICAgIC8vIEMnZXN0IHVuZSBwbGFnZSBkZSBkYXRlc1xuICAgICAgICAvLyBTaSBvbiBhIHVuZSBsaXN0ZSBkZSBkYXRlcywgZ8OpbsOpcmVyIHVuZSBsaXN0ZSBkZSBsaWVucyBhdSBsaWV1IGQndW5lIHBsYWdlXG4gICAgICAgIGlmIChkYXRlUmFuZ2UuZGF0ZUxpc3QgJiYgZGF0ZVJhbmdlLmRhdGVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBkYXRlTGlua3MgPSBkYXRlUmFuZ2UuZGF0ZUxpc3QubWFwKG0gPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gbS5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgICAgIHJldHVybiBtYWtlSW50b0xpbmsgXG4gICAgICAgICAgICAgID8gZ2VuZXJhdGVNYXJrZG93bkxpbmsodGhpcy5hcHAsIGZvcm1hdHRlZClcbiAgICAgICAgICAgICAgOiBmb3JtYXR0ZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGF0ZVN0ciA9IGRhdGVMaW5rcy5qb2luKCcsICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIHZlcnMgbCdhbmNpZW4gY29tcG9ydGVtZW50IChwbGFnZSlcbiAgICAgICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IGRhdGVSYW5nZS5zdGFydE1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgICBjb25zdCBlbmRGb3JtYXR0ZWQgPSBkYXRlUmFuZ2UuZW5kTW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIE9idGVuaXIgbGEgdHJhZHVjdGlvbiBkZSBcInRvXCIgc2Vsb24gbGEgbGFuZ3VlIHByaW5jaXBhbGVcbiAgICAgICAgICBjb25zdCBwcmltYXJ5TGFuZyA9IHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlc1swXSB8fCAnZW4nO1xuICAgICAgICAgIGNvbnN0IHRvVHJhbnNsYXRpb24gPSB0KFwidG9cIiwgcHJpbWFyeUxhbmcpLnNwbGl0KCd8JylbMF07IC8vIFByZW5kcmUgbGEgcHJlbWnDqHJlIHZhcmlhbnRlXG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKG1ha2VJbnRvTGluaykge1xuICAgICAgICAgICAgZGF0ZVN0ciA9IGdlbmVyYXRlTWFya2Rvd25MaW5rKFxuICAgICAgICAgICAgICB0aGlzLmFwcCxcbiAgICAgICAgICAgICAgc3RhcnRGb3JtYXR0ZWQsXG4gICAgICAgICAgICAgIGluY2x1ZGVBbGlhcyA/IGFsaWFzVGV4dCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgKSArIGAgJHt0b1RyYW5zbGF0aW9ufSBgICsgZ2VuZXJhdGVNYXJrZG93bkxpbmsoXG4gICAgICAgICAgICAgIHRoaXMuYXBwLFxuICAgICAgICAgICAgICBlbmRGb3JtYXR0ZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGVTdHIgPSBgJHtzdGFydEZvcm1hdHRlZH0gJHt0b1RyYW5zbGF0aW9ufSAke2VuZEZvcm1hdHRlZH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtYWtlSW50b0xpbmsgPSBmYWxzZTsgLy8gRMOpasOgIGfDqXLDqSBjaS1kZXNzdXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFJlc3VsdCA9IHRoaXMucGx1Z2luLnBhcnNlRGF0ZShzdWdnZXN0aW9uKTtcblxuICAgICAgICAvLyAtLS0gT1BUSU1JU0FUSU9OIDogT21ldHRyZSBsYSBkYXRlIHBvdXIgZXhwcmVzc2lvbnMgcmVsYXRpdmVzIGNvdXJ0ZXMgYXVqb3VyZCdodWkgLS0tXG4gICAgICAgIGNvbnN0IGlzVG9kYXkgPSBwYXJzZWRSZXN1bHQubW9tZW50LmlzU2FtZShtb21lbnQoKSwgJ2RheScpO1xuICAgICAgICBjb25zdCBpc1JlbGF0aXZlU2hvcnRUZXJtID0gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHN1Z2dlc3Rpb24sIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gICAgICAgIGNvbnN0IHNob3VsZE9taXREYXRlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlICYmIGlzVG9kYXkgJiYgaXNSZWxhdGl2ZVNob3J0VGVybSAmJiBoYXNUaW1lO1xuXG4gICAgICAgIC8vIC0tLSBIWUJSSUQgTElOSyBMT0dJQyBTVEFSVCAtLS1cbiAgICAgICAgLy8gSWYgYSB0aW1lIGlzIGRldGVjdGVkIEFORCBsaW5raW5nIGlzIGVuYWJsZWQsIHdlIHNwbGl0IHRoZSBsaW5rLlxuICAgICAgICAvLyBFeHBlY3RlZCByZXN1bHQ6IFtbWVlZWS1NTS1ERF1dIEhIOm1tXG4gICAgICAgIGlmIChoYXNUaW1lICYmIG1ha2VJbnRvTGluaykge1xuICAgICAgICAgIGlmIChzaG91bGRPbWl0RGF0ZSkge1xuICAgICAgICAgICAgLy8gQ0FTIE9QVElNSVPDiSA6IEp1c3RlIGwnaGV1cmUgcG91ciBcImRhbnMgWCBtaW4vaGV1cmVzXCIgYXVqb3VyZCdodWlcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gcGFyc2VkUmVzdWx0Lm1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZUZvcm1hdCB8fCBcIkhIOm1tXCIpO1xuICAgICAgICAgICAgZGF0ZVN0ciA9IHRpbWVQYXJ0O1xuICAgICAgICAgICAgbWFrZUludG9MaW5rID0gZmFsc2U7IC8vIFBhcyBkZSBsaWVuIG7DqWNlc3NhaXJlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIDEuIEZvcm1hdCB0aGUgZGF0ZSBwYXJ0XG4gICAgICAgICAgICBjb25zdCBkYXRlUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIDIuIEZvcm1hdCB0aGUgdGltZSBwYXJ0IChmYWxsYmFjayB0byBISDptbSBpZiBub3Qgc2V0KVxuICAgICAgICAgICAgY29uc3QgdGltZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG5cbiAgICAgICAgICAgIC8vIDMuIEdlbmVyYXRlIHRoZSBtYXJrZG93biBsaW5rIE9OTFkgZm9yIHRoZSBkYXRlIHBhcnRcbiAgICAgICAgICAgIGRhdGVTdHIgPSBnZW5lcmF0ZU1hcmtkb3duTGluayhcbiAgICAgICAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgICAgICAgIGRhdGVQYXJ0LFxuICAgICAgICAgICAgICBpbmNsdWRlQWxpYXMgPyBhbGlhc1RleHQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICkgKyBcIiBcIiArIHRpbWVQYXJ0OyAvLyBBcHBlbmQgdGltZSBhcyBwbGFpbiB0ZXh0XG5cbiAgICAgICAgICAgIC8vIDQuIERpc2FibGUgc3RhbmRhcmQgbGlua2luZyBzaW5jZSB3ZSBjb25zdHJ1Y3RlZCBpdCBtYW51YWxseSBhYm92ZVxuICAgICAgICAgICAgbWFrZUludG9MaW5rID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGhhc1RpbWUgJiYgIW1ha2VJbnRvTGluaykge1xuICAgICAgICAgIC8vIE3Dqm1lIGxvZ2lxdWUgc2kgcGFzIGRlIGxpZW4gbWFpcyBhdmVjIGhldXJlXG4gICAgICAgICAgaWYgKHNob3VsZE9taXREYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQgfHwgXCJISDptbVwiKTtcbiAgICAgICAgICAgIGRhdGVTdHIgPSB0aW1lUGFydDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGF0ZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgICAgY29uc3QgdGltZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBkYXRlU3RyID0gYCR7ZGF0ZVBhcnR9ICR7dGltZVBhcnR9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3RhbmRhcmQgYmVoYXZpb3IgZm9yIGRhdGVzIHdpdGhvdXQgdGltZSAoZS5nLiwgQHRvbW9ycm93KVxuICAgICAgICAgIGRhdGVTdHIgPSBwYXJzZWRSZXN1bHQuZm9ybWF0dGVkU3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIC8vIC0tLSBIWUJSSUQgTElOSyBMT0dJQyBFTkQgLS0tXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1ha2VJbnRvTGluaykge1xuICAgICAgZGF0ZVN0ciA9IGdlbmVyYXRlTWFya2Rvd25MaW5rKFxuICAgICAgICB0aGlzLmFwcCxcbiAgICAgICAgZGF0ZVN0cixcbiAgICAgICAgaW5jbHVkZUFsaWFzID8gYWxpYXNUZXh0IDogdW5kZWZpbmVkXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb250ZXh0KSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0RhdGVTdWdnZXN0OiBjb250ZXh0IGlzIHVuZGVmaW5lZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBlZGl0b3IucmVwbGFjZVJhbmdlKGRhdGVTdHIsIHRoaXMuY29udGV4dC5zdGFydCwgdGhpcy5jb250ZXh0LmVuZCk7XG5cbiAgICAvLyBFbnJlZ2lzdHJlciBsYSBzw6lsZWN0aW9uIGRhbnMgbCdoaXN0b3JpcXVlIChkZSBtYW5pw6hyZSBhc3luY2hyb25lKVxuICAgIGlmICh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVTbWFydFN1Z2dlc3Rpb25zICYmIFxuICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVIaXN0b3J5U3VnZ2VzdGlvbnMgJiYgXG4gICAgICAgIHRoaXMucGx1Z2luLmhpc3RvcnlNYW5hZ2VyKSB7XG4gICAgICB0aGlzLnBsdWdpbi5oaXN0b3J5TWFuYWdlci5yZWNvcmRTZWxlY3Rpb24oc3VnZ2VzdGlvbikuY2F0Y2goX2VyciA9PiB7XG4gICAgICAgIC8vIElnbm9yZXIgbGVzIGVycmV1cnMgc2lsZW5jaWV1c2VtZW50XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblRyaWdnZXIoXG4gICAgY3Vyc29yOiBFZGl0b3JQb3NpdGlvbixcbiAgICBlZGl0b3I6IEVkaXRvcixcbiAgICBfZmlsZTogVEZpbGVcbiAgKTogRWRpdG9yU3VnZ2VzdFRyaWdnZXJJbmZvIHtcbiAgICBpZiAoIXRoaXMucGx1Z2luLnNldHRpbmdzLmlzQXV0b3N1Z2dlc3RFbmFibGVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlnZ2VyUGhyYXNlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZTtcbiAgICBjb25zdCBzdGFydFBvcyA9IHRoaXMuY29udGV4dD8uc3RhcnQgfHwge1xuICAgICAgbGluZTogY3Vyc29yLmxpbmUsXG4gICAgICBjaDogY3Vyc29yLmNoIC0gdHJpZ2dlclBocmFzZS5sZW5ndGgsXG4gICAgfTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gZWRpdG9yLmdldFJhbmdlKHN0YXJ0UG9zLCBjdXJzb3IpO1xuXG4gICAgaWYgKCFxdWVyeS5zdGFydHNXaXRoKHRyaWdnZXJQaHJhc2UpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVjZWRpbmdDaGFyID0gZWRpdG9yLmdldFJhbmdlKFxuICAgICAge1xuICAgICAgICBsaW5lOiBzdGFydFBvcy5saW5lLFxuICAgICAgICBjaDogc3RhcnRQb3MuY2ggLSAxLFxuICAgICAgfSxcbiAgICAgIHN0YXJ0UG9zXG4gICAgKTtcblxuICAgIC8vIFNob3J0LWNpcmN1aXQgaWYgYEBgIGFzIGEgcGFydCBvZiBhIHdvcmQgKGUuZy4gcGFydCBvZiBhbiBlbWFpbCBhZGRyZXNzKVxuICAgIGlmIChwcmVjZWRpbmdDaGFyICYmIC9bYGEtekEtWjAtOV0vLnRlc3QocHJlY2VkaW5nQ2hhcikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogc3RhcnRQb3MsXG4gICAgICBlbmQ6IGN1cnNvcixcbiAgICAgIHF1ZXJ5OiBlZGl0b3IuZ2V0UmFuZ2Uoc3RhcnRQb3MsIGN1cnNvcikuc3Vic3RyaW5nKHRyaWdnZXJQaHJhc2UubGVuZ3RoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1Z2dlc3Rpb25Jc1RpbWUoc3VnZ2VzdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcy5zb21lKGxhbmcgPT4ge1xuICAgICAgY29uc3QgdGltZVdvcmQgPSB0KFwidGltZVwiLCBsYW5nKS5zcGxpdCgnfCcpWzBdO1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb24uc3RhcnRzV2l0aChgJHt0aW1lV29yZH06YCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBMZW5ndGggb2YgdGhlIFwiPFRpbWVXb3JkPjpcIiBwcmVmaXggdGhhdCBnZXRUaW1lU3VnZ2VzdGlvbnMoKSBidWlsZHMgaXRzXG4gIC8vIHN1Z2dlc3Rpb25zIHdpdGgsIHNvIGNhbGxlcnMgY2FuIHN0cmlwIGV4YWN0bHkgdGhhdCBtYW55IGNoYXJhY3RlcnNcbiAgLy8gaW5zdGVhZCBvZiBhIGhhcmRjb2RlZCBsZW5ndGggLS0gXCJUaW1lOlwiIGlzIDUgY2hhcnMgb25seSBpbiBFbmdsaXNoIGFuZFxuICAvLyBhIGZldyBvdGhlcnMgYnkgY29pbmNpZGVuY2UgKGUuZy4gRnJlbmNoIFwiaGV1cmU6XCIgaXMgNiwgSXRhbGlhbiBcIm9yYTpcIlxuICAvLyBpcyA0LCBDaGluZXNlIFwi5pmC6ZaTOlwiIGlzIDMgVVRGLTE2IGNvZGUgdW5pdHMpLlxuICBwcm90ZWN0ZWQgZ2V0VGltZVByZWZpeExlbmd0aChzdWdnZXN0aW9uOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXMpIHtcbiAgICAgIGNvbnN0IHRpbWVXb3JkID0gdChcInRpbWVcIiwgbGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICAgIGNvbnN0IHByZWZpeCA9IGAke3RpbWVXb3JkfTpgO1xuICAgICAgaWYgKHN1Z2dlc3Rpb24uc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgIHJldHVybiBwcmVmaXgubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHByb3RlY3RlZCB1bmlxdWUoc3VnZ2VzdGlvbnM6IHN0cmluZ1tdKSA6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gc3VnZ2VzdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0sIHBvcykge1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zLmluZGV4T2YoaXRlbSkgPT0gcG9zO1xuICAgIH0pXG4gIH1cbn0iLCJpbXBvcnQgeyBhZGp1c3RDdXJzb3IsIGdldFNlbGVjdGVkVGV4dCwgc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlLCBnZXRBY3RpdmVFZGl0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuL21haW5cIjtcbmltcG9ydCB0IGZyb20gXCIuL2xhbmcvaGVscGVyXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuL3dpbmRvdy1tb21lbnRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnNlQ29tbWFuZChwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzLCBtb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgeyB3b3Jrc3BhY2UgfSA9IHBsdWdpbi5hcHA7XG4gIGNvbnN0IGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcih3b3Jrc3BhY2UpO1xuXG4gIC8vIEwnw6lkaXRldXIgcG91cnJhaXQgbmUgcGFzIMOqdHJlIGRpc3BvbmlibGUgKHBhciBleGVtcGxlIGRhbnMgdW5lIHZ1ZSBub24tbWFya2Rvd24pXG4gIGlmICghZWRpdG9yKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNlbGVjdGVkVGV4dCA9IGdldFNlbGVjdGVkVGV4dChlZGl0b3IpO1xuICAvLyBDYXB0dXJlZCBhZnRlciBnZXRTZWxlY3RlZFRleHQoKTogd2hlbiBub3RoaW5nIHdhcyBzZWxlY3RlZCwgdGhhdCBjYWxsXG4gIC8vIGV4cGFuZHMgdGhlIHNlbGVjdGlvbiB0byB0aGUgd29yZCBhdCB0aGUgY3Vyc29yLCB3aGljaCBtb3ZlcyB3aGVyZSB0aGVcbiAgLy8gc2VsZWN0aW9uIGFjdHVhbGx5IGVuZHMuIENhcHR1cmluZyB0aGUgY3Vyc29yIGJlZm9yZWhhbmQgd291bGQgYW5jaG9yXG4gIC8vIGFkanVzdEN1cnNvcigpJ3Mgb2Zmc2V0IG1hdGggdG8gdGhlIHByZS1leHBhbnNpb24gcG9zaXRpb24gaW5zdGVhZCBvZlxuICAvLyB0aGUgZWRnZSBvZiB0aGUgdGV4dCB0aGF0J3MgYWJvdXQgdG8gYmUgcmVwbGFjZWQuXG4gIGNvbnN0IGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3IoXCJ0b1wiKTtcblxuICAvLyBWw6lyaWZpZXIgZCdhYm9yZCBzaSBjJ2VzdCB1bmUgcGxhZ2UgZGUgZGF0ZXNcbiAgY29uc3QgZGF0ZVJhbmdlID0gcGx1Z2luLnBhcnNlRGF0ZVJhbmdlKHNlbGVjdGVkVGV4dCk7XG4gIGlmIChkYXRlUmFuZ2UpIHtcbiAgICAvLyBDJ2VzdCB1bmUgcGxhZ2UgZGUgZGF0ZXNcbiAgICBsZXQgbmV3U3RyID0gXCJcIjtcbiAgICBcbiAgICAvLyBTaSBvbiBhIHVuZSBsaXN0ZSBkZSBkYXRlcywgZ8OpbsOpcmVyIHVuZSBsaXN0ZSBkZSBsaWVucyBhdSBsaWV1IGQndW5lIHBsYWdlXG4gICAgaWYgKGRhdGVSYW5nZS5kYXRlTGlzdCAmJiBkYXRlUmFuZ2UuZGF0ZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGF0ZUxpbmtzID0gZGF0ZVJhbmdlLmRhdGVMaXN0Lm1hcChtID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gbS5mb3JtYXQocGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgIGlmIChtb2RlID09IFwicmVwbGFjZVwiKSB7XG4gICAgICAgICAgcmV0dXJuIGBbWyR7Zm9ybWF0dGVkfV1dYDtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IFwibGlua1wiKSB7XG4gICAgICAgICAgcmV0dXJuIGBbJHtmb3JtYXR0ZWR9XSgke2Zvcm1hdHRlZH0pYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBcImNsZWFuXCIgYW5kIFwidGltZVwiIGJvdGggcmVzb2x2ZSB0byB0aGUgcGxhaW4gZm9ybWF0dGVkIGRhdGUgaGVyZTpcbiAgICAgICAgICAvLyBlYWNoIGRhdGVMaXN0IGVudHJ5IGlzIGEgd2hvbGUgY2FsZW5kYXIgZGF5IHdpdGggbm8gcGFyc2VkIHRpbWVcbiAgICAgICAgICAvLyBjb21wb25lbnQsIHNvIFwidGltZVwiIGZvciBhIHJhbmdlIG1lYW5zIHRoZSBzYW1lIGFzIFwiY2xlYW5cIiAoc2VlXG4gICAgICAgICAgLy8gdGhlIGlkZW50aWNhbCBtb2RlID09IFwidGltZVwiIGNhc2UgaW4gdGhlIG5vbi1saXN0IGJyYW5jaCBiZWxvdykuXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBuZXdTdHIgPSBkYXRlTGlua3Muam9pbignLCAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgdmVycyBsJ2FuY2llbiBjb21wb3J0ZW1lbnQgKHBsYWdlKVxuICAgICAgY29uc3Qgc3RhcnRGb3JtYXR0ZWQgPSBkYXRlUmFuZ2Uuc3RhcnRNb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZGF0ZVJhbmdlLmVuZE1vbWVudC5mb3JtYXQocGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICBcbiAgICAgIC8vIE9idGVuaXIgbGEgdHJhZHVjdGlvbiBkZSBcInRvXCIgc2Vsb24gbGEgbGFuZ3VlIHByaW5jaXBhbGVcbiAgICAgIGNvbnN0IHByaW1hcnlMYW5nID0gcGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlc1swXSB8fCAnZW4nO1xuICAgICAgY29uc3QgdG9UcmFuc2xhdGlvbiA9IHQoXCJ0b1wiLCBwcmltYXJ5TGFuZykuc3BsaXQoJ3wnKVswXTsgLy8gUHJlbmRyZSBsYSBwcmVtacOocmUgdmFyaWFudGVcbiAgICAgIFxuICAgICAgaWYgKG1vZGUgPT0gXCJyZXBsYWNlXCIpIHtcbiAgICAgICAgLy8gR8OpbsOpcmVyIGRlcyBsaWVucyBwb3VyIGxhIHBsYWdlIDogW1tzdGFydF1dIHRvIFtbZW5kXV1cbiAgICAgICAgbmV3U3RyID0gYFtbJHtzdGFydEZvcm1hdHRlZH1dXSAke3RvVHJhbnNsYXRpb259IFtbJHtlbmRGb3JtYXR0ZWR9XV1gO1xuICAgICAgfSBlbHNlIGlmIChtb2RlID09IFwibGlua1wiKSB7XG4gICAgICAgIC8vIExpZW4gTWFya2Rvd24gc3RhbmRhcmRcbiAgICAgICAgbmV3U3RyID0gYFske3NlbGVjdGVkVGV4dH1dKCR7ZGF0ZVJhbmdlLmZvcm1hdHRlZFN0cmluZ30pYDtcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBcImNsZWFuXCIpIHtcbiAgICAgICAgLy8gVGV4dGUgYnJ1dCBzYW5zIGxpZW5cbiAgICAgICAgbmV3U3RyID0gYCR7c3RhcnRGb3JtYXR0ZWR9ICR7dG9UcmFuc2xhdGlvbn0gJHtlbmRGb3JtYXR0ZWR9YDtcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBcInRpbWVcIikge1xuICAgICAgICAvLyBQYXMgZCdoZXVyZSBwb3VyIGxlcyBwbGFnZXNcbiAgICAgICAgbmV3U3RyID0gYCR7c3RhcnRGb3JtYXR0ZWR9ICR7dG9UcmFuc2xhdGlvbn0gJHtlbmRGb3JtYXR0ZWR9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24obmV3U3RyKTtcbiAgICBhZGp1c3RDdXJzb3IoZWRpdG9yLCBjdXJzb3IsIG5ld1N0ciwgc2VsZWN0ZWRUZXh0KTtcbiAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTaW5vbiwgdHJhaXRlciBjb21tZSB1bmUgZGF0ZSBub3JtYWxlXG4gIGNvbnN0IGRhdGUgPSBwbHVnaW4ucGFyc2VEYXRlKHNlbGVjdGVkVGV4dCk7XG5cbiAgaWYgKCFkYXRlLm1vbWVudC5pc1ZhbGlkKCkpIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gICAgZWRpdG9yLnNldEN1cnNvcih7XG4gICAgICBsaW5lOiBjdXJzb3IubGluZSxcbiAgICAgIGNoOiBjdXJzb3IuY2gsXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gLS0tIE1PRElGSUNBVElPTiBJTlRFTExJR0VOVEUgVjAuOSAtLS1cbiAgLy8gT24gdsOpcmlmaWUgc2kgdW5lIGhldXJlIGVzdCBwcsOpc2VudGUgZGFucyBsZSB0ZXh0ZSBzw6lsZWN0aW9ubsOpXG4gIGNvbnN0IGhhc1RpbWUgPSBwbHVnaW4uaGFzVGltZUNvbXBvbmVudChzZWxlY3RlZFRleHQpO1xuXG4gIC8vIC0tLSBPUFRJTUlTQVRJT04gOiBPbWV0dHJlIGxhIGRhdGUgcG91ciBleHByZXNzaW9ucyByZWxhdGl2ZXMgY291cnRlcyBhdWpvdXJkJ2h1aSAtLS1cbiAgY29uc3QgaXNUb2RheSA9IGRhdGUubW9tZW50LmlzU2FtZShtb21lbnQoKSwgJ2RheScpO1xuICBjb25zdCBpc1JlbGF0aXZlU2hvcnRUZXJtID0gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHNlbGVjdGVkVGV4dCwgcGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gIGNvbnN0IHNob3VsZE9taXREYXRlID0gcGx1Z2luLnNldHRpbmdzLm9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZSAmJiBpc1RvZGF5ICYmIGlzUmVsYXRpdmVTaG9ydFRlcm0gJiYgaGFzVGltZTtcblxuICBsZXQgbmV3U3RyID0gXCJcIjtcblxuICBpZiAobW9kZSA9PSBcInJlcGxhY2VcIikge1xuICAgIC8vIEMnZXN0IGxlIG1vZGUgcGFyIGTDqWZhdXQgKENyZWF0ZSBMaW5rKVxuICAgIGlmIChoYXNUaW1lKSB7XG4gICAgICAgIGlmIChzaG91bGRPbWl0RGF0ZSkge1xuICAgICAgICAgICAgLy8gQ0FTIE9QVElNSVPDiSA6IEp1c3RlIGwnaGV1cmUgcG91ciBcImRhbnMgWCBtaW4vaGV1cmVzXCIgYXVqb3VyZCdodWlcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gZGF0ZS5tb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBuZXdTdHIgPSB0aW1lUGFydDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENBUyBIWUJSSURFIDogW1tEYXRlXV0gSGV1cmVcbiAgICAgICAgICAgIGNvbnN0IGRhdGVQYXJ0ID0gZGF0ZS5tb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgICAgLy8gU2kgbCd1dGlsaXNhdGV1ciBuJ2EgcGFzIG1pcyBkZSBmb3JtYXQgZCdoZXVyZSwgb24gZm9yY2UgSEg6bW0gcGFyIHPDqWN1cml0w6lcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gZGF0ZS5tb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIG5ld1N0ciA9IGBbWyR7ZGF0ZVBhcnR9XV0gJHt0aW1lUGFydH1gO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ0FTIENMQVNTSVFVRSA6IFtbRGF0ZV1dXG4gICAgICAgIG5ld1N0ciA9IGBbWyR7ZGF0ZS5mb3JtYXR0ZWRTdHJpbmd9XV1gO1xuICAgIH1cbiAgfSBlbHNlIGlmIChtb2RlID09IFwibGlua1wiKSB7XG4gICAgLy8gTGllbiBNYXJrZG93biBzdGFuZGFyZCBbdGV4dGVdKGRhdGUpXG4gICAgbmV3U3RyID0gYFske3NlbGVjdGVkVGV4dH1dKCR7ZGF0ZS5mb3JtYXR0ZWRTdHJpbmd9KWA7XG4gIH0gZWxzZSBpZiAobW9kZSA9PSBcImNsZWFuXCIpIHtcbiAgICAvLyBUZXh0ZSBicnV0IHNhbnMgbGllblxuICAgIG5ld1N0ciA9IGAke2RhdGUuZm9ybWF0dGVkU3RyaW5nfWA7XG4gIH0gZWxzZSBpZiAobW9kZSA9PSBcInRpbWVcIikge1xuICAgIC8vIEp1c3RlIGwnaGV1cmVcbiAgICBjb25zdCB0aW1lID0gcGx1Z2luLnBhcnNlVGltZShzZWxlY3RlZFRleHQpO1xuICAgIG5ld1N0ciA9IGAke3RpbWUuZm9ybWF0dGVkU3RyaW5nfWA7XG4gIH1cblxuICBlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihuZXdTdHIpO1xuICBhZGp1c3RDdXJzb3IoZWRpdG9yLCBjdXJzb3IsIG5ld1N0ciwgc2VsZWN0ZWRUZXh0KTtcbiAgZWRpdG9yLmZvY3VzKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRNb21lbnRDb21tYW5kKFxuICBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzLFxuICBkYXRlOiBEYXRlLFxuICBmb3JtYXQ6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IHsgd29ya3NwYWNlIH0gPSBwbHVnaW4uYXBwO1xuICBjb25zdCBlZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3Iod29ya3NwYWNlKTtcblxuICBpZiAoZWRpdG9yKSB7XG4gICAgZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24obW9tZW50KGRhdGUpLmZvcm1hdChmb3JtYXQpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm93Q29tbWFuZChwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzKTogdm9pZCB7XG4gIGNvbnN0IGZvcm1hdCA9IGAke3BsdWdpbi5zZXR0aW5ncy5mb3JtYXR9JHtwbHVnaW4uc2V0dGluZ3Muc2VwYXJhdG9yfSR7cGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXR9YDtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGluc2VydE1vbWVudENvbW1hbmQocGx1Z2luLCBkYXRlLCBmb3JtYXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudERhdGVDb21tYW5kKHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpOiB2b2lkIHtcbiAgY29uc3QgZm9ybWF0ID0gcGx1Z2luLnNldHRpbmdzLmZvcm1hdDtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGluc2VydE1vbWVudENvbW1hbmQocGx1Z2luLCBkYXRlLCBmb3JtYXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFRpbWVDb21tYW5kKHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpOiB2b2lkIHtcbiAgY29uc3QgZm9ybWF0ID0gcGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQ7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICBpbnNlcnRNb21lbnRDb21tYW5kKHBsdWdpbiwgZGF0ZSwgZm9ybWF0KTtcbn0iLCJpbXBvcnQgeyBQbHVnaW4sIG5vcm1hbGl6ZVBhdGggfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlFbnRyeSB7XG4gIGNvdW50OiBudW1iZXI7IC8vIE5vbWJyZSBkZSBmb2lzIHF1ZSBjZXR0ZSBzdWdnZXN0aW9uIGEgw6l0w6kgc8OpbGVjdGlvbm7DqWVcbiAgbGFzdFVzZWQ6IG51bWJlcjsgLy8gRGF0ZS5ub3coKSBkZSBsYSBkZXJuacOocmUgc8OpbGVjdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGlvbkhpc3Rvcnkge1xuICBbc3VnZ2VzdGlvbjogc3RyaW5nXTogSGlzdG9yeUVudHJ5O1xufVxuXG5jb25zdCBNQVhfSElTVE9SWV9TSVpFID0gMTAwOyAvLyBMaW1pdGUgZHUgbm9tYnJlIGQnZW50csOpZXMgZGFucyBsJ2hpc3RvcmlxdWVcbmNvbnN0IEhJU1RPUllfRklMRSA9IFwicGx1Z2lucy9ubGRhdGVzLXJldml2ZWQvaGlzdG9yeS5qc29uXCI7XG5jb25zdCBDTEVBTlVQX0lOVEVSVkFMID0gMzAwMDAwOyAvLyBOZXR0b3lhZ2UgcMOpcmlvZGlxdWUgdG91dGVzIGxlcyA1IG1pbnV0ZXNcblxuLy8gQSBzdWdnZXN0aW9uJ3MgcmFuayBpcyBmcmVxdWVuY3kgd2VpZ2h0ZWQgYnkgcmVjZW5jeSwgbm90IHJhdyBsaWZldGltZVxuLy8gY291bnQ6IHdpdGhvdXQgZGVjYXksIHNvbWV0aGluZyBzZWxlY3RlZCA1MCB0aW1lcyBzaXggbW9udGhzIGFnbyB3b3VsZFxuLy8gcGVybWFuZW50bHkgb3V0cmFuayBzb21ldGhpbmcgc2VsZWN0ZWQgMyB0aW1lcyB0aGlzIHdlZWssIGV2ZW4gdGhvdWdoXG4vLyB0aGUgbGF0dGVyIGlzIGNsZWFybHkgbW9yZSByZWxldmFudCAqbm93Ki4gSGFsdmluZyB0aGUgd2VpZ2h0IGV2ZXJ5XG4vLyBIQUxGX0xJRkVfTVMgb2YgaW5hY3Rpdml0eSBtZWFucyBldmVyeSByZXVzZSBcInJlZnJlc2hlc1wiIGFuIGVudHJ5LCB3aGlsZVxuLy8gZ2VudWluZWx5IHN0YWxlIGVudHJpZXMgZmFkZSBvdXQgaW5zdGVhZCBvZiBjYW1waW5nIHRoZSB0b3Agb2YgdGhlIGxpc3Rcbi8vIGZvcmV2ZXIuXG5jb25zdCBIQUxGX0xJRkVfTVMgPSAzMCAqIDI0ICogNjAgKiA2MCAqIDEwMDA7IC8vIDMwIGpvdXJzXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpc3RvcnlNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBwbHVnaW46IFBsdWdpbjtcbiAgcHJpdmF0ZSBoaXN0b3J5OiBTZWxlY3Rpb25IaXN0b3J5ID0ge307XG4gIHByaXZhdGUgaGlzdG9yeUxvYWRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGNhY2hlZFRvcFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGNhY2hlVmFsaWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjbGVhbnVwSW50ZXJ2YWw6IG51bWJlciB8IG51bGwgPSBudWxsOyAvLyBJRCBkZSBsJ2ludGVydmFsbGUgZGUgbmV0dG95YWdlXG5cbiAgY29uc3RydWN0b3IocGx1Z2luOiBQbHVnaW4pIHtcbiAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICB0aGlzLnN0YXJ0UGVyaW9kaWNDbGVhbnVwKCk7XG4gIH1cblxuICAvKipcbiAgICogRMOpbWFycmUgbGUgbmV0dG95YWdlIHDDqXJpb2RpcXVlIGRlIGwnaGlzdG9yaXF1ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydFBlcmlvZGljQ2xlYW51cCgpOiB2b2lkIHtcbiAgICAvLyBOZXR0b3llciB0b3V0ZXMgbGVzIDUgbWludXRlc1xuICAgIHRoaXMuY2xlYW51cEludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucGVyZm9ybVBlcmlvZGljQ2xlYW51cCgpO1xuICAgIH0sIENMRUFOVVBfSU5URVJWQUwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFycsOqdGUgbGUgbmV0dG95YWdlIHDDqXJpb2RpcXVlICjDoCBhcHBlbGVyIGxvcnMgZGUgbGEgZGVzdHJ1Y3Rpb24pXG4gICAqL1xuICBzdG9wUGVyaW9kaWNDbGVhbnVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsZWFudXBJbnRlcnZhbCAhPT0gbnVsbCkge1xuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5jbGVhbnVwSW50ZXJ2YWwpO1xuICAgICAgdGhpcy5jbGVhbnVwSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFZmZlY3R1ZSB1biBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgZGUgbCdoaXN0b3JpcXVlXG4gICAqIFLDqWR1aXQgbGEgdGFpbGxlIHNpIG7DqWNlc3NhaXJlIGV0IG5ldHRvaWUgbGVzIGVudHLDqWVzIHBldSB1dGlsaXPDqWVzXG4gICAqL1xuICBwcml2YXRlIHBlcmZvcm1QZXJpb2RpY0NsZWFudXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhpc3RvcnlMb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50U2l6ZSA9IE9iamVjdC5rZXlzKHRoaXMuaGlzdG9yeSkubGVuZ3RoO1xuICAgIFxuICAgIC8vIFNpIGwnaGlzdG9yaXF1ZSBkw6lwYXNzZSBsYSBsaW1pdGUsIGxlIHLDqWR1aXJlXG4gICAgaWYgKGN1cnJlbnRTaXplID4gTUFYX0hJU1RPUllfU0laRSkge1xuICAgICAgdGhpcy50cmltSGlzdG9yeSgpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBOZXR0b3lhZ2UgcMOpcmlvZGlxdWUgZGUgbCdoaXN0b3JpcXVlOiByw6lkdWl0IGRlICR7Y3VycmVudFNpemV9IMOgICR7T2JqZWN0LmtleXModGhpcy5oaXN0b3J5KS5sZW5ndGh9IGVudHLDqWVzYCk7XG4gICAgfVxuXG4gICAgLy8gTWV0dHJlIMOgIGpvdXIgbGUgY2FjaGUgZGVzIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRpdCB1biBoaXN0b3JpcXVlIGNoYXJnw6kgZGVwdWlzIGxlIGRpc3F1ZSB2ZXJzIGxlIGZvcm1hdCBhY3R1ZWwuXG4gICAqIExlcyBmaWNoaWVycyDDqWNyaXRzIHBhciB1bmUgdmVyc2lvbiBhbnTDqXJpZXVyZSBkdSBwbHVnaW4gc3RvY2tlbnQgdW5cbiAgICogc2ltcGxlIGNvbXB0ZXVyIChgeyBbc3VnZ2VzdGlvbl06IG51bWJlciB9YCkgYXUgbGlldSBkZVxuICAgKiBgeyBbc3VnZ2VzdGlvbl06IEhpc3RvcnlFbnRyeSB9YCAtLSBvbiBkb25uZSDDoCBjZXMgZW50csOpZXMgdW5cbiAgICogbGFzdFVzZWQgZGUgXCJtYWludGVuYW50XCIgcG91ciBuZSBwYXMgbGVzIGZhaXJlIGRpc3BhcmHDrnRyZVxuICAgKiBpbW3DqWRpYXRlbWVudCBkdSBjbGFzc2VtZW50IGxlIHRlbXBzIHF1J3VuIG5vdXZlbCB1c2FnZSBsZXMgcmFmcmHDrmNoaXNzZS5cbiAgICovXG4gIHByaXZhdGUgbWlncmF0ZUhpc3RvcnkocmF3OiB1bmtub3duKTogU2VsZWN0aW9uSGlzdG9yeSB7XG4gICAgY29uc3QgbWlncmF0ZWQ6IFNlbGVjdGlvbkhpc3RvcnkgPSB7fTtcbiAgICAvLyB0eXBlb2YgW10gPT09IFwib2JqZWN0XCIsIHNvIGEgdG9wLWxldmVsIEpTT04gYXJyYXkgKGNvcnJ1cHRlZCBmaWxlLFxuICAgIC8vIHN0cmF5IG1hbnVhbCBlZGl0KSB3b3VsZCBvdGhlcndpc2Ugc2FpbCB0aHJvdWdoIHRoZSBjYWxsZXInc1xuICAgIC8vIGB0eXBlb2YgcGFyc2VkID09PSBcIm9iamVjdFwiYCBjaGVjayBhbmQgZ2V0IHdhbGtlZCBoZXJlOiBPYmplY3QuZW50cmllcygpXG4gICAgLy8gb24gYW4gYXJyYXkgeWllbGRzIG51bWVyaWMtc3RyaW5nIGtleXMgKFwiMFwiLCBcIjFcIiwgLi4uKSB0aGF0IHdvdWxkIGJlXG4gICAgLy8gbWlncmF0ZWQgaW50byBib2d1cyBoaXN0b3J5IGVudHJpZXMuXG4gICAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHJhdykpIHtcbiAgICAgIHJldHVybiBtaWdyYXRlZDtcbiAgICB9XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIG1pZ3JhdGVkW2tleV0gPSB7IGNvdW50OiB2YWx1ZSwgbGFzdFVzZWQ6IG5vdyB9O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHR5cGVvZiAodmFsdWUgYXMgSGlzdG9yeUVudHJ5KS5jb3VudCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICB0eXBlb2YgKHZhbHVlIGFzIEhpc3RvcnlFbnRyeSkubGFzdFVzZWQgPT09IFwibnVtYmVyXCJcbiAgICAgICkge1xuICAgICAgICAvLyBDb3B5IG9ubHkgdGhlIHR3byBleHBlY3RlZCBmaWVsZHMgcmF0aGVyIHRoYW4ga2VlcGluZyB0aGUgd2hvbGVcbiAgICAgICAgLy8gcGFyc2VkIG9iamVjdCByZWZlcmVuY2UsIHNvIHVuZXhwZWN0ZWQgZXh0cmEgcHJvcGVydGllcyBvbiBhXG4gICAgICAgIC8vIG1hbGZvcm1lZCBlbnRyeSBhcmVuJ3Qgc2lsZW50bHkgY2FycmllZCBmb3J3YXJkIGFuZCByZS1wZXJzaXN0ZWQuXG4gICAgICAgIG1pZ3JhdGVkW2tleV0gPSB7XG4gICAgICAgICAgY291bnQ6ICh2YWx1ZSBhcyBIaXN0b3J5RW50cnkpLmNvdW50LFxuICAgICAgICAgIGxhc3RVc2VkOiAodmFsdWUgYXMgSGlzdG9yeUVudHJ5KS5sYXN0VXNlZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIEFueXRoaW5nIGVsc2UgKG1hbGZvcm1lZCBlbnRyeSkgaXMgc2lsZW50bHkgZHJvcHBlZCByYXRoZXIgdGhhblxuICAgICAgLy8gY2FycmllZCBmb3J3YXJkIC0tIGEgc2luZ2xlIGJhZCBlbnRyeSBzaG91bGRuJ3QgcG9pc29uIHRoZSByZXN0LlxuICAgIH1cbiAgICByZXR1cm4gbWlncmF0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2NvcmUgZCd1bmUgZW50csOpZSA6IGZyw6lxdWVuY2UgcG9uZMOpcsOpZSBwYXIgbGEgZnJhw65jaGV1ciBkJ3V0aWxpc2F0aW9uXG4gICAqICh2b2lyIEhBTEZfTElGRV9NUykuIFV0aWxpc8OpIHBvdXIgdHJpZXIvdHJpbW1lciBsJ2hpc3RvcmlxdWUuXG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVTY29yZShlbnRyeTogSGlzdG9yeUVudHJ5LCBub3c6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYWdlTXMgPSBNYXRoLm1heCgwLCBub3cgLSBlbnRyeS5sYXN0VXNlZCk7XG4gICAgY29uc3QgZGVjYXkgPSBNYXRoLnBvdygwLjUsIGFnZU1zIC8gSEFMRl9MSUZFX01TKTtcbiAgICByZXR1cm4gZW50cnkuY291bnQgKiBkZWNheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFyZ2UgbCdoaXN0b3JpcXVlIGRlcHVpcyBsZSBzdG9ja2FnZVxuICAgKi9cbiAgYXN5bmMgbG9hZEhpc3RvcnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaGlzdG9yeUxvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdEaXIgPSB0aGlzLnBsdWdpbi5hcHAudmF1bHQuY29uZmlnRGlyO1xuICAgICAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVBhdGgoYCR7Y29uZmlnRGlyfS8ke0hJU1RPUllfRklMRX1gKTtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHRoaXMucGx1Z2luLmFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhwYXRoKTtcbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucGx1Z2luLmFwcC52YXVsdC5hZGFwdGVyLnJlYWQocGF0aCk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkOiB1bmtub3duID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICBpZiAocGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeSA9IHRoaXMubWlncmF0ZUhpc3RvcnkocGFyc2VkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVGhlIGV4aXN0cygpL3JlYWQoKSBjYWxscyBhYm92ZSBhbHJlYWR5IGhhbmRsZSB0aGUgXCJmaWxlIGRvZXNuJ3RcbiAgICAgIC8vIGV4aXN0IHlldFwiIGNhc2UgZXhwbGljaXRseSAodGhlIGBpZiAoZXhpc3RzKWAgZ3VhcmQpIC0tIHJlYWNoaW5nXG4gICAgICAvLyB0aGlzIGNhdGNoIG1lYW5zIGFuIGFjdHVhbCBhbm9tYWx5IChjb3JydXB0ZWQgSlNPTiBmcm9tIGFuXG4gICAgICAvLyBpbnRlcnJ1cHRlZCB3cml0ZSwgYSBzeW5jIGNvbmZsaWN0LCBldGMuKSwgc28gbG9nIGl0IGluc3RlYWQgb2ZcbiAgICAgIC8vIHNpbGVudGx5IGRpc2NhcmRpbmcgdGhlIHVzZXIncyBoaXN0b3J5IHdpdGggbm8gZGlhZ25vc3RpYyB0cmFpbC5cbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGxvYWRpbmcgaGlzdG9yeTpcIiwgeyBlcnJvciB9KTtcbiAgICAgIHRoaXMuaGlzdG9yeSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLmhpc3RvcnlMb2FkZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVucmVnaXN0cmUgbCdoaXN0b3JpcXVlIGRhbnMgbGUgc3RvY2thZ2VcbiAgICovXG4gIGFzeW5jIHNhdmVIaXN0b3J5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdEaXIgPSB0aGlzLnBsdWdpbi5hcHAudmF1bHQuY29uZmlnRGlyO1xuICAgICAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVBhdGgoYCR7Y29uZmlnRGlyfS8ke0hJU1RPUllfRklMRX1gKTtcbiAgICAgIGNvbnN0IGRpciA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcbiAgICAgIFxuICAgICAgLy8gQ3LDqWVyIGxlIGRvc3NpZXIgc2kgbsOpY2Vzc2FpcmVcbiAgICAgIGNvbnN0IGRpckV4aXN0cyA9IGF3YWl0IHRoaXMucGx1Z2luLmFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhkaXIpO1xuICAgICAgaWYgKCFkaXJFeGlzdHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uYXBwLnZhdWx0LmFkYXB0ZXIubWtkaXIoZGlyKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUocGF0aCwgSlNPTi5zdHJpbmdpZnkodGhpcy5oaXN0b3J5LCBudWxsLCAyKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIHNhdmluZyBoaXN0b3J5OlwiLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpc2UgdW5lIHN1Z2dlc3Rpb24gZW4gY2FwaXRhbGlzYW50IGxhIHByZW1pw6hyZSBsZXR0cmVcbiAgICogRXhlbXBsZTogXCJkZW1haW5cIiAtPiBcIkRlbWFpblwiLCBcImx1bmRpIHByb2NoYWluXCIgLT4gXCJMdW5kaSBwcm9jaGFpblwiXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXN1Z2dlc3Rpb24gfHwgc3VnZ2VzdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWQgPSBzdWdnZXN0aW9uLnRyaW0oKTtcbiAgICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cmltbWVkO1xuICAgIH1cblxuICAgIC8vIENhcGl0YWxpemUgZWFjaCB3b3JkIGluZGl2aWR1YWxseSwgbm90IGp1c3QgdGhlIGZpcnN0IGNoYXJhY3RlciBvZlxuICAgIC8vIHRoZSB3aG9sZSBzdHJpbmc6IGhpc3Rvcnkga2V5cyBhcmUgc3RvcmVkIGZ1bGx5IGxvd2VyY2FzZSAoc2VlXG4gICAgLy8gcmVjb3JkU2VsZWN0aW9uKCkpLCBzbyBhIG11bHRpLXdvcmQgc3VnZ2VzdGlvbiBsaWtlIFwibmV4dCBmcmlkYXlcIlxuICAgIC8vIHdvdWxkIG90aGVyd2lzZSBkaXNwbGF5IGFzIFwiTmV4dCBmcmlkYXlcIiAtLSBvbmx5IHRoZSB2ZXJ5IGZpcnN0XG4gICAgLy8gbGV0dGVyIGNhcGl0YWxpemVkIC0tIGluY29uc2lzdGVudCB3aXRoIHRoZSBcIk5leHQgRnJpZGF5XCIgdGhhdCBvdGhlclxuICAgIC8vIHN1Z2dlc3Rpb24gc291cmNlcyAoZS5nLiBkYXRlLXN1Z2dlc3QudHMncyBnZXRJbW1lZGlhdGVTdWdnZXN0aW9ucylcbiAgICAvLyBzaG93IGZvciB0aGUgZXhhY3Qgc2FtZSBwaHJhc2UgaW4gdGhlIHNhbWUgZHJvcGRvd24uXG4gICAgcmV0dXJuIHRyaW1tZWRcbiAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cblxuICAvKipcbiAgICogRW5yZWdpc3RyZSB1bmUgc8OpbGVjdGlvbiBkYW5zIGwnaGlzdG9yaXF1ZVxuICAgKi9cbiAgYXN5bmMgcmVjb3JkU2VsZWN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZEhpc3RvcnkoKTtcblxuICAgIC8vIE5vcm1hbGlzZXIgbGEgc3VnZ2VzdGlvbiAoZW4gbWludXNjdWxlcyBwb3VyIGxhIGNsw6ksIMOpdml0ZSBsZXMgZG91YmxvbnMpXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbmNyw6ltZW50ZXIgbGUgY29tcHRldXIgZXQgcmFmcmHDrmNoaXIgbGEgZGF0ZSBkJ3V0aWxpc2F0aW9uICh1dGlsaXNlciBsYSBjbMOpIGVuIG1pbnVzY3VsZXMpXG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmhpc3Rvcnlbbm9ybWFsaXplZF07XG4gICAgdGhpcy5oaXN0b3J5W25vcm1hbGl6ZWRdID0ge1xuICAgICAgY291bnQ6IChleGlzdGluZz8uY291bnQgfHwgMCkgKyAxLFxuICAgICAgbGFzdFVzZWQ6IERhdGUubm93KCksXG4gICAgfTtcblxuICAgIC8vIExpbWl0ZXIgbGEgdGFpbGxlIGRlIGwnaGlzdG9yaXF1ZSBzaSBuw6ljZXNzYWlyZVxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmhpc3RvcnkpLmxlbmd0aCA+IE1BWF9ISVNUT1JZX1NJWkUpIHtcbiAgICAgIHRoaXMudHJpbUhpc3RvcnkoKTtcbiAgICB9XG5cbiAgICAvLyBNZXR0cmUgw6Agam91ciBsZSBjYWNoZVxuICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcblxuICAgIC8vIFNhdmUgKGFzeW5jaHJvbm91c2x5LCBkb24ndCBibG9jaylcbiAgICB0aGlzLnNhdmVIaXN0b3J5KCkuY2F0Y2goKGVycjogdW5rbm93bikgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3Igc2F2aW5nIGhpc3Rvcnk6XCIsIHsgZXJyb3I6IGVyciB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSw6lkdWl0IGxhIHRhaWxsZSBkZSBsJ2hpc3RvcmlxdWUgZW4gZ2FyZGFudCBsZXMgZW50csOpZXMgbGVzIHBsdXMgcGVydGluZW50ZXNcbiAgICogKGZyw6lxdWVuY2UgcG9uZMOpcsOpZSBwYXIgbGEgZnJhw65jaGV1ciwgdm9pciBjb21wdXRlU2NvcmUoKSlcbiAgICovXG4gIHByaXZhdGUgdHJpbUhpc3RvcnkoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModGhpcy5oaXN0b3J5KTtcblxuICAgIC8vIFRyaWVyIHBhciBzY29yZSAoZMOpY3JvaXNzYW50KVxuICAgIGVudHJpZXMuc29ydCgoYSwgYikgPT4gdGhpcy5jb21wdXRlU2NvcmUoYlsxXSwgbm93KSAtIHRoaXMuY29tcHV0ZVNjb3JlKGFbMV0sIG5vdykpO1xuXG4gICAgLy8gR2FyZGVyIHVuaXF1ZW1lbnQgbGVzIE1BWF9ISVNUT1JZX1NJWkUgZW50csOpZXMgbGVzIHBsdXMgcGVydGluZW50ZXNcbiAgICBjb25zdCB0cmltbWVkID0gZW50cmllcy5zbGljZSgwLCBNQVhfSElTVE9SWV9TSVpFKTtcblxuICAgIHRoaXMuaGlzdG9yeSA9IE9iamVjdC5mcm9tRW50cmllcyh0cmltbWVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFyZ2UgbCdoaXN0b3JpcXVlIGV0IG1ldCDDoCBqb3VyIGxlIGNhY2hlICjDoCBhcHBlbGVyIGF1IGTDqW1hcnJhZ2UpXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZEhpc3RvcnkoKTtcbiAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0IMOgIGpvdXIgbGUgY2FjaGUgZGVzIHN1Z2dlc3Rpb25zIGxlcyBwbHVzIHBlcnRpbmVudGVzXG4gICAqIChmcsOpcXVlbmNlIHBvbmTDqXLDqWUgcGFyIGxhIGZyYcOuY2hldXIsIHZvaXIgY29tcHV0ZVNjb3JlKCkpXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUNhY2hlKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuaGlzdG9yeSk7XG5cbiAgICAvLyBUcmllciBwYXIgc2NvcmUgKGTDqWNyb2lzc2FudClcbiAgICBlbnRyaWVzLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcHV0ZVNjb3JlKGJbMV0sIG5vdykgLSB0aGlzLmNvbXB1dGVTY29yZShhWzFdLCBub3cpKTtcblxuICAgIC8vIE1ldHRyZSBlbiBjYWNoZSBsZXMgdG9wIHN1Z2dlc3Rpb25zIGF2ZWMgbGEgcHJlbWnDqHJlIGxldHRyZSBjYXBpdGFsaXPDqWVcbiAgICB0aGlzLmNhY2hlZFRvcFN1Z2dlc3Rpb25zID0gZW50cmllcy5zbGljZSgwLCA1MCkubWFwKChbc3VnZ2VzdGlvbl0pID0+XG4gICAgICB0aGlzLm5vcm1hbGl6ZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbilcbiAgICApO1xuICAgIHRoaXMuY2FjaGVWYWxpZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUsOpY3Vww6hyZSBsZXMgc3VnZ2VzdGlvbnMgbGVzIHBsdXMgZnLDqXF1ZW50ZXMgZGUgbWFuacOocmUgc3luY2hyb25lICh1dGlsaXNlIGxlIGNhY2hlKVxuICAgKiBAcGFyYW0gbGltaXQgTm9tYnJlIG1heGltdW0gZGUgc3VnZ2VzdGlvbnMgw6AgcmV0b3VybmVyXG4gICAqL1xuICBnZXRUb3BTdWdnZXN0aW9uc1N5bmMobGltaXQgPSAxMCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuY2FjaGVWYWxpZCkge1xuICAgICAgLy8gU2kgbGUgY2FjaGUgbidlc3QgcGFzIHZhbGlkZSwgcmV0b3VybmVyIHVuIHRhYmxlYXUgdmlkZVxuICAgICAgLy8gTGUgY2FjaGUgc2VyYSBtaXMgw6Agam91ciBsb3JzIGRlIGwnaW5pdGlhbGlzYXRpb25cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkVG9wU3VnZ2VzdGlvbnMuc2xpY2UoMCwgbGltaXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWN1cMOocmUgbGVzIHN1Z2dlc3Rpb25zIGxlcyBwbHVzIGZyw6lxdWVudGVzLCB0cmnDqWVzIHBhciBmcsOpcXVlbmNlIChhc3luYywgbWV0IMOgIGpvdXIgbGUgY2FjaGUpXG4gICAqIEBwYXJhbSBsaW1pdCBOb21icmUgbWF4aW11bSBkZSBzdWdnZXN0aW9ucyDDoCByZXRvdXJuZXJcbiAgICovXG4gIGFzeW5jIGdldFRvcFN1Z2dlc3Rpb25zKGxpbWl0ID0gMTApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkSGlzdG9yeSgpO1xuICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWRUb3BTdWdnZXN0aW9ucy5zbGljZSgwLCBsaW1pdCk7XG4gIH1cblxuICAvKipcbiAgICogUsOpaW5pdGlhbGlzZSBsJ2hpc3RvcmlxdWVcbiAgICovXG4gIGFzeW5jIGNsZWFySGlzdG9yeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmhpc3RvcnkgPSB7fTtcbiAgICB0aGlzLmNhY2hlZFRvcFN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5jYWNoZVZhbGlkID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLnNhdmVIaXN0b3J5KCk7XG4gIH1cblxuICAvKipcbiAgICogU3VwcHJpbWUgdW5lIHNldWxlIGVudHLDqWUgZGUgbCdoaXN0b3JpcXVlIChnZXN0aW9uIGZpbmUsIHBhciBvcHBvc2l0aW9uXG4gICAqIMOgIGNsZWFySGlzdG9yeSgpIHF1aSB2aWRlIHRvdXQpLiBgc3VnZ2VzdGlvbmAgcGV1dCDDqnRyZSBsYSBmb3JtZSBub3JtYWxpc8OpZVxuICAgKiBhZmZpY2jDqWUgw6AgbCd1dGlsaXNhdGV1ciAoZXg6IFwiTmV4dCBGcmlkYXlcIikgb3UgbGEgY2zDqSBicnV0ZSBzdG9ja8OpZSBlblxuICAgKiBpbnRlcm5lIChleDogXCJuZXh0IGZyaWRheVwiKSAtLSBsZXMgZGV1eCBzb250IGFjY2VwdMOpZXMgcHVpc3F1ZVxuICAgKiBsJ3V0aWxpc2F0ZXVyIG5lIHZvaXQgamFtYWlzIGxhIGNsw6kgYnJ1dGUsIHNldWxlbWVudCBsYSB2ZXJzaW9uIGFmZmljaMOpZS5cbiAgICovXG4gIGFzeW5jIHJlbW92ZUVudHJ5KHN1Z2dlc3Rpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZEhpc3RvcnkoKTtcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBzdWdnZXN0aW9uLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGlmICghKG5vcm1hbGl6ZWQgaW4gdGhpcy5oaXN0b3J5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRlbGV0ZSB0aGlzLmhpc3Rvcnlbbm9ybWFsaXplZF07XG4gICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuXG4gICAgYXdhaXQgdGhpcy5zYXZlSGlzdG9yeSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWN1cMOocmUgdG91dGVzIGxlcyBlbnRyw6llcyBkZSBsJ2hpc3RvcmlxdWUsIHRyacOpZXMgcGFyIHBlcnRpbmVuY2VcbiAgICogKHZvaXIgY29tcHV0ZVNjb3JlKCkpLCBhdmVjIGxldXJzIG3DqXRhZG9ubsOpZXMgLS0gdXRpbGlzw6kgcGFyIGwnaW50ZXJmYWNlXG4gICAqIGRlIGdlc3Rpb24gZmluZSBkZSBsJ2hpc3RvcmlxdWUgKGFmZmljaGFnZSArIHN1cHByZXNzaW9uIGluZGl2aWR1ZWxsZSkuXG4gICAqIENvbnRyYWlyZW1lbnQgw6AgZ2V0VG9wU3VnZ2VzdGlvbnNTeW5jKCkvZ2V0VG9wU3VnZ2VzdGlvbnMoKSwgcXVpIG5lXG4gICAqIHJlbnZvaWVudCBxdWUgbGUgdGV4dGUgYWZmaWNow6ksIGNlY2kgcmVudm9pZSBhdXNzaSBsYSBjbMOpIGJydXRlIChwb3VyXG4gICAqIHJlbW92ZUVudHJ5KCkpIGV0IGxlcyBtw6l0YWRvbm7DqWVzIGNvdW50L2xhc3RVc2VkIChwb3VyIGwnYWZmaWNoYWdlKS5cbiAgICovXG4gIGFzeW5jIGdldEVudHJpZXNGb3JNYW5hZ2VtZW50KCk6IFByb21pc2U8QXJyYXk8eyBrZXk6IHN0cmluZzsgZGlzcGxheTogc3RyaW5nOyBjb3VudDogbnVtYmVyOyBsYXN0VXNlZDogbnVtYmVyIH0+PiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkSGlzdG9yeSgpO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5oaXN0b3J5KVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcHV0ZVNjb3JlKGJbMV0sIG5vdykgLSB0aGlzLmNvbXB1dGVTY29yZShhWzFdLCBub3cpKVxuICAgICAgLm1hcCgoW2tleSwgZW50cnldKSA9PiAoe1xuICAgICAgICBrZXksXG4gICAgICAgIGRpc3BsYXk6IHRoaXMubm9ybWFsaXplU3VnZ2VzdGlvbihrZXkpLFxuICAgICAgICBjb3VudDogZW50cnkuY291bnQsXG4gICAgICAgIGxhc3RVc2VkOiBlbnRyeS5sYXN0VXNlZCxcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXR0b2llIGxlcyByZXNzb3VyY2VzIGxvcnMgZGUgbGEgZGVzdHJ1Y3Rpb24gZGUgbCdpbnN0YW5jZVxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BQZXJpb2RpY0NsZWFudXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSw6ljdXDDqHJlIGwnaGlzdG9yaXF1ZSBjb21wbGV0IChwb3VyIGRlYnVnKVxuICAgKi9cbiAgYXN5bmMgZ2V0SGlzdG9yeSgpOiBQcm9taXNlPFNlbGVjdGlvbkhpc3Rvcnk+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRIaXN0b3J5KCk7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5oaXN0b3J5IH07XG4gIH1cbn1cbiIsImltcG9ydCB7IEFwcCwgTWFya2Rvd25WaWV3LCBFZGl0b3IgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB0eXBlIE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuL21haW5cIjtcbmltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSBcIi4vbHJ1LWNhY2hlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9uQ29sbGVjdG9yIH0gZnJvbSBcIi4vdHJhbnNsYXRpb24tY29sbGVjdG9yXCI7XG5cbi8vIENoZWFwLCBub24tY3J5cHRvZ3JhcGhpYyBzdHJpbmcgaGFzaCAoZGpiMiB2YXJpYW50KSB1c2VkIHRvIGZpbmdlcnByaW50XG4vLyB0aGUgc2Nhbm5lZCBjb250ZXh0IHdpbmRvdyBmb3IgY2FjaGUga2V5cyAtLSBmYXN0IGVub3VnaCB0byBydW4gb24gZXZlcnlcbi8vIGtleXN0cm9rZSB3aGlsZSBzdGlsbCBkaXN0aW5ndWlzaGluZyBkaWZmZXJlbnQgY29udGVudCByZWxpYWJseS5cbmZ1bmN0aW9uIHNpbXBsZUhhc2goc3RyOiBzdHJpbmcpOiBudW1iZXIge1xuICBsZXQgaGFzaCA9IDUzODE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2ggKyBzdHIuY2hhckNvZGVBdChpKSkgfCAwO1xuICB9XG4gIHJldHVybiBoYXNoO1xufVxuXG5jb25zdCBDT05URVhUX0xJTkVTID0gMTA7IC8vIE5vbWJyZSBkZSBsaWduZXMgw6AgYW5hbHlzZXIgYXZhbnQgZXQgYXByw6hzIGxlIGN1cnNldXJcbmNvbnN0IE1BWF9EQVRFU19UT19FWFRSQUNUID0gMTA7IC8vIE5vbWJyZSBtYXhpbXVtIGRlIGRhdGVzIMOgIGV4dHJhaXJlIGR1IGNvbnRleHRlXG5jb25zdCBNQVhfQ0FDSEVfU0laRSA9IDIwMDsgLy8gTGltaXRlIGRlIHRhaWxsZSBkdSBjYWNoZSBkZSBjb250ZXh0ZVxuY29uc3QgQ0FDSEVfVElNRU9VVCA9IDUwMDA7IC8vIDUgc2Vjb25kZXMgZGUgY2FjaGVcbmNvbnN0IENMRUFOVVBfSU5URVJWQUwgPSAzMDAwMDsgLy8gTmV0dG95YWdlIHDDqXJpb2RpcXVlIHRvdXRlcyBsZXMgMzAgc2Vjb25kZXNcblxuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0SW5mbyB7XG4gIGRhdGVzSW5Db250ZXh0OiBzdHJpbmdbXTsgLy8gRGF0ZXMgdHJvdXbDqWVzIGRhbnMgbGUgY29udGV4dGUgKGZvcm1hdHMgbmF0dXJlbHMgZMOpdGVjdMOpcylcbiAgdGl0bGU/OiBzdHJpbmc7IC8vIFRpdHJlIGRlIGxhIG5vdGVcbiAgdGFnczogc3RyaW5nW107IC8vIFRhZ3MgZGUgbGEgbm90ZVxuICB0aW1lc3RhbXA6IG51bWJlcjsgLy8gVGltZXN0YW1wIGRlIGNyw6lhdGlvbiBwb3VyIGxlIG5ldHRveWFnZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0QW5hbHl6ZXIge1xuICBwcml2YXRlIGFwcDogQXBwO1xuICBwcml2YXRlIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXM7XG4gIHByaXZhdGUgY2FjaGU6IExSVUNhY2hlPHN0cmluZywgQ29udGV4dEluZm8+OyAvLyBDYWNoZSB0ZW1wb3JhaXJlIHBhciBmaWNoaWVyIGF2ZWMgbGltaXRlIGRlIHRhaWxsZVxuICBwcml2YXRlIGNsZWFudXBJbnRlcnZhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7IC8vIElEIGRlIGwnaW50ZXJ2YWxsZSBkZSBuZXR0b3lhZ2VcbiAgXG4gIC8vIFBhdHRlcm5zIHJlZ2V4IHBvdXIgbGEgZMOpdGVjdGlvbiBkZSBkYXRlcyAoZ8OpbsOpcsOpcyBkeW5hbWlxdWVtZW50KVxuICBwcml2YXRlIGRhdGVQYXR0ZXJuczogUmVnRXhwW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcykge1xuICAgIHRoaXMuYXBwID0gYXBwO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgIHRoaXMuY2FjaGUgPSBuZXcgTFJVQ2FjaGU8c3RyaW5nLCBDb250ZXh0SW5mbz4oTUFYX0NBQ0hFX1NJWkUpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGVQYXR0ZXJucygpO1xuICAgIHRoaXMuc3RhcnRQZXJpb2RpY0NsZWFudXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEw6ltYXJyZSBsZSBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgZHUgY2FjaGVcbiAgICovXG4gIHByaXZhdGUgc3RhcnRQZXJpb2RpY0NsZWFudXAoKTogdm9pZCB7XG4gICAgLy8gTmV0dG95ZXIgdG91dGVzIGxlcyAzMCBzZWNvbmRlc1xuICAgIHRoaXMuY2xlYW51cEludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuY2xlYW51cEV4cGlyZWRFbnRyaWVzKCk7XG4gICAgfSwgQ0xFQU5VUF9JTlRFUlZBTCk7XG4gIH1cblxuICAvKipcbiAgICogQXJyw6p0ZSBsZSBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgKMOgIGFwcGVsZXIgbG9ycyBkZSBsYSBkZXN0cnVjdGlvbilcbiAgICovXG4gIHN0b3BQZXJpb2RpY0NsZWFudXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xlYW51cEludGVydmFsICE9PSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmNsZWFudXBJbnRlcnZhbCk7XG4gICAgICB0aGlzLmNsZWFudXBJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5ldHRvaWUgbGVzIGVudHLDqWVzIGV4cGlyw6llcyBkdSBjYWNoZVxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbnVwRXhwaXJlZEVudHJpZXMoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBrZXlzVG9EZWxldGU6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBQYXJjb3VyaXIgdG91dGVzIGxlcyBlbnRyw6llcyBkdSBjYWNoZVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuY2FjaGUuZW50cmllcygpKSB7XG4gICAgICBpZiAodmFsdWUudGltZXN0YW1wICYmIChub3cgLSB2YWx1ZS50aW1lc3RhbXApID4gQ0FDSEVfVElNRU9VVCkge1xuICAgICAgICBrZXlzVG9EZWxldGUucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1cHByaW1lciBsZXMgZW50csOpZXMgZXhwaXLDqWVzXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c1RvRGVsZXRlKSB7XG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIGlmIChrZXlzVG9EZWxldGUubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBOZXR0b3lhZ2UgZHUgY2FjaGUgZGUgY29udGV4dGU6ICR7a2V5c1RvRGVsZXRlLmxlbmd0aH0gZW50csOpZXMgc3VwcHJpbcOpZXNgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGlzZSBsZXMgcGF0dGVybnMgcmVnZXggcG91ciBsYSBkw6l0ZWN0aW9uIGRlIGRhdGVzIGRhbnMgdG91dGVzIGxlcyBsYW5ndWVzIGFjdGl2w6llc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplRGF0ZVBhdHRlcm5zKCk6IHZvaWQge1xuICAgIGNvbnN0IHRjID0gbmV3IFRyYW5zbGF0aW9uQ29sbGVjdG9yKHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG5cbiAgICBjb25zdCB3ZWVrZGF5S2V5cyA9IFsnc3VuZGF5JywgJ21vbmRheScsICd0dWVzZGF5JywgJ3dlZG5lc2RheScsICd0aHVyc2RheScsICdmcmlkYXknLCAnc2F0dXJkYXknXTtcbiAgICBjb25zdCB3ZWVrZGF5UGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb24od2Vla2RheUtleXMuZmxhdE1hcChrZXkgPT4gdGMuY29sbGVjdFdvcmRzKGtleSkpKTtcbiAgICBjb25zdCB0aW1lV29yZFBhdHRlcm4gPSB0Yy5idWlsZEFsdGVybmF0aW9uKFsndG9kYXknLCAndG9tb3Jyb3cnLCAneWVzdGVyZGF5J10uZmxhdE1hcChrZXkgPT4gdGMuY29sbGVjdFdvcmRzKGtleSkpKTtcbiAgICBjb25zdCB0aW1lVW5pdEtleXMgPSBbJ21pbnV0ZScsICdob3VyJywgJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXTtcbiAgICBjb25zdCB0aW1lVW5pdFBhdHRlcm4gPSB0Yy5idWlsZEFsdGVybmF0aW9uKHRpbWVVbml0S2V5cy5mbGF0TWFwKGtleSA9PiB0Yy5jb2xsZWN0V29yZHMoa2V5KSkpO1xuICAgIGNvbnN0IGluUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoJ2luJyk7XG4gICAgY29uc3QgcHJlZml4UGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb24oWy4uLnRjLmNvbGxlY3RXb3JkcygnbmV4dCcpLCAuLi50Yy5jb2xsZWN0V29yZHMoJ2xhc3QnKV0pO1xuXG4gICAgdGhpcy5kYXRlUGF0dGVybnMgPSBbXTtcblxuICAgIC8vIFxcYiBpcyBkZWZpbmVkIGluIHRlcm1zIG9mIFxcdywgd2hpY2ggaXMgQVNDSUktb25seTogaXQgbmV2ZXIgbWF0Y2hlc1xuICAgIC8vIGFyb3VuZCBDSksgY2hhcmFjdGVycyAobm8gYm91bmRhcnkgZXhpc3RzIGJldHdlZW4gdHdvIENoaW5lc2VcbiAgICAvLyBjaGFyYWN0ZXJzIGFzIGZhciBhcyBcXGIgaXMgY29uY2VybmVkKSwgc28gaXQgc2lsZW50bHkgZHJvcHMgZXZlcnkgQ0pLXG4gICAgLy8gbWF0Y2guIFVzaW5nIGV4cGxpY2l0IGxvb2thcm91bmQgYWdhaW5zdCBMYXRpbiBhbHBoYW51bWVyaWNzIGluc3RlYWRcbiAgICAvLyBzdGlsbCBibG9ja3MgcGFydGlhbC13b3JkIG1hdGNoZXMgZm9yIExhdGluIHNjcmlwdHMgKGUuZy4gXCJNb25kYXlcIlxuICAgIC8vIGluc2lkZSBcIk1vbmRheWlzaFwiKSB3aGlsZSBpbXBvc2luZyBubyBib3VuZGFyeSBhdCBhbGwgbmV4dCB0byBDSktcbiAgICAvLyBjaGFyYWN0ZXJzLCB3aGljaCBkb24ndCBoYXZlIHdvcmQgc2VwYXJhdG9ycyB0byBjaGVjayBhZ2FpbnN0IGFueXdheS5cbiAgICAvL1xuICAgIC8vIFRoZSBsZWFkaW5nIGJvdW5kYXJ5IGNhbid0IGJlIGEgbG9va2JlaGluZCAoXCIoPzwhLi4uKVwiKTogdGhhdCBzeW50YXhcbiAgICAvLyBpc24ndCBzdXBwb3J0ZWQgb24gaU9TL1NhZmFyaSBiZWZvcmUgMTYuNCBhbmQgdGhyb3dzIGF0IFJlZ0V4cFxuICAgIC8vIGNvbnN0cnVjdGlvbiB0aW1lLCBicmVha2luZyBldmVyeSBvbmUgb2YgdGhlc2UgcGF0dGVybnMgb24gb2xkZXJcbiAgICAvLyBkZXZpY2VzLiBVc2luZyBhIGNvbnN1bWluZyBhbHRlcm5hdGlvbiAoXCJzdGFydC1vZi1zdHJpbmcgb3IgYSBzaW5nbGVcbiAgICAvLyBub24td29yZCBjaGFyYWN0ZXJcIikgaW5zdGVhZCB3b3JrcyB0aGUgc2FtZSB3YXkgYnV0IGFjdHVhbGx5IGNvbnN1bWVzXG4gICAgLy8gdGhhdCBsZWFkaW5nIGNoYXJhY3Rlciwgc28gdGhlIGNvbnRlbnQgdG8gZXh0cmFjdCBpcyB3cmFwcGVkIGluIGl0c1xuICAgIC8vIG93biBjYXB0dXJpbmcgZ3JvdXAgYmVsb3cgcmF0aGVyIHRoYW4gcmVhZCBvZmYgdGhlIHdob2xlIG1hdGNoLlxuICAgIC8vIExvb2thaGVhZCAoXCIoPyEuLi4pXCIpIGhhcyBubyBzdWNoIGNvbXBhdGliaWxpdHkgaXNzdWUgYW5kIGNhbiBzdGF5LlxuICAgIGNvbnN0IHdvcmRCb3VuZGFyeUJlZm9yZSA9ICcoPzpefFteYS16QS1aMC05X10pJztcbiAgICBjb25zdCB3b3JkQm91bmRhcnlBZnRlciA9ICcoPyFbYS16QS1aMC05X10pJztcblxuICAgIC8vIFBhdHRlcm4gMTogSm91cnMgZGUgbGEgc2VtYWluZVxuICAgIGlmICh3ZWVrZGF5UGF0dGVybikge1xuICAgICAgdGhpcy5kYXRlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGAke3dvcmRCb3VuZGFyeUJlZm9yZX0oJHt3ZWVrZGF5UGF0dGVybn0pJHt3b3JkQm91bmRhcnlBZnRlcn1gLCAnZ2knKSk7XG4gICAgfVxuXG4gICAgLy8gUGF0dGVybiAyOiBNb3RzIHRlbXBvcmVscyBjb3VyYW50cyAodG9kYXksIHRvbW9ycm93LCB5ZXN0ZXJkYXkpXG4gICAgaWYgKHRpbWVXb3JkUGF0dGVybikge1xuICAgICAgdGhpcy5kYXRlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGAke3dvcmRCb3VuZGFyeUJlZm9yZX0oJHt0aW1lV29yZFBhdHRlcm59KSR7d29yZEJvdW5kYXJ5QWZ0ZXJ9YCwgJ2dpJykpO1xuICAgIH1cblxuICAgIC8vIFBhdHRlcm4gMzogRXhwcmVzc2lvbnMgcmVsYXRpdmVzIFwiZGFucyBYIGpvdXJzL3NlbWFpbmVzL21vaXNcIlxuICAgIGlmIChpblBhdHRlcm4gJiYgdGltZVVuaXRQYXR0ZXJuKSB7XG4gICAgICB0aGlzLmRhdGVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYCR7d29yZEJvdW5kYXJ5QmVmb3JlfSgoPzoke2luUGF0dGVybn0pXFxcXHMqXFxcXGQrXFxcXHMqKD86JHt0aW1lVW5pdFBhdHRlcm59KSkke3dvcmRCb3VuZGFyeUFmdGVyfWAsICdnaScpKTtcbiAgICB9XG5cbiAgICAvLyBQYXR0ZXJuIDQ6IEV4cHJlc3Npb25zIFwibmV4dC9sYXN0IHdlZWtkYXkvd2Vlay9tb250aC95ZWFyXCJcbiAgICAvLyBFdmVyeSBvbmUgb2YgdGhlIDExIHN1cHBvcnRlZCBsYW5ndWFnZXMgZGVmaW5lcyB3ZWVrZGF5cyBhbmQgdGltZVxuICAgIC8vIHVuaXRzIHRvZ2V0aGVyIHdpdGggbmV4dC9sYXN0LCBzbyB0aGUgbmVzdGVkIGNoZWNrcyBiZWxvdyBjYW4ndFxuICAgIC8vIGFjdHVhbGx5IGJlIGZhbHNlIHdoaWxlIHByZWZpeFBhdHRlcm4gaXMgdHJ1ZSAtLSBrZXB0IGFzIGEgZ3VhcmQgaW5cbiAgICAvLyBjYXNlIGEgZnV0dXJlIGxhbmd1YWdlIG1vZHVsZSBpcyBhdXRob3JlZCBpbmNvbXBsZXRlbHkuXG4gICAgaWYgKHByZWZpeFBhdHRlcm4pIHtcbiAgICAgIGlmICh3ZWVrZGF5UGF0dGVybikge1xuICAgICAgICB0aGlzLmRhdGVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYCR7d29yZEJvdW5kYXJ5QmVmb3JlfSgoPzoke3ByZWZpeFBhdHRlcm59KVxcXFxzKig/OiR7d2Vla2RheVBhdHRlcm59KSkke3dvcmRCb3VuZGFyeUFmdGVyfWAsICdnaScpKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lVW5pdFBhdHRlcm4pIHtcbiAgICAgICAgdGhpcy5kYXRlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGAke3dvcmRCb3VuZGFyeUJlZm9yZX0oKD86JHtwcmVmaXhQYXR0ZXJufSlcXFxccyooPzoke3RpbWVVbml0UGF0dGVybn0pKSR7d29yZEJvdW5kYXJ5QWZ0ZXJ9YCwgJ2dpJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSw6lpbml0aWFsaXNlIGxlcyBwYXR0ZXJucyAow6AgYXBwZWxlciBxdWFuZCBsZXMgbGFuZ3VlcyBjaGFuZ2VudClcbiAgICovXG4gIHJlc2V0UGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplRGF0ZVBhdHRlcm5zKCk7XG4gICAgdGhpcy5jbGVhckNhY2hlKCk7IC8vIFZpZGVyIGxlIGNhY2hlIGNhciBsZXMgcGF0dGVybnMgb250IGNoYW5nw6lcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXR0b2llIGxlIGNhY2hlIGxvcnMgZGUgbGEgZGVzdHJ1Y3Rpb24gZGUgbCdpbnN0YW5jZVxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BQZXJpb2RpY0NsZWFudXAoKTtcbiAgICB0aGlzLmNsZWFyQ2FjaGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmFseXNlIGxlIGNvbnRleHRlIGF1dG91ciBkdSBjdXJzZXVyIGRlIG1hbmnDqHJlIHN5bmNocm9uZSAodXRpbGlzZSBsZSBjYWNoZSlcbiAgICovXG4gIGFuYWx5emVDb250ZXh0U3luYyhlZGl0b3I6IEVkaXRvciwgY3Vyc29yTGluZTogbnVtYmVyKTogQ29udGV4dEluZm8ge1xuICAgIGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xuICAgIGlmICghYWN0aXZlVmlldykge1xuICAgICAgcmV0dXJuIHsgZGF0ZXNJbkNvbnRleHQ6IFtdLCB0YWdzOiBbXSwgdGltZXN0YW1wOiBEYXRlLm5vdygpIH07XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZSA9IGFjdGl2ZVZpZXcuZmlsZTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybiB7IGRhdGVzSW5Db250ZXh0OiBbXSwgdGFnczogW10sIHRpbWVzdGFtcDogRGF0ZS5ub3coKSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHRJbmZvID0ge1xuICAgICAgZGF0ZXNJbkNvbnRleHQ6IFtdLFxuICAgICAgdGFnczogW10sXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBBbmFseXNlciBsZSBjb250ZXh0ZSBhdXRvdXIgZHUgY3Vyc2V1clxuICAgICAgY29uc3QgY29udGVudCA9IGVkaXRvci5nZXRWYWx1ZSgpO1xuICAgICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xuXG4gICAgICBjb25zdCBzdGFydExpbmUgPSBNYXRoLm1heCgwLCBjdXJzb3JMaW5lIC0gQ09OVEVYVF9MSU5FUyk7XG4gICAgICBjb25zdCBlbmRMaW5lID0gTWF0aC5taW4obGluZXMubGVuZ3RoIC0gMSwgY3Vyc29yTGluZSArIENPTlRFWFRfTElORVMpO1xuXG4gICAgICBjb25zdCBjb250ZXh0TGluZXMgPSBsaW5lcy5zbGljZShzdGFydExpbmUsIGVuZExpbmUgKyAxKTtcbiAgICAgIGNvbnN0IGNvbnRleHRUZXh0ID0gY29udGV4dExpbmVzLmpvaW4oXCJcXG5cIik7XG5cbiAgICAgIC8vIFbDqXJpZmllciBsZSBjYWNoZSAoYXZlYyB0aW1lb3V0KS4gVGhlIGtleSBpbmNsdWRlcyBhIGNoZWFwIGhhc2ggb2ZcbiAgICAgIC8vIHRoZSBhY3R1YWwgc2Nhbm5lZCB3aW5kb3csIG5vdCBqdXN0IGZpbGUrbGluZTogd2l0aG91dCBpdCwgZWRpdGluZ1xuICAgICAgLy8gY29udGVudCB3aXRoaW4gdGhlIMKxQ09OVEVYVF9MSU5FUyB3aW5kb3cgKHdpdGhvdXQgbW92aW5nIHRoZSBjdXJzb3JcbiAgICAgIC8vIHRvIGEgZGlmZmVyZW50IGxpbmUpIHdvdWxkIGtlZXAgc2VydmluZyBhIHN0YWxlIGNhY2hlZCByZXN1bHQgdW50aWxcbiAgICAgIC8vIENBQ0hFX1RJTUVPVVQgZXhwaXJlcywgc2luY2UgZmlsZStsaW5lIGFsb25lIGRvZXNuJ3QgY2hhbmdlIHdoZW5cbiAgICAgIC8vIG5lYXJieSBjb250ZW50IGRvZXMuXG4gICAgICBjb25zdCBjYWNoZUtleSA9IGAke2ZpbGUucGF0aH0tJHtjdXJzb3JMaW5lfS0ke3NpbXBsZUhhc2goY29udGV4dFRleHQpfWA7XG4gICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIC8vIFbDqXJpZmllciBzaSBsJ2VudHLDqWUgbidlc3QgcGFzIGV4cGlyw6llXG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGlmIChjYWNoZWQudGltZXN0YW1wICYmIChub3cgLSBjYWNoZWQudGltZXN0YW1wKSA8PSBDQUNIRV9USU1FT1VUKSB7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBFbnRyw6llIGV4cGlyw6llLCBsYSBzdXBwcmltZXJcbiAgICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRXh0cmFpcmUgbGVzIHRhZ3MgZGVwdWlzIGxlcyBtw6l0YWRvbm7DqWVzXG4gICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGZpbGUpO1xuICAgICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgIGlmIChtZXRhZGF0YS50YWdzKSB7XG4gICAgICAgICAgY29udGV4dC50YWdzID0gbWV0YWRhdGEudGFncy5tYXAodGFnID0+IHRhZy50YWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXh0cmFpcmUgbGUgdGl0cmUgZGVwdWlzIGxlcyBmcm9udG1hdHRlciBvdSBsZSBwcmVtaWVyIHRpdHJlXG4gICAgICAgIC8vIEZyb250bWF0dGVyIHZhbHVlcyBhcmUgdXNlci1hdXRob3JlZCBZQU1MLCBzbyBcInRpdGxlXCIgaXNuJ3RcbiAgICAgICAgLy8gZ3VhcmFudGVlZCB0byBhY3R1YWxseSBiZSBhIHN0cmluZyAoZS5nLiBgdGl0bGU6IDQyYCkuXG4gICAgICAgIGlmICh0eXBlb2YgbWV0YWRhdGEuZnJvbnRtYXR0ZXI/LnRpdGxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgY29udGV4dC50aXRsZSA9IG1ldGFkYXRhLmZyb250bWF0dGVyLnRpdGxlO1xuICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmhlYWRpbmdzICYmIG1ldGFkYXRhLmhlYWRpbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb250ZXh0LnRpdGxlID0gbWV0YWRhdGEuaGVhZGluZ3NbMF0uaGVhZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBFeHRyYWlyZSBsZXMgZGF0ZXMgZHUgY29udGV4dGVcbiAgICAgIGNvbnRleHQuZGF0ZXNJbkNvbnRleHQgPSB0aGlzLmV4dHJhY3REYXRlc0Zyb21Db250ZXh0KGNvbnRleHRUZXh0KTtcblxuICAgICAgLy8gTWV0dHJlIGVuIGNhY2hlIChsZSBMUlUgY2FjaGUgZ8OocmUgYXV0b21hdGlxdWVtZW50IGxhIGxpbWl0ZSBkZSB0YWlsbGUpXG4gICAgICB0aGlzLmNhY2hlLnNldChjYWNoZUtleSwgY29udGV4dCk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3IgYW5hbHl6aW5nIGNvbnRleHQ6XCIsIHsgZXJyb3IgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQW5hbHlzZSBsZSBjb250ZXh0ZSBhdXRvdXIgZHUgY3Vyc2V1ciBkYW5zIGxlIGRvY3VtZW50IGFjdHVlbCAoYXN5bmMsIHBvdXIgY29tcGF0aWJpbGl0w6kpXG4gICAqL1xuICBhbmFseXplQ29udGV4dChlZGl0b3I6IEVkaXRvciwgY3Vyc29yTGluZTogbnVtYmVyKTogUHJvbWlzZTxDb250ZXh0SW5mbz4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5hbmFseXplQ29udGV4dFN5bmMoZWRpdG9yLCBjdXJzb3JMaW5lKSk7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXNlIHVuZSBkYXRlIGV4dHJhaXRlIGVuIGNhcGl0YWxpc2FudCBsYSBwcmVtacOocmUgbGV0dHJlXG4gICAqIEV4ZW1wbGU6IFwiZGVtYWluXCIgLT4gXCJEZW1haW5cIiwgXCJsdW5kaSBwcm9jaGFpblwiIC0+IFwiTHVuZGkgcHJvY2hhaW5cIlxuICAgKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVEYXRlKGRhdGVTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlU3RyIHx8IGRhdGVTdHIubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZGF0ZVN0cjtcbiAgICB9XG5cbiAgICBjb25zdCB0cmltbWVkID0gZGF0ZVN0ci50cmltKCk7XG4gICAgaWYgKHRyaW1tZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJpbW1lZDtcbiAgICB9XG5cbiAgICAvLyBDYXBpdGFsaXplIGVhY2ggd29yZCBpbmRpdmlkdWFsbHksIG5vdCBqdXN0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2ZcbiAgICAvLyB0aGUgd2hvbGUgc3RyaW5nOiBtdWx0aS13b3JkIG1hdGNoZXMgZnJvbSB0aGUgcHJlZml4K3dlZWtkYXkvcHJlZml4K1xuICAgIC8vIHVuaXQgcGF0dGVybnMgKGUuZy4gXCJuZXh0IEZyaWRheVwiKSB3b3VsZCBvdGhlcndpc2UgaGF2ZSB0aGVpciBzZWNvbmRcbiAgICAvLyB3b3JkIGZvcmNlZCB0byBsb3dlcmNhc2UgKFwiTmV4dCBmcmlkYXlcIiksIGluY29ycmVjdGx5IG1hbmdsaW5nXG4gICAgLy8gY2FwaXRhbGl6ZWQgd2Vla2RheS9tb250aCBuYW1lcyB0aGUgdXNlciBhY3R1YWxseSB0eXBlZC5cbiAgICByZXR1cm4gdHJpbW1lZFxuICAgICAgLnNwbGl0KC9cXHMrLylcbiAgICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWl0IGxlcyBleHByZXNzaW9ucyBkZSBkYXRlcyBwb3RlbnRpZWxsZXMgZHUgdGV4dGVcbiAgICogVXRpbGlzZSBkZXMgcGF0dGVybnMgZHluYW1pcXVlcyBtdWx0aS1sYW5ndWUgcG91ciBkw6l0ZWN0ZXIgbGVzIGRhdGVzIG5hdHVyZWxsZXNcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdERhdGVzRnJvbUNvbnRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRhdGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIC8vIFV0aWxpc2VyIGxlcyBwYXR0ZXJucyBkeW5hbWlxdWVzIGfDqW7DqXLDqXMgcG91ciB0b3V0ZXMgbGVzIGxhbmd1ZXMgYWN0aXbDqWVzXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuZGF0ZVBhdHRlcm5zKSB7XG4gICAgICAvLyBUaGUgbGVhZGluZyBib3VuZGFyeSBjb25zdW1lcyBhIGNoYXJhY3RlciBpbnN0ZWFkIG9mIHVzaW5nIGFcbiAgICAgIC8vIHplcm8td2lkdGggbG9va2JlaGluZCAoc2VlIGluaXRpYWxpemVEYXRlUGF0dGVybnMpLCBzbyB0aGUgdGV4dCB0b1xuICAgICAgLy8gZXh0cmFjdCBpcyByZWFkIGZyb20gY2FwdHVyZSBncm91cCAxLCBub3QgdGhlIHdob2xlIG1hdGNoLlxuICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHBhdHRlcm4pKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBtYXRjaFsxXTtcbiAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAvLyBQb3VyIGxlcyBsYW5ndWVzIHNhbnMgY2Fzc2UgKGNvbW1lIGxlIGphcG9uYWlzKSwgdG9Mb3dlckNhc2UoKSBuZSBjaGFuZ2UgcmllblxuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBjb250ZW50LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICAgIGlmICghc2Vlbi5oYXMobm9ybWFsaXplZCkgJiYgZGF0ZXMubGVuZ3RoIDwgTUFYX0RBVEVTX1RPX0VYVFJBQ1QpIHtcbiAgICAgICAgICAgIHNlZW4uYWRkKG5vcm1hbGl6ZWQpO1xuICAgICAgICAgICAgLy8gTm9ybWFsaXNlciBhdmVjIGxhIHByZW1pw6hyZSBsZXR0cmUgZW4gbWFqdXNjdWxlIChvdSBsYWlzc2VyIHRlbCBxdWVsIHBvdXIgbGUgamFwb25haXMpXG4gICAgICAgICAgICBkYXRlcy5wdXNoKHRoaXMubm9ybWFsaXplRGF0ZShjb250ZW50LnRyaW0oKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXR0b2llIGxlIGNhY2hlIChwZXV0IMOqdHJlIGFwcGVsw6kgcMOpcmlvZGlxdWVtZW50KVxuICAgKi9cbiAgY2xlYXJDYWNoZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgbGVzIHN0YXRpc3RpcXVlcyBkdSBjYWNoZSBkZSBjb250ZXh0ZVxuICAgKi9cbiAgZ2V0Q2FjaGVTdGF0cygpOiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBzaXplOiB0aGlzLmNhY2hlLnNpemUsXG4gICAgICBtYXhTaXplOiB0aGlzLmNhY2hlLm1heFNpemVMaW1pdCxcbiAgICB9O1xuICB9XG59XG4iLCIvKipcbiAqIENsYXNzZSBkJ2VycmV1ciBwZXJzb25uYWxpc8OpZSBwb3VyIE5hdHVyYWwgTGFuZ3VhZ2UgRGF0ZXNcbiAqL1xuZXhwb3J0IGNsYXNzIE5MRFBhcnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjb250ZXh0PzogdW5rbm93bjtcbiAgcHVibGljIHJlYWRvbmx5IHNldmVyaXR5OiAnZGVidWcnIHwgJ3dhcm4nIHwgJ2Vycm9yJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgY29kZTogc3RyaW5nLFxuICAgIHNldmVyaXR5OiAnZGVidWcnIHwgJ3dhcm4nIHwgJ2Vycm9yJyA9ICdlcnJvcicsXG4gICAgY29udGV4dD86IHVua25vd25cbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ05MRFBhcnNlRXJyb3InO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgdGhpcy5zZXZlcml0eSA9IHNldmVyaXR5O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cbiAgICAvLyBNYWludGllbnQgbGEgc3RhY2sgdHJhY2UgcG91ciBsZSBkw6lib2dhZ2UgKFY4IG9ubHkpXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOTERQYXJzZUVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb2RlcyBkJ2VycmV1ciBjb25zdGFudHNcbiAqL1xuZXhwb3J0IGNvbnN0IEVycm9yQ29kZXMgPSB7XG4gIC8vIEluaXRpYWxpc2F0aW9uXG4gIFBBUlNFUl9JTklUX0ZBSUxFRDogJ1BBUlNFUl9JTklUX0ZBSUxFRCcsXG4gIENIUk9OT19JTklUX0ZBSUxFRDogJ0NIUk9OT19JTklUX0ZBSUxFRCcsXG4gIFxuICAvLyBQYXJzaW5nXG4gIFBBUlNFX0ZBSUxFRDogJ1BBUlNFX0ZBSUxFRCcsXG4gIENIUk9OT19QQVJTRV9FUlJPUjogJ0NIUk9OT19QQVJTRV9FUlJPUicsXG4gIFxuICAvLyBDb25maWd1cmF0aW9uXG4gIFNFVFRJTkdTX0xPQURfRkFJTEVEOiAnU0VUVElOR1NfTE9BRF9GQUlMRUQnLFxuICBJTlZBTElEX0xBTkdVQUdFOiAnSU5WQUxJRF9MQU5HVUFHRScsXG59IGFzIGNvbnN0O1xuXG4iLCJpbXBvcnQgeyBOb3RpY2UsIE9ic2lkaWFuUHJvdG9jb2xEYXRhLCBQbHVnaW4gfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuaW1wb3J0IERhdGVQaWNrZXJNb2RhbCBmcm9tIFwiLi9tb2RhbHMvZGF0ZS1waWNrZXJcIjtcbmltcG9ydCBOTERQYXJzZXIsIHsgTkxEUmVzdWx0IH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyBOTERTZXR0aW5nc1RhYiwgTkxEU2V0dGluZ3MsIERFRkFVTFRfU0VUVElOR1MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IERhdGVTdWdnZXN0IGZyb20gXCIuL3N1Z2dlc3QvZGF0ZS1zdWdnZXN0XCI7XG5pbXBvcnQge1xuICBnZXRQYXJzZUNvbW1hbmQsXG4gIGdldEN1cnJlbnREYXRlQ29tbWFuZCxcbiAgZ2V0Q3VycmVudFRpbWVDb21tYW5kLFxuICBnZXROb3dDb21tYW5kLFxufSBmcm9tIFwiLi9jb21tYW5kc1wiO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVEYWlseU5vdGUsIHBhcnNlVHJ1dGh5LCB2YWxpZGF0ZVVyaVBhcmFtLCB2YWxpZGF0ZU1vbWVudEZvcm1hdCwgZ2V0QWN0aXZlRWRpdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IERhdGVGb3JtYXR0ZXIgfSBmcm9tIFwiLi9kYXRlLWZvcm1hdHRlclwiO1xuaW1wb3J0IEhpc3RvcnlNYW5hZ2VyIGZyb20gXCIuL2hpc3RvcnktbWFuYWdlclwiO1xuaW1wb3J0IENvbnRleHRBbmFseXplciBmcm9tIFwiLi9jb250ZXh0LWFuYWx5emVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IE5MRFBhcnNlRXJyb3IsIEVycm9yQ29kZXMgfSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIi4vd2luZG93LW1vbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYXR1cmFsTGFuZ3VhZ2VEYXRlcyBleHRlbmRzIFBsdWdpbiB7XG4gIHB1YmxpYyBwYXJzZXI6IE5MRFBhcnNlcjtcbiAgcHVibGljIHNldHRpbmdzOiBOTERTZXR0aW5ncztcbiAgcHVibGljIGhpc3RvcnlNYW5hZ2VyOiBIaXN0b3J5TWFuYWdlcjtcbiAgcHVibGljIGNvbnRleHRBbmFseXplcjogQ29udGV4dEFuYWx5emVyO1xuICBwcml2YXRlIG1lbW9yeU1vbml0b3JpbmdJbnRlcnZhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgTUVNT1JZX01PTklUT1JJTkdfSU5URVJWQUwgPSA2MDAwMDA7IC8vIFRvdXRlcyBsZXMgMTAgbWludXRlc1xuXG4gIGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgcGFyc2VyIGltbWVkaWF0ZWx5IChubyBuZWVkIHRvIHdhaXQgZm9yIG9uTGF5b3V0UmVhZHkpXG4gICAgdGhpcy5yZXNldFBhcnNlcigpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzbWFydCBzdWdnZXN0aW9uIG1hbmFnZXJzXG4gICAgdGhpcy5oaXN0b3J5TWFuYWdlciA9IG5ldyBIaXN0b3J5TWFuYWdlcih0aGlzKTtcbiAgICB0aGlzLmNvbnRleHRBbmFseXplciA9IG5ldyBDb250ZXh0QW5hbHl6ZXIodGhpcy5hcHAsIHRoaXMpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgaGlzdG9yeSBhc3luY2hyb25vdXNseVxuICAgIHRoaXMuaGlzdG9yeU1hbmFnZXIuaW5pdGlhbGl6ZSgpLmNhdGNoKChlcnI6IHVua25vd24pID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGluaXRpYWxpemluZyBoaXN0b3J5XCIsIHsgZXJyb3I6IGVyciB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtZGF0ZXNcIixcbiAgICAgIG5hbWU6IFwiUGFyc2UgbmF0dXJhbCBsYW5ndWFnZSBkYXRlXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwicmVwbGFjZVwiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtZGF0ZXMtbGlua1wiLFxuICAgICAgbmFtZTogXCJQYXJzZSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgKGFzIGxpbmspXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwibGlua1wiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtZGF0ZS1jbGVhblwiLFxuICAgICAgbmFtZTogXCJQYXJzZSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgKGFzIHBsYWluIHRleHQpXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwiY2xlYW5cIiksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6IFwibmxwLXBhcnNlLXRpbWVcIixcbiAgICAgIG5hbWU6IFwiUGFyc2UgbmF0dXJhbCBsYW5ndWFnZSB0aW1lXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwidGltZVwiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtbm93XCIsXG4gICAgICBuYW1lOiBcIkluc2VydCB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0Tm93Q29tbWFuZCh0aGlzKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtdG9kYXlcIixcbiAgICAgIG5hbWU6IFwiSW5zZXJ0IHRoZSBjdXJyZW50IGRhdGVcIixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBnZXRDdXJyZW50RGF0ZUNvbW1hbmQodGhpcyksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6IFwibmxwLXRpbWVcIixcbiAgICAgIG5hbWU6IFwiSW5zZXJ0IHRoZSBjdXJyZW50IHRpbWVcIixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBnZXRDdXJyZW50VGltZUNvbW1hbmQodGhpcyksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6IFwibmxwLXBpY2tlclwiLFxuICAgICAgbmFtZTogXCJEYXRlIHBpY2tlclwiLFxuICAgICAgY2hlY2tDYWxsYmFjazogKGNoZWNraW5nOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmIChjaGVja2luZykge1xuICAgICAgICAgIHJldHVybiAhIWdldEFjdGl2ZUVkaXRvcih0aGlzLmFwcC53b3Jrc3BhY2UpO1xuICAgICAgICB9XG4gICAgICAgIG5ldyBEYXRlUGlja2VyTW9kYWwodGhpcy5hcHAsIHRoaXMpLm9wZW4oKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZFNldHRpbmdUYWIobmV3IE5MRFNldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XG4gICAgdGhpcy5yZWdpc3Rlck9ic2lkaWFuUHJvdG9jb2xIYW5kbGVyKFwibmxkYXRlc1wiLCBwYXJhbXMgPT4gdGhpcy5hY3Rpb25IYW5kbGVyKHBhcmFtcykpO1xuICAgIHRoaXMucmVnaXN0ZXJFZGl0b3JTdWdnZXN0KG5ldyBEYXRlU3VnZ2VzdCh0aGlzLmFwcCwgdGhpcykpO1xuXG4gICAgLy8gRMOpbWFycmVyIGxlIG1vbml0b3JpbmcgZGUgbGEgbcOpbW9pcmVcbiAgICB0aGlzLnN0YXJ0TWVtb3J5TW9uaXRvcmluZygpO1xuICB9XG5cbiAgcmVzZXRQYXJzZXIoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucGFyc2VyID0gbmV3IE5MRFBhcnNlcih0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gICAgICBsb2dnZXIuZGVidWcoXCJQYXJzZXIgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5XCIsIHsgbGFuZ3VhZ2VzOiB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgcGFyc2VFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgTkxEUGFyc2VFcnJvciBcbiAgICAgICAgPyBlcnJvciBcbiAgICAgICAgOiBuZXcgTkxEUGFyc2VFcnJvcihcbiAgICAgICAgICAgICdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwYXJzZXInLFxuICAgICAgICAgICAgRXJyb3JDb2Rlcy5QQVJTRVJfSU5JVF9GQUlMRUQsXG4gICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgeyBvcmlnaW5hbEVycm9yOiBlcnJvciwgbGFuZ3VhZ2VzOiB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyB9XG4gICAgICAgICAgKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwYXJzZXInLCB7XG4gICAgICAgIGNvZGU6IHBhcnNlRXJyb3IuY29kZSxcbiAgICAgICAgZXJyb3I6IHBhcnNlRXJyb3IubWVzc2FnZSxcbiAgICAgICAgY29udGV4dDogcGFyc2VFcnJvci5jb250ZXh0LFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBwYXJzZXIgd2l0aCBFbmdsaXNoIGFzIGRlZmF1bHQgaW4gY2FzZSBvZiBlcnJvciB0byBwcmV2ZW50IHBsdWdpbiBmcm9tIGNyYXNoaW5nIGNvbXBsZXRlbHlcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucGFyc2VyID0gbmV3IE5MRFBhcnNlcihbJ2VuJ10pO1xuICAgICAgICBsb2dnZXIuaW5mbygnUGFyc2VyIGluaXRpYWxpemVkIHdpdGggRW5nbGlzaCBmYWxsYmFjaycpO1xuICAgICAgICBcbiAgICAgICAgLy8gTm90aWZpZXIgbCd1dGlsaXNhdGV1ciB1bmlxdWVtZW50IHBvdXIgbGVzIGVycmV1cnMgY3JpdGlxdWVzXG4gICAgICAgIG5ldyBOb3RpY2UoXG4gICAgICAgICAgJ05hdHVyYWwgTGFuZ3VhZ2UgRGF0ZXM6IEZhaWxlZCB0byBpbml0aWFsaXplIHdpdGggc2VsZWN0ZWQgbGFuZ3VhZ2VzLiBVc2luZyBFbmdsaXNoIGFzIGZhbGxiYWNrLicsXG4gICAgICAgICAgNTAwMFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZmFsbGJhY2tFcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIHBhcnNlciBldmVuIHdpdGggRW5nbGlzaCBmYWxsYmFjaycsIHsgZXJyb3I6IGZhbGxiYWNrRXJyb3IgfSk7XG4gICAgICAgIG5ldyBOb3RpY2UoXG4gICAgICAgICAgJ05hdHVyYWwgTGFuZ3VhZ2UgRGF0ZXM6IENyaXRpY2FsIGVycm9yIC0gcGFyc2VyIGluaXRpYWxpemF0aW9uIGZhaWxlZC4gUGxlYXNlIHJlc3RhcnQgT2JzaWRpYW4uJyxcbiAgICAgICAgICAxMDAwMFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBSZXNldCBjb250ZXh0IHBhdHRlcm5zIHdoZW4gbGFuZ3VhZ2VzIGNoYW5nZVxuICAgIGlmICh0aGlzLmNvbnRleHRBbmFseXplcikge1xuICAgICAgdGhpcy5jb250ZXh0QW5hbHl6ZXIucmVzZXRQYXR0ZXJucygpO1xuICAgIH1cbiAgfVxuXG4gIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIC8vIEFycsOqdGVyIGxlIG1vbml0b3JpbmcgZGUgbGEgbcOpbW9pcmVcbiAgICB0aGlzLnN0b3BNZW1vcnlNb25pdG9yaW5nKCk7XG4gICAgXG4gICAgLy8gTmV0dG95ZXIgbGVzIHJlc3NvdXJjZXNcbiAgICBpZiAodGhpcy5jb250ZXh0QW5hbHl6ZXIpIHtcbiAgICAgIHRoaXMuY29udGV4dEFuYWx5emVyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGlzdG9yeU1hbmFnZXIpIHtcbiAgICAgIHRoaXMuaGlzdG9yeU1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEw6ltYXJyZSBsZSBtb25pdG9yaW5nIHDDqXJpb2RpcXVlIGRlIGwndXRpbGlzYXRpb24gbcOpbW9pcmVcbiAgICovXG4gIHByaXZhdGUgc3RhcnRNZW1vcnlNb25pdG9yaW5nKCk6IHZvaWQge1xuICAgIC8vIExvZ2dlciBsZXMgc3RhdGlzdGlxdWVzIHRvdXRlcyBsZXMgMTAgbWludXRlc1xuICAgIHRoaXMubWVtb3J5TW9uaXRvcmluZ0ludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMubG9nTWVtb3J5VXNhZ2UoKTtcbiAgICB9LCB0aGlzLk1FTU9SWV9NT05JVE9SSU5HX0lOVEVSVkFMKTtcbiAgICBcbiAgICAvLyBMb2dnZXIgaW1tw6lkaWF0ZW1lbnQgYXUgZMOpbWFycmFnZVxuICAgIHRoaXMubG9nTWVtb3J5VXNhZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcnLDqnRlIGxlIG1vbml0b3JpbmcgZGUgbGEgbcOpbW9pcmVcbiAgICovXG4gIHByaXZhdGUgc3RvcE1lbW9yeU1vbml0b3JpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWVtb3J5TW9uaXRvcmluZ0ludGVydmFsICE9PSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLm1lbW9yeU1vbml0b3JpbmdJbnRlcnZhbCk7XG4gICAgICB0aGlzLm1lbW9yeU1vbml0b3JpbmdJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvZyBsZXMgc3RhdGlzdGlxdWVzIGQndXRpbGlzYXRpb24gbcOpbW9pcmUgZGVzIGNhY2hlc1xuICAgKi9cbiAgcHJpdmF0ZSBsb2dNZW1vcnlVc2FnZSgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHM6IHtcbiAgICAgICAgcGFyc2luZ0NhY2hlPzogeyBzaXplOiBudW1iZXI7IG1heFNpemU6IG51bWJlciB9O1xuICAgICAgICBjb250ZXh0Q2FjaGU/OiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH07XG4gICAgICAgIGhpc3Rvcnk/OiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH07XG4gICAgICB9ID0ge307XG5cbiAgICAgIC8vIFN0YXRpc3RpcXVlcyBkdSBjYWNoZSBkZSBwYXJzaW5nXG4gICAgICBpZiAodGhpcy5wYXJzZXIpIHtcbiAgICAgICAgc3RhdHMucGFyc2luZ0NhY2hlID0gdGhpcy5wYXJzZXIuZ2V0Q2FjaGVTdGF0cygpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdGF0aXN0aXF1ZXMgZHUgY2FjaGUgZGUgY29udGV4dGVcbiAgICAgIGlmICh0aGlzLmNvbnRleHRBbmFseXplcikge1xuICAgICAgICBzdGF0cy5jb250ZXh0Q2FjaGUgPSB0aGlzLmNvbnRleHRBbmFseXplci5nZXRDYWNoZVN0YXRzKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0YXRpc3RpcXVlcyBkZSBsJ2hpc3RvcmlxdWVcbiAgICAgIGlmICh0aGlzLmhpc3RvcnlNYW5hZ2VyKSB7XG4gICAgICAgIHRoaXMuaGlzdG9yeU1hbmFnZXIuZ2V0SGlzdG9yeSgpLnRoZW4oaGlzdG9yeSA9PiB7XG4gICAgICAgICAgc3RhdHMuaGlzdG9yeSA9IHtcbiAgICAgICAgICAgIHNpemU6IE9iamVjdC5rZXlzKGhpc3RvcnkpLmxlbmd0aCxcbiAgICAgICAgICAgIG1heFNpemU6IDEwMCwgLy8gTUFYX0hJU1RPUllfU0laRVxuICAgICAgICAgIH07XG4gICAgICAgICAgXG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKFwiVXRpbGlzYXRpb24gbcOpbW9pcmUgZGVzIGNhY2hlc1wiLCBzdGF0cyk7XG4gICAgICAgIH0pLmNhdGNoKChlcnI6IHVua25vd24pID0+IHtcbiAgICAgICAgICBsb2dnZXIud2FybihcIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgbGVzIHN0YXRpc3RpcXVlcyBkZSBsJ2hpc3RvcmlxdWVcIiwgeyBlcnJvcjogZXJyIH0pO1xuICAgICAgICAgIC8vIExvZ2dlciBxdWFuZCBtw6ptZSBsZXMgYXV0cmVzIHN0YXRpc3RpcXVlc1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0cykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKFwiVXRpbGlzYXRpb24gbcOpbW9pcmUgZGVzIGNhY2hlc1wiLCBzdGF0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0cykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcIlV0aWxpc2F0aW9uIG3DqW1vaXJlIGRlcyBjYWNoZXNcIiwgc3RhdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiRXJyZXVyIGxvcnMgZHUgbW9uaXRvcmluZyBkZSBsYSBtw6ltb2lyZVwiLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2FkZWREYXRhID0gYXdhaXQgdGhpcy5sb2FkRGF0YSgpIGFzIFBhcnRpYWw8TkxEU2V0dGluZ3M+IHwgbnVsbDtcbiAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgbG9hZGVkRGF0YSk7XG4gICAgXG4gICAgLy8gRW5zdXJlIGxhbmd1YWdlcyBpcyBub3QgZW1wdHkgKHVzZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWNlc3NhcnkpXG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyB8fCB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2V0dGluZ3MubGFuZ3VhZ2VzID0gWy4uLkRFRkFVTFRfU0VUVElOR1MubGFuZ3VhZ2VzXTtcbiAgICB9XG4gICAgXG4gICAgLy8gU3luY2hyb25pemUgZmxhZ3Mgd2l0aCBsYW5ndWFnZXMgYXJyYXkgaWYgbmVjZXNzYXJ5XG4gICAgdGhpcy5zeW5jTGFuZ3VhZ2VGbGFncygpO1xuICB9XG5cbiAgLy8gU3luY2hyb25pemVzIGxhbmd1YWdlIGZsYWdzIChlbmdsaXNoLCBmcmVuY2gsIGV0Yy4pIHdpdGggbGFuZ3VhZ2VzIGFycmF5XG4gIHByaXZhdGUgc3luY0xhbmd1YWdlRmxhZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgbGFuZ3VhZ2VNYXA6IHsgW2tleTogc3RyaW5nXToga2V5b2YgTkxEU2V0dGluZ3MgfSA9IHtcbiAgICAgICdlbic6ICdlbmdsaXNoJyxcbiAgICAgICdqYSc6ICdqYXBhbmVzZScsXG4gICAgICAnZnInOiAnZnJlbmNoJyxcbiAgICAgICdkZSc6ICdnZXJtYW4nLFxuICAgICAgJ3B0JzogJ3BvcnR1Z3Vlc2UnLFxuICAgICAgJ25sJzogJ2R1dGNoJyxcbiAgICAgICdlcyc6ICdzcGFuaXNoJyxcbiAgICAgICdpdCc6ICdpdGFsaWFuJyxcbiAgICAgICdydSc6ICdydXNzaWFuJyxcbiAgICAgICd1ayc6ICd1a3JhaW5pYW4nLFxuICAgICAgJ3poLmhhbnQnOiAnY2hpbmVzZScsXG4gICAgfTtcbiAgICBcbiAgICAvLyBSZXNldCBhbGwgZmxhZ3NcbiAgICB0aGlzLnNldHRpbmdzLmVuZ2xpc2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLmphcGFuZXNlID0gZmFsc2U7XG4gICAgdGhpcy5zZXR0aW5ncy5mcmVuY2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLmdlcm1hbiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MucG9ydHVndWVzZSA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MuZHV0Y2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLnNwYW5pc2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLml0YWxpYW4gPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLnJ1c3NpYW4gPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLnVrcmFpbmlhbiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MuY2hpbmVzZSA9IGZhbHNlO1xuICAgIFxuICAgIC8vIEVuYWJsZSBmbGFncyBjb3JyZXNwb25kaW5nIHRvIGxhbmd1YWdlcyBpbiBhcnJheVxuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgZmxhZ0tleSA9IGxhbmd1YWdlTWFwW2xhbmddO1xuICAgICAgaWYgKGZsYWdLZXkpIHtcbiAgICAgICAgKHRoaXMuc2V0dGluZ3NbZmxhZ0tleV0gYXMgYm9vbGVhbikgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIG5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSBzdHJpbmcgYW5kIGZvcm1hdHMgaXQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0LlxuICAgKiBcbiAgICogVGhpcyBpcyB0aGUgY29yZSBwYXJzaW5nIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBjdXN0b20gZm9ybWF0IHN0cmluZy5cbiAgICogVGhlIGlucHV0IGlzIHZhbGlkYXRlZCBhbmQgc2FuaXRpemVkIGJlZm9yZSBwYXJzaW5nLlxuICAgKiBcbiAgICogQHBhcmFtIGRhdGVTdHJpbmcgLSBOYXR1cmFsIGxhbmd1YWdlIGRhdGUgc3RyaW5nIChlLmcuLCBcInRvZGF5XCIsIFwidG9tb3Jyb3dcIiwgXCJpbiAyIGRheXNcIiwgXCJuZXh0IE1vbmRheVwiKVxuICAgKiBAcGFyYW0gZm9ybWF0IC0gTW9tZW50LmpzIGZvcm1hdCBzdHJpbmcgKGUuZy4sIFwiWVlZWS1NTS1ERFwiLCBcIkREL01NL1lZWVlcIiwgXCJNTU1NIERvLCBZWVlZXCIpXG4gICAqIEByZXR1cm5zIE5MRFJlc3VsdCBvYmplY3QgY29udGFpbmluZyB0aGUgZm9ybWF0dGVkIHN0cmluZywgRGF0ZSBvYmplY3QsIGFuZCBNb21lbnQgb2JqZWN0XG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlc3VsdCA9IHBsdWdpbi5wYXJzZShcInRvbW9ycm93XCIsIFwiWVlZWS1NTS1ERFwiKTtcbiAgICogY29uc29sZS5sb2cocmVzdWx0LmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiMjAyNS0wMS0wNlwiXG4gICAqIFxuICAgKiBjb25zdCByZXN1bHQyID0gcGx1Z2luLnBhcnNlKFwibmV4dCBNb25kYXlcIiwgXCJkZGRkLCBNTU1NIERvXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiTW9uZGF5LCBKYW51YXJ5IDZ0aFwiXG4gICAqIGBgYFxuICAgKi9cbiAgcGFyc2UoZGF0ZVN0cmluZzogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyk6IE5MRFJlc3VsdCB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgLy8gUGFyc2VyIG5vdCB5ZXQgaW5pdGlhbGl6ZWQsIGluaXRpYWxpemUgaXQgbm93XG4gICAgICB0aGlzLnJlc2V0UGFyc2VyKCk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgYXZhbnQgdXRpbGlzYXRpb25cbiAgICBjb25zdCBmb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQoZm9ybWF0KTtcbiAgICBpZiAoIWZvcm1hdFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBmb3JtYXQgaW4gcGFyc2UoKVwiLCB7IGZvcm1hdCwgZXJyb3I6IGZvcm1hdFZhbGlkYXRpb24uZXJyb3IgfSk7XG4gICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXQgZW4gY2FzIGQnZXJyZXVyXG4gICAgICBmb3JtYXQgPSBERUZBVUxUX1NFVFRJTkdTLmZvcm1hdDtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGVyIGV0IHNhbml0aXplciBsJ2VudHLDqWUgdXRpbGlzYXRldXJcbiAgICBjb25zdCBzYW5pdGl6ZWRJbnB1dCA9IHZhbGlkYXRlVXJpUGFyYW0oZGF0ZVN0cmluZywgMjAwKTtcbiAgICBpZiAoIXNhbml0aXplZElucHV0KSB7XG4gICAgICBsb2dnZXIud2FybihcIkludmFsaWQgaW5wdXQgaW4gcGFyc2UoKVwiLCB7IGRhdGVTdHJpbmcgfSk7XG4gICAgICAvLyBSZXRvdXJuZXIgdW5lIGRhdGUgaW52YWxpZGUgcGx1dMO0dCBxdWUgZGUgcGxhbnRlclxuICAgICAgY29uc3QgaW52YWxpZERhdGUgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9ybWF0dGVkU3RyaW5nOiBcIkludmFsaWQgZGF0ZVwiLFxuICAgICAgICBkYXRlOiBpbnZhbGlkRGF0ZSxcbiAgICAgICAgbW9tZW50OiBtb21lbnQoaW52YWxpZERhdGUpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZXIuZ2V0UGFyc2VkRGF0ZShzYW5pdGl6ZWRJbnB1dCwgdGhpcy5zZXR0aW5ncy53ZWVrU3RhcnQpO1xuICAgIGNvbnN0IGZvcm1hdHRlZFN0cmluZyA9IERhdGVGb3JtYXR0ZXIuZm9ybWF0KGRhdGUsIGZvcm1hdCk7XG4gICAgaWYgKGZvcm1hdHRlZFN0cmluZyA9PT0gXCJJbnZhbGlkIGRhdGVcIikge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiSW5wdXQgZGF0ZSBjYW4ndCBiZSBwYXJzZWQgYnkgbmxkYXRlc1wiLCB7IGRhdGVTdHJpbmc6IHNhbml0aXplZElucHV0IH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmb3JtYXR0ZWRTdHJpbmcsXG4gICAgICBkYXRlLFxuICAgICAgbW9tZW50OiBtb21lbnQoZGF0ZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgc3RyaW5nIHVzaW5nIHRoZSBwbHVnaW4ncyBjb25maWd1cmVkIGRhdGUgZm9ybWF0LlxuICAgKiBcbiAgICogQXV0b21hdGljYWxseSBkZXRlY3RzIGlmIHRoZSBpbnB1dCBjb250YWlucyBhIHRpbWUgY29tcG9uZW50IGFuZCBpbmNsdWRlcyBpdCBpbiB0aGUgb3V0cHV0LlxuICAgKiBVc2VzIHRoZSBmb3JtYXQgZnJvbSBwbHVnaW4gc2V0dGluZ3MgKGRlZmF1bHQ6IFwiWVlZWS1NTS1ERFwiKS5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZyAoZS5nLiwgXCJ0b2RheVwiLCBcInRvbW9ycm93XCIsIFwibmV4dCBNb25kYXkgYXQgM3BtXCIpXG4gICAqIEByZXR1cm5zIE5MRFJlc3VsdCBvYmplY3Qgd2l0aCBmb3JtYXR0ZWQgc3RyaW5nIHVzaW5nIGNvbmZpZ3VyZWQgZm9ybWF0XG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIElmIHNldHRpbmdzLmZvcm1hdCBpcyBcIllZWVktTU0tRERcIiBhbmQgc2V0dGluZ3MudGltZUZvcm1hdCBpcyBcIkhIOm1tXCJcbiAgICogY29uc3QgcmVzdWx0ID0gcGx1Z2luLnBhcnNlRGF0ZShcInRvbW9ycm93XCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9ybWF0dGVkU3RyaW5nKTsgLy8gXCIyMDI1LTAxLTA2XCJcbiAgICogXG4gICAqIGNvbnN0IHJlc3VsdDIgPSBwbHVnaW4ucGFyc2VEYXRlKFwibmV4dCBNb25kYXkgYXQgM3BtXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiMjAyNS0wMS0wNiAxNTowMFwiXG4gICAqIGBgYFxuICAgKi9cbiAgcGFyc2VEYXRlKGRhdGVTdHJpbmc6IHN0cmluZyk6IE5MRFJlc3VsdCB7XG4gICAgLy8gVmFsaWRlciBldCBzYW5pdGl6ZXIgbCdlbnRyw6llIHV0aWxpc2F0ZXVyXG4gICAgY29uc3Qgc2FuaXRpemVkSW5wdXQgPSB2YWxpZGF0ZVVyaVBhcmFtKGRhdGVTdHJpbmcsIDIwMCk7XG4gICAgaWYgKCFzYW5pdGl6ZWRJbnB1dCkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJJbnZhbGlkIGlucHV0IGluIHBhcnNlRGF0ZSgpXCIsIHsgZGF0ZVN0cmluZyB9KTtcbiAgICAgIGNvbnN0IGludmFsaWREYXRlID0gbmV3IERhdGUoTmFOKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvcm1hdHRlZFN0cmluZzogXCJJbnZhbGlkIGRhdGVcIixcbiAgICAgICAgZGF0ZTogaW52YWxpZERhdGUsXG4gICAgICAgIG1vbWVudDogbW9tZW50KGludmFsaWREYXRlKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgZGUgZGF0ZVxuICAgIGNvbnN0IGRhdGVGb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQodGhpcy5zZXR0aW5ncy5mb3JtYXQpO1xuICAgIGlmICghZGF0ZUZvcm1hdFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBkYXRlIGZvcm1hdCBpbiBzZXR0aW5nc1wiLCB7IGZvcm1hdDogdGhpcy5zZXR0aW5ncy5mb3JtYXQsIGVycm9yOiBkYXRlRm9ybWF0VmFsaWRhdGlvbi5lcnJvciB9KTtcbiAgICAgIC8vIFV0aWxpc2VyIGxlIGZvcm1hdCBwYXIgZMOpZmF1dFxuICAgICAgdGhpcy5zZXR0aW5ncy5mb3JtYXQgPSBERUZBVUxUX1NFVFRJTkdTLmZvcm1hdDtcbiAgICB9XG5cbiAgICAvLyAxLiBBc2sgdGhlIHBhcnNlciBpZiB0aW1lIGlzIGRldGVjdGVkXG4gICAgY29uc3QgaGFzVGltZSA9IHRoaXMucGFyc2VyLmhhc1RpbWVDb21wb25lbnQoc2FuaXRpemVkSW5wdXQpO1xuICAgIGxldCBmb3JtYXRUb1VzZSA9IHRoaXMuc2V0dGluZ3MuZm9ybWF0O1xuXG4gICAgLy8gMi4gSWYgdGltZSBpcyBkZXRlY3RlZC4uLlxuICAgIGlmIChoYXNUaW1lKSB7XG4gICAgICBjb25zdCB0aW1lRm9ybWF0ID0gdGhpcy5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIjtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgZGUgdGVtcHNcbiAgICAgIGNvbnN0IHRpbWVGb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQodGltZUZvcm1hdCk7XG4gICAgICBpZiAoIXRpbWVGb3JtYXRWYWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCB0aW1lIGZvcm1hdCBpbiBzZXR0aW5nc1wiLCB7IGZvcm1hdDogdGltZUZvcm1hdCwgZXJyb3I6IHRpbWVGb3JtYXRWYWxpZGF0aW9uLmVycm9yIH0pO1xuICAgICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXRcbiAgICAgICAgZm9ybWF0VG9Vc2UgPSBgJHt0aGlzLnNldHRpbmdzLmZvcm1hdH0gJHtERUZBVUxUX1NFVFRJTkdTLnRpbWVGb3JtYXR9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRJUDogSGVyZSB3ZSBmb3JtYXQgXCJEYXRlIFRJTUUuXCJcbiAgICAgICAgLy8gQnV0IEJFV0FSRTogaXQgaXMgdGhlIFwiZGF0ZS1zdWdnZXN0LnRzXCIgZmlsZSB0aGF0IHdpbGwgYWRkIHRoZSBbWyBdXS5cbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgdG91Y2ggZGF0ZS1zdWdnZXN0LCBpdCB3aWxsIG1ha2UgW1tEYXRlIFRpbWVdXS5cbiAgICAgICAgLy8gVG8gbWFrZSBbW0RhdGVdXSBUaW1lLCB3ZSBoYXZlIHRvIGJlIGNsZXZlci5cbiAgICAgICAgXG4gICAgICAgIGZvcm1hdFRvVXNlID0gYCR7Zm9ybWF0VG9Vc2V9ICR7dGltZUZvcm1hdH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGFyc2Uoc2FuaXRpemVkSW5wdXQsIGZvcm1hdFRvVXNlKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIG5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSByYW5nZSBzdHJpbmcuXG4gICAqIFxuICAgKiBTdXBwb3J0cyB2YXJpb3VzIHJhbmdlIGV4cHJlc3Npb25zOlxuICAgKiAtIFdlZWtkYXkgcmFuZ2VzOiBcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiIC8gXCJkZSBsdW5kaSDDoCB2ZW5kcmVkaVwiXG4gICAqIC0gV2VlayByYW5nZXM6IFwibmV4dCB3ZWVrXCIgLyBcInNlbWFpbmUgcHJvY2hhaW5lXCIgKHJldHVybnMgYWxsIGRheXMgb2YgdGhlIHdlZWspXG4gICAqIFxuICAgKiBUaGUgcmVzdWx0IGluY2x1ZGVzIGEgbGlzdCBvZiBhbGwgZGF0ZXMgaW4gdGhlIHJhbmdlIGZvciBlYXN5IGl0ZXJhdGlvbi5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHJhbmdlIHN0cmluZ1xuICAgKiBAcmV0dXJucyBOTERSYW5nZVJlc3VsdCBvYmplY3Qgd2l0aCBzdGFydC9lbmQgZGF0ZXMgYW5kIGRhdGUgbGlzdCwgb3IgbnVsbCBpZiBub3QgYSByYW5nZVxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByYW5nZSA9IHBsdWdpbi5wYXJzZURhdGVSYW5nZShcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiKTtcbiAgICogaWYgKHJhbmdlKSB7XG4gICAqICAgY29uc29sZS5sb2cocmFuZ2Uuc3RhcnREYXRlKTsgLy8gRGF0ZSBmb3IgTW9uZGF5XG4gICAqICAgY29uc29sZS5sb2cocmFuZ2UuZW5kRGF0ZSk7IC8vIERhdGUgZm9yIEZyaWRheVxuICAgKiAgIGNvbnNvbGUubG9nKHJhbmdlLmRhdGVMaXN0Py5sZW5ndGgpOyAvLyA1XG4gICAqICAgXG4gICAqICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBkYXRlcyBpbiByYW5nZVxuICAgKiAgIHJhbmdlLmRhdGVMaXN0Py5mb3JFYWNoKGRhdGUgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2coZGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpKTtcbiAgICogICB9KTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHBhcnNlRGF0ZVJhbmdlKGRhdGVTdHJpbmc6IHN0cmluZyk6IGltcG9ydChcIi4vcGFyc2VyXCIpLk5MRFJhbmdlUmVzdWx0IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgdGhpcy5yZXNldFBhcnNlcigpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGwnZW50csOpZSB1dGlsaXNhdGV1clxuICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gdmFsaWRhdGVVcmlQYXJhbShkYXRlU3RyaW5nLCAyMDApO1xuICAgIGlmICghc2FuaXRpemVkSW5wdXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBpbnB1dCBpbiBwYXJzZURhdGVSYW5nZSgpXCIsIHsgZGF0ZVN0cmluZyB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBhcnNlci5nZXRQYXJzZWREYXRlUmFuZ2Uoc2FuaXRpemVkSW5wdXQsIHRoaXMuc2V0dGluZ3Mud2Vla1N0YXJ0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBuYXR1cmFsIGxhbmd1YWdlIHRpbWUgc3RyaW5nIHVzaW5nIHRoZSBwbHVnaW4ncyBjb25maWd1cmVkIHRpbWUgZm9ybWF0LlxuICAgKiBcbiAgICogRXh0cmFjdHMgb25seSB0aGUgdGltZSBjb21wb25lbnQgZnJvbSB0aGUgaW5wdXQgYW5kIGZvcm1hdHMgaXQgYWNjb3JkaW5nIHRvIHNldHRpbmdzLlxuICAgKiBVc2VzIHRoZSB0aW1lIGZvcm1hdCBmcm9tIHBsdWdpbiBzZXR0aW5ncyAoZGVmYXVsdDogXCJISDptbVwiKS5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSB0aW1lIHN0cmluZyAoZS5nLiwgXCJub3dcIiwgXCJpbiAyIGhvdXJzXCIsIFwiYXQgM3BtXCIpXG4gICAqIEByZXR1cm5zIE5MRFJlc3VsdCBvYmplY3Qgd2l0aCBmb3JtYXR0ZWQgdGltZSBzdHJpbmdcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gSWYgc2V0dGluZ3MudGltZUZvcm1hdCBpcyBcIkhIOm1tXCJcbiAgICogY29uc3QgcmVzdWx0ID0gcGx1Z2luLnBhcnNlVGltZShcImluIDIgaG91cnNcIik7XG4gICAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb3JtYXR0ZWRTdHJpbmcpOyAvLyBcIjE3OjMwXCIgKGlmIGN1cnJlbnQgdGltZSBpcyAxNTozMClcbiAgICogXG4gICAqIGNvbnN0IHJlc3VsdDIgPSBwbHVnaW4ucGFyc2VUaW1lKFwiYXQgM3BtXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiMTU6MDBcIlxuICAgKiBgYGBcbiAgICovXG4gIHBhcnNlVGltZShkYXRlU3RyaW5nOiBzdHJpbmcpOiBOTERSZXN1bHQge1xuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGwnZW50csOpZSB1dGlsaXNhdGV1clxuICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gdmFsaWRhdGVVcmlQYXJhbShkYXRlU3RyaW5nLCAyMDApO1xuICAgIGlmICghc2FuaXRpemVkSW5wdXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBpbnB1dCBpbiBwYXJzZVRpbWUoKVwiLCB7IGRhdGVTdHJpbmcgfSk7XG4gICAgICBjb25zdCBpbnZhbGlkRGF0ZSA9IG5ldyBEYXRlKE5hTik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IFwiSW52YWxpZCBkYXRlXCIsXG4gICAgICAgIGRhdGU6IGludmFsaWREYXRlLFxuICAgICAgICBtb21lbnQ6IG1vbWVudChpbnZhbGlkRGF0ZSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFZhbGlkZXIgbGUgZm9ybWF0IGRlIHRlbXBzXG4gICAgY29uc3QgdGltZUZvcm1hdFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh0aGlzLnNldHRpbmdzLnRpbWVGb3JtYXQpO1xuICAgIGlmICghdGltZUZvcm1hdFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCB0aW1lIGZvcm1hdCBpbiBzZXR0aW5nc1wiLCB7IGZvcm1hdDogdGhpcy5zZXR0aW5ncy50aW1lRm9ybWF0LCBlcnJvcjogdGltZUZvcm1hdFZhbGlkYXRpb24uZXJyb3IgfSk7XG4gICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXRcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlKHNhbml0aXplZElucHV0LCBERUZBVUxUX1NFVFRJTkdTLnRpbWVGb3JtYXQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBhcnNlKHNhbml0aXplZElucHV0LCB0aGlzLnNldHRpbmdzLnRpbWVGb3JtYXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHRleHQgc3RyaW5nIGNvbnRhaW5zIGEgdGltZSBjb21wb25lbnQuXG4gICAqIFxuICAgKiBVc2VmdWwgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdG8gaW5jbHVkZSB0aW1lIGZvcm1hdHRpbmcgaW4gdGhlIG91dHB1dC5cbiAgICogRGV0ZWN0cyB2YXJpb3VzIHRpbWUgZXhwcmVzc2lvbnMgaW4gYWxsIGVuYWJsZWQgbGFuZ3VhZ2VzLlxuICAgKiBcbiAgICogQHBhcmFtIHRleHQgLSBUZXh0IHN0cmluZyB0byBjaGVjayBmb3IgdGltZSBjb21wb25lbnRcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBhIHRpbWUgY29tcG9uZW50IGlzIGRldGVjdGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJuZXh0IE1vbmRheSBhdCAzcG1cIik7IC8vIHRydWVcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJ0b21vcnJvd1wiKTsgLy8gZmFsc2VcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJpbiAyIGhvdXJzXCIpOyAvLyB0cnVlXG4gICAqIHBsdWdpbi5oYXNUaW1lQ29tcG9uZW50KFwiZGFucyAyIGhldXJlc1wiKTsgLy8gdHJ1ZSAoRnJlbmNoKVxuICAgKiBgYGBcbiAgICovXG4gIGhhc1RpbWVDb21wb25lbnQodGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgdGhpcy5yZXNldFBhcnNlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuaGFzVGltZUNvbXBvbmVudCh0ZXh0KTtcbiAgfVxuXG4gIGFzeW5jIGFjdGlvbkhhbmRsZXIocGFyYW1zOiBPYnNpZGlhblByb3RvY29sRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgd29ya3NwYWNlIH0gPSB0aGlzLmFwcDtcblxuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGxlcyBwYXJhbcOodHJlcyBVUkkgcG91ciDDqXZpdGVyIGxlcyBpbmplY3Rpb25zXG4gICAgY29uc3QgZGF5ID0gdmFsaWRhdGVVcmlQYXJhbShwYXJhbXMuZGF5LCAxMDApO1xuICAgIGlmICghZGF5KSB7XG4gICAgICBsb2dnZXIud2FybihcIkludmFsaWQgZGF5IHBhcmFtZXRlciBpbiBVUklcIiwgeyBkYXk6IHBhcmFtcy5kYXkgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZSA9IHRoaXMucGFyc2VEYXRlKGRheSk7XG4gICAgY29uc3QgbmV3UGFuZSA9IHBhcnNlVHJ1dGh5KHBhcmFtcy5uZXdQYW5lIHx8IFwieWVzXCIpO1xuXG4gICAgaWYgKGRhdGUubW9tZW50LmlzVmFsaWQoKSkge1xuICAgICAgY29uc3QgZGFpbHlOb3RlID0gYXdhaXQgZ2V0T3JDcmVhdGVEYWlseU5vdGUoZGF0ZS5tb21lbnQpO1xuICAgICAgYXdhaXQgd29ya3NwYWNlLmdldExlYWYobmV3UGFuZSkub3BlbkZpbGUoZGFpbHlOb3RlKTtcbiAgICB9XG4gIH1cbn0iXSwibmFtZXMiOlsicmVxdWlyZSQkMCIsInRoaXMiLCJkaWN0IiwiZW4iLCJqYSIsImZyIiwicHQiLCJkZSIsIm5sIiwiZXMiLCJpdCIsInJ1IiwidWsiLCJ6aCIsImtvIiwibm9ybWFsaXplUGF0aCIsImdldERhaWx5Tm90ZSIsImdldEFsbERhaWx5Tm90ZXMiLCJjcmVhdGVEYWlseU5vdGUiLCJleHRyYWN0VGVybXMiLCJtYXRjaEFueVBhdHRlcm4iLCJPUkRJTkFMX1dPUkRfRElDVElPTkFSWSIsIk9SRElOQUxfTlVNQkVSX1BBVFRFUk4iLCJwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuIiwiTWFya2Rvd25WaWV3IiwiTW9kYWwiLCJTZXR0aW5nIiwiUGx1Z2luU2V0dGluZ1RhYiIsIldFRUtEQVlfRElDVElPTkFSWSIsIkZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZIiwiTU9OVEhfRElDVElPTkFSWSIsIklOVEVHRVJfV09SRF9ESUNUSU9OQVJZIiwiVElNRV9VTklUX0RJQ1RJT05BUlkiLCJOVU1CRVJfUEFUVEVSTiIsInBhcnNlTnVtYmVyUGF0dGVybiIsIllFQVJfUEFUVEVSTiIsInBhcnNlWWVhciIsIlNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiIsIlNJTkdMRV9USU1FX1VOSVRfUkVHRVgiLCJTSU5HTEVfVElNRV9VTklUX05PX0FCQlJfUEFUVEVSTiIsIlRJTUVfVU5JVFNfUEFUVEVSTiIsIlRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOIiwicGFyc2VEdXJhdGlvbiIsImNvbGxlY3REYXRlVGltZUZyYWdtZW50IiwiUEFUVEVSTl9XSVRIX1BSRUZJWCIsIkVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIiLCJQQVRURVJOIiwiREFURV9HUk9VUCIsIkRBVEVfVE9fR1JPVVAiLCJNT05USF9OQU1FX0dST1VQIiwiWUVBUl9HUk9VUCIsIkVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIiwiRU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIiLCJQUkVGSVhfR1JPVVAiLCJFTk1vbnRoTmFtZVBhcnNlciIsIllFQVJfTlVNQkVSX0dST1VQIiwiTU9OVEhfTlVNQkVSX0dST1VQIiwiREFURV9OVU1CRVJfR1JPVVAiLCJNT05USF9HUk9VUCIsIkVOU2xhc2hNb250aEZvcm1hdFBhcnNlciIsIkhPVVJfR1JPVVAiLCJNSU5VVEVfR1JPVVAiLCJTRUNPTkRfR1JPVVAiLCJBTV9QTV9IT1VSX0dST1VQIiwiRU5UaW1lRXhwcmVzc2lvblBhcnNlciIsIlNUUklDVF9QQVRURVJOIiwiRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciIsIkdST1VQX05VTV9USU1FVU5JVFMiLCJFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIiLCJFTk1lcmdlRGF0ZVJhbmdlUmVmaW5lciIsIkVOTWVyZ2VEYXRlVGltZVJlZmluZXIiLCJkYXRlcy5pbXBseVNpbWlsYXJEYXRlIiwicmVmZXJlbmNlcy5ub3ciLCJyZWZlcmVuY2VzLnRvZGF5IiwicmVmZXJlbmNlcy55ZXN0ZXJkYXkiLCJyZWZlcmVuY2VzLnRvbW9ycm93IiwicmVmZXJlbmNlcy50b25pZ2h0IiwicmVmZXJlbmNlcy50aGVEYXlBZnRlciIsImNhc3VhbFJlZmVyZW5jZXMuYWZ0ZXJub29uIiwiY2FzdWFsUmVmZXJlbmNlcy5ldmVuaW5nIiwiY2FzdWFsUmVmZXJlbmNlcy5taWRuaWdodCIsImNhc3VhbFJlZmVyZW5jZXMubW9ybmluZyIsImNhc3VhbFJlZmVyZW5jZXMubm9vbiIsIldFRUtEQVlfR1JPVVAiLCJQT1NURklYX0dST1VQIiwiTU9ESUZJRVJfV09SRF9HUk9VUCIsIlJFTEFUSVZFX1dPUkRfR1JPVVAiLCJQQVRURVJOX05PX0FCQlIiLCJFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIiLCJoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUiLCJoYXNJbXBsaWVkTGF0ZXJSZWZlcmVuY2VEYXRlIiwiY2FzdWFsIiwic3RyaWN0IiwiR0IiLCJwYXJzZSIsInBhcnNlRGF0ZSIsIlNVRkZJWF9HUk9VUCIsIkZJUlNUX1JFR19QQVRURVJOIiwiU0VDT05EX1JFR19QQVRURVJOIiwiVElNRV9HUk9VUCIsImNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24iLCJjcmVhdGVDb25maWd1cmF0aW9uIiwiREVUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyIiwiRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciIsIkZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlciIsIk5VTUJFUiIsIldFRUtEQVlfT0ZGU0VUIiwiREFZX0dST1VQIiwiemhTdHJpbmdUb051bWJlciIsInpoU3RyaW5nVG9ZZWFyIiwiTlVNQkVSX0dST1VQIiwiVU5JVF9HUk9VUCIsIkRBWV9HUk9VUF8xIiwiWkhfQU1fUE1fSE9VUl9HUk9VUF8xIiwiWkhfQU1fUE1fSE9VUl9HUk9VUF8yIiwiREFZX0dST1VQXzMiLCJaSF9BTV9QTV9IT1VSX0dST1VQXzMiLCJOT1dfR1JPVVAiLCJUSU1FX0dST1VQXzEiLCJUSU1FX0dST1VQXzIiLCJUSU1FX0dST1VQXzMiLCJSRUdFWF9QQVJUUyIsInllYXIiLCJBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyIsIkFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmciLCJyZWZlcmVuY2VzLnRoZURheUJlZm9yZSIsInJlZmVyZW5jZXMuZXZlbmluZyIsInJlZmVyZW5jZXMubW9ybmluZyIsInJlZmVyZW5jZXMubm9vbiIsInJlZmVyZW5jZXMubGFzdE5pZ2h0IiwicmVmZXJlbmNlcy55ZXN0ZXJkYXlFdmVuaW5nIiwicmVmZXJlbmNlcy5taWRuaWdodCIsIkVOQ2FzdWFsRGF0ZVBhcnNlciIsIkVOQ2FzdWFsVGltZVBhcnNlciIsIkVOV2Vla2RheVBhcnNlciIsIlRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkiLCJlbi5zdHJpY3QiLCJlbi5jYXN1YWwiLCJjaHJvbm8uZW4iLCJFZGl0b3JTdWdnZXN0IiwiQ0xFQU5VUF9JTlRFUlZBTCIsIlBsdWdpbiIsIk5vdGljZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUQ7QUFDQSxJQUFJLFFBQVEsR0FBR0EsOEJBQW1CLENBQUM7QUFDbkM7QUFDQSxNQUFNLHlCQUF5QixHQUFHLFlBQVksQ0FBQztBQUMvQyxNQUFNLDBCQUEwQixHQUFHLFlBQVksQ0FBQztBQUNoRCxNQUFNLDJCQUEyQixHQUFHLFNBQVMsQ0FBQztBQUM5QyxNQUFNLDZCQUE2QixHQUFHLFdBQVcsQ0FBQztBQUNsRCxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUMxQztBQUNBLFNBQVMsOEJBQThCLENBQUMsV0FBVyxFQUFFO0FBQ3JEO0FBQ0EsSUFBSSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN6RSxJQUFJLE9BQU8sYUFBYSxJQUFJLGFBQWEsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLEVBQUUsT0FBTyxDQUFDO0FBQzNFLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsb0JBQW9CLEdBQUc7QUFDaEMsSUFBSSxJQUFJO0FBQ1I7QUFDQSxRQUFRLE1BQU0sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUN4RCxRQUFRLElBQUksOEJBQThCLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDckQsWUFBWSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDNUcsWUFBWSxPQUFPO0FBQ25CLGdCQUFnQixNQUFNLEVBQUUsTUFBTSxJQUFJLHlCQUF5QjtBQUMzRCxnQkFBZ0IsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQzVDLGdCQUFnQixRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDaEQsYUFBYSxDQUFDO0FBQ2QsU0FBUztBQUNULFFBQVEsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsZUFBZSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztBQUNuSCxRQUFRLE9BQU87QUFDZixZQUFZLE1BQU0sRUFBRSxNQUFNLElBQUkseUJBQXlCO0FBQ3ZELFlBQVksTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ3hDLFlBQVksUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQzVDLFNBQVMsQ0FBQztBQUNWLEtBQUs7QUFDTCxJQUFJLE9BQU8sR0FBRyxFQUFFO0FBQ2hCLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRSxLQUFLO0FBQ0wsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxxQkFBcUIsR0FBRztBQUNqQyxJQUFJLElBQUk7QUFDUjtBQUNBLFFBQVEsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDakQsUUFBUSxNQUFNLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxDQUFDO0FBQzlFLFFBQVEsTUFBTSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztBQUNsRyxRQUFRLElBQUksOEJBQThCLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDdEQsWUFBWSxPQUFPO0FBQ25CLGdCQUFnQixNQUFNLEVBQUUscUJBQXFCLENBQUMsTUFBTSxJQUFJLDBCQUEwQjtBQUNsRixnQkFBZ0IsTUFBTSxFQUFFLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ2xFLGdCQUFnQixRQUFRLEVBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDdEUsYUFBYSxDQUFDO0FBQ2QsU0FBUztBQUNULFFBQVEsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLElBQUksRUFBRSxDQUFDO0FBQ2hELFFBQVEsT0FBTztBQUNmLFlBQVksTUFBTSxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSwwQkFBMEI7QUFDM0UsWUFBWSxNQUFNLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDM0QsWUFBWSxRQUFRLEVBQUUsUUFBUSxDQUFDLGtCQUFrQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDL0QsU0FBUyxDQUFDO0FBQ1YsS0FBSztBQUNMLElBQUksT0FBTyxHQUFHLEVBQUU7QUFDaEIsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25FLEtBQUs7QUFDTCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHNCQUFzQixHQUFHO0FBQ2xDO0FBQ0EsSUFBSSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUM3QyxJQUFJLElBQUk7QUFDUixRQUFRLE1BQU0sUUFBUSxHQUFHLENBQUMsOEJBQThCLENBQUMsU0FBUyxDQUFDO0FBQ25FLFlBQVksYUFBYSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPO0FBQ3hFLFlBQVksRUFBRSxDQUFDO0FBQ2YsUUFBUSxPQUFPO0FBQ2YsWUFBWSxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sSUFBSSwyQkFBMkI7QUFDbEUsWUFBWSxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ2pELFlBQVksUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNyRCxTQUFTLENBQUM7QUFDVixLQUFLO0FBQ0wsSUFBSSxPQUFPLEdBQUcsRUFBRTtBQUNoQixRQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEUsS0FBSztBQUNMLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsd0JBQXdCLEdBQUc7QUFDcEM7QUFDQSxJQUFJLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQzdDLElBQUksSUFBSTtBQUNSLFFBQVEsTUFBTSxRQUFRLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxXQUFXLENBQUM7QUFDckUsWUFBWSxhQUFhLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVM7QUFDMUUsWUFBWSxFQUFFLENBQUM7QUFDZixRQUFRLE9BQU87QUFDZixZQUFZLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxJQUFJLDZCQUE2QjtBQUNwRSxZQUFZLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDakQsWUFBWSxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ3JELFNBQVMsQ0FBQztBQUNWLEtBQUs7QUFDTCxJQUFJLE9BQU8sR0FBRyxFQUFFO0FBQ2hCLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0RSxLQUFLO0FBQ0wsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxxQkFBcUIsR0FBRztBQUNqQztBQUNBLElBQUksTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDN0MsSUFBSSxJQUFJO0FBQ1IsUUFBUSxNQUFNLFFBQVEsR0FBRyxDQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQztBQUNsRSxZQUFZLGFBQWEsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTTtBQUN2RSxZQUFZLEVBQUUsQ0FBQztBQUNmLFFBQVEsT0FBTztBQUNmLFlBQVksTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLElBQUksMEJBQTBCO0FBQ2pFLFlBQVksTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNqRCxZQUFZLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDckQsU0FBUyxDQUFDO0FBQ1YsS0FBSztBQUNMLElBQUksT0FBTyxHQUFHLEVBQUU7QUFDaEIsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25FLEtBQUs7QUFDTCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsWUFBWSxFQUFFO0FBQy9CO0FBQ0EsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDbkIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pELFFBQVEsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pELEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsRCxRQUFRLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHO0FBQ2pDLFlBQVksU0FBUztBQUNyQjtBQUNBO0FBQ0EsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtBQUN2QixRQUFRLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0I7QUFDQSxJQUFJLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBQ0QsU0FBUyxRQUFRLENBQUMsUUFBUSxFQUFFO0FBQzVCLElBQUksSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBQ0QsZUFBZSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7QUFDeEMsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZixJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNyQixRQUFRLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzFELFlBQVksTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQsU0FBUztBQUNULEtBQUs7QUFDTCxDQUFDO0FBQ0QsZUFBZSxXQUFXLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRTtBQUNoRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ25DLFFBQVEsUUFBUSxJQUFJLEtBQUssQ0FBQztBQUMxQixLQUFLO0FBQ0wsSUFBSSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNuRSxJQUFJLE1BQU0sa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBQ0QsZUFBZSxlQUFlLENBQUMsUUFBUSxFQUFFO0FBQ3pDLElBQUksTUFBTSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ2hELElBQUksTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxJQUFJLElBQUksWUFBWSxLQUFLLEdBQUcsRUFBRTtBQUM5QixRQUFRLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNDLEtBQUs7QUFDTCxJQUFJLElBQUk7QUFDUixRQUFRLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbEYsUUFBUSxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDOUQ7QUFDQSxRQUFRLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNwRSxRQUFRLE9BQU8sQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDckMsS0FBSztBQUNMLElBQUksT0FBTyxHQUFHLEVBQUU7QUFDaEIsUUFBUSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsd0NBQXdDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZGLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7QUFDdEUsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFCLEtBQUs7QUFDTCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRSxXQUFXLEdBQUcsS0FBSyxFQUFFO0FBQy9DLElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMxRCxJQUFJLE9BQU8sQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBQ0QsU0FBUyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUU7QUFDekMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFO0FBQ2hELElBQUksSUFBSSxXQUFXLEtBQUssTUFBTSxFQUFFO0FBQ2hDLFFBQVEsTUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUQsUUFBUSxRQUFRLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQzNDLGFBQWEsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7QUFDeEUsS0FBSztBQUNMLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUNELFNBQVMsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUU7QUFDNUMsSUFBSSxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUNELFNBQVMsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUU7QUFDNUMsSUFBSSxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBQ0QsU0FBUyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFO0FBQ3BELElBQUksTUFBTSxXQUFXLEdBQUc7QUFDeEIsUUFBUSxHQUFHLEVBQUUsb0JBQW9CO0FBQ2pDLFFBQVEsSUFBSSxFQUFFLHFCQUFxQjtBQUNuQyxRQUFRLEtBQUssRUFBRSxzQkFBc0I7QUFDckMsUUFBUSxPQUFPLEVBQUUsd0JBQXdCO0FBQ3pDLFFBQVEsSUFBSSxFQUFFLHFCQUFxQjtBQUNuQyxLQUFLLENBQUM7QUFDTixJQUFJLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdEUsSUFBSSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQzdCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMLElBQUksSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUU7QUFDaEQsUUFBUSxJQUFJLFdBQVcsS0FBSyxNQUFNLEVBQUU7QUFDcEMsWUFBWSxNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRSxZQUFZLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtBQUM3QyxnQkFBZ0IsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVE7QUFDN0M7QUFDQSxnQkFBZ0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3RSxhQUFhO0FBQ2IsU0FBUztBQUNULEtBQUs7QUFDTCxJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLENBQUM7QUFDRDtBQUNBLE1BQU0sNEJBQTRCLFNBQVMsS0FBSyxDQUFDO0FBQ2pELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZUFBZSxDQUFDLElBQUksRUFBRTtBQUNyQyxJQUFJLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDM0IsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQzFCLElBQUksTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqQyxJQUFJLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLG9CQUFvQixFQUFFLENBQUM7QUFDaEUsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLEdBQUcsTUFBTSxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUUsSUFBSSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLElBQUksTUFBTSxjQUFjLEdBQUcsTUFBTSxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELElBQUksSUFBSTtBQUNSLFFBQVEsTUFBTSxXQUFXLEdBQUcsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxnQkFBZ0I7QUFDL0UsYUFBYSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDO0FBQ2xELGFBQWEsT0FBTyxDQUFDLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsRSxhQUFhLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUM7QUFDbkQsYUFBYSxPQUFPLENBQUMsMERBQTBELEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFlBQVksS0FBSztBQUMxSSxZQUFZLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLFlBQVksTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztBQUNqRCxnQkFBZ0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQ3JDLGdCQUFnQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7QUFDekMsZ0JBQWdCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUN6QyxhQUFhLENBQUMsQ0FBQztBQUNmLFlBQVksSUFBSSxJQUFJLEVBQUU7QUFDdEIsZ0JBQWdCLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvRCxhQUFhO0FBQ2IsWUFBWSxJQUFJLFlBQVksRUFBRTtBQUM5QixnQkFBZ0IsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM1RSxhQUFhO0FBQ2IsWUFBWSxPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUMsU0FBUyxDQUFDO0FBQ1YsYUFBYSxPQUFPLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdGLGFBQWEsT0FBTyxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkY7QUFDQSxRQUFRLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNyRCxRQUFRLE9BQU8sV0FBVyxDQUFDO0FBQzNCLEtBQUs7QUFDTCxJQUFJLE9BQU8sR0FBRyxFQUFFO0FBQ2hCLFFBQVEsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLHdCQUF3QixFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6RSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQzFELEtBQUs7QUFDTCxDQUFDO0FBQ0QsU0FBUyxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUN4QyxJQUFJLE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDdkQsQ0FBQztBQUNELFNBQVMsZ0JBQWdCLEdBQUc7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNqQyxJQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO0FBQzlDLElBQUksTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO0FBQzNCLFFBQVEsTUFBTSxJQUFJLDRCQUE0QixDQUFDLG1DQUFtQyxDQUFDLENBQUM7QUFDcEYsS0FBSztBQUNMLElBQUksTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQzFCLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLEtBQUs7QUFDL0QsUUFBUSxJQUFJLElBQUksWUFBWSxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQzVDLFlBQVksTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN0RCxZQUFZLElBQUksSUFBSSxFQUFFO0FBQ3RCLGdCQUFnQixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNELGdCQUFnQixVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDLGFBQWE7QUFDYixTQUFTO0FBQ1QsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUM7QUFDRDtBQUNBLE1BQU0sNkJBQTZCLFNBQVMsS0FBSyxDQUFDO0FBQ2xELENBQUM7QUFDRCxTQUFTLGFBQWEsR0FBRztBQUN6QixJQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFDOUI7QUFDQSxJQUFJLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ2xELElBQUksTUFBTSxVQUFVLEdBQUc7QUFDdkIsUUFBUSxRQUFRO0FBQ2hCLFFBQVEsUUFBUTtBQUNoQixRQUFRLFNBQVM7QUFDakIsUUFBUSxXQUFXO0FBQ25CLFFBQVEsVUFBVTtBQUNsQixRQUFRLFFBQVE7QUFDaEIsUUFBUSxVQUFVO0FBQ2xCLEtBQUssQ0FBQztBQUNOLElBQUksT0FBTyxTQUFTLEVBQUU7QUFDdEIsUUFBUSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLFFBQVEsU0FBUyxFQUFFLENBQUM7QUFDcEIsS0FBSztBQUNMLElBQUksT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQztBQUNELFNBQVMsMEJBQTBCLENBQUMsYUFBYSxFQUFFO0FBQ25ELElBQUksT0FBTyxhQUFhLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUNELGVBQWUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFO0FBQ3RDLElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDakMsSUFBSSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO0FBQ2pFLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxHQUFHLE1BQU0sZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFFLElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6QyxJQUFJLE1BQU0sY0FBYyxHQUFHLE1BQU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMvRCxJQUFJLElBQUk7QUFDUixRQUFRLE1BQU0sV0FBVyxHQUFHLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCO0FBQy9FLGFBQWEsT0FBTyxDQUFDLDBEQUEwRCxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxZQUFZLEtBQUs7QUFDMUksWUFBWSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDeEMsWUFBWSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO0FBQ2pELGdCQUFnQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDckMsZ0JBQWdCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUN6QyxnQkFBZ0IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO0FBQ3pDLGFBQWEsQ0FBQyxDQUFDO0FBQ2YsWUFBWSxJQUFJLElBQUksRUFBRTtBQUN0QixnQkFBZ0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9ELGFBQWE7QUFDYixZQUFZLElBQUksWUFBWSxFQUFFO0FBQzlCLGdCQUFnQixPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzVFLGFBQWE7QUFDYixZQUFZLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QyxTQUFTLENBQUM7QUFDVixhQUFhLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUM7QUFDbkQsYUFBYSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6RSxhQUFhLE9BQU8sQ0FBQyw4RUFBOEUsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsWUFBWSxLQUFLO0FBQ3JJLFlBQVksTUFBTSxHQUFHLEdBQUcsMEJBQTBCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUQsWUFBWSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDWjtBQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM1RCxRQUFRLE9BQU8sV0FBVyxDQUFDO0FBQzNCLEtBQUs7QUFDTCxJQUFJLE9BQU8sR0FBRyxFQUFFO0FBQ2hCLFFBQVEsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLHdCQUF3QixFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6RSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQzFELEtBQUs7QUFDTCxDQUFDO0FBQ0QsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtBQUMxQyxJQUFJLE9BQU8sV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDekQsQ0FBQztBQUNELFNBQVMsaUJBQWlCLEdBQUc7QUFDN0IsSUFBSSxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsNkJBQTZCLEVBQUUsRUFBRTtBQUMxQyxRQUFRLE9BQU8sV0FBVyxDQUFDO0FBQzNCLEtBQUs7QUFDTCxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ2pDLElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLHFCQUFxQixFQUFFLENBQUM7QUFDL0MsSUFBSSxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDMUYsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7QUFDNUIsUUFBUSxNQUFNLElBQUksNkJBQTZCLENBQUMsb0NBQW9DLENBQUMsQ0FBQztBQUN0RixLQUFLO0FBQ0wsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksS0FBSztBQUNoRSxRQUFRLElBQUksSUFBSSxZQUFZLFFBQVEsQ0FBQyxLQUFLLEVBQUU7QUFDNUMsWUFBWSxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZELFlBQVksSUFBSSxJQUFJLEVBQUU7QUFDdEIsZ0JBQWdCLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDNUQsZ0JBQWdCLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDL0MsYUFBYTtBQUNiLFNBQVM7QUFDVCxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxXQUFXLENBQUM7QUFDdkIsQ0FBQztBQUNEO0FBQ0EsTUFBTSw4QkFBOEIsU0FBUyxLQUFLLENBQUM7QUFDbkQsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUU7QUFDdkMsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNqQyxJQUFJLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLHNCQUFzQixFQUFFLENBQUM7QUFDbEUsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLEdBQUcsTUFBTSxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUUsSUFBSSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLElBQUksTUFBTSxjQUFjLEdBQUcsTUFBTSxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELElBQUksSUFBSTtBQUNSLFFBQVEsTUFBTSxXQUFXLEdBQUcsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxnQkFBZ0I7QUFDL0UsYUFBYSxPQUFPLENBQUMsMERBQTBELEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFlBQVksS0FBSztBQUMxSSxZQUFZLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN4QyxZQUFZLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFDakQsZ0JBQWdCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUNyQyxnQkFBZ0IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO0FBQ3pDLGdCQUFnQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7QUFDekMsYUFBYSxDQUFDLENBQUM7QUFDZixZQUFZLElBQUksSUFBSSxFQUFFO0FBQ3RCLGdCQUFnQixXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0QsYUFBYTtBQUNiLFlBQVksSUFBSSxZQUFZLEVBQUU7QUFDOUIsZ0JBQWdCLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDNUUsYUFBYTtBQUNiLFlBQVksT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlDLFNBQVMsQ0FBQztBQUNWLGFBQWEsT0FBTyxDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQztBQUNsRCxhQUFhLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pFLGFBQWEsT0FBTyxDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDckQ7QUFDQSxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDNUQsUUFBUSxPQUFPLFdBQVcsQ0FBQztBQUMzQixLQUFLO0FBQ0wsSUFBSSxPQUFPLEdBQUcsRUFBRTtBQUNoQixRQUFRLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekUsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUMxRCxLQUFLO0FBQ0wsQ0FBQztBQUNELFNBQVMsY0FBYyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7QUFDNUMsSUFBSSxPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQzNELENBQUM7QUFDRCxTQUFTLGtCQUFrQixHQUFHO0FBQzlCLElBQUksTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLDhCQUE4QixFQUFFLEVBQUU7QUFDM0MsUUFBUSxPQUFPLFlBQVksQ0FBQztBQUM1QixLQUFLO0FBQ0wsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNqQyxJQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxzQkFBc0IsRUFBRSxDQUFDO0FBQ2hELElBQUksTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNGLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO0FBQzdCLFFBQVEsTUFBTSxJQUFJLDhCQUE4QixDQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFDeEYsS0FBSztBQUNMLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLEtBQUs7QUFDakUsUUFBUSxJQUFJLElBQUksWUFBWSxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQzVDLFlBQVksTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN4RCxZQUFZLElBQUksSUFBSSxFQUFFO0FBQ3RCLGdCQUFnQixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzdELGdCQUFnQixZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hELGFBQWE7QUFDYixTQUFTO0FBQ1QsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE9BQU8sWUFBWSxDQUFDO0FBQ3hCLENBQUM7QUFDRDtBQUNBLE1BQU0sZ0NBQWdDLFNBQVMsS0FBSyxDQUFDO0FBQ3JELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQW1CLENBQUMsSUFBSSxFQUFFO0FBQ3pDLElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDakMsSUFBSSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyx3QkFBd0IsRUFBRSxDQUFDO0FBQ3BFLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxHQUFHLE1BQU0sZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFFLElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6QyxJQUFJLE1BQU0sY0FBYyxHQUFHLE1BQU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMvRCxJQUFJLElBQUk7QUFDUixRQUFRLE1BQU0sV0FBVyxHQUFHLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCO0FBQy9FLGFBQWEsT0FBTyxDQUFDLDBEQUEwRCxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxZQUFZLEtBQUs7QUFDMUksWUFBWSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDeEMsWUFBWSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO0FBQ2pELGdCQUFnQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDckMsZ0JBQWdCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUN6QyxnQkFBZ0IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO0FBQ3pDLGFBQWEsQ0FBQyxDQUFDO0FBQ2YsWUFBWSxJQUFJLElBQUksRUFBRTtBQUN0QixnQkFBZ0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9ELGFBQWE7QUFDYixZQUFZLElBQUksWUFBWSxFQUFFO0FBQzlCLGdCQUFnQixPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzVFLGFBQWE7QUFDYixZQUFZLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QyxTQUFTLENBQUM7QUFDVixhQUFhLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUM7QUFDbEQsYUFBYSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6RSxhQUFhLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzVELFFBQVEsT0FBTyxXQUFXLENBQUM7QUFDM0IsS0FBSztBQUNMLElBQUksT0FBTyxHQUFHLEVBQUU7QUFDaEIsUUFBUSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pFLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFDMUQsS0FBSztBQUNMLENBQUM7QUFDRCxTQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7QUFDM0MsSUFBSSxPQUFPLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQzFELENBQUM7QUFDRCxTQUFTLG9CQUFvQixHQUFHO0FBQ2hDLElBQUksTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLElBQUksSUFBSSxDQUFDLGdDQUFnQyxFQUFFLEVBQUU7QUFDN0MsUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUN6QixLQUFLO0FBQ0wsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNqQyxJQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyx3QkFBd0IsRUFBRSxDQUFDO0FBQ2xELElBQUksTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4RixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7QUFDMUIsUUFBUSxNQUFNLElBQUksZ0NBQWdDLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQUM1RixLQUFLO0FBQ0wsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLEtBQUs7QUFDOUQsUUFBUSxJQUFJLElBQUksWUFBWSxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQzVDLFlBQVksTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxRCxZQUFZLElBQUksSUFBSSxFQUFFO0FBQ3RCLGdCQUFnQixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9ELGdCQUFnQixTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdDLGFBQWE7QUFDYixTQUFTO0FBQ1QsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFDRDtBQUNBLE1BQU0sNkJBQTZCLFNBQVMsS0FBSyxDQUFDO0FBQ2xELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFO0FBQ3RDLElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDakMsSUFBSSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO0FBQ2pFLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxHQUFHLE1BQU0sZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFFLElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6QyxJQUFJLE1BQU0sY0FBYyxHQUFHLE1BQU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMvRCxJQUFJLElBQUk7QUFDUixRQUFRLE1BQU0sV0FBVyxHQUFHLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCO0FBQy9FLGFBQWEsT0FBTyxDQUFDLDBEQUEwRCxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxZQUFZLEtBQUs7QUFDMUksWUFBWSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDeEMsWUFBWSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO0FBQ2pELGdCQUFnQixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDckMsZ0JBQWdCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUN6QyxnQkFBZ0IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO0FBQ3pDLGFBQWEsQ0FBQyxDQUFDO0FBQ2YsWUFBWSxJQUFJLElBQUksRUFBRTtBQUN0QixnQkFBZ0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9ELGFBQWE7QUFDYixZQUFZLElBQUksWUFBWSxFQUFFO0FBQzlCLGdCQUFnQixPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzVFLGFBQWE7QUFDYixZQUFZLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QyxTQUFTLENBQUM7QUFDVixhQUFhLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUM7QUFDbEQsYUFBYSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6RSxhQUFhLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzVELFFBQVEsT0FBTyxXQUFXLENBQUM7QUFDM0IsS0FBSztBQUNMLElBQUksT0FBTyxHQUFHLEVBQUU7QUFDaEIsUUFBUSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsd0JBQXdCLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pFLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFDMUQsS0FBSztBQUNMLENBQUM7QUFDRCxTQUFTLGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQzFDLElBQUksT0FBTyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN6RCxDQUFDO0FBQ0QsU0FBUyxpQkFBaUIsR0FBRztBQUM3QixJQUFJLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxFQUFFO0FBQzFDLFFBQVEsT0FBTyxXQUFXLENBQUM7QUFDM0IsS0FBSztBQUNMLElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDakMsSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztBQUMvQyxJQUFJLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMxRixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtBQUM1QixRQUFRLE1BQU0sSUFBSSw2QkFBNkIsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0FBQ3RGLEtBQUs7QUFDTCxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxLQUFLO0FBQ2hFLFFBQVEsSUFBSSxJQUFJLFlBQVksUUFBUSxDQUFDLEtBQUssRUFBRTtBQUM1QyxZQUFZLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkQsWUFBWSxJQUFJLElBQUksRUFBRTtBQUN0QixnQkFBZ0IsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1RCxnQkFBZ0IsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMvQyxhQUFhO0FBQ2IsU0FBUztBQUNULEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxPQUFPLFdBQVcsQ0FBQztBQUN2QixDQUFDO0FBQ0Q7QUFDQSxTQUFTLDRCQUE0QixHQUFHO0FBQ3hDLElBQUksTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUMzQjtBQUNBLElBQUksTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN4RSxJQUFJLElBQUksZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsT0FBTyxFQUFFO0FBQ3RELFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2xFLElBQUksT0FBTyxhQUFhLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO0FBQ25FLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsNkJBQTZCLEdBQUc7QUFDekMsSUFBSSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQzNDLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2xFLElBQUksT0FBTyxhQUFhLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO0FBQ3BFLENBQUM7QUFDRCxTQUFTLDhCQUE4QixHQUFHO0FBQzFDLElBQUksTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUMzQjtBQUNBLElBQUksTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUNsRSxJQUFJLE9BQU8sYUFBYSxJQUFJLGFBQWEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztBQUNyRSxDQUFDO0FBQ0QsU0FBUyxnQ0FBZ0MsR0FBRztBQUM1QyxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFDM0I7QUFDQSxJQUFJLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDbEUsSUFBSSxPQUFPLGFBQWEsSUFBSSxhQUFhLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUM7QUFDdkUsQ0FBQztBQUNELFNBQVMsNkJBQTZCLEdBQUc7QUFDekMsSUFBSSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2xFLElBQUksT0FBTyxhQUFhLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO0FBQ3BFLENBQUM7QUFDRCxTQUFTLHVCQUF1QixDQUFDLFdBQVcsRUFBRTtBQUM5QyxJQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ3hCLFFBQVEsR0FBRyxFQUFFLG9CQUFvQjtBQUNqQyxRQUFRLElBQUksRUFBRSxxQkFBcUI7QUFDbkMsUUFBUSxLQUFLLEVBQUUsc0JBQXNCO0FBQ3JDLFFBQVEsT0FBTyxFQUFFLHdCQUF3QjtBQUN6QyxRQUFRLElBQUksRUFBRSxxQkFBcUI7QUFDbkMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ25CLElBQUksT0FBTyxXQUFXLEVBQUUsQ0FBQztBQUN6QixDQUFDO0FBQ0QsU0FBUyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFO0FBQy9DLElBQUksTUFBTSxRQUFRLEdBQUc7QUFDckIsUUFBUSxHQUFHLEVBQUUsZUFBZTtBQUM1QixRQUFRLEtBQUssRUFBRSxpQkFBaUI7QUFDaEMsUUFBUSxJQUFJLEVBQUUsZ0JBQWdCO0FBQzlCLEtBQUssQ0FBQztBQUNOLElBQUksT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUNEO0FBQ2lDLElBQUEsQ0FBQSx5QkFBQSxHQUFHLDBCQUEwQjtBQUMzQixJQUFBLENBQUEsMkJBQUEsR0FBRyw0QkFBNEI7QUFDN0IsSUFBQSxDQUFBLDZCQUFBLEdBQUcsOEJBQThCO0FBQ3BDLElBQUEsQ0FBQSwwQkFBQSxHQUFHLDJCQUEyQjtBQUM5QixJQUFBLENBQUEsMEJBQUEsR0FBRywyQkFBMkI7QUFDNUIsSUFBQSxDQUFBLDRCQUFBLEdBQUcsNkJBQTZCO0FBQzlCLElBQUEsQ0FBQSw4QkFBQSxHQUFHLCtCQUErQjtBQUNoQyxJQUFBLENBQUEsZ0NBQUEsR0FBRyxpQ0FBaUM7QUFDdkMsSUFBQSxDQUFBLDZCQUFBLEdBQUcsOEJBQThCO0FBQ2pDLElBQUEsQ0FBQSw2QkFBQSxHQUFHLDhCQUE4QjtBQUN0RSxJQUF1QixpQkFBQSxHQUFBLElBQUEsQ0FBQSxlQUFBLEdBQUcsZUFBZSxDQUFDO0FBQ2pCLElBQUEsQ0FBQSxpQkFBQSxHQUFHLGtCQUFrQjtBQUNwQixJQUFBLENBQUEsa0JBQUEsR0FBRyxtQkFBbUI7QUFDckIsSUFBQSxDQUFBLG1CQUFBLEdBQUcsb0JBQW9CO0FBQzFCLElBQUEsQ0FBQSxnQkFBQSxHQUFHLGlCQUFpQjtBQUNwQixJQUFBLENBQUEsZ0JBQUEsR0FBRyxpQkFBaUI7QUFDNUMsSUFBd0Isa0JBQUEsR0FBQSxJQUFBLENBQUEsZ0JBQUEsR0FBRyxnQkFBZ0IsQ0FBQztBQUNsQixJQUFBLENBQUEsa0JBQUEsR0FBRyxtQkFBbUI7QUFDcEIsSUFBQSxDQUFBLG9CQUFBLEdBQUcscUJBQXFCO0FBQzNCLElBQUEsQ0FBQSxpQkFBQSxHQUFHLGtCQUFrQjtBQUNyQixJQUFBLENBQUEsaUJBQUEsR0FBRyxrQkFBa0I7QUFDOUMsSUFBb0IsY0FBQSxHQUFBLElBQUEsQ0FBQSxZQUFBLEdBQUcsWUFBWSxDQUFDO0FBQ1IsSUFBQSxDQUFBLG9CQUFBLEdBQUcscUJBQXFCO0FBQzdCLElBQUEsQ0FBQSxlQUFBLEdBQUcsZ0JBQWdCO0FBQ25CLElBQUEsQ0FBQSxlQUFBLEdBQUcsZ0JBQWdCO0FBQ3hCLElBQUEsQ0FBQSxVQUFBLEdBQUcsV0FBVztBQUNWLElBQUEsQ0FBQSxjQUFBLEdBQUcsZUFBZTtBQUNWLElBQUEsQ0FBQSxzQkFBQSxHQUFHLHVCQUF1QjtBQUN6QixJQUFBLENBQUEsdUJBQUEsR0FBRyx3QkFBd0I7QUFDbEMsSUFBQSxDQUFBLGdCQUFBLEdBQUcsaUJBQWlCO0FBQ1osSUFBQSxDQUFBLHdCQUFBLEdBQUcseUJBQXlCO0FBQ3JDLElBQUEsQ0FBQSxlQUFBLEdBQUcsZ0JBQWdCO0FBQ3JCLElBQUEsQ0FBQSxhQUFBLEdBQUcsY0FBYztBQUNULElBQUEsQ0FBQSxxQkFBQSxHQUFHLHNCQUFzQjtBQUNqQyxJQUFBLENBQUEsYUFBQSxHQUFHLGNBQWM7QUFDdEMsSUFBQSxDQUFBLHFCQUE2QixHQUFHOztBQzF0QmhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU0sR0FBNEIsSUFBSSxLQUFLLEVBQzlDLE1BQWlCLFNBQVMsR0FDM0I7SUFDRSxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQWUsS0FDdkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBaUQsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDO0lBQ3hGLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxLQUFjLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDO0FBQ3RGLENBQUEsQ0FDRjs7QUN4QkQ7O0FBRUc7QUFHSDs7QUFFRztNQUNVLGFBQWEsQ0FBQTtBQUN4Qjs7Ozs7QUFLRztBQUNILElBQUEsT0FBTyxNQUFNLENBQUMsSUFBVSxFQUFFLE1BQWMsRUFBQTtRQUN0QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDcEM7QUFFRDs7Ozs7OztBQU9HO0lBQ0gsT0FBTyxjQUFjLENBQ25CLElBQVUsRUFDVixVQUFrQixFQUNsQixVQUFrQixFQUNsQixTQUFTLEdBQUcsR0FBRyxFQUFBO1FBRWYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsUUFBQSxPQUFPLEdBQUcsT0FBTyxDQUFBLEVBQUcsU0FBUyxDQUFHLEVBQUEsT0FBTyxFQUFFLENBQUM7S0FDM0M7QUFDRjs7Ozs7QUNyQ0Q7QUFDQSxDQUFDLFdBQVc7QUFFWixFQUFFLElBQUksTUFBTSxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6RjtBQUNBLEVBQUUsQ0FBQyxTQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDM0IsSUFJVyxJQUFrQyxNQUFNLENBQUMsT0FBTyxFQUFFO0FBQzdELE1BQU0sT0FBTyxNQUFBLENBQUEsT0FBQSxHQUFpQixPQUFPLEVBQUUsQ0FBQztBQUN4QyxLQUFLLE1BQU07QUFDWCxNQUFNLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNuQyxLQUFLO0FBQ0wsR0FBRyxHQUFHLE9BQU8sSUFBSSxLQUFLLFdBQVcsSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsV0FBVztBQUM5RSxJQUFJLElBQUksVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUM7QUFDckM7QUFDQSxJQUFJLFVBQVUsR0FBRyxDQUFDLFdBQVc7QUFDN0IsTUFBTSxTQUFTLFVBQVUsR0FBRztBQUM1QixRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHO0FBQzFFLFVBQVUsTUFBTSxFQUFFLEVBQUU7QUFDcEIsVUFBVSxRQUFRLEVBQUUsRUFBRTtBQUN0QixTQUFTLENBQUM7QUFDVixRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLE9BQU87QUFDUDtBQUNBLE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsd0JBQXdCLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFO0FBQ3RJLFFBQVEsSUFBSSxXQUFXLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUM7QUFDbkQ7QUFDQSxRQUFRLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUM3QixVQUFVLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQ3ZDLFNBQVM7QUFDVCxRQUFRLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRTtBQUNqQyxVQUFVLElBQUksSUFBSSxDQUFDO0FBQ25CO0FBQ0EsVUFBVSxJQUFJLEdBQUcsT0FBTyxHQUFHLENBQUM7QUFDNUIsVUFBVSxPQUFPLElBQUksS0FBSyxVQUFVLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25FLFNBQVMsQ0FBQztBQUNWLFFBQVEsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsRUFBRTtBQUM5QyxVQUFVLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDN0IsVUFBVSxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLFVBQVUsVUFBVSxHQUFHLHNCQUFzQixDQUFDO0FBQzlDLFVBQVUsT0FBTyxHQUFHLHdCQUF3QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDbkUsU0FBUyxNQUFNO0FBQ2YsVUFBVSxJQUFJLE9BQU8sc0JBQXNCLEtBQUssUUFBUSxFQUFFO0FBQzFELFlBQVksV0FBVyxHQUFHLElBQUksQ0FBQztBQUMvQixZQUFZLEdBQUcsR0FBRyxzQkFBc0IsQ0FBQztBQUN6QyxZQUFZLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQztBQUNsRCxZQUFZLE9BQU8sR0FBRyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQ2hFLFdBQVcsTUFBTTtBQUNqQixZQUFZLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQztBQUNqRCxZQUFZLElBQUksT0FBTyx3QkFBd0IsS0FBSyxRQUFRLEVBQUU7QUFDOUQsY0FBYyxHQUFHLEdBQUcsd0JBQXdCLENBQUM7QUFDN0MsY0FBYyxVQUFVLEdBQUcsbUJBQW1CLENBQUM7QUFDL0MsY0FBYyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ2hDLGFBQWEsTUFBTTtBQUNuQixjQUFjLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDekIsY0FBYyxVQUFVLEdBQUcsd0JBQXdCLENBQUM7QUFDcEQsY0FBYyxPQUFPLEdBQUcsbUJBQW1CLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUNsRSxhQUFhO0FBQ2IsV0FBVztBQUNYLFNBQVM7QUFDVCxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzVCLFVBQVUsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7QUFDdEMsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLFdBQVc7QUFDWCxVQUFVLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbkQsU0FBUyxNQUFNO0FBQ2YsVUFBVSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2pGLFNBQVM7QUFDVCxPQUFPLENBQUM7QUFDUjtBQUNBLE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUU7QUFDN0MsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUM7QUFDckQ7QUFDQSxRQUFRLEtBQUssQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLEdBQUc7QUFDaEMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRTtBQUMxQixZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsV0FBVztBQUNYLFNBQVM7QUFDVCxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLEdBQUc7QUFDbEMsVUFBVSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUM3QixVQUFVLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDeEIsVUFBVSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUM3RCxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELFdBQVc7QUFDWCxVQUFVLE9BQU8sUUFBUSxDQUFDO0FBQzFCLFNBQVM7QUFDVCxPQUFPLENBQUM7QUFDUjtBQUNBLE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQzdELFFBQVEsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQyxPQUFPLENBQUM7QUFDUjtBQUNBLE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUU7QUFDbEQsUUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3BDLE9BQU8sQ0FBQztBQUNSO0FBQ0EsTUFBTSxVQUFVLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxTQUFTLEdBQUcsRUFBRTtBQUN4RCxRQUFRLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUMsT0FBTyxDQUFDO0FBQ1I7QUFDQSxNQUFNLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFdBQVc7QUFDOUMsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekIsUUFBUSxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNuQyxPQUFPLENBQUM7QUFDUjtBQUNBLE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsV0FBVztBQUNsRCxRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRztBQUMzQixVQUFVLE1BQU0sRUFBRSxFQUFFO0FBQ3BCLFVBQVUsUUFBUSxFQUFFLEVBQUU7QUFDdEIsU0FBUyxDQUFDO0FBQ1YsT0FBTyxDQUFDO0FBQ1I7QUFDQSxNQUFNLFVBQVUsQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLFdBQVc7QUFDckQsUUFBUSxPQUFPLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLE9BQU8sQ0FBQztBQUNSO0FBQ0EsTUFBTSxVQUFVLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxTQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDbkUsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakI7QUFDQSxRQUFRLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRTtBQUN4QixVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsVUFBVSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUNyQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pFLFdBQVc7QUFDWCxTQUFTO0FBQ1QsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixPQUFPLENBQUM7QUFDUjtBQUNBLE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsU0FBUyxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFO0FBQ2pHLFFBQVEsSUFBSSxXQUFXLEVBQUUsTUFBTSxDQUFDO0FBQ2hDO0FBQ0EsUUFBUSxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7QUFDN0IsVUFBVSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUN2QyxTQUFTO0FBQ1QsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFO0FBQy9CLFVBQVUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzVFLFNBQVM7QUFDVCxRQUFRLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDOUQsUUFBUSxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUU7QUFDakMsVUFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2hHLFNBQVM7QUFDVCxRQUFRLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtBQUM1QixVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzlGLFNBQVM7QUFDVCxRQUFRLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtBQUM1QixVQUFVLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM1RSxTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixPQUFPLENBQUM7QUFDUjtBQUNBLE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsU0FBUyxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ2hHLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7QUFDM0Q7QUFDQSxRQUFRLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0IsUUFBUSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7QUFDM0IsVUFBVSxPQUFPLElBQUksQ0FBQztBQUN0QixTQUFTO0FBQ1QsUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDaEUsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtBQUN0RSxZQUFZLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLFlBQVksS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELFlBQVksT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDaEUsV0FBVyxNQUFNO0FBQ2pCLFlBQVksT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlFLFdBQVc7QUFDWCxTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDcEQsVUFBVSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUN6QyxZQUFZLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2hFLFdBQVc7QUFDWCxTQUFTLE1BQU07QUFDZixVQUFVLElBQUksS0FBSyxZQUFZLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQ3RELFlBQVksQ0FBQyxHQUFHLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFDN0IsWUFBWSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUMvRCxjQUFjLE1BQU0sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQztBQUNyQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsY0FBYyxDQUFDLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDOUUsZ0JBQWdCLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZHLGdCQUFnQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2hHLGVBQWU7QUFDZixhQUFhO0FBQ2IsV0FBVztBQUNYLFNBQVM7QUFDVCxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sQ0FBQztBQUNSO0FBQ0EsTUFBTSxVQUFVLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDN0QsUUFBUSxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvQyxRQUFRLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3QyxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ25CLE9BQU8sQ0FBQztBQUNSO0FBQ0EsTUFBTSxVQUFVLENBQUMsU0FBUyxDQUFDLGNBQWMsR0FBRyxTQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDcEUsUUFBUSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7QUFDeEQ7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7QUFDbkMsVUFBVSxPQUFPLElBQUksQ0FBQztBQUN0QixTQUFTO0FBQ1QsUUFBUSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUM3QixRQUFRLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzFELFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QixVQUFVLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUM1QixVQUFVLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRTtBQUM3QixZQUFZLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsWUFBWSxLQUFLLEdBQUcsS0FBSyxJQUFJLEtBQUssS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEQsV0FBVztBQUNYLFVBQVUsSUFBSSxLQUFLLEVBQUU7QUFDckIsWUFBWSxPQUFPLENBQUMsQ0FBQztBQUNyQixXQUFXO0FBQ1gsU0FBUztBQUNULFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsT0FBTyxDQUFDO0FBQ1I7QUFDQSxNQUFNLFVBQVUsQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLFNBQVMsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUU7QUFDN0UsUUFBUSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7QUFDekIsVUFBVSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM3RCxTQUFTO0FBQ1QsUUFBUSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3RGLE9BQU8sQ0FBQztBQUNSO0FBQ0EsTUFBTSxVQUFVLENBQUMsU0FBUyxDQUFDLGVBQWUsR0FBRyxTQUFTLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO0FBQzdFLFFBQVEsSUFBSSxHQUFHLEVBQUUsS0FBSyxDQUFDO0FBQ3ZCO0FBQ0EsUUFBUSxLQUFLLEdBQUcsSUFBSSxVQUFVLEVBQUU7QUFDaEMsVUFBVSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsVUFBVSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEQsU0FBUztBQUNULFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsT0FBTyxDQUFDO0FBQ1I7QUFDQSxNQUFNLE9BQU8sVUFBVSxDQUFDO0FBQ3hCO0FBQ0EsS0FBSyxHQUFHLENBQUM7QUFDVCxJQUFJLFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2xDLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7QUFDaEMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUNqQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxJQUFJLEVBQUU7QUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNoQjtBQUNBLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7QUFDL0IsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDeEIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCLE9BQU87QUFDUCxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDM0MsTUFBTSxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDekMsTUFBTSxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDN0IsS0FBSyxDQUFDO0FBQ04sSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHLENBQUMsQ0FBQztBQUNMO0FBQ0EsQ0FBQyxFQUFFLElBQUksQ0FBQ0MsY0FBSSxDQUFDLENBQUE7Ozs7O0FDcFFiLE1BQU1DLE1BQUksR0FBRztBQUNYLElBQUEsS0FBSyxFQUFFLE9BQU87QUFDZCxJQUFBLFFBQVEsRUFBRSxVQUFVO0FBQ3BCLElBQUEsU0FBUyxFQUFFLFdBQVc7QUFDdEIsSUFBQSxJQUFJLEVBQUUsTUFBTTtBQUNaLElBQUEsSUFBSSxFQUFFLE1BQU07QUFDWixJQUFBLElBQUksRUFBRSxNQUFNO0FBQ1osSUFBQSxFQUFFLEVBQUUsSUFBSTtBQUNSLElBQUEsTUFBTSxFQUFFLFFBQVE7QUFDaEIsSUFBQSxNQUFNLEVBQUUsUUFBUTtBQUNoQixJQUFBLE9BQU8sRUFBRSxTQUFTO0FBQ2xCLElBQUEsU0FBUyxFQUFFLFdBQVc7QUFDdEIsSUFBQSxRQUFRLEVBQUUsVUFBVTtBQUNwQixJQUFBLE1BQU0sRUFBRSxRQUFRO0FBQ2hCLElBQUEsUUFBUSxFQUFFLFVBQVU7QUFDcEIsSUFBQSxTQUFTLEVBQUUseUJBQXlCO0FBQ3BDLElBQUEsT0FBTyxFQUFFLHVCQUF1QjtBQUNoQyxJQUFBLE1BQU0sRUFBRSxzQkFBc0I7QUFDOUIsSUFBQSxPQUFPLEVBQUUsdUJBQXVCO0FBQ2hDLElBQUEsUUFBUSxFQUFFLHdCQUF3QjtBQUNsQyxJQUFBLE9BQU8sRUFBRSx1QkFBdUI7QUFDaEMsSUFBQSxRQUFRLEVBQUUsd0JBQXdCO0FBQ2xDLElBQUEsU0FBUyxFQUFFLHlCQUF5QjtBQUNwQyxJQUFBLFVBQVUsRUFBRSwwQkFBMEI7QUFDdEMsSUFBQSxRQUFRLEVBQUUsd0JBQXdCO0FBQ2xDLElBQUEsSUFBSSxFQUFFLE1BQU07QUFDWixJQUFBLEdBQUcsRUFBRSxLQUFLO0FBQ1YsSUFBQSxXQUFXLEVBQUUsdUJBQXVCO0FBQ3BDLElBQUEsWUFBWSxFQUFFLHVCQUF1QjtBQUNyQyxJQUFBLFFBQVEsRUFBRSxvQkFBb0I7QUFDOUIsSUFBQSxTQUFTLEVBQUUsb0JBQW9CO0FBQy9CLElBQUEsTUFBTSxFQUFFLDJCQUEyQjtBQUNuQyxJQUFBLElBQUksRUFBRSx1QkFBdUI7QUFDN0IsSUFBQSxHQUFHLEVBQUUsWUFBWTtBQUNqQixJQUFBLElBQUksRUFBRSxjQUFjO0FBQ3BCLElBQUEsS0FBSyxFQUFFLG1CQUFtQjtBQUMxQixJQUFBLElBQUksRUFBRSxxQkFBcUI7QUFDM0IsSUFBQSxHQUFHLEVBQUUsS0FBSztBQUNWLElBQUEsRUFBRSxFQUFFLElBQUk7QUFDUixJQUFBLElBQUksRUFBRSxNQUFNO0FBQ1osSUFBQSxFQUFFLEVBQUUsZUFBZTtBQUNuQixJQUFBLEVBQUUsRUFBRSxJQUFJO0FBQ1IsSUFBQSxLQUFLLEVBQUUsT0FBTztDQUNOOztBQzNDVixNQUFNQSxNQUFJLEdBQUc7QUFDWCxJQUFBLEtBQUssRUFBRSxJQUFJO0FBQ1gsSUFBQSxRQUFRLEVBQUUsSUFBSTtBQUNkLElBQUEsU0FBUyxFQUFFLElBQUk7QUFDZixJQUFBLElBQUksRUFBRSxPQUFPO0FBQ2IsSUFBQSxJQUFJLEVBQUUsU0FBUztBQUNmLElBQUEsSUFBSSxFQUFFLE9BQU87QUFDYixJQUFBLEVBQUUsRUFBRSxRQUFRO0FBQ1osSUFBQSxNQUFNLEVBQUUsS0FBSztBQUNiLElBQUEsTUFBTSxFQUFFLEtBQUs7QUFDYixJQUFBLE9BQU8sRUFBRSxLQUFLO0FBQ2QsSUFBQSxTQUFTLEVBQUUsS0FBSztBQUNoQixJQUFBLFFBQVEsRUFBRSxLQUFLO0FBQ2YsSUFBQSxNQUFNLEVBQUUsS0FBSztBQUNiLElBQUEsUUFBUSxFQUFFLEtBQUs7QUFDZixJQUFBLFNBQVMsRUFBRSxnQkFBZ0I7QUFDM0IsSUFBQSxPQUFPLEVBQUUsaUJBQWlCO0FBQzFCLElBQUEsTUFBTSxFQUFFLGdCQUFnQjtBQUN4QixJQUFBLE9BQU8sRUFBRSxpQkFBaUI7QUFDMUIsSUFBQSxRQUFRLEVBQUUsaUJBQWlCO0FBQzNCLElBQUEsT0FBTyxFQUFFLGdCQUFnQjtBQUN6QixJQUFBLFFBQVEsRUFBRSxpQkFBaUI7QUFDM0IsSUFBQSxTQUFTLEVBQUUsaUJBQWlCO0FBQzVCLElBQUEsVUFBVSxFQUFFLGdCQUFnQjtBQUM1QixJQUFBLFFBQVEsRUFBRSxpQkFBaUI7QUFDM0IsSUFBQSxJQUFJLEVBQUUsSUFBSTtBQUNWLElBQUEsR0FBRyxFQUFFLEdBQUc7QUFDUixJQUFBLFdBQVcsRUFBRSxpQkFBaUI7QUFDOUIsSUFBQSxZQUFZLEVBQUUsaUJBQWlCO0FBQy9CLElBQUEsUUFBUSxFQUFFLGtCQUFrQjtBQUM1QixJQUFBLFNBQVMsRUFBRSxrQkFBa0I7QUFDN0IsSUFBQSxNQUFNLEVBQUUsYUFBYTtBQUNyQixJQUFBLElBQUksRUFBRSxZQUFZO0FBQ2xCLElBQUEsR0FBRyxFQUFFLE1BQU07QUFDWCxJQUFBLElBQUksRUFBRSxnQkFBZ0I7QUFDdEIsSUFBQSxLQUFLLEVBQUUsYUFBYTtBQUNwQixJQUFBLElBQUksRUFBRSxNQUFNO0FBQ1osSUFBQSxFQUFFLEVBQUUsR0FBRztBQUNQLElBQUEsS0FBSyxFQUFFLGFBQWE7QUFDcEIsSUFBQSxHQUFHLEVBQUUsT0FBTztBQUNaLElBQUEsRUFBRSxFQUFFLEtBQUs7QUFDVCxJQUFBLElBQUksRUFBRSxPQUFPO0FBQ2IsSUFBQSxFQUFFLEVBQUUsUUFBUTtDQUNKOztBQzNDVixNQUFNQSxNQUFJLEdBQUc7QUFDWCxJQUFBLEtBQUssRUFBRSxhQUFhO0FBQ3BCLElBQUEsUUFBUSxFQUFFLFFBQVE7QUFDbEIsSUFBQSxTQUFTLEVBQUUsTUFBTTtBQUNqQixJQUFBLElBQUksRUFBRSxxQ0FBcUM7QUFDM0MsSUFBQSxJQUFJLEVBQUUsK0JBQStCO0FBQ3JDLElBQUEsSUFBSSxFQUFFLGNBQWM7QUFDcEIsSUFBQSxFQUFFLEVBQUUsTUFBTTtBQUNWLElBQUEsTUFBTSxFQUFFLFVBQVU7QUFDbEIsSUFBQSxNQUFNLEVBQUUsT0FBTztBQUNmLElBQUEsT0FBTyxFQUFFLE9BQU87QUFDaEIsSUFBQSxTQUFTLEVBQUUsVUFBVTtBQUNyQixJQUFBLFFBQVEsRUFBRSxPQUFPO0FBQ2pCLElBQUEsTUFBTSxFQUFFLFVBQVU7QUFDbEIsSUFBQSxRQUFRLEVBQUUsUUFBUTtBQUNsQixJQUFBLFNBQVMsRUFBRSwyQkFBMkI7QUFDdEMsSUFBQSxPQUFPLEVBQUUsMEJBQTBCO0FBQ25DLElBQUEsTUFBTSxFQUFFLHlCQUF5QjtBQUNqQyxJQUFBLE9BQU8sRUFBRSw0QkFBNEI7QUFDckMsSUFBQSxRQUFRLEVBQUUsd0JBQXdCO0FBQ2xDLElBQUEsT0FBTyxFQUFFLDJCQUEyQjtBQUNwQyxJQUFBLFFBQVEsRUFBRSw4QkFBOEI7QUFDeEMsSUFBQSxTQUFTLEVBQUUsMEJBQTBCO0FBQ3JDLElBQUEsVUFBVSxFQUFFLDZCQUE2QjtBQUN6QyxJQUFBLFFBQVEsRUFBRSw0QkFBNEI7QUFDdEMsSUFBQSxJQUFJLEVBQUUsT0FBTztBQUNiLElBQUEsR0FBRyxFQUFFLFlBQVk7QUFDakIsSUFBQSxXQUFXLEVBQUUsdUJBQXVCO0FBQ3BDLElBQUEsWUFBWSxFQUFFLHVCQUF1QjtBQUNyQyxJQUFBLFFBQVEsRUFBRSxxQkFBcUI7QUFDL0IsSUFBQSxTQUFTLEVBQUUscUJBQXFCO0FBQ2hDLElBQUEsTUFBTSxFQUFFLDJCQUEyQjtBQUNuQyxJQUFBLElBQUksRUFBRSxnQkFBZ0I7QUFDdEIsSUFBQSxHQUFHLEVBQUUsZ0JBQWdCO0FBQ3JCLElBQUEsSUFBSSxFQUFFLHNCQUFzQjtBQUM1QixJQUFBLEtBQUssRUFBRSxXQUFXO0FBQ2xCLElBQUEsSUFBSSxFQUFFLHlCQUF5QjtBQUMvQixJQUFBLEdBQUcsRUFBRSxJQUFJO0FBQ1QsSUFBQSxFQUFFLEVBQUUsS0FBSztBQUNULElBQUEsSUFBSSxFQUFFLGNBQWM7QUFDcEIsSUFBQSxFQUFFLEVBQUUseUJBQXlCO0FBQzdCLElBQUEsRUFBRSxFQUFFLE9BQU87QUFDWCxJQUFBLEtBQUssRUFBRSxrQkFBa0I7Q0FDakI7O0FDM0NWLE1BQU1BLE1BQUksR0FBRztBQUNYLElBQUEsS0FBSyxFQUFFLE1BQU07QUFDYixJQUFBLFFBQVEsRUFBRSxRQUFRO0FBQ2xCLElBQUEsU0FBUyxFQUFFLE9BQU87QUFDbEIsSUFBQSxJQUFJLEVBQUUsMEJBQTBCO0FBQ2hDLElBQUEsSUFBSSxFQUFFLCtCQUErQjtBQUNyQyxJQUFBLElBQUksRUFBRSxXQUFXO0FBQ2pCLElBQUEsRUFBRSxFQUFFLGtCQUFrQjtBQUN0QixJQUFBLE1BQU0sRUFBRSxTQUFTO0FBQ2pCLElBQUEsTUFBTSxFQUFFLGVBQWU7QUFDdkIsSUFBQSxPQUFPLEVBQUUsYUFBYTtBQUN0QixJQUFBLFNBQVMsRUFBRSxjQUFjO0FBQ3pCLElBQUEsUUFBUSxFQUFFLGNBQWM7QUFDeEIsSUFBQSxNQUFNLEVBQUUsYUFBYTtBQUNyQixJQUFBLFFBQVEsRUFBRSxRQUFRO0FBQ2xCLElBQUEsU0FBUyxFQUFFLHlCQUF5QjtBQUNwQyxJQUFBLE9BQU8sRUFBRSx1QkFBdUI7QUFDaEMsSUFBQSxNQUFNLEVBQUUsc0JBQXNCO0FBQzlCLElBQUEsT0FBTyxFQUFFLHlCQUF5QjtBQUNsQyxJQUFBLFFBQVEsRUFBRSx1QkFBdUI7QUFDakMsSUFBQSxPQUFPLEVBQUUsc0JBQXNCO0FBQy9CLElBQUEsUUFBUSxFQUFFLHlCQUF5QjtBQUNuQyxJQUFBLFNBQVMsRUFBRSx1QkFBdUI7QUFDbEMsSUFBQSxVQUFVLEVBQUUseUJBQXlCO0FBQ3JDLElBQUEsUUFBUSxFQUFFLHVCQUF1QjtBQUNqQyxJQUFBLFNBQVMsRUFBRSxhQUFhO0FBQ3hCLElBQUEsSUFBSSxFQUFFLE1BQU07QUFDWixJQUFBLEdBQUcsRUFBRSxPQUFPO0FBQ1osSUFBQSxXQUFXLEVBQUUsdUJBQXVCO0FBQ3BDLElBQUEsWUFBWSxFQUFFLHVCQUF1QjtBQUNyQyxJQUFBLFFBQVEsRUFBRSxvQkFBb0I7QUFDOUIsSUFBQSxTQUFTLEVBQUUsb0JBQW9CO0FBQy9CLElBQUEsTUFBTSxFQUFFLDJCQUEyQjtBQUNuQyxJQUFBLElBQUksRUFBRSxjQUFjO0FBQ3BCLElBQUEsR0FBRyxFQUFFLFlBQVk7QUFDakIsSUFBQSxJQUFJLEVBQUUsb0JBQW9CO0FBQzFCLElBQUEsS0FBSyxFQUFFLGdCQUFnQjtBQUN2QixJQUFBLElBQUksRUFBRSxjQUFjO0FBQ3BCLElBQUEsR0FBRyxFQUFFLEdBQUc7QUFDUixJQUFBLEVBQUUsRUFBRSxXQUFXO0FBQ2YsSUFBQSxJQUFJLEVBQUUsVUFBVTtBQUNoQixJQUFBLEVBQUUsRUFBRSxVQUFVO0FBQ2QsSUFBQSxFQUFFLEVBQUUsVUFBVTtBQUNkLElBQUEsS0FBSyxFQUFFLG1CQUFtQjtDQUNsQjs7QUM1Q1YsTUFBTUEsTUFBSSxHQUFHO0FBQ1gsSUFBQSxLQUFLLEVBQUUsT0FBTztBQUNkLElBQUEsUUFBUSxFQUFFLFFBQVE7QUFDbEIsSUFBQSxTQUFTLEVBQUUsU0FBUztBQUNwQixJQUFBLElBQUksRUFBRSxvQ0FBb0M7QUFDMUMsSUFBQSxJQUFJLEVBQUUsd0JBQXdCO0FBQzlCLElBQUEsSUFBSSxFQUFFLHFCQUFxQjtBQUMzQixJQUFBLEVBQUUsRUFBRSxJQUFJO0FBQ1IsSUFBQSxNQUFNLEVBQUUsU0FBUztBQUNqQixJQUFBLE1BQU0sRUFBRSxRQUFRO0FBQ2hCLElBQUEsT0FBTyxFQUFFLFVBQVU7QUFDbkIsSUFBQSxTQUFTLEVBQUUsVUFBVTtBQUNyQixJQUFBLFFBQVEsRUFBRSxZQUFZO0FBQ3RCLElBQUEsTUFBTSxFQUFFLFNBQVM7QUFDakIsSUFBQSxRQUFRLEVBQUUsU0FBUztBQUNuQixJQUFBLFNBQVMsRUFBRSx5QkFBeUI7QUFDcEMsSUFBQSxPQUFPLEVBQUUseUJBQXlCO0FBQ2xDLElBQUEsTUFBTSxFQUFFLHVCQUF1QjtBQUMvQixJQUFBLE9BQU8sRUFBRSx3QkFBd0I7QUFDakMsSUFBQSxRQUFRLEVBQUUseUJBQXlCO0FBQ25DLElBQUEsT0FBTyxFQUFFLHdCQUF3QjtBQUNqQyxJQUFBLFFBQVEsRUFBRSx5QkFBeUI7QUFDbkMsSUFBQSxTQUFTLEVBQUUsMEJBQTBCO0FBQ3JDLElBQUEsVUFBVSxFQUFFLDBCQUEwQjtBQUN0QyxJQUFBLFFBQVEsRUFBRSwwQkFBMEI7QUFDcEMsSUFBQSxJQUFJLEVBQUUsTUFBTTtBQUNaLElBQUEsR0FBRyxFQUFFLE9BQU87QUFDWixJQUFBLFdBQVcsRUFBRSx1QkFBdUI7QUFDcEMsSUFBQSxZQUFZLEVBQUUsdUJBQXVCO0FBQ3JDLElBQUEsUUFBUSxFQUFFLHNCQUFzQjtBQUNoQyxJQUFBLFNBQVMsRUFBRSxzQkFBc0I7QUFDakMsSUFBQSxNQUFNLEVBQUUsMkJBQTJCO0FBQ25DLElBQUEsSUFBSSxFQUFFLHNCQUFzQjtBQUM1QixJQUFBLEdBQUcsRUFBRSxjQUFjO0FBQ25CLElBQUEsSUFBSSxFQUFFLGdCQUFnQjtBQUN0QixJQUFBLEtBQUssRUFBRSwwQkFBMEI7QUFDakMsSUFBQSxJQUFJLEVBQUUsZ0JBQWdCO0FBQ3RCLElBQUEsR0FBRyxFQUFFLEtBQUs7QUFDVixJQUFBLEVBQUUsRUFBRSxJQUFJO0FBQ1IsSUFBQSxJQUFJLEVBQUUsUUFBUTtBQUNkLElBQUEsRUFBRSxFQUFFLGFBQWE7QUFDakIsSUFBQSxFQUFFLEVBQUUsU0FBUztBQUNiLElBQUEsS0FBSyxFQUFFLHFCQUFxQjtDQUNwQjs7QUMzQ1YsTUFBTUEsTUFBSSxHQUFHO0FBQ1gsSUFBQSxLQUFLLEVBQUUsU0FBUztBQUNoQixJQUFBLFFBQVEsRUFBRSxRQUFRO0FBQ2xCLElBQUEsU0FBUyxFQUFFLFVBQVU7QUFDckIsSUFBQSxJQUFJLEVBQUUsVUFBVTtBQUNoQixJQUFBLElBQUksRUFBRSxnQkFBZ0I7QUFDdEIsSUFBQSxJQUFJLEVBQUUsVUFBVTtBQUNoQixJQUFBLEVBQUUsRUFBRSxNQUFNO0FBQ1YsSUFBQSxNQUFNLEVBQUUsUUFBUTtBQUNoQixJQUFBLE1BQU0sRUFBRSxTQUFTO0FBQ2pCLElBQUEsT0FBTyxFQUFFLFNBQVM7QUFDbEIsSUFBQSxTQUFTLEVBQUUsVUFBVTtBQUNyQixJQUFBLFFBQVEsRUFBRSxXQUFXO0FBQ3JCLElBQUEsTUFBTSxFQUFFLFNBQVM7QUFDakIsSUFBQSxRQUFRLEVBQUUsVUFBVTtBQUNwQixJQUFBLFNBQVMsRUFBRSwyQkFBMkI7QUFDdEMsSUFBQSxPQUFPLEVBQUUsd0JBQXdCO0FBQ2pDLElBQUEsTUFBTSxFQUFFLHlCQUF5QjtBQUNqQyxJQUFBLE9BQU8sRUFBRSx5QkFBeUI7QUFDbEMsSUFBQSxRQUFRLEVBQUUsMkJBQTJCO0FBQ3JDLElBQUEsT0FBTyxFQUFFLDRCQUE0QjtBQUNyQyxJQUFBLFFBQVEsRUFBRSw0QkFBNEI7QUFDdEMsSUFBQSxTQUFTLEVBQUUsOEJBQThCO0FBQ3pDLElBQUEsVUFBVSxFQUFFLDhCQUE4QjtBQUMxQyxJQUFBLFFBQVEsRUFBRSwyQkFBMkI7QUFDckMsSUFBQSxJQUFJLEVBQUUsTUFBTTtBQUNaLElBQUEsR0FBRyxFQUFFLElBQUk7QUFDVCxJQUFBLFdBQVcsRUFBRSx1QkFBdUI7QUFDcEMsSUFBQSxZQUFZLEVBQUUsdUJBQXVCO0FBQ3JDLElBQUEsUUFBUSxFQUFFLG1CQUFtQjtBQUM3QixJQUFBLFNBQVMsRUFBRSxtQkFBbUI7QUFDOUIsSUFBQSxNQUFNLEVBQUUsMkJBQTJCO0FBQ25DLElBQUEsSUFBSSxFQUFFLGNBQWM7QUFDcEIsSUFBQSxHQUFHLEVBQUUsYUFBYTtBQUNsQixJQUFBLElBQUksRUFBRSxjQUFjO0FBQ3BCLElBQUEsS0FBSyxFQUFFLG9CQUFvQjtBQUMzQixJQUFBLElBQUksRUFBRSxnQkFBZ0I7QUFDdEIsSUFBQSxHQUFHLEVBQUUsSUFBSTtBQUNULElBQUEsRUFBRSxFQUFFLElBQUk7QUFDUixJQUFBLElBQUksRUFBRSxXQUFXO0FBQ2pCLElBQUEsRUFBRSxFQUFFLGdCQUFnQjtBQUNwQixJQUFBLEVBQUUsRUFBRSxLQUFLO0FBQ1QsSUFBQSxLQUFLLEVBQUUsUUFBUTtDQUNQOztBQzNDVixNQUFNQSxNQUFJLEdBQUc7QUFDWCxJQUFBLEtBQUssRUFBRSxLQUFLO0FBQ1osSUFBQSxRQUFRLEVBQUUsUUFBUTtBQUNsQixJQUFBLFNBQVMsRUFBRSxNQUFNO0FBQ2pCLElBQUEsSUFBSSxFQUFFLDJCQUEyQjtBQUNqQyxJQUFBLElBQUksRUFBRSw2QkFBNkI7QUFDbkMsSUFBQSxJQUFJLEVBQUUsV0FBVztBQUNqQixJQUFBLEVBQUUsRUFBRSxjQUFjO0FBQ2xCLElBQUEsTUFBTSxFQUFFLFNBQVM7QUFDakIsSUFBQSxNQUFNLEVBQUUsT0FBTztBQUNmLElBQUEsT0FBTyxFQUFFLFFBQVE7QUFDakIsSUFBQSxTQUFTLEVBQUUsV0FBVztBQUN0QixJQUFBLFFBQVEsRUFBRSxRQUFRO0FBQ2xCLElBQUEsTUFBTSxFQUFFLFNBQVM7QUFDakIsSUFBQSxRQUFRLEVBQUUsUUFBUTtBQUNsQixJQUFBLFNBQVMsRUFBRSx5QkFBeUI7QUFDcEMsSUFBQSxPQUFPLEVBQUUsdUJBQXVCO0FBQ2hDLElBQUEsTUFBTSxFQUFFLHNCQUFzQjtBQUM5QixJQUFBLE9BQU8sRUFBRSx5QkFBeUI7QUFDbEMsSUFBQSxRQUFRLEVBQUUsdUJBQXVCO0FBQ2pDLElBQUEsT0FBTyxFQUFFLHdCQUF3QjtBQUNqQyxJQUFBLFFBQVEsRUFBRSwyQkFBMkI7QUFDckMsSUFBQSxTQUFTLEVBQUUseUJBQXlCO0FBQ3BDLElBQUEsVUFBVSxFQUFFLDJCQUEyQjtBQUN2QyxJQUFBLFFBQVEsRUFBRSx5QkFBeUI7QUFDbkMsSUFBQSxTQUFTLEVBQUUsYUFBYTtBQUN4QixJQUFBLElBQUksRUFBRSxNQUFNO0FBQ1osSUFBQSxHQUFHLEVBQUUsT0FBTztBQUNaLElBQUEsV0FBVyxFQUFFLHVCQUF1QjtBQUNwQyxJQUFBLFlBQVksRUFBRSx1QkFBdUI7QUFDckMsSUFBQSxRQUFRLEVBQUUsb0JBQW9CO0FBQzlCLElBQUEsU0FBUyxFQUFFLG9CQUFvQjtBQUMvQixJQUFBLE1BQU0sRUFBRSwyQkFBMkI7QUFDbkMsSUFBQSxJQUFJLEVBQUUsY0FBYztBQUNwQixJQUFBLEdBQUcsRUFBRSxZQUFZO0FBQ2pCLElBQUEsSUFBSSxFQUFFLG9CQUFvQjtBQUMxQixJQUFBLEtBQUssRUFBRSxnQkFBZ0I7QUFDdkIsSUFBQSxJQUFJLEVBQUUsY0FBYztBQUNwQixJQUFBLEdBQUcsRUFBRSxHQUFHO0FBQ1IsSUFBQSxFQUFFLEVBQUUsaUJBQWlCO0FBQ3JCLElBQUEsSUFBSSxFQUFFLFVBQVU7QUFDaEIsSUFBQSxFQUFFLEVBQUUsU0FBUztBQUNiLElBQUEsRUFBRSxFQUFFLFFBQVE7QUFDWixJQUFBLEtBQUssRUFBRSxnQkFBZ0I7Q0FDZjs7QUM1Q1YsTUFBTUEsTUFBSSxHQUFHO0FBQ1gsSUFBQSxLQUFLLEVBQUUsTUFBTTtBQUNiLElBQUEsUUFBUSxFQUFFLFFBQVE7QUFDbEIsSUFBQSxTQUFTLEVBQUUsTUFBTTtBQUNqQixJQUFBLElBQUksRUFBRSw0QkFBNEI7QUFDbEMsSUFBQSxJQUFJLEVBQUUsNkNBQTZDO0FBQ25ELElBQUEsSUFBSSxFQUFFLGVBQWU7QUFDckIsSUFBQSxFQUFFLEVBQUUsUUFBUTtBQUNaLElBQUEsTUFBTSxFQUFFLFVBQVU7QUFDbEIsSUFBQSxNQUFNLEVBQUUsUUFBUTtBQUNoQixJQUFBLE9BQU8sRUFBRSxTQUFTO0FBQ2xCLElBQUEsU0FBUyxFQUFFLFdBQVc7QUFDdEIsSUFBQSxRQUFRLEVBQUUsU0FBUztBQUNuQixJQUFBLE1BQU0sRUFBRSxTQUFTO0FBQ2pCLElBQUEsUUFBUSxFQUFFLFFBQVE7QUFDbEIsSUFBQSxTQUFTLEVBQUUseUJBQXlCO0FBQ3BDLElBQUEsT0FBTyxFQUFFLHNCQUFzQjtBQUMvQixJQUFBLE1BQU0sRUFBRSx5QkFBeUI7QUFDakMsSUFBQSxPQUFPLEVBQUUsNEJBQTRCO0FBQ3JDLElBQUEsUUFBUSxFQUFFLHVCQUF1QjtBQUNqQyxJQUFBLE9BQU8sRUFBRSx3QkFBd0I7QUFDakMsSUFBQSxRQUFRLEVBQUUsMkJBQTJCO0FBQ3JDLElBQUEsU0FBUyxFQUFFLHNCQUFzQjtBQUNqQyxJQUFBLFVBQVUsRUFBRSx3QkFBd0I7QUFDcEMsSUFBQSxRQUFRLEVBQUUscUJBQXFCO0FBQy9CLElBQUEsSUFBSSxFQUFFLEtBQUs7QUFDWCxJQUFBLEdBQUcsRUFBRSxZQUFZO0FBQ2pCLElBQUEsV0FBVyxFQUFFLHNCQUFzQjtBQUNuQyxJQUFBLFlBQVksRUFBRSxzQkFBc0I7QUFDcEMsSUFBQSxRQUFRLEVBQUUsbUJBQW1CO0FBQzdCLElBQUEsU0FBUyxFQUFFLG1CQUFtQjtBQUM5QixJQUFBLE1BQU0sRUFBRSwwQkFBMEI7QUFDbEMsSUFBQSxJQUFJLEVBQUUsV0FBVztBQUNqQixJQUFBLEdBQUcsRUFBRSxtQkFBbUI7QUFDeEIsSUFBQSxJQUFJLEVBQUUseUJBQXlCO0FBQy9CLElBQUEsS0FBSyxFQUFFLGdCQUFnQjtBQUN2QixJQUFBLElBQUksRUFBRSxlQUFlO0FBQ3JCLElBQUEsR0FBRyxFQUFFLEdBQUc7QUFDUixJQUFBLEVBQUUsRUFBRSxhQUFhO0FBQ2pCLElBQUEsSUFBSSxFQUFFLGNBQWM7QUFDcEIsSUFBQSxFQUFFLEVBQUUsNEJBQTRCO0FBQ2hDLElBQUEsRUFBRSxFQUFFLGNBQWM7QUFDbEIsSUFBQSxLQUFLLEVBQUUsYUFBYTtDQUNaOztBQzNDVixNQUFNQSxNQUFJLEdBQUc7QUFDWCxJQUFBLEtBQUssRUFBRSxTQUFTO0FBQ2hCLElBQUEsUUFBUSxFQUFFLFFBQVE7QUFDbEIsSUFBQSxTQUFTLEVBQUUsT0FBTztBQUNsQixJQUFBLElBQUksRUFBRSx5Q0FBeUM7QUFDL0MsSUFBQSxJQUFJLEVBQUUseUVBQXlFO0FBQy9FLElBQUEsSUFBSSxFQUFFLGtCQUFrQjtBQUN4QixJQUFBLEVBQUUsRUFBRSxPQUFPO0FBQ1gsSUFBQSxNQUFNLEVBQUUseUJBQXlCO0FBQ2pDLElBQUEsTUFBTSxFQUFFLDBCQUEwQjtBQUNsQyxJQUFBLE9BQU8sRUFBRSxrQkFBa0I7QUFDM0IsSUFBQSxTQUFTLEVBQUUsYUFBYTtBQUN4QixJQUFBLFFBQVEsRUFBRSxrQkFBa0I7QUFDNUIsSUFBQSxNQUFNLEVBQUUsaUJBQWlCO0FBQ3pCLElBQUEsUUFBUSxFQUFFLGlCQUFpQjtBQUMzQixJQUFBLFNBQVMsRUFBRSx3Q0FBd0M7QUFDbkQsSUFBQSxPQUFPLEVBQUUsbUNBQW1DO0FBQzVDLElBQUEsTUFBTSxFQUFFLGtDQUFrQztBQUMxQyxJQUFBLE9BQU8sRUFBRSx5Q0FBeUM7QUFDbEQsSUFBQSxRQUFRLEVBQUUseUNBQXlDO0FBQ25ELElBQUEsT0FBTyxFQUFFLGtDQUFrQztBQUMzQyxJQUFBLFFBQVEsRUFBRSx5Q0FBeUM7QUFDbkQsSUFBQSxTQUFTLEVBQUUseUNBQXlDO0FBQ3BELElBQUEsVUFBVSxFQUFFLHdDQUF3QztBQUNwRCxJQUFBLFFBQVEsRUFBRSxtQ0FBbUM7QUFDN0MsSUFBQSxJQUFJLEVBQUUsT0FBTztBQUNiLElBQUEsR0FBRyxFQUFFLFFBQVE7QUFDYixJQUFBLFdBQVcsRUFBRSxtQ0FBbUM7QUFDaEQsSUFBQSxZQUFZLEVBQUUsbUNBQW1DO0FBQ2pELElBQUEsUUFBUSxFQUFFLDhCQUE4QjtBQUN4QyxJQUFBLFNBQVMsRUFBRSw4QkFBOEI7QUFDekMsSUFBQSxNQUFNLEVBQUUsMkJBQTJCO0FBQ25DLElBQUEsSUFBSSxFQUFFLGtCQUFrQjtBQUN4QixJQUFBLEdBQUcsRUFBRSxpQkFBaUI7QUFDdEIsSUFBQSxJQUFJLEVBQUUsNEJBQTRCO0FBQ2xDLElBQUEsS0FBSyxFQUFFLDRCQUE0QjtBQUNuQyxJQUFBLElBQUksRUFBRSxrQkFBa0I7QUFDeEIsSUFBQSxHQUFHLEVBQUUsR0FBRztBQUNSLElBQUEsRUFBRSxFQUFFLEdBQUc7QUFDUCxJQUFBLElBQUksRUFBRSxNQUFNO0FBQ1osSUFBQSxFQUFFLEVBQUUsTUFBTTtBQUNWLElBQUEsRUFBRSxFQUFFLE9BQU87QUFDWCxJQUFBLEtBQUssRUFBRSw2QkFBNkI7Q0FDNUI7O0FDM0NWLE1BQU1BLE1BQUksR0FBRztBQUNYLElBQUEsS0FBSyxFQUFFLFVBQVU7QUFDakIsSUFBQSxRQUFRLEVBQUUsUUFBUTtBQUNsQixJQUFBLFNBQVMsRUFBRSxPQUFPO0FBQ2xCLElBQUEsSUFBSSxFQUFFLHNDQUFzQztBQUM1QyxJQUFBLElBQUksRUFBRSwrREFBK0Q7QUFDckUsSUFBQSxJQUFJLEVBQUUsY0FBYztBQUNwQixJQUFBLEVBQUUsRUFBRSxPQUFPO0FBQ1gsSUFBQSxNQUFNLEVBQUUsZUFBZTtBQUN2QixJQUFBLE1BQU0sRUFBRSxxQkFBcUI7QUFDN0IsSUFBQSxPQUFPLEVBQUUsbUJBQW1CO0FBQzVCLElBQUEsU0FBUyxFQUFFLGVBQWU7QUFDMUIsSUFBQSxRQUFRLEVBQUUsaUJBQWlCO0FBQzNCLElBQUEsTUFBTSxFQUFFLG1CQUFtQjtBQUMzQixJQUFBLFFBQVEsRUFBRSxlQUFlO0FBQ3pCLElBQUEsU0FBUyxFQUFFLDJDQUEyQztBQUN0RCxJQUFBLE9BQU8sRUFBRSx3Q0FBd0M7QUFDakQsSUFBQSxNQUFNLEVBQUUsa0NBQWtDO0FBQzFDLElBQUEsT0FBTyxFQUFFLHlDQUF5QztBQUNsRCxJQUFBLFFBQVEsRUFBRSwwQ0FBMEM7QUFDcEQsSUFBQSxPQUFPLEVBQUUsaUNBQWlDO0FBQzFDLElBQUEsUUFBUSxFQUFFLHdDQUF3QztBQUNsRCxJQUFBLFNBQVMsRUFBRSx5Q0FBeUM7QUFDcEQsSUFBQSxVQUFVLEVBQUUsMENBQTBDO0FBQ3RELElBQUEsUUFBUSxFQUFFLHVDQUF1QztBQUNqRCxJQUFBLElBQUksRUFBRSxLQUFLO0FBQ1gsSUFBQSxHQUFHLEVBQUUsT0FBTztBQUNaLElBQUEsV0FBVyxFQUFFLHNDQUFzQztBQUNuRCxJQUFBLFlBQVksRUFBRSxzQ0FBc0M7QUFDcEQsSUFBQSxRQUFRLEVBQUUsbUNBQW1DO0FBQzdDLElBQUEsU0FBUyxFQUFFLG1DQUFtQztBQUM5QyxJQUFBLE1BQU0sRUFBRSw2QkFBNkI7QUFDckMsSUFBQSxJQUFJLEVBQUUsMkJBQTJCO0FBQ2pDLElBQUEsR0FBRyxFQUFFLGlCQUFpQjtBQUN0QixJQUFBLElBQUksRUFBRSw0QkFBNEI7QUFDbEMsSUFBQSxLQUFLLEVBQUUsNkJBQTZCO0FBQ3BDLElBQUEsSUFBSSxFQUFFLGtCQUFrQjtBQUN4QixJQUFBLEdBQUcsRUFBRSxHQUFHO0FBQ1IsSUFBQSxFQUFFLEVBQUUsR0FBRztBQUNQLElBQUEsSUFBSSxFQUFFLE9BQU87QUFDYixJQUFBLEVBQUUsRUFBRSxNQUFNO0FBQ1YsSUFBQSxFQUFFLEVBQUUsT0FBTztBQUNYLElBQUEsS0FBSyxFQUFFLDBCQUEwQjtDQUN6Qjs7QUMzQ1YsTUFBTUEsTUFBSSxHQUFHO0FBQ1gsSUFBQSxLQUFLLEVBQUUsSUFBSTtBQUNYLElBQUEsUUFBUSxFQUFFLElBQUk7QUFDZCxJQUFBLFNBQVMsRUFBRSxJQUFJOzs7QUFHZixJQUFBLElBQUksRUFBRSxXQUFXOzs7QUFHakIsSUFBQSxJQUFJLEVBQUUsaUJBQWlCOztBQUV2QixJQUFBLElBQUksRUFBRSxXQUFXO0FBQ2pCLElBQUEsRUFBRSxFQUFFLEdBQUc7OztBQUdQLElBQUEsTUFBTSxFQUFFLCtCQUErQjtBQUN2QyxJQUFBLE1BQU0sRUFBRSxtQkFBbUI7QUFDM0IsSUFBQSxPQUFPLEVBQUUsbUJBQW1CO0FBQzVCLElBQUEsU0FBUyxFQUFFLG1CQUFtQjtBQUM5QixJQUFBLFFBQVEsRUFBRSxtQkFBbUI7QUFDN0IsSUFBQSxNQUFNLEVBQUUsbUJBQW1CO0FBQzNCLElBQUEsUUFBUSxFQUFFLG1CQUFtQjtBQUM3QixJQUFBLFNBQVMsRUFBRSxpQkFBaUI7QUFDNUIsSUFBQSxPQUFPLEVBQUUsaUJBQWlCO0FBQzFCLElBQUEsTUFBTSxFQUFFLGdCQUFnQjtBQUN4QixJQUFBLE9BQU8sRUFBRSxnQkFBZ0I7QUFDekIsSUFBQSxRQUFRLEVBQUUsaUJBQWlCO0FBQzNCLElBQUEsT0FBTyxFQUFFLGdCQUFnQjtBQUN6QixJQUFBLFFBQVEsRUFBRSxnQkFBZ0I7QUFDMUIsSUFBQSxTQUFTLEVBQUUsaUJBQWlCO0FBQzVCLElBQUEsVUFBVSxFQUFFLGlCQUFpQjtBQUM3QixJQUFBLFFBQVEsRUFBRSxpQkFBaUI7Ozs7Ozs7QUFPM0IsSUFBQSxLQUFLLEVBQUUsaUJBQWlCO0FBQ3hCLElBQUEsSUFBSSxFQUFFLE9BQU87QUFDYixJQUFBLEdBQUcsRUFBRSxPQUFPO0FBQ1osSUFBQSxXQUFXLEVBQUUsaUJBQWlCO0FBQzlCLElBQUEsWUFBWSxFQUFFLGlCQUFpQjtBQUMvQixJQUFBLFFBQVEsRUFBRSxpQkFBaUI7QUFDM0IsSUFBQSxTQUFTLEVBQUUsaUJBQWlCO0FBQzVCLElBQUEsTUFBTSxFQUFFLFNBQVM7QUFDakIsSUFBQSxJQUFJLEVBQUUsV0FBVztBQUNqQixJQUFBLEdBQUcsRUFBRSxLQUFLO0FBQ1YsSUFBQSxJQUFJLEVBQUUsOEJBQThCO0FBQ3BDLElBQUEsS0FBSyxFQUFFLFNBQVM7QUFDaEIsSUFBQSxJQUFJLEVBQUUsR0FBRztBQUNULElBQUEsR0FBRyxFQUFFLEdBQUc7QUFDUixJQUFBLEVBQUUsRUFBRSxHQUFHO0FBQ1AsSUFBQSxJQUFJLEVBQUUsT0FBTztBQUNiLElBQUEsRUFBRSxFQUFFLEtBQUs7QUFDVCxJQUFBLEVBQUUsRUFBRSxHQUFHO0FBQ1AsSUFBQSxLQUFLLEVBQUUsWUFBWTtDQUNYOztBQ3pEVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQUksR0FBRztBQUNYLElBQUEsS0FBSyxFQUFFLElBQUk7QUFDWCxJQUFBLFFBQVEsRUFBRSxJQUFJO0FBQ2QsSUFBQSxTQUFTLEVBQUUsSUFBSTtBQUNmLElBQUEsSUFBSSxFQUFFLElBQUk7QUFDVixJQUFBLElBQUksRUFBRSxJQUFJO0FBQ1YsSUFBQSxJQUFJLEVBQUUsSUFBSTtBQUNWLElBQUEsRUFBRSxFQUFFLEtBQUs7QUFDVCxJQUFBLE1BQU0sRUFBRSxLQUFLO0FBQ2IsSUFBQSxNQUFNLEVBQUUsS0FBSztBQUNiLElBQUEsT0FBTyxFQUFFLEtBQUs7QUFDZCxJQUFBLFNBQVMsRUFBRSxLQUFLO0FBQ2hCLElBQUEsUUFBUSxFQUFFLEtBQUs7QUFDZixJQUFBLE1BQU0sRUFBRSxLQUFLO0FBQ2IsSUFBQSxRQUFRLEVBQUUsS0FBSztBQUNmLElBQUEsU0FBUyxFQUFFLGlCQUFpQjtBQUM1QixJQUFBLE9BQU8sRUFBRSxrQkFBa0I7QUFDM0IsSUFBQSxNQUFNLEVBQUUsaUJBQWlCO0FBQ3pCLElBQUEsT0FBTyxFQUFFLGlCQUFpQjtBQUMxQixJQUFBLFFBQVEsRUFBRSxrQkFBa0I7QUFDNUIsSUFBQSxPQUFPLEVBQUUsaUJBQWlCO0FBQzFCLElBQUEsUUFBUSxFQUFFLGlCQUFpQjtBQUMzQixJQUFBLFNBQVMsRUFBRSxrQkFBa0I7QUFDN0IsSUFBQSxVQUFVLEVBQUUsaUJBQWlCO0FBQzdCLElBQUEsUUFBUSxFQUFFLGtCQUFrQjs7O0FBRzVCLElBQUEsS0FBSyxFQUFFLEtBQUs7QUFDWixJQUFBLFNBQVMsRUFBRSxHQUFHO0FBQ2QsSUFBQSxJQUFJLEVBQUUsSUFBSTtBQUNWLElBQUEsR0FBRyxFQUFFLElBQUk7QUFDVCxJQUFBLFdBQVcsRUFBRSxnQkFBZ0I7QUFDN0IsSUFBQSxZQUFZLEVBQUUsZ0JBQWdCO0FBQzlCLElBQUEsUUFBUSxFQUFFLGlCQUFpQjtBQUMzQixJQUFBLFNBQVMsRUFBRSxpQkFBaUI7QUFDNUIsSUFBQSxNQUFNLEVBQUUsR0FBRztBQUNYLElBQUEsSUFBSSxFQUFFLElBQUk7QUFDVixJQUFBLEdBQUcsRUFBRSxHQUFHO0FBQ1IsSUFBQSxJQUFJLEVBQUUsR0FBRztBQUNULElBQUEsS0FBSyxFQUFFLE1BQU07QUFDYixJQUFBLElBQUksRUFBRSxHQUFHO0FBQ1QsSUFBQSxHQUFHLEVBQUUsS0FBSztBQUNWLElBQUEsRUFBRSxFQUFFLEdBQUc7QUFDUCxJQUFBLElBQUksRUFBRSxJQUFJO0FBQ1YsSUFBQSxFQUFFLEVBQUUsSUFBSTtBQUNSLElBQUEsRUFBRSxFQUFFLEdBQUc7QUFDUCxJQUFBLEtBQUssRUFBRSxHQUFHO0NBQ0Y7O0FDeERWLE1BQU0sZUFBZSxHQUFHLFVBQW1CLENBQUM7QUFJNUM7QUFDQTtBQUNBLE1BQU0sZUFBZSxHQUErQixFQUFFLENBQUM7QUFRdkQ7QUFDQSxNQUFNLGVBQWUsR0FBNkI7UUFDaERDLE1BQUU7UUFDRkMsTUFBRTtRQUNGQyxNQUFFO1FBQ0ZDLE1BQUU7UUFDRkMsTUFBRTtRQUNGQyxNQUFFO1FBQ0ZDLE1BQUU7UUFDRkMsTUFBRTtRQUNGQyxNQUFFO1FBQ0ZDLE1BQUU7QUFDRixJQUFBLFNBQVMsRUFBRUMsTUFBRTtRQUNiQyxJQUFFO0NBQ0gsQ0FBQztBQUVGOzs7QUFHRztBQUNILFNBQVMsYUFBYSxDQUFDLElBQVksRUFBQTtBQUNqQyxJQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDMUIsUUFBQSxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0MsUUFBQSxJQUFJLGNBQWMsRUFBRTs7Ozs7QUFLbEIsWUFBQSxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBMEIsQ0FBQztBQUMxRixTQUFBO0FBQU0sYUFBQTs7QUFFTCxZQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDMUIsZ0JBQUEsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUVYLE1BQUUsRUFBRSxDQUEwQixDQUFDO0FBQzlFLGFBQUE7QUFDRCxZQUFBLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCLFNBQUE7QUFDRixLQUFBO0FBQ0QsSUFBQSxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRXVCLFNBQUEsQ0FBQyxDQUFDLEdBQVcsRUFBRSxJQUFZLEVBQUUsU0FBa0MsRUFBQTtBQUNyRixJQUFBLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUVwRSxJQUFJLFdBQVcsS0FBSyxlQUFlLEVBQUU7QUFDbkMsUUFBQSxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsT0FBTyxZQUFZLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN0RCxLQUFBO0FBQ0QsSUFBQSxPQUFPLFdBQVcsQ0FBQztBQUNyQjs7QUM1RUE7Ozs7Ozs7Ozs7OztBQVlHO01BQ1Usb0JBQW9CLENBQUE7QUFHL0IsSUFBQSxXQUFBLENBQTZCLFNBQW1CLEVBQUE7UUFBbkIsSUFBUyxDQUFBLFNBQUEsR0FBVCxTQUFTLENBQVU7QUFGL0IsUUFBQSxJQUFBLENBQUEsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7S0FFVjtBQUVwRDs7QUFFRztJQUNILFNBQVMsQ0FBQyxHQUFXLEVBQUUsSUFBWSxFQUFBO0FBQ2pDLFFBQUEsTUFBTSxRQUFRLEdBQUcsQ0FBQSxFQUFHLElBQUksQ0FBSSxDQUFBLEVBQUEsR0FBRyxFQUFFLENBQUM7UUFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7QUFDeEIsWUFBQSxPQUFPLE1BQU0sQ0FBQztBQUNmLFNBQUE7UUFDRCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2hELFFBQUEsT0FBTyxVQUFVLENBQUM7S0FDbkI7QUFFRDs7Ozs7OztBQU9HO0FBQ0gsSUFBQSxZQUFZLENBQUMsR0FBVyxFQUFFLE9BQUEsR0FBbUMsRUFBRSxFQUFBO1FBQzdELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztBQUMzQixRQUFBLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM5QyxZQUFBLElBQUksQ0FBQyxXQUFXLElBQUksV0FBVyxLQUFLLFVBQVU7Z0JBQUUsU0FBUztZQUV6RCxLQUFLLE1BQU0sT0FBTyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDNUMsZ0JBQUEsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDOzs7O0FBSS9CLGdCQUFBLElBQUksT0FBTyxFQUFFO0FBQ1gsb0JBQUEsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUNqRSxpQkFBQTtBQUNGLGFBQUE7QUFDRixTQUFBO1FBQ0QsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUM1QjtBQUVEOzs7Ozs7OztBQVFHO0FBQ0gsSUFBQSxnQkFBZ0IsQ0FBQyxLQUFlLEVBQUE7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQVcsS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hGLFFBQUEsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkIsYUFBQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQzthQUNuQyxHQUFHLENBQUMsV0FBVyxDQUFDO2FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNkO0FBRUQ7O0FBRUc7QUFDSCxJQUFBLG1CQUFtQixDQUFDLEdBQVcsRUFBRSxPQUFBLEdBQW1DLEVBQUUsRUFBQTtBQUNwRSxRQUFBLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7S0FDL0Q7QUFDRjs7QUNuRUQsTUFBTSxVQUFVLEdBQXdDO0lBQ3RELFFBQVE7SUFDUixRQUFRO0lBQ1IsU0FBUztJQUNULFdBQVc7SUFDWCxVQUFVO0lBQ1YsUUFBUTtJQUNSLFVBQVU7Q0FDWCxDQUFDO0FBRXNCLFNBQUEsaUJBQWlCLENBQUMsTUFBYyxFQUFBO0FBQ3RELElBQUEsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBRWxDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsTUFBTSxZQUFZLEdBQUcsTUFBdUcsQ0FBQzs7OztBQUk3SCxJQUFBLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ3JDLEtBQUE7SUFDRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxPQUFPO0FBQ0wsUUFBQSxJQUFJLEVBQUUsU0FBUztBQUNmLFFBQUEsRUFBRSxFQUFFLE9BQU87S0FDWixDQUFDO0FBQ0osQ0FBQztBQUVLLFNBQVUsZUFBZSxDQUFDLE1BQWMsRUFBQTtBQUM1QyxJQUFBLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLEVBQUU7QUFDOUIsUUFBQSxPQUFPLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM5QixLQUFBO0FBQU0sU0FBQTtBQUNMLFFBQUEsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7OztRQUdqRCxNQUFNLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVELFFBQUEsT0FBTyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDOUIsS0FBQTtBQUNILENBQUM7QUFFSyxTQUFVLFlBQVksQ0FDMUIsTUFBYyxFQUNkLE1BQXNCLEVBQ3RCLE1BQWMsRUFDZCxNQUFjLEVBQUE7SUFFZCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbkQsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNmLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtBQUNqQixRQUFBLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLFlBQVk7QUFDN0IsS0FBQSxDQUFDLENBQUM7QUFDTCxDQUFDO0FBY0ssU0FBVSxXQUFXLENBQUMsSUFBWSxFQUFBO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQ7Ozs7QUFJRztBQUNHLFNBQVUsb0JBQW9CLENBQUMsTUFBYyxFQUFBO0FBQ2pELElBQUEsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDekMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGlDQUFpQyxFQUFFLENBQUM7QUFDbkUsS0FBQTs7SUFHRCxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztBQUM5QixJQUFBLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsRUFBRTtRQUNyQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBa0MsK0JBQUEsRUFBQSxpQkFBaUIsQ0FBYSxXQUFBLENBQUEsRUFBRSxDQUFDO0FBQ2xHLEtBQUE7SUFFRCxJQUFJO0FBQ0YsUUFBQSxNQUFNLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUMxQixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztBQUcxQyxRQUFBLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRTtZQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQztBQUNsRSxTQUFBOzs7O1FBS0QsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7QUFDbkMsUUFBQSxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsaURBQWlELEVBQUUsQ0FBQztBQUNuRixTQUFBO1FBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQzVDLEtBQUE7QUFBQyxJQUFBLE9BQU8sS0FBSyxFQUFFO1FBQ2QsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyx3Q0FBd0MsRUFBRSxDQUFDO0FBQ25ILEtBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7O0FBS0c7U0FDYSxhQUFhLENBQUMsS0FBZ0MsRUFBRSxTQUFTLEdBQUcsR0FBRyxFQUFBO0FBQzdFLElBQUEsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDdkMsUUFBQSxPQUFPLElBQUksQ0FBQztBQUNiLEtBQUE7O0FBR0QsSUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUVyRCxJQUFBLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDeEIsUUFBQSxPQUFPLElBQUksQ0FBQztBQUNiLEtBQUE7Ozs7Ozs7SUFRRCxNQUFNLG1CQUFtQixHQUFHLGlDQUFpQyxDQUFDO0FBRTlELElBQUEsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDckMsUUFBQSxPQUFPLElBQUksQ0FBQztBQUNiLEtBQUE7QUFFRCxJQUFBLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7Ozs7QUFLRztTQUNhLGdCQUFnQixDQUFDLEtBQWdDLEVBQUUsU0FBUyxHQUFHLEdBQUcsRUFBQTtBQUNoRixJQUFBLE9BQU8sYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUssU0FBVSxhQUFhLENBQUMsU0FBNEMsRUFBQTtBQUN4RSxJQUFBLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN2QyxDQUFDO1NBRWUsa0JBQWtCLEdBQUE7QUFDaEMsSUFBQSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFpQyxDQUFDO0lBQ3RFLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUMvQyxJQUFBLE9BQU8sVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7U0FFZSxvQkFBb0IsQ0FBQyxHQUFRLEVBQUUsT0FBZSxFQUFFLEtBQWMsRUFBQTtBQUM1RSxJQUFBLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQyxLQUFtRSxDQUFDO0lBQ2hHLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3ZFLElBQUEsTUFBTSxJQUFJLEdBQUdZLHdCQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFcEMsSUFBQSxJQUFJLGdCQUFnQixFQUFFO0FBQ3BCLFFBQUEsSUFBSSxLQUFLLEVBQUU7QUFDVCxZQUFBLE9BQU8sQ0FBSSxDQUFBLEVBQUEsS0FBSyxDQUFLLEVBQUEsRUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQSxDQUFBLENBQUcsQ0FBQztBQUNuRCxTQUFBO0FBQU0sYUFBQTtBQUNMLFlBQUEsT0FBTyxDQUFJLENBQUEsRUFBQSxPQUFPLENBQUssRUFBQSxFQUFBLElBQUksR0FBRyxDQUFDO0FBQ2hDLFNBQUE7QUFDRixLQUFBO0FBQU0sU0FBQTtBQUNMLFFBQUEsSUFBSSxLQUFLLEVBQUU7QUFDVCxZQUFBLE9BQU8sQ0FBSyxFQUFBLEVBQUEsSUFBSSxDQUFJLENBQUEsRUFBQSxLQUFLLElBQUksQ0FBQztBQUMvQixTQUFBO0FBQU0sYUFBQTtZQUNMLE9BQU8sQ0FBQSxFQUFBLEVBQUssSUFBSSxDQUFBLEVBQUEsQ0FBSSxDQUFDO0FBQ3RCLFNBQUE7QUFDRixLQUFBO0FBQ0gsQ0FBQztBQUVNLGVBQWUsb0JBQW9CLENBQUMsSUFBWSxFQUFBOzs7SUFHckQsTUFBTSxXQUFXLEdBQUdDLGNBQVksQ0FBQyxJQUFJLEVBQUVDLGtCQUFnQixFQUFFLENBQUMsQ0FBQztBQUMzRCxJQUFBLElBQUksV0FBVyxFQUFFO0FBQ2YsUUFBQSxPQUFPLFdBQVcsQ0FBQztBQUNwQixLQUFBO0FBQ0QsSUFBQSxPQUFPQyxpQkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFPRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLGNBQVksQ0FBQyxVQUEwQixFQUFBO0FBQzlDLElBQUEsSUFBSSxJQUFjLENBQUM7SUFDbkIsSUFBSSxVQUFVLFlBQVksS0FBSyxFQUFFO0FBQy9CLFFBQUEsSUFBSSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztBQUN4QixLQUFBO1NBQU0sSUFBSSxVQUFVLFlBQVksR0FBRyxFQUFFO1FBQ3BDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLEtBQUE7QUFBTSxTQUFBO0FBQ0wsUUFBQSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoQyxLQUFBO0FBRUQsSUFBQSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFDRCxTQUFTQyxpQkFBZSxDQUFDLFVBQTBCLEVBQUE7QUFDakQsSUFBQSxNQUFNLFdBQVcsR0FBR0QsY0FBWSxDQUFDLFVBQVUsQ0FBQztBQUN6QyxTQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1NBQ25DLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDVCxTQUFBLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFekIsT0FBTyxDQUFBLEdBQUEsRUFBTSxXQUFXLENBQUEsQ0FBQSxDQUFHLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQU1FLHlCQUF1QixHQUErQjtBQUMxRCxJQUFBLEtBQUssRUFBRSxDQUFDO0FBQ1IsSUFBQSxNQUFNLEVBQUUsQ0FBQztBQUNULElBQUEsS0FBSyxFQUFFLENBQUM7QUFDUixJQUFBLE1BQU0sRUFBRSxDQUFDO0FBQ1QsSUFBQSxLQUFLLEVBQUUsQ0FBQztBQUNSLElBQUEsS0FBSyxFQUFFLENBQUM7QUFDUixJQUFBLE9BQU8sRUFBRSxDQUFDO0FBQ1YsSUFBQSxNQUFNLEVBQUUsQ0FBQztBQUNULElBQUEsS0FBSyxFQUFFLENBQUM7QUFDUixJQUFBLEtBQUssRUFBRSxFQUFFO0FBQ1QsSUFBQSxRQUFRLEVBQUUsRUFBRTtBQUNaLElBQUEsT0FBTyxFQUFFLEVBQUU7QUFDWCxJQUFBLFVBQVUsRUFBRSxFQUFFO0FBQ2QsSUFBQSxVQUFVLEVBQUUsRUFBRTtBQUNkLElBQUEsU0FBUyxFQUFFLEVBQUU7QUFDYixJQUFBLFNBQVMsRUFBRSxFQUFFO0FBQ2IsSUFBQSxXQUFXLEVBQUUsRUFBRTtBQUNmLElBQUEsVUFBVSxFQUFFLEVBQUU7QUFDZCxJQUFBLFVBQVUsRUFBRSxFQUFFO0FBQ2QsSUFBQSxTQUFTLEVBQUUsRUFBRTtBQUNiLElBQUEsY0FBYyxFQUFFLEVBQUU7QUFDbEIsSUFBQSxjQUFjLEVBQUUsRUFBRTtBQUNsQixJQUFBLGVBQWUsRUFBRSxFQUFFO0FBQ25CLElBQUEsZUFBZSxFQUFFLEVBQUU7QUFDbkIsSUFBQSxjQUFjLEVBQUUsRUFBRTtBQUNsQixJQUFBLGNBQWMsRUFBRSxFQUFFO0FBQ2xCLElBQUEsZUFBZSxFQUFFLEVBQUU7QUFDbkIsSUFBQSxlQUFlLEVBQUUsRUFBRTtBQUNuQixJQUFBLGNBQWMsRUFBRSxFQUFFO0FBQ2xCLElBQUEsY0FBYyxFQUFFLEVBQUU7QUFDbEIsSUFBQSxjQUFjLEVBQUUsRUFBRTtBQUNsQixJQUFBLGNBQWMsRUFBRSxFQUFFO0FBQ2xCLElBQUEsZ0JBQWdCLEVBQUUsRUFBRTtBQUNwQixJQUFBLGdCQUFnQixFQUFFLEVBQUU7QUFDcEIsSUFBQSxlQUFlLEVBQUUsRUFBRTtBQUNuQixJQUFBLGVBQWUsRUFBRSxFQUFFO0FBQ25CLElBQUEsY0FBYyxFQUFFLEVBQUU7QUFDbEIsSUFBQSxjQUFjLEVBQUUsRUFBRTtBQUNsQixJQUFBLFNBQVMsRUFBRSxFQUFFO0FBQ2IsSUFBQSxjQUFjLEVBQUUsRUFBRTtBQUNsQixJQUFBLGNBQWMsRUFBRSxFQUFFO0NBQ25CLENBQUM7QUFFSyxNQUFNQyx3QkFBc0IsR0FBRyxDQUFBLEdBQUEsRUFBTUYsaUJBQWUsQ0FDekRDLHlCQUF1QixDQUN4QixDQUFBLGtEQUFBLENBQW9ELENBQUM7QUFFaEQsU0FBVUUsMkJBQXlCLENBQUMsS0FBYSxFQUFBO0FBQ3JELElBQUEsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzlCLElBQUEsSUFBSUYseUJBQXVCLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQzlDLFFBQUEsT0FBT0EseUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsS0FBQTs7SUFHRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN2RCxJQUFBLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFFRDs7Ozs7O0FBTUc7QUFDYSxTQUFBLDhCQUE4QixDQUFDLElBQVksRUFBRSxTQUFtQixFQUFBO0lBQzlFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1QyxJQUFBLE1BQU0sRUFBRSxHQUFHLElBQUksb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFL0MsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7Ozs7SUFJbkQsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXJELE1BQU0scUJBQXFCLEdBQWEsRUFBRSxDQUFDOzs7Ozs7OztBQVUzQyxJQUFBLElBQUksU0FBUyxFQUFFO0FBQ2IsUUFBQSxJQUFJLGFBQWEsRUFBRTtBQUNqQixZQUFBLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFBLElBQUEsRUFBTyxTQUFTLENBQUEsZ0JBQUEsRUFBbUIsYUFBYSxDQUFHLENBQUEsQ0FBQSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEcsU0FBQTtBQUNELFFBQUEsSUFBSSxXQUFXLEVBQUU7QUFDZixZQUFBLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFBLElBQUEsRUFBTyxTQUFTLENBQUEsZ0JBQUEsRUFBbUIsV0FBVyxDQUFHLENBQUEsQ0FBQSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEcsU0FBQTtBQUNGLEtBQUE7O0FBR0QsSUFBQSxJQUFJLFlBQVksRUFBRTtBQUNoQixRQUFBLElBQUksYUFBYSxFQUFFO0FBQ2pCLFlBQUEscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUEsWUFBQSxFQUFlLGFBQWEsQ0FBQSxRQUFBLEVBQVcsWUFBWSxDQUFJLEVBQUEsQ0FBQSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEcsU0FBQTtBQUNELFFBQUEsSUFBSSxXQUFXLEVBQUU7QUFDZixZQUFBLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFBLFlBQUEsRUFBZSxXQUFXLENBQUEsUUFBQSxFQUFXLFlBQVksQ0FBSSxFQUFBLENBQUEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BHLFNBQUE7QUFDRixLQUFBO0FBRUQsSUFBQSxPQUFPLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRDs7Ozs7QUFLRztBQUNHLFNBQVUsZUFBZSxDQUFDLFNBQW9CLEVBQUE7O0lBRWxELE1BQU0seUJBQXlCLEdBQUcsU0FBc0UsQ0FBQztBQUN6RyxJQUFBLElBQUkseUJBQXlCLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRTtBQUNsRCxRQUFBLE9BQU8seUJBQXlCLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztBQUN0RCxLQUFBOztJQUdELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQ0csdUJBQVksQ0FBQyxDQUFDO0lBQy9ELElBQUksVUFBVSxFQUFFLE1BQU0sRUFBRTtRQUN0QixPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUM7QUFDMUIsS0FBQTs7O0FBSUQsSUFBQSxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUNqRCxJQUFBLElBQUksVUFBVSxFQUFFO0FBQ2QsUUFBQSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDOztRQUU3QixNQUFNLGNBQWMsR0FBRyxJQUF5QyxDQUFDO1FBQ2pFLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUN6QixPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUM7QUFDOUIsU0FBQTtBQUNGLEtBQUE7OztJQUlELElBQUksb0JBQW9CLEdBQWtCLElBQUksQ0FBQztJQUMvQyxLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDeEQsUUFBQSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3ZCLFFBQUEsSUFBSSxJQUFJLFlBQVlBLHVCQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUMvQyxZQUFBLE1BQU0sUUFBUSxHQUFJLElBQUksQ0FBQyxNQUF5RCxDQUFDLEVBQUUsQ0FBQztBQUNwRixZQUFBLElBQUksUUFBUSxFQUFFLFFBQVEsSUFBSSxFQUFFO2dCQUMxQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDcEIsYUFBQTtBQUNELFlBQUEsb0JBQW9CLEdBQUcsb0JBQW9CLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM1RCxTQUFBO0FBQ0YsS0FBQTtBQUVELElBQUEsT0FBTyxvQkFBb0IsQ0FBQztBQUM5QixDQUFDO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNNLFNBQVUsYUFBYSxDQUFDLENBQVUsRUFBQTtJQUN0QyxJQUFJLENBQUMsWUFBWSxLQUFLO1FBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3pDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUTtBQUFFLFFBQUEsT0FBTyxDQUFDLENBQUM7QUFDcEMsSUFBQSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7O0FDblpxQixNQUFBLG1CQUFvQixTQUFRQyxnQkFBSyxDQUFBO0lBUXBELFdBQVksQ0FBQSxHQUFRLEVBQUUsTUFBNEIsRUFBQTtRQUNoRCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Ozs7O1FBSEwsSUFBYSxDQUFBLGFBQUEsR0FBRyxLQUFLLENBQUM7QUFJNUIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztLQUN0QjtJQUVELE1BQU0sR0FBQTtBQUNKLFFBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ2Y7SUFFRCxPQUFPLEdBQUE7QUFDTCxRQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7S0FDeEI7QUFFTyxJQUFBLE1BQU0sTUFBTSxHQUFBOzs7UUFHbEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0FBRTNFLFFBQUEsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUMzQixTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEIsUUFBQSxTQUFTLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFaEQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDO0FBRWhFLFFBQUEsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4QixTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxxRkFBcUYsRUFBRSxDQUFDLENBQUM7WUFDekgsT0FBTztBQUNSLFNBQUE7UUFFRCxJQUFJQyxrQkFBTyxDQUFDLFNBQVMsQ0FBQzthQUNuQixPQUFPLENBQUMsbUJBQW1CLENBQUM7YUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhO0FBQ3pCLGNBQUUsa0RBQWtEO0FBQ3BELGNBQUUsQ0FBYyxXQUFBLEVBQUEsT0FBTyxDQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzNDLGFBQUEsU0FBUyxDQUFDLENBQUMsTUFBTSxLQUFJO0FBQ3BCLFlBQUEsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLHdCQUF3QixHQUFHLFdBQVcsQ0FBQyxDQUFDO1lBQ2xGLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdEIsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3JCLGFBQUE7QUFDRCxZQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBVztBQUN4QixnQkFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUN2QixvQkFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztBQUMxQixvQkFBQSxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDcEIsT0FBTztBQUNSLGlCQUFBO2dCQUNELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDaEQsZ0JBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDM0IsZ0JBQUEsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEIsYUFBQyxDQUFDLENBQUM7QUFDTCxTQUFDLENBQUMsQ0FBQztBQUVMLFFBQUEsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUU7WUFDM0IsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN0RCxZQUFBLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFBLEVBQUcsS0FBSyxDQUFDLEtBQUssUUFBUSxDQUFDO1lBRXhFLElBQUlBLGtCQUFPLENBQUMsU0FBUyxDQUFDO0FBQ25CLGlCQUFBLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3RCLGlCQUFBLE9BQU8sQ0FBQyxDQUFRLEtBQUEsRUFBQSxTQUFTLENBQWdCLGFBQUEsRUFBQSxZQUFZLEVBQUUsQ0FBQztBQUN4RCxpQkFBQSxTQUFTLENBQUMsQ0FBQyxNQUFNLEtBQUk7Z0JBQ3BCLE1BQU07cUJBQ0gsT0FBTyxDQUFDLE9BQU8sQ0FBQztxQkFDaEIsVUFBVSxDQUFDLG1CQUFtQixDQUFDO3FCQUMvQixPQUFPLENBQUMsWUFBVzs7Ozs7QUFLbEIsb0JBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDM0Isb0JBQUEsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hELG9CQUFBLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3RCLGlCQUFDLENBQUMsQ0FBQztBQUNQLGFBQUMsQ0FBQyxDQUFDO0FBQ04sU0FBQTtLQUNGO0FBQ0Y7O0FDckJNLE1BQU0sZ0JBQWdCLEdBQWdCO0FBQzNDLElBQUEscUJBQXFCLEVBQUUsSUFBSTtBQUMzQixJQUFBLHlCQUF5QixFQUFFLEdBQUc7QUFDOUIsSUFBQSxvQkFBb0IsRUFBRSxJQUFJO0FBRTFCLElBQUEsTUFBTSxFQUFFLFlBQVk7QUFDcEIsSUFBQSxVQUFVLEVBQUUsT0FBTztBQUNuQixJQUFBLFNBQVMsRUFBRSxHQUFHO0FBQ2QsSUFBQSxTQUFTLEVBQUUsZ0JBQWdCO0lBQzNCLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQztBQUVqQixJQUFBLE9BQU8sRUFBRSxJQUFJO0FBQ2IsSUFBQSxRQUFRLEVBQUUsS0FBSztBQUNmLElBQUEsTUFBTSxFQUFFLEtBQUs7QUFDYixJQUFBLE1BQU0sRUFBRSxLQUFLO0FBQ2IsSUFBQSxVQUFVLEVBQUUsS0FBSztBQUNqQixJQUFBLEtBQUssRUFBRSxLQUFLO0FBQ1osSUFBQSxPQUFPLEVBQUUsS0FBSztBQUNkLElBQUEsT0FBTyxFQUFFLEtBQUs7QUFDZCxJQUFBLE9BQU8sRUFBRSxLQUFLO0FBQ2QsSUFBQSxTQUFTLEVBQUUsS0FBSztBQUNoQixJQUFBLE9BQU8sRUFBRSxLQUFLO0FBQ2QsSUFBQSxNQUFNLEVBQUUsS0FBSztBQUViLElBQUEsZUFBZSxFQUFFLEtBQUs7QUFDdEIsSUFBQSxpQkFBaUIsRUFBRSxZQUFZOztBQUcvQixJQUFBLHNCQUFzQixFQUFFLElBQUk7QUFDNUIsSUFBQSx3QkFBd0IsRUFBRSxJQUFJO0FBQzlCLElBQUEsd0JBQXdCLEVBQUUsSUFBSTs7QUFHOUIsSUFBQSx3QkFBd0IsRUFBRSxJQUFJO0NBQy9CLENBQUM7QUFFRixNQUFNLFFBQVEsR0FBRztJQUNmLFFBQVE7SUFDUixRQUFRO0lBQ1IsU0FBUztJQUNULFdBQVc7SUFDWCxVQUFVO0lBQ1YsUUFBUTtJQUNSLFVBQVU7Q0FDWCxDQUFDO0FBRUksTUFBTyxjQUFlLFNBQVFDLDJCQUFnQixDQUFBO0lBR2xELFdBQVksQ0FBQSxHQUFRLEVBQUUsTUFBNEIsRUFBQTtBQUNoRCxRQUFBLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztLQUN0QjtJQUVELE9BQU8sR0FBQTtBQUNMLFFBQUEsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM3QixRQUFBLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzVDLFFBQUEsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztRQUU3QyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7QUFFcEIsUUFBQSxJQUFJRCxrQkFBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBRXhFLFFBQUEsSUFBSUEsa0JBQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUVqRSxRQUFBLE1BQU0saUJBQWlCLEdBQUcsSUFBSUEsa0JBQU8sQ0FBQyxXQUFXLENBQUM7YUFDL0MsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixPQUFPLENBQUMsZ0NBQWdDLENBQUM7QUFDekMsYUFBQSxlQUFlLENBQUMsQ0FBQyxJQUFJLEtBQ3BCLElBQUk7YUFDRCxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7YUFDOUIsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUNyQyxhQUFBLFFBQVEsQ0FBQyxPQUFPLEtBQUssS0FBSTtZQUN4QixNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDLENBQUM7WUFDOUQsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO2dCQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxJQUFJLFlBQVksQ0FBQztBQUNwRCxnQkFBQSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7Ozs7O2dCQUtqQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQSw4QkFBQSxFQUFpQyxTQUFTLENBQUMsT0FBTyxHQUFHLGNBQWMsU0FBUyxDQUFDLE9BQU8sQ0FBRyxDQUFBLENBQUEsR0FBRyxFQUFFLENBQUUsQ0FBQSxDQUFDLENBQUM7QUFDM0gsYUFBQTtBQUFNLGlCQUFBOzs7O2dCQUlMLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUF1QyxvQ0FBQSxFQUFBLFNBQVMsQ0FBQyxLQUFLLElBQUksaUJBQWlCLENBQUUsQ0FBQSxDQUFDLENBQUM7O2dCQUV6RyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLGFBQUE7U0FDRixDQUFDLENBQ0wsQ0FBQzs7QUFHSixRQUFBLE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUUsUUFBQSxJQUFJLGlCQUFpQixDQUFDLEtBQUssSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLEVBQUU7WUFDeEQsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUEseUNBQUEsRUFBNEMsaUJBQWlCLENBQUMsT0FBTyxDQUFHLENBQUEsQ0FBQSxDQUFDLENBQUM7QUFDckcsU0FBQTtRQUVELElBQUlBLGtCQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3JCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN6QixPQUFPLENBQUMsZ0RBQWdELENBQUM7QUFDekQsYUFBQSxXQUFXLENBQUMsQ0FBQyxRQUFRLEtBQUk7QUFDeEIsWUFBQSxRQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUEsZ0JBQUEsRUFBbUIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFHLENBQUEsQ0FBQSxDQUFDLENBQUM7WUFDcEYsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSTtnQkFDbkMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkMsYUFBQyxDQUFDLENBQUM7QUFDSCxZQUFBLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDaEUsWUFBQSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sS0FBZ0IsS0FBSTtnQkFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUN2QyxnQkFBQSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDbkMsYUFBQyxDQUFDLENBQUM7QUFDTCxTQUFDLENBQUMsQ0FBQztBQUVMLFFBQUEsSUFBSUEsa0JBQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUVuRSxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRSxRQUFBLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUN6RixRQUFBLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUNqRyxRQUFBLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEUsUUFBQSxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUM5RyxRQUFBLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUV6RixRQUFBLElBQUlBLGtCQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFFNUUsUUFBQSxNQUFNLGlCQUFpQixHQUFHLElBQUlBLGtCQUFPLENBQUMsV0FBVyxDQUFDO2FBQy9DLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsT0FBTyxDQUFDLHNEQUFzRCxDQUFDO0FBQy9ELGFBQUEsZUFBZSxDQUFDLENBQUMsSUFBSSxLQUNwQixJQUFJO2FBQ0QsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO2FBQ3pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7QUFDekMsYUFBQSxRQUFRLENBQUMsT0FBTyxLQUFLLEtBQUk7WUFDeEIsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxDQUFDO1lBQ3pELElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtnQkFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLEtBQUssSUFBSSxPQUFPLENBQUM7QUFDbkQsZ0JBQUEsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDOzs7O2dCQUlqQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQSxvREFBQSxFQUF1RCxTQUFTLENBQUMsT0FBTyxHQUFHLGNBQWMsU0FBUyxDQUFDLE9BQU8sQ0FBRyxDQUFBLENBQUEsR0FBRyxFQUFFLENBQUUsQ0FBQSxDQUFDLENBQUM7QUFDakosYUFBQTtBQUFNLGlCQUFBOzs7Z0JBR0wsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQTZELDBEQUFBLEVBQUEsU0FBUyxDQUFDLEtBQUssSUFBSSxpQkFBaUIsQ0FBRSxDQUFBLENBQUMsQ0FBQzs7Z0JBRS9ILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEQsYUFBQTtTQUNGLENBQUMsQ0FDTCxDQUFDOztBQUdKLFFBQUEsTUFBTSxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwRixRQUFBLElBQUkscUJBQXFCLENBQUMsS0FBSyxJQUFJLHFCQUFxQixDQUFDLE9BQU8sRUFBRTtZQUNoRSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQSwrREFBQSxFQUFrRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUcsQ0FBQSxDQUFBLENBQUMsQ0FBQztBQUMvSCxTQUFBO1FBRUQsSUFBSUEsa0JBQU8sQ0FBQyxXQUFXLENBQUM7YUFDckIsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUNwQixPQUFPLENBQUMsNERBQTRELENBQUM7QUFDckUsYUFBQSxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQ1osSUFBSTthQUNELGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQzthQUNwQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0FBQ3hDLGFBQUEsUUFBUSxDQUFDLE9BQU8sS0FBSyxLQUFJO1lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDdkMsWUFBQSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDbEMsQ0FBQyxDQUNMLENBQUM7QUFFSixRQUFBLElBQUlBLGtCQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFbEUsSUFBSUEsa0JBQU8sQ0FBQyxXQUFXLENBQUM7YUFDckIsT0FBTyxDQUFDLHlCQUF5QixDQUFDO2FBQ2xDLE9BQU8sQ0FDTixDQUFpRSw4REFBQSxFQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFBLENBQUUsQ0FDbEg7QUFDQSxhQUFBLFNBQVMsQ0FBQyxDQUFDLE1BQU0sS0FDaEIsTUFBTTthQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztBQUNuRCxhQUFBLFFBQVEsQ0FBQyxPQUFPLEtBQUssS0FBSTtZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7QUFDbEQsWUFBQSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDbEMsQ0FBQyxDQUNMLENBQUM7UUFFSixJQUFJQSxrQkFBTyxDQUFDLFdBQVcsQ0FBQzthQUNyQixPQUFPLENBQUMsb0JBQW9CLENBQUM7YUFDN0IsT0FBTyxDQUNOLDRFQUE0RSxDQUM3RTtBQUNBLGFBQUEsU0FBUyxDQUFDLENBQUMsTUFBTSxLQUNoQixNQUFNO2FBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDO0FBQ3BELGFBQUEsUUFBUSxDQUFDLE9BQU8sS0FBSyxLQUFJO1lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztBQUNuRCxZQUFBLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNsQyxDQUFDLENBQ0wsQ0FBQztRQUVKLE1BQU0saUJBQWlCLEdBQUcsMkRBQTJELENBQUM7QUFDdEYsUUFBQSxNQUFNLG9CQUFvQixHQUFHLElBQUlBLGtCQUFPLENBQUMsV0FBVyxDQUFDO2FBQ2xELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN6QixPQUFPLENBQUMsaUJBQWlCLENBQUM7QUFDMUIsYUFBQSxlQUFlLENBQUMsQ0FBQyxJQUFJLEtBQ3BCLElBQUk7QUFDRCxhQUFBLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQzthQUMxRCxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMseUJBQXlCLElBQUksR0FBRyxDQUFDO0FBQy9ELGFBQUEsUUFBUSxDQUFDLE9BQU8sS0FBSyxLQUFJO0FBQ3hCLFlBQUEsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdCLFlBQUEsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMseUJBQXlCLEdBQUcsT0FBTyxDQUFDO0FBQ3pELGdCQUFBLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNqQyxnQkFBQSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNqRCxhQUFBO0FBQU0saUJBQUE7Ozs7O0FBS0wsZ0JBQUEsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEdBQUcsaUJBQWlCLENBQUEsb0NBQUEsQ0FBc0MsQ0FBQyxDQUFDO0FBQ3pGLGdCQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMseUJBQXlCLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdEUsYUFBQTtTQUNGLENBQUMsQ0FDTCxDQUFDO0FBRUosUUFBQSxJQUFJQSxrQkFBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRW5FLElBQUlBLGtCQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3JCLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQzthQUNuQyxPQUFPLENBQ04saUZBQWlGLENBQ2xGO0FBQ0EsYUFBQSxTQUFTLENBQUMsQ0FBQyxNQUFNLEtBQ2hCLE1BQU07YUFDSCxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUM7QUFDckQsYUFBQSxRQUFRLENBQUMsT0FBTyxLQUFLLEtBQUk7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0FBQ3BELFlBQUEsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ2xDLENBQUMsQ0FDTCxDQUFDO1FBRUosSUFBSUEsa0JBQU8sQ0FBQyxXQUFXLENBQUM7YUFDckIsT0FBTyxDQUFDLDJCQUEyQixDQUFDO2FBQ3BDLE9BQU8sQ0FDTixrRkFBa0YsQ0FDbkY7QUFDQSxhQUFBLFNBQVMsQ0FBQyxDQUFDLE1BQU0sS0FDaEIsTUFBTTthQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQztBQUN2RCxhQUFBLFFBQVEsQ0FBQyxPQUFPLEtBQUssS0FBSTtZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUM7QUFDdEQsWUFBQSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDbEMsQ0FBQyxDQUNMLENBQUM7UUFFSixJQUFJQSxrQkFBTyxDQUFDLFdBQVcsQ0FBQzthQUNyQixPQUFPLENBQUMsMkJBQTJCLENBQUM7YUFDcEMsT0FBTyxDQUNOLHNFQUFzRSxDQUN2RTtBQUNBLGFBQUEsU0FBUyxDQUFDLENBQUMsTUFBTSxLQUNoQixNQUFNO2FBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDO0FBQ3ZELGFBQUEsUUFBUSxDQUFDLE9BQU8sS0FBSyxLQUFJO1lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQztBQUN0RCxZQUFBLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNsQyxDQUFDLENBQ0wsQ0FBQztRQUVKLElBQUlBLGtCQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3JCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN6QixPQUFPLENBQ04sa0ZBQWtGLENBQ25GO0FBQ0EsYUFBQSxTQUFTLENBQUMsQ0FBQyxNQUFNLEtBQ2hCLE1BQU07YUFDSCxhQUFhLENBQUMsZ0JBQWdCLENBQUM7YUFDL0IsT0FBTyxDQUFDLE1BQUs7QUFDWixZQUFBLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDdkQsQ0FBQyxDQUNMLENBQUM7QUFFSixRQUFBLElBQUlBLGtCQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFakUsSUFBSUEsa0JBQU8sQ0FBQyxXQUFXLENBQUM7YUFDckIsT0FBTyxDQUFDLDBDQUEwQyxDQUFDO2FBQ25ELE9BQU8sQ0FDTixzS0FBc0ssQ0FDdks7QUFDQSxhQUFBLFNBQVMsQ0FBQyxDQUFDLE1BQU0sS0FDaEIsTUFBTTthQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQztBQUN2RCxhQUFBLFFBQVEsQ0FBQyxPQUFPLEtBQUssS0FBSTtZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUM7QUFDdEQsWUFBQSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDbEMsQ0FBQyxDQUNMLENBQUM7S0FDTDtJQUVTLHFCQUFxQixDQUFDLFdBQXdCLEVBQUUsSUFBWSxFQUFFLFVBQTZCLEVBQUUsSUFBWSxFQUFFLElBQWEsRUFBQTtBQUNoSSxRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQSxFQUFBLEVBQUssSUFBSSxDQUFBLENBQUEsQ0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxRQUFBLE9BQU8sSUFBSUEsa0JBQU8sQ0FBQyxXQUFXLENBQUM7YUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQztBQUNiLGFBQUEsT0FBTyxDQUFDLENBQW9CLGlCQUFBLEVBQUEsSUFBSSxDQUFTLE9BQUEsQ0FBQSxHQUFHLElBQUksQ0FBQztBQUNqRCxhQUFBLFNBQVMsQ0FBQyxDQUFDLElBQ1YsQ0FBQzthQUNFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQVksQ0FBQztBQUNyRCxhQUFBLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSTtZQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQWEsR0FBRyxDQUFDLENBQUM7QUFDbEQsWUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QixZQUFBLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNqQyxZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDM0IsQ0FBQyxDQUFDLENBQUM7S0FDWDtJQUVTLGFBQWEsQ0FBQyxJQUFZLEVBQUUsT0FBZ0IsRUFBQTtBQUNwRCxRQUFBLElBQUksT0FBTyxFQUFFO0FBQ1gsWUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxhQUFBO0FBQ0YsU0FBQTtBQUFNLGFBQUE7QUFDTCxZQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0QsWUFBQSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTtBQUNkLGdCQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pELGFBQUE7QUFDRixTQUFBO0tBQ0Y7QUFDRjs7QUN0WW9CLE1BQUEsZUFBZ0IsU0FBUUQsZ0JBQUssQ0FBQTtJQWFoRCxXQUFZLENBQUEsR0FBUSxFQUFFLE1BQTRCLEVBQUE7UUFDaEQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBVkwsSUFBVSxDQUFBLFVBQUEsR0FBdUIsSUFBSSxDQUFDO1FBQ3RDLElBQWMsQ0FBQSxjQUFBLEdBQXVCLElBQUksQ0FBQztRQUMxQyxJQUFTLENBQUEsU0FBQSxHQUF1QixJQUFJLENBQUM7UUFDckMsSUFBVyxDQUFBLFdBQUEsR0FBNEIsSUFBSSxDQUFDO1FBRTVDLElBQWEsQ0FBQSxhQUFBLEdBQTRCLElBQUksQ0FBQztRQUM5QyxJQUFlLENBQUEsZUFBQSxHQUF3QyxJQUFJLENBQUM7UUFDNUQsSUFBb0IsQ0FBQSxvQkFBQSxHQUFvQyxJQUFJLENBQUM7QUFJbkUsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7Ozs7OztRQU9yQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QyxRQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxFQUFFLENBQUM7O0FBRTdCLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDeEU7SUFFRCxNQUFNLEdBQUE7QUFDSixRQUFBLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDM0IsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xCLFFBQUEsU0FBUyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDOztRQUc1QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDbkIsWUFBQSxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3JDLFNBQUE7UUFFRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztRQUMxRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7UUFDeEQsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDOzs7O0FBS25CLFFBQUEsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLElBQVksS0FDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUVoRCxJQUFJLGlCQUFpQixHQUE2QyxJQUFJLENBQUM7Ozs7Ozs7OztBQVV2RSxRQUFBLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxTQUFpQixLQUFZO0FBQ3JELFlBQUEsSUFBSSxpQkFBaUIsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO2dCQUM5RCxPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztBQUNqQyxhQUFBO0FBQ0QsWUFBQSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDN0QsaUJBQWlCLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQztBQUMvRCxZQUFBLE9BQU8sWUFBWSxDQUFDO0FBQ3RCLFNBQUMsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHLE1BQUs7WUFDdEIsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELFlBQUEsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7O0FBR25ELFlBQUEsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM1RCxZQUFBLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLEtBQUssR0FBRyxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUM7Ozs7O1lBTS9GLE1BQU0sWUFBWSxHQUFHLGNBQWM7QUFDakMsa0JBQUUsZ0JBQWdCLENBQUMsY0FBYyxDQUFDO0FBQ2xDLGtCQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7Ozs7Ozs7O1lBU3RCLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLFlBQVksQ0FBQztBQUVuRyxZQUFBLElBQUksZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRTtBQUM3QyxrQkFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztrQkFDbEMsRUFBRSxDQUFDO0FBRVAsWUFBQSxJQUFJLFlBQVksRUFBRTtBQUNoQixnQkFBQSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FDckMsSUFBSSxDQUFDLEdBQUcsRUFDUixnQkFBZ0IsRUFDaEIsa0JBQWtCLEdBQUcsY0FBYyxHQUFHLFNBQVMsQ0FDaEQsQ0FBQztBQUNILGFBQUE7QUFFRCxZQUFBLE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsU0FBQyxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcsTUFBSztZQUN6QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDdEMsYUFBQTtBQUNILFNBQUMsQ0FBQzs7Ozs7OztRQVFGLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxJQUFZLEVBQUUsU0FBUyxHQUFHLElBQUksS0FBSTtBQUM1RCxZQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pDLFlBQUEsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNwRCxhQUFBO0FBQ0QsWUFBQSxhQUFhLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDeEIsU0FBQyxDQUFDOztBQUdGLFFBQUEsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGtCQUFrQixDQUFDOztRQUcvQyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLENBQUM7O1FBR25FLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQy9ELFFBQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLENBQUM7O1FBRzVDLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQzs7UUFHcEUsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzVELFFBQUEsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7QUFDNUMsWUFBQSxHQUFHLEVBQUUsYUFBYTtBQUNsQixZQUFBLElBQUksRUFBRSxHQUFHO0FBQ1QsWUFBQSxJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUU7QUFDekMsU0FBQSxDQUFDLENBQUM7UUFFSCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFdEQsUUFBQSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtBQUM1QyxZQUFBLEdBQUcsRUFBRSxhQUFhO0FBQ2xCLFlBQUEsSUFBSSxFQUFFLEdBQUc7QUFDVCxZQUFBLElBQUksRUFBRSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUU7QUFDdkMsU0FBQSxDQUFDLENBQUM7QUFFSCxRQUFBLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBSztZQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3RCLFlBQUEsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzNDLFNBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBQSxZQUFZLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQUs7WUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN0QixZQUFBLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMzQyxTQUFDLENBQUMsQ0FBQzs7QUFHSCxRQUFBLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUN4RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdDLFFBQUEsS0FBSyxJQUFJLElBQUksR0FBRyxXQUFXLEdBQUcsRUFBRSxFQUFFLElBQUksSUFBSSxXQUFXLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ2xFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRixJQUFJLElBQUksS0FBSyxXQUFXLEVBQUU7QUFDeEIsZ0JBQUEsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDeEIsYUFBQTtBQUNGLFNBQUE7UUFDRCxVQUFVLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFJO0FBQzFDLFlBQUEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQTJCLENBQUM7QUFDN0MsWUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3RCLFlBQUEsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzNDLFNBQUMsQ0FBQyxDQUFDOztBQUdILFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0FBQzFFLFFBQUEsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25DLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxLQUFJO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFO0FBQ3ZDLGdCQUFBLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLGFBQUE7QUFDSCxTQUFDLENBQUMsQ0FBQztRQUNILFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUk7QUFDM0MsWUFBQSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBMkIsQ0FBQztBQUM3QyxZQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdEIsWUFBQSxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0MsU0FBQyxDQUFDLENBQUM7QUFFSCxRQUFBLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQzs7UUFHekMsSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzs7UUFHdEIsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzlELFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSUMsa0JBQU8sQ0FBQyxZQUFZLENBQUM7YUFDMUMsT0FBTyxDQUFDLE1BQU0sQ0FBQzthQUNmLE9BQU8sQ0FBQyxFQUFFLENBQUM7QUFDWCxhQUFBLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSTtBQUNsQixZQUFBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0IsWUFBQSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDeEQsWUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFFbEMsWUFBQSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxLQUFJO2dCQUN4QixTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLGdCQUFBLElBQUksS0FBSyxFQUFFO29CQUNULE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDL0Qsb0JBQUEsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUU7Ozs7O0FBSzFCLHdCQUFBLGtCQUFrQixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDeEMsT0FBTztBQUNSLHFCQUFBO0FBQ0YsaUJBQUE7QUFDRCxnQkFBQSxhQUFhLEVBQUUsQ0FBQztBQUNsQixhQUFDLENBQUMsQ0FBQztBQUVILFlBQUEsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdEQsU0FBQyxDQUFDLENBQUM7QUFDTCxRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztBQUNwQyxRQUFBLGFBQWEsRUFBRSxDQUFDOztBQUdoQixRQUFBLE1BQU0sYUFBYSxHQUFHLElBQUlBLGtCQUFPLENBQUMsWUFBWSxDQUFDO2FBQzVDLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdEIsT0FBTyxDQUFDLDBCQUEwQixDQUFDO0FBQ25DLGFBQUEsZUFBZSxDQUFDLENBQUMsUUFBUSxLQUFJO0FBQzVCLFlBQUEsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN0QyxZQUFBLFFBQVEsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDaEMsWUFBQSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxLQUFJO2dCQUMxQixNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksWUFBWSxDQUFDLENBQUM7Z0JBQ3JFLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtBQUNuQixvQkFBQSxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLFlBQVksQ0FBQztvQkFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxDQUFDO0FBQ3RELG9CQUFBLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNoQyxvQkFBQSxhQUFhLEVBQUUsQ0FBQzs7b0JBRWhCLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQSx3QkFBQSxFQUEyQixTQUFTLENBQUMsT0FBTyxHQUFHLGNBQWMsU0FBUyxDQUFDLE9BQU8sQ0FBRyxDQUFBLENBQUEsR0FBRyxFQUFFLENBQUUsQ0FBQSxDQUFDLENBQUM7QUFDakgsaUJBQUE7QUFBTSxxQkFBQTs7b0JBRUwsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFpQyw4QkFBQSxFQUFBLFNBQVMsQ0FBQyxLQUFLLElBQUksaUJBQWlCLENBQUUsQ0FBQSxDQUFDLENBQUM7O0FBRS9GLG9CQUFBLFFBQVEsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDakMsaUJBQUE7QUFDSCxhQUFDLENBQUMsQ0FBQztBQUNMLFNBQUMsQ0FBQyxDQUFDOztBQUdMLFFBQUEsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM3RCxRQUFBLElBQUksaUJBQWlCLENBQUMsS0FBSyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sRUFBRTtZQUN4RCxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUEsbUNBQUEsRUFBc0MsaUJBQWlCLENBQUMsT0FBTyxDQUFHLENBQUEsQ0FBQSxDQUFDLENBQUM7QUFDM0YsU0FBQTtRQUVELElBQUlBLGtCQUFPLENBQUMsWUFBWSxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxjQUFjLENBQUM7QUFDdkIsYUFBQSxTQUFTLENBQUMsQ0FBQyxRQUFRLEtBQUk7QUFDdEIsWUFBQSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssS0FBSTtnQkFDekUsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFHLFlBQVksQ0FBQztBQUNwRCxnQkFBQSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDaEMsZ0JBQUEsYUFBYSxFQUFFLENBQUM7QUFDbEIsYUFBQyxDQUFDLENBQUM7QUFDTCxTQUFDLENBQUMsQ0FBQzs7UUFHTCxZQUFZLENBQUMsU0FBUyxDQUFDLHdCQUF3QixFQUFFLENBQUMsaUJBQWlCLEtBQUk7WUFDckUsaUJBQWlCO0FBQ2QsaUJBQUEsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7aUJBQ3BFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELFlBQUEsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtBQUNuQyxnQkFBQSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQ3hCLGdCQUFBLEdBQUcsRUFBRSxTQUFTO0FBQ2QsZ0JBQUEsSUFBSSxFQUFFLGFBQWE7QUFDcEIsYUFBQSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQUs7QUFDaEMsZ0JBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDLGFBQUMsQ0FBQyxDQUFDO0FBQ0wsU0FBQyxDQUFDLENBQUM7O0FBR0gsUUFBQSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDbEcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDOztRQUdqRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztLQUMzQjtBQUVPLElBQUEsa0JBQWtCLENBQUMsa0JBQTBDLEVBQUE7UUFDbkUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTztBQUVqQyxRQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDNUIsUUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsRUFBRSx5QkFBeUIsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztBQUV6RixRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7O0FBRzlELFFBQUEsTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFXLEtBQVk7WUFDOUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN4QyxJQUFJLFdBQVcsS0FBSyxVQUFVLEVBQUU7QUFDOUIsZ0JBQUEsT0FBTyxHQUFHLENBQUM7QUFDWixhQUFBOztBQUVELFlBQUEsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFDLFNBQUMsQ0FBQzs7Ozs7O0FBT0YsUUFBQSxNQUFNLFlBQVksR0FBRztBQUNuQixZQUFBO0FBQ0UsZ0JBQUEsS0FBSyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUM7QUFDL0IsZ0JBQUEsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDaEMsYUFBQTtBQUNELFlBQUE7QUFDRSxnQkFBQSxLQUFLLEVBQUUsZUFBZSxDQUFDLFVBQVUsQ0FBQztBQUNsQyxnQkFBQSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzlDLGFBQUE7QUFDRCxZQUFBO0FBQ0UsZ0JBQUEsS0FBSyxFQUFFLGVBQWUsQ0FBQyxXQUFXLENBQUM7QUFDbkMsZ0JBQUEsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUNuRCxhQUFBO0FBQ0QsWUFBQTtnQkFDRSxLQUFLLEVBQUUsQ0FBRyxFQUFBLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQSxDQUFBLEVBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFFLENBQUE7QUFDOUQsZ0JBQUEsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUMvQyxhQUFBO0FBQ0QsWUFBQTtnQkFDRSxLQUFLLEVBQUUsQ0FBRyxFQUFBLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQSxDQUFBLEVBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFFLENBQUE7QUFDL0QsZ0JBQUEsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUNoRCxhQUFBO0FBQ0QsWUFBQTtnQkFDRSxLQUFLLEVBQUUsQ0FBRyxFQUFBLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQSxDQUFBLEVBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFFLENBQUE7QUFDOUQsZ0JBQUEsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUMvQyxhQUFBO1NBQ0YsQ0FBQztRQUVGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUVqRixRQUFBLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUk7QUFDOUIsWUFBQSxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO0FBQ2pELGdCQUFBLEdBQUcsRUFBRSxlQUFlO2dCQUNwQixJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUs7QUFDbkIsYUFBQSxDQUFDLENBQUM7QUFFSCxZQUFBLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBSztBQUNwQyxnQkFBQSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3hCLGFBQUMsQ0FBQyxDQUFDO0FBQ0wsU0FBQyxDQUFDLENBQUM7S0FDSjtJQUVPLGNBQWMsR0FBQTtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO0FBRTdCLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7UUFHeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxLQUFLLGdCQUFnQjtjQUNqRSxrQkFBa0IsRUFBRTtjQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7QUFFbkMsUUFBQSxNQUFNLGNBQWMsR0FBRyxTQUFTLEtBQUssUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsUUFBQSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDeEMsUUFBQSxNQUFNLGVBQWUsR0FBRztBQUN0QixZQUFBLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7QUFDakMsWUFBQSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQztTQUNyQyxDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUNuRSxRQUFBLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUk7WUFDOUIsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQ2pFLFlBQUEsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixTQUFDLENBQUMsQ0FBQzs7UUFHSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRTVELFFBQUEsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEUsUUFBQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzs7QUFHNUQsUUFBQSxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkMsUUFBQSxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEMsUUFBQSxNQUFNLElBQUksR0FBRyxTQUFTLEdBQUcsY0FBYyxDQUFDO1FBQ3hDLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtZQUNaLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxTQUFBO0FBQU0sYUFBQTtBQUNMLFlBQUEsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEMsU0FBQTs7QUFHRCxRQUFBLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxRQUFBLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxjQUFjLEdBQUcsWUFBWSxJQUFJLENBQUMsQ0FBQztRQUN4RCxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUU7QUFDZixZQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLFNBQUE7QUFFRCxRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXRDLE9BQU8sV0FBVyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7O0FBRWpELFlBQUEsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUNqRCxZQUFBLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7WUFHeEMsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtBQUN2QyxnQkFBQSxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzdCLGFBQUE7WUFDRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBRTtBQUNuRCxnQkFBQSxLQUFLLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ2hDLGFBQUE7WUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxFQUFFO0FBQ3RELGdCQUFBLEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNuQyxhQUFBO1lBRUQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3RELFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7O0FBR3ZDLFlBQUEsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFLO2dCQUNuQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtBQUM3QixvQkFBQSxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDM0MsaUJBQUE7QUFDSCxhQUFDLENBQUMsQ0FBQztBQUVILFlBQUEsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0IsU0FBQTtLQUNGO0FBRU8sSUFBQSxzQkFBc0IsQ0FBQyxXQUF3QixFQUFBO1FBQ3JELFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QyxRQUFBLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUMzQyxRQUFBLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0IsUUFBQSxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDM0MsUUFBQSxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQzFDLFFBQUEsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN4QjtBQUVPLElBQUEscUJBQXFCLENBQzNCLFlBQXlCLEVBQ3pCLFlBQXlCLEVBQ3pCLGtCQUEwQyxFQUFBO1FBRTFDLE9BQU8sQ0FBQyxDQUFnQixLQUFJOztZQUUxQixJQUFJLENBQUMsQ0FBQyxNQUFNLFlBQVksZ0JBQWdCLElBQUksQ0FBQyxDQUFDLE1BQU0sWUFBWSxpQkFBaUIsRUFBRTtnQkFDakYsT0FBTztBQUNSLGFBQUE7WUFFRCxRQUFRLENBQUMsQ0FBQyxHQUFHO0FBQ1gsZ0JBQUEsS0FBSyxXQUFXO29CQUNkLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDbkIsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNyQixNQUFNO0FBQ1IsZ0JBQUEsS0FBSyxZQUFZO29CQUNmLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDbkIsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNyQixNQUFNO0FBQ1IsZ0JBQUEsS0FBSyxTQUFTO29CQUNaLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUN2QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3RCLE1BQU07QUFDUixnQkFBQSxLQUFLLFdBQVc7b0JBQ2QsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdEIsTUFBTTtBQUNSLGdCQUFBLEtBQUssTUFBTTtvQkFDVCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ25CLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzVDLG9CQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxFQUFFLENBQUM7b0JBQzdCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdEIsTUFBTTtBQUNSLGdCQUFBLEtBQUssUUFBUTtvQkFDWCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDYixNQUFNO0FBQ1QsYUFBQTtBQUNILFNBQUMsQ0FBQztLQUNIO0lBRU8sa0JBQWtCLEdBQUE7O0FBRXhCLFFBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGdCQUFnQixDQUFDLE1BQUs7QUFDN0MsWUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3BDLFlBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFdkUsSUFBSSxXQUFXLEtBQUssSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNyRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDbkIsb0JBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDMUMsaUJBQUE7QUFBTSxxQkFBQTtBQUNMLG9CQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzdDLGlCQUFBO0FBQ0YsYUFBQTtBQUNILFNBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRTtBQUM5QyxZQUFBLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGVBQWUsRUFBRSxDQUFDLE9BQU8sQ0FBQztBQUMzQixTQUFBLENBQUMsQ0FBQztLQUNKO0FBRU8sSUFBQSxVQUFVLENBQUMsT0FBZSxFQUFBO1FBQ2hDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakIsT0FBTztBQUNSLFNBQUE7UUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDYixRQUFBLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUN4QztJQUVELE9BQU8sR0FBQTtBQUNMLFFBQUEsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUMzQixTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7O1FBR2xCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixTQUFTLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMvRCxZQUFBLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFNBQUE7O1FBR0QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQ3RCLFlBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNoQyxZQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFNBQUE7S0FDRjtBQUNGOztBQ2hqQk0sSUFBSSxRQUFRLENBQUM7QUFDcEIsQ0FBQyxVQUFVLFFBQVEsRUFBRTtBQUNyQixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsQ0FBQyxFQUFFLFFBQVEsS0FBSyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QixJQUFJLE9BQU8sQ0FBQztBQUNuQixDQUFDLFVBQVUsT0FBTyxFQUFFO0FBQ3BCLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDOUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUM5QyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ2hELElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDcEQsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUNsRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzlDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDbEQsQ0FBQyxFQUFFLE9BQU8sS0FBSyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2QixJQUFJLEtBQUssQ0FBQztBQUNqQixDQUFDLFVBQVUsS0FBSyxFQUFFO0FBQ2xCLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDNUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUM5QyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3hDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDeEMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNwQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMxQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ2hELElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDN0MsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUMvQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQy9DLENBQUMsRUFBRSxLQUFLLEtBQUssS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDOztBQzVCbEIsU0FBUyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFO0FBQ3JELElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDOUMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckQsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBQ00sU0FBUyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFO0FBQ3JELElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDaEQsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUNwRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7QUFDOUQsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JGLENBQUM7QUFDTSxTQUFTLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUU7QUFDcEQsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUM3QyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwRCxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFDTSxTQUFTLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUU7QUFDcEQsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUMvQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDbkQsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztBQUM3RCxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEY7O0FDdkJPLE1BQU0saUJBQWlCLEdBQUc7QUFDakMsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQ2QsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxLQUFLLEVBQUUsR0FBRztBQUNkLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQ2QsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUNYLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUU7QUFDVCxRQUFRLHVCQUF1QixFQUFFLENBQUMsR0FBRyxFQUFFO0FBQ3ZDLFFBQVEsb0JBQW9CLEVBQUUsRUFBRTtBQUNoQyxRQUFRLFFBQVEsRUFBRSxDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUN2RixRQUFRLE1BQU0sRUFBRSxDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUN2RixLQUFLO0FBQ0wsSUFBSSxLQUFLLEVBQUUsR0FBRztBQUNkLElBQUksS0FBSyxFQUFFLEdBQUc7QUFDZCxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEVBQUUsRUFBRTtBQUNSLFFBQVEsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRTtBQUN4QyxRQUFRLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDckMsUUFBUSxRQUFRLEVBQUUsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLFFBQVEsTUFBTSxFQUFFLENBQUMsSUFBSSxLQUFLLG9CQUFvQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxRixLQUFLO0FBQ0wsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQyxHQUFHO0FBQ2YsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQ2QsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNaLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksRUFBRSxFQUFFO0FBQ1IsUUFBUSx1QkFBdUIsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFO0FBQ3hDLFFBQVEsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRTtBQUNyQyxRQUFRLFFBQVEsRUFBRSxDQUFDLElBQUksS0FBSyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekYsUUFBUSxNQUFNLEVBQUUsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFGLEtBQUs7QUFDTCxJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRztBQUNkLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRztBQUNkLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRztBQUNkLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDWixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEtBQUssRUFBRSxHQUFHO0FBQ2QsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEtBQUssRUFBRSxHQUFHO0FBQ2QsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxLQUFLLEVBQUUsR0FBRztBQUNkLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDWCxJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxFQUFFLEVBQUU7QUFDUixRQUFRLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDeEMsUUFBUSxvQkFBb0IsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFO0FBQ3JDLFFBQVEsUUFBUSxFQUFFLENBQUMsSUFBSSxLQUFLLG9CQUFvQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RixRQUFRLE1BQU0sRUFBRSxDQUFDLElBQUksS0FBSyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUYsS0FBSztBQUNMLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxLQUFLLEVBQUUsR0FBRztBQUNkLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEtBQUssRUFBRSxHQUFHO0FBQ2QsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksS0FBSyxFQUFFLEdBQUc7QUFDZCxJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRztBQUNkLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRztBQUNkLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEVBQUUsRUFBRTtBQUNSLFFBQVEsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRTtBQUN4QyxRQUFRLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDckMsUUFBUSxRQUFRLEVBQUUsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLFFBQVEsTUFBTSxFQUFFLENBQUMsSUFBSSxLQUFLLG9CQUFvQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxRixLQUFLO0FBQ0wsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRztBQUNkLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRztBQUNkLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQ2QsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksS0FBSyxFQUFFLEdBQUc7QUFDZCxJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxFQUFFO0FBQ1gsSUFBSSxJQUFJLEVBQUUsRUFBRTtBQUNaLElBQUksSUFBSSxFQUFFLEVBQUU7QUFDWixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJ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QUFJLENBQUMsRUFBRTtBQUN4QixRQUFRLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QixLQUFLO0FBQ0wsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2QixRQUFRLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsUUFBUSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixLQUFLO0FBQ0wsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2QixRQUFRLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekMsUUFBUSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixLQUFLO0FBQ0wsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2QixRQUFRLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEMsUUFBUSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixLQUFLO0FBQ0wsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2QixRQUFRLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekMsUUFBUSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixLQUFLO0FBQ0wsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2QixRQUFRLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0MsUUFBUSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixLQUFLO0FBQ0wsSUFB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UUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osQ0FBQyxDQUFDO0FBQ0ssTUFBTUUsa0JBQWdCLEdBQUc7QUFDaEMsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksU0FBUyxFQUFFLEVBQUU7QUFDakIsSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUNiLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLFVBQVUs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aEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ2xCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUNqQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksU0FBUyxFQUFFLEVBQUU7QUFDakIsSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUNiLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLFVBQVUsRUFBRSxFQUFFO0FBQ2xCLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDYixJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsSUFBSSxVQUFVLEVBQUUsRUFBRTtBQUNsQixJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ2IsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLENBQUMsQ0FBQztBQUNLLE1B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QUssUUFBUSxDQUFDO0FBQzFCLFlBQVksS0FBSyxVQUFVO0FBQzNCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssV0FBVyxDQUFDO0FBQzdCLFlBQVksS0FBSyxhQUFhO0FBQzlCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssUUFBUSxDQUFDO0FBQzFCLFlBQVksS0FBSyxVQUFVO0FBQzNCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssYUFBYSxDQUFDO0FBQy9CLFlBQVksS0FBSyxlQUFlO0FBQ2hDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssT0FBTyxDQUFDO0FBQ3pCLFlBQVksS0FBSyxTQUFTO0FBQzFCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssTUFBTSxDQUFDO0FBQ3hCLFlBQVksS0FBSyxRQUFRLENBQUM7QUFDMUIsWUFBWSxLQUFLLFNBQVM7QUFDMUIsZ0JBQWdCLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtBQUMvQyxvQkFBb0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0MsaUJBQWlCO0FBQ2pCLHFCQUFxQjtBQUNyQixvQkFBb0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0MsaUJBQWlCO0FBQ2pCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xELGdCQUFnQixNQUFNO0FBQ3RCLFNBQVM7QUFDVCxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDs7QUNyRk8sTUFBTWtCLFFBQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQ1MsMkJBQXlCLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELE1BQU1SLFFBQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQ1MscUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNyRCxTQUFTUCxPQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDekMsSUFBSSxPQUFPSCxRQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUNNLFNBQVNJLFdBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUM3QyxJQUFJLE9BQU9KLFFBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBQ00sU0FBU1MsMkJBQXlCLENBQUMsWUFBWSxHQUFHLElBQUksRUFBRTtBQUMvRCxJQUFJLE1BQU0sTUFBTSxHQUFHQyxxQkFBbUIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDNUQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGtCQUFrQixFQUFFLENBQUMsQ0FBQztBQUNyRCxJQUFJLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFDTSxTQUFTQSxxQkFBbUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFlBQVksR0FBRyxJQUFJLEVBQUU7QUFDNUUsSUFBSSxPQUFPLDBCQUEwQixDQUFDO0FBQ3RDLFFBQVEsT0FBTyxFQUFFO0FBQ2pCLFlBQVksSUFBSSxlQUFlLEVBQUU7QUFDakMsWUFBWSxJQUFJLHFCQUFxQixDQUFDLFlBQVksQ0FBQztBQUNuRCxZQUFZLElBQUksNkJBQTZCLEVBQUU7QUFDL0MsWUFBWSxJQUFJLGVBQWUsRUFBRTtBQUNqQyxZQUFZLElBQUksb0NBQW9DLEVBQUU7QUFDdEQsU0FBUztBQUNULFFBQVEsUUFBUSxFQUFFLEVBQUU7QUFDcEIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ25COzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuQ2UsTUFBTSxzQkFBc0IsU0FBUyw0QkFBNEIsQ0FBQztBQUNqRixJQUFJLGFBQWEsR0FBRztBQUNwQixRQUFRLE9BQU8sd0JBQXdCLENBQUM7QUFDeEMsS0FBSztBQUNMLElBQUksY0FBYyxHQUFHO0FBQ3JCLFFBQVEsT0FBTyw2QkFBNkIsQ0FBQztBQUM3QyxLQUFLO0FBQ0wsSUFBSSw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pELFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFO0FBQzdDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsT0FBTyxLQUFLLENBQUMsNEJBQTRCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xFLEtBQUs7QUFDTDs7QUNaTyxNQUFNekUsb0JBQWtCLEdBQUc7QUFDbEMsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNsQixJQUFJLGFBQWEsRUFBRSxDQUFDO0FBQ3BCLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ2xCLElBQUksYUFBYSxFQUFFLENBQUM7QUFDcEIsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNsQixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxhQUFhLEVBQUUsQ0FBQztBQUNwQixJQUFJLGVBQWUsRUFBRSxDQUFDO0FBQ3RCLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsSUFBSSxhQUFhLEVBQUUsQ0FBQztBQUNwQixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUNqQixJQUFJLFlBQVksRUFBRSxDQUFDO0FBQ25CLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxDQUFDLENBQUM7QUFDSyxNQUFNRSxrQkFBZ0IsR0FBRztBQUNoQyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pCLElBQUksWUFBWSxFQUFFLENBQUM7QUFDbkIsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNsQixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUNqQixJQUFJLFlBQVksRUFBRSxDQUFDO0FBQ25CLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsSUFBSSxhQUFhLEVBQUUsQ0FBQztBQUNwQixJQUFJLFlBQVksRUFBRSxDQUFDO0FBQ25CLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pCLElBQUksWUFBWSxFQUFFLENBQUM7QUFDbkIsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNsQixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUNqQixJQUFJLFlBQVksRUFBRSxDQUFDO0FBQ25CLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNsQixJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pCLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pCLElBQUksWUFBWSxFQUFFLENBQUM7QUFDbkIsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNsQixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksVUFBVSxFQUFFLENBQUM7QUFDakIsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ2xCLElBQUksVUFBVSxFQUFFLENBQUM7QUFDakIsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksU0FBUyxFQUFFLEVBQUU7QUFDakIsSUFBSSxXQUFXLEVBQUUsRUFBRTtBQUNuQixJQUFJLFVBQVUsRUFBRSxFQUFFO0FBQ2xCLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLFdBQVcsRUFBRSxFQUFFO0FBQ25CLElBQUksYUFBYSxFQUFFLEVBQUU7QUFDckIsSUFBSSxZQUFZLEVBQUUsRUFBRTtBQUNwQixJQUFJLFFBQVEsRUFBRSxFQUFFO0FBQ2hCLElBQUksVUFBVSxFQUFFLEVBQUU7QUFDbEIsSUFBSSxZQUFZLEVBQUUsRUFBRTtBQUNwQixJQUFJLFdBQVcsRUFBRSxFQUFFO0FBQ25CLElBQUksT0FBTyxFQUFFLEVBQUU7QUFDZixDQUFDLENBQUM7QUFDSyxNQUFNQyx5QkFBdUIsR0FBRztBQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ2xCLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUNqQixJQUFJLFVBQVUsRUFBRSxFQUFFO0FBQ2xCLENBQUMsQ0FBQztBQUNLLE1BQU1DLHNCQUFvQixHQUFHO0FBQ3BDLElBQUksR0FBRyxFQUFFLFFBQVE7QUFDakIsSUFBSSxLQUFLLEVBQUUsUUFBUTtBQUNuQixJQUFJLFNBQVMsRUFBRSxRQUFRO0FBQ3ZCLElBQUksVUFBVSxFQUFFLFFBQVE7QUFDeEIsSUFBSSxVQUFVLEVBQUUsUUFBUTtBQUN4QixJQUFJLEtBQUssRUFBRSxRQUFRO0FBQ25CLElBQUksVUFBVSxFQUFFLFFBQVE7QUFDeEIsSUFBSSxXQUFXLEVBQUUsUUFBUTtBQUN6QixJQUFJLFVBQVUsRUFBRSxRQUFRO0FBQ3hCLElBQUksR0FBRyxFQUFFLE1BQU07QUFDZixJQUFJLE9BQU8sRUFBRSxNQUFNO0FBQ25CLElBQUksUUFBUSxFQUFFLE1BQU07QUFDcEIsSUFBSSxRQUFRLEVBQUUsTUFBTTtBQUNwQixJQUFJLElBQUksRUFBRSxLQUFLO0FBQ2YsSUFBSSxPQUFPLEVBQUUsS0FBSztBQUNsQixJQUFJLFFBQVEsRUFBRSxLQUFLO0FBQ25CLElBQUksUUFBUSxFQUFFLEtBQUs7QUFDbkIsSUFBSSxJQUFJLEVBQUUsTUFBTTtBQUNoQixJQUFJLFFBQVEsRUFBRSxNQUFNO0FBQ3BCLElBQUksU0FBUyxFQUFFLE1BQU07QUFDckIsSUFBSSxRQUFRLEVBQUUsTUFBTTtBQUNwQixJQUFJLElBQUksRUFBRSxPQUFPO0FBQ2pCLElBQUksVUFBVSxFQUFFLE9BQU87QUFDdkIsSUFBSSxXQUFXLEVBQUUsT0FBTztBQUN4QixJQUFJLFdBQVcsRUFBRSxPQUFPO0FBQ3hCLElBQUksT0FBTyxFQUFFLE1BQU07QUFDbkIsSUFBSSxRQUFRLEVBQUUsTUFBTTtBQUNwQixJQUFJLFFBQVEsRUFBRSxNQUFNO0FBQ3BCLENBQUMsQ0FBQztBQUNLLE1BQU0sNEJBQTRCLEdBQUc7QUFDNUMsSUFBSSxTQUFTLEVBQUUsUUFBUTtBQUN2QixJQUFJLFVBQVUsRUFBRSxRQUFRO0FBQ3hCLElBQUksVUFBVSxFQUFFLFFBQVE7QUFDeEIsSUFBSSxVQUFVLEVBQUUsUUFBUTtBQUN4QixJQUFJLFdBQVcsRUFBRSxRQUFRO0FBQ3pCLElBQUksVUFBVSxFQUFFLFFBQVE7QUFDeEIsSUFBSSxPQUFPLEVBQUUsTUFBTTtBQUNuQixJQUFJLFFBQVEsRUFBRSxNQUFNO0FBQ3BCLElBQUksUUFBUSxFQUFFLE1BQU07QUFDcEIsSUFBSSxPQUFPLEVBQUUsS0FBSztBQUNsQixJQUFJLFFBQVEsRUFBRSxLQUFLO0FBQ25CLElBQUksUUFBUSxFQUFFLEtBQUs7QUFDbkIsSUFBSSxRQUFRLEVBQUUsTUFBTTtBQUNwQixJQUFJLFNBQVMsRUFBRSxNQUFNO0FBQ3JCLElBQUksUUFBUSxFQUFFLE1BQU07QUFDcEIsSUFBSSxVQUFVLEVBQUUsT0FBTztBQUN2QixJQUFJLFdBQVcsRUFBRSxPQUFPO0FBQ3hCLElBQUksV0FBVyxFQUFFLE9BQU87QUFDeEIsSUFBSSxPQUFPLEVBQUUsTUFBTTtBQUNuQixJQUFJLFFBQVEsRUFBRSxNQUFNO0FBQ3BCLElBQUksUUFBUSxFQUFFLE1BQU07QUFDcEIsQ0FBQyxDQUFDO0FBQ0ssU0FBU1UsZUFBYSxDQUFDLFlBQVksRUFBRTtBQUM1QyxJQUFJLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUN6QixJQUFJLElBQUksYUFBYSxHQUFHLFlBQVksQ0FBQztBQUNyQyxJQUFJLElBQUksS0FBSyxHQUFHSix3QkFBc0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDM0QsSUFBSSxPQUFPLEtBQUssRUFBRTtBQUNsQixRQUFRLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRCxRQUFRLGFBQWEsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqRSxRQUFRLEtBQUssR0FBR0Esd0JBQXNCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzNELEtBQUs7QUFDTCxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFDRCxTQUFTLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUU7QUFDbkQsSUFBSSxNQUFNLEdBQUcsR0FBR0osb0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxNQUFNLElBQUksR0FBR0Ysc0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFCLENBQUM7QUFDTSxNQUFNQyxnQkFBYyxHQUFHLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQ0YseUJBQXVCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRCxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUNDLHNCQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ2hGLE1BQU1LLDBCQUF3QixHQUFHLENBQUMsQ0FBQyxFQUFFSixnQkFBYyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUNELHNCQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDakgsTUFBTU0sd0JBQXNCLEdBQUcsSUFBSSxNQUFNLENBQUNELDBCQUF3QixFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pFLE1BQU0sZ0NBQWdDLEdBQUcsQ0FBQyxDQUFDLEVBQUVKLGdCQUFjLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFILE1BQU1PLG9CQUFrQixHQUFHLHVCQUF1QixDQUFDLEVBQUUsRUFBRUgsMEJBQXdCLENBQUMsQ0FBQztBQUNqRixNQUFNLDBCQUEwQixHQUFHLHVCQUF1QixDQUFDLEVBQUUsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ2pHLFNBQVNILG9CQUFrQixDQUFDLEtBQUssRUFBRTtBQUMxQyxJQUFJLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNwQyxJQUFJLElBQUlILHlCQUF1QixDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwRCxRQUFRLE9BQU9BLHlCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLEtBQUs7QUFDTCxJQUFJLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFDTSxTQUFTSyxXQUFTLENBQUMsS0FBSyxFQUFFO0FBQ2pDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzNCLFFBQVEsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsSUFBSSxVQUFVLEdBQUcsR0FBRyxFQUFFO0FBQzlCLFlBQVksVUFBVSxHQUFHLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFELFNBQVM7QUFDVCxRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCLEtBQUs7QUFDTCxJQUFJLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNwQyxJQUFJLElBQUlMLHlCQUF1QixDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwRCxRQUFRLE9BQU9BLHlCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLEtBQUs7QUFDTCxJQUFJLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCOztBQ3pMQSxNQUFNZSxTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsMEJBQTBCO0FBQ3JELElBQUksMEVBQTBFO0FBQzlFLElBQUksQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDbEIsb0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsSUFBSSwwQkFBMEI7QUFDOUIsSUFBSSw0Q0FBNEM7QUFDaEQsSUFBSSxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU11RCxlQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUNSLE1BQU0sZUFBZSxTQUFTLHNDQUFzQyxDQUFDO0FBQ3BGLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBT3JDLFNBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQ3FDLGVBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzdELFFBQVEsTUFBTSxNQUFNLEdBQUd2RCxvQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNyRCxRQUFRLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMzQyxRQUFRLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM1QyxRQUFRLElBQUksWUFBWSxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQUM7QUFDN0MsUUFBUSxZQUFZLEdBQUcsWUFBWSxJQUFJLEVBQUUsQ0FBQztBQUMxQyxRQUFRLFlBQVksR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbEQsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDNUIsUUFBUSxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsRUFBRTtBQUM5RCxZQUFZLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDOUIsU0FBUztBQUNULGFBQWEsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLEVBQUU7QUFDakUsWUFBWSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQzlCLFNBQVM7QUFDVCxRQUFRLE9BQU8sZ0NBQWdDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDckYsS0FBSztBQUNMOztBQzdCQSxNQUFNa0IsU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsZ0JBQWdCLENBQUM7QUFDN0MsSUFBSSxDQUFDLGdEQUFnRCxDQUFDO0FBQ3RELElBQUksQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDaEIsa0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsSUFBSSxDQUFDLDBDQUEwQyxDQUFDO0FBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNaUIsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTUcsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNOLE1BQU0sNkJBQTZCLFNBQVMsc0NBQXNDLENBQUM7QUFDbEcsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPSixTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxRQUFRLE1BQU0sS0FBSyxHQUFHaEIsa0JBQWdCLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUM5RSxRQUFRLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUNpQixZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ2hELFFBQVEsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFO0FBQ3RCLFlBQVksS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQ0EsWUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2pFLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxLQUFLLENBQUNHLFlBQVUsQ0FBQyxFQUFFO0FBQy9CLFlBQVksTUFBTSxVQUFVLEdBQUdkLFdBQVMsQ0FBQyxLQUFLLENBQUNjLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDcEQsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNFLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLFNBQVM7QUFDVCxRQUFRLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFO0FBQ2xDLFlBQVksTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzlDLFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzlDLFNBQVM7QUFDVCxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDs7QUN2Q0EsTUFBTUosU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsa0hBQWtILEVBQUVOLG9CQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3JMLE1BQU0sZUFBZSxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsa0hBQWtILEVBQUUsMEJBQTBCLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEwsTUFBTSxvQ0FBb0MsU0FBUyxzQ0FBc0MsQ0FBQztBQUN6RyxJQUFJLGtCQUFrQixDQUFDO0FBQ3ZCLElBQUksV0FBVyxDQUFDLGtCQUFrQixHQUFHLElBQUksRUFBRTtBQUMzQyxRQUFRLEtBQUssRUFBRSxDQUFDO0FBQ2hCLFFBQVEsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQ3JELEtBQUs7QUFDTCxJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixHQUFHTSxTQUFPLEdBQUcsZUFBZSxDQUFDO0FBQ25FLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzlDLFFBQVEsSUFBSSxRQUFRLEdBQUdKLGVBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDdkIsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxRQUFRLE1BQU07QUFDdEIsWUFBWSxLQUFLLFdBQVcsQ0FBQztBQUM3QixZQUFZLEtBQUssV0FBVyxDQUFDO0FBQzdCLFlBQVksS0FBSyxZQUFZLENBQUM7QUFDOUIsWUFBWSxLQUFLLFdBQVcsQ0FBQztBQUM3QixZQUFZLEtBQUssWUFBWSxDQUFDO0FBQzlCLFlBQVksS0FBSyxVQUFVLENBQUM7QUFDNUIsWUFBWSxLQUFLLFlBQVksQ0FBQztBQUM5QixZQUFZLEtBQUssR0FBRztBQUNwQixnQkFBZ0IsUUFBUSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNyRCxnQkFBZ0IsTUFBTTtBQUN0QixTQUFTO0FBQ1QsUUFBUSxPQUFPLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDMUYsS0FBSztBQUNMOztBQy9CZSxNQUFNLHlCQUF5QixTQUFTLHNDQUFzQyxDQUFDO0FBQzlGLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRUYsb0JBQWtCLENBQUMsb0JBQW9CLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3RSxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sU0FBUyxHQUFHRSxlQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsUUFBUSxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0QsUUFBUSxPQUFPLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDakcsS0FBSztBQUNMOztBQ1ZlLE1BQU0sNEJBQTRCLFNBQVMsc0NBQXNDLENBQUM7QUFDakcsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFRixvQkFBa0IsQ0FBQyx5Q0FBeUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xHLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxTQUFTLEdBQUdFLGVBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxRQUFRLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzRixLQUFLO0FBQ0w7O0FDUmUsTUFBTSxrQkFBa0IsU0FBUyxzQ0FBc0MsQ0FBQztBQUN2RixJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDMUIsUUFBUSxPQUFPLGlHQUFpRyxDQUFDO0FBQ2pILEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUMzQyxRQUFRLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzFELFFBQVEsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDNUQsUUFBUSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDaEQsUUFBUSxPQUFPLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3ZGLEtBQUs7QUFDTCxJQUFJLE9BQU8scUJBQXFCLENBQUMsU0FBUyxFQUFFLGtCQUFrQixFQUFFO0FBQ2hFLFFBQVEsUUFBUSxrQkFBa0I7QUFDbEMsWUFBWSxLQUFLLFNBQVMsQ0FBQztBQUMzQixZQUFZLEtBQUssUUFBUTtBQUN6QixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxjQUFjO0FBQy9CLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLFVBQVU7QUFDM0IsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssY0FBYztBQUMvQixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxTQUFTO0FBQzFCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLE9BQU87QUFDeEIsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssWUFBWTtBQUM3QixnQkFBZ0IsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMvQyxvQkFBb0IsU0FBUyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakUsaUJBQWlCO0FBQ2pCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsU0FBUztBQUNULFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsS0FBSztBQUNMOztBQzVEQSxNQUFNSSxTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxtRUFBbUUsQ0FBQztBQUNoRyxJQUFJLENBQUMscUZBQXFGLENBQUM7QUFDM0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDTixNQUFNLGtCQUFrQixTQUFTLHNDQUFzQyxDQUFDO0FBQ3ZGLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUMxQixRQUFRLE9BQU9BLFNBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztBQUN6RSxRQUFRLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUNwRSxRQUFRLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUNwRSxRQUFRLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0FBQzFELFFBQVEsUUFBUSxXQUFXO0FBQzNCLFlBQVksS0FBSyxLQUFLO0FBQ3RCLGdCQUFnQixTQUFTLEdBQUcwQixHQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzlELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxRQUFRO0FBQ3pCLGdCQUFnQixTQUFTLEdBQUdDLEtBQWdCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2hFLGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxVQUFVO0FBQzNCLGdCQUFnQixVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLGdCQUFnQixpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN4RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssYUFBYTtBQUM5QixnQkFBZ0IsVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqRSxnQkFBZ0IsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDeEQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLE9BQU87QUFDeEIsZ0JBQWdCLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRSxnQkFBZ0IsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDeEQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLGVBQWU7QUFDaEMsZ0JBQWdCLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRSxnQkFBZ0IsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDeEQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWTtBQUNaLGdCQUFnQixJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUU7QUFDdkQsb0JBQW9CLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTtBQUNuRCx3QkFBd0IsVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFFLHFCQUFxQjtBQUNyQixvQkFBb0IsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzdELG9CQUFvQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxpQkFBaUI7QUFDakIsZ0JBQWdCLE1BQU07QUFDdEIsU0FBUztBQUNULFFBQVEsSUFBSSxXQUFXLEVBQUU7QUFDekIsWUFBWSxTQUFTLEdBQUcsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3pGLFNBQVM7QUFDVCxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDs7QUM1RGUsTUFBTSx1QkFBdUIsU0FBUyw2QkFBNkIsQ0FBQztBQUNuRixJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8sZ0JBQWdCLENBQUM7QUFDaEMsS0FBSztBQUNMOztBQ0plLE1BQU0sc0JBQXNCLFNBQVMsNEJBQTRCLENBQUM7QUFDakYsSUFBSSxjQUFjLEdBQUc7QUFDckIsUUFBUSxPQUFPLElBQUksTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFDMUQsS0FBSztBQUNMOztBQ2FPLE1BQU1rQixRQUFNLEdBQUcsSUFBSSxNQUFNLENBQUNTLDJCQUF5QixFQUFFLENBQUMsQ0FBQztBQUN2RCxNQUFNUixRQUFNLEdBQUcsSUFBSSxNQUFNLENBQUNTLHFCQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckQsU0FBU1AsT0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQ3pDLElBQUksT0FBT0gsUUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFDTSxTQUFTSSxXQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDN0MsSUFBSSxPQUFPSixRQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUNNLFNBQVNTLDJCQUF5QixDQUFDLFlBQVksR0FBRyxJQUFJLEVBQUU7QUFDL0QsSUFBSSxNQUFNLE1BQU0sR0FBR0MscUJBQW1CLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzVELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDckQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGtCQUFrQixFQUFFLENBQUMsQ0FBQztBQUNyRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksb0NBQW9DLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZFLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUNNLFNBQVNBLHFCQUFtQixDQUFDLFVBQVUsR0FBRyxJQUFJLEVBQUUsWUFBWSxHQUFHLElBQUksRUFBRTtBQUM1RSxJQUFJLE9BQU8sMEJBQTBCLENBQUM7QUFDdEMsUUFBUSxPQUFPLEVBQUU7QUFDakIsWUFBWSxJQUFJLGVBQWUsRUFBRTtBQUNqQyxZQUFZLElBQUkscUJBQXFCLENBQUMsWUFBWSxDQUFDO0FBQ25ELFlBQVksSUFBSSxzQkFBc0IsRUFBRTtBQUN4QyxZQUFZLElBQUksNkJBQTZCLEVBQUU7QUFDL0MsWUFBWSxJQUFJLGVBQWUsRUFBRTtBQUNqQyxZQUFZLElBQUksNEJBQTRCLEVBQUU7QUFDOUMsWUFBWSxJQUFJLHlCQUF5QixFQUFFO0FBQzNDLFNBQVM7QUFDVCxRQUFRLFFBQVEsRUFBRSxDQUFDLElBQUksdUJBQXVCLEVBQUUsRUFBRSxJQUFJLHNCQUFzQixFQUFFLENBQUM7QUFDL0UsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ25COzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1Q08sTUFBTSxrQkFBa0IsR0FBRztBQUNsQyxJQUFJLG9CQUFvQixFQUFFLENBQUM7QUFDM0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksY0FBYyxFQUFFLENBQUM7QUFDckIsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksYUFBYSxFQUFFLENBQUM7QUFDcEIsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksa0JBQWtCLEVBQUUsQ0FBQztBQUN6QixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO0FBQzFCLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLG1CQUFtQixFQUFFLENBQUM7QUFDMUIsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksbUJBQW1CLEVBQUUsQ0FBQztBQUMxQixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsQ0FBQyxDQUFDO0FBQ0ssTUFBTSxnQkFBZ0IsR0FBRztBQUNoQyxJQUFJLGNBQWMsRUFBRSxDQUFDO0FBQ3JCLElBQUkscUJBQXFCLEVBQUUsQ0FBQztBQUM1QixJQUFJLHVCQUF1QixFQUFFLENBQUM7QUFDOUIsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUNyQixJQUFJLGdCQUFnQixFQUFFLENBQUM7QUFDdkIsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUNyQixJQUFJLGVBQWUsRUFBRSxDQUFDO0FBQ3RCLElBQUksY0FBYyxFQUFFLENBQUM7QUFDckIsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO0FBQzNCLElBQUksY0FBYyxFQUFFLENBQUM7QUFDckIsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0FBQzVCLElBQUksY0FBYyxFQUFFLENBQUM7QUFDckIsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0FBQzVCLElBQUksY0FBYyxFQUFFLENBQUM7QUFDckIsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0FBQzVCLElBQUksY0FBYyxFQUFFLENBQUM7QUFDckIsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0FBQzVCLElBQUksY0FBYyxFQUFFLENBQUM7QUFDckIsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0FBQzdCLElBQUksZUFBZSxFQUFFLEVBQUU7QUFDdkIsSUFBSSwyQkFBMkIsRUFBRSxFQUFFO0FBQ25DLElBQUksZUFBZSxFQUFFLEVBQUU7QUFDdkIsSUFBSSxvQ0FBb0MsRUFBRSxFQUFFO0FBQzVDLElBQUksZUFBZSxFQUFFLEVBQUU7QUFDdkIsSUFBSSwrQkFBK0IsRUFBRSxFQUFFO0FBQ3ZDLElBQUksc0JBQXNCLEVBQUUsRUFBRTtBQUM5QixDQUFDLENBQUM7QUFDSyxNQUFNLHVCQUF1QixHQUFHO0FBQ3ZDLElBQUksVUFBVSxFQUFFLENBQUM7QUFDakIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pCLElBQUksVUFBVSxFQUFFLENBQUM7QUFDakIsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUNqQixJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pCLElBQUksVUFBVSxFQUFFLENBQUM7QUFDakIsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNsQixJQUFJLGdCQUFnQixFQUFFLEVBQUU7QUFDeEIsSUFBSSx5QkFBeUIsRUFBRSxFQUFFO0FBQ2pDLElBQUksb0JBQW9CLEVBQUUsRUFBRTtBQUM1QixDQUFDLENBQUM7QUFDSyxNQUFNLG9CQUFvQixHQUFHO0FBQ3BDLElBQUksV0FBVyxFQUFFLFFBQVE7QUFDekIsSUFBSSxXQUFXLEVBQUUsUUFBUTtBQUN6QixJQUFJLFVBQVUsRUFBRSxNQUFNO0FBQ3RCLElBQUksV0FBVyxFQUFFLEtBQUs7QUFDdEIsSUFBSSxXQUFXLEVBQUUsTUFBTTtBQUN2QixJQUFJLFlBQVksRUFBRSxPQUFPO0FBQ3pCLElBQUksVUFBVSxFQUFFLE1BQU07QUFDdEIsQ0FBQyxDQUFDO0FBQ0ssTUFBTSxjQUFjLEdBQUcsS0FBSyxHQUFHLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQ3JHLFNBQVMsa0JBQWtCLENBQUMsS0FBSyxFQUFFO0FBQzFDLElBQUksTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3BDLElBQUksSUFBSSx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTO0FBQ2xELFFBQVEsT0FBTyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QyxJQUFJLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFDTSxNQUFNLFlBQVksR0FBRyw0QkFBNEIsQ0FBQztBQUNsRCxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUU7QUFDakMsSUFBSSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDdEMsSUFBSSxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekIsUUFBUSxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ3BCLElBQUksT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBQ0QsTUFBTSx3QkFBd0IsR0FBRyxHQUFHLEdBQUcsY0FBYyxHQUFHLFlBQVksR0FBRyxlQUFlLENBQUMsb0JBQW9CLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDM0gsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRSxNQUFNLGtCQUFrQixHQUFHLHVCQUF1QixDQUFDLEVBQUUsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0FBQ2pGLFNBQVMsYUFBYSxDQUFDLFlBQVksRUFBRTtBQUM1QyxJQUFJLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUN6QixJQUFJLElBQUksYUFBYSxHQUFHLFlBQVksQ0FBQztBQUNyQyxJQUFJLElBQUksS0FBSyxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzRCxJQUFJLE9BQU8sS0FBSyxFQUFFO0FBQ2xCLFFBQVEsTUFBTSxHQUFHLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsUUFBUSxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUNsRSxRQUFRLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUIsUUFBUSxhQUFhLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakUsUUFBUSxLQUFLLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzNELEtBQUs7QUFDTCxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCOztBQ2hHQSxNQUFNdkQsU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLG9CQUFvQjtBQUMvQyxJQUFJLGNBQWM7QUFDbEIsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSxjQUFjO0FBQ2xCLElBQUksc0JBQXNCO0FBQzFCLElBQUksWUFBWTtBQUNoQixJQUFJLEtBQUs7QUFDVCxJQUFJLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDcEIsTUFBTVksYUFBVyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNUixZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ04sTUFBTSxnQkFBZ0IsU0FBUyxzQ0FBc0MsQ0FBQztBQUNyRixJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU9KLFNBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMvQyxRQUFRLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUNZLGFBQVcsQ0FBQyxDQUFDLENBQUM7QUFDbkQsUUFBUSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUU7QUFDbEMsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixRQUFRLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLFFBQVEsSUFBSSxLQUFLLENBQUNSLFlBQVUsQ0FBQyxFQUFFO0FBQy9CLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUNBLFlBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDMUYsU0FBUztBQUNULFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEIsS0FBSztBQUNMOztBQy9CQSxNQUFNSixTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsR0FBRyx1QkFBdUIsR0FBRyxZQUFZLEdBQUcsS0FBSyxHQUFHLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5SSxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ04sTUFBTSxpQkFBaUIsU0FBUyxzQ0FBc0MsQ0FBQztBQUN0RixJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU9BLFNBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLFFBQVEsSUFBSSxDQUFDLEtBQUs7QUFDbEIsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixRQUFRLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFFBQVEsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDL0IsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLDJCQUEyQixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN0RyxTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLO0FBQ0w7O0FDdkJBLE1BQU1BLFNBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZLEdBQUcsc0NBQXNDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUcsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDOUIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFDN0IsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFDaEIsTUFBTSxZQUFZLFNBQVMsc0NBQXNDLENBQUM7QUFDakYsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPQSxTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxJQUFJLFFBQVEsQ0FBQztBQUNyQixRQUFRLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLEVBQUU7QUFDeEMsWUFBWSxRQUFRLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDbEQsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLFFBQVEsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDckYsU0FBUztBQUNULFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDekQsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckMsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLO0FBQ0w7O0FDdEJBLE1BQU1BLFNBQU8sR0FBRyx3RUFBd0UsQ0FBQztBQUMxRSxNQUFNLGtCQUFrQixTQUFTLHNDQUFzQyxDQUFDO0FBQ3ZGLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBT0EsU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO0FBQ3RDLFlBQVksS0FBSyxTQUFTLENBQUM7QUFDM0IsWUFBWSxLQUFLLFNBQVM7QUFDMUIsZ0JBQWdCLE9BQU8wQixHQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pELFlBQVksS0FBSyxTQUFTO0FBQzFCLGdCQUFnQixPQUFPQyxLQUFnQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzRCxZQUFZLEtBQUssU0FBUztBQUMxQixnQkFBZ0IsT0FBT0MsU0FBb0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0QsWUFBWSxLQUFLLFNBQVM7QUFDMUIsZ0JBQWdCLE9BQU9tRCxZQUF1QixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckUsWUFBWSxLQUFLLFVBQVU7QUFDM0IsZ0JBQWdCLE9BQU9sRCxRQUFtQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5RCxZQUFZLEtBQUssVUFBVTtBQUMzQixnQkFBZ0IsT0FBT0UsV0FBc0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLFNBQVM7QUFDVCxRQUFRLE9BQU8sT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDakQsS0FBSztBQUNMOztBQ3RCQSxNQUFNL0IsU0FBTyxHQUFHLHlFQUF5RSxDQUFDO0FBQzNFLE1BQU0sa0JBQWtCLFNBQVMsc0NBQXNDLENBQUM7QUFDdkYsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPQSxTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztBQUM1RCxRQUFRLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckQsUUFBUSxPQUFPLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUMzRixLQUFLO0FBQ0wsSUFBSSxPQUFPLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUU7QUFDckQsUUFBUSxRQUFRLE9BQU87QUFDdkIsWUFBWSxLQUFLLGdCQUFnQixDQUFDO0FBQ2xDLFlBQVksS0FBSyxvQkFBb0I7QUFDckMsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxXQUFXO0FBQzVCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssV0FBVztBQUM1QixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLFlBQVk7QUFDN0IsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxVQUFVO0FBQzNCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssZUFBZTtBQUNoQyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLHdCQUF3QjtBQUN6QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsU0FBUztBQUNULFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsS0FBSztBQUNMOztBQ2xEQSxNQUFNQSxTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRztBQUM5QixJQUFJLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQztBQUN2QyxJQUFJLEdBQUc7QUFDUCxJQUFJLHVDQUF1QztBQUMzQyxJQUFJLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQ1YsTUFBTSxlQUFlLFNBQVMsc0NBQXNDLENBQUM7QUFDcEYsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPQSxTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDM0QsUUFBUSxNQUFNLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoRCxRQUFRLElBQUksR0FBRyxLQUFLLFNBQVM7QUFDN0IsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixRQUFRLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMvQyxRQUFRLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQztBQUNoQyxRQUFRLElBQUksUUFBUSxFQUFFO0FBQ3RCLFlBQVksTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzdDLFlBQVksSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ3RELGdCQUFnQixZQUFZLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ3RDLGdCQUFnQixZQUFZLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLFNBQVM7QUFDVCxRQUFRLE9BQU8sZ0NBQWdDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDdEYsS0FBSztBQUNMOztBQzdCQSxNQUFNQSxTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsZ0NBQWdDO0FBQzNELElBQUksY0FBYztBQUNsQixJQUFJLHdEQUF3RDtBQUM1RCxJQUFJLDBEQUEwRDtBQUM5RCxJQUFJLGVBQWU7QUFDbkIsSUFBSSxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN6QixNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUNkLE1BQU0sc0JBQXNCLFNBQVMsc0NBQXNDLENBQUM7QUFDM0YsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPQSxTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDakQsUUFBUSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ3JCLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxRQUFRLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztBQUNoRCxjQUFjLFFBQVEsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUNqRCxjQUFjLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztBQUNyQyxrQkFBa0IsUUFBUSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ25ELGtCQUFrQixDQUFDLENBQUM7QUFDcEIsUUFBUSxJQUFJLE1BQU0sSUFBSSxFQUFFO0FBQ3hCLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDOUMsUUFBUSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFDOUQsUUFBUSxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUU7QUFDakMsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELFlBQVksSUFBSSxJQUFJLEtBQUssRUFBRTtBQUMzQixnQkFBZ0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFNBQVM7QUFDVCxhQUFhLElBQUksUUFBUSxLQUFLLE1BQU0sRUFBRTtBQUN0QyxZQUFZLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUMzQixnQkFBZ0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3RCxnQkFBZ0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN2RCxhQUFhO0FBQ2IsaUJBQWlCO0FBQ2pCLGdCQUFnQixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4RixhQUFhO0FBQ2IsU0FBUztBQUNULGFBQWEsSUFBSSxRQUFRLEtBQUssT0FBTyxJQUFJLFFBQVEsS0FBSyxLQUFLLElBQUksUUFBUSxLQUFLLEtBQUssRUFBRTtBQUNuRixZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsWUFBWSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ3pCLGdCQUFnQixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELFNBQVM7QUFDVCxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4QyxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDs7QUNsREEsTUFBTUEsU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxrQkFBa0IsR0FBRyxHQUFHLEdBQUcsMENBQTBDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUYsTUFBTSx5QkFBeUIsU0FBUyxzQ0FBc0MsQ0FBQztBQUM5RixJQUFJLFVBQVUsQ0FBQztBQUNmLElBQUksV0FBVyxDQUFDLFVBQVUsR0FBRyxLQUFLLEVBQUU7QUFDcEMsUUFBUSxLQUFLLEVBQUUsQ0FBQztBQUNoQixRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ3JDLEtBQUs7QUFDTCxJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU9BLFNBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxRQUFRLElBQUksQ0FBQyxRQUFRO0FBQ3JCLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsUUFBUSxPQUFPLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDM0csS0FBSztBQUNMOztBQ2pCQSxNQUFNQSxTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLGtCQUFrQixHQUFHLEdBQUcsR0FBRyxzREFBc0QsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxRyxNQUFNLDJCQUEyQixTQUFTLHNDQUFzQyxDQUFDO0FBQ2hHLElBQUksVUFBVSxDQUFDO0FBQ2YsSUFBSSxXQUFXLENBQUMsVUFBVSxHQUFHLEtBQUssRUFBRTtBQUNwQyxRQUFRLEtBQUssRUFBRSxDQUFDO0FBQ2hCLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDckMsS0FBSztBQUNMLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBT0EsU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLFFBQVE7QUFDckIsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixRQUFRLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMxRixLQUFLO0FBQ0w7O0FDaEJBLE1BQU1BLFNBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxpQ0FBaUMsR0FBRyxHQUFHLEdBQUcsa0JBQWtCLEdBQUcsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlGLE1BQU0sNEJBQTRCLFNBQVMsc0NBQXNDLENBQUM7QUFDakcsSUFBSSxVQUFVLENBQUM7QUFDZixJQUFJLFdBQVcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxFQUFFO0FBQ3BDLFFBQVEsS0FBSyxFQUFFLENBQUM7QUFDaEIsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUNyQyxLQUFLO0FBQ0wsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPQSxTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsUUFBUSxJQUFJLENBQUMsU0FBUztBQUN0QixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFFBQVEsT0FBTyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzNGLEtBQUs7QUFDTDs7QUNkQSxNQUFNLG1CQUFtQixHQUFHLEtBQUssR0FBRyxjQUFjLEdBQUcsZUFBZSxHQUFHLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNuSCxNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxtQ0FBbUM7QUFDOUQsSUFBSSxtQkFBbUI7QUFDdkIsSUFBSSxHQUFHO0FBQ1AsSUFBSSxJQUFJO0FBQ1IsSUFBSSxtQkFBbUI7QUFDdkIsSUFBSSxtQ0FBbUM7QUFDdkMsSUFBSSxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDUCxNQUFNLG9DQUFvQyxTQUFTLHNDQUFzQyxDQUFDO0FBQ3pHLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBTyxPQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDO0FBQ3BFLFFBQVEsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUNwRSxRQUFRLElBQUksUUFBUSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ2hELFlBQVksTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEQsWUFBWSxJQUFJLENBQUMsSUFBSTtBQUNyQixnQkFBZ0IsT0FBTyxJQUFJLENBQUM7QUFDNUIsWUFBWSxRQUFRLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNyQyxTQUFTO0FBQ1QsUUFBUSxJQUFJLFFBQVEsS0FBSyxPQUFPLElBQUksUUFBUSxLQUFLLEtBQUssRUFBRTtBQUN4RCxZQUFZLFFBQVEsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakQsU0FBUztBQUNULFFBQVEsT0FBTyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzFGLEtBQUs7QUFDTDs7QUMvQmUsTUFBTSx1QkFBdUIsU0FBUyw2QkFBNkIsQ0FBQztBQUNuRixJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8sNEJBQTRCLENBQUM7QUFDNUMsS0FBSztBQUNMOztBQ0plLE1BQU0sc0JBQXNCLFNBQVMsNEJBQTRCLENBQUM7QUFDakYsSUFBSSxjQUFjLEdBQUc7QUFDckIsUUFBUSxPQUFPLDRCQUE0QixDQUFDO0FBQzVDLEtBQUs7QUFDTDs7QUNKZSxNQUFNLDhCQUE4QixTQUFTLDRCQUE0QixDQUFDO0FBQ3pGOztBQ29CTyxNQUFNNkMsUUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQztBQUN2RCxNQUFNQyxRQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNyRCxTQUFTRSxPQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDekMsSUFBSSxPQUFPSCxRQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUNNLFNBQVNJLFdBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUM3QyxJQUFJLE9BQU9KLFFBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBQ00sU0FBUyx5QkFBeUIsQ0FBQyxZQUFZLEdBQUcsSUFBSSxFQUFFO0FBQy9ELElBQUksTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzVELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDckQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGtCQUFrQixFQUFFLENBQUMsQ0FBQztBQUNyRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksb0NBQW9DLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZFLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUNNLFNBQVMsbUJBQW1CLENBQUMsVUFBVSxHQUFHLElBQUksRUFBRSxZQUFZLEdBQUcsSUFBSSxFQUFFO0FBQzVFLElBQUksT0FBTywwQkFBMEIsQ0FBQztBQUN0QyxRQUFRLE9BQU8sRUFBRTtBQUNqQixZQUFZLElBQUksZUFBZSxFQUFFO0FBQ2pDLFlBQVksSUFBSSxxQkFBcUIsQ0FBQyxZQUFZLENBQUM7QUFDbkQsWUFBWSxJQUFJLGdCQUFnQixFQUFFO0FBQ2xDLFlBQVksSUFBSSxpQkFBaUIsRUFBRTtBQUNuQyxZQUFZLElBQUksWUFBWSxFQUFFO0FBQzlCLFlBQVksSUFBSSxlQUFlLEVBQUU7QUFDakMsWUFBWSxJQUFJLHNCQUFzQixFQUFFO0FBQ3hDLFlBQVksSUFBSSx5QkFBeUIsQ0FBQyxVQUFVLENBQUM7QUFDckQsWUFBWSxJQUFJLDJCQUEyQixDQUFDLFVBQVUsQ0FBQztBQUN2RCxZQUFZLElBQUksNEJBQTRCLENBQUMsVUFBVSxDQUFDO0FBQ3hELFNBQVM7QUFDVCxRQUFRLFFBQVEsRUFBRTtBQUNsQixZQUFZLElBQUksOEJBQThCLEVBQUU7QUFDaEQsWUFBWSxJQUFJLHVCQUF1QixFQUFFO0FBQ3pDLFlBQVksSUFBSSxzQkFBc0IsRUFBRTtBQUN4QyxTQUFTO0FBQ1QsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ25COzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyQ08sTUFBTSxNQUFNLEdBQUc2QyxRQUFTLENBQUM7QUFDekIsTUFBTSxNQUFNLEdBQUdDLFFBQVMsQ0FBQztBQUN6QixTQUFTLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUN6QyxJQUFJLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFDTSxTQUFTLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUM3QyxJQUFJLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM0JBOztBQUVHO0FBSUg7O0FBRUc7QUFDSCxTQUFTLGNBQWMsQ0FBQyxLQUFlLEVBQUUsT0FBZSxFQUFFLE9BQWlCLEVBQUE7SUFDekUsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUUzQyxJQUFBLElBQUksT0FBTyxFQUFFO0FBQ1gsUUFBQSxPQUFPLElBQUksU0FBUyxDQUFBLEdBQUEsRUFBTSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUEsRUFBQSxFQUFLLE9BQU8sQ0FBQSxZQUFBLEVBQWUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBQ25HLEtBQUE7SUFDRCxPQUFPLENBQUEsQ0FBQSxFQUFJLFNBQVMsQ0FBQSxHQUFBLEVBQU0sS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFBLEVBQUEsRUFBSyxPQUFPLENBQUEsQ0FBRSxDQUFDO0FBQzlELENBQUM7QUFFRDs7QUFFRztBQUNJLE1BQU0sTUFBTSxHQUFHO0FBQ3BCOztBQUVHO0lBQ0gsS0FBSyxDQUFDLE9BQWUsRUFBRSxPQUFpQixFQUFBO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzVELFFBQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUMxQjtBQUVEOztBQUVHO0lBQ0gsSUFBSSxDQUFDLE9BQWUsRUFBRSxPQUFpQixFQUFBO1FBQ3JDLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzNELFFBQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUMxQjtBQUVEOztBQUVHO0lBQ0gsSUFBSSxDQUFDLE9BQWUsRUFBRSxPQUFpQixFQUFBO1FBQ3JDLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzNELFFBQUEsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUN6QjtBQUVEOztBQUVHO0lBQ0gsS0FBSyxDQUFDLE9BQWUsRUFBRSxPQUFpQixFQUFBO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzVELFFBQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUMxQjtDQUNGOztBQ3JERDtBQWNBLFNBQVMsb0JBQW9CLEdBQUE7SUFDM0IsT0FBUTtRQUNOLE9BQU8sRUFBRSxNQUFNLElBQUksTUFBTSxDQUFDbkgsd0JBQXNCLENBQUM7QUFDakQsUUFBQSxPQUFPLEVBQUUsQ0FBQyxPQUF1QixFQUFFLEtBQXVCLEtBQUk7WUFDNUQsT0FBTztBQUNMLGdCQUFBLEdBQUcsRUFBRUMsMkJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7O2dCQVV4QyxLQUFLLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO2FBQzNDLENBQUM7U0FDSDtLQUNTLENBQUM7QUFDZixDQUFDO0FBRXVCLFNBQUEsVUFBVSxDQUFDLFNBQW1CLEVBQUE7QUFDcEQsSUFBQSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDL0IsSUFBQSxNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssT0FBTyxDQUFDO0lBRWhDLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztBQUM3QixJQUFBLE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQzs7Ozs7Ozs7OztBQVVqRCxJQUFBLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxVQUlqQixLQUFtQjtBQUM5QixRQUFBLElBQUksQ0FBQyxVQUFVO0FBQUUsWUFBQSxPQUFPLElBQUksQ0FBQztRQUM3QixJQUFJLFVBQVUsQ0FBQyx5QkFBeUIsRUFBRTtZQUN4QyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRTFELFlBQUEsT0FBTyxJQUFJLE1BQU0sQ0FBQyxNQUE2QixDQUFDLENBQUM7QUFDbEQsU0FBQTtRQUNELElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTs7OztZQUlyQixNQUFNLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztBQUN6RSxZQUFBLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2QsS0FBQyxDQUFDO0FBRUYsSUFBQSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBRztRQUNwQixJQUFJOztBQUVGLFlBQUEsTUFBTSxVQUFVLEdBQUksTUFBa0MsQ0FBQyxDQUFDLENBSTNDLENBQUM7QUFDZCxZQUFBLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUEwQyx3Q0FBQSxDQUFBLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDekUsT0FBTztBQUNSLGFBQUE7QUFDRCxZQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDbEMsWUFBQSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRSxTQUFBO0FBQUMsUUFBQSxPQUFPLEtBQUssRUFBRTtBQUNkLFlBQUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBLHdDQUFBLENBQTBDLEVBQUU7QUFDdkQsZ0JBQUEsUUFBUSxFQUFFLENBQUM7QUFDWCxnQkFBQSxLQUFLLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQztBQUM1QixhQUFBLENBQUMsQ0FBQztBQUNKLFNBQUE7QUFDSCxLQUFDLENBQUMsQ0FBQzs7QUFHSCxJQUFBLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDeEIsUUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLGdFQUFnRSxDQUFDLENBQUM7UUFDOUUsSUFBSTtBQUNGLFlBQUEsTUFBTSxRQUFRLEdBQUltSCxPQUlMLENBQUM7QUFDZCxZQUFBLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pDLFlBQUEsSUFBSSxDQUFDLEVBQUU7QUFDTCxnQkFBQSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2xDLGdCQUFBLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsZ0JBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO0FBQ2hFLGFBQUE7QUFBTSxpQkFBQTtBQUNMLGdCQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztBQUNyRCxhQUFBO0FBQ0YsU0FBQTtBQUFDLFFBQUEsT0FBTyxLQUFLLEVBQUU7QUFDZCxZQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLEVBQUU7QUFDMUQsZ0JBQUEsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUM7QUFDNUIsYUFBQSxDQUFDLENBQUM7QUFDSixTQUFBO0FBQ0YsS0FBQTtBQUVELElBQUEsT0FBTyxPQUFPLENBQUM7QUFDakI7O0FDekdBOztBQUVHO01BQ1UsWUFBWSxDQUFBO0FBUXZCLElBQUEsV0FBQSxDQUFZLFlBQXNDLEVBQUE7QUFDaEQsUUFBQSxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7QUFDeEMsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7QUFDcEMsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUM7QUFDaEQsUUFBQSxJQUFJLENBQUMscUJBQXFCLEdBQUcsWUFBWSxDQUFDLHFCQUFxQixDQUFDO0FBQ2hFLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDO0FBQzlDLFFBQUEsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQztLQUMvRDtBQUVEOztBQUVHO0FBQ0gsSUFBQSxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUE7Ozs7Ozs7O1FBUTNCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksSUFDMUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUMxRSxDQUFDOzs7O0FBSUYsUUFBQSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUU7QUFDaEQsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNiLFNBQUE7O1FBR0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ2hFLFFBQUEsSUFBSSxnQkFBZ0IsRUFBRTtZQUNsQixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuRCxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7QUFFbkQsWUFBQSxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztBQUMxRSxnQkFBQSxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsS0FBSyxHQUFHLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUM1RSxnQkFBQSxPQUFPLElBQUksQ0FBQztBQUNmLGFBQUE7O0FBRUQsWUFBQSxPQUFPLEtBQUssQ0FBQztBQUNoQixTQUFBOztRQUdELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2hELFFBQUEsSUFBSSxRQUFRLEVBQUU7WUFDVixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7O0FBRTFDLFlBQUEsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sS0FBSyxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN6RSxnQkFBQSxPQUFPLElBQUksQ0FBQztBQUNmLGFBQUE7O0FBRUQsWUFBQSxPQUFPLEtBQUssQ0FBQztBQUNoQixTQUFBOztBQUdELFFBQUEsSUFBSSxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNyRSxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2IsU0FBQTs7O1FBSUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNoQyxZQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2QsU0FBQTs7UUFHRCxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDeEQsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO0FBQy9CLFFBQUEsS0FBSyxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUU7QUFDOUIsWUFBQSxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Ozs7O2dCQUtqQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFCLGdCQUFBLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxVQUFVLEVBQUU7b0JBQy9CLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDcEMsaUJBQUE7QUFDRixhQUFBO0FBQ0YsU0FBQTtBQUNELFFBQUEsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFBLENBQUEsRUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFBLENBQUEsQ0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQ3BHLFlBQUEsT0FBTyxLQUFLLENBQUM7QUFDZCxTQUFBOztBQUdELFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBQSxPQUFPLEtBQUssQ0FBQztBQUNkLFNBQUE7QUFDRCxRQUFBLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUM1QixJQUFJO2dCQUNGLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsZ0JBQUEsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQzNDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDcEMsb0JBQUEsSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDbkUsd0JBQUEsT0FBTyxJQUFJLENBQUM7QUFDYixxQkFBQTtBQUNGLGlCQUFBO0FBQ0YsYUFBQTtZQUFDLE1BQU07O0FBRVAsYUFBQTtBQUNGLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7QUFDRjs7QUNuSUQ7OztBQUdHO01BQ1UsUUFBUSxDQUFBO0FBSW5COzs7O0FBSUc7SUFDSCxXQUFZLENBQUEsT0FBTyxHQUFHLEdBQUcsRUFBQTtRQUN2QixJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUU7QUFDaEIsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7QUFDN0QsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFRLENBQUM7S0FDOUI7QUFFRDs7Ozs7O0FBTUc7QUFDSCxJQUFBLEdBQUcsQ0FBQyxHQUFNLEVBQUE7UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzVCO0FBRUQ7Ozs7Ozs7QUFPRztBQUNILElBQUEsR0FBRyxDQUFDLEdBQU0sRUFBQTtRQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTs7QUFFdkIsWUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUIsU0FBQTtBQUNELFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDZDtBQUVEOzs7Ozs7OztBQVFHO0lBQ0gsR0FBRyxDQUFDLEdBQU0sRUFBRSxLQUFRLEVBQUE7O1FBRWxCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsWUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixTQUFBO2FBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFOzs7OztBQUsxQyxZQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBc0IsQ0FBQztZQUNqRSxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7QUFDMUIsZ0JBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0IsYUFBQTtBQUNGLFNBQUE7O1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzVCO0FBRUQ7Ozs7OztBQU1HO0FBQ0gsSUFBQSxNQUFNLENBQUMsR0FBTSxFQUFBO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUMvQjtBQUVEOzs7QUFHRztJQUNILEtBQUssR0FBQTtBQUNILFFBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztLQUNwQjtBQUVEOzs7OztBQUtHO0FBQ0gsSUFBQSxJQUFJLElBQUksR0FBQTtBQUNOLFFBQUEsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztLQUN4QjtBQUVEOzs7OztBQUtHO0FBQ0gsSUFBQSxJQUFJLFlBQVksR0FBQTtRQUNkLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztLQUNyQjtBQUVEOzs7Ozs7O0FBT0c7SUFDSCxPQUFPLEdBQUE7QUFDTCxRQUFBLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUM3QjtBQUVEOzs7OztBQUtHO0lBQ0gsSUFBSSxHQUFBO0FBQ0YsUUFBQSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDMUI7QUFDRjs7QUM1RGEsTUFBTyxTQUFTLENBQUE7QUF1QzVCLElBQUEsV0FBQSxDQUFZLFNBQW1CLEVBQUE7UUFUZCxJQUFjLENBQUEsY0FBQSxHQUFHLEdBQUcsQ0FBQztBQVVwQyxRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzNCLFFBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksUUFBUSxDQUFlLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUM3RCxRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDOztBQUdwQyxRQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUM7WUFDbkMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtZQUNqRCxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0Isb0JBQW9CLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtBQUNoRCxTQUFBLENBQUMsQ0FBQztLQUNKOztJQUdPLGVBQWUsR0FBQTtRQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7O0FBSTNDLFFBQUEsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuRyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVGLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDakMsWUFBQSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLFNBQUE7O0FBR0QsUUFBQSxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDeEUsUUFBQSxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXpFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEQsUUFBQSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxTQUFTLEVBQUUsR0FBRyxTQUFTLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDOztBQUdwRCxRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQzdCLENBQUEsUUFBQSxFQUFXLFNBQVMsQ0FBQSxnQkFBQSxFQUFtQixlQUFlLENBQUEsTUFBQSxDQUFRLEVBQzlELEdBQUcsQ0FDSixDQUFDOztBQUdGLFFBQUEsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksTUFBTSxDQUNyQyxXQUFXLFNBQVMsQ0FBQSxnQkFBQSxFQUFtQixlQUFlLENBQUEsUUFBQSxFQUFXLFVBQVUsQ0FBbUIsZ0JBQUEsRUFBQSxlQUFlLFFBQVEsRUFDckgsR0FBRyxDQUNKLENBQUM7Ozs7QUFLRixRQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQzVCLENBQUEsTUFBQSxFQUFTLGFBQWEsQ0FBQSxNQUFBLEVBQVMsY0FBYyxDQUFBLE1BQUEsQ0FBUSxFQUNyRCxHQUFHLENBQ0osQ0FBQzs7QUFHRixRQUFBLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLE1BQU0sQ0FDcEMsQ0FBUyxNQUFBLEVBQUEsYUFBYSxDQUFTLE1BQUEsRUFBQSxjQUFjLFdBQVcsU0FBUyxDQUFBLFVBQUEsQ0FBWSxFQUM3RSxHQUFHLENBQ0osQ0FBQzs7QUFHRixRQUFBLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLE1BQU0sQ0FDaEMsQ0FBUyxNQUFBLEVBQUEsY0FBYyxDQUFRLE1BQUEsQ0FBQSxFQUMvQixHQUFHLENBQ0osQ0FBQzs7QUFHRixRQUFBLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxNQUFNLENBQzlCLFdBQVcsV0FBVyxDQUFBLE1BQUEsRUFBUyxjQUFjLENBQUEsUUFBQSxFQUFXLFNBQVMsQ0FBUyxNQUFBLEVBQUEsY0FBYyxRQUFRLEVBQ2hHLEdBQUcsQ0FDSixDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDOzs7Ozs7UUFPMUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksTUFBTSxDQUNuQyxDQUFBLDRDQUFBLEVBQStDcEgsd0JBQXNCLENBQVcsUUFBQSxFQUFBLFNBQVMsWUFBWSxhQUFhLENBQUEsUUFBQSxFQUFXLGVBQWUsQ0FBWSxTQUFBLEVBQUEsYUFBYSxVQUFVLEVBQy9LLEdBQUcsQ0FDSixDQUFDOztRQUdGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7Ozs7OztRQU90RCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksTUFBTSxDQUNuQyxDQUFZLFNBQUEsRUFBQSxhQUFhLENBQVcsUUFBQSxFQUFBLG9CQUFvQixDQUFTLE1BQUEsRUFBQSxVQUFVLFdBQVcsU0FBUyxDQUFBLFNBQUEsRUFBWSxhQUFhLENBQUEsUUFBQSxFQUFXLGVBQWUsQ0FBQSxTQUFBLEVBQVksYUFBYSxDQUFVLFFBQUEsQ0FBQSxFQUNyTCxHQUFHLENBQ0osQ0FBQzs7O1FBSUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksTUFBTSxDQUNuQyxDQUFTLE1BQUEsRUFBQSxZQUFZLENBQUksQ0FBQSxFQUFBLGFBQWEsQ0FBUyxNQUFBLEVBQUEsY0FBYyxXQUFXLFNBQVMsQ0FBQSxTQUFBLEVBQVksYUFBYSxDQUFBLFFBQUEsRUFBVyxlQUFlLENBQUEsU0FBQSxFQUFZLGFBQWEsQ0FBVSxRQUFBLENBQUEsRUFDdkssR0FBRyxDQUNKLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBZUYsUUFBQSxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0FBQ3hDLFFBQUEsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2pDLFlBQUEsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25ELFlBQUEsSUFBSSxTQUFTLElBQUksU0FBUyxLQUFLLFVBQVUsRUFBRTtBQUN6QyxnQkFBQSxLQUFLLE1BQU0sTUFBTSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQzNFLG9CQUFBLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0IsaUJBQUE7Z0JBQ0QsU0FBUztBQUNWLGFBQUE7QUFFRCxZQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNuRCxZQUFBLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxLQUFLLFVBQVUsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDbEYsU0FBUztBQUNWLGFBQUE7WUFDRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4RCxZQUFBLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvQyxZQUFBLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFLLFVBQVU7Z0JBQUUsU0FBUztBQUNqRCxZQUFBLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pHLFlBQUEsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsU0FBUztBQUN4QixZQUFBLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZELFlBQUEsSUFBSSxNQUFNO0FBQUUsZ0JBQUEsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QyxTQUFBO0FBRUQsUUFBQSxJQUFJLGFBQWEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO0FBQzFCLFlBQUEsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDMUUsWUFBQSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxNQUFNLENBQ25DLENBQUEsZ0JBQUEsRUFBbUIsZUFBZSxDQUFBLFFBQUEsRUFBVyxhQUFhLENBQUEsTUFBQSxDQUFRLEVBQ2xFLEdBQUcsQ0FDSixDQUFDO0FBQ0YsWUFBQSxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxNQUFNLENBQzNDLG1CQUFtQixlQUFlLENBQUEsUUFBQSxFQUFXLFVBQVUsQ0FBQSxnQkFBQSxFQUFtQixlQUFlLENBQVcsUUFBQSxFQUFBLGFBQWEsUUFBUSxFQUN6SCxHQUFHLENBQ0osQ0FBQztBQUNILFNBQUE7QUFBTSxhQUFBO0FBQ0wsWUFBQSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLFlBQUEsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQztBQUN6QyxTQUFBOzs7Ozs7O0FBUUQsUUFBQSxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFDM0MsUUFBQSxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDakMsWUFBQSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0QsWUFBQSxJQUFJLGFBQWEsSUFBSSxhQUFhLEtBQUssVUFBVSxFQUFFO0FBQ2pELGdCQUFBLEtBQUssTUFBTSxNQUFNLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDL0Usb0JBQUEsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLGlCQUFBO0FBQ0YsYUFBQTtBQUNGLFNBQUE7QUFFRCxRQUFBLElBQUksZ0JBQWdCLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtBQUM3QixZQUFBLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUNoRixZQUFBLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxNQUFNLENBQzlCLENBQUEsZ0JBQUEsRUFBbUIsZUFBZSxDQUFBLFFBQUEsRUFBVyxnQkFBZ0IsQ0FBQSxNQUFBLENBQVEsRUFDckUsR0FBRyxDQUNKLENBQUM7QUFDSCxTQUFBO0FBQU0sYUFBQTtBQUNMLFlBQUEsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDNUIsU0FBQTtLQUNGOztJQUdPLGtCQUFrQixHQUFBO0FBQ3hCLFFBQUEsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUM5QixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDekcsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLEdBQUc7QUFDcEIsWUFBQSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDaEUsWUFBQSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDaEUsWUFBQSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDakUsQ0FBQzs7QUFHRixRQUFBLE1BQU0sWUFBWSxHQUE0QztBQUM1RCxZQUFBLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFO0FBQ3hDLFlBQUEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUU7QUFDcEMsWUFBQSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTtBQUNsQyxZQUFBLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLFlBQUEsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUU7QUFDdEMsWUFBQSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRTtTQUNyQyxDQUFDO0FBQ0YsUUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDN0IsUUFBQSxLQUFLLE1BQU0sT0FBTyxJQUFJLFlBQVksRUFBRTtBQUNsQyxZQUFBLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO2dCQUN6RSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2hELGFBQUE7QUFDRixTQUFBO0tBQ0Y7Ozs7QUFLTyxJQUFBLGlCQUFpQixDQUFDLE9BQWUsRUFBQTtBQUN2QyxRQUFBLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7QUFHekMsUUFBQSxNQUFNLE1BQU0sR0FBOEI7QUFDeEMsWUFBQSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3JCLFlBQUEsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNyQixTQUFTLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDakMsWUFBQSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3hCLFlBQUEsVUFBVSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDOUMsWUFBQSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3JCLFlBQUEsVUFBVSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUN4QixDQUFDOztBQUdGLFFBQUEsTUFBTSxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMvRixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSTtBQUN6QixZQUFBLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7QUFDcEUsZ0JBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQixhQUFBO0FBQ0gsU0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDaEM7OztJQUlPLFlBQVksR0FBQTtBQUNsQixRQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDdkIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDN0MsUUFBQSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDakQ7O0lBR08sZ0JBQWdCLENBQUMsWUFBb0IsRUFBRSxtQkFBOEIsRUFBQTtBQUMzRSxRQUFBLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzs7UUFFdkMsT0FBTyxDQUFBLEVBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLG1CQUFtQixDQUFBLENBQUEsRUFBSSxVQUFVLENBQUEsQ0FBRSxDQUFDO0tBQ3RFOztJQUdPLGNBQWMsQ0FBQyxRQUFnQixFQUFFLE1BQVksRUFBQTs7UUFFbkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7S0FDbkM7O0FBR0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCRztJQUNILGFBQWEsQ0FBQyxZQUFvQixFQUFFLG1CQUE4QixFQUFBOztBQUVoRSxRQUFBLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9ELFFBQUEsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDOzs7Ozs7Ozs7O0FBV3ZDLFFBQUEsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbEUsUUFBQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RSxNQUFNLGNBQWMsR0FDbEIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJO0FBQ3pFLFlBQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxXQUFXLENBQUM7QUFDMUMsWUFBQSxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0MsUUFBQSxJQUFJLGNBQWM7QUFBRSxZQUFBLE9BQU8sY0FBYyxDQUFDOztBQUcxQyxRQUFBLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN2QyxRQUFBLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDaEMsWUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25CLFlBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDNUIsU0FBQTs7UUFHRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLG1CQUFtQixDQUFDLENBQUM7O1FBR3pFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVDLFFBQUEsSUFBSSxVQUFVLEVBQUU7O1lBRWQsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN2QyxTQUFBOzs7OztBQU1ELFFBQUEsTUFBTSxNQUFNLEdBQ1YsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztBQUMvQixZQUFBLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUM7QUFDdEMsWUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztBQUM3QixZQUFBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7QUFDbkMsWUFBQSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDO0FBQ25DLFlBQUEsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztBQUNuQyxZQUFBLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUM7QUFDdkMsWUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBRXpELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDOUM7Ozs7QUFLTyxJQUFBLG9CQUFvQixDQUFDLElBQVksRUFBQTtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFBRSxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBRW5ELFFBQUEsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkUsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ25CLFNBQUE7QUFDRCxRQUFBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3JFLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuQixTQUFBO0FBQ0QsUUFBQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN4RSxZQUFBLE9BQU8sTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6QyxTQUFBO0FBQ0QsUUFBQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN6RSxZQUFBLE9BQU8sTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM5QyxTQUFBO0FBQ0QsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNiOzs7O0lBS08sa0JBQWtCLENBQUMsSUFBWSxFQUFFLFdBQW1CLEVBQUE7Ozs7OztRQU0xRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDdEQsUUFBQSxJQUFJLFFBQVEsRUFBRTtZQUNaLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxZQUFBLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JDLFlBQUEsT0FBTyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2hELFNBQUE7O0FBR0QsUUFBQSxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDakMsWUFBQSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoRSxZQUFBLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1RCxZQUFBLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxRCxZQUFBLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1RCxZQUFBLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBRTlELFlBQUEsTUFBTSxRQUFRLEdBQUc7QUFDZixnQkFBQSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsU0FBa0IsRUFBRTtBQUN4RCxnQkFBQSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLE9BQWdCLEVBQUU7QUFDcEQsZ0JBQUEsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxNQUFlLEVBQUU7QUFDbEQsZ0JBQUEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxPQUFnQixFQUFFO0FBQ3BELGdCQUFBLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxRQUFpQixFQUFFO2FBQ3ZELENBQUM7WUFFRixLQUFLLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksUUFBUSxFQUFFO2dCQUN4QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzFDLGdCQUFBLElBQUksS0FBSyxFQUFFO29CQUNULE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkMsb0JBQUEsSUFBSSxLQUFLLEVBQUU7d0JBQ1QsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLHdCQUFBLE9BQU8sTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNoRCxxQkFBQTtBQUNGLGlCQUFBO0FBQ0YsYUFBQTtBQUNGLFNBQUE7O1FBR0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0YsUUFBQSxJQUFJLGNBQWMsRUFBRTtZQUNsQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsWUFBQSxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQyxZQUFBLE9BQU8sTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNoRCxTQUFBO0FBRUQsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNiOzs7Ozs7QUFPTyxJQUFBLGFBQWEsQ0FBQyxPQUFlLEVBQUE7QUFDbkMsUUFBQSxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sS0FBSyxVQUFVO0FBQUUsWUFBQSxPQUFPLElBQUksQ0FBQztBQUVwRCxRQUFBLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBVyxLQUFLLEdBQUcsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUM7Ozs7O1FBS2hGLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDO1FBRTVDLE1BQU0sUUFBUSxHQUFHLE9BQU87YUFDckIsS0FBSyxDQUFDLEtBQUssQ0FBQzthQUNaLEdBQUcsQ0FBQyxLQUFLLElBQUc7WUFDWCxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxDQUFDOzs7O0FBSXRFLFlBQUEsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQyxNQUFNLFlBQVksR0FBRyxlQUFlO3FCQUNqQyxLQUFLLENBQUMsR0FBRyxDQUFDO3FCQUNWLEdBQUcsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDbEUsT0FBTyxDQUFBLEdBQUEsRUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDeEMsYUFBQTtBQUNELFlBQUEsT0FBTyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4RSxTQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFBLENBQUEsRUFBSSxRQUFRLENBQUcsQ0FBQSxDQUFBLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDekM7Ozs7Ozs7O0FBU08sSUFBQSxTQUFTLENBQUMsT0FBZSxFQUFBO1FBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdDLFFBQUEsSUFBSSxNQUFNLEVBQUU7QUFDVixZQUFBLE9BQU8sTUFBTSxDQUFDO0FBQ2YsU0FBQTtBQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztBQUFFLFlBQUEsT0FBTyxPQUFPLENBQUM7QUFDdkMsYUFBQSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7QUFBRSxZQUFBLE9BQU8sTUFBTSxDQUFDO0FBQ3RFLGFBQUEsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO0FBQUUsWUFBQSxPQUFPLE9BQU8sQ0FBQzthQUN2RSxJQUFJLE9BQU8sS0FBSyxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7QUFBRSxZQUFBLE9BQU8sU0FBUyxDQUFDO0FBQ25FLGFBQUEsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sS0FBSyxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7QUFBRSxZQUFBLE9BQU8sUUFBUSxDQUFDO0FBQy9GLGFBQUEsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO0FBQUUsWUFBQSxPQUFPLE9BQU8sQ0FBQztBQUM1RSxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Y7Ozs7QUFLTyxJQUFBLHNCQUFzQixDQUFDLFdBQW1CLEVBQUE7OztRQUdoRCxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDMUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQzs7UUFHN0IsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JKLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV2SixRQUFBLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUEsRUFBQSxFQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRixRQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLENBQUEsS0FBQSxFQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUV4RixRQUFBLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM5QixNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRCxZQUFBLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUU3SCxZQUFBLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7O0FBRXJCLGdCQUFBLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO29CQUN4QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDM0Qsb0JBQUEsSUFBSSxTQUFTLEVBQUU7d0JBQ2IsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLHdCQUFBLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNsRCx3QkFBQSxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7d0JBQ2hELGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDdEIscUJBQUE7QUFDRixpQkFBQTtBQUNELGdCQUFBLElBQUksYUFBYSxFQUFFO0FBQ2pCLG9CQUFBLE9BQU8sV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdCLGlCQUFBO0FBQ0YsYUFBQTtBQUNGLFNBQUE7O1FBR0QsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0gsUUFBQSxJQUFJLHNCQUFzQixFQUFFO1lBQzFCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELFlBQUEsTUFBTSxRQUFRLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEUsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsWUFBQSxNQUFNLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVoRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFdkMsWUFBQSxPQUFPLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNoRSxTQUFBOztRQUdELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3ZELFFBQUEsSUFBSSxRQUFRLEVBQUU7WUFDWixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsWUFBQSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Ozs7O0FBTWpELFlBQUEsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7QUFHdEUsWUFBQSxPQUFPLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0MsU0FBQTs7UUFHRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckcsUUFBQSxJQUFJLGNBQWMsRUFBRTtZQUNsQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsWUFBQSxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQyxZQUFBLE9BQU8sTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQyxTQUFBO0FBRUQsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNiOzs7Ozs7QUFPTyxJQUFBLG9CQUFvQixDQUFDLFdBQW1CLEVBQUE7UUFDOUMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDMUQsUUFBQSxJQUFJLENBQUMsVUFBVTtBQUFFLFlBQUEsT0FBTyxJQUFJLENBQUM7UUFFN0IsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pELFFBQUEsTUFBTSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDbkIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTNELE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRCxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ2xDLFlBQUEsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDNUIsU0FBQTtBQUVELFFBQUEsT0FBTyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7S0FDN0I7Ozs7QUFLTyxJQUFBLFdBQVcsQ0FBQyxXQUFtQixFQUFBOztRQUVyQyxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDdkUsUUFBQSxJQUFJLGlCQUFpQixFQUFFO1lBQ3JCLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xELE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25ELE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBRTdDLFlBQUEsTUFBTSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDbkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWpELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3hDLGdCQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakIsYUFBQTtpQkFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMvQyxnQkFBQSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakMsYUFBQTtpQkFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTs7QUFFL0MsZ0JBQUEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLGFBQUE7Ozs7OztBQU9ELFlBQUEsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNsRSxZQUFBLElBQUksVUFBVSxFQUFFO0FBQ2QsZ0JBQUEsT0FBTyxVQUFVLENBQUM7QUFDbkIsYUFBQTs7QUFHRCxZQUFBLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ25CLFNBQUE7O1FBR0QsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdkQsUUFBQSxJQUFJLFNBQVMsRUFBRTtZQUNiLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMxQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFFM0MsWUFBQSxNQUFNLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUNuQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFakQsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDeEMsZ0JBQUEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqQixhQUFBO2lCQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQy9DLGdCQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqQyxhQUFBO2lCQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFOztBQUUvQyxnQkFBQSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckMsYUFBQTtBQUNELFlBQUEsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbkIsU0FBQTs7O1FBSUQsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMvRCxRQUFBLElBQUksYUFBYSxFQUFFO1lBQ2pCLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMvQyxZQUFBLE1BQU0sQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDO1lBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVqRCxZQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7O1lBRWhCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUMvQixnQkFBQSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsQixhQUFBO0FBQ0QsWUFBQSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNuQixTQUFBO0FBRUQsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNiOzs7O0FBS08sSUFBQSxpQkFBaUIsQ0FBQyxXQUFtQixFQUFBO1FBQzNDLE1BQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUN4RSxRQUFBLElBQUksQ0FBQyxtQkFBbUI7QUFBRSxZQUFBLE9BQU8sSUFBSSxDQUFDO1FBRXRDLE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDOztRQUVqRCxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDakUsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzlELE1BQU0sV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQzs7QUFHaEUsUUFBQSxNQUFNLE1BQU0sR0FBRyxXQUFXLElBQUksWUFBWSxDQUFDOztBQUczQyxRQUFBLE1BQU0sU0FBUyxHQUFHQywyQkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQzs7QUFHeEQsUUFBQSxNQUFNLFlBQVksR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkYsTUFBTSxNQUFNLEdBQUcsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBRWpHLFFBQUEsSUFBSSxPQUFPLEVBQUU7QUFDWCxZQUFBLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNsRCxnQkFBQSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEQsYUFBQTtBQUFNLGlCQUFBLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUN6RCxnQkFBQSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckQsYUFBQTtBQUFNLGlCQUFBOztBQUVMLGdCQUFBLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0IsYUFBQTs7QUFHRCxZQUFBLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMvQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNuRCxZQUFBLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUIsU0FBQTtBQUFNLGFBQUEsSUFBSSxNQUFNLEVBQUU7QUFDakIsWUFBQSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbEQsZ0JBQUEsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlDLGFBQUE7QUFBTSxpQkFBQSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDekQsZ0JBQUEsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25ELGFBQUE7QUFBTSxpQkFBQTtBQUNMLGdCQUFBLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUIsYUFBQTs7QUFHRCxZQUFBLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ3pELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3hELFlBQUEsWUFBWSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUN6QyxTQUFBO0FBRUQsUUFBQSxPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUM5Qjs7OztBQUtPLElBQUEsaUJBQWlCLENBQUMsV0FBbUIsRUFBQTtRQUMzQyxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDeEUsUUFBQSxJQUFJLENBQUMsbUJBQW1CO0FBQUUsWUFBQSxPQUFPLElBQUksQ0FBQzs7UUFHdEMsTUFBTSxZQUFZLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM5RCxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDaEUsTUFBTSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7O0FBR3RFLFFBQUEsTUFBTSxNQUFNLEdBQUcsV0FBVyxJQUFJLGlCQUFpQixJQUFJLFlBQVksQ0FBQztBQUVoRSxRQUFBLE1BQU0sWUFBWSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN2RixRQUFBLElBQUksQ0FBQyxPQUFPO0FBQUUsWUFBQSxPQUFPLElBQUksQ0FBQztBQUUxQixRQUFBLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNsRCxZQUFBLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5QyxTQUFBO0FBQU0sYUFBQSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDekQsWUFBQSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkQsU0FBQTtBQUFNLGFBQUE7O0FBRUwsWUFBQSxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdCLFNBQUE7QUFFRCxRQUFBLE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQzlCOzs7O0FBS08sSUFBQSxpQkFBaUIsQ0FBQyxXQUFtQixFQUFBO1FBQzNDLE1BQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUN4RSxRQUFBLElBQUksQ0FBQyxtQkFBbUI7QUFBRSxZQUFBLE9BQU8sSUFBSSxDQUFDOztRQUd0QyxNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzRCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyRCxNQUFNLGlCQUFpQixHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN0RSxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDOUQsTUFBTSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDOztBQUdoRSxRQUFBLE1BQU0sV0FBVyxHQUFHLFdBQVcsSUFBSSxpQkFBaUIsQ0FBQztRQUVyRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN2RixRQUFBLElBQUksQ0FBQyxPQUFPO0FBQUUsWUFBQSxPQUFPLElBQUksQ0FBQztBQUUxQixRQUFBLE1BQU0sTUFBTSxHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN2RSxRQUFBLElBQUksWUFBWSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBRTVCLFFBQUEsSUFBSSxPQUFPLEVBQUU7O0FBRVgsWUFBQSxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDNUQsZ0JBQUEsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hELGFBQUE7QUFBTSxpQkFBQSxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDbkUsZ0JBQUEsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JELGFBQUE7QUFBTSxpQkFBQTtBQUNMLGdCQUFBLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0IsYUFBQTs7WUFHRCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlELFlBQUEsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDaEQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6RCxZQUFZLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkQsU0FBQTtBQUFNLGFBQUEsSUFBSSxNQUFNLEVBQUU7O0FBRWpCLFlBQUEsSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO0FBQzVELGdCQUFBLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5QyxhQUFBO0FBQU0saUJBQUEsSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO0FBQ25FLGdCQUFBLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuRCxhQUFBO0FBQU0saUJBQUE7O0FBRUwsZ0JBQUEsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3QixhQUFBOztZQUdELE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0QsWUFBQSxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM5QyxNQUFNLGNBQWMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdELFlBQVksR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNoRSxTQUFBO0FBQU0sYUFBQTs7QUFFTCxZQUFBLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRTtBQUM1RCxnQkFBQSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEQsYUFBQTtBQUFNLGlCQUFBOztBQUVMLGdCQUFBLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0IsYUFBQTs7WUFHRCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlELFlBQUEsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDaEQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6RCxZQUFZLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkQsU0FBQTtBQUVELFFBQUEsT0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7S0FDOUI7Ozs7Ozs7QUFRTyxJQUFBLHFCQUFxQixDQUFDLFdBQW1CLEVBQUE7Ozs7Ozs7QUFPL0MsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25GLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ2xFLFFBQUEsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFJLENBQUEsRUFBQSxXQUFXLFNBQVMsZ0JBQWdCLENBQUEsQ0FBQSxDQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RyxRQUFBLElBQUksQ0FBQyxhQUFhO0FBQUUsWUFBQSxPQUFPLElBQUksQ0FBQztRQUVoQyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RGLFFBQUEsSUFBSSxVQUFVO0FBQUUsWUFBQSxPQUFPLElBQUksQ0FBQztBQUU1QixRQUFBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3ZFLFlBQUEsT0FBTyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM1RCxTQUFBO0FBQ0QsUUFBQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUN0RSxZQUFBLE9BQU8sTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDMUQsU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDYjs7OztJQUtPLGNBQWMsQ0FBQyxZQUFvQixFQUFFLG1CQUE4QixFQUFBO1FBQ3pFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7O0FBR2xFLFFBQUEsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLEtBQUssZ0JBQWdCLEdBQUcsa0JBQWtCLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQztRQUN4RyxNQUFNLE1BQU0sR0FBRyxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztBQUN2RCxRQUFBLE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7O1FBR2pDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFO1lBQ3pFLE1BQU07QUFDTixZQUFBLFdBQVcsRUFBRSxJQUFJO0FBQ0QsU0FBQSxDQUFDLENBQUM7OztBQUdwQixRQUFBLE9BQU8sWUFBWSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7S0FDbkM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkc7SUFDSCxrQkFBa0IsQ0FBQyxZQUFvQixFQUFFLG1CQUE4QixFQUFBOztRQUVyRSxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMzRCxRQUFBLElBQUksVUFBVSxFQUFFO1lBQ2QsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pELE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUUvQyxZQUFBLE1BQU0sQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDO1lBQ25CLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMzRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7O1lBR3ZELE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNoRCxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ2xDLGdCQUFBLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVCLGFBQUE7O1lBR0QsSUFBSSxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDOztZQUUxQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQzFDLGdCQUFBLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFCLGFBQUE7O1lBRUQsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUMxQyxnQkFBQSxTQUFTLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pFLGFBQUE7WUFFRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUM7WUFDNUIsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsRCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztZQUc5QyxNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7QUFDOUIsWUFBQSxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUMsT0FBTyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDckQsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNyQyxnQkFBQSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3QixhQUFBO0FBRUQsWUFBQSxNQUFNLE1BQU0sR0FBbUI7QUFDN0IsZ0JBQUEsZUFBZSxFQUFFLENBQUEsRUFBRyxjQUFjLENBQUEsSUFBQSxFQUFPLFlBQVksQ0FBRSxDQUFBO0FBQ3ZELGdCQUFBLFNBQVMsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQy9CLGdCQUFBLE9BQU8sRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFO0FBQzNCLGdCQUFBLFdBQVcsRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFO0FBQ2hDLGdCQUFBLFNBQVMsRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQzVCLGdCQUFBLE9BQU8sRUFBRSxJQUFhO0FBQ3RCLGdCQUFBLFFBQVEsRUFBRSxRQUFRO2FBQ25CLENBQUM7QUFDRixZQUFBLE9BQU8sTUFBTSxDQUFDO0FBQ2YsU0FBQTs7Ozs7OztBQVFELFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDOztBQUUzRCxRQUFBLElBQUksYUFBYSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBSSxDQUFBLEVBQUEsV0FBVyxTQUFTLGNBQWMsQ0FBQSxDQUFBLENBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25HLFFBQUEsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEVBQUU7O0FBRWxCLFlBQUEsYUFBYSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBSSxDQUFBLEVBQUEsY0FBYyxTQUFTLFdBQVcsQ0FBQSxDQUFBLENBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9GLFlBQUEsSUFBSSxhQUFhLEVBQUU7QUFDakIsZ0JBQUEsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNqQixhQUFBO0FBQ0YsU0FBQTtBQUNELFFBQUEsSUFBSSxhQUFhLEVBQUU7WUFDakIsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3hELFlBQUEsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7O0FBRXRFLGdCQUFBLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixLQUFLLGdCQUFnQixHQUFHLGtCQUFrQixFQUFFLEdBQUcsbUJBQW1CLENBQUM7Z0JBQ3hHLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUVqRSxnQkFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNqRSxnQkFBQSxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFFckQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDO2dCQUM1QixNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsRCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztnQkFHOUMsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO0FBQzlCLGdCQUFBLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDMUMsT0FBTyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDckQsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNyQyxvQkFBQSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3QixpQkFBQTtBQUVELGdCQUFBLE1BQU0sTUFBTSxHQUFtQjtBQUM3QixvQkFBQSxlQUFlLEVBQUUsQ0FBQSxFQUFHLGNBQWMsQ0FBQSxJQUFBLEVBQU8sWUFBWSxDQUFFLENBQUE7QUFDdkQsb0JBQUEsU0FBUyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUU7QUFDL0Isb0JBQUEsT0FBTyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUU7QUFDM0Isb0JBQUEsV0FBVyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUU7QUFDaEMsb0JBQUEsU0FBUyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUU7QUFDNUIsb0JBQUEsT0FBTyxFQUFFLElBQWE7QUFDdEIsb0JBQUEsUUFBUSxFQUFFLFFBQVE7aUJBQ25CLENBQUM7QUFDRixnQkFBQSxPQUFPLE1BQU0sQ0FBQztBQUNmLGFBQUE7QUFDRixTQUFBO0FBRUQsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNiOzs7Ozs7QUFPRCxJQUFBLG1CQUFtQixDQUFDLElBQVksRUFBRSxhQUFvQixFQUFFLE1BQXNCLEVBQUE7UUFDNUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQztBQUFFLFlBQUEsT0FBTyxJQUFJLENBQUM7UUFDNUQsSUFBSSxVQUFVLEdBQXdCLElBQUksQ0FBQztRQUMzQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFFbEIsUUFBQSxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDNUIsSUFBSTtBQUNGLGdCQUFBLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQzs7Ozs7Ozs7QUFRckQsZ0JBQUEsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLElBQUksRUFBRSxFQUFFO0FBQ2pDLG9CQUFBLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxFQUFFO0FBQ2pDLHdCQUFBLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzt3QkFDOUIsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUNwQixxQkFBQTtBQUNGLGlCQUFBO0FBQ0YsYUFBQTtBQUFDLFlBQUEsT0FBTyxDQUFDLEVBQUU7QUFDVixnQkFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxFQUFFO29CQUN6RCxJQUFJO0FBQ0osb0JBQUEsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDeEIsaUJBQUEsQ0FBQyxDQUFDO0FBQ0osYUFBQTtBQUNGLFNBQUE7QUFDRCxRQUFBLE9BQU8sVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0tBQ3BEO0FBRUQsSUFBQSxlQUFlLENBQUMsSUFBWSxFQUFBO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztBQUFFLFlBQUEsT0FBTyxFQUFFLENBQUM7UUFDN0IsSUFBSSxXQUFXLEdBQW1CLEVBQUUsQ0FBQztRQUNyQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDbEIsUUFBQSxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDNUIsSUFBSTtnQkFDRixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCLGdCQUFBLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNqQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRTt3QkFDdEMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO3dCQUNuQyxXQUFXLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLHFCQUFBO0FBQ0YsaUJBQUE7QUFDRixhQUFBO0FBQUMsWUFBQSxPQUFPLENBQUMsRUFBRTtBQUNWLGdCQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMseUNBQXlDLEVBQUU7b0JBQ3JELElBQUk7QUFDSixvQkFBQSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN4QixpQkFBQSxDQUFDLENBQUM7QUFDSixhQUFBO0FBQ0YsU0FBQTtBQUNELFFBQUEsT0FBTyxXQUFXLENBQUM7S0FDcEI7O0FBR0Q7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCRztBQUNILElBQUEsZ0JBQWdCLENBQUMsSUFBWSxFQUFBO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNqRDs7QUFHRDs7QUFFRztJQUNILGFBQWEsR0FBQTtRQUNYLE9BQU87QUFDTCxZQUFBLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7QUFDckIsWUFBQSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZO1NBQ2pDLENBQUM7S0FDSDtBQUNGOztBQzNyQ0QsU0FBUyxXQUFXLENBQUMsR0FBVyxFQUFBO0lBQzlCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsWUFBWSxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUE7QUFDeEMsSUFBQSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ25CLElBQUEsSUFBSSxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDekQsSUFBQSxJQUFJLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRWxELElBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsUUFBQSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0IsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0MsWUFBQSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUNsQixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNkLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNyQixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUk7YUFDdEIsQ0FBQztBQUNGLFlBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUNwRSxnQkFBQSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFBO0FBQ0QsWUFBQSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLFNBQUE7QUFDRCxRQUFBLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDdkUsS0FBQTtBQUNELElBQUEsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsQ0FBQztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxpQkFBaUIsQ0FBQyxTQUFpQixFQUFFLEtBQWEsRUFBQTtBQUN6RCxJQUFBLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsQyxJQUFBLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQUUsUUFBQSxPQUFPLElBQUksQ0FBQztBQUN2QyxJQUFBLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7QUFDaEMsSUFBQSxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLElBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQztBQUNqRCxJQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBQ3hELEtBQUssSUFBSSxHQUFHLEdBQUcsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7QUFDM0MsUUFBQSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxTQUFTO0FBQUUsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNoRSxLQUFBO0FBQ0QsSUFBQSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFb0IsTUFBQSxXQUFZLFNBQVFvSCx3QkFBcUIsQ0FBQTtJQUc1RCxXQUFZLENBQUEsR0FBUSxFQUFFLE1BQTRCLEVBQUE7UUFDaEQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1gsUUFBQSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNmLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7OztBQUlyQixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUVsQixDQUFDO0FBQ0YsUUFBQSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBa0IsS0FBSTs7O1lBR3hELE1BQU0sYUFBYSxHQUFHLElBRXJCLENBQUM7QUFDRixZQUFBLGFBQWEsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLFlBQUEsT0FBTyxLQUFLLENBQUM7QUFDZixTQUFDLENBQUMsQ0FBQztBQUVILFFBQUEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtBQUM5QyxZQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdFLFNBQUE7S0FDRjtBQUVELElBQUEsY0FBYyxDQUFDLE9BQTZCLEVBQUE7O1FBRTFDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyRCxRQUFBLE9BQU8sV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLEdBQUcsQ0FBRSxPQUFPLENBQUMsS0FBSyxDQUFFLENBQUM7S0FDN0Q7QUFFRCxJQUFBLGtCQUFrQixDQUFDLE9BQTZCLEVBQUE7O0FBRTlDLFFBQUEsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQzVFLFFBQVEsSUFBRztBQUNULFlBQUEsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbkUsWUFBQSxJQUFJLFdBQVc7QUFDYixnQkFBQSxPQUFPLFdBQVcsQ0FBQztZQUVyQixXQUFXLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDcEUsWUFBQSxJQUFJLFdBQVc7QUFDYixnQkFBQSxPQUFPLFdBQVcsQ0FBQztZQUVyQixXQUFXLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbkUsWUFBQSxJQUFJLFdBQVc7QUFDYixnQkFBQSxPQUFPLFdBQVcsQ0FBQztZQUVyQixXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbEUsWUFBQSxJQUFJLFdBQVc7QUFDYixnQkFBQSxPQUFPLFdBQVcsQ0FBQztZQUVyQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3pELENBQ0YsQ0FBQyxDQUFDOztRQUdILElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRTtBQUNoRCxZQUFBLE9BQU8sbUJBQW1CLENBQUM7QUFDNUIsU0FBQTs7UUFHRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsQ0FBQzs7QUFHaEYsUUFBQSxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztBQUNyQyxRQUFBLEtBQUssTUFBTSxVQUFVLElBQUksbUJBQW1CLEVBQUU7QUFDNUMsWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUNoQyxnQkFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3pCLGFBQUE7QUFDRixTQUFBO0FBRUQsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNmO0FBRUQ7O0FBRUc7SUFDSyxtQkFBbUIsQ0FBQyxPQUE2QixFQUFFLG9CQUE4QixFQUFBO1FBQ3ZGLE1BQU0sZ0JBQWdCLEdBQWEsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7O0FBRzFDLFFBQUEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRTtZQUMvRSxJQUFJO0FBQ0YsZ0JBQUEsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRixnQkFBQSxLQUFLLE1BQU0sVUFBVSxJQUFJLGtCQUFrQixFQUFFOztBQUUzQyxvQkFBQSxJQUFJLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUNsRix3QkFBQSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkMscUJBQUE7QUFDRixpQkFBQTtBQUNGLGFBQUE7WUFBQyxNQUFNOztBQUVQLGFBQUE7QUFDRixTQUFBOztBQUdELFFBQUEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ2xHLElBQUk7Z0JBQ0YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQ2hFLE9BQU8sQ0FBQyxNQUFNLEVBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ25CLENBQUM7O0FBR0YsZ0JBQUEsS0FBSyxNQUFNLE9BQU8sSUFBSSxXQUFXLENBQUMsY0FBYyxFQUFFO0FBQ2hELG9CQUFBLElBQUksaUJBQWlCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQzVFLHdCQUFBLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoQyxxQkFBQTtBQUNGLGlCQUFBO0FBQ0YsYUFBQTtZQUFDLE1BQU07O0FBRVAsYUFBQTtBQUNGLFNBQUE7QUFFRCxRQUFBLE9BQU8sZ0JBQWdCLENBQUM7S0FDekI7SUFFTyxrQkFBa0IsQ0FBQyxRQUFnQixFQUFFLElBQVksRUFBQTs7Ozs7QUFLdkQsUUFBQSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxRQUFBLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQUEsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUEsQ0FBQSxFQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQSxDQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUNoRSxZQUFBLE1BQU0sV0FBVyxHQUFHO2dCQUNsQixPQUFPO2dCQUNQLENBQUMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUMzQyxDQUFDLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pDLGFBQUE7aUJBQ0UsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQSxDQUFBLEVBQUksR0FBRyxDQUFBLENBQUUsQ0FBQztBQUNoQyxpQkFBQSxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6RSxZQUFBLE9BQU8sV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsV0FBVyxHQUFHLFNBQVMsQ0FBQztBQUN6RCxTQUFBO0tBQ0Y7SUFFTyx1QkFBdUIsQ0FBQyxRQUFnQixFQUFFLElBQVksRUFBQTs7Ozs7Ozs7O0FBUzVELFFBQUEsTUFBTSxZQUFZLEdBQUcsQ0FBQyxXQUFtQixLQUN2QyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRixNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3RFLEdBQUcsQ0FBQyxZQUFZLENBQUM7YUFDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBSyxFQUFBLEVBQUEsYUFBYSxDQUFHLENBQUEsQ0FBQSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDcEMsUUFBQSxJQUFJLEtBQUssRUFBRTtBQUNULFlBQUEsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBOztBQUUxQixZQUFBLE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBVyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsWUFBQSxNQUFNLFdBQVcsR0FBRztBQUNsQixnQkFBQSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztBQUNmLGdCQUFBLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO0FBQ2hCLGdCQUFBLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO0FBQ2YsZ0JBQUEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7QUFDakIsZ0JBQUEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7QUFDakIsZ0JBQUEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7QUFDbEIsZ0JBQUEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7QUFDcEIsZ0JBQUEsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7QUFDbkIsZ0JBQUEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7QUFDakIsZ0JBQUEsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7QUFDcEIsYUFBQTtpQkFDRSxHQUFHLENBQUMsR0FBRyxJQUFHO0FBQ1QsZ0JBQUEsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUUxQyxnQkFBQSxPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSxhQUFDLENBQUM7aUJBQ0QsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQSxDQUFBLEVBQUksR0FBRyxDQUFBLENBQUUsQ0FBQztBQUNqQyxpQkFBQSxNQUFNLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRSxZQUFBLE9BQU8sV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsV0FBVyxHQUFHLFNBQVMsQ0FBQztBQUN6RCxTQUFBO0tBQ0Y7SUFFTyxzQkFBc0IsQ0FBQyxRQUFnQixFQUFFLElBQVksRUFBQTs7O0FBRzNELFFBQUEsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRWhELFFBQUEsTUFBTSxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQSxFQUFBLEVBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBc0IsbUJBQUEsRUFBQSxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUEsRUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFJLENBQUEsRUFBQSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUEsRUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFJLENBQUEsRUFBQSxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUEsRUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFTLE1BQUEsRUFBQSxVQUFVLENBQWEsV0FBQSxDQUFBLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaE8sTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNwRCxRQUFBLElBQUksYUFBYSxFQUFFO1lBQ2pCLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDOztBQUdqRSxZQUFBLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDOztZQUdoSCxJQUFJLGVBQWUsR0FBRyxHQUFHLENBQUM7WUFDMUIsSUFBSSxxQkFBcUIsR0FBRyxRQUFRLENBQUM7QUFDckMsWUFBQSxJQUFJLFFBQVEsRUFBRTtnQkFDWixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2xELGdCQUFBLElBQUksV0FBVyxFQUFFO0FBQ2Ysb0JBQUEsZUFBZSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDakMscUJBQXFCLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9DLGlCQUFBO0FBQ0YsYUFBQTtBQUVELFlBQUEsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDO2dCQUNwRCxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQztnQkFDbEQsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUM7Z0JBQ2pELENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDO2dCQUNsRCxDQUFDLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQztBQUNwRCxhQUFBO2lCQUNFLEdBQUcsQ0FBQyxDQUFDLElBQUc7Z0JBQ1AsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7O0FBRS9DLGdCQUFBLElBQUksUUFBUSxFQUFFOzs7b0JBR1osTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QyxvQkFBQSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxlQUFlLEVBQUU7O0FBRTVELHdCQUFBLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BFLHdCQUFBLElBQUkscUJBQXFCLEVBQUU7Ozs7Ozs7OztBQVN6Qiw0QkFBQSxJQUFJLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTtBQUMzRSxnQ0FBQSxPQUFPLENBQUcsRUFBQSxTQUFTLENBQUksQ0FBQSxFQUFBLGVBQWUsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDOUYsNkJBQUE7QUFDRCw0QkFBQSxPQUFPLElBQUksQ0FBQztBQUNiLHlCQUFBO0FBQU0sNkJBQUE7O0FBRUwsNEJBQUEsT0FBTyxDQUFHLEVBQUEsU0FBUyxDQUFJLENBQUEsRUFBQSxRQUFRLEVBQUUsQ0FBQztBQUNuQyx5QkFBQTtBQUNGLHFCQUFBOzs7Ozs7Ozs7Ozs7O0FBYUQsb0JBQUEsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEUsb0JBQUEsSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7QUFDdEUsd0JBQUEsT0FBTyxHQUFHLFNBQVMsQ0FBQSxDQUFBLEVBQUksZUFBZSxDQUFJLENBQUEsRUFBQSxpQkFBaUIsRUFBRSxDQUFDO0FBQy9ELHFCQUFBO0FBQ0Qsb0JBQUEsT0FBTyxJQUFJLENBQUM7QUFDYixpQkFBQTtBQUNELGdCQUFBLE9BQU8sQ0FBRyxFQUFBLFNBQVMsQ0FBSSxDQUFBLEVBQUEsUUFBUSxFQUFFLENBQUM7QUFDcEMsYUFBQyxDQUFDO2lCQUNELE1BQU0sQ0FBQyxDQUFDLElBQUksS0FBcUIsSUFBSSxLQUFLLElBQUksQ0FBQztBQUMvQyxpQkFBQSxNQUFNLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRSxZQUFBLE9BQU8sV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsV0FBVyxHQUFHLFNBQVMsQ0FBQztBQUN6RCxTQUFBOzs7QUFJRCxRQUFBLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELFFBQUEsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRTlDLFFBQUEsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFBLEVBQUEsRUFBSyxXQUFXLENBQUEsWUFBQSxFQUFlLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUksQ0FBQSxFQUFBLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUEsQ0FBQSxFQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBSSxDQUFBLEVBQUEsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQSxDQUFBLEVBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBSSxDQUFBLEVBQUEsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQSxNQUFBLEVBQVMsU0FBUyxDQUFBLGVBQUEsQ0FBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyUSxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUM1RCxRQUFBLElBQUksaUJBQWlCLEVBQUU7WUFDckIsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDOztBQUV4RSxZQUFBLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7QUFHdkgsWUFBQSxNQUFNLE9BQU8sR0FBRztBQUNkLGdCQUFBLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO0FBQ2pCLGdCQUFBLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO0FBQ2pCLGdCQUFBLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO0FBQ2xCLGdCQUFBLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDO0FBQ3BCLGdCQUFBLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO0FBQ25CLGdCQUFBLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO0FBQ2pCLGdCQUFBLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO2FBQ3BCLENBQUM7WUFDRixNQUFNLFdBQVcsR0FBRyxPQUFPO2lCQUN4QixHQUFHLENBQUMsR0FBRyxJQUFHO0FBQ1QsZ0JBQUEsSUFBSSxPQUFPLEVBQUU7O0FBRVgsb0JBQUEsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFOztBQUV2RCx3QkFBQSxPQUFPLENBQUcsRUFBQSxRQUFRLENBQUksQ0FBQSxFQUFBLEdBQUcsRUFBRSxDQUFDO0FBQzdCLHFCQUFBO0FBQ0Qsb0JBQUEsT0FBTyxJQUFJLENBQUM7QUFDYixpQkFBQTtBQUNELGdCQUFBLE9BQU8sQ0FBRyxFQUFBLFFBQVEsQ0FBSSxDQUFBLEVBQUEsR0FBRyxFQUFFLENBQUM7QUFDOUIsYUFBQyxDQUFDO2lCQUNELE1BQU0sQ0FBQyxDQUFDLElBQUksS0FBcUIsSUFBSSxLQUFLLElBQUksQ0FBQztBQUMvQyxpQkFBQSxNQUFNLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRSxZQUFBLE9BQU8sV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsV0FBVyxHQUFHLFNBQVMsQ0FBQztBQUN6RCxTQUFBOztBQUdELFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBLGNBQUEsQ0FBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUNsRSxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLFFBQUEsSUFBSSxZQUFZLEVBQUU7WUFDaEIsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsWUFBQSxNQUFNLFdBQVcsR0FBRztnQkFDbEIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUNwQyxhQUFBLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7Ozs7OztBQU0xRSxZQUFBLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDMUIsZ0JBQUEsT0FBTyxXQUFXLENBQUM7QUFDcEIsYUFBQTtBQUNGLFNBQUE7Ozs7UUFLRCxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLFFBQUEsSUFBSSxTQUFTLElBQUksU0FBUyxLQUFLLFVBQVUsRUFBRTtZQUN6QyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDdEQsWUFBQSxJQUFJLFdBQVcsRUFBRTtBQUNmLGdCQUFBLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUU5QyxnQkFBQSxNQUFNLFNBQVMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3JFLE1BQU0sV0FBVyxHQUFhLEVBQUUsQ0FBQztBQUNqQyxnQkFBQSxLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRTtBQUNoQyxvQkFBQSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUUsb0JBQUEsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7d0JBQ3hCLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBRyxFQUFBLFNBQVMsQ0FBSSxDQUFBLEVBQUEsSUFBSSxDQUFJLENBQUEsRUFBQSxhQUFhLENBQUUsQ0FBQSxDQUFDLENBQUM7QUFDM0QscUJBQUE7QUFDRixpQkFBQTtnQkFFRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkcsZ0JBQUEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUN2QixvQkFBQSxPQUFPLFFBQVEsQ0FBQztBQUNqQixpQkFBQTtBQUNGLGFBQUE7QUFDRixTQUFBO0tBQ0Y7SUFFTyxxQkFBcUIsQ0FBQyxRQUFnQixFQUFFLElBQVksRUFBQTs7QUFFMUQsUUFBQSxNQUFNLFFBQVEsR0FBRztZQUNmLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNoQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRTtZQUN6QyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDbkMsWUFBQSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRTtZQUNuRCxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO1NBQ25DLENBQUM7QUFFRixRQUFBLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFdBQVcsR0FBYSxFQUFFLENBQUM7QUFFakMsUUFBQSxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRTs7O1lBRzFCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUEsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLEtBQUssVUFBVTtnQkFBRSxTQUFTO0FBRWpELFlBQUEsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNsRCxZQUFBLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7QUFHaEQsWUFBQSxJQUFJLGlCQUFpQixDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRTtBQUMvQyxnQkFBQSxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakYsZ0JBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDdEMsb0JBQUEsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMvQixpQkFBQTtBQUNGLGFBQUE7Ozs7Ozs7O0FBU0QsWUFBQSxLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUU7QUFDM0IsZ0JBQUEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQy9CLG9CQUFBLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRixvQkFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtBQUN0Qyx3QkFBQSxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQy9CLHFCQUFBO0FBQ0YsaUJBQUE7QUFDRixhQUFBO0FBQ0YsU0FBQTtBQUVELFFBQUEsT0FBTyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUFDO0tBQ3pEO0lBRU8sa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxJQUFZLEVBQUE7UUFDdkQsT0FBTztBQUNMLFlBQUEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7QUFDaEIsWUFBQSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztBQUNwQixZQUFBLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO0FBQ3BCLFNBQUEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0tBQ3JEO0lBRUQsZ0JBQWdCLENBQUMsVUFBa0IsRUFBRSxFQUFlLEVBQUE7UUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3BELFFBQUEsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFlBQUEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2QixPQUFPO0FBQ1IsU0FBQTs7Ozs7UUFLRCxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDWCxRQUFBLEVBQUUsQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUNuQyxRQUFBLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDaEUsUUFBQSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQ2pFOzs7Ozs7Ozs7O0FBV08sSUFBQSxrQkFBa0IsQ0FBQyxVQUFrQixFQUFBO1FBQzNDLElBQUk7QUFDRixZQUFBLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ3JDLGdCQUFBLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7Ozs7QUFNbkQsZ0JBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDaEMsb0JBQUEsT0FBTyxJQUFJLENBQUM7QUFDYixpQkFBQTtnQkFDRCxPQUFPLFVBQVUsQ0FBQyxlQUFlLENBQUM7QUFDbkMsYUFBQTtZQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3pELFlBQUEsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsSUFBSSxTQUFTLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUN2RCxvQkFBQSxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RGLGlCQUFBO0FBQ0QsZ0JBQUEsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakYsZ0JBQUEsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0UsZ0JBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUM5RCxnQkFBQSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RCxnQkFBQSxPQUFPLEdBQUcsY0FBYyxDQUFBLENBQUEsRUFBSSxhQUFhLENBQUksQ0FBQSxFQUFBLFlBQVksRUFBRSxDQUFDO0FBQzdELGFBQUE7WUFFRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ1osTUFBTSxpQkFBaUIsR0FBRyx3RkFBd0YsQ0FBQztBQUNuSCxnQkFBQSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRTtvQkFDdkMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNoQixpQkFBQTtBQUNGLGFBQUE7WUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2RCxZQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ2xDLGdCQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2IsYUFBQTtBQUNELFlBQUEsSUFBSSxPQUFPLEVBQUU7QUFDWCxnQkFBQSxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1RCxnQkFBQSxNQUFNLG1CQUFtQixHQUFHLDhCQUE4QixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN2RyxnQkFBQSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsSUFBSSxPQUFPLElBQUksbUJBQW1CLENBQUM7QUFDdkcsZ0JBQUEsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ3hGLGdCQUFBLElBQUksY0FBYyxFQUFFO0FBQ2xCLG9CQUFBLE9BQU8sUUFBUSxDQUFDO0FBQ2pCLGlCQUFBO0FBQ0QsZ0JBQUEsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekUsZ0JBQUEsT0FBTyxDQUFHLEVBQUEsUUFBUSxDQUFJLENBQUEsRUFBQSxRQUFRLEVBQUUsQ0FBQztBQUNsQyxhQUFBO1lBQ0QsT0FBTyxZQUFZLENBQUMsZUFBZSxDQUFDO0FBQ3JDLFNBQUE7QUFBQyxRQUFBLE9BQU8sS0FBSyxFQUFFO1lBQ2QsTUFBTSxDQUFDLElBQUksQ0FBQyxvREFBb0QsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDYixTQUFBO0tBQ0Y7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFrQixFQUFFLEtBQWlDLEVBQUE7O1FBRXBFLElBQUksTUFBTSxHQUFrQixJQUFJLENBQUM7QUFDakMsUUFBQSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQ3hCLFlBQUEsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzlCLFNBQUE7QUFBTSxhQUFBO1lBQ0wsTUFBTSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzlDLFNBQUE7UUFFRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTztBQUNSLFNBQUE7QUFFRCxRQUFBLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7O0FBUXBDLFFBQUEsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7QUFDdkMsUUFBQSxNQUFNLFNBQVMsR0FBRyxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFLEtBQUssVUFBVSxDQUFDLFdBQVcsRUFBRTtBQUNwRixjQUFFLFVBQVU7Y0FDVixVQUFVLENBQUM7UUFDZixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUM7O1FBRzlELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7Ozs7O1FBTXZELElBQUksQ0FBQyxPQUFPLEVBQUU7OztZQUdaLE1BQU0saUJBQWlCLEdBQUcsd0ZBQXdGLENBQUM7QUFDbkgsWUFBQSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRTtnQkFDdkMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNoQixhQUFBO0FBQ0YsU0FBQTs7QUFHRCxRQUFBLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ3JDLFlBQUEsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM1RSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsZUFBZSxDQUFDO1lBQzFELFlBQVksR0FBRyxLQUFLLENBQUM7QUFDdEIsU0FBQTtBQUFNLGFBQUE7O1lBRUwsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFekQsWUFBQSxJQUFJLFNBQVMsRUFBRTs7O2dCQUdiLElBQUksU0FBUyxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3ZELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBRztBQUMzQyx3QkFBQSxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hELHdCQUFBLE9BQU8sWUFBWTs4QkFDZixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQzs4QkFDekMsU0FBUyxDQUFDO0FBQ2hCLHFCQUFDLENBQUMsQ0FBQztBQUNILG9CQUFBLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hDLGlCQUFBO0FBQU0scUJBQUE7O0FBRUwsb0JBQUEsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakYsb0JBQUEsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7O0FBRzdFLG9CQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDOUQsb0JBQUEsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFekQsb0JBQUEsSUFBSSxZQUFZLEVBQUU7QUFDaEIsd0JBQUEsT0FBTyxHQUFHLG9CQUFvQixDQUM1QixJQUFJLENBQUMsR0FBRyxFQUNSLGNBQWMsRUFDZCxZQUFZLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FDckMsR0FBRyxDQUFJLENBQUEsRUFBQSxhQUFhLEdBQUcsR0FBRyxvQkFBb0IsQ0FDN0MsSUFBSSxDQUFDLEdBQUcsRUFDUixZQUFZLENBQ2IsQ0FBQztBQUNILHFCQUFBO0FBQU0seUJBQUE7d0JBQ0wsT0FBTyxHQUFHLEdBQUcsY0FBYyxDQUFBLENBQUEsRUFBSSxhQUFhLENBQUksQ0FBQSxFQUFBLFlBQVksRUFBRSxDQUFDO0FBQ2hFLHFCQUFBO0FBQ0YsaUJBQUE7QUFDRCxnQkFBQSxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLGFBQUE7QUFBTSxpQkFBQTtnQkFDTCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQzs7QUFHdkQsZ0JBQUEsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQsZ0JBQUEsTUFBTSxtQkFBbUIsR0FBRyw4QkFBOEIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkcsZ0JBQUEsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0JBQXdCLElBQUksT0FBTyxJQUFJLG1CQUFtQixJQUFJLE9BQU8sQ0FBQzs7OztnQkFLbEgsSUFBSSxPQUFPLElBQUksWUFBWSxFQUFFO0FBQzNCLG9CQUFBLElBQUksY0FBYyxFQUFFOztBQUVsQix3QkFBQSxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLENBQUM7d0JBQ3hGLE9BQU8sR0FBRyxRQUFRLENBQUM7QUFDbkIsd0JBQUEsWUFBWSxHQUFHLEtBQUssQ0FBQztBQUN0QixxQkFBQTtBQUFNLHlCQUFBOztBQUVMLHdCQUFBLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztBQUd6RSx3QkFBQSxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLENBQUM7O3dCQUd4RixPQUFPLEdBQUcsb0JBQW9CLENBQzVCLElBQUksQ0FBQyxHQUFHLEVBQ1IsUUFBUSxFQUNSLFlBQVksR0FBRyxTQUFTLEdBQUcsU0FBUyxDQUNyQyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7O3dCQUduQixZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLHFCQUFBO0FBQ0YsaUJBQUE7QUFBTSxxQkFBQSxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRTs7QUFFbkMsb0JBQUEsSUFBSSxjQUFjLEVBQUU7QUFDbEIsd0JBQUEsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxDQUFDO3dCQUN4RixPQUFPLEdBQUcsUUFBUSxDQUFDO0FBQ3BCLHFCQUFBO0FBQU0seUJBQUE7QUFDTCx3QkFBQSxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6RSx3QkFBQSxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLENBQUM7QUFDeEYsd0JBQUEsT0FBTyxHQUFHLENBQUcsRUFBQSxRQUFRLENBQUksQ0FBQSxFQUFBLFFBQVEsRUFBRSxDQUFDO0FBQ3JDLHFCQUFBO0FBQ0YsaUJBQUE7QUFBTSxxQkFBQTs7QUFFTCxvQkFBQSxPQUFPLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQztBQUN4QyxpQkFBQTs7QUFFRixhQUFBO0FBQ0YsU0FBQTtBQUVELFFBQUEsSUFBSSxZQUFZLEVBQUU7QUFDaEIsWUFBQSxPQUFPLEdBQUcsb0JBQW9CLENBQzVCLElBQUksQ0FBQyxHQUFHLEVBQ1IsT0FBTyxFQUNQLFlBQVksR0FBRyxTQUFTLEdBQUcsU0FBUyxDQUNyQyxDQUFDO0FBQ0gsU0FBQTtBQUVELFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBQSxNQUFNLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFDbEQsT0FBTztBQUNSLFNBQUE7QUFFRCxRQUFBLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBR25FLFFBQUEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0I7QUFDM0MsWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0I7QUFDN0MsWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUM5QixZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFHOztBQUVwRSxhQUFDLENBQUMsQ0FBQztBQUNKLFNBQUE7S0FDRjtBQUVELElBQUEsU0FBUyxDQUNQLE1BQXNCLEVBQ3RCLE1BQWMsRUFDZCxLQUFZLEVBQUE7UUFFWixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUU7QUFDOUMsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNiLFNBQUE7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQztBQUNyRSxRQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJO1lBQ3RDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtBQUNqQixZQUFBLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxNQUFNO1NBQ3JDLENBQUM7UUFFRixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUVoRCxRQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFO0FBQ3BDLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDYixTQUFBO0FBRUQsUUFBQSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUNuQztZQUNFLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtBQUNuQixZQUFBLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUM7U0FDcEIsRUFDRCxRQUFRLENBQ1QsQ0FBQzs7UUFHRixJQUFJLGFBQWEsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO0FBQ3ZELFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDYixTQUFBO1FBRUQsT0FBTztBQUNMLFlBQUEsS0FBSyxFQUFFLFFBQVE7QUFDZixZQUFBLEdBQUcsRUFBRSxNQUFNO0FBQ1gsWUFBQSxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7U0FDekUsQ0FBQztLQUNIO0FBRVMsSUFBQSxnQkFBZ0IsQ0FBQyxVQUFrQixFQUFBO0FBQzNDLFFBQUEsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksSUFBRztBQUNoRCxZQUFBLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQSxDQUFBLENBQUcsQ0FBQyxDQUFDO0FBQy9DLFNBQUMsQ0FBQyxDQUFDO0tBQ0o7Ozs7OztBQU9TLElBQUEsbUJBQW1CLENBQUMsVUFBa0IsRUFBQTtRQUM5QyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRTtBQUNqRCxZQUFBLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFlBQUEsTUFBTSxNQUFNLEdBQUcsQ0FBRyxFQUFBLFFBQVEsR0FBRyxDQUFDO0FBQzlCLFlBQUEsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNqQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDdEIsYUFBQTtBQUNGLFNBQUE7QUFDRCxRQUFBLE9BQU8sQ0FBQyxDQUFDO0tBQ1Y7QUFFUyxJQUFBLE1BQU0sQ0FBQyxXQUFxQixFQUFBO0FBQ3BDLFFBQUEsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVMsSUFBSSxFQUFFLEdBQUcsRUFBQTtZQUMxQyxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQzFDLFNBQUMsQ0FBQyxDQUFBO0tBQ0g7QUFDRjs7QUMveUJlLFNBQUEsZUFBZSxDQUFDLE1BQTRCLEVBQUUsSUFBWSxFQUFBO0FBQ3hFLElBQUEsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDakMsSUFBQSxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7O0lBRzFDLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDWCxPQUFPO0FBQ1IsS0FBQTtBQUNELElBQUEsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDOzs7Ozs7SUFNN0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFHdEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN0RCxJQUFBLElBQUksU0FBUyxFQUFFOztRQUViLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQzs7UUFHaEIsSUFBSSxTQUFTLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2RCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUc7QUFDM0MsZ0JBQUEsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLElBQUksSUFBSSxTQUFTLEVBQUU7b0JBQ3JCLE9BQU8sQ0FBQSxFQUFBLEVBQUssU0FBUyxDQUFBLEVBQUEsQ0FBSSxDQUFDO0FBQzNCLGlCQUFBO3FCQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRTtBQUN6QixvQkFBQSxPQUFPLENBQUksQ0FBQSxFQUFBLFNBQVMsQ0FBSyxFQUFBLEVBQUEsU0FBUyxHQUFHLENBQUM7QUFDdkMsaUJBQUE7QUFBTSxxQkFBQTs7Ozs7QUFLTCxvQkFBQSxPQUFPLFNBQVMsQ0FBQztBQUNsQixpQkFBQTtBQUNILGFBQUMsQ0FBQyxDQUFDO0FBQ0gsWUFBQSxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQixTQUFBO0FBQU0sYUFBQTs7QUFFTCxZQUFBLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUUsWUFBQSxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztBQUd4RSxZQUFBLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN6RCxZQUFBLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXpELElBQUksSUFBSSxJQUFJLFNBQVMsRUFBRTs7Z0JBRXJCLE1BQU0sR0FBRyxLQUFLLGNBQWMsQ0FBQSxHQUFBLEVBQU0sYUFBYSxDQUFNLEdBQUEsRUFBQSxZQUFZLElBQUksQ0FBQztBQUN2RSxhQUFBO2lCQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRTs7Z0JBRXpCLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQSxFQUFBLEVBQUssU0FBUyxDQUFDLGVBQWUsR0FBRyxDQUFDO0FBQzVELGFBQUE7aUJBQU0sSUFBSSxJQUFJLElBQUksT0FBTyxFQUFFOztnQkFFMUIsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFBLENBQUEsRUFBSSxhQUFhLENBQUksQ0FBQSxFQUFBLFlBQVksRUFBRSxDQUFDO0FBQy9ELGFBQUE7aUJBQU0sSUFBSSxJQUFJLElBQUksTUFBTSxFQUFFOztnQkFFekIsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFBLENBQUEsRUFBSSxhQUFhLENBQUksQ0FBQSxFQUFBLFlBQVksRUFBRSxDQUFDO0FBQy9ELGFBQUE7QUFDRixTQUFBO0FBRUQsUUFBQSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU87QUFDUixLQUFBOztJQUdELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFNUMsSUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRTs7UUFFMUIsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNmLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7QUFDZCxTQUFBLENBQUMsQ0FBQztRQUNILE9BQU87QUFDUixLQUFBOzs7SUFJRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7O0FBR3RELElBQUEsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEQsSUFBQSxNQUFNLG1CQUFtQixHQUFHLDhCQUE4QixDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3BHLElBQUEsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsSUFBSSxPQUFPLElBQUksbUJBQW1CLElBQUksT0FBTyxDQUFDO0lBRTdHLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUVoQixJQUFJLElBQUksSUFBSSxTQUFTLEVBQUU7O0FBRXJCLFFBQUEsSUFBSSxPQUFPLEVBQUU7QUFDVCxZQUFBLElBQUksY0FBYyxFQUFFOztBQUVoQixnQkFBQSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsQ0FBQztnQkFDM0UsTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUNyQixhQUFBO0FBQU0saUJBQUE7O0FBRUgsZ0JBQUEsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7QUFFNUQsZ0JBQUEsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLENBQUM7QUFFM0UsZ0JBQUEsTUFBTSxHQUFHLENBQUssRUFBQSxFQUFBLFFBQVEsQ0FBTSxHQUFBLEVBQUEsUUFBUSxFQUFFLENBQUM7QUFDMUMsYUFBQTtBQUNKLFNBQUE7QUFBTSxhQUFBOztBQUVILFlBQUEsTUFBTSxHQUFHLENBQUssRUFBQSxFQUFBLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQztBQUMxQyxTQUFBO0FBQ0YsS0FBQTtTQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRTs7UUFFekIsTUFBTSxHQUFHLElBQUksWUFBWSxDQUFBLEVBQUEsRUFBSyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUM7QUFDdkQsS0FBQTtTQUFNLElBQUksSUFBSSxJQUFJLE9BQU8sRUFBRTs7QUFFMUIsUUFBQSxNQUFNLEdBQUcsQ0FBRyxFQUFBLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUNwQyxLQUFBO1NBQU0sSUFBSSxJQUFJLElBQUksTUFBTSxFQUFFOztRQUV6QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzVDLFFBQUEsTUFBTSxHQUFHLENBQUcsRUFBQSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDcEMsS0FBQTtBQUVELElBQUEsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNuRCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakIsQ0FBQztTQUVlLG1CQUFtQixDQUNqQyxNQUE0QixFQUM1QixJQUFVLEVBQ1YsTUFBYyxFQUFBO0FBRWQsSUFBQSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNqQyxJQUFBLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUUxQyxJQUFBLElBQUksTUFBTSxFQUFFO0FBQ1YsUUFBQSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3RELEtBQUE7QUFDSCxDQUFDO0FBRUssU0FBVSxhQUFhLENBQUMsTUFBNEIsRUFBQTtJQUN4RCxNQUFNLE1BQU0sR0FBRyxDQUFHLEVBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUcsRUFBQSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBRyxFQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFBLENBQUUsQ0FBQztBQUNwRyxJQUFBLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDeEIsSUFBQSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFSyxTQUFVLHFCQUFxQixDQUFDLE1BQTRCLEVBQUE7QUFDaEUsSUFBQSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUN0QyxJQUFBLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDeEIsSUFBQSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFSyxTQUFVLHFCQUFxQixDQUFDLE1BQTRCLEVBQUE7QUFDaEUsSUFBQSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztBQUMxQyxJQUFBLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDeEIsSUFBQSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVDOztBQ3RKQSxNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztBQUM3QixNQUFNLFlBQVksR0FBRyxzQ0FBc0MsQ0FBQztBQUM1RCxNQUFNQyxrQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLFlBQVksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBRWhDLE1BQU8sY0FBYyxDQUFBO0FBUWpDLElBQUEsV0FBQSxDQUFZLE1BQWMsRUFBQTtRQU5sQixJQUFPLENBQUEsT0FBQSxHQUFxQixFQUFFLENBQUM7UUFDL0IsSUFBYSxDQUFBLGFBQUEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBb0IsQ0FBQSxvQkFBQSxHQUFhLEVBQUUsQ0FBQztRQUNwQyxJQUFVLENBQUEsVUFBQSxHQUFHLEtBQUssQ0FBQztBQUNuQixRQUFBLElBQUEsQ0FBQSxlQUFlLEdBQWtCLElBQUksQ0FBQztBQUc1QyxRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0tBQzdCO0FBRUQ7O0FBRUc7SUFDSyxvQkFBb0IsR0FBQTs7UUFFMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQUs7WUFDN0MsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDL0IsRUFBRUEsa0JBQWdCLENBQUMsQ0FBQztLQUN0QjtBQUVEOztBQUVHO0lBQ0gsbUJBQW1CLEdBQUE7QUFDakIsUUFBQSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxFQUFFO0FBQ2pDLFlBQUEsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDM0MsWUFBQSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztBQUM3QixTQUFBO0tBQ0Y7QUFFRDs7O0FBR0c7SUFDSyxzQkFBc0IsR0FBQTtBQUM1QixRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLE9BQU87QUFDUixTQUFBO0FBRUQsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7O1FBR3JELElBQUksV0FBVyxHQUFHLGdCQUFnQixFQUFFO1lBQ2xDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNuQixZQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsbURBQW1ELFdBQVcsQ0FBQSxHQUFBLEVBQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFBLFFBQUEsQ0FBVSxDQUFDLENBQUM7QUFDOUgsU0FBQTs7UUFHRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDcEI7QUFFRDs7Ozs7OztBQU9HO0FBQ0ssSUFBQSxjQUFjLENBQUMsR0FBWSxFQUFBO1FBQ2pDLE1BQU0sUUFBUSxHQUFxQixFQUFFLENBQUM7Ozs7OztBQU10QyxRQUFBLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDekQsWUFBQSxPQUFPLFFBQVEsQ0FBQztBQUNqQixTQUFBO0FBQ0QsUUFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdkIsUUFBQSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUE4QixDQUFDLEVBQUU7QUFDekUsWUFBQSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixnQkFBQSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxhQUFBO0FBQU0saUJBQUEsSUFDTCxLQUFLO2dCQUNMLE9BQU8sS0FBSyxLQUFLLFFBQVE7QUFDekIsZ0JBQUEsT0FBUSxLQUFzQixDQUFDLEtBQUssS0FBSyxRQUFRO0FBQ2pELGdCQUFBLE9BQVEsS0FBc0IsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUNwRDs7OztnQkFJQSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUc7b0JBQ2QsS0FBSyxFQUFHLEtBQXNCLENBQUMsS0FBSztvQkFDcEMsUUFBUSxFQUFHLEtBQXNCLENBQUMsUUFBUTtpQkFDM0MsQ0FBQztBQUNILGFBQUE7OztBQUdGLFNBQUE7QUFDRCxRQUFBLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0FBRUQ7OztBQUdHO0lBQ0ssWUFBWSxDQUFDLEtBQW1CLEVBQUUsR0FBVyxFQUFBO0FBQ25ELFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoRCxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssR0FBRyxZQUFZLENBQUMsQ0FBQztBQUNsRCxRQUFBLE9BQU8sS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7S0FDNUI7QUFFRDs7QUFFRztBQUNILElBQUEsTUFBTSxXQUFXLEdBQUE7UUFDZixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsT0FBTztBQUNSLFNBQUE7UUFFRCxJQUFJO1lBQ0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUNsRCxNQUFNLElBQUksR0FBRzdILHdCQUFhLENBQUMsQ0FBQSxFQUFHLFNBQVMsQ0FBSSxDQUFBLEVBQUEsWUFBWSxDQUFFLENBQUEsQ0FBQyxDQUFDO0FBQzNELFlBQUEsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRSxZQUFBLElBQUksTUFBTSxFQUFFO0FBQ1YsZ0JBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1RCxnQkFBQSxJQUFJLElBQUksRUFBRTtvQkFDUixNQUFNLE1BQU0sR0FBWSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pDLG9CQUFBLElBQUksTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTt3QkFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLHFCQUFBO0FBQ0YsaUJBQUE7QUFDRixhQUFBO0FBQ0YsU0FBQTtBQUFDLFFBQUEsT0FBTyxLQUFLLEVBQUU7Ozs7OztZQU1kLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELFlBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDbkIsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7S0FDM0I7QUFFRDs7QUFFRztBQUNILElBQUEsTUFBTSxXQUFXLEdBQUE7UUFDZixJQUFJO1lBQ0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUNsRCxNQUFNLElBQUksR0FBR0Esd0JBQWEsQ0FBQyxDQUFBLEVBQUcsU0FBUyxDQUFJLENBQUEsRUFBQSxZQUFZLENBQUUsQ0FBQSxDQUFDLENBQUM7QUFDM0QsWUFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7O0FBR3JELFlBQUEsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2QsZ0JBQUEsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRCxhQUFBO1lBRUQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLFNBQUE7QUFBQyxRQUFBLE9BQU8sS0FBSyxFQUFFO1lBQ2QsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDbEQsU0FBQTtLQUNGO0FBRUQ7OztBQUdHO0FBQ0ssSUFBQSxtQkFBbUIsQ0FBQyxVQUFrQixFQUFBO1FBQzVDLElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDMUMsWUFBQSxPQUFPLFVBQVUsQ0FBQztBQUNuQixTQUFBO0FBRUQsUUFBQSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEMsUUFBQSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3hCLFlBQUEsT0FBTyxPQUFPLENBQUM7QUFDaEIsU0FBQTs7Ozs7Ozs7QUFTRCxRQUFBLE9BQU8sT0FBTzthQUNYLEtBQUssQ0FBQyxLQUFLLENBQUM7YUFDWixHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUN2RSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDZDtBQUVEOztBQUVHO0lBQ0gsTUFBTSxlQUFlLENBQUMsVUFBa0IsRUFBQTtBQUN0QyxRQUFBLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDOztRQUd6QixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFbkQsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLE9BQU87QUFDUixTQUFBOztRQUdELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDMUMsUUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHO1lBQ3pCLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDakMsWUFBQSxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtTQUNyQixDQUFDOztBQUdGLFFBQUEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLEVBQUU7WUFDdkQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3BCLFNBQUE7O1FBR0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDOztRQUduQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBWSxLQUFJO1lBQ3hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN4RCxTQUFDLENBQUMsQ0FBQztLQUNKO0FBRUQ7OztBQUdHO0lBQ0ssV0FBVyxHQUFBO0FBQ2pCLFFBQUEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztBQUc3QyxRQUFBLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7O1FBR3BGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzVDO0FBRUQ7O0FBRUc7QUFDSCxJQUFBLE1BQU0sVUFBVSxHQUFBO0FBQ2QsUUFBQSxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDcEI7QUFFRDs7O0FBR0c7SUFDSyxXQUFXLEdBQUE7QUFDakIsUUFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7O0FBRzdDLFFBQUEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzs7QUFHcEYsUUFBQSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FDaEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUNyQyxDQUFDO0FBQ0YsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztLQUN4QjtBQUVEOzs7QUFHRztJQUNILHFCQUFxQixDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUE7QUFDOUIsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTs7O0FBR3BCLFlBQUEsT0FBTyxFQUFFLENBQUM7QUFDWCxTQUFBO1FBQ0QsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNsRDtBQUVEOzs7QUFHRztBQUNILElBQUEsTUFBTSxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsRUFBRSxFQUFBO0FBQ2hDLFFBQUEsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbEQ7QUFFRDs7QUFFRztBQUNILElBQUEsTUFBTSxZQUFZLEdBQUE7QUFDaEIsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNsQixRQUFBLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN2QixRQUFBLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQzFCO0FBRUQ7Ozs7OztBQU1HO0lBQ0gsTUFBTSxXQUFXLENBQUMsVUFBa0IsRUFBQTtBQUNsQyxRQUFBLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXpCLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuRCxJQUFJLEVBQUUsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNqQyxPQUFPO0FBQ1IsU0FBQTtBQUVELFFBQUEsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUVuQixRQUFBLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQzFCO0FBRUQ7Ozs7Ozs7QUFPRztBQUNILElBQUEsTUFBTSx1QkFBdUIsR0FBQTtBQUMzQixRQUFBLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBRXpCLFFBQUEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFFBQUEsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDaEMsYUFBQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQzNFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3RCLEdBQUc7QUFDSCxZQUFBLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDO1lBQ3RDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztZQUNsQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7QUFDekIsU0FBQSxDQUFDLENBQUMsQ0FBQztLQUNQO0FBRUQ7O0FBRUc7SUFDSCxPQUFPLEdBQUE7UUFDTCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztLQUM1QjtBQUVEOztBQUVHO0FBQ0gsSUFBQSxNQUFNLFVBQVUsR0FBQTtBQUNkLFFBQUEsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDekIsUUFBQSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDNUI7QUFDRjs7QUNyWEQ7QUFDQTtBQUNBO0FBQ0EsU0FBUyxVQUFVLENBQUMsR0FBVyxFQUFBO0lBQzdCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUNoQixJQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25DLFFBQUEsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyRCxLQUFBO0FBQ0QsSUFBQSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7QUFDaEMsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBQzNCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQztBQUMzQixNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQVNqQixNQUFPLGVBQWUsQ0FBQTtJQVNsQyxXQUFZLENBQUEsR0FBUSxFQUFFLE1BQTRCLEVBQUE7QUFMMUMsUUFBQSxJQUFBLENBQUEsZUFBZSxHQUFrQixJQUFJLENBQUM7O1FBR3RDLElBQVksQ0FBQSxZQUFBLEdBQWEsRUFBRSxDQUFDO0FBR2xDLFFBQUEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDZixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQXNCLGNBQWMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0tBQzdCO0FBRUQ7O0FBRUc7SUFDSyxvQkFBb0IsR0FBQTs7UUFFMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQUs7WUFDN0MsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7U0FDOUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ3RCO0FBRUQ7O0FBRUc7SUFDSCxtQkFBbUIsR0FBQTtBQUNqQixRQUFBLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLEVBQUU7QUFDakMsWUFBQSxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMzQyxZQUFBLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFNBQUE7S0FDRjtBQUVEOztBQUVHO0lBQ0sscUJBQXFCLEdBQUE7QUFDM0IsUUFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxZQUFZLEdBQWEsRUFBRSxDQUFDOztBQUdsQyxRQUFBLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQy9DLFlBQUEsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLElBQUksYUFBYSxFQUFFO0FBQzlELGdCQUFBLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsYUFBQTtBQUNGLFNBQUE7O0FBR0QsUUFBQSxLQUFLLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRTtBQUM5QixZQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLFNBQUE7QUFFRCxRQUFBLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBLGdDQUFBLEVBQW1DLFlBQVksQ0FBQyxNQUFNLENBQXFCLG1CQUFBLENBQUEsQ0FBQyxDQUFDO0FBQzNGLFNBQUE7S0FDRjtBQUVEOztBQUVHO0lBQ0ssc0JBQXNCLEdBQUE7QUFDNUIsUUFBQSxNQUFNLEVBQUUsR0FBRyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBRXBFLFFBQUEsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuRyxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0YsUUFBQSxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckgsUUFBQSxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEUsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9GLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVwRyxRQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztRQWtCdkIsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQztRQUNqRCxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDOztBQUc3QyxRQUFBLElBQUksY0FBYyxFQUFFO0FBQ2xCLFlBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQSxFQUFHLGtCQUFrQixDQUFJLENBQUEsRUFBQSxjQUFjLElBQUksaUJBQWlCLENBQUEsQ0FBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUcsU0FBQTs7QUFHRCxRQUFBLElBQUksZUFBZSxFQUFFO0FBQ25CLFlBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQSxFQUFHLGtCQUFrQixDQUFJLENBQUEsRUFBQSxlQUFlLElBQUksaUJBQWlCLENBQUEsQ0FBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0csU0FBQTs7UUFHRCxJQUFJLFNBQVMsSUFBSSxlQUFlLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBRyxFQUFBLGtCQUFrQixPQUFPLFNBQVMsQ0FBQSxnQkFBQSxFQUFtQixlQUFlLENBQUssRUFBQSxFQUFBLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzSSxTQUFBOzs7Ozs7QUFPRCxRQUFBLElBQUksYUFBYSxFQUFFO0FBQ2pCLFlBQUEsSUFBSSxjQUFjLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUcsRUFBQSxrQkFBa0IsT0FBTyxhQUFhLENBQUEsUUFBQSxFQUFXLGNBQWMsQ0FBSyxFQUFBLEVBQUEsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RJLGFBQUE7QUFDRCxZQUFBLElBQUksZUFBZSxFQUFFO2dCQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFHLEVBQUEsa0JBQWtCLE9BQU8sYUFBYSxDQUFBLFFBQUEsRUFBVyxlQUFlLENBQUssRUFBQSxFQUFBLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2SSxhQUFBO0FBQ0YsU0FBQTtLQUNGO0FBRUQ7O0FBRUc7SUFDSCxhQUFhLEdBQUE7UUFDWCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztBQUM5QixRQUFBLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztLQUNuQjtBQUVEOztBQUVHO0lBQ0gsT0FBTyxHQUFBO1FBQ0wsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0tBQ25CO0FBRUQ7O0FBRUc7SUFDSCxrQkFBa0IsQ0FBQyxNQUFjLEVBQUUsVUFBa0IsRUFBQTtBQUNuRCxRQUFBLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDUyx1QkFBWSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNmLFlBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDaEUsU0FBQTtBQUVELFFBQUEsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ1QsWUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUNoRSxTQUFBO0FBRUQsUUFBQSxNQUFNLE9BQU8sR0FBZ0I7QUFDM0IsWUFBQSxjQUFjLEVBQUUsRUFBRTtBQUNsQixZQUFBLElBQUksRUFBRSxFQUFFO0FBQ1IsWUFBQSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtTQUN0QixDQUFDO1FBRUYsSUFBSTs7QUFFRixZQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRWxDLFlBQUEsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxHQUFHLGFBQWEsQ0FBQyxDQUFDO0FBQzFELFlBQUEsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsYUFBYSxDQUFDLENBQUM7QUFFdkUsWUFBQSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekQsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Ozs7OztBQVE1QyxZQUFBLE1BQU0sUUFBUSxHQUFHLENBQUcsRUFBQSxJQUFJLENBQUMsSUFBSSxDQUFBLENBQUEsRUFBSSxVQUFVLENBQUEsQ0FBQSxFQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3pFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hDLFlBQUEsSUFBSSxNQUFNLEVBQUU7O0FBRVYsZ0JBQUEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLGdCQUFBLElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxLQUFLLGFBQWEsRUFBRTtBQUNqRSxvQkFBQSxPQUFPLE1BQU0sQ0FBQztBQUNmLGlCQUFBO0FBQU0scUJBQUE7O0FBRUwsb0JBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0IsaUJBQUE7QUFDRixhQUFBOztBQUdELFlBQUEsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNELFlBQUEsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFO0FBQ2pCLG9CQUFBLE9BQU8sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxpQkFBQTs7OztnQkFLRCxJQUFJLE9BQU8sUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssUUFBUSxFQUFFO29CQUNuRCxPQUFPLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0FBQzVDLGlCQUFBO3FCQUFNLElBQUksUUFBUSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQzVELE9BQU8sQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDOUMsaUJBQUE7QUFDRixhQUFBOztZQUdELE9BQU8sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDOztZQUduRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFbkMsU0FBQTtBQUFDLFFBQUEsT0FBTyxLQUFLLEVBQUU7WUFDZCxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNyRCxTQUFBO0FBRUQsUUFBQSxPQUFPLE9BQU8sQ0FBQztLQUNoQjtBQUVEOztBQUVHO0lBQ0gsY0FBYyxDQUFDLE1BQWMsRUFBRSxVQUFrQixFQUFBO0FBQy9DLFFBQUEsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztLQUNyRTtBQUVEOzs7QUFHRztBQUNLLElBQUEsYUFBYSxDQUFDLE9BQWUsRUFBQTtRQUNuQyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3BDLFlBQUEsT0FBTyxPQUFPLENBQUM7QUFDaEIsU0FBQTtBQUVELFFBQUEsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9CLFFBQUEsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN4QixZQUFBLE9BQU8sT0FBTyxDQUFDO0FBQ2hCLFNBQUE7Ozs7OztBQU9ELFFBQUEsT0FBTyxPQUFPO2FBQ1gsS0FBSyxDQUFDLEtBQUssQ0FBQzthQUNaLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3ZFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNkO0FBRUQ7OztBQUdHO0FBQ0ssSUFBQSx1QkFBdUIsQ0FBQyxJQUFZLEVBQUE7UUFDMUMsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0FBQzNCLFFBQUEsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQzs7QUFHL0IsUUFBQSxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Ozs7WUFJdkMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQzFDLGdCQUFBLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixnQkFBQSxJQUFJLE9BQU8sRUFBRTs7b0JBRVgsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hELG9CQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLEVBQUU7QUFDaEUsd0JBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQzs7QUFFckIsd0JBQUEsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEQscUJBQUE7QUFDRixpQkFBQTtBQUNGLGFBQUE7QUFDRixTQUFBO0FBRUQsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNkO0FBRUQ7O0FBRUc7SUFDSCxVQUFVLEdBQUE7QUFDUixRQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7S0FDcEI7QUFFRDs7QUFFRztJQUNILGFBQWEsR0FBQTtRQUNYLE9BQU87QUFDTCxZQUFBLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7QUFDckIsWUFBQSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZO1NBQ2pDLENBQUM7S0FDSDtBQUNGOztBQzFVRDs7QUFFRztBQUNHLE1BQU8sYUFBYyxTQUFRLEtBQUssQ0FBQTtBQUt0QyxJQUFBLFdBQUEsQ0FDRSxPQUFlLEVBQ2YsSUFBWSxFQUNaLFFBQXVDLEdBQUEsT0FBTyxFQUM5QyxPQUFpQixFQUFBO1FBRWpCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNmLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7QUFDNUIsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7O1FBR3ZCLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQzNCLFlBQUEsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztBQUM5QyxTQUFBO0tBQ0Y7QUFDRixDQUFBO0FBRUQ7O0FBRUc7QUFDSSxNQUFNLFVBQVUsR0FBRzs7QUFFeEIsSUFBQSxrQkFBa0IsRUFBRSxvQkFBb0I7QUFDeEMsSUFBQSxrQkFBa0IsRUFBRSxvQkFBb0I7O0FBR3hDLElBQUEsWUFBWSxFQUFFLGNBQWM7QUFDNUIsSUFBQSxrQkFBa0IsRUFBRSxvQkFBb0I7O0FBR3hDLElBQUEsb0JBQW9CLEVBQUUsc0JBQXNCO0FBQzVDLElBQUEsZ0JBQWdCLEVBQUUsa0JBQWtCO0NBQzVCOztBQ3RCVyxNQUFBLG9CQUFxQixTQUFRcUgsaUJBQU0sQ0FBQTtBQUF4RCxJQUFBLFdBQUEsR0FBQTs7UUFLVSxJQUF3QixDQUFBLHdCQUFBLEdBQWtCLElBQUksQ0FBQztBQUN0QyxRQUFBLElBQUEsQ0FBQSwwQkFBMEIsR0FBRyxNQUFNLENBQUM7S0FtZ0J0RDtBQWpnQkMsSUFBQSxNQUFNLE1BQU0sR0FBQTtBQUNWLFFBQUEsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7O1FBRzFCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7UUFHbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyxRQUFBLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzs7UUFHM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFZLEtBQUk7WUFDdEQsTUFBTSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzdELFNBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNkLFlBQUEsRUFBRSxFQUFFLFdBQVc7QUFDZixZQUFBLElBQUksRUFBRSw2QkFBNkI7WUFDbkMsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7QUFDakQsU0FBQSxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ2QsWUFBQSxFQUFFLEVBQUUsZ0JBQWdCO0FBQ3BCLFlBQUEsSUFBSSxFQUFFLHVDQUF1QztZQUM3QyxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztBQUM5QyxTQUFBLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUM7QUFDZCxZQUFBLEVBQUUsRUFBRSxnQkFBZ0I7QUFDcEIsWUFBQSxJQUFJLEVBQUUsNkNBQTZDO1lBQ25ELFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO0FBQy9DLFNBQUEsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNkLFlBQUEsRUFBRSxFQUFFLGdCQUFnQjtBQUNwQixZQUFBLElBQUksRUFBRSw2QkFBNkI7WUFDbkMsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7QUFDOUMsU0FBQSxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ2QsWUFBQSxFQUFFLEVBQUUsU0FBUztBQUNiLFlBQUEsSUFBSSxFQUFFLGtDQUFrQztBQUN4QyxZQUFBLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUM7QUFDcEMsU0FBQSxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ2QsWUFBQSxFQUFFLEVBQUUsV0FBVztBQUNmLFlBQUEsSUFBSSxFQUFFLHlCQUF5QjtBQUMvQixZQUFBLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDLElBQUksQ0FBQztBQUM1QyxTQUFBLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUM7QUFDZCxZQUFBLEVBQUUsRUFBRSxVQUFVO0FBQ2QsWUFBQSxJQUFJLEVBQUUseUJBQXlCO0FBQy9CLFlBQUEsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUMsSUFBSSxDQUFDO0FBQzVDLFNBQUEsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNkLFlBQUEsRUFBRSxFQUFFLFlBQVk7QUFDaEIsWUFBQSxJQUFJLEVBQUUsYUFBYTtBQUNuQixZQUFBLGFBQWEsRUFBRSxDQUFDLFFBQWlCLEtBQUk7QUFDbkMsZ0JBQUEsSUFBSSxRQUFRLEVBQUU7b0JBQ1osT0FBTyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUMsaUJBQUE7Z0JBQ0QsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUM1QztBQUNGLFNBQUEsQ0FBQyxDQUFDO0FBRUgsUUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2RCxRQUFBLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxTQUFTLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0RixRQUFBLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7O1FBRzVELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0tBQzlCO0lBRUQsV0FBVyxHQUFBO1FBQ1QsSUFBSTtBQUNGLFlBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JELFlBQUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDekYsU0FBQTtBQUFDLFFBQUEsT0FBTyxLQUFLLEVBQUU7QUFDZCxZQUFBLE1BQU0sVUFBVSxHQUFHLEtBQUssWUFBWSxhQUFhO0FBQy9DLGtCQUFFLEtBQUs7a0JBQ0wsSUFBSSxhQUFhLENBQ2YsNkJBQTZCLEVBQzdCLFVBQVUsQ0FBQyxrQkFBa0IsRUFDN0IsT0FBTyxFQUNQLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FDN0QsQ0FBQztBQUVOLFlBQUEsTUFBTSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRTtnQkFDMUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO2dCQUNyQixLQUFLLEVBQUUsVUFBVSxDQUFDLE9BQU87Z0JBQ3pCLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztBQUM1QixhQUFBLENBQUMsQ0FBQzs7WUFHSCxJQUFJO2dCQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLGdCQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsMENBQTBDLENBQUMsQ0FBQzs7QUFHeEQsZ0JBQUEsSUFBSUMsaUJBQU0sQ0FDUixrR0FBa0csRUFDbEcsSUFBSSxDQUNMLENBQUM7QUFDSCxhQUFBO0FBQUMsWUFBQSxPQUFPLGFBQWEsRUFBRTtnQkFDdEIsTUFBTSxDQUFDLEtBQUssQ0FBQyx3REFBd0QsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO0FBQ2pHLGdCQUFBLElBQUlBLGlCQUFNLENBQ1IsaUdBQWlHLEVBQ2pHLEtBQUssQ0FDTixDQUFDO0FBQ0gsYUFBQTtBQUNGLFNBQUE7O1FBR0QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO0FBQ3hCLFlBQUEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUN0QyxTQUFBO0tBQ0Y7SUFFRCxRQUFRLEdBQUE7O1FBRU4sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7O1FBRzVCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtBQUN4QixZQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDaEMsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUN2QixZQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDL0IsU0FBQTtLQUNGO0FBRUQ7O0FBRUc7SUFDSyxxQkFBcUIsR0FBQTs7UUFFM0IsSUFBSSxDQUFDLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBSztZQUN0RCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDeEIsU0FBQyxFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDOztRQUdwQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7S0FDdkI7QUFFRDs7QUFFRztJQUNLLG9CQUFvQixHQUFBO0FBQzFCLFFBQUEsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEtBQUssSUFBSSxFQUFFO0FBQzFDLFlBQUEsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUNwRCxZQUFBLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7QUFDdEMsU0FBQTtLQUNGO0FBRUQ7O0FBRUc7SUFDSyxjQUFjLEdBQUE7UUFDcEIsSUFBSTtZQUNGLE1BQU0sS0FBSyxHQUlQLEVBQUUsQ0FBQzs7WUFHUCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2YsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQ2xELGFBQUE7O1lBR0QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUN4QixLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDM0QsYUFBQTs7WUFHRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBRztvQkFDOUMsS0FBSyxDQUFDLE9BQU8sR0FBRzt3QkFDZCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNO3dCQUNqQyxPQUFPLEVBQUUsR0FBRztxQkFDYixDQUFDO0FBRUYsb0JBQUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4RCxpQkFBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBWSxLQUFJO29CQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLDBEQUEwRCxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7O29CQUV4RixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNqQyx3QkFBQSxNQUFNLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELHFCQUFBO0FBQ0gsaUJBQUMsQ0FBQyxDQUFDO0FBQ0osYUFBQTtBQUFNLGlCQUFBO2dCQUNMLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2pDLG9CQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkQsaUJBQUE7QUFDRixhQUFBO0FBQ0YsU0FBQTtBQUFDLFFBQUEsT0FBTyxLQUFLLEVBQUU7WUFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNuRSxTQUFBO0tBQ0Y7QUFFRCxJQUFBLE1BQU0sWUFBWSxHQUFBO0FBQ2hCLFFBQUEsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFpQyxDQUFDO0FBQ3hFLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsQ0FBQzs7QUFHaEUsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNwRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0QsU0FBQTs7UUFHRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztLQUMxQjs7SUFHTyxpQkFBaUIsR0FBQTtBQUN2QixRQUFBLE1BQU0sV0FBVyxHQUF5QztBQUN4RCxZQUFBLElBQUksRUFBRSxTQUFTO0FBQ2YsWUFBQSxJQUFJLEVBQUUsVUFBVTtBQUNoQixZQUFBLElBQUksRUFBRSxRQUFRO0FBQ2QsWUFBQSxJQUFJLEVBQUUsUUFBUTtBQUNkLFlBQUEsSUFBSSxFQUFFLFlBQVk7QUFDbEIsWUFBQSxJQUFJLEVBQUUsT0FBTztBQUNiLFlBQUEsSUFBSSxFQUFFLFNBQVM7QUFDZixZQUFBLElBQUksRUFBRSxTQUFTO0FBQ2YsWUFBQSxJQUFJLEVBQUUsU0FBUztBQUNmLFlBQUEsSUFBSSxFQUFFLFdBQVc7QUFDakIsWUFBQSxTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDOztBQUdGLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQzlCLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQy9CLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzdCLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzdCLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ2pDLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzVCLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQzlCLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQzlCLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQzlCLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDOztRQUc5QixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO0FBQzFDLFlBQUEsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFlBQUEsSUFBSSxPQUFPLEVBQUU7QUFDVixnQkFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBYSxHQUFHLElBQUksQ0FBQztBQUM1QyxhQUFBO0FBQ0YsU0FBQTtLQUNGO0FBRUQsSUFBQSxNQUFNLFlBQVksR0FBQTtRQUNoQixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3BDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCRztJQUNILEtBQUssQ0FBQyxVQUFrQixFQUFFLE1BQWMsRUFBQTtBQUN0QyxRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFOztZQUVoQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDcEIsU0FBQTs7QUFHRCxRQUFBLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQsUUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFO0FBQzNCLFlBQUEsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQzs7QUFFcEYsWUFBQSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO0FBQ2xDLFNBQUE7O1FBR0QsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7O0FBRXhELFlBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsT0FBTztBQUNMLGdCQUFBLGVBQWUsRUFBRSxjQUFjO0FBQy9CLGdCQUFBLElBQUksRUFBRSxXQUFXO0FBQ2pCLGdCQUFBLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDO2FBQzVCLENBQUM7QUFDSCxTQUFBO0FBRUQsUUFBQSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRixNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzRCxJQUFJLGVBQWUsS0FBSyxjQUFjLEVBQUU7WUFDdEMsTUFBTSxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZGLFNBQUE7UUFFRCxPQUFPO1lBQ0wsZUFBZTtZQUNmLElBQUk7QUFDSixZQUFBLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDO1NBQ3JCLENBQUM7S0FDSDtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkc7QUFDSCxJQUFBLFNBQVMsQ0FBQyxVQUFrQixFQUFBOztRQUUxQixNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUM1RCxZQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLE9BQU87QUFDTCxnQkFBQSxlQUFlLEVBQUUsY0FBYztBQUMvQixnQkFBQSxJQUFJLEVBQUUsV0FBVztBQUNqQixnQkFBQSxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQzthQUM1QixDQUFDO0FBQ0gsU0FBQTs7UUFHRCxNQUFNLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEUsUUFBQSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFO1lBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7O1lBRXBILElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztBQUNoRCxTQUFBOztRQUdELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDN0QsUUFBQSxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQzs7QUFHdkMsUUFBQSxJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQzs7QUFHdkQsWUFBQSxNQUFNLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzlELFlBQUEsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRTtBQUMvQixnQkFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQzs7QUFFMUcsZ0JBQUEsV0FBVyxHQUFHLENBQUEsRUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQSxDQUFBLEVBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFBLENBQUUsQ0FBQztBQUN4RSxhQUFBO0FBQU0saUJBQUE7Ozs7O0FBTUwsZ0JBQUEsV0FBVyxHQUFHLENBQUcsRUFBQSxXQUFXLENBQUksQ0FBQSxFQUFBLFVBQVUsRUFBRSxDQUFDO0FBQzlDLGFBQUE7QUFDRixTQUFBO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdkQsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNmO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEJHO0FBQ0gsSUFBQSxjQUFjLENBQUMsVUFBa0IsRUFBQTtBQUMvQixRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNwQixTQUFBOztRQUdELE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDYixTQUFBO0FBRUQsUUFBQSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDaEY7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JHO0FBQ0gsSUFBQSxTQUFTLENBQUMsVUFBa0IsRUFBQTs7UUFFMUIsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDNUQsWUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQyxPQUFPO0FBQ0wsZ0JBQUEsZUFBZSxFQUFFLGNBQWM7QUFDL0IsZ0JBQUEsSUFBSSxFQUFFLFdBQVc7QUFDakIsZ0JBQUEsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUM7YUFDNUIsQ0FBQztBQUNILFNBQUE7O1FBR0QsTUFBTSxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzVFLFFBQUEsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRTtZQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDOztZQUV4SCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2hFLFNBQUE7QUFFRCxRQUFBLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUM3RDtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JHO0FBQ0gsSUFBQSxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUE7QUFDM0IsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDcEIsU0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMzQztJQUVELE1BQU0sYUFBYSxDQUFDLE1BQTRCLEVBQUE7QUFDOUMsUUFBQSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQzs7UUFHL0IsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ1IsWUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLE9BQU87QUFDUixTQUFBO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsQ0FBQztBQUVyRCxRQUFBLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN6QixNQUFNLFNBQVMsR0FBRyxNQUFNLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxRCxNQUFNLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RELFNBQUE7S0FDRjtBQUNGOzs7OyJ9 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL29ic2lkaWFuLWRhaWx5LW5vdGVzLWludGVyZmFjZS9kaXN0L21haW4uanMiLCJzcmMvd2luZG93LW1vbWVudC50cyIsInNyYy9kYXRlLWZvcm1hdHRlci50cyIsIm5vZGVfbW9kdWxlcy9yb2RkZWgtaTE4bi9kaXN0L2kxOG4uanMiLCJzcmMvbGFuZy9lbi50cyIsInNyYy9sYW5nL2phLnRzIiwic3JjL2xhbmcvZnIudHMiLCJzcmMvbGFuZy9wdC50cyIsInNyYy9sYW5nL2RlLnRzIiwic3JjL2xhbmcvbmwudHMiLCJzcmMvbGFuZy9lcy50cyIsInNyYy9sYW5nL2l0LnRzIiwic3JjL2xhbmcvcnUudHMiLCJzcmMvbGFuZy91ay50cyIsInNyYy9sYW5nL3poLnRzIiwic3JjL2xhbmcva28udHMiLCJzcmMvbGFuZy9oZWxwZXIudHMiLCJzcmMvdHJhbnNsYXRpb24tY29sbGVjdG9yLnRzIiwic3JjL3V0aWxzLnRzIiwic3JjL21vZGFscy9oaXN0b3J5LW1hbmFnZXItbW9kYWwudHMiLCJzcmMvc2V0dGluZ3MudHMiLCJzcmMvbW9kYWxzL2RhdGUtcGlja2VyLnRzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3R5cGVzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3V0aWxzL2RhdGVzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3RpbWV6b25lLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3Jlc3VsdHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vdXRpbHMvcGF0dGVybi5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jYWxjdWxhdGlvbi95ZWFycy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5Nb250aE5hbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOWWVhck1vbnRoRGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5UaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9hYnN0cmFjdFJlZmluZXJzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3JlZmluZXJzL0VOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NhbGN1bGF0aW9uL21lcmdpbmdDYWxjdWxhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3JlZmluZXJzL0VOTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3JlZmluZXJzL0V4dHJhY3RUaW1lem9uZUFiYnJSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9PdmVybGFwUmVtb3ZhbFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY2FsY3VsYXRpb24vd2Vla2RheXMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3JlZmluZXJzL0ZvcndhcmREYXRlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcmVmaW5lcnMvVW5saWtlbHlGb3JtYXRGaWx0ZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbmZpZ3VyYXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTkNhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5XZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTlJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3JlZmluZXJzL0VOTWVyZ2VSZWxhdGl2ZUFmdGVyRGF0ZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9yZWZpbmVycy9FTk1lcmdlUmVsYXRpdmVGb2xsb3dCeURhdGVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcmVmaW5lcnMvRU5FeHRyYWN0WWVhclN1ZmZpeFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9yZWZpbmVycy9FTlVubGlrZWx5Rm9ybWF0RmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vY29uZmlndXJhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jaHJvbm8uanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcGFyc2Vycy9ERVNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9kZS9yZWZpbmVycy9ERU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3JlZmluZXJzL0RFTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9kZS9wYXJzZXJzL0RFQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcGFyc2Vycy9ERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcGFyc2Vycy9ERVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3BhcnNlcnMvRlJDYXN1YWxUaW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcGFyc2Vycy9GUlRpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcmVmaW5lcnMvRlJNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3JlZmluZXJzL0ZSTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcGFyc2Vycy9GUldlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3BhcnNlcnMvRlJNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcGFyc2Vycy9KUFN0YW5kYXJkUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcmVmaW5lcnMvSlBNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9wYXJzZXJzL0pQQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3BhcnNlcnMvSlBXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcGFyc2Vycy9KUFNsYXNoRGF0ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3BhcnNlcnMvSlBUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3JlZmluZXJzL0pQTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9yZWZpbmVycy9KUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9wYXJzZXJzL0pQV2Vla2RheVdpdGhQYXJlbnRoZXNlc1BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcGFyc2Vycy9QVFdlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9wYXJzZXJzL1BUVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9yZWZpbmVycy9QVE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcmVmaW5lcnMvUFRNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9wYXJzZXJzL1BUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcGFyc2Vycy9QVENhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9wYXJzZXJzL1BUQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3B0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcmVmaW5lcnMvTkxNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9yZWZpbmVycy9OTE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcGFyc2Vycy9OTENhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcGFyc2Vycy9OTE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxNb250aE5hbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MU2xhc2hNb250aEZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MQ2FzdWFsRGF0ZVRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFucy9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvcGFyc2Vycy9aSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvcGFyc2Vycy9aSEhhbnNSZWxhdGlvbldlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcGFyc2Vycy9aSEhhbnRDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFudC9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50RGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcGFyc2Vycy9aSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcGFyc2Vycy9aSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50V2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFudC9yZWZpbmVycy9aSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvcmVmaW5lcnMvWkhIYW5zTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFucy9yZWZpbmVycy9aSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcGFyc2Vycy9SVU1vbnRoTmFtZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3JlZmluZXJzL1JVTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcmVmaW5lcnMvUlVNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcGFyc2Vycy9SVUNhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcGFyc2Vycy9FU1dlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9wYXJzZXJzL0VTVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9yZWZpbmVycy9FU01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcmVmaW5lcnMvRVNNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9wYXJzZXJzL0VTTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcGFyc2Vycy9FU0Nhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9wYXJzZXJzL0VTQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VzL3BhcnNlcnMvRVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9wYXJzZXJzL1VLTW9udGhOYW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcmVmaW5lcnMvVUtNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9yZWZpbmVycy9VS01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS0Nhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9wYXJzZXJzL1VLQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1JlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRNb250aE5hbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVFNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3JlZmluZXJzL0lUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcmVmaW5lcnMvSVRNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVENhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3JlZmluZXJzL0lUTWVyZ2VSZWxhdGl2ZURhdGVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9wYXJzZXJzL1NWV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3N2L3BhcnNlcnMvU1ZNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9wYXJzZXJzL1NWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3N2L3BhcnNlcnMvU1ZDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvc3YvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklDYXN1YWxUaW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZmkvcGFyc2Vycy9GSUNhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9yZWZpbmVycy9GSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3JlZmluZXJzL0ZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklTdGFuZGFyZFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklNb250aFllYXJQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9wYXJzZXJzL1ZJWWVhclBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSUNhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9wYXJzZXJzL1ZJV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9yZWZpbmVycy9WSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3JlZmluZXJzL1ZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9yZWZpbmVycy9WSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9pbmRleC5qcyIsInNyYy9sb2dnZXIudHMiLCJzcmMvY2hyb25vLnRzIiwic3JjL3RpbWUtZGV0ZWN0b3IudHMiLCJzcmMvbHJ1LWNhY2hlLnRzIiwic3JjL3BhcnNlci50cyIsInNyYy9zdWdnZXN0L2RhdGUtc3VnZ2VzdC50cyIsInNyYy9jb21tYW5kcy50cyIsInNyYy9oaXN0b3J5LW1hbmFnZXIudHMiLCJzcmMvY29udGV4dC1hbmFseXplci50cyIsInNyYy9lcnJvcnMudHMiLCJzcmMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBvYnNpZGlhbiA9IHJlcXVpcmUoJ29ic2lkaWFuJyk7XG5cbmNvbnN0IERFRkFVTFRfREFJTFlfTk9URV9GT1JNQVQgPSBcIllZWVktTU0tRERcIjtcbmNvbnN0IERFRkFVTFRfV0VFS0xZX05PVEVfRk9STUFUID0gXCJnZ2dnLVtXXXd3XCI7XG5jb25zdCBERUZBVUxUX01PTlRITFlfTk9URV9GT1JNQVQgPSBcIllZWVktTU1cIjtcbmNvbnN0IERFRkFVTFRfUVVBUlRFUkxZX05PVEVfRk9STUFUID0gXCJZWVlZLVtRXVFcIjtcbmNvbnN0IERFRkFVTFRfWUVBUkxZX05PVEVfRk9STUFUID0gXCJZWVlZXCI7XG5cbmZ1bmN0aW9uIHNob3VsZFVzZVBlcmlvZGljTm90ZXNTZXR0aW5ncyhwZXJpb2RpY2l0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IHdpbmRvdy5hcHAucGx1Z2lucy5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKTtcbiAgICByZXR1cm4gcGVyaW9kaWNOb3RlcyAmJiBwZXJpb2RpY05vdGVzLnNldHRpbmdzPy5bcGVyaW9kaWNpdHldPy5lbmFibGVkO1xufVxuLyoqXG4gKiBSZWFkIHRoZSB1c2VyIHNldHRpbmdzIGZvciB0aGUgYGRhaWx5LW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXREYWlseU5vdGVTZXR0aW5ncygpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCB7IGludGVybmFsUGx1Z2lucywgcGx1Z2lucyB9ID0gd2luZG93LmFwcDtcbiAgICAgICAgaWYgKHNob3VsZFVzZVBlcmlvZGljTm90ZXNTZXR0aW5ncyhcImRhaWx5XCIpKSB7XG4gICAgICAgICAgICBjb25zdCB7IGZvcm1hdCwgZm9sZGVyLCB0ZW1wbGF0ZSB9ID0gcGx1Z2lucy5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKT8uc2V0dGluZ3M/LmRhaWx5IHx8IHt9O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCB8fCBERUZBVUxUX0RBSUxZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgICAgIGZvbGRlcjogZm9sZGVyPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGVtcGxhdGU/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGZvbGRlciwgZm9ybWF0LCB0ZW1wbGF0ZSB9ID0gaW50ZXJuYWxQbHVnaW5zLmdldFBsdWdpbkJ5SWQoXCJkYWlseS1ub3Rlc1wiKT8uaW5zdGFuY2U/Lm9wdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCB8fCBERUZBVUxUX0RBSUxZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgZm9sZGVyOiBmb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gZGFpbHkgbm90ZSBzZXR0aW5ncyBmb3VuZCFcIiwgZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIFJlYWQgdGhlIHVzZXIgc2V0dGluZ3MgZm9yIHRoZSBgd2Vla2x5LW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXRXZWVrbHlOb3RlU2V0dGluZ3MoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3QgcGx1Z2luTWFuYWdlciA9IHdpbmRvdy5hcHAucGx1Z2lucztcbiAgICAgICAgY29uc3QgY2FsZW5kYXJTZXR0aW5ncyA9IHBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luKFwiY2FsZW5kYXJcIik/Lm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHBlcmlvZGljTm90ZXNTZXR0aW5ncyA9IHBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik/LnNldHRpbmdzPy53ZWVrbHk7XG4gICAgICAgIGlmIChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJ3ZWVrbHlcIikpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBwZXJpb2RpY05vdGVzU2V0dGluZ3MuZm9ybWF0IHx8IERFRkFVTFRfV0VFS0xZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgICAgIGZvbGRlcjogcGVyaW9kaWNOb3Rlc1NldHRpbmdzLmZvbGRlcj8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHBlcmlvZGljTm90ZXNTZXR0aW5ncy50ZW1wbGF0ZT8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gY2FsZW5kYXJTZXR0aW5ncyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1hdDogc2V0dGluZ3Mud2Vla2x5Tm90ZUZvcm1hdCB8fCBERUZBVUxUX1dFRUtMWV9OT1RFX0ZPUk1BVCxcbiAgICAgICAgICAgIGZvbGRlcjogc2V0dGluZ3Mud2Vla2x5Tm90ZUZvbGRlcj8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogc2V0dGluZ3Mud2Vla2x5Tm90ZVRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gd2Vla2x5IG5vdGUgc2V0dGluZ3MgZm91bmQhXCIsIGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBSZWFkIHRoZSB1c2VyIHNldHRpbmdzIGZvciB0aGUgYHBlcmlvZGljLW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXRNb250aGx5Tm90ZVNldHRpbmdzKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGx1Z2luTWFuYWdlciA9IHdpbmRvdy5hcHAucGx1Z2lucztcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJtb250aGx5XCIpICYmXG4gICAgICAgICAgICBwbHVnaW5NYW5hZ2VyLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpPy5zZXR0aW5ncz8ubW9udGhseSkgfHxcbiAgICAgICAgICAgIHt9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9ybWF0OiBzZXR0aW5ncy5mb3JtYXQgfHwgREVGQVVMVF9NT05USExZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgZm9sZGVyOiBzZXR0aW5ncy5mb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHNldHRpbmdzLnRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gbW9udGhseSBub3RlIHNldHRpbmdzIGZvdW5kIVwiLCBlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogUmVhZCB0aGUgdXNlciBzZXR0aW5ncyBmb3IgdGhlIGBwZXJpb2RpYy1ub3Rlc2AgcGx1Z2luXG4gKiB0byBrZWVwIGJlaGF2aW9yIG9mIGNyZWF0aW5nIGEgbmV3IG5vdGUgaW4tc3luYy5cbiAqL1xuZnVuY3Rpb24gZ2V0UXVhcnRlcmx5Tm90ZVNldHRpbmdzKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGx1Z2luTWFuYWdlciA9IHdpbmRvdy5hcHAucGx1Z2lucztcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJxdWFydGVybHlcIikgJiZcbiAgICAgICAgICAgIHBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik/LnNldHRpbmdzPy5xdWFydGVybHkpIHx8XG4gICAgICAgICAgICB7fTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1hdDogc2V0dGluZ3MuZm9ybWF0IHx8IERFRkFVTFRfUVVBUlRFUkxZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgZm9sZGVyOiBzZXR0aW5ncy5mb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHNldHRpbmdzLnRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gcXVhcnRlcmx5IG5vdGUgc2V0dGluZ3MgZm91bmQhXCIsIGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBSZWFkIHRoZSB1c2VyIHNldHRpbmdzIGZvciB0aGUgYHBlcmlvZGljLW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXRZZWFybHlOb3RlU2V0dGluZ3MoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBwbHVnaW5NYW5hZ2VyID0gd2luZG93LmFwcC5wbHVnaW5zO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gKHNob3VsZFVzZVBlcmlvZGljTm90ZXNTZXR0aW5ncyhcInllYXJseVwiKSAmJlxuICAgICAgICAgICAgcGx1Z2luTWFuYWdlci5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKT8uc2V0dGluZ3M/LnllYXJseSkgfHxcbiAgICAgICAgICAgIHt9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9ybWF0OiBzZXR0aW5ncy5mb3JtYXQgfHwgREVGQVVMVF9ZRUFSTFlfTk9URV9GT1JNQVQsXG4gICAgICAgICAgICBmb2xkZXI6IHNldHRpbmdzLmZvbGRlcj8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogc2V0dGluZ3MudGVtcGxhdGU/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhcIk5vIGN1c3RvbSB5ZWFybHkgbm90ZSBzZXR0aW5ncyBmb3VuZCFcIiwgZXJyKTtcbiAgICB9XG59XG5cbi8vIENyZWRpdDogQGNyZWF0aW9uaXgvcGF0aC5qc1xuZnVuY3Rpb24gam9pbiguLi5wYXJ0U2VnbWVudHMpIHtcbiAgICAvLyBTcGxpdCB0aGUgaW5wdXRzIGludG8gYSBsaXN0IG9mIHBhdGggY29tbWFuZHMuXG4gICAgbGV0IHBhcnRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJ0U2VnbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KHBhcnRTZWdtZW50c1tpXS5zcGxpdChcIi9cIikpO1xuICAgIH1cbiAgICAvLyBJbnRlcnByZXQgdGhlIHBhdGggY29tbWFuZHMgdG8gZ2V0IHRoZSBuZXcgcmVzb2x2ZWQgcGF0aC5cbiAgICBjb25zdCBuZXdQYXJ0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0c1tpXTtcbiAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXNcbiAgICAgICAgLy8gQWxzbyByZW1vdmUgXCIuXCIgc2VnbWVudHNcbiAgICAgICAgaWYgKCFwYXJ0IHx8IHBhcnQgPT09IFwiLlwiKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIC8vIFB1c2ggbmV3IHBhdGggc2VnbWVudHMuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG5ld1BhcnRzLnB1c2gocGFydCk7XG4gICAgfVxuICAgIC8vIFByZXNlcnZlIHRoZSBpbml0aWFsIHNsYXNoIGlmIHRoZXJlIHdhcyBvbmUuXG4gICAgaWYgKHBhcnRzWzBdID09PSBcIlwiKVxuICAgICAgICBuZXdQYXJ0cy51bnNoaWZ0KFwiXCIpO1xuICAgIC8vIFR1cm4gYmFjayBpbnRvIGEgc2luZ2xlIHN0cmluZyBwYXRoLlxuICAgIHJldHVybiBuZXdQYXJ0cy5qb2luKFwiL1wiKTtcbn1cbmZ1bmN0aW9uIGJhc2VuYW1lKGZ1bGxQYXRoKSB7XG4gICAgbGV0IGJhc2UgPSBmdWxsUGF0aC5zdWJzdHJpbmcoZnVsbFBhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG4gICAgaWYgKGJhc2UubGFzdEluZGV4T2YoXCIuXCIpICE9IC0xKVxuICAgICAgICBiYXNlID0gYmFzZS5zdWJzdHJpbmcoMCwgYmFzZS5sYXN0SW5kZXhPZihcIi5cIikpO1xuICAgIHJldHVybiBiYXNlO1xufVxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlRm9sZGVyRXhpc3RzKHBhdGgpIHtcbiAgICBjb25zdCBkaXJzID0gcGF0aC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKS5zcGxpdChcIi9cIik7XG4gICAgZGlycy5wb3AoKTsgLy8gcmVtb3ZlIGJhc2VuYW1lXG4gICAgaWYgKGRpcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGRpciA9IGpvaW4oLi4uZGlycyk7XG4gICAgICAgIGlmICghd2luZG93LmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoZGlyKSkge1xuICAgICAgICAgICAgYXdhaXQgd2luZG93LmFwcC52YXVsdC5jcmVhdGVGb2xkZXIoZGlyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGdldE5vdGVQYXRoKGRpcmVjdG9yeSwgZmlsZW5hbWUpIHtcbiAgICBpZiAoIWZpbGVuYW1lLmVuZHNXaXRoKFwiLm1kXCIpKSB7XG4gICAgICAgIGZpbGVuYW1lICs9IFwiLm1kXCI7XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSBvYnNpZGlhbi5ub3JtYWxpemVQYXRoKGpvaW4oZGlyZWN0b3J5LCBmaWxlbmFtZSkpO1xuICAgIGF3YWl0IGVuc3VyZUZvbGRlckV4aXN0cyhwYXRoKTtcbiAgICByZXR1cm4gcGF0aDtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldFRlbXBsYXRlSW5mbyh0ZW1wbGF0ZSkge1xuICAgIGNvbnN0IHsgbWV0YWRhdGFDYWNoZSwgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgdGVtcGxhdGVQYXRoID0gb2JzaWRpYW4ubm9ybWFsaXplUGF0aCh0ZW1wbGF0ZSk7XG4gICAgaWYgKHRlbXBsYXRlUGF0aCA9PT0gXCIvXCIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXCJcIiwgbnVsbF0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZUZpbGUgPSBtZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KHRlbXBsYXRlUGF0aCwgXCJcIik7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgdmF1bHQuY2FjaGVkUmVhZCh0ZW1wbGF0ZUZpbGUpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCBJRm9sZEluZm8gPSB3aW5kb3cuYXBwLmZvbGRNYW5hZ2VyLmxvYWQodGVtcGxhdGVGaWxlKTtcbiAgICAgICAgcmV0dXJuIFtjb250ZW50cywgSUZvbGRJbmZvXTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcmVhZCB0aGUgZGFpbHkgbm90ZSB0ZW1wbGF0ZSAnJHt0ZW1wbGF0ZVBhdGh9J2AsIGVycik7XG4gICAgICAgIG5ldyBvYnNpZGlhbi5Ob3RpY2UoXCJGYWlsZWQgdG8gcmVhZCB0aGUgZGFpbHkgbm90ZSB0ZW1wbGF0ZVwiKTtcbiAgICAgICAgcmV0dXJuIFtcIlwiLCBudWxsXTtcbiAgICB9XG59XG5cbi8qKlxuICogZGF0ZVVJRCBpcyBhIHdheSBvZiB3ZWVrbHkgaWRlbnRpZnlpbmcgZGFpbHkvd2Vla2x5L21vbnRobHkgbm90ZXMuXG4gKiBUaGV5IGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBncmFudWxhcml0eSB0byBhdm9pZCBhbWJpZ3VpdHkuXG4gKi9cbmZ1bmN0aW9uIGdldERhdGVVSUQoZGF0ZSwgZ3JhbnVsYXJpdHkgPSBcImRheVwiKSB7XG4gICAgY29uc3QgdHMgPSBkYXRlLmNsb25lKCkuc3RhcnRPZihncmFudWxhcml0eSkuZm9ybWF0KCk7XG4gICAgcmV0dXJuIGAke2dyYW51bGFyaXR5fS0ke3RzfWA7XG59XG5mdW5jdGlvbiByZW1vdmVFc2NhcGVkQ2hhcmFjdGVycyhmb3JtYXQpIHtcbiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1xcW1teXFxdXSpcXF0vZywgXCJcIik7IC8vIHJlbW92ZSBldmVyeXRoaW5nIHdpdGhpbiBicmFja2V0c1xufVxuLyoqXG4gKiBYWFg6IFdoZW4gcGFyc2luZyBkYXRlcyB0aGF0IGNvbnRhaW4gYm90aCB3ZWVrIG51bWJlcnMgYW5kIG1vbnRocyxcbiAqIE1vbWVudCBjaG9zZXMgdG8gaWdub3JlIHRoZSB3ZWVrIG51bWJlcnMuIEZvciB0aGUgd2VlayBkYXRlVUlELCB3ZVxuICogd2FudCB0aGUgb3Bwb3NpdGUgYmVoYXZpb3IuIFN0cmlwIHRoZSBNTU0gZnJvbSB0aGUgZm9ybWF0IHRvIHBhdGNoLlxuICovXG5mdW5jdGlvbiBpc0Zvcm1hdEFtYmlndW91cyhmb3JtYXQsIGdyYW51bGFyaXR5KSB7XG4gICAgaWYgKGdyYW51bGFyaXR5ID09PSBcIndlZWtcIikge1xuICAgICAgICBjb25zdCBjbGVhbkZvcm1hdCA9IHJlbW92ZUVzY2FwZWRDaGFyYWN0ZXJzKGZvcm1hdCk7XG4gICAgICAgIHJldHVybiAoL3d7MSwyfS9pLnRlc3QoY2xlYW5Gb3JtYXQpICYmXG4gICAgICAgICAgICAoL017MSw0fS8udGVzdChjbGVhbkZvcm1hdCkgfHwgL0R7MSw0fS8udGVzdChjbGVhbkZvcm1hdCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0RGF0ZUZyb21GaWxlKGZpbGUsIGdyYW51bGFyaXR5KSB7XG4gICAgcmV0dXJuIGdldERhdGVGcm9tRmlsZW5hbWUoZmlsZS5iYXNlbmFtZSwgZ3JhbnVsYXJpdHkpO1xufVxuZnVuY3Rpb24gZ2V0RGF0ZUZyb21QYXRoKHBhdGgsIGdyYW51bGFyaXR5KSB7XG4gICAgcmV0dXJuIGdldERhdGVGcm9tRmlsZW5hbWUoYmFzZW5hbWUocGF0aCksIGdyYW51bGFyaXR5KTtcbn1cbmZ1bmN0aW9uIGdldERhdGVGcm9tRmlsZW5hbWUoZmlsZW5hbWUsIGdyYW51bGFyaXR5KSB7XG4gICAgY29uc3QgZ2V0U2V0dGluZ3MgPSB7XG4gICAgICAgIGRheTogZ2V0RGFpbHlOb3RlU2V0dGluZ3MsXG4gICAgICAgIHdlZWs6IGdldFdlZWtseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgbW9udGg6IGdldE1vbnRobHlOb3RlU2V0dGluZ3MsXG4gICAgICAgIHF1YXJ0ZXI6IGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgeWVhcjogZ2V0WWVhcmx5Tm90ZVNldHRpbmdzLFxuICAgIH07XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0U2V0dGluZ3NbZ3JhbnVsYXJpdHldKCkuZm9ybWF0LnNwbGl0KFwiL1wiKS5wb3AoKTtcbiAgICBjb25zdCBub3RlRGF0ZSA9IHdpbmRvdy5tb21lbnQoZmlsZW5hbWUsIGZvcm1hdCwgdHJ1ZSk7XG4gICAgaWYgKCFub3RlRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChpc0Zvcm1hdEFtYmlndW91cyhmb3JtYXQsIGdyYW51bGFyaXR5KSkge1xuICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT09IFwid2Vla1wiKSB7XG4gICAgICAgICAgICBjb25zdCBjbGVhbkZvcm1hdCA9IHJlbW92ZUVzY2FwZWRDaGFyYWN0ZXJzKGZvcm1hdCk7XG4gICAgICAgICAgICBpZiAoL3d7MSwyfS9pLnRlc3QoY2xlYW5Gb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5tb21lbnQoZmlsZW5hbWUsIFxuICAgICAgICAgICAgICAgIC8vIElmIGZvcm1hdCBjb250YWlucyB3ZWVrLCByZW1vdmUgZGF5ICYgbW9udGggZm9ybWF0dGluZ1xuICAgICAgICAgICAgICAgIGZvcm1hdC5yZXBsYWNlKC9NezEsNH0vZywgXCJcIikucmVwbGFjZSgvRHsxLDR9L2csIFwiXCIpLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vdGVEYXRlO1xufVxuXG5jbGFzcyBEYWlseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIG1pbWljcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGRhaWx5LW5vdGVzIHBsdWdpblxuICogc28gaXQgd2lsbCByZXBsYWNlIHt7ZGF0ZX19LCB7e3RpdGxlfX0sIGFuZCB7e3RpbWV9fSB3aXRoIHRoZVxuICogZm9ybWF0dGVkIHRpbWVzdGFtcC5cbiAqXG4gKiBOb3RlOiBpdCBoYXMgYW4gYWRkZWQgYm9udXMgdGhhdCBpdCdzIG5vdCAndG9kYXknIHNwZWNpZmljLlxuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVEYWlseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IGFwcCA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xuICAgIGNvbnN0IG1vbWVudCA9IHdpbmRvdy5tb21lbnQ7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldERhaWx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgW3RlbXBsYXRlQ29udGVudHMsIElGb2xkSW5mb10gPSBhd2FpdCBnZXRUZW1wbGF0ZUluZm8odGVtcGxhdGUpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gZGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGF3YWl0IGdldE5vdGVQYXRoKGZvbGRlciwgZmlsZW5hbWUpO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRGaWxlID0gYXdhaXQgdmF1bHQuY3JlYXRlKG5vcm1hbGl6ZWRQYXRoLCB0ZW1wbGF0ZUNvbnRlbnRzXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqZGF0ZVxccyp9fS9naSwgZmlsZW5hbWUpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGltZVxccyp9fS9naSwgbW9tZW50KCkuZm9ybWF0KFwiSEg6bW1cIikpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGl0bGVcXHMqfX0vZ2ksIGZpbGVuYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihkYXRlfHRpbWUpXFxzKigoWystXVxcZCspKFt5cW13ZGhzXSkpP1xccyooOi4rPyk/fX0vZ2ksIChfLCBfdGltZU9yRGF0ZSwgY2FsYywgdGltZURlbHRhLCB1bml0LCBtb21lbnRGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IG1vbWVudCgpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBkYXRlLmNsb25lKCkuc2V0KHtcbiAgICAgICAgICAgICAgICBob3VyOiBub3cuZ2V0KFwiaG91clwiKSxcbiAgICAgICAgICAgICAgICBtaW51dGU6IG5vdy5nZXQoXCJtaW51dGVcIiksXG4gICAgICAgICAgICAgICAgc2Vjb25kOiBub3cuZ2V0KFwic2Vjb25kXCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY2FsYykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnREYXRlLmFkZChwYXJzZUludCh0aW1lRGVsdGEsIDEwKSwgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW9tZW50Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChtb21lbnRGb3JtYXQuc3Vic3RyaW5nKDEpLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqeWVzdGVyZGF5XFxzKn19L2dpLCBkYXRlLmNsb25lKCkuc3VidHJhY3QoMSwgXCJkYXlcIikuZm9ybWF0KGZvcm1hdCkpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdG9tb3Jyb3dcXHMqfX0vZ2ksIGRhdGUuY2xvbmUoKS5hZGQoMSwgXCJkXCIpLmZvcm1hdChmb3JtYXQpKSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGFwcC5mb2xkTWFuYWdlci5zYXZlKGNyZWF0ZWRGaWxlLCBJRm9sZEluZm8pO1xuICAgICAgICByZXR1cm4gY3JlYXRlZEZpbGU7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBmaWxlOiAnJHtub3JtYWxpemVkUGF0aH0nYCwgZXJyKTtcbiAgICAgICAgbmV3IG9ic2lkaWFuLk5vdGljZShcIlVuYWJsZSB0byBjcmVhdGUgbmV3IGZpbGUuXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldERhaWx5Tm90ZShkYXRlLCBkYWlseU5vdGVzKSB7XG4gICAgcmV0dXJuIGRhaWx5Tm90ZXNbZ2V0RGF0ZVVJRChkYXRlLCBcImRheVwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbERhaWx5Tm90ZXMoKSB7XG4gICAgLyoqXG4gICAgICogRmluZCBhbGwgZGFpbHkgbm90ZXMgaW4gdGhlIGRhaWx5IG5vdGUgZm9sZGVyXG4gICAgICovXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gZ2V0RGFpbHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBkYWlseU5vdGVzRm9sZGVyID0gdmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG9ic2lkaWFuLm5vcm1hbGl6ZVBhdGgoZm9sZGVyKSk7XG4gICAgaWYgKCFkYWlseU5vdGVzRm9sZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBEYWlseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yKFwiRmFpbGVkIHRvIGZpbmQgZGFpbHkgbm90ZXMgZm9sZGVyXCIpO1xuICAgIH1cbiAgICBjb25zdCBkYWlseU5vdGVzID0ge307XG4gICAgb2JzaWRpYW4uVmF1bHQucmVjdXJzZUNoaWxkcmVuKGRhaWx5Tm90ZXNGb2xkZXIsIChub3RlKSA9PiB7XG4gICAgICAgIGlmIChub3RlIGluc3RhbmNlb2Ygb2JzaWRpYW4uVEZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBnZXREYXRlRnJvbUZpbGUobm90ZSwgXCJkYXlcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwiZGF5XCIpO1xuICAgICAgICAgICAgICAgIGRhaWx5Tm90ZXNbZGF0ZVN0cmluZ10gPSBub3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhaWx5Tm90ZXM7XG59XG5cbmNsYXNzIFdlZWtseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuZnVuY3Rpb24gZ2V0RGF5c09mV2VlaygpIHtcbiAgICBjb25zdCB7IG1vbWVudCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgbGV0IHdlZWtTdGFydCA9IG1vbWVudC5sb2NhbGVEYXRhKCkuX3dlZWsuZG93O1xuICAgIGNvbnN0IGRheXNPZldlZWsgPSBbXG4gICAgICAgIFwic3VuZGF5XCIsXG4gICAgICAgIFwibW9uZGF5XCIsXG4gICAgICAgIFwidHVlc2RheVwiLFxuICAgICAgICBcIndlZG5lc2RheVwiLFxuICAgICAgICBcInRodXJzZGF5XCIsXG4gICAgICAgIFwiZnJpZGF5XCIsXG4gICAgICAgIFwic2F0dXJkYXlcIixcbiAgICBdO1xuICAgIHdoaWxlICh3ZWVrU3RhcnQpIHtcbiAgICAgICAgZGF5c09mV2Vlay5wdXNoKGRheXNPZldlZWsuc2hpZnQoKSk7XG4gICAgICAgIHdlZWtTdGFydC0tO1xuICAgIH1cbiAgICByZXR1cm4gZGF5c09mV2Vlaztcbn1cbmZ1bmN0aW9uIGdldERheU9mV2Vla051bWVyaWNhbFZhbHVlKGRheU9mV2Vla05hbWUpIHtcbiAgICByZXR1cm4gZ2V0RGF5c09mV2VlaygpLmluZGV4T2YoZGF5T2ZXZWVrTmFtZS50b0xvd2VyQ2FzZSgpKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVdlZWtseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldFdlZWtseU5vdGVTZXR0aW5ncygpO1xuICAgIGNvbnN0IFt0ZW1wbGF0ZUNvbnRlbnRzLCBJRm9sZEluZm9dID0gYXdhaXQgZ2V0VGVtcGxhdGVJbmZvKHRlbXBsYXRlKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGRhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBhd2FpdCBnZXROb3RlUGF0aChmb2xkZXIsIGZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBjcmVhdGVkRmlsZSA9IGF3YWl0IHZhdWx0LmNyZWF0ZShub3JtYWxpemVkUGF0aCwgdGVtcGxhdGVDb250ZW50c1xuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihkYXRlfHRpbWUpXFxzKigoWystXVxcZCspKFt5cW13ZGhzXSkpP1xccyooOi4rPyk/fX0vZ2ksIChfLCBfdGltZU9yRGF0ZSwgY2FsYywgdGltZURlbHRhLCB1bml0LCBtb21lbnRGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IHdpbmRvdy5tb21lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gZGF0ZS5jbG9uZSgpLnNldCh7XG4gICAgICAgICAgICAgICAgaG91cjogbm93LmdldChcImhvdXJcIiksXG4gICAgICAgICAgICAgICAgbWludXRlOiBub3cuZ2V0KFwibWludXRlXCIpLFxuICAgICAgICAgICAgICAgIHNlY29uZDogbm93LmdldChcInNlY29uZFwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNhbGMpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5hZGQocGFyc2VJbnQodGltZURlbHRhLCAxMCksIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1vbWVudEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQobW9tZW50Rm9ybWF0LnN1YnN0cmluZygxKS50cmltKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpdGxlXFxzKn19L2dpLCBmaWxlbmFtZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aW1lXFxzKn19L2dpLCB3aW5kb3cubW9tZW50KCkuZm9ybWF0KFwiSEg6bW1cIikpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KVxccyo6KC4qPyl9fS9naSwgKF8sIGRheU9mV2VlaywgbW9tZW50Rm9ybWF0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXkgPSBnZXREYXlPZldlZWtOdW1lcmljYWxWYWx1ZShkYXlPZldlZWspO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGUud2Vla2RheShkYXkpLmZvcm1hdChtb21lbnRGb3JtYXQudHJpbSgpKTtcbiAgICAgICAgfSkpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICB3aW5kb3cuYXBwLmZvbGRNYW5hZ2VyLnNhdmUoY3JlYXRlZEZpbGUsIElGb2xkSW5mbyk7XG4gICAgICAgIHJldHVybiBjcmVhdGVkRmlsZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGZpbGU6ICcke25vcm1hbGl6ZWRQYXRofSdgLCBlcnIpO1xuICAgICAgICBuZXcgb2JzaWRpYW4uTm90aWNlKFwiVW5hYmxlIHRvIGNyZWF0ZSBuZXcgZmlsZS5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0V2Vla2x5Tm90ZShkYXRlLCB3ZWVrbHlOb3Rlcykge1xuICAgIHJldHVybiB3ZWVrbHlOb3Rlc1tnZXREYXRlVUlEKGRhdGUsIFwid2Vla1wiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbFdlZWtseU5vdGVzKCkge1xuICAgIGNvbnN0IHdlZWtseU5vdGVzID0ge307XG4gICAgaWYgKCFhcHBIYXNXZWVrbHlOb3Rlc1BsdWdpbkxvYWRlZCgpKSB7XG4gICAgICAgIHJldHVybiB3ZWVrbHlOb3RlcztcbiAgICB9XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gZ2V0V2Vla2x5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3Qgd2Vla2x5Tm90ZXNGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIXdlZWtseU5vdGVzRm9sZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBXZWVrbHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvcihcIkZhaWxlZCB0byBmaW5kIHdlZWtseSBub3RlcyBmb2xkZXJcIik7XG4gICAgfVxuICAgIG9ic2lkaWFuLlZhdWx0LnJlY3Vyc2VDaGlsZHJlbih3ZWVrbHlOb3Rlc0ZvbGRlciwgKG5vdGUpID0+IHtcbiAgICAgICAgaWYgKG5vdGUgaW5zdGFuY2VvZiBvYnNpZGlhbi5URmlsZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IGdldERhdGVGcm9tRmlsZShub3RlLCBcIndlZWtcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwid2Vla1wiKTtcbiAgICAgICAgICAgICAgICB3ZWVrbHlOb3Rlc1tkYXRlU3RyaW5nXSA9IG5vdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gd2Vla2x5Tm90ZXM7XG59XG5cbmNsYXNzIE1vbnRobHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBkYWlseS1ub3RlcyBwbHVnaW5cbiAqIHNvIGl0IHdpbGwgcmVwbGFjZSB7e2RhdGV9fSwge3t0aXRsZX19LCBhbmQge3t0aW1lfX0gd2l0aCB0aGVcbiAqIGZvcm1hdHRlZCB0aW1lc3RhbXAuXG4gKlxuICogTm90ZTogaXQgaGFzIGFuIGFkZGVkIGJvbnVzIHRoYXQgaXQncyBub3QgJ3RvZGF5JyBzcGVjaWZpYy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlTW9udGhseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldE1vbnRobHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBbdGVtcGxhdGVDb250ZW50cywgSUZvbGRJbmZvXSA9IGF3YWl0IGdldFRlbXBsYXRlSW5mbyh0ZW1wbGF0ZSk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBkYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gYXdhaXQgZ2V0Tm90ZVBhdGgoZm9sZGVyLCBmaWxlbmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY3JlYXRlZEZpbGUgPSBhd2FpdCB2YXVsdC5jcmVhdGUobm9ybWFsaXplZFBhdGgsIHRlbXBsYXRlQ29udGVudHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyooZGF0ZXx0aW1lKVxccyooKFsrLV1cXGQrKShbeXFtd2Roc10pKT9cXHMqKDouKz8pP319L2dpLCAoXywgX3RpbWVPckRhdGUsIGNhbGMsIHRpbWVEZWx0YSwgdW5pdCwgbW9tZW50Rm9ybWF0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSB3aW5kb3cubW9tZW50KCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IGRhdGUuY2xvbmUoKS5zZXQoe1xuICAgICAgICAgICAgICAgIGhvdXI6IG5vdy5nZXQoXCJob3VyXCIpLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogbm93LmdldChcIm1pbnV0ZVwiKSxcbiAgICAgICAgICAgICAgICBzZWNvbmQ6IG5vdy5nZXQoXCJzZWNvbmRcIiksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjYWxjKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudERhdGUuYWRkKHBhcnNlSW50KHRpbWVEZWx0YSwgMTApLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtb21lbnRGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KG1vbWVudEZvcm1hdC5zdWJzdHJpbmcoMSkudHJpbSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccypkYXRlXFxzKn19L2dpLCBmaWxlbmFtZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aW1lXFxzKn19L2dpLCB3aW5kb3cubW9tZW50KCkuZm9ybWF0KFwiSEg6bW1cIikpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGl0bGVcXHMqfX0vZ2ksIGZpbGVuYW1lKSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHdpbmRvdy5hcHAuZm9sZE1hbmFnZXIuc2F2ZShjcmVhdGVkRmlsZSwgSUZvbGRJbmZvKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWRGaWxlO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgZmlsZTogJyR7bm9ybWFsaXplZFBhdGh9J2AsIGVycik7XG4gICAgICAgIG5ldyBvYnNpZGlhbi5Ob3RpY2UoXCJVbmFibGUgdG8gY3JlYXRlIG5ldyBmaWxlLlwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRNb250aGx5Tm90ZShkYXRlLCBtb250aGx5Tm90ZXMpIHtcbiAgICByZXR1cm4gbW9udGhseU5vdGVzW2dldERhdGVVSUQoZGF0ZSwgXCJtb250aFwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbE1vbnRobHlOb3RlcygpIHtcbiAgICBjb25zdCBtb250aGx5Tm90ZXMgPSB7fTtcbiAgICBpZiAoIWFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZCgpKSB7XG4gICAgICAgIHJldHVybiBtb250aGx5Tm90ZXM7XG4gICAgfVxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyBmb2xkZXIgfSA9IGdldE1vbnRobHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBtb250aGx5Tm90ZXNGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIW1vbnRobHlOb3Rlc0ZvbGRlcikge1xuICAgICAgICB0aHJvdyBuZXcgTW9udGhseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yKFwiRmFpbGVkIHRvIGZpbmQgbW9udGhseSBub3RlcyBmb2xkZXJcIik7XG4gICAgfVxuICAgIG9ic2lkaWFuLlZhdWx0LnJlY3Vyc2VDaGlsZHJlbihtb250aGx5Tm90ZXNGb2xkZXIsIChub3RlKSA9PiB7XG4gICAgICAgIGlmIChub3RlIGluc3RhbmNlb2Ygb2JzaWRpYW4uVEZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBnZXREYXRlRnJvbUZpbGUobm90ZSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGdldERhdGVVSUQoZGF0ZSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgICAgICBtb250aGx5Tm90ZXNbZGF0ZVN0cmluZ10gPSBub3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG1vbnRobHlOb3Rlcztcbn1cblxuY2xhc3MgUXVhcnRlcmx5Tm90ZXNGb2xkZXJNaXNzaW5nRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gbWltaWNzIHRoZSBiZWhhdmlvciBvZiB0aGUgZGFpbHktbm90ZXMgcGx1Z2luXG4gKiBzbyBpdCB3aWxsIHJlcGxhY2Uge3tkYXRlfX0sIHt7dGl0bGV9fSwgYW5kIHt7dGltZX19IHdpdGggdGhlXG4gKiBmb3JtYXR0ZWQgdGltZXN0YW1wLlxuICpcbiAqIE5vdGU6IGl0IGhhcyBhbiBhZGRlZCBib251cyB0aGF0IGl0J3Mgbm90ICd0b2RheScgc3BlY2lmaWMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVF1YXJ0ZXJseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncygpO1xuICAgIGNvbnN0IFt0ZW1wbGF0ZUNvbnRlbnRzLCBJRm9sZEluZm9dID0gYXdhaXQgZ2V0VGVtcGxhdGVJbmZvKHRlbXBsYXRlKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGRhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBhd2FpdCBnZXROb3RlUGF0aChmb2xkZXIsIGZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBjcmVhdGVkRmlsZSA9IGF3YWl0IHZhdWx0LmNyZWF0ZShub3JtYWxpemVkUGF0aCwgdGVtcGxhdGVDb250ZW50c1xuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihkYXRlfHRpbWUpXFxzKigoWystXVxcZCspKFt5cW13ZGhzXSkpP1xccyooOi4rPyk/fX0vZ2ksIChfLCBfdGltZU9yRGF0ZSwgY2FsYywgdGltZURlbHRhLCB1bml0LCBtb21lbnRGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IHdpbmRvdy5tb21lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gZGF0ZS5jbG9uZSgpLnNldCh7XG4gICAgICAgICAgICAgICAgaG91cjogbm93LmdldChcImhvdXJcIiksXG4gICAgICAgICAgICAgICAgbWludXRlOiBub3cuZ2V0KFwibWludXRlXCIpLFxuICAgICAgICAgICAgICAgIHNlY29uZDogbm93LmdldChcInNlY29uZFwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNhbGMpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5hZGQocGFyc2VJbnQodGltZURlbHRhLCAxMCksIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1vbWVudEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQobW9tZW50Rm9ybWF0LnN1YnN0cmluZygxKS50cmltKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKmRhdGVcXHMqfX0vZ2ksIGZpbGVuYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpbWVcXHMqfX0vZ2ksIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoXCJISDptbVwiKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aXRsZVxccyp9fS9naSwgZmlsZW5hbWUpKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgd2luZG93LmFwcC5mb2xkTWFuYWdlci5zYXZlKGNyZWF0ZWRGaWxlLCBJRm9sZEluZm8pO1xuICAgICAgICByZXR1cm4gY3JlYXRlZEZpbGU7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBmaWxlOiAnJHtub3JtYWxpemVkUGF0aH0nYCwgZXJyKTtcbiAgICAgICAgbmV3IG9ic2lkaWFuLk5vdGljZShcIlVuYWJsZSB0byBjcmVhdGUgbmV3IGZpbGUuXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFF1YXJ0ZXJseU5vdGUoZGF0ZSwgcXVhcnRlcmx5KSB7XG4gICAgcmV0dXJuIHF1YXJ0ZXJseVtnZXREYXRlVUlEKGRhdGUsIFwicXVhcnRlclwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbFF1YXJ0ZXJseU5vdGVzKCkge1xuICAgIGNvbnN0IHF1YXJ0ZXJseSA9IHt9O1xuICAgIGlmICghYXBwSGFzUXVhcnRlcmx5Tm90ZXNQbHVnaW5Mb2FkZWQoKSkge1xuICAgICAgICByZXR1cm4gcXVhcnRlcmx5O1xuICAgIH1cbiAgICBjb25zdCB7IHZhdWx0IH0gPSB3aW5kb3cuYXBwO1xuICAgIGNvbnN0IHsgZm9sZGVyIH0gPSBnZXRRdWFydGVybHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBxdWFydGVybHlGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIXF1YXJ0ZXJseUZvbGRlcikge1xuICAgICAgICB0aHJvdyBuZXcgUXVhcnRlcmx5Tm90ZXNGb2xkZXJNaXNzaW5nRXJyb3IoXCJGYWlsZWQgdG8gZmluZCBxdWFydGVybHkgbm90ZXMgZm9sZGVyXCIpO1xuICAgIH1cbiAgICBvYnNpZGlhbi5WYXVsdC5yZWN1cnNlQ2hpbGRyZW4ocXVhcnRlcmx5Rm9sZGVyLCAobm90ZSkgPT4ge1xuICAgICAgICBpZiAobm90ZSBpbnN0YW5jZW9mIG9ic2lkaWFuLlRGaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gZ2V0RGF0ZUZyb21GaWxlKG5vdGUsIFwicXVhcnRlclwiKTtcbiAgICAgICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGdldERhdGVVSUQoZGF0ZSwgXCJxdWFydGVyXCIpO1xuICAgICAgICAgICAgICAgIHF1YXJ0ZXJseVtkYXRlU3RyaW5nXSA9IG5vdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcXVhcnRlcmx5O1xufVxuXG5jbGFzcyBZZWFybHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBkYWlseS1ub3RlcyBwbHVnaW5cbiAqIHNvIGl0IHdpbGwgcmVwbGFjZSB7e2RhdGV9fSwge3t0aXRsZX19LCBhbmQge3t0aW1lfX0gd2l0aCB0aGVcbiAqIGZvcm1hdHRlZCB0aW1lc3RhbXAuXG4gKlxuICogTm90ZTogaXQgaGFzIGFuIGFkZGVkIGJvbnVzIHRoYXQgaXQncyBub3QgJ3RvZGF5JyBzcGVjaWZpYy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlWWVhcmx5Tm90ZShkYXRlKSB7XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IHRlbXBsYXRlLCBmb3JtYXQsIGZvbGRlciB9ID0gZ2V0WWVhcmx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgW3RlbXBsYXRlQ29udGVudHMsIElGb2xkSW5mb10gPSBhd2FpdCBnZXRUZW1wbGF0ZUluZm8odGVtcGxhdGUpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gZGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGF3YWl0IGdldE5vdGVQYXRoKGZvbGRlciwgZmlsZW5hbWUpO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRGaWxlID0gYXdhaXQgdmF1bHQuY3JlYXRlKG5vcm1hbGl6ZWRQYXRoLCB0ZW1wbGF0ZUNvbnRlbnRzXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqKGRhdGV8dGltZSlcXHMqKChbKy1dXFxkKykoW3lxbXdkaHNdKSk/XFxzKig6Lis/KT99fS9naSwgKF8sIF90aW1lT3JEYXRlLCBjYWxjLCB0aW1lRGVsdGEsIHVuaXQsIG1vbWVudEZvcm1hdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gd2luZG93Lm1vbWVudCgpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBkYXRlLmNsb25lKCkuc2V0KHtcbiAgICAgICAgICAgICAgICBob3VyOiBub3cuZ2V0KFwiaG91clwiKSxcbiAgICAgICAgICAgICAgICBtaW51dGU6IG5vdy5nZXQoXCJtaW51dGVcIiksXG4gICAgICAgICAgICAgICAgc2Vjb25kOiBub3cuZ2V0KFwic2Vjb25kXCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY2FsYykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnREYXRlLmFkZChwYXJzZUludCh0aW1lRGVsdGEsIDEwKSwgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW9tZW50Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChtb21lbnRGb3JtYXQuc3Vic3RyaW5nKDEpLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqZGF0ZVxccyp9fS9naSwgZmlsZW5hbWUpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGltZVxccyp9fS9naSwgd2luZG93Lm1vbWVudCgpLmZvcm1hdChcIkhIOm1tXCIpKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpdGxlXFxzKn19L2dpLCBmaWxlbmFtZSkpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICB3aW5kb3cuYXBwLmZvbGRNYW5hZ2VyLnNhdmUoY3JlYXRlZEZpbGUsIElGb2xkSW5mbyk7XG4gICAgICAgIHJldHVybiBjcmVhdGVkRmlsZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGZpbGU6ICcke25vcm1hbGl6ZWRQYXRofSdgLCBlcnIpO1xuICAgICAgICBuZXcgb2JzaWRpYW4uTm90aWNlKFwiVW5hYmxlIHRvIGNyZWF0ZSBuZXcgZmlsZS5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0WWVhcmx5Tm90ZShkYXRlLCB5ZWFybHlOb3Rlcykge1xuICAgIHJldHVybiB5ZWFybHlOb3Rlc1tnZXREYXRlVUlEKGRhdGUsIFwieWVhclwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbFllYXJseU5vdGVzKCkge1xuICAgIGNvbnN0IHllYXJseU5vdGVzID0ge307XG4gICAgaWYgKCFhcHBIYXNZZWFybHlOb3Rlc1BsdWdpbkxvYWRlZCgpKSB7XG4gICAgICAgIHJldHVybiB5ZWFybHlOb3RlcztcbiAgICB9XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gZ2V0WWVhcmx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgeWVhcmx5Tm90ZXNGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIXllYXJseU5vdGVzRm9sZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBZZWFybHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvcihcIkZhaWxlZCB0byBmaW5kIHllYXJseSBub3RlcyBmb2xkZXJcIik7XG4gICAgfVxuICAgIG9ic2lkaWFuLlZhdWx0LnJlY3Vyc2VDaGlsZHJlbih5ZWFybHlOb3Rlc0ZvbGRlciwgKG5vdGUpID0+IHtcbiAgICAgICAgaWYgKG5vdGUgaW5zdGFuY2VvZiBvYnNpZGlhbi5URmlsZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IGdldERhdGVGcm9tRmlsZShub3RlLCBcInllYXJcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwieWVhclwiKTtcbiAgICAgICAgICAgICAgICB5ZWFybHlOb3Rlc1tkYXRlU3RyaW5nXSA9IG5vdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4geWVhcmx5Tm90ZXM7XG59XG5cbmZ1bmN0aW9uIGFwcEhhc0RhaWx5Tm90ZXNQbHVnaW5Mb2FkZWQoKSB7XG4gICAgY29uc3QgeyBhcHAgfSA9IHdpbmRvdztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IGRhaWx5Tm90ZXNQbHVnaW4gPSBhcHAuaW50ZXJuYWxQbHVnaW5zLnBsdWdpbnNbXCJkYWlseS1ub3Rlc1wiXTtcbiAgICBpZiAoZGFpbHlOb3Rlc1BsdWdpbiAmJiBkYWlseU5vdGVzUGx1Z2luLmVuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/LmRhaWx5Py5lbmFibGVkO1xufVxuLyoqXG4gKiBYWFg6IFwiV2Vla2x5IE5vdGVzXCIgbGl2ZSBpbiBlaXRoZXIgdGhlIENhbGVuZGFyIHBsdWdpbiBvciB0aGUgcGVyaW9kaWMtbm90ZXMgcGx1Z2luLlxuICogQ2hlY2sgYm90aCB1bnRpbCB0aGUgd2Vla2x5IG5vdGVzIGZlYXR1cmUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBDYWxlbmRhciBwbHVnaW4uXG4gKi9cbmZ1bmN0aW9uIGFwcEhhc1dlZWtseU5vdGVzUGx1Z2luTG9hZGVkKCkge1xuICAgIGNvbnN0IHsgYXBwIH0gPSB3aW5kb3c7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAoYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKFwiY2FsZW5kYXJcIikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/LndlZWtseT8uZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZCgpIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/Lm1vbnRobHk/LmVuYWJsZWQ7XG59XG5mdW5jdGlvbiBhcHBIYXNRdWFydGVybHlOb3Rlc1BsdWdpbkxvYWRlZCgpIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/LnF1YXJ0ZXJseT8uZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGFwcEhhc1llYXJseU5vdGVzUGx1Z2luTG9hZGVkKCkge1xuICAgIGNvbnN0IHsgYXBwIH0gPSB3aW5kb3c7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBwZXJpb2RpY05vdGVzID0gYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik7XG4gICAgcmV0dXJuIHBlcmlvZGljTm90ZXMgJiYgcGVyaW9kaWNOb3Rlcy5zZXR0aW5ncz8ueWVhcmx5Py5lbmFibGVkO1xufVxuZnVuY3Rpb24gZ2V0UGVyaW9kaWNOb3RlU2V0dGluZ3MoZ3JhbnVsYXJpdHkpIHtcbiAgICBjb25zdCBnZXRTZXR0aW5ncyA9IHtcbiAgICAgICAgZGF5OiBnZXREYWlseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgd2VlazogZ2V0V2Vla2x5Tm90ZVNldHRpbmdzLFxuICAgICAgICBtb250aDogZ2V0TW9udGhseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgcXVhcnRlcjogZ2V0UXVhcnRlcmx5Tm90ZVNldHRpbmdzLFxuICAgICAgICB5ZWFyOiBnZXRZZWFybHlOb3RlU2V0dGluZ3MsXG4gICAgfVtncmFudWxhcml0eV07XG4gICAgcmV0dXJuIGdldFNldHRpbmdzKCk7XG59XG5mdW5jdGlvbiBjcmVhdGVQZXJpb2RpY05vdGUoZ3JhbnVsYXJpdHksIGRhdGUpIHtcbiAgICBjb25zdCBjcmVhdGVGbiA9IHtcbiAgICAgICAgZGF5OiBjcmVhdGVEYWlseU5vdGUsXG4gICAgICAgIG1vbnRoOiBjcmVhdGVNb250aGx5Tm90ZSxcbiAgICAgICAgd2VlazogY3JlYXRlV2Vla2x5Tm90ZSxcbiAgICB9O1xuICAgIHJldHVybiBjcmVhdGVGbltncmFudWxhcml0eV0oZGF0ZSk7XG59XG5cbmV4cG9ydHMuREVGQVVMVF9EQUlMWV9OT1RFX0ZPUk1BVCA9IERFRkFVTFRfREFJTFlfTk9URV9GT1JNQVQ7XG5leHBvcnRzLkRFRkFVTFRfTU9OVEhMWV9OT1RFX0ZPUk1BVCA9IERFRkFVTFRfTU9OVEhMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuREVGQVVMVF9RVUFSVEVSTFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX1FVQVJURVJMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuREVGQVVMVF9XRUVLTFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX1dFRUtMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuREVGQVVMVF9ZRUFSTFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX1lFQVJMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuYXBwSGFzRGFpbHlOb3Rlc1BsdWdpbkxvYWRlZCA9IGFwcEhhc0RhaWx5Tm90ZXNQbHVnaW5Mb2FkZWQ7XG5leHBvcnRzLmFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZCA9IGFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuYXBwSGFzUXVhcnRlcmx5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNRdWFydGVybHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuYXBwSGFzV2Vla2x5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNXZWVrbHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuYXBwSGFzWWVhcmx5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNZZWFybHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuY3JlYXRlRGFpbHlOb3RlID0gY3JlYXRlRGFpbHlOb3RlO1xuZXhwb3J0cy5jcmVhdGVNb250aGx5Tm90ZSA9IGNyZWF0ZU1vbnRobHlOb3RlO1xuZXhwb3J0cy5jcmVhdGVQZXJpb2RpY05vdGUgPSBjcmVhdGVQZXJpb2RpY05vdGU7XG5leHBvcnRzLmNyZWF0ZVF1YXJ0ZXJseU5vdGUgPSBjcmVhdGVRdWFydGVybHlOb3RlO1xuZXhwb3J0cy5jcmVhdGVXZWVrbHlOb3RlID0gY3JlYXRlV2Vla2x5Tm90ZTtcbmV4cG9ydHMuY3JlYXRlWWVhcmx5Tm90ZSA9IGNyZWF0ZVllYXJseU5vdGU7XG5leHBvcnRzLmdldEFsbERhaWx5Tm90ZXMgPSBnZXRBbGxEYWlseU5vdGVzO1xuZXhwb3J0cy5nZXRBbGxNb250aGx5Tm90ZXMgPSBnZXRBbGxNb250aGx5Tm90ZXM7XG5leHBvcnRzLmdldEFsbFF1YXJ0ZXJseU5vdGVzID0gZ2V0QWxsUXVhcnRlcmx5Tm90ZXM7XG5leHBvcnRzLmdldEFsbFdlZWtseU5vdGVzID0gZ2V0QWxsV2Vla2x5Tm90ZXM7XG5leHBvcnRzLmdldEFsbFllYXJseU5vdGVzID0gZ2V0QWxsWWVhcmx5Tm90ZXM7XG5leHBvcnRzLmdldERhaWx5Tm90ZSA9IGdldERhaWx5Tm90ZTtcbmV4cG9ydHMuZ2V0RGFpbHlOb3RlU2V0dGluZ3MgPSBnZXREYWlseU5vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0RGF0ZUZyb21GaWxlID0gZ2V0RGF0ZUZyb21GaWxlO1xuZXhwb3J0cy5nZXREYXRlRnJvbVBhdGggPSBnZXREYXRlRnJvbVBhdGg7XG5leHBvcnRzLmdldERhdGVVSUQgPSBnZXREYXRlVUlEO1xuZXhwb3J0cy5nZXRNb250aGx5Tm90ZSA9IGdldE1vbnRobHlOb3RlO1xuZXhwb3J0cy5nZXRNb250aGx5Tm90ZVNldHRpbmdzID0gZ2V0TW9udGhseU5vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0UGVyaW9kaWNOb3RlU2V0dGluZ3MgPSBnZXRQZXJpb2RpY05vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0UXVhcnRlcmx5Tm90ZSA9IGdldFF1YXJ0ZXJseU5vdGU7XG5leHBvcnRzLmdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncyA9IGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0VGVtcGxhdGVJbmZvID0gZ2V0VGVtcGxhdGVJbmZvO1xuZXhwb3J0cy5nZXRXZWVrbHlOb3RlID0gZ2V0V2Vla2x5Tm90ZTtcbmV4cG9ydHMuZ2V0V2Vla2x5Tm90ZVNldHRpbmdzID0gZ2V0V2Vla2x5Tm90ZVNldHRpbmdzO1xuZXhwb3J0cy5nZXRZZWFybHlOb3RlID0gZ2V0WWVhcmx5Tm90ZTtcbmV4cG9ydHMuZ2V0WWVhcmx5Tm90ZVNldHRpbmdzID0gZ2V0WWVhcmx5Tm90ZVNldHRpbmdzO1xuIiwiLy8gT2JzaWRpYW4gYnVuZGxlcyBtb21lbnQuanMgYW5kIGV4cG9zZXMgaXQgYXMgd2luZG93Lm1vbWVudCBhdCBydW50aW1lLlxuLy8gSXRzIHR5cGUgaXMgZGVjbGFyZWQgZ2xvYmFsbHkgdmlhIFwiZGVjbGFyZSBnbG9iYWxcIiBpbiB0eXBlcy5kLnRzLCB3aGljaFxuLy8gd29ya3MgZmluZSBmb3Igd2hvbGUtcHJvamVjdCB0eXBlLWNoZWNraW5nICh0aGlzIHByb2plY3QncyBvd24gdHNjb25maWcsXG4vLyB0ZXN0cywgYnVpbGQpIGJ1dCBub3QgZm9yIHRvb2xzIHRoYXQgdHlwZS1jaGVjayBmaWxlcyBpbiBpc29sYXRpb24gLS1cbi8vIHRob3NlIG5ldmVyIHNlZSB0aGUgYW1iaWVudCBhdWdtZW50YXRpb24gZnJvbSB0aGF0IHNlcGFyYXRlIGZpbGUsIHNvXG4vLyBldmVyeSB3aW5kb3cubW9tZW50IHVzYWdlIHNpbGVudGx5IHJlc29sdmVzIHRvIGBhbnlgIHRoZXJlLCBjYXNjYWRpbmdcbi8vIGludG8gdW5zYWZlLSogbGludCB3YXJuaW5ncyBvbiBldmVyeSBsaW5lIHRoYXQgdG91Y2hlcyBpdHMgcmV0dXJuIHZhbHVlLlxuLy9cbi8vIFJlLWV4cG9ydGluZyB0aHJvdWdoIGEgcmVhbCBFUyBpbXBvcnQgc2lkZXN0ZXBzIHRoYXQ6IGEgbW9kdWxlIGltcG9ydCdzXG4vLyB0eXBlIGlzIHJlc29sdmVkIGZyb20gdGhpcyBmaWxlJ3Mgb3duIGRlY2xhcmVkIHR5cGUgcmVnYXJkbGVzcyBvZiBhbWJpZW50XG4vLyBkZWNsYXJhdGlvbiB2aXNpYmlsaXR5IGVsc2V3aGVyZS5cbi8vXG4vLyBVc2VzIGEgUHJveHkgaW5zdGVhZCBvZiBjYXB0dXJpbmcgd2luZG93Lm1vbWVudCBkaXJlY3RseSBhdCBtb2R1bGUtbG9hZFxuLy8gdGltZSwgc28gbGF0ZXIgbXV0YXRpb25zIG9mIHdpbmRvdy5tb21lbnQgYXJlIHN0aWxsIHJlZmxlY3RlZCAtLSBzb21lXG4vLyB0ZXN0cyBpbnRlbnRpb25hbGx5IG1vbmtleS1wYXRjaCB3aW5kb3cubW9tZW50IG1pZC10ZXN0ICh0byBleGVyY2lzZVxuLy8gZXJyb3ItaGFuZGxpbmcgYnJhbmNoZXMgYXJvdW5kIGEgdGhyb3dpbmcgLmZvcm1hdCgpKSwgYW5kIGEgcGxhaW5cbi8vIGNhcHR1cmVkIHJlZmVyZW5jZSB3b3VsZCBrZWVwIHBvaW50aW5nIGF0IHRoZSBwcmUtbW9jayBmdW5jdGlvbi5cbmNvbnN0IG1vbWVudDogdHlwZW9mIGltcG9ydChcIm1vbWVudFwiKSA9IG5ldyBQcm94eShcbiAgKCgpOiB1bmRlZmluZWQgPT4gdW5kZWZpbmVkKSBhcyB1bmtub3duIGFzIHR5cGVvZiBpbXBvcnQoXCJtb21lbnRcIiksXG4gIHtcbiAgICBhcHBseTogKF90YXJnZXQsIHRoaXNBcmcsIGFyZ3M6IHVua25vd25bXSkgPT5cbiAgICAgIFJlZmxlY3QuYXBwbHkod2luZG93Lm1vbWVudCBhcyB1bmtub3duIGFzICguLi5hOiB1bmtub3duW10pID0+IHVua25vd24sIHRoaXNBcmcsIGFyZ3MpLFxuICAgIGdldDogKF90YXJnZXQsIHByb3AsIHJlY2VpdmVyKTogdW5rbm93biA9PiBSZWZsZWN0LmdldCh3aW5kb3cubW9tZW50LCBwcm9wLCByZWNlaXZlciksXG4gIH1cbik7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudDtcbiIsIi8qKlxuICogTW9kdWxlIHBvdXIgbGUgZm9ybWF0YWdlIGRlIGRhdGVzXG4gKi9cbmltcG9ydCBtb21lbnQgZnJvbSBcIi4vd2luZG93LW1vbWVudFwiO1xuXG4vKipcbiAqIENsYXNzZSBwb3VyIGZvcm1hdGVyIGRlcyBkYXRlc1xuICovXG5leHBvcnQgY2xhc3MgRGF0ZUZvcm1hdHRlciB7XG4gIC8qKlxuICAgKiBGb3JtYXRlIHVuZSBkYXRlIHNlbG9uIGxlIGZvcm1hdCBzcMOpY2lmacOpXG4gICAqIEBwYXJhbSBkYXRlIExhIGRhdGUgw6AgZm9ybWF0ZXJcbiAgICogQHBhcmFtIGZvcm1hdCBMZSBmb3JtYXQgZGUgZGF0ZSAoZm9ybWF0IE1vbWVudC5qcylcbiAgICogQHJldHVybnMgTGEgZGF0ZSBmb3JtYXTDqWUgZW4gc3RyaW5nXG4gICAqL1xuICBzdGF0aWMgZm9ybWF0KGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChmb3JtYXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdGUgdW5lIGRhdGUgYXZlYyBoZXVyZVxuICAgKiBAcGFyYW0gZGF0ZSBMYSBkYXRlIMOgIGZvcm1hdGVyXG4gICAqIEBwYXJhbSBkYXRlRm9ybWF0IExlIGZvcm1hdCBkZSBkYXRlXG4gICAqIEBwYXJhbSB0aW1lRm9ybWF0IExlIGZvcm1hdCBkJ2hldXJlXG4gICAqIEBwYXJhbSBzZXBhcmF0b3IgTGUgc8OpcGFyYXRldXIgZW50cmUgZGF0ZSBldCBoZXVyZSAoZMOpZmF1dDogXCIgXCIpXG4gICAqIEByZXR1cm5zIExhIGRhdGUgZm9ybWF0w6llIGF2ZWMgbCdoZXVyZVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdFdpdGhUaW1lKFxuICAgIGRhdGU6IERhdGUsXG4gICAgZGF0ZUZvcm1hdDogc3RyaW5nLFxuICAgIHRpbWVGb3JtYXQ6IHN0cmluZyxcbiAgICBzZXBhcmF0b3IgPSBcIiBcIlxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGVTdHIgPSB0aGlzLmZvcm1hdChkYXRlLCBkYXRlRm9ybWF0KTtcbiAgICBjb25zdCB0aW1lU3RyID0gdGhpcy5mb3JtYXQoZGF0ZSwgdGltZUZvcm1hdCk7XG4gICAgcmV0dXJuIGAke2RhdGVTdHJ9JHtzZXBhcmF0b3J9JHt0aW1lU3RyfWA7XG4gIH1cbn1cblxuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjYuMlxuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG4gIHZhciBfX2JpbmQgPSBmdW5jdGlvbihmbiwgbWUpeyByZXR1cm4gZnVuY3Rpb24oKXsgcmV0dXJuIGZuLmFwcGx5KG1lLCBhcmd1bWVudHMpOyB9OyB9O1xuXG4gIChmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgcmV0dXJuIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByb290LmkxOG4gPSBmYWN0b3J5KCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByb290LmkxOG4gPSBmYWN0b3J5KCk7XG4gICAgfVxuICB9KSgodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZiAhPT0gbnVsbCA/IHNlbGYgOiB0aGlzKSwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIFRyYW5zbGF0b3IsIGkxOG4sIHRyYW5zbGF0b3I7XG5cbiAgICBUcmFuc2xhdG9yID0gKGZ1bmN0aW9uKCkge1xuICAgICAgZnVuY3Rpb24gVHJhbnNsYXRvcigpIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGUgPSBfX2JpbmQodGhpcy50cmFuc2xhdGUsIHRoaXMpOyAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgIHZhbHVlczoge30sXG4gICAgICAgICAgY29udGV4dHM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29udGV4dCA9IHt9O1xuICAgICAgfVxuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbih0ZXh0LCBkZWZhdWx0TnVtT3JGb3JtYXR0aW5nLCBudW1PckZvcm1hdHRpbmdPckNvbnRleHQsIGZvcm1hdHRpbmdPckNvbnRleHQsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIGRlZmF1bHRUZXh0LCBmb3JtYXR0aW5nLCBpc09iamVjdCwgbnVtO1xuXG4gICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHtcbiAgICAgICAgICBjb250ZXh0ID0gdGhpcy5nbG9iYWxDb250ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgdmFyIHR5cGU7XG5cbiAgICAgICAgICB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJmdW5jdGlvblwiIHx8IHR5cGUgPT09IFwib2JqZWN0XCIgJiYgISFvYmo7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc09iamVjdChkZWZhdWx0TnVtT3JGb3JtYXR0aW5nKSkge1xuICAgICAgICAgIGRlZmF1bHRUZXh0ID0gbnVsbDtcbiAgICAgICAgICBudW0gPSBudWxsO1xuICAgICAgICAgIGZvcm1hdHRpbmcgPSBkZWZhdWx0TnVtT3JGb3JtYXR0aW5nO1xuICAgICAgICAgIGNvbnRleHQgPSBudW1PckZvcm1hdHRpbmdPckNvbnRleHQgfHwgdGhpcy5nbG9iYWxDb250ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdE51bU9yRm9ybWF0dGluZyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgZGVmYXVsdFRleHQgPSBudWxsO1xuICAgICAgICAgICAgbnVtID0gZGVmYXVsdE51bU9yRm9ybWF0dGluZztcbiAgICAgICAgICAgIGZvcm1hdHRpbmcgPSBudW1PckZvcm1hdHRpbmdPckNvbnRleHQ7XG4gICAgICAgICAgICBjb250ZXh0ID0gZm9ybWF0dGluZ09yQ29udGV4dCB8fCB0aGlzLmdsb2JhbENvbnRleHQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmF1bHRUZXh0ID0gZGVmYXVsdE51bU9yRm9ybWF0dGluZztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbnVtT3JGb3JtYXR0aW5nT3JDb250ZXh0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgIG51bSA9IG51bU9yRm9ybWF0dGluZ09yQ29udGV4dDtcbiAgICAgICAgICAgICAgZm9ybWF0dGluZyA9IGZvcm1hdHRpbmdPckNvbnRleHQ7XG4gICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbnVtID0gbnVsbDtcbiAgICAgICAgICAgICAgZm9ybWF0dGluZyA9IG51bU9yRm9ybWF0dGluZ09yQ29udGV4dDtcbiAgICAgICAgICAgICAgY29udGV4dCA9IGZvcm1hdHRpbmdPckNvbnRleHQgfHwgdGhpcy5nbG9iYWxDb250ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPYmplY3QodGV4dCkpIHtcbiAgICAgICAgICBpZiAoaXNPYmplY3QodGV4dFsnaTE4biddKSkge1xuICAgICAgICAgICAgdGV4dCA9IHRleHRbJ2kxOG4nXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlSGFzaCh0ZXh0LCBjb250ZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0KHRleHQsIG51bSwgZm9ybWF0dGluZywgY29udGV4dCwgZGVmYXVsdFRleHQpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihkKSB7XG4gICAgICAgIHZhciBjLCBrLCB2LCBfaSwgX2xlbiwgX3JlZiwgX3JlZjEsIF9yZXN1bHRzO1xuXG4gICAgICAgIGlmICgoZC52YWx1ZXMgIT0gbnVsbCkpIHtcbiAgICAgICAgICBfcmVmID0gZC52YWx1ZXM7XG4gICAgICAgICAgZm9yIChrIGluIF9yZWYpIHtcbiAgICAgICAgICAgIHYgPSBfcmVmW2tdO1xuICAgICAgICAgICAgdGhpcy5kYXRhLnZhbHVlc1trXSA9IHY7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgoZC5jb250ZXh0cyAhPSBudWxsKSkge1xuICAgICAgICAgIF9yZWYxID0gZC5jb250ZXh0cztcbiAgICAgICAgICBfcmVzdWx0cyA9IFtdO1xuICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZjEubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICAgIGMgPSBfcmVmMVtfaV07XG4gICAgICAgICAgICBfcmVzdWx0cy5wdXNoKHRoaXMuZGF0YS5jb250ZXh0cy5wdXNoKGMpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF9yZXN1bHRzO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5zZXRDb250ZXh0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nbG9iYWxDb250ZXh0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uKGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leHRlbnNpb24gPSBleHQ7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5jbGVhckNvbnRleHQgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsQ29udGV4dFtrZXldID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc2V0Q29udGV4dCgpO1xuICAgICAgfTtcblxuICAgICAgVHJhbnNsYXRvci5wcm90b3R5cGUucmVzZXREYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgPSB7XG4gICAgICAgICAgdmFsdWVzOiB7fSxcbiAgICAgICAgICBjb250ZXh0czogW11cbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLnJlc2V0Q29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nbG9iYWxDb250ZXh0ID0ge307XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS50cmFuc2xhdGVIYXNoID0gZnVuY3Rpb24oaGFzaCwgY29udGV4dCkge1xuICAgICAgICB2YXIgaywgdjtcblxuICAgICAgICBmb3IgKGsgaW4gaGFzaCkge1xuICAgICAgICAgIHYgPSBoYXNoW2tdO1xuICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaGFzaFtrXSA9IHRoaXMudHJhbnNsYXRlVGV4dCh2LCBudWxsLCBudWxsLCBjb250ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc2g7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS50cmFuc2xhdGVUZXh0ID0gZnVuY3Rpb24odGV4dCwgbnVtLCBmb3JtYXR0aW5nLCBjb250ZXh0LCBkZWZhdWx0VGV4dCkge1xuICAgICAgICB2YXIgY29udGV4dERhdGEsIHJlc3VsdDtcblxuICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgY29udGV4dCA9IHRoaXMuZ2xvYmFsQ29udGV4dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy51c2VPcmlnaW5hbFRleHQoZGVmYXVsdFRleHQgfHwgdGV4dCwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0RGF0YSA9IHRoaXMuZ2V0Q29udGV4dERhdGEodGhpcy5kYXRhLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGNvbnRleHREYXRhICE9IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLmZpbmRUcmFuc2xhdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIGNvbnRleHREYXRhLnZhbHVlcywgZGVmYXVsdFRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZmluZFRyYW5zbGF0aW9uKHRleHQsIG51bSwgZm9ybWF0dGluZywgdGhpcy5kYXRhLnZhbHVlcywgZGVmYXVsdFRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnVzZU9yaWdpbmFsVGV4dChkZWZhdWx0VGV4dCB8fCB0ZXh0LCBudW0sIGZvcm1hdHRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5maW5kVHJhbnNsYXRpb24gPSBmdW5jdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIGRhdGEsIGRlZmF1bHRUZXh0KSB7XG4gICAgICAgIHZhciBhLCBiLCBjLCBkLCBlLCByZXN1bHQsIHRyaXBsZSwgdmFsdWUsIF9pLCBfbGVuO1xuXG4gICAgICAgIHZhbHVlID0gZGF0YVt0ZXh0XTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGlmICh0aGlzLmV4dGVuc2lvbiAmJiB0eXBlb2YgdGhpcy5leHRlbnNpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmV4dGVuc2lvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIHZhbHVlKTtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5hcHBseU51bWJlcnModmFsdWUsIG51bSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUZvcm1hdHRpbmcodmFsdWUsIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZU9yaWdpbmFsVGV4dChkZWZhdWx0VGV4dCB8fCB0ZXh0LCBudW0sIGZvcm1hdHRpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoKG51bSA9PSBudWxsKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUZvcm1hdHRpbmcodmFsdWUsIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5IHx8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgYSA9IG51bSA9PT0gbnVsbDtcbiAgICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gdmFsdWUubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICAgICAgdHJpcGxlID0gdmFsdWVbX2ldO1xuICAgICAgICAgICAgICBiID0gdHJpcGxlWzBdID09PSBudWxsO1xuICAgICAgICAgICAgICBjID0gdHJpcGxlWzFdID09PSBudWxsO1xuICAgICAgICAgICAgICBkID0gbnVtID49IHRyaXBsZVswXTtcbiAgICAgICAgICAgICAgZSA9IG51bSA8PSB0cmlwbGVbMV07XG4gICAgICAgICAgICAgIGlmIChhICYmIGIgJiYgYyB8fCAhYSAmJiAoIWIgJiYgZCAmJiAoYyB8fCBlKSB8fCBiICYmICFjICYmIGUpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5hcHBseUZvcm1hdHRpbmcodHJpcGxlWzJdLnJlcGxhY2UoXCItJW5cIiwgU3RyaW5nKC1udW0pKSwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUZvcm1hdHRpbmcocmVzdWx0LnJlcGxhY2UoXCIlblwiLCBTdHJpbmcobnVtKSksIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5hcHBseU51bWJlcnMgPSBmdW5jdGlvbihzdHIsIG51bSkge1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShcIi0lblwiLCBTdHJpbmcoLW51bSkpO1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShcIiVuXCIsIFN0cmluZyhudW0pKTtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLmdldENvbnRleHREYXRhID0gZnVuY3Rpb24oZGF0YSwgY29udGV4dCkge1xuICAgICAgICB2YXIgYywgZXF1YWwsIGtleSwgdmFsdWUsIF9pLCBfbGVuLCBfcmVmLCBfcmVmMTtcblxuICAgICAgICBpZiAoZGF0YS5jb250ZXh0cyA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgX3JlZiA9IGRhdGEuY29udGV4dHM7XG4gICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgIGMgPSBfcmVmW19pXTtcbiAgICAgICAgICBlcXVhbCA9IHRydWU7XG4gICAgICAgICAgX3JlZjEgPSBjLm1hdGNoZXM7XG4gICAgICAgICAgZm9yIChrZXkgaW4gX3JlZjEpIHtcbiAgICAgICAgICAgIHZhbHVlID0gX3JlZjFba2V5XTtcbiAgICAgICAgICAgIGVxdWFsID0gZXF1YWwgJiYgdmFsdWUgPT09IGNvbnRleHRba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVxdWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS51c2VPcmlnaW5hbFRleHQgPSBmdW5jdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcpIHtcbiAgICAgICAgaWYgKG51bSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGb3JtYXR0aW5nKHRleHQsIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGb3JtYXR0aW5nKHRleHQucmVwbGFjZShcIiVuXCIsIFN0cmluZyhudW0pKSwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLmFwcGx5Rm9ybWF0dGluZyA9IGZ1bmN0aW9uKHRleHQsIG51bSwgZm9ybWF0dGluZykge1xuICAgICAgICB2YXIgaW5kLCByZWdleDtcblxuICAgICAgICBmb3IgKGluZCBpbiBmb3JtYXR0aW5nKSB7XG4gICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKFwiJXtcIiArIGluZCArIFwifVwiLCBcImdcIik7XG4gICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShyZWdleCwgZm9ybWF0dGluZ1tpbmRdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBUcmFuc2xhdG9yO1xuXG4gICAgfSkoKTtcbiAgICB0cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0b3IoKTtcbiAgICBpMThuID0gdHJhbnNsYXRvci50cmFuc2xhdGU7XG4gICAgaTE4bi50cmFuc2xhdG9yID0gdHJhbnNsYXRvcjtcbiAgICBpMThuLmNyZWF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHZhciB0cmFucztcblxuICAgICAgdHJhbnMgPSBuZXcgVHJhbnNsYXRvcigpO1xuICAgICAgaWYgKGRhdGEgIT0gbnVsbCkge1xuICAgICAgICB0cmFucy5hZGQoZGF0YSk7XG4gICAgICB9XG4gICAgICB0cmFucy50cmFuc2xhdGUuY3JlYXRlID0gaTE4bi5jcmVhdGU7XG4gICAgICB0cmFucy50cmFuc2xhdGUudHJhbnNsYXRvciA9IHRyYW5zO1xuICAgICAgcmV0dXJuIHRyYW5zLnRyYW5zbGF0ZTtcbiAgICB9O1xuICAgIHJldHVybiBpMThuO1xuICB9KTtcblxufSkuY2FsbCh0aGlzKTtcbiIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIlRvZGF5XCIsXG4gIHRvbW9ycm93OiBcIlRvbW9ycm93XCIsXG4gIHllc3RlcmRheTogXCJZZXN0ZXJkYXlcIixcbiAgbmV4dDogXCJOZXh0XCIsXG4gIGxhc3Q6IFwiTGFzdFwiLFxuICB0aGlzOiBcIlRoaXNcIixcbiAgaW46IFwiSW5cIixcbiAgc3VuZGF5OiBcIlN1bmRheVwiLFxuICBtb25kYXk6IFwiTW9uZGF5XCIsXG4gIHR1ZXNkYXk6IFwiVHVlc2RheVwiLFxuICB3ZWRuZXNkYXk6IFwiV2VkbmVzZGF5XCIsXG4gIHRodXJzZGF5OiBcIlRodXJzZGF5XCIsXG4gIGZyaWRheTogXCJGcmlkYXlcIixcbiAgc2F0dXJkYXk6IFwiU2F0dXJkYXlcIixcbiAgaW5taW51dGVzOiBcImluICV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIGluaG91cnM6IFwiaW4gJXt0aW1lRGVsdGF9IGhvdXJzXCIsXG4gIGluZGF5czogXCJpbiAle3RpbWVEZWx0YX0gZGF5c1wiLFxuICBpbndlZWtzOiBcImluICV7dGltZURlbHRhfSB3ZWVrc1wiLFxuICBpbm1vbnRoczogXCJpbiAle3RpbWVEZWx0YX0gbW9udGhzXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF9IGRheXMgYWdvXCIsXG4gIHdlZWtzYWdvOiBcIiV7dGltZURlbHRhfSB3ZWVrcyBhZ29cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSBtb250aHMgYWdvXCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9IG1pbnV0ZXMgYWdvXCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfSBob3VycyBhZ29cIixcbiAgdGltZTogXCJUaW1lXCIsXG4gIG5vdzogXCJOb3dcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0ZXNcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBob3VyXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IGhvdXJcIixcbiAgbWludXRlOiBcIk1pbnV0ZXxNaW51dGVzfG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJIb3VyfEhvdXJzfGh8aHJ8aHJzfGhcIixcbiAgZGF5OiBcIkRheXxEYXlzfGRcIixcbiAgd2VlazogXCJXZWVrfFdlZWtzfHdcIixcbiAgbW9udGg6IFwiTW9udGh8TW9udGhzfE18bW9cIixcbiAgeWVhcjogXCJZZWFyfFllYXJzfHl8eXJ8eXJzXCIsXG4gIHF1YXJ0ZXI6IFwiUXVhcnRlcnxRdWFydGVyc3xRfHF0clwiLFxuICBhbmQ6IFwiQW5kXCIsXG4gIGF0OiBcIkF0XCIsXG4gIGZyb206IFwiRnJvbVwiLFxuICB0bzogXCJUb3xVbnRpbHxUaWxsXCIsXG4gIG9mOiBcIm9mXCIsXG4gIGZpcnN0OiBcImZpcnN0XCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuIiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwi5LuK5pelXCIsXG4gIHRvbW9ycm93OiBcIuaYjuaXpVwiLFxuICB5ZXN0ZXJkYXk6IFwi5pio5pelXCIsXG4gIG5leHQ6IFwi5qyhfOe/jHzmnaVcIiwgLy8gXCJUc3VnaS9Zb2t1L1JhaVwiIChleDogUmFpLXNodSA9IFNlbWFpbmUgcHJvY2hhaW5lKVxuICBsYXN0OiBcIuWJjXzljrt85YWIfOaYqFwiLCAvLyBcIk1hZS9LeW8vU2VuL1Nha3VcIiAoZXg6IFNlbi1zaHUgPSBTZW1haW5lIGRlcm5pw6hyZSlcbiAgdGhpczogXCLku4p85pysfOW9k1wiLCAvLyBcIkltYS9Ib24vVG9cIiAoZXg6IEtvbi1zaHUgPSBDZXR0ZSBzZW1haW5lKVxuICBpbjogXCLjgYLjgah8YXRvXCIsIC8vIFwiQXRvXCIgKFBvdXIgZGlyZSBcIkRhbnMgWCBtaW51dGVzXCIgLT4gXCJBdG8gWCBmdW5cIilcbiAgc3VuZGF5OiBcIuaXpeabnOaXpVwiLFxuICBtb25kYXk6IFwi5pyI5puc5pelXCIsXG4gIHR1ZXNkYXk6IFwi54Gr5puc5pelXCIsXG4gIHdlZG5lc2RheTogXCLmsLTmm5zml6VcIixcbiAgdGh1cnNkYXk6IFwi5pyo5puc5pelXCIsXG4gIGZyaWRheTogXCLph5Hmm5zml6VcIixcbiAgc2F0dXJkYXk6IFwi5Zyf5puc5pelXCIsXG4gIGlubWludXRlczogXCIle3RpbWVEZWx0YX3liIblvoxcIiwgLy8gWCBtaW51dGVzIGFmdGVyXG4gIGluaG91cnM6IFwiJXt0aW1lRGVsdGF95pmC6ZaT5b6MXCIsXG4gIGluZGF5czogXCIle3RpbWVEZWx0YX3ml6XlvoxcIixcbiAgaW53ZWVrczogXCIle3RpbWVEZWx0YX3pgLHplpPlvoxcIixcbiAgaW5tb250aHM6IFwiJXt0aW1lRGVsdGF944O25pyI5b6MXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF95pel5YmNXCIsIC8vIFggZGF5cyBhZ29cbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF96YCx6ZaT5YmNXCIsXG4gIG1vbnRoc2FnbzogXCIle3RpbWVEZWx0YX3jg7bmnIjliY1cIixcbiAgbWludXRlc2FnbzogXCIle3RpbWVEZWx0YX3liIbliY1cIiwgLy8gWCBtaW51dGVzIGFnb1xuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX3mmYLplpPliY1cIiwgLy8gWCBob3VycyBhZ29cbiAgdGltZTogXCLmmYLplpNcIixcbiAgbm93OiBcIuS7ilwiLCAvLyBJbWEgKE1haW50ZW5hbnQpXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0g5YiGXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IOWIhlwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IOaZgumWk1wiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSDmmYLplpNcIixcbiAgbWludXRlOiBcIuWIhnzjgbXjgpN844G344KTfGZ1blwiLFxuICBob3VyOiBcIuaZgumWk3zjgZjjgYvjgpN85pmCfOOBmFwiLFxuICBkYXk6IFwi5pelfOOBq+OBoVwiLFxuICB3ZWVrOiBcIumAsXzpgLHplpN844GX44KF44GGfOOBl+OCheOBhuOBi+OCk1wiLFxuICBtb250aDogXCLmnIh844O25pyIfOOBi+OBkuOBpHzjgYzjgaRcIixcbiAgeWVhcjogXCLlubR844Gt44KTXCIsXG4gIHF1YXJ0ZXI6IFwi5Zub5Y2K5pyfXCIsXG4gIG9mOiBcIuOBrlwiLFxuICBmaXJzdDogXCLmnIDliJ1856ys5LiAfOWInXzmnIDliJ3jga5cIixcbiAgYW5kOiBcIuOBqHzjgYrjgojjgbNcIixcbiAgYXQ6IFwi44GrfOOBp1wiLFxuICBmcm9tOiBcIuOBi+OCiXzjgojjgopcIixcbiAgdG86IFwi44G+44GnfOOBvuOBp+OBq1wiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDsiLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJBdWpvdXJkJ2h1aVwiLFxuICB0b21vcnJvdzogXCJEZW1haW5cIixcbiAgeWVzdGVyZGF5OiBcIkhpZXJcIixcbiAgbmV4dDogXCJwcm9jaGFpbnxwcm9jaGFpbmV8c3VpdmFudHxzdWl2YW50ZVwiLFxuICBsYXN0OiBcImRlcm5pZXJ8ZGVybmnDqHJlfHBhc3PDqXxwYXNzw6llXCIsXG4gIHRoaXM6IFwiY2V8Y2V0dGV8Y2V0XCIsXG4gIGluOiBcImRhbnNcIixcbiAgc3VuZGF5OiBcIkRpbWFuY2hlXCIsXG4gIG1vbmRheTogXCJMdW5kaVwiLFxuICB0dWVzZGF5OiBcIk1hcmRpXCIsXG4gIHdlZG5lc2RheTogXCJNZXJjcmVkaVwiLFxuICB0aHVyc2RheTogXCJKZXVkaVwiLFxuICBmcmlkYXk6IFwiVmVuZHJlZGlcIixcbiAgc2F0dXJkYXk6IFwiU2FtZWRpXCIsXG4gIGlubWludXRlczogXCJkYW5zICV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIGluaG91cnM6IFwiZGFucyAle3RpbWVEZWx0YX0gaGV1cmVzXCIsXG4gIGluZGF5czogXCJkYW5zICV7dGltZURlbHRhfSBqb3Vyc1wiLFxuICBpbndlZWtzOiBcImRhbnMgJXt0aW1lRGVsdGF9IHNlbWFpbmVzXCIsXG4gIGlubW9udGhzOiBcImRhbnMgJXt0aW1lRGVsdGF9IG1vaXNcIixcbiAgZGF5c2FnbzogXCJpbCB5IGEgJXt0aW1lRGVsdGF9IGpvdXJzXCIsXG4gIHdlZWtzYWdvOiBcImlsIHkgYSAle3RpbWVEZWx0YX0gc2VtYWluZXNcIixcbiAgbW9udGhzYWdvOiBcImlsIHkgYSAle3RpbWVEZWx0YX0gbW9pc1wiLFxuICBtaW51dGVzYWdvOiBcImlsIHkgYSAle3RpbWVEZWx0YX0gbWludXRlc1wiLFxuICBob3Vyc2FnbzogXCJpbCB5IGEgJXt0aW1lRGVsdGF9IGhldXJlc1wiLFxuICB0aW1lOiBcImhldXJlXCIsXG4gIG5vdzogXCJtYWludGVuYW50XCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0gbWludXRlc1wiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX0gaGV1cmVcIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX0gaGV1cmVcIixcbiAgbWludXRlOiBcIm1pbnV0ZXxtaW51dGVzfG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJoZXVyZXxoZXVyZXN8aFwiLFxuICBkYXk6IFwiam91cnxqb3Vyc3xqfGRcIixcbiAgd2VlazogXCJzZW1haW5lfHNlbWFpbmVzfHN8d1wiLFxuICBtb250aDogXCJtb2lzfE18bW9cIixcbiAgeWVhcjogXCJhbm7DqWV8YW5uw6llc3xhbnxhbnN8YXx5XCIsXG4gIHF1YXJ0ZXI6IFwidHJpbWVzdHJlfHRyaW1lc3RyZXNcIixcbiAgYW5kOiBcImV0XCIsXG4gIGF0OiBcIsOgfGFcIixcbiAgZnJvbTogXCJkZXxkZXB1aXN8ZHVcIixcbiAgdG86IFwiw6B8YXxqdXNxdSfDoHxqdXNxdSdhdXxhdVwiLFxuICBvZjogXCJkdXxkZVwiLFxuICBmaXJzdDogXCJwcmVtaWVyfHByZW1pw6hyZVwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDsiLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJIb2plXCIsXG4gIHRvbW9ycm93OiBcIkFtYW5ow6NcIixcbiAgeWVzdGVyZGF5OiBcIk9udGVtXCIsXG4gIG5leHQ6IFwicHLDs3hpbW98cHLDs3hpbWF8c2VndWludGVcIixcbiAgbGFzdDogXCLDumx0aW1vfMO6bHRpbWF8cGFzc2Fkb3xwYXNzYWRhXCIsXG4gIHRoaXM6IFwiZXN0ZXxlc3RhXCIsXG4gIGluOiBcImVtfGRhcXVpIGF8ZGFxdWlcIixcbiAgc3VuZGF5OiBcIkRvbWluZ29cIixcbiAgbW9uZGF5OiBcIlNlZ3VuZGEtZmVpcmFcIixcbiAgdHVlc2RheTogXCJUZXLDp2EtZmVpcmFcIixcbiAgd2VkbmVzZGF5OiBcIlF1YXJ0YS1mZWlyYVwiLFxuICB0aHVyc2RheTogXCJRdWludGEtZmVpcmFcIixcbiAgZnJpZGF5OiBcIlNleHRhLWZlaXJhXCIsXG4gIHNhdHVyZGF5OiBcIlPDoWJhZG9cIixcbiAgaW5taW51dGVzOiBcImVtICV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIGluaG91cnM6IFwiZW0gJXt0aW1lRGVsdGF9IGhvcmFzXCIsXG4gIGluZGF5czogXCJlbSAle3RpbWVEZWx0YX0gZGlhc1wiLFxuICBpbndlZWtzOiBcImVtICV7dGltZURlbHRhfSBzZW1hbmFzXCIsXG4gIGlubW9udGhzOiBcImVtICV7dGltZURlbHRhfSBtZXNlc1wiLFxuICBkYXlzYWdvOiBcImjDoSAle3RpbWVEZWx0YX0gZGlhc1wiLFxuICB3ZWVrc2FnbzogXCJow6EgJXt0aW1lRGVsdGF9IHNlbWFuYXNcIixcbiAgbW9udGhzYWdvOiBcImjDoSAle3RpbWVEZWx0YX0gbWVzZXNcIixcbiAgbWludXRlc2FnbzogXCJow6EgJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgaG91cnNhZ286IFwiaMOhICV7dGltZURlbHRhfSBob3Jhc1wiLFxuICBhZ29zdWZmaXg6IFwiYXRyw6FzfGF0cmFzXCIsXG4gIHRpbWU6IFwiaG9yYVwiLFxuICBub3c6IFwiYWdvcmFcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBob3JhXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IGhvcmFcIixcbiAgbWludXRlOiBcIm1pbnV0b3xtaW51dG9zfG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJob3JhfGhvcmFzfGhcIixcbiAgZGF5OiBcImRpYXxkaWFzfGRcIixcbiAgd2VlazogXCJzZW1hbmF8c2VtYW5hc3xzfHdcIixcbiAgbW9udGg6IFwibcOqc3xtZXNlc3xNfG1vXCIsXG4gIHllYXI6IFwiYW5vfGFub3N8YXx5XCIsXG4gIHF1YXJ0ZXI6IFwidHJpbWVzdHJlfHRyaW1lc3RyZXNcIixcbiAgYW5kOiBcImVcIixcbiAgYXQ6IFwiw6BzfGFzfMOgfGFcIixcbiAgZnJvbTogXCJkZXxkZXNkZVwiLFxuICB0bzogXCJhdMOpfGFvfMOgXCIsXG4gIG9mOiBcImRvfGRhfGRlXCIsXG4gIGZpcnN0OiBcInByaW1laXJvfHByaW1laXJhXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0OyIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIkhldXRlXCIsXG4gIHRvbW9ycm93OiBcIk1vcmdlblwiLFxuICB5ZXN0ZXJkYXk6IFwiR2VzdGVyblwiLFxuICBuZXh0OiBcIm7DpGNoc3Rlcnxuw6RjaHN0ZXxuw6RjaHN0ZXN8bsOkY2hzdGVuXCIsXG4gIGxhc3Q6IFwibGV0enRlcnxsZXR6dGV8bGV0enRlc1wiLFxuICB0aGlzOiBcImRpZXNlcnxkaWVzZXxkaWVzZXNcIixcbiAgaW46IFwiaW5cIixcbiAgc3VuZGF5OiBcIlNvbm50YWdcIixcbiAgbW9uZGF5OiBcIk1vbnRhZ1wiLFxuICB0dWVzZGF5OiBcIkRpZW5zdGFnXCIsXG4gIHdlZG5lc2RheTogXCJNaXR0d29jaFwiLFxuICB0aHVyc2RheTogXCJEb25uZXJzdGFnXCIsXG4gIGZyaWRheTogXCJGcmVpdGFnXCIsXG4gIHNhdHVyZGF5OiBcIlNhbXN0YWdcIixcbiAgaW5taW51dGVzOiBcImluICV7dGltZURlbHRhfSBNaW51dGVuXCIsXG4gIGluaG91cnM6IFwiaW4gJXt0aW1lRGVsdGF9IFN0dW5kZW5cIixcbiAgaW5kYXlzOiBcImluICV7dGltZURlbHRhfSBUYWdlblwiLFxuICBpbndlZWtzOiBcImluICV7dGltZURlbHRhfSBXb2NoZW5cIixcbiAgaW5tb250aHM6IFwiaW4gJXt0aW1lRGVsdGF9IE1vbmF0ZW5cIixcbiAgZGF5c2FnbzogXCJ2b3IgJXt0aW1lRGVsdGF9IFRhZ2VuXCIsXG4gIHdlZWtzYWdvOiBcInZvciAle3RpbWVEZWx0YX0gV29jaGVuXCIsXG4gIG1vbnRoc2FnbzogXCJ2b3IgJXt0aW1lRGVsdGF9IE1vbmF0ZW5cIixcbiAgbWludXRlc2FnbzogXCJ2b3IgJXt0aW1lRGVsdGF9IE1pbnV0ZW5cIixcbiAgaG91cnNhZ286IFwidm9yICV7dGltZURlbHRhfSBTdHVuZGVuXCIsXG4gIHRpbWU6IFwiWmVpdFwiLFxuICBub3c6IFwiamV0enRcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBNaW51dGVuXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IE1pbnV0ZW5cIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBTdHVuZGVcIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX0gU3R1bmRlXCIsXG4gIG1pbnV0ZTogXCJNaW51dGV8TWludXRlbnxtaW58bWluc3xtXCIsXG4gIGhvdXI6IFwiU3R1bmRlfFN0dW5kZW58U3RkfGhcIixcbiAgZGF5OiBcIlRhZ3xUYWdlfGR8dFwiLFxuICB3ZWVrOiBcIldvY2hlfFdvY2hlbnx3XCIsXG4gIG1vbnRoOiBcIk1vbmF0fE1vbmF0ZXxNb25hdHN8TXxtb1wiLFxuICB5ZWFyOiBcIkphaHJ8SmFocmV8anx5XCIsXG4gIHF1YXJ0ZXI6IFwiUXVhcnRhbHxRdWFydGFsZXxRdWFydGFsc1wiLFxuICBhbmQ6IFwidW5kXCIsXG4gIGF0OiBcInVtXCIsXG4gIGZyb206IFwidm9ufGFiXCIsXG4gIHRvOiBcImJpc3xiaXMgenVtXCIsXG4gIG9mOiBcImRlc3x2b21cIixcbiAgZmlyc3Q6IFwiZXJzdGVyfGVyc3RlfGVyc3Rlc1wiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDsiLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJWYW5kYWFnXCIsXG4gIHRvbW9ycm93OiBcIk1vcmdlblwiLFxuICB5ZXN0ZXJkYXk6IFwiR2lzdGVyZW5cIixcbiAgLy8gXCJ2b2xnZW5kZVwiL1widm9yaWdlXCIgYWdyZWUgd2l0aCBjb21tb24tZ2VuZGVyIChcImRlXCIpIG5vdW5zIGxpa2UgXCJ3ZWVrXCIvXCJtYWFuZFwiO1xuICAvLyBuZXV0ZXIgKFwiaGV0XCIpIG5vdW5zIGxpa2UgXCJqYWFyXCIvXCJrd2FydGFhbFwiIGRyb3AgdGhlIGZpbmFsIFwiLWVcIiAoXCJ2b2xnZW5kIGphYXJcIiwgbm90XG4gIC8vIFwidm9sZ2VuZGUgamFhclwiKSwgc28gYm90aCBmb3JtcyBhcmUgbGlzdGVkIGhlcmUuXG4gIG5leHQ6IFwidm9sZ2VuZGV8dm9sZ2VuZFwiLFxuICBsYXN0OiBcInZvcmlnZXx2b3JpZ3xsYWF0c3RlXCIsXG4gIHRoaXM6IFwiZGV6ZXxkaXRcIixcbiAgaW46IFwib3ZlclwiLFxuICBzdW5kYXk6IFwiem9uZGFnXCIsXG4gIG1vbmRheTogXCJtYWFuZGFnXCIsXG4gIHR1ZXNkYXk6IFwiZGluc2RhZ1wiLFxuICB3ZWRuZXNkYXk6IFwid29lbnNkYWdcIixcbiAgdGh1cnNkYXk6IFwiZG9uZGVyZGFnXCIsXG4gIGZyaWRheTogXCJ2cmlqZGFnXCIsXG4gIHNhdHVyZGF5OiBcInphdGVyZGFnXCIsXG4gIGlubWludXRlczogXCJvdmVyICV7dGltZURlbHRhfSBtaW51dGVuXCIsXG4gIGluaG91cnM6IFwib3ZlciAle3RpbWVEZWx0YX0gdXJlblwiLFxuICBpbmRheXM6IFwib3ZlciAle3RpbWVEZWx0YX0gZGFnZW5cIixcbiAgaW53ZWVrczogXCJvdmVyICV7dGltZURlbHRhfSB3ZWtlblwiLFxuICBpbm1vbnRoczogXCJvdmVyICV7dGltZURlbHRhfSBtYWFuZGVuXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF9IGRhZ2VuIGdlbGVkZW5cIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF9IHdla2VuIGdlbGVkZW5cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSBtYWFuZGVuIGdlbGVkZW5cIixcbiAgbWludXRlc2FnbzogXCIle3RpbWVEZWx0YX0gbWludXRlbiBnZWxlZGVuXCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfSB1cmVuIGdlbGVkZW5cIixcbiAgdGltZTogXCJ0aWpkXCIsXG4gIG5vdzogXCJudVwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF9IG1pbnV0ZW5cIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX0gbWludXRlblwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IHV1clwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSB1dXJcIixcbiAgbWludXRlOiBcIm1pbnV1dHxtaW51dGVufG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJ1dXJ8dXJlbnx1fGhcIixcbiAgZGF5OiBcImRhZ3xkYWdlbnxkXCIsXG4gIHdlZWs6IFwid2Vla3x3ZWtlbnx3XCIsXG4gIG1vbnRoOiBcIm1hYW5kfG1hYW5kZW58TXxtb1wiLFxuICB5ZWFyOiBcImphYXJ8amFyZW58anx5XCIsXG4gIHF1YXJ0ZXI6IFwia3dhcnRhYWx8a3dhcnRhbGVuXCIsXG4gIGFuZDogXCJlblwiLFxuICBhdDogXCJvbVwiLFxuICBmcm9tOiBcInZhbnx2YW5hZlwiLFxuICB0bzogXCJ0b3R8dG90IGVuIG1ldFwiLFxuICBvZjogXCJ2YW5cIixcbiAgZmlyc3Q6IFwiZWVyc3RlXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuIiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwiSG95XCIsXG4gIHRvbW9ycm93OiBcIk1hw7FhbmFcIixcbiAgeWVzdGVyZGF5OiBcIkF5ZXJcIixcbiAgbmV4dDogXCJwcsOzeGltb3xwcsOzeGltYXxzaWd1aWVudGVcIixcbiAgbGFzdDogXCLDumx0aW1vfMO6bHRpbWF8cGFzYWRvfHBhc2FkYVwiLFxuICB0aGlzOiBcImVzdGV8ZXN0YVwiLFxuICBpbjogXCJlbnxkZW50cm8gZGVcIixcbiAgc3VuZGF5OiBcIkRvbWluZ29cIixcbiAgbW9uZGF5OiBcIkx1bmVzXCIsXG4gIHR1ZXNkYXk6IFwiTWFydGVzXCIsXG4gIHdlZG5lc2RheTogXCJNacOpcmNvbGVzXCIsXG4gIHRodXJzZGF5OiBcIkp1ZXZlc1wiLFxuICBmcmlkYXk6IFwiVmllcm5lc1wiLFxuICBzYXR1cmRheTogXCJTw6FiYWRvXCIsXG4gIGlubWludXRlczogXCJlbiAle3RpbWVEZWx0YX0gbWludXRvc1wiLFxuICBpbmhvdXJzOiBcImVuICV7dGltZURlbHRhfSBob3Jhc1wiLFxuICBpbmRheXM6IFwiZW4gJXt0aW1lRGVsdGF9IGTDrWFzXCIsXG4gIGlud2Vla3M6IFwiZW4gJXt0aW1lRGVsdGF9IHNlbWFuYXNcIixcbiAgaW5tb250aHM6IFwiZW4gJXt0aW1lRGVsdGF9IG1lc2VzXCIsXG4gIGRheXNhZ286IFwiaGFjZSAle3RpbWVEZWx0YX0gZMOtYXNcIixcbiAgd2Vla3NhZ286IFwiaGFjZSAle3RpbWVEZWx0YX0gc2VtYW5hc1wiLFxuICBtb250aHNhZ286IFwiaGFjZSAle3RpbWVEZWx0YX0gbWVzZXNcIixcbiAgbWludXRlc2FnbzogXCJoYWNlICV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIGhvdXJzYWdvOiBcImhhY2UgJXt0aW1lRGVsdGF9IGhvcmFzXCIsXG4gIGFnb3N1ZmZpeDogXCJhdHLDoXN8YXRyYXNcIixcbiAgdGltZTogXCJob3JhXCIsXG4gIG5vdzogXCJhaG9yYVwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX0gbWludXRvc1wiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IGhvcmFcIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX0gaG9yYVwiLFxuICBtaW51dGU6IFwibWludXRvfG1pbnV0b3N8bWlufG1pbnN8bVwiLFxuICBob3VyOiBcImhvcmF8aG9yYXN8aFwiLFxuICBkYXk6IFwiZMOtYXxkw61hc3xkXCIsXG4gIHdlZWs6IFwic2VtYW5hfHNlbWFuYXN8c3x3XCIsXG4gIG1vbnRoOiBcIm1lc3xtZXNlc3xNfG1vXCIsXG4gIHllYXI6IFwiYcOxb3xhw7Fvc3xhfHlcIixcbiAgcXVhcnRlcjogXCJ0cmltZXN0cmV8dHJpbWVzdHJlc1wiLFxuICBhbmQ6IFwieVwiLFxuICBhdDogXCJhIGxhc3xhIGxhfGF8ZW5cIixcbiAgZnJvbTogXCJkZXxkZXNkZVwiLFxuICB0bzogXCJhfGhhc3RhXCIsXG4gIG9mOiBcImRlfGRlbFwiLFxuICBmaXJzdDogXCJwcmltZXJ8cHJpbWVyYVwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDtcblxuIiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwiT2dnaVwiLFxuICB0b21vcnJvdzogXCJEb21hbmlcIixcbiAgeWVzdGVyZGF5OiBcIkllcmlcIixcbiAgbmV4dDogXCJwcm9zc2ltb3xwcm9zc2ltYXxzZWd1ZW50ZVwiLFxuICBsYXN0OiBcInVsdGltb3x1bHRpbWF8c2NvcnNvfHNjb3JzYXxwYXNzYXRvfHBhc3NhdGFcIixcbiAgdGhpczogXCJxdWVzdG98cXVlc3RhXCIsXG4gIGluOiBcImlufHRyYVwiLFxuICBzdW5kYXk6IFwiRG9tZW5pY2FcIixcbiAgbW9uZGF5OiBcIkx1bmVkw6xcIixcbiAgdHVlc2RheTogXCJNYXJ0ZWTDrFwiLFxuICB3ZWRuZXNkYXk6IFwiTWVyY29sZWTDrFwiLFxuICB0aHVyc2RheTogXCJHaW92ZWTDrFwiLFxuICBmcmlkYXk6IFwiVmVuZXJkw6xcIixcbiAgc2F0dXJkYXk6IFwiU2FiYXRvXCIsXG4gIGlubWludXRlczogXCJ0cmEgJXt0aW1lRGVsdGF9IG1pbnV0aVwiLFxuICBpbmhvdXJzOiBcInRyYSAle3RpbWVEZWx0YX0gb3JlXCIsXG4gIGluZGF5czogXCJ0cmEgJXt0aW1lRGVsdGF9IGdpb3JuaVwiLFxuICBpbndlZWtzOiBcInRyYSAle3RpbWVEZWx0YX0gc2V0dGltYW5lXCIsXG4gIGlubW9udGhzOiBcInRyYSAle3RpbWVEZWx0YX0gbWVzaVwiLFxuICBkYXlzYWdvOiBcIiV7dGltZURlbHRhfSBnaW9ybmkgZmFcIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF9IHNldHRpbWFuZSBmYVwiLFxuICBtb250aHNhZ286IFwiJXt0aW1lRGVsdGF9IG1lc2kgZmFcIixcbiAgbWludXRlc2FnbzogXCIle3RpbWVEZWx0YX0gbWludXRpIGZhXCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfSBvcmUgZmFcIixcbiAgdGltZTogXCJvcmFcIixcbiAgbm93OiBcImFkZXNzb3xvcmFcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dGlcIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX0gbWludXRpXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX0gb3JhXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IG9yYVwiLFxuICBtaW51dGU6IFwibWludXRvfG1pbnV0aXxtaW58bWluc3xtXCIsXG4gIGhvdXI6IFwib3JhfG9yZXxoXCIsXG4gIGRheTogXCJnaW9ybm98Z2lvcm5pfGd8ZFwiLFxuICB3ZWVrOiBcInNldHRpbWFuYXxzZXR0aW1hbmV8c3x3XCIsXG4gIG1vbnRoOiBcIm1lc2V8bWVzaXxNfG1vXCIsXG4gIHllYXI6IFwiYW5ub3xhbm5pfGF8eVwiLFxuICBxdWFydGVyOiBcInRyaW1lc3RyZXx0cmltZXN0cmlcIixcbiAgYW5kOiBcImVcIixcbiAgYXQ6IFwiYWxsZXxhbGxhfGFcIixcbiAgZnJvbTogXCJkYXxkYWx8ZGFsbGFcIixcbiAgdG86IFwiYXxmaW5vIGF8ZmlubyBhbHxmaW5vIGFsbGFcIixcbiAgb2Y6IFwiZGVsfGRlbGxhfGRpXCIsXG4gIGZpcnN0OiBcInByaW1vfHByaW1hXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuXG4iLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCLQodC10LPQvtC00L3Rj1wiLFxuICB0b21vcnJvdzogXCLQl9Cw0LLRgtGA0LBcIixcbiAgeWVzdGVyZGF5OiBcItCS0YfQtdGA0LBcIixcbiAgbmV4dDogXCLRgdC70LXQtNGD0Y7RidC40Ll80YHQu9C10LTRg9GO0YnQsNGPfNGB0LvQtdC00YPRjtGJ0LXQtXzRgdC70LXQtNGD0Y7RidC40LVcIixcbiAgbGFzdDogXCLQv9C+0YHQu9C10LTQvdC40Ll80L/QvtGB0LvQtdC00L3Rj9GPfNC/0L7RgdC70LXQtNC90LXQtXzQv9C+0YHQu9C10LTQvdC40LV80L/RgNC+0YjQu9GL0Ll80L/RgNC+0YjQu9Cw0Y980L/RgNC+0YjQu9C+0LV80L/RgNC+0YjQu9GL0LVcIixcbiAgdGhpczogXCLRjdGC0L7RgnzRjdGC0LB80Y3RgtC+fNGN0YLQuFwiLFxuICBpbjogXCLRh9C10YDQtdC3XCIsXG4gIHN1bmRheTogXCLQktC+0YHQutGA0LXRgdC10L3RjNC1fNCS0L7RgdC60YDQtdGB0LXQvdGM0Y9cIixcbiAgbW9uZGF5OiBcItCf0L7QvdC10LTQtdC70YzQvdC40Lp80J/QvtC90LXQtNC10LvRjNC90LjQutCwXCIsXG4gIHR1ZXNkYXk6IFwi0JLRgtC+0YDQvdC40Lp80JLRgtC+0YDQvdC40LrQsFwiLFxuICB3ZWRuZXNkYXk6IFwi0KHRgNC10LTQsHzQodGA0LXQtNGLXCIsXG4gIHRodXJzZGF5OiBcItCn0LXRgtCy0LXRgNCzfNCn0LXRgtCy0LXRgNCz0LBcIixcbiAgZnJpZGF5OiBcItCf0Y/RgtC90LjRhtCwfNCf0Y/RgtC90LjRhtGLXCIsXG4gIHNhdHVyZGF5OiBcItCh0YPQsdCx0L7RgtCwfNCh0YPQsdCx0L7RgtGLXCIsXG4gIGlubWludXRlczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDQvNC40L3Rg9GCfNC80LjQvdGD0YLRg3zQvNC40L3Rg9GC0YtcIixcbiAgaW5ob3VyczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDRh9Cw0YF80YfQsNGB0LB80YfQsNGB0L7QslwiLFxuICBpbmRheXM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LTQtdC90Yx80LTQvdGPfNC00L3QtdC5XCIsXG4gIGlud2Vla3M6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0L3QtdC00LXQu9GOfNC90LXQtNC10LvQuHzQvdC10LTQtdC70YxcIixcbiAgaW5tb250aHM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LzQtdGB0Y/RhnzQvNC10YHRj9GG0LB80LzQtdGB0Y/RhtC10LJcIixcbiAgZGF5c2FnbzogXCIle3RpbWVEZWx0YX0g0LTQtdC90Yx80LTQvdGPfNC00L3QtdC5INC90LDQt9Cw0LRcIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF9INC90LXQtNC10LvRjnzQvdC10LTQtdC70Lh80L3QtdC00LXQu9GMINC90LDQt9Cw0LRcIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSDQvNC10YHRj9GGfNC80LXRgdGP0YbQsHzQvNC10YHRj9GG0LXQsiDQvdCw0LfQsNC0XCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9INC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRiyDQvdCw0LfQsNC0XCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfSDRh9Cw0YF80YfQsNGB0LB80YfQsNGB0L7QsiDQvdCw0LfQsNC0XCIsXG4gIHRpbWU6IFwi0LLRgNC10LzRj1wiLFxuICBub3c6IFwi0YHQtdC50YfQsNGBXCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0g0LzQuNC90YPRgnzQvNC40L3Rg9GC0YN80LzQuNC90YPRgtGLXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9INC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRi1wiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9INGH0LDRgXzRh9Cw0YHQsHzRh9Cw0YHQvtCyXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9INGH0LDRgXzRh9Cw0YHQsHzRh9Cw0YHQvtCyXCIsXG4gIG1pbnV0ZTogXCLQvNC40L3Rg9GC0LB80LzQuNC90YPRgtGLfNC80LjQvdGD0YJ80LzQuNC9fNC8XCIsXG4gIGhvdXI6IFwi0YfQsNGBfNGH0LDRgdCwfNGH0LDRgdC+0LJ80YdcIixcbiAgZGF5OiBcItC00LXQvdGMfNC00L3Rj3zQtNC90LXQuXzQtFwiLFxuICB3ZWVrOiBcItC90LXQtNC10LvRj3zQvdC10LTQtdC70Lh80L3QtdC00LXQu9GMfNC9fNC90LXQtFwiLFxuICBtb250aDogXCLQvNC10YHRj9GGfNC80LXRgdGP0YbQsHzQvNC10YHRj9GG0LXQsnzQvNC10YF80LxcIixcbiAgeWVhcjogXCLQs9C+0LR80LPQvtC00LB80LvQtdGCfNCzfNC7XCIsXG4gIHF1YXJ0ZXI6IFwi0LrQstCw0YDRgtCw0Lt80LrQstCw0YDRgtCw0LvQsHzQutCy0LDRgNGC0LDQu9C+0LJ80LrQslwiLFxuICBhbmQ6IFwi0LhcIixcbiAgYXQ6IFwi0LJcIixcbiAgZnJvbTogXCLRgXzQvtGCXCIsXG4gIHRvOiBcItC00L580LpcIixcbiAgb2Y6IFwi0LjQt3zQvtGCXCIsXG4gIGZpcnN0OiBcItC/0LXRgNCy0YvQuXzQv9C10YDQstCw0Y980L/QtdGA0LLQvtC1fNC/0LXRgNCy0YvQtVwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDtcbiIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcItCh0YzQvtCz0L7QtNC90ZZcIixcbiAgdG9tb3Jyb3c6IFwi0JfQsNCy0YLRgNCwXCIsXG4gIHllc3RlcmRheTogXCLQktGH0L7RgNCwXCIsXG4gIG5leHQ6IFwi0L3QsNGB0YLRg9C/0L3QuNC5fNC90LDRgdGC0YPQv9C90LB80L3QsNGB0YLRg9C/0L3QtXzQvdCw0YHRgtGD0L/QvdGWXCIsXG4gIGxhc3Q6IFwi0L7RgdGC0LDQvdC90ZbQuXzQvtGB0YLQsNC90L3Rj3zQvtGB0YLQsNC90L3RlHzQvtGB0YLQsNC90L3RlnzQvNC40L3Rg9C70LjQuXzQvNC40L3Rg9C70LB80LzQuNC90YPQu9C1fNC80LjQvdGD0LvRllwiLFxuICB0aGlzOiBcItGG0LXQuXzRhtGPfNGG0LV80YbRllwiLFxuICBpbjogXCLRh9C10YDQtdC3XCIsXG4gIHN1bmRheTogXCLQndC10LTRltC70Y980J3QtdC00ZbQu9GWXCIsXG4gIG1vbmRheTogXCLQn9C+0L3QtdC00ZbQu9C+0Lp80J/QvtC90LXQtNGW0LvQutCwXCIsXG4gIHR1ZXNkYXk6IFwi0JLRltCy0YLQvtGA0L7QunzQktGW0LLRgtC+0YDQutCwXCIsXG4gIHdlZG5lc2RheTogXCLQodC10YDQtdC00LB80KHQtdGA0LXQtNC4XCIsXG4gIHRodXJzZGF5OiBcItCn0LXRgtCy0LXRgHzQp9C10YLQstC10YDQs9CwXCIsXG4gIGZyaWRheTogXCLQnyfRj9GC0L3QuNGG0Y980J8n0Y/RgtC90LjRhtGWXCIsXG4gIHNhdHVyZGF5OiBcItCh0YPQsdC+0YLQsHzQodGD0LHQvtGC0LhcIixcbiAgaW5taW51dGVzOiBcItGH0LXRgNC10LcgJXt0aW1lRGVsdGF9INGF0LLQuNC70LjQvdGDfNGF0LLQuNC70LjQvdC4fNGF0LLQuNC70LjQvVwiLFxuICBpbmhvdXJzOiBcItGH0LXRgNC10LcgJXt0aW1lRGVsdGF9INCz0L7QtNC40L3Rg3zQs9C+0LTQuNC90Lh80LPQvtC00LjQvVwiLFxuICBpbmRheXM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LTQtdC90Yx80LTQvdGWfNC00L3RltCyXCIsXG4gIGlud2Vla3M6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0YLQuNC20LTQtdC90Yx80YLQuNC20L3RlnzRgtC40LbQvdGW0LJcIixcbiAgaW5tb250aHM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LzRltGB0Y/RhtGMfNC80ZbRgdGP0YbRlnzQvNGW0YHRj9GG0ZbQslwiLFxuICBkYXlzYWdvOiBcIiV7dGltZURlbHRhfSDQtNC10L3RjHzQtNC90ZZ80LTQvdGW0LIg0YLQvtC80YNcIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF9INGC0LjQttC00LXQvdGMfNGC0LjQttC90ZZ80YLQuNC20L3RltCyINGC0L7QvNGDXCIsXG4gIG1vbnRoc2FnbzogXCIle3RpbWVEZWx0YX0g0LzRltGB0Y/RhtGMfNC80ZbRgdGP0YbRlnzQvNGW0YHRj9GG0ZbQsiDRgtC+0LzRg1wiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfSDRhdCy0LjQu9C40L3Rg3zRhdCy0LjQu9C40L3QuHzRhdCy0LjQu9C40L0g0YLQvtC80YNcIixcbiAgaG91cnNhZ286IFwiJXt0aW1lRGVsdGF9INCz0L7QtNC40L3Rg3zQs9C+0LTQuNC90Lh80LPQvtC00LjQvSDRgtC+0LzRg1wiLFxuICB0aW1lOiBcItGH0LDRgVwiLFxuICBub3c6IFwi0LfQsNGA0LDQt1wiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF9INGF0LLQuNC70LjQvdGDfNGF0LLQuNC70LjQvdC4fNGF0LLQuNC70LjQvVwiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfSDRhdCy0LjQu9C40L3Rg3zRhdCy0LjQu9C40L3QuHzRhdCy0LjQu9C40L1cIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSDQs9C+0LTQuNC90YN80LPQvtC00LjQvdC4fNCz0L7QtNC40L1cIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX0g0LPQvtC00LjQvdGDfNCz0L7QtNC40L3QuHzQs9C+0LTQuNC9XCIsXG4gIG1pbnV0ZTogXCLRhdCy0LjQu9C40L3QsHzRhdCy0LjQu9C40L3QuHzRhdCy0LjQu9C40L180YXQsnzQvFwiLFxuICBob3VyOiBcItCz0L7QtNC40L3QsHzQs9C+0LTQuNC90Lh80LPQvtC00LjQvXzQs9C+0LR80LNcIixcbiAgZGF5OiBcItC00LXQvdGMfNC00L3RlnzQtNC90ZbQsnzQtFwiLFxuICB3ZWVrOiBcItGC0LjQttC00LXQvdGMfNGC0LjQttC90ZZ80YLQuNC20L3RltCyfNGCfNGC0LjQtlwiLFxuICBtb250aDogXCLQvNGW0YHRj9GG0Yx80LzRltGB0Y/RhtGWfNC80ZbRgdGP0YbRltCyfNC80ZbRgXzQvFwiLFxuICB5ZWFyOiBcItGA0ZbQunzRgNC+0LrQuHzRgNC+0LrRltCyfNGAXCIsXG4gIHF1YXJ0ZXI6IFwi0LrQstCw0YDRgtCw0Lt80LrQstCw0YDRgtCw0LvRg3zQutCy0LDRgNGC0LDQu9GW0LJ80LrQslwiLFxuICBhbmQ6IFwi0ZZcIixcbiAgYXQ6IFwi0L5cIixcbiAgZnJvbTogXCLQt3zQstGW0LRcIixcbiAgdG86IFwi0LTQvnzQulwiLFxuICBvZjogXCLQt3zQstGW0LRcIixcbiAgZmlyc3Q6IFwi0L/QtdGA0YjQuNC5fNC/0LXRgNGI0LB80L/QtdGA0YjQtXzQv9C10YDRiNGWXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuIiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwi5LuK5aSpXCIsXG4gIHRvbW9ycm93OiBcIuaYjuWkqVwiLFxuICB5ZXN0ZXJkYXk6IFwi5pio5aSpXCIsXG4gIC8vIEZvcm1hbCAoXCLkuIvkuIDlgItcIi9cIuS4i+S4gOS4qlwiKSBhbmQgc2hvcnQgcHJlZml4IChcIuS4i1wiLCBlLmcuIFwi5LiL5pif5pyf5LiAXCIvXCLkuIvlkajkuIBcIikgZm9ybXMsXG4gIC8vIGNvdmVyaW5nIGJvdGggVHJhZGl0aW9uYWwgYW5kIFNpbXBsaWZpZWQgc2NyaXB0LlxuICBuZXh0OiBcIuS4i+S4gOWAi3zkuIvkuIDkuKp85LiLXCIsXG4gIC8vIFwi5pyA5b6ML+acgOWQjlwiIChcImxhc3RcIiBpbiBnZW5lcmFsKSwgXCLkuIrkuIDlgIsv5LiK5LiA5LiqXCIgKFwicHJldmlvdXNcIiksIGFuZCBzaG9ydCBcIuS4ilwiXG4gIC8vIChlLmcuIFwi5LiK5pif5pyf5LiAXCIvXCLkuIrlkajkuIBcIikuXG4gIGxhc3Q6IFwi5pyA5b6MfOacgOWQjnzkuIrkuIDlgIt85LiK5LiA5LiqfOS4ilwiLFxuICAvLyBcIumAmeWAiy/ov5nkuKpcIiAoZm9ybWFsKSBhbmQgc2hvcnQgXCLpgJkv6L+ZXCIgKGUuZy4gXCLpgJnmmJ/mnJ/kuIBcIi9cIui/meWRqOS4gFwiKS5cbiAgdGhpczogXCLpgJnlgIt86L+Z5LiqfOmAmXzov5lcIixcbiAgaW46IFwi5ZyoXCIsXG4gIC8vIFwi56au5oucL+ekvOaLnFwiIChjb2xsb3F1aWFsLCBvcmlnaW5hbGx5IFwid29yc2hpcCBkYXlcIikgaXMgYWxzbyBleHRyZW1lbHkgY29tbW9uXG4gIC8vIGZvciB3ZWVrZGF5cywgZS5nLiBcIuemruaLnOS4gFwiL1wi56S85ouc5LiAXCIgZm9yIE1vbmRheS5cbiAgc3VuZGF5OiBcIuaYn+acn+aXpXzlkajml6V86YCx5pelfOaYn+acn+WkqXznpq7mi5zml6V856S85ouc5pelfOemruaLnOWkqXznpLzmi5zlpKlcIixcbiAgbW9uZGF5OiBcIuaYn+acn+S4gHzlkajkuIB86YCx5LiAfOemruaLnOS4gHznpLzmi5zkuIBcIixcbiAgdHVlc2RheTogXCLmmJ/mnJ/kuox85ZGo5LqMfOmAseS6jHznpq7mi5zkuox856S85ouc5LqMXCIsXG4gIHdlZG5lc2RheTogXCLmmJ/mnJ/kuIl85ZGo5LiJfOmAseS4iXznpq7mi5zkuIl856S85ouc5LiJXCIsXG4gIHRodXJzZGF5OiBcIuaYn+acn+Wbm3zlkajlm5t86YCx5ZubfOemruaLnOWbm3znpLzmi5zlm5tcIixcbiAgZnJpZGF5OiBcIuaYn+acn+S6lHzlkajkupR86YCx5LqUfOemruaLnOS6lHznpLzmi5zkupRcIixcbiAgc2F0dXJkYXk6IFwi5pif5pyf5YWtfOWRqOWFrXzpgLHlha1856au5ouc5YWtfOekvOaLnOWFrVwiLFxuICBpbm1pbnV0ZXM6IFwiJXt0aW1lRGVsdGF95YiG6ZCY5b6MXCIsXG4gIGluaG91cnM6IFwiJXt0aW1lRGVsdGF95bCP5pmC5b6MXCIsXG4gIGluZGF5czogXCIle3RpbWVEZWx0YX3lpKnlvoxcIixcbiAgaW53ZWVrczogXCIle3RpbWVEZWx0YX3pgLHlvoxcIixcbiAgaW5tb250aHM6IFwiJXt0aW1lRGVsdGF95YCL5pyI5b6MXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF95aSp5YmNXCIsXG4gIHdlZWtzYWdvOiBcIiV7dGltZURlbHRhfemAseWJjVwiLFxuICBtb250aHNhZ286IFwiJXt0aW1lRGVsdGF95YCL5pyI5YmNXCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF95YiG6ZCY5YmNXCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfeWwj+aZguWJjVwiLFxuICAvLyBOb3QgdXNlZCBmb3IgZGlzcGxheSwgb25seSBmb3IgbWF0Y2hpbmcgXCJOIHVuaXRcIiArIHRoaXMgbWFya2VyIChlLmcuXG4gIC8vIFwiMuWkqeW+jFwiL1wiMuWkqeWQjlwiID0gXCIyIGRheXNcIiArIFwi5b6MXCIvXCLlkI5cIiA9IFwiMiBkYXlzIGxhdGVyXCIpLiBLZXB0IHNlcGFyYXRlIGZyb21cbiAgLy8gdGhlICV7dGltZURlbHRhfSB0ZW1wbGF0ZXMgYWJvdmUgKHdoaWNoIGFyZSBhbHNvIHVzZWQgdmVyYmF0aW0gaW5cbiAgLy8gYXV0b3N1Z2dlc3QgbGFiZWxzIGFuZCBkb24ndCBzdXBwb3J0IFwifFwiIGFsdGVybmF0aXZlcyB0aGUgc2FtZSB3YXkpLlxuICAvLyBcIuS5i+W+jC/kuYvlkI5cIiBhbmQgXCLku6Xlvowv5Lul5ZCOXCIgYXJlIGVxdWFsbHkgY29tbW9uIGFsdGVybmF0aXZlcyB0byBiYXJlIFwi5b6ML+WQjlwiXG4gIC8vIChlLmcuIFwiMuWkqeS5i+W+jFwiLCBcIjPlgIvmnIjku6XlvoxcIikuXG4gIGxhdGVyOiBcIuW+jHzlkI585LmL5b6MfOS5i+WQjnzku6Xlvox85Lul5ZCOXCIsXG4gIHRpbWU6IFwi5pmC6ZaTfOaXtumXtFwiLFxuICBub3c6IFwi54++5ZyofOeOsOWcqFwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF95YiG6ZCYXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF95YiG6ZCYXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX3lsI/mmYJcIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX3lsI/mmYJcIixcbiAgbWludXRlOiBcIuWIhumQmHzliIbpkp985YiGXCIsXG4gIGhvdXI6IFwi5bCP5pmCfOWwj+aXtnzmmYJ85pe2XCIsXG4gIGRheTogXCLlpKl85pelXCIsXG4gIHdlZWs6IFwi6YCxfOWRqHzmmJ/mnJ985YCL5pif5pyffOS4quaYn+acn3znpq7mi5x856S85oucfOWAi+emruaLnHzkuKrnpLzmi5xcIixcbiAgbW9udGg6IFwi5pyIfOWAi+aciHzkuKrmnIhcIixcbiAgeWVhcjogXCLlubRcIixcbiAgcXVhcnRlcjogXCLlraPluqZ85YCL5a2j5bqmfOS4quWto+W6plwiLFxuICBhbmQ6IFwi5ZKMXCIsXG4gIGF0OiBcIuWcqFwiLFxuICBmcm9tOiBcIuW+nnzku4586IeqXCIsXG4gIHRvOiBcIuWIsHzoh7NcIixcbiAgb2Y6IFwi55qEXCIsXG4gIGZpcnN0OiBcIuesrOS4gHznrKzkuIDlgIt856ys5LiA5LiqXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuIiwiLy8gS29yZWFuIHN1cHBvcnQuIFZvY2FidWxhcnkgZm9yIHRvZGF5L3RvbW9ycm93L3llc3RlcmRheSwgd2Vla2RheXMsXG4vLyB0aGlzL25leHQvbGFzdCwgdGhlIGhvdXIvbWludXRlL2RheS93ZWVrL21vbnRoL3llYXIgdW5pdHMsIGFuZCB0aGVcbi8vIFwibGF0ZXJcIi9cImFnb3N1ZmZpeFwiIHJlbGF0aXZlLWV4cHJlc3Npb24gbWFya2VycyBpcyB0YWtlbiBkaXJlY3RseSBmcm9tXG4vLyBDcmVhbU51dHMnIHRyYW5zbGF0ZUtvcmVhblRvRW5nbGlzaCgpIGRpY3Rpb25hcnlcbi8vIChodHRwczovL2dpdGh1Yi5jb20vQ3JlYW1OdXRzL25sZGF0ZXMtb2JzaWRpYW4ta29yZWFuLCBNSVQpLCBzaW5jZSBpdCdzXG4vLyB2b2NhYnVsYXJ5IGEgcmVhbCBLb3JlYW4tc3BlYWtpbmcgdXNlciBiYXNlIGhhcyBhbHJlYWR5IGJlZW4gdXNpbmcuXG4vL1xuLy8gS29yZWFuIHBocmFzZXMgbnVtYmVycyBpbiBhIHN1ZmZpeCBwb3NpdGlvbiAobnVtYmVyICsgdW5pdCArIG1hcmtlciwgZS5nLlxuLy8gXCIz7J28IO2bhFwiID0gXCIzIGRheXNcIiArIFwi7ZuEXCIgKFwibGF0ZXJcIikgPSBcImluIDMgZGF5c1wiKSwgbm90IEVuZ2xpc2gncyBwcmVmaXhcbi8vIFwiaW4gMyBkYXlzXCIgLS0gc28gaW5taW51dGVzL2luZGF5cy9ldGMuIGFuZCBkYXlzYWdvL3dlZWtzYWdvL2V0Yy4gYmVsb3cgYXJlXG4vLyBidWlsdCBzdWZmaXgtc3R5bGUsIHRoZSBzYW1lIG1lY2hhbmlzbSBhbHJlYWR5IHVzZWQgZm9yIENoaW5lc2UgKHNlZVxuLy8gemgudHMncyBcImxhdGVyXCIvXCJhZ29zdWZmaXhcIiBjb21tZW50cyksIHJhdGhlciB0aGFuIG1pcnJvcmluZyB0aGUgRW5nbGlzaFxuLy8gdGVtcGxhdGUgbGl0ZXJhbGx5LlxuLy9cbi8vIFVOVkVSSUZJRUQ6IFwiYW5kXCIvXCJhdFwiL1wiZnJvbVwiL1widG9cIi9cIm9mXCIgYmVsb3cgZG9uJ3QgaGF2ZSBhbiBlcXVpdmFsZW50IGluXG4vLyBDcmVhbU51dHMnIGZpbGUgKGhpcyB0cmFuc2xhdG9yIGRvZXNuJ3Qgc3VwcG9ydCBjb21iaW5lZCBkdXJhdGlvbnMsXG4vLyB3ZWVrZGF5K3RpbWUsIG9yIGRhdGUgcmFuZ2VzKSBhbmQgYXJlIG15IG93biBiZXN0LWVmZm9ydCBwaWNrcywgbm90XG4vLyBjaGVja2VkIGJ5IGEgS29yZWFuIHNwZWFrZXIuIEtvcmVhbiBub3JtYWxseSBhdHRhY2hlcyBwYXJ0aWNsZXMgbGlrZSDsl5Bcbi8vIChcImF0XCIpL+u2gO2EsChcImZyb21cIikv6rmM7KeAKFwidG9cIikv7J2YKFwib2ZcIikgZGlyZWN0bHkgdG8gdGhlIHByZXZpb3VzIHdvcmQgd2l0aFxuLy8gbm8gc3BhY2UsIHdoaWxlIHRoaXMgcGx1Z2luJ3MgcmVnZXggcGF0dGVybnMgcmVxdWlyZSB0aGVtIGFzIGFcbi8vIHNwYWNlLXNlcGFyYXRlZCBzdGFuZGFsb25lIHdvcmQgLS0gc28gXCJuZXh0IE1vbmRheSBhdCAzcG1cIi0sIFwiZnJvbSBNb25kYXlcbi8vIHRvIEZyaWRheVwiLSwgXCJpbiAyIHdlZWtzIGFuZCAzIGRheXNcIi0sIGFuZCBcInRoZSAxNXRoIG9mIG5leHQgbW9udGhcIi1zdHlsZVxuLy8gY29tYmluZWQgZXhwcmVzc2lvbnMgbWF5IG5vdCBtYXRjaCBuYXR1cmFsIEtvcmVhbiBwaHJhc2luZyBldmVuIHRob3VnaCB0aGVcbi8vIHNpbXBsZSBleHByZXNzaW9ucyBhYm92ZSBkby4gVHJhY2tlZCBpbiAjNDAuXG5jb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCLsmKTriphcIixcbiAgdG9tb3Jyb3c6IFwi64K07J28XCIsXG4gIHllc3RlcmRheTogXCLslrTsoJxcIixcbiAgbmV4dDogXCLri6TsnYxcIixcbiAgbGFzdDogXCLsp4DrgpxcIixcbiAgdGhpczogXCLsnbTrsohcIixcbiAgaW46IFwi7JWe7Jy866GcXCIsXG4gIHN1bmRheTogXCLsnbzsmpTsnbxcIixcbiAgbW9uZGF5OiBcIuyblOyalOydvFwiLFxuICB0dWVzZGF5OiBcIu2ZlOyalOydvFwiLFxuICB3ZWRuZXNkYXk6IFwi7IiY7JqU7J28XCIsXG4gIHRodXJzZGF5OiBcIuuqqeyalOydvFwiLFxuICBmcmlkYXk6IFwi6riI7JqU7J28XCIsXG4gIHNhdHVyZGF5OiBcIu2GoOyalOydvFwiLFxuICBpbm1pbnV0ZXM6IFwiJXt0aW1lRGVsdGF967aEIO2bhFwiLFxuICBpbmhvdXJzOiBcIiV7dGltZURlbHRhfeyLnOqwhCDtm4RcIixcbiAgaW5kYXlzOiBcIiV7dGltZURlbHRhfeydvCDtm4RcIixcbiAgaW53ZWVrczogXCIle3RpbWVEZWx0YX3so7wg7ZuEXCIsXG4gIGlubW9udGhzOiBcIiV7dGltZURlbHRhfeqwnOyblCDtm4RcIixcbiAgZGF5c2FnbzogXCIle3RpbWVEZWx0YX3snbwg7KCEXCIsXG4gIHdlZWtzYWdvOiBcIiV7dGltZURlbHRhfeyjvCDsoIRcIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfeqwnOyblCDsoIRcIixcbiAgbWludXRlc2FnbzogXCIle3RpbWVEZWx0YX3rtoQg7KCEXCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfeyLnOqwhCDsoIRcIixcbiAgLy8gU3VmZml4IG1hcmtlcnMgZm9yIFwiTiB1bml0XCIgKyBtYXJrZXIgKGUuZy4gXCIz7J28IO2bhFwiID0gXCJpbiAzIGRheXNcIixcbiAgLy8gXCIy7KO8IOyghFwiID0gXCIyIHdlZWtzIGFnb1wiKSAtLSB2ZXJpZmllZCBhZ2FpbnN0IENyZWFtTnV0cycgaGFuZGxlTmF0aXZlRGF0ZUV4cHJlc3Npb25zKCkvcHJvY2Vzc051bWJlclBhdHRlcm4oKS5cbiAgbGF0ZXI6IFwi7ZuEfOuSpFwiLFxuICBhZ29zdWZmaXg6IFwi7KCEXCIsXG4gIHRpbWU6IFwi7Iuc6rCEXCIsXG4gIG5vdzogXCLsp4DquIhcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfeu2hFwiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfeu2hFwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF97Iuc6rCEXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF97Iuc6rCEXCIsXG4gIG1pbnV0ZTogXCLrtoRcIixcbiAgaG91cjogXCLsi5zqsIRcIixcbiAgZGF5OiBcIuydvFwiLFxuICB3ZWVrOiBcIuyjvFwiLFxuICBtb250aDogXCLqsJzsm5R864usXCIsXG4gIHllYXI6IFwi64WEXCIsXG4gIHF1YXJ0ZXI6IFwi67aE6riwXCIsXG4gIGFuZDogXCLqt7jrpqzqs6BcIixcbiAgYXQ6IFwi7JeQXCIsXG4gIGZyb206IFwi67aA7YSwXCIsXG4gIHRvOiBcIuq5jOyngFwiLFxuICBvZjogXCLsnZhcIixcbiAgZmlyc3Q6IFwi7LKrXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuIiwiaW1wb3J0IGkxOG4gZnJvbSAncm9kZGVoLWkxOG4nO1xuXG5pbXBvcnQgZW4gZnJvbSAnLi9lbic7XG5pbXBvcnQgamEgZnJvbSAnLi9qYSc7XG5pbXBvcnQgZnIgZnJvbSAnLi9mcic7XG5pbXBvcnQgcHQgZnJvbSAnLi9wdCc7XG5pbXBvcnQgZGUgZnJvbSAnLi9kZSc7XG5pbXBvcnQgbmwgZnJvbSAnLi9ubCc7XG5pbXBvcnQgZXMgZnJvbSAnLi9lcyc7XG5pbXBvcnQgaXQgZnJvbSAnLi9pdCc7XG5pbXBvcnQgcnUgZnJvbSAnLi9ydSc7XG5pbXBvcnQgdWsgZnJvbSAnLi91ayc7XG5pbXBvcnQgemggZnJvbSAnLi96aCc7XG5pbXBvcnQga28gZnJvbSAnLi9rbyc7XG5cbmNvbnN0IG5vdEZvdW5kRGVmYXVsdCA9IFwiTk9URk9VTkRcIiBhcyBjb25zdDtcblxudHlwZSBUcmFuc2xhdG9yID0gKGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPikgPT4gc3RyaW5nO1xuXG4vLyBDYWNoZSBkZXMgdHJhZHVjdGV1cnMgcG91ciDDqXZpdGVyIGRlIGxlcyByZWNyw6llciDDoCBjaGFxdWUgYXBwZWxcbi8vIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogdHJhbnNsYXRvcnMgYXJlIGNyZWF0ZWQgb25jZSBhbmQgcmV1c2VkXG5jb25zdCB0cmFuc2xhdG9yQ2FjaGU6IFJlY29yZDxzdHJpbmcsIFRyYW5zbGF0b3I+ID0ge307XG5cbi8vIFNoYXBlIHNoYXJlZCBieSBldmVyeSBsYW5ndWFnZSBkaWN0OiBzYW1lIGtleXMgYXMgYGVuYCwgYnV0IGVhY2ggbGFuZ3VhZ2Vcbi8vIGhhcyBpdHMgb3duIHN0cmluZyB2YWx1ZXMgKG5vdCBgZW5gJ3MgZXhhY3QgbGl0ZXJhbCB0ZXh0KSAtLSB1c2luZ1xuLy8gYHR5cGVvZiBlbmAgZGlyZWN0bHkgaGVyZSB3b3VsZCBjb21wYXJlIGV2ZXJ5IG90aGVyIGxhbmd1YWdlJ3MgdGV4dFxuLy8gYWdhaW5zdCBgZW5gJ3MgbGl0ZXJhbCBFbmdsaXNoIHN0cmluZ3MgYW5kIGFsd2F5cyBmYWlsLlxudHlwZSBMYW5nRGljdCA9IHsgcmVhZG9ubHkgW0sgaW4ga2V5b2YgdHlwZW9mIGVuXTogc3RyaW5nIH07XG5cbi8vIE1hcCBkZXMgbW9kdWxlcyBkZSBsYW5ndWUgcG91ciBmYWNpbGl0ZXIgbCdhY2PDqHNcbmNvbnN0IGxhbmd1YWdlTW9kdWxlczogUmVjb3JkPHN0cmluZywgTGFuZ0RpY3Q+ID0ge1xuICBlbixcbiAgamEsXG4gIGZyLFxuICBwdCxcbiAgZGUsXG4gIG5sLFxuICBlcyxcbiAgaXQsXG4gIHJ1LFxuICB1ayxcbiAgJ3poLmhhbnQnOiB6aCxcbiAga28sXG59O1xuXG4vKipcbiAqIE9idGllbnQgdW4gdHJhZHVjdGV1ciBwb3VyIHVuZSBsYW5ndWUgZG9ubsOpZSAoYXZlYyBjYWNoZSlcbiAqIEdldHMgYSB0cmFuc2xhdG9yIGZvciBhIGdpdmVuIGxhbmd1YWdlIChjYWNoZWQpXG4gKi9cbmZ1bmN0aW9uIGdldFRyYW5zbGF0b3IobGFuZzogc3RyaW5nKTogVHJhbnNsYXRvciB7XG4gIGlmICghdHJhbnNsYXRvckNhY2hlW2xhbmddKSB7XG4gICAgY29uc3QgbGFuZ3VhZ2VNb2R1bGUgPSBsYW5ndWFnZU1vZHVsZXNbbGFuZ107XG4gICAgaWYgKGxhbmd1YWdlTW9kdWxlKSB7XG4gICAgICAvLyByb2RkZWgtaTE4bidzIHNoaXBwZWQgdHlwZXMgZGVjbGFyZSB0aGUgMm5kIGNhbGwgYXJndW1lbnQgYXNcbiAgICAgIC8vIGBudW1iZXIgfCBGb3JtYXR0aW5nQ29udGV4dGAsIGJ1dCBpdHMgYWN0dWFsIHJ1bnRpbWUgQVBJICh1c2VkXG4gICAgICAvLyB0aHJvdWdob3V0IHRoaXMgZmlsZSkgYWxzbyBhY2NlcHRzIGEgcGxhaW4gc3RyaW5nIGRlZmF1bHQgdmFsdWUgLS1cbiAgICAgIC8vIHRoYXQgb3ZlcmxvYWQganVzdCBpc24ndCByZWZsZWN0ZWQgaW4gaXRzIC5kLnRzLCBoZW5jZSB0aGUgY2FzdC5cbiAgICAgIHRyYW5zbGF0b3JDYWNoZVtsYW5nXSA9IGkxOG4uY3JlYXRlKHsgdmFsdWVzOiBsYW5ndWFnZU1vZHVsZSB9KSBhcyB1bmtub3duIGFzIFRyYW5zbGF0b3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZhbGxiYWNrIHZlcnMgbCdhbmdsYWlzIHNpIGxhIGxhbmd1ZSBuJ2VzdCBwYXMgdHJvdXbDqWVcbiAgICAgIGlmICghdHJhbnNsYXRvckNhY2hlWydlbiddKSB7XG4gICAgICAgIHRyYW5zbGF0b3JDYWNoZVsnZW4nXSA9IGkxOG4uY3JlYXRlKHsgdmFsdWVzOiBlbiB9KSBhcyB1bmtub3duIGFzIFRyYW5zbGF0b3I7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJhbnNsYXRvckNhY2hlWydlbiddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJhbnNsYXRvckNhY2hlW2xhbmddO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0KGtleTogc3RyaW5nLCBsYW5nOiBzdHJpbmcsIHZhcmlhYmxlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICBjb25zdCBsYW5nVHJhbnNsYXRvciA9IGdldFRyYW5zbGF0b3IobGFuZyk7XG4gIGNvbnN0IHRyYW5zbGF0aW9uID0gbGFuZ1RyYW5zbGF0b3Ioa2V5LCBub3RGb3VuZERlZmF1bHQsIHZhcmlhYmxlcyk7XG4gIFxuICBpZiAodHJhbnNsYXRpb24gPT09IG5vdEZvdW5kRGVmYXVsdCkge1xuICAgIGNvbnN0IGVuVHJhbnNsYXRvciA9IGdldFRyYW5zbGF0b3IoXCJlblwiKTtcbiAgICByZXR1cm4gZW5UcmFuc2xhdG9yKGtleSwgbm90Rm91bmREZWZhdWx0LCB2YXJpYWJsZXMpO1xuICB9XG4gIHJldHVybiB0cmFuc2xhdGlvbjtcbn0iLCJpbXBvcnQgdCBmcm9tIFwiLi9sYW5nL2hlbHBlclwiO1xuXG4vKipcbiAqIENvbGxlY3RzIGFuZCBjYWNoZXMgdHJhbnNsYXRlZCB3b3JkcyBhY3Jvc3MgbXVsdGlwbGUgbGFuZ3VhZ2VzLCBhbmQgYnVpbGRzXG4gKiByZWdleCBhbHRlcm5hdGlvbnMgZnJvbSB0aGVtLlxuICpcbiAqIEV2ZXJ5IHN1cHBvcnRlZCBsYW5ndWFnZSBjYW4gZGVmaW5lIHNldmVyYWwgdmFyaWFudHMgZm9yIHRoZSBzYW1lIGNvbmNlcHRcbiAqIChlLmcuIEZyZW5jaCBcIm5leHRcIjogXCJwcm9jaGFpbnxwcm9jaGFpbmV8c3VpdmFudHxzdWl2YW50ZVwiKSwgYW5kIGV2ZXJ5XG4gKiBmZWF0dXJlIG9mIHRoZSBwYXJzZXIgbmVlZHMgdG8gZ2F0aGVyIHRob3NlIHZhcmlhbnRzIGFjcm9zcyAqYWxsKiBhY3RpdmVcbiAqIGxhbmd1YWdlcyBiZWZvcmUgYnVpbGRpbmcgYSByZWdleCBvdXQgb2YgdGhlbS4gVGhpcyBjbGFzcyBjZW50cmFsaXplcyB0aGF0XG4gKiBcImxvb2sgdXAgYSB0cmFuc2xhdGlvbiBrZXkgaW4gZXZlcnkgYWN0aXZlIGxhbmd1YWdlLCBzcGxpdCBtdWx0aS12YXJpYW50XG4gKiBlbnRyaWVzIG9uICd8JywgdHJpbSwgZGVkdXBlXCIgcGF0dGVybiwgd2hpY2ggdXNlZCB0byBiZSByZXBlYXRlZCBpbmxpbmVcbiAqIHJvdWdobHkgZmlmdGVlbiB0aW1lcyB0aHJvdWdob3V0IE5MRFBhcnNlciAoYW5kLCBsZXNzIGV4aGF1c3RpdmVseSwgaW5cbiAqIENvbnRleHRBbmFseXplciBhbmQgdXRpbHMudHMpLlxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRpb25Db2xsZWN0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0aW9uQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbGFuZ3VhZ2VzOiBzdHJpbmdbXSkge31cblxuICAvKipcbiAgICogR2V0cyBhIHRyYW5zbGF0aW9uIHdpdGggY2FjaGluZyBmb3IgcGVyZm9ybWFuY2UuXG4gICAqL1xuICB0cmFuc2xhdGUoa2V5OiBzdHJpbmcsIGxhbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBgJHtsYW5nfToke2tleX1gO1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMudHJhbnNsYXRpb25DYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG4gICAgY29uc3QgdHJhbnNsYXRlZCA9IHQoa2V5LCBsYW5nKTtcbiAgICB0aGlzLnRyYW5zbGF0aW9uQ2FjaGUuc2V0KGNhY2hlS2V5LCB0cmFuc2xhdGVkKTtcbiAgICByZXR1cm4gdHJhbnNsYXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0cyBldmVyeSB2YXJpYW50IG9mIGBrZXlgJ3MgdHJhbnNsYXRpb24gYWNyb3NzIGFsbCBhY3RpdmUgbGFuZ3VhZ2VzLFxuICAgKiBzcGxpdHRpbmcgbXVsdGktdmFyaWFudCBlbnRyaWVzIChlLmcuIFwiYXxifGNcIikgb24gXCJ8XCIsIHRyaW1taW5nLCBhbmRcbiAgICogZGUtZHVwbGljYXRpbmcuIEVudHJpZXMgdGhhdCBhcmVuJ3QgZm91bmQgZm9yIGEgZ2l2ZW4gbGFuZ3VhZ2UgYXJlIHNraXBwZWQuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBUcmFuc2xhdGlvbiBrZXkgKGUuZy4gXCJuZXh0XCIsIFwibW9uZGF5XCIsIFwiaW5kYXlzXCIpXG4gICAqIEBwYXJhbSBvcHRpb25zLmxvd2VyY2FzZSAtIExvd2VyY2FzZSBlYWNoIHZhcmlhbnQgKGRlZmF1bHQ6IGZhbHNlKVxuICAgKi9cbiAgY29sbGVjdFdvcmRzKGtleTogc3RyaW5nLCBvcHRpb25zOiB7IGxvd2VyY2FzZT86IGJvb2xlYW4gfSA9IHt9KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHdvcmRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSB0aGlzLnRyYW5zbGF0ZShrZXksIGxhbmcpO1xuICAgICAgaWYgKCF0cmFuc2xhdGlvbiB8fCB0cmFuc2xhdGlvbiA9PT0gXCJOT1RGT1VORFwiKSBjb250aW51ZTtcblxuICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIHRyYW5zbGF0aW9uLnNwbGl0KFwifFwiKSkge1xuICAgICAgICBjb25zdCB0cmltbWVkID0gdmFyaWFudC50cmltKCk7XG4gICAgICAgIC8vIE5vIGN1cnJlbnQgbGFuZ3VhZ2UgZGljdGlvbmFyeSBlbnRyeSBoYXMgYW4gZW1wdHkgXCJ8fFwiIHNlZ21lbnQgb3JcbiAgICAgICAgLy8gYSB0cmFpbGluZy9sZWFkaW5nIFwifFwiLCBzbyB0aGlzIGd1YXJkIGNhbid0IGFjdHVhbGx5IGJlIGZhbHNlIHdpdGhcbiAgICAgICAgLy8gcmVhbCBkYXRhIC0tIGtlcHQgaW4gY2FzZSBhIGZ1dHVyZSBkaWN0aW9uYXJ5IGVudHJ5IGlzIG1hbGZvcm1lZC5cbiAgICAgICAgaWYgKHRyaW1tZWQpIHtcbiAgICAgICAgICB3b3Jkcy5wdXNoKG9wdGlvbnMubG93ZXJjYXNlID8gdHJpbW1lZC50b0xvd2VyQ2FzZSgpIDogdHJpbW1lZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KHdvcmRzKV07XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgcmVnZXggYWx0ZXJuYXRpb24gKFwiYXxifGNcIikgZnJvbSBhIGxpc3Qgb2Ygd29yZHMsIGVzY2FwaW5nIHJlZ2V4XG4gICAqIHNwZWNpYWwgY2hhcmFjdGVycy5cbiAgICpcbiAgICogTG9uZ2VzdCB3b3JkcyBhcmUgc29ydGVkIGZpcnN0OiBvdGhlcndpc2UgYSBzaG9ydGVyIHdvcmQgdGhhdCBpcyBhIHByZWZpeFxuICAgKiBvZiBhIGxvbmdlciBvbmUgKGUuZy4gRnJlbmNoIFwicHJvY2hhaW5cIiB2cyBcInByb2NoYWluZVwiKSBjYW4gbWF0Y2ggZmlyc3RcbiAgICogYW5kIGxlYXZlIHRoZSByZW1haW5pbmcgbGV0dGVycyB0byBiZSBtaXMtY2FwdHVyZWQgYnkgd2hhdGV2ZXIgY29tZXMgbmV4dFxuICAgKiBpbiB0aGUgcGF0dGVybi5cbiAgICovXG4gIGJ1aWxkQWx0ZXJuYXRpb24od29yZHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBjb25zdCBlc2NhcGVSZWdleCA9IChzdHI6IHN0cmluZykgPT4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KHdvcmRzKV1cbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKVxuICAgICAgLm1hcChlc2NhcGVSZWdleClcbiAgICAgIC5qb2luKCd8Jyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2U6IGNvbGxlY3RXb3JkcyhrZXkpIGZvbGxvd2VkIGJ5IGJ1aWxkQWx0ZXJuYXRpb24oKSBpbiBvbmUgY2FsbC5cbiAgICovXG4gIGJ1aWxkQWx0ZXJuYXRpb25Gb3Ioa2V5OiBzdHJpbmcsIG9wdGlvbnM6IHsgbG93ZXJjYXNlPzogYm9vbGVhbiB9ID0ge30pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQWx0ZXJuYXRpb24odGhpcy5jb2xsZWN0V29yZHMoa2V5LCBvcHRpb25zKSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEFwcCwgRWRpdG9yLCBFZGl0b3JSYW5nZSwgRWRpdG9yUG9zaXRpb24sIG5vcm1hbGl6ZVBhdGgsIFRGaWxlLCBNYXJrZG93blZpZXcsIFdvcmtzcGFjZSB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHtcbiAgY3JlYXRlRGFpbHlOb3RlLFxuICBnZXRBbGxEYWlseU5vdGVzLFxuICBnZXREYWlseU5vdGUsXG59IGZyb20gXCJvYnNpZGlhbi1kYWlseS1ub3Rlcy1pbnRlcmZhY2VcIjtcblxuaW1wb3J0IHsgRGF5T2ZXZWVrIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IERhdGVGb3JtYXR0ZXIgfSBmcm9tIFwiLi9kYXRlLWZvcm1hdHRlclwiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25Db2xsZWN0b3IgfSBmcm9tIFwiLi90cmFuc2xhdGlvbi1jb2xsZWN0b3JcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIi4vd2luZG93LW1vbWVudFwiO1xuXG4vLyBUeXBlIGFsaWFzIGZvciBNb21lbnQgZnJvbSB0aGUgbW9tZW50IGxpYnJhcnkgYnVuZGxlZCB3aXRoIE9ic2lkaWFuXG4vLyBVc2luZyB0aGUgdHlwZSBmcm9tIHRoZSBtb21lbnQgbGlicmFyeSB0eXBlcyBzaW5jZSBtb21lbnQgaXMgYnVuZGxlZCB3aXRoIE9ic2lkaWFuXG4vLyBUaGUgbW9tZW50IHBhY2thZ2UgaXMgYnVuZGxlZCB3aXRoIE9ic2lkaWFuLCBidXQgdGhlIE1vbWVudCB0eXBlIGlzIG5vdCBleHBvcnRlZCBmcm9tIG9ic2lkaWFuIG1vZHVsZVxudHlwZSBNb21lbnQgPSBpbXBvcnQoXCJtb21lbnRcIikuTW9tZW50O1xuXG5jb25zdCBkYXlzT2ZXZWVrOiBPbWl0PERheU9mV2VlaywgXCJsb2NhbGUtZGVmYXVsdFwiPltdID0gW1xuICBcInN1bmRheVwiLFxuICBcIm1vbmRheVwiLFxuICBcInR1ZXNkYXlcIixcbiAgXCJ3ZWRuZXNkYXlcIixcbiAgXCJ0aHVyc2RheVwiLFxuICBcImZyaWRheVwiLFxuICBcInNhdHVyZGF5XCIsXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXb3JkQm91bmRhcmllcyhlZGl0b3I6IEVkaXRvcik6IEVkaXRvclJhbmdlIHtcbiAgY29uc3QgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvcigpO1xuXG4gIGNvbnN0IHBvcyA9IGVkaXRvci5wb3NUb09mZnNldChjdXJzb3IpO1xuICBjb25zdCBlZGl0b3JXaXRoQ00gPSBlZGl0b3IgYXMgRWRpdG9yICYgeyBjbT86IHsgc3RhdGU6IHsgd29yZEF0OiAocG9zOiBudW1iZXIpID0+IHsgZnJvbTogbnVtYmVyOyB0bzogbnVtYmVyIH0gfCBudWxsIH0gfSB9O1xuICAvLyB3b3JkQXQoKSByZXR1cm5zIG51bGwgd2hlbiB0aGUgY3Vyc29yIGlzbid0IGluc2lkZS9hZGphY2VudCB0byBhIHdvcmRcbiAgLy8gKGVtcHR5IGxpbmUsIHdoaXRlc3BhY2UsIHB1bmN0dWF0aW9uLW9ubHkgdGV4dCkgLS0gZmFsbCBiYWNrIHRvIGFcbiAgLy8gemVyby13aWR0aCByYW5nZSBhdCB0aGUgY3Vyc29yIGluc3RlYWQgb2YgY3Jhc2hpbmcuXG4gIGNvbnN0IHdvcmQgPSBlZGl0b3JXaXRoQ00uY20/LnN0YXRlLndvcmRBdChwb3MpO1xuICBpZiAoIXdvcmQpIHtcbiAgICByZXR1cm4geyBmcm9tOiBjdXJzb3IsIHRvOiBjdXJzb3IgfTtcbiAgfVxuICBjb25zdCB3b3JkU3RhcnQgPSBlZGl0b3Iub2Zmc2V0VG9Qb3Mod29yZC5mcm9tKTtcbiAgY29uc3Qgd29yZEVuZCA9IGVkaXRvci5vZmZzZXRUb1Bvcyh3b3JkLnRvKTtcbiAgcmV0dXJuIHtcbiAgICBmcm9tOiB3b3JkU3RhcnQsXG4gICAgdG86IHdvcmRFbmQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RlZFRleHQoZWRpdG9yOiBFZGl0b3IpOiBzdHJpbmcge1xuICBpZiAoZWRpdG9yLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHtcbiAgICByZXR1cm4gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHdvcmRCb3VuZGFyaWVzID0gZ2V0V29yZEJvdW5kYXJpZXMoZWRpdG9yKTtcbiAgICAvLyBTZWxlY3QgdGhlIHdvcmQgYXQgY3Vyc29yIHBvc2l0aW9uIHRvIGVuYWJsZSB0ZXh0IHJlcGxhY2VtZW50XG4gICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBkYXRlIHBhcnNpbmcgY29tbWFuZHMgdG8gd29yayBjb3JyZWN0bHlcbiAgICBlZGl0b3Iuc2V0U2VsZWN0aW9uKHdvcmRCb3VuZGFyaWVzLmZyb20sIHdvcmRCb3VuZGFyaWVzLnRvKTtcbiAgICByZXR1cm4gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGp1c3RDdXJzb3IoXG4gIGVkaXRvcjogRWRpdG9yLFxuICBjdXJzb3I6IEVkaXRvclBvc2l0aW9uLFxuICBuZXdTdHI6IHN0cmluZyxcbiAgb2xkU3RyOiBzdHJpbmdcbik6IHZvaWQge1xuICBjb25zdCBjdXJzb3JPZmZzZXQgPSBuZXdTdHIubGVuZ3RoIC0gb2xkU3RyLmxlbmd0aDtcbiAgZWRpdG9yLnNldEN1cnNvcih7XG4gICAgbGluZTogY3Vyc29yLmxpbmUsXG4gICAgY2g6IGN1cnNvci5jaCArIGN1cnNvck9mZnNldCxcbiAgfSk7XG59XG5cbi8qKlxuICogV3JhcHBlciBwb3VyIGNvbXBhdGliaWxpdMOpIGF2ZWMgbGUgY29kZSBleGlzdGFudFxuICogQGRlcHJlY2F0ZWQgVXRpbGlzZXIgRGF0ZUZvcm1hdHRlci5mb3JtYXQoKSBkaXJlY3RlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybWF0dGVkRGF0ZShkYXRlOiBEYXRlLCBmb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBEYXRlRm9ybWF0dGVyLmZvcm1hdChkYXRlLCBmb3JtYXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERheU9mTW9udGgoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMCkuZ2V0RGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUcnV0aHkoZmxhZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBbXCJ5XCIsIFwieWVzXCIsIFwiMVwiLCBcInRcIiwgXCJ0cnVlXCJdLmluZGV4T2YoZmxhZy50b0xvd2VyQ2FzZSgpKSA+PSAwO1xufVxuXG4vKipcbiAqIFZhbGlkZSB1biBmb3JtYXQgTW9tZW50LmpzIGV0IHJldG91cm5lIHVuIHLDqXN1bHRhdCBhdmVjIHByw6l2aXN1YWxpc2F0aW9uXG4gKiBAcGFyYW0gZm9ybWF0IC0gTGUgZm9ybWF0IE1vbWVudC5qcyDDoCB2YWxpZGVyXG4gKiBAcmV0dXJucyBVbiBvYmpldCBjb250ZW5hbnQgdmFsaWQgKGJvb2zDqWVuKSwgZXJyb3IgKG9wdGlvbm5lbCksIHByZXZpZXcgKG9wdGlvbm5lbClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTW9tZW50Rm9ybWF0KGZvcm1hdDogc3RyaW5nKTogeyB2YWxpZDogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmc7IHByZXZpZXc/OiBzdHJpbmcgfSB7XG4gIGlmICghZm9ybWF0IHx8IHR5cGVvZiBmb3JtYXQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogXCJMZSBmb3JtYXQgbmUgcGV1dCBwYXMgw6p0cmUgdmlkZVwiIH07XG4gIH1cblxuICAvLyBMaW1pdGVyIGxhIGxvbmd1ZXVyIGR1IGZvcm1hdCBwb3VyIMOpdml0ZXIgbGVzIGF0dGFxdWVzXG4gIGNvbnN0IE1BWF9GT1JNQVRfTEVOR1RIID0gMTAwO1xuICBpZiAoZm9ybWF0Lmxlbmd0aCA+IE1BWF9GT1JNQVRfTEVOR1RIKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogYExlIGZvcm1hdCBuZSBwZXV0IHBhcyBkw6lwYXNzZXIgJHtNQVhfRk9STUFUX0xFTkdUSH0gY2FyYWN0w6hyZXNgIH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHRlc3REYXRlID0gbW9tZW50KCk7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gdGVzdERhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgXG4gICAgLy8gVsOpcmlmaWVyIHF1ZSBsZSBmb3JtYXQgcHJvZHVpdCBxdWVscXVlIGNob3NlIGRlIHZhbGlkZVxuICAgIGlmICghZm9ybWF0dGVkIHx8IGZvcm1hdHRlZCA9PT0gZm9ybWF0KSB7XG4gICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBcIkZvcm1hdCBpbnZhbGlkZSBvdSBub24gcmVjb25udVwiIH07XG4gICAgfVxuICAgIFxuICAgIC8vIFbDqXJpZmllciBxdWUgbGUgZm9ybWF0IG5lIGNvbnRpZW50IHBhcyBkZSBjYXJhY3TDqHJlcyBkYW5nZXJldXhcbiAgICAvLyBNb21lbnQuanMgdXRpbGlzZSBkZXMgY2FyYWN0w6hyZXMgc3DDqWNpYXV4LCBtYWlzIG9uIHZldXQgw6l2aXRlciBsZXMgaW5qZWN0aW9uc1xuICAgIC8vIExlcyBmb3JtYXRzIE1vbWVudC5qcyB2YWxpZGVzIGNvbnRpZW5uZW50IHByaW5jaXBhbGVtZW50IGRlcyBsZXR0cmVzLCBjaGlmZnJlcyBldCBjYXJhY3TDqHJlcyBkZSBwb25jdHVhdGlvblxuICAgIGNvbnN0IGRhbmdlcm91c1BhdHRlcm4gPSAvWzw+XCInYF0vO1xuICAgIGlmIChkYW5nZXJvdXNQYXR0ZXJuLnRlc3QoZm9ybWF0KSkge1xuICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogXCJMZSBmb3JtYXQgY29udGllbnQgZGVzIGNhcmFjdMOocmVzIG5vbiBhdXRvcmlzw6lzXCIgfTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHByZXZpZXc6IGZvcm1hdHRlZCB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJFcnJldXIgbG9ycyBkZSBsYSB2YWxpZGF0aW9uIGR1IGZvcm1hdFwiIH07XG4gIH1cbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBldCB2YWxpZGUgdW5lIGVudHLDqWUgdXRpbGlzYXRldXIgcG91ciDDqXZpdGVyIGxlcyBpbmplY3Rpb25zXG4gKiBAcGFyYW0gaW5wdXQgLSBMJ2VudHLDqWUgw6Agc2FuaXRpemVyXG4gKiBAcGFyYW0gbWF4TGVuZ3RoIC0gTG9uZ3VldXIgbWF4aW1hbGUgYXV0b3Jpc8OpZSAoZMOpZmF1dDogMjAwKVxuICogQHJldHVybnMgTCdlbnRyw6llIHNhbml0aXrDqWUgb3UgbnVsbCBzaSBpbnZhbGlkZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVJbnB1dChpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCwgbWF4TGVuZ3RoID0gMjAwKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICghaW5wdXQgfHwgdHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gTGltaXRlciBsYSBsb25ndWV1clxuICBjb25zdCB0cmltbWVkID0gaW5wdXQudHJpbSgpLnN1YnN0cmluZygwLCBtYXhMZW5ndGgpO1xuICBcbiAgaWYgKHRyaW1tZWQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBSZWpldGVyIGxlcyBjYXJhY3TDqHJlcyBkZSBjb250csO0bGUgZXQgbGVzIGNhcmFjdMOocmVzIHNhbnMgdXNhZ2UgbMOpZ2l0aW1lIGRhbnMgdW5lXG4gIC8vIGV4cHJlc3Npb24gZGUgZGF0ZSBlbiBsYW5nYWdlIG5hdHVyZWwgKGV4OiBcIjxcIiwgXCI+XCIsIFwiYFwiKS4gT24gbid1dGlsaXNlIHBhcyBkZSB3aGl0ZWxpc3RcbiAgLy8gZGUgc2NyaXB0cyBjYXIgbGVzIGRhdGVzIGVuIGxhbmdhZ2UgbmF0dXJlbCB1dGlsaXNlbnQgZGVzIGxldHRyZXMgZGUgdG91dGVzIGxlcyBsYW5ndWVzXG4gIC8vIHN1cHBvcnTDqWVzIChsYXRpbiwgY3lyaWxsaXF1ZSwgamFwb25haXMsIGNoaW5vaXMuLi4pLCBhaW5zaSBxdWUgbCdhcG9zdHJvcGhlXG4gIC8vIChleDogXCJBdWpvdXJkJ2h1aVwiIGVuIGZyYW7Dp2FpcywgXCLQnyfRj9GC0L3QuNGG0ZZcIiBlbiB1a3JhaW5pZW4pLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleCAtLSBpbnRlbnRpb25hbDogdGhpcyByYW5nZSBpcyB0aGUgYWN0dWFsIHNhbml0aXphdGlvbiB0YXJnZXQsIG5vdCBhIHR5cG8uXG4gIGNvbnN0IGludmFsaWRDaGFyc1BhdHRlcm4gPSAvWzw+YFxcdTAwMDAtXFx1MDAxRlxcdTAwN0YtXFx1MDA5Rl0vO1xuXG4gIGlmIChpbnZhbGlkQ2hhcnNQYXR0ZXJuLnRlc3QodHJpbW1lZCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0cmltbWVkO1xufVxuXG4vKipcbiAqIFZhbGlkZSB1biBwYXJhbcOodHJlIFVSSSBwb3VyIMOpdml0ZXIgbGVzIGluamVjdGlvbnNcbiAqIEBwYXJhbSBwYXJhbSAtIExlIHBhcmFtw6h0cmUgw6AgdmFsaWRlclxuICogQHBhcmFtIG1heExlbmd0aCAtIExvbmd1ZXVyIG1heGltYWxlIGF1dG9yaXPDqWUgKGTDqWZhdXQ6IDEwMClcbiAqIEByZXR1cm5zIExlIHBhcmFtw6h0cmUgdmFsaWTDqSBvdSBudWxsIHNpIGludmFsaWRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVVyaVBhcmFtKHBhcmFtOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsLCBtYXhMZW5ndGggPSAxMDApOiBzdHJpbmcgfCBudWxsIHtcbiAgcmV0dXJuIHNhbml0aXplSW5wdXQocGFyYW0sIG1heExlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWVrTnVtYmVyKGRheU9mV2VlazogT21pdDxEYXlPZldlZWssIFwibG9jYWxlLWRlZmF1bHRcIj4pOiBudW1iZXIge1xuICByZXR1cm4gZGF5c09mV2Vlay5pbmRleE9mKGRheU9mV2Vlayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVXZWVrU3RhcnQoKTogT21pdDxEYXlPZldlZWssIFwibG9jYWxlLWRlZmF1bHRcIj4ge1xuICBjb25zdCBsb2NhbGVEYXRhID0gbW9tZW50LmxvY2FsZURhdGEoKSBhcyB7IF93ZWVrPzogeyBkb3c6IG51bWJlciB9IH07XG4gIGNvbnN0IHN0YXJ0T2ZXZWVrID0gbG9jYWxlRGF0YS5fd2Vlaz8uZG93ID8/IDA7XG4gIHJldHVybiBkYXlzT2ZXZWVrW3N0YXJ0T2ZXZWVrXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTWFya2Rvd25MaW5rKGFwcDogQXBwLCBzdWJwYXRoOiBzdHJpbmcsIGFsaWFzPzogc3RyaW5nKSB7XG4gIGNvbnN0IHZhdWx0V2l0aENvbmZpZyA9IGFwcC52YXVsdCBhcyB0eXBlb2YgYXBwLnZhdWx0ICYgeyBnZXRDb25maWc6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbiB9O1xuICBjb25zdCB1c2VNYXJrZG93bkxpbmtzID0gdmF1bHRXaXRoQ29uZmlnLmdldENvbmZpZyhcInVzZU1hcmtkb3duTGlua3NcIik7XG4gIGNvbnN0IHBhdGggPSBub3JtYWxpemVQYXRoKHN1YnBhdGgpO1xuXG4gIGlmICh1c2VNYXJrZG93bkxpbmtzKSB7XG4gICAgaWYgKGFsaWFzKSB7XG4gICAgICByZXR1cm4gYFske2FsaWFzfV0oJHtwYXRoLnJlcGxhY2UoLyAvZywgXCIlMjBcIil9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgWyR7c3VicGF0aH1dKCR7cGF0aH0pYDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGFsaWFzKSB7XG4gICAgICByZXR1cm4gYFtbJHtwYXRofXwke2FsaWFzfV1dYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBbWyR7cGF0aH1dXWA7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZURhaWx5Tm90ZShkYXRlOiBNb21lbnQpOiBQcm9taXNlPFRGaWxlIHwgbnVsbD4ge1xuICAvLyBCb3Jyb3dlZCBmcm9tIHRoZSBTbGF0ZWQgcGx1Z2luOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGdyb3Npbmdlci9zbGF0ZWQtb2JzaWRpYW4vYmxvYi9tYWluL3NyYy92YXVsdC50cyNMMTdcbiAgY29uc3QgZGVzaXJlZE5vdGUgPSBnZXREYWlseU5vdGUoZGF0ZSwgZ2V0QWxsRGFpbHlOb3RlcygpKTtcbiAgaWYgKGRlc2lyZWROb3RlKSB7XG4gICAgcmV0dXJuIGRlc2lyZWROb3RlO1xuICB9XG4gIHJldHVybiBjcmVhdGVEYWlseU5vdGUoZGF0ZSk7XG59XG5cbi8vIFNvdXJjZSBgY2hyb25vYDpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS93YW5hc2l0L2Nocm9uby9ibG9iLzQ3ZjExZGE2YjY1NmNkNWNiNjFmMjQ2ZThjY2E3MDY5ODMyMDhkZWQvc3JjL3V0aWxzL3BhdHRlcm4udHMjTDhcbi8vIENvcHlyaWdodCAoYykgMjAxNCwgV2FuYXNpdCBUYW5ha2l0cnVuZ3J1YW5nXG50eXBlIERpY3Rpb25hcnlMaWtlID0gc3RyaW5nW10gfCB7IFt3b3JkOiBzdHJpbmddOiB1bmtub3duIH0gfCBNYXA8c3RyaW5nLCB1bmtub3duPjtcblxuLy8gVGhlIEFycmF5L01hcCBicmFuY2hlcyBiZWxvdyBhcmUgdW5yZWFjaGFibGUgd2l0aCB0aGlzIGZpbGUncyBvbmx5IGNhbGxlclxuLy8gKG1hdGNoQW55UGF0dGVybigpIGlzIG9ubHkgZXZlciBpbnZva2VkIHdpdGggT1JESU5BTF9XT1JEX0RJQ1RJT05BUlksIGFcbi8vIHBsYWluIG9iamVjdCkgLS0ga2VwdCBiZWNhdXNlIHRoZXkncmUgY29waWVkIHZlcmJhdGltIGZyb20gY2hyb25vLW5vZGUnc1xuLy8gbW9yZSBnZW5lcmljYWxseS11c2VkIG9yaWdpbmFsLCBub3QgYmVjYXVzZSB0aGV5J3JlIGN1cnJlbnRseSBleGVyY2lzZWQuXG5mdW5jdGlvbiBleHRyYWN0VGVybXMoZGljdGlvbmFyeTogRGljdGlvbmFyeUxpa2UpOiBzdHJpbmdbXSB7XG4gIGxldCBrZXlzOiBzdHJpbmdbXTtcbiAgaWYgKGRpY3Rpb25hcnkgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIGtleXMgPSBbLi4uZGljdGlvbmFyeV07XG4gIH0gZWxzZSBpZiAoZGljdGlvbmFyeSBpbnN0YW5jZW9mIE1hcCkge1xuICAgIGtleXMgPSBBcnJheS5mcm9tKGRpY3Rpb25hcnkua2V5cygpKTtcbiAgfSBlbHNlIHtcbiAgICBrZXlzID0gT2JqZWN0LmtleXMoZGljdGlvbmFyeSk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cbmZ1bmN0aW9uIG1hdGNoQW55UGF0dGVybihkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5TGlrZSk6IHN0cmluZyB7XG4gIGNvbnN0IGpvaW5lZFRlcm1zID0gZXh0cmFjdFRlcm1zKGRpY3Rpb25hcnkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgLmpvaW4oXCJ8XCIpXG4gICAgLnJlcGxhY2UoL1xcLi9nLCBcIlxcXFwuXCIpO1xuXG4gIHJldHVybiBgKD86JHtqb2luZWRUZXJtc30pYDtcbn1cblxuY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlk6IHsgW3dvcmQ6IHN0cmluZ106IG51bWJlciB9ID0ge1xuICBmaXJzdDogMSxcbiAgc2Vjb25kOiAyLFxuICB0aGlyZDogMyxcbiAgZm91cnRoOiA0LFxuICBmaWZ0aDogNSxcbiAgc2l4dGg6IDYsXG4gIHNldmVudGg6IDcsXG4gIGVpZ2h0aDogOCxcbiAgbmludGg6IDksXG4gIHRlbnRoOiAxMCxcbiAgZWxldmVudGg6IDExLFxuICB0d2VsZnRoOiAxMixcbiAgdGhpcnRlZW50aDogMTMsXG4gIGZvdXJ0ZWVudGg6IDE0LFxuICBmaWZ0ZWVudGg6IDE1LFxuICBzaXh0ZWVudGg6IDE2LFxuICBzZXZlbnRlZW50aDogMTcsXG4gIGVpZ2h0ZWVudGg6IDE4LFxuICBuaW5ldGVlbnRoOiAxOSxcbiAgdHdlbnRpZXRoOiAyMCxcbiAgXCJ0d2VudHkgZmlyc3RcIjogMjEsXG4gIFwidHdlbnR5LWZpcnN0XCI6IDIxLFxuICBcInR3ZW50eSBzZWNvbmRcIjogMjIsXG4gIFwidHdlbnR5LXNlY29uZFwiOiAyMixcbiAgXCJ0d2VudHkgdGhpcmRcIjogMjMsXG4gIFwidHdlbnR5LXRoaXJkXCI6IDIzLFxuICBcInR3ZW50eSBmb3VydGhcIjogMjQsXG4gIFwidHdlbnR5LWZvdXJ0aFwiOiAyNCxcbiAgXCJ0d2VudHkgZmlmdGhcIjogMjUsXG4gIFwidHdlbnR5LWZpZnRoXCI6IDI1LFxuICBcInR3ZW50eSBzaXh0aFwiOiAyNixcbiAgXCJ0d2VudHktc2l4dGhcIjogMjYsXG4gIFwidHdlbnR5IHNldmVudGhcIjogMjcsXG4gIFwidHdlbnR5LXNldmVudGhcIjogMjcsXG4gIFwidHdlbnR5IGVpZ2h0aFwiOiAyOCxcbiAgXCJ0d2VudHktZWlnaHRoXCI6IDI4LFxuICBcInR3ZW50eSBuaW50aFwiOiAyOSxcbiAgXCJ0d2VudHktbmludGhcIjogMjksXG4gIHRoaXJ0aWV0aDogMzAsXG4gIFwidGhpcnR5IGZpcnN0XCI6IDMxLFxuICBcInRoaXJ0eS1maXJzdFwiOiAzMSxcbn07XG5cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKFxuICBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVxuKX18WzAtOV17MSwyfSg/OnN0fG5kfHJkfHRofMOobWV8w6htZXxlcnxlfGVyfGV8XFxcXC4pPylgO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaDogc3RyaW5nKTogbnVtYmVyIHtcbiAgbGV0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgfVxuXG4gIC8vIFJlbW92ZSBvcmRpbmFsIHN1ZmZpeGVzOiBzdCwgbmQsIHJkLCB0aCwgw6htZSwgZXIsIGUsIGFuZCB0cmFpbGluZyBkb3RcbiAgbnVtID0gbnVtLnJlcGxhY2UoLyg/OnN0fG5kfHJkfHRofMOobWV8ZXJ8ZXxcXC4pJC9pLCBcIlwiKTtcbiAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5cbi8qKlxuICogRMOpdGVybWluZSBzaSB1bmUgZXhwcmVzc2lvbiB0ZW1wb3JlbGxlIHJlbGF0aXZlIGNvdXJ0ZSAobWludXRlcy9oZXVyZXMpIGRldnJhaXQgb21ldHRyZSBsYSBkYXRlXG4gKiBjYXIgZWxsZSByZXN0ZSBkYW5zIGxhIG3Dqm1lIGpvdXJuw6llIChhdWpvdXJkJ2h1aSlcbiAqIEBwYXJhbSB0ZXh0IC0gTGUgdGV4dGUgZGUgbCdleHByZXNzaW9uIHRlbXBvcmVsbGUgKGV4OiBcImRhbnMgMTUgbWluXCIsIFwiaW4gMiBob3Vyc1wiLCBcIjMw5YiG6ZCY5b6MXCIpXG4gKiBAcGFyYW0gbGFuZ3VhZ2VzIC0gTGVzIGxhbmd1ZXMgc3VwcG9ydMOpZXMgcG91ciBkw6l0ZWN0ZXIgbGVzIHBhdHRlcm5zXG4gKiBAcmV0dXJucyB0cnVlIHNpIGMnZXN0IHVuZSBleHByZXNzaW9uIHJlbGF0aXZlIGNvdXJ0ZSBxdWkgcmVzdGUgYXVqb3VyZCdodWlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZE9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZSh0ZXh0OiBzdHJpbmcsIGxhbmd1YWdlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgY29uc3QgbG93ZXJUZXh0ID0gdGV4dC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgY29uc3QgdGMgPSBuZXcgVHJhbnNsYXRpb25Db2xsZWN0b3IobGFuZ3VhZ2VzKTtcblxuICBjb25zdCBpblBhdHRlcm4gPSB0Yy5idWlsZEFsdGVybmF0aW9uRm9yKFwiaW5cIik7XG4gIGNvbnN0IG1pbnV0ZVBhdHRlcm4gPSB0Yy5idWlsZEFsdGVybmF0aW9uRm9yKFwibWludXRlXCIpO1xuICBjb25zdCBob3VyUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoXCJob3VyXCIpO1xuICAvLyBTdWZmaXgtc3R5bGUgbGFuZ3VhZ2VzIChlLmcuIENoaW5lc2UgXCIzMOWIhumQmOW+jFwiKSBtYXJrIFwibGF0ZXJcIiBpbnN0ZWFkIG9mXG4gIC8vIHByZWZpeGluZyB3aXRoIFwiaW5cIjsgc2VlIHRyYW5zbGF0aW9uLWNvbGxlY3Rvci50cyAvIHBhcnNlci50cyBmb3Igd2h5IHRoaXNcbiAgLy8gaXMgYSBzZXBhcmF0ZSBrZXkgZnJvbSB0aGUgZGF5L2hvdXIvbWludXRlIHdvcmQgbGlzdHMuXG4gIGNvbnN0IGxhdGVyUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoXCJsYXRlclwiKTtcblxuICBjb25zdCBzaG9ydFJlbGF0aXZlUGF0dGVybnM6IFJlZ0V4cFtdID0gW107XG5cbiAgLy8gRXZlcnkgb25lIG9mIHRoZSAxMSBzdXBwb3J0ZWQgbGFuZ3VhZ2VzIGRlZmluZXMgbWludXRlL2hvdXIgdG9nZXRoZXJcbiAgLy8gd2l0aCBpbi9sYXRlciwgc28gdGhlIG5lc3RlZCBgaWYgKG1pbnV0ZVBhdHRlcm4pYC9gaWYgKGhvdXJQYXR0ZXJuKWBcbiAgLy8gY2hlY2tzIGJlbG93IGNhbid0IGFjdHVhbGx5IGJlIGZhbHNlIHdoaWxlIHRoZWlyIGVuY2xvc2luZyBgaWZgIGlzIHRydWVcbiAgLy8gLS0gbm8gY29tYmluYXRpb24gb2YgcmVhbCAob3IgdW5rbm93bikgbGFuZ3VhZ2UgY29kZXMgcHJvZHVjZXMgXCJpblwiIG9yXG4gIC8vIFwibGF0ZXJcIiB3aXRob3V0IGFsc28gcHJvZHVjaW5nIFwibWludXRlXCIgYW5kIFwiaG91clwiLiBLZXB0IGFzIGEgZ3VhcmQgaW5cbiAgLy8gY2FzZSBhIGZ1dHVyZSBsYW5ndWFnZSBtb2R1bGUgaXMgYXV0aG9yZWQgaW5jb21wbGV0ZWx5LlxuXG4gIC8vIFByZWZpeCBzdHlsZTogXCJpbiBYIG1pbnV0ZXNcIi9cImRhbnMgWCBtaW5cIi8uLi5cbiAgaWYgKGluUGF0dGVybikge1xuICAgIGlmIChtaW51dGVQYXR0ZXJuKSB7XG4gICAgICBzaG9ydFJlbGF0aXZlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGBeKD86JHtpblBhdHRlcm59KVxcXFxzK1xcXFxkK1xcXFxzKyg/OiR7bWludXRlUGF0dGVybn0pYCwgJ2knKSk7XG4gICAgfVxuICAgIGlmIChob3VyUGF0dGVybikge1xuICAgICAgc2hvcnRSZWxhdGl2ZVBhdHRlcm5zLnB1c2gobmV3IFJlZ0V4cChgXig/OiR7aW5QYXR0ZXJufSlcXFxccytcXFxcZCtcXFxccysoPzoke2hvdXJQYXR0ZXJufSlgLCAnaScpKTtcbiAgICB9XG4gIH1cblxuICAvLyBTdWZmaXggc3R5bGU6IFwiWCBtaW51dGVzXCIgKyBcImxhdGVyXCIgbWFya2VyLCBlLmcuIENoaW5lc2UgXCIzMOWIhumQmOW+jFwiXG4gIGlmIChsYXRlclBhdHRlcm4pIHtcbiAgICBpZiAobWludXRlUGF0dGVybikge1xuICAgICAgc2hvcnRSZWxhdGl2ZVBhdHRlcm5zLnB1c2gobmV3IFJlZ0V4cChgXlxcXFxkK1xcXFxzKig/OiR7bWludXRlUGF0dGVybn0pXFxcXHMqKD86JHtsYXRlclBhdHRlcm59KSRgLCAnaScpKTtcbiAgICB9XG4gICAgaWYgKGhvdXJQYXR0ZXJuKSB7XG4gICAgICBzaG9ydFJlbGF0aXZlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGBeXFxcXGQrXFxcXHMqKD86JHtob3VyUGF0dGVybn0pXFxcXHMqKD86JHtsYXRlclBhdHRlcm59KSRgLCAnaScpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2hvcnRSZWxhdGl2ZVBhdHRlcm5zLnNvbWUocGF0dGVybiA9PiBwYXR0ZXJuLnRlc3QobG93ZXJUZXh0KSk7XG59XG5cbi8qKlxuICogT2J0aWVudCBsJ8OpZGl0ZXVyIGFjdGlmIGRlIG1hbmnDqHJlIGZsZXhpYmxlLCBjb21wYXRpYmxlIGF2ZWMgUXVpY2tBZGQgZXQgYXV0cmVzIHBsdWdpbnNcbiAqIEVzc2FpZSBwbHVzaWV1cnMgbcOpdGhvZGVzIHBvdXIgdHJvdXZlciBsJ8OpZGl0ZXVyIGFjdGlmXG4gKiBAcGFyYW0gd29ya3NwYWNlIC0gTCdpbnN0YW5jZSBXb3Jrc3BhY2UgZCdPYnNpZGlhblxuICogQHJldHVybnMgTCfDqWRpdGV1ciBhY3RpZiBvdSBudWxsIHNpIGF1Y3VuIG4nZXN0IHRyb3V2w6lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFjdGl2ZUVkaXRvcih3b3Jrc3BhY2U6IFdvcmtzcGFjZSk6IEVkaXRvciB8IG51bGwge1xuICAvLyBNw6l0aG9kZSAxOiBVdGlsaXNlciBhY3RpdmVFZGl0b3Igc2kgZGlzcG9uaWJsZSAoT2JzaWRpYW4gcsOpY2VudClcbiAgY29uc3Qgd29ya3NwYWNlV2l0aEFjdGl2ZUVkaXRvciA9IHdvcmtzcGFjZSBhcyB0eXBlb2Ygd29ya3NwYWNlICYgeyBhY3RpdmVFZGl0b3I/OiB7IGVkaXRvcj86IEVkaXRvciB9IH07XG4gIGlmICh3b3Jrc3BhY2VXaXRoQWN0aXZlRWRpdG9yLmFjdGl2ZUVkaXRvcj8uZWRpdG9yKSB7XG4gICAgcmV0dXJuIHdvcmtzcGFjZVdpdGhBY3RpdmVFZGl0b3IuYWN0aXZlRWRpdG9yLmVkaXRvcjtcbiAgfVxuXG4gIC8vIE3DqXRob2RlIDI6IFV0aWxpc2VyIGdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KSAobcOpdGhvZGUgc3RhbmRhcmQpXG4gIGNvbnN0IGFjdGl2ZVZpZXcgPSB3b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xuICBpZiAoYWN0aXZlVmlldz8uZWRpdG9yKSB7XG4gICAgcmV0dXJuIGFjdGl2ZVZpZXcuZWRpdG9yO1xuICB9XG5cbiAgLy8gTcOpdGhvZGUgMzogQ2hlcmNoZXIgZGFucyB0b3VzIGxlcyBsZWFmcyBwb3VyIHRyb3V2ZXIgdW4gw6lkaXRldXIgYWN0aWZcbiAgLy8gVXRpbGUgcG91ciBRdWlja0FkZCBldCBhdXRyZXMgcGx1Z2lucyBxdWkgY3LDqWVudCBkZXMgw6lkaXRldXJzIHBlcnNvbm5hbGlzw6lzXG4gIGNvbnN0IGFjdGl2ZUxlYWYgPSB3b3Jrc3BhY2UuZ2V0TW9zdFJlY2VudExlYWYoKTtcbiAgaWYgKGFjdGl2ZUxlYWYpIHtcbiAgICBjb25zdCB2aWV3ID0gYWN0aXZlTGVhZi52aWV3O1xuICAgIC8vIFbDqXJpZmllciBzaSBsYSB2dWUgYSB1biDDqWRpdGV1clxuICAgIGNvbnN0IHZpZXdXaXRoRWRpdG9yID0gdmlldyBhcyB0eXBlb2YgdmlldyAmIHsgZWRpdG9yPzogRWRpdG9yIH07XG4gICAgaWYgKHZpZXdXaXRoRWRpdG9yLmVkaXRvcikge1xuICAgICAgcmV0dXJuIHZpZXdXaXRoRWRpdG9yLmVkaXRvcjtcbiAgICB9XG4gIH1cblxuICAvLyBNw6l0aG9kZXMgNCBldCA1OiBQYXJjb3VyaXIgdG91cyBsZXMgbGVhZnMgbWFya2Rvd24sIGVuIHByw6lmw6lyYW50IGNlbHVpIHF1aVxuICAvLyBhIGxlIGZvY3VzLCBzaW5vbiBsZSBwcmVtaWVyIMOpZGl0ZXVyIGRpc3BvbmlibGUgZW4gZGVybmllciByZWNvdXJzLlxuICBsZXQgZmlyc3RBdmFpbGFibGVFZGl0b3I6IEVkaXRvciB8IG51bGwgPSBudWxsO1xuICBmb3IgKGNvbnN0IGxlYWYgb2Ygd29ya3NwYWNlLmdldExlYXZlc09mVHlwZShcIm1hcmtkb3duXCIpKSB7XG4gICAgY29uc3QgdmlldyA9IGxlYWYudmlldztcbiAgICBpZiAodmlldyBpbnN0YW5jZW9mIE1hcmtkb3duVmlldyAmJiB2aWV3LmVkaXRvcikge1xuICAgICAgY29uc3QgZWRpdG9yRWwgPSAodmlldy5lZGl0b3IgYXMgRWRpdG9yICYgeyBjbT86IHsgaGFzRm9jdXM/OiAoKSA9PiBib29sZWFuIH0gfSkuY207XG4gICAgICBpZiAoZWRpdG9yRWw/Lmhhc0ZvY3VzPy4oKSkge1xuICAgICAgICByZXR1cm4gdmlldy5lZGl0b3I7XG4gICAgICB9XG4gICAgICBmaXJzdEF2YWlsYWJsZUVkaXRvciA9IGZpcnN0QXZhaWxhYmxlRWRpdG9yID8/IHZpZXcuZWRpdG9yO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaXJzdEF2YWlsYWJsZUVkaXRvcjtcbn1cblxuLy8gRXh0cmFjdHMgYSByZWFkYWJsZSBtZXNzYWdlIGZyb20gYSBjYXVnaHQgdmFsdWUgb2YgdW5rbm93biB0eXBlLiBQbGFpblxuLy8gYFN0cmluZyhlKWAgaXMgdW5zYWZlIGZvciBhcmJpdHJhcnkgdW5rbm93biB2YWx1ZXMgKGEgdGhyb3duIHBsYWluIG9iamVjdFxuLy8gd291bGQgc3RyaW5naWZ5IHRvIHRoZSB1c2VsZXNzIFwiW29iamVjdCBPYmplY3RdXCIpLCBidXQgYmxhbmtldFxuLy8gYEpTT04uc3RyaW5naWZ5KGUpYCBpc24ndCByaWdodCBlaXRoZXIgLS0gaXQgd291bGQgd3JhcCB0aHJvd24gc3RyaW5ncyBpblxuLy8gbGl0ZXJhbCBxdW90ZXMsIGNoYW5naW5nIHdoYXQgYWxyZWFkeS10aHJvd24tc3RyaW5nIGNhbGwgc2l0ZXMgbG9nLlxuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlRXJyb3IoZTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiBlLm1lc3NhZ2U7XG4gIGlmICh0eXBlb2YgZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGU7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShlKTtcbn0iLCJpbXBvcnQgeyBBcHAsIE1vZGFsLCBTZXR0aW5nIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgdHlwZSBOYXR1cmFsTGFuZ3VhZ2VEYXRlcyBmcm9tIFwiLi4vbWFpblwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi4vd2luZG93LW1vbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIaXN0b3J5TWFuYWdlck1vZGFsIGV4dGVuZHMgTW9kYWwge1xuICBwcml2YXRlIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXM7XG4gIC8vIFR3by1jbGljayBjb25maXJtYXRpb24gZm9yIFwiQ2xlYXIgYWxsXCI6IGZpcnN0IGNsaWNrIGFybXMgaXQsIHNlY29uZFxuICAvLyBjbGljayAob24gdGhlIHNhbWUgcmVuZGVyKSBhY3R1YWxseSBjbGVhcnMgLS0gYXZvaWRzIHdpcGluZyB0aGUgd2hvbGVcbiAgLy8gaGlzdG9yeSBmcm9tIGEgc2luZ2xlIGFjY2lkZW50YWwgY2xpY2ssIHdpdGhvdXQgdGhlIGNvbXBsZXhpdHkgb2YgYVxuICAvLyBzZXBhcmF0ZSBjb25maXJtYXRpb24gbW9kYWwgb3IgYSB0aW1lb3V0IHRvIHJlc2V0IHRoZSBhcm1pbmcgc3RhdGUuXG4gIHByaXZhdGUgY2xlYXJBbGxBcm1lZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzKSB7XG4gICAgc3VwZXIoYXBwKTtcbiAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgfVxuXG4gIG9uT3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyQWxsQXJtZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgb25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRlbnRFbC5lbXB0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZW5kZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gRmV0Y2hlZCBiZWZvcmUgdG91Y2hpbmcgdGhlIERPTSBzbyB0aGUgbW9kYWwgZG9lc24ndCBmbGFzaCBhblxuICAgIC8vIGVtcHR5L2hlYWRlci1vbmx5IHN0YXRlIHdoaWxlIHRoZSAoYXN5bmMpIGhpc3RvcnkgbG9hZCBpcyBpbiBmbGlnaHQuXG4gICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHRoaXMucGx1Z2luLmhpc3RvcnlNYW5hZ2VyLmdldEVudHJpZXNGb3JNYW5hZ2VtZW50KCk7XG5cbiAgICBjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcbiAgICBjb250ZW50RWwuZW1wdHkoKTtcbiAgICBjb250ZW50RWwuYWRkQ2xhc3MoXCJubGQtaGlzdG9yeS1tYW5hZ2VyLW1vZGFsXCIpO1xuXG4gICAgY29udGVudEVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIk1hbmFnZSBzdWdnZXN0aW9uIGhpc3RvcnlcIiB9KTtcblxuICAgIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29udGVudEVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiTm8gaGlzdG9yeSB5ZXQuIFN1Z2dlc3Rpb25zIHlvdSBzZWxlY3QgZnJvbSB0aGUgYXV0b3N1Z2dlc3QgcG9wdXAgd2lsbCBhcHBlYXIgaGVyZS5cIiB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBuZXcgU2V0dGluZyhjb250ZW50RWwpXG4gICAgICAuc2V0TmFtZShcIkNsZWFyIGFsbCBoaXN0b3J5XCIpXG4gICAgICAuc2V0RGVzYyh0aGlzLmNsZWFyQWxsQXJtZWRcbiAgICAgICAgPyBcIkNsaWNrIGFnYWluIHRvIGNvbmZpcm0gLS0gdGhpcyBjYW5ub3QgYmUgdW5kb25lLlwiXG4gICAgICAgIDogYFJlbW92ZSBhbGwgJHtlbnRyaWVzLmxlbmd0aH0gZW50cmllcy5gKVxuICAgICAgLmFkZEJ1dHRvbigoYnV0dG9uKSA9PiB7XG4gICAgICAgIGJ1dHRvbi5zZXRCdXR0b25UZXh0KHRoaXMuY2xlYXJBbGxBcm1lZCA/IFwiQ2xpY2sgYWdhaW4gdG8gY29uZmlybVwiIDogXCJDbGVhciBhbGxcIik7XG4gICAgICAgIGlmICh0aGlzLmNsZWFyQWxsQXJtZWQpIHtcbiAgICAgICAgICBidXR0b24uc2V0V2FybmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGJ1dHRvbi5vbkNsaWNrKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuY2xlYXJBbGxBcm1lZCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckFsbEFybWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLmhpc3RvcnlNYW5hZ2VyLmNsZWFySGlzdG9yeSgpO1xuICAgICAgICAgIHRoaXMuY2xlYXJBbGxBcm1lZCA9IGZhbHNlO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IGxhc3RVc2VkVGV4dCA9IG1vbWVudChlbnRyeS5sYXN0VXNlZCkuZnJvbU5vdygpO1xuICAgICAgY29uc3QgdGltZXNUZXh0ID0gZW50cnkuY291bnQgPT09IDEgPyBcIjEgdGltZVwiIDogYCR7ZW50cnkuY291bnR9IHRpbWVzYDtcblxuICAgICAgbmV3IFNldHRpbmcoY29udGVudEVsKVxuICAgICAgICAuc2V0TmFtZShlbnRyeS5kaXNwbGF5KVxuICAgICAgICAuc2V0RGVzYyhgVXNlZCAke3RpbWVzVGV4dH0gwrcgbGFzdCB1c2VkICR7bGFzdFVzZWRUZXh0fWApXG4gICAgICAgIC5hZGRCdXR0b24oKGJ1dHRvbikgPT4ge1xuICAgICAgICAgIGJ1dHRvblxuICAgICAgICAgICAgLnNldEljb24oXCJ0cmFzaFwiKVxuICAgICAgICAgICAgLnNldFRvb2x0aXAoXCJSZW1vdmUgdGhpcyBlbnRyeVwiKVxuICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAvLyBEZWxldGluZyBhIHNpbmdsZSBlbnRyeSBpcyBhIGRpZmZlcmVudCBhY3Rpb24gZnJvbSBcIkNsZWFyXG4gICAgICAgICAgICAgIC8vIGFsbFwiIC0tIGRvbid0IGxlYXZlIHRoYXQgYnV0dG9uIGFybWVkIGZyb20gYW4gZWFybGllciBjbGljayxcbiAgICAgICAgICAgICAgLy8gd2hlcmUgYSBsYXRlciwgdW5yZWxhdGVkIFwiQ2xlYXIgYWxsXCIgY2xpY2sgd291bGQgdGhlbiB3aXBlXG4gICAgICAgICAgICAgIC8vIGV2ZXJ5dGhpbmcgd2l0aG91dCB0aGUgdXNlciByZS1jb25maXJtaW5nIHRoYXQgc3BlY2lmaWMgaW50ZW50LlxuICAgICAgICAgICAgICB0aGlzLmNsZWFyQWxsQXJtZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIucmVtb3ZlRW50cnkoZW50cnkua2V5KTtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuL21haW5cIjtcbmltcG9ydCB7IGdldExvY2FsZVdlZWtTdGFydCwgdmFsaWRhdGVNb21lbnRGb3JtYXQgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5pbXBvcnQgSGlzdG9yeU1hbmFnZXJNb2RhbCBmcm9tIFwiLi9tb2RhbHMvaGlzdG9yeS1tYW5hZ2VyLW1vZGFsXCI7XG5cbi8qKlxuICogRGF5IG9mIHRoZSB3ZWVrIHR5cGUgZm9yIHdlZWsgc3RhcnQgcHJlZmVyZW5jZS5cbiAqIENhbiBiZSBhIHNwZWNpZmljIGRheSBvciBcImxvY2FsZS1kZWZhdWx0XCIgdG8gdXNlIHRoZSBzeXN0ZW0gbG9jYWxlLlxuICovXG5leHBvcnQgdHlwZSBEYXlPZldlZWsgPVxuICB8IFwic3VuZGF5XCJcbiAgfCBcIm1vbmRheVwiXG4gIHwgXCJ0dWVzZGF5XCJcbiAgfCBcIndlZG5lc2RheVwiXG4gIHwgXCJ0aHVyc2RheVwiXG4gIHwgXCJmcmlkYXlcIlxuICB8IFwic2F0dXJkYXlcIlxuICB8IFwibG9jYWxlLWRlZmF1bHRcIjtcblxuLyoqXG4gKiBQbHVnaW4gc2V0dGluZ3MgaW50ZXJmYWNlLlxuICogQ29udGFpbnMgYWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIE5hdHVyYWwgTGFuZ3VhZ2UgRGF0ZXMgcGx1Z2luLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5MRFNldHRpbmdzIHtcbiAgYXV0b3N1Z2dlc3RUb2dnbGVMaW5rOiBib29sZWFuO1xuICBhdXRvY29tcGxldGVUcmlnZ2VyUGhyYXNlOiBzdHJpbmc7XG4gIGlzQXV0b3N1Z2dlc3RFbmFibGVkOiBib29sZWFuO1xuXG4gIGZvcm1hdDogc3RyaW5nO1xuICB0aW1lRm9ybWF0OiBzdHJpbmc7XG4gIHNlcGFyYXRvcjogc3RyaW5nO1xuICB3ZWVrU3RhcnQ6IERheU9mV2VlaztcbiAgbGFuZ3VhZ2VzOiBzdHJpbmdbXTtcblxuICBlbmdsaXNoOiBib29sZWFuO1xuICBqYXBhbmVzZTogYm9vbGVhbjtcbiAgZnJlbmNoOiBib29sZWFuO1xuICBnZXJtYW46IGJvb2xlYW47XG4gIHBvcnR1Z3Vlc2U6IGJvb2xlYW47XG4gIGR1dGNoOiBib29sZWFuO1xuICBzcGFuaXNoOiBib29sZWFuO1xuICBpdGFsaWFuOiBib29sZWFuO1xuICBydXNzaWFuOiBib29sZWFuO1xuICB1a3JhaW5pYW46IGJvb2xlYW47XG4gIGNoaW5lc2U6IGJvb2xlYW47XG4gIGtvcmVhbjogYm9vbGVhbjtcblxuICBtb2RhbFRvZ2dsZUxpbms6IGJvb2xlYW47XG4gIC8vIERhdGUtb25seTogdGhlIERhdGUgUGlja2VyIGRlbGliZXJhdGVseSBuZXZlciBzdXJmYWNlcyBhIHRpbWUgLS0gdGhlcmUnc1xuICAvLyBubyB0aW1lLW9mLWRheSBjb250cm9sIGFueXdoZXJlIGluIHRoYXQgbW9kYWwncyBVSSwgc28gYSBmb3JtYXRcbiAgLy8gaW5jbHVkaW5nIHRpbWUgdG9rZW5zIHdvdWxkIG9ubHkgZXZlciBkaXNwbGF5IGEgbWVhbmluZ2xlc3MgY29uc3RhbnRcbiAgLy8gKHRoZSBwaWNrZWQgZGF0ZSBub3JtYWxpemVkIHRvIG1pZG5pZ2h0KS4gVXNlIHRoZSBcIkluc2VydCB0aGUgY3VycmVudFxuICAvLyBkYXRlIGFuZCB0aW1lXCIgY29tbWFuZCwgb3IgdHlwZSBhIGZ1bGwgZXhwcmVzc2lvbiBpbnRvIHRoZSBhdXRvc3VnZ2VzdCxcbiAgLy8gZm9yIGFueXRoaW5nIHRoYXQgYWN0dWFsbHkgbmVlZHMgYSB0aW1lLlxuICBtb2RhbE1vbWVudEZvcm1hdDogc3RyaW5nO1xuXG4gIC8vIFBlcmlvZGljLW5vdGUgZm9ybWF0cyAob3B0aW9uYWwsIGFsbCBkZWZhdWx0IHRvIFwiXCIpOiB3aGVuIGFuIGV4cHJlc3Npb25cbiAgLy8gcmVzb2x2ZXMgdG8gYSB3aG9sZSB3ZWVrL21vbnRoL3F1YXJ0ZXIveWVhciAoZS5nLiBcIm5leHQgd2Vla1wiLCBcIlEzXCIsXG4gIC8vIFwidGhpcyBxdWFydGVyXCIpIGluc3RlYWQgb2YgYSBzaW5nbGUgZGF5LCB1c2UgdGhpcyBmb3JtYXQgaW5zdGVhZCBvZiB0aGVcbiAgLy8gZGFpbHkgXCJmb3JtYXRcIiBzZXR0aW5nIGFib3ZlIC0tIGZvciBsaW5raW5nIHRvIFBlcmlvZGljIE5vdGVzLXN0eWxlXG4gIC8vIHdlZWtseS9tb250aGx5L3F1YXJ0ZXJseS95ZWFybHkgbm90ZXMuIExlYXZlIGVtcHR5IHRvIGtlZXAgdXNpbmcgdGhlXG4gIC8vIGRhaWx5IGZvcm1hdCAoYW5kLCBmb3Igd2Vla3Mgc3BlY2lmaWNhbGx5LCB0aGUgZXhpc3RpbmcgXCJuZXh0IHdlZWtcIlxuICAvLyBtdWx0aS1kYXktbGluayBiZWhhdmlvcikgdW5jaGFuZ2VkLlxuICB3ZWVrRm9ybWF0OiBzdHJpbmc7XG4gIG1vbnRoRm9ybWF0OiBzdHJpbmc7XG4gIHF1YXJ0ZXJGb3JtYXQ6IHN0cmluZztcbiAgeWVhckZvcm1hdDogc3RyaW5nO1xuXG4gIC8vIFNtYXJ0IHN1Z2dlc3Rpb25zXG4gIGVuYWJsZVNtYXJ0U3VnZ2VzdGlvbnM6IGJvb2xlYW47XG4gIGVuYWJsZUhpc3RvcnlTdWdnZXN0aW9uczogYm9vbGVhbjtcbiAgZW5hYmxlQ29udGV4dFN1Z2dlc3Rpb25zOiBib29sZWFuO1xuXG4gIC8vIFNtYXJ0IGRhdGUgZm9ybWF0dGluZ1xuICBvbWl0RGF0ZUZvclNob3J0UmVsYXRpdmU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFVFRJTkdTOiBOTERTZXR0aW5ncyA9IHtcbiAgYXV0b3N1Z2dlc3RUb2dnbGVMaW5rOiB0cnVlLFxuICBhdXRvY29tcGxldGVUcmlnZ2VyUGhyYXNlOiBcIkBcIixcbiAgaXNBdXRvc3VnZ2VzdEVuYWJsZWQ6IHRydWUsXG5cbiAgZm9ybWF0OiBcIllZWVktTU0tRERcIixcbiAgdGltZUZvcm1hdDogXCJISDptbVwiLFxuICBzZXBhcmF0b3I6IFwiIFwiLFxuICB3ZWVrU3RhcnQ6IFwibG9jYWxlLWRlZmF1bHRcIixcbiAgbGFuZ3VhZ2VzOiBbXCJlblwiXSxcblxuICBlbmdsaXNoOiB0cnVlLCAgLy8gU3luY2hyb25pemVkIHdpdGggbGFuZ3VhZ2VzOiBbXCJlblwiXVxuICBqYXBhbmVzZTogZmFsc2UsXG4gIGZyZW5jaDogZmFsc2UsXG4gIGdlcm1hbjogZmFsc2UsXG4gIHBvcnR1Z3Vlc2U6IGZhbHNlLFxuICBkdXRjaDogZmFsc2UsXG4gIHNwYW5pc2g6IGZhbHNlLFxuICBpdGFsaWFuOiBmYWxzZSxcbiAgcnVzc2lhbjogZmFsc2UsXG4gIHVrcmFpbmlhbjogZmFsc2UsXG4gIGNoaW5lc2U6IGZhbHNlLFxuICBrb3JlYW46IGZhbHNlLFxuXG4gIG1vZGFsVG9nZ2xlTGluazogZmFsc2UsXG4gIG1vZGFsTW9tZW50Rm9ybWF0OiBcIllZWVktTU0tRERcIixcblxuICB3ZWVrRm9ybWF0OiBcIlwiLFxuICBtb250aEZvcm1hdDogXCJcIixcbiAgcXVhcnRlckZvcm1hdDogXCJcIixcbiAgeWVhckZvcm1hdDogXCJcIixcblxuICAvLyBTbWFydCBzdWdnZXN0aW9uc1xuICBlbmFibGVTbWFydFN1Z2dlc3Rpb25zOiB0cnVlLFxuICBlbmFibGVIaXN0b3J5U3VnZ2VzdGlvbnM6IHRydWUsXG4gIGVuYWJsZUNvbnRleHRTdWdnZXN0aW9uczogdHJ1ZSxcblxuICAvLyBTbWFydCBkYXRlIGZvcm1hdHRpbmdcbiAgb21pdERhdGVGb3JTaG9ydFJlbGF0aXZlOiB0cnVlLFxufTtcblxuY29uc3Qgd2Vla2RheXMgPSBbXG4gIFwic3VuZGF5XCIsXG4gIFwibW9uZGF5XCIsXG4gIFwidHVlc2RheVwiLFxuICBcIndlZG5lc2RheVwiLFxuICBcInRodXJzZGF5XCIsXG4gIFwiZnJpZGF5XCIsXG4gIFwic2F0dXJkYXlcIixcbl07XG5cbmV4cG9ydCBjbGFzcyBOTERTZXR0aW5nc1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuICBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzO1xuXG4gIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzKSB7XG4gICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICB9XG5cbiAgZGlzcGxheSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuICAgIGNvbnN0IGxvY2FsaXplZFdlZWtkYXlzID0gbW9tZW50LndlZWtkYXlzKCk7XG4gICAgY29uc3QgbG9jYWxlV2Vla1N0YXJ0ID0gZ2V0TG9jYWxlV2Vla1N0YXJ0KCk7XG5cbiAgICBjb250YWluZXJFbC5lbXB0eSgpO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpLnNldEhlYWRpbmcoKS5zZXROYW1lKFwiTmF0dXJhbCBsYW5ndWFnZSBkYXRlc1wiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKS5zZXRIZWFkaW5nKCkuc2V0TmFtZShcIlBhcnNlciBzZXR0aW5nc1wiKTtcblxuICAgIGNvbnN0IGRhdGVGb3JtYXRTZXR0aW5nID0gbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIkRhdGUgZm9ybWF0XCIpXG4gICAgICAuc2V0RGVzYyhcIk91dHB1dCBmb3JtYXQgZm9yIHBhcnNlZCBkYXRlc1wiKVxuICAgICAgLmFkZE1vbWVudEZvcm1hdCgodGV4dCkgPT5cbiAgICAgICAgdGV4dFxuICAgICAgICAgIC5zZXREZWZhdWx0Rm9ybWF0KFwiWVlZWS1NTS1ERFwiKVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVNb21lbnRGb3JtYXQodmFsdWUgfHwgXCJZWVlZLU1NLUREXCIpO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlZC52YWxpZCkge1xuICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQgPSB2YWx1ZSB8fCBcIllZWVktTU0tRERcIjtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgIC8vIE1ldHRyZSDDoCBqb3VyIGxhIGRlc2NyaXB0aW9uIGF2ZWMgbGEgcHLDqXZpc3VhbGlzYXRpb24uXG4gICAgICAgICAgICAgIC8vIHZhbGlkYXRlTW9tZW50Rm9ybWF0KCkncyBjb250cmFjdCBndWFyYW50ZWVzIHByZXZpZXcgaXMgc2V0XG4gICAgICAgICAgICAgIC8vIHdoZW5ldmVyIHZhbGlkIGlzIHRydWUsIHNvIHRoZSBcIjogJydcIiBmYWxsYmFjayBiZWxvdyBpc1xuICAgICAgICAgICAgICAvLyB1bnJlYWNoYWJsZSB3aXRoIHJlYWwgZGF0YS5cbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdFNldHRpbmcuc2V0RGVzYyhgT3V0cHV0IGZvcm1hdCBmb3IgcGFyc2VkIGRhdGVzJHt2YWxpZGF0ZWQucHJldmlldyA/IGAgKFByZXZpZXc6ICR7dmFsaWRhdGVkLnByZXZpZXd9KWAgOiBcIlwifWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQWZmaWNoZXIgbCdlcnJldXIgZGFucyBsYSBkZXNjcmlwdGlvbi4gRXZlcnkgaW52YWxpZC1mb3JtYXRcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGZyb20gdmFsaWRhdGVNb21lbnRGb3JtYXQoKSBhbHdheXMgc2V0cyBlcnJvciwgc28gdGhlXG4gICAgICAgICAgICAgIC8vIFwiRm9ybWF0IGludmFsaWRlXCIgZmFsbGJhY2sgYmVsb3cgaXMgdW5yZWFjaGFibGUgd2l0aCByZWFsIGRhdGEuXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXRTZXR0aW5nLnNldERlc2MoYE91dHB1dCBmb3JtYXQgZm9yIHBhcnNlZCBkYXRlcyAtIOKaoO+4jyAke3ZhbGlkYXRlZC5lcnJvciB8fCBcIkZvcm1hdCBpbnZhbGlkZVwifWApO1xuICAgICAgICAgICAgICAvLyBOZSBwYXMgc2F1dmVnYXJkZXIgbGUgZm9ybWF0IGludmFsaWRlLCByZXN0YXVyZXIgbGUgcHLDqWPDqWRlbnRcbiAgICAgICAgICAgICAgdGV4dC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICApO1xuICAgIFxuICAgIC8vIEFmZmljaGVyIGxhIHByw6l2aXN1YWxpc2F0aW9uIGluaXRpYWxlXG4gICAgY29uc3QgaW5pdGlhbFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgIGlmIChpbml0aWFsVmFsaWRhdGlvbi52YWxpZCAmJiBpbml0aWFsVmFsaWRhdGlvbi5wcmV2aWV3KSB7XG4gICAgICBkYXRlRm9ybWF0U2V0dGluZy5zZXREZXNjKGBPdXRwdXQgZm9ybWF0IGZvciBwYXJzZWQgZGF0ZXMgKFByZXZpZXc6ICR7aW5pdGlhbFZhbGlkYXRpb24ucHJldmlld30pYCk7XG4gICAgfVxuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIldlZWsgc3RhcnRzIG9uXCIpXG4gICAgICAuc2V0RGVzYyhcIldoaWNoIGRheSB0byBjb25zaWRlciBhcyB0aGUgc3RhcnQgb2YgdGhlIHdlZWtcIilcbiAgICAgIC5hZGREcm9wZG93bigoZHJvcGRvd24pID0+IHtcbiAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKFwibG9jYWxlLWRlZmF1bHRcIiwgYExvY2FsZSBkZWZhdWx0ICgke1N0cmluZyhsb2NhbGVXZWVrU3RhcnQpfSlgKTtcbiAgICAgICAgbG9jYWxpemVkV2Vla2RheXMuZm9yRWFjaCgoZGF5LCBpKSA9PiB7XG4gICAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKHdlZWtkYXlzW2ldLCBkYXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgZHJvcGRvd24uc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3Mud2Vla1N0YXJ0LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBkcm9wZG93bi5vbkNoYW5nZShhc3luYyAodmFsdWU6IERheU9mV2VlaykgPT4ge1xuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLndlZWtTdGFydCA9IHZhbHVlO1xuICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpLnNldEhlYWRpbmcoKS5zZXROYW1lKFwiTGFuZ3VhZ2Ugc2V0dGluZ3NcIik7XG5cbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJFbmdsaXNoXCIsIFwiZW5nbGlzaFwiLCBcImVuXCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIkphcGFuZXNlXCIsIFwiamFwYW5lc2VcIiwgXCJqYVwiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJGcmVuY2hcIiwgXCJmcmVuY2hcIiwgXCJmclwiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJHZXJtYW5cIiwgXCJnZXJtYW5cIiwgXCJkZVwiLCBcInBhcnRpYWxseSBzdXBwb3J0ZWRcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiUG9ydHVndWVzZVwiLCBcInBvcnR1Z3Vlc2VcIiwgXCJwdFwiLCBcInBhcnRpYWxseSBzdXBwb3J0ZWRcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiRHV0Y2hcIiwgXCJkdXRjaFwiLCBcIm5sXCIsIFwidW5kZXIgZGV2ZWxvcG1lbnRcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiU3BhbmlzaFwiLCBcInNwYW5pc2hcIiwgXCJlc1wiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJJdGFsaWFuXCIsIFwiaXRhbGlhblwiLCBcIml0XCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIlJ1c3NpYW5cIiwgXCJydXNzaWFuXCIsIFwicnVcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiVWtyYWluaWFuXCIsIFwidWtyYWluaWFuXCIsIFwidWtcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiQ2hpbmVzZSAoVHJhZGl0aW9uYWwpXCIsIFwiY2hpbmVzZVwiLCBcInpoLmhhbnRcIiwgXCJwYXJ0aWFsbHkgc3VwcG9ydGVkXCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIktvcmVhblwiLCBcImtvcmVhblwiLCBcImtvXCIsIFwicGFydGlhbGx5IHN1cHBvcnRlZFwiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKS5zZXRIZWFkaW5nKCkuc2V0TmFtZShcIkhvdGtleSBmb3JtYXR0aW5nIHNldHRpbmdzXCIpO1xuXG4gICAgY29uc3QgdGltZUZvcm1hdFNldHRpbmcgPSBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiVGltZSBmb3JtYXRcIilcbiAgICAgIC5zZXREZXNjKFwiRm9ybWF0IGZvciB0aGUgaG90a2V5cyB0aGF0IGluY2x1ZGUgdGhlIGN1cnJlbnQgdGltZVwiKVxuICAgICAgLmFkZE1vbWVudEZvcm1hdCgodGV4dCkgPT5cbiAgICAgICAgdGV4dFxuICAgICAgICAgIC5zZXREZWZhdWx0Rm9ybWF0KFwiSEg6bW1cIilcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZUZvcm1hdClcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh2YWx1ZSB8fCBcIkhIOm1tXCIpO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlZC52YWxpZCkge1xuICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0ID0gdmFsdWUgfHwgXCJISDptbVwiO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgLy8gTWV0dHJlIMOgIGpvdXIgbGEgZGVzY3JpcHRpb24gYXZlYyBsYSBwcsOpdmlzdWFsaXNhdGlvbiAoc2VlXG4gICAgICAgICAgICAgIC8vIHRoZSBkYXRlLWZvcm1hdCBzZXR0aW5nIGFib3ZlOiB0aGUgXCI6ICcnXCIgZmFsbGJhY2sgaGVyZSBpc1xuICAgICAgICAgICAgICAvLyBzaW1pbGFybHkgdW5yZWFjaGFibGUgZ2l2ZW4gdmFsaWRhdGVNb21lbnRGb3JtYXQoKSdzIGNvbnRyYWN0KS5cbiAgICAgICAgICAgICAgdGltZUZvcm1hdFNldHRpbmcuc2V0RGVzYyhgRm9ybWF0IGZvciB0aGUgaG90a2V5cyB0aGF0IGluY2x1ZGUgdGhlIGN1cnJlbnQgdGltZSR7dmFsaWRhdGVkLnByZXZpZXcgPyBgIChQcmV2aWV3OiAke3ZhbGlkYXRlZC5wcmV2aWV3fSlgIDogXCJcIn1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEFmZmljaGVyIGwnZXJyZXVyIGRhbnMgbGEgZGVzY3JpcHRpb24gKHVucmVhY2hhYmxlIGZhbGxiYWNrLFxuICAgICAgICAgICAgICAvLyBzYW1lIHJlYXNvbmluZyBhcyB0aGUgZGF0ZS1mb3JtYXQgc2V0dGluZyBhYm92ZSkuXG4gICAgICAgICAgICAgIHRpbWVGb3JtYXRTZXR0aW5nLnNldERlc2MoYEZvcm1hdCBmb3IgdGhlIGhvdGtleXMgdGhhdCBpbmNsdWRlIHRoZSBjdXJyZW50IHRpbWUgLSDimqDvuI8gJHt2YWxpZGF0ZWQuZXJyb3IgfHwgXCJGb3JtYXQgaW52YWxpZGVcIn1gKTtcbiAgICAgICAgICAgICAgLy8gTmUgcGFzIHNhdXZlZ2FyZGVyIGxlIGZvcm1hdCBpbnZhbGlkZSwgcmVzdGF1cmVyIGxlIHByw6ljw6lkZW50XG4gICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgXG4gICAgLy8gQWZmaWNoZXIgbGEgcHLDqXZpc3VhbGlzYXRpb24gaW5pdGlhbGVcbiAgICBjb25zdCBpbml0aWFsVGltZVZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0KTtcbiAgICBpZiAoaW5pdGlhbFRpbWVWYWxpZGF0aW9uLnZhbGlkICYmIGluaXRpYWxUaW1lVmFsaWRhdGlvbi5wcmV2aWV3KSB7XG4gICAgICB0aW1lRm9ybWF0U2V0dGluZy5zZXREZXNjKGBGb3JtYXQgZm9yIHRoZSBob3RrZXlzIHRoYXQgaW5jbHVkZSB0aGUgY3VycmVudCB0aW1lIChQcmV2aWV3OiAke2luaXRpYWxUaW1lVmFsaWRhdGlvbi5wcmV2aWV3fSlgKTtcbiAgICB9XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiU2VwYXJhdG9yXCIpXG4gICAgICAuc2V0RGVzYyhcIlNlcGFyYXRvciBiZXR3ZWVuIGRhdGUgYW5kIHRpbWUgZm9yIGVudHJpZXMgdGhhdCBoYXZlIGJvdGhcIilcbiAgICAgIC5hZGRUZXh0KCh0ZXh0KSA9PlxuICAgICAgICB0ZXh0XG4gICAgICAgICAgLnNldFBsYWNlaG9sZGVyKFwiU2VwYXJhdG9yIGlzIGVtcHR5XCIpXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnNlcGFyYXRvcilcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5zZXBhcmF0b3IgPSB2YWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpLnNldEhlYWRpbmcoKS5zZXROYW1lKFwiRGF0ZSBhdXRvc3VnZ2VzdFwiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJFbmFibGUgZGF0ZSBhdXRvc3VnZ2VzdFwiKVxuICAgICAgLnNldERlc2MoXG4gICAgICAgIGBJbnB1dCBkYXRlcyB3aXRoIG5hdHVyYWwgbGFuZ3VhZ2UuIE9wZW4gdGhlIHN1Z2dlc3QgbWVudSB3aXRoICR7dGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZX1gXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5pc0F1dG9zdWdnZXN0RW5hYmxlZClcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pc0F1dG9zdWdnZXN0RW5hYmxlZCA9IHZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiQWRkIGRhdGVzIGFzIGxpbms/XCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJJZiBlbmFibGVkLCBkYXRlcyBjcmVhdGVkIHZpYSBhdXRvc3VnZ2VzdCB3aWxsIGJlIHdyYXBwZWQgaW4gW1t3aWtpbGlua3NdXVwiXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvc3VnZ2VzdFRvZ2dsZUxpbmspXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b3N1Z2dlc3RUb2dnbGVMaW5rID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIGNvbnN0IHRyaWdnZXJQaHJhc2VEZXNjID0gXCJDaGFyYWN0ZXIocykgdGhhdCB3aWxsIGNhdXNlIHRoZSBkYXRlIGF1dG9zdWdnZXN0IHRvIG9wZW5cIjtcbiAgICBjb25zdCB0cmlnZ2VyUGhyYXNlU2V0dGluZyA9IG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJUcmlnZ2VyIHBocmFzZVwiKVxuICAgICAgLnNldERlc2ModHJpZ2dlclBocmFzZURlc2MpXG4gICAgICAuYWRkTW9tZW50Rm9ybWF0KCh0ZXh0KSA9PlxuICAgICAgICB0ZXh0XG4gICAgICAgICAgLnNldFBsYWNlaG9sZGVyKERFRkFVTFRfU0VUVElOR1MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZSlcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZSB8fCBcIkBcIilcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgaWYgKHRyaW1tZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZSA9IHRyaW1tZWQ7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICB0cmlnZ2VyUGhyYXNlU2V0dGluZy5zZXREZXNjKHRyaWdnZXJQaHJhc2VEZXNjKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEFuIGVtcHR5IHRyaWdnZXIgcGhyYXNlIG1ha2VzIG9uVHJpZ2dlcigpJ3NcbiAgICAgICAgICAgICAgLy8gcXVlcnkuc3RhcnRzV2l0aCh0cmlnZ2VyUGhyYXNlKSBhbHdheXMgdHJ1ZSwgc28gdGhlXG4gICAgICAgICAgICAgIC8vIGF1dG9zdWdnZXN0IHBvcHVwIHdvdWxkIGZpcmUgb24gdmlydHVhbGx5IGV2ZXJ5IGtleXN0cm9rZS5cbiAgICAgICAgICAgICAgLy8gUmVmdXNlIHRvIHNhdmUgaXQsIG1hdGNoaW5nIHRoZSBEYXRlL1RpbWUgZm9ybWF0IGZpZWxkcyBhYm92ZS5cbiAgICAgICAgICAgICAgdHJpZ2dlclBocmFzZVNldHRpbmcuc2V0RGVzYyhgJHt0cmlnZ2VyUGhyYXNlRGVzY30gLSDimqDvuI8gVHJpZ2dlciBwaHJhc2UgY2Fubm90IGJlIGVtcHR5YCk7XG4gICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZSB8fCBcIkBcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0SGVhZGluZygpLnNldE5hbWUoXCJTbWFydCBzdWdnZXN0aW9uc1wiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJFbmFibGUgc21hcnQgc3VnZ2VzdGlvbnNcIilcbiAgICAgIC5zZXREZXNjKFxuICAgICAgICBcIkVuYWJsZSBpbnRlbGxpZ2VudCBzdWdnZXN0aW9ucyBiYXNlZCBvbiB5b3VyIHVzYWdlIGhpc3RvcnkgYW5kIGRvY3VtZW50IGNvbnRleHRcIlxuICAgICAgKVxuICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PlxuICAgICAgICB0b2dnbGVcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlU21hcnRTdWdnZXN0aW9ucylcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVTbWFydFN1Z2dlc3Rpb25zID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJIaXN0b3J5LWJhc2VkIHN1Z2dlc3Rpb25zXCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJMZWFybiBmcm9tIHlvdXIgZnJlcXVlbnRseSB1c2VkIGRhdGUgcGF0dGVybnMgYW5kIHByaW9yaXRpemUgdGhlbSBpbiBzdWdnZXN0aW9uc1wiXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVIaXN0b3J5U3VnZ2VzdGlvbnMpXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSGlzdG9yeVN1Z2dlc3Rpb25zID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJDb250ZXh0LWJhc2VkIHN1Z2dlc3Rpb25zXCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJTdWdnZXN0IGRhdGVzIGJhc2VkIG9uIGRhdGVzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgY3VycmVudCBkb2N1bWVudFwiXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVDb250ZXh0U3VnZ2VzdGlvbnMpXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlQ29udGV4dFN1Z2dlc3Rpb25zID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJNYW5hZ2UgaGlzdG9yeVwiKVxuICAgICAgLnNldERlc2MoXG4gICAgICAgIFwiVmlldyB5b3VyIHN1Z2dlc3Rpb24gaGlzdG9yeSBhbmQgcmVtb3ZlIGluZGl2aWR1YWwgZW50cmllcywgb3IgY2xlYXIgaXQgZW50aXJlbHlcIlxuICAgICAgKVxuICAgICAgLmFkZEJ1dHRvbigoYnV0dG9uKSA9PlxuICAgICAgICBidXR0b25cbiAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIk1hbmFnZSBoaXN0b3J5XCIpXG4gICAgICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICAgICAgbmV3IEhpc3RvcnlNYW5hZ2VyTW9kYWwodGhpcy5hcHAsIHRoaXMucGx1Z2luKS5vcGVuKCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0SGVhZGluZygpLnNldE5hbWUoXCJEYXRlIGZvcm1hdHRpbmdcIik7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiT21pdCBkYXRlIGZvciBzaG9ydCByZWxhdGl2ZSBleHByZXNzaW9uc1wiKVxuICAgICAgLnNldERlc2MoXG4gICAgICAgIFwiV2hlbiBlbmFibGVkLCBzaG9ydCByZWxhdGl2ZSBleHByZXNzaW9ucyBmb3IgdG9kYXkgKGUuZy4sICdpbiAxNSBtaW4nLCAnZGFucyAyIGhldXJlcycpIHdpbGwgZGlzcGxheSBvbmx5IHRoZSB0aW1lIChlLmcuLCAnMTQ6MzAnKSBpbnN0ZWFkIG9mICdbWzIwMjQtMDEtMTVdXSAxNDozMCdcIlxuICAgICAgKVxuICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PlxuICAgICAgICB0b2dnbGVcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKVxuICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLm9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZSA9IHZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0SGVhZGluZygpLnNldE5hbWUoXCJQZXJpb2RpYyBub3Rlc1wiKTtcblxuICAgIHRoaXMuY3JlYXRlUGVyaW9kaWNGb3JtYXRTZXR0aW5nKGNvbnRhaW5lckVsLCBcIldlZWsgZm9ybWF0XCIsIFwid2Vla0Zvcm1hdFwiLCBcIkdHR0ctW1ddV1dcIiwgXCJuZXh0IHdlZWtcIik7XG4gICAgdGhpcy5jcmVhdGVQZXJpb2RpY0Zvcm1hdFNldHRpbmcoY29udGFpbmVyRWwsIFwiTW9udGggZm9ybWF0XCIsIFwibW9udGhGb3JtYXRcIiwgXCJZWVlZLU1NXCIsIFwibmV4dCBtb250aFwiKTtcbiAgICB0aGlzLmNyZWF0ZVBlcmlvZGljRm9ybWF0U2V0dGluZyhjb250YWluZXJFbCwgXCJRdWFydGVyIGZvcm1hdFwiLCBcInF1YXJ0ZXJGb3JtYXRcIiwgXCJZWVlZLVtRXVFcIiwgXCJuZXh0IHF1YXJ0ZXIsIFEzXCIpO1xuICAgIHRoaXMuY3JlYXRlUGVyaW9kaWNGb3JtYXRTZXR0aW5nKGNvbnRhaW5lckVsLCBcIlllYXIgZm9ybWF0XCIsIFwieWVhckZvcm1hdFwiLCBcIllZWVlcIiwgXCJuZXh0IHllYXJcIik7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUGVyaW9kaWNGb3JtYXRTZXR0aW5nKFxuICAgIGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgc2V0dGluZ0tleTogXCJ3ZWVrRm9ybWF0XCIgfCBcIm1vbnRoRm9ybWF0XCIgfCBcInF1YXJ0ZXJGb3JtYXRcIiB8IFwieWVhckZvcm1hdFwiLFxuICAgIHBsYWNlaG9sZGVyOiBzdHJpbmcsXG4gICAgZXhhbXBsZXM6IHN0cmluZ1xuICApOiBTZXR0aW5nIHtcbiAgICBjb25zdCBiYXNlRGVzYyA9IGBVc2VkIGluc3RlYWQgb2YgdGhlIGRhaWx5IERhdGUgZm9ybWF0IHdoZW4gYW4gZXhwcmVzc2lvbiByZXNvbHZlcyB0byBhIHdob2xlIHBlcmlvZCAoZS5nLiBcIiR7ZXhhbXBsZXN9XCIpLiBMZWF2ZSBlbXB0eSB0byBrZWVwIHVzaW5nIHRoZSBkYWlseSBEYXRlIGZvcm1hdCBmb3IgdGhlc2UgdG9vLmA7XG5cbiAgICBjb25zdCBzZXR0aW5nID0gbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShuYW1lKVxuICAgICAgLnNldERlc2MoYmFzZURlc2MpXG4gICAgICAuYWRkTW9tZW50Rm9ybWF0KCh0ZXh0KSA9PlxuICAgICAgICB0ZXh0XG4gICAgICAgICAgLnNldFBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyKVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5nc1tzZXR0aW5nS2V5XSlcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgaWYgKCF0cmltbWVkKSB7XG4gICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzW3NldHRpbmdLZXldID0gXCJcIjtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgIHNldHRpbmcuc2V0RGVzYyhiYXNlRGVzYyk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlTW9tZW50Rm9ybWF0KHRyaW1tZWQpO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlZC52YWxpZCkge1xuICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5nc1tzZXR0aW5nS2V5XSA9IHRyaW1tZWQ7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICBzZXR0aW5nLnNldERlc2MoYCR7YmFzZURlc2N9JHt2YWxpZGF0ZWQucHJldmlldyA/IGAgKFByZXZpZXc6ICR7dmFsaWRhdGVkLnByZXZpZXd9KWAgOiBcIlwifWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2V0dGluZy5zZXREZXNjKGAke2Jhc2VEZXNjfSAtIOKaoO+4jyAke3ZhbGlkYXRlZC5lcnJvciB8fCBcIkZvcm1hdCBpbnZhbGlkZVwifWApO1xuICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzW3NldHRpbmdLZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIGlmICh0aGlzLnBsdWdpbi5zZXR0aW5nc1tzZXR0aW5nS2V5XSkge1xuICAgICAgY29uc3QgaW5pdGlhbFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5nc1tzZXR0aW5nS2V5XSk7XG4gICAgICBpZiAoaW5pdGlhbFZhbGlkYXRpb24udmFsaWQgJiYgaW5pdGlhbFZhbGlkYXRpb24ucHJldmlldykge1xuICAgICAgICBzZXR0aW5nLnNldERlc2MoYCR7YmFzZURlc2N9IChQcmV2aWV3OiAke2luaXRpYWxWYWxpZGF0aW9uLnByZXZpZXd9KWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZXR0aW5nO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbDogSFRNTEVsZW1lbnQsIHRleHQ6IHN0cmluZywgc2V0dGluZ0tleToga2V5b2YgTkxEU2V0dGluZ3MsIGNvZGU6IHN0cmluZywgbm90ZT86IHN0cmluZykgOiBTZXR0aW5nIHtcbiAgICBub3RlID0gbm90ZSA/IGAgKCR7bm90ZX0pYCA6IFwiXCI7XG4gICAgcmV0dXJuIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUodGV4dClcbiAgICAgIC5zZXREZXNjKGBXaGV0aGVyIHRvIHBhcnNlICR7dGV4dH0gb3Igbm90YCArIG5vdGUpXG4gICAgICAuYWRkVG9nZ2xlKGwgPT5cbiAgICAgICAgbFxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5nc1tzZXR0aW5nS2V5XSBhcyBib29sZWFuKVxuICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodikgPT4ge1xuICAgICAgICAgICAgKHRoaXMucGx1Z2luLnNldHRpbmdzW3NldHRpbmdLZXldIGFzIGJvb2xlYW4pID0gdjtcbiAgICAgICAgICAgIHRoaXMuZWRpdExhbmd1YWdlcyhjb2RlLCB2KTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVzZXRQYXJzZXIoKTtcbiAgICAgICAgICB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZWRpdExhbmd1YWdlcyhjb2RlOiBzdHJpbmcsIGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgaWYgKCF0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXMuaW5jbHVkZXMoY29kZSkpIHtcbiAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzLnB1c2goY29kZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzLmluZGV4T2YoY29kZSk7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0iLCJpbXBvcnQgeyBBcHAsIE1vZGFsLCBTZXR0aW5nIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZU1hcmtkb3duTGluaywgZ2V0TG9jYWxlV2Vla1N0YXJ0LCB2YWxpZGF0ZU1vbWVudEZvcm1hdCwgZ2V0QWN0aXZlRWRpdG9yIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSBOYXR1cmFsTGFuZ3VhZ2VEYXRlcyBmcm9tIFwiLi4vbWFpblwiO1xuaW1wb3J0IHsgREVGQVVMVF9TRVRUSU5HUyB9IGZyb20gXCIuLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHQgZnJvbSBcIi4uL2xhbmcvaGVscGVyXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuLi93aW5kb3ctbW9tZW50XCI7XG5cbnR5cGUgTW9tZW50ID0gaW1wb3J0KFwibW9tZW50XCIpLk1vbWVudDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0ZVBpY2tlck1vZGFsIGV4dGVuZHMgTW9kYWwge1xuICBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzO1xuICBwcml2YXRlIHNlbGVjdGVkRGF0ZTogTW9tZW50O1xuICBwcml2YXRlIGN1cnJlbnRNb250aDogTW9tZW50O1xuICBwcml2YXRlIGNhbGVuZGFyRWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcXVpY2tCdXR0b25zRWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcHJldmlld0VsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGRhdGVJbnB1dEVsOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaXNEYXJrTW9kZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSB0aGVtZU9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUga2V5Ym9hcmRIYW5kbGVyOiAoKGU6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWREYXRlRm46ICgoZGF0ZTogTW9tZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzKSB7XG4gICAgc3VwZXIoYXBwKTtcbiAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICAvLyBOb3JtYWxpemVkIHRvIG1pZG5pZ2h0OiB0aGlzIGlzIGEgZGF0ZSBwaWNrZXIsIG5vdCBhIHRpbWUgcGlja2VyLCBhbmRcbiAgICAvLyBub3RoaW5nIGluIHRoZSBVSSBsZXRzIHRoZSB1c2VyIHNldCBhIHRpbWUtb2YtZGF5LiBDYXJyeWluZyB0aGUgcmVhbFxuICAgIC8vIGN1cnJlbnQgd2FsbC1jbG9jayB0aW1lIGhlcmUgKG1vbWVudCgpKSBtZWFudCB0aGF0IG9wZW5pbmcgdGhlIG1vZGFsXG4gICAgLy8gYW5kIGltbWVkaWF0ZWx5IGluc2VydGluZyBwcm9kdWNlZCB3aGF0ZXZlciB0aGUgY2xvY2sgaGFwcGVuZWQgdG9cbiAgICAvLyByZWFkLCBub3QgYSBjbGVhbiBkYXRlIC0tIGFuZCBnZXREYXRlU3RyKCkgYmVsb3cgZm9ybWF0cyAqc29tZSpcbiAgICAvLyBtb21lbnQgd2l0aCBhIGZvcm1hdCBzdHJpbmcgdGhhdCBpbmNsdWRlcyBcIkhIOm1tXCIgYnkgZGVmYXVsdC5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG1vbWVudCgpLnN0YXJ0T2YoXCJkYXlcIik7XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBtb21lbnQoKTtcbiAgICAvLyBEw6l0ZWN0ZXIgbGUgbW9kZSBzb21icmVcbiAgICB0aGlzLmlzRGFya01vZGUgPSBhY3RpdmVEb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInRoZW1lLWRhcmtcIik7XG4gIH1cblxuICBvbk9wZW4oKTogdm9pZCB7XG4gICAgY29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XG4gICAgY29udGVudEVsLmVtcHR5KCk7XG4gICAgY29udGVudEVsLmFkZENsYXNzKFwibmxkLWRhdGUtcGlja2VyLW1vZGFsXCIpO1xuXG4gICAgLy8gQWpvdXRlciBsZXMgc3R5bGVzIHBvdXIgbGUgbW9kZSBzb21icmVcbiAgICBpZiAodGhpcy5pc0RhcmtNb2RlKSB7XG4gICAgICBjb250ZW50RWwuYWRkQ2xhc3MoXCJubGQtZGFyay1tb2RlXCIpO1xuICAgIH1cblxuICAgIGxldCBtb21lbnRGb3JtYXQgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5tb2RhbE1vbWVudEZvcm1hdDtcbiAgICBsZXQgaW5zZXJ0QXNMaW5rID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MubW9kYWxUb2dnbGVMaW5rO1xuICAgIGxldCBkYXRlSW5wdXQgPSBcIlwiO1xuXG4gICAgLy8gU3RyaXBzIHRoZSB0cmFpbGluZyBcInxcIiB0aGF0IG1hcmtzIFwia2VlcCBhcyBhbGlhc1wiIChzZWUgc2hvdWxkSW5jbHVkZUFsaWFzXG4gICAgLy8gYmVsb3cpIC0tIHNoYXJlZCBzbyB0aGUgaW5wdXQncyBvbkNoYW5nZSBoYW5kbGVyIGFuZCBnZXREYXRlU3RyKCkgYWdyZWVcbiAgICAvLyBvbiBleGFjdGx5IHdoYXQgdGV4dCBnZXRzIHBhcnNlZC9jYWNoZWQuXG4gICAgY29uc3Qgc3RyaXBBbGlhc1N1ZmZpeCA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICAgIHRleHQuZW5kc1dpdGgoXCJ8XCIpID8gdGV4dC5zbGljZSgwLCAtMSkgOiB0ZXh0O1xuXG4gICAgbGV0IGNhY2hlZE1hbnVhbFBhcnNlOiB7IGlucHV0OiBzdHJpbmc7IG1vbWVudDogTW9tZW50IH0gfCBudWxsID0gbnVsbDtcblxuICAgIC8vIFBhcnNlcyBtYW51YWxseS10eXBlZCB0ZXh0IHZpYSB0aGUgTkxQIHBhcnNlciwgY2FjaGluZyB0aGUgcmVzdWx0LlxuICAgIC8vIENhbGxlZCBmcm9tIGJvdGggdGhlIGlucHV0J3Mgb25DaGFuZ2UgaGFuZGxlciAodG8gdmFsaWRhdGUvdXBkYXRlIHRoZVxuICAgIC8vIGNhbGVuZGFyIHNlbGVjdGlvbikgYW5kIGdldERhdGVTdHIoKSAodG8gYnVpbGQgdGhlIHByZXZpZXcvb3V0cHV0KSAtLVxuICAgIC8vIHdpdGhvdXQgdGhlIGNhY2hlLCB0eXBpbmcgYSBzaW5nbGUgY2hhcmFjdGVyIGludm9rZWRcbiAgICAvLyBwbHVnaW4ucGFyc2VEYXRlKCkgMi0zIHRpbWVzIChvbkNoYW5nZSdzIG93biB2YWxpZGF0aW9uIGNhbGwsIHRoZW5cbiAgICAvLyB1cGRhdGVTZWxlY3RlZERhdGUgLT4gdXBkYXRlUHJldmlldyAtPiBnZXREYXRlU3RyLCBwbHVzIG9uQ2hhbmdlJ3NcbiAgICAvLyB0cmFpbGluZyB1cGRhdGVQcmV2aWV3KCkgY2FsbCksIHdoaWNoIG1hdHRlcnMgc2luY2UgTkxQIHBhcnNpbmcgaXNuJ3RcbiAgICAvLyBmcmVlLlxuICAgIGNvbnN0IHBhcnNlTWFudWFsSW5wdXQgPSAoY2xlYW5UZXh0OiBzdHJpbmcpOiBNb21lbnQgPT4ge1xuICAgICAgaWYgKGNhY2hlZE1hbnVhbFBhcnNlICYmIGNhY2hlZE1hbnVhbFBhcnNlLmlucHV0ID09PSBjbGVhblRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZE1hbnVhbFBhcnNlLm1vbWVudDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcnNlZE1vbWVudCA9IHRoaXMucGx1Z2luLnBhcnNlRGF0ZShjbGVhblRleHQpLm1vbWVudDtcbiAgICAgIGNhY2hlZE1hbnVhbFBhcnNlID0geyBpbnB1dDogY2xlYW5UZXh0LCBtb21lbnQ6IHBhcnNlZE1vbWVudCB9O1xuICAgICAgcmV0dXJuIHBhcnNlZE1vbWVudDtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0RGF0ZVN0ciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHNob3VsZEluY2x1ZGVBbGlhcyA9IGRhdGVJbnB1dC5lbmRzV2l0aChcInxcIik7XG4gICAgICBjb25zdCBjbGVhbkRhdGVJbnB1dCA9IHN0cmlwQWxpYXNTdWZmaXgoZGF0ZUlucHV0KTtcblxuICAgICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgYXZhbnQgdXRpbGlzYXRpb25cbiAgICAgIGNvbnN0IGZvcm1hdFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdChtb21lbnRGb3JtYXQpO1xuICAgICAgY29uc3QgZm9ybWF0VG9Vc2UgPSBmb3JtYXRWYWxpZGF0aW9uLnZhbGlkID8gbW9tZW50Rm9ybWF0IDogREVGQVVMVF9TRVRUSU5HUy5tb2RhbE1vbWVudEZvcm1hdDtcblxuICAgICAgLy8gT25seSByb3VuZC10cmlwIHRocm91Z2ggdGhlIE5MUCBwYXJzZXIgd2hlbiB0aGUgdXNlciBhY3R1YWxseSB0eXBlZFxuICAgICAgLy8gc29tZXRoaW5nIGluIHRoZSBtYW51YWwgZmllbGQgKGUuZy4gXCJuZXh0IGZyaWRheVwiKSAtLSB0aGlzLnNlbGVjdGVkRGF0ZVxuICAgICAgLy8gKGNhbGVuZGFyIGNsaWNrcywgcXVpY2stc2VsZWN0IGJ1dHRvbnMpIGlzIGFscmVhZHkgYSByZXNvbHZlZCBtb21lbnRcbiAgICAgIC8vIHdpdGggbm90aGluZyBsZWZ0IHRvIHBhcnNlLlxuICAgICAgY29uc3QgcGFyc2VkTW9tZW50ID0gY2xlYW5EYXRlSW5wdXRcbiAgICAgICAgPyBwYXJzZU1hbnVhbElucHV0KGNsZWFuRGF0ZUlucHV0KVxuICAgICAgICA6IHRoaXMuc2VsZWN0ZWREYXRlO1xuXG4gICAgICAvLyBUaGlzIGlzIGEgZGF0ZSBwaWNrZXIsIG5vdCBhIHRpbWUgcGlja2VyIC0tIHRoZXJlJ3Mgbm8gdGltZS1vZi1kYXlcbiAgICAgIC8vIGNvbnRyb2wgYW55d2hlcmUgaW4gdGhpcyBtb2RhbCdzIFVJLCBzbyBhbnkgdGltZSB0aGUgTkxQIHBhcnNlclxuICAgICAgLy8gbWlnaHQgaGF2ZSBpbmZlcnJlZCBmcm9tIHR5cGVkIHRleHQgKGUuZy4gXCJ0b2RheSBhdCAzcG1cIikgaXNcbiAgICAgIC8vIGRlbGliZXJhdGVseSBkaXNjYXJkZWQgaGVyZSwgbm90IGp1c3QgbGVmdCBhdCB3aGF0ZXZlciBkZWZhdWx0XG4gICAgICAvLyBjaHJvbm8tbm9kZSBoYXBwZW5lZCB0byBwcm9kdWNlLiBDbG9uZWQgZmlyc3Q6IHBhcnNlZE1vbWVudCBtYXkgYmVcbiAgICAgIC8vIHRoZSBjYWNoZWQgcmVzdWx0IGZyb20gcGFyc2VNYW51YWxJbnB1dCgpLCBhbmQgbW9tZW50J3MgbXV0YXRpbmdcbiAgICAgIC8vIC5zdGFydE9mKCkgd291bGQgb3RoZXJ3aXNlIGNvcnJ1cHQgdGhhdCBjYWNoZSBlbnRyeS5cbiAgICAgIGNvbnN0IG1vbWVudFRvRm9ybWF0ID0gcGFyc2VkTW9tZW50LmlzVmFsaWQoKSA/IHBhcnNlZE1vbWVudC5jbG9uZSgpLnN0YXJ0T2YoXCJkYXlcIikgOiBwYXJzZWRNb21lbnQ7XG5cbiAgICAgIGxldCBwYXJzZWREYXRlU3RyaW5nID0gbW9tZW50VG9Gb3JtYXQuaXNWYWxpZCgpXG4gICAgICAgID8gbW9tZW50VG9Gb3JtYXQuZm9ybWF0KGZvcm1hdFRvVXNlKVxuICAgICAgICA6IFwiXCI7XG5cbiAgICAgIGlmIChpbnNlcnRBc0xpbmspIHtcbiAgICAgICAgcGFyc2VkRGF0ZVN0cmluZyA9IGdlbmVyYXRlTWFya2Rvd25MaW5rKFxuICAgICAgICAgIHRoaXMuYXBwLFxuICAgICAgICAgIHBhcnNlZERhdGVTdHJpbmcsXG4gICAgICAgICAgc2hvdWxkSW5jbHVkZUFsaWFzID8gY2xlYW5EYXRlSW5wdXQgOiB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlZERhdGVTdHJpbmc7XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZVByZXZpZXcgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5wcmV2aWV3RWwpIHtcbiAgICAgICAgdGhpcy5wcmV2aWV3RWwuc2V0VGV4dChnZXREYXRlU3RyKCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBzeW5jSW5wdXQgY29udHJvbHMgd2hldGhlciB0aGUgcmF3IHRleHQgZmllbGQgZ2V0cyBvdmVyd3JpdHRlbiB3aXRoXG4gICAgLy8gdGhlIGZvcm1hdHRlZCBkYXRlLiBDYWxlbmRhciBjbGlja3MvcXVpY2sgYnV0dG9ucy9rZXlib2FyZCBuYXYgd2FudFxuICAgIC8vIHRoYXQgKGl0J3MgaG93IHRoZSBmaWVsZCByZWZsZWN0cyB0aGUgc2VsZWN0aW9uKSwgYnV0IHRoZSBmaWVsZCdzIG93blxuICAgIC8vIG9uQ2hhbmdlIGhhbmRsZXIgbXVzdCBOT1Qgc3luYyBpdHNlbGYgd2hpbGUgdGhlIHVzZXIgaXMgc3RpbGwgdHlwaW5nXG4gICAgLy8gaW50byBpdCAtLSBnZXREYXRlU3RyKCkvdXBkYXRlUHJldmlldygpIGFscmVhZHkgc2hvdyBhIGxpdmUgcHJldmlld1xuICAgIC8vIG9mIHRoZSBwYXJzZWQgcmVzdWx0IHNlcGFyYXRlbHksIHdpdGhvdXQgdG91Y2hpbmcgd2hhdCdzIGJlaW5nIHR5cGVkLlxuICAgIGNvbnN0IHVwZGF0ZVNlbGVjdGVkRGF0ZSA9IChkYXRlOiBNb21lbnQsIHN5bmNJbnB1dCA9IHRydWUpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZS5jbG9uZSgpO1xuICAgICAgaWYgKHN5bmNJbnB1dCAmJiB0aGlzLmRhdGVJbnB1dEVsKSB7XG4gICAgICAgIHRoaXMuZGF0ZUlucHV0RWwudmFsdWUgPSBkYXRlLmZvcm1hdChcIllZWVktTU0tRERcIik7XG4gICAgICB9XG4gICAgICB1cGRhdGVQcmV2aWV3KCk7XG4gICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgfTtcblxuICAgIC8vIFN0b2NrZXIgbGEgZm9uY3Rpb24gcG91ciBxdSdlbGxlIHNvaXQgYWNjZXNzaWJsZSBkZXB1aXMgcmVuZGVyQ2FsZW5kYXJcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZUZuID0gdXBkYXRlU2VsZWN0ZWREYXRlO1xuXG4gICAgLy8gQ29udGFpbmVyIHByaW5jaXBhbFxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRlbnRFbC5jcmVhdGVEaXYoXCJubGQtZGF0ZS1waWNrZXItY29udGFpbmVyXCIpO1xuXG4gICAgLy8gU2VjdGlvbiBkZXMgYm91dG9ucyByYXBpZGVzXG4gICAgdGhpcy5xdWlja0J1dHRvbnNFbCA9IGNvbnRhaW5lci5jcmVhdGVEaXYoXCJubGQtcXVpY2stYnV0dG9uc1wiKTtcbiAgICB0aGlzLnJlbmRlclF1aWNrQnV0dG9ucyh1cGRhdGVTZWxlY3RlZERhdGUpO1xuXG4gICAgLy8gU2VjdGlvbiBkdSBjYWxlbmRyaWVyXG4gICAgY29uc3QgY2FsZW5kYXJTZWN0aW9uID0gY29udGFpbmVyLmNyZWF0ZURpdihcIm5sZC1jYWxlbmRhci1zZWN0aW9uXCIpO1xuICAgIFxuICAgIC8vIE5hdmlnYXRpb24gZHUgY2FsZW5kcmllclxuICAgIGNvbnN0IG5hdkVsID0gY2FsZW5kYXJTZWN0aW9uLmNyZWF0ZURpdihcIm5sZC1jYWxlbmRhci1uYXZcIik7XG4gICAgY29uc3QgcHJldk1vbnRoQnRuID0gbmF2RWwuY3JlYXRlRWwoXCJidXR0b25cIiwge1xuICAgICAgY2xzOiBcIm5sZC1uYXYtYnRuXCIsXG4gICAgICB0ZXh0OiBcIuKAuVwiLFxuICAgICAgYXR0cjogeyBcImFyaWEtbGFiZWxcIjogXCJNb2lzIHByw6ljw6lkZW50XCIgfVxuICAgIH0pO1xuICAgIFxuICAgIGNvbnN0IG1vbnRoWWVhckVsID0gbmF2RWwuY3JlYXRlRGl2KFwibmxkLW1vbnRoLXllYXJcIik7XG4gICAgXG4gICAgY29uc3QgbmV4dE1vbnRoQnRuID0gbmF2RWwuY3JlYXRlRWwoXCJidXR0b25cIiwge1xuICAgICAgY2xzOiBcIm5sZC1uYXYtYnRuXCIsXG4gICAgICB0ZXh0OiBcIuKAulwiLFxuICAgICAgYXR0cjogeyBcImFyaWEtbGFiZWxcIjogXCJNb2lzIHN1aXZhbnRcIiB9XG4gICAgfSk7XG5cbiAgICBwcmV2TW9udGhCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoLnN1YnRyYWN0KDEsIFwibW9udGhcIik7XG4gICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgICB0aGlzLnVwZGF0ZU1vbnRoWWVhckRpc3BsYXkobW9udGhZZWFyRWwpO1xuICAgIH0pO1xuXG4gICAgbmV4dE1vbnRoQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aC5hZGQoMSwgXCJtb250aFwiKTtcbiAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICAgIHRoaXMudXBkYXRlTW9udGhZZWFyRGlzcGxheShtb250aFllYXJFbCk7XG4gICAgfSk7XG5cbiAgICAvLyBTw6lsZWN0ZXVyIGQnYW5uw6llIChkcm9wZG93bilcbiAgICBjb25zdCB5ZWFyU2VsZWN0ID0gbmF2RWwuY3JlYXRlRWwoXCJzZWxlY3RcIiwgeyBjbHM6IFwibmxkLXllYXItc2VsZWN0XCIgfSk7XG4gICAgY29uc3QgY3VycmVudFllYXIgPSB0aGlzLmN1cnJlbnRNb250aC55ZWFyKCk7XG4gICAgZm9yIChsZXQgeWVhciA9IGN1cnJlbnRZZWFyIC0gMTA7IHllYXIgPD0gY3VycmVudFllYXIgKyAxMDsgeWVhcisrKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB5ZWFyU2VsZWN0LmNyZWF0ZUVsKFwib3B0aW9uXCIsIHsgdGV4dDogU3RyaW5nKHllYXIpLCB2YWx1ZTogU3RyaW5nKHllYXIpIH0pO1xuICAgICAgaWYgKHllYXIgPT09IGN1cnJlbnRZZWFyKSB7XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHllYXJTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoZSkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aC55ZWFyKHBhcnNlSW50KHRhcmdldC52YWx1ZSkpO1xuICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgdGhpcy51cGRhdGVNb250aFllYXJEaXNwbGF5KG1vbnRoWWVhckVsKTtcbiAgICB9KTtcblxuICAgIC8vIFPDqWxlY3RldXIgZGUgbW9pcyAoZHJvcGRvd24pXG4gICAgY29uc3QgbW9udGhTZWxlY3QgPSBuYXZFbC5jcmVhdGVFbChcInNlbGVjdFwiLCB7IGNsczogXCJubGQtbW9udGgtc2VsZWN0XCIgfSk7XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IG1vbWVudC5tb250aHMoKTtcbiAgICBtb250aE5hbWVzLmZvckVhY2goKG1vbnRoLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uID0gbW9udGhTZWxlY3QuY3JlYXRlRWwoXCJvcHRpb25cIiwgeyB0ZXh0OiBtb250aCwgdmFsdWU6IFN0cmluZyhpbmRleCkgfSk7XG4gICAgICBpZiAoaW5kZXggPT09IHRoaXMuY3VycmVudE1vbnRoLm1vbnRoKCkpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBtb250aFNlbGVjdC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIChlKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudDtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoLm1vbnRoKHBhcnNlSW50KHRhcmdldC52YWx1ZSkpO1xuICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgdGhpcy51cGRhdGVNb250aFllYXJEaXNwbGF5KG1vbnRoWWVhckVsKTtcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlTW9udGhZZWFyRGlzcGxheShtb250aFllYXJFbCk7XG5cbiAgICAvLyBDYWxlbmRyaWVyXG4gICAgdGhpcy5jYWxlbmRhckVsID0gY2FsZW5kYXJTZWN0aW9uLmNyZWF0ZURpdihcIm5sZC1jYWxlbmRhclwiKTtcbiAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG5cbiAgICAvLyBTZWN0aW9uIGRlIHNhaXNpZSBtYW51ZWxsZVxuICAgIGNvbnN0IGlucHV0U2VjdGlvbiA9IGNvbnRhaW5lci5jcmVhdGVEaXYoXCJubGQtaW5wdXQtc2VjdGlvblwiKTtcbiAgICBjb25zdCBkYXRlSW5wdXRFbCA9IG5ldyBTZXR0aW5nKGlucHV0U2VjdGlvbilcbiAgICAgIC5zZXROYW1lKFwiRGF0ZVwiKVxuICAgICAgLnNldERlc2MoXCJcIilcbiAgICAgIC5hZGRUZXh0KCh0ZXh0RWwpID0+IHtcbiAgICAgICAgdGV4dEVsLnNldFBsYWNlaG9sZGVyKFwiVG9kYXlcIik7XG4gICAgICAgIHRleHRFbC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkRGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpKTtcbiAgICAgICAgdGhpcy5kYXRlSW5wdXRFbCA9IHRleHRFbC5pbnB1dEVsO1xuXG4gICAgICAgIHRleHRFbC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBkYXRlSW5wdXQgPSB2YWx1ZTtcbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZE1vbWVudCA9IHBhcnNlTWFudWFsSW5wdXQoc3RyaXBBbGlhc1N1ZmZpeCh2YWx1ZSkpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZE1vbWVudC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgLy8gdXBkYXRlU2VsZWN0ZWREYXRlKCkgYWxyZWFkeSBjYWxscyB1cGRhdGVQcmV2aWV3KCkgaXRzZWxmO1xuICAgICAgICAgICAgICAvLyBhbiB1bmNvbmRpdGlvbmFsIGNhbGwgYmVsb3cgb24gdG9wIG9mIHRoaXMgd291bGQganVzdFxuICAgICAgICAgICAgICAvLyByZS1ydW4gZ2V0RGF0ZVN0cigpIChhbmQsIGJlZm9yZSBwYXJzZU1hbnVhbElucHV0KCknc1xuICAgICAgICAgICAgICAvLyBjYWNoaW5nLCByZS1pbnZva2UgdGhlIE5MUCBwYXJzZXIpIGZvciBubyByZWFzb24uXG4gICAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkRGF0ZShwYXJzZWRNb21lbnQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB1cGRhdGVQcmV2aWV3KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRleHRFbC5pbnB1dEVsLmZvY3VzKCksIDEwKTtcbiAgICAgIH0pO1xuICAgIHRoaXMucHJldmlld0VsID0gZGF0ZUlucHV0RWwuZGVzY0VsO1xuICAgIHVwZGF0ZVByZXZpZXcoKTtcblxuICAgIC8vIE9wdGlvbnMgZGUgZm9ybWF0XG4gICAgY29uc3QgZm9ybWF0U2V0dGluZyA9IG5ldyBTZXR0aW5nKGlucHV0U2VjdGlvbilcbiAgICAgIC5zZXROYW1lKFwiRGF0ZSBmb3JtYXRcIilcbiAgICAgIC5zZXREZXNjKFwiTW9tZW50IGZvcm1hdCB0byBiZSB1c2VkXCIpXG4gICAgICAuYWRkTW9tZW50Rm9ybWF0KChtb21lbnRFbCkgPT4ge1xuICAgICAgICBtb21lbnRFbC5zZXRQbGFjZWhvbGRlcihcIllZWVktTU0tRERcIik7XG4gICAgICAgIG1vbWVudEVsLnNldFZhbHVlKG1vbWVudEZvcm1hdCk7XG4gICAgICAgIG1vbWVudEVsLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlTW9tZW50Rm9ybWF0KHZhbHVlLnRyaW0oKSB8fCBcIllZWVktTU0tRERcIik7XG4gICAgICAgICAgaWYgKHZhbGlkYXRlZC52YWxpZCkge1xuICAgICAgICAgICAgbW9tZW50Rm9ybWF0ID0gdmFsdWUudHJpbSgpIHx8IFwiWVlZWS1NTS1ERFwiO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubW9kYWxNb21lbnRGb3JtYXQgPSBtb21lbnRGb3JtYXQ7XG4gICAgICAgICAgICB2b2lkIHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgdXBkYXRlUHJldmlldygpO1xuICAgICAgICAgICAgLy8gTWV0dHJlIMOgIGpvdXIgbGEgZGVzY3JpcHRpb24gYXZlYyBsYSBwcsOpdmlzdWFsaXNhdGlvblxuICAgICAgICAgICAgZm9ybWF0U2V0dGluZy5zZXREZXNjKGBNb21lbnQgZm9ybWF0IHRvIGJlIHVzZWQke3ZhbGlkYXRlZC5wcmV2aWV3ID8gYCAoUHJldmlldzogJHt2YWxpZGF0ZWQucHJldmlld30pYCA6IFwiXCJ9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFmZmljaGVyIGwnZXJyZXVyIGRhbnMgbGEgZGVzY3JpcHRpb25cbiAgICAgICAgICAgIGZvcm1hdFNldHRpbmcuc2V0RGVzYyhgTW9tZW50IGZvcm1hdCB0byBiZSB1c2VkIC0g4pqg77iPICR7dmFsaWRhdGVkLmVycm9yIHx8IFwiRm9ybWF0IGludmFsaWRlXCJ9YCk7XG4gICAgICAgICAgICAvLyBOZSBwYXMgc2F1dmVnYXJkZXIgbGUgZm9ybWF0IGludmFsaWRlLCByZXN0YXVyZXIgbGUgcHLDqWPDqWRlbnRcbiAgICAgICAgICAgIG1vbWVudEVsLnNldFZhbHVlKG1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIFxuICAgIC8vIEFmZmljaGVyIGxhIHByw6l2aXN1YWxpc2F0aW9uIGluaXRpYWxlXG4gICAgY29uc3QgaW5pdGlhbFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdChtb21lbnRGb3JtYXQpO1xuICAgIGlmIChpbml0aWFsVmFsaWRhdGlvbi52YWxpZCAmJiBpbml0aWFsVmFsaWRhdGlvbi5wcmV2aWV3KSB7XG4gICAgICBmb3JtYXRTZXR0aW5nLnNldERlc2MoYE1vbWVudCBmb3JtYXQgdG8gYmUgdXNlZCAoUHJldmlldzogJHtpbml0aWFsVmFsaWRhdGlvbi5wcmV2aWV3fSlgKTtcbiAgICB9XG5cbiAgICBuZXcgU2V0dGluZyhpbnB1dFNlY3Rpb24pXG4gICAgICAuc2V0TmFtZShcIkFkZCBhcyBsaW5rP1wiKVxuICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlRWwpID0+IHtcbiAgICAgICAgdG9nZ2xlRWwuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubW9kYWxUb2dnbGVMaW5rKS5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBpbnNlcnRBc0xpbmsgPSB2YWx1ZTtcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5tb2RhbFRvZ2dsZUxpbmsgPSBpbnNlcnRBc0xpbms7XG4gICAgICAgICAgdm9pZCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB1cGRhdGVQcmV2aWV3KCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAvLyBCb3V0b25zIGQnYWN0aW9uXG4gICAgaW5wdXRTZWN0aW9uLmNyZWF0ZURpdihcIm1vZGFsLWJ1dHRvbi1jb250YWluZXJcIiwgKGJ1dHRvbkNvbnRhaW5lckVsKSA9PiB7XG4gICAgICBidXR0b25Db250YWluZXJFbFxuICAgICAgICAuY3JlYXRlRWwoXCJidXR0b25cIiwgeyBhdHRyOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSwgdGV4dDogXCJOZXZlciBtaW5kXCIgfSlcbiAgICAgICAgLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB0aGlzLmNsb3NlKCkpO1xuICAgICAgYnV0dG9uQ29udGFpbmVyRWwuY3JlYXRlRWwoXCJidXR0b25cIiwge1xuICAgICAgICBhdHRyOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgY2xzOiBcIm1vZC1jdGFcIixcbiAgICAgICAgdGV4dDogXCJJbnNlcnQgZGF0ZVwiLFxuICAgICAgfSkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgdGhpcy5pbnNlcnREYXRlKGdldERhdGVTdHIoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJhY2NvdXJjaXMgY2xhdmllclxuICAgIHRoaXMua2V5Ym9hcmRIYW5kbGVyID0gdGhpcy5jcmVhdGVLZXlib2FyZEhhbmRsZXIocHJldk1vbnRoQnRuLCBuZXh0TW9udGhCdG4sIHVwZGF0ZVNlbGVjdGVkRGF0ZSk7XG4gICAgdGhpcy5jb250ZW50RWwuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5rZXlib2FyZEhhbmRsZXIpO1xuXG4gICAgLy8gT2JzZXJ2ZXIgbGVzIGNoYW5nZW1lbnRzIGRlIHRow6htZVxuICAgIHRoaXMuc2V0dXBUaGVtZU9ic2VydmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclF1aWNrQnV0dG9ucyh1cGRhdGVTZWxlY3RlZERhdGU6IChkYXRlOiBNb21lbnQpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucXVpY2tCdXR0b25zRWwpIHJldHVybjtcblxuICAgIHRoaXMucXVpY2tCdXR0b25zRWwuZW1wdHkoKTtcbiAgICB0aGlzLnF1aWNrQnV0dG9uc0VsLmNyZWF0ZURpdih7IGNsczogXCJubGQtcXVpY2stYnV0dG9ucy1sYWJlbFwiLCB0ZXh0OiBcIlF1aWNrIHNlbGVjdDpcIiB9KTtcblxuICAgIGNvbnN0IHByaW1hcnlMYW5nID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzWzBdIHx8IFwiZW5cIjtcbiAgICBcbiAgICAvLyBGb25jdGlvbiBoZWxwZXIgcG91ciBvYnRlbmlyIGxhIHByZW1pw6hyZSB2YXJpYW50ZSBkJ3VuZSB0cmFkdWN0aW9uXG4gICAgY29uc3QgZ2V0Rmlyc3RWYXJpYW50ID0gKGtleTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdChrZXksIHByaW1hcnlMYW5nKTtcbiAgICAgIGlmICh0cmFuc2xhdGlvbiA9PT0gXCJOT1RGT1VORFwiKSB7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgICB9XG4gICAgICAvLyBQcmVuZHJlIGxhIHByZW1pw6hyZSB2YXJpYW50ZSBzaSBwbHVzaWV1cnMgKHPDqXBhcsOpZXMgcGFyIHwpXG4gICAgICByZXR1cm4gdHJhbnNsYXRpb24uc3BsaXQoXCJ8XCIpWzBdLnRyaW0oKTtcbiAgICB9O1xuXG4gICAgLy8gLnN0YXJ0T2YoXCJkYXlcIikgb24gZXZlcnkgb3B0aW9uOiB3aXRob3V0IGl0IHRoZXNlIGNhcnJpZWQgdGhlIHJlYWxcbiAgICAvLyBjdXJyZW50IHdhbGwtY2xvY2sgdGltZSAoZS5nLiBjbGlja2luZyBcIlRvbW9ycm93XCIgYXQgMTQ6MzIgc2VsZWN0ZWRcbiAgICAvLyB0b21vcnJvdyBhdCAxNDozMiwgbm90IGEgY2xlYW4gZGF0ZSksIGluY29uc2lzdGVudCB3aXRoIGNhbGVuZGFyLWdyaWRcbiAgICAvLyBjbGlja3MgKGFscmVhZHkgbWlkbmlnaHQtYmFzZWQpIGFuZCBsaWFibGUgdG8gdGhlIHNhbWUgXCJ1bmV4cGVjdGVkXG4gICAgLy8gdGltZSBiYWtlZCBpbnRvIHRoZSBvdXRwdXRcIiBjb25mdXNpb24gYXMgdGhlIGdldERhdGVTdHIoKSBidWcgYWJvdmUuXG4gICAgY29uc3QgcXVpY2tPcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogZ2V0Rmlyc3RWYXJpYW50KFwidG9kYXlcIiksXG4gICAgICAgIG1vbWVudDogbW9tZW50KCkuc3RhcnRPZihcImRheVwiKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IGdldEZpcnN0VmFyaWFudChcInRvbW9ycm93XCIpLFxuICAgICAgICBtb21lbnQ6IG1vbWVudCgpLmFkZCgxLCBcImRheVwiKS5zdGFydE9mKFwiZGF5XCIpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogZ2V0Rmlyc3RWYXJpYW50KFwieWVzdGVyZGF5XCIpLFxuICAgICAgICBtb21lbnQ6IG1vbWVudCgpLnN1YnRyYWN0KDEsIFwiZGF5XCIpLnN0YXJ0T2YoXCJkYXlcIilcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiBgJHtnZXRGaXJzdFZhcmlhbnQoXCJuZXh0XCIpfSAke2dldEZpcnN0VmFyaWFudChcIndlZWtcIil9YCxcbiAgICAgICAgbW9tZW50OiBtb21lbnQoKS5hZGQoMSwgXCJ3ZWVrXCIpLnN0YXJ0T2YoXCJkYXlcIilcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiBgJHtnZXRGaXJzdFZhcmlhbnQoXCJuZXh0XCIpfSAke2dldEZpcnN0VmFyaWFudChcIm1vbnRoXCIpfWAsXG4gICAgICAgIG1vbWVudDogbW9tZW50KCkuYWRkKDEsIFwibW9udGhcIikuc3RhcnRPZihcImRheVwiKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IGAke2dldEZpcnN0VmFyaWFudChcIm5leHRcIil9ICR7Z2V0Rmlyc3RWYXJpYW50KFwieWVhclwiKX1gLFxuICAgICAgICBtb21lbnQ6IG1vbWVudCgpLmFkZCgxLCBcInllYXJcIikuc3RhcnRPZihcImRheVwiKVxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgYnV0dG9uc0NvbnRhaW5lciA9IHRoaXMucXVpY2tCdXR0b25zRWwuY3JlYXRlRGl2KFwibmxkLXF1aWNrLWJ1dHRvbnMtZ3JpZFwiKTtcblxuICAgIHF1aWNrT3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGJ1dHRvbiA9IGJ1dHRvbnNDb250YWluZXIuY3JlYXRlRWwoXCJidXR0b25cIiwge1xuICAgICAgICBjbHM6IFwibmxkLXF1aWNrLWJ0blwiLFxuICAgICAgICB0ZXh0OiBvcHRpb24ubGFiZWwsXG4gICAgICB9KTtcblxuICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVNlbGVjdGVkRGF0ZShvcHRpb24ubW9tZW50KTtcbiAgICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBvcHRpb24ubW9tZW50LmNsb25lKCk7XG4gICAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJDYWxlbmRhcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FsZW5kYXJFbCkgcmV0dXJuO1xuXG4gICAgdGhpcy5jYWxlbmRhckVsLmVtcHR5KCk7XG5cbiAgICAvLyBFbi10w6p0ZXMgZGVzIGpvdXJzIGRlIGxhIHNlbWFpbmVcbiAgICBjb25zdCB3ZWVrU3RhcnQgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy53ZWVrU3RhcnQgPT09IFwibG9jYWxlLWRlZmF1bHRcIlxuICAgICAgPyBnZXRMb2NhbGVXZWVrU3RhcnQoKVxuICAgICAgOiB0aGlzLnBsdWdpbi5zZXR0aW5ncy53ZWVrU3RhcnQ7XG4gICAgXG4gICAgY29uc3Qgd2Vla1N0YXJ0SW5kZXggPSB3ZWVrU3RhcnQgPT09IFwic3VuZGF5XCIgPyAwIDogMTtcbiAgICBjb25zdCB3ZWVrZGF5cyA9IG1vbWVudC53ZWVrZGF5c1Nob3J0KCk7XG4gICAgY29uc3Qgb3JkZXJlZFdlZWtkYXlzID0gW1xuICAgICAgLi4ud2Vla2RheXMuc2xpY2Uod2Vla1N0YXJ0SW5kZXgpLFxuICAgICAgLi4ud2Vla2RheXMuc2xpY2UoMCwgd2Vla1N0YXJ0SW5kZXgpLFxuICAgIF07XG5cbiAgICBjb25zdCBoZWFkZXJSb3cgPSB0aGlzLmNhbGVuZGFyRWwuY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLWhlYWRlclwiKTtcbiAgICBvcmRlcmVkV2Vla2RheXMuZm9yRWFjaCgoZGF5KSA9PiB7XG4gICAgICBjb25zdCBkYXlIZWFkZXIgPSBoZWFkZXJSb3cuY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLWRheS1oZWFkZXJcIik7XG4gICAgICBkYXlIZWFkZXIuc2V0VGV4dChkYXkpO1xuICAgIH0pO1xuXG4gICAgLy8gR3JpbGxlIGR1IGNhbGVuZHJpZXJcbiAgICBjb25zdCBncmlkID0gdGhpcy5jYWxlbmRhckVsLmNyZWF0ZURpdihcIm5sZC1jYWxlbmRhci1ncmlkXCIpO1xuXG4gICAgY29uc3Qgc3RhcnRPZk1vbnRoID0gdGhpcy5jdXJyZW50TW9udGguY2xvbmUoKS5zdGFydE9mKFwibW9udGhcIik7XG4gICAgY29uc3QgZW5kT2ZNb250aCA9IHRoaXMuY3VycmVudE1vbnRoLmNsb25lKCkuZW5kT2YoXCJtb250aFwiKTtcbiAgICBcbiAgICAvLyBDYWxjdWxlciBsZSBkw6lidXQgZGUgbGEgc2VtYWluZSBzZWxvbiBsZXMgcHLDqWbDqXJlbmNlc1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHN0YXJ0T2ZNb250aC5jbG9uZSgpO1xuICAgIGNvbnN0IGRheU9mV2VlayA9IHN0YXJ0RGF0ZS5kYXkoKTtcbiAgICBjb25zdCBkaWZmID0gZGF5T2ZXZWVrIC0gd2Vla1N0YXJ0SW5kZXg7XG4gICAgaWYgKGRpZmYgPCAwKSB7XG4gICAgICBzdGFydERhdGUuc3VidHJhY3QoNyArIGRpZmYsIFwiZGF5c1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnREYXRlLnN1YnRyYWN0KGRpZmYsIFwiZGF5c1wiKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2FsY3VsZXIgbGEgZmluIGRlIGxhIHNlbWFpbmVcbiAgICBjb25zdCBlbmREYXRlID0gZW5kT2ZNb250aC5jbG9uZSgpO1xuICAgIGNvbnN0IGVuZERheU9mV2VlayA9IGVuZERhdGUuZGF5KCk7XG4gICAgY29uc3QgZW5kRGlmZiA9ICg2ICsgd2Vla1N0YXJ0SW5kZXggLSBlbmREYXlPZldlZWspICUgNztcbiAgICBpZiAoZW5kRGlmZiA+IDApIHtcbiAgICAgIGVuZERhdGUuYWRkKGVuZERpZmYsIFwiZGF5c1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b2RheSA9IG1vbWVudCgpO1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gc3RhcnREYXRlLmNsb25lKCk7XG5cbiAgICB3aGlsZSAoY3VycmVudERhdGUuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSwgXCJkYXlcIikpIHtcbiAgICAgIC8vIENhcHR1cmVyIGxhIGRhdGUgYWN0dWVsbGUgZGFucyB1bmUgdmFyaWFibGUgbG9jYWxlIHBvdXIgw6l2aXRlciBsZXMgcHJvYmzDqG1lcyBkZSBjbG9zdXJlXG4gICAgICBjb25zdCBkYXRlRm9yVGhpc0RheSA9IGN1cnJlbnREYXRlLmNsb25lKCk7XG4gICAgICBjb25zdCBkYXlFbCA9IGdyaWQuY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLWRheVwiKTtcbiAgICAgIGNvbnN0IGRheU51bWJlciA9IGRhdGVGb3JUaGlzRGF5LmRhdGUoKTtcblxuICAgICAgLy8gU3R5bGUgc2Vsb24gbGUgdHlwZSBkZSBqb3VyXG4gICAgICBpZiAoZGF0ZUZvclRoaXNEYXkuaXNTYW1lKHRvZGF5LCBcImRheVwiKSkge1xuICAgICAgICBkYXlFbC5hZGRDbGFzcyhcIm5sZC10b2RheVwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRlRm9yVGhpc0RheS5pc1NhbWUodGhpcy5zZWxlY3RlZERhdGUsIFwiZGF5XCIpKSB7XG4gICAgICAgIGRheUVsLmFkZENsYXNzKFwibmxkLXNlbGVjdGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKCFkYXRlRm9yVGhpc0RheS5pc1NhbWUodGhpcy5jdXJyZW50TW9udGgsIFwibW9udGhcIikpIHtcbiAgICAgICAgZGF5RWwuYWRkQ2xhc3MoXCJubGQtb3RoZXItbW9udGhcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRheU51bWJlckVsID0gZGF5RWwuY3JlYXRlRGl2KFwibmxkLWRheS1udW1iZXJcIik7XG4gICAgICBkYXlOdW1iZXJFbC5zZXRUZXh0KFN0cmluZyhkYXlOdW1iZXIpKTtcblxuICAgICAgLy8gw4l2w6luZW1lbnQgZGUgY2xpY1xuICAgICAgZGF5RWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlRm4pIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZUZuKGRhdGVGb3JUaGlzRGF5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGN1cnJlbnREYXRlLmFkZCgxLCBcImRheVwiKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vbnRoWWVhckRpc3BsYXkobW9udGhZZWFyRWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgbW9udGhZZWFyRWwuZW1wdHkoKTtcbiAgICBjb25zdCBtb250aE5hbWUgPSB0aGlzLmN1cnJlbnRNb250aC5mb3JtYXQoXCJNTU1NXCIpO1xuICAgIGNvbnN0IHllYXIgPSB0aGlzLmN1cnJlbnRNb250aC5mb3JtYXQoXCJZWVlZXCIpO1xuICAgIGNvbnN0IG1vbnRoU3BhbiA9IG1vbnRoWWVhckVsLmNyZWF0ZVNwYW4oKTtcbiAgICBtb250aFNwYW4uc2V0VGV4dChtb250aE5hbWUpO1xuICAgIGNvbnN0IHNwYWNlU3BhbiA9IG1vbnRoWWVhckVsLmNyZWF0ZVNwYW4oKTtcbiAgICBzcGFjZVNwYW4uc2V0VGV4dChcIiBcIik7XG4gICAgY29uc3QgeWVhclNwYW4gPSBtb250aFllYXJFbC5jcmVhdGVTcGFuKCk7XG4gICAgeWVhclNwYW4uc2V0VGV4dCh5ZWFyKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlS2V5Ym9hcmRIYW5kbGVyKFxuICAgIHByZXZNb250aEJ0bjogSFRNTEVsZW1lbnQsXG4gICAgbmV4dE1vbnRoQnRuOiBIVE1MRWxlbWVudCxcbiAgICB1cGRhdGVTZWxlY3RlZERhdGU6IChkYXRlOiBNb21lbnQpID0+IHZvaWRcbiAgKTogKGU6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQge1xuICAgIHJldHVybiAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgLy8gw4l2aXRlciBsZXMgcmFjY291cmNpcyBzaSBvbiBlc3QgZGFucyB1biBpbnB1dFxuICAgICAgaWYgKGUudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fCBlLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChlLmtleSkge1xuICAgICAgICBjYXNlIFwiQXJyb3dMZWZ0XCI6XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHByZXZNb250aEJ0bi5jbGljaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQXJyb3dSaWdodFwiOlxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBuZXh0TW9udGhCdG4uY2xpY2soKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFycm93VXBcIjpcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9udGguc3VidHJhY3QoMSwgXCJtb250aFwiKTtcbiAgICAgICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJBcnJvd0Rvd25cIjpcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9udGguYWRkKDEsIFwibW9udGhcIik7XG4gICAgICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiSG9tZVwiOlxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB1cGRhdGVTZWxlY3RlZERhdGUobW9tZW50KCkuc3RhcnRPZihcImRheVwiKSk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBtb21lbnQoKTtcbiAgICAgICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJFc2NhcGVcIjpcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNldHVwVGhlbWVPYnNlcnZlcigpOiB2b2lkIHtcbiAgICAvLyBPYnNlcnZlciBsZXMgY2hhbmdlbWVudHMgZGUgY2xhc3NlIHBvdXIgZMOpdGVjdGVyIGxlIGNoYW5nZW1lbnQgZGUgdGjDqG1lXG4gICAgdGhpcy50aGVtZU9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgY29uc3Qgd2FzRGFya01vZGUgPSB0aGlzLmlzRGFya01vZGU7XG4gICAgICB0aGlzLmlzRGFya01vZGUgPSBhY3RpdmVEb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInRoZW1lLWRhcmtcIik7XG5cbiAgICAgIGlmICh3YXNEYXJrTW9kZSAhPT0gdGhpcy5pc0RhcmtNb2RlICYmIHRoaXMuY29udGVudEVsKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGFya01vZGUpIHtcbiAgICAgICAgICB0aGlzLmNvbnRlbnRFbC5hZGRDbGFzcyhcIm5sZC1kYXJrLW1vZGVcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb250ZW50RWwucmVtb3ZlQ2xhc3MoXCJubGQtZGFyay1tb2RlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnRoZW1lT2JzZXJ2ZXIub2JzZXJ2ZShhY3RpdmVEb2N1bWVudC5ib2R5LCB7XG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJjbGFzc1wiXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zZXJ0RGF0ZShkYXRlU3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVFZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3IodGhpcy5hcHAud29ya3NwYWNlKTtcbiAgICBpZiAoIWFjdGl2ZUVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgYWN0aXZlRWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oZGF0ZVN0cik7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xuICAgIGNvbnRlbnRFbC5lbXB0eSgpO1xuXG4gICAgLy8gTmV0dG95ZXIgbGVzIGV2ZW50IGxpc3RlbmVyc1xuICAgIGlmICh0aGlzLmtleWJvYXJkSGFuZGxlcikge1xuICAgICAgY29udGVudEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMua2V5Ym9hcmRIYW5kbGVyKTtcbiAgICAgIHRoaXMua2V5Ym9hcmRIYW5kbGVyID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBOZXR0b3llciBsJ29ic2VydmVyIGRlIHRow6htZVxuICAgIGlmICh0aGlzLnRoZW1lT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMudGhlbWVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLnRoZW1lT2JzZXJ2ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IHZhciBNZXJpZGllbTtcbihmdW5jdGlvbiAoTWVyaWRpZW0pIHtcbiAgICBNZXJpZGllbVtNZXJpZGllbVtcIkFNXCJdID0gMF0gPSBcIkFNXCI7XG4gICAgTWVyaWRpZW1bTWVyaWRpZW1bXCJQTVwiXSA9IDFdID0gXCJQTVwiO1xufSkoTWVyaWRpZW0gfHwgKE1lcmlkaWVtID0ge30pKTtcbmV4cG9ydCB2YXIgV2Vla2RheTtcbihmdW5jdGlvbiAoV2Vla2RheSkge1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIlNVTkRBWVwiXSA9IDBdID0gXCJTVU5EQVlcIjtcbiAgICBXZWVrZGF5W1dlZWtkYXlbXCJNT05EQVlcIl0gPSAxXSA9IFwiTU9OREFZXCI7XG4gICAgV2Vla2RheVtXZWVrZGF5W1wiVFVFU0RBWVwiXSA9IDJdID0gXCJUVUVTREFZXCI7XG4gICAgV2Vla2RheVtXZWVrZGF5W1wiV0VETkVTREFZXCJdID0gM10gPSBcIldFRE5FU0RBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIlRIVVJTREFZXCJdID0gNF0gPSBcIlRIVVJTREFZXCI7XG4gICAgV2Vla2RheVtXZWVrZGF5W1wiRlJJREFZXCJdID0gNV0gPSBcIkZSSURBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIlNBVFVSREFZXCJdID0gNl0gPSBcIlNBVFVSREFZXCI7XG59KShXZWVrZGF5IHx8IChXZWVrZGF5ID0ge30pKTtcbmV4cG9ydCB2YXIgTW9udGg7XG4oZnVuY3Rpb24gKE1vbnRoKSB7XG4gICAgTW9udGhbTW9udGhbXCJKQU5VQVJZXCJdID0gMV0gPSBcIkpBTlVBUllcIjtcbiAgICBNb250aFtNb250aFtcIkZFQlJVQVJZXCJdID0gMl0gPSBcIkZFQlJVQVJZXCI7XG4gICAgTW9udGhbTW9udGhbXCJNQVJDSFwiXSA9IDNdID0gXCJNQVJDSFwiO1xuICAgIE1vbnRoW01vbnRoW1wiQVBSSUxcIl0gPSA0XSA9IFwiQVBSSUxcIjtcbiAgICBNb250aFtNb250aFtcIk1BWVwiXSA9IDVdID0gXCJNQVlcIjtcbiAgICBNb250aFtNb250aFtcIkpVTkVcIl0gPSA2XSA9IFwiSlVORVwiO1xuICAgIE1vbnRoW01vbnRoW1wiSlVMWVwiXSA9IDddID0gXCJKVUxZXCI7XG4gICAgTW9udGhbTW9udGhbXCJBVUdVU1RcIl0gPSA4XSA9IFwiQVVHVVNUXCI7XG4gICAgTW9udGhbTW9udGhbXCJTRVBURU1CRVJcIl0gPSA5XSA9IFwiU0VQVEVNQkVSXCI7XG4gICAgTW9udGhbTW9udGhbXCJPQ1RPQkVSXCJdID0gMTBdID0gXCJPQ1RPQkVSXCI7XG4gICAgTW9udGhbTW9udGhbXCJOT1ZFTUJFUlwiXSA9IDExXSA9IFwiTk9WRU1CRVJcIjtcbiAgICBNb250aFtNb250aFtcIkRFQ0VNQkVSXCJdID0gMTJdID0gXCJERUNFTUJFUlwiO1xufSkoTW9udGggfHwgKE1vbnRoID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXQpIHtcbiAgICBjb21wb25lbnQuYXNzaWduKFwiZGF5XCIsIHRhcmdldC5nZXREYXRlKCkpO1xuICAgIGNvbXBvbmVudC5hc3NpZ24oXCJtb250aFwiLCB0YXJnZXQuZ2V0TW9udGgoKSArIDEpO1xuICAgIGNvbXBvbmVudC5hc3NpZ24oXCJ5ZWFyXCIsIHRhcmdldC5nZXRGdWxsWWVhcigpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25TaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldCkge1xuICAgIGNvbXBvbmVudC5hc3NpZ24oXCJob3VyXCIsIHRhcmdldC5nZXRIb3VycygpKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwibWludXRlXCIsIHRhcmdldC5nZXRNaW51dGVzKCkpO1xuICAgIGNvbXBvbmVudC5hc3NpZ24oXCJzZWNvbmRcIiwgdGFyZ2V0LmdldFNlY29uZHMoKSk7XG4gICAgY29tcG9uZW50LmFzc2lnbihcIm1pbGxpc2Vjb25kXCIsIHRhcmdldC5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgY29tcG9uZW50LmFzc2lnbihcIm1lcmlkaWVtXCIsIHRhcmdldC5nZXRIb3VycygpIDwgMTIgPyBNZXJpZGllbS5BTSA6IE1lcmlkaWVtLlBNKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbXBseVNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0KSB7XG4gICAgY29tcG9uZW50LmltcGx5KFwiZGF5XCIsIHRhcmdldC5nZXREYXRlKCkpO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1vbnRoXCIsIHRhcmdldC5nZXRNb250aCgpICsgMSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwieWVhclwiLCB0YXJnZXQuZ2V0RnVsbFllYXIoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldCkge1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgdGFyZ2V0LmdldEhvdXJzKCkpO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCB0YXJnZXQuZ2V0TWludXRlcygpKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgdGFyZ2V0LmdldFNlY29uZHMoKSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgdGFyZ2V0LmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCB0YXJnZXQuZ2V0SG91cnMoKSA8IDEyID8gTWVyaWRpZW0uQU0gOiBNZXJpZGllbS5QTSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRlcy5qcy5tYXAiLCJpbXBvcnQgeyBXZWVrZGF5LCBNb250aCB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5leHBvcnQgY29uc3QgVElNRVpPTkVfQUJCUl9NQVAgPSB7XG4gICAgQUNEVDogNjMwLFxuICAgIEFDU1Q6IDU3MCxcbiAgICBBRFQ6IC0xODAsXG4gICAgQUVEVDogNjYwLFxuICAgIEFFU1Q6IDYwMCxcbiAgICBBRlQ6IDI3MCxcbiAgICBBS0RUOiAtNDgwLFxuICAgIEFLU1Q6IC01NDAsXG4gICAgQUxNVDogMzYwLFxuICAgIEFNU1Q6IC0xODAsXG4gICAgQU1UOiAtMjQwLFxuICAgIEFOQVNUOiA3MjAsXG4gICAgQU5BVDogNzIwLFxuICAgIEFRVFQ6IDMwMCxcbiAgICBBUlQ6IC0xODAsXG4gICAgQVNUOiAtMjQwLFxuICAgIEFXRFQ6IDU0MCxcbiAgICBBV1NUOiA0ODAsXG4gICAgQVpPU1Q6IDAsXG4gICAgQVpPVDogLTYwLFxuICAgIEFaU1Q6IDMwMCxcbiAgICBBWlQ6IDI0MCxcbiAgICBCTlQ6IDQ4MCxcbiAgICBCT1Q6IC0yNDAsXG4gICAgQlJTVDogLTEyMCxcbiAgICBCUlQ6IC0xODAsXG4gICAgQlNUOiA2MCxcbiAgICBCVFQ6IDM2MCxcbiAgICBDQVNUOiA0ODAsXG4gICAgQ0FUOiAxMjAsXG4gICAgQ0NUOiAzOTAsXG4gICAgQ0RUOiAtMzAwLFxuICAgIENFU1Q6IDEyMCxcbiAgICBDRVQ6IHtcbiAgICAgICAgdGltZXpvbmVPZmZzZXREdXJpbmdEc3Q6IDIgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IDYwLFxuICAgICAgICBkc3RTdGFydDogKHllYXIpID0+IGdldExhc3RXZWVrZGF5T2ZNb250aCh5ZWFyLCBNb250aC5NQVJDSCwgV2Vla2RheS5TVU5EQVksIDIpLFxuICAgICAgICBkc3RFbmQ6ICh5ZWFyKSA9PiBnZXRMYXN0V2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguT0NUT0JFUiwgV2Vla2RheS5TVU5EQVksIDMpLFxuICAgIH0sXG4gICAgQ0hBRFQ6IDgyNSxcbiAgICBDSEFTVDogNzY1LFxuICAgIENLVDogLTYwMCxcbiAgICBDTFNUOiAtMTgwLFxuICAgIENMVDogLTI0MCxcbiAgICBDT1Q6IC0zMDAsXG4gICAgQ1NUOiAtMzYwLFxuICAgIENUOiB7XG4gICAgICAgIHRpbWV6b25lT2Zmc2V0RHVyaW5nRHN0OiAtNSAqIDYwLFxuICAgICAgICB0aW1lem9uZU9mZnNldE5vbkRzdDogLTYgKiA2MCxcbiAgICAgICAgZHN0U3RhcnQ6ICh5ZWFyKSA9PiBnZXROdGhXZWVrZGF5T2ZNb250aCh5ZWFyLCBNb250aC5NQVJDSCwgV2Vla2RheS5TVU5EQVksIDIsIDIpLFxuICAgICAgICBkc3RFbmQ6ICh5ZWFyKSA9PiBnZXROdGhXZWVrZGF5T2ZNb250aCh5ZWFyLCBNb250aC5OT1ZFTUJFUiwgV2Vla2RheS5TVU5EQVksIDEsIDIpLFxuICAgIH0sXG4gICAgQ1ZUOiAtNjAsXG4gICAgQ1hUOiA0MjAsXG4gICAgQ2hTVDogNjAwLFxuICAgIERBVlQ6IDQyMCxcbiAgICBFQVNTVDogLTMwMCxcbiAgICBFQVNUOiAtMzYwLFxuICAgIEVBVDogMTgwLFxuICAgIEVDVDogLTMwMCxcbiAgICBFRFQ6IC0yNDAsXG4gICAgRUVTVDogMTgwLFxuICAgIEVFVDogMTIwLFxuICAgIEVHU1Q6IDAsXG4gICAgRUdUOiAtNjAsXG4gICAgRVNUOiAtMzAwLFxuICAgIEVUOiB7XG4gICAgICAgIHRpbWV6b25lT2Zmc2V0RHVyaW5nRHN0OiAtNCAqIDYwLFxuICAgICAgICB0aW1lem9uZU9mZnNldE5vbkRzdDogLTUgKiA2MCxcbiAgICAgICAgZHN0U3RhcnQ6ICh5ZWFyKSA9PiBnZXROdGhXZWVrZGF5T2ZNb250aCh5ZWFyLCBNb250aC5NQVJDSCwgV2Vla2RheS5TVU5EQVksIDIsIDIpLFxuICAgICAgICBkc3RFbmQ6ICh5ZWFyKSA9PiBnZXROdGhXZWVrZGF5T2ZNb250aCh5ZWFyLCBNb250aC5OT1ZFTUJFUiwgV2Vla2RheS5TVU5EQVksIDEsIDIpLFxuICAgIH0sXG4gICAgRkpTVDogNzgwLFxuICAgIEZKVDogNzIwLFxuICAgIEZLU1Q6IC0xODAsXG4gICAgRktUOiAtMjQwLFxuICAgIEZOVDogLTEyMCxcbiAgICBHQUxUOiAtMzYwLFxuICAgIEdBTVQ6IC01NDAsXG4gICAgR0VUOiAyNDAsXG4gICAgR0ZUOiAtMTgwLFxuICAgIEdJTFQ6IDcyMCxcbiAgICBHTVQ6IDAsXG4gICAgR1NUOiAyNDAsXG4gICAgR1lUOiAtMjQwLFxuICAgIEhBQTogLTE4MCxcbiAgICBIQUM6IC0zMDAsXG4gICAgSEFEVDogLTU0MCxcbiAgICBIQUU6IC0yNDAsXG4gICAgSEFQOiAtNDIwLFxuICAgIEhBUjogLTM2MCxcbiAgICBIQVNUOiAtNjAwLFxuICAgIEhBVDogLTkwLFxuICAgIEhBWTogLTQ4MCxcbiAgICBIS1Q6IDQ4MCxcbiAgICBITFY6IC0yMTAsXG4gICAgSE5BOiAtMjQwLFxuICAgIEhOQzogLTM2MCxcbiAgICBITkU6IC0zMDAsXG4gICAgSE5QOiAtNDgwLFxuICAgIEhOUjogLTQyMCxcbiAgICBITlQ6IC0xNTAsXG4gICAgSE5ZOiAtNTQwLFxuICAgIEhPVlQ6IDQyMCxcbiAgICBJQ1Q6IDQyMCxcbiAgICBJRFQ6IDE4MCxcbiAgICBJT1Q6IDM2MCxcbiAgICBJUkRUOiAyNzAsXG4gICAgSVJLU1Q6IDU0MCxcbiAgICBJUktUOiA1NDAsXG4gICAgSVJTVDogMjEwLFxuICAgIElTVDogMzMwLFxuICAgIEpTVDogNTQwLFxuICAgIEtHVDogMzYwLFxuICAgIEtSQVNUOiA0ODAsXG4gICAgS1JBVDogNDgwLFxuICAgIEtTVDogNTQwLFxuICAgIEtVWVQ6IDI0MCxcbiAgICBMSERUOiA2NjAsXG4gICAgTEhTVDogNjMwLFxuICAgIExJTlQ6IDg0MCxcbiAgICBNQUdTVDogNzIwLFxuICAgIE1BR1Q6IDcyMCxcbiAgICBNQVJUOiAtNTEwLFxuICAgIE1BV1Q6IDMwMCxcbiAgICBNRFQ6IC0zNjAsXG4gICAgTUVTWjogMTIwLFxuICAgIE1FWjogNjAsXG4gICAgTUhUOiA3MjAsXG4gICAgTU1UOiAzOTAsXG4gICAgTVNEOiAyNDAsXG4gICAgTVNLOiAxODAsXG4gICAgTVNUOiAtNDIwLFxuICAgIE1UOiB7XG4gICAgICAgIHRpbWV6b25lT2Zmc2V0RHVyaW5nRHN0OiAtNiAqIDYwLFxuICAgICAgICB0aW1lem9uZU9mZnNldE5vbkRzdDogLTcgKiA2MCxcbiAgICAgICAgZHN0U3RhcnQ6ICh5ZWFyKSA9PiBnZXROdGhXZWVrZGF5T2ZNb250aCh5ZWFyLCBNb250aC5NQVJDSCwgV2Vla2RheS5TVU5EQVksIDIsIDIpLFxuICAgICAgICBkc3RFbmQ6ICh5ZWFyKSA9PiBnZXROdGhXZWVrZGF5T2ZNb250aCh5ZWFyLCBNb250aC5OT1ZFTUJFUiwgV2Vla2RheS5TVU5EQVksIDEsIDIpLFxuICAgIH0sXG4gICAgTVVUOiAyNDAsXG4gICAgTVZUOiAzMDAsXG4gICAgTVlUOiA0ODAsXG4gICAgTkNUOiA2NjAsXG4gICAgTkRUOiAtOTAsXG4gICAgTkZUOiA2OTAsXG4gICAgTk9WU1Q6IDQyMCxcbiAgICBOT1ZUOiAzNjAsXG4gICAgTlBUOiAzNDUsXG4gICAgTlNUOiAtMTUwLFxuICAgIE5VVDogLTY2MCxcbiAgICBOWkRUOiA3ODAsXG4gICAgTlpTVDogNzIwLFxuICAgIE9NU1NUOiA0MjAsXG4gICAgT01TVDogNDIwLFxuICAgIFBEVDogLTQyMCxcbiAgICBQRVQ6IC0zMDAsXG4gICAgUEVUU1Q6IDcyMCxcbiAgICBQRVRUOiA3MjAsXG4gICAgUEdUOiA2MDAsXG4gICAgUEhPVDogNzgwLFxuICAgIFBIVDogNDgwLFxuICAgIFBLVDogMzAwLFxuICAgIFBNRFQ6IC0xMjAsXG4gICAgUE1TVDogLTE4MCxcbiAgICBQT05UOiA2NjAsXG4gICAgUFNUOiAtNDgwLFxuICAgIFBUOiB7XG4gICAgICAgIHRpbWV6b25lT2Zmc2V0RHVyaW5nRHN0OiAtNyAqIDYwLFxuICAgICAgICB0aW1lem9uZU9mZnNldE5vbkRzdDogLTggKiA2MCxcbiAgICAgICAgZHN0U3RhcnQ6ICh5ZWFyKSA9PiBnZXROdGhXZWVrZGF5T2ZNb250aCh5ZWFyLCBNb250aC5NQVJDSCwgV2Vla2RheS5TVU5EQVksIDIsIDIpLFxuICAgICAgICBkc3RFbmQ6ICh5ZWFyKSA9PiBnZXROdGhXZWVrZGF5T2ZNb250aCh5ZWFyLCBNb250aC5OT1ZFTUJFUiwgV2Vla2RheS5TVU5EQVksIDEsIDIpLFxuICAgIH0sXG4gICAgUFdUOiA1NDAsXG4gICAgUFlTVDogLTE4MCxcbiAgICBQWVQ6IC0yNDAsXG4gICAgUkVUOiAyNDAsXG4gICAgU0FNVDogMjQwLFxuICAgIFNBU1Q6IDEyMCxcbiAgICBTQlQ6IDY2MCxcbiAgICBTQ1Q6IDI0MCxcbiAgICBTR1Q6IDQ4MCxcbiAgICBTUlQ6IC0xODAsXG4gICAgU1NUOiAtNjYwLFxuICAgIFRBSFQ6IC02MDAsXG4gICAgVEZUOiAzMDAsXG4gICAgVEpUOiAzMDAsXG4gICAgVEtUOiA3ODAsXG4gICAgVExUOiA1NDAsXG4gICAgVE1UOiAzMDAsXG4gICAgVFZUOiA3MjAsXG4gICAgVUxBVDogNDgwLFxuICAgIFVUQzogMCxcbiAgICBVWVNUOiAtMTIwLFxuICAgIFVZVDogLTE4MCxcbiAgICBVWlQ6IDMwMCxcbiAgICBWRVQ6IC0yMTAsXG4gICAgVkxBU1Q6IDY2MCxcbiAgICBWTEFUOiA2NjAsXG4gICAgVlVUOiA2NjAsXG4gICAgV0FTVDogMTIwLFxuICAgIFdBVDogNjAsXG4gICAgV0VTVDogNjAsXG4gICAgV0VTWjogNjAsXG4gICAgV0VUOiAwLFxuICAgIFdFWjogMCxcbiAgICBXRlQ6IDcyMCxcbiAgICBXR1NUOiAtMTIwLFxuICAgIFdHVDogLTE4MCxcbiAgICBXSUI6IDQyMCxcbiAgICBXSVQ6IDU0MCxcbiAgICBXSVRBOiA0ODAsXG4gICAgV1NUOiA3ODAsXG4gICAgV1Q6IDAsXG4gICAgWUFLU1Q6IDYwMCxcbiAgICBZQUtUOiA2MDAsXG4gICAgWUFQVDogNjAwLFxuICAgIFlFS1NUOiAzNjAsXG4gICAgWUVLVDogMzYwLFxufTtcbmV4cG9ydCBmdW5jdGlvbiBnZXROdGhXZWVrZGF5T2ZNb250aCh5ZWFyLCBtb250aCwgd2Vla2RheSwgbiwgaG91ciA9IDApIHtcbiAgICBsZXQgZGF5T2ZNb250aCA9IDA7XG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgICBkYXlPZk1vbnRoKys7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheU9mTW9udGgpO1xuICAgICAgICBpZiAoZGF0ZS5nZXREYXkoKSA9PT0gd2Vla2RheSlcbiAgICAgICAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5T2ZNb250aCwgaG91cik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdFdlZWtkYXlPZk1vbnRoKHllYXIsIG1vbnRoLCB3ZWVrZGF5LCBob3VyID0gMCkge1xuICAgIGNvbnN0IG9uZUluZGV4ZWRXZWVrZGF5ID0gd2Vla2RheSA9PT0gMCA/IDcgOiB3ZWVrZGF5O1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEgKyAxLCAxLCAxMik7XG4gICAgY29uc3QgZmlyc3RXZWVrZGF5TmV4dE1vbnRoID0gZGF0ZS5nZXREYXkoKSA9PT0gMCA/IDcgOiBkYXRlLmdldERheSgpO1xuICAgIGxldCBkYXlEaWZmO1xuICAgIGlmIChmaXJzdFdlZWtkYXlOZXh0TW9udGggPT09IG9uZUluZGV4ZWRXZWVrZGF5KVxuICAgICAgICBkYXlEaWZmID0gNztcbiAgICBlbHNlIGlmIChmaXJzdFdlZWtkYXlOZXh0TW9udGggPCBvbmVJbmRleGVkV2Vla2RheSlcbiAgICAgICAgZGF5RGlmZiA9IDcgKyBmaXJzdFdlZWtkYXlOZXh0TW9udGggLSBvbmVJbmRleGVkV2Vla2RheTtcbiAgICBlbHNlXG4gICAgICAgIGRheURpZmYgPSBmaXJzdFdlZWtkYXlOZXh0TW9udGggLSBvbmVJbmRleGVkV2Vla2RheTtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkYXlEaWZmKTtcbiAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXRlLmdldERhdGUoKSwgaG91cik7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9UaW1lem9uZU9mZnNldCh0aW1lem9uZUlucHV0LCBkYXRlLCB0aW1lem9uZU92ZXJyaWRlcyA9IHt9KSB7XG4gICAgaWYgKHRpbWV6b25lSW5wdXQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aW1lem9uZUlucHV0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiB0aW1lem9uZUlucHV0O1xuICAgIH1cbiAgICBjb25zdCBtYXRjaGVkVGltZXpvbmUgPSB0aW1lem9uZU92ZXJyaWRlc1t0aW1lem9uZUlucHV0XSA/PyBUSU1FWk9ORV9BQkJSX01BUFt0aW1lem9uZUlucHV0XTtcbiAgICBpZiAobWF0Y2hlZFRpbWV6b25lID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbWF0Y2hlZFRpbWV6b25lID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRUaW1lem9uZTtcbiAgICB9XG4gICAgaWYgKGRhdGUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGRhdGUgPiBtYXRjaGVkVGltZXpvbmUuZHN0U3RhcnQoZGF0ZS5nZXRGdWxsWWVhcigpKSAmJiAhKGRhdGUgPiBtYXRjaGVkVGltZXpvbmUuZHN0RW5kKGRhdGUuZ2V0RnVsbFllYXIoKSkpKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVkVGltZXpvbmUudGltZXpvbmVPZmZzZXREdXJpbmdEc3Q7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaGVkVGltZXpvbmUudGltZXpvbmVPZmZzZXROb25Ec3Q7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lem9uZS5qcy5tYXAiLCJleHBvcnQgY29uc3QgRW1wdHlEdXJhdGlvbiA9IHtcbiAgICBkYXk6IDAsXG4gICAgc2Vjb25kOiAwLFxuICAgIG1pbGxpc2Vjb25kOiAwLFxufTtcbmV4cG9ydCBmdW5jdGlvbiBhZGREdXJhdGlvbihyZWYsIGR1cmF0aW9uKSB7XG4gICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShyZWYpO1xuICAgIGlmIChkdXJhdGlvbltcInlcIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJ5ZWFyXCJdID0gZHVyYXRpb25bXCJ5XCJdO1xuICAgICAgICBkZWxldGUgZHVyYXRpb25bXCJ5XCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJtb1wiXSkge1xuICAgICAgICBkdXJhdGlvbltcIm1vbnRoXCJdID0gZHVyYXRpb25bXCJtb1wiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wibW9cIl07XG4gICAgfVxuICAgIGlmIChkdXJhdGlvbltcIk1cIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJtb250aFwiXSA9IGR1cmF0aW9uW1wiTVwiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wiTVwiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wid1wiXSkge1xuICAgICAgICBkdXJhdGlvbltcIndlZWtcIl0gPSBkdXJhdGlvbltcIndcIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcIndcIl07XG4gICAgfVxuICAgIGlmIChkdXJhdGlvbltcImRcIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJkYXlcIl0gPSBkdXJhdGlvbltcImRcIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcImRcIl07XG4gICAgfVxuICAgIGlmIChkdXJhdGlvbltcImhcIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJob3VyXCJdID0gZHVyYXRpb25bXCJoXCJdO1xuICAgICAgICBkZWxldGUgZHVyYXRpb25bXCJoXCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJtXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wibWludXRlXCJdID0gZHVyYXRpb25bXCJtXCJdO1xuICAgICAgICBkZWxldGUgZHVyYXRpb25bXCJtXCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJzXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wic2Vjb25kXCJdID0gZHVyYXRpb25bXCJzXCJdO1xuICAgICAgICBkZWxldGUgZHVyYXRpb25bXCJzXCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJtc1wiXSkge1xuICAgICAgICBkdXJhdGlvbltcIm1pbGxpc2Vjb25kXCJdID0gZHVyYXRpb25bXCJtc1wiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wibXNcIl07XG4gICAgfVxuICAgIGlmIChcInllYXJcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJ5ZWFyXCJdKTtcbiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBmbG9vcik7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJ5ZWFyXCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1vbnRoID0gZHVyYXRpb24/Lm1vbnRoID8/IDA7XG4gICAgICAgICAgICBkdXJhdGlvbi5tb250aCArPSByZW1haW5pbmdGcmFjdGlvbiAqIDEyO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChcInF1YXJ0ZXJcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJxdWFydGVyXCJdKTtcbiAgICAgICAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBmbG9vciAqIDMpO1xuICAgIH1cbiAgICBpZiAoXCJtb250aFwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihkdXJhdGlvbltcIm1vbnRoXCJdKTtcbiAgICAgICAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBmbG9vcik7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJtb250aFwiXSAtIGZsb29yO1xuICAgICAgICBpZiAocmVtYWluaW5nRnJhY3Rpb24gPiAwKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi53ZWVrID0gZHVyYXRpb24/LndlZWsgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLndlZWsgKz0gcmVtYWluaW5nRnJhY3Rpb24gKiA0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChcIndlZWtcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJ3ZWVrXCJdKTtcbiAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZmxvb3IgKiA3KTtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nRnJhY3Rpb24gPSBkdXJhdGlvbltcIndlZWtcIl0gLSBmbG9vcjtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0ZyYWN0aW9uID4gMCkge1xuICAgICAgICAgICAgZHVyYXRpb24uZGF5ID0gZHVyYXRpb24/LmRheSA/PyAwO1xuICAgICAgICAgICAgZHVyYXRpb24uZGF5ICs9IE1hdGgucm91bmQocmVtYWluaW5nRnJhY3Rpb24gKiA3KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJkYXlcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJkYXlcIl0pO1xuICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBmbG9vcik7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJkYXlcIl0gLSBmbG9vcjtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0ZyYWN0aW9uID4gMCkge1xuICAgICAgICAgICAgZHVyYXRpb24uaG91ciA9IGR1cmF0aW9uPy5ob3VyID8/IDA7XG4gICAgICAgICAgICBkdXJhdGlvbi5ob3VyICs9IE1hdGgucm91bmQocmVtYWluaW5nRnJhY3Rpb24gKiAyNCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKFwiaG91clwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihkdXJhdGlvbltcImhvdXJcIl0pO1xuICAgICAgICBkYXRlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSArIGZsb29yKTtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nRnJhY3Rpb24gPSBkdXJhdGlvbltcImhvdXJcIl0gLSBmbG9vcjtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0ZyYWN0aW9uID4gMCkge1xuICAgICAgICAgICAgZHVyYXRpb24ubWludXRlID0gZHVyYXRpb24/Lm1pbnV0ZSA/PyAwO1xuICAgICAgICAgICAgZHVyYXRpb24ubWludXRlICs9IE1hdGgucm91bmQocmVtYWluaW5nRnJhY3Rpb24gKiA2MCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKFwibWludXRlXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wibWludXRlXCJdKTtcbiAgICAgICAgZGF0ZS5zZXRNaW51dGVzKGRhdGUuZ2V0TWludXRlcygpICsgZmxvb3IpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdGcmFjdGlvbiA9IGR1cmF0aW9uW1wibWludXRlXCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLnNlY29uZCA9IGR1cmF0aW9uPy5zZWNvbmQgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLnNlY29uZCArPSBNYXRoLnJvdW5kKHJlbWFpbmluZ0ZyYWN0aW9uICogNjApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChcInNlY29uZFwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihkdXJhdGlvbltcInNlY29uZFwiXSk7XG4gICAgICAgIGRhdGUuc2V0U2Vjb25kcyhkYXRlLmdldFNlY29uZHMoKSArIGZsb29yKTtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nRnJhY3Rpb24gPSBkdXJhdGlvbltcInNlY29uZFwiXSAtIGZsb29yO1xuICAgICAgICBpZiAocmVtYWluaW5nRnJhY3Rpb24gPiAwKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5taWxsaXNlY29uZCA9IGR1cmF0aW9uPy5taWxsaXNlY29uZCA/PyAwO1xuICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmQgKz0gTWF0aC5yb3VuZChyZW1haW5pbmdGcmFjdGlvbiAqIDEwMDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChcIm1pbGxpc2Vjb25kXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wibWlsbGlzZWNvbmRcIl0pO1xuICAgICAgICBkYXRlLnNldE1pbGxpc2Vjb25kcyhkYXRlLmdldE1pbGxpc2Vjb25kcygpICsgZmxvb3IpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pIHtcbiAgICBjb25zdCByZXZlcnNlZCA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIGR1cmF0aW9uKSB7XG4gICAgICAgIHJldmVyc2VkW2tleV0gPSAtZHVyYXRpb25ba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIHJldmVyc2VkO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZHVyYXRpb24uanMubWFwIiwiaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUsIGFzc2lnblNpbWlsYXJUaW1lLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCB7IHRvVGltZXpvbmVPZmZzZXQgfSBmcm9tIFwiLi90aW1lem9uZS5qc1wiO1xuaW1wb3J0IHsgYWRkRHVyYXRpb24sIEVtcHR5RHVyYXRpb24gfSBmcm9tIFwiLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGNsYXNzIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB7XG4gICAgaW5zdGFudDtcbiAgICB0aW1lem9uZU9mZnNldDtcbiAgICBjb25zdHJ1Y3RvcihpbnN0YW50LCB0aW1lem9uZU9mZnNldCkge1xuICAgICAgICB0aGlzLmluc3RhbnQgPSBpbnN0YW50ID8/IG5ldyBEYXRlKCk7XG4gICAgICAgIHRoaXMudGltZXpvbmVPZmZzZXQgPSB0aW1lem9uZU9mZnNldCA/PyBudWxsO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbURhdGUoZGF0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZmVyZW5jZVdpdGhUaW1lem9uZShkYXRlKTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21JbnB1dChpbnB1dCwgdGltZXpvbmVPdmVycmlkZXMpIHtcbiAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIFJlZmVyZW5jZVdpdGhUaW1lem9uZS5mcm9tRGF0ZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5zdGFudCA9IGlucHV0Py5pbnN0YW50ID8/IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0ID0gdG9UaW1lem9uZU9mZnNldChpbnB1dD8udGltZXpvbmUsIGluc3RhbnQsIHRpbWV6b25lT3ZlcnJpZGVzKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWZlcmVuY2VXaXRoVGltZXpvbmUoaW5zdGFudCwgdGltZXpvbmVPZmZzZXQpO1xuICAgIH1cbiAgICBnZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aGlzLmluc3RhbnQpO1xuICAgICAgICBpZiAodGhpcy50aW1lem9uZU9mZnNldCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgZGF0ZS5zZXRNaW51dGVzKGRhdGUuZ2V0TWludXRlcygpIC0gdGhpcy5nZXRTeXN0ZW1UaW1lem9uZUFkanVzdG1lbnRNaW51dGUodGhpcy5pbnN0YW50KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICAgIGdldFN5c3RlbVRpbWV6b25lQWRqdXN0bWVudE1pbnV0ZShkYXRlLCBvdmVycmlkZVRpbWV6b25lT2Zmc2V0KSB7XG4gICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudFRpbWV6b25lT2Zmc2V0ID0gLWRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0VGltZXpvbmVPZmZzZXQgPSBvdmVycmlkZVRpbWV6b25lT2Zmc2V0ID8/IHRoaXMudGltZXpvbmVPZmZzZXQgPz8gY3VycmVudFRpbWV6b25lT2Zmc2V0O1xuICAgICAgICByZXR1cm4gY3VycmVudFRpbWV6b25lT2Zmc2V0IC0gdGFyZ2V0VGltZXpvbmVPZmZzZXQ7XG4gICAgfVxuICAgIGdldFRpbWV6b25lT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aW1lem9uZU9mZnNldCA/PyAtdGhpcy5pbnN0YW50LmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFBhcnNpbmdDb21wb25lbnRzIHtcbiAgICBrbm93blZhbHVlcztcbiAgICBpbXBsaWVkVmFsdWVzO1xuICAgIHJlZmVyZW5jZTtcbiAgICBfdGFncyA9IG5ldyBTZXQoKTtcbiAgICBjb25zdHJ1Y3RvcihyZWZlcmVuY2UsIGtub3duQ29tcG9uZW50cykge1xuICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgICAgICAgdGhpcy5rbm93blZhbHVlcyA9IHt9O1xuICAgICAgICB0aGlzLmltcGxpZWRWYWx1ZXMgPSB7fTtcbiAgICAgICAgaWYgKGtub3duQ29tcG9uZW50cykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4ga25vd25Db21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5rbm93blZhbHVlc1trZXldID0ga25vd25Db21wb25lbnRzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0ZSA9IHJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICAgICAgdGhpcy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgIHRoaXMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgdGhpcy5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgdGhpcy5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICB0aGlzLmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICB0aGlzLmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICB0aGlzLmltcGx5KFwibWlsbGlzZWNvbmRcIiwgMCk7XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UocmVmZXJlbmNlLCBkdXJhdGlvbiA9IEVtcHR5RHVyYXRpb24pIHtcbiAgICAgICAgbGV0IGRhdGUgPSBhZGREdXJhdGlvbihyZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCksIGR1cmF0aW9uKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UpO1xuICAgICAgICBjb21wb25lbnRzLmFkZFRhZyhcInJlc3VsdC9yZWxhdGl2ZURhdGVcIik7XG4gICAgICAgIGlmIChcImhvdXJcIiBpbiBkdXJhdGlvbiB8fCBcIm1pbnV0ZVwiIGluIGR1cmF0aW9uIHx8IFwic2Vjb25kXCIgaW4gZHVyYXRpb24gfHwgXCJtaWxsaXNlY29uZFwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFkZFRhZyhcInJlc3VsdC9yZWxhdGl2ZURhdGVBbmRUaW1lXCIpO1xuICAgICAgICAgICAgYXNzaWduU2ltaWxhclRpbWUoY29tcG9uZW50cywgZGF0ZSk7XG4gICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnRzLCBkYXRlKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgcmVmZXJlbmNlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnRzLCBkYXRlKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ0aW1lem9uZU9mZnNldFwiLCByZWZlcmVuY2UuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgICAgICAgICBpZiAoXCJkYXlcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwid2Vla2RheVwiLCBkYXRlLmdldERheSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKFwid2Vla1wiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIndlZWtkYXlcIiwgZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBpZiAoXCJtb250aFwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXCJ5ZWFyXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG4gICAgZ2V0KGNvbXBvbmVudCkge1xuICAgICAgICBpZiAoY29tcG9uZW50IGluIHRoaXMua25vd25WYWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmtub3duVmFsdWVzW2NvbXBvbmVudF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBvbmVudCBpbiB0aGlzLmltcGxpZWRWYWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltcGxpZWRWYWx1ZXNbY29tcG9uZW50XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaXNDZXJ0YWluKGNvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gY29tcG9uZW50IGluIHRoaXMua25vd25WYWx1ZXM7XG4gICAgfVxuICAgIGdldENlcnRhaW5Db21wb25lbnRzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5rbm93blZhbHVlcyk7XG4gICAgfVxuICAgIGltcGx5KGNvbXBvbmVudCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCBpbiB0aGlzLmtub3duVmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmltcGxpZWRWYWx1ZXNbY29tcG9uZW50XSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYXNzaWduKGNvbXBvbmVudCwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5rbm93blZhbHVlc1tjb21wb25lbnRdID0gdmFsdWU7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmltcGxpZWRWYWx1ZXNbY29tcG9uZW50XTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFkZER1cmF0aW9uQXNJbXBsaWVkKGR1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5kYXRlV2l0aG91dFRpbWV6b25lQWRqdXN0bWVudCgpO1xuICAgICAgICBjb25zdCBkYXRlID0gYWRkRHVyYXRpb24oY3VycmVudERhdGUsIGR1cmF0aW9uKTtcbiAgICAgICAgaWYgKFwiZGF5XCIgaW4gZHVyYXRpb24gfHwgXCJ3ZWVrXCIgaW4gZHVyYXRpb24gfHwgXCJtb250aFwiIGluIGR1cmF0aW9uIHx8IFwieWVhclwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZShbXCJkYXlcIiwgXCJ3ZWVrZGF5XCIsIFwibW9udGhcIiwgXCJ5ZWFyXCJdKTtcbiAgICAgICAgICAgIHRoaXMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcIndlZWtkYXlcIiwgZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICB0aGlzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICB0aGlzLmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcInNlY29uZFwiIGluIGR1cmF0aW9uIHx8IFwibWludXRlXCIgaW4gZHVyYXRpb24gfHwgXCJob3VyXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlKFtcInNlY29uZFwiLCBcIm1pbnV0ZVwiLCBcImhvdXJcIl0pO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcInNlY29uZFwiLCBkYXRlLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICB0aGlzLmltcGx5KFwibWludXRlXCIsIGRhdGUuZ2V0TWludXRlcygpKTtcbiAgICAgICAgICAgIHRoaXMuaW1wbHkoXCJob3VyXCIsIGRhdGUuZ2V0SG91cnMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRlbGV0ZShjb21wb25lbnRzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50cyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29tcG9uZW50cyA9IFtjb21wb25lbnRzXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5rbm93blZhbHVlc1tjb21wb25lbnRdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuaW1wbGllZFZhbHVlc1tjb21wb25lbnRdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHModGhpcy5yZWZlcmVuY2UpO1xuICAgICAgICBjb21wb25lbnQua25vd25WYWx1ZXMgPSB7fTtcbiAgICAgICAgY29tcG9uZW50LmltcGxpZWRWYWx1ZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5rbm93blZhbHVlcykge1xuICAgICAgICAgICAgY29tcG9uZW50Lmtub3duVmFsdWVzW2tleV0gPSB0aGlzLmtub3duVmFsdWVzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5pbXBsaWVkVmFsdWVzKSB7XG4gICAgICAgICAgICBjb21wb25lbnQuaW1wbGllZFZhbHVlc1trZXldID0gdGhpcy5pbXBsaWVkVmFsdWVzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG4gICAgaXNPbmx5RGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzQ2VydGFpbihcImhvdXJcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwibWludXRlXCIpICYmICF0aGlzLmlzQ2VydGFpbihcInNlY29uZFwiKTtcbiAgICB9XG4gICAgaXNPbmx5VGltZSgpIHtcbiAgICAgICAgcmV0dXJuICghdGhpcy5pc0NlcnRhaW4oXCJ3ZWVrZGF5XCIpICYmICF0aGlzLmlzQ2VydGFpbihcImRheVwiKSAmJiAhdGhpcy5pc0NlcnRhaW4oXCJtb250aFwiKSAmJiAhdGhpcy5pc0NlcnRhaW4oXCJ5ZWFyXCIpKTtcbiAgICB9XG4gICAgaXNPbmx5V2Vla2RheUNvbXBvbmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDZXJ0YWluKFwid2Vla2RheVwiKSAmJiAhdGhpcy5pc0NlcnRhaW4oXCJkYXlcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwibW9udGhcIik7XG4gICAgfVxuICAgIGlzRGF0ZVdpdGhVbmtub3duWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDZXJ0YWluKFwibW9udGhcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwieWVhclwiKTtcbiAgICB9XG4gICAgaXNWYWxpZERhdGUoKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmRhdGVXaXRob3V0VGltZXpvbmVBZGp1c3RtZW50KCk7XG4gICAgICAgIGlmIChkYXRlLmdldEZ1bGxZZWFyKCkgIT09IHRoaXMuZ2V0KFwieWVhclwiKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGRhdGUuZ2V0TW9udGgoKSAhPT0gdGhpcy5nZXQoXCJtb250aFwiKSAtIDEpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkYXRlLmdldERhdGUoKSAhPT0gdGhpcy5nZXQoXCJkYXlcIikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmdldChcImhvdXJcIikgIT0gbnVsbCAmJiBkYXRlLmdldEhvdXJzKCkgIT0gdGhpcy5nZXQoXCJob3VyXCIpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5nZXQoXCJtaW51dGVcIikgIT0gbnVsbCAmJiBkYXRlLmdldE1pbnV0ZXMoKSAhPSB0aGlzLmdldChcIm1pbnV0ZVwiKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gYFtQYXJzaW5nQ29tcG9uZW50cyB7XG4gICAgICAgICAgICB0YWdzOiAke0pTT04uc3RyaW5naWZ5KEFycmF5LmZyb20odGhpcy5fdGFncykuc29ydCgpKX0sIFxuICAgICAgICAgICAga25vd25WYWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5rbm93blZhbHVlcyl9LCBcbiAgICAgICAgICAgIGltcGxpZWRWYWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5pbXBsaWVkVmFsdWVzKX19LCBcbiAgICAgICAgICAgIHJlZmVyZW5jZTogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnJlZmVyZW5jZSl9XWA7XG4gICAgfVxuICAgIGRhdGUoKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmRhdGVXaXRob3V0VGltZXpvbmVBZGp1c3RtZW50KCk7XG4gICAgICAgIGNvbnN0IHRpbWV6b25lQWRqdXN0bWVudCA9IHRoaXMucmVmZXJlbmNlLmdldFN5c3RlbVRpbWV6b25lQWRqdXN0bWVudE1pbnV0ZShkYXRlLCB0aGlzLmdldChcInRpbWV6b25lT2Zmc2V0XCIpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpICsgdGltZXpvbmVBZGp1c3RtZW50ICogNjAwMDApO1xuICAgIH1cbiAgICBhZGRUYWcodGFnKSB7XG4gICAgICAgIHRoaXMuX3RhZ3MuYWRkKHRhZyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhZGRUYWdzKHRhZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCB0YWcgb2YgdGFncykge1xuICAgICAgICAgICAgdGhpcy5fdGFncy5hZGQodGFnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdGFncygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZXQodGhpcy5fdGFncyk7XG4gICAgfVxuICAgIGRhdGVXaXRob3V0VGltZXpvbmVBZGp1c3RtZW50KCkge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGhpcy5nZXQoXCJ5ZWFyXCIpLCB0aGlzLmdldChcIm1vbnRoXCIpIC0gMSwgdGhpcy5nZXQoXCJkYXlcIiksIHRoaXMuZ2V0KFwiaG91clwiKSwgdGhpcy5nZXQoXCJtaW51dGVcIiksIHRoaXMuZ2V0KFwic2Vjb25kXCIpLCB0aGlzLmdldChcIm1pbGxpc2Vjb25kXCIpKTtcbiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih0aGlzLmdldChcInllYXJcIikpO1xuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgUGFyc2luZ1Jlc3VsdCB7XG4gICAgcmVmRGF0ZTtcbiAgICBpbmRleDtcbiAgICB0ZXh0O1xuICAgIHJlZmVyZW5jZTtcbiAgICBzdGFydDtcbiAgICBlbmQ7XG4gICAgY29uc3RydWN0b3IocmVmZXJlbmNlLCBpbmRleCwgdGV4dCwgc3RhcnQsIGVuZCkge1xuICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgICAgICAgdGhpcy5yZWZEYXRlID0gcmVmZXJlbmNlLmluc3RhbnQ7XG4gICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0IHx8IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UpO1xuICAgICAgICB0aGlzLmVuZCA9IGVuZDtcbiAgICB9XG4gICAgY2xvbmUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQYXJzaW5nUmVzdWx0KHRoaXMucmVmZXJlbmNlLCB0aGlzLmluZGV4LCB0aGlzLnRleHQpO1xuICAgICAgICByZXN1bHQuc3RhcnQgPSB0aGlzLnN0YXJ0ID8gdGhpcy5zdGFydC5jbG9uZSgpIDogbnVsbDtcbiAgICAgICAgcmVzdWx0LmVuZCA9IHRoaXMuZW5kID8gdGhpcy5lbmQuY2xvbmUoKSA6IG51bGw7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGRhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LmRhdGUoKTtcbiAgICB9XG4gICAgYWRkVGFnKHRhZykge1xuICAgICAgICB0aGlzLnN0YXJ0LmFkZFRhZyh0YWcpO1xuICAgICAgICBpZiAodGhpcy5lbmQpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kLmFkZFRhZyh0YWcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhZGRUYWdzKHRhZ3MpIHtcbiAgICAgICAgdGhpcy5zdGFydC5hZGRUYWdzKHRhZ3MpO1xuICAgICAgICBpZiAodGhpcy5lbmQpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kLmFkZFRhZ3ModGFncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRhZ3MoKSB7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkVGFncyA9IG5ldyBTZXQodGhpcy5zdGFydC50YWdzKCkpO1xuICAgICAgICBpZiAodGhpcy5lbmQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGFnIG9mIHRoaXMuZW5kLnRhZ3MoKSkge1xuICAgICAgICAgICAgICAgIGNvbWJpbmVkVGFncy5hZGQodGFnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tYmluZWRUYWdzO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgdGFncyA9IEFycmF5LmZyb20odGhpcy50YWdzKCkpLnNvcnQoKTtcbiAgICAgICAgcmV0dXJuIGBbUGFyc2luZ1Jlc3VsdCB7aW5kZXg6ICR7dGhpcy5pbmRleH0sIHRleHQ6ICcke3RoaXMudGV4dH0nLCB0YWdzOiAke0pTT04uc3RyaW5naWZ5KHRhZ3MpfSAuLi59XWA7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzdWx0cy5qcy5tYXAiLCJleHBvcnQgZnVuY3Rpb24gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4ocHJlZml4LCBzaW5nbGVUaW1ldW5pdFBhdHRlcm4sIGNvbm5lY3RvclBhdHRlcm4gPSBcIlxcXFxzezAsNX0sP1xcXFxzezAsNX1cIikge1xuICAgIGNvbnN0IHNpbmdsZVRpbWV1bml0UGF0dGVybk5vQ2FwdHVyZSA9IHNpbmdsZVRpbWV1bml0UGF0dGVybi5yZXBsYWNlKC9cXCgoPyFcXD8pL2csIFwiKD86XCIpO1xuICAgIHJldHVybiBgJHtwcmVmaXh9JHtzaW5nbGVUaW1ldW5pdFBhdHRlcm5Ob0NhcHR1cmV9KD86JHtjb25uZWN0b3JQYXR0ZXJufSR7c2luZ2xlVGltZXVuaXRQYXR0ZXJuTm9DYXB0dXJlfSl7MCwxMH1gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RUZXJtcyhkaWN0aW9uYXJ5KSB7XG4gICAgbGV0IGtleXM7XG4gICAgaWYgKGRpY3Rpb25hcnkgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICBrZXlzID0gWy4uLmRpY3Rpb25hcnldO1xuICAgIH1cbiAgICBlbHNlIGlmIChkaWN0aW9uYXJ5IGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIGtleXMgPSBBcnJheS5mcm9tKGRpY3Rpb25hcnkua2V5cygpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyhkaWN0aW9uYXJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXM7XG59XG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hBbnlQYXR0ZXJuKGRpY3Rpb25hcnkpIHtcbiAgICBjb25zdCBqb2luZWRUZXJtcyA9IGV4dHJhY3RUZXJtcyhkaWN0aW9uYXJ5KVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClcbiAgICAgICAgLmpvaW4oXCJ8XCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLlwiKTtcbiAgICByZXR1cm4gYCg/OiR7am9pbmVkVGVybXN9KWA7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXR0ZXJuLmpzLm1hcCIsImltcG9ydCB7IGFkZER1cmF0aW9uIH0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBmdW5jdGlvbiBmaW5kTW9zdExpa2VseUFEWWVhcih5ZWFyTnVtYmVyKSB7XG4gICAgaWYgKHllYXJOdW1iZXIgPCAxMDApIHtcbiAgICAgICAgaWYgKHllYXJOdW1iZXIgPiA1MCkge1xuICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJOdW1iZXIgKyAxOTAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJOdW1iZXIgKyAyMDAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB5ZWFyTnVtYmVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRZZWFyQ2xvc2VzdFRvUmVmKHJlZkRhdGUsIGRheSwgbW9udGgpIHtcbiAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHJlZkRhdGUpO1xuICAgIGRhdGUuc2V0TW9udGgobW9udGggLSAxKTtcbiAgICBkYXRlLnNldERhdGUoZGF5KTtcbiAgICBjb25zdCBuZXh0WWVhciA9IGFkZER1cmF0aW9uKGRhdGUsIHsgXCJ5ZWFyXCI6IDEgfSk7XG4gICAgY29uc3QgbGFzdFllYXIgPSBhZGREdXJhdGlvbihkYXRlLCB7IFwieWVhclwiOiAtMSB9KTtcbiAgICBpZiAoTWF0aC5hYnMobmV4dFllYXIuZ2V0VGltZSgpIC0gcmVmRGF0ZS5nZXRUaW1lKCkpIDwgTWF0aC5hYnMoZGF0ZS5nZXRUaW1lKCkgLSByZWZEYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgZGF0ZSA9IG5leHRZZWFyO1xuICAgIH1cbiAgICBlbHNlIGlmIChNYXRoLmFicyhsYXN0WWVhci5nZXRUaW1lKCkgLSByZWZEYXRlLmdldFRpbWUoKSkgPCBNYXRoLmFicyhkYXRlLmdldFRpbWUoKSAtIHJlZkRhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgICBkYXRlID0gbGFzdFllYXI7XG4gICAgfVxuICAgIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD15ZWFycy5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgIHN1bmRheTogMCxcbiAgICBzdW46IDAsXG4gICAgXCJzdW4uXCI6IDAsXG4gICAgbW9uZGF5OiAxLFxuICAgIG1vbjogMSxcbiAgICBcIm1vbi5cIjogMSxcbiAgICB0dWVzZGF5OiAyLFxuICAgIHR1ZTogMixcbiAgICBcInR1ZS5cIjogMixcbiAgICB3ZWRuZXNkYXk6IDMsXG4gICAgd2VkOiAzLFxuICAgIFwid2VkLlwiOiAzLFxuICAgIHRodXJzZGF5OiA0LFxuICAgIHRodXJzOiA0LFxuICAgIFwidGh1cnMuXCI6IDQsXG4gICAgdGh1cjogNCxcbiAgICBcInRodXIuXCI6IDQsXG4gICAgdGh1OiA0LFxuICAgIFwidGh1LlwiOiA0LFxuICAgIGZyaWRheTogNSxcbiAgICBmcmk6IDUsXG4gICAgXCJmcmkuXCI6IDUsXG4gICAgc2F0dXJkYXk6IDYsXG4gICAgc2F0OiA2LFxuICAgIFwic2F0LlwiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSA9IHtcbiAgICBqYW51YXJ5OiAxLFxuICAgIGZlYnJ1YXJ5OiAyLFxuICAgIG1hcmNoOiAzLFxuICAgIGFwcmlsOiA0LFxuICAgIG1heTogNSxcbiAgICBqdW5lOiA2LFxuICAgIGp1bHk6IDcsXG4gICAgYXVndXN0OiA4LFxuICAgIHNlcHRlbWJlcjogOSxcbiAgICBvY3RvYmVyOiAxMCxcbiAgICBub3ZlbWJlcjogMTEsXG4gICAgZGVjZW1iZXI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIC4uLkZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZLFxuICAgIGphbjogMSxcbiAgICBcImphbi5cIjogMSxcbiAgICBmZWI6IDIsXG4gICAgXCJmZWIuXCI6IDIsXG4gICAgbWFyOiAzLFxuICAgIFwibWFyLlwiOiAzLFxuICAgIGFwcjogNCxcbiAgICBcImFwci5cIjogNCxcbiAgICBqdW46IDYsXG4gICAgXCJqdW4uXCI6IDYsXG4gICAganVsOiA3LFxuICAgIFwianVsLlwiOiA3LFxuICAgIGF1ZzogOCxcbiAgICBcImF1Zy5cIjogOCxcbiAgICBzZXA6IDksXG4gICAgXCJzZXAuXCI6IDksXG4gICAgc2VwdDogOSxcbiAgICBcInNlcHQuXCI6IDksXG4gICAgb2N0OiAxMCxcbiAgICBcIm9jdC5cIjogMTAsXG4gICAgbm92OiAxMSxcbiAgICBcIm5vdi5cIjogMTEsXG4gICAgZGVjOiAxMixcbiAgICBcImRlYy5cIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IElOVEVHRVJfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIG9uZTogMSxcbiAgICB0d286IDIsXG4gICAgdGhyZWU6IDMsXG4gICAgZm91cjogNCxcbiAgICBmaXZlOiA1LFxuICAgIHNpeDogNixcbiAgICBzZXZlbjogNyxcbiAgICBlaWdodDogOCxcbiAgICBuaW5lOiA5LFxuICAgIHRlbjogMTAsXG4gICAgZWxldmVuOiAxMSxcbiAgICB0d2VsdmU6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBmaXJzdDogMSxcbiAgICBzZWNvbmQ6IDIsXG4gICAgdGhpcmQ6IDMsXG4gICAgZm91cnRoOiA0LFxuICAgIGZpZnRoOiA1LFxuICAgIHNpeHRoOiA2LFxuICAgIHNldmVudGg6IDcsXG4gICAgZWlnaHRoOiA4LFxuICAgIG5pbnRoOiA5LFxuICAgIHRlbnRoOiAxMCxcbiAgICBlbGV2ZW50aDogMTEsXG4gICAgdHdlbGZ0aDogMTIsXG4gICAgdGhpcnRlZW50aDogMTMsXG4gICAgZm91cnRlZW50aDogMTQsXG4gICAgZmlmdGVlbnRoOiAxNSxcbiAgICBzaXh0ZWVudGg6IDE2LFxuICAgIHNldmVudGVlbnRoOiAxNyxcbiAgICBlaWdodGVlbnRoOiAxOCxcbiAgICBuaW5ldGVlbnRoOiAxOSxcbiAgICB0d2VudGlldGg6IDIwLFxuICAgIFwidHdlbnR5IGZpcnN0XCI6IDIxLFxuICAgIFwidHdlbnR5LWZpcnN0XCI6IDIxLFxuICAgIFwidHdlbnR5IHNlY29uZFwiOiAyMixcbiAgICBcInR3ZW50eS1zZWNvbmRcIjogMjIsXG4gICAgXCJ0d2VudHkgdGhpcmRcIjogMjMsXG4gICAgXCJ0d2VudHktdGhpcmRcIjogMjMsXG4gICAgXCJ0d2VudHkgZm91cnRoXCI6IDI0LFxuICAgIFwidHdlbnR5LWZvdXJ0aFwiOiAyNCxcbiAgICBcInR3ZW50eSBmaWZ0aFwiOiAyNSxcbiAgICBcInR3ZW50eS1maWZ0aFwiOiAyNSxcbiAgICBcInR3ZW50eSBzaXh0aFwiOiAyNixcbiAgICBcInR3ZW50eS1zaXh0aFwiOiAyNixcbiAgICBcInR3ZW50eSBzZXZlbnRoXCI6IDI3LFxuICAgIFwidHdlbnR5LXNldmVudGhcIjogMjcsXG4gICAgXCJ0d2VudHkgZWlnaHRoXCI6IDI4LFxuICAgIFwidHdlbnR5LWVpZ2h0aFwiOiAyOCxcbiAgICBcInR3ZW50eSBuaW50aFwiOiAyOSxcbiAgICBcInR3ZW50eS1uaW50aFwiOiAyOSxcbiAgICBcInRoaXJ0aWV0aFwiOiAzMCxcbiAgICBcInRoaXJ0eSBmaXJzdFwiOiAzMSxcbiAgICBcInRoaXJ0eS1maXJzdFwiOiAzMSxcbn07XG5leHBvcnQgY29uc3QgVElNRV9VTklUX0RJQ1RJT05BUllfTk9fQUJCUiA9IHtcbiAgICBzZWNvbmQ6IFwic2Vjb25kXCIsXG4gICAgc2Vjb25kczogXCJzZWNvbmRcIixcbiAgICBtaW51dGU6IFwibWludXRlXCIsXG4gICAgbWludXRlczogXCJtaW51dGVcIixcbiAgICBob3VyOiBcImhvdXJcIixcbiAgICBob3VyczogXCJob3VyXCIsXG4gICAgZGF5OiBcImRheVwiLFxuICAgIGRheXM6IFwiZGF5XCIsXG4gICAgd2VlazogXCJ3ZWVrXCIsXG4gICAgd2Vla3M6IFwid2Vla1wiLFxuICAgIG1vbnRoOiBcIm1vbnRoXCIsXG4gICAgbW9udGhzOiBcIm1vbnRoXCIsXG4gICAgcXVhcnRlcjogXCJxdWFydGVyXCIsXG4gICAgcXVhcnRlcnM6IFwicXVhcnRlclwiLFxuICAgIHllYXI6IFwieWVhclwiLFxuICAgIHllYXJzOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgVElNRV9VTklUX0RJQ1RJT05BUlkgPSB7XG4gICAgczogXCJzZWNvbmRcIixcbiAgICBzZWM6IFwic2Vjb25kXCIsXG4gICAgc2Vjb25kOiBcInNlY29uZFwiLFxuICAgIHNlY29uZHM6IFwic2Vjb25kXCIsXG4gICAgbTogXCJtaW51dGVcIixcbiAgICBtaW46IFwibWludXRlXCIsXG4gICAgbWluczogXCJtaW51dGVcIixcbiAgICBtaW51dGU6IFwibWludXRlXCIsXG4gICAgbWludXRlczogXCJtaW51dGVcIixcbiAgICBoOiBcImhvdXJcIixcbiAgICBocjogXCJob3VyXCIsXG4gICAgaHJzOiBcImhvdXJcIixcbiAgICBob3VyOiBcImhvdXJcIixcbiAgICBob3VyczogXCJob3VyXCIsXG4gICAgZDogXCJkYXlcIixcbiAgICBkYXk6IFwiZGF5XCIsXG4gICAgZGF5czogXCJkYXlcIixcbiAgICB3OiBcIndlZWtcIixcbiAgICB3ZWVrOiBcIndlZWtcIixcbiAgICB3ZWVrczogXCJ3ZWVrXCIsXG4gICAgbW86IFwibW9udGhcIixcbiAgICBtb246IFwibW9udGhcIixcbiAgICBtb3M6IFwibW9udGhcIixcbiAgICBtb250aDogXCJtb250aFwiLFxuICAgIG1vbnRoczogXCJtb250aFwiLFxuICAgIHF0cjogXCJxdWFydGVyXCIsXG4gICAgcXVhcnRlcjogXCJxdWFydGVyXCIsXG4gICAgcXVhcnRlcnM6IFwicXVhcnRlclwiLFxuICAgIHk6IFwieWVhclwiLFxuICAgIHlyOiBcInllYXJcIixcbiAgICB5ZWFyOiBcInllYXJcIixcbiAgICB5ZWFyczogXCJ5ZWFyXCIsXG4gICAgLi4uVElNRV9VTklUX0RJQ1RJT05BUllfTk9fQUJCUixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt8aGFsZig/OlxcXFxzezAsMn1hbj8pP3xhbj9cXFxcYig/OlxcXFxzezAsMn1mZXcpP3xmZXd8c2V2ZXJhbHx0aGV8YT9cXFxcc3swLDJ9Y291cGxlXFxcXHN7MCwyfSg/Om9mKT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJhXCIgfHwgbnVtID09PSBcImFuXCIgfHwgbnVtID09IFwidGhlXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvZmV3LykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvaGFsZi8pKSB7XG4gICAgICAgIHJldHVybiAwLjU7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvY291cGxlLykpIHtcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvc2V2ZXJhbC8pKSB7XG4gICAgICAgIHJldHVybiA3O1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XXsxLDJ9KD86c3R8bmR8cmR8dGgpPylgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBsZXQgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBudW0gPSBudW0ucmVwbGFjZSgvKD86c3R8bmR8cmR8dGgpJC9pLCBcIlwiKTtcbiAgICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBZRUFSX1BBVFRFUk4gPSBgKD86WzEtOV1bMC05XXswLDN9XFxcXHN7MCwyfSg/OkJFfEFEfEJDfEJDRXxDRSl8WzEtOV1bMC05XXszfXxbNS05XVswLTldfDJbMC01XSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmICgvQkUvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL0JFL2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpIC0gNTQzO1xuICAgIH1cbiAgICBpZiAoL0JDRT8vaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL0JDRT8vaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBpZiAoLyhBRHxDRSkvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyhBRHxDRSkvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDN9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYDtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUkVHRVggPSBuZXcgUmVnRXhwKFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiwgXCJpXCIpO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9OT19BQkJSX1BBVFRFUk4gPSBgKCR7TlVNQkVSX1BBVFRFUk59KVxcXFxzezAsM30oJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUllfTk9fQUJCUil9KWA7XG5jb25zdCBUSU1FX1VOSVRfQ09OTkVDVE9SX1BBVFRFUk4gPSBgXFxcXHN7MCw1fSw/KD86XFxcXHMqYW5kKT9cXFxcc3swLDV9YDtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihgKD86KD86YWJvdXR8YXJvdW5kKVxcXFxzezAsM30pP2AsIFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiwgVElNRV9VTklUX0NPTk5FQ1RPUl9QQVRURVJOKTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTiA9IHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKGAoPzooPzphYm91dHxhcm91bmQpXFxcXHN7MCwzfSk/YCwgU0lOR0xFX1RJTUVfVU5JVF9OT19BQkJSX1BBVFRFUk4sIFRJTUVfVU5JVF9DT05ORUNUT1JfUEFUVEVSTik7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKS50cmltKCk7XG4gICAgICAgIG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMoZnJhZ21lbnRzKS5sZW5ndGggPT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbmZ1bmN0aW9uIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpIHtcbiAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15bYS16QS1aXSskLykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFsyXS50b0xvd2VyQ2FzZSgpXTtcbiAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiZXhwb3J0IGNsYXNzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5IYXNDaGFuZ2UoY29udGV4dCwgY3VycmVudElubmVyUGF0dGVybikge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lclBhdHRlcm4oY29udGV4dCkgIT09IGN1cnJlbnRJbm5lclBhdHRlcm47XG4gICAgfVxuICAgIHBhdHRlcm5MZWZ0Qm91bmRhcnkoKSB7XG4gICAgICAgIHJldHVybiBgKFxcXFxXfF4pYDtcbiAgICB9XG4gICAgY2FjaGVkSW5uZXJQYXR0ZXJuID0gbnVsbDtcbiAgICBjYWNoZWRQYXR0ZXJuID0gbnVsbDtcbiAgICBwYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FjaGVkSW5uZXJQYXR0ZXJuKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5uZXJQYXR0ZXJuSGFzQ2hhbmdlKGNvbnRleHQsIHRoaXMuY2FjaGVkSW5uZXJQYXR0ZXJuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlZFBhdHRlcm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZWRJbm5lclBhdHRlcm4gPSB0aGlzLmlubmVyUGF0dGVybihjb250ZXh0KTtcbiAgICAgICAgdGhpcy5jYWNoZWRQYXR0ZXJuID0gbmV3IFJlZ0V4cChgJHt0aGlzLnBhdHRlcm5MZWZ0Qm91bmRhcnkoKX0ke3RoaXMuY2FjaGVkSW5uZXJQYXR0ZXJuLnNvdXJjZX1gLCB0aGlzLmNhY2hlZElubmVyUGF0dGVybi5mbGFncyk7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZFBhdHRlcm47XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgaGVhZGVyID0gbWF0Y2hbMV0gPz8gXCJcIjtcbiAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIGhlYWRlci5sZW5ndGg7XG4gICAgICAgIG1hdGNoWzBdID0gbWF0Y2hbMF0uc3Vic3RyaW5nKGhlYWRlci5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8IG1hdGNoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBtYXRjaFtpIC0gMV0gPSBtYXRjaFtpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOX1dJVEhfT1BUSU9OQUxfUFJFRklYID0gbmV3IFJlZ0V4cChgKD86KD86d2l0aGlufGlufGZvcilcXFxccyopP2AgK1xuICAgIGAoPzooPzphYm91dHxhcm91bmR8cm91Z2hseXxhcHByb3hpbWF0ZWx5fGp1c3QpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUEFUVEVSTl9XSVRIX1BSRUZJWCA9IG5ldyBSZWdFeHAoYCg/OndpdGhpbnxpbnxmb3IpXFxcXHMqYCArXG4gICAgYCg/Oig/OmFib3V0fGFyb3VuZHxyb3VnaGx5fGFwcHJveGltYXRlbHl8anVzdClcXFxccyooPzp+XFxcXHMqKT8pPygke1RJTUVfVU5JVFNfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBQQVRURVJOX1dJVEhfUFJFRklYX1NUUklDVCA9IG5ldyBSZWdFeHAoYCg/OndpdGhpbnxpbnxmb3IpXFxcXHMqYCArXG4gICAgYCg/Oig/OmFib3V0fGFyb3VuZHxyb3VnaGx5fGFwcHJveGltYXRlbHl8anVzdClcXFxccyooPzp+XFxcXHMqKT8pPygke1RJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLnN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBQQVRURVJOX1dJVEhfUFJFRklYX1NUUklDVDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGV4dC5vcHRpb24uZm9yd2FyZERhdGUgPyBQQVRURVJOX1dJVEhfT1BUSU9OQUxfUFJFRklYIDogUEFUVEVSTl9XSVRIX1BSRUZJWDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaFswXS5tYXRjaCgvXmZvclxccyp0aGVcXHMqXFx3Ky8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgaWYgKCF0aW1lVW5pdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiwgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoPzpvblxcXFxzezAsM30pP2AgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICBgKD86YCArXG4gICAgYFxcXFxzezAsM30oPzp0b3xcXFxcLXxcXFxc4oCTfHVudGlsfHRocm91Z2h8dGlsbCk/XFxcXHN7MCwzfWAgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICBcIik/XCIgK1xuICAgIGAoPzotfC98XFxcXHN7MCwzfSg/Om9mKT9cXFxcc3swLDN9KWAgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XCIgK1xuICAgIGAoPzotfC98LD9cXFxcc3swLDN9KWAgK1xuICAgIGAoJHtZRUFSX1BBVFRFUk59KD8hXFxcXHcpKWAgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiwgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzotfC98XFxcXHMqLD9cXFxccyopXCIgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSkoPyFcXFxccyooPzphbXxwbSkpXFxcXHMqYCArXG4gICAgXCIoPzpcIiArXG4gICAgXCIoPzp0b3xcXFxcLSlcXFxccypcIiArXG4gICAgYCgke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KVxcXFxzKmAgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpcIiArXG4gICAgYCg/Oi18L3xcXFxccyosXFxcXHMqfFxcXFxzKylgICtcbiAgICBgKCR7WUVBUl9QQVRURVJOfSlgICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD89XFxcXFd8JCkoPyFcXFxcOlxcXFxkKVwiLCBcImlcIik7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMTtcbmNvbnN0IERBVEVfR1JPVVAgPSAyO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDM7XG5jb25zdCBZRUFSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHNob3VsZFNraXBZZWFyTGlrZURhdGU7XG4gICAgY29uc3RydWN0b3Ioc2hvdWxkU2tpcFllYXJMaWtlRGF0ZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNob3VsZFNraXBZZWFyTGlrZURhdGUgPSBzaG91bGRTa2lwWWVhckxpa2VEYXRlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zaG91bGRTa2lwWWVhckxpa2VEYXRlKSB7XG4gICAgICAgICAgICBpZiAoIW1hdGNoW0RBVEVfVE9fR1JPVVBdICYmICFtYXRjaFtZRUFSX0dST1VQXSAmJiBtYXRjaFtEQVRFX0dST1VQXS5tYXRjaCgvXjJbMC01XSQvKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0XG4gICAgICAgICAgICAuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoe1xuICAgICAgICAgICAgZGF5OiBkYXksXG4gICAgICAgICAgICBtb250aDogbW9udGgsXG4gICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkVGFnKFwicGFyc2VyL0VOTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyXCIpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICByZXN1bHQuc3RhcnQgPSBjb21wb25lbnRzO1xuICAgICAgICByZXN1bHQuZW5kID0gY29tcG9uZW50cy5jbG9uZSgpO1xuICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSwgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoKD86aW4pXFxcXHMqKT9gICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgXFxcXHMqYCArXG4gICAgYCg/OmAgK1xuICAgIGAoPzosfC18b2YpP1xcXFxzKigke1lFQVJfUEFUVEVSTn0pP2AgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPz1bXlxcXFxzXFxcXHddfFxcXFxzK1teMC05XXxcXFxccyskfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IFlFQVJfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5Nb250aE5hbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoTmFtZSA9IG1hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChtYXRjaFswXS5sZW5ndGggPD0gMyAmJiAhRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUllbbW9udGhOYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4ICsgKG1hdGNoW1BSRUZJWF9HUk9VUF0gfHwgXCJcIikubGVuZ3RoLCBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCAxKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFkZFRhZyhcInBhcnNlci9FTk1vbnRoTmFtZVBhcnNlclwiKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21vbnRoTmFtZV07XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIDEsIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTk1vbnRoTmFtZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChbMC05XXs0fSlbLVxcXFwuXFxcXC9cXFxcc11gICtcbiAgICBgKD86KCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSl8KFswLTldezEsMn0pKVstXFxcXC5cXFxcL1xcXFxzXWAgK1xuICAgIGAoWzAtOV17MSwyfSlgICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfTlVNQkVSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTlVNQkVSX0dST1VQID0gMztcbmNvbnN0IERBVEVfTlVNQkVSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOWWVhck1vbnRoRGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHN0cmljdE1vbnRoRGF0ZU9yZGVyO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vbnRoRGF0ZU9yZGVyKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9udGhEYXRlT3JkZXIgPSBzdHJpY3RNb250aERhdGVPcmRlcjtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChtYXRjaFtZRUFSX05VTUJFUl9HUk9VUF0pO1xuICAgICAgICBsZXQgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFURV9OVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgbGV0IG1vbnRoID0gbWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXVxuICAgICAgICAgICAgPyBwYXJzZUludChtYXRjaFtNT05USF9OVU1CRVJfR1JPVVBdKVxuICAgICAgICAgICAgOiBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0cmljdE1vbnRoRGF0ZU9yZGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF5ID49IDEgJiYgZGF5IDw9IDEyKSB7XG4gICAgICAgICAgICAgICAgW21vbnRoLCBkYXldID0gW2RheSwgbW9udGhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkYXkgPCAxIHx8IGRheSA+IDMxKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF5OiBkYXksXG4gICAgICAgICAgICBtb250aDogbW9udGgsXG4gICAgICAgICAgICB5ZWFyOiB5ZWFyLFxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOWWVhck1vbnRoRGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoWzAtOV18MFsxLTldfDFbMDEyXSkvKFswLTldezR9KVwiICsgXCJcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAxO1xuY29uc3QgWUVBUl9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbTU9OVEhfR1JPVVBdKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKS5pbXBseShcImRheVwiLCAxKS5hc3NpZ24oXCJtb250aFwiLCBtb250aCkuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmZ1bmN0aW9uIHByaW1hcnlUaW1lUGF0dGVybihsZWZ0Qm91bmRhcnksIHByaW1hcnlQcmVmaXgsIHByaW1hcnlTdWZmaXgsIGZsYWdzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYCR7bGVmdEJvdW5kYXJ5fWAgK1xuICAgICAgICBgJHtwcmltYXJ5UHJlZml4fWAgK1xuICAgICAgICBgKFxcXFxkezEsNH0pYCArXG4gICAgICAgIGAoPzpgICtcbiAgICAgICAgYCg/OlxcXFwufDp877yaKWAgK1xuICAgICAgICBgKFxcXFxkezEsMn0pYCArXG4gICAgICAgIGAoPzpgICtcbiAgICAgICAgYCg/Ojp877yaKWAgK1xuICAgICAgICBgKFxcXFxkezJ9KWAgK1xuICAgICAgICBgKD86XFxcXC4oXFxcXGR7MSw2fSkpP2AgK1xuICAgICAgICBgKT9gICtcbiAgICAgICAgYCk/YCArXG4gICAgICAgIGAoPzpcXFxccyooYVxcXFwubVxcXFwufHBcXFxcLm1cXFxcLnxhbT98cG0/KSk/YCArXG4gICAgICAgIGAke3ByaW1hcnlTdWZmaXh9YCwgZmxhZ3MpO1xufVxuZnVuY3Rpb24gZm9sbG93aW5nVGltZVBhdHRlbihmb2xsb3dpbmdQaGFzZSwgZm9sbG93aW5nU3VmZml4KSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oJHtmb2xsb3dpbmdQaGFzZX0pYCArXG4gICAgICAgIGAoXFxcXGR7MSw0fSlgICtcbiAgICAgICAgYCg/OmAgK1xuICAgICAgICBgKD86XFxcXC58XFxcXDp8XFxcXO+8milgICtcbiAgICAgICAgYChcXFxcZHsxLDJ9KWAgK1xuICAgICAgICBgKD86YCArXG4gICAgICAgIGAoPzpcXFxcLnxcXFxcOnxcXFxc77yaKWAgK1xuICAgICAgICBgKFxcXFxkezEsMn0pKD86XFxcXC4oXFxcXGR7MSw2fSkpP2AgK1xuICAgICAgICBgKT9gICtcbiAgICAgICAgYCk/YCArXG4gICAgICAgIGAoPzpcXFxccyooYVxcXFwubVxcXFwufHBcXFxcLm1cXFxcLnxhbT98cG0/KSk/YCArXG4gICAgICAgIGAke2ZvbGxvd2luZ1N1ZmZpeH1gLCBcImlcIik7XG59XG5jb25zdCBIT1VSX0dST1VQID0gMjtcbmNvbnN0IE1JTlVURV9HUk9VUCA9IDM7XG5jb25zdCBTRUNPTkRfR1JPVVAgPSA0O1xuY29uc3QgTUlMTElfU0VDT05EX0dST1VQID0gNTtcbmNvbnN0IEFNX1BNX0hPVVJfR1JPVVAgPSA2O1xuZXhwb3J0IGNsYXNzIEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIHBhdHRlcm5GbGFncygpIHtcbiAgICAgICAgcmV0dXJuIFwiaVwiO1xuICAgIH1cbiAgICBwcmltYXJ5UGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIGAoXnxcXFxcc3xUfFxcXFxiKWA7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBgKD8hLykoPz1cXFxcV3wkKWA7XG4gICAgfVxuICAgIGZvbGxvd2luZ1N1ZmZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGAoPyEvKSg/PVxcXFxXfCQpYDtcbiAgICB9XG4gICAgcGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFByaW1hcnlUaW1lUGF0dGVyblRocm91Z2hDYWNoZSgpO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29tcG9uZW50cyA9IHRoaXMuZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCk7XG4gICAgICAgIGlmICghc3RhcnRDb21wb25lbnRzKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15cXGR7NH0vKSkge1xuICAgICAgICAgICAgICAgIG1hdGNoLmluZGV4ICs9IDQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXRjaC5pbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMV0ubGVuZ3RoO1xuICAgICAgICBjb25zdCB0ZXh0ID0gbWF0Y2hbMF0uc3Vic3RyaW5nKG1hdGNoWzFdLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChpbmRleCwgdGV4dCwgc3RhcnRDb21wb25lbnRzKTtcbiAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICBjb25zdCByZW1haW5pbmdUZXh0ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhtYXRjaC5pbmRleCk7XG4gICAgICAgIGNvbnN0IGZvbGxvd2luZ1BhdHRlcm4gPSB0aGlzLmdldEZvbGxvd2luZ1RpbWVQYXR0ZXJuVGhyb3VnaENhY2hlKCk7XG4gICAgICAgIGNvbnN0IGZvbGxvd2luZ01hdGNoID0gZm9sbG93aW5nUGF0dGVybi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICBpZiAodGV4dC5tYXRjaCgvXlxcZHszLDR9LykgJiYgZm9sbG93aW5nTWF0Y2gpIHtcbiAgICAgICAgICAgIGlmIChmb2xsb3dpbmdNYXRjaFswXS5tYXRjaCgvXlxccyooWystXSlcXHMqXFxkezIsNH0kLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb2xsb3dpbmdNYXRjaFswXS5tYXRjaCgvXlxccyooWystXSlcXHMqXFxkezJ9XFxXXFxkezJ9LykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvbGxvd2luZ01hdGNoIHx8XG4gICAgICAgICAgICBmb2xsb3dpbmdNYXRjaFswXS5tYXRjaCgvXlxccyooWystXSlcXHMqXFxkezMsNH0kLykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrQW5kUmV0dXJuV2l0aG91dEZvbGxvd2luZ1BhdHRlcm4ocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuZW5kID0gdGhpcy5leHRyYWN0Rm9sbG93aW5nVGltZUNvbXBvbmVudHMoY29udGV4dCwgZm9sbG93aW5nTWF0Y2gsIHJlc3VsdCk7XG4gICAgICAgIGlmIChyZXN1bHQuZW5kKSB7XG4gICAgICAgICAgICByZXN1bHQudGV4dCArPSBmb2xsb3dpbmdNYXRjaFswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0FuZFJldHVybldpdGhGb2xsb3dpbmdQYXR0ZXJuKHJlc3VsdCk7XG4gICAgfVxuICAgIGV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gsIHN0cmljdCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGxldCBtaW51dGUgPSAwO1xuICAgICAgICBsZXQgbWVyaWRpZW0gPSBudWxsO1xuICAgICAgICBsZXQgaG91ciA9IHBhcnNlSW50KG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgaWYgKGhvdXIgPiAxMDApIHtcbiAgICAgICAgICAgIGlmIChtYXRjaFtIT1VSX0dST1VQXS5sZW5ndGggPT0gNCAmJiBtYXRjaFtNSU5VVEVfR1JPVVBdID09IG51bGwgJiYgIW1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zdHJpY3RNb2RlIHx8IG1hdGNoW01JTlVURV9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWludXRlID0gaG91ciAlIDEwMDtcbiAgICAgICAgICAgIGhvdXIgPSBNYXRoLmZsb29yKGhvdXIgLyAxMDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID4gMjQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtNSU5VVEVfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaFtNSU5VVEVfR1JPVVBdLmxlbmd0aCA9PSAxICYmICFtYXRjaFtBTV9QTV9IT1VSX0dST1VQXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWludXRlID0gcGFyc2VJbnQobWF0Y2hbTUlOVVRFX0dST1VQXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAxMikge1xuICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5QTTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPiAxMilcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGFtcG0gPSBtYXRjaFtBTV9QTV9IT1VSX0dST1VQXVswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKGFtcG0gPT0gXCJhXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtID09IFwicFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5QTTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgaG91cik7XG4gICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW01JTExJX1NFQ09ORF9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgbWlsbGlzZWNvbmQgPSBwYXJzZUludChtYXRjaFtNSUxMSV9TRUNPTkRfR1JPVVBdLnN1YnN0cmluZygwLCAzKSk7XG4gICAgICAgICAgICBpZiAobWlsbGlzZWNvbmQgPj0gMTAwMClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWlsbGlzZWNvbmRcIiwgbWlsbGlzZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtTRUNPTkRfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwic2Vjb25kXCIsIHNlY29uZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxuICAgIGV4dHJhY3RGb2xsb3dpbmdUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCwgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChtYXRjaFtNSUxMSV9TRUNPTkRfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kID0gcGFyc2VJbnQobWF0Y2hbTUlMTElfU0VDT05EX0dST1VQXS5zdWJzdHJpbmcoMCwgMykpO1xuICAgICAgICAgICAgaWYgKG1pbGxpc2Vjb25kID49IDEwMDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbGxpc2Vjb25kXCIsIG1pbGxpc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBwYXJzZUludChtYXRjaFtTRUNPTkRfR1JPVVBdKTtcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gNjApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInNlY29uZFwiLCBzZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBsZXQgbWludXRlID0gMDtcbiAgICAgICAgbGV0IG1lcmlkaWVtID0gLTE7XG4gICAgICAgIGlmIChtYXRjaFtNSU5VVEVfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhvdXIgPiAxMDApIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IGhvdXIgJSAxMDA7XG4gICAgICAgICAgICBob3VyID0gTWF0aC5mbG9vcihob3VyIC8gMTAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWludXRlID49IDYwIHx8IGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFtcG0gPSBtYXRjaFtBTV9QTV9IT1VSX0dST1VQXVswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKGFtcG0gPT0gXCJhXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXBvbmVudHMuaXNDZXJ0YWluKFwiZGF5XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGNvbXBvbmVudHMuZ2V0KFwiZGF5XCIpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSkge1xuICAgICAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PSBNZXJpZGllbS5BTSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpICE9IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiaG91clwiLCByZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgaG91cik7XG4gICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0QXRQTSA9IHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSAmJiByZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSA+IDEyO1xuICAgICAgICAgICAgaWYgKHN0YXJ0QXRQTSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSAtIDEyID4gaG91cikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChob3VyIDw9IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBob3VyICsgMTIpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChob3VyID4gMTIpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA8PSAxMikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBvbmVudHMuZGF0ZSgpLmdldFRpbWUoKSA8IHJlc3VsdC5zdGFydC5kYXRlKCkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGNvbXBvbmVudHMuZ2V0KFwiZGF5XCIpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxuICAgIGNoZWNrQW5kUmV0dXJuV2l0aG91dEZvbGxvd2luZ1BhdHRlcm4ocmVzdWx0KSB7XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXlxcZCQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC50ZXh0Lm1hdGNoKC9eXFxkXFxkXFxkKyQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC50ZXh0Lm1hdGNoKC9cXGRbYXBBUF0kLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVuZGluZ1dpdGhOdW1iZXJzID0gcmVzdWx0LnRleHQubWF0Y2goL1teXFxkOi5dKFxcZFtcXGQuXSspJC8pO1xuICAgICAgICBpZiAoZW5kaW5nV2l0aE51bWJlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZGluZ051bWJlcnMgPSBlbmRpbmdXaXRoTnVtYmVyc1sxXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbmRpbmdOdW1iZXJzLmluY2x1ZGVzKFwiLlwiKSAmJiAhZW5kaW5nTnVtYmVycy5tYXRjaCgvXFxkKFxcLlxcZHsyfSkrJC8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbmRpbmdOdW1iZXJWYWwgPSBwYXJzZUludChlbmRpbmdOdW1iZXJzKTtcbiAgICAgICAgICAgIGlmIChlbmRpbmdOdW1iZXJWYWwgPiAyNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGNoZWNrQW5kUmV0dXJuV2l0aEZvbGxvd2luZ1BhdHRlcm4ocmVzdWx0KSB7XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXlxcZCstXFxkKyQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kaW5nV2l0aE51bWJlcnMgPSByZXN1bHQudGV4dC5tYXRjaCgvW15cXGQ6Ll0oXFxkW1xcZC5dKylcXHMqLVxccyooXFxkW1xcZC5dKykkLyk7XG4gICAgICAgIGlmIChlbmRpbmdXaXRoTnVtYmVycykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3RhcnRpbmdOdW1iZXJzID0gZW5kaW5nV2l0aE51bWJlcnNbMV07XG4gICAgICAgICAgICBjb25zdCBlbmRpbmdOdW1iZXJzID0gZW5kaW5nV2l0aE51bWJlcnNbMl07XG4gICAgICAgICAgICBpZiAoZW5kaW5nTnVtYmVycy5pbmNsdWRlcyhcIi5cIikgJiYgIWVuZGluZ051bWJlcnMubWF0Y2goL1xcZChcXC5cXGR7Mn0pKyQvKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW5kaW5nTnVtYmVyVmFsID0gcGFyc2VJbnQoZW5kaW5nTnVtYmVycyk7XG4gICAgICAgICAgICBjb25zdCBzdGFydGluZ051bWJlclZhbCA9IHBhcnNlSW50KHN0YXJ0aW5nTnVtYmVycyk7XG4gICAgICAgICAgICBpZiAoZW5kaW5nTnVtYmVyVmFsID4gMjQgfHwgc3RhcnRpbmdOdW1iZXJWYWwgPiAyNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGNhY2hlZFByaW1hcnlQcmVmaXggPSBudWxsO1xuICAgIGNhY2hlZFByaW1hcnlTdWZmaXggPSBudWxsO1xuICAgIGNhY2hlZFByaW1hcnlUaW1lUGF0dGVybiA9IG51bGw7XG4gICAgZ2V0UHJpbWFyeVRpbWVQYXR0ZXJuVGhyb3VnaENhY2hlKCkge1xuICAgICAgICBjb25zdCBwcmltYXJ5UHJlZml4ID0gdGhpcy5wcmltYXJ5UHJlZml4KCk7XG4gICAgICAgIGNvbnN0IHByaW1hcnlTdWZmaXggPSB0aGlzLnByaW1hcnlTdWZmaXgoKTtcbiAgICAgICAgaWYgKHRoaXMuY2FjaGVkUHJpbWFyeVByZWZpeCA9PT0gcHJpbWFyeVByZWZpeCAmJiB0aGlzLmNhY2hlZFByaW1hcnlTdWZmaXggPT09IHByaW1hcnlTdWZmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlZFByaW1hcnlUaW1lUGF0dGVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhY2hlZFByaW1hcnlUaW1lUGF0dGVybiA9IHByaW1hcnlUaW1lUGF0dGVybih0aGlzLnByaW1hcnlQYXR0ZXJuTGVmdEJvdW5kYXJ5KCksIHByaW1hcnlQcmVmaXgsIHByaW1hcnlTdWZmaXgsIHRoaXMucGF0dGVybkZsYWdzKCkpO1xuICAgICAgICB0aGlzLmNhY2hlZFByaW1hcnlQcmVmaXggPSBwcmltYXJ5UHJlZml4O1xuICAgICAgICB0aGlzLmNhY2hlZFByaW1hcnlTdWZmaXggPSBwcmltYXJ5U3VmZml4O1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQcmltYXJ5VGltZVBhdHRlcm47XG4gICAgfVxuICAgIGNhY2hlZEZvbGxvd2luZ1BoYXNlID0gbnVsbDtcbiAgICBjYWNoZWRGb2xsb3dpbmdTdWZmaXggPSBudWxsO1xuICAgIGNhY2hlZEZvbGxvd2luZ1RpbWVQYXR0ZW4gPSBudWxsO1xuICAgIGdldEZvbGxvd2luZ1RpbWVQYXR0ZXJuVGhyb3VnaENhY2hlKCkge1xuICAgICAgICBjb25zdCBmb2xsb3dpbmdQaGFzZSA9IHRoaXMuZm9sbG93aW5nUGhhc2UoKTtcbiAgICAgICAgY29uc3QgZm9sbG93aW5nU3VmZml4ID0gdGhpcy5mb2xsb3dpbmdTdWZmaXgoKTtcbiAgICAgICAgaWYgKHRoaXMuY2FjaGVkRm9sbG93aW5nUGhhc2UgPT09IGZvbGxvd2luZ1BoYXNlICYmIHRoaXMuY2FjaGVkRm9sbG93aW5nU3VmZml4ID09PSBmb2xsb3dpbmdTdWZmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEZvbGxvd2luZ1RpbWVQYXR0ZW47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZWRGb2xsb3dpbmdUaW1lUGF0dGVuID0gZm9sbG93aW5nVGltZVBhdHRlbihmb2xsb3dpbmdQaGFzZSwgZm9sbG93aW5nU3VmZml4KTtcbiAgICAgICAgdGhpcy5jYWNoZWRGb2xsb3dpbmdQaGFzZSA9IGZvbGxvd2luZ1BoYXNlO1xuICAgICAgICB0aGlzLmNhY2hlZEZvbGxvd2luZ1N1ZmZpeCA9IGZvbGxvd2luZ1N1ZmZpeDtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkRm9sbG93aW5nVGltZVBhdHRlbjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKHN0cmljdE1vZGUpO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfHRvfHVudGlsfHRocm91Z2h8dGlsbHxcXFxcPylcXFxccypcIjtcbiAgICB9XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86YXR8ZnJvbSlcXFxccyopPz9cIjtcbiAgICB9XG4gICAgcHJpbWFyeVN1ZmZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86XFxcXHMqKD86b1xcXFxXKmNsb2NrfGF0XFxcXHMqbmlnaHR8aW5cXFxccyp0aGVcXFxccyooPzptb3JuaW5nfGFmdGVybm9vbikpKT8oPyEvKSg/PVxcXFxXfCQpXCI7XG4gICAgfVxuICAgIGV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICBpZiAoIWNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcIm5pZ2h0XCIpKSB7XG4gICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgaWYgKGhvdXIgPj0gNiAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgY29tcG9uZW50cy5nZXQoXCJob3VyXCIpICsgMTIpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbMF0uZW5kc1dpdGgoXCJhZnRlcm5vb25cIikpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgY29uc3QgaG91ciA9IGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKTtcbiAgICAgICAgICAgIGlmIChob3VyID49IDAgJiYgaG91ciA8PSA2KSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbMF0uZW5kc1dpdGgoXCJtb3JuaW5nXCIpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHMuYWRkVGFnKFwicGFyc2VyL0VOVGltZUV4cHJlc3Npb25QYXJzZXJcIik7XG4gICAgfVxuICAgIGV4dHJhY3RGb2xsb3dpbmdUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCwgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGZvbGxvd2luZ0NvbXBvbmVudHMgPSBzdXBlci5leHRyYWN0Rm9sbG93aW5nVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gsIHJlc3VsdCk7XG4gICAgICAgIGlmIChmb2xsb3dpbmdDb21wb25lbnRzKSB7XG4gICAgICAgICAgICBmb2xsb3dpbmdDb21wb25lbnRzLmFkZFRhZyhcInBhcnNlci9FTlRpbWVFeHByZXNzaW9uUGFyc2VyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb2xsb3dpbmdDb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKCR7VElNRV9VTklUU19QQVRURVJOfSlcXFxcc3swLDV9KD86YWdvfGJlZm9yZXxlYXJsaWVyKSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgU1RSSUNUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHtUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmFnb3xiZWZvcmV8ZWFybGllcikoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaWN0TW9kZSA/IFNUUklDVF9QQVRURVJOIDogUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGlmICghZHVyYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHJldmVyc2VEdXJhdGlvbihkdXJhdGlvbikpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmxhdGVyfGFmdGVyfGZyb20gbm93fGhlbmNlZm9ydGh8Zm9yd2FyZHxvdXQpYCArIFwiKD89KD86XFxcXFd8JCkpXCIsIFwiaVwiKTtcbmNvbnN0IFNUUklDVF9QQVRURVJOID0gbmV3IFJlZ0V4cChgKCR7VElNRV9VTklUU19OT19BQkJSX1BBVFRFUk59KVxcXFxzezAsNX0obGF0ZXJ8YWZ0ZXJ8ZnJvbSBub3cpKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBHUk9VUF9OVU1fVElNRVVOSVRTID0gMTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpY3RNb2RlID8gU1RSSUNUX1BBVFRFUk4gOiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFtHUk9VUF9OVU1fVElNRVVOSVRTXSk7XG4gICAgICAgIGlmICghdGltZVVuaXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcy5tYXAiLCJleHBvcnQgY2xhc3MgRmlsdGVyIHtcbiAgICByZWZpbmUoY29udGV4dCwgcmVzdWx0cykge1xuICAgICAgICByZXR1cm4gcmVzdWx0cy5maWx0ZXIoKHIpID0+IHRoaXMuaXNWYWxpZChjb250ZXh0LCByKSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE1lcmdpbmdSZWZpbmVyIHtcbiAgICByZWZpbmUoY29udGV4dCwgcmVzdWx0cykge1xuICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXJnZWRSZXN1bHRzID0gW107XG4gICAgICAgIGxldCBjdXJSZXN1bHQgPSByZXN1bHRzWzBdO1xuICAgICAgICBsZXQgbmV4dFJlc3VsdCA9IG51bGw7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbmV4dFJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgICAgICBjb25zdCB0ZXh0QmV0d2VlbiA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcoY3VyUmVzdWx0LmluZGV4ICsgY3VyUmVzdWx0LnRleHQubGVuZ3RoLCBuZXh0UmVzdWx0LmluZGV4KTtcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1clJlc3VsdCwgbmV4dFJlc3VsdCwgY29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICBtZXJnZWRSZXN1bHRzLnB1c2goY3VyUmVzdWx0KTtcbiAgICAgICAgICAgICAgICBjdXJSZXN1bHQgPSBuZXh0UmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdCA9IGN1clJlc3VsdDtcbiAgICAgICAgICAgICAgICBjb25zdCByaWdodCA9IG5leHRSZXN1bHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUmVzdWx0ID0gdGhpcy5tZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGxlZnQsIHJpZ2h0LCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmRlYnVnKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBtZXJnZWQgJHtsZWZ0fSBhbmQgJHtyaWdodH0gaW50byAke21lcmdlZFJlc3VsdH1gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjdXJSZXN1bHQgPSBtZXJnZWRSZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1clJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBtZXJnZWRSZXN1bHRzLnB1c2goY3VyUmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVyZ2VkUmVzdWx0cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hYnN0cmFjdFJlZmluZXJzLmpzLm1hcCIsImltcG9ydCB7IE1lcmdpbmdSZWZpbmVyIH0gZnJvbSBcIi4uL2Fic3RyYWN0UmVmaW5lcnMuanNcIjtcbmltcG9ydCB7IGFkZER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIE1lcmdpbmdSZWZpbmVyIHtcbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuICFjdXJyZW50UmVzdWx0LmVuZCAmJiAhbmV4dFJlc3VsdC5lbmQgJiYgdGV4dEJldHdlZW4ubWF0Y2godGhpcy5wYXR0ZXJuQmV0d2VlbigpKSAhPSBudWxsO1xuICAgIH1cbiAgICBtZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGZyb21SZXN1bHQsIHRvUmVzdWx0KSB7XG4gICAgICAgIGlmICghZnJvbVJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkgJiYgIXRvUmVzdWx0LnN0YXJ0LmlzT25seVdlZWtkYXlDb21wb25lbnQoKSkge1xuICAgICAgICAgICAgdG9SZXN1bHQuc3RhcnQuZ2V0Q2VydGFpbkNvbXBvbmVudHMoKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWZyb21SZXN1bHQuc3RhcnQuaXNDZXJ0YWluKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbVJlc3VsdC5zdGFydC5pbXBseShrZXksIHRvUmVzdWx0LnN0YXJ0LmdldChrZXkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZyb21SZXN1bHQuc3RhcnQuZ2V0Q2VydGFpbkNvbXBvbmVudHMoKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRvUmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmltcGx5KGtleSwgZnJvbVJlc3VsdC5zdGFydC5nZXQoa2V5KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZyb21SZXN1bHQuc3RhcnQuZGF0ZSgpID4gdG9SZXN1bHQuc3RhcnQuZGF0ZSgpKSB7XG4gICAgICAgICAgICBsZXQgZnJvbURhdGUgPSBmcm9tUmVzdWx0LnN0YXJ0LmRhdGUoKTtcbiAgICAgICAgICAgIGxldCB0b0RhdGUgPSB0b1Jlc3VsdC5zdGFydC5kYXRlKCk7XG4gICAgICAgICAgICBpZiAodG9SZXN1bHQuc3RhcnQuaXNPbmx5V2Vla2RheUNvbXBvbmVudCgpICYmIGFkZER1cmF0aW9uKHRvRGF0ZSwgeyBkYXk6IDcgfSkgPiBmcm9tRGF0ZSkge1xuICAgICAgICAgICAgICAgIHRvRGF0ZSA9IGFkZER1cmF0aW9uKHRvRGF0ZSwgeyBkYXk6IDcgfSk7XG4gICAgICAgICAgICAgICAgdG9SZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgdG9EYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgdG9SZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCB0b0RhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB0b0RhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmcm9tUmVzdWx0LnN0YXJ0LmlzT25seVdlZWtkYXlDb21wb25lbnQoKSAmJiBhZGREdXJhdGlvbihmcm9tRGF0ZSwgeyBkYXk6IC03IH0pIDwgdG9EYXRlKSB7XG4gICAgICAgICAgICAgICAgZnJvbURhdGUgPSBhZGREdXJhdGlvbihmcm9tRGF0ZSwgeyBkYXk6IC03IH0pO1xuICAgICAgICAgICAgICAgIGZyb21SZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgZnJvbURhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgZnJvbURhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgICAgIGZyb21SZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIGZyb21EYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodG9SZXN1bHQuc3RhcnQuaXNEYXRlV2l0aFVua25vd25ZZWFyKCkgJiYgYWRkRHVyYXRpb24odG9EYXRlLCB7IHllYXI6IDEgfSkgPiBmcm9tRGF0ZSkge1xuICAgICAgICAgICAgICAgIHRvRGF0ZSA9IGFkZER1cmF0aW9uKHRvRGF0ZSwgeyB5ZWFyOiAxIH0pO1xuICAgICAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB0b0RhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmcm9tUmVzdWx0LnN0YXJ0LmlzRGF0ZVdpdGhVbmtub3duWWVhcigpICYmIGFkZER1cmF0aW9uKGZyb21EYXRlLCB7IHllYXI6IC0xIH0pIDwgdG9EYXRlKSB7XG4gICAgICAgICAgICAgICAgZnJvbURhdGUgPSBhZGREdXJhdGlvbihmcm9tRGF0ZSwgeyB5ZWFyOiAtMSB9KTtcbiAgICAgICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBmcm9tRGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIFt0b1Jlc3VsdCwgZnJvbVJlc3VsdF0gPSBbZnJvbVJlc3VsdCwgdG9SZXN1bHRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZyb21SZXN1bHQuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gZnJvbVJlc3VsdC5zdGFydDtcbiAgICAgICAgcmVzdWx0LmVuZCA9IHRvUmVzdWx0LnN0YXJ0O1xuICAgICAgICByZXN1bHQuaW5kZXggPSBNYXRoLm1pbihmcm9tUmVzdWx0LmluZGV4LCB0b1Jlc3VsdC5pbmRleCk7XG4gICAgICAgIGlmIChmcm9tUmVzdWx0LmluZGV4IDwgdG9SZXN1bHQuaW5kZXgpIHtcbiAgICAgICAgICAgIHJlc3VsdC50ZXh0ID0gZnJvbVJlc3VsdC50ZXh0ICsgdGV4dEJldHdlZW4gKyB0b1Jlc3VsdC50ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnRleHQgPSB0b1Jlc3VsdC50ZXh0ICsgdGV4dEJldHdlZW4gKyBmcm9tUmVzdWx0LnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoodG98LXzigJN8dW50aWx8dGhyb3VnaHx0aWxsKVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5NZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJEYXRlIH0gZnJvbSBcIi4uL3V0aWxzL2RhdGVzLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEYXRlVGltZVJlc3VsdChkYXRlUmVzdWx0LCB0aW1lUmVzdWx0KSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZGF0ZVJlc3VsdC5jbG9uZSgpO1xuICAgIGNvbnN0IGJlZ2luRGF0ZSA9IGRhdGVSZXN1bHQuc3RhcnQ7XG4gICAgY29uc3QgYmVnaW5UaW1lID0gdGltZVJlc3VsdC5zdGFydDtcbiAgICByZXN1bHQuc3RhcnQgPSBtZXJnZURhdGVUaW1lQ29tcG9uZW50KGJlZ2luRGF0ZSwgYmVnaW5UaW1lKTtcbiAgICBpZiAoZGF0ZVJlc3VsdC5lbmQgIT0gbnVsbCB8fCB0aW1lUmVzdWx0LmVuZCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSBkYXRlUmVzdWx0LmVuZCA9PSBudWxsID8gZGF0ZVJlc3VsdC5zdGFydCA6IGRhdGVSZXN1bHQuZW5kO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gdGltZVJlc3VsdC5lbmQgPT0gbnVsbCA/IHRpbWVSZXN1bHQuc3RhcnQgOiB0aW1lUmVzdWx0LmVuZDtcbiAgICAgICAgY29uc3QgZW5kRGF0ZVRpbWUgPSBtZXJnZURhdGVUaW1lQ29tcG9uZW50KGVuZERhdGUsIGVuZFRpbWUpO1xuICAgICAgICBpZiAoZGF0ZVJlc3VsdC5lbmQgPT0gbnVsbCAmJiBlbmREYXRlVGltZS5kYXRlKCkuZ2V0VGltZSgpIDwgcmVzdWx0LnN0YXJ0LmRhdGUoKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZShlbmREYXRlVGltZS5kYXRlKCkuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIG5leHREYXkuc2V0RGF0ZShuZXh0RGF5LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgaWYgKGVuZERhdGVUaW1lLmlzQ2VydGFpbihcImRheVwiKSkge1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGVuZERhdGVUaW1lLCBuZXh0RGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhckRhdGUoZW5kRGF0ZVRpbWUsIG5leHREYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5lbmQgPSBlbmREYXRlVGltZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURhdGVUaW1lQ29tcG9uZW50KGRhdGVDb21wb25lbnQsIHRpbWVDb21wb25lbnQpIHtcbiAgICBjb25zdCBkYXRlVGltZUNvbXBvbmVudCA9IGRhdGVDb21wb25lbnQuY2xvbmUoKTtcbiAgICBpZiAodGltZUNvbXBvbmVudC5pc0NlcnRhaW4oXCJob3VyXCIpKSB7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmFzc2lnbihcImhvdXJcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJob3VyXCIpKTtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuYXNzaWduKFwibWludXRlXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWludXRlXCIpKTtcbiAgICAgICAgaWYgKHRpbWVDb21wb25lbnQuaXNDZXJ0YWluKFwic2Vjb25kXCIpKSB7XG4gICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJzZWNvbmRcIikpO1xuICAgICAgICAgICAgaWYgKHRpbWVDb21wb25lbnQuaXNDZXJ0YWluKFwibWlsbGlzZWNvbmRcIikpIHtcbiAgICAgICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJtaWxsaXNlY29uZFwiLCB0aW1lQ29tcG9uZW50LmdldChcIm1pbGxpc2Vjb25kXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJtaWxsaXNlY29uZFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCB0aW1lQ29tcG9uZW50LmdldChcInNlY29uZFwiKSk7XG4gICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWlsbGlzZWNvbmRcIikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJob3VyXCIpKTtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJtaW51dGVcIikpO1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCB0aW1lQ29tcG9uZW50LmdldChcInNlY29uZFwiKSk7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJtaWxsaXNlY29uZFwiKSk7XG4gICAgfVxuICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcInRpbWV6b25lT2Zmc2V0XCIpKSB7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmFzc2lnbihcInRpbWV6b25lT2Zmc2V0XCIsIHRpbWVDb21wb25lbnQuZ2V0KFwidGltZXpvbmVPZmZzZXRcIikpO1xuICAgIH1cbiAgICBjb25zdCBkYXRlSGFzTWVhbmluZ2Z1bE1lcmlkaWVtID0gZGF0ZUNvbXBvbmVudC5nZXQoXCJtZXJpZGllbVwiKSAhPSBudWxsICYmXG4gICAgICAgIChkYXRlQ29tcG9uZW50LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpIHx8XG4gICAgICAgICAgICBBcnJheS5mcm9tKGRhdGVDb21wb25lbnQudGFncygpKS5zb21lKCh0KSA9PiB0LnN0YXJ0c1dpdGgoXCJjYXN1YWxSZWZlcmVuY2UvXCIpKSk7XG4gICAgaWYgKHRpbWVDb21wb25lbnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikpIHtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuYXNzaWduKFwibWVyaWRpZW1cIiwgdGltZUNvbXBvbmVudC5nZXQoXCJtZXJpZGllbVwiKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRpbWVDb21wb25lbnQuZ2V0KFwibWVyaWRpZW1cIikgIT0gbnVsbCAmJiAhZGF0ZUhhc01lYW5pbmdmdWxNZXJpZGllbSkge1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWVyaWRpZW1cIikpO1xuICAgIH1cbiAgICBpZiAoZGF0ZVRpbWVDb21wb25lbnQuZ2V0KFwibWVyaWRpZW1cIikgPT0gTWVyaWRpZW0uUE0gJiYgZGF0ZVRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSA8IDEyKSB7XG4gICAgICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcImhvdXJcIikpIHtcbiAgICAgICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmFzc2lnbihcImhvdXJcIiwgZGF0ZVRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmltcGx5KFwiaG91clwiLCBkYXRlVGltZUNvbXBvbmVudC5nZXQoXCJob3VyXCIpICsgMTIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRhdGVUaW1lQ29tcG9uZW50LmFkZFRhZ3MoZGF0ZUNvbXBvbmVudC50YWdzKCkpO1xuICAgIGRhdGVUaW1lQ29tcG9uZW50LmFkZFRhZ3ModGltZUNvbXBvbmVudC50YWdzKCkpO1xuICAgIHJldHVybiBkYXRlVGltZUNvbXBvbmVudDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdpbmdDYWxjdWxhdGlvbi5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi9hYnN0cmFjdFJlZmluZXJzLmpzXCI7XG5pbXBvcnQgeyBtZXJnZURhdGVUaW1lUmVzdWx0IH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL21lcmdpbmdDYWxjdWxhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIE1lcmdpbmdSZWZpbmVyIHtcbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuICgoKGN1cnJlbnRSZXN1bHQuc3RhcnQuaXNPbmx5RGF0ZSgpICYmIG5leHRSZXN1bHQuc3RhcnQuaXNPbmx5VGltZSgpKSB8fFxuICAgICAgICAgICAgKG5leHRSZXN1bHQuc3RhcnQuaXNPbmx5RGF0ZSgpICYmIGN1cnJlbnRSZXN1bHQuc3RhcnQuaXNPbmx5VGltZSgpKSkgJiZcbiAgICAgICAgICAgIHRleHRCZXR3ZWVuLm1hdGNoKHRoaXMucGF0dGVybkJldHdlZW4oKSkgIT0gbnVsbCk7XG4gICAgfVxuICAgIG1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjdXJyZW50UmVzdWx0LnN0YXJ0LmlzT25seURhdGUoKVxuICAgICAgICAgICAgPyBtZXJnZURhdGVUaW1lUmVzdWx0KGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpXG4gICAgICAgICAgICA6IG1lcmdlRGF0ZVRpbWVSZXN1bHQobmV4dFJlc3VsdCwgY3VycmVudFJlc3VsdCk7XG4gICAgICAgIHJlc3VsdC5pbmRleCA9IGN1cnJlbnRSZXN1bHQuaW5kZXg7XG4gICAgICAgIHJlc3VsdC50ZXh0ID0gY3VycmVudFJlc3VsdC50ZXh0ICsgdGV4dEJldHdlZW4gKyBuZXh0UmVzdWx0LnRleHQ7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeXFxcXHMqKFR8YXR8YWZ0ZXJ8YmVmb3JlfG9ufG9mfCx8LXxcXFxcLnziiJl8Oik/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTk1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IHRvVGltZXpvbmVPZmZzZXQgfSBmcm9tIFwiLi4vLi4vdGltZXpvbmUuanNcIjtcbmNvbnN0IFRJTUVaT05FX05BTUVfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCJeXFxcXHMqLD9cXFxccypcXFxcKD8oW0EtWl17Miw0fSlcXFxcKT8oPz1cXFxcV3wkKVwiLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHRyYWN0VGltZXpvbmVBYmJyUmVmaW5lciB7XG4gICAgdGltZXpvbmVPdmVycmlkZXM7XG4gICAgY29uc3RydWN0b3IodGltZXpvbmVPdmVycmlkZXMpIHtcbiAgICAgICAgdGhpcy50aW1lem9uZU92ZXJyaWRlcyA9IHRpbWV6b25lT3ZlcnJpZGVzO1xuICAgIH1cbiAgICByZWZpbmUoY29udGV4dCwgcmVzdWx0cykge1xuICAgICAgICBjb25zdCB0aW1lem9uZU92ZXJyaWRlcyA9IGNvbnRleHQub3B0aW9uLnRpbWV6b25lcyA/PyB7fTtcbiAgICAgICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcocmVzdWx0LmluZGV4ICsgcmVzdWx0LnRleHQubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gVElNRVpPTkVfTkFNRV9QQVRURVJOLmV4ZWMoc3VmZml4KTtcbiAgICAgICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0aW1lem9uZUFiYnIgPSBtYXRjaFsxXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3QgcmVmRGF0ZSA9IHJlc3VsdC5zdGFydC5kYXRlKCkgPz8gcmVzdWx0LnJlZkRhdGUgPz8gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHR6T3ZlcnJpZGVzID0geyAuLi50aGlzLnRpbWV6b25lT3ZlcnJpZGVzLCAuLi50aW1lem9uZU92ZXJyaWRlcyB9O1xuICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkVGltZXpvbmVPZmZzZXQgPSB0b1RpbWV6b25lT2Zmc2V0KHRpbWV6b25lQWJiciwgcmVmRGF0ZSwgdHpPdmVycmlkZXMpO1xuICAgICAgICAgICAgaWYgKGV4dHJhY3RlZFRpbWV6b25lT2Zmc2V0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXh0cmFjdGluZyB0aW1lem9uZTogJyR7dGltZXpvbmVBYmJyfScgaW50bzogJHtleHRyYWN0ZWRUaW1lem9uZU9mZnNldH0gZm9yOiAke3Jlc3VsdC5zdGFydH1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFRpbWV6b25lT2Zmc2V0ID0gcmVzdWx0LnN0YXJ0LmdldChcInRpbWV6b25lT2Zmc2V0XCIpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRUaW1lem9uZU9mZnNldCAhPT0gbnVsbCAmJiBleHRyYWN0ZWRUaW1lem9uZU9mZnNldCAhPSBjdXJyZW50VGltZXpvbmVPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcInRpbWV6b25lT2Zmc2V0XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWV6b25lQWJiciAhPSBtYXRjaFsxXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc09ubHlEYXRlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGltZXpvbmVBYmJyICE9IG1hdGNoWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQudGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcInRpbWV6b25lT2Zmc2V0XCIpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInRpbWV6b25lT2Zmc2V0XCIsIGV4dHJhY3RlZFRpbWV6b25lT2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuZW5kICE9IG51bGwgJiYgIXJlc3VsdC5lbmQuaXNDZXJ0YWluKFwidGltZXpvbmVPZmZzZXRcIikpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcInRpbWV6b25lT2Zmc2V0XCIsIGV4dHJhY3RlZFRpbWV6b25lT2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUV4dHJhY3RUaW1lem9uZUFiYnJSZWZpbmVyLmpzLm1hcCIsImNvbnN0IFRJTUVaT05FX09GRlNFVF9QQVRURVJOID0gbmV3IFJlZ0V4cChcIl5cXFxccyooPzpcXFxcKD8oPzpHTVR8VVRDKVxcXFxzPyk/KFsrLV0pKFxcXFxkezEsMn0pKD86Oj8oXFxcXGR7Mn0pKT9cXFxcKT9cIiwgXCJpXCIpO1xuY29uc3QgVElNRVpPTkVfT0ZGU0VUX1NJR05fR1JPVVAgPSAxO1xuY29uc3QgVElNRVpPTkVfT0ZGU0VUX0hPVVJfT0ZGU0VUX0dST1VQID0gMjtcbmNvbnN0IFRJTUVaT05FX09GRlNFVF9NSU5VVEVfT0ZGU0VUX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIge1xuICAgIHJlZmluZShjb250ZXh0LCByZXN1bHRzKSB7XG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcInRpbWV6b25lT2Zmc2V0XCIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3VmZml4ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHQudGV4dC5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBUSU1FWk9ORV9PRkZTRVRfUEFUVEVSTi5leGVjKHN1ZmZpeCk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEV4dHJhY3RpbmcgdGltZXpvbmU6ICcke21hdGNoWzBdfScgaW50byA6ICR7cmVzdWx0fWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBob3VyT2Zmc2V0ID0gcGFyc2VJbnQobWF0Y2hbVElNRVpPTkVfT0ZGU0VUX0hPVVJfT0ZGU0VUX0dST1VQXSk7XG4gICAgICAgICAgICBjb25zdCBtaW51dGVPZmZzZXQgPSBwYXJzZUludChtYXRjaFtUSU1FWk9ORV9PRkZTRVRfTUlOVVRFX09GRlNFVF9HUk9VUF0gfHwgXCIwXCIpO1xuICAgICAgICAgICAgbGV0IHRpbWV6b25lT2Zmc2V0ID0gaG91ck9mZnNldCAqIDYwICsgbWludXRlT2Zmc2V0O1xuICAgICAgICAgICAgaWYgKHRpbWV6b25lT2Zmc2V0ID4gMTQgKiA2MCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFtUSU1FWk9ORV9PRkZTRVRfU0lHTl9HUk9VUF0gPT09IFwiLVwiKSB7XG4gICAgICAgICAgICAgICAgdGltZXpvbmVPZmZzZXQgPSAtdGltZXpvbmVPZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0LmVuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCB0aW1lem9uZU9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgdGltZXpvbmVPZmZzZXQpO1xuICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzLm1hcCIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIE92ZXJsYXBSZW1vdmFsUmVmaW5lciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyZWRSZXN1bHRzID0gW107XG4gICAgICAgIGxldCBwcmV2UmVzdWx0ID0gcmVzdWx0c1swXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRzW2ldO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5pbmRleCA+PSBwcmV2UmVzdWx0LmluZGV4ICsgcHJldlJlc3VsdC50ZXh0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkUmVzdWx0cy5wdXNoKHByZXZSZXN1bHQpO1xuICAgICAgICAgICAgICAgIHByZXZSZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQga2VwdCA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVtb3ZlZCA9IG51bGw7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnRleHQubGVuZ3RoID4gcHJldlJlc3VsdC50ZXh0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGtlcHQgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHByZXZSZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBrZXB0ID0gcHJldlJlc3VsdDtcbiAgICAgICAgICAgICAgICByZW1vdmVkID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSByZW1vdmUgJHtyZW1vdmVkfSBieSAke2tlcHR9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByZXZSZXN1bHQgPSBrZXB0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2UmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkUmVzdWx0cy5wdXNoKHByZXZSZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZFJlc3VsdHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T3ZlcmxhcFJlbW92YWxSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IFdlZWtkYXkgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uL3Jlc3VsdHMuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShyZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKSB7XG4gICAgY29uc3QgcmVmRGF0ZSA9IHJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICBjb25zdCBkYXlzVG9XZWVrZGF5ID0gZ2V0RGF5c1RvV2Vla2RheShyZWZEYXRlLCB3ZWVrZGF5LCBtb2RpZmllcik7XG4gICAgbGV0IGNvbXBvbmVudHMgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlKTtcbiAgICBjb21wb25lbnRzID0gY29tcG9uZW50cy5hZGREdXJhdGlvbkFzSW1wbGllZCh7IGRheTogZGF5c1RvV2Vla2RheSB9KTtcbiAgICBjb21wb25lbnRzLmFzc2lnbihcIndlZWtkYXlcIiwgd2Vla2RheSk7XG4gICAgcmV0dXJuIGNvbXBvbmVudHM7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5c1RvV2Vla2RheShyZWZEYXRlLCB3ZWVrZGF5LCBtb2RpZmllcikge1xuICAgIGNvbnN0IHJlZldlZWtkYXkgPSByZWZEYXRlLmdldERheSgpO1xuICAgIHN3aXRjaCAobW9kaWZpZXIpIHtcbiAgICAgICAgY2FzZSBcInRoaXNcIjpcbiAgICAgICAgICAgIHJldHVybiBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCB3ZWVrZGF5KTtcbiAgICAgICAgY2FzZSBcImxhc3RcIjpcbiAgICAgICAgICAgIHJldHVybiBnZXRCYWNrd2FyZERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSk7XG4gICAgICAgIGNhc2UgXCJuZXh0XCI6XG4gICAgICAgICAgICBpZiAocmVmV2Vla2RheSA9PSBXZWVrZGF5LlNVTkRBWSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5ID09IFdlZWtkYXkuU1VOREFZID8gNyA6IHdlZWtkYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVmV2Vla2RheSA9PSBXZWVrZGF5LlNBVFVSREFZKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdlZWtkYXkgPT0gV2Vla2RheS5TQVRVUkRBWSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDc7XG4gICAgICAgICAgICAgICAgaWYgKHdlZWtkYXkgPT0gV2Vla2RheS5TVU5EQVkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICAgICAgICAgIHJldHVybiAxICsgd2Vla2RheTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgcmVmV2Vla2RheSAmJiB3ZWVrZGF5ICE9IFdlZWtkYXkuU1VOREFZKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldERheXNGb3J3YXJkVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldERheXNGb3J3YXJkVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpICsgNztcbiAgICAgICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdldERheXNUb1dlZWtkYXlDbG9zZXN0KHJlZkRhdGUsIHdlZWtkYXkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERheXNUb1dlZWtkYXlDbG9zZXN0KHJlZkRhdGUsIHdlZWtkYXkpIHtcbiAgICBjb25zdCBiYWNrd2FyZCA9IGdldEJhY2t3YXJkRGF5c1RvV2Vla2RheShyZWZEYXRlLCB3ZWVrZGF5KTtcbiAgICBjb25zdCBmb3J3YXJkID0gZ2V0RGF5c0ZvcndhcmRUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSk7XG4gICAgcmV0dXJuIGZvcndhcmQgPCAtYmFja3dhcmQgPyBmb3J3YXJkIDogYmFja3dhcmQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5c0ZvcndhcmRUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSkge1xuICAgIGNvbnN0IHJlZldlZWtkYXkgPSByZWZEYXRlLmdldERheSgpO1xuICAgIGxldCBmb3J3YXJkQ291bnQgPSB3ZWVrZGF5IC0gcmVmV2Vla2RheTtcbiAgICBpZiAoZm9yd2FyZENvdW50IDwgMCkge1xuICAgICAgICBmb3J3YXJkQ291bnQgKz0gNztcbiAgICB9XG4gICAgcmV0dXJuIGZvcndhcmRDb3VudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWNrd2FyZERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSkge1xuICAgIGNvbnN0IHJlZldlZWtkYXkgPSByZWZEYXRlLmdldERheSgpO1xuICAgIGxldCBiYWNrd2FyZENvdW50ID0gd2Vla2RheSAtIHJlZldlZWtkYXk7XG4gICAgaWYgKGJhY2t3YXJkQ291bnQgPj0gMCkge1xuICAgICAgICBiYWNrd2FyZENvdW50IC09IDc7XG4gICAgfVxuICAgIHJldHVybiBiYWNrd2FyZENvdW50O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2Vla2RheXMuanMubWFwIiwiaW1wb3J0ICogYXMgZGF0ZXMgZnJvbSBcIi4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgeyBpbXBseVNpbWlsYXJEYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF5c0ZvcndhcmRUb1dlZWtkYXkgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcndhcmREYXRlUmVmaW5lciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgaWYgKCFjb250ZXh0Lm9wdGlvbi5mb3J3YXJkRGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGxldCByZWZEYXRlID0gY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmlzT25seVRpbWUoKSAmJiBjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50ID4gcmVzdWx0LnN0YXJ0LmRhdGUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZkRhdGUgPSBjb250ZXh0LnJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWZGb2xsb3dpbmdEYXkgPSBuZXcgRGF0ZShyZWZEYXRlKTtcbiAgICAgICAgICAgICAgICByZWZGb2xsb3dpbmdEYXkuc2V0RGF0ZShyZWZGb2xsb3dpbmdEYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgZGF0ZXMuaW1wbHlTaW1pbGFyRGF0ZShyZXN1bHQuc3RhcnQsIHJlZkZvbGxvd2luZ0RheSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gYWRqdXN0ZWQgJHtyZXN1bHR9IHRpbWUgZnJvbSB0aGUgcmVmIGRhdGUgKCR7cmVmRGF0ZX0pIHRvIHRoZSBmb2xsb3dpbmcgZGF5ICgke3JlZkZvbGxvd2luZ0RheX0pYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQgJiYgcmVzdWx0LmVuZC5pc09ubHlUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZXMuaW1wbHlTaW1pbGFyRGF0ZShyZXN1bHQuZW5kLCByZWZGb2xsb3dpbmdEYXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmRhdGUoKSA+IHJlc3VsdC5lbmQuZGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZGb2xsb3dpbmdEYXkuc2V0RGF0ZShyZWZGb2xsb3dpbmdEYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlcy5pbXBseVNpbWlsYXJEYXRlKHJlc3VsdC5lbmQsIHJlZkZvbGxvd2luZ0RheSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmlzT25seVdlZWtkYXlDb21wb25lbnQoKSAmJiByZWZEYXRlID4gcmVzdWx0LnN0YXJ0LmRhdGUoKSkge1xuICAgICAgICAgICAgICAgIGxldCBkYXlzVG9BZGQgPSBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCByZXN1bHQuc3RhcnQuZ2V0KFwid2Vla2RheVwiKSkgfHwgNztcbiAgICAgICAgICAgICAgICBjb25zdCBmb3J3YXJkZWRXZWVrZGF5ID0gYWRkRHVyYXRpb24ocmVmRGF0ZSwgeyBkYXk6IGRheXNUb0FkZCB9KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJEYXRlKHJlc3VsdC5zdGFydCwgZm9yd2FyZGVkV2Vla2RheSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gYWRqdXN0ZWQgJHtyZXN1bHR9IHdlZWtkYXkgKCR7cmVzdWx0LnN0YXJ0fSlgKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVuZCAmJiByZXN1bHQuc3RhcnQuZGF0ZSgpID4gcmVzdWx0LmVuZC5kYXRlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRheXNUb0FkZCA9IGdldERheXNGb3J3YXJkVG9XZWVrZGF5KHJlZkRhdGUsIHJlc3VsdC5zdGFydC5nZXQoXCJ3ZWVrZGF5XCIpKSB8fCA3O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3J3YXJkZWRXZWVrZGF5ID0gYWRkRHVyYXRpb24ocmVmRGF0ZSwgeyBkYXk6IGRheXNUb0FkZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyRGF0ZShyZXN1bHQuZW5kLCBmb3J3YXJkZWRXZWVrZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGFkanVzdGVkICR7cmVzdWx0fSB3ZWVrZGF5ICgke3Jlc3VsdC5lbmR9KWApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmlzRGF0ZVdpdGhVbmtub3duWWVhcigpICYmIHJlZkRhdGUgPiByZXN1bHQuc3RhcnQuZGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzICYmIHJlZkRhdGUgPiByZXN1bHQuc3RhcnQuZGF0ZSgpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCByZXN1bHQuc3RhcnQuZ2V0KFwieWVhclwiKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlYnVnKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gYWRqdXN0ZWQgJHtyZXN1bHR9IHllYXIgKCR7cmVzdWx0LnN0YXJ0fSlgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZW5kICYmICFyZXN1bHQuZW5kLmlzQ2VydGFpbihcInllYXJcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJ5ZWFyXCIsIHJlc3VsdC5lbmQuZ2V0KFwieWVhclwiKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBhZGp1c3RlZCAke3Jlc3VsdH0gbW9udGggKCR7cmVzdWx0LnN0YXJ0fSlgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Rm9yd2FyZERhdGVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IEZpbHRlciB9IGZyb20gXCIuLi9hYnN0cmFjdFJlZmluZXJzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVbmxpa2VseUZvcm1hdEZpbHRlciBleHRlbmRzIEZpbHRlciB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlzVmFsaWQoY29udGV4dCwgcmVzdWx0KSB7XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5yZXBsYWNlKFwiIFwiLCBcIlwiKS5tYXRjaCgvXlxcZCooXFwuXFxkKik/JC8pKSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVtb3ZpbmcgdW5saWtlbHkgcmVzdWx0ICcke3Jlc3VsdC50ZXh0fSdgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzVmFsaWREYXRlKCkpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBSZW1vdmluZyBpbnZhbGlkIHJlc3VsdDogJHtyZXN1bHR9ICgke3Jlc3VsdC5zdGFydH0pYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0LmVuZCAmJiAhcmVzdWx0LmVuZC5pc1ZhbGlkRGF0ZSgpKSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVtb3ZpbmcgaW52YWxpZCByZXN1bHQ6ICR7cmVzdWx0fSAoJHtyZXN1bHQuZW5kfSlgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzU3RyaWN0TW9kZVZhbGlkKGNvbnRleHQsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlzU3RyaWN0TW9kZVZhbGlkKGNvbnRleHQsIHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmlzT25seVdlZWtkYXlDb21wb25lbnQoKSkge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYChTdHJpY3QpIFJlbW92aW5nIHdlZWtkYXkgb25seSBjb21wb25lbnQ6ICR7cmVzdWx0fSAoJHtyZXN1bHQuZW5kfSlgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVubGlrZWx5Rm9ybWF0RmlsdGVyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihbMC05XXs0fSlcXFxcLShbMC05XXsxLDJ9KVxcXFwtKFswLTldezEsMn0pXCIgK1xuICAgIFwiKD86VFwiICtcbiAgICBcIihbMC05XXsxLDJ9KTooWzAtOV17MSwyfSlcIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCI6KFswLTldezEsMn0pKD86XFxcXC4oXFxcXGR7MSw0fSkpP1wiICtcbiAgICBcIik/XCIgK1xuICAgIFwiKFwiICtcbiAgICBcIlp8KFsrLV1cXFxcZHsyfSk6PyhcXFxcZHsyfSk/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfTlVNQkVSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX05VTUJFUl9HUk9VUCA9IDI7XG5jb25zdCBEQVRFX05VTUJFUl9HUk9VUCA9IDM7XG5jb25zdCBIT1VSX05VTUJFUl9HUk9VUCA9IDQ7XG5jb25zdCBNSU5VVEVfTlVNQkVSX0dST1VQID0gNTtcbmNvbnN0IFNFQ09ORF9OVU1CRVJfR1JPVVAgPSA2O1xuY29uc3QgTUlMTElTRUNPTkRfTlVNQkVSX0dST1VQID0gNztcbmNvbnN0IFRaRF9HUk9VUCA9IDg7XG5jb25zdCBUWkRfSE9VUl9PRkZTRVRfR1JPVVAgPSA5O1xuY29uc3QgVFpEX01JTlVURV9PRkZTRVRfR1JPVVAgPSAxMDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElTT0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoe1xuICAgICAgICAgICAgXCJ5ZWFyXCI6IHBhcnNlSW50KG1hdGNoW1lFQVJfTlVNQkVSX0dST1VQXSksXG4gICAgICAgICAgICBcIm1vbnRoXCI6IHBhcnNlSW50KG1hdGNoW01PTlRIX05VTUJFUl9HUk9VUF0pLFxuICAgICAgICAgICAgXCJkYXlcIjogcGFyc2VJbnQobWF0Y2hbREFURV9OVU1CRVJfR1JPVVBdKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChtYXRjaFtIT1VSX05VTUJFUl9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIHBhcnNlSW50KG1hdGNoW0hPVVJfTlVNQkVSX0dST1VQXSkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtaW51dGVcIiwgcGFyc2VJbnQobWF0Y2hbTUlOVVRFX05VTUJFUl9HUk9VUF0pKTtcbiAgICAgICAgICAgIGlmIChtYXRjaFtTRUNPTkRfTlVNQkVSX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJzZWNvbmRcIiwgcGFyc2VJbnQobWF0Y2hbU0VDT05EX05VTUJFUl9HUk9VUF0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFtNSUxMSVNFQ09ORF9OVU1CRVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbGxpc2Vjb25kXCIsIHBhcnNlSW50KG1hdGNoW01JTExJU0VDT05EX05VTUJFUl9HUk9VUF0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFtUWkRfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbVFpEX0hPVVJfT0ZGU0VUX0dST1VQXSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBob3VyT2Zmc2V0ID0gcGFyc2VJbnQobWF0Y2hbVFpEX0hPVVJfT0ZGU0VUX0dST1VQXSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtaW51dGVPZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hbVFpEX01JTlVURV9PRkZTRVRfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZU9mZnNldCA9IHBhcnNlSW50KG1hdGNoW1RaRF9NSU5VVEVfT0ZGU0VUX0dST1VQXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gaG91ck9mZnNldCAqIDYwO1xuICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0IC09IG1pbnV0ZU9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBtaW51dGVPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCBvZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzLmFkZFRhZyhcInBhcnNlci9JU09Gb3JtYXRQYXJzZXJcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVNPRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmdpbmdSZWZpbmVyIH0gZnJvbSBcIi4uL2Fic3RyYWN0UmVmaW5lcnMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IG5ld1Jlc3VsdCA9IG5leHRSZXN1bHQuY2xvbmUoKTtcbiAgICAgICAgbmV3UmVzdWx0LmluZGV4ID0gY3VycmVudFJlc3VsdC5pbmRleDtcbiAgICAgICAgbmV3UmVzdWx0LnRleHQgPSBjdXJyZW50UmVzdWx0LnRleHQgKyB0ZXh0QmV0d2VlbiArIG5ld1Jlc3VsdC50ZXh0O1xuICAgICAgICBuZXdSZXN1bHQuc3RhcnQuYXNzaWduKFwid2Vla2RheVwiLCBjdXJyZW50UmVzdWx0LnN0YXJ0LmdldChcIndlZWtkYXlcIikpO1xuICAgICAgICBpZiAobmV3UmVzdWx0LmVuZCkge1xuICAgICAgICAgICAgbmV3UmVzdWx0LmVuZC5hc3NpZ24oXCJ3ZWVrZGF5XCIsIGN1cnJlbnRSZXN1bHQuc3RhcnQuZ2V0KFwid2Vla2RheVwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1Jlc3VsdDtcbiAgICB9XG4gICAgc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHdlZWtkYXlUaGVuTm9ybWFsRGF0ZSA9IGN1cnJlbnRSZXN1bHQuc3RhcnQuaXNPbmx5V2Vla2RheUNvbXBvbmVudCgpICYmXG4gICAgICAgICAgICAhY3VycmVudFJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJob3VyXCIpICYmXG4gICAgICAgICAgICBuZXh0UmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcImRheVwiKTtcbiAgICAgICAgcmV0dXJuIHdlZWtkYXlUaGVuTm9ybWFsRGF0ZSAmJiB0ZXh0QmV0d2Vlbi5tYXRjaCgvXiw/XFxzKiQvKSAhPSBudWxsO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanMubWFwIiwiaW1wb3J0IEV4dHJhY3RUaW1lem9uZUFiYnJSZWZpbmVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVBYmJyUmVmaW5lci5qc1wiO1xuaW1wb3J0IEV4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIgZnJvbSBcIi4vY29tbW9uL3JlZmluZXJzL0V4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIuanNcIjtcbmltcG9ydCBPdmVybGFwUmVtb3ZhbFJlZmluZXIgZnJvbSBcIi4vY29tbW9uL3JlZmluZXJzL092ZXJsYXBSZW1vdmFsUmVmaW5lci5qc1wiO1xuaW1wb3J0IEZvcndhcmREYXRlUmVmaW5lciBmcm9tIFwiLi9jb21tb24vcmVmaW5lcnMvRm9yd2FyZERhdGVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgVW5saWtlbHlGb3JtYXRGaWx0ZXIgZnJvbSBcIi4vY29tbW9uL3JlZmluZXJzL1VubGlrZWx5Rm9ybWF0RmlsdGVyLmpzXCI7XG5pbXBvcnQgSVNPRm9ybWF0UGFyc2VyIGZyb20gXCIuL2NvbW1vbi9wYXJzZXJzL0lTT0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZnJvbSBcIi4vY29tbW9uL3JlZmluZXJzL01lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uLCBzdHJpY3RNb2RlID0gZmFsc2UpIHtcbiAgICBjb25maWd1cmF0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgSVNPRm9ybWF0UGFyc2VyKCkpO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMudW5zaGlmdChuZXcgTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lcigpKTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzLnVuc2hpZnQobmV3IEV4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy51bnNoaWZ0KG5ldyBPdmVybGFwUmVtb3ZhbFJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBFeHRyYWN0VGltZXpvbmVBYmJyUmVmaW5lcigpKTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzLnB1c2gobmV3IE92ZXJsYXBSZW1vdmFsUmVmaW5lcigpKTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzLnB1c2gobmV3IEZvcndhcmREYXRlUmVmaW5lcigpKTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzLnB1c2gobmV3IFVubGlrZWx5Rm9ybWF0RmlsdGVyKHN0cmljdE1vZGUpKTtcbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZ3VyYXRpb25zLmpzLm1hcCIsImltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBhc3NpZ25TaW1pbGFyVGltZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiBub3cocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgdGFyZ2V0RGF0ZSA9IHJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBhc3NpZ25TaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgIGNvbXBvbmVudC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCByZWZlcmVuY2UuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9ub3dcIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b2RheShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBjb21wb25lbnQuZGVsZXRlKFwibWVyaWRpZW1cIik7XG4gICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS90b2RheVwiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHllc3RlcmRheShyZWZlcmVuY2UpIHtcbiAgICByZXR1cm4gdGhlRGF5QmVmb3JlKHJlZmVyZW5jZSwgMSkuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL3llc3RlcmRheVwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b21vcnJvdyhyZWZlcmVuY2UpIHtcbiAgICByZXR1cm4gdGhlRGF5QWZ0ZXIocmVmZXJlbmNlLCAxKS5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvdG9tb3Jyb3dcIik7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhlRGF5QmVmb3JlKHJlZmVyZW5jZSwgbnVtRGF5KSB7XG4gICAgcmV0dXJuIHRoZURheUFmdGVyKHJlZmVyZW5jZSwgLW51bURheSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhlRGF5QWZ0ZXIocmVmZXJlbmNlLCBuRGF5cykge1xuICAgIGNvbnN0IHRhcmdldERhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgbmV3RGF0ZS5zZXREYXRlKG5ld0RhdGUuZ2V0RGF0ZSgpICsgbkRheXMpO1xuICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgbmV3RGF0ZSk7XG4gICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIG5ld0RhdGUpO1xuICAgIGNvbXBvbmVudC5kZWxldGUoXCJtZXJpZGllbVwiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvbmlnaHQocmVmZXJlbmNlLCBpbXBseUhvdXIgPSAyMikge1xuICAgIGNvbnN0IHRhcmdldERhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCBpbXBseUhvdXIpO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL3RvbmlnaHRcIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsYXN0TmlnaHQocmVmZXJlbmNlLCBpbXBseUhvdXIgPSAwKSB7XG4gICAgbGV0IHRhcmdldERhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGlmICh0YXJnZXREYXRlLmdldEhvdXJzKCkgPCA2KSB7XG4gICAgICAgIHRhcmdldERhdGUgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSAtIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuICAgIH1cbiAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV2ZW5pbmcocmVmZXJlbmNlLCBpbXBseUhvdXIgPSAyMCkge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCBpbXBseUhvdXIpO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvZXZlbmluZ1wiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHllc3RlcmRheUV2ZW5pbmcocmVmZXJlbmNlLCBpbXBseUhvdXIgPSAyMCkge1xuICAgIGxldCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICB0YXJnZXREYXRlID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkgLSAyNCAqIDYwICogNjAgKiAxMDAwKTtcbiAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS95ZXN0ZXJkYXlcIik7XG4gICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9ldmVuaW5nXCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbWlkbmlnaHQocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGlmIChyZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCkuZ2V0SG91cnMoKSA+IDIpIHtcbiAgICAgICAgY29tcG9uZW50LmFkZER1cmF0aW9uQXNJbXBsaWVkKHsgZGF5OiAxIH0pO1xuICAgIH1cbiAgICBjb21wb25lbnQuYXNzaWduKFwiaG91clwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbWlkbmlnaHRcIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtb3JuaW5nKHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gNikge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCBpbXBseUhvdXIpO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgMCk7XG4gICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9tb3JuaW5nXCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXJub29uKHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMTUpIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvYWZ0ZXJub29uXCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbm9vbihyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgIGNvbXBvbmVudC5hc3NpZ24oXCJob3VyXCIsIDEyKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2Uvbm9vblwiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2FzdWFsUmVmZXJlbmNlcy5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IC8obm93fHRvZGF5fHRvbmlnaHR8dG9tb3Jyb3d8b3Zlcm1vcnJvd3x0bXJ8dG1yd3x5ZXN0ZXJkYXl8bGFzdFxccypuaWdodCkoPz1cXFd8JCkvaTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGxvd2VyVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcIm5vd1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0b2RheVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInllc3RlcmRheVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0b21vcnJvd1wiOlxuICAgICAgICAgICAgY2FzZSBcInRtclwiOlxuICAgICAgICAgICAgY2FzZSBcInRtcndcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLnRvbW9ycm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0b25pZ2h0XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gcmVmZXJlbmNlcy50b25pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJvdmVybW9ycm93XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gcmVmZXJlbmNlcy50aGVEYXlBZnRlcihjb250ZXh0LnJlZmVyZW5jZSwgMik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL2xhc3RcXHMqbmlnaHQvKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0RGF0ZS5nZXRIb3VycygpID4gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNEYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0RheS5zZXREYXRlKHByZXZpb3VzRGF5LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IHByZXZpb3VzRGF5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJwYXJzZXIvRU5DYXN1YWxEYXRlUGFyc2VyXCIpO1xuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCAqIGFzIGNhc3VhbFJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gLyg/OnRoaXMpP1xcc3swLDN9KG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHR8bWlkbmlnaHR8bWlkZGF5fG5vb24pKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTkNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCBjb21wb25lbnQgPSBudWxsO1xuICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhZnRlcm5vb25cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBjYXN1YWxSZWZlcmVuY2VzLmFmdGVybm9vbihjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZXZlbmluZ1wiOlxuICAgICAgICAgICAgY2FzZSBcIm5pZ2h0XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY2FzdWFsUmVmZXJlbmNlcy5ldmVuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaWRuaWdodFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IGNhc3VhbFJlZmVyZW5jZXMubWlkbmlnaHQoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1vcm5pbmdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBjYXN1YWxSZWZlcmVuY2VzLm1vcm5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5vb25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkYXlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBjYXN1YWxSZWZlcmVuY2VzLm5vb24oY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJwYXJzZXIvRU5DYXN1YWxUaW1lUGFyc2VyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5DYXN1YWxUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5pbXBvcnQgeyBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Oig/OlxcXFwsfFxcXFwofFxcXFzvvIgpXFxcXHMqKT9cIiArXG4gICAgXCIoPzpvblxcXFxzKj8pP1wiICtcbiAgICBcIig/Oih0aGlzfGxhc3R8cGFzdHxuZXh0KVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX18d2Vla2VuZHx3ZWVrZGF5KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKig/Om9mXFxcXHMqKT8odGhpc3xsYXN0fHBhc3R8bmV4dClcXFxccyp3ZWVrKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgV0VFS0RBWV9HUk9VUCA9IDI7XG5jb25zdCBQT1NURklYX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOV2Vla2RheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcImxhc3RcIiB8fCBtb2RpZmllcldvcmQgPT0gXCJwYXN0XCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJsYXN0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibmV4dFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcInRoaXNcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3ZWVrZGF5X3dvcmQgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgd2Vla2RheTtcbiAgICAgICAgaWYgKFdFRUtEQVlfRElDVElPTkFSWVt3ZWVrZGF5X3dvcmRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbd2Vla2RheV93b3JkXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3ZWVrZGF5X3dvcmQgPT0gXCJ3ZWVrZW5kXCIpIHtcbiAgICAgICAgICAgIHdlZWtkYXkgPSBtb2RpZmllciA9PSBcImxhc3RcIiA/IFdlZWtkYXkuU1VOREFZIDogV2Vla2RheS5TQVRVUkRBWTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3ZWVrZGF5X3dvcmQgPT0gXCJ3ZWVrZGF5XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZldlZWtkYXkgPSBjb250ZXh0LnJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKS5nZXREYXkoKTtcbiAgICAgICAgICAgIGlmIChyZWZXZWVrZGF5ID09IFdlZWtkYXkuU1VOREFZIHx8IHJlZldlZWtkYXkgPT0gV2Vla2RheS5TQVRVUkRBWSkge1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBtb2RpZmllciA9PSBcImxhc3RcIiA/IFdlZWtkYXkuRlJJREFZIDogV2Vla2RheS5NT05EQVk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gcmVmV2Vla2RheSAtIDE7XG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IG1vZGlmaWVyID09IFwibGFzdFwiID8gd2Vla2RheSAtIDEgOiB3ZWVrZGF5ICsgMTtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gKHdlZWtkYXkgJSA1KSArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTldlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKHRoaXN8bGFzdHxwYXN0fG5leHR8YWZ0ZXJcXFxccyp0aGlzKVxcXFxzKigke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KSg/PVxcXFxzKilgICsgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBNT0RJRklFUl9XT1JEX0dST1VQID0gMTtcbmNvbnN0IFJFTEFUSVZFX1dPUkRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5SZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gbWF0Y2hbTU9ESUZJRVJfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFdvcmQgPSBtYXRjaFtSRUxBVElWRV9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1ldW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW3VuaXRXb3JkXTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwibmV4dFwiIHx8IG1vZGlmaWVyLnN0YXJ0c1dpdGgoXCJhZnRlclwiKSkge1xuICAgICAgICAgICAgY29uc3QgdGltZVVuaXRzID0ge307XG4gICAgICAgICAgICB0aW1lVW5pdHNbdGltZXVuaXRdID0gMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwibGFzdFwiIHx8IG1vZGlmaWVyID09IFwicGFzdFwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh1bml0V29yZC5tYXRjaCgvd2Vlay9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdFdvcmQubWF0Y2goL21vbnRoL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0V29yZC5tYXRjaCgveWVhci9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNb250aCgwKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5SZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIsIGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihbXlxcXFxkXXxeKVwiICtcbiAgICBcIihbMC0zXXswLDF9WzAtOV17MX0pW1xcXFwvXFxcXC5cXFxcLV0oWzAtM117MCwxfVswLTldezF9KVwiICtcbiAgICBcIig/OltcXFxcL1xcXFwuXFxcXC1dKFswLTldezR9fFswLTldezJ9KSk/XCIgK1xuICAgIFwiKFxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IE9QRU5JTkdfR1JPVVAgPSAxO1xuY29uc3QgRU5ESU5HX0dST1VQID0gNTtcbmNvbnN0IEZJUlNUX05VTUJFUlNfR1JPVVAgPSAyO1xuY29uc3QgU0VDT05EX05VTUJFUlNfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTbGFzaERhdGVGb3JtYXRQYXJzZXIge1xuICAgIGdyb3VwTnVtYmVyTW9udGg7XG4gICAgZ3JvdXBOdW1iZXJEYXk7XG4gICAgY29uc3RydWN0b3IobGl0dGxlRW5kaWFuKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBOdW1iZXJNb250aCA9IGxpdHRsZUVuZGlhbiA/IFNFQ09ORF9OVU1CRVJTX0dST1VQIDogRklSU1RfTlVNQkVSU19HUk9VUDtcbiAgICAgICAgdGhpcy5ncm91cE51bWJlckRheSA9IGxpdHRsZUVuZGlhbiA/IEZJUlNUX05VTUJFUlNfR1JPVVAgOiBTRUNPTkRfTlVNQkVSU19HUk9VUDtcbiAgICB9XG4gICAgcGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW09QRU5JTkdfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgaW5kZXhFbmQgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCAtIG1hdGNoW0VORElOR19HUk9VUF0ubGVuZ3RoO1xuICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0QmVmb3JlID0gY29udGV4dC50ZXh0LnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgICAgICAgICBpZiAodGV4dEJlZm9yZS5tYXRjaChcIlxcXFxkLz8kXCIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleEVuZCA8IGNvbnRleHQudGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRBZnRlciA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcoaW5kZXhFbmQpO1xuICAgICAgICAgICAgaWYgKHRleHRBZnRlci5tYXRjaChcIl4vP1xcXFxkXCIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHQgPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCk7XG4gICAgICAgIGlmICh0ZXh0Lm1hdGNoKC9eXFxkXFwuXFxkJC8pIHx8IHRleHQubWF0Y2goL15cXGRcXC5cXGR7MSwyfVxcLlxcZHsxLDJ9XFxzKiQvKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWF0Y2hbWUVBUl9HUk9VUF0gJiYgdGV4dC5pbmRleE9mKFwiL1wiKSA8IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQoaW5kZXgsIHRleHQpO1xuICAgICAgICBsZXQgbW9udGggPSBwYXJzZUludChtYXRjaFt0aGlzLmdyb3VwTnVtYmVyTW9udGhdKTtcbiAgICAgICAgbGV0IGRheSA9IHBhcnNlSW50KG1hdGNoW3RoaXMuZ3JvdXBOdW1iZXJEYXldKTtcbiAgICAgICAgaWYgKG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKSB7XG4gICAgICAgICAgICBpZiAobW9udGggPiAxMikge1xuICAgICAgICAgICAgICAgIGlmIChkYXkgPj0gMSAmJiBkYXkgPD0gMTIgJiYgbW9udGggPD0gMzEpIHtcbiAgICAgICAgICAgICAgICAgICAgW2RheSwgbW9udGhdID0gW21vbnRoLCBkYXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkYXkgPCAxIHx8IGRheSA+IDMxKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgcmF3WWVhck51bWJlciA9IHBhcnNlSW50KG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kTW9zdExpa2VseUFEWWVhcihyYXdZZWFyTnVtYmVyKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQuYWRkVGFnKFwicGFyc2VyL1NsYXNoRGF0ZUZvcm1hdFBhcnNlclwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TbGFzaERhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKHRoaXN8bGFzdHxwYXN0fG5leHR8YWZ0ZXJ8XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUEFUVEVSTl9OT19BQkJSID0gbmV3IFJlZ0V4cChgKHRoaXN8bGFzdHxwYXN0fG5leHR8YWZ0ZXJ8XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIGNvbnN0cnVjdG9yKGFsbG93QWJicmV2aWF0aW9ucyA9IHRydWUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hbGxvd0FiYnJldmlhdGlvbnMgPSBhbGxvd0FiYnJldmlhdGlvbnM7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID8gUEFUVEVSTiA6IFBBVFRFUk5fTk9fQUJCUjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMl0pO1xuICAgICAgICBpZiAoIWR1cmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHByZWZpeCkge1xuICAgICAgICAgICAgY2FzZSBcImxhc3RcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwYXN0XCI6XG4gICAgICAgICAgICBjYXNlIFwiLVwiOlxuICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBkdXJhdGlvbik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmdpbmdSZWZpbmVyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9hYnN0cmFjdFJlZmluZXJzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cywgUGFyc2luZ1Jlc3VsdCwgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmZ1bmN0aW9uIElzUG9zaXRpdmVGb2xsb3dpbmdSZWZlcmVuY2UocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9eWystXS9pKSAhPSBudWxsO1xufVxuZnVuY3Rpb24gSXNOZWdhdGl2ZUZvbGxvd2luZ1JlZmVyZW5jZShyZXN1bHQpIHtcbiAgICByZXR1cm4gcmVzdWx0LnRleHQubWF0Y2goL14tL2kpICE9IG51bGw7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1lcmdlUmVsYXRpdmVBZnRlckRhdGVSZWZpbmVyIGV4dGVuZHMgTWVyZ2luZ1JlZmluZXIge1xuICAgIHNob3VsZE1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBpZiAoIXRleHRCZXR3ZWVuLm1hdGNoKC9eXFxzKiQvaSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSXNQb3NpdGl2ZUZvbGxvd2luZ1JlZmVyZW5jZShuZXh0UmVzdWx0KSB8fCBJc05lZ2F0aXZlRm9sbG93aW5nUmVmZXJlbmNlKG5leHRSZXN1bHQpO1xuICAgIH1cbiAgICBtZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQsIGNvbnRleHQpIHtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obmV4dFJlc3VsdC50ZXh0KTtcbiAgICAgICAgaWYgKElzTmVnYXRpdmVGb2xsb3dpbmdSZWZlcmVuY2UobmV4dFJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoUmVmZXJlbmNlV2l0aFRpbWV6b25lLmZyb21EYXRlKGN1cnJlbnRSZXN1bHQuc3RhcnQuZGF0ZSgpKSwgdGltZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJzaW5nUmVzdWx0KGN1cnJlbnRSZXN1bHQucmVmZXJlbmNlLCBjdXJyZW50UmVzdWx0LmluZGV4LCBgJHtjdXJyZW50UmVzdWx0LnRleHR9JHt0ZXh0QmV0d2Vlbn0ke25leHRSZXN1bHQudGV4dH1gLCBjb21wb25lbnRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTk1lcmdlUmVsYXRpdmVBZnRlckRhdGVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IE1lcmdpbmdSZWZpbmVyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9hYnN0cmFjdFJlZmluZXJzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cywgUGFyc2luZ1Jlc3VsdCwgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmZ1bmN0aW9uIGhhc0ltcGxpZWRFYXJsaWVyUmVmZXJlbmNlRGF0ZShyZXN1bHQpIHtcbiAgICByZXR1cm4gcmVzdWx0LnRleHQubWF0Y2goL1xccysoYmVmb3JlfGZyb20pJC9pKSAhPSBudWxsO1xufVxuZnVuY3Rpb24gaGFzSW1wbGllZExhdGVyUmVmZXJlbmNlRGF0ZShyZXN1bHQpIHtcbiAgICByZXR1cm4gcmVzdWx0LnRleHQubWF0Y2goL1xccysoYWZ0ZXJ8c2luY2UpJC9pKSAhPSBudWxsO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZVJlbGF0aXZlRm9sbG93QnlEYXRlUmVmaW5lciBleHRlbmRzIE1lcmdpbmdSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKiQvaTtcbiAgICB9XG4gICAgc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIGlmICghdGV4dEJldHdlZW4ubWF0Y2godGhpcy5wYXR0ZXJuQmV0d2VlbigpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaGFzSW1wbGllZEVhcmxpZXJSZWZlcmVuY2VEYXRlKGN1cnJlbnRSZXN1bHQpICYmICFoYXNJbXBsaWVkTGF0ZXJSZWZlcmVuY2VEYXRlKGN1cnJlbnRSZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICEhbmV4dFJlc3VsdC5zdGFydC5nZXQoXCJkYXlcIikgJiYgISFuZXh0UmVzdWx0LnN0YXJ0LmdldChcIm1vbnRoXCIpICYmICEhbmV4dFJlc3VsdC5zdGFydC5nZXQoXCJ5ZWFyXCIpO1xuICAgIH1cbiAgICBtZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgbGV0IGR1cmF0aW9uID0gcGFyc2VEdXJhdGlvbihjdXJyZW50UmVzdWx0LnRleHQpO1xuICAgICAgICBpZiAoaGFzSW1wbGllZEVhcmxpZXJSZWZlcmVuY2VEYXRlKGN1cnJlbnRSZXN1bHQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHJldmVyc2VEdXJhdGlvbihkdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShSZWZlcmVuY2VXaXRoVGltZXpvbmUuZnJvbURhdGUobmV4dFJlc3VsdC5zdGFydC5kYXRlKCkpLCBkdXJhdGlvbik7XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2luZ1Jlc3VsdChuZXh0UmVzdWx0LnJlZmVyZW5jZSwgY3VycmVudFJlc3VsdC5pbmRleCwgYCR7Y3VycmVudFJlc3VsdC50ZXh0fSR7dGV4dEJldHdlZW59JHtuZXh0UmVzdWx0LnRleHR9YCwgY29tcG9uZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5NZXJnZVJlbGF0aXZlRm9sbG93QnlEYXRlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IFlFQVJfU1VGRklYX1BBVFRFUk4gPSBuZXcgUmVnRXhwKGBeXFxcXHMqKCR7WUVBUl9QQVRURVJOfSlgLCBcImlcIik7XG5jb25zdCBZRUFSX0dST1VQID0gMTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVORXh0cmFjdFllYXJTdWZmaXhSZWZpbmVyIHtcbiAgICByZWZpbmUoY29udGV4dCwgcmVzdWx0cykge1xuICAgICAgICByZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnQuaXNEYXRlV2l0aFVua25vd25ZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdWZmaXggPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IFlFQVJfU1VGRklYX1BBVFRFUk4uZXhlYyhzdWZmaXgpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS50cmltKCkubGVuZ3RoIDw9IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXh0cmFjdGluZyB5ZWFyOiAnJHttYXRjaFswXX0nIGludG8gOiAke3Jlc3VsdH1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmVuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgICAgICByZXN1bHQudGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVORXh0cmFjdFllYXJTdWZmaXhSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IEZpbHRlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5Vbmxpa2VseUZvcm1hdEZpbHRlciBleHRlbmRzIEZpbHRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIGlzVmFsaWQoY29udGV4dCwgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSByZXN1bHQudGV4dC50cmltKCk7XG4gICAgICAgIGlmICh0ZXh0ID09PSBjb250ZXh0LnRleHQudHJpbSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dC50b0xvd2VyQ2FzZSgpID09PSBcIm1heVwiKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0QmVmb3JlID0gY29udGV4dC50ZXh0LnN1YnN0cmluZygwLCByZXN1bHQuaW5kZXgpLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICghdGV4dEJlZm9yZS5tYXRjaCgvXFxiKGluKSQvaSkpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmRlYnVnKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFJlbW92aW5nIHVubGlrZWx5IHJlc3VsdDogJHtyZXN1bHR9YCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0LnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoXCJ0aGUgc2Vjb25kXCIpKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0QWZ0ZXIgPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCkudHJpbSgpO1xuICAgICAgICAgICAgaWYgKHRleHRBZnRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBSZW1vdmluZyB1bmxpa2VseSByZXN1bHQ6ICR7cmVzdWx0fWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOVW5saWtlbHlGb3JtYXRGaWx0ZXIuanMubWFwIiwiaW1wb3J0IEVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IEVOTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBFTk1vbnRoTmFtZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0VOTW9udGhOYW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5ZZWFyTW9udGhEYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlllYXJNb250aERheVBhcnNlci5qc1wiO1xuaW1wb3J0IEVOU2xhc2hNb250aEZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0VOU2xhc2hNb250aEZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEVOVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0VOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FTk1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEVOTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvRU5NZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCBFTkNhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTkNhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBFTkNhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTkNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBFTldlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTldlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBFTlJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0VOUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlUmVsYXRpdmVBZnRlckRhdGVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0VOTWVyZ2VSZWxhdGl2ZUFmdGVyRGF0ZVJlZmluZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlUmVsYXRpdmVGb2xsb3dCeURhdGVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0VOTWVyZ2VSZWxhdGl2ZUZvbGxvd0J5RGF0ZVJlZmluZXIuanNcIjtcbmltcG9ydCBPdmVybGFwUmVtb3ZhbFJlZmluZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9yZWZpbmVycy9PdmVybGFwUmVtb3ZhbFJlZmluZXIuanNcIjtcbmltcG9ydCBFTkV4dHJhY3RZZWFyU3VmZml4UmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FTkV4dHJhY3RZZWFyU3VmZml4UmVmaW5lci5qc1wiO1xuaW1wb3J0IEVOVW5saWtlbHlGb3JtYXRGaWx0ZXIgZnJvbSBcIi4vcmVmaW5lcnMvRU5Vbmxpa2VseUZvcm1hdEZpbHRlci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5EZWZhdWx0Q29uZmlndXJhdGlvbiB7XG4gICAgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVOQ2FzdWFsRGF0ZVBhcnNlcigpKTtcbiAgICAgICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgRU5DYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgICAgICBvcHRpb24ucGFyc2Vycy5wdXNoKG5ldyBFTk1vbnRoTmFtZVBhcnNlcigpKTtcbiAgICAgICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgRU5SZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIoKSk7XG4gICAgICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVOVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICAgICAgb3B0aW9uLnJlZmluZXJzLnB1c2gobmV3IEVOVW5saWtlbHlGb3JtYXRGaWx0ZXIoKSk7XG4gICAgICAgIHJldHVybiBvcHRpb247XG4gICAgfVxuICAgIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICAgICAgbmV3IFNsYXNoRGF0ZUZvcm1hdFBhcnNlcihsaXR0bGVFbmRpYW4pLFxuICAgICAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgICAgIG5ldyBFTk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgICAgIG5ldyBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlcihsaXR0bGVFbmRpYW4pLFxuICAgICAgICAgICAgICAgIG5ldyBFTldlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICAgICAgbmV3IEVOVGltZUV4cHJlc3Npb25QYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICAgICAgbmV3IEVOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICAgICAgbmV3IEVOVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICByZWZpbmVyczogW25ldyBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyKCldLFxuICAgICAgICB9LCBzdHJpY3RNb2RlKTtcbiAgICAgICAgb3B0aW9ucy5wYXJzZXJzLnVuc2hpZnQobmV3IEVOWWVhck1vbnRoRGF5UGFyc2VyKHN0cmljdE1vZGUpKTtcbiAgICAgICAgb3B0aW9ucy5yZWZpbmVycy51bnNoaWZ0KG5ldyBFTk1lcmdlUmVsYXRpdmVGb2xsb3dCeURhdGVSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnVuc2hpZnQobmV3IEVOTWVyZ2VSZWxhdGl2ZUFmdGVyRGF0ZVJlZmluZXIoKSk7XG4gICAgICAgIG9wdGlvbnMucmVmaW5lcnMudW5zaGlmdChuZXcgT3ZlcmxhcFJlbW92YWxSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnB1c2gobmV3IEVOTWVyZ2VEYXRlVGltZVJlZmluZXIoKSk7XG4gICAgICAgIG9wdGlvbnMucmVmaW5lcnMucHVzaChuZXcgRU5FeHRyYWN0WWVhclN1ZmZpeFJlZmluZXIoKSk7XG4gICAgICAgIG9wdGlvbnMucmVmaW5lcnMucHVzaChuZXcgRU5NZXJnZURhdGVSYW5nZVJlZmluZXIoKSk7XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZ3VyYXRpb24uanMubWFwIiwiaW1wb3J0IHsgUmVmZXJlbmNlV2l0aFRpbWV6b25lLCBQYXJzaW5nQ29tcG9uZW50cywgUGFyc2luZ1Jlc3VsdCB9IGZyb20gXCIuL3Jlc3VsdHMuanNcIjtcbmltcG9ydCBFTkRlZmF1bHRDb25maWd1cmF0aW9uIGZyb20gXCIuL2xvY2FsZXMvZW4vY29uZmlndXJhdGlvbi5qc1wiO1xuZXhwb3J0IGNsYXNzIENocm9ubyB7XG4gICAgcGFyc2VycztcbiAgICByZWZpbmVycztcbiAgICBkZWZhdWx0Q29uZmlnID0gbmV3IEVORGVmYXVsdENvbmZpZ3VyYXRpb24oKTtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uIHx8IHRoaXMuZGVmYXVsdENvbmZpZy5jcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCk7XG4gICAgICAgIHRoaXMucGFyc2VycyA9IFsuLi5jb25maWd1cmF0aW9uLnBhcnNlcnNdO1xuICAgICAgICB0aGlzLnJlZmluZXJzID0gWy4uLmNvbmZpZ3VyYXRpb24ucmVmaW5lcnNdO1xuICAgIH1cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDaHJvbm8oe1xuICAgICAgICAgICAgcGFyc2VyczogWy4uLnRoaXMucGFyc2Vyc10sXG4gICAgICAgICAgICByZWZpbmVyczogWy4uLnRoaXMucmVmaW5lcnNdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcGFyc2VEYXRlKHRleHQsIHJlZmVyZW5jZURhdGUsIG9wdGlvbikge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5wYXJzZSh0ZXh0LCByZWZlcmVuY2VEYXRlLCBvcHRpb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cy5sZW5ndGggPiAwID8gcmVzdWx0c1swXS5zdGFydC5kYXRlKCkgOiBudWxsO1xuICAgIH1cbiAgICBwYXJzZSh0ZXh0LCByZWZlcmVuY2VEYXRlLCBvcHRpb24pIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBQYXJzaW5nQ29udGV4dCh0ZXh0LCByZWZlcmVuY2VEYXRlLCBvcHRpb24pO1xuICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xuICAgICAgICB0aGlzLnBhcnNlcnMuZm9yRWFjaCgocGFyc2VyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRSZXN1bHRzID0gQ2hyb25vLmV4ZWN1dGVQYXJzZXIoY29udGV4dCwgcGFyc2VyKTtcbiAgICAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChwYXJzZWRSZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWZpbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChyZWZpbmVyKSB7XG4gICAgICAgICAgICByZXN1bHRzID0gcmVmaW5lci5yZWZpbmUoY29udGV4dCwgcmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgc3RhdGljIGV4ZWN1dGVQYXJzZXIoY29udGV4dCwgcGFyc2VyKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IHBhcnNlci5wYXR0ZXJuKGNvbnRleHQpO1xuICAgICAgICBjb25zdCBvcmlnaW5hbFRleHQgPSBjb250ZXh0LnRleHQ7XG4gICAgICAgIGxldCByZW1haW5pbmdUZXh0ID0gY29udGV4dC50ZXh0O1xuICAgICAgICBsZXQgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleCArIG9yaWdpbmFsVGV4dC5sZW5ndGggLSByZW1haW5pbmdUZXh0Lmxlbmd0aDtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZXIuZXh0cmFjdChjb250ZXh0LCBtYXRjaCk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJlbWFpbmluZ1RleHQgPSBvcmlnaW5hbFRleHQuc3Vic3RyaW5nKG1hdGNoLmluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcGFyc2VkUmVzdWx0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQYXJzaW5nUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0IGluc3RhbmNlb2YgUGFyc2luZ0NvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWRSZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgICAgICAgICBwYXJzZWRSZXN1bHQuc3RhcnQgPSByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJzZWRSZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkSW5kZXggPSBwYXJzZWRSZXN1bHQuaW5kZXg7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRUZXh0ID0gcGFyc2VkUmVzdWx0LnRleHQ7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKCgpID0+IGNvbnNvbGUubG9nKGAke3BhcnNlci5jb25zdHJ1Y3Rvci5uYW1lfSBleHRyYWN0ZWQgKGF0IGluZGV4PSR7cGFyc2VkSW5kZXh9KSAnJHtwYXJzZWRUZXh0fSdgKSk7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2gocGFyc2VkUmVzdWx0KTtcbiAgICAgICAgICAgIHJlbWFpbmluZ1RleHQgPSBvcmlnaW5hbFRleHQuc3Vic3RyaW5nKHBhcnNlZEluZGV4ICsgcGFyc2VkVGV4dC5sZW5ndGgpO1xuICAgICAgICAgICAgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFBhcnNpbmdDb250ZXh0IHtcbiAgICB0ZXh0O1xuICAgIG9wdGlvbjtcbiAgICByZWZlcmVuY2U7XG4gICAgcmVmRGF0ZTtcbiAgICBjb25zdHJ1Y3Rvcih0ZXh0LCByZWZEYXRlLCBvcHRpb24pIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgdGhpcy5vcHRpb24gPSBvcHRpb24gPz8ge307XG4gICAgICAgIHRoaXMucmVmZXJlbmNlID0gUmVmZXJlbmNlV2l0aFRpbWV6b25lLmZyb21JbnB1dChyZWZEYXRlLCB0aGlzLm9wdGlvbi50aW1lem9uZXMpO1xuICAgICAgICB0aGlzLnJlZkRhdGUgPSB0aGlzLnJlZmVyZW5jZS5pbnN0YW50O1xuICAgIH1cbiAgICBjcmVhdGVQYXJzaW5nQ29tcG9uZW50cyhjb21wb25lbnRzKSB7XG4gICAgICAgIGlmIChjb21wb25lbnRzIGluc3RhbmNlb2YgUGFyc2luZ0NvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2luZ0NvbXBvbmVudHModGhpcy5yZWZlcmVuY2UsIGNvbXBvbmVudHMpO1xuICAgIH1cbiAgICBjcmVhdGVQYXJzaW5nUmVzdWx0KGluZGV4LCB0ZXh0T3JFbmRJbmRleCwgc3RhcnRDb21wb25lbnRzLCBlbmRDb21wb25lbnRzKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSB0eXBlb2YgdGV4dE9yRW5kSW5kZXggPT09IFwic3RyaW5nXCIgPyB0ZXh0T3JFbmRJbmRleCA6IHRoaXMudGV4dC5zdWJzdHJpbmcoaW5kZXgsIHRleHRPckVuZEluZGV4KTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBzdGFydENvbXBvbmVudHMgPyB0aGlzLmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHN0YXJ0Q29tcG9uZW50cykgOiBudWxsO1xuICAgICAgICBjb25zdCBlbmQgPSBlbmRDb21wb25lbnRzID8gdGhpcy5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cyhlbmRDb21wb25lbnRzKSA6IG51bGw7XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2luZ1Jlc3VsdCh0aGlzLnJlZmVyZW5jZSwgaW5kZXgsIHRleHQsIHN0YXJ0LCBlbmQpO1xuICAgIH1cbiAgICBkZWJ1ZyhibG9jaykge1xuICAgICAgICBpZiAodGhpcy5vcHRpb24uZGVidWcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbi5kZWJ1ZyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb24uZGVidWcoYmxvY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMub3B0aW9uLmRlYnVnO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIuZGVidWcoYmxvY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2hyb25vLmpzLm1hcCIsImltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBFTkRlZmF1bHRDb25maWd1cmF0aW9uIGZyb20gXCIuL2NvbmZpZ3VyYXRpb24uanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjb25maWd1cmF0aW9uID0gbmV3IEVORGVmYXVsdENvbmZpZ3VyYXRpb24oKTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNvbmZpZ3VyYXRpb24uY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihmYWxzZSkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY29uZmlndXJhdGlvbi5jcmVhdGVDb25maWd1cmF0aW9uKHRydWUsIGZhbHNlKSk7XG5leHBvcnQgY29uc3QgR0IgPSBuZXcgQ2hyb25vKGNvbmZpZ3VyYXRpb24uY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzp1bXx2b24pXFxcXHMqKT9cIjtcbiAgICB9XG4gICAgZm9sbG93aW5nUGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBcIlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnHxiaXMpXFxcXHMqXCI7XG4gICAgfVxuICAgIGV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgaWYgKG1hdGNoWzBdLm1hdGNoKC9eXFxzKlxcZHs0fVxccyokLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERVRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJzb25udGFnXCI6IDAsXG4gICAgXCJzb1wiOiAwLFxuICAgIFwibW9udGFnXCI6IDEsXG4gICAgXCJtb1wiOiAxLFxuICAgIFwiZGllbnN0YWdcIjogMixcbiAgICBcImRpXCI6IDIsXG4gICAgXCJtaXR0d29jaFwiOiAzLFxuICAgIFwibWlcIjogMyxcbiAgICBcImRvbm5lcnN0YWdcIjogNCxcbiAgICBcImRvXCI6IDQsXG4gICAgXCJmcmVpdGFnXCI6IDUsXG4gICAgXCJmclwiOiA1LFxuICAgIFwic2Ftc3RhZ1wiOiA2LFxuICAgIFwic2FcIjogNixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICBcImphbnVhclwiOiAxLFxuICAgIFwiasOkbm5lclwiOiAxLFxuICAgIFwiamFubmVyXCI6IDEsXG4gICAgXCJqYW5cIjogMSxcbiAgICBcImphbi5cIjogMSxcbiAgICBcImZlYnJ1YXJcIjogMixcbiAgICBcImZlYmVyXCI6IDIsXG4gICAgXCJmZWJcIjogMixcbiAgICBcImZlYi5cIjogMixcbiAgICBcIm3DpHJ6XCI6IDMsXG4gICAgXCJtYWVyelwiOiAzLFxuICAgIFwibcOkclwiOiAzLFxuICAgIFwibcOkci5cIjogMyxcbiAgICBcIm1yelwiOiAzLFxuICAgIFwibXJ6LlwiOiAzLFxuICAgIFwiYXByaWxcIjogNCxcbiAgICBcImFwclwiOiA0LFxuICAgIFwiYXByLlwiOiA0LFxuICAgIFwibWFpXCI6IDUsXG4gICAgXCJqdW5pXCI6IDYsXG4gICAgXCJqdW5cIjogNixcbiAgICBcImp1bi5cIjogNixcbiAgICBcImp1bGlcIjogNyxcbiAgICBcImp1bFwiOiA3LFxuICAgIFwianVsLlwiOiA3LFxuICAgIFwiYXVndXN0XCI6IDgsXG4gICAgXCJhdWdcIjogOCxcbiAgICBcImF1Zy5cIjogOCxcbiAgICBcInNlcHRlbWJlclwiOiA5LFxuICAgIFwic2VwXCI6IDksXG4gICAgXCJzZXAuXCI6IDksXG4gICAgXCJzZXB0XCI6IDksXG4gICAgXCJzZXB0LlwiOiA5LFxuICAgIFwib2t0b2JlclwiOiAxMCxcbiAgICBcIm9rdFwiOiAxMCxcbiAgICBcIm9rdC5cIjogMTAsXG4gICAgXCJub3ZlbWJlclwiOiAxMSxcbiAgICBcIm5vdlwiOiAxMSxcbiAgICBcIm5vdi5cIjogMTEsXG4gICAgXCJkZXplbWJlclwiOiAxMixcbiAgICBcImRlelwiOiAxMixcbiAgICBcImRlei5cIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IElOVEVHRVJfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIFwiZWluc1wiOiAxLFxuICAgIFwiZWluZVwiOiAxLFxuICAgIFwiZWluZW1cIjogMSxcbiAgICBcImVpbmVuXCI6IDEsXG4gICAgXCJlaW5lclwiOiAxLFxuICAgIFwiendlaVwiOiAyLFxuICAgIFwiZHJlaVwiOiAzLFxuICAgIFwidmllclwiOiA0LFxuICAgIFwiZsO8bmZcIjogNSxcbiAgICBcImZ1ZW5mXCI6IDUsXG4gICAgXCJzZWNoc1wiOiA2LFxuICAgIFwic2llYmVuXCI6IDcsXG4gICAgXCJhY2h0XCI6IDgsXG4gICAgXCJuZXVuXCI6IDksXG4gICAgXCJ6ZWhuXCI6IDEwLFxuICAgIFwiZWxmXCI6IDExLFxuICAgIFwienfDtmxmXCI6IDEyLFxuICAgIFwiendvZWxmXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICBzZWs6IFwic2Vjb25kXCIsXG4gICAgc2VrdW5kZTogXCJzZWNvbmRcIixcbiAgICBzZWt1bmRlbjogXCJzZWNvbmRcIixcbiAgICBtaW46IFwibWludXRlXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZW46IFwibWludXRlXCIsXG4gICAgaDogXCJob3VyXCIsXG4gICAgc3RkOiBcImhvdXJcIixcbiAgICBzdHVuZGU6IFwiaG91clwiLFxuICAgIHN0dW5kZW46IFwiaG91clwiLFxuICAgIHRhZzogXCJkYXlcIixcbiAgICB0YWdlOiBcImRheVwiLFxuICAgIHRhZ2VuOiBcImRheVwiLFxuICAgIHdvY2hlOiBcIndlZWtcIixcbiAgICB3b2NoZW46IFwid2Vla1wiLFxuICAgIG1vbmF0OiBcIm1vbnRoXCIsXG4gICAgbW9uYXRlOiBcIm1vbnRoXCIsXG4gICAgbW9uYXRlbjogXCJtb250aFwiLFxuICAgIG1vbmF0czogXCJtb250aFwiLFxuICAgIHF1YXJ0YWw6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0YWxzOiBcInF1YXJ0ZXJcIixcbiAgICBxdWFydGFsZTogXCJxdWFydGVyXCIsXG4gICAgcXVhcnRhbGVuOiBcInF1YXJ0ZXJcIixcbiAgICBhOiBcInllYXJcIixcbiAgICBqOiBcInllYXJcIixcbiAgICBqcjogXCJ5ZWFyXCIsXG4gICAgamFocjogXCJ5ZWFyXCIsXG4gICAgamFocmU6IFwieWVhclwiLFxuICAgIGphaHJlbjogXCJ5ZWFyXCIsXG4gICAgamFocmVzOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt8aGFsYj98aGFsYmU/fGVpbmlnZW4/fHdlbmlnZW4/fG1laHJlcmVuPylgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtID09PSBcImVpblwiIHx8IG51bSA9PT0gXCJlaW5lclwiIHx8IG51bSA9PT0gXCJlaW5lbVwiIHx8IG51bSA9PT0gXCJlaW5lblwiIHx8IG51bSA9PT0gXCJlaW5lXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvd2VuaWdlbi8pKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2hhbGIvKSB8fCBudW0ubWF0Y2goL2hhbGJlbi8pKSB7XG4gICAgICAgIHJldHVybiAwLjU7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvZWluaWdlbi8pKSB7XG4gICAgICAgIHJldHVybiAzO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL21laHJlcmVuLykpIHtcbiAgICAgICAgcmV0dXJuIDc7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUZsb2F0KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlswLTldezEsNH0oPzpcXFxccypbdm5dXFxcXC4/XFxcXHMqKD86Qyg/OmhyKT98KD86dVxcXFwuP3xkXFxcXC4/KD86XFxcXHMqZ1xcXFwuPyk/KT9cXFxccypaKVxcXFwuP3xcXFxccyooPzp1XFxcXC4/fGRcXFxcLj8oPzpcXFxccypnXFxcXC4pPylcXFxccypaXFxcXC4/KT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXIobWF0Y2gpIHtcbiAgICBpZiAoL3YvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICByZXR1cm4gLXBhcnNlSW50KG1hdGNoLnJlcGxhY2UoL1teMC05XSsvZ2ksIFwiXCIpKTtcbiAgICB9XG4gICAgaWYgKC9uL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoLnJlcGxhY2UoL1teMC05XSsvZ2ksIFwiXCIpKTtcbiAgICB9XG4gICAgaWYgKC96L2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoLnJlcGxhY2UoL1teMC05XSsvZ2ksIFwiXCIpKTtcbiAgICB9XG4gICAgY29uc3QgcmF3WWVhck51bWJlciA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICByZXR1cm4gZmluZE1vc3RMaWtlbHlBRFllYXIocmF3WWVhck51bWJlcik7XG59XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4gPSBgKCR7TlVNQkVSX1BBVFRFUk59KVxcXFxzezAsNX0oJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlcXFxcc3swLDV9YDtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUkVHRVggPSBuZXcgUmVnRXhwKFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiwgXCJpXCIpO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfUEFUVEVSTiA9IHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKFwiXCIsIFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTik7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Oig/OlxcXFwsfFxcXFwofFxcXFzvvIgpXFxcXHMqKT9cIiArXG4gICAgXCIoPzphW21uXVxcXFxzKj8pP1wiICtcbiAgICBcIig/OihkaWVzZVttbl18bGV0enRlW21uXXxuKD86w6R8YWUpY2hzdGVbbW5dKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKGRpZXNlfGxldHp0ZXxuKD86w6R8YWUpY2hzdGUpXFxcXHMqd29jaGUpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBTVUZGSVhfR1JPVVAgPSAzO1xuY29uc3QgV0VFS0RBWV9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERVdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFdFRUtEQVlfRElDVElPTkFSWVtkYXlPZldlZWtdO1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfR1JPVVBdO1xuICAgICAgICBjb25zdCBwb3N0Zml4ID0gbWF0Y2hbU1VGRklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQubWF0Y2goL2xldHp0ZS8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZC5tYXRjaCgvY2hzdGUvKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQubWF0Y2goL2RpZXNlLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJ0aGlzXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCBvZmZzZXQsIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERVdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmNvbnN0IEZJUlNUX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIihefFxcXFxzfFQpXCIgK1xuICAgIFwiKD86KD86dW18dm9uKVxcXFxzKik/XCIgK1xuICAgIFwiKFxcXFxkezEsMn0pKD86aHw6KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzptfDopPyk/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86cyk/KT9cIiArXG4gICAgXCIoPzpcXFxccypVaHIpP1wiICtcbiAgICBcIig/OlxcXFxzKihtb3JnZW5zfHZvcm1pdHRhZ3N8bmFjaG1pdHRhZ3N8YWJlbmRzfG5hY2h0c3xhbVxcXFxzKyg/Ok1vcmdlbnxWb3JtaXR0YWd8TmFjaG1pdHRhZ3xBYmVuZCl8aW5cXFxccytkZXJcXFxccytOYWNodCkpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFNFQ09ORF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCJeXFxcXHMqKFxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnHxiaXMoPzpcXFxccyt1bSk/fFxcXFw/KVxcXFxzKlwiICtcbiAgICBcIihcXFxcZHsxLDJ9KSg/Omh8Oik/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86bXw6KT8pP1wiICtcbiAgICBcIig/OihcXFxcZHsxLDJ9KSg/OnMpPyk/XCIgK1xuICAgIFwiKD86XFxcXHMqVWhyKT9cIiArXG4gICAgXCIoPzpcXFxccyoobW9yZ2Vuc3x2b3JtaXR0YWdzfG5hY2htaXR0YWdzfGFiZW5kc3xuYWNodHN8YW1cXFxccysoPzpNb3JnZW58Vm9ybWl0dGFnfE5hY2htaXR0YWd8QWJlbmQpfGluXFxcXHMrZGVyXFxcXHMrTmFjaHQpKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBIT1VSX0dST1VQID0gMjtcbmNvbnN0IE1JTlVURV9HUk9VUCA9IDM7XG5jb25zdCBTRUNPTkRfR1JPVVAgPSA0O1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUCA9IDU7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERVNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIHBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gRklSU1RfUkVHX1BBVFRFUk47XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4ICsgbWF0Y2hbMV0ubGVuZ3RoLCBtYXRjaFswXS5zdWJzdHJpbmcobWF0Y2hbMV0ubGVuZ3RoKSk7XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXlxcZHs0fSQvKSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gREVTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50KHJlc3VsdC5zdGFydC5jbG9uZSgpLCBtYXRjaCk7XG4gICAgICAgIGlmICghcmVzdWx0LnN0YXJ0KSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW1haW5pbmdUZXh0ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHNlY29uZE1hdGNoID0gU0VDT05EX1JFR19QQVRURVJOLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaCkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IERFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5leHRyYWN0VGltZUNvbXBvbmVudChyZXN1bHQuc3RhcnQuY2xvbmUoKSwgc2Vjb25kTWF0Y2gpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGV4dCArPSBzZWNvbmRNYXRjaFswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBzdGF0aWMgZXh0cmFjdFRpbWVDb21wb25lbnQoZXh0cmFjdGluZ0NvbXBvbmVudHMsIG1hdGNoKSB7XG4gICAgICAgIGxldCBob3VyID0gMDtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IG51bGw7XG4gICAgICAgIGhvdXIgPSBwYXJzZUludChtYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIGlmIChtYXRjaFtNSU5VVEVfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjAgfHwgaG91ciA+IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+PSAxMikge1xuICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5QTTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPiAxMilcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGFtcG0gPSBtYXRjaFtBTV9QTV9IT1VSX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKGFtcG0ubWF0Y2goL21vcmdlbnx2b3JtaXR0YWcvKSkge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uQU07XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFtcG0ubWF0Y2goL25hY2htaXR0YWd8YWJlbmQvKSkge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbS5tYXRjaCgvbmFjaHQvKSkge1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uQU07XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChob3VyIDwgNikge1xuICAgICAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5QTTtcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXh0cmFjdGluZ0NvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBob3VyKTtcbiAgICAgICAgZXh0cmFjdGluZ0NvbXBvbmVudHMuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgZXh0cmFjdGluZ0NvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZXh0cmFjdGluZ0NvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW1NFQ09ORF9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gcGFyc2VJbnQobWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgZXh0cmFjdGluZ0NvbXBvbmVudHMuYXNzaWduKFwic2Vjb25kXCIsIHNlY29uZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4dHJhY3RpbmdDb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyooYmlzKD86XFxzKig/OmFtfHp1bSkpP3wtKVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERU1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXlxcXFxzKihUfHVtfGFtfCx8LSk/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERU1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGltcGx5U2ltaWxhclRpbWUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gLyhkaWVzZW4pP1xccyoobW9yZ2VufHZvcm1pdHRhZ3xtaXR0YWdzP3xuYWNobWl0dGFnfGFiZW5kfG5hY2h0fG1pdHRlcm5hY2h0KSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgdGltZUtleXdvcmRQYXR0ZXJuID0gbWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgIHJldHVybiBERUNhc3VhbFRpbWVQYXJzZXIuZXh0cmFjdFRpbWVDb21wb25lbnRzKGNvbXBvbmVudCwgdGltZUtleXdvcmRQYXR0ZXJuKTtcbiAgICB9XG4gICAgc3RhdGljIGV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkUGF0dGVybikge1xuICAgICAgICBzd2l0Y2ggKHRpbWVLZXl3b3JkUGF0dGVybikge1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdlblwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidm9ybWl0dGFnXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaXR0YWdcIjpcbiAgICAgICAgICAgIGNhc2UgXCJtaXR0YWdzXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibmFjaG1pdHRhZ1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImFiZW5kXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxOCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibmFjaHRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaXR0ZXJuYWNodFwiOlxuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQuZ2V0KFwiaG91clwiKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZER1cmF0aW9uQXNJbXBsaWVkKHsgXCJkYXlcIjogMSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgREVDYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL0RFQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmltcG9ydCB7IGFkZER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKGpldHp0fGhldXRlfG1vcmdlbnzDvGJlcm1vcmdlbnx1ZWJlcm1vcmdlbnxnZXN0ZXJufHZvcmdlc3Rlcm58bGV0enRlXFxcXHMqbmFjaHQpYCArXG4gICAgYCg/OlxcXFxzKihtb3JnZW58dm9ybWl0dGFnfG1pdHRhZ3M/fG5hY2htaXR0YWd8YWJlbmR8bmFjaHR8bWl0dGVybmFjaHQpKT9gICtcbiAgICBgKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IFRJTUVfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICAgICAgY29uc3QgZGF0ZUtleXdvcmQgPSAobWF0Y2hbREFURV9HUk9VUF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGltZUtleXdvcmQgPSAobWF0Y2hbVElNRV9HUk9VUF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChkYXRlS2V5d29yZCkge1xuICAgICAgICAgICAgY2FzZSBcImpldHp0XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImhldXRlXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibW9yZ2VuXCI6XG4gICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IGFkZER1cmF0aW9uKHRhcmdldERhdGUsIHsgZGF5OiAxIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIsO8YmVybW9yZ2VuXCI6XG4gICAgICAgICAgICBjYXNlIFwidWViZXJtb3JnZW5cIjpcbiAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gYWRkRHVyYXRpb24odGFyZ2V0RGF0ZSwgeyBkYXk6IDIgfSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZ2VzdGVyblwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTEgfSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidm9yZ2VzdGVyblwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTIgfSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmIChkYXRlS2V5d29yZC5tYXRjaCgvbGV0enRlXFxzKm5hY2h0LykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldERhdGUuZ2V0SG91cnMoKSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTEgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWVLZXl3b3JkKSB7XG4gICAgICAgICAgICBjb21wb25lbnQgPSBERUNhc3VhbFRpbWVQYXJzZXIuZXh0cmFjdFRpbWVDb21wb25lbnRzKGNvbXBvbmVudCwgdGltZUtleXdvcmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OmFtXFxcXHMqPyk/XCIgK1xuICAgIFwiKD86ZGVuXFxcXHMqPyk/XCIgK1xuICAgIGAoWzAtOV17MSwyfSlcXFxcLmAgK1xuICAgIGAoPzpcXFxccyooPzpiaXMoPzpcXFxccyooPzphbXx6dW0pKT98XFxcXC18XFxcXOKAk3xcXFxccylcXFxccyooWzAtOV17MSwyfSlcXFxcLj8pP1xcXFxzKmAgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGAoPzooPzotfC98LD9cXFxccyopKCR7WUVBUl9QQVRURVJOfSg/IVteXFxcXHNdXFxcXGQpKSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFURV9HUk9VUF0pO1xuICAgICAgICBpZiAoZGF5ID4gMzEpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFtEQVRFX0dST1VQXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhck51bWJlciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbREFURV9UT19HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZUludChtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE5VTUJFUl9QQVRURVJOLCBwYXJzZU51bWJlclBhdHRlcm4sIFRJTUVfVU5JVF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAoPzpcXFxccyooKD86bsOkY2hzdGV8a29tbWVuZGV8Zm9sZ2VuZGV8bGV0enRlfHZlcmdhbmdlbmV8dm9yaWdlfHZvcig/OmhlcnxhbilnZWdhbmdlbmUpKD86c3xufG18cik/fHZvcnxpbilcXFxccyopP2AgK1xuICAgICAgICAgICAgYCgke05VTUJFUl9QQVRURVJOfSk/YCArXG4gICAgICAgICAgICBgKD86XFxcXHMqKG7DpGNoc3RlfGtvbW1lbmRlfGZvbGdlbmRlfGxldHp0ZXx2ZXJnYW5nZW5lfHZvcmlnZXx2b3IoPzpoZXJ8YW4pZ2VnYW5nZW5lKSg/OnN8bnxtfHIpPyk/YCArXG4gICAgICAgICAgICBgXFxcXHMqKCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pKD89XFxcXFd8JClgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBudW0gPSBtYXRjaFsyXSA/IHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaFsyXSkgOiAxO1xuICAgICAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbNF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGxldCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgdGltZVVuaXRzW3VuaXRdID0gbnVtO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBtYXRjaFsxXSB8fCBtYXRjaFszXSB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllciA9IG1vZGlmaWVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghbW9kaWZpZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoL3Zvci8udGVzdChtb2RpZmllcikgfHwgL2xldHp0ZS8udGVzdChtb2RpZmllcikgfHwgL3Zlcmdhbmdlbi8udGVzdChtb2RpZmllcikpIHtcbiAgICAgICAgICAgIHRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAoPzppbnxmw7xyfHfDpGhyZW5kKVxcXFxzKigke1RJTUVfVU5JVFNfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBJU09Gb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL0lTT0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IERFVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9ERVRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgREVXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgREVTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgREVNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvREVNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBERU1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0RFTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCBERUNhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9ERUNhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBERUNhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9ERUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzXCI7XG5pbXBvcnQgREVUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgREVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKHRydWUpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCBsaXR0bGVFbmRpYW4pO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IERFQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBERUNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgREVUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSwgbGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBERVRpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgREVTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgREVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBERVdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBERVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IERFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCksIG5ldyBERU1lcmdlRGF0ZVRpbWVSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUkNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8obWFpbnRlbmFudHxhdWpvdXJkJ2h1aXxkZW1haW58aGllcnxjZXR0ZVxccypudWl0fGxhXFxzKnZlaWxsZSkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJtYWludGVuYW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJhdWpvdXJkJ2h1aVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJoaWVyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJkZW1haW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL2NldHRlXFxzKm51aXQvKSkge1xuICAgICAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChsb3dlclRleHQubWF0Y2goL2xhXFxzKnZlaWxsZS8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzRGF5ID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0RheS5zZXREYXRlKHByZXZpb3VzRGF5LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHByZXZpb3VzRGF5KTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUkNhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAvKGNldD8pP1xccyoobWF0aW58c29pcnxhcHLDqHMtbWlkaXxhcHJlbXxhIG1pZGl8w6AgbWludWl0KSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3Qgc3VmZml4TG93ZXIgPSBtYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAoc3VmZml4TG93ZXIpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhcHLDqHMtbWlkaVwiOlxuICAgICAgICAgICAgY2FzZSBcImFwcmVtXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzb2lyXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxOCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtYXRpblwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgOCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJhIG1pZGlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIsOgIG1pbnVpdFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJDYXN1YWxUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/Oig/OlvDoGFdKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8W8OgYV18XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxuICAgIGV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgaWYgKG1hdGNoWzBdLm1hdGNoKC9eXFxzKlxcZHs0fVxccyokLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUlRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooVHzDoHxhfGF1fHZlcnN8ZGV8LHwtKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKMOgfGF8YXV8LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcImRpbWFuY2hlXCI6IDAsXG4gICAgXCJkaW1cIjogMCxcbiAgICBcImx1bmRpXCI6IDEsXG4gICAgXCJsdW5cIjogMSxcbiAgICBcIm1hcmRpXCI6IDIsXG4gICAgXCJtYXJcIjogMixcbiAgICBcIm1lcmNyZWRpXCI6IDMsXG4gICAgXCJtZXJcIjogMyxcbiAgICBcImpldWRpXCI6IDQsXG4gICAgXCJqZXVcIjogNCxcbiAgICBcInZlbmRyZWRpXCI6IDUsXG4gICAgXCJ2ZW5cIjogNSxcbiAgICBcInNhbWVkaVwiOiA2LFxuICAgIFwic2FtXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJqYW52aWVyXCI6IDEsXG4gICAgXCJqYW5cIjogMSxcbiAgICBcImphbi5cIjogMSxcbiAgICBcImbDqXZyaWVyXCI6IDIsXG4gICAgXCJmw6l2XCI6IDIsXG4gICAgXCJmw6l2LlwiOiAyLFxuICAgIFwiZmV2cmllclwiOiAyLFxuICAgIFwiZmV2XCI6IDIsXG4gICAgXCJmZXYuXCI6IDIsXG4gICAgXCJtYXJzXCI6IDMsXG4gICAgXCJtYXJcIjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBcImF2cmlsXCI6IDQsXG4gICAgXCJhdnJcIjogNCxcbiAgICBcImF2ci5cIjogNCxcbiAgICBcIm1haVwiOiA1LFxuICAgIFwianVpblwiOiA2LFxuICAgIFwianVuXCI6IDYsXG4gICAgXCJqdWlsbGV0XCI6IDcsXG4gICAgXCJqdWlsXCI6IDcsXG4gICAgXCJqdWxcIjogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBcImFvw7t0XCI6IDgsXG4gICAgXCJhb3V0XCI6IDgsXG4gICAgXCJzZXB0ZW1icmVcIjogOSxcbiAgICBcInNlcFwiOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIFwic2VwdFwiOiA5LFxuICAgIFwic2VwdC5cIjogOSxcbiAgICBcIm9jdG9icmVcIjogMTAsXG4gICAgXCJvY3RcIjogMTAsXG4gICAgXCJvY3QuXCI6IDEwLFxuICAgIFwibm92ZW1icmVcIjogMTEsXG4gICAgXCJub3ZcIjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIFwiZMOpY2VtYnJlXCI6IDEyLFxuICAgIFwiZGVjZW1icmVcIjogMTIsXG4gICAgXCJkZWNcIjogMTIsXG4gICAgXCJkZWMuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcInVuXCI6IDEsXG4gICAgXCJkZXV4XCI6IDIsXG4gICAgXCJ0cm9pc1wiOiAzLFxuICAgIFwicXVhdHJlXCI6IDQsXG4gICAgXCJjaW5xXCI6IDUsXG4gICAgXCJzaXhcIjogNixcbiAgICBcInNlcHRcIjogNyxcbiAgICBcImh1aXRcIjogOCxcbiAgICBcIm5ldWZcIjogOSxcbiAgICBcImRpeFwiOiAxMCxcbiAgICBcIm9uemVcIjogMTEsXG4gICAgXCJkb3V6ZVwiOiAxMixcbiAgICBcInRyZWl6ZVwiOiAxMyxcbn07XG5leHBvcnQgY29uc3QgVElNRV9VTklUX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJzZWNcIjogXCJzZWNvbmRcIixcbiAgICBcInNlY29uZGVcIjogXCJzZWNvbmRcIixcbiAgICBcInNlY29uZGVzXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW5cIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnNcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0ZVwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXRlc1wiOiBcIm1pbnV0ZVwiLFxuICAgIFwiaFwiOiBcImhvdXJcIixcbiAgICBcImhyXCI6IFwiaG91clwiLFxuICAgIFwiaHJzXCI6IFwiaG91clwiLFxuICAgIFwiaGV1cmVcIjogXCJob3VyXCIsXG4gICAgXCJoZXVyZXNcIjogXCJob3VyXCIsXG4gICAgXCJqb3VyXCI6IFwiZGF5XCIsXG4gICAgXCJqb3Vyc1wiOiBcImRheVwiLFxuICAgIFwic2VtYWluZVwiOiBcIndlZWtcIixcbiAgICBcInNlbWFpbmVzXCI6IFwid2Vla1wiLFxuICAgIFwibW9pc1wiOiBcIm1vbnRoXCIsXG4gICAgXCJ0cmltZXN0cmVcIjogXCJxdWFydGVyXCIsXG4gICAgXCJ0cmltZXN0cmVzXCI6IFwicXVhcnRlclwiLFxuICAgIFwiYW5zXCI6IFwieWVhclwiLFxuICAgIFwiYW5uw6llXCI6IFwieWVhclwiLFxuICAgIFwiYW5uw6llc1wiOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt8dW5lP1xcXFxifHF1ZWxxdWVzP3xkZW1pLT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJ1bmVcIiB8fCBudW0gPT09IFwidW5cIikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9xdWVscXVlcz8vKSkge1xuICAgICAgICByZXR1cm4gMztcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9kZW1pLT8vKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86WzAtOV17MSwyfSg/OmVyKT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgbGV0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgbnVtID0gbnVtLnJlcGxhY2UoLyg/OmVyKSQvaSwgXCJcIik7XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlsxLTldWzAtOV17MCwzfVxcXFxzKig/OkFDfEFEfHBcXFxcLlxcXFxzKkMoPzpocj8pP1xcXFwuXFxcXHMqblxcXFwuKXxbMS0yXVswLTldezN9fFs1LTldWzAtOV0pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXIobWF0Y2gpIHtcbiAgICBpZiAoL0FDL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC9CQy9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGlmICgvQUQvaS50ZXN0KG1hdGNoKSB8fCAvQy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvW15cXGRdKy9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgbGV0IHllYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgaWYgKHllYXJOdW1iZXIgPCAxMDApIHtcbiAgICAgICAgaWYgKHllYXJOdW1iZXIgPiA1MCkge1xuICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJOdW1iZXIgKyAxOTAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJOdW1iZXIgKyAyMDAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB5ZWFyTnVtYmVyO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnRzO1xufVxuZnVuY3Rpb24gY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaFsxXSk7XG4gICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgIGZyYWdtZW50c1t1bml0XSA9IG51bTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86KD86Y2UpXFxcXHMqKT9cIiArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlxcXFxzKig/OlxcXFwsfFxcXFwpfFxcXFzvvIkpKT9cIiArXG4gICAgXCIoPzpcXFxccyooZGVybmllcnxwcm9jaGFpbilcXFxccyopP1wiICtcbiAgICBcIig/PVxcXFxXfFxcXFxkfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAxO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKHdlZWtkYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN1ZmZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBzdWZmaXggPSBzdWZmaXggfHwgXCJcIjtcbiAgICAgICAgc3VmZml4ID0gc3VmZml4LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChzdWZmaXggPT0gXCJkZXJuaWVyXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJsYXN0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3VmZml4ID09IFwicHJvY2hhaW5cIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUldlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmNvbnN0IEZJUlNUX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIihefFxcXFxzfFQpXCIgK1xuICAgIFwiKD86KD86W8OgYV0pXFxcXHMqKT9cIiArXG4gICAgXCIoXFxcXGR7MSwyfSkoPzpofDopP1wiICtcbiAgICBcIig/OihcXFxcZHsxLDJ9KSg/Om18Oik/KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzpzfDopPyk/XCIgK1xuICAgIFwiKD86XFxcXHMqKEFcXFxcLk1cXFxcLnxQXFxcXC5NXFxcXC58QU0/fFBNPykpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFNFQ09ORF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCJeXFxcXHMqKFxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnHxbw6BhXXxcXFxcPylcXFxccypcIiArXG4gICAgXCIoXFxcXGR7MSwyfSkoPzpofDopP1wiICtcbiAgICBcIig/OihcXFxcZHsxLDJ9KSg/Om18Oik/KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzpzfDopPyk/XCIgK1xuICAgIFwiKD86XFxcXHMqKEFcXFxcLk1cXFxcLnxQXFxcXC5NXFxcXC58QU0/fFBNPykpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IEhPVVJfR1JPVVAgPSAyO1xuY29uc3QgTUlOVVRFX0dST1VQID0gMztcbmNvbnN0IFNFQ09ORF9HUk9VUCA9IDQ7XG5jb25zdCBBTV9QTV9IT1VSX0dST1VQID0gNTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBGSVJTVF9SRUdfUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXggKyBtYXRjaFsxXS5sZW5ndGgsIG1hdGNoWzBdLnN1YnN0cmluZyhtYXRjaFsxXS5sZW5ndGgpKTtcbiAgICAgICAgaWYgKHJlc3VsdC50ZXh0Lm1hdGNoKC9eXFxkezR9JC8pKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuc3RhcnQgPSBGUlNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuZXh0cmFjdFRpbWVDb21wb25lbnQocmVzdWx0LnN0YXJ0LmNsb25lKCksIG1hdGNoKTtcbiAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnQpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ1RleHQgPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBTRUNPTkRfUkVHX1BBVFRFUk4uZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICAgICAgaWYgKHNlY29uZE1hdGNoKSB7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gRlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50KHJlc3VsdC5zdGFydC5jbG9uZSgpLCBzZWNvbmRNYXRjaCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmVuZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50ZXh0ICs9IHNlY29uZE1hdGNoWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHN0YXRpYyBleHRyYWN0VGltZUNvbXBvbmVudChleHRyYWN0aW5nQ29tcG9uZW50cywgbWF0Y2gpIHtcbiAgICAgICAgbGV0IGhvdXIgPSAwO1xuICAgICAgICBsZXQgbWludXRlID0gMDtcbiAgICAgICAgbGV0IG1lcmlkaWVtID0gbnVsbDtcbiAgICAgICAgaG91ciA9IHBhcnNlSW50KG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgaWYgKG1hdGNoW01JTlVURV9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgbWludXRlID0gcGFyc2VJbnQobWF0Y2hbTUlOVVRFX0dST1VQXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCB8fCBob3VyID4gMjQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID49IDEyKSB7XG4gICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtBTV9QTV9IT1VSX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA+IDEyKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29uc3QgYW1wbSA9IG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcImFcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uQU07XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFtcG0gPT0gXCJwXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgaG91cik7XG4gICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtTRUNPTkRfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcInNlY29uZFwiLCBzZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHRyYWN0aW5nQ29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUlNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Om9uXFxcXHMqPyk/XCIgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICBgKD86XFxcXHMqKD86YXV8XFxcXC18XFxcXOKAk3xqdXNxdSdhdT98XFxcXHMpXFxcXHMqKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pKT9gICtcbiAgICBgKD86LXwvfFxcXFxzKig/OmRlKT9cXFxccyopYCArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgYCg/Oig/Oi18L3wsP1xcXFxzKikoJHtZRUFSX1BBVFRFUk59KD8hW15cXFxcc11cXFxcZCkpKT9gICtcbiAgICBgKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBpbCB5IGFcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PSg/OlxcXFxXfCQpKWAsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBvdXRwdXRUaW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgb3V0cHV0VGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAoPzpkYW5zfGVufHBvdXJ8cGVuZGFudHxkZSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBOVU1CRVJfUEFUVEVSTiwgcGFyc2VOdW1iZXJQYXR0ZXJuLCBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86bGVzP3xsYXxsJ3xkdXxkZXM/KVxcXFxzKmAgK1xuICAgICAgICAgICAgYCgke05VTUJFUl9QQVRURVJOfSk/YCArXG4gICAgICAgICAgICBgKD86XFxcXHMqKHByb2NoYWluZT9zP3xkZXJuaVtlw6hdcmU/cz98cGFzc1vDqWVdZT9zP3xwclvDqWVdY1vDqWVdZGVudHM/fHN1aXZhbnRlP3M/KSk/YCArXG4gICAgICAgICAgICBgXFxcXHMqKCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYCArXG4gICAgICAgICAgICBgKD86XFxcXHMqKHByb2NoYWluZT9zP3xkZXJuaVtlw6hdcmU/cz98cGFzc1vDqWVdZT9zP3xwclvDqWVdY1vDqWVdZGVudHM/fHN1aXZhbnRlP3M/KSk/YCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbnVtID0gbWF0Y2hbMV0gPyBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pIDogMTtcbiAgICAgICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzNdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBsZXQgdGltZVVuaXRzID0ge307XG4gICAgICAgIHRpbWVVbml0c1t1bml0XSA9IG51bTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbWF0Y2hbMl0gfHwgbWF0Y2hbNF0gfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXIgPSBtb2RpZmllci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKC9kZXJuaVtlw6hdcmU/cz8vLnRlc3QobW9kaWZpZXIpIHx8IC9wYXNzW8OpZV1lP3M/Ly50ZXN0KG1vZGlmaWVyKSB8fCAvcHJbw6llXWNbw6llXWRlbnRzPy8udGVzdChtb2RpZmllcikpIHtcbiAgICAgICAgICAgIHRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgRlJDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJDYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgRlJDYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJDYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBGUlRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IEZSTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvRlJNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IEZSTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0ZSTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRlJXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgRlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgRlJNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9GUk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IEZSVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9GUlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRlJUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBGUlRpbWVVbml0UmVsYXRpdmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9GUlRpbWVVbml0UmVsYXRpdmVGb3JtYXRQYXJzZXIuanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKHRydWUpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCBsaXR0bGVFbmRpYW4pO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEZSQ2FzdWFsRGF0ZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBGUkNhc3VhbFRpbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRlJUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSwgbGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBGUk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZSVGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBGUlNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBGUlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRlJUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZSV2Vla2RheVBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBGUk1lcmdlRGF0ZVRpbWVSZWZpbmVyKCksIG5ldyBGUk1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImV4cG9ydCBjb25zdCBOVU1CRVIgPSB7XG4gICAgXCLpm7ZcIjogMCxcbiAgICBcIuOAh1wiOiAwLFxuICAgIFwi5LiAXCI6IDEsXG4gICAgXCLkuoxcIjogMixcbiAgICBcIuS4iVwiOiAzLFxuICAgIFwi5ZubXCI6IDQsXG4gICAgXCLkupRcIjogNSxcbiAgICBcIuWFrVwiOiA2LFxuICAgIFwi5LiDXCI6IDcsXG4gICAgXCLlhatcIjogOCxcbiAgICBcIuS5nVwiOiA5LFxuICAgIFwi5Y2BXCI6IDEwLFxufTtcbmV4cG9ydCBjb25zdCBXRUVLREFZX09GRlNFVCA9IHtcbiAgICBcIuaXpVwiOiAwLFxuICAgIFwi5pyIXCI6IDEsXG4gICAgXCLngatcIjogMixcbiAgICBcIuawtFwiOiAzLFxuICAgIFwi5pyoXCI6IDQsXG4gICAgXCLph5FcIjogNSxcbiAgICBcIuWcn1wiOiA2LFxufTtcbmV4cG9ydCBmdW5jdGlvbiB0b0hhbmtha3UodGV4dCkge1xuICAgIHJldHVybiBTdHJpbmcodGV4dClcbiAgICAgICAgLnJlcGxhY2UoL1xcdTIwMTkvZywgXCJcXHUwMDI3XCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXHUyMDFEL2csIFwiXFx1MDAyMlwiKVxuICAgICAgICAucmVwbGFjZSgvXFx1MzAwMC9nLCBcIlxcdTAwMjBcIilcbiAgICAgICAgLnJlcGxhY2UoL1xcdUZGRTUvZywgXCJcXHUwMEE1XCIpXG4gICAgICAgIC5yZXBsYWNlKC9bXFx1RkYwMVxcdUZGMDMtXFx1RkYwNlxcdUZGMDhcXHVGRjA5XFx1RkYwQy1cXHVGRjE5XFx1RkYxQy1cXHVGRjFGXFx1RkYyMS1cXHVGRjNCXFx1RkYzRFxcdUZGM0ZcXHVGRjQxLVxcdUZGNUJcXHVGRjVEXFx1RkY1RV0vZywgYWxwaGFOdW0pO1xufVxuZnVuY3Rpb24gYWxwaGFOdW0odG9rZW4pIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0b2tlbi5jaGFyQ29kZUF0KDApIC0gNjUyNDgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGphU3RyaW5nVG9OdW1iZXIodGV4dCkge1xuICAgIGxldCBudW1iZXIgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGFyID0gdGV4dFtpXTtcbiAgICAgICAgaWYgKGNoYXIgPT09IFwi5Y2BXCIpIHtcbiAgICAgICAgICAgIG51bWJlciA9IG51bWJlciA9PT0gMCA/IE5VTUJFUltjaGFyXSA6IG51bWJlciAqIE5VTUJFUltjaGFyXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG51bWJlciArPSBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bWJlcjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyB0b0hhbmtha3UgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IC8oPzooPzooW+WQjOS7iuacrF0pfCgo5pit5ZKMfOW5s+aIkHzku6TlkowpPyhbMC0577yQLe+8mV17MSw0fXzlhYMpKSnlubRcXHMqKT8oWzAtOe+8kC3vvJldezEsMn0p5pyIXFxzKihbMC0577yQLe+8mV17MSwyfSnml6UvaTtcbmNvbnN0IFNQRUNJQUxfWUVBUl9HUk9VUCA9IDE7XG5jb25zdCBUWVBJQ0FMX1lFQVJfR1JPVVAgPSAyO1xuY29uc3QgRVJBX0dST1VQID0gMztcbmNvbnN0IFlFQVJfTlVNQkVSX0dST1VQID0gNDtcbmNvbnN0IE1PTlRIX0dST1VQID0gNTtcbmNvbnN0IERBWV9HUk9VUCA9IDY7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKUFN0YW5kYXJkUGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaFtNT05USF9HUk9VUF0pKTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoW0RBWV9HUk9VUF0pKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoe1xuICAgICAgICAgICAgZGF5OiBkYXksXG4gICAgICAgICAgICBtb250aDogbW9udGgsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobWF0Y2hbU1BFQ0lBTF9ZRUFSX0dST1VQXSAmJiBtYXRjaFtTUEVDSUFMX1lFQVJfR1JPVVBdLm1hdGNoKFwi5ZCMfOS7inzmnKxcIikpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBjb250ZXh0LnJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbVFlQSUNBTF9ZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhck51bVRleHQgPSBtYXRjaFtZRUFSX05VTUJFUl9HUk9VUF07XG4gICAgICAgICAgICBsZXQgeWVhciA9IHllYXJOdW1UZXh0ID09IFwi5YWDXCIgPyAxIDogcGFyc2VJbnQodG9IYW5rYWt1KHllYXJOdW1UZXh0KSk7XG4gICAgICAgICAgICBpZiAobWF0Y2hbRVJBX0dST1VQXSA9PSBcIuS7pOWSjFwiKSB7XG4gICAgICAgICAgICAgICAgeWVhciArPSAyMDE4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbRVJBX0dST1VQXSA9PSBcIuW5s+aIkFwiKSB7XG4gICAgICAgICAgICAgICAgeWVhciArPSAxOTg4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbRVJBX0dST1VQXSA9PSBcIuaYreWSjFwiKSB7XG4gICAgICAgICAgICAgICAgeWVhciArPSAxOTI1O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1KUFN0YW5kYXJkUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKUE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijjgYvjgol877yNfOODvHwtfO+9nnx+KVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gL+S7iuaXpXzjgY3jgofjgYZ85pys5pelfOOBu+OCk+OBmOOBpHzmmKjml6V844GN44Gu44GGfOaYjuaXpXzjgYLjgZfjgZ985LuK5aScfOOBk+OCk+OChHzku4rlpJV844GT44KT44KG44GGfOS7iuaZqXzjgZPjgpPjgbDjgpN85LuK5pydfOOBkeOBlS9pO1xuZnVuY3Rpb24gbm9ybWFsaXplVGV4dFRvS2FuamkodGV4dCkge1xuICAgIHN3aXRjaCAodGV4dCkge1xuICAgICAgICBjYXNlIFwi44GN44KH44GGXCI6XG4gICAgICAgICAgICByZXR1cm4gXCLku4rml6VcIjtcbiAgICAgICAgY2FzZSBcIuOBu+OCk+OBmOOBpFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5pys5pelXCI7XG4gICAgICAgIGNhc2UgXCLjgY3jga7jgYZcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuaYqOaXpVwiO1xuICAgICAgICBjYXNlIFwi44GC44GX44GfXCI6XG4gICAgICAgICAgICByZXR1cm4gXCLmmI7ml6VcIjtcbiAgICAgICAgY2FzZSBcIuOBk+OCk+OChFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5LuK5aScXCI7XG4gICAgICAgIGNhc2UgXCLjgZPjgpPjgobjgYZcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuS7iuWklVwiO1xuICAgICAgICBjYXNlIFwi44GT44KT44Gw44KTXCI6XG4gICAgICAgICAgICByZXR1cm4gXCLku4rmmalcIjtcbiAgICAgICAgY2FzZSBcIuOBkeOBlVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5LuK5pydXCI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKUENhc3VhbERhdGVQYXJzZXIge1xuICAgIHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBub3JtYWxpemVUZXh0VG9LYW5qaShtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAodGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcIuaYqOaXpVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwi5piO5pelXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIuacrOaXpVwiOlxuICAgICAgICAgICAgY2FzZSBcIuS7iuaXpVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dCA9PSBcIuS7iuWknFwiIHx8IHRleHQgPT0gXCLku4rlpJVcIiB8fCB0ZXh0ID09IFwi5LuK5pmpXCIpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRleHQubWF0Y2goXCLku4rmnJ1cIikpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfT0ZGU0VUIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKCg/PHByZWZpeD7liY3jga585qyh44GufOS7iumAsSkpPyg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIikoPzrmm5zml6V85pucKVwiLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKUFdlZWtkYXlQYXJzZXIge1xuICAgIHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoLmdyb3Vwcy53ZWVrZGF5O1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBXRUVLREFZX09GRlNFVFtkYXlPZldlZWtdO1xuICAgICAgICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2guZ3JvdXBzLnByZWZpeCB8fCBcIlwiO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAocHJlZml4Lm1hdGNoKC/liY3jga4vKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXgubWF0Y2goL+asoeOBri8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibmV4dFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByZWZpeC5tYXRjaCgv5LuK6YCxLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJ0aGlzXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCBvZmZzZXQsIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1KUFdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIsIGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyB0b0hhbmtha3UgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihbMC0577yQLe+8mV17NH1bXFxcXC98XFxcXO+8j10pP1wiICsgXCIoWzAtMe+8kC3vvJFdezAsMX1bMC0577yQLe+8mV17MX0pKD86W1xcXFwvfFxcXFzvvI9dKFswLTPvvJAt77yTXXswLDF9WzAtOe+8kC3vvJldezF9KSlcIiwgXCJpXCIpO1xuY29uc3QgWUVBUl9HUk9VUCA9IDE7XG5jb25zdCBNT05USF9HUk9VUCA9IDI7XG5jb25zdCBEQVlfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBTbGFzaERhdGVGb3JtYXRQYXJzZXIge1xuICAgIHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludCh0b0hhbmtha3UobWF0Y2hbTU9OVEhfR1JPVVBdKSk7XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaFtEQVlfR1JPVVBdKSk7XG4gICAgICAgIGlmIChtb250aCA8IDEgfHwgbW9udGggPiAxMikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRheSA8IDEgfHwgZGF5ID4gMzEpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgcmVzdWx0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCByYXdZZWFyTnVtYmVyID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoW1lFQVJfR1JPVVBdKSk7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZE1vc3RMaWtlbHlBRFllYXIocmF3WWVhck51bWJlcik7XG4gICAgICAgICAgICByZXN1bHQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1KUFNsYXNoRGF0ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBOVU1CRVIsIGphU3RyaW5nVG9OdW1iZXIsIHRvSGFua2FrdSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IEZJUlNUX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OlwiICtcbiAgICBcIijljYjliY185Y2I5b6MfEEuTS58UC5NLnxBTXxQTSlcIiArXG4gICAgXCIpP1wiICtcbiAgICBcIig/OltcXFxccyzvvIzjgIFdKilcIiArXG4gICAgXCIoPzooWzAtOe+8kC3vvJldK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKykoPzpcXFxccyopKD865pmCKD8h6ZaTKXw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFswLTnvvJAt77yZXSt85Y2KfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD865YiGfDp877yaKT9cIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFswLTnvvJAt77yZXSt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgU0VDT05EX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Ol5cXFxccyooPzrjgYvjgol8XFxcXC18XFxcXOKAk3xcXFxc77yNfFxcXFx+fFxcXFzjgJwpXFxcXHMqKVwiICtcbiAgICBcIig/OlwiICtcbiAgICBcIijljYjliY185Y2I5b6MfEEuTS58UC5NLnxBTXxQTSlcIiArXG4gICAgXCIpP1wiICtcbiAgICBcIig/OltcXFxccyzvvIzjgIFdKilcIiArXG4gICAgXCIoPzooWzAtOe+8kC3vvJldK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKykoPzpcXFxccyopKD865pmCfDp877yaKVwiICtcbiAgICBcIig/OlxcXFxzKilcIiArXG4gICAgXCIoWzAtOe+8kC3vvJldK3zljYp8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrliIZ8OnzvvJopP1wiICtcbiAgICBcIig/OlxcXFxzKilcIiArXG4gICAgXCIoWzAtOe+8kC3vvJldK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/Ouenkik/KVwiICtcbiAgICBcIig/OlxcXFxzKihBLk0ufFAuTS58QU0/fFBNPykpP1wiLCBcImlcIik7XG5jb25zdCBBTV9QTV9IT1VSX0dST1VQXzEgPSAxO1xuY29uc3QgSE9VUl9HUk9VUCA9IDI7XG5jb25zdCBNSU5VVEVfR1JPVVAgPSAzO1xuY29uc3QgU0VDT05EX0dST1VQID0gNDtcbmNvbnN0IEFNX1BNX0hPVVJfR1JPVVBfMiA9IDU7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKUFRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIEZJUlNUX1JFR19QQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgaWYgKG1hdGNoLmluZGV4ID4gMCAmJiBjb250ZXh0LnRleHRbbWF0Y2guaW5kZXggLSAxXS5tYXRjaCgvXFx3LykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICByZXN1bHQuc3RhcnQgPSBjcmVhdGVUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaFtIT1VSX0dST1VQXSwgbWF0Y2hbTUlOVVRFX0dST1VQXSwgbWF0Y2hbU0VDT05EX0dST1VQXSwgbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF8xXSA/PyBtYXRjaFtBTV9QTV9IT1VSX0dST1VQXzJdKTtcbiAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnQpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIG1hdGNoID0gU0VDT05EX1JFR19QQVRURVJOLmV4ZWMoY29udGV4dC50ZXh0LnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHQudGV4dC5sZW5ndGgpKTtcbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQudGV4dCA9IHJlc3VsdC50ZXh0ICsgbWF0Y2hbMF07XG4gICAgICAgIHJlc3VsdC5lbmQgPSBjcmVhdGVUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaFtIT1VSX0dST1VQXSwgbWF0Y2hbTUlOVVRFX0dST1VQXSwgbWF0Y2hbU0VDT05EX0dST1VQXSwgbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF8xXSA/PyBtYXRjaFtBTV9QTV9IT1VSX0dST1VQXzJdKTtcbiAgICAgICAgaWYgKCFyZXN1bHQuZW5kKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc3VsdC5lbmQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikgJiYgcmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpKSB7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwibWVyaWRpZW1cIiwgcmVzdWx0LnN0YXJ0LmdldChcIm1lcmlkaWVtXCIpKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwibWVyaWRpZW1cIikgPT09IE1lcmlkaWVtLlBNKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpIC0gMTIgPiByZXN1bHQuZW5kLmdldChcImhvdXJcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0LmVuZC5nZXQoXCJob3VyXCIpIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJob3VyXCIsIHJlc3VsdC5lbmQuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5lbmQuZGF0ZSgpLmdldFRpbWUoKSA8IHJlc3VsdC5zdGFydC5kYXRlKCkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwiZGF5XCIsIHJlc3VsdC5lbmQuZ2V0KFwiZGF5XCIpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaEhvdXIsIG1hdGNoTWludXRlLCBtYXRjaFNlY29uZCwgbWF0Y2hBbVBtKSB7XG4gICAgbGV0IGhvdXIgPSAwO1xuICAgIGxldCBtZXJpZGllbSA9IC0xO1xuICAgIGxldCB0YXJnZXRDb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgIGhvdXIgPSBwYXJzZUludCh0b0hhbmtha3UobWF0Y2hIb3VyKSk7XG4gICAgaWYgKGlzTmFOKGhvdXIpKSB7XG4gICAgICAgIGhvdXIgPSBqYVN0cmluZ1RvTnVtYmVyKG1hdGNoSG91cik7XG4gICAgfVxuICAgIGlmIChob3VyID4gMjQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChtYXRjaE1pbnV0ZSkge1xuICAgICAgICBsZXQgbWludXRlO1xuICAgICAgICBpZiAobWF0Y2hNaW51dGUgPT09IFwi5Y2KXCIpIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbWludXRlID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoTWludXRlKSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IGphU3RyaW5nVG9OdW1iZXIobWF0Y2hNaW51dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjApXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdGFyZ2V0Q29tcG9uZW50cy5hc3NpZ24oXCJtaW51dGVcIiwgbWludXRlKTtcbiAgICB9XG4gICAgaWYgKG1hdGNoU2Vjb25kKSB7XG4gICAgICAgIGxldCBzZWNvbmQgPSBwYXJzZUludCh0b0hhbmtha3UobWF0Y2hTZWNvbmQpKTtcbiAgICAgICAgaWYgKGlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgICAgIHNlY29uZCA9IGphU3RyaW5nVG9OdW1iZXIobWF0Y2hTZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmQgPj0gNjApXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdGFyZ2V0Q29tcG9uZW50cy5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICB9XG4gICAgaWYgKG1hdGNoQW1QbSkge1xuICAgICAgICBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBBTVBNU3RyaW5nID0gbWF0Y2hBbVBtO1xuICAgICAgICBpZiAoQU1QTVN0cmluZyA9PT0gXCLljYjliY1cIiB8fCBBTVBNU3RyaW5nWzBdLnRvTG93ZXJDYXNlKCkgPT09IFwiYVwiKSB7XG4gICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKVxuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFNUE1TdHJpbmcgPT09IFwi5Y2I5b6MXCIgfHwgQU1QTVN0cmluZ1swXS50b0xvd2VyQ2FzZSgpID09PSBcInBcIikge1xuICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5QTTtcbiAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGFyZ2V0Q29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgIHRhcmdldENvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgdGFyZ2V0Q29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldENvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldENvbXBvbmVudHM7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1KUFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKOOBrik/XFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1KUE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IE1lcmdpbmdSZWZpbmVyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9hYnN0cmFjdFJlZmluZXJzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IG5ld1Jlc3VsdCA9IGN1cnJlbnRSZXN1bHQuY2xvbmUoKTtcbiAgICAgICAgbmV3UmVzdWx0LnRleHQgPSBjdXJyZW50UmVzdWx0LnRleHQgKyB0ZXh0QmV0d2VlbiArIG5leHRSZXN1bHQudGV4dDtcbiAgICAgICAgbmV3UmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgbmV4dFJlc3VsdC5zdGFydC5nZXQoXCJ3ZWVrZGF5XCIpKTtcbiAgICAgICAgaWYgKG5ld1Jlc3VsdC5lbmQpIHtcbiAgICAgICAgICAgIG5ld1Jlc3VsdC5lbmQuYXNzaWduKFwid2Vla2RheVwiLCBuZXh0UmVzdWx0LnN0YXJ0LmdldChcIndlZWtkYXlcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdSZXN1bHQ7XG4gICAgfVxuICAgIHNob3VsZE1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCBub3JtYWxEYXRlVGhlbldlZWtkYXkgPSBjdXJyZW50UmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcImRheVwiKSAmJlxuICAgICAgICAgICAgbmV4dFJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkgJiZcbiAgICAgICAgICAgICFuZXh0UmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcImhvdXJcIik7XG4gICAgICAgIHJldHVybiBub3JtYWxEYXRlVGhlbldlZWtkYXkgJiYgdGV4dEJldHdlZW4ubWF0Y2goL15bLOOAgeOBrl0/XFxzKiQvKSAhPT0gbnVsbDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1KUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgV0VFS0RBWV9PRkZTRVQgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpcXFxcKHxcXFxc77yIKSg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIikoPzpcXFxcKXxcXFxc77yJKVwiLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKUFdlZWtkYXlXaXRoUGFyZW50aGVzZXNQYXJzZXIge1xuICAgIHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoLmdyb3Vwcy53ZWVrZGF5O1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBXRUVLREFZX09GRlNFVFtkYXlPZldlZWtdO1xuICAgICAgICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCBvZmZzZXQpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUpQV2Vla2RheVdpdGhQYXJlbnRoZXNlc1BhcnNlci5qcy5tYXAiLCJpbXBvcnQgSlBTdGFuZGFyZFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0pQU3RhbmRhcmRQYXJzZXIuanNcIjtcbmltcG9ydCBKUE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9KUE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEpQQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0pQQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IEpQV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0pQV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IEpQU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvSlBTbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBKUFRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvSlBUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IEpQTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvSlBNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IEpQTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9KUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanNcIjtcbmltcG9ydCBKUFdlZWtkYXlXaXRoUGFyZW50aGVzZXNQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9KUFdlZWtkYXlXaXRoUGFyZW50aGVzZXNQYXJzZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lciBmcm9tIFwiLi4vLi4vY29tbW9uL3JlZmluZXJzL01lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKHRydWUpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEpQQ2FzdWFsRGF0ZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgSlBTdGFuZGFyZFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEpQV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEpQV2Vla2RheVdpdGhQYXJlbnRoZXNlc1BhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEpQU2xhc2hEYXRlRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgSlBUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW1xuICAgICAgICAgICAgbmV3IEpQTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lcigpLFxuICAgICAgICAgICAgbmV3IEpQTWVyZ2VEYXRlVGltZVJlZmluZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUE1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLFxuICAgICAgICBdLFxuICAgIH0sIHN0cmljdE1vZGUpO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMgPSBjb25maWd1cmF0aW9uLnJlZmluZXJzLmZpbHRlcigocmVmaW5lcikgPT4gIShyZWZpbmVyIGluc3RhbmNlb2YgTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lcikpO1xuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcImRvbWluZ29cIjogMCxcbiAgICBcImRvbVwiOiAwLFxuICAgIFwic2VndW5kYVwiOiAxLFxuICAgIFwic2VndW5kYS1mZWlyYVwiOiAxLFxuICAgIFwic2VnXCI6IDEsXG4gICAgXCJ0ZXLDp2FcIjogMixcbiAgICBcInRlcsOnYS1mZWlyYVwiOiAyLFxuICAgIFwidGVyXCI6IDIsXG4gICAgXCJxdWFydGFcIjogMyxcbiAgICBcInF1YXJ0YS1mZWlyYVwiOiAzLFxuICAgIFwicXVhXCI6IDMsXG4gICAgXCJxdWludGFcIjogNCxcbiAgICBcInF1aW50YS1mZWlyYVwiOiA0LFxuICAgIFwicXVpXCI6IDQsXG4gICAgXCJzZXh0YVwiOiA1LFxuICAgIFwic2V4dGEtZmVpcmFcIjogNSxcbiAgICBcInNleFwiOiA1LFxuICAgIFwic8OhYmFkb1wiOiA2LFxuICAgIFwic2FiYWRvXCI6IDYsXG4gICAgXCJzYWJcIjogNixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICBcImphbmVpcm9cIjogMSxcbiAgICBcImphblwiOiAxLFxuICAgIFwiamFuLlwiOiAxLFxuICAgIFwiZmV2ZXJlaXJvXCI6IDIsXG4gICAgXCJmZXZcIjogMixcbiAgICBcImZldi5cIjogMixcbiAgICBcIm1hcsOnb1wiOiAzLFxuICAgIFwibWFyXCI6IDMsXG4gICAgXCJtYXIuXCI6IDMsXG4gICAgXCJhYnJpbFwiOiA0LFxuICAgIFwiYWJyXCI6IDQsXG4gICAgXCJhYnIuXCI6IDQsXG4gICAgXCJtYWlvXCI6IDUsXG4gICAgXCJtYWlcIjogNSxcbiAgICBcIm1haS5cIjogNSxcbiAgICBcImp1bmhvXCI6IDYsXG4gICAgXCJqdW5cIjogNixcbiAgICBcImp1bi5cIjogNixcbiAgICBcImp1bGhvXCI6IDcsXG4gICAgXCJqdWxcIjogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBcImFnb3N0b1wiOiA4LFxuICAgIFwiYWdvXCI6IDgsXG4gICAgXCJhZ28uXCI6IDgsXG4gICAgXCJzZXRlbWJyb1wiOiA5LFxuICAgIFwic2V0XCI6IDksXG4gICAgXCJzZXQuXCI6IDksXG4gICAgXCJvdXR1YnJvXCI6IDEwLFxuICAgIFwib3V0XCI6IDEwLFxuICAgIFwib3V0LlwiOiAxMCxcbiAgICBcIm5vdmVtYnJvXCI6IDExLFxuICAgIFwibm92XCI6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBcImRlemVtYnJvXCI6IDEyLFxuICAgIFwiZGV6XCI6IDEyLFxuICAgIFwiZGV6LlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gXCJbMC05XXsxLDR9KD8hW15cXFxcc11cXFxcZCkoPzpcXFxccypbYXxkXVxcXFwuP1xcXFxzKmNcXFxcLj98XFxcXHMqYVxcXFwuP1xcXFxzKmRcXFxcLj8pP1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmIChtYXRjaC5tYXRjaCgvXlswLTldezEsNH0kLykpIHtcbiAgICAgICAgbGV0IHllYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgICAgICBpZiAoeWVhck51bWJlciA+IDUwKSB7XG4gICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJOdW1iZXIgKyAxOTAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJOdW1iZXIgKyAyMDAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5ZWFyTnVtYmVyO1xuICAgIH1cbiAgICBpZiAobWF0Y2gubWF0Y2goL2FcXC4/XFxzKmNcXC4/L2kpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvYVxcLj9cXHMqY1xcLj8vaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Oig/OlxcXFwsfFxcXFwofFxcXFzvvIgpXFxcXHMqKT9cIiArXG4gICAgXCIoPzooZXN0ZXxlc3RhfHBhc3NhZG98cHJbb8OzXXhpbW8pXFxcXHMqKT9cIiArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlxcXFxzKig/OlxcXFwsfFxcXFwpfFxcXFzvvIkpKT9cIiArXG4gICAgXCIoPzpcXFxccyooZXN0ZXxlc3RhfHBhc3NhZG98cHJbw7NvXXhpbW8pXFxcXHMqc2VtYW5hKT9cIiArXG4gICAgXCIoPz1cXFxcV3xcXFxcZHwkKVwiLCBcImlcIik7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgV0VFS0RBWV9HUk9VUCA9IDI7XG5jb25zdCBQT1NURklYX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBUV2Vla2RheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZGF5T2ZXZWVrID0gbWF0Y2hbV0VFS0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qgd2Vla2RheSA9IFdFRUtEQVlfRElDVElPTkFSWVtkYXlPZldlZWtdO1xuICAgICAgICBpZiAod2Vla2RheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfR1JPVVBdO1xuICAgICAgICBjb25zdCBwb3N0Zml4ID0gbWF0Y2hbUE9TVEZJWF9HUk9VUF07XG4gICAgICAgIGxldCBub3JtID0gcHJlZml4IHx8IHBvc3RmaXggfHwgXCJcIjtcbiAgICAgICAgbm9ybSA9IG5vcm0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG5vcm0gPT0gXCJwYXNzYWRvXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJ0aGlzXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9ybSA9PSBcInByw7N4aW1vXCIgfHwgbm9ybSA9PSBcInByb3hpbW9cIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub3JtID09IFwiZXN0ZVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBUVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzphbz98w6BzP3xkYXN8ZGF8ZGV8ZG8pXFxcXHMqKT9cIjtcbiAgICB9XG4gICAgZm9sbG93aW5nUGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBcIlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnHxhKD86byk/fFxcXFw/KVxcXFxzKlwiO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXlxcXFxzKig/Oix8w6ApP1xcXFxzKiRcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UFRNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUFRNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyooPzotKVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UFRNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoWzAtOV17MSwyfSkoPzrCunzCqnzCsCk/YCArXG4gICAgXCIoPzpcXFxccyooPzpkZXNkZXxkZXxcXFxcLXxcXFxc4oCTfGFvP3xcXFxccylcXFxccyooWzAtOV17MSwyfSkoPzrCunzCqnzCsCk/KT9cXFxccyooPzpkZSk/XFxcXHMqXCIgK1xuICAgIGAoPzotfC98XFxcXHMqKD86ZGV8LCk/XFxcXHMqKWAgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGAoPzpcXFxccyooPzpkZXwsKT9cXFxccyooJHtZRUFSX1BBVFRFUk59KSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFURV9HUk9VUF0pO1xuICAgICAgICBpZiAoZGF5ID4gMzEpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFtEQVRFX0dST1VQXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhck51bWJlciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbREFURV9UT19HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZUludChtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBUQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gLyhhZ29yYXxob2plfGFtYW5oYXxhbWFuaMOjfG9udGVtKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGxvd2VyVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcImFnb3JhXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJob2plXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcImFtYW5oYVwiOlxuICAgICAgICAgICAgY2FzZSBcImFtYW5ow6NcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwib250ZW1cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UFRDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVENhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gLyg/OmVzdGFcXHMqKT8obWFuaGF8bWFuaMOjfHRhcmRlfG1laWEtbm9pdGV8bWVpby1kaWF8bm9pdGUpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAobWF0Y2hbMV0udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcInRhcmRlXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvYWZ0ZXJub29uXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5vaXRlXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMjIpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvZXZlbmluZ1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtYW5oYVwiOlxuICAgICAgICAgICAgY2FzZSBcIm1hbmjDo1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbW9ybmluZ1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZWlhLW5vaXRlXCI6XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dERheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9taWRuaWdodFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZWlvLWRpYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL25vb25cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QVENhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFBUV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1BUV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFBUVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9QVFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgUFRNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9QVE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgUFRNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvUFRNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBQVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1BUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzXCI7XG5pbXBvcnQgUFRDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUFRDYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgUFRDYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUFRDYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy5wdXNoKG5ldyBQVENhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgUFRDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSwgbGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBQVFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBQVFRpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgUFRNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgUFRNZXJnZURhdGVUaW1lUmVmaW5lcigpLCBuZXcgUFRNZXJnZURhdGVSYW5nZVJlZmluZXIoKV0sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoodG90fC0pXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeXFxcXHMqKG9tfG5hfHZvb3J8aW4gZGV8LHwtKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAvKG51fHZhbmRhYWd8bW9yZ2VufG1vcmdlbmR8Z2lzdGVyZW4pKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAobG93ZXJUZXh0KSB7XG4gICAgICAgICAgICBjYXNlIFwibnVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcInZhbmRhYWdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwibW9yZ2VuXCI6XG4gICAgICAgICAgICBjYXNlIFwibW9yZ2VuZFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbW9ycm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJnaXN0ZXJlblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTENhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUsIGltcGx5U2ltaWxhclRpbWUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmNvbnN0IERBWV9HUk9VUCA9IDE7XG5jb25zdCBNT01FTlRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIC8oZGV6ZSk/XFxzKihuYW1pZGRhZ3xhdm9uZHxtaWRkZXJuYWNodHxvY2h0ZW5kfG1pZGRhZ3wncyBtaWRkYWdzfCdzIGF2b25kc3wncyBvY2h0ZW5kcykoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgaWYgKG1hdGNoW0RBWV9HUk9VUF0gPT09IFwiZGV6ZVwiKSB7XG4gICAgICAgICAgICBjb21wb25lbnQuYXNzaWduKFwiZGF5XCIsIGNvbnRleHQucmVmRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50LmFzc2lnbihcIm1vbnRoXCIsIGNvbnRleHQucmVmRGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICBjb21wb25lbnQuYXNzaWduKFwieWVhclwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChtYXRjaFtNT01FTlRfR1JPVVBdLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJuYW1pZGRhZ1wiOlxuICAgICAgICAgICAgY2FzZSBcIidzIG5hbWlkZGFnc1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2FmdGVybm9vblwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJhdm9uZFwiOlxuICAgICAgICAgICAgY2FzZSBcIidzIGF2b25kcydcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9ldmVuaW5nXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1pZGRlcm5hY2h0XCI6XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dERheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9taWRuaWdodFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJvY2h0ZW5kXCI6XG4gICAgICAgICAgICBjYXNlIFwiJ3Mgb2NodGVuZHNcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL21vcm5pbmdcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWlkZGFnXCI6XG4gICAgICAgICAgICBjYXNlIFwiJ3MgbWlkZGFnc1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL25vb25cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTENhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICB6b25kYWc6IDAsXG4gICAgem9uOiAwLFxuICAgIFwiem9uLlwiOiAwLFxuICAgIHpvOiAwLFxuICAgIFwiem8uXCI6IDAsXG4gICAgbWFhbmRhZzogMSxcbiAgICBtYTogMSxcbiAgICBcIm1hLlwiOiAxLFxuICAgIGRpbnNkYWc6IDIsXG4gICAgZGluOiAyLFxuICAgIFwiZGluLlwiOiAyLFxuICAgIGRpOiAyLFxuICAgIFwiZGkuXCI6IDIsXG4gICAgd29lbnNkYWc6IDMsXG4gICAgd29lOiAzLFxuICAgIFwid29lLlwiOiAzLFxuICAgIHdvOiAzLFxuICAgIFwid28uXCI6IDMsXG4gICAgZG9uZGVyZGFnOiA0LFxuICAgIGRvbmQ6IDQsXG4gICAgXCJkb25kLlwiOiA0LFxuICAgIGRvOiA0LFxuICAgIFwiZG8uXCI6IDQsXG4gICAgdnJpamRhZzogNSxcbiAgICB2cmlqOiA1LFxuICAgIFwidnJpai5cIjogNSxcbiAgICB2cjogNSxcbiAgICBcInZyLlwiOiA1LFxuICAgIHphdGVyZGFnOiA2LFxuICAgIHphdDogNixcbiAgICBcInphdC5cIjogNixcbiAgICBcInphXCI6IDYsXG4gICAgXCJ6YS5cIjogNixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICBqYW51YXJpOiAxLFxuICAgIGphbjogMSxcbiAgICBcImphbi5cIjogMSxcbiAgICBmZWJydWFyaTogMixcbiAgICBmZWI6IDIsXG4gICAgXCJmZWIuXCI6IDIsXG4gICAgbWFhcnQ6IDMsXG4gICAgbWFyOiAzLFxuICAgIFwibWFyLlwiOiAzLFxuICAgIG1ydDogMyxcbiAgICBcIm1ydC5cIjogMyxcbiAgICBhcHJpbDogNCxcbiAgICBhcHI6IDQsXG4gICAgXCJhcHIuXCI6IDQsXG4gICAgbWVpOiA1LFxuICAgIGp1bmk6IDYsXG4gICAganVuOiA2LFxuICAgIFwianVuLlwiOiA2LFxuICAgIGp1bGk6IDcsXG4gICAganVsOiA3LFxuICAgIFwianVsLlwiOiA3LFxuICAgIGF1Z3VzdHVzOiA4LFxuICAgIGF1ZzogOCxcbiAgICBcImF1Zy5cIjogOCxcbiAgICBzZXB0ZW1iZXI6IDksXG4gICAgc2VwOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIHNlcHQ6IDksXG4gICAgXCJzZXB0LlwiOiA5LFxuICAgIG9rdG9iZXI6IDEwLFxuICAgIG9rdDogMTAsXG4gICAgXCJva3QuXCI6IDEwLFxuICAgIG5vdmVtYmVyOiAxMSxcbiAgICBub3Y6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBkZWNlbWJlcjogMTIsXG4gICAgZGVjOiAxMixcbiAgICBcImRlYy5cIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IElOVEVHRVJfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIGVlbjogMSxcbiAgICB0d2VlOiAyLFxuICAgIGRyaWU6IDMsXG4gICAgdmllcjogNCxcbiAgICB2aWpmOiA1LFxuICAgIHplczogNixcbiAgICB6ZXZlbjogNyxcbiAgICBhY2h0OiA4LFxuICAgIG5lZ2VuOiA5LFxuICAgIHRpZW46IDEwLFxuICAgIGVsZjogMTEsXG4gICAgdHdhYWxmOiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgZWVyc3RlOiAxLFxuICAgIHR3ZWVkZTogMixcbiAgICBkZXJkZTogMyxcbiAgICB2aWVyZGU6IDQsXG4gICAgdmlqZmRlOiA1LFxuICAgIHplc2RlOiA2LFxuICAgIHpldmVuZGU6IDcsXG4gICAgYWNodHN0ZTogOCxcbiAgICBuZWdlbmRlOiA5LFxuICAgIHRpZW5kZTogMTAsXG4gICAgZWxmZGU6IDExLFxuICAgIHR3YWFsZmRlOiAxMixcbiAgICBkZXJ0aWVuZGU6IDEzLFxuICAgIHZlZXJ0aWVuZGU6IDE0LFxuICAgIHZpamZ0aWVuZGU6IDE1LFxuICAgIHplc3RpZW5kZTogMTYsXG4gICAgemV2ZW50aWVuZGU6IDE3LFxuICAgIGFjaHR0aWVuZGU6IDE4LFxuICAgIG5lZ2VudGllbmRlOiAxOSxcbiAgICB0d2ludGlnc3RlOiAyMCxcbiAgICBcImVlbmVudHdpbnRpZ3N0ZVwiOiAyMSxcbiAgICBcInR3ZWXDq250d2ludGlnc3RlXCI6IDIyLFxuICAgIFwiZHJpZWVudHdpbnRpZ3N0ZVwiOiAyMyxcbiAgICBcInZpZXJlbnR3aW50aWdzdGVcIjogMjQsXG4gICAgXCJ2aWpmZW50d2ludGlnc3RlXCI6IDI1LFxuICAgIFwiemVzZW50d2ludGlnc3RlXCI6IDI2LFxuICAgIFwiemV2ZW5lbnR3aW50aWdzdGVcIjogMjcsXG4gICAgXCJhY2h0ZW50d2ludGlnXCI6IDI4LFxuICAgIFwibmVnZW5lbnR3aW50aWdcIjogMjksXG4gICAgXCJkZXJ0aWdzdGVcIjogMzAsXG4gICAgXCJlZW5lbmRlcnRpZ3N0ZVwiOiAzMSxcbn07XG5leHBvcnQgY29uc3QgVElNRV9VTklUX0RJQ1RJT05BUlkgPSB7XG4gICAgc2VjOiBcInNlY29uZFwiLFxuICAgIHNlY29uZDogXCJzZWNvbmRcIixcbiAgICBzZWNvbmRlbjogXCJzZWNvbmRcIixcbiAgICBtaW46IFwibWludXRlXCIsXG4gICAgbWluczogXCJtaW51dGVcIixcbiAgICBtaW51dGU6IFwibWludXRlXCIsXG4gICAgbWludXV0OiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZW46IFwibWludXRlXCIsXG4gICAgbWludXV0amU6IFwibWludXRlXCIsXG4gICAgaDogXCJob3VyXCIsXG4gICAgaHI6IFwiaG91clwiLFxuICAgIGhyczogXCJob3VyXCIsXG4gICAgdXVyOiBcImhvdXJcIixcbiAgICB1OiBcImhvdXJcIixcbiAgICB1cmVuOiBcImhvdXJcIixcbiAgICBkYWc6IFwiZGF5XCIsXG4gICAgZGFnZW46IFwiZGF5XCIsXG4gICAgd2VlazogXCJ3ZWVrXCIsXG4gICAgd2VrZW46IFwid2Vla1wiLFxuICAgIG1hYW5kOiBcIm1vbnRoXCIsXG4gICAgbWFhbmRlbjogXCJtb250aFwiLFxuICAgIGphYXI6IFwieWVhclwiLFxuICAgIGpyOiBcInllYXJcIixcbiAgICBqYXJlbjogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1tcXFxcLixdWzAtOV0rfGhhbHZlP3xoYWxmfHBhYXIpYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJwYWFyXCIpIHtcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJoYWxmXCIgfHwgbnVtLm1hdGNoKC9oYWx2ZT8vKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0ucmVwbGFjZShcIixcIiwgXCIuXCIpKTtcbn1cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZKX18WzAtOV17MSwyfSg/OnN0ZXxkZSk/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGxldCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIG51bSA9IG51bS5yZXBsYWNlKC8oPzpzdGV8ZGUpJC9pLCBcIlwiKTtcbiAgICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBZRUFSX1BBVFRFUk4gPSBgKD86WzEtOV1bMC05XXswLDN9XFxcXHMqKD86dm9vciBDaHJpc3R1c3xuYSBDaHJpc3R1cyl8WzEtMl1bMC05XXszfXxbNS05XVswLTldKWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC92b29yIENocmlzdHVzL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC92b29yIENocmlzdHVzL2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gLXBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgaWYgKC9uYSBDaHJpc3R1cy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvbmEgQ2hyaXN0dXMvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihgKD86KD86YmlubmVufGluKVxcXFxzKik/YCwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbmZ1bmN0aW9uIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFsyXS50b0xvd2VyQ2FzZSgpXTtcbiAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCg/OmJpbm5lbnxpbnxiaW5uZW4gZGV8dm9vcilcXFxccypgICsgXCIoXCIgKyBUSU1FX1VOSVRTX1BBVFRFUk4gKyBcIilcIiArIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgV0VFS0RBWV9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uLy4uL25sL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86KD86XFxcXCx8XFxcXCh8XFxcXO+8iClcXFxccyopP1wiICtcbiAgICBcIig/Om9wXFxcXHMqPyk/XCIgK1xuICAgIFwiKD86KGRlemV8dm9yaWdlfHZvbGdlbmRlKVxcXFxzKig/OndlZWtcXFxccyopPyk/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgV0VFS0RBWV9HUk9VUCA9IDI7XG5jb25zdCBQT1NURklYX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MV2Vla2RheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZGF5T2ZXZWVrID0gbWF0Y2hbV0VFS0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qgd2Vla2RheSA9IFdFRUtEQVlfRElDVElPTkFSWVtkYXlPZldlZWtdO1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfR1JPVVBdO1xuICAgICAgICBjb25zdCBwb3N0Zml4ID0gbWF0Y2hbUE9TVEZJWF9HUk9VUF07XG4gICAgICAgIGxldCBtb2RpZmllcldvcmQgPSBwcmVmaXggfHwgcG9zdGZpeDtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkIHx8IFwiXCI7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAobW9kaWZpZXJXb3JkID09IFwidm9yaWdlXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJsYXN0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwidm9sZ2VuZGVcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQgPT0gXCJkZXplXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJ0aGlzXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiwgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpvblxcXFxzKj8pP1wiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgXCIoPzpcXFxccypcIiArXG4gICAgXCIoPzp0b3R8XFxcXC18XFxcXOKAk3x1bnRpbHx0aHJvdWdofHRpbGx8XFxcXHMpXFxcXHMqXCIgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD86LXwvfFxcXFxzKig/Om9mKT9cXFxccyopXCIgK1xuICAgIFwiKFwiICtcbiAgICBtYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSkgK1xuICAgIFwiKVwiICtcbiAgICBcIig/OlwiICtcbiAgICBcIig/Oi18L3wsP1xcXFxzKilcIiArXG4gICAgYCgke1lFQVJfUEFUVEVSTn0oPyFbXlxcXFxzXVxcXFxkKSlgICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDM7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAyO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoe1xuICAgICAgICAgICAgZGF5OiBkYXksXG4gICAgICAgICAgICBtb250aDogbW9udGgsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICByZXN1bHQuc3RhcnQgPSBjb21wb25lbnRzO1xuICAgICAgICByZXN1bHQuZW5kID0gY29tcG9uZW50cy5jbG9uZSgpO1xuICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgYFxcXFxzKmAgK1xuICAgIGAoPzpgICtcbiAgICBgWywtXT9cXFxccyooJHtZRUFSX1BBVFRFUk59KT9gICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKVwiLCBcImlcIik7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxNb250aE5hbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgMSk7XG4gICAgICAgIGNvbnN0IG1vbnRoTmFtZSA9IG1hdGNoW01PTlRIX05BTUVfR1JPVVBdO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbW9udGhOYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIDEsIG1vbnRoKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MTW9udGhOYW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoWzAtOV18MFsxLTldfDFbMDEyXSkvKFswLTldezR9KVwiICsgXCJcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAxO1xuY29uc3QgWUVBUl9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTFNsYXNoTW9udGhGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbTU9OVEhfR1JPVVBdKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKS5pbXBseShcImRheVwiLCAxKS5hc3NpZ24oXCJtb250aFwiLCBtb250aCkuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTFNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTFRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86b20pXFxcXHMqKT9cIjtcbiAgICB9XG4gICAgZm9sbG93aW5nUGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBcIlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnHxvbXxcXFxcPylcXFxccypcIjtcbiAgICB9XG4gICAgcHJpbWFyeVN1ZmZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86XFxcXHMqKD86dXVyKSk/KD8hLykoPz1cXFxcV3wkKVwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaFswXS5tYXRjaCgvXlxccypcXGR7NH1cXHMqJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChbMC05XXs0fSlbXFxcXC5cXFxcL1xcXFxzXWAgK1xuICAgIGAoPzooJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KXwoWzAtOV17MSwyfSkpW1xcXFwuXFxcXC9cXFxcc11gICtcbiAgICBgKFswLTldezEsMn0pYCArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBZRUFSX05VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05VTUJFUl9HUk9VUCA9IDM7XG5jb25zdCBEQVRFX05VTUJFUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTENhc3VhbFllYXJNb250aERheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBtYXRjaFtNT05USF9OVU1CRVJfR1JPVVBdXG4gICAgICAgICAgICA/IHBhcnNlSW50KG1hdGNoW01PTlRIX05VTUJFUl9HUk9VUF0pXG4gICAgICAgICAgICA6IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGlmIChtb250aCA8IDEgfHwgbW9udGggPiAxMikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlSW50KG1hdGNoW1lFQVJfTlVNQkVSX0dST1VQXSk7XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfTlVNQkVSX0dST1VQXSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXk6IGRheSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgICAgIHllYXI6IHllYXIsXG4gICAgICAgIH07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUsIGltcGx5U2ltaWxhclRpbWUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgVElNRV9PRl9EQVlfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxDYXN1YWxEYXRlVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gLyhnaXN0ZXJlbnxtb3JnZW58dmFuKShvY2h0ZW5kfG1pZGRhZ3xuYW1pZGRhZ3xhdm9uZHxuYWNodCkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRhdGVUZXh0ID0gbWF0Y2hbREFURV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGltZVRleHQgPSBtYXRjaFtUSU1FX09GX0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBzd2l0Y2ggKGRhdGVUZXh0KSB7XG4gICAgICAgICAgICBjYXNlIFwiZ2lzdGVyZW5cIjpcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0RheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0RheS5zZXREYXRlKHByZXZpb3VzRGF5LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgcHJldmlvdXNEYXkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInZhblwiOlxuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibW9yZ2VuXCI6XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dERheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHRpbWVUZXh0KSB7XG4gICAgICAgICAgICBjYXNlIFwib2NodGVuZFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1pZGRhZ1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJuYW1pZGRhZ1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJhdm9uZFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MQ2FzdWFsRGF0ZVRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoZGl0fGRlemV8dm9yaWd8YWZnZWxvcGVufCg/OmFhbik/a29tZW5kfG92ZXJ8XFxcXCt8LSllP1xcXFxzKigke1RJTUVfVU5JVFNfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBQUkVGSVhfV09SRF9HUk9VUCA9IDE7XG5jb25zdCBUSU1FX1VOSVRfV09SRF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTFRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFtUSU1FX1VOSVRfV09SRF9HUk9VUF0pO1xuICAgICAgICBzd2l0Y2ggKHByZWZpeCkge1xuICAgICAgICAgICAgY2FzZSBcInZvcmlnXCI6XG4gICAgICAgICAgICBjYXNlIFwiYWZnZWxvcGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwiLVwiOlxuICAgICAgICAgICAgICAgIHRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChkaXR8ZGV6ZXwoPzphYW4pP2tvbWVuZHx2b2xnZW5kfGFmZ2Vsb3Blbnx2b3JpZyllP1xcXFxzKigke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KSg/PVxcXFxzKilgICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IE1PRElGSUVSX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgUkVMQVRJVkVfV09SRF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBtYXRjaFtNT0RJRklFUl9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB1bml0V29yZCA9IG1hdGNoW1JFTEFUSVZFX1dPUkRfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWV1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbdW5pdFdvcmRdO1xuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCJ2b2xnZW5kXCIgfHwgbW9kaWZpZXIgPT0gXCJrb21lbmRcIiB8fCBtb2RpZmllciA9PSBcImFhbmtvbWVuZFwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCJhZmdlbG9wZW5cIiB8fCBtb2RpZmllciA9PSBcInZvcmlnXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHt9O1xuICAgICAgICAgICAgdGltZVVuaXRzW3RpbWV1bml0XSA9IC0xO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKGNvbnRleHQucmVmZXJlbmNlLmluc3RhbnQuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKHVuaXRXb3JkLm1hdGNoKC93ZWVrL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkYXRlLmdldERheSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0V29yZC5tYXRjaCgvbWFhbmQvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRXb3JkLm1hdGNoKC9qYWFyL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoMSk7XG4gICAgICAgICAgICBkYXRlLnNldE1vbnRoKDApO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCJcIiArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBcIig/OmdlbGVkZW58dm9vcnxlZXJkZXIpKD89KD86XFxcXFd8JCkpXCIsIFwiaVwiKTtcbmNvbnN0IFNUUklDVF9QQVRURVJOID0gbmV3IFJlZ0V4cChcIlwiICsgXCIoXCIgKyBUSU1FX1VOSVRTX1BBVFRFUk4gKyBcIilcIiArIFwiZ2VsZWRlbig/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTFRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmljdE1vZGUgPyBTVFJJQ1RfUEFUVEVSTiA6IFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0VGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIG91dHB1dFRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXCIgKyBcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCIobGF0ZXJ8bmF8dmFuYWYgbnV8dm9vcnRhYW58dm9vcnVpdHx1aXQpXCIgKyBcIig/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBTVFJJQ1RfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCJcIiArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBcIihsYXRlcnx2YW5hZiBudSlcIiArIFwiKD89KD86XFxcXFd8JCkpXCIsIFwiaVwiKTtcbmNvbnN0IEdST1VQX05VTV9USU1FVU5JVFMgPSAxO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmljdE1vZGUgPyBTVFJJQ1RfUEFUVEVSTiA6IFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBmcmFnbWVudHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoW0dST1VQX05VTV9USU1FVU5JVFNdKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgZnJhZ21lbnRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTFRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBOTE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9OTE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IE5MTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvTkxNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IE5MQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL05MQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IE5MQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL05MQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgTkxUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL05MVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBOTFdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBOTE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL05MTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyLmpzXCI7XG5pbXBvcnQgTkxNb250aE5hbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTE1vbnRoTmFtZVBhcnNlci5qc1wiO1xuaW1wb3J0IE5MU2xhc2hNb250aEZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL05MU2xhc2hNb250aEZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgTkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTENhc3VhbFllYXJNb250aERheVBhcnNlci5qc1wiO1xuaW1wb3J0IE5MQ2FzdWFsRGF0ZVRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTENhc3VhbERhdGVUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgTkxUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTFRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgTkxUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBOTENhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgTkxDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MQ2FzdWFsRGF0ZVRpbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgTkxNb250aE5hbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgTkxUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSwgbGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBOTFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgTkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBOTE1vbnRoTmFtZVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgTkxTbGFzaE1vbnRoRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgTkxUaW1lRXhwcmVzc2lvblBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBOTFRpbWVVbml0QWdvRm9ybWF0UGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgbmV3IE5MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgTkxNZXJnZURhdGVUaW1lUmVmaW5lcigpLCBuZXcgTkxNZXJnZURhdGVSYW5nZVJlZmluZXIoKV0sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJleHBvcnQgY29uc3QgTlVNQkVSID0ge1xuICAgIFwi6Zu2XCI6IDAsXG4gICAgXCLjgIdcIjogMCxcbiAgICBcIuS4gFwiOiAxLFxuICAgIFwi5LqMXCI6IDIsXG4gICAgXCLkuKRcIjogMixcbiAgICBcIuS4iVwiOiAzLFxuICAgIFwi5ZubXCI6IDQsXG4gICAgXCLkupRcIjogNSxcbiAgICBcIuWFrVwiOiA2LFxuICAgIFwi5LiDXCI6IDcsXG4gICAgXCLlhatcIjogOCxcbiAgICBcIuS5nVwiOiA5LFxuICAgIFwi5Y2BXCI6IDEwLFxufTtcbmV4cG9ydCBjb25zdCBXRUVLREFZX09GRlNFVCA9IHtcbiAgICBcIuWkqVwiOiAwLFxuICAgIFwi5pelXCI6IDAsXG4gICAgXCLkuIBcIjogMSxcbiAgICBcIuS6jFwiOiAyLFxuICAgIFwi5LiJXCI6IDMsXG4gICAgXCLlm5tcIjogNCxcbiAgICBcIuS6lFwiOiA1LFxuICAgIFwi5YWtXCI6IDYsXG59O1xuZXhwb3J0IGZ1bmN0aW9uIHpoU3RyaW5nVG9OdW1iZXIodGV4dCkge1xuICAgIGxldCBudW1iZXIgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGFyID0gdGV4dFtpXTtcbiAgICAgICAgaWYgKGNoYXIgPT09IFwi5Y2BXCIpIHtcbiAgICAgICAgICAgIG51bWJlciA9IG51bWJlciA9PT0gMCA/IE5VTUJFUltjaGFyXSA6IG51bWJlciAqIE5VTUJFUltjaGFyXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG51bWJlciArPSBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bWJlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiB6aFN0cmluZ1RvWWVhcih0ZXh0KSB7XG4gICAgbGV0IHN0cmluZyA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoYXIgPSB0ZXh0W2ldO1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcgKyBOVU1CRVJbY2hhcl07XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUludChzdHJpbmcpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgTlVNQkVSLCB6aFN0cmluZ1RvTnVtYmVyLCB6aFN0cmluZ1RvWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IFlFQVJfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAyO1xuY29uc3QgREFZX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFuc0RhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIihcIiArXG4gICAgICAgICAgICBcIlxcXFxkezIsNH18XCIgK1xuICAgICAgICAgICAgXCJbXCIgK1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICAgICAgICAgIFwiXXs0fXxcIiArXG4gICAgICAgICAgICBcIltcIiArXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgICAgICAgICAgXCJdezJ9XCIgK1xuICAgICAgICAgICAgXCIpP1wiICtcbiAgICAgICAgICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICAgICAgICAgIFwiKD865bm0KT9cIiArXG4gICAgICAgICAgICBcIig/OltcXFxcc3wsfO+8jF0qKVwiICtcbiAgICAgICAgICAgIFwiKFwiICtcbiAgICAgICAgICAgIFwiXFxcXGR7MSwyfXxcIiArXG4gICAgICAgICAgICBcIltcIiArXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgICAgICAgICAgXCJdezEsM31cIiArXG4gICAgICAgICAgICBcIilcIiArXG4gICAgICAgICAgICBcIig/OlxcXFxzKilcIiArXG4gICAgICAgICAgICBcIig/OuaciClcIiArXG4gICAgICAgICAgICBcIig/OlxcXFxzKilcIiArXG4gICAgICAgICAgICBcIihcIiArXG4gICAgICAgICAgICBcIlxcXFxkezEsMn18XCIgK1xuICAgICAgICAgICAgXCJbXCIgK1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICAgICAgICAgIFwiXXsxLDN9XCIgK1xuICAgICAgICAgICAgXCIpP1wiICtcbiAgICAgICAgICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICAgICAgICAgIFwiKD865pelfOWPtyk/XCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGxldCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIGlmIChpc05hTihtb250aCkpXG4gICAgICAgICAgICBtb250aCA9IHpoU3RyaW5nVG9OdW1iZXIobWF0Y2hbTU9OVEhfR1JPVVBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW0RBWV9HUk9VUF0pIHtcbiAgICAgICAgICAgIGxldCBkYXkgPSBwYXJzZUludChtYXRjaFtEQVlfR1JPVVBdKTtcbiAgICAgICAgICAgIGlmIChpc05hTihkYXkpKVxuICAgICAgICAgICAgICAgIGRheSA9IHpoU3RyaW5nVG9OdW1iZXIobWF0Y2hbREFZX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgY29udGV4dC5yZWZEYXRlLmdldERhdGUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBsZXQgeWVhciA9IHBhcnNlSW50KG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIGlmIChpc05hTih5ZWFyKSlcbiAgICAgICAgICAgICAgICB5ZWFyID0gemhTdHJpbmdUb1llYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIGNvbnRleHQucmVmRGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc0RhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHsgTlVNQkVSLCB6aFN0cmluZ1RvTnVtYmVyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXFxcXGQrfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rfOWNinzlh6ApKD86XFxcXHMqKVwiICtcbiAgICBcIig/OuS4qik/XCIgK1xuICAgIFwiKOenkig/OumSnyk/fOWIhumSn3zlsI/ml7Z86ZKffOaXpXzlpKl85pif5pyffOekvOaLnHzmnIh85bm0KVwiICtcbiAgICBcIig/Oig/OuS5i3zov4cpP+WQjnwoPzrkuYspP+WGhSlcIiwgXCJpXCIpO1xuY29uc3QgTlVNQkVSX0dST1VQID0gMTtcbmNvbnN0IFVOSVRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW5zRGVhZGxpbmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBsZXQgbnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbTlVNQkVSX0dST1VQXSk7XG4gICAgICAgIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgICAgICAgICBudW1iZXIgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW05VTUJFUl9HUk9VUF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBzdHJpbmcgPSBtYXRjaFtOVU1CRVJfR1JPVVBdO1xuICAgICAgICAgICAgaWYgKHN0cmluZyA9PT0gXCLlh6BcIikge1xuICAgICAgICAgICAgICAgIG51bWJlciA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzdHJpbmcgPT09IFwi5Y2KXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgPSAwLjU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHt9O1xuICAgICAgICBjb25zdCB1bml0ID0gbWF0Y2hbVU5JVF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHVuaXRBYmJyID0gdW5pdFswXTtcbiAgICAgICAgaWYgKHVuaXRBYmJyLm1hdGNoKC9b5pel5aSp5pif56S85pyI5bm0XS8pKSB7XG4gICAgICAgICAgICBpZiAodW5pdEFiYnIgPT0gXCLml6VcIiB8fCB1bml0QWJiciA9PSBcIuWkqVwiKSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24uZGF5ID0gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLmmJ9cIiB8fCB1bml0QWJiciA9PSBcIuekvFwiKSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ud2VlayA9IG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHVuaXRBYmJyID09IFwi5pyIXCIpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi5tb250aCA9IG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHVuaXRBYmJyID09IFwi5bm0XCIpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi55ZWFyID0gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IGFkZER1cmF0aW9uKGNvbnRleHQucmVmRGF0ZSwgZHVyYXRpb24pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodW5pdEFiYnIgPT0gXCLnp5JcIikge1xuICAgICAgICAgICAgZHVyYXRpb24uc2Vjb25kID0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRBYmJyID09IFwi5YiGXCIpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1pbnV0ZSA9IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuWwj1wiIHx8IHVuaXRBYmJyID09IFwi6ZKfXCIpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLmhvdXIgPSBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0ZSA9IGFkZER1cmF0aW9uKGNvbnRleHQucmVmRGF0ZSwgZHVyYXRpb24pO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiaG91clwiLCBkYXRlLmdldEhvdXJzKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWludXRlXCIsIGRhdGUuZ2V0TWludXRlcygpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInNlY29uZFwiLCBkYXRlLmdldFNlY29uZHMoKSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW5zRGVhZGxpbmVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBXRUVLREFZX09GRlNFVCB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD88cHJlZml4PuS4inzkuIt86L+ZKSg/OuS4qik/KD865pif5pyffOekvOaLnHzlkagpKD88d2Vla2RheT5cIiArIE9iamVjdC5rZXlzKFdFRUtEQVlfT0ZGU0VUKS5qb2luKFwifFwiKSArIFwiKVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoLmdyb3Vwcy53ZWVrZGF5O1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBXRUVLREFZX09GRlNFVFtkYXlPZldlZWtdO1xuICAgICAgICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2guZ3JvdXBzLnByZWZpeDtcbiAgICAgICAgaWYgKHByZWZpeCA9PSBcIuS4ilwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByZWZpeCA9PSBcIuS4i1wiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibmV4dFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByZWZpeCA9PSBcIui/mVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgbGV0IHN0YXJ0TW9tZW50Rml4ZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVmT2Zmc2V0ID0gZGF0ZS5nZXREYXkoKTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwibGFzdFwiIHx8IG1vZGlmaWVyID09IFwicGFzdFwiKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAob2Zmc2V0IC0gNyAtIHJlZk9mZnNldCkpO1xuICAgICAgICAgICAgc3RhcnRNb21lbnRGaXhlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXIgPT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIChvZmZzZXQgKyA3IC0gcmVmT2Zmc2V0KSk7XG4gICAgICAgICAgICBzdGFydE1vbWVudEZpeGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllciA9PSBcInRoaXNcIikge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgKG9mZnNldCAtIHJlZk9mZnNldCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGRpZmYgPSBvZmZzZXQgLSByZWZPZmZzZXQ7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoZGlmZiAtIDcpIDwgTWF0aC5hYnMoZGlmZikpIHtcbiAgICAgICAgICAgICAgICBkaWZmIC09IDc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoZGlmZiArIDcpIDwgTWF0aC5hYnMoZGlmZikpIHtcbiAgICAgICAgICAgICAgICBkaWZmICs9IDc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBkaWZmKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwid2Vla2RheVwiLCBvZmZzZXQpO1xuICAgICAgICBpZiAoc3RhcnRNb21lbnRGaXhlZCkge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW5zUmVsYXRpb25XZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgTlVNQkVSLCB6aFN0cmluZ1RvTnVtYmVyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuY29uc3QgRklSU1RfUkVHX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD865LuOfOiHqik/XCIgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlkI585aSn5ZCOfOaYqCko5pepfOacnXzmmZopfFwiICtcbiAgICBcIijkuIooPzrljYgpfOaXqSg/OuS4iil85LiLKD865Y2IKXzmmZooPzrkuIopfOWknCg/OuaZmik/fOS4rSg/OuWNiCl85YeMKD865pmoKSl8XCIgK1xuICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlkI585aSn5ZCOfOaYqCkoPzrml6V85aSpKVwiICtcbiAgICBcIig/OltcXFxccyzvvIxdKilcIiArXG4gICAgXCIoPzoo5LiKKD865Y2IKXzml6koPzrkuIopfOS4iyg/OuWNiCl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpKT9cIiArXG4gICAgXCIpP1wiICtcbiAgICBcIig/OltcXFxccyzvvIxdKilcIiArXG4gICAgXCIoPzooXFxcXGQrfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKSg/OlxcXFxzKikoPzrngrl85pe2fDp877yaKVwiICtcbiAgICBcIig/OlxcXFxzKilcIiArXG4gICAgXCIoXFxcXGQrfOWNinzmraN85pW0fFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD865YiGfDp877yaKT9cIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/Ouenkik/KVwiICtcbiAgICBcIig/OlxcXFxzKihBLk0ufFAuTS58QU0/fFBNPykpP1wiLCBcImlcIik7XG5jb25zdCBTRUNPTkRfUkVHX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86XlxcXFxzKig/OuWIsHzoh7N8XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcKVxcXFxzKilcIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCIo5LuKfOaYjnzliY185aSn5YmNfOWQjnzlpKflkI585pioKSjml6l85pydfOaZmil8XCIgK1xuICAgIFwiKOS4iig/OuWNiCl85pepKD865LiKKXzkuIsoPzrljYgpfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKXxcIiArXG4gICAgXCIo5LuKfOaYjnzliY185aSn5YmNfOWQjnzlpKflkI585pioKSg/OuaXpXzlpKkpXCIgK1xuICAgIFwiKD86W1xcXFxzLO+8jF0qKVwiICtcbiAgICBcIig/OijkuIooPzrljYgpfOaXqSg/OuS4iil85LiLKD865Y2IKXzmmZooPzrkuIopfOWknCg/OuaZmik/fOS4rSg/OuWNiCl85YeMKD865pmoKSkpP1wiICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD86W1xcXFxzLO+8jF0qKVwiICtcbiAgICBcIig/OihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspKD86XFxcXHMqKSg/OueCuXzml7Z8OnzvvJopXCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt85Y2KfOato3zmlbR8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrliIZ8OnzvvJopP1wiICtcbiAgICBcIig/OlxcXFxzKilcIiArXG4gICAgXCIoXFxcXGQrfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD8656eSKT8pXCIgK1xuICAgIFwiKD86XFxcXHMqKEEuTS58UC5NLnxBTT98UE0/KSk/XCIsIFwiaVwiKTtcbmNvbnN0IERBWV9HUk9VUF8xID0gMTtcbmNvbnN0IFpIX0FNX1BNX0hPVVJfR1JPVVBfMSA9IDI7XG5jb25zdCBaSF9BTV9QTV9IT1VSX0dST1VQXzIgPSAzO1xuY29uc3QgREFZX0dST1VQXzMgPSA0O1xuY29uc3QgWkhfQU1fUE1fSE9VUl9HUk9VUF8zID0gNTtcbmNvbnN0IEhPVVJfR1JPVVAgPSA2O1xuY29uc3QgTUlOVVRFX0dST1VQID0gNztcbmNvbnN0IFNFQ09ORF9HUk9VUCA9IDg7XG5jb25zdCBBTV9QTV9IT1VSX0dST1VQID0gOTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHBhdHRlcm5MZWZ0Qm91bmRhcnkoKSB7XG4gICAgICAgIHJldHVybiBcIigpXCI7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIEZJUlNUX1JFR19QQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgaWYgKG1hdGNoLmluZGV4ID4gMCAmJiBjb250ZXh0LnRleHRbbWF0Y2guaW5kZXggLSAxXS5tYXRjaCgvXFx3LykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBzdGFydE1vbWVudCA9IG5ldyBEYXRlKGNvbnRleHQucmVmZXJlbmNlLmluc3RhbnQuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKG1hdGNoW0RBWV9HUk9VUF8xXSkge1xuICAgICAgICAgICAgY29uc3QgZGF5MSA9IG1hdGNoW0RBWV9HUk9VUF8xXTtcbiAgICAgICAgICAgIGlmIChkYXkxID09IFwi5piOXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRIb3VycygpID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlkI5cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5aSn5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBzdGFydE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIHN0YXJ0TW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgZGF5MyA9IG1hdGNoW0RBWV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmIChkYXkzID09IFwi5piOXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLliY1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWQjlwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlpKflkI5cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIHN0YXJ0TW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgc3RhcnRNb21lbnQuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgc3RhcnRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgc3RhcnRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIHN0YXJ0TW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgc3RhcnRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGhvdXIgPSAwO1xuICAgICAgICBsZXQgbWludXRlID0gMDtcbiAgICAgICAgbGV0IG1lcmlkaWVtID0gLTE7XG4gICAgICAgIGlmIChtYXRjaFtTRUNPTkRfR1JPVVBdKSB7XG4gICAgICAgICAgICBsZXQgc2Vjb25kID0gcGFyc2VJbnQobWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oc2Vjb25kKSkge1xuICAgICAgICAgICAgICAgIHNlY29uZCA9IHpoU3RyaW5nVG9OdW1iZXIobWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInNlY29uZFwiLCBzZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIGhvdXIgPSBwYXJzZUludChtYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIGlmIChpc05hTihob3VyKSkge1xuICAgICAgICAgICAgaG91ciA9IHpoU3RyaW5nVG9OdW1iZXIobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtNSU5VVEVfR1JPVVBdKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuWNilwiKSB7XG4gICAgICAgICAgICAgICAgbWludXRlID0gMzA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXRjaFtNSU5VVEVfR1JPVVBdID09IFwi5q2jXCIgfHwgbWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuaVtFwiKSB7XG4gICAgICAgICAgICAgICAgbWludXRlID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihtaW51dGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHpoU3RyaW5nVG9OdW1iZXIobWF0Y2hbTUlOVVRFX0dST1VQXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhvdXIgPiAxMDApIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IGhvdXIgJSAxMDA7XG4gICAgICAgICAgICBob3VyID0gTWF0aC5mbG9vcihob3VyIC8gMTAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWludXRlID49IDYwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+PSAxMikge1xuICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtBTV9QTV9IT1VSX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPiAxMilcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGFtcG0gPSBtYXRjaFtBTV9QTV9IT1VSX0dST1VQXVswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKGFtcG0gPT0gXCJhXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFtcG0gPT0gXCJwXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8xXSkge1xuICAgICAgICAgICAgY29uc3QgemhBTVBNU3RyaW5nMSA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV07XG4gICAgICAgICAgICBjb25zdCB6aEFNUE0xID0gemhBTVBNU3RyaW5nMVswXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0xID09IFwi5pepXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoemhBTVBNMSA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMl0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzIgPSBtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdO1xuICAgICAgICAgICAgY29uc3QgemhBTVBNMiA9IHpoQU1QTVN0cmluZzJbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMiA9PSBcIuS4ilwiIHx8IHpoQU1QTTIgPT0gXCLml6lcIiB8fCB6aEFNUE0yID09IFwi5YeMXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoemhBTVBNMiA9PSBcIuS4i1wiIHx8IHpoQU1QTTIgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzNdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmczID0gbWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXTtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTTMgPSB6aEFNUE1TdHJpbmczWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTMgPT0gXCLkuIpcIiB8fCB6aEFNUE0zID09IFwi5pepXCIgfHwgemhBTVBNMyA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTMgPT0gXCLkuItcIiB8fCB6aEFNUE0zID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgaG91cik7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtaW51dGVcIiwgbWludXRlKTtcbiAgICAgICAgaWYgKG1lcmlkaWVtID49IDApIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWNvbmRNYXRjaCA9IFNFQ09ORF9SRUdfUEFUVEVSTi5leGVjKGNvbnRleHQudGV4dC5zdWJzdHJpbmcocmVzdWx0LmluZGV4ICsgcmVzdWx0LnRleHQubGVuZ3RoKSk7XG4gICAgICAgIGlmICghc2Vjb25kTWF0Y2gpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVuZE1vbWVudCA9IG5ldyBEYXRlKHN0YXJ0TW9tZW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV0gfHwgc2Vjb25kTWF0Y2hbREFZX0dST1VQXzNdKSB7XG4gICAgICAgICAgICBlbmRNb21lbnQgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LmVuZCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgaWYgKHNlY29uZE1hdGNoW0RBWV9HUk9VUF8xXSkge1xuICAgICAgICAgICAgY29uc3QgZGF5MSA9IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8xXTtcbiAgICAgICAgICAgIGlmIChkYXkxID09IFwi5piOXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRIb3VycygpID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuaYqFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWQjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WQjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kTW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcInllYXJcIiwgZW5kTW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgZGF5MyA9IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmIChkYXkzID09IFwi5piOXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5pioXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwibW9udGhcIiwgZW5kTW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwieWVhclwiLCBlbmRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwiZGF5XCIsIGVuZE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwieWVhclwiLCBlbmRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaG91ciA9IDA7XG4gICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgIG1lcmlkaWVtID0gLTE7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtTRUNPTkRfR1JPVVBdKSB7XG4gICAgICAgICAgICBsZXQgc2Vjb25kID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oc2Vjb25kKSkge1xuICAgICAgICAgICAgICAgIHNlY29uZCA9IHpoU3RyaW5nVG9OdW1iZXIoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgICAgICAgIGhvdXIgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuato1wiIHx8IHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmlbRcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gc2Vjb25kTWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtID09IFwicFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikpIHtcbiAgICAgICAgICAgICAgICBpZiAobWVyaWRpZW0gPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpID09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSAhPSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8xXSkge1xuICAgICAgICAgICAgY29uc3QgemhBTVBNU3RyaW5nMSA9IHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV07XG4gICAgICAgICAgICBjb25zdCB6aEFNUE0xID0gemhBTVBNU3RyaW5nMVswXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0xID09IFwi5pepXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoemhBTVBNMSA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMl0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzIgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdO1xuICAgICAgICAgICAgY29uc3QgemhBTVBNMiA9IHpoQU1QTVN0cmluZzJbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMiA9PSBcIuS4ilwiIHx8IHpoQU1QTTIgPT0gXCLml6lcIiB8fCB6aEFNUE0yID09IFwi5YeMXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoemhBTVBNMiA9PSBcIuS4i1wiIHx8IHpoQU1QTTIgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzNdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmczID0gc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXTtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTTMgPSB6aEFNUE1TdHJpbmczWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTMgPT0gXCLkuIpcIiB8fCB6aEFNUE0zID09IFwi5pepXCIgfHwgemhBTVBNMyA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTMgPT0gXCLkuItcIiB8fCB6aEFNUE0zID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnRleHQgPSByZXN1bHQudGV4dCArIHNlY29uZE1hdGNoWzBdO1xuICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImhvdXJcIiwgaG91cik7XG4gICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0QXRQTSA9IHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSAmJiByZXN1bHQuc3RhcnQuZ2V0KFwibWVyaWRpZW1cIikgPT0gMTtcbiAgICAgICAgICAgIGlmIChzdGFydEF0UE0gJiYgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgPiBob3VyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQuZW5kLmRhdGUoKS5nZXRUaW1lKCkgPCByZXN1bHQuc3RhcnQuZGF0ZSgpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcImRheVwiLCByZXN1bHQuZW5kLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBXRUVLREFZX09GRlNFVCB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD865pif5pyffOekvOaLnHzlkagpKD88d2Vla2RheT5cIiArIE9iamVjdC5rZXlzKFdFRUtEQVlfT0ZGU0VUKS5qb2luKFwifFwiKSArIFwiKVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFuc1dlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnRGaXhlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCByZWZPZmZzZXQgPSBkYXRlLmdldERheSgpO1xuICAgICAgICBsZXQgZGlmZiA9IG9mZnNldCAtIHJlZk9mZnNldDtcbiAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgLSA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICBkaWZmIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgKyA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICBkaWZmICs9IDc7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ3ZWVrZGF5XCIsIG9mZnNldCk7XG4gICAgICAgIGlmIChzdGFydE1vbWVudEZpeGVkKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnNXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgTk9XX0dST1VQID0gMTtcbmNvbnN0IERBWV9HUk9VUF8xID0gMjtcbmNvbnN0IFRJTUVfR1JPVVBfMSA9IDM7XG5jb25zdCBUSU1FX0dST1VQXzIgPSA0O1xuY29uc3QgREFZX0dST1VQXzMgPSA1O1xuY29uc3QgVElNRV9HUk9VUF8zID0gNjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFudENhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCIo6ICM5a62fOeriyg/OuWIu3zljbMpfOWNs+WIuyl8XCIgK1xuICAgICAgICAgICAgXCIo5LuKfOaYjnzliY185aSn5YmNfOW+jHzlpKflvox86IG9fOaYqHzlsIt855C0KSjml6l85pydfOaZmil8XCIgK1xuICAgICAgICAgICAgXCIo5LiKKD865Y2IfOaZnSl85pydKD865pepKXzml6koPzrkuIopfOS4iyg/OuWNiHzmmZ0pfOaZjyg/OuaZnSl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpfFwiICtcbiAgICAgICAgICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlvox85aSn5b6MfOiBvXzmmKh85bCLfOeQtCkoPzrml6V85aSpKVwiICtcbiAgICAgICAgICAgIFwiKD86W1xcXFxzfCx877yMXSopXCIgK1xuICAgICAgICAgICAgXCIoPzoo5LiKKD865Y2IfOaZnSl85pydKD865pepKXzml6koPzrkuIopfOS4iyg/OuWNiHzmmZ0pfOaZjyg/OuaZnSl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpKT9cIiwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KGluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IHJlZkRhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUocmVmRGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAobWF0Y2hbTk9XX0dST1VQXSkge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCByZWZEYXRlLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWludXRlXCIsIHJlZkRhdGUuZ2V0TWludXRlcygpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInNlY29uZFwiLCByZWZEYXRlLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCByZWZEYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBtYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBjb25zdCB0aW1lMSA9IG1hdGNoW1RJTUVfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiIHx8IGRheTEgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIGlmIChyZWZEYXRlLmdldEhvdXJzKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIiB8fCBkYXkxID09IFwi5bCLXCIgfHwgZGF5MSA9PSBcIueQtFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuW+jFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aW1lMSA9PSBcIuaXqVwiIHx8IHRpbWUxID09IFwi5pydXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTEgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMjIpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoW1RJTUVfR1JPVVBfMl0pIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmcyID0gbWF0Y2hbVElNRV9HUk9VUF8yXTtcbiAgICAgICAgICAgIGNvbnN0IHRpbWUyID0gdGltZVN0cmluZzJbMF07XG4gICAgICAgICAgICBpZiAodGltZTIgPT0gXCLml6lcIiB8fCB0aW1lMiA9PSBcIuacnVwiIHx8IHRpbWUyID09IFwi5LiKXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLkuItcIiB8fCB0aW1lMiA9PSBcIuaZj1wiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMiA9PSBcIuS4rVwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMiA9PSBcIuWknFwiIHx8IHRpbWUyID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUyID09IFwi5YeMXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgZGF5MyA9IG1hdGNoW0RBWV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmIChkYXkzID09IFwi5piOXCIgfHwgZGF5MyA9PSBcIuiBvVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZkRhdGUuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiIHx8IGRheTMgPT0gXCLlsItcIiB8fCBkYXkzID09IFwi55C0XCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLliY1cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlpKflvoxcIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGltZVN0cmluZzMgPSBtYXRjaFtUSU1FX0dST1VQXzNdO1xuICAgICAgICAgICAgaWYgKHRpbWVTdHJpbmczKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZTMgPSB0aW1lU3RyaW5nM1swXTtcbiAgICAgICAgICAgICAgICBpZiAodGltZTMgPT0gXCLml6lcIiB8fCB0aW1lMyA9PSBcIuacnVwiIHx8IHRpbWUzID09IFwi5LiKXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGltZTMgPT0gXCLkuItcIiB8fCB0aW1lMyA9PSBcIuaZj1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGltZTMgPT0gXCLkuK1cIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5aScXCIgfHwgdGltZTMgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5YeMXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnRDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImV4cG9ydCBjb25zdCBOVU1CRVIgPSB7XG4gICAgXCLpm7ZcIjogMCxcbiAgICBcIuS4gFwiOiAxLFxuICAgIFwi5LqMXCI6IDIsXG4gICAgXCLlhalcIjogMixcbiAgICBcIuS4iVwiOiAzLFxuICAgIFwi5ZubXCI6IDQsXG4gICAgXCLkupRcIjogNSxcbiAgICBcIuWFrVwiOiA2LFxuICAgIFwi5LiDXCI6IDcsXG4gICAgXCLlhatcIjogOCxcbiAgICBcIuS5nVwiOiA5LFxuICAgIFwi5Y2BXCI6IDEwLFxuICAgIFwi5bu/XCI6IDIwLFxuICAgIFwi5Y2FXCI6IDMwLFxufTtcbmV4cG9ydCBjb25zdCBXRUVLREFZX09GRlNFVCA9IHtcbiAgICBcIuWkqVwiOiAwLFxuICAgIFwi5pelXCI6IDAsXG4gICAgXCLkuIBcIjogMSxcbiAgICBcIuS6jFwiOiAyLFxuICAgIFwi5LiJXCI6IDMsXG4gICAgXCLlm5tcIjogNCxcbiAgICBcIuS6lFwiOiA1LFxuICAgIFwi5YWtXCI6IDYsXG59O1xuZXhwb3J0IGZ1bmN0aW9uIHpoU3RyaW5nVG9OdW1iZXIodGV4dCkge1xuICAgIGxldCBudW1iZXIgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGFyID0gdGV4dFtpXTtcbiAgICAgICAgaWYgKGNoYXIgPT09IFwi5Y2BXCIpIHtcbiAgICAgICAgICAgIG51bWJlciA9IG51bWJlciA9PT0gMCA/IE5VTUJFUltjaGFyXSA6IG51bWJlciAqIE5VTUJFUltjaGFyXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG51bWJlciArPSBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bWJlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiB6aFN0cmluZ1RvWWVhcih0ZXh0KSB7XG4gICAgbGV0IHN0cmluZyA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoYXIgPSB0ZXh0W2ldO1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcgKyBOVU1CRVJbY2hhcl07XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUludChzdHJpbmcpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgTlVNQkVSLCB6aFN0cmluZ1RvTnVtYmVyLCB6aFN0cmluZ1RvWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IFlFQVJfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAyO1xuY29uc3QgREFZX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFudERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIihcIiArXG4gICAgICAgICAgICBcIlxcXFxkezIsNH18XCIgK1xuICAgICAgICAgICAgXCJbXCIgKyBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgKyBcIl17NH18XCIgK1xuICAgICAgICAgICAgXCJbXCIgKyBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgKyBcIl17Mn1cIiArXG4gICAgICAgICAgICBcIik/XCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoPzrlubQpP1wiICtcbiAgICAgICAgICAgIFwiKD86W1xcXFxzfCx877yMXSopXCIgK1xuICAgICAgICAgICAgXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsxLDJ9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICsgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICsgXCJdezEsMn1cIiArXG4gICAgICAgICAgICBcIilcIiArXG4gICAgICAgICAgICBcIig/OlxcXFxzKilcIiArXG4gICAgICAgICAgICBcIig/OuaciClcIiArXG4gICAgICAgICAgICBcIig/OlxcXFxzKilcIiArXG4gICAgICAgICAgICBcIihcIiArXG4gICAgICAgICAgICBcIlxcXFxkezEsMn18XCIgK1xuICAgICAgICAgICAgXCJbXCIgKyBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgKyBcIl17MSwyfVwiICtcbiAgICAgICAgICAgIFwiKT9cIiArXG4gICAgICAgICAgICBcIig/OlxcXFxzKilcIiArXG4gICAgICAgICAgICBcIig/OuaXpXzomZ8pP1wiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBsZXQgbW9udGggPSBwYXJzZUludChtYXRjaFtNT05USF9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4obW9udGgpKVxuICAgICAgICAgICAgbW9udGggPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBdKSB7XG4gICAgICAgICAgICBsZXQgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFZX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZGF5KSlcbiAgICAgICAgICAgICAgICBkYXkgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW0RBWV9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGNvbnRleHQucmVmRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IHllYXIgPSBwYXJzZUludChtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oeWVhcikpXG4gICAgICAgICAgICAgICAgeWVhciA9IHpoU3RyaW5nVG9ZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnREYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYWRkRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdK3zljYp85bm+KSg/OlxcXFxzKilcIiArXG4gICAgXCIoPzrlgIspP1wiICtcbiAgICBcIijnp5IoPzrpkJgpP3zliIbpkJh85bCP5pmCfOmQmHzml6V85aSpfOaYn+acn3znpq7mi5x85pyIfOW5tClcIiArXG4gICAgXCIoPzooPzrkuYt86YGOKT/lvox8KD865LmLKT/lhacpXCIsIFwiaVwiKTtcbmNvbnN0IE5VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBVTklUX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgbGV0IG51bWJlciA9IHBhcnNlSW50KG1hdGNoW05VTUJFUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgbnVtYmVyID0gemhTdHJpbmdUb051bWJlcihtYXRjaFtOVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RyaW5nID0gbWF0Y2hbTlVNQkVSX0dST1VQXTtcbiAgICAgICAgICAgIGlmIChzdHJpbmcgPT09IFwi5bm+XCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3RyaW5nID09PSBcIuWNilwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gMC41O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgY29uc3QgdW5pdCA9IG1hdGNoW1VOSVRfR1JPVVBdO1xuICAgICAgICBjb25zdCB1bml0QWJiciA9IHVuaXRbMF07XG4gICAgICAgIGlmICh1bml0QWJici5tYXRjaCgvW+aXpeWkqeaYn+emruaciOW5tF0vKSkge1xuICAgICAgICAgICAgaWYgKHVuaXRBYmJyID09IFwi5pelXCIgfHwgdW5pdEFiYnIgPT0gXCLlpKlcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLmRheSA9IG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHVuaXRBYmJyID09IFwi5pifXCIgfHwgdW5pdEFiYnIgPT0gXCLnpq5cIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLndlZWsgPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuaciFwiKSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubW9udGggPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuW5tFwiKSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ueWVhciA9IG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBhZGREdXJhdGlvbihjb250ZXh0LnJlZkRhdGUsIGR1cmF0aW9uKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVuaXRBYmJyID09IFwi56eSXCIpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLnNlY29uZCA9IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuWIhlwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5taW51dGUgPSBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLlsI9cIiB8fCB1bml0QWJiciA9PSBcIumQmFwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5ob3VyID0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBhZGREdXJhdGlvbihjb250ZXh0LnJlZkRhdGUsIGR1cmF0aW9uKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgZGF0ZS5nZXRIb3VycygpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1pbnV0ZVwiLCBkYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJzZWNvbmRcIiwgZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgV0VFS0RBWV9PRkZTRVQgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/PHByZWZpeD7kuIp85LuKfOS4i3zpgJl85ZGiKSg/OuWAiyk/KD865pif5pyffOemruaLnHzpgLEpKD88d2Vla2RheT5cIiArIE9iamVjdC5rZXlzKFdFRUtEQVlfT0ZGU0VUKS5qb2luKFwifFwiKSArIFwiKVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFudFJlbGF0aW9uV2Vla2RheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoLmdyb3Vwcy53ZWVrZGF5O1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBXRUVLREFZX09GRlNFVFtkYXlPZldlZWtdO1xuICAgICAgICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2guZ3JvdXBzLnByZWZpeDtcbiAgICAgICAgaWYgKHByZWZpeCA9PSBcIuS4ilwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByZWZpeCA9PSBcIuS4i1wiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibmV4dFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByZWZpeCA9PSBcIuS7ilwiIHx8IHByZWZpeCA9PSBcIumAmVwiIHx8IHByZWZpeCA9PSBcIuWRolwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgbGV0IHN0YXJ0TW9tZW50Rml4ZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVmT2Zmc2V0ID0gZGF0ZS5nZXREYXkoKTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwibGFzdFwiIHx8IG1vZGlmaWVyID09IFwicGFzdFwiKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAob2Zmc2V0IC0gNyAtIHJlZk9mZnNldCkpO1xuICAgICAgICAgICAgc3RhcnRNb21lbnRGaXhlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXIgPT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIChvZmZzZXQgKyA3IC0gcmVmT2Zmc2V0KSk7XG4gICAgICAgICAgICBzdGFydE1vbWVudEZpeGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllciA9PSBcInRoaXNcIikge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgKG9mZnNldCAtIHJlZk9mZnNldCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGRpZmYgPSBvZmZzZXQgLSByZWZPZmZzZXQ7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoZGlmZiAtIDcpIDwgTWF0aC5hYnMoZGlmZikpIHtcbiAgICAgICAgICAgICAgICBkaWZmIC09IDc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoZGlmZiArIDcpIDwgTWF0aC5hYnMoZGlmZikpIHtcbiAgICAgICAgICAgICAgICBkaWZmICs9IDc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBkaWZmKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwid2Vla2RheVwiLCBvZmZzZXQpO1xuICAgICAgICBpZiAoc3RhcnRNb21lbnRGaXhlZCkge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50UmVsYXRpb25XZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgTlVNQkVSLCB6aFN0cmluZ1RvTnVtYmVyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuY29uc3QgRklSU1RfUkVHX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD8655SxfOW+nnzoh6opP1wiICtcbiAgICBcIig/OlwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKOaXqXzmnJ185pmaKXxcIiArXG4gICAgXCIo5LiKKD865Y2IfOaZnSl85pydKD865pepKXzml6koPzrkuIopfOS4iyg/OuWNiHzmmZ0pfOaZjyg/OuaZnSl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpfFwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKD865pelfOWkqSlcIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKykoPzpcXFxccyopKD866buefOaZgnw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3zljYp85q2jfOaVtHxbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/OuWIhnw6fO+8mik/XCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgU0VDT05EX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Ol5cXFxccyooPzrliLB86IezfFxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnClcXFxccyopXCIgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlvox85aSn5b6MfOiBvXzmmKh85bCLfOeQtCko5pepfOacnXzmmZopfFwiICtcbiAgICBcIijkuIooPzrljYh85pmdKXzmnJ0oPzrml6kpfOaXqSg/OuS4iil85LiLKD865Y2IfOaZnSl85pmPKD865pmdKXzmmZooPzrkuIopfOWknCg/OuaZmik/fOS4rSg/OuWNiCl85YeMKD865pmoKSl8XCIgK1xuICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlvox85aSn5b6MfOiBvXzmmKh85bCLfOeQtCkoPzrml6V85aSpKVwiICtcbiAgICBcIig/OltcXFxccyzvvIxdKilcIiArXG4gICAgXCIoPzoo5LiKKD865Y2IfOaZnSl85pydKD865pepKXzml6koPzrkuIopfOS4iyg/OuWNiHzmmZ0pfOaZjyg/OuaZnSl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpKT9cIiArXG4gICAgXCIpP1wiICtcbiAgICBcIig/OltcXFxccyzvvIxdKilcIiArXG4gICAgXCIoPzooXFxcXGQrfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKSg/OlxcXFxzKikoPzrpu5585pmCfDp877yaKVwiICtcbiAgICBcIig/OlxcXFxzKilcIiArXG4gICAgXCIoXFxcXGQrfOWNinzmraN85pW0fFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD865YiGfDp877yaKT9cIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/Ouenkik/KVwiICtcbiAgICBcIig/OlxcXFxzKihBLk0ufFAuTS58QU0/fFBNPykpP1wiLCBcImlcIik7XG5jb25zdCBEQVlfR1JPVVBfMSA9IDE7XG5jb25zdCBaSF9BTV9QTV9IT1VSX0dST1VQXzEgPSAyO1xuY29uc3QgWkhfQU1fUE1fSE9VUl9HUk9VUF8yID0gMztcbmNvbnN0IERBWV9HUk9VUF8zID0gNDtcbmNvbnN0IFpIX0FNX1BNX0hPVVJfR1JPVVBfMyA9IDU7XG5jb25zdCBIT1VSX0dST1VQID0gNjtcbmNvbnN0IE1JTlVURV9HUk9VUCA9IDc7XG5jb25zdCBTRUNPTkRfR1JPVVAgPSA4O1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUCA9IDk7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBwYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gXCIoKVwiO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBGSVJTVF9SRUdfUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaC5pbmRleCA+IDAgJiYgY29udGV4dC50ZXh0W21hdGNoLmluZGV4IC0gMV0ubWF0Y2goL1xcdy8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnQgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBtYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiIHx8IGRheTEgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlZkRhdGUuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5pioXCIgfHwgZGF5MSA9PSBcIuWwi1wiIHx8IGRheTEgPT0gXCLnkLRcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlvoxcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBzdGFydE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIHN0YXJ0TW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgZGF5MyA9IG1hdGNoW0RBWV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmIChkYXkzID09IFwi5piOXCIgfHwgZGF5MyA9PSBcIuiBvVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLmmKhcIiB8fCBkYXkzID09IFwi5bCLXCIgfHwgZGF5MyA9PSBcIueQtFwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLliY1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuW+jFwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlpKflvoxcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIHN0YXJ0TW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgc3RhcnRNb21lbnQuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgc3RhcnRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgc3RhcnRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIHN0YXJ0TW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgc3RhcnRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGhvdXIgPSAwO1xuICAgICAgICBsZXQgbWludXRlID0gMDtcbiAgICAgICAgbGV0IG1lcmlkaWVtID0gLTE7XG4gICAgICAgIGlmIChtYXRjaFtTRUNPTkRfR1JPVVBdKSB7XG4gICAgICAgICAgICB2YXIgc2Vjb25kID0gcGFyc2VJbnQobWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oc2Vjb25kKSkge1xuICAgICAgICAgICAgICAgIHNlY29uZCA9IHpoU3RyaW5nVG9OdW1iZXIobWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInNlY29uZFwiLCBzZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIGhvdXIgPSBwYXJzZUludChtYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIGlmIChpc05hTihob3VyKSkge1xuICAgICAgICAgICAgaG91ciA9IHpoU3RyaW5nVG9OdW1iZXIobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtNSU5VVEVfR1JPVVBdKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuWNilwiKSB7XG4gICAgICAgICAgICAgICAgbWludXRlID0gMzA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXRjaFtNSU5VVEVfR1JPVVBdID09IFwi5q2jXCIgfHwgbWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuaVtFwiKSB7XG4gICAgICAgICAgICAgICAgbWludXRlID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihtaW51dGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHpoU3RyaW5nVG9OdW1iZXIobWF0Y2hbTUlOVVRFX0dST1VQXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhvdXIgPiAxMDApIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IGhvdXIgJSAxMDA7XG4gICAgICAgICAgICBob3VyID0gTWF0aC5mbG9vcihob3VyIC8gMTAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWludXRlID49IDYwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+PSAxMikge1xuICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtBTV9QTV9IT1VSX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPiAxMilcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHZhciBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtID09IFwicFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIHZhciB6aEFNUE1TdHJpbmcxID0gbWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8xXTtcbiAgICAgICAgICAgIHZhciB6aEFNUE0xID0gemhBTVBNU3RyaW5nMVswXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0xID09IFwi5pydXCIgfHwgemhBTVBNMSA9PSBcIuaXqVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTEgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdKSB7XG4gICAgICAgICAgICB2YXIgemhBTVBNU3RyaW5nMiA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMl07XG4gICAgICAgICAgICB2YXIgemhBTVBNMiA9IHpoQU1QTVN0cmluZzJbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMiA9PSBcIuS4ilwiIHx8IHpoQU1QTTIgPT0gXCLmnJ1cIiB8fCB6aEFNUE0yID09IFwi5pepXCIgfHwgemhBTVBNMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTIgPT0gXCLkuItcIiB8fCB6aEFNUE0yID09IFwi5pmPXCIgfHwgemhBTVBNMiA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIHZhciB6aEFNUE1TdHJpbmczID0gbWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXTtcbiAgICAgICAgICAgIHZhciB6aEFNUE0zID0gemhBTVBNU3RyaW5nM1swXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0zID09IFwi5LiKXCIgfHwgemhBTVBNMyA9PSBcIuacnVwiIHx8IHpoQU1QTTMgPT0gXCLml6lcIiB8fCB6aEFNUE0zID09IFwi5YeMXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoemhBTVBNMyA9PSBcIuS4i1wiIHx8IHpoQU1QTTMgPT0gXCLmmY9cIiB8fCB6aEFNUE0zID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgaG91cik7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtaW51dGVcIiwgbWludXRlKTtcbiAgICAgICAgaWYgKG1lcmlkaWVtID49IDApIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWNvbmRNYXRjaCA9IFNFQ09ORF9SRUdfUEFUVEVSTi5leGVjKGNvbnRleHQudGV4dC5zdWJzdHJpbmcocmVzdWx0LmluZGV4ICsgcmVzdWx0LnRleHQubGVuZ3RoKSk7XG4gICAgICAgIGlmICghc2Vjb25kTWF0Y2gpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVuZE1vbWVudCA9IG5ldyBEYXRlKHN0YXJ0TW9tZW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV0gfHwgc2Vjb25kTWF0Y2hbREFZX0dST1VQXzNdKSB7XG4gICAgICAgICAgICBlbmRNb21lbnQgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LmVuZCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgaWYgKHNlY29uZE1hdGNoW0RBWV9HUk9VUF8xXSkge1xuICAgICAgICAgICAgY29uc3QgZGF5MSA9IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8xXTtcbiAgICAgICAgICAgIGlmIChkYXkxID09IFwi5piOXCIgfHwgZGF5MSA9PSBcIuiBvVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVmRGF0ZS5nZXRIb3VycygpID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuaYqFwiIHx8IGRheTEgPT0gXCLlsItcIiB8fCBkYXkxID09IFwi55C0XCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwibW9udGhcIiwgZW5kTW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwieWVhclwiLCBlbmRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2Vjb25kTWF0Y2hbREFZX0dST1VQXzNdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXkzID0gc2Vjb25kTWF0Y2hbREFZX0dST1VQXzNdO1xuICAgICAgICAgICAgaWYgKGRheTMgPT0gXCLmmI5cIiB8fCBkYXkzID09IFwi6IG9XCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5pioXCIgfHwgZGF5MyA9PSBcIuWwi1wiIHx8IGRheTMgPT0gXCLnkLRcIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLliY1cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlvoxcIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgKyAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlpKflvoxcIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiZGF5XCIsIGVuZE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJtb250aFwiLCBlbmRNb21lbnQuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJ5ZWFyXCIsIGVuZE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJkYXlcIiwgZW5kTW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwibW9udGhcIiwgZW5kTW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJ5ZWFyXCIsIGVuZE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gMDtcbiAgICAgICAgbWludXRlID0gMDtcbiAgICAgICAgbWVyaWRpZW0gPSAtMTtcbiAgICAgICAgaWYgKHNlY29uZE1hdGNoW1NFQ09ORF9HUk9VUF0pIHtcbiAgICAgICAgICAgIGxldCBzZWNvbmQgPSBwYXJzZUludChzZWNvbmRNYXRjaFtTRUNPTkRfR1JPVVBdKTtcbiAgICAgICAgICAgIGlmIChpc05hTihzZWNvbmQpKSB7XG4gICAgICAgICAgICAgICAgc2Vjb25kID0gemhTdHJpbmdUb051bWJlcihzZWNvbmRNYXRjaFtTRUNPTkRfR1JPVVBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gNjApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcInNlY29uZFwiLCBzZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIGhvdXIgPSBwYXJzZUludChzZWNvbmRNYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIGlmIChpc05hTihob3VyKSkge1xuICAgICAgICAgICAgaG91ciA9IHpoU3RyaW5nVG9OdW1iZXIoc2Vjb25kTWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdKSB7XG4gICAgICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuWNilwiKSB7XG4gICAgICAgICAgICAgICAgbWludXRlID0gMzA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdID09IFwi5q2jXCIgfHwgc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuaVtFwiKSB7XG4gICAgICAgICAgICAgICAgbWludXRlID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihtaW51dGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHpoU3RyaW5nVG9OdW1iZXIoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhvdXIgPiAxMDApIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IGhvdXIgJSAxMDA7XG4gICAgICAgICAgICBob3VyID0gTWF0aC5mbG9vcihob3VyIC8gMTAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWludXRlID49IDYwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+PSAxMikge1xuICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtBTV9QTV9IT1VSX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPiAxMilcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHZhciBhbXBtID0gc2Vjb25kTWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtID09IFwicFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikpIHtcbiAgICAgICAgICAgICAgICBpZiAobWVyaWRpZW0gPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpID09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSAhPSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8xXSkge1xuICAgICAgICAgICAgY29uc3QgemhBTVBNU3RyaW5nMSA9IHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV07XG4gICAgICAgICAgICB2YXIgemhBTVBNMSA9IHpoQU1QTVN0cmluZzFbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMSA9PSBcIuacnVwiIHx8IHpoQU1QTTEgPT0gXCLml6lcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0xID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8yXSkge1xuICAgICAgICAgICAgY29uc3QgemhBTVBNU3RyaW5nMiA9IHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMl07XG4gICAgICAgICAgICB2YXIgemhBTVBNMiA9IHpoQU1QTVN0cmluZzJbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMiA9PSBcIuS4ilwiIHx8IHpoQU1QTTIgPT0gXCLmnJ1cIiB8fCB6aEFNUE0yID09IFwi5pepXCIgfHwgemhBTVBNMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTIgPT0gXCLkuItcIiB8fCB6aEFNUE0yID09IFwi5pmPXCIgfHwgemhBTVBNMiA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzMgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzNdO1xuICAgICAgICAgICAgdmFyIHpoQU1QTTMgPSB6aEFNUE1TdHJpbmczWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTMgPT0gXCLkuIpcIiB8fCB6aEFNUE0zID09IFwi5pydXCIgfHwgemhBTVBNMyA9PSBcIuaXqVwiIHx8IHpoQU1QTTMgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0zID09IFwi5LiLXCIgfHwgemhBTVBNMyA9PSBcIuaZj1wiIHx8IHpoQU1QTTMgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHQudGV4dCA9IHJlc3VsdC50ZXh0ICsgc2Vjb25kTWF0Y2hbMF07XG4gICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiaG91clwiLCBob3VyKTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJtaW51dGVcIiwgbWludXRlKTtcbiAgICAgICAgaWYgKG1lcmlkaWVtID49IDApIHtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRBdFBNID0gcmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpICYmIHJlc3VsdC5zdGFydC5nZXQoXCJtZXJpZGllbVwiKSA9PSAxO1xuICAgICAgICAgICAgaWYgKHN0YXJ0QXRQTSAmJiByZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSA+IGhvdXIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwibWVyaWRpZW1cIiwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChob3VyID4gMTIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5lbmQuZGF0ZSgpLmdldFRpbWUoKSA8IHJlc3VsdC5zdGFydC5kYXRlKCkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwiZGF5XCIsIHJlc3VsdC5lbmQuZ2V0KFwiZGF5XCIpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnRUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IFdFRUtEQVlfT0ZGU0VUIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzrmmJ/mnJ9856au5oucfOmAsSkoPzx3ZWVrZGF5PlwiICsgT2JqZWN0LmtleXMoV0VFS0RBWV9PRkZTRVQpLmpvaW4oXCJ8XCIpICsgXCIpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW50V2Vla2RheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoLmdyb3Vwcy53ZWVrZGF5O1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBXRUVLREFZX09GRlNFVFtkYXlPZldlZWtdO1xuICAgICAgICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGNvbnRleHQucmVmRGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICBjb25zdCBzdGFydE1vbWVudEZpeGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlZk9mZnNldCA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgICAgIGxldCBkaWZmID0gb2Zmc2V0IC0gcmVmT2Zmc2V0O1xuICAgICAgICBpZiAoTWF0aC5hYnMoZGlmZiAtIDcpIDwgTWF0aC5hYnMoZGlmZikpIHtcbiAgICAgICAgICAgIGRpZmYgLT0gNztcbiAgICAgICAgfVxuICAgICAgICBpZiAoTWF0aC5hYnMoZGlmZiArIDcpIDwgTWF0aC5hYnMoZGlmZikpIHtcbiAgICAgICAgICAgIGRpZmYgKz0gNztcbiAgICAgICAgfVxuICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBkaWZmKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgb2Zmc2V0KTtcbiAgICAgICAgaWYgKHN0YXJ0TW9tZW50Rml4ZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFudFdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFudE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijoh7N85YiwfFxcLXxcXH58772efO+8jXzjg7wpXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFudE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lci5qc1wiO1xuaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBaSEhhbnRDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW50Q2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnREYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50RGVhZGxpbmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudFJlbGF0aW9uV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFudFJlbGF0aW9uV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudFRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW50V2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9aSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBaSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9aSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGhhbnQgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBaSEhhbnRDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgWkhIYW50RGF0ZVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudFJlbGF0aW9uV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnRUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFpISGFudE1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLCBuZXcgWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIoKV0sXG4gICAgfSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycyA9IGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMuZmlsdGVyKChyZWZpbmVyKSA9PiAhKHJlZmluZXIgaW5zdGFuY2VvZiBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyKSk7XG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IE5PV19HUk9VUCA9IDE7XG5jb25zdCBEQVlfR1JPVVBfMSA9IDI7XG5jb25zdCBUSU1FX0dST1VQXzEgPSAzO1xuY29uc3QgVElNRV9HUk9VUF8yID0gNDtcbmNvbnN0IERBWV9HUk9VUF8zID0gNTtcbmNvbnN0IFRJTUVfR1JPVVBfMyA9IDY7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiKOeOsOWcqHznq4soPzrliLt85Y2zKXzljbPliLspfFwiICtcbiAgICAgICAgICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlkI585aSn5ZCOfOaYqCko5pepfOaZmil8XCIgK1xuICAgICAgICAgICAgXCIo5LiKKD865Y2IKXzml6koPzrkuIopfOS4iyg/OuWNiCl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpfFwiICtcbiAgICAgICAgICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlkI585aSn5ZCOfOaYqCkoPzrml6V85aSpKVwiICtcbiAgICAgICAgICAgIFwiKD86W1xcXFxzfCx877yMXSopXCIgK1xuICAgICAgICAgICAgXCIoPzoo5LiKKD865Y2IKXzml6koPzrkuIopfOS4iyg/OuWNiCl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpKT9cIiwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KGluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IHJlZkRhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUocmVmRGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAobWF0Y2hbTk9XX0dST1VQXSkge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCByZWZEYXRlLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWludXRlXCIsIHJlZkRhdGUuZ2V0TWludXRlcygpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInNlY29uZFwiLCByZWZEYXRlLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCByZWZEYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBtYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBjb25zdCB0aW1lMSA9IG1hdGNoW1RJTUVfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZkRhdGUuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuaYqFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWQjlwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5aSn5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aW1lMSA9PSBcIuaXqVwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUxID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtUSU1FX0dST1VQXzJdKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lU3RyaW5nMiA9IG1hdGNoW1RJTUVfR1JPVVBfMl07XG4gICAgICAgICAgICBjb25zdCB0aW1lMiA9IHRpbWVTdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHRpbWUyID09IFwi5pepXCIgfHwgdGltZTIgPT0gXCLkuIpcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMiA9PSBcIuS4i1wiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMiA9PSBcIuS4rVwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMiA9PSBcIuWknFwiIHx8IHRpbWUyID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUyID09IFwi5YeMXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgZGF5MyA9IG1hdGNoW0RBWV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmIChkYXkzID09IFwi5piOXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVmRGF0ZS5nZXRIb3VycygpID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5pioXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLliY1cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlpKflkI5cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGltZVN0cmluZzMgPSBtYXRjaFtUSU1FX0dST1VQXzNdO1xuICAgICAgICAgICAgaWYgKHRpbWVTdHJpbmczKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZTMgPSB0aW1lU3RyaW5nM1swXTtcbiAgICAgICAgICAgICAgICBpZiAodGltZTMgPT0gXCLml6lcIiB8fCB0aW1lMyA9PSBcIuS4ilwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5LiLXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lMyA9PSBcIuS4rVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGltZTMgPT0gXCLlpJxcIiB8fCB0aW1lMyA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMjIpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGltZTMgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc0Nhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFuc01lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijoh7N85YiwfC18fnzvvZ5877yNfOODvClcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc01lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFuc01lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW5zTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEV4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzXCI7XG5pbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFpISGFuc0Nhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnNDYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFuc0RhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zUmVsYXRpb25XZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW5zUmVsYXRpb25XZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc1dlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnNXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1pISGFuc01lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IFpISGFuc01lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1pISGFuc01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgaGFucyA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbigpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFpISGFuc0Nhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBaSEhhbnNEYXRlUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW5zUmVsYXRpb25XZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW5zV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW5zRGVhZGxpbmVGb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgWkhIYW5zTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCksIG5ldyBaSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICB9KTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzID0gY29uZmlndXJhdGlvbi5yZWZpbmVycy5maWx0ZXIoKHJlZmluZXIpID0+ICEocmVmaW5lciBpbnN0YW5jZW9mIEV4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIpKTtcbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lciBmcm9tIFwiLi4vLi4vY29tbW9uL3JlZmluZXJzL0V4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIuanNcIjtcbmltcG9ydCBaSEhhbnNEYXRlUGFyc2VyIGZyb20gXCIuL2hhbnMvcGFyc2Vycy9aSEhhbnNEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zRGVhZGxpbmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vaGFucy9wYXJzZXJzL1pISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zUmVsYXRpb25XZWVrZGF5UGFyc2VyIGZyb20gXCIuL2hhbnMvcGFyc2Vycy9aSEhhbnNSZWxhdGlvbldlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9oYW5zL3BhcnNlcnMvWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnNXZWVrZGF5UGFyc2VyIGZyb20gXCIuL2hhbnMvcGFyc2Vycy9aSEhhbnNXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50Q2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9oYW50L3BhcnNlcnMvWkhIYW50Q2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudERhdGVQYXJzZXIgZnJvbSBcIi4vaGFudC9wYXJzZXJzL1pISGFudERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9oYW50L3BhcnNlcnMvWkhIYW50RGVhZGxpbmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIgZnJvbSBcIi4vaGFudC9wYXJzZXJzL1pISGFudFJlbGF0aW9uV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudFRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL2hhbnQvcGFyc2Vycy9aSEhhbnRUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudFdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vaGFudC9wYXJzZXJzL1pISGFudFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vaGFudC9yZWZpbmVycy9aSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBaSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9oYW50L3JlZmluZXJzL1pISGFudE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgKiBhcyBoYW50IGZyb20gXCIuL2hhbnQvaW5kZXguanNcIjtcbmV4cG9ydCAqIGFzIGhhbnMgZnJvbSBcIi4vaGFucy9pbmRleC5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKCk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgWkhIYW50Q2FzdWFsRGF0ZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uKHtcbiAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgbmV3IFpISGFudERhdGVQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNEYXRlUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW50UmVsYXRpb25XZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW5zUmVsYXRpb25XZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW50V2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1dlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnRUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW50RGVhZGxpbmVGb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIoKSwgbmV3IFpISGFudE1lcmdlRGF0ZVRpbWVSZWZpbmVyKCldLFxuICAgIH0pO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMgPSBjb25maWd1cmF0aW9uLnJlZmluZXJzLmZpbHRlcigocmVmaW5lcikgPT4gIShyZWZpbmVyIGluc3RhbmNlb2YgRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lcikpO1xuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFJFR0VYX1BBUlRTID0ge1xuICAgIGxlZnRCb3VuZGFyeTogXCIoW15cXFxccHtMfVxcXFxwe059X118XilcIixcbiAgICByaWdodEJvdW5kYXJ5OiBcIig/PVteXFxcXHB7TH1cXFxccHtOfV9dfCQpXCIsXG4gICAgZmxhZ3M6IFwiaXVcIixcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgINCy0L7RgdC60YDQtdGB0LXQvdGM0LU6IDAsXG4gICAg0LLQvtGB0LrRgNC10YHQtdC90YzRjzogMCxcbiAgICDQstGB0Lo6IDAsXG4gICAgXCLQstGB0LouXCI6IDAsXG4gICAg0L/QvtC90LXQtNC10LvRjNC90LjQujogMSxcbiAgICDQv9C+0L3QtdC00LXQu9GM0L3QuNC60LA6IDEsXG4gICAg0L/QvTogMSxcbiAgICBcItC/0L0uXCI6IDEsXG4gICAg0LLRgtC+0YDQvdC40Lo6IDIsXG4gICAg0LLRgtC+0YDQvdC40LrQsDogMixcbiAgICDQstGCOiAyLFxuICAgIFwi0LLRgi5cIjogMixcbiAgICDRgdGA0LXQtNCwOiAzLFxuICAgINGB0YDQtdC00Ys6IDMsXG4gICAg0YHRgNC10LTRgzogMyxcbiAgICDRgdGAOiAzLFxuICAgIFwi0YHRgC5cIjogMyxcbiAgICDRh9C10YLQstC10YDQszogNCxcbiAgICDRh9C10YLQstC10YDQs9CwOiA0LFxuICAgINGH0YI6IDQsXG4gICAgXCLRh9GCLlwiOiA0LFxuICAgINC/0Y/RgtC90LjRhtCwOiA1LFxuICAgINC/0Y/RgtC90LjRhtGDOiA1LFxuICAgINC/0Y/RgtC90LjRhtGLOiA1LFxuICAgINC/0YI6IDUsXG4gICAgXCLQv9GCLlwiOiA1LFxuICAgINGB0YPQsdCx0L7RgtCwOiA2LFxuICAgINGB0YPQsdCx0L7RgtGDOiA2LFxuICAgINGB0YPQsdCx0L7RgtGLOiA2LFxuICAgINGB0LE6IDYsXG4gICAgXCLRgdCxLlwiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSA9IHtcbiAgICDRj9C90LLQsNGA0Yw6IDEsXG4gICAg0Y/QvdCy0LDRgNGPOiAxLFxuICAgINGP0L3QstCw0YDQtTogMSxcbiAgICDRhNC10LLRgNCw0LvRjDogMixcbiAgICDRhNC10LLRgNCw0LvRjzogMixcbiAgICDRhNC10LLRgNCw0LvQtTogMixcbiAgICDQvNCw0YDRgjogMyxcbiAgICDQvNCw0YDRgtCwOiAzLFxuICAgINC80LDRgNGC0LU6IDMsXG4gICAg0LDQv9GA0LXQu9GMOiA0LFxuICAgINCw0L/RgNC10LvRjzogNCxcbiAgICDQsNC/0YDQtdC70LU6IDQsXG4gICAg0LzQsNC5OiA1LFxuICAgINC80LDRjzogNSxcbiAgICDQvNCw0LU6IDUsXG4gICAg0LjRjtC90Yw6IDYsXG4gICAg0LjRjtC90Y86IDYsXG4gICAg0LjRjtC90LU6IDYsXG4gICAg0LjRjtC70Yw6IDcsXG4gICAg0LjRjtC70Y86IDcsXG4gICAg0LjRjtC70LU6IDcsXG4gICAg0LDQstCz0YPRgdGCOiA4LFxuICAgINCw0LLQs9GD0YHRgtCwOiA4LFxuICAgINCw0LLQs9GD0YHRgtC1OiA4LFxuICAgINGB0LXQvdGC0Y/QsdGA0Yw6IDksXG4gICAg0YHQtdC90YLRj9Cx0YDRjzogOSxcbiAgICDRgdC10L3RgtGP0LHRgNC1OiA5LFxuICAgINC+0LrRgtGP0LHRgNGMOiAxMCxcbiAgICDQvtC60YLRj9Cx0YDRjzogMTAsXG4gICAg0L7QutGC0Y/QsdGA0LU6IDEwLFxuICAgINC90L7Rj9Cx0YDRjDogMTEsXG4gICAg0L3QvtGP0LHRgNGPOiAxMSxcbiAgICDQvdC+0Y/QsdGA0LU6IDExLFxuICAgINC00LXQutCw0LHRgNGMOiAxMixcbiAgICDQtNC10LrQsNCx0YDRjzogMTIsXG4gICAg0LTQtdC60LDQsdGA0LU6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIC4uLkZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZLFxuICAgINGP0L3QsjogMSxcbiAgICBcItGP0L3Qsi5cIjogMSxcbiAgICDRhNC10LI6IDIsXG4gICAgXCLRhNC10LIuXCI6IDIsXG4gICAg0LzQsNGAOiAzLFxuICAgIFwi0LzQsNGALlwiOiAzLFxuICAgINCw0L/RgDogNCxcbiAgICBcItCw0L/RgC5cIjogNCxcbiAgICDQsNCy0LM6IDgsXG4gICAgXCLQsNCy0LMuXCI6IDgsXG4gICAg0YHQtdC9OiA5LFxuICAgIFwi0YHQtdC9LlwiOiA5LFxuICAgINC+0LrRgjogMTAsXG4gICAgXCLQvtC60YIuXCI6IDEwLFxuICAgINC90L7RjzogMTEsXG4gICAgXCLQvdC+0Y8uXCI6IDExLFxuICAgINC00LXQujogMTIsXG4gICAgXCLQtNC10LouXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICDQvtC00LjQvTogMSxcbiAgICDQvtC00L3QsDogMSxcbiAgICDQvtC00L3QvtC5OiAxLFxuICAgINC+0LTQvdGDOiAxLFxuICAgINC00LLQtTogMixcbiAgICDQtNCy0LA6IDIsXG4gICAg0LTQstGD0YU6IDIsXG4gICAg0YLRgNC4OiAzLFxuICAgINGC0YDQtdGFOiAzLFxuICAgINGC0YDRkdGFOiAzLFxuICAgINGH0LXRgtGL0YDQtTogNCxcbiAgICDRh9C10YLRi9GA0LXRhTogNCxcbiAgICDRh9C10YLRi9GA0ZHRhTogNCxcbiAgICDQv9GP0YLRjDogNSxcbiAgICDQv9GP0YLQuDogNSxcbiAgICDRiNC10YHRgtGMOiA2LFxuICAgINGI0LXRgdGC0Lg6IDYsXG4gICAg0YHQtdC80Yw6IDcsXG4gICAg0YHQtdC80Lg6IDcsXG4gICAg0LLQvtGB0LXQvNGMOiA4LFxuICAgINCy0L7RgdGM0LzQuDogOCxcbiAgICDQtNC10LLRj9GC0Yw6IDksXG4gICAg0LTQtdCy0Y/RgtC4OiA5LFxuICAgINC00LXRgdGP0YLRjDogMTAsXG4gICAg0LTQtdGB0Y/RgtC4OiAxMCxcbiAgICDQvtC00LjQvdC90LDQtNGG0LDRgtGMOiAxMSxcbiAgICDQvtC00LjQvdC90LDQtNGG0LDRgtC4OiAxMSxcbiAgICDQtNCy0LXQvdCw0LTRhtCw0YLRjDogMTIsXG4gICAg0LTQstC10L3QsNC00YbQsNGC0Lg6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICDQv9C10YDQstC+0LU6IDEsXG4gICAg0L/QtdGA0LLQvtCz0L46IDEsXG4gICAg0LLRgtC+0YDQvtC1OiAyLFxuICAgINCy0YLQvtGA0L7Qs9C+OiAyLFxuICAgINGC0YDQtdGC0YzQtTogMyxcbiAgICDRgtGA0LXRgtGM0LXQs9C+OiAzLFxuICAgINGH0LXRgtCy0LXRgNGC0L7QtTogNCxcbiAgICDRh9C10YLQstC10YDRgtC+0LPQvjogNCxcbiAgICDQv9GP0YLQvtC1OiA1LFxuICAgINC/0Y/RgtC+0LPQvjogNSxcbiAgICDRiNC10YHRgtC+0LU6IDYsXG4gICAg0YjQtdGB0YLQvtCz0L46IDYsXG4gICAg0YHQtdC00YzQvNC+0LU6IDcsXG4gICAg0YHQtdC00YzQvNC+0LPQvjogNyxcbiAgICDQstC+0YHRjNC80L7QtTogOCxcbiAgICDQstC+0YHRjNC80L7Qs9C+OiA4LFxuICAgINC00LXQstGP0YLQvtC1OiA5LFxuICAgINC00LXQstGP0YLQvtCz0L46IDksXG4gICAg0LTQtdGB0Y/RgtC+0LU6IDEwLFxuICAgINC00LXRgdGP0YLQvtCz0L46IDEwLFxuICAgINC+0LTQuNC90L3QsNC00YbQsNGC0L7QtTogMTEsXG4gICAg0L7QtNC40L3QvdCw0LTRhtCw0YLQvtCz0L46IDExLFxuICAgINC00LLQtdC90LDQtNGG0LDRgtC+0LU6IDEyLFxuICAgINC00LLQtdC90LDQtNGG0LDRgtC+0LPQvjogMTIsXG4gICAg0YLRgNC40L3QsNC00YbQsNGC0L7QtTogMTMsXG4gICAg0YLRgNC40L3QsNC00YbQsNGC0L7Qs9C+OiAxMyxcbiAgICDRh9C10YLRi9GA0L3QsNC00YbQsNGC0L7QtTogMTQsXG4gICAg0YfQtdGC0YvRgNC90LDQtNGG0LDRgtC+0LPQvjogMTQsXG4gICAg0L/Rj9GC0L3QsNC00YbQsNGC0L7QtTogMTUsXG4gICAg0L/Rj9GC0L3QsNC00YbQsNGC0L7Qs9C+OiAxNSxcbiAgICDRiNC10YHRgtC90LDQtNGG0LDRgtC+0LU6IDE2LFxuICAgINGI0LXRgdGC0L3QsNC00YbQsNGC0L7Qs9C+OiAxNixcbiAgICDRgdC10LzQvdCw0LTRhtCw0YLQvtC1OiAxNyxcbiAgICDRgdC10LzQvdCw0LTRhtCw0YLQvtCz0L46IDE3LFxuICAgINCy0L7RgdC10LzQvdCw0LTRhtCw0YLQvtC1OiAxOCxcbiAgICDQstC+0YHQtdC80L3QsNC00YbQsNGC0L7Qs9C+OiAxOCxcbiAgICDQtNC10LLRj9GC0L3QsNC00YbQsNGC0L7QtTogMTksXG4gICAg0LTQtdCy0Y/RgtC90LDQtNGG0LDRgtC+0LPQvjogMTksXG4gICAg0LTQstCw0LTRhtCw0YLQvtC1OiAyMCxcbiAgICDQtNCy0LDQtNGG0LDRgtC+0LPQvjogMjAsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC/0LXRgNCy0L7QtVwiOiAyMSxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0L/QtdGA0LLQvtCz0L5cIjogMjEsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINCy0YLQvtGA0L7QtVwiOiAyMixcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0LLRgtC+0YDQvtCz0L5cIjogMjIsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGC0YDQtdGC0YzQtVwiOiAyMyxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YLRgNC10YLRjNC10LPQvlwiOiAyMyxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YfQtdGC0LLQtdGA0YLQvtC1XCI6IDI0LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDRh9C10YLQstC10YDRgtC+0LPQvlwiOiAyNCxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0L/Rj9GC0L7QtVwiOiAyNSxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0L/Rj9GC0L7Qs9C+XCI6IDI1LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDRiNC10YHRgtC+0LVcIjogMjYsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGI0LXRgdGC0L7Qs9C+XCI6IDI2LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDRgdC10LTRjNC80L7QtVwiOiAyNyxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YHQtdC00YzQvNC+0LPQvlwiOiAyNyxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0LLQvtGB0YzQvNC+0LVcIjogMjgsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINCy0L7RgdGM0LzQvtCz0L5cIjogMjgsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC00LXQstGP0YLQvtC1XCI6IDI5LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQtNC10LLRj9GC0L7Qs9C+XCI6IDI5LFxuICAgIFwi0YLRgNC40LTRhtCw0YLQvtC1XCI6IDMwLFxuICAgIFwi0YLRgNC40LTRhtCw0YLQvtCz0L5cIjogMzAsXG4gICAgXCLRgtGA0LjQtNGG0LDRgtGMINC/0LXRgNCy0L7QtVwiOiAzMSxcbiAgICBcItGC0YDQuNC00YbQsNGC0Ywg0L/QtdGA0LLQvtCz0L5cIjogMzEsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgINGB0LXQujogXCJzZWNvbmRcIixcbiAgICDRgdC10LrRg9C90LTQsDogXCJzZWNvbmRcIixcbiAgICDRgdC10LrRg9C90LQ6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00Ys6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00YM6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00L7Rh9C60LA6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00L7Rh9C60Lg6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00L7Rh9C10Lo6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00L7Rh9C60YM6IFwic2Vjb25kXCIsXG4gICAg0LzQuNC9OiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQsDogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GCOiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLRizogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0YM6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgtC+0Lo6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgtC60Lg6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgtC60YM6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgtC+0YfQtdC6OiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQvtGH0LrQuDogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0L7Rh9C60YM6IFwibWludXRlXCIsXG4gICAg0YfQsNGBOiBcImhvdXJcIixcbiAgICDRh9Cw0YHQvtCyOiBcImhvdXJcIixcbiAgICDRh9Cw0YHQsDogXCJob3VyXCIsXG4gICAg0YfQsNGB0YM6IFwiaG91clwiLFxuICAgINGH0LDRgdC40LrQvtCyOiBcImhvdXJcIixcbiAgICDRh9Cw0YHQuNC60LA6IFwiaG91clwiLFxuICAgINGH0LDRgdC40LrQtTogXCJob3VyXCIsXG4gICAg0YfQsNGB0LjQujogXCJob3VyXCIsXG4gICAg0LTQtdC90Yw6IFwiZGF5XCIsXG4gICAg0LTQvdGPOiBcImRheVwiLFxuICAgINC00L3QtdC5OiBcImRheVwiLFxuICAgINGB0YPRgtC+0Lo6IFwiZGF5XCIsXG4gICAg0YHRg9GC0LrQuDogXCJkYXlcIixcbiAgICDQvdC10LTQtdC70Y86IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvQtTogXCJ3ZWVrXCIsXG4gICAg0L3QtdC00LXQu9C4OiBcIndlZWtcIixcbiAgICDQvdC10LTQtdC70Y46IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvRjDogXCJ3ZWVrXCIsXG4gICAg0L3QtdC00LXQu9GM0LrQtTogXCJ3ZWVrXCIsXG4gICAg0L3QtdC00LXQu9GM0LrQuDogXCJ3ZWVrXCIsXG4gICAg0L3QtdC00LXQu9C10Lo6IFwid2Vla1wiLFxuICAgINC80LXRgdGP0YY6IFwibW9udGhcIixcbiAgICDQvNC10YHRj9GG0LU6IFwibW9udGhcIixcbiAgICDQvNC10YHRj9GG0LXQsjogXCJtb250aFwiLFxuICAgINC80LXRgdGP0YbQsDogXCJtb250aFwiLFxuICAgINC60LLQsNGA0YLQsNC7OiBcInF1YXJ0ZXJcIixcbiAgICDQutCy0LDRgNGC0LDQu9C1OiBcInF1YXJ0ZXJcIixcbiAgICDQutCy0LDRgNGC0LDQu9C+0LI6IFwicXVhcnRlclwiLFxuICAgINCz0L7QtDogXCJ5ZWFyXCIsXG4gICAg0LPQvtC00LA6IFwieWVhclwiLFxuICAgINCz0L7QtNGDOiBcInllYXJcIixcbiAgICDQs9C+0LTQvtCyOiBcInllYXJcIixcbiAgICDQu9C10YI6IFwieWVhclwiLFxuICAgINCz0L7QtNC40Lo6IFwieWVhclwiLFxuICAgINCz0L7QtNC40LrQsDogXCJ5ZWFyXCIsXG4gICAg0LPQvtC00LjQutC+0LI6IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBOVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSl9fFswLTldK3xbMC05XStcXFxcLlswLTldK3zQv9C+0Lt80L3QtdGB0LrQvtC70YzQutC+fNC/0LDRgCg/OtGLfNGDKXxcXFxcc3swLDN9KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBpZiAobnVtLm1hdGNoKC/QvdC10YHQutC+0LvRjNC60L4vKSkge1xuICAgICAgICByZXR1cm4gMztcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC/Qv9C+0LsvKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL9C/0LDRgC8pKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUZsb2F0KG51bSk7XG59XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihPUkRJTkFMX1dPUkRfRElDVElPTkFSWSl9fFswLTldezEsMn0oPzrQs9C+fNC+0LPQvnzQtXzQvtC1KT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cbmNvbnN0IHllYXIgPSBcIig/OlxcXFxzKyg/OtCz0L7QtNGDfNCz0L7QtNCwfNCz0L7QtHzQs3zQsy4pKT9cIjtcbmV4cG9ydCBjb25zdCBZRUFSX1BBVFRFUk4gPSBgKD86WzEtOV1bMC05XXswLDN9JHt5ZWFyfVxcXFxzKig/OtC9LtGNLnzQtNC+INC9LtGNLnzQvS4g0Y0ufNC00L4g0L0uINGNLil8WzEtMl1bMC05XXszfSR7eWVhcn18WzUtOV1bMC05XSR7eWVhcn0pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXIobWF0Y2gpIHtcbiAgICBpZiAoLyjQs9C+0LR80LPQvtC00LB80LN80LMuKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKNCz0L7QtHzQs9C+0LTQsHzQs3zQsy4pL2ksIFwiXCIpO1xuICAgIH1cbiAgICBpZiAoLyjQtNC+INC9LtGNLnzQtNC+INC9LiDRjS4pL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC8o0LTQviDQvS7RjS580LTQviDQvS4g0Y0uKS9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGlmICgvKNC9LiDRjS580L0u0Y0uKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKNC9LiDRjS580L0u0Y0uKS9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgY29uc3QgcmF3WWVhck51bWJlciA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICByZXR1cm4gZmluZE1vc3RMaWtlbHlBRFllYXIocmF3WWVhck51bWJlcik7XG59XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4gPSBgKCR7TlVNQkVSX1BBVFRFUk59KVxcXFxzezAsM30oJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OtC+0LrQvtC70L580L/RgNC40LzQtdGA0L3QvilcXFxcc3swLDN9KT9gLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCkudHJpbSgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbmZ1bmN0aW9uIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFsyXS50b0xvd2VyQ2FzZSgpXTtcbiAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uLCBSRUdFWF9QQVJUUyB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IGAoPzooPzrQvtC60L7Qu9C+fNC/0YDQuNC80LXRgNC90L4pXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX1BBVFRFUk59KSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBwYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gUkVHRVhfUEFSVFMubGVmdEJvdW5kYXJ5O1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gY29udGV4dC5vcHRpb24uZm9yd2FyZERhdGVcbiAgICAgICAgICAgID8gbmV3IFJlZ0V4cChQQVRURVJOLCBSRUdFWF9QQVJUUy5mbGFncylcbiAgICAgICAgICAgIDogbmV3IFJlZ0V4cChgKD860LIg0YLQtdGH0LXQvdC40LV80LIg0YLQtdGH0LXQvdC40LgpXFxcXHMqJHtQQVRURVJOfWAsIFJFR0VYX1BBUlRTLmZsYWdzKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBSRUdFWF9QQVJUUyB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBwYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gUkVHRVhfUEFSVFMubGVmdEJvdW5kYXJ5O1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh0aGlzLmlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSwgUkVHRVhfUEFSVFMuZmxhZ3MpO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm5IYXNDaGFuZ2UoY29udGV4dCwgY3VycmVudElubmVyUGF0dGVybikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCR7dGhpcy5pbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCl9JHtSRUdFWF9QQVJUUy5yaWdodEJvdW5kYXJ5fWAsIFJFR0VYX1BBUlRTLmZsYWdzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiwgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCg/OtGBKT9cXFxccyooJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGBcXFxcc3swLDN9KD860L/QvnwtfOKAk3zQtNC+KT9cXFxcc3swLDN9YCArXG4gICAgICAgICAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgICAgICAgICBgKT9gICtcbiAgICAgICAgICAgIGAoPzotfFxcXFwvfFxcXFxzezAsM30oPzpvZik/XFxcXHN7MCwzfSlgICtcbiAgICAgICAgICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OmAgK1xuICAgICAgICAgICAgYCg/Oi18XFxcXC98LD9cXFxcc3swLDN9KWAgK1xuICAgICAgICAgICAgYCgke1lFQVJfUEFUVEVSTn0oPyFbXlxcXFxzXVxcXFxkKSlgICtcbiAgICAgICAgICAgIGApP2A7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZLCBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAyO1xuY29uc3QgWUVBUl9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVU1vbnRoTmFtZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoKD860LIpXFxcXHMqKT9gICtcbiAgICAgICAgICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYFxcXFxzKmAgK1xuICAgICAgICAgICAgYCg/OmAgK1xuICAgICAgICAgICAgYFssLV0/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSk/YCArXG4gICAgICAgICAgICBgKT9gICtcbiAgICAgICAgICAgIGAoPz1bXlxcXFxzXFxcXHddfFxcXFxzK1teMC05XXxcXFxccyskfCQpYCk7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb250aE5hbWUgPSBtYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobWF0Y2hbMF0ubGVuZ3RoIDw9IDMgJiYgIUZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZW21vbnRoTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgMSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttb250aE5hbWVdO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCAxLCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVNb250aE5hbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IHsgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVVRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcihzdHJpY3RNb2RlKTtcbiAgICB9XG4gICAgcGF0dGVybkZsYWdzKCkge1xuICAgICAgICByZXR1cm4gUkVHRVhfUEFSVFMuZmxhZ3M7XG4gICAgfVxuICAgIHByaW1hcnlQYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gYChefFxcXFxzfFR8KD86W15cXFxccHtMfVxcXFxwe059X10pKWA7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gYFxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnHzQtNC+fNC4fNC/0L58XFxcXD8pXFxcXHMqYDtcbiAgICB9XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGAoPzooPzrQsnzRgSlcXFxccyopPz9gO1xuICAgIH1cbiAgICBwcmltYXJ5U3VmZml4KCkge1xuICAgICAgICByZXR1cm4gYCg/OlxcXFxzKig/OtGD0YLRgNCwfNCy0LXRh9C10YDQsHzQv9C+0YHQu9C1INC/0L7Qu9GD0LTQvdGPKSk/KD8hXFxcXC8pJHtSRUdFWF9QQVJUUy5yaWdodEJvdW5kYXJ5fWA7XG4gICAgfVxuICAgIGV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwi0LLQtdGH0LXRgNCwXCIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaG91ciA9IGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA+PSA2ICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgY29tcG9uZW50cy5nZXQoXCJob3VyXCIpICsgMTIpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwi0L/QvtGB0LvQtSDQv9C+0LvRg9C00L3Rj1wiKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gMCAmJiBob3VyIDw9IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0uZW5kc1dpdGgoXCLRg9GC0YDQsFwiKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgY29tcG9uZW50cy5nZXQoXCJob3VyXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGAoJHtUSU1FX1VOSVRTX1BBVFRFUk59KVxcXFxzezAsNX3QvdCw0LfQsNC0KD89KD86XFxcXFd8JCkpYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBvdXRwdXRUaW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgb3V0cHV0VGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVU1lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijQuCDQtNC+fNC4INC/0L580LTQvnzQv9C+fC0pXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5cXFxccyooVHzQsnwsfC0pP1xcXFxzKiRgKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVU1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKD860YF80YHQvik/XFxcXHMqKNGB0LXQs9C+0LTQvdGPfNCy0YfQtdGA0LB80LfQsNCy0YLRgNCwfNC/0L7RgdC70LXQt9Cw0LLRgtGA0LB80L/QvtGB0LvQtdC/0L7RgdC70LXQt9Cw0LLRgtGA0LB80L/QvtC30LDQv9C+0LfQsNCy0YfQtdGA0LB80L/QvtC30LDQstGH0LXRgNCwKWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAobG93ZXJUZXh0KSB7XG4gICAgICAgICAgICBjYXNlIFwi0YHQtdCz0L7QtNC90Y9cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwi0LLRh9C10YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwi0LfQsNCy0YLRgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7RgdC70LXQt9Cw0LLRgtGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50aGVEYXlBZnRlcihjb250ZXh0LnJlZmVyZW5jZSwgMik7XG4gICAgICAgICAgICBjYXNlIFwi0L/QvtGB0LvQtdC/0L7RgdC70LXQt9Cw0LLRgtGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50aGVEYXlBZnRlcihjb250ZXh0LnJlZmVyZW5jZSwgMyk7XG4gICAgICAgICAgICBjYXNlIFwi0L/QvtC30LDQstGH0LXRgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QmVmb3JlKGNvbnRleHQucmVmZXJlbmNlLCAyKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9C+0LfQsNC/0L7Qt9Cw0LLRh9C10YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUJlZm9yZShjb250ZXh0LnJlZmVyZW5jZSwgMyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVUNhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKNGB0LXQudGH0LDRgXzQv9GA0L7RiNC70YvQvFxcXFxzKtCy0LXRh9C10YDQvtC8fNC/0YDQvtGI0LvQvtC5XFxcXHMq0L3QvtGH0YzRjnzRgdC70LXQtNGD0Y7RidC10LlcXFxccyrQvdC+0YfRjNGOfNGB0LXQs9C+0LTQvdGPXFxcXHMq0L3QvtGH0YzRjnzRjdGC0L7QuVxcXFxzKtC90L7Rh9GM0Y580L3QvtGH0YzRjnzRjdGC0LjQvCDRg9GC0YDQvtC8fNGD0YLRgNC+0Lx80YPRgtGA0LB80LJcXFxccyrQv9C+0LvQtNC10L3RjHzQstC10YfQtdGA0L7QvHzQstC10YfQtdGA0LB80LJcXFxccyrQv9C+0LvQvdC+0YfRjClgO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgaWYgKGxvd2VyVGV4dCA9PT0gXCLRgdC10LnRh9Cw0YFcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0ID09PSBcItCy0LXRh9C10YDQvtC8XCIgfHwgbG93ZXJUZXh0ID09PSBcItCy0LXRh9C10YDQsFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ldmVuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0LmVuZHNXaXRoKFwi0YPRgtGA0L7QvFwiKSB8fCBsb3dlclRleHQuZW5kc1dpdGgoXCLRg9GC0YDQsFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubW9ybmluZyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5tYXRjaCgv0LJcXHMq0L/QvtC70LTQtdC90YwvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubm9vbihjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5tYXRjaCgv0L/RgNC+0YjQu9C+0LlcXHMq0L3QvtGH0YzRji8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5sYXN0TmlnaHQoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL9C/0YDQvtGI0LvRi9C8XFxzKtCy0LXRh9C10YDQvtC8LykpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheUV2ZW5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL9GB0LvQtdC00YPRjtGJ0LXQuVxccyrQvdC+0YfRjNGOLykpIHtcbiAgICAgICAgICAgIGNvbnN0IGRheXNUb0FkZCA9IHRhcmdldERhdGUuZ2V0SG91cnMoKSA8IDIyID8gMSA6IDI7XG4gICAgICAgICAgICBjb25zdCBuZXh0RGF5ID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgZGF5c1RvQWRkKTtcbiAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL9CyXFxzKtC/0L7Qu9C90L7Rh9GMLykgfHwgbG93ZXJUZXh0LmVuZHNXaXRoKFwi0L3QvtGH0YzRjlwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubWlkbmlnaHQoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVDYXN1YWxUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgV0VFS0RBWV9HUk9VUCA9IDI7XG5jb25zdCBQT1NURklYX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVV2Vla2RheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoYCg/Oig/Oix8XFxcXCh877yIKVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKD860LJcXFxccyo/KT9gICtcbiAgICAgICAgICAgIGAoPzoo0Y3RgtGDfNGN0YLQvtGCfNC/0YDQvtGI0LvRi9C5fNC/0YDQvtGI0LvRg9GOfNGB0LvQtdC00YPRjtGJ0LjQuXzRgdC70LXQtNGD0Y7RidGD0Y580YHQu9C10LTRg9GO0YnQtdCz0L4pXFxcXHMqKT9gICtcbiAgICAgICAgICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgICAgICAgICBgKD86XFxcXHMqKD86LHxcXFxcKXzvvIkpKT9gICtcbiAgICAgICAgICAgIGAoPzpcXFxccyrQvdCwXFxcXHMqKNGN0YLQvtC5fNC/0YDQvtGI0LvQvtC5fNGB0LvQtdC00YPRjtGJ0LXQuSlcXFxccyrQvdC10LTQtdC70LUpP2ApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZGF5T2ZXZWVrID0gbWF0Y2hbV0VFS0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qgd2Vla2RheSA9IFdFRUtEQVlfRElDVElPTkFSWVtkYXlPZldlZWtdO1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfR1JPVVBdO1xuICAgICAgICBjb25zdCBwb3N0Zml4ID0gbWF0Y2hbUE9TVEZJWF9HUk9VUF07XG4gICAgICAgIGxldCBtb2RpZmllcldvcmQgPSBwcmVmaXggfHwgcG9zdGZpeDtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkIHx8IFwiXCI7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAobW9kaWZpZXJXb3JkID09IFwi0L/RgNC+0YjQu9GL0LlcIiB8fCBtb2RpZmllcldvcmQgPT0gXCLQv9GA0L7RiNC70YPRjlwiIHx8IG1vZGlmaWVyV29yZCA9PSBcItC/0YDQvtGI0LvQvtC5XCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJsYXN0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwi0YHQu9C10LTRg9GO0YnQuNC5XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItGB0LvQtdC00YPRjtGJ0YPRjlwiIHx8XG4gICAgICAgICAgICBtb2RpZmllcldvcmQgPT0gXCLRgdC70LXQtNGD0Y7RidC10LlcIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXJXb3JkID09IFwi0YHQu9C10LTRg9GO0YnQtdCz0L5cIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQgPT0gXCLRjdGC0L7RglwiIHx8IG1vZGlmaWVyV29yZCA9PSBcItGN0YLRg1wiIHx8IG1vZGlmaWVyV29yZCA9PSBcItGN0YLQvtC5XCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJ0aGlzXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuY29uc3QgTU9ESUZJRVJfV09SRF9HUk9VUCA9IDE7XG5jb25zdCBSRUxBVElWRV9XT1JEX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGAo0LIg0L/RgNC+0YjQu9C+0Lx80L3QsCDQv9GA0L7RiNC70L7QuXzQvdCwINGB0LvQtdC00YPRjtGJ0LXQuXzQsiDRgdC70LXQtNGD0Y7RidC10Lx80L3QsCDRjdGC0L7QuXzQsiDRjdGC0L7QvClcXFxccyooJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBtYXRjaFtNT0RJRklFUl9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB1bml0V29yZCA9IG1hdGNoW1JFTEFUSVZFX1dPUkRfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWV1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbdW5pdFdvcmRdO1xuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCLQvdCwINGB0LvQtdC00YPRjtGJ0LXQuVwiIHx8IG1vZGlmaWVyID09IFwi0LIg0YHQu9C10LTRg9GO0YnQtdC8XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHt9O1xuICAgICAgICAgICAgdGltZVVuaXRzW3RpbWV1bml0XSA9IDE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcItCyINC/0YDQvtGI0LvQvtC8XCIgfHwgbW9kaWZpZXIgPT0gXCLQvdCwINC/0YDQvtGI0LvQvtC5XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHt9O1xuICAgICAgICAgICAgdGltZVVuaXRzW3RpbWV1bml0XSA9IC0xO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKGNvbnRleHQucmVmZXJlbmNlLmluc3RhbnQuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKHRpbWV1bml0Lm1hdGNoKC93ZWVrL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkYXRlLmdldERheSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aW1ldW5pdC5tYXRjaCgvbW9udGgvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRpbWV1bml0Lm1hdGNoKC95ZWFyL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoMSk7XG4gICAgICAgICAgICBkYXRlLnNldE1vbnRoKDApO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVVJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGAo0Y3RgtC4fNC/0L7RgdC70LXQtNC90LjQtXzQv9GA0L7RiNC70YvQtXzRgdC70LXQtNGD0Y7RidC40LV80L/QvtGB0LvQtXzRgdC/0YPRgdGC0Y980YfQtdGA0LXQt3xcXFxcK3wtKVxcXFxzKigke1RJTUVfVU5JVFNfUEFUVEVSTn0pYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzJdKTtcbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCLQv9C+0YHQu9C10LTQvdC40LVcIjpcbiAgICAgICAgICAgIGNhc2UgXCLQv9GA0L7RiNC70YvQtVwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgUlVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1JVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBSVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1JVTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVNb250aE5hbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVU1vbnRoTmFtZVBhcnNlci5qc1wiO1xuaW1wb3J0IFJVVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1JVVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBSVU1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9SVU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IFJVTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvUlVNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCBSVUNhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVUNhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBSVUNhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBSVVdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBSVVJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1JVUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBSVVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKHRydWUpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFJVQ2FzdWFsRGF0ZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBSVUNhc3VhbFRpbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgUlVNb250aE5hbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgUlVSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgUlVUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIodHJ1ZSksXG4gICAgICAgICAgICBuZXcgUlVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFJVTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgUlVXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgUlVUaW1lRXhwcmVzc2lvblBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBSVVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFJVTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IFJVTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgIFwiZG9taW5nb1wiOiAwLFxuICAgIFwiZG9tXCI6IDAsXG4gICAgXCJsdW5lc1wiOiAxLFxuICAgIFwibHVuXCI6IDEsXG4gICAgXCJtYXJ0ZXNcIjogMixcbiAgICBcIm1hclwiOiAyLFxuICAgIFwibWnDqXJjb2xlc1wiOiAzLFxuICAgIFwibWllcmNvbGVzXCI6IDMsXG4gICAgXCJtacOpXCI6IDMsXG4gICAgXCJtaWVcIjogMyxcbiAgICBcImp1ZXZlc1wiOiA0LFxuICAgIFwianVlXCI6IDQsXG4gICAgXCJ2aWVybmVzXCI6IDUsXG4gICAgXCJ2aWVcIjogNSxcbiAgICBcInPDoWJhZG9cIjogNixcbiAgICBcInNhYmFkb1wiOiA2LFxuICAgIFwic8OhYlwiOiA2LFxuICAgIFwic2FiXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJlbmVyb1wiOiAxLFxuICAgIFwiZW5lXCI6IDEsXG4gICAgXCJlbmUuXCI6IDEsXG4gICAgXCJmZWJyZXJvXCI6IDIsXG4gICAgXCJmZWJcIjogMixcbiAgICBcImZlYi5cIjogMixcbiAgICBcIm1hcnpvXCI6IDMsXG4gICAgXCJtYXJcIjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBcImFicmlsXCI6IDQsXG4gICAgXCJhYnJcIjogNCxcbiAgICBcImFici5cIjogNCxcbiAgICBcIm1heW9cIjogNSxcbiAgICBcIm1heVwiOiA1LFxuICAgIFwibWF5LlwiOiA1LFxuICAgIFwianVuaW9cIjogNixcbiAgICBcImp1blwiOiA2LFxuICAgIFwianVuLlwiOiA2LFxuICAgIFwianVsaW9cIjogNyxcbiAgICBcImp1bFwiOiA3LFxuICAgIFwianVsLlwiOiA3LFxuICAgIFwiYWdvc3RvXCI6IDgsXG4gICAgXCJhZ29cIjogOCxcbiAgICBcImFnby5cIjogOCxcbiAgICBcInNlcHRpZW1icmVcIjogOSxcbiAgICBcInNldGllbWJyZVwiOiA5LFxuICAgIFwic2VwXCI6IDksXG4gICAgXCJzZXAuXCI6IDksXG4gICAgXCJvY3R1YnJlXCI6IDEwLFxuICAgIFwib2N0XCI6IDEwLFxuICAgIFwib2N0LlwiOiAxMCxcbiAgICBcIm5vdmllbWJyZVwiOiAxMSxcbiAgICBcIm5vdlwiOiAxMSxcbiAgICBcIm5vdi5cIjogMTEsXG4gICAgXCJkaWNpZW1icmVcIjogMTIsXG4gICAgXCJkaWNcIjogMTIsXG4gICAgXCJkaWMuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcInVub1wiOiAxLFxuICAgIFwiZG9zXCI6IDIsXG4gICAgXCJ0cmVzXCI6IDMsXG4gICAgXCJjdWF0cm9cIjogNCxcbiAgICBcImNpbmNvXCI6IDUsXG4gICAgXCJzZWlzXCI6IDYsXG4gICAgXCJzaWV0ZVwiOiA3LFxuICAgIFwib2Nob1wiOiA4LFxuICAgIFwibnVldmVcIjogOSxcbiAgICBcImRpZXpcIjogMTAsXG4gICAgXCJvbmNlXCI6IDExLFxuICAgIFwiZG9jZVwiOiAxMixcbiAgICBcInRyZWNlXCI6IDEzLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICBcInNlY1wiOiBcInNlY29uZFwiLFxuICAgIFwic2VndW5kb1wiOiBcInNlY29uZFwiLFxuICAgIFwic2VndW5kb3NcIjogXCJzZWNvbmRcIixcbiAgICBcIm1pblwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWluc1wiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXRvXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dG9zXCI6IFwibWludXRlXCIsXG4gICAgXCJoXCI6IFwiaG91clwiLFxuICAgIFwiaHJcIjogXCJob3VyXCIsXG4gICAgXCJocnNcIjogXCJob3VyXCIsXG4gICAgXCJob3JhXCI6IFwiaG91clwiLFxuICAgIFwiaG9yYXNcIjogXCJob3VyXCIsXG4gICAgXCJkw61hXCI6IFwiZGF5XCIsXG4gICAgXCJkw61hc1wiOiBcImRheVwiLFxuICAgIFwic2VtYW5hXCI6IFwid2Vla1wiLFxuICAgIFwic2VtYW5hc1wiOiBcIndlZWtcIixcbiAgICBcIm1lc1wiOiBcIm1vbnRoXCIsXG4gICAgXCJtZXNlc1wiOiBcIm1vbnRoXCIsXG4gICAgXCJjdWFydG9cIjogXCJxdWFydGVyXCIsXG4gICAgXCJjdWFydG9zXCI6IFwicXVhcnRlclwiLFxuICAgIFwiYcOxb1wiOiBcInllYXJcIixcbiAgICBcImHDsW9zXCI6IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBOVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSl9fFswLTldK3xbMC05XStcXFxcLlswLTldK3x1bj98dW5vP3x1bmE/fGFsZ3Vub3M/fHVub3M/fGRlbWktPylgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtID09PSBcInVuXCIgfHwgbnVtID09PSBcInVuYVwiIHx8IG51bSA9PT0gXCJ1bm9cIikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9hbGd1bm9zPy8pKSB7XG4gICAgICAgIHJldHVybiAzO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL3Vub3M/LykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvbWVkaWE/LykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBZRUFSX1BBVFRFUk4gPSBcIlswLTldezEsNH0oPyFbXlxcXFxzXVxcXFxkKSg/OlxcXFxzKlthfGRdXFxcXC4/XFxcXHMqY1xcXFwuP3xcXFxccyphXFxcXC4/XFxcXHMqZFxcXFwuPyk/XCI7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKG1hdGNoLm1hdGNoKC9eWzAtOV17MSw0fSQvKSkge1xuICAgICAgICBsZXQgeWVhck51bWJlciA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICAgICAgaWYgKHllYXJOdW1iZXIgPCAxMDApIHtcbiAgICAgICAgICAgIGlmICh5ZWFyTnVtYmVyID4gNTApIHtcbiAgICAgICAgICAgICAgICB5ZWFyTnVtYmVyID0geWVhck51bWJlciArIDE5MDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB5ZWFyTnVtYmVyID0geWVhck51bWJlciArIDIwMDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXJOdW1iZXI7XG4gICAgfVxuICAgIGlmIChtYXRjaC5tYXRjaCgvYVxcLj9cXHMqY1xcLj8vaSkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC9hXFwuP1xccypjXFwuPy9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG59XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4gPSBgKCR7TlVNQkVSX1BBVFRFUk59KVxcXFxzezAsNX0oJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlcXFxcc3swLDV9YDtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUkVHRVggPSBuZXcgUmVnRXhwKFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiwgXCJpXCIpO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfUEFUVEVSTiA9IHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKFwiXCIsIFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTik7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Oig/OlxcXFwsfFxcXFwofFxcXFzvvIgpXFxcXHMqKT9cIiArXG4gICAgXCIoPzooZXN0ZXxlc3RhfHBhc2Fkb3xwcltvw7NdeGltbylcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKihlc3RlfGVzdGF8cGFzYWRvfHByW8Ozb114aW1vKVxcXFxzKnNlbWFuYSk/XCIgK1xuICAgIFwiKD89XFxcXFd8XFxcXGR8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU1dlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKHdlZWtkYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbm9ybSA9IHByZWZpeCB8fCBwb3N0Zml4IHx8IFwiXCI7XG4gICAgICAgIG5vcm0gPSBub3JtLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChub3JtID09IFwicGFzYWRvXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJ0aGlzXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9ybSA9PSBcInByw7N4aW1vXCIgfHwgbm9ybSA9PSBcInByb3hpbW9cIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub3JtID09IFwiZXN0ZVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVTV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzphc2xhc3xkZXNsYXN8bGFzP3xhbD98ZGV8ZGVsKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8YSg/OmwpP3xcXFxcPylcXFxccypcIjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRVNNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooPzosfGRlfGFzbGFzfGEpP1xcXFxzKiRcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RVNNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRVNNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyooPzotKVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RVNNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoWzAtOV17MSwyfSkoPzrCunzCqnzCsCk/YCArXG4gICAgXCIoPzpcXFxccyooPzpkZXNkZXxkZXxcXFxcLXxcXFxc4oCTfGFvP3xcXFxccylcXFxccyooWzAtOV17MSwyfSkoPzrCunzCqnzCsCk/KT9cXFxccyooPzpkZSk/XFxcXHMqXCIgK1xuICAgIGAoPzotfC98XFxcXHMqKD86ZGV8LCk/XFxcXHMqKWAgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGAoPzpcXFxccyooPzpkZXwsKT9cXFxccyooJHtZRUFSX1BBVFRFUk59KSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU01vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFURV9HUk9VUF0pO1xuICAgICAgICBpZiAoZGF5ID4gMzEpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFtEQVRFX0dST1VQXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhck51bWJlciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbREFURV9UT19HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZUludChtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVTTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gLyhhaG9yYXxob3l8bWHDsWFuYXxheWVyKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGxvd2VyVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcImFob3JhXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJob3lcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwibWHDsWFuYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbW9ycm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJheWVyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVTQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRVNDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIC8oPzplc3RhXFxzKik/KG1hw7FhbmF8dGFyZGV8bWVkaWFub2NoZXxtZWRpb2RpYXxtZWRpb2TDrWF8bm9jaGUpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAobWF0Y2hbMV0udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcInRhcmRlXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvYWZ0ZXJub29uXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5vY2hlXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMjIpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvZXZlbmluZ1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtYcOxYW5hXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9tb3JuaW5nXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1lZGlhbm9jaGVcIjpcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0RGF5ID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgIG5leHREYXkuc2V0RGF0ZShuZXh0RGF5LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL21pZG5pZ2h0XCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1lZGlvZGlhXCI6XG4gICAgICAgICAgICBjYXNlIFwibWVkaW9kw61hXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2Uvbm9vblwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVTQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86ZW58cG9yfGR1cmFudGV8ZGV8ZGVudHJvIGRlKVxcXFxzKigke1RJTUVfVU5JVFNfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFU1dlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FU1dlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBFU1RpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRVNUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IEVTTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvRVNNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IEVTTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0VTTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRVNNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FU01vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IEVTQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0VTQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IEVTQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0VTQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IEVTVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FU1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy5wdXNoKG5ldyBFU0Nhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgRVNDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSwgbGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBFU1dlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBFU1RpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRVNNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBFU1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IEVTTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IEVTTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFJFR0VYX1BBUlRTID0ge1xuICAgIGxlZnRCb3VuZGFyeTogXCIoW15cXFxccHtMfVxcXFxwe059X118XilcIixcbiAgICByaWdodEJvdW5kYXJ5OiBcIig/PVteXFxcXHB7TH1cXFxccHtOfV9dfCQpXCIsXG4gICAgZmxhZ3M6IFwiaXVcIixcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgIFwi0L3QtdC00ZbQu9GPXCI6IDAsXG4gICAgXCLQvdC10LTRltC70ZZcIjogMCxcbiAgICBcItC90LXQtNGW0LvRjlwiOiAwLFxuICAgIFwi0L3QtFwiOiAwLFxuICAgIFwi0L3QtC5cIjogMCxcbiAgICBcItC/0L7QvdC10LTRltC70L7QulwiOiAxLFxuICAgIFwi0L/QvtC90LXQtNGW0LvQutCwXCI6IDEsXG4gICAgXCLQv9C9XCI6IDEsXG4gICAgXCLQv9C9LlwiOiAxLFxuICAgIFwi0LLRltCy0YLQvtGA0L7QulwiOiAyLFxuICAgIFwi0LLRltCy0YLQvtGA0LrQsFwiOiAyLFxuICAgIFwi0LLRglwiOiAyLFxuICAgIFwi0LLRgi5cIjogMixcbiAgICBcItGB0LXRgNC10LTQsFwiOiAzLFxuICAgIFwi0YHQtdGA0LXQtNC4XCI6IDMsXG4gICAgXCLRgdC10YDQtdC00YNcIjogMyxcbiAgICBcItGB0YBcIjogMyxcbiAgICBcItGB0YAuXCI6IDMsXG4gICAgXCLRh9C10YLQstC10YBcIjogNCxcbiAgICBcItGH0LXRgtCy0LXRgNCz0LBcIjogNCxcbiAgICBcItGH0LXRgtCy0LXRgNCz0YNcIjogNCxcbiAgICBcItGH0YJcIjogNCxcbiAgICBcItGH0YIuXCI6IDQsXG4gICAgXCLQvyfRj9GC0L3QuNGG0Y9cIjogNSxcbiAgICBcItC/J9GP0YLQvdC40YbRllwiOiA1LFxuICAgIFwi0L8n0Y/RgtC90LjRhtGOXCI6IDUsXG4gICAgXCLQv9GCXCI6IDUsXG4gICAgXCLQv9GCLlwiOiA1LFxuICAgIFwi0YHRg9Cx0L7RgtCwXCI6IDYsXG4gICAgXCLRgdGD0LHQvtGC0LhcIjogNixcbiAgICBcItGB0YPQsdC+0YLRg1wiOiA2LFxuICAgIFwi0YHQsVwiOiA2LFxuICAgIFwi0YHQsS5cIjogNixcbn07XG5leHBvcnQgY29uc3QgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlkgPSB7XG4gICAgXCLRgdGW0YfQtdC90YxcIjogMSxcbiAgICBcItGB0ZbRh9C90Y9cIjogMSxcbiAgICBcItGB0ZbRh9C90ZZcIjogMSxcbiAgICBcItC70Y7RgtC40LlcIjogMixcbiAgICBcItC70Y7RgtC+0LPQvlwiOiAyLFxuICAgIFwi0LvRjtGC0L7QvNGDXCI6IDIsXG4gICAgXCLQsdC10YDQtdC30LXQvdGMXCI6IDMsXG4gICAgXCLQsdC10YDQtdC30L3Rj1wiOiAzLFxuICAgIFwi0LHQtdGA0LXQt9C90ZZcIjogMyxcbiAgICBcItC60LLRltGC0LXQvdGMXCI6IDQsXG4gICAgXCLQutCy0ZbRgtC90Y9cIjogNCxcbiAgICBcItC60LLRltGC0L3RllwiOiA0LFxuICAgIFwi0YLRgNCw0LLQtdC90YxcIjogNSxcbiAgICBcItGC0YDQsNCy0L3Rj1wiOiA1LFxuICAgIFwi0YLRgNCw0LLQvdGWXCI6IDUsXG4gICAgXCLRh9C10YDQstC10L3RjFwiOiA2LFxuICAgIFwi0YfQtdGA0LLQvdGPXCI6IDYsXG4gICAgXCLRh9C10YDQstC90ZZcIjogNixcbiAgICBcItC70LjQv9C10L3RjFwiOiA3LFxuICAgIFwi0LvQuNC/0L3Rj1wiOiA3LFxuICAgIFwi0LvQuNC/0L3RllwiOiA3LFxuICAgIFwi0YHQtdGA0L/QtdC90YxcIjogOCxcbiAgICBcItGB0LXRgNC/0L3Rj1wiOiA4LFxuICAgIFwi0YHQtdGA0L/QvdGWXCI6IDgsXG4gICAgXCLQstC10YDQtdGB0LXQvdGMXCI6IDksXG4gICAgXCLQstC10YDQtdGB0L3Rj1wiOiA5LFxuICAgIFwi0LLQtdGA0LXRgdC90ZZcIjogOSxcbiAgICBcItC20L7QstGC0LXQvdGMXCI6IDEwLFxuICAgIFwi0LbQvtCy0YLQvdGPXCI6IDEwLFxuICAgIFwi0LbQvtCy0YLQvdGWXCI6IDEwLFxuICAgIFwi0LvQuNGB0YLQvtC/0LDQtFwiOiAxMSxcbiAgICBcItC70LjRgdGC0L7Qv9Cw0LTQsFwiOiAxMSxcbiAgICBcItC70LjRgdGC0L7Qv9Cw0LTRg1wiOiAxMSxcbiAgICBcItCz0YDRg9C00LXQvdGMXCI6IDEyLFxuICAgIFwi0LPRgNGD0LTQvdGPXCI6IDEyLFxuICAgIFwi0LPRgNGD0LTQvdGWXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIC4uLkZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZLFxuICAgIFwi0YHRltGHXCI6IDEsXG4gICAgXCLRgdGW0YcuXCI6IDEsXG4gICAgXCLQu9GO0YJcIjogMixcbiAgICBcItC70Y7Rgi5cIjogMixcbiAgICBcItCx0LXRgFwiOiAzLFxuICAgIFwi0LHQtdGALlwiOiAzLFxuICAgIFwi0LrQstGW0YJcIjogNCxcbiAgICBcItC60LLRltGCLlwiOiA0LFxuICAgIFwi0YLRgNCw0LJcIjogNSxcbiAgICBcItGC0YDQsNCyLlwiOiA1LFxuICAgIFwi0YfQtdGA0LJcIjogNixcbiAgICBcItGH0LXRgNCyLlwiOiA2LFxuICAgIFwi0LvQuNC/XCI6IDcsXG4gICAgXCLQu9C40L8uXCI6IDcsXG4gICAgXCLRgdC10YDQv1wiOiA4LFxuICAgIFwi0YHQtdGA0L8uXCI6IDgsXG4gICAgXCLRgdC10YBcIjogOCxcbiAgICBcImPQtdGALlwiOiA4LFxuICAgIFwi0LLQtdGAXCI6IDksXG4gICAgXCLQstC10YAuXCI6IDksXG4gICAgXCLQstC10YDQtdGBXCI6IDksXG4gICAgXCLQstC10YDQtdGBLlwiOiA5LFxuICAgIFwi0LbQvtCy0YJcIjogMTAsXG4gICAgXCLQttC+0LLRgi5cIjogMTAsXG4gICAgXCLQu9C40YHRgtC+0L9cIjogMTEsXG4gICAgXCLQu9C40YHRgtC+0L8uXCI6IDExLFxuICAgIFwi0LPRgNGD0LRcIjogMTIsXG4gICAgXCLQs9GA0YPQtC5cIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IElOVEVHRVJfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIFwi0L7QtNC40L1cIjogMSxcbiAgICBcItC+0LTQvdCwXCI6IDEsXG4gICAgXCLQvtC00L3QvtGXXCI6IDEsXG4gICAgXCLQvtC00L3Rg1wiOiAxLFxuICAgIFwi0LTQstGWXCI6IDIsXG4gICAgXCLQtNCy0LBcIjogMixcbiAgICBcItC00LLQvtGFXCI6IDIsXG4gICAgXCLRgtGA0LhcIjogMyxcbiAgICBcItGC0YDRjNC+0YVcIjogMyxcbiAgICBcItGH0L7RgtC40YDQuFwiOiA0LFxuICAgIFwi0YfQvtGC0LjRgNGM0L7RhVwiOiA0LFxuICAgIFwi0L8n0Y/RgtGMXCI6IDUsXG4gICAgXCLQvyfRj9GC0LhcIjogNSxcbiAgICBcItGI0ZbRgdGC0YxcIjogNixcbiAgICBcItGI0LXRgdGC0LhcIjogNixcbiAgICBcItGB0ZbQvFwiOiA3LFxuICAgIFwi0YHQtdC80LhcIjogNyxcbiAgICBcItCy0ZbRgdGW0LxcIjogOCxcbiAgICBcItCy0L7RgdGM0LzQuFwiOiA4LFxuICAgIFwi0LTQtdCyJ9GP0YLRjFwiOiA5LFxuICAgIFwi0LTQtdCyJ9GP0YLQuFwiOiA5LFxuICAgIFwi0LTQtdGB0Y/RgtGMXCI6IDEwLFxuICAgIFwi0LTQtdGB0Y/RgtC4XCI6IDEwLFxuICAgIFwi0L7QtNC40L3QsNC00YbRj9GC0YxcIjogMTEsXG4gICAgXCLQvtC00LjQvdCw0LTRhtGP0YLQuFwiOiAxMSxcbiAgICBcItC00LLQsNC90LDQtNGG0Y/RgtGMXCI6IDEyLFxuICAgIFwi0LTQstCw0L3QsNC00YbRj9GC0LhcIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IE9SRElOQUxfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIFwi0L/QtdGA0YjQtVwiOiAxLFxuICAgIFwi0L/QtdGA0YjQvtCz0L5cIjogMSxcbiAgICBcItC00YDRg9Cz0LVcIjogMixcbiAgICBcItC00YDRg9Cz0L7Qs9C+XCI6IDIsXG4gICAgXCLRgtGA0LXRgtGUXCI6IDMsXG4gICAgXCLRgtGA0LXRgtGM0L7Qs9C+XCI6IDMsXG4gICAgXCLRh9C10YLQstC10YDRgtC1XCI6IDQsXG4gICAgXCLRh9C10YLQstC10YDRgtC+0LPQvlwiOiA0LFxuICAgIFwi0L8n0Y/RgtC1XCI6IDUsXG4gICAgXCLQvyfRj9GC0L7Qs9C+XCI6IDUsXG4gICAgXCLRiNC+0YHRgtC1XCI6IDYsXG4gICAgXCLRiNC+0YHRgtC+0LPQvlwiOiA2LFxuICAgIFwi0YHRjNC+0LzQtVwiOiA3LFxuICAgIFwi0YHRjNC+0LzQvtCz0L5cIjogNyxcbiAgICBcItCy0L7RgdGM0LzQtVwiOiA4LFxuICAgIFwi0LLQvtGB0YzQvNC+0LPQvlwiOiA4LFxuICAgIFwi0LTQtdCyJ9GP0YLQtVwiOiA5LFxuICAgIFwi0LTQtdCyJ9GP0YLQvtCz0L5cIjogOSxcbiAgICBcItC00LXRgdGP0YLQtVwiOiAxMCxcbiAgICBcItC00LXRgdGP0YLQvtCz0L5cIjogMTAsXG4gICAgXCLQvtC00LjQvdCw0LTRhtGP0YLQtVwiOiAxMSxcbiAgICBcItC+0LTQuNC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxMSxcbiAgICBcItC00LLQsNC90LDQtNGG0Y/RgtC1XCI6IDEyLFxuICAgIFwi0LTQstCw0L3QsNC00YbRj9GC0L7Qs9C+XCI6IDEyLFxuICAgIFwi0YLRgNC40L3QsNC00YbRj9GC0LVcIjogMTMsXG4gICAgXCLRgtGA0LjQvdCw0LTRhtGP0YLQvtCz0L5cIjogMTMsXG4gICAgXCLRh9C+0YLQuNGA0L3QsNC00YbRj9GC0LVcIjogMTQsXG4gICAgXCLRh9C+0YLQuNC90YDQvdCw0LTRhtGP0YLQvtCz0L5cIjogMTQsXG4gICAgXCLQvyfRj9GC0L3QsNC00YbRj9GC0LVcIjogMTUsXG4gICAgXCLQvyfRj9GC0L3QsNC00YbRj9GC0L7Qs9C+XCI6IDE1LFxuICAgIFwi0YjRltGB0YLQvdCw0LTRhtGP0YLQtVwiOiAxNixcbiAgICBcItGI0ZbRgdGC0L3QsNC00YbRj9GC0L7Qs9C+XCI6IDE2LFxuICAgIFwi0YHRltC80L3QsNC00YbRj9GC0LVcIjogMTcsXG4gICAgXCLRgdGW0LzQvdCw0LTRhtGP0YLQvtCz0L5cIjogMTcsXG4gICAgXCLQstGW0YHRltC80L3QsNC00YbRj9GC0LVcIjogMTgsXG4gICAgXCLQstGW0YHRltC80L3QsNC00YbRj9GC0L7Qs9C+XCI6IDE4LFxuICAgIFwi0LTQtdCyJ9GP0YLQvdCw0LTRhtGP0YLQtVwiOiAxOSxcbiAgICBcItC00LXQsifRj9GC0L3QsNC00YbRj9GC0L7Qs9C+XCI6IDE5LFxuICAgIFwi0LTQstCw0LTRhtGP0YLQtVwiOiAyMCxcbiAgICBcItC00LLQsNC00YbRj9GC0L7Qs9C+XCI6IDIwLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDQv9C10YDRiNC1XCI6IDIxLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDQv9C10YDRiNC+0LPQvlwiOiAyMSxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LTRgNGD0LPQtVwiOiAyMixcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LTRgNGD0LPQvtCz0L5cIjogMjIsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINGC0YDQtdGC0ZRcIjogMjMsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINGC0YDQtdGC0YzQvtCz0L5cIjogMjMsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINGH0LXRgtCy0LXRgNGC0LVcIjogMjQsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINGH0LXRgtCy0LXRgNGC0L7Qs9C+XCI6IDI0LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDQvyfRj9GC0LVcIjogMjUsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINC/J9GP0YLQvtCz0L5cIjogMjUsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINGI0L7RgdGC0LVcIjogMjYsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINGI0L7RgdGC0L7Qs9C+XCI6IDI2LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRgdGM0L7QvNC1XCI6IDI3LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRgdGM0L7QvNC+0LPQvlwiOiAyNyxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LLQvtGB0YzQvNC1XCI6IDI4LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDQstC+0YHRjNC80L7Qs9C+XCI6IDI4LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDQtNC10LIn0Y/RgtC1XCI6IDI5LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDQtNC10LIn0Y/RgtC+0LPQvlwiOiAyOSxcbiAgICBcItGC0YDQuNC00YbRj9GC0LVcIjogMzAsXG4gICAgXCLRgtGA0LjQtNGG0Y/RgtC+0LPQvlwiOiAzMCxcbiAgICBcItGC0YDQuNC00YbRj9GC0Ywg0L/QtdGA0YjQtVwiOiAzMSxcbiAgICBcItGC0YDQuNC00YbRj9GC0Ywg0L/QtdGA0YjQvtCz0L5cIjogMzEsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgINGB0LXQujogXCJzZWNvbmRcIixcbiAgICDRgdC10LrRg9C90LTQsDogXCJzZWNvbmRcIixcbiAgICDRgdC10LrRg9C90LQ6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00Lg6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00YM6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00L7Rh9C+0Lo6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00L7Rh9C60Lg6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00L7Rh9C60YM6IFwic2Vjb25kXCIsXG4gICAg0YXQsjogXCJtaW51dGVcIixcbiAgICDRhdCy0LjQu9C40L3QsDogXCJtaW51dGVcIixcbiAgICDRhdCy0LjQu9C40L06IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC90Lg6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC90YM6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC90L7QujogXCJtaW51dGVcIixcbiAgICDRhdCy0LjQu9C40L3QutC4OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC60YM6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC90L7Rh9C+0Lo6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC90L7Rh9C60Lg6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC90L7Rh9C60YM6IFwibWludXRlXCIsXG4gICAg0LPQvtC0OiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC90LA6IFwiaG91clwiLFxuICAgINCz0L7QtNC40L06IFwiaG91clwiLFxuICAgINCz0L7QtNC40L3QuDogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdGDOiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC90LrQsDogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdC+0Lo6IFwiaG91clwiLFxuICAgINCz0L7QtNC40L3QutC4OiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC90LrRgzogXCJob3VyXCIsXG4gICAg0LTQtdC90Yw6IFwiZGF5XCIsXG4gICAg0LTQvdGPOiBcImRheVwiLFxuICAgINC00L3RltCyOiBcImRheVwiLFxuICAgINC00L3RljogXCJkYXlcIixcbiAgICDQtNC+0LHQsDogXCJkYXlcIixcbiAgICDQtNC+0LHRgzogXCJkYXlcIixcbiAgICDRgtC40LbQtNC10L3RjDogXCJ3ZWVrXCIsXG4gICAg0YLQuNC20L3RjjogXCJ3ZWVrXCIsXG4gICAg0YLQuNC20L3RjzogXCJ3ZWVrXCIsXG4gICAg0YLQuNC20L3RljogXCJ3ZWVrXCIsXG4gICAg0YLQuNC20L3RltCyOiBcIndlZWtcIixcbiAgICDQvNGW0YHRj9GG0Yw6IFwibW9udGhcIixcbiAgICDQvNGW0YHRj9GG0ZbQsjogXCJtb250aFwiLFxuICAgINC80ZbRgdGP0YbRljogXCJtb250aFwiLFxuICAgINC80ZbRgdGP0YbRjzogXCJtb250aFwiLFxuICAgINC60LLQsNGA0YLQsNC7OiBcInF1YXJ0ZXJcIixcbiAgICDQutCy0LDRgNGC0LDQu9GDOiBcInF1YXJ0ZXJcIixcbiAgICDQutCy0LDRgNGC0LDQu9CwOiBcInF1YXJ0ZXJcIixcbiAgICDQutCy0LDRgNGC0LDQu9GW0LI6IFwicXVhcnRlclwiLFxuICAgINC60LLQsNGA0YLQsNC70ZY6IFwicXVhcnRlclwiLFxuICAgINGA0ZbQujogXCJ5ZWFyXCIsXG4gICAg0YDQvtC60YM6IFwieWVhclwiLFxuICAgINGA0L7RhtGWOiBcInllYXJcIixcbiAgICDRgNC+0LrRltCyOiBcInllYXJcIixcbiAgICDRgNC+0LrQuDogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1xcXFwuWzAtOV0rfNC/0ZbQsnzQtNC10LrRltC70YzQutCwfNC/0LDRgCg/OtGDKXxcXFxcc3swLDN9KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBpZiAobnVtLm1hdGNoKC/QtNC10LrRltC70YzQutCwLykpIHtcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgv0L/RltCyLykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC/Qv9Cw0YAvKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtID09PSBcIlwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XXsxLDJ9KD860LPQvnzQvtCz0L580LUpPylgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUludChudW0pO1xufVxuY29uc3QgeWVhciA9IFwiKD86XFxcXHMrKD860YDQvtC60YN80YDRltC6fNGAfNGALikpP1wiO1xuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IGAoPzpbMS05XVswLTldezAsM30ke3llYXJ9XFxcXHMqKD860L0u0LUufNC00L4g0L0u0LUufNC9LiDQtS580LTQviDQvS4g0LUuKXxbMS0yXVswLTldezN9JHt5ZWFyfXxbNS05XVswLTldJHt5ZWFyfSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhclBhdHRlcm4obWF0Y2gpIHtcbiAgICBpZiAoLyjRgNGW0Lp80YDQvtC60YN80YB80YAuKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKNGA0ZbQunzRgNC+0LrRg3zRgHzRgC4pL2ksIFwiXCIpO1xuICAgIH1cbiAgICBpZiAoLyjQtNC+INC9LtC1LnzQtNC+INC9LiDQtS4pL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC8o0LTQviDQvS7QtS580LTQviDQvS4g0LUuKS9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGlmICgvKNC9LiDQtS580L0u0LUuKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKNC9LiDQtS580L0u0LUuKS9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgY29uc3QgcmF3WWVhck51bWJlciA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICByZXR1cm4gZmluZE1vc3RMaWtlbHlBRFllYXIocmF3WWVhck51bWJlcik7XG59XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4gPSBgKCR7TlVNQkVSX1BBVFRFUk59KVxcXFxzezAsM30oJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OtCx0LvQuNC30YzQutC+fNC/0YDQuNCx0LvQuNC30L3QvilcXFxcc3swLDN9KT9gLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCkudHJpbSgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbmZ1bmN0aW9uIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFsyXS50b0xvd2VyQ2FzZSgpXTtcbiAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uLCBSRUdFWF9QQVJUUyB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IGAoPzooPzrQv9GA0LjQsdC70LjQt9C90L580L7RgNGW0ZTQvdGC0L7QstC90L4pXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX1BBVFRFUk59KSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBwYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gUkVHRVhfUEFSVFMubGVmdEJvdW5kYXJ5O1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gY29udGV4dC5vcHRpb24uZm9yd2FyZERhdGVcbiAgICAgICAgICAgID8gbmV3IFJlZ0V4cChQQVRURVJOLCBcImlcIilcbiAgICAgICAgICAgIDogbmV3IFJlZ0V4cChgKD860L/RgNC+0YLRj9Cz0L7QvHzQvdCwINC/0YDQvtGC0Y/Qt9GWfNC/0YDQvtGC0Y/Qs9C+0Lx80YPQv9GA0L7QtNC+0LLQtnzQstC/0YDQvtC00L7QstC2KVxcXFxzKiR7UEFUVEVSTn1gLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5leHBvcnQgY2xhc3MgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmxlZnRCb3VuZGFyeTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodGhpcy5pbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCksIFJFR0VYX1BBUlRTLmZsYWdzKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuSGFzQ2hhbmdlKGNvbnRleHQsIGN1cnJlbnRJbm5lclBhdHRlcm4pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAke3RoaXMuaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpfSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBPUkRJTkFMX05VTUJFUl9QQVRURVJOLCBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS01vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoYCg/OtC3fNGW0LcpP1xcXFxzKigke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KWAgK1xuICAgICAgICAgICAgYCg/OmAgK1xuICAgICAgICAgICAgYFxcXFxzezAsM30oPzrQv9C+fC184oCTfNC00L4pP1xcXFxzezAsM31gICtcbiAgICAgICAgICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICAgICAgICAgIGApP2AgK1xuICAgICAgICAgICAgYCg/Oi18XFxcXC98XFxcXHN7MCwzfSg/Om9mKT9cXFxcc3swLDN9KWAgK1xuICAgICAgICAgICAgYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgICAgICAgICBgKD86YCArXG4gICAgICAgICAgICBgKD86LXxcXFxcL3wsP1xcXFxzezAsM30pYCArXG4gICAgICAgICAgICBgKCR7WUVBUl9QQVRURVJOfSg/IVteXFxcXHNdXFxcXGQpKWAgK1xuICAgICAgICAgICAgYCk/YCk7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXJQYXR0ZXJuKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmZXJlbmNlLmluc3RhbnQsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbREFURV9UT19HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfVE9fR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQgPSByZXN1bHQuc3RhcnQuY2xvbmUoKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiZGF5XCIsIGVuZERhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlksIE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyUGF0dGVybiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAyO1xuY29uc3QgWUVBUl9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVa01vbnRoTmFtZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoKD860LJ80YMpXFxcXHMqKT9gICtcbiAgICAgICAgICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYFxcXFxzKmAgK1xuICAgICAgICAgICAgYCg/OmAgK1xuICAgICAgICAgICAgYFssLV0/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSk/YCArXG4gICAgICAgICAgICBgKT9gICtcbiAgICAgICAgICAgIGAoPz1bXlxcXFxzXFxcXHddfFxcXFxzK1teMC05XXxcXFxccyskfCQpYCk7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb250aE5hbWUgPSBtYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobWF0Y2hbMF0ubGVuZ3RoIDw9IDMgJiYgIUZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZW21vbnRoTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgMSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttb250aE5hbWVdO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZVllYXJQYXR0ZXJuKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmZXJlbmNlLmluc3RhbnQsIDEsIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS01vbnRoTmFtZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBSRUdFWF9QQVJUUyB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKHN0cmljdE1vZGUpO1xuICAgIH1cbiAgICBwYXR0ZXJuRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBSRUdFWF9QQVJUUy5mbGFncztcbiAgICB9XG4gICAgcHJpbWFyeVBhdHRlcm5MZWZ0Qm91bmRhcnkoKSB7XG4gICAgICAgIHJldHVybiBgKF58XFxcXHN8VHwoPzpbXlxcXFxwe0x9XFxcXHB7Tn1fXSkpYDtcbiAgICB9XG4gICAgZm9sbG93aW5nUGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBgXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfNC00L580ZZ80L/QvnxcXFxcPylcXFxccypgO1xuICAgIH1cbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gYCg/Oig/OtCyfNGDfNC+fNC+0LF80Ld80ZbQt3zQstGW0LQpXFxcXHMqKT8/YDtcbiAgICB9XG4gICAgcHJpbWFyeVN1ZmZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGAoPzpcXFxccyooPzrRgNCw0L3QutGDfNCy0LXRh9C+0YDQsHzQv9C+INC+0LHRltC00ZZ80L/RltGB0LvRjyDQvtCx0ZbQtNGDKSk/KD8hXFxcXC8pJHtSRUdFWF9QQVJUUy5yaWdodEJvdW5kYXJ5fWA7XG4gICAgfVxuICAgIGV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwi0LLQtdGH0L7RgNCwXCIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaG91ciA9IGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA+PSA2ICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgY29tcG9uZW50cy5nZXQoXCJob3VyXCIpICsgMTIpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwi0L/QviDQvtCx0ZbQtNGWXCIpIHx8IG1hdGNoWzBdLmVuZHNXaXRoKFwi0L/RltGB0LvRjyDQvtCx0ZbQtNGDXCIpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaG91ciA9IGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA+PSAwICYmIGhvdXIgPD0gNikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgY29tcG9uZW50cy5nZXQoXCJob3VyXCIpICsgMTIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItGA0LDQvdC60YNcIikpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKCR7VElNRV9VTklUU19QQVRURVJOfSlcXFxcc3swLDV90YLQvtC80YMoPz0oPzpcXFxcV3wkKSlgO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGNvbnN0IG91dHB1dFRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBvdXRwdXRUaW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKNGWINC00L580ZYg0L/QvnzQtNC+fNC/0L58LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlxcXFxzKihUfNCyfNGDfNC+fCx8LSk/XFxcXHMqJGApO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGAoPzrQt3zRltC3fNCy0ZbQtCk/XFxcXHMqKNGB0YzQvtCz0L7QtNC90ZZ80LLRh9C+0YDQsHzQt9Cw0LLRgtGA0LB80L/RltGB0LvRj9C30LDQstGC0YDQsHzQv9GW0YHQu9GP0L/RltGB0LvRj9C30LDQstGC0YDQsHzQv9C+0LfQsNC/0L7Qt9Cw0LLRh9C+0YDQsHzQv9C+0LfQsNCy0YfQvtGA0LApYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCLRgdGM0L7Qs9C+0LTQvdGWXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcItCy0YfQvtGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcItC30LDQstGC0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbW9ycm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9GW0YHQu9GP0LfQsNCy0YLRgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICAgICAgY2FzZSBcItC/0ZbRgdC70Y/Qv9GW0YHQu9GP0LfQsNCy0YLRgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDMpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7Qt9Cw0LLRh9C+0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUJlZm9yZShjb250ZXh0LnJlZmVyZW5jZSwgMik7XG4gICAgICAgICAgICBjYXNlIFwi0L/QvtC30LDQv9C+0LfQsNCy0YfQvtGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50aGVEYXlCZWZvcmUoY29udGV4dC5yZWZlcmVuY2UsIDMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS0Nhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCjQt9Cw0YDQsNC3fNC80LjQvdGD0LvQvtCz0L5cXFxccyrQstC10YfQvtGA0LB80LzQuNC90YPQu9C+0ZdcXFxccyrQvdC+0YfRlnzQvdCw0YHRgtGD0L/QvdC+0ZdcXFxccyrQvdC+0YfRlnzRgdGM0L7Qs9C+0LTQvdGWXFxcXHMq0LLQvdC+0YfRlnzRhtGW0ZTRl1xcXFxzKtC90L7Rh9GWfNGG0YzQvtCz0L4g0YDQsNC90LrRg3zQstGA0LDQvdGG0ZZ80YDQsNC90LrRg3zQt9GA0LDQvdC60YN80L7Qv9GW0LLQtNC90ZZ80LLQstC10YfQtdGA0ZZ80LLQtdGH0L7RgNCwfNC+0L/RltCy0L3QvtGH0ZZ80LLQvdC+0YfRlilgO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgaWYgKGxvd2VyVGV4dCA9PT0gXCLQt9Cw0YDQsNC3XCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dCA9PT0gXCLQstCy0LXRh9C10YDRllwiIHx8IGxvd2VyVGV4dCA9PT0gXCLQstC10YfQvtGA0LBcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMuZXZlbmluZyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5lbmRzV2l0aChcItCy0YDQsNC90YbRllwiKSB8fCBsb3dlclRleHQuZW5kc1dpdGgoXCLRgNCw0L3QutGDXCIpIHx8IGxvd2VyVGV4dC5lbmRzV2l0aChcItC30YDQsNC90LrRg1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubW9ybmluZyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5lbmRzV2l0aChcItC+0L/RltCy0LTQvdGWXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub29uKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/QvNC40L3Rg9C70L7Rl1xccyrQvdC+0YfRli8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5sYXN0TmlnaHQoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL9C80LjQvdGD0LvQvtCz0L5cXHMq0LLQtdGH0L7RgNCwLykpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheUV2ZW5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL9C90LDRgdGC0YPQv9C90L7Rl1xccyrQvdC+0YfRli8pKSB7XG4gICAgICAgICAgICBjb25zdCBkYXlzVG9BZGQgPSB0YXJnZXREYXRlLmdldEhvdXJzKCkgPCAyMiA/IDEgOiAyO1xuICAgICAgICAgICAgY29uc3QgbmV4dERheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIG5leHREYXkuc2V0RGF0ZShuZXh0RGF5LmdldERhdGUoKSArIGRheXNUb0FkZCk7XG4gICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/RhtGW0ZTRl1xccyrQvdC+0YfRli8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5taWRuaWdodChjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5lbmRzV2l0aChcItC+0L/RltCy0L3QvtGH0ZZcIikgfHwgbG93ZXJUZXh0LmVuZHNXaXRoKFwi0LLQvdC+0YfRllwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubWlkbmlnaHQoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtDYXN1YWxUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgV0VFS0RBWV9HUk9VUCA9IDI7XG5jb25zdCBQT1NURklYX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLV2Vla2RheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoYCg/Oig/Oix8XFxcXCh877yIKVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKD860LJcXFxccyo/KT9gICtcbiAgICAgICAgICAgIGAoPzrRg1xcXFxzKj8pP2AgK1xuICAgICAgICAgICAgYCg/OijRhtC10Ll80LzQuNC90YPQu9C+0LPQvnzQvNC40L3Rg9C70LjQuXzQv9C+0L/QtdGA0LXQtNC90ZbQuXzQv9C+0L/QtdGA0LXQtNC90YzQvtCz0L580L3QsNGB0YLRg9C/0L3QvtCz0L580L3QsNGB0YLRg9C/0L3QuNC5fNC90LDRgdGC0YPQv9C90L7QvNGDKVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKig/Oix8XFxcXCl877yJKSk/YCArXG4gICAgICAgICAgICBgKD86XFxcXHMqKNC90LB80YN80LIpXFxcXHMqKNGG0YzQvtC80YN80LzQuNC90YPQu9C+0LzRg3zQvdCw0YHRgtGD0L/QvdC+0LzRgylcXFxccyrRgtC40LbQvdGWKT9gKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcItC80LjQvdGD0LvQvtCz0L5cIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXJXb3JkID09IFwi0LzQuNC90YPQu9C40LlcIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXJXb3JkID09IFwi0L/QvtC/0LXRgNC10LTQvdGW0LlcIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXJXb3JkID09IFwi0L/QvtC/0LXRgNC10LTQvdGM0L7Qs9C+XCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJsYXN0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwi0L3QsNGB0YLRg9C/0L3QvtCz0L5cIiB8fCBtb2RpZmllcldvcmQgPT0gXCLQvdCw0YHRgtGD0L/QvdC40LlcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQgPT0gXCLRhtC10LlcIiB8fCBtb2RpZmllcldvcmQgPT0gXCLRhtGM0L7Qs9C+XCIgfHwgbW9kaWZpZXJXb3JkID09IFwi0YbRjNC+0LzRg1wiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmNvbnN0IE1PRElGSUVSX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgUkVMQVRJVkVfV09SRF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1JlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoYCjQsiDQvNC40L3Rg9C70L7QvNGDfNGDINC80LjQvdGD0LvQvtC80YN80L3QsCDQvNC40L3Rg9C70L7QvNGDfNC80LjQvdGD0LvQvtCz0L580L3QsCDQvdCw0YHRgtGD0L/QvdC+0LzRg3zQsiDQvdCw0YHRgtGD0L/QvdC+0LzRg3zRgyDQvdCw0YHRgtGD0L/QvdC+0LzRg3zQvdCw0YHRgtGD0L/QvdC+0LPQvnzQvdCwINGG0YzQvtC80YN80LIg0YbRjNC+0LzRg3zRgyDRhtGM0L7QvNGDfNGG0YzQvtCz0L4pXFxcXHMqYCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pKD89XFxcXHMqKWApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBtYXRjaFtNT0RJRklFUl9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB1bml0V29yZCA9IG1hdGNoW1JFTEFUSVZFX1dPUkRfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWV1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbdW5pdFdvcmRdO1xuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCLQvdCwINC90LDRgdGC0YPQv9C90L7QvNGDXCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyID09IFwi0LIg0L3QsNGB0YLRg9C/0L3QvtC80YNcIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXIgPT0gXCLRgyDQvdCw0YHRgtGD0L/QvdC+0LzRg1wiIHx8XG4gICAgICAgICAgICBtb2RpZmllciA9PSBcItC90LDRgdGC0YPQv9C90L7Qs9C+XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHt9O1xuICAgICAgICAgICAgdGltZVVuaXRzW3RpbWV1bml0XSA9IDE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcItC90LAg0LzQuNC90YPQu9C+0LzRg1wiIHx8XG4gICAgICAgICAgICBtb2RpZmllciA9PSBcItCyINC80LjQvdGD0LvQvtC80YNcIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXIgPT0gXCLRgyDQvNC40L3Rg9C70L7QvNGDXCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyID09IFwi0LzQuNC90YPQu9C+0LPQvlwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh0aW1ldW5pdC5tYXRjaCgvd2Vlay9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGltZXVuaXQubWF0Y2goL21vbnRoL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aW1ldW5pdC5tYXRjaCgveWVhci9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNb250aCgwKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKNGG0ZZ80L7RgdGC0LDQvdC90ZZ80LzQuNC90YPQu9GWfNC80LDQudCx0YPRgtC90ZZ80L3QsNGB0YLRg9C/0L3RlnzQv9GW0YHQu9GPfNGH0LXRgNC10Ld8XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFszXSk7XG4gICAgICAgIHN3aXRjaCAocHJlZml4KSB7XG4gICAgICAgICAgICBjYXNlIFwi0L7RgdGC0LDQvdC90ZZcIjpcbiAgICAgICAgICAgIGNhc2UgXCLQvNC40L3Rg9C70ZZcIjpcbiAgICAgICAgICAgIGNhc2UgXCItXCI6XG4gICAgICAgICAgICAgICAgdGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1RpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IFVLVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9VS1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9VS01vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IFVrTW9udGhOYW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtNb250aE5hbWVQYXJzZXIuanNcIjtcbmltcG9ydCBVS1RpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFVLVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9VS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgVUtNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvVUtNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBVS01lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1VLTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgVUtDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtDYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgVUtDYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtDYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgVUtXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgVUtSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9VS1JlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgVUtUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgSVNPRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9JU09Gb3JtYXRQYXJzZXIuanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKHRydWUpKTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFVLQ2FzdWFsRGF0ZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBVS0Nhc3VhbFRpbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgVWtNb250aE5hbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgVUtSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgVUtUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlKSB7XG4gICAgcmV0dXJuIGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uKHtcbiAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgbmV3IElTT0Zvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFNsYXNoRGF0ZUZvcm1hdFBhcnNlcih0cnVlKSxcbiAgICAgICAgICAgIG5ldyBVS1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBVS1dlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBVS1RpbWVFeHByZXNzaW9uUGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgbmV3IFVLVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgVUtNZXJnZURhdGVUaW1lUmVmaW5lcigpLCBuZXcgVUtNZXJnZURhdGVSYW5nZVJlZmluZXIoKV0sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgIFwiZG9tZW5pY2FcIjogMCxcbiAgICBcImRvbVwiOiAwLFxuICAgIFwibHVuZWTDrFwiOiAxLFxuICAgIFwibHVuXCI6IDEsXG4gICAgXCJtYXJ0ZWTDrFwiOiAyLFxuICAgIFwibWFyXCI6IDIsXG4gICAgXCJtZXJjb2xlZMOsXCI6IDMsXG4gICAgXCJtZXJjXCI6IDMsXG4gICAgXCJnaW92ZWTDrFwiOiA0LFxuICAgIFwiZ2lvdlwiOiA0LFxuICAgIFwidmVuZXJkw6xcIjogNSxcbiAgICBcInZlblwiOiA1LFxuICAgIFwic2FiYXRvXCI6IDYsXG4gICAgXCJzYWJcIjogNixcbn07XG5leHBvcnQgY29uc3QgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlkgPSB7fTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIC4uLkZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZLFxuICAgIFwiZ2VubmFpb1wiOiAxLFxuICAgIFwiZ2VuXCI6IDEsXG4gICAgXCJnZW4uXCI6IDEsXG4gICAgXCJmZWJicmFpb1wiOiAyLFxuICAgIFwiZmViXCI6IDIsXG4gICAgXCJmZWIuXCI6IDIsXG4gICAgXCJmZWJyYWlvXCI6IDIsXG4gICAgXCJmZWJiXCI6IDIsXG4gICAgXCJmZWJiLlwiOiAyLFxuICAgIFwibWFyem9cIjogMyxcbiAgICBcIm1hclwiOiAzLFxuICAgIFwibWFyLlwiOiAzLFxuICAgIFwiYXByaWxlXCI6IDQsXG4gICAgXCJhcHJcIjogNCxcbiAgICBcImFwci5cIjogNCxcbiAgICBcIm1hZ2dpb1wiOiA1LFxuICAgIFwibWFnXCI6IDUsXG4gICAgXCJnaXVnbm9cIjogNixcbiAgICBcImdpdVwiOiA2LFxuICAgIFwibHVnbGlvXCI6IDcsXG4gICAgXCJsdWdcIjogNyxcbiAgICBcImx1Z2xcIjogNyxcbiAgICBcImx1Zy5cIjogNyxcbiAgICBcImFnb3N0b1wiOiA4LFxuICAgIFwiYWdvXCI6IDgsXG4gICAgXCJzZXR0ZW1icmVcIjogOSxcbiAgICBcInNldFwiOiA5LFxuICAgIFwic2V0LlwiOiA5LFxuICAgIFwic2V0dFwiOiA5LFxuICAgIFwic2V0dC5cIjogOSxcbiAgICBcIm90dG9icmVcIjogMTAsXG4gICAgXCJvdHRcIjogMTAsXG4gICAgXCJvdHQuXCI6IDEwLFxuICAgIFwibm92ZW1icmVcIjogMTEsXG4gICAgXCJub3ZcIjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIFwiZGljZW1icmVcIjogMTIsXG4gICAgXCJkaWNcIjogMTIsXG4gICAgXCJkaWNlXCI6IDEyLFxuICAgIFwiZGljLlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ1bm9cIjogMSxcbiAgICBcImR1ZVwiOiAyLFxuICAgIFwidHJlXCI6IDMsXG4gICAgXCJxdWF0dHJvXCI6IDQsXG4gICAgXCJjaW5xdWVcIjogNSxcbiAgICBcInNlaVwiOiA2LFxuICAgIFwic2V0dGVcIjogNyxcbiAgICBcIm90dG9cIjogOCxcbiAgICBcIm5vdmVcIjogOSxcbiAgICBcImRpZWNpXCI6IDEwLFxuICAgIFwidW5kaWNpXCI6IDExLFxuICAgIFwiZG9kaWNpXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcInByaW1vXCI6IDEsXG4gICAgXCJzZWNvbmRvXCI6IDIsXG4gICAgXCJ0ZXJ6b1wiOiAzLFxuICAgIFwicXVhcnRvXCI6IDQsXG4gICAgXCJxdWludG9cIjogNSxcbiAgICBcInNlc3RvXCI6IDYsXG4gICAgXCJzZXR0aW1vXCI6IDcsXG4gICAgXCJvdHRhdm9cIjogOCxcbiAgICBcIm5vbm9cIjogOSxcbiAgICBcImRlY2ltb1wiOiAxMCxcbiAgICBcInVuZGljZXNpbW9cIjogMTEsXG4gICAgXCJkb2RpY2VzaW1vXCI6IDEyLFxuICAgIFwidHJlZGljZXNpbW9cIjogMTMsXG4gICAgXCJxdWF0dG9yZGljZXNpbW9cIjogMTQsXG4gICAgXCJxdWluZGljZXNpbW9cIjogMTUsXG4gICAgXCJzZWRpY2VzaW1vXCI6IDE2LFxuICAgIFwiZGljaWFzc2V0dGVzaW1vXCI6IDE3LFxuICAgIFwiZGljaW90dGVzaW1vXCI6IDE4LFxuICAgIFwiZGljaWFubm92ZXNpbW9cIjogMTksXG4gICAgXCJ2ZW50ZXNpbW9cIjogMjAsXG4gICAgXCJ2ZW50dW5lc2ltb1wiOiAyMSxcbiAgICBcInZlbnRpZHVlc2ltb1wiOiAyMixcbiAgICBcInZlbnRpdHJlZXNpbW9cIjogMjMsXG4gICAgXCJ2ZW50aXF1YXR0cmVzaW1vXCI6IDI0LFxuICAgIFwidmVudGljaW5xdWVzaW1vXCI6IDI1LFxuICAgIFwidmVudGlzZWllc2ltb1wiOiAyNixcbiAgICBcInZlbnRpc2V0dGVzaW1vXCI6IDI3LFxuICAgIFwidmVudG90dGVzaW1vXCI6IDI4LFxuICAgIFwidmVudGlub3Zlc2ltb1wiOiAyOSxcbiAgICBcInRyZW50ZXNpbW9cIjogMzAsXG4gICAgXCJ0cmVudHVuZXNpbW9cIjogMzEsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VjXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWNvbmRvXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWNvbmRpXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW5cIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnNcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0aVwiOiBcIm1pbnV0ZVwiLFxuICAgIFwiaFwiOiBcImhvdXJcIixcbiAgICBcImhyXCI6IFwiaG91clwiLFxuICAgIFwib1wiOiBcImhvdXJcIixcbiAgICBcIm9yYVwiOiBcImhvdXJcIixcbiAgICBcIm9yZVwiOiBcImhvdXJcIixcbiAgICBcImdpb3Jub1wiOiBcImRheVwiLFxuICAgIFwiZ2lvcm5pXCI6IFwiZGF5XCIsXG4gICAgXCJzZXR0aW1hbmFcIjogXCJ3ZWVrXCIsXG4gICAgXCJzZXR0aW1hbmVcIjogXCJ3ZWVrXCIsXG4gICAgXCJtZXNlXCI6IFwibW9udGhcIixcbiAgICBcInRyaW1lc3RyZVwiOiBcInF1YXJ0ZXJcIixcbiAgICBcInRyaW1lc3RyaVwiOiBcInF1YXJ0ZXJcIixcbiAgICBcImFubmlcIjogXCJ5ZWFyXCIsXG4gICAgXCJhbm5vXCI6IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBOVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSl9fFswLTldK3xbMC05XStcXFxcLlswLTldK3xoYWxmKD86XFxcXHN7MCwyfXVuPyk/fHVuP1xcXFxiKD86XFxcXHN7MCwyfXF1YWxjdW5vKT98cXVhbGN1bm98bW9sdGl8YT9cXFxcc3swLDJ9YWxjdW5pXFxcXHN7MCwyfSg/Om9mKT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJ1blwiIHx8IG51bSA9PT0gXCJ1bmFcIikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9hbGN1bmkvKSkge1xuICAgICAgICByZXR1cm4gMztcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9tZXTDoS8pKSB7XG4gICAgICAgIHJldHVybiAwLjU7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvcGFpby8pKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL21vbHRpLykpIHtcbiAgICAgICAgcmV0dXJuIDc7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUZsb2F0KG51bSk7XG59XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihPUkRJTkFMX1dPUkRfRElDVElPTkFSWSl9fFswLTldezEsMn0oPzptb3xuZG98cnpvfHNpbW98ZXNpbW8pPylgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBsZXQgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBudW0gPSBudW0ucmVwbGFjZSgvKD86aW1vfG5kb3xyem98cnRvfG50b3xzdG98dGF2b3xub25vfGNpbW98dGltb3xlc2ltbykkL2ksIFwiXCIpO1xuICAgIHJldHVybiBwYXJzZUludChudW0pO1xufVxuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IGAoPzpbMS05XVswLTldezAsM31cXFxcc3swLDJ9KD86QkV8QUR8QkN8QkNFfENFKXxbMS0yXVswLTldezN9fFs1LTldWzAtOV0pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXIobWF0Y2gpIHtcbiAgICBpZiAoL0JFL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC9CRS9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKSAtIDU0MztcbiAgICB9XG4gICAgaWYgKC9CQ0U/L2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC9CQ0U/L2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gLXBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgaWYgKC8oQUR8Q0UpL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC8oQUR8Q0UpL2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBjb25zdCByYXdZZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgIHJldHVybiBmaW5kTW9zdExpa2VseUFEWWVhcihyYXdZZWFyTnVtYmVyKTtcbn1cbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiA9IGAoJHtOVU1CRVJfUEFUVEVSTn0pXFxcXHN7MCwzfSgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihgKD86KD86YWJvdXR8YXJvdW5kKVxcXFxzezAsM30pP2AsIFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTik7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKS50cmltKCk7XG4gICAgICAgIG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnRzO1xufVxuZnVuY3Rpb24gY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaFsxXSk7XG4gICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgIGZyYWdtZW50c1t1bml0XSA9IG51bTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk5fV0lUSF9QUkVGSVggPSBuZXcgUmVnRXhwKGAoPzp3aXRoaW58aW58Zm9yKVxcXFxzKmAgK1xuICAgIGAoPzooPzpwacO5IG8gbWVub3xpbnRvcm5vfGFwcHJvc3NpbWF0aXZhbWVudGV8dmVyc298dmVyc28gbGUpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUEFUVEVSTl9XSVRIT1VUX1BSRUZJWCA9IG5ldyBSZWdFeHAoYCg/Oig/OnBpw7kgbyBtZW5vfGludG9ybm98YXBwcm9zc2ltYXRpdmFtZW50ZXx2ZXJzb3x2ZXJzbyBsZSlcXFxccyooPzp+XFxcXHMqKT8pPygke1RJTUVfVU5JVFNfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0Lm9wdGlvbi5mb3J3YXJkRGF0ZSA/IFBBVFRFUk5fV0lUSE9VVF9QUkVGSVggOiBQQVRURVJOX1dJVEhfUFJFRklYO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiwgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoPzpvblxcXFxzezAsM30pP2AgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICBgKD86YCArXG4gICAgYFxcXFxzezAsM30oPzphbHxcXFxcLXxcXFxc4oCTfGZpbm98YWxsZXxhbGxvKT9cXFxcc3swLDN9YCArXG4gICAgYCgke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KWAgK1xuICAgIFwiKT9cIiArXG4gICAgYCg/Oi18L3xcXFxcc3swLDN9KD86ZGFsKT9cXFxcc3swLDN9KWAgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XCIgK1xuICAgIGAoPzotfC98LD9cXFxcc3swLDN9KWAgK1xuICAgIGAoJHtZRUFSX1BBVFRFUk59KD8hW15cXFxcc11cXFxcZCkpYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9HUk9VUF0pO1xuICAgICAgICBpZiAoZGF5ID4gMzEpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFtEQVRFX0dST1VQXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhck51bWJlciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbREFURV9UT19HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfVE9fR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQgPSByZXN1bHQuc3RhcnQuY2xvbmUoKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiZGF5XCIsIGVuZERhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBPUkRJTkFMX05VTUJFUl9QQVRURVJOLCBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/Oi18L3xcXFxccyosP1xcXFxzKilcIiArXG4gICAgYCgke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KSg/IVxcXFxzKig/OmFtfHBtKSlcXFxccypgICtcbiAgICBcIig/OlwiICtcbiAgICBcIig/OmFsfFxcXFwtfFxcXFxhbGxlfFxcXFxkZWx8XFxcXHMpXFxcXHMqXCIgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlcXFxccypgICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiKD86LXwvfFxcXFxzKiw/XFxcXHMqKVwiICtcbiAgICBgKCR7WUVBUl9QQVRURVJOfSlgICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD89XFxcXFd8JCkoPyFcXFxcOlxcXFxkKVwiLCBcImlcIik7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMTtcbmNvbnN0IERBVEVfR1JPVVAgPSAyO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDM7XG5jb25zdCBZRUFSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9HUk9VUF0pO1xuICAgICAgICBpZiAoZGF5ID4gMzEpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gY29tcG9uZW50cztcbiAgICAgICAgcmVzdWx0LmVuZCA9IGNvbXBvbmVudHMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlksIE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKCg/OmluKVxcXFxzKik/YCArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgYFxcXFxzKmAgK1xuICAgIGAoPzpgICtcbiAgICBgWywtXT9cXFxccyooJHtZRUFSX1BBVFRFUk59KT9gICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKVwiLCBcImlcIik7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDI7XG5jb25zdCBZRUFSX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTW9udGhOYW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb250aE5hbWUgPSBtYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobWF0Y2hbMF0ubGVuZ3RoIDw9IDMgJiYgIUZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZW21vbnRoTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCArIChtYXRjaFtQUkVGSVhfR1JPVVBdIHx8IFwiXCIpLmxlbmd0aCwgbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgMSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttb250aE5hbWVdO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCAxLCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRNb250aE5hbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoWzAtOV17NH0pW1xcXFwuXFxcXC9cXFxcc11gICtcbiAgICBgKD86KCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSl8KFswLTldezEsMn0pKVtcXFxcLlxcXFwvXFxcXHNdYCArXG4gICAgYChbMC05XXsxLDJ9KWAgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgWUVBUl9OVU1CRVJfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OVU1CRVJfR1JPVVAgPSAzO1xuY29uc3QgREFURV9OVU1CRVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5DYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gbWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXVxuICAgICAgICAgICAgPyBwYXJzZUludChtYXRjaFtNT05USF9OVU1CRVJfR1JPVVBdKVxuICAgICAgICAgICAgOiBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChtYXRjaFtZRUFSX05VTUJFUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFtEQVRFX05VTUJFUl9HUk9VUF0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF5OiBkYXksXG4gICAgICAgICAgICBtb250aDogbW9udGgsXG4gICAgICAgICAgICB5ZWFyOiB5ZWFyLFxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoWzAtOV18MFsxLTldfDFbMDEyXSkvKFswLTldezR9KVwiICsgXCJcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAxO1xuY29uc3QgWUVBUl9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbTU9OVEhfR1JPVVBdKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKS5pbXBseShcImRheVwiLCAxKS5hc3NpZ24oXCJtb250aFwiLCBtb250aCkuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVFNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vaW5kZXguanNcIjtcbmltcG9ydCB7IEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5UaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoc3RyaWN0TW9kZSk7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8dG98XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/Oig/OmFsbGV8ZGFsbGUpXFxcXHMqKT8/XCI7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/OlxcXFxzKig/OmluIHB1bnRvfG9cXFxcVyppbiBwdW50b3woPzpkaXxkZWx8ZGVsbGF8aW58YWx8YWxsYXxhbGxlKVxcXFxzKig/Om1hdHRpbmF8cG9tZXJpZ2dpb3xzZXJhKSkpPyg/IS8pKD89XFxcXFd8JClcIjtcbiAgICB9XG4gICAgZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gc3VwZXIuZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCk7XG4gICAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0uZW5kc1dpdGgoXCJzZXJhXCIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaG91ciA9IGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA+PSA2ICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgY29tcG9uZW50cy5nZXQoXCJob3VyXCIpICsgMTIpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwicG9tZXJpZ2dpb1wiKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gMCAmJiBob3VyIDw9IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0uZW5kc1dpdGgoXCJtYXR0aW5hXCIpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaG91ciA9IGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKCR7VElNRV9VTklUU19QQVRURVJOfSlcXFxcc3swLDV9KD86ZmF8cHJpbWF8cHJlY2VkZW50ZSkoPz0oPzpcXFxcV3wkKSlgLCBcImlcIik7XG5jb25zdCBTVFJJQ1RfUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fWZhKD89KD86XFxcXFd8JCkpYCwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpY3RNb2RlID8gU1RSSUNUX1BBVFRFUk4gOiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGNvbnN0IG91dHB1dFRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBvdXRwdXRUaW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKCR7VElNRV9VTklUU19QQVRURVJOfSlcXFxcc3swLDV9KD86ZG9wb3xwacO5IHRhcmRpfGRhIGFkZXNzb3xhdmFudGl8b2x0cmV8YSBzZWd1aXJlKWAgKyBcIig/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBTVFJJQ1RfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCJcIiArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBcIihkb3BvfHBpw7kgdGFyZGkpXCIgKyBcIig/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBHUk9VUF9OVU1fVElNRVVOSVRTID0gMTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpY3RNb2RlID8gU1RSSUNUX1BBVFRFUk4gOiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZnJhZ21lbnRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFtHUk9VUF9OVU1fVElNRVVOSVRTXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIGZyYWdtZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKih0b3wtKVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXlxcXFxzKihUfGFsbGV8ZG9wb3xwcmltYXxpbHxkaXxkZWx8ZGVsbGV8LHwtKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvKG9yYXxvZ2dpfHN0YXNlcmF8cXVlc3RhIHNlcmF8ZG9tYW5pfGRtbnxpZXJpXFxzKnNlcmEpKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJVENhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBsZXQgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGxvd2VyVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcIm9yYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwib2dnaVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJpZXJpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJkb21hbmlcIjpcbiAgICAgICAgICAgIGNhc2UgXCJkbW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwic3Rhc2VyYVwiOlxuICAgICAgICAgICAgY2FzZSBcInF1ZXN0YSBzZXJhXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9uaWdodChjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL2llcmlcXHMqc2VyYS8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXREYXRlLmdldEhvdXJzKCkgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0RheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzRGF5LnNldERhdGUocHJldmlvdXNEYXkuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gcHJldmlvdXNEYXk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVENhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vaW5kZXguanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUsIGltcGx5U2ltaWxhclRpbWUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvKD86cXVlc3RvfHF1ZXN0YSk/XFxzezAsM30obWF0dGluYXxwb21lcmlnZ2lvfHNlcmF8bm90dGV8bWV6emFub3R0ZXxtZXp6b2dpb3JubykoPz1cXFd8JCkvaTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElUQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJwb21lcmlnZ2lvXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInNlcmFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJub3R0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZXp6YW5vdHRlXCI6XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dERheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWF0dGluYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1lenpvZ2lvcm5vXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRDYXN1YWxUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Oig/OlxcXFwsfFxcXFwofFxcXFzvvIgpXFxcXHMqKT9cIiArXG4gICAgXCIoPzppbFxcXFxzKj8pP1wiICtcbiAgICBcIig/OihxdWVzdGF8bCd1bHRpbWF8c2NvcnNhfHByb3NzaW1hKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKHF1ZXN0YXxsJ3VsdGltYXxzY29yc2F8cHJvc3NpbWEpXFxcXHMqc2V0dGltYW5hKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgV0VFS0RBWV9HUk9VUCA9IDI7XG5jb25zdCBQT1NURklYX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElUV2Vla2RheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZGF5T2ZXZWVrID0gbWF0Y2hbV0VFS0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qgd2Vla2RheSA9IFdFRUtEQVlfRElDVElPTkFSWVtkYXlPZldlZWtdO1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfR1JPVVBdO1xuICAgICAgICBjb25zdCBwb3N0Zml4ID0gbWF0Y2hbUE9TVEZJWF9HUk9VUF07XG4gICAgICAgIGxldCBtb2RpZmllcldvcmQgPSBwcmVmaXggfHwgcG9zdGZpeDtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkIHx8IFwiXCI7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAobW9kaWZpZXJXb3JkID09IFwidWx0aW1hXCIgfHwgbW9kaWZpZXJXb3JkID09IFwic2NvcnNhXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJ1bHRpbWFcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQgPT0gXCJwcm9zc2ltYVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwicHJvc3NpbWFcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQgPT0gXCJxdWVzdGFcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInF1ZXN0YVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAocXVlc3RvfHVsdGltb3xzY29yc298cHJvc3NpbW98ZG9wb1xcXFxzKnF1ZXN0b3xxdWVzdGF8dWx0aW1hfHNjb3JzYXxwcm9zc2ltYVxcXFxzKnF1ZXN0YSlcXFxccyooJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSkoPz1cXFxccyopYCArIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9ESUZJRVJfV09SRF9HUk9VUCA9IDE7XG5jb25zdCBSRUxBVElWRV9XT1JEX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElUUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb2RpZmllciA9IG1hdGNoW01PRElGSUVSX1dPUkRfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHVuaXRXb3JkID0gbWF0Y2hbUkVMQVRJVkVfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGltZXVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVt1bml0V29yZF07XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcInByb3NzaW1vXCIgfHwgbW9kaWZpZXIuc3RhcnRzV2l0aChcImRvcG9cIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHt9O1xuICAgICAgICAgICAgdGltZVVuaXRzW3RpbWV1bml0XSA9IDE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcInByaW1hXCIgfHwgbW9kaWZpZXIgPT0gXCJwcmVjZWRlbnRlXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHt9O1xuICAgICAgICAgICAgdGltZVVuaXRzW3RpbWV1bml0XSA9IC0xO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKGNvbnRleHQucmVmZXJlbmNlLmluc3RhbnQuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKHVuaXRXb3JkLm1hdGNoKC9zZXR0aW1hbmEvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRXb3JkLm1hdGNoKC9tZXNlL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0V29yZC5tYXRjaCgvYW5uby9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNb250aCgwKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAocXVlc3RvfHVsdGltb3xwYXNzYXRvfHByb3NzaW1vfGRvcG98cXVlc3RhfHVsdGltYXxwYXNzYXRhfHByb3NzaW1hfFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMl0pO1xuICAgICAgICBzd2l0Y2ggKHByZWZpeCkge1xuICAgICAgICAgICAgY2FzZSBcImxhc3RcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwYXN0XCI6XG4gICAgICAgICAgICBjYXNlIFwiLVwiOlxuICAgICAgICAgICAgICAgIHRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmdpbmdSZWZpbmVyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9hYnN0cmFjdFJlZmluZXJzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cywgUGFyc2luZ1Jlc3VsdCwgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmZ1bmN0aW9uIGhhc0ltcGxpZWRFYXJsaWVyUmVmZXJlbmNlRGF0ZShyZXN1bHQpIHtcbiAgICByZXR1cm4gcmVzdWx0LnRleHQubWF0Y2goL1xccysocHJpbWF8ZGFsKSQvaSkgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGhhc0ltcGxpZWRMYXRlclJlZmVyZW5jZURhdGUocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9cXHMrKGRvcG98ZGFsfGZpbm8pJC9pKSAhPSBudWxsO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZVJlbGF0aXZlRGF0ZVJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyokL2k7XG4gICAgfVxuICAgIHNob3VsZE1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBpZiAoIXRleHRCZXR3ZWVuLm1hdGNoKHRoaXMucGF0dGVybkJldHdlZW4oKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWhhc0ltcGxpZWRFYXJsaWVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSAmJiAhaGFzSW1wbGllZExhdGVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwiZGF5XCIpICYmICEhbmV4dFJlc3VsdC5zdGFydC5nZXQoXCJtb250aFwiKSAmJiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwieWVhclwiKTtcbiAgICB9XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIGxldCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKGN1cnJlbnRSZXN1bHQudGV4dCk7XG4gICAgICAgIGlmIChoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUoY3VycmVudFJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoUmVmZXJlbmNlV2l0aFRpbWV6b25lLmZyb21EYXRlKG5leHRSZXN1bHQuc3RhcnQuZGF0ZSgpKSwgdGltZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJzaW5nUmVzdWx0KG5leHRSZXN1bHQucmVmZXJlbmNlLCBjdXJyZW50UmVzdWx0LmluZGV4LCBgJHtjdXJyZW50UmVzdWx0LnRleHR9JHt0ZXh0QmV0d2Vlbn0ke25leHRSZXN1bHQudGV4dH1gLCBjb21wb25lbnRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVE1lcmdlUmVsYXRpdmVEYXRlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgRU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IEVOTW9udGhOYW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvSVRNb250aE5hbWVQYXJzZXIuanNcIjtcbmltcG9ydCBFTkNhc3VhbFllYXJNb250aERheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvSVRTbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvSVRUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEVOVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0lUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRU5NZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9JVE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IEVOQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IEVOQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IEVOV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IElUUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvSVRSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEVOVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEVOTWVyZ2VSZWxhdGl2ZURhdGVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0lUTWVyZ2VSZWxhdGl2ZURhdGVSZWZpbmVyLmpzXCI7XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKGZhbHNlKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKHRydWUsIGZhbHNlKSk7XG5leHBvcnQgY29uc3QgR0IgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIHRydWUpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBFTkNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRU5DYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEVOTW9udGhOYW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IElUUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEVOVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uKHtcbiAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgbmV3IFNsYXNoRGF0ZUZvcm1hdFBhcnNlcihsaXR0bGVFbmRpYW4pLFxuICAgICAgICAgICAgbmV3IEVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBFTk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEVOTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5XZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5DYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBFTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBFTlRpbWVFeHByZXNzaW9uUGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgbmV3IEVOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBuZXcgRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBFTk1lcmdlUmVsYXRpdmVEYXRlUmVmaW5lcigpLCBuZXcgRU5NZXJnZURhdGVUaW1lUmVmaW5lcigpLCBuZXcgRU5NZXJnZURhdGVSYW5nZVJlZmluZXIoKV0sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgIFwic8O2bmRhZ1wiOiAwLFxuICAgIFwic8O2blwiOiAwLFxuICAgIFwic29cIjogMCxcbiAgICBcIm3DpW5kYWdcIjogMSxcbiAgICBcIm3DpW5cIjogMSxcbiAgICBcIm3DpVwiOiAxLFxuICAgIFwidGlzZGFnXCI6IDIsXG4gICAgXCJ0aXNcIjogMixcbiAgICBcInRpXCI6IDIsXG4gICAgXCJvbnNkYWdcIjogMyxcbiAgICBcIm9uc1wiOiAzLFxuICAgIFwib25cIjogMyxcbiAgICBcInRvcnNkYWdcIjogNCxcbiAgICBcInRvcnNcIjogNCxcbiAgICBcInRvXCI6IDQsXG4gICAgXCJmcmVkYWdcIjogNSxcbiAgICBcImZyZVwiOiA1LFxuICAgIFwiZnJcIjogNSxcbiAgICBcImzDtnJkYWdcIjogNixcbiAgICBcImzDtnJcIjogNixcbiAgICBcImzDtlwiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIFwiamFudWFyaVwiOiAxLFxuICAgIFwiamFuXCI6IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgXCJmZWJydWFyaVwiOiAyLFxuICAgIFwiZmViXCI6IDIsXG4gICAgXCJmZWIuXCI6IDIsXG4gICAgXCJtYXJzXCI6IDMsXG4gICAgXCJtYXJcIjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBcImFwcmlsXCI6IDQsXG4gICAgXCJhcHJcIjogNCxcbiAgICBcImFwci5cIjogNCxcbiAgICBcIm1halwiOiA1LFxuICAgIFwianVuaVwiOiA2LFxuICAgIFwianVuXCI6IDYsXG4gICAgXCJqdW4uXCI6IDYsXG4gICAgXCJqdWxpXCI6IDcsXG4gICAgXCJqdWxcIjogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBcImF1Z3VzdGlcIjogOCxcbiAgICBcImF1Z1wiOiA4LFxuICAgIFwiYXVnLlwiOiA4LFxuICAgIFwic2VwdGVtYmVyXCI6IDksXG4gICAgXCJzZXBcIjogOSxcbiAgICBcInNlcC5cIjogOSxcbiAgICBcInNlcHRcIjogOSxcbiAgICBcIm9rdG9iZXJcIjogMTAsXG4gICAgXCJva3RcIjogMTAsXG4gICAgXCJva3QuXCI6IDEwLFxuICAgIFwibm92ZW1iZXJcIjogMTEsXG4gICAgXCJub3ZcIjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIFwiZGVjZW1iZXJcIjogMTIsXG4gICAgXCJkZWNcIjogMTIsXG4gICAgXCJkZWMuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9ESUNUSU9OQVJZID0ge1xuICAgIFwiZsO2cnN0YVwiOiAxLFxuICAgIFwiYW5kcmFcIjogMixcbiAgICBcInRyZWRqZVwiOiAzLFxuICAgIFwiZmrDpHJkZVwiOiA0LFxuICAgIFwiZmVtdGVcIjogNSxcbiAgICBcInNqw6R0dGVcIjogNixcbiAgICBcInNqdW5kZVwiOiA3LFxuICAgIFwiw6V0dG9uZGVcIjogOCxcbiAgICBcIm5pb25kZVwiOiA5LFxuICAgIFwidGlvbmRlXCI6IDEwLFxuICAgIFwiZWxmdGVcIjogMTEsXG4gICAgXCJ0b2xmdGVcIjogMTIsXG4gICAgXCJ0cmV0dG9uZGVcIjogMTMsXG4gICAgXCJmam9ydG9uZGVcIjogMTQsXG4gICAgXCJmZW10b25kZVwiOiAxNSxcbiAgICBcInNleHRvbmRlXCI6IDE2LFxuICAgIFwic2p1dHRvbmRlXCI6IDE3LFxuICAgIFwiYXJ0b25kZVwiOiAxOCxcbiAgICBcIm5pdHRvbmRlXCI6IDE5LFxuICAgIFwidGp1Z29uZGVcIjogMjAsXG4gICAgXCJ0anVnb2bDtnJzdGFcIjogMjEsXG4gICAgXCJ0anVnb2FuZHJhXCI6IDIyLFxuICAgIFwidGp1Z290cmVkamVcIjogMjMsXG4gICAgXCJ0anVnb2Zqw6RyZGVcIjogMjQsXG4gICAgXCJ0anVnb2ZlbXRlXCI6IDI1LFxuICAgIFwidGp1Z29zasOkdHRlXCI6IDI2LFxuICAgIFwidGp1Z29zanVuZGVcIjogMjcsXG4gICAgXCJ0anVnb8OldHRvbmRlXCI6IDI4LFxuICAgIFwidGp1Z29uaW9uZGVcIjogMjksXG4gICAgXCJ0cmV0dGlvbmRlXCI6IDMwLFxuICAgIFwidHJldHRpb2bDtnJzdGFcIjogMzEsXG59O1xuZXhwb3J0IGNvbnN0IElOVEVHRVJfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIFwiZW5cIjogMSxcbiAgICBcImV0dFwiOiAxLFxuICAgIFwidHbDpVwiOiAyLFxuICAgIFwidHJlXCI6IDMsXG4gICAgXCJmeXJhXCI6IDQsXG4gICAgXCJmZW1cIjogNSxcbiAgICBcInNleFwiOiA2LFxuICAgIFwic2p1XCI6IDcsXG4gICAgXCLDpXR0YVwiOiA4LFxuICAgIFwibmlvXCI6IDksXG4gICAgXCJ0aW9cIjogMTAsXG4gICAgXCJlbHZhXCI6IDExLFxuICAgIFwidG9sdlwiOiAxMixcbiAgICBcInRyZXR0b25cIjogMTMsXG4gICAgXCJmam9ydG9uXCI6IDE0LFxuICAgIFwiZmVtdG9uXCI6IDE1LFxuICAgIFwic2V4dG9uXCI6IDE2LFxuICAgIFwic2p1dHRvblwiOiAxNyxcbiAgICBcImFydG9uXCI6IDE4LFxuICAgIFwibml0dG9uXCI6IDE5LFxuICAgIFwidGp1Z29cIjogMjAsXG4gICAgXCJ0cmV0dGnQvlwiOiAzMCxcbiAgICBcImZ5cnRpb1wiOiA0MCxcbiAgICBcImZlbXRpb1wiOiA1MCxcbiAgICBcInNleHRpb1wiOiA2MCxcbiAgICBcInNqdXR0aW9cIjogNzAsXG4gICAgXCLDpXR0aW9cIjogODAsXG4gICAgXCJuaXR0aW9cIjogOTAsXG4gICAgXCJodW5kcmFcIjogMTAwLFxuICAgIFwidHVzZW5cIjogMTAwMCxcbn07XG5leHBvcnQgY29uc3QgVElNRV9VTklUX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJzZWtcIjogXCJzZWNvbmRcIixcbiAgICBcInNla3VuZFwiOiBcInNlY29uZFwiLFxuICAgIFwic2VrdW5kZXJcIjogXCJzZWNvbmRcIixcbiAgICBcIm1pblwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXRcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0ZXJcIjogXCJtaW51dGVcIixcbiAgICBcInRpbVwiOiBcImhvdXJcIixcbiAgICBcInRpbW1lXCI6IFwiaG91clwiLFxuICAgIFwidGltbWFyXCI6IFwiaG91clwiLFxuICAgIFwiZGFnXCI6IFwiZGF5XCIsXG4gICAgXCJkYWdhclwiOiBcImRheVwiLFxuICAgIFwidmVja2FcIjogXCJ3ZWVrXCIsXG4gICAgXCJ2ZWNrb3JcIjogXCJ3ZWVrXCIsXG4gICAgXCJtw6VuXCI6IFwibW9udGhcIixcbiAgICBcIm3DpW5hZFwiOiBcIm1vbnRoXCIsXG4gICAgXCJtw6VuYWRlclwiOiBcIm1vbnRoXCIsXG4gICAgXCLDpXJcIjogXCJ5ZWFyXCIsXG4gICAgXCJrdmFydNCwbFwiOiBcInF1YXJ0ZXJcIixcbiAgICBcImt2YXJ0YWxcIjogXCJxdWFydGVyXCIsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJzZWt1bmRcIjogXCJzZWNvbmRcIixcbiAgICBcInNla3VuZGVyXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW51dFwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXRlclwiOiBcIm1pbnV0ZVwiLFxuICAgIFwidGltbWVcIjogXCJob3VyXCIsXG4gICAgXCJ0aW1tYXJcIjogXCJob3VyXCIsXG4gICAgXCJkYWdcIjogXCJkYXlcIixcbiAgICBcImRhZ2FyXCI6IFwiZGF5XCIsXG4gICAgXCJ2ZWNrYVwiOiBcIndlZWtcIixcbiAgICBcInZlY2tvclwiOiBcIndlZWtcIixcbiAgICBcIm3DpW5hZFwiOiBcIm1vbnRoXCIsXG4gICAgXCJtw6VuYWRlclwiOiBcIm1vbnRoXCIsXG4gICAgXCLDpXJcIjogXCJ5ZWFyXCIsXG4gICAgXCJrdmFydGFsXCI6IFwicXVhcnRlclwiLFxufTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbmZ1bmN0aW9uIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFsyXS50b0xvd2VyQ2FzZSgpXTtcbiAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG59XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxcXFxcZCspYDtcbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKE9SRElOQUxfTlVNQkVSX0RJQ1RJT05BUlkpfXxcXFxcZHsxLDJ9KD86ZXw6ZSkpYDtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4gPSBgKCR7TlVNQkVSX1BBVFRFUk59KVxcXFxzezAsNX0oJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlcXFxcc3swLDV9YDtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUkVHRVggPSBuZXcgUmVnRXhwKFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiwgXCJpXCIpO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9OT19BQkJSX1BBVFRFUk4gPSBgKCR7TlVNQkVSX1BBVFRFUk59KVxcXFxzezAsNX0oJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX05PX0FCQlJfRElDVElPTkFSWSl9KVxcXFxzezAsNX1gO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfUEFUVEVSTiA9IHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKFwiXCIsIFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX05PX0FCQlJfUEFUVEVSTik7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoT1JESU5BTF9OVU1CRVJfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIE9SRElOQUxfTlVNQkVSX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC9cXGQrLy50ZXN0KG1hdGNoKSkge1xuICAgICAgICBsZXQgeWVhck51bWJlciA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICAgICAgaWYgKHllYXJOdW1iZXIgPCAxMDApIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSBmaW5kTW9zdExpa2VseUFEWWVhcih5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhck51bWJlcjtcbiAgICB9XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Oig/OlxcXFwsfFxcXFwofFxcXFzvvIgpXFxcXHMqKT9cIiArXG4gICAgXCIoPzpww6VcXFxccyo/KT9cIiArXG4gICAgXCIoPzooZsO2cnJhfHNlbmFzdGV8bsOkc3RhfGtvbW1hbmRlKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKGbDtnJyYXxzZW5hc3RlfG7DpHN0YXxrb21tYW5kZSlcXFxccyp2ZWNrYSk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFNVRkZJWF9HUk9VUCA9IDM7XG5jb25zdCBXRUVLREFZX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNWV2Vla2RheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZGF5T2ZXZWVrID0gbWF0Y2hbV0VFS0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtTVUZGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZC5tYXRjaCgvZsO2cnJhfHNlbmFzdGUvKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQubWF0Y2goL27DpHN0YXxrb21tYW5kZS8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibmV4dFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgb2Zmc2V0LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U1ZXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpkZW5cXFxccyo/KT9cIiArXG4gICAgYChbMC05XXsxLDJ9KWAgK1xuICAgIGAoPzpcXFxccyooPzp0aWxsfFxcXFwtfFxcXFzigJN8XFxcXHMpXFxcXHMqKFswLTldezEsMn0pKT9cXFxccypgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86KD86LXwvfCw/XFxcXHMqKShbMC05XXs0fSg/IVteXFxcXHNdXFxcXGQpKSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFURV9HUk9VUF0pO1xuICAgICAgICBpZiAoZGF5ID4gMzEpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFtEQVRFX0dST1VQXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhck51bWJlciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbREFURV9UT19HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZUludChtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNWTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChkZW5uYXxkZW4gaMOkcnxmw7ZycmF8cGFzc2VyYWRlfG7DpHN0YXxrb21tYW5kZXxlZnRlcnxcXFxcK3wtKVxcXFxzKigke1RJTUVfVU5JVFNfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBQQVRURVJOX05PX0FCQlIgPSBuZXcgUmVnRXhwKGAoZGVubmF8ZGVuIGjDpHJ8ZsO2cnJhfHBhc3NlcmFkZXxuw6RzdGF8a29tbWFuZGV8ZWZ0ZXJ8XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTVlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIGNvbnN0cnVjdG9yKGFsbG93QWJicmV2aWF0aW9ucyA9IHRydWUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hbGxvd0FiYnJldmlhdGlvbnMgPSBhbGxvd0FiYnJldmlhdGlvbnM7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID8gUEFUVEVSTiA6IFBBVFRFUk5fTk9fQUJCUjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMl0pO1xuICAgICAgICBpZiAoIWR1cmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHByZWZpeCkge1xuICAgICAgICAgICAgY2FzZSBcImbDtnJyYVwiOlxuICAgICAgICAgICAgY2FzZSBcInBhc3NlcmFkZVwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHJldmVyc2VEdXJhdGlvbihkdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgZHVyYXRpb24pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChudXxpZGFnfGltb3Jnb258w7Z2ZXJtb3Jnb258aWfDpXJ8ZsO2cnJnw6VyfGlcXFxccypmw7ZycmfDpXIpYCArXG4gICAgYCg/OlxcXFxzKig/OnDDpVxcXFxzKik/KG1vcmdvbmVuP3xmw7ZybWlkZGFnZW4/fG1pZGRhZ2VuP3xlZnRlcm1pZGRhZ2VuP3xrdsOkbGxlbj98bmF0dGVuP3xtaWRuYXR0KSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBUSU1FX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNWQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IGRhdGVLZXl3b3JkID0gKG1hdGNoW0RBVEVfR1JPVVBdIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWVLZXl3b3JkID0gKG1hdGNoW1RJTUVfR1JPVVBdIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAoZGF0ZUtleXdvcmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJudVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJpZGFnXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaW1vcmdvblwiOlxuICAgICAgICAgICAgY2FzZSBcImltb3JuXCI6XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dERheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJpZ8OlclwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzRGF5ID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzRGF5LnNldERhdGUocHJldmlvdXNEYXkuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBwcmV2aW91c0RheSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHByZXZpb3VzRGF5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJmw7ZycmfDpXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJpIGbDtnJyZ8OlclwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IHR3b0RheXNBZ28gPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgdHdvRGF5c0Fnby5zZXREYXRlKHR3b0RheXNBZ28uZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0d29EYXlzQWdvKTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdHdvRGF5c0Fnbyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aW1lS2V5d29yZCkge1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdvblwiOlxuICAgICAgICAgICAgY2FzZSBcIm1vcmdvbmVuXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImbDtnJtaWRkYWdcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmw7ZybWlkZGFnZW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWlkZGFnXCI6XG4gICAgICAgICAgICBjYXNlIFwibWlkZGFnZW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImVmdGVybWlkZGFnXCI6XG4gICAgICAgICAgICBjYXNlIFwiZWZ0ZXJtaWRkYWdlblwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwia3bDpGxsXCI6XG4gICAgICAgICAgICBjYXNlIFwia3bDpGxsZW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5hdHRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJuYXR0ZW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJtaWRuYXR0XCI6XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVLZXl3b3JkID09PSBcIm1pZG5hdHRcIikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNWQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgSVNPRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9JU09Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBTVldlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9TVldlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBTVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1NWTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzXCI7XG5pbXBvcnQgU1ZUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvU1ZUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgU1ZDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvU1ZDYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBTVkNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlLCBsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgcmV0dXJuIGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uKHtcbiAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgbmV3IElTT0Zvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFNsYXNoRGF0ZUZvcm1hdFBhcnNlcihsaXR0bGVFbmRpYW4pLFxuICAgICAgICAgICAgbmV3IFNWTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgU1ZXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgU1ZUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRklUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/Oig/Omtsb3xrZWxsbylcXFxccyopP1wiO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcKVxcXFxzKlwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaFswXS5tYXRjaCgvXlxccypcXGR7NH1cXHMqJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgIFwic3VubnVudGFpXCI6IDAsXG4gICAgXCJzdW5udW50YWluYVwiOiAwLFxuICAgIFwic3VcIjogMCxcbiAgICBcIm1hYW5hbnRhaVwiOiAxLFxuICAgIFwibWFhbmFudGFpbmFcIjogMSxcbiAgICBcIm1hXCI6IDEsXG4gICAgXCJ0aWlzdGFpXCI6IDIsXG4gICAgXCJ0aWlzdGFpbmFcIjogMixcbiAgICBcInRpXCI6IDIsXG4gICAgXCJrZXNraXZpaWtrb1wiOiAzLFxuICAgIFwia2Vza2l2aWlra29uYVwiOiAzLFxuICAgIFwia2VcIjogMyxcbiAgICBcInRvcnN0YWlcIjogNCxcbiAgICBcInRvcnN0YWluYVwiOiA0LFxuICAgIFwidG9cIjogNCxcbiAgICBcInBlcmphbnRhaVwiOiA1LFxuICAgIFwicGVyamFudGFpbmFcIjogNSxcbiAgICBcInBlXCI6IDUsXG4gICAgXCJsYXVhbnRhaVwiOiA2LFxuICAgIFwibGF1YW50YWluYVwiOiA2LFxuICAgIFwibGFcIjogNixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICBcInRhbW1pa3V1XCI6IDEsXG4gICAgXCJ0YW1taWt1dXRhXCI6IDEsXG4gICAgXCJ0YW1taWt1dW5cIjogMSxcbiAgICBcInRhbW1pXCI6IDEsXG4gICAgXCJoZWxtaWt1dVwiOiAyLFxuICAgIFwiaGVsbWlrdXV0YVwiOiAyLFxuICAgIFwiaGVsbWlrdXVuXCI6IDIsXG4gICAgXCJoZWxtaVwiOiAyLFxuICAgIFwibWFhbGlza3V1XCI6IDMsXG4gICAgXCJtYWFsaXNrdXV0YVwiOiAzLFxuICAgIFwibWFhbGlza3V1blwiOiAzLFxuICAgIFwibWFhbGlzXCI6IDMsXG4gICAgXCJodWh0aWt1dVwiOiA0LFxuICAgIFwiaHVodGlrdXV0YVwiOiA0LFxuICAgIFwiaHVodGlrdXVuXCI6IDQsXG4gICAgXCJodWh0aVwiOiA0LFxuICAgIFwidG91a29rdXVcIjogNSxcbiAgICBcInRvdWtva3V1dGFcIjogNSxcbiAgICBcInRvdWtva3V1blwiOiA1LFxuICAgIFwidG91a29cIjogNSxcbiAgICBcImtlc8Oka3V1XCI6IDYsXG4gICAgXCJrZXPDpGt1dXRhXCI6IDYsXG4gICAgXCJrZXPDpGt1dW5cIjogNixcbiAgICBcImtlc8OkXCI6IDYsXG4gICAgXCJoZWluw6RrdXVcIjogNyxcbiAgICBcImhlaW7DpGt1dXRhXCI6IDcsXG4gICAgXCJoZWluw6RrdXVuXCI6IDcsXG4gICAgXCJoZWluw6RcIjogNyxcbiAgICBcImVsb2t1dVwiOiA4LFxuICAgIFwiZWxva3V1dGFcIjogOCxcbiAgICBcImVsb2t1dW5cIjogOCxcbiAgICBcImVsb1wiOiA4LFxuICAgIFwic3l5c2t1dVwiOiA5LFxuICAgIFwic3l5c2t1dXRhXCI6IDksXG4gICAgXCJzeXlza3V1blwiOiA5LFxuICAgIFwic3l5c1wiOiA5LFxuICAgIFwibG9rYWt1dVwiOiAxMCxcbiAgICBcImxva2FrdXV0YVwiOiAxMCxcbiAgICBcImxva2FrdXVuXCI6IDEwLFxuICAgIFwibG9rYVwiOiAxMCxcbiAgICBcIm1hcnJhc2t1dVwiOiAxMSxcbiAgICBcIm1hcnJhc2t1dXRhXCI6IDExLFxuICAgIFwibWFycmFza3V1blwiOiAxMSxcbiAgICBcIm1hcnJhc1wiOiAxMSxcbiAgICBcImpvdWx1a3V1XCI6IDEyLFxuICAgIFwiam91bHVrdXV0YVwiOiAxMixcbiAgICBcImpvdWx1a3V1blwiOiAxMixcbiAgICBcImpvdWx1XCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcInlrc2lcIjogMSxcbiAgICBcInloZGVuXCI6IDEsXG4gICAgXCJrYWtzaVwiOiAyLFxuICAgIFwia2FoZGVuXCI6IDIsXG4gICAgXCJrb2xtZVwiOiAzLFxuICAgIFwia29sbWVuXCI6IDMsXG4gICAgXCJuZWxqw6RcIjogNCxcbiAgICBcIm5lbGrDpG5cIjogNCxcbiAgICBcInZpaXNpXCI6IDUsXG4gICAgXCJ2aWlkZW5cIjogNSxcbiAgICBcImt1dXNpXCI6IDYsXG4gICAgXCJrdXVkZW5cIjogNixcbiAgICBcInNlaXRzZW3DpG5cIjogNyxcbiAgICBcImthaGRla3NhblwiOiA4LFxuICAgIFwieWhkZWtzw6RuXCI6IDksXG4gICAgXCJreW1tZW5lblwiOiAxMCxcbn07XG5leHBvcnQgY29uc3QgVElNRV9VTklUX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJzXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWtcIjogXCJzZWNvbmRcIixcbiAgICBcInNla3VudGlcIjogXCJzZWNvbmRcIixcbiAgICBcInNla3VudGlhXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bm5pblwiOiBcInNlY29uZFwiLFxuICAgIFwibWluXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dXR0aVwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXV0dGlhXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dXRpblwiOiBcIm1pbnV0ZVwiLFxuICAgIFwidFwiOiBcImhvdXJcIixcbiAgICBcInR1bnRpXCI6IFwiaG91clwiLFxuICAgIFwidHVudGlhXCI6IFwiaG91clwiLFxuICAgIFwidHVubmluXCI6IFwiaG91clwiLFxuICAgIFwicHZcIjogXCJkYXlcIixcbiAgICBcInDDpGl2w6RcIjogXCJkYXlcIixcbiAgICBcInDDpGl2w6TDpFwiOiBcImRheVwiLFxuICAgIFwicMOkaXbDpG5cIjogXCJkYXlcIixcbiAgICBcInZrXCI6IFwid2Vla1wiLFxuICAgIFwidmlpa2tvXCI6IFwid2Vla1wiLFxuICAgIFwidmlpa2tvYVwiOiBcIndlZWtcIixcbiAgICBcInZpaWtvblwiOiBcIndlZWtcIixcbiAgICBcImtrXCI6IFwibW9udGhcIixcbiAgICBcImt1dWthdXNpXCI6IFwibW9udGhcIixcbiAgICBcImt1dWthdXR0YVwiOiBcIm1vbnRoXCIsXG4gICAgXCJrdXVrYXVkZW5cIjogXCJtb250aFwiLFxuICAgIFwidnVvc2lcIjogXCJ5ZWFyXCIsXG4gICAgXCJ2dW90dGFcIjogXCJ5ZWFyXCIsXG4gICAgXCJ2dW9kZW5cIjogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJzZWt1bnRpXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bnRpYVwiOiBcInNlY29uZFwiLFxuICAgIFwic2VrdW5uaW5cIjogXCJzZWNvbmRcIixcbiAgICBcIm1pbnV1dHRpXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dXR0aWFcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV1dGluXCI6IFwibWludXRlXCIsXG4gICAgXCJ0dW50aVwiOiBcImhvdXJcIixcbiAgICBcInR1bnRpYVwiOiBcImhvdXJcIixcbiAgICBcInR1bm5pblwiOiBcImhvdXJcIixcbiAgICBcInDDpGl2w6RcIjogXCJkYXlcIixcbiAgICBcInDDpGl2w6TDpFwiOiBcImRheVwiLFxuICAgIFwicMOkaXbDpG5cIjogXCJkYXlcIixcbiAgICBcInZpaWtrb1wiOiBcIndlZWtcIixcbiAgICBcInZpaWtrb2FcIjogXCJ3ZWVrXCIsXG4gICAgXCJ2aWlrb25cIjogXCJ3ZWVrXCIsXG4gICAgXCJrdXVrYXVzaVwiOiBcIm1vbnRoXCIsXG4gICAgXCJrdXVrYXV0dGFcIjogXCJtb250aFwiLFxuICAgIFwia3V1a2F1ZGVuXCI6IFwibW9udGhcIixcbiAgICBcInZ1b3NpXCI6IFwieWVhclwiLFxuICAgIFwidnVvdHRhXCI6IFwieWVhclwiLFxuICAgIFwidnVvZGVuXCI6IFwieWVhclwiLFxufTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbmZ1bmN0aW9uIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFsyXS50b0xvd2VyQ2FzZSgpXTtcbiAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG59XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxcXFxcZCspYDtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4gPSBgKCR7TlVNQkVSX1BBVFRFUk59KVxcXFxzezAsNX0oJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlcXFxcc3swLDV9YDtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUkVHRVggPSBuZXcgUmVnRXhwKFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiwgXCJpXCIpO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9OT19BQkJSX1BBVFRFUk4gPSBgKCR7TlVNQkVSX1BBVFRFUk59KVxcXFxzezAsNX0oJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX05PX0FCQlJfRElDVElPTkFSWSl9KVxcXFxzezAsNX1gO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfUEFUVEVSTiA9IHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKFwiXCIsIFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX05PX0FCQlJfUEFUVEVSTik7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXIobWF0Y2gpIHtcbiAgICBpZiAoL1xcZCsvLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIGxldCB5ZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgICAgICBpZiAoeWVhck51bWJlciA8IDEwMCkge1xuICAgICAgICAgICAgeWVhck51bWJlciA9IGZpbmRNb3N0TGlrZWx5QURZZWFyKHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5ZWFyTnVtYmVyO1xuICAgIH1cbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgV0VFS0RBWV9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86KD86XFxcXCx8XFxcXCh8XFxcXO+8iClcXFxccyopP1wiICtcbiAgICBcIig/Oih2aWltZXxlZGVsbGluZW58ZWRlbGxpc2Vuw6R8ZW5zaXxzZXVyYWF2YXxzZXVyYWF2YW5hfHTDpG3DpHx0w6Ruw6QpXFxcXHMqKT9cIiArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlxcXFxzKig/OlxcXFwsfFxcXFwpfFxcXFzvvIkpKT9cIiArXG4gICAgXCIoPzpcXFxccyoodmlpbWV8ZW5zaXxzZXVyYWF2YSlcXFxccyp2aWlrb2xsYSk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgU1VGRklYX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZJV2Vla2RheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZGF5T2ZXZWVrID0gbWF0Y2hbV0VFS0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtTVUZGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZC5tYXRjaCgvdmlpbWV8ZWRlbGxpbmVufGVkZWxsaXNlbsOkLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJsYXN0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkLm1hdGNoKC9lbnNpfHNldXJhYXZhfHNldXJhYXZhbmEvKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIG9mZnNldCwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoWzAtOV17MSwyfSlcXFxcLj9gICtcbiAgICBgKD86XFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxccylcXFxccyooWzAtOV17MSwyfSlcXFxcLj8pP1xcXFxzKmAgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGAoPzooPzotfC98LD9cXFxccyopKFswLTldezR9KD8hW15cXFxcc11cXFxcZCkpKT9gICtcbiAgICBgKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfVE9fR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQgPSByZXN1bHQuc3RhcnQuY2xvbmUoKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiZGF5XCIsIGVuZERhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKHNldXJhYXZhfHNldXJhYXZhdHxzZXVyYWF2aWVufGVkZWxsaW5lbnxlZGVsbGlzZXR8ZWRlbGxpc3Rlbnx2aWltZWlzZXR8dmlpbWVpc3RlbnxrdWx1bmVldHxrdWx1bmVpZGVufFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFBBVFRFUk5fTk9fQUJCUiA9IG5ldyBSZWdFeHAoYChzZXVyYWF2YXxzZXVyYWF2YXR8c2V1cmFhdmllbnxlZGVsbGluZW58ZWRlbGxpc2V0fGVkZWxsaXN0ZW58dmlpbWVpc2V0fHZpaW1laXN0ZW58a3VsdW5lZXR8a3VsdW5laWRlbnxcXFxcK3wtKVxcXFxzKigke1RJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBhbGxvd0FiYnJldmlhdGlvbnM7XG4gICAgY29uc3RydWN0b3IoYWxsb3dBYmJyZXZpYXRpb25zID0gdHJ1ZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmFsbG93QWJicmV2aWF0aW9ucyA9IGFsbG93QWJicmV2aWF0aW9ucztcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGxvd0FiYnJldmlhdGlvbnMgPyBQQVRURVJOIDogUEFUVEVSTl9OT19BQkJSO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGR1cmF0aW9uID0gcGFyc2VEdXJhdGlvbihtYXRjaFsyXSk7XG4gICAgICAgIGlmICghZHVyYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAocHJlZml4KSB7XG4gICAgICAgICAgICBjYXNlIFwiZWRlbGxpbmVuXCI6XG4gICAgICAgICAgICBjYXNlIFwiZWRlbGxpc2V0XCI6XG4gICAgICAgICAgICBjYXNlIFwiZWRlbGxpc3RlblwiOlxuICAgICAgICAgICAgY2FzZSBcInZpaW1laXNldFwiOlxuICAgICAgICAgICAgY2FzZSBcInZpaW1laXN0ZW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJrdWx1bmVldFwiOlxuICAgICAgICAgICAgY2FzZSBcImt1bHVuZWlkZW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCItXCI6XG4gICAgICAgICAgICAgICAgZHVyYXRpb24gPSByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIGR1cmF0aW9uKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKCR7VElNRV9VTklUU19QQVRURVJOfSlcXFxccypzaXR0ZW4oPz1cXFxcV3wkKWAsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBvdXRwdXRUaW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgb3V0cHV0VGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GSVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAoJHtUSU1FX1VOSVRTX1BBVFRFUk59KVxcXFxzKig/OnNpc8OkbGzDpHxrdWx1ZXNzYXxww6TDpHN0w6QpKD89XFxcXFd8JClgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGltcGx5U2ltaWxhclRpbWUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZJQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gLyh0w6Ruw6RcXHMqKT8oYWFtdWxsYXxhYW11bmF8YWFtdXDDpGl2w6RsbMOkfHDDpGl2w6RsbMOkfGlsdGFww6RpdsOkbGzDpHxpbGxhbGxhfHnDtmxsw6R8a2Vza2l5w7ZsbMOkKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgdGltZUtleXdvcmRQYXR0ZXJuID0gbWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgIHJldHVybiBGSUNhc3VhbFRpbWVQYXJzZXIuZXh0cmFjdFRpbWVDb21wb25lbnRzKGNvbXBvbmVudCwgdGltZUtleXdvcmRQYXR0ZXJuKTtcbiAgICB9XG4gICAgc3RhdGljIGV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkUGF0dGVybikge1xuICAgICAgICBzd2l0Y2ggKHRpbWVLZXl3b3JkUGF0dGVybikge1xuICAgICAgICAgICAgY2FzZSBcImFhbXVsbGFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhYW11bmFcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImFhbXVww6RpdsOkbGzDpFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgOSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicMOkaXbDpGxsw6RcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJpbHRhcMOkaXbDpGxsw6RcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJpbGxhbGxhXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxOCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiecO2bGzDpFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMjIpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImtlc2tpecO2bGzDpFwiOlxuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQuZ2V0KFwiaG91clwiKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZER1cmF0aW9uQXNJbXBsaWVkKHsgXCJkYXlcIjogMSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgRklDYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL0ZJQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmltcG9ydCB7IGFkZER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKG55dHx0w6Ruw6TDpG58aHVvbWVubmF8eWxpaHVvbWVubmF8ZWlsZW58dG9pc3NhcMOkaXbDpG7DpHx2aWltZVxcXFxzKnnDtm7DpClgICtcbiAgICBgKD86XFxcXHMqKGFhbXVsbGF8YWFtdW5hfGFhbXVww6RpdsOkbGzDpHxww6RpdsOkbGzDpHxpbHRhcMOkaXbDpGxsw6R8aWxsYWxsYXx5w7ZsbMOkfGtlc2tpecO2bGzDpCkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgVElNRV9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSUNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBsZXQgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgICAgICBjb25zdCBkYXRlS2V5d29yZCA9IChtYXRjaFtEQVRFX0dST1VQXSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1lS2V5d29yZCA9IChtYXRjaFtUSU1FX0dST1VQXSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGRhdGVLZXl3b3JkKSB7XG4gICAgICAgICAgICBjYXNlIFwibnl0XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInTDpG7DpMOkblwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImh1b21lbm5hXCI6XG4gICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IGFkZER1cmF0aW9uKHRhcmdldERhdGUsIHsgZGF5OiAxIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInlsaWh1b21lbm5hXCI6XG4gICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IGFkZER1cmF0aW9uKHRhcmdldERhdGUsIHsgZGF5OiAyIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImVpbGVuXCI6XG4gICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IGFkZER1cmF0aW9uKHRhcmdldERhdGUsIHsgZGF5OiAtMSB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0b2lzc2Fww6RpdsOkbsOkXCI6XG4gICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IGFkZER1cmF0aW9uKHRhcmdldERhdGUsIHsgZGF5OiAtMiB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKGRhdGVLZXl3b3JkLm1hdGNoKC92aWltZVxccyp5w7Zuw6QvKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0RGF0ZS5nZXRIb3VycygpID4gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IGFkZER1cmF0aW9uKHRhcmdldERhdGUsIHsgZGF5OiAtMSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGltZUtleXdvcmQpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudCA9IEZJQ2FzdWFsVGltZVBhcnNlci5leHRyYWN0VGltZUNvbXBvbmVudHMoY29tcG9uZW50LCB0aW1lS2V5d29yZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GSUNhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKC184oCTKVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSU1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXlxcXFxzKihUfGtsb3xrZWxsb3wsfC0pP1xcXFxzKiRcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgSVNPRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9JU09Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBGSVRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRklUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IEZJV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IEZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRklNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBGSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9GSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBGSVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEZJVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9GSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRklDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRklDYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgRklDYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRklDYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgRklNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvRklNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBGSU1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0ZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKHRydWUpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCBsaXR0bGVFbmRpYW4pO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEZJQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBGSUNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSwgbGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBGSVRpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRklNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBGSVdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBGSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBGSU1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLCBuZXcgRklNZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJjaFxcdTFlZTcgbmhcXHUxZWFkdFwiOiAwLFxuICAgIFwiY25cIjogMCxcbiAgICBcInRoXFx1MWVlOSBoYWlcIjogMSxcbiAgICBcInQyXCI6IDEsXG4gICAgXCJ0aFxcdTFlZTkgYmFcIjogMixcbiAgICBcInQzXCI6IDIsXG4gICAgXCJ0aFxcdTFlZTkgdFxcdTAxYjBcIjogMyxcbiAgICBcInQ0XCI6IDMsXG4gICAgXCJ0aFxcdTFlZTkgblxcdTAxMDNtXCI6IDQsXG4gICAgXCJ0NVwiOiA0LFxuICAgIFwidGhcXHUxZWU5IHNcXHUwMGUxdVwiOiA1LFxuICAgIFwidDZcIjogNSxcbiAgICBcInRoXFx1MWVlOSBiXFx1MWVhM3lcIjogNixcbiAgICBcInQ3XCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ0aFxcdTAwZTFuZyAxXCI6IDEsXG4gICAgXCJ0aFxcdTAwZTFuZyBtXFx1MWVkOXRcIjogMSxcbiAgICBcInRoXFx1MDBlMW5nIGdpXFx1MDBlYW5nXCI6IDEsXG4gICAgXCJ0aFxcdTAwZTFuZyAyXCI6IDIsXG4gICAgXCJ0aFxcdTAwZTFuZyBoYWlcIjogMixcbiAgICBcInRoXFx1MDBlMW5nIDNcIjogMyxcbiAgICBcInRoXFx1MDBlMW5nIGJhXCI6IDMsXG4gICAgXCJ0aFxcdTAwZTFuZyA0XCI6IDQsXG4gICAgXCJ0aFxcdTAwZTFuZyB0XFx1MDFiMFwiOiA0LFxuICAgIFwidGhcXHUwMGUxbmcgNVwiOiA1LFxuICAgIFwidGhcXHUwMGUxbmcgblxcdTAxMDNtXCI6IDUsXG4gICAgXCJ0aFxcdTAwZTFuZyA2XCI6IDYsXG4gICAgXCJ0aFxcdTAwZTFuZyBzXFx1MDBlMXVcIjogNixcbiAgICBcInRoXFx1MDBlMW5nIDdcIjogNyxcbiAgICBcInRoXFx1MDBlMW5nIGJcXHUxZWEzeVwiOiA3LFxuICAgIFwidGhcXHUwMGUxbmcgOFwiOiA4LFxuICAgIFwidGhcXHUwMGUxbmcgdFxcdTAwZTFtXCI6IDgsXG4gICAgXCJ0aFxcdTAwZTFuZyA5XCI6IDksXG4gICAgXCJ0aFxcdTAwZTFuZyBjaFxcdTAwZWRuXCI6IDksXG4gICAgXCJ0aFxcdTAwZTFuZyAxMFwiOiAxMCxcbiAgICBcInRoXFx1MDBlMW5nIG1cXHUwMWIwXFx1MWVkZGlcIjogMTAsXG4gICAgXCJ0aFxcdTAwZTFuZyAxMVwiOiAxMSxcbiAgICBcInRoXFx1MDBlMW5nIG1cXHUwMWIwXFx1MWVkZGkgbVxcdTFlZDl0XCI6IDExLFxuICAgIFwidGhcXHUwMGUxbmcgMTJcIjogMTIsXG4gICAgXCJ0aFxcdTAwZTFuZyBtXFx1MDFiMFxcdTFlZGRpIGhhaVwiOiAxMixcbiAgICBcInRoXFx1MDBlMW5nIGNoXFx1MWVhMXBcIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IElOVEVHRVJfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIFwibVxcdTFlZDl0XCI6IDEsXG4gICAgXCJoYWlcIjogMixcbiAgICBcImJhXCI6IDMsXG4gICAgXCJiXFx1MWVkMW5cIjogNCxcbiAgICBcIm5cXHUwMTAzbVwiOiA1LFxuICAgIFwic1xcdTAwZTF1XCI6IDYsXG4gICAgXCJiXFx1MWVhM3lcIjogNyxcbiAgICBcInRcXHUwMGUxbVwiOiA4LFxuICAgIFwiY2hcXHUwMGVkblwiOiA5LFxuICAgIFwibVxcdTAxYjBcXHUxZWRkaVwiOiAxMCxcbiAgICBcIm1cXHUwMWIwXFx1MWVkZGkgbVxcdTFlZDl0XCI6IDExLFxuICAgIFwibVxcdTAxYjBcXHUxZWRkaSBoYWlcIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwiZ2lcXHUwMGUyeVwiOiBcInNlY29uZFwiLFxuICAgIFwicGhcXHUwMGZhdFwiOiBcIm1pbnV0ZVwiLFxuICAgIFwiZ2lcXHUxZWRkXCI6IFwiaG91clwiLFxuICAgIFwibmdcXHUwMGUweVwiOiBcImRheVwiLFxuICAgIFwidHVcXHUxZWE3blwiOiBcIndlZWtcIixcbiAgICBcInRoXFx1MDBlMW5nXCI6IFwibW9udGhcIixcbiAgICBcIm5cXHUwMTAzbVwiOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBcIig/OlwiICsgbWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKSArIFwifFswLTldK3xbMC05XStcXFxcLlswLTldKylcIjtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIHJldHVybiBwYXJzZUZsb2F0KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gXCIoPzpbMC05XXsxLDR9KD86XFxcXHMqVENOKT8pXCI7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgY29uc3QgdXBwZXIgPSBtYXRjaC50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IG51bSA9IHBhcnNlSW50KG1hdGNoLnJlcGxhY2UoL1teMC05XSsvZywgXCJcIikpO1xuICAgIGlmICgvVENOLy50ZXN0KHVwcGVyKSlcbiAgICAgICAgcmV0dXJuIC1udW07XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKG51bSk7XG59XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4gPSBcIihcIiArIE5VTUJFUl9QQVRURVJOICsgXCIpXFxcXHN7MCw1fShcIiArIG1hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSkgKyBcIilcXFxcc3swLDV9XCI7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGZyYWdtZW50c1t1bml0XSA9IG51bTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnRzO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpuZ1xcdTAwZTB5XFxcXHMqKT9cIiArXG4gICAgXCIoWzAtOV17MSwyfSlcIiArXG4gICAgXCJcXFxccyp0aFxcdTAwZTFuZ1xcXFxzKlwiICtcbiAgICBcIihbMC05XXsxLDJ9KVwiICtcbiAgICBcIig/OlxcXFxzKm5cXHUwMTAzbVxcXFxzKihcIiArXG4gICAgWUVBUl9QQVRURVJOICtcbiAgICBcIikpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IERBWV9HUk9VUCA9IDE7XG5jb25zdCBNT05USF9HUk9VUCA9IDI7XG5jb25zdCBZRUFSX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJU3RhbmRhcmRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBWV9HUk9VUF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSB8fCBtb250aCA+IDEyKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklTdGFuZGFyZFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZLCBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFwiICsgbWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpICsgXCIpXCIgKyBcIig/OlxcXFxzKig/Om7Eg218LylcXFxccyooXCIgKyBZRUFSX1BBVFRFUk4gKyBcIikpP1wiICsgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBNT05USF9HUk9VUCA9IDE7XG5jb25zdCBZRUFSX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJTW9udGhZZWFyUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBpZiAoIW1vbnRoKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgMSk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIGNvbnRleHQucmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklNb250aFllYXJQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86XFxcXGJuxINtXFxcXHMqKFwiICsgWUVBUl9QQVRURVJOICsgXCIpfFxcXFxiKFswLTldezEsNH0pXFxcXHMqKFRDTikpKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgWUVBUl9XSVRIX05BTV9HUk9VUCA9IDE7XG5jb25zdCBCQVJFX0JDX1lFQVJfR1JPVVAgPSAyO1xuY29uc3QgQkFSRV9CQ19TVUZGSVhfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklZZWFyUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBsZXQgeWVhclRleHQ7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX1dJVEhfTkFNX0dST1VQXSkge1xuICAgICAgICAgICAgeWVhclRleHQgPSBtYXRjaFtZRUFSX1dJVEhfTkFNX0dST1VQXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHllYXJUZXh0ID0gbWF0Y2hbQkFSRV9CQ19ZRUFSX0dST1VQXSArIFwiIFwiICsgbWF0Y2hbQkFSRV9CQ19TVUZGSVhfR1JPVVBdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBwYXJzZVllYXIoeWVhclRleHQpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgMSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCAxKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSVllYXJQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IC9cXGIoaMO0bSBuYXl8aMO0bSBxdWF8aMO0bSBraWF8bmfDoHkgbWFpfG5nw6B5IGtpYXxiw6J5IGdp4budfGzDumMgbsOgeSkoPz1cXFd8JCkvaTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgc3dpdGNoIChtYXRjaFsxXS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiYsOieSBnaeG7nVwiOlxuICAgICAgICAgICAgY2FzZSBcImzDumMgbsOgeVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaMO0bSBuYXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaMO0bSBxdWFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcImjDtG0ga2lhXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QmVmb3JlKGNvbnRleHQucmVmZXJlbmNlLCAyKTtcbiAgICAgICAgICAgIGNhc2UgXCJuZ8OgeSBtYWlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwibmfDoHkga2lhXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGltcGx5U2ltaWxhclRpbWUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvKGJ14buVaVxccyopPyhzw6FuZyBz4bubbXxzw6FuZ3x0csawYXxjaGnhu4F1fHThu5FpfMSRw6ptfG7hu61hIMSRw6ptfGLDrG5oIG1pbmgpKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSUNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIGNvbnRleHQucmVmRGF0ZSk7XG4gICAgICAgIHJldHVybiBWSUNhc3VhbFRpbWVQYXJzZXIuZXh0cmFjdFRpbWVDb21wb25lbnRzKGNvbXBvbmVudCwgbWF0Y2hbMl0udG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuICAgIHN0YXRpYyBleHRyYWN0VGltZUNvbXBvbmVudHMoY29tcG9uZW50LCBrZXl3b3JkKSB7XG4gICAgICAgIHN3aXRjaCAoa2V5d29yZCkge1xuICAgICAgICAgICAgY2FzZSBcImJcXHUwMGVjbmggbWluaFwiOlxuICAgICAgICAgICAgY2FzZSBcInNcXHUwMGUxbmcgc1xcdTFlZGJtXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInNcXHUwMGUxbmdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidHJcXHUwMWIwYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiY2hpXFx1MWVjMXVcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRcXHUxZWQxaVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiXFx1MDExMVxcdTAwZWFtXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJuXFx1MWVlZGEgXFx1MDExMVxcdTAwZWFtXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklDYXN1YWxUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihcIiArXG4gICAgbWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSkgK1xuICAgIFwiKVwiICtcbiAgICBcIig/OlxcXFxzKihuw6B5fHThu5tpfHNhdSg/IVxcXFxzKmtoaSl8cXVhKSk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgV0VFS0RBWV9HUk9VUCA9IDE7XG5jb25zdCBNT0RJRklFUl9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSVdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRvd1RleHQgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBkb3cgPSBXRUVLREFZX0RJQ1RJT05BUllbZG93VGV4dF07XG4gICAgICAgIGlmIChkb3cgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBtb2RpZmllciA9IG1hdGNoW01PRElGSUVSX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyVHlwZSA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcikge1xuICAgICAgICAgICAgY29uc3QgbSA9IG1vZGlmaWVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAobS5pbmNsdWRlcyhcInThu5tpXCIpIHx8IG0uaW5jbHVkZXMoXCJzYXVcIikpXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJUeXBlID0gXCJuZXh0XCI7XG4gICAgICAgICAgICBlbHNlIGlmIChtLmluY2x1ZGVzKFwicXVhXCIpKVxuICAgICAgICAgICAgICAgIG1vZGlmaWVyVHlwZSA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgZG93LCBtb2RpZmllclR5cGUpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OmxcXHUwMGZhY1xcXFxzKnx2XFx1MDBlMG9cXFxccyopP1wiICtcbiAgICBcIihbMC05XXsxLDJ9KVwiICtcbiAgICBcIig/OlxcXFxzKmdpXFx1MWVkZFxcXFxzKihbMC05XXsxLDJ9KT9cXFxccyooPzpwaFxcdTAwZmF0XFxcXHMqKT9cIiArXG4gICAgXCIoc1xcdTAwZTFuZ3x0clxcdTAxYjBhfGNoaVxcdTFlYzF1fHRcXHUxZWQxaXxcXHUwMTExXFx1MDBlYW0pP1wiICtcbiAgICBcInw6KFswLTldezJ9KSlcIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBIT1VSX0dST1VQID0gMTtcbmNvbnN0IE1JTlVURV9HSU9fR1JPVVAgPSAyO1xuY29uc3QgTUVSSURJRU1fR1JPVVAgPSAzO1xuY29uc3QgTUlOVVRFX0NPTE9OX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGhvdXIgPSBwYXJzZUludChtYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIGlmIChob3VyID4gMjMpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICBjb25zdCBtaW51dGUgPSBtYXRjaFtNSU5VVEVfQ09MT05fR1JPVVBdXG4gICAgICAgICAgICA/IHBhcnNlSW50KG1hdGNoW01JTlVURV9DT0xPTl9HUk9VUF0pXG4gICAgICAgICAgICA6IG1hdGNoW01JTlVURV9HSU9fR1JPVVBdXG4gICAgICAgICAgICAgICAgPyBwYXJzZUludChtYXRjaFtNSU5VVEVfR0lPX0dST1VQXSlcbiAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjApXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBjb25zdCBtZXJpZGllbSA9IG1hdGNoW01FUklESUVNX0dST1VQXT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1lcmlkaWVtID09PSBcInPDoW5nXCIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWVyaWRpZW0gPT09IFwidHLGsGFcIikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgaG91ciArIDEyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtZXJpZGllbVwiLCBob3VyID49IDEyID8gTWVyaWRpZW0uUE0gOiBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWVyaWRpZW0gPT09IFwiY2hp4buBdVwiIHx8IG1lcmlkaWVtID09PSBcInThu5FpXCIgfHwgbWVyaWRpZW0gPT09IFwixJHDqm1cIikge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgaG91ciArIDEyKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBcIlxcXFxzezAsNX0oPzp0clxcdTAxYjBcXHUxZWRiY3xxdWEpKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgaWYgKCFkdXJhdGlvbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXCIgKyBUSU1FX1VOSVRTX1BBVFRFUk4gKyBcIilcIiArIFwiXFxcXHN7MCw1fSg/OnNhdXxuXFx1MWVlZmF8dFxcdTFlZGJpfHRpXFx1MWViZnApKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBpZiAoIWR1cmF0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIGR1cmF0aW9uKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSVRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OnRyb25nXFxcXHMqKD86dlxcdTAwZjJuZ1xcXFxzKik/KVwiICsgXCIoXCIgKyBUSU1FX1VOSVRTX1BBVFRFUk4gKyBcIikoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgaWYgKCF0aW1lVW5pdHMpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVF9ESUNUSU9OQVJZLCBOVU1CRVJfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuY29uc3QgQ0FTVUFMX1VOSVRfUEFUVEVSTiA9IFwiKD86XCIgKyBOVU1CRVJfUEFUVEVSTiArIFwiXFxcXHN7MCw1fSk/KD86XCIgKyBtYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpICsgXCIpXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihuw6B5fHRyxrDhu5tjfHF1YXxzYXV8dOG7m2l8dGnhur9wKVxcXFxzKihcIiArXG4gICAgQ0FTVUFMX1VOSVRfUEFUVEVSTiArXG4gICAgXCIpXCIgK1xuICAgIFwifChcIiArXG4gICAgQ0FTVUFMX1VOSVRfUEFUVEVSTiArXG4gICAgXCIpXFxcXHMqKG7DoHl8dHLGsOG7m2N8cXVhfHNhdXx04bubaXx0aeG6v3ApXCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb2RpZmllciA9IChtYXRjaFsxXSB8fCBtYXRjaFs0XSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB1bml0VGV4dCA9IChtYXRjaFsyXSB8fCBtYXRjaFszXSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKHVuaXRUZXh0KTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGR1cmF0aW9uKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVt1bml0VGV4dF07XG4gICAgICAgICAgICBpZiAoIXVuaXQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHsgW3VuaXRdOiAxIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGlmaWVyID09PSBcInRyxrDhu5tjXCIgfHwgbW9kaWZpZXIgPT09IFwicXVhXCIpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0gcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBkdXJhdGlvbik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSU1lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKig/OuKAk3wtfMSR4bq/bnx04bubaXx2w6ApXFxzKiQvO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKD86bMO6Y3x2w6BvfCx8VHwtKT9cXHMqJC87XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL01lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lciBleHRlbmRzIE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIge1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgSVNPRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9JU09Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFZJU3RhbmRhcmRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVN0YW5kYXJkUGFyc2VyLmpzXCI7XG5pbXBvcnQgVklNb250aFllYXJQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSU1vbnRoWWVhclBhcnNlci5qc1wiO1xuaW1wb3J0IFZJWWVhclBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1ZJWWVhclBhcnNlci5qc1wiO1xuaW1wb3J0IFZJQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1ZJQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFZJQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1ZJQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IFZJV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1ZJV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFZJVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgVklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1ZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSVRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1ZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1ZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgVklNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9WSU1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgVklNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1ZJTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgVklDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFZJQ2FzdWFsRGF0ZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBWSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlLCBsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgcmV0dXJuIGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uKHtcbiAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgbmV3IElTT0Zvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFNsYXNoRGF0ZUZvcm1hdFBhcnNlcihsaXR0bGVFbmRpYW4pLFxuICAgICAgICAgICAgbmV3IFZJU3RhbmRhcmRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSU1vbnRoWWVhclBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFZJWWVhclBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFZJV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFZJVGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgbmV3IFZJVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBWSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW1xuICAgICAgICAgICAgbmV3IFZJTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lcigpLFxuICAgICAgICAgICAgbmV3IFZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCksXG4gICAgICAgICAgICBuZXcgVklNZXJnZURhdGVUaW1lUmVmaW5lcigpLFxuICAgICAgICBdLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0ICogYXMgZW4gZnJvbSBcIi4vbG9jYWxlcy9lbi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vLCBQYXJzaW5nQ29udGV4dCB9IGZyb20gXCIuL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcbmV4cG9ydCB7IGVuLCBDaHJvbm8sIFBhcnNpbmdDb250ZXh0LCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuaW1wb3J0ICogYXMgZGUgZnJvbSBcIi4vbG9jYWxlcy9kZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgZnIgZnJvbSBcIi4vbG9jYWxlcy9mci9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgamEgZnJvbSBcIi4vbG9jYWxlcy9qYS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgcHQgZnJvbSBcIi4vbG9jYWxlcy9wdC9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgbmwgZnJvbSBcIi4vbG9jYWxlcy9ubC9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgemggZnJvbSBcIi4vbG9jYWxlcy96aC9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgcnUgZnJvbSBcIi4vbG9jYWxlcy9ydS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgZXMgZnJvbSBcIi4vbG9jYWxlcy9lcy9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgdWsgZnJvbSBcIi4vbG9jYWxlcy91ay9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgaXQgZnJvbSBcIi4vbG9jYWxlcy9pdC9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgc3YgZnJvbSBcIi4vbG9jYWxlcy9zdi9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgZmkgZnJvbSBcIi4vbG9jYWxlcy9maS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgdmkgZnJvbSBcIi4vbG9jYWxlcy92aS9pbmRleC5qc1wiO1xuZXhwb3J0IHsgZGUsIGZyLCBqYSwgcHQsIG5sLCB6aCwgcnUsIGVzLCB1aywgaXQsIHN2LCBmaSwgdmkgfTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBlbi5zdHJpY3Q7XG5leHBvcnQgY29uc3QgY2FzdWFsID0gZW4uY2FzdWFsO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLyoqXG4gKiBTeXN0w6htZSBkZSBsb2dnaW5nIHN0cnVjdHVyw6kgcG91ciBOYXR1cmFsIExhbmd1YWdlIERhdGVzXG4gKi9cblxuZXhwb3J0IHR5cGUgTG9nTGV2ZWwgPSAnZGVidWcnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2Vycm9yJztcblxuLyoqXG4gKiBGb3JtYXRlIHVuZSBlbnRyw6llIGRlIGxvZyBhdmVjIHRpbWVzdGFtcFxuICovXG5mdW5jdGlvbiBmb3JtYXRMb2dFbnRyeShsZXZlbDogTG9nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiBzdHJpbmcge1xuICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gIFxuICBpZiAoY29udGV4dCkge1xuICAgIHJldHVybiBgWyR7dGltZXN0YW1wfV0gWyR7bGV2ZWwudG9VcHBlckNhc2UoKX1dICR7bWVzc2FnZX0gfCBDb250ZXh0OiAke0pTT04uc3RyaW5naWZ5KGNvbnRleHQpfWA7XG4gIH1cbiAgcmV0dXJuIGBbJHt0aW1lc3RhbXB9XSBbJHtsZXZlbC50b1VwcGVyQ2FzZSgpfV0gJHttZXNzYWdlfWA7XG59XG5cbi8qKlxuICogU3lzdMOobWUgZGUgbG9nZ2luZyBzdHJ1Y3R1csOpXG4gKi9cbmV4cG9ydCBjb25zdCBsb2dnZXIgPSB7XG4gIC8qKlxuICAgKiBMb2cgZGUgbml2ZWF1IGRlYnVnIChwb3VyIGxlIGTDqXZlbG9wcGVtZW50KVxuICAgKi9cbiAgZGVidWcobWVzc2FnZTogc3RyaW5nLCBjb250ZXh0PzogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdExvZ0VudHJ5KCdkZWJ1ZycsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgIGNvbnNvbGUuZGVidWcoZm9ybWF0dGVkKTtcbiAgfSxcblxuICAvKipcbiAgICogTG9nIGRlIG5pdmVhdSBpbmZvIChpbmZvcm1hdGlvbnMgZ8OpbsOpcmFsZXMpXG4gICAqL1xuICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2dFbnRyeSgnaW5mbycsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgIGNvbnNvbGUuZGVidWcoZm9ybWF0dGVkKTtcbiAgfSxcblxuICAvKipcbiAgICogTG9nIGRlIG5pdmVhdSB3YXJuIChhdmVydGlzc2VtZW50cylcbiAgICovXG4gIHdhcm4obWVzc2FnZTogc3RyaW5nLCBjb250ZXh0PzogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdExvZ0VudHJ5KCd3YXJuJywgbWVzc2FnZSwgY29udGV4dCk7XG4gICAgY29uc29sZS53YXJuKGZvcm1hdHRlZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExvZyBkZSBuaXZlYXUgZXJyb3IgKGVycmV1cnMpXG4gICAqL1xuICBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TG9nRW50cnkoJ2Vycm9yJywgbWVzc2FnZSwgY29udGV4dCk7XG4gICAgY29uc29sZS5lcnJvcihmb3JtYXR0ZWQpO1xuICB9LFxufTtcblxuIiwiLy8gQ0hBTkdFTUVOVCBJQ0kgOiBPbiB1dGlsaXNlIFwiaW1wb3J0ICogYXMgY2hyb25vXCIgY2FyIGxhIHZlcnNpb24gMi54IG4nYSBwbHVzIGQnZXhwb3J0IHBhciBkw6lmYXV0XG5pbXBvcnQgKiBhcyBjaHJvbm8gZnJvbSBcImNocm9uby1ub2RlXCI7XG5pbXBvcnQgeyBDaHJvbm8sIFBhcnNlciwgUGFyc2luZ0NvbnRleHQsIFJlZmluZXIgfSBmcm9tIFwiY2hyb25vLW5vZGVcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sIGRlc2NyaWJlRXJyb3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2VyXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuL3dpbmRvdy1tb21lbnRcIjtcblxuLy8gTG9jYWwgdHlwZSBkZWZpbml0aW9uIG1hdGNoaW5nIGNocm9uby1ub2RlJ3MgQ29uZmlndXJhdGlvbiBpbnRlcmZhY2Vcbi8vIENvbmZpZ3VyYXRpb24gaXMgbm90IGV4cG9ydGVkIGZyb20gdGhlIG1haW4gbW9kdWxlLCBzbyB3ZSBkZWZpbmUgaXQgbG9jYWxseVxuaW50ZXJmYWNlIENocm9ub0NvbmZpZ3VyYXRpb24ge1xuICBwYXJzZXJzOiBQYXJzZXJbXTtcbiAgcmVmaW5lcnM6IFJlZmluZXJbXTtcbn1cblxuZnVuY3Rpb24gZ2V0T3JkaW5hbERhdGVQYXJzZXIoKSB7XG4gIHJldHVybiAoe1xuICAgIHBhdHRlcm46ICgpID0+IG5ldyBSZWdFeHAoT1JESU5BTF9OVU1CRVJfUEFUVEVSTiksXG4gICAgZXh0cmFjdDogKGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0LCBtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF5OiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoWzBdKSxcbiAgICAgICAgLy8gbW9tZW50KC4uLikubW9udGgoKSBpcyAwLWluZGV4ZWQgKEphbj0wKSwgYnV0IGNocm9uby1ub2RlJ3NcbiAgICAgICAgLy8gUGFyc2luZ0NvbXBvbmVudHMubW9udGggaXMgMS1pbmRleGVkIChKYW49MSkgLS0gdmVyaWZpZWQgYWdhaW5zdFxuICAgICAgICAvLyBjaHJvbm8tbm9kZSdzIG93biBsb2NhbGUgY29uc3RhbnRzLiBXaXRob3V0IHRoZSArMSB0aGlzIGFsd2F5c1xuICAgICAgICAvLyByZXNvbHZlZCB0byB0aGUgd3JvbmcgbW9udGggKGFuZCwgdmlhIGZvcndhcmREYXRlLCBzb21ldGltZXMgdGhlXG4gICAgICAgIC8vIHdyb25nIHllYXIgdG9vKS5cbiAgICAgICAgLy8gTXVzdCB1c2UgY29udGV4dC5yZWZEYXRlICh0aGUgZGF0ZSBjaHJvbm8gd2FzIGFza2VkIHRvIHBhcnNlXG4gICAgICAgIC8vIHJlbGF0aXZlIHRvKSwgbm90IG1vbWVudCgpICh0aGUgcmVhbCBjdXJyZW50IHdhbGwtY2xvY2sgdGltZSk6XG4gICAgICAgIC8vIGNhbGxlcnMgY2FuIGFuZCBkbyBwYXNzIGFuIGV4cGxpY2l0IHJlZmVyZW5jZSBkYXRlLCBlLmcuIHRlc3RzLCBvclxuICAgICAgICAvLyBnZXRQYXJzZWREYXRlUmVzdWx0KCkncyBjYWxsZXJzIGluIHBhcnNlci50cy5cbiAgICAgICAgbW9udGg6IG1vbWVudChjb250ZXh0LnJlZkRhdGUpLm1vbnRoKCkgKyAxLFxuICAgICAgfTtcbiAgICB9LFxuICB9IGFzIFBhcnNlcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENocm9ub3MobGFuZ3VhZ2VzOiBzdHJpbmdbXSk6IENocm9ub1tdIHtcbiAgY29uc3QgbG9jYWxlID0gbW9tZW50LmxvY2FsZSgpO1xuICBjb25zdCBpc0dCID0gbG9jYWxlID09PSAnZW4tZ2InO1xuXG4gIGNvbnN0IGNocm9ub3M6IENocm9ub1tdID0gW107XG4gIGNvbnN0IG9yZGluYWxEYXRlUGFyc2VyID0gZ2V0T3JkaW5hbERhdGVQYXJzZXIoKTtcbiAgLy8gQnVpbGRzIGEgQ2hyb25vIGluc3RhbmNlIGZvciBhIGxvY2FsZSBtb2R1bGUsIHN1cHBvcnRpbmcgYm90aCBjaHJvbm8tbm9kZVxuICAvLyBBUEkgc2hhcGVzOiBvbGRlciBsb2NhbGVzIHN0aWxsIGV4cG9zZSBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKGlzR0IpLFxuICAvLyBidXQgYXMgb2YgY2hyb25vLW5vZGUgMi54IHRoZSBcImVuXCIgbG9jYWxlIGluc3RlYWQgZXhwb3J0cyBwcmUtYnVpbHRcbiAgLy8gQ2hyb25vIGluc3RhbmNlcyAoY2FzdWFsL0dCL3N0cmljdCkgd2l0aCBubyBjb25maWcgZmFjdG9yeSBhdCBhbGwuIEFcbiAgLy8gbG9jYWxlIG1pc3NpbmcgYm90aCB3b3VsZCBwcmV2aW91c2x5IGJlIHNpbGVudGx5IHRyZWF0ZWQgYXMgdW5zdXBwb3J0ZWRcbiAgLy8gKGxvZ2dlZCBhdCBcIndhcm5cIiBvbmx5KSBhbmQgZXZlcnkgbWF0Y2ggZm9yIHRoYXQgbGFuZ3VhZ2Ugd291bGQgZmFsbFxuICAvLyB0aHJvdWdoIHRvIHRvZGF5L25vdyB3aXRoIG5vIHZpc2libGUgZXJyb3IgLS0gdGhpcyBoYXBwZW5lZCBmb3IgRW5nbGlzaFxuICAvLyBzcGVjaWZpY2FsbHksIGZvciBldmVyeSB1c2VyIHdobyBlbmFibGVkIGl0LCBzaW5jZSBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uXG4gIC8vIGlzIGV4YWN0bHkgd2hhdCBkaXNhcHBlYXJlZCBmcm9tIHRoYXQgbW9kdWxlLlxuICBjb25zdCBidWlsZENocm9ub0Zvck1vZHVsZSA9IChsYW5nTW9kdWxlOiB7XG4gICAgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbj86IChpc0dCOiBib29sZWFuKSA9PiB1bmtub3duO1xuICAgIGNhc3VhbD86IENocm9ubztcbiAgICBHQj86IENocm9ubztcbiAgfSB8IHVuZGVmaW5lZCk6IENocm9ubyB8IG51bGwgPT4ge1xuICAgIGlmICghbGFuZ01vZHVsZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKGxhbmdNb2R1bGUuY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbikge1xuICAgICAgY29uc3QgY29uZmlnID0gbGFuZ01vZHVsZS5jcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKGlzR0IpO1xuICAgICAgLy8gQ2hyb25vIGNvbnN0cnVjdG9yIGFjY2VwdHMgQ29uZmlndXJhdGlvbiB0eXBlIC0gY2FzdCBuZWVkZWQgYmVjYXVzZSBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uIHJldHVybnMgdW5rbm93blxuICAgICAgcmV0dXJuIG5ldyBDaHJvbm8oY29uZmlnIGFzIENocm9ub0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cbiAgICBpZiAobGFuZ01vZHVsZS5jYXN1YWwpIHtcbiAgICAgIC8vIENsb25lIHNvIHdlIGRvbid0IG11dGF0ZSBjaHJvbm8tbm9kZSdzIHNoYXJlZCBzaW5nbGV0b24gaW5zdGFuY2VcbiAgICAgIC8vIChtdWx0aXBsZSBOTERQYXJzZXIgaW5zdGFuY2VzIHdvdWxkIG90aGVyd2lzZSBhbGwgcHVzaCB0aGVpciBvd25cbiAgICAgIC8vIG9yZGluYWxEYXRlUGFyc2VyIG9udG8gdGhlIHNhbWUgc2hhcmVkIG9iamVjdCkuXG4gICAgICBjb25zdCBiYXNlID0gKGlzR0IgJiYgbGFuZ01vZHVsZS5HQikgPyBsYW5nTW9kdWxlLkdCIDogbGFuZ01vZHVsZS5jYXN1YWw7XG4gICAgICByZXR1cm4gYmFzZS5jbG9uZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBsYW5ndWFnZXMuZm9yRWFjaChsID0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gT24gYWNjw6hkZSBhdXggbGFuZ3VlcyBkeW5hbWlxdWVtZW50IHZpYSBSZWNvcmRcbiAgICAgIGNvbnN0IGxhbmdNb2R1bGUgPSAoY2hyb25vIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtsXSBhcyB7XG4gICAgICAgIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24/OiAoaXNHQjogYm9vbGVhbikgPT4gdW5rbm93bjtcbiAgICAgICAgY2FzdWFsPzogQ2hyb25vO1xuICAgICAgICBHQj86IENocm9ubztcbiAgICAgIH0gfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBjID0gYnVpbGRDaHJvbm9Gb3JNb2R1bGUobGFuZ01vZHVsZSk7XG4gICAgICBpZiAoIWMpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYExhbmd1YWdlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgY2hyb25vLW5vZGVgLCB7IGxhbmd1YWdlOiBsIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjLnBhcnNlcnMucHVzaChvcmRpbmFsRGF0ZVBhcnNlcik7XG4gICAgICBjaHJvbm9zLnB1c2goYyk7XG4gICAgICBsb2dnZXIuZGVidWcoXCJDaHJvbm8gaW5pdGlhbGl6ZWQgZm9yIGxhbmd1YWdlXCIsIHsgbGFuZ3VhZ2U6IGwgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGluaXRpYWxpemUgY2hyb25vIGZvciBsYW5ndWFnZWAsIHtcbiAgICAgICAgbGFuZ3VhZ2U6IGwsXG4gICAgICAgIGVycm9yOiBkZXNjcmliZUVycm9yKGVycm9yKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gU2kgYXVjdW5lIGxhbmd1ZSBuJ2EgcHUgw6p0cmUgaW5pdGlhbGlzw6llLCB1dGlsaXNlciBsJ2FuZ2xhaXMgcGFyIGTDqWZhdXRcbiAgaWYgKGNocm9ub3MubGVuZ3RoID09PSAwKSB7XG4gICAgbG9nZ2VyLndhcm4oJ05vIGxhbmd1YWdlcyBjb3VsZCBiZSBpbml0aWFsaXplZCwgYXR0ZW1wdGluZyBFbmdsaXNoIGZhbGxiYWNrJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVuTW9kdWxlID0gKGNocm9ubyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZW4gYXMge1xuICAgICAgICBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uPzogKGlzR0I6IGJvb2xlYW4pID0+IHVua25vd247XG4gICAgICAgIGNhc3VhbD86IENocm9ubztcbiAgICAgICAgR0I/OiBDaHJvbm87XG4gICAgICB9IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgYyA9IGJ1aWxkQ2hyb25vRm9yTW9kdWxlKGVuTW9kdWxlKTtcbiAgICAgIGlmIChjKSB7XG4gICAgICAgIGMucGFyc2Vycy5wdXNoKG9yZGluYWxEYXRlUGFyc2VyKTtcbiAgICAgICAgY2hyb25vcy5wdXNoKGMpO1xuICAgICAgICBsb2dnZXIuaW5mbygnRGVmYXVsdCBFbmdsaXNoIGNocm9ubyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRW5nbGlzaCBjaHJvbm8gbW9kdWxlIG5vdCBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZWZhdWx0IEVuZ2xpc2ggY2hyb25vJywge1xuICAgICAgICBlcnJvcjogZGVzY3JpYmVFcnJvcihlcnJvciksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hyb25vcztcbn0iLCJpbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiY2hyb25vLW5vZGVcIjtcbmltcG9ydCB0IGZyb20gXCIuL2xhbmcvaGVscGVyXCI7XG5cbi8qKlxuICogSW50ZXJmYWNlIHBvdXIgbGVzIGTDqXBlbmRhbmNlcyBuw6ljZXNzYWlyZXMgw6AgbGEgZMOpdGVjdGlvbiBkJ2hldXJlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGltZURldGVjdG9yRGVwZW5kZW5jaWVzIHtcbiAgbGFuZ3VhZ2VzOiBzdHJpbmdbXTtcbiAgY2hyb25vczogQ2hyb25vW107XG4gIHJlZ2V4UmVsYXRpdmU6IFJlZ0V4cDtcbiAgcmVnZXhSZWxhdGl2ZUNvbWJpbmVkOiBSZWdFeHA7XG4gIHJlZ2V4V2Vla2RheTogUmVnRXhwO1xuICByZWdleFdlZWtkYXlXaXRoVGltZTogUmVnRXhwO1xufVxuXG4vKipcbiAqIENsYXNzZSBwb3VyIGTDqXRlY3RlciBzaSB1biB0ZXh0ZSBjb250aWVudCB1bmUgY29tcG9zYW50ZSBkJ2hldXJlXG4gKi9cbmV4cG9ydCBjbGFzcyBUaW1lRGV0ZWN0b3Ige1xuICBwcml2YXRlIGxhbmd1YWdlczogc3RyaW5nW107XG4gIHByaXZhdGUgY2hyb25vczogQ2hyb25vW107XG4gIHByaXZhdGUgcmVnZXhSZWxhdGl2ZTogUmVnRXhwO1xuICBwcml2YXRlIHJlZ2V4UmVsYXRpdmVDb21iaW5lZDogUmVnRXhwO1xuICBwcml2YXRlIHJlZ2V4V2Vla2RheTogUmVnRXhwO1xuICBwcml2YXRlIHJlZ2V4V2Vla2RheVdpdGhUaW1lOiBSZWdFeHA7XG5cbiAgY29uc3RydWN0b3IoZGVwZW5kZW5jaWVzOiBUaW1lRGV0ZWN0b3JEZXBlbmRlbmNpZXMpIHtcbiAgICB0aGlzLmxhbmd1YWdlcyA9IGRlcGVuZGVuY2llcy5sYW5ndWFnZXM7XG4gICAgdGhpcy5jaHJvbm9zID0gZGVwZW5kZW5jaWVzLmNocm9ub3M7XG4gICAgdGhpcy5yZWdleFJlbGF0aXZlID0gZGVwZW5kZW5jaWVzLnJlZ2V4UmVsYXRpdmU7XG4gICAgdGhpcy5yZWdleFJlbGF0aXZlQ29tYmluZWQgPSBkZXBlbmRlbmNpZXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkO1xuICAgIHRoaXMucmVnZXhXZWVrZGF5ID0gZGVwZW5kZW5jaWVzLnJlZ2V4V2Vla2RheTtcbiAgICB0aGlzLnJlZ2V4V2Vla2RheVdpdGhUaW1lID0gZGVwZW5kZW5jaWVzLnJlZ2V4V2Vla2RheVdpdGhUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFbDqXJpZmllIHNpIGxlIHRleHRlIGNvbnRpZW50IHVuZSBjb21wb3NhbnRlIGQnaGV1cmVcbiAgICovXG4gIGhhc1RpbWVDb21wb25lbnQodGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gMS4gSWYgaXQncyBcIm5vd1wiIGluIGFueSBsYW5ndWFnZSwgWUVTLlxuICAgIC8vIFRyYW5zbGF0aW9ucyBjYW4gbGlzdCBzZXZlcmFsIHZhcmlhbnRzIHBpcGUtc2VwYXJhdGVkIChlLmcuIEl0YWxpYW5cbiAgICAvLyBcImFkZXNzb3xvcmFcIiwgQ2hpbmVzZSBcIuePvuWcqHznjrDlnKhcIik7IHNwbGl0IGVhY2ggbGFuZ3VhZ2UncyBcIm5vd1wiIGVudHJ5XG4gICAgLy8gZGlyZWN0bHkgaW5zdGVhZCBvZiB0cnlpbmcgdG8gbWF0Y2ggaW5kaXZpZHVhbCBpbW1lZGlhdGVLZXl3b3Jkc1xuICAgIC8vIGVudHJpZXMgKGFscmVhZHkgc3BsaXQsIGZvciBhbGwgb2Ygbm93L3RvZGF5L3RvbW9ycm93L3llc3RlcmRheVxuICAgIC8vIGNvbWJpbmVkKSBhZ2FpbnN0IHRoZSByYXcsIHVuc3BsaXQgdHJhbnNsYXRpb24gc3RyaW5nLCB3aGljaCBjb3VsZFxuICAgIC8vIG5ldmVyIGVxdWFsIGEgc2luZ2xlIGFscmVhZHktc3BsaXQgdmFyaWFudC5cbiAgICBjb25zdCBub3dXb3JkcyA9IHRoaXMubGFuZ3VhZ2VzLmZsYXRNYXAobGFuZyA9PlxuICAgICAgdCgnbm93JywgbGFuZykudG9Mb3dlckNhc2UoKS5zcGxpdCgnfCcpLm1hcCh3ID0+IHcudHJpbSgpKS5maWx0ZXIodyA9PiB3KVxuICAgICk7XG4gICAgLy8gRXhhY3QsIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggYWdhaW5zdCB0aGUgd2hvbGUgc3RyaW5nIC0tIG5vIG5lZWQgdG9cbiAgICAvLyBjb21waWxlIGEgUmVnRXhwIHBlciB3b3JkIHBlciBjYWxsIGZvciB0aGF0LCBhIHBsYWluIGxvd2VyY2FzZSArXG4gICAgLy8gaW5jbHVkZXMoKSBkb2VzIHRoZSBzYW1lIHRoaW5nIG1vcmUgc2ltcGx5IGFuZCBtb3JlIGNoZWFwbHkuXG4gICAgaWYgKG5vd1dvcmRzLmluY2x1ZGVzKHRleHQudG9Mb3dlckNhc2UoKS50cmltKCkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyAyLiBGaXJzdCBjaGVjayBjb21iaW5hdGlvbnMgXCJpbiBYIHdlZWtzIGFuZCBZIGRheXNcIlxuICAgIGNvbnN0IHJlbENvbWJpbmVkTWF0Y2ggPSB0ZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkKTtcbiAgICBpZiAocmVsQ29tYmluZWRNYXRjaCkge1xuICAgICAgICBjb25zdCB1bml0U3RyMSA9IHJlbENvbWJpbmVkTWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFN0cjIgPSByZWxDb21iaW5lZE1hdGNoWzRdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIC8vIElmIG9uZSBvZiB0aGUgdW5pdHMgaXMgaG91cnMgb3IgbWludXRlcyAtPiBZRVNcbiAgICAgICAgaWYgKHVuaXRTdHIxLnN0YXJ0c1dpdGgoJ2gnKSB8fCB1bml0U3RyMSA9PT0gJ20nIHx8IHVuaXRTdHIxLnN0YXJ0c1dpdGgoJ21pbicpIHx8XG4gICAgICAgICAgICB1bml0U3RyMi5zdGFydHNXaXRoKCdoJykgfHwgdW5pdFN0cjIgPT09ICdtJyB8fCB1bml0U3RyMi5zdGFydHNXaXRoKCdtaW4nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3RoZXJ3aXNlIC0+IE5PIChkYXlzLCB3ZWVrcywgbW9udGhzLCB5ZWFycylcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDMuIElmIGl0J3MgYSBzaW1wbGUgZGVsYXkgaW4gSE9VUlMgb3IgTUlOVVRFUyAtPiBZRVNcbiAgICBjb25zdCByZWxNYXRjaCA9IHRleHQubWF0Y2godGhpcy5yZWdleFJlbGF0aXZlKTtcbiAgICBpZiAocmVsTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdW5pdFN0ciA9IHJlbE1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIC8vIG0sIG1pbiwgbWludXRlcywgaCwgaG91cnMuLi5cbiAgICAgICAgaWYgKHVuaXRTdHIuc3RhcnRzV2l0aCgnaCcpIHx8IHVuaXRTdHIgPT09ICdtJyB8fCB1bml0U3RyLnN0YXJ0c1dpdGgoJ21pbicpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEYXlzLCBtb250aHMsIHllYXJzIC0+IE5PXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyA0LiBJZiBpdCdzIGEgc3BlY2lmaWMgZGF5IHdpdGggdGltZSAoTmV4dCBNb25kYXkgYXQgM3BtKSAtPiBZRVNcbiAgICBpZiAodGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSAmJiB0aGlzLnJlZ2V4V2Vla2RheVdpdGhUaW1lLnRlc3QodGV4dCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyA1LiBJZiBpdCdzIGEgc3BlY2lmaWMgZGF5IHdpdGhvdXQgdGltZSAoTmV4dCBNb25kYXkpIG9yIFRvbW9ycm93IC0+IE5PIChHZW5lcmFsbHkgd2UganVzdCB3YW50IHRoZSBkYXRlKVxuICAgIC8vIElmIHlvdSB3YW50IHRpbWUgZm9yIFwiVG9tb3Jyb3dcIiwgcmVtb3ZlIHRoZSBsaW5lcyBiZWxvdy5cbiAgICBpZiAodGhpcy5yZWdleFdlZWtkYXkudGVzdCh0ZXh0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayB0b2RheS90b21vcnJvdy95ZXN0ZXJkYXkga2V5d29yZHMgaW4gYWxsIGxhbmd1YWdlc1xuICAgIGNvbnN0IGRhdGVLZXl3b3JkcyA9IFsndG9kYXknLCAndG9tb3Jyb3cnLCAneWVzdGVyZGF5J107XG4gICAgY29uc3QgZGF0ZVdvcmRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGRhdGVLZXl3b3Jkcykge1xuICAgICAgZm9yIChjb25zdCBsYW5nIG9mIHRoaXMubGFuZ3VhZ2VzKSB7XG4gICAgICAgIC8vIHQoKSBhbHdheXMgZmFsbHMgYmFjayB0byBFbmdsaXNoIChsYW5nL2hlbHBlci50cyksIGFuZCBlbi50c1xuICAgICAgICAvLyBhbHdheXMgZGVmaW5lcyB0b2RheS90b21vcnJvdy95ZXN0ZXJkYXksIHNvIHRoaXMgZ3VhcmQgY2FuJ3RcbiAgICAgICAgLy8gYWN0dWFsbHkgYmUgZmFsc2UgZm9yIHRoZXNlIHRocmVlIGtleXMgLS0ga2VwdCBmb3Igc2FmZXR5IGluIGNhc2VcbiAgICAgICAgLy8gdGhhdCBpbnZhcmlhbnQgZXZlciBjaGFuZ2VzLlxuICAgICAgICBjb25zdCB3b3JkID0gdChrZXksIGxhbmcpO1xuICAgICAgICBpZiAod29yZCAmJiB3b3JkICE9PSBcIk5PVEZPVU5EXCIpIHtcbiAgICAgICAgICBkYXRlV29yZHMucHVzaCh3b3JkLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRlV29yZHMuc29tZSh3ID0+IG5ldyBSZWdFeHAoYF4ke3cucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKX0kYCwgJ2knKS50ZXN0KHRleHQpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDYuIE90aGVyd2lzZSwgYXNrIHRoZSBsaWJyYXJ5IGlmIGl0IHNlZXMgYW4gZXhwbGljaXQgdGltZSAoZXg6IFwiVG9tb3Jyb3cgYXQgNXBtXCIpXG4gICAgaWYgKCF0aGlzLmNocm9ub3MpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hyb25vcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkUmVzdWx0ID0gYy5wYXJzZSh0ZXh0KTtcbiAgICAgICAgaWYgKHBhcnNlZFJlc3VsdCAmJiBwYXJzZWRSZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFyc2VkUmVzdWx0WzBdLnN0YXJ0O1xuICAgICAgICAgIGlmIChzdGFydCAmJiAoc3RhcnQuaXNDZXJ0YWluKFwiaG91clwiKSB8fCBzdGFydC5pc0NlcnRhaW4oXCJtaW51dGVcIikpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmUgcGFyc2luZyBlcnJvcnNcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbiIsIi8qKlxuICogSW1wbMOpbWVudGF0aW9uIGQndW4gY2FjaGUgTFJVIChMZWFzdCBSZWNlbnRseSBVc2VkKSBhdmVjIGxpbWl0ZSBkZSB0YWlsbGVcbiAqIFV0aWxpc8OpIHBvdXIgbGltaXRlciBsYSBtw6ltb2lyZSB1dGlsaXPDqWUgcGFyIGxlcyBjYWNoZXNcbiAqL1xuZXhwb3J0IGNsYXNzIExSVUNhY2hlPEssIFY+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXhTaXplOiBudW1iZXI7XG4gIHByaXZhdGUgY2FjaGU6IE1hcDxLLCBWPjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBMUlUgY2FjaGUgd2l0aCB0aGUgc3BlY2lmaWVkIG1heGltdW0gc2l6ZVxuICAgKiBcbiAgICogQHBhcmFtIG1heFNpemUgLSBNYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0byBzdG9yZSBpbiB0aGUgY2FjaGUgKGRlZmF1bHQ6IDUwMClcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1heFNpemUgPSA1MDApIHtcbiAgICBpZiAobWF4U2l6ZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMUlUgQ2FjaGUgbWF4U2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXCIpO1xuICAgIH1cbiAgICB0aGlzLm1heFNpemUgPSBtYXhTaXplO1xuICAgIHRoaXMuY2FjaGUgPSBuZXcgTWFwPEssIFY+KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEga2V5IGV4aXN0cyBpbiB0aGUgY2FjaGVcbiAgICogVsOpcmlmaWUgc2kgdW5lIGNsw6kgZXhpc3RlIGRhbnMgbGUgY2FjaGVcbiAgICogXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGtleSBleGlzdHMsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaGFzKGtleTogSyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmhhcyhrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbnQgdW5lIHZhbGV1ciBkdSBjYWNoZSBldCBsYSBtYXJxdWUgY29tbWUgcsOpY2VtbWVudCB1dGlsaXPDqWVcbiAgICogR2V0cyBhIHZhbHVlIGZyb20gdGhlIGNhY2hlIGJ5IGtleVxuICAgKiBJZiB0aGUga2V5IGV4aXN0cywgaXQgaXMgbW92ZWQgdG8gdGhlIGVuZCAobW9zdCByZWNlbnRseSB1c2VkKVxuICAgKiBcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdG8gcmV0cmlldmVcbiAgICogQHJldHVybnMgVGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAqL1xuICBnZXQoa2V5OiBLKTogViB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBEw6lwbGFjZXIgbGEgY2zDqSDDoCBsYSBmaW4gKG1vc3QgcmVjZW50bHkgdXNlZClcbiAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7XG4gICAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFqb3V0ZSBvdSBtZXQgw6Agam91ciB1bmUgdmFsZXVyIGRhbnMgbGUgY2FjaGVcbiAgICogU2V0cyBhIHZhbHVlIGluIHRoZSBjYWNoZVxuICAgKiBJZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzLCBpdCBpcyB1cGRhdGVkIGFuZCBtb3ZlZCB0byB0aGUgZW5kXG4gICAqIFNpIGxhIHRhaWxsZSBtYXhpbWFsZSBlc3QgYXR0ZWludGUsIHN1cHByaW1lIGwnZW50csOpZSBsYSBtb2lucyByw6ljZW1tZW50IHV0aWxpc8OpZVxuICAgKiBcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdG8gc2V0XG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzdG9yZVxuICAgKi9cbiAgc2V0KGtleTogSywgdmFsdWU6IFYpOiB2b2lkIHtcbiAgICAvLyBTaSBsYSBjbMOpIGV4aXN0ZSBkw6lqw6AsIGxhIHN1cHByaW1lciBkJ2Fib3JkIHBvdXIgbGEgZMOpcGxhY2VyIMOgIGxhIGZpblxuICAgIGlmICh0aGlzLmNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jYWNoZS5zaXplID49IHRoaXMubWF4U2l6ZSkge1xuICAgICAgLy8gU3VwcHJpbWVyIGwnZW50csOpZSBsYSBtb2lucyByw6ljZW1tZW50IHV0aWxpc8OpZSAocHJlbWnDqHJlIGVudHLDqWUpXG4gICAgICAvLyBNYXAgaXRlcmF0b3IncyBJdGVyYXRvclJlc3VsdC52YWx1ZSB0eXBlIGRlZmF1bHRzIHRvIFwiVCB8IGFueVwiICh0aGVcbiAgICAgIC8vIHJldHVybi1wb3NpdGlvbiB0eXBlIHBhcmFtIGRlZmF1bHRzIHRvIGFueSksIHdoaWNoIFRTIGNvbGxhcHNlcyB0b1xuICAgICAgLy8gYW55IC0tIGNhc3QgZXhwbGljaXRseSByYXRoZXIgdGhhbiBqdXN0IGFubm90YXRpbmcgdGhlIHZhcmlhYmxlLlxuICAgICAgY29uc3QgZmlyc3RLZXkgPSB0aGlzLmNhY2hlLmtleXMoKS5uZXh0KCkudmFsdWUgYXMgSyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChmaXJzdEtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGZpcnN0S2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQWpvdXRlciBsYSBub3V2ZWxsZSBlbnRyw6llIMOgIGxhIGZpblxuICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1cHByaW1lIHVuZSBlbnRyw6llIGR1IGNhY2hlXG4gICAqIERlbGV0ZXMgYW4gZW50cnkgZnJvbSB0aGUgY2FjaGVcbiAgICogXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIGRlbGV0ZVxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBrZXkgd2FzIGRlbGV0ZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgZGVsZXRlKGtleTogSyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpZGUgY29tcGzDqHRlbWVudCBsZSBjYWNoZVxuICAgKiBDbGVhcnMgYWxsIGVudHJpZXMgZnJvbSB0aGUgY2FjaGVcbiAgICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRvdXJuZSBsYSB0YWlsbGUgYWN0dWVsbGUgZHUgY2FjaGVcbiAgICogR2V0cyB0aGUgY3VycmVudCBzaXplIG9mIHRoZSBjYWNoZVxuICAgKiBcbiAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgY2FjaGVcbiAgICovXG4gIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRvdXJuZSBsYSB0YWlsbGUgbWF4aW1hbGUgZHUgY2FjaGVcbiAgICogR2V0cyB0aGUgbWF4aW11bSBzaXplIGxpbWl0IG9mIHRoZSBjYWNoZVxuICAgKiBcbiAgICogQHJldHVybnMgVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIHN0b3JlZFxuICAgKi9cbiAgZ2V0IG1heFNpemVMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm1heFNpemU7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgdW4gaXTDqXJhdGV1ciBzdXIgdG91dGVzIGxlcyBlbnRyw6llcyBkdSBjYWNoZVxuICAgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG92ZXIgYWxsIGVudHJpZXMgaW4gdGhlIGNhY2hlXG4gICAqIFV0aWxlIHBvdXIgbGUgbmV0dG95YWdlIHDDqXJpb2RpcXVlXG4gICAqIFVzZWZ1bCBmb3IgcGVyaW9kaWMgY2xlYW51cFxuICAgKiBcbiAgICogQHJldHVybnMgSXRlcmF0b3Igb3ZlciBba2V5LCB2YWx1ZV0gcGFpcnNcbiAgICovXG4gIGVudHJpZXMoKTogSXRlcmFibGVJdGVyYXRvcjxbSywgVl0+IHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5lbnRyaWVzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgdW4gaXTDqXJhdGV1ciBzdXIgdG91dGVzIGxlcyBjbMOpcyBkdSBjYWNoZVxuICAgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIG92ZXIgYWxsIGtleXMgaW4gdGhlIGNhY2hlXG4gICAqIFxuICAgKiBAcmV0dXJucyBJdGVyYXRvciBvdmVyIGtleXNcbiAgICovXG4gIGtleXMoKTogSXRlcmFibGVJdGVyYXRvcjxLPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUua2V5cygpO1xuICB9XG59XG5cbiIsImltcG9ydCB7IENocm9ubywgUGFyc2VkUmVzdWx0LCBQYXJzaW5nT3B0aW9uIH0gZnJvbSBcImNocm9uby1ub2RlXCI7XG5pbXBvcnQgZ2V0Q2hyb25vcyBmcm9tIFwiLi9jaHJvbm9cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dlclwiO1xuaW1wb3J0IHsgVGltZURldGVjdG9yIH0gZnJvbSBcIi4vdGltZS1kZXRlY3RvclwiO1xuaW1wb3J0IHsgTFJVQ2FjaGUgfSBmcm9tIFwiLi9scnUtY2FjaGVcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9uQ29sbGVjdG9yIH0gZnJvbSBcIi4vdHJhbnNsYXRpb24tY29sbGVjdG9yXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuL3dpbmRvdy1tb21lbnRcIjtcblxuaW1wb3J0IHsgRGF5T2ZXZWVrIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7XG4gIGdldExvY2FsZVdlZWtTdGFydCxcbiAgZ2V0V2Vla051bWJlcixcbiAgT1JESU5BTF9OVU1CRVJfUEFUVEVSTixcbiAgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgZGVzY3JpYmVFcnJvcixcbn0gZnJvbSBcIi4vdXRpbHNcIjtcblxuXG4vLyBUeXBlIGFsaWFzIGZvciBNb21lbnQgZnJvbSB0aGUgbW9tZW50IGxpYnJhcnkgYnVuZGxlZCB3aXRoIE9ic2lkaWFuXG4vLyBVc2luZyB0aGUgdHlwZSBmcm9tIHRoZSBtb21lbnQgbGlicmFyeSB0eXBlcyBzaW5jZSBtb21lbnQgaXMgYnVuZGxlZCB3aXRoIE9ic2lkaWFuXG4vLyBUaGUgbW9tZW50IHBhY2thZ2UgaXMgYnVuZGxlZCB3aXRoIE9ic2lkaWFuLCBidXQgdGhlIE1vbWVudCB0eXBlIGlzIG5vdCBleHBvcnRlZCBmcm9tIG9ic2lkaWFuIG1vZHVsZVxudHlwZSBNb21lbnQgPSBpbXBvcnQoXCJtb21lbnRcIikuTW9tZW50O1xuXG50eXBlIFRpbWVVbml0ID0gJ21pbnV0ZXMnIHwgJ2hvdXJzJyB8ICdkYXlzJyB8ICd3ZWVrcycgfCAnbW9udGhzJyB8ICd5ZWFycyc7XG5cbi8qKlxuICogUmVzdWx0IG9iamVjdCByZXR1cm5lZCBieSBkYXRlIHBhcnNpbmcgbWV0aG9kcy5cbiAqIENvbnRhaW5zIHRoZSBwYXJzZWQgZGF0ZSBpbiBtdWx0aXBsZSBmb3JtYXRzIGZvciBjb252ZW5pZW5jZS5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc3VsdCA9IHBsdWdpbi5wYXJzZURhdGUoXCJ0b21vcnJvd1wiKTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb3JtYXR0ZWRTdHJpbmcpOyAvLyBcIjIwMjUtMDEtMDZcIlxuICogY29uc29sZS5sb2cocmVzdWx0LmRhdGUpOyAvLyBEYXRlIG9iamVjdFxuICogY29uc29sZS5sb2cocmVzdWx0Lm1vbWVudC5mb3JtYXQoXCJkZGRkXCIpKTsgLy8gXCJNb25kYXlcIlxuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTkxEUmVzdWx0IHtcbiAgLyoqIEZvcm1hdHRlZCBkYXRlIHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQgKi9cbiAgZm9ybWF0dGVkU3RyaW5nOiBzdHJpbmc7XG4gIC8qKiBOYXRpdmUgSmF2YVNjcmlwdCBEYXRlIG9iamVjdCAqL1xuICBkYXRlOiBEYXRlO1xuICAvKiogTW9tZW50LmpzIG9iamVjdCBmb3IgYWR2YW5jZWQgZGF0ZSBtYW5pcHVsYXRpb24gKi9cbiAgbW9tZW50OiBNb21lbnQ7XG59XG5cbi8qKlxuICogUmVzdWx0IG9iamVjdCByZXR1cm5lZCBieSBkYXRlIHJhbmdlIHBhcnNpbmcgbWV0aG9kcy5cbiAqIENvbnRhaW5zIHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzIG9mIGEgcGFyc2VkIHJhbmdlLCBwbHVzIGEgbGlzdCBvZiBhbGwgZGF0ZXMgaW4gdGhlIHJhbmdlLlxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmFuZ2UgPSBwbHVnaW4ucGFyc2VEYXRlUmFuZ2UoXCJmcm9tIE1vbmRheSB0byBGcmlkYXlcIik7XG4gKiBpZiAocmFuZ2UpIHtcbiAqICAgY29uc29sZS5sb2cocmFuZ2Uuc3RhcnREYXRlKTsgLy8gRGF0ZSBvYmplY3QgZm9yIE1vbmRheVxuICogICBjb25zb2xlLmxvZyhyYW5nZS5lbmREYXRlKTsgLy8gRGF0ZSBvYmplY3QgZm9yIEZyaWRheVxuICogICBjb25zb2xlLmxvZyhyYW5nZS5kYXRlTGlzdD8ubGVuZ3RoKTsgLy8gNSAoTW9uZGF5IHRocm91Z2ggRnJpZGF5KVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTkxEUmFuZ2VSZXN1bHQge1xuICAvKiogRm9ybWF0dGVkIHJhbmdlIHN0cmluZyAoZS5nLiwgXCIyMDI1LTAxLTA2IHRvIDIwMjUtMDEtMTBcIikgKi9cbiAgZm9ybWF0dGVkU3RyaW5nOiBzdHJpbmc7XG4gIC8qKiBTdGFydCBkYXRlIG9mIHRoZSByYW5nZSBhcyBhIG5hdGl2ZSBEYXRlIG9iamVjdCAqL1xuICBzdGFydERhdGU6IERhdGU7XG4gIC8qKiBFbmQgZGF0ZSBvZiB0aGUgcmFuZ2UgYXMgYSBuYXRpdmUgRGF0ZSBvYmplY3QgKi9cbiAgZW5kRGF0ZTogRGF0ZTtcbiAgLyoqIFN0YXJ0IGRhdGUgYXMgYSBNb21lbnQuanMgb2JqZWN0ICovXG4gIHN0YXJ0TW9tZW50OiBNb21lbnQ7XG4gIC8qKiBFbmQgZGF0ZSBhcyBhIE1vbWVudC5qcyBvYmplY3QgKi9cbiAgZW5kTW9tZW50OiBNb21lbnQ7XG4gIC8qKiBBbHdheXMgdHJ1ZSBmb3IgcmFuZ2UgcmVzdWx0cyAqL1xuICBpc1JhbmdlOiB0cnVlO1xuICAvKiogT3B0aW9uYWwgbGlzdCBvZiBhbGwgZGF0ZXMgaW4gdGhlIHJhbmdlIGFzIE1vbWVudCBvYmplY3RzICovXG4gIGRhdGVMaXN0PzogTW9tZW50W107XG4gIC8qKlxuICAgKiBTZXQgdG8gXCJ3ZWVrXCIgd2hlbiB0aGlzIHJhbmdlIHJlcHJlc2VudHMgYSB3aG9sZS13ZWVrIHBlcmlvZCByZWZlcmVuY2VcbiAgICogKGUuZy4gXCJuZXh0IHdlZWtcIiksIGFzIG9wcG9zZWQgdG8gYW4gZXhwbGljaXQgd2Vla2RheS10by13ZWVrZGF5IHJhbmdlXG4gICAqIChlLmcuIFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCIpLiBDYWxsZXJzIHRoYXQgb2ZmZXIgYSBwZXJpb2RpYy1ub3RlLXN0eWxlXG4gICAqIHdlZWsgZm9ybWF0IHVzZSB0aGlzIHRvIHRlbGwgdGhlIHR3byBhcGFydCAtLSBhbiBleHBsaWNpdCByYW5nZSBzaG91bGRcbiAgICogbmV2ZXIgY29sbGFwc2UgaW50byBhIHNpbmdsZSB3ZWVrLW5vdGUgbGluaywgYnV0IGEgcGVyaW9kIHJlZmVyZW5jZSBjYW4uXG4gICAqL1xuICBncmFudWxhcml0eT86IFwid2Vla1wiO1xufVxuXG4vKipcbiAqIFRoZSBjYWxlbmRhciBncmFudWxhcml0eSBhIHBhcnNlZCBleHByZXNzaW9uIHJlc29sdmVzIHRvLiBcImRheVwiIGlzIHRoZVxuICogZGVmYXVsdCBmb3IgYW55dGhpbmcgdGhhdCBpc24ndCBhIHdob2xlLXBlcmlvZCByZWZlcmVuY2UgKGEgc2luZ2xlIGRhdGUsXG4gKiBhIHdlZWtkYXksIGEgdGltZSwgZXRjKS5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0ZUdyYW51bGFyaXR5ID0gXCJkYXlcIiB8IFwid2Vla1wiIHwgXCJtb250aFwiIHwgXCJxdWFydGVyXCIgfCBcInllYXJcIjtcblxuLyoqXG4gKiBSZXN1bHQgb2Yge0BsaW5rIE5MRFBhcnNlci5nZXRQYXJzZWRQZXJpb2R9OiBhIHJlc29sdmVkIGRhdGUgcGx1cyB0aGVcbiAqIGNhbGVuZGFyIGdyYW51bGFyaXR5IHRoZSBpbnB1dCBleHByZXNzaW9uIHJlZmVycmVkIHRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5MRFBlcmlvZFJlc3VsdCB7XG4gIC8qKiBBIGRhdGUgdGhhdCBmYWxscyB3aXRoaW4gdGhlIHJlc29sdmVkIHBlcmlvZCAoZS5nLiBhbnkgZGF5IG9mIHRoZSB0YXJnZXQgd2VlaykuICovXG4gIGRhdGU6IERhdGU7XG4gIC8qKiBUaGUgY2FsZW5kYXIgZ3JhbnVsYXJpdHkgZGV0ZWN0ZWQgZnJvbSB0aGUgaW5wdXQgdGV4dC4gKi9cbiAgZ3JhbnVsYXJpdHk6IERhdGVHcmFudWxhcml0eTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxEUGFyc2VyIHtcbiAgY2hyb25vczogQ2hyb25vW107XG4gIGxhbmd1YWdlczogc3RyaW5nW107XG4gIFxuICAvLyBEeW5hbWljIHJlZ2V4IGdlbmVyYXRlZCBmcm9tIHRyYW5zbGF0aW9uc1xuICByZWdleFJlbGF0aXZlOiBSZWdFeHA7XG4gIHJlZ2V4UmVsYXRpdmVDb21iaW5lZDogUmVnRXhwOyAvLyBGb3IgXCJpbiAyIHdlZWtzIGFuZCAzIGRheXNcIlxuICByZWdleFdlZWtkYXk6IFJlZ0V4cDtcbiAgcmVnZXhXZWVrZGF5V2l0aFRpbWU6IFJlZ0V4cDsgLy8gRm9yIFwibmV4dCBNb25kYXkgYXQgM3BtXCJcbiAgcmVnZXhXZWVrZGF5T25seTogUmVnRXhwOyAvLyBGb3IgXCJ3ZWRuZXNkYXlcIiAod2l0aG91dCBwcmVmaXgpXG4gIHJlZ2V4RGF0ZVJhbmdlOiBSZWdFeHA7IC8vIEZvciBcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiXG4gIHJlZ2V4T3JkaW5hbE9mTW9udGg6IFJlZ0V4cDsgLy8gRm9yIFwidGhlIDE1dGggb2YgbmV4dCBtb250aFwiXG4gIHJlZ2V4TGFzdERheU9mTW9udGg6IFJlZ0V4cDsgLy8gRm9yIFwibGFzdCBkYXkgb2YgbW9udGhcIlxuICByZWdleFdlZWtkYXlPZk1vbnRoOiBSZWdFeHA7IC8vIEZvciBcImZpcnN0IE1vbmRheSBvZiBtb250aFwiXG4gIC8vIEZvciBzdWZmaXggbGFuZ3VhZ2VzIHRoYXQgcHV0IHRoZSBxdWFudGlmaWVyL3VuaXQgYmVmb3JlIHRoZSBcImxhdGVyXCIgbWFya2VyXG4gIC8vIGluc3RlYWQgb2YgYW4gXCJpblwiIHByZWZpeCAoZS5nLiBDaGluZXNlIFwiMuWkqeW+jFwiID0gXCIyIGRheXNcIiArIFwi5b6MXCIgPSBcImxhdGVyXCIpLlxuICByZWdleFJlbGF0aXZlU3VmZml4OiBSZWdFeHAgfCBudWxsO1xuICByZWdleFJlbGF0aXZlQ29tYmluZWRTdWZmaXg6IFJlZ0V4cCB8IG51bGw7IC8vIEZvciBcIjLpgLHlkowz5aSp5b6MXCIgKDIgd2Vla3MgYW5kIDMgZGF5cyBsYXRlcilcbiAgLy8gTWlycm9yIG9mIHJlZ2V4UmVsYXRpdmVTdWZmaXggZm9yIHRoZSBQQVNUIGRpcmVjdGlvbiAoZS5nLiBQb3J0dWd1ZXNlXG4gIC8vIFwiMyBkaWFzIGF0csOhc1wiID0gXCIzIGRheXNcIiArIFwiYXRyw6FzXCIgPSBcImFnb1wiKS5cbiAgcmVnZXhBZ29TdWZmaXg6IFJlZ0V4cCB8IG51bGw7XG5cbiAgLy8gRm9yIFwidGhpcy9uZXh0L2xhc3Qgd2Vla3xtb250aHxxdWFydGVyfHllYXJcIiAocGVyaW9kLWdyYW51bGFyaXR5IHNob3J0Y3V0cykuXG4gIHJlZ2V4UGVyaW9kUHJlZml4OiBSZWdFeHA7XG4gIC8vIE1pcnJvciBvZiByZWdleFBlcmlvZFByZWZpeCBmb3IgbGFuZ3VhZ2VzIHRoYXQgcG9zdHBvc2UgdGhlIHByZWZpeFxuICAvLyAoZS5nLiBGcmVuY2ggXCJsZSB0cmltZXN0cmUgcHJvY2hhaW5cIiwgbm91biBiZWZvcmUgXCJwcm9jaGFpblwiKS5cbiAgcmVnZXhQZXJpb2RTdWZmaXg6IFJlZ0V4cDtcbiAgLy8gTGFuZ3VhZ2UtbmV1dHJhbCBleHBsaWNpdCBmb3JtczogXCJRM1wiLCBcIlEzIDIwMjZcIiwgXCIyMDI2IFEzXCIsIFwiMjAyNi1RM1wiLlxuICByZWdleFF1YXJ0ZXJFeHBsaWNpdDogUmVnRXhwO1xuICByZWdleFF1YXJ0ZXJFeHBsaWNpdFllYXJGaXJzdDogUmVnRXhwO1xuICAvLyBMYW5ndWFnZS1uZXV0cmFsIGV4cGxpY2l0IElTTyB3ZWVrOiBcIjIwMjYtVzAyXCIuXG4gIHJlZ2V4V2Vla0V4cGxpY2l0OiBSZWdFeHA7XG5cbiAgLy8gS2V5d29yZHMgZm9yIGFsbCBsYW5ndWFnZXNcbiAgaW1tZWRpYXRlS2V5d29yZHM6IFNldDxzdHJpbmc+O1xuICBwcmVmaXhLZXl3b3JkczogeyB0aGlzOiBTZXQ8c3RyaW5nPjsgbmV4dDogU2V0PHN0cmluZz47IGxhc3Q6IFNldDxzdHJpbmc+IH07XG4gIHRpbWVVbml0TWFwOiBNYXA8c3RyaW5nLCBUaW1lVW5pdD47XG4gIC8vIFBlci1sYW5ndWFnZSB3b3JkIHNldHMgZm9yIHBlcmlvZC1ncmFudWxhcml0eSBkZXRlY3Rpb24gKHdlZWsvbW9udGgvcXVhcnRlci95ZWFyKSxcbiAgLy8gc2VwYXJhdGUgZnJvbSB0aW1lVW5pdE1hcCBzaW5jZSBcImluIDIgcXVhcnRlcnNcIi1zdHlsZSByZWxhdGl2ZSBkdXJhdGlvbnMgYXJlbid0IHN1cHBvcnRlZC5cbiAgcGVyaW9kV29yZHM6IHsgd2VlazogU2V0PHN0cmluZz47IG1vbnRoOiBTZXQ8c3RyaW5nPjsgcXVhcnRlcjogU2V0PHN0cmluZz47IHllYXI6IFNldDxzdHJpbmc+IH07XG4gIFxuICAvLyBDYWNoZSBmb3IgcGFyc2VkIGRhdGVzIChMUlUgYXZlYyBsaW1pdGUgZGUgNTAwIGVudHLDqWVzKVxuICBwcml2YXRlIGNhY2hlOiBMUlVDYWNoZTxzdHJpbmcsIERhdGU+O1xuICBwcml2YXRlIGNhY2hlRGF5OiBudW1iZXI7IC8vIERheSBvZiB5ZWFyIGZvciBjYWNoZSBpbnZhbGlkYXRpb25cbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfQ0FDSEVfU0laRSA9IDUwMDtcbiAgXG4gIC8vIENvbGxlY3RzL2NhY2hlcyB0cmFuc2xhdGlvbnMgYWNyb3NzIGFsbCBhY3RpdmUgbGFuZ3VhZ2VzIGFuZCBidWlsZHNcbiAgLy8gcmVnZXggYWx0ZXJuYXRpb25zIGZyb20gdGhlbSAoc2VlIHRyYW5zbGF0aW9uLWNvbGxlY3Rvci50cylcbiAgcHJpdmF0ZSB0YzogVHJhbnNsYXRpb25Db2xsZWN0b3I7XG5cbiAgLy8gVGltZSBkZXRlY3RvclxuICBwcml2YXRlIHRpbWVEZXRlY3RvcjogVGltZURldGVjdG9yO1xuXG4gIGNvbnN0cnVjdG9yKGxhbmd1YWdlczogc3RyaW5nW10pIHtcbiAgICB0aGlzLmxhbmd1YWdlcyA9IGxhbmd1YWdlcztcbiAgICB0aGlzLmNocm9ub3MgPSBnZXRDaHJvbm9zKGxhbmd1YWdlcyk7XG4gICAgdGhpcy50YyA9IG5ldyBUcmFuc2xhdGlvbkNvbGxlY3RvcihsYW5ndWFnZXMpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVJlZ2V4KCk7XG4gICAgdGhpcy5pbml0aWFsaXplS2V5d29yZHMoKTtcbiAgICB0aGlzLmNhY2hlID0gbmV3IExSVUNhY2hlPHN0cmluZywgRGF0ZT4odGhpcy5NQVhfQ0FDSEVfU0laRSk7XG4gICAgdGhpcy5jYWNoZURheSA9IHRoaXMuZ2V0RGF5T2ZZZWFyKCk7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSB0aW1lIGRldGVjdG9yXG4gICAgdGhpcy50aW1lRGV0ZWN0b3IgPSBuZXcgVGltZURldGVjdG9yKHtcbiAgICAgIGxhbmd1YWdlczogdGhpcy5sYW5ndWFnZXMsXG4gICAgICBjaHJvbm9zOiB0aGlzLmNocm9ub3MsXG4gICAgICByZWdleFJlbGF0aXZlOiB0aGlzLnJlZ2V4UmVsYXRpdmUsXG4gICAgICByZWdleFJlbGF0aXZlQ29tYmluZWQ6IHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkLFxuICAgICAgcmVnZXhXZWVrZGF5OiB0aGlzLnJlZ2V4V2Vla2RheSxcbiAgICAgIHJlZ2V4V2Vla2RheVdpdGhUaW1lOiB0aGlzLnJlZ2V4V2Vla2RheVdpdGhUaW1lLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gSW5pdGlhbGl6ZXMgZHluYW1pYyByZWdleCBmcm9tIHRyYW5zbGF0aW9uc1xuICBwcml2YXRlIGluaXRpYWxpemVSZWdleCgpOiB2b2lkIHtcbiAgICBjb25zdCBpbldvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoXCJpblwiKTtcbiAgICBjb25zdCBuZXh0V29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcIm5leHRcIik7XG4gICAgY29uc3QgbGFzdFdvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoXCJsYXN0XCIpO1xuICAgIGNvbnN0IHRoaXNXb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwidGhpc1wiKTtcbiAgICBjb25zdCBhbmRXb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwiYW5kXCIpO1xuICAgIGNvbnN0IGF0V29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImF0XCIpO1xuICAgIGNvbnN0IGZyb21Xb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwiZnJvbVwiKTtcbiAgICBjb25zdCB0b1dvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoXCJ0b1wiKTtcblxuICAgIC8vIENvbGxlY3Qgd2Vla2RheXMgKGxvd2VyY2FzZWQpIGFjcm9zcyBhbGwgbGFuZ3VhZ2VzLCBwbHVzIHRoZSBjb21tb25cbiAgICAvLyBFbmdsaXNoIGFiYnJldmlhdGlvbnMgKG1vbi90dWUvLi4uKSB3aGljaCBhcmVuJ3QgcGFydCBvZiB0aGUgZGljdGlvbmFyeS5cbiAgICBjb25zdCB3ZWVrZGF5S2V5cyA9IFsnc3VuZGF5JywgJ21vbmRheScsICd0dWVzZGF5JywgJ3dlZG5lc2RheScsICd0aHVyc2RheScsICdmcmlkYXknLCAnc2F0dXJkYXknXTtcbiAgICBjb25zdCB3ZWVrZGF5cyA9IHdlZWtkYXlLZXlzLmZsYXRNYXAoa2V5ID0+IHRoaXMudGMuY29sbGVjdFdvcmRzKGtleSwgeyBsb3dlcmNhc2U6IHRydWUgfSkpO1xuICAgIGlmICh0aGlzLmxhbmd1YWdlcy5pbmNsdWRlcygnZW4nKSkge1xuICAgICAgd2Vla2RheXMucHVzaCgnbW9uJywgJ3R1ZScsICd3ZWQnLCAndGh1JywgJ2ZyaScsICdzYXQnLCAnc3VuJyk7XG4gICAgfVxuXG4gICAgLy8gQ29sbGVjdCB0aW1lIHVuaXRzIChtaW51dGUvaG91ci9kYXkvd2Vlay9tb250aC95ZWFyKSBhY3Jvc3MgYWxsIGxhbmd1YWdlc1xuICAgIGNvbnN0IHRpbWVVbml0S2V5cyA9IFsnbWludXRlJywgJ2hvdXInLCAnZGF5JywgJ3dlZWsnLCAnbW9udGgnLCAneWVhciddO1xuICAgIGNvbnN0IHRpbWVVbml0cyA9IHRpbWVVbml0S2V5cy5mbGF0TWFwKGtleSA9PiB0aGlzLnRjLmNvbGxlY3RXb3JkcyhrZXkpKTtcblxuICAgIGNvbnN0IGluUGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihpbldvcmRzKTtcbiAgICBjb25zdCBwcmVmaXhQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKFsuLi50aGlzV29yZHMsIC4uLm5leHRXb3JkcywgLi4ubGFzdFdvcmRzXSk7XG4gICAgY29uc3Qgd2Vla2RheVBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24od2Vla2RheXMpO1xuICAgIGNvbnN0IHRpbWVVbml0UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbih0aW1lVW5pdHMpO1xuICAgIGNvbnN0IGFuZFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oYW5kV29yZHMpO1xuICAgIGNvbnN0IGF0UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihhdFdvcmRzKTtcbiAgICBjb25zdCBmcm9tUGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihmcm9tV29yZHMpO1xuICAgIGNvbnN0IHRvUGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbih0b1dvcmRzKTtcblxuICAgIC8vIFNpbXBsZSByZWdleCBmb3IgXCJpbiAyIG1pbnV0ZXNcIlxuICAgIHRoaXMucmVnZXhSZWxhdGl2ZSA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKig/OiR7aW5QYXR0ZXJufSlcXFxccysoXFxcXGQrKVxcXFxzKigke3RpbWVVbml0UGF0dGVybn0pXFxcXHMqJGAsXG4gICAgICAnaSdcbiAgICApO1xuXG4gICAgLy8gUmVnZXggZm9yIGNvbWJpbmF0aW9ucyBcImluIDIgd2Vla3MgYW5kIDMgZGF5c1wiXG4gICAgdGhpcy5yZWdleFJlbGF0aXZlQ29tYmluZWQgPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooPzoke2luUGF0dGVybn0pXFxcXHMrKFxcXFxkKylcXFxccyooJHt0aW1lVW5pdFBhdHRlcm59KVxcXFxzKyg/OiR7YW5kUGF0dGVybn0pXFxcXHMrKFxcXFxkKylcXFxccyooJHt0aW1lVW5pdFBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFNpbXBsZSByZWdleCBmb3IgXCJuZXh0IE1vbmRheVwiXG4gICAgLy8gVXNlcyBcXHMqIChub3QgXFxzKykgYmV0d2VlbiBwcmVmaXggYW5kIHdlZWtkYXkgc28gbGFuZ3VhZ2VzIHdpdGhvdXQgc3BhY2VzXG4gICAgLy8gYmV0d2VlbiB3b3JkcyAoZS5nLiBDaGluZXNlIFwi5LiL5LiA5YCL5pif5pyf5LiAXCIpIHN0aWxsIG1hdGNoLlxuICAgIHRoaXMucmVnZXhXZWVrZGF5ID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeXFxcXHMqKCR7cHJlZml4UGF0dGVybn0pXFxcXHMqKCR7d2Vla2RheVBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFJlZ2V4IGZvciBcIm5leHQgTW9uZGF5IGF0IDNwbVwiIC0gY2FwdHVyZXMgZGF5IGFuZCB0aW1lXG4gICAgdGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKigke3ByZWZpeFBhdHRlcm59KVxcXFxzKigke3dlZWtkYXlQYXR0ZXJufSlcXFxccysoPzoke2F0UGF0dGVybn0pXFxcXHMrKC4rKSRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFJlZ2V4IGZvciBzaW1wbGUgd2Vla2RheSB3aXRob3V0IHByZWZpeCAoZS5nLiwgXCJ3ZWRuZXNkYXlcIiwgXCJmcmlkYXlcIilcbiAgICB0aGlzLnJlZ2V4V2Vla2RheU9ubHkgPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooJHt3ZWVrZGF5UGF0dGVybn0pXFxcXHMqJGAsXG4gICAgICAnaSdcbiAgICApO1xuXG4gICAgLy8gUmVnZXggZm9yIFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCIgLSBjYXB0dXJlcyB0d28gd2Vla2RheXNcbiAgICB0aGlzLnJlZ2V4RGF0ZVJhbmdlID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeXFxcXHMqKD86JHtmcm9tUGF0dGVybn0pXFxcXHMqKCR7d2Vla2RheVBhdHRlcm59KVxcXFxzKig/OiR7dG9QYXR0ZXJufSlcXFxccyooJHt3ZWVrZGF5UGF0dGVybn0pXFxcXHMqJGAsXG4gICAgICAnaSdcbiAgICApO1xuXG4gICAgY29uc3Qgb2ZQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uRm9yKFwib2ZcIik7XG4gICAgY29uc3QgZmlyc3RQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uRm9yKFwiZmlyc3RcIik7XG5cbiAgICAvLyBSZWdleCBmb3IgXCJ0aGUgMTV0aCBvZiBuZXh0IG1vbnRoXCIgb3IgXCJsZSAxNSBkdSBtb2lzIHByb2NoYWluXCJcbiAgICAvLyBQYXR0ZXJuOiAob3B0aW9uYWwgXCJ0aGVcIi9cImxlXCIvXCJkZXJcIikgKG9yZGluYWwgbnVtYmVyIGxpa2UgXCIxNXRoXCIsIFwiMTXDqG1lXCIsIFwiMTUuXCIpIFwib2ZcIi9cImR1XCIvXCJkZXNcIiAobmV4dC9sYXN0L3RoaXMpIChtb250aClcbiAgICAvLyBBbHNvIGhhbmRsZXMgRnJlbmNoIGludmVyc2lvbjogXCJsZSAxNSBkdSBtb2lzIHByb2NoYWluXCIgKG1vbnRoIGJlZm9yZSBwcmVmaXgpXG4gICAgLy8gQWxzbyBoYW5kbGVzIEdlcm1hbjogXCJkZXIgMTUuIGRlcyBuw6RjaHN0ZW4gTW9uYXRzXCIgKHByZWZpeCBiZXR3ZWVuIFwib2ZcIiBhbmQgbW9udGgpXG4gICAgLy8gVXNpbmcgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiBmcm9tIHV0aWxzLnRzIGZvciBvcmRpbmFsIG1hdGNoaW5nXG4gICAgdGhpcy5yZWdleE9yZGluYWxPZk1vbnRoID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeXFxcXHMqKD86dGhlfGxlfGRlcnxkYXN8ZWx8aWx8b3xkZXxoZXQpP1xcXFxzKigke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KVxcXFxzKyg/OiR7b2ZQYXR0ZXJufSlcXFxccysoPzooJHtwcmVmaXhQYXR0ZXJufSlcXFxccyspPygke3RpbWVVbml0UGF0dGVybn0pKD86XFxcXHMrKCR7cHJlZml4UGF0dGVybn0pKT9cXFxccyokYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBSZWdleCBmb3IgXCJsYXN0IGRheSBvZiBtb250aFwiIG9yIFwiZGVybmllciBqb3VyIGR1IG1vaXNcIlxuICAgIGNvbnN0IGRheVBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoXCJkYXlcIik7XG5cbiAgICAvLyBNYWtlIHByZWZpeCBvcHRpb25hbCAtIFwibGFzdCBkYXkgb2YgbW9udGhcIiB3aXRob3V0IHByZWZpeCBtZWFucyBcInRoaXMgbW9udGhcIlxuICAgIC8vIFwibGFzdFwiIGhlcmUgaXMgYW4gYWRqZWN0aXZlIG1vZGlmeWluZyBcImRheVwiLCBub3QgYSB0ZW1wb3JhbCBwcmVmaXhcbiAgICAvLyBBbHNvIGhhbmRsZSBGcmVuY2ggaW52ZXJzaW9uOiBcImRlcm5pZXIgam91ciBkdSBtb2lzIHByb2NoYWluXCIgKG1vbnRoIGJlZm9yZSBwcmVmaXgpXG4gICAgLy8gUGF0dGVybjogKG9wdGlvbmFsIHByZWZpeCkgXCJsYXN0XCIgKGRheSB3b3JkKSBcIm9mXCIgKG9wdGlvbmFsIHByZWZpeCkgKG1vbnRoKSAob3B0aW9uYWwgcHJlZml4IGFmdGVyIG1vbnRoKVxuICAgIC8vIFJldXNlIGxhc3RXb3JkcyBjb2xsZWN0ZWQgYWJvdmUgKGxpbmUgMTQ4LTE1MClcbiAgICBjb25zdCBsYXN0QWRqZWN0aXZlUGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihsYXN0V29yZHMpO1xuICAgIFxuICAgIHRoaXMucmVnZXhMYXN0RGF5T2ZNb250aCA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKig/Oigke3ByZWZpeFBhdHRlcm59KVxcXFxzKyk/KCR7bGFzdEFkamVjdGl2ZVBhdHRlcm59KVxcXFxzKygke2RheVBhdHRlcm59KVxcXFxzKyg/OiR7b2ZQYXR0ZXJufSlcXFxccysoPzooJHtwcmVmaXhQYXR0ZXJufSlcXFxccyspPygke3RpbWVVbml0UGF0dGVybn0pKD86XFxcXHMrKCR7cHJlZml4UGF0dGVybn0pKT9cXFxccyokYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBSZWdleCBmb3IgXCJmaXJzdCBNb25kYXkgb2YgbW9udGhcIiBvciBcInByZW1pZXIgbHVuZGkgZHUgbW9pc1wiIG9yIFwibGFzdCBNb25kYXkgb2YgbW9udGhcIlxuICAgIC8vIEFsc28gaGFuZGxlIEZyZW5jaCBpbnZlcnNpb246IFwicHJlbWllciBsdW5kaSBkdSBtb2lzIHByb2NoYWluXCIgKG1vbnRoIGJlZm9yZSBwcmVmaXgpXG4gICAgdGhpcy5yZWdleFdlZWtkYXlPZk1vbnRoID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeXFxcXHMqKCR7Zmlyc3RQYXR0ZXJufXwke3ByZWZpeFBhdHRlcm59KVxcXFxzKygke3dlZWtkYXlQYXR0ZXJufSlcXFxccysoPzoke29mUGF0dGVybn0pXFxcXHMrKD86KCR7cHJlZml4UGF0dGVybn0pXFxcXHMrKT8oJHt0aW1lVW5pdFBhdHRlcm59KSg/OlxcXFxzKygke3ByZWZpeFBhdHRlcm59KSk/XFxcXHMqJGAsXG4gICAgICAnaSdcbiAgICApO1xuXG4gICAgLy8gU3VmZml4LXN0eWxlIGxhbmd1YWdlcyAoZS5nLiBDaGluZXNlIFwiMuWkqeW+jFwiL1wiMuWkqeWQjlwiLCBKYXBhbmVzZSBcIjLml6XlvoxcIikgcHV0XG4gICAgLy8gdGhlIFwibGF0ZXJcIiBtYXJrZXIgYWZ0ZXIgdGhlIG51bWJlciBhbmQgdW5pdCBpbnN0ZWFkIG9mIHVzaW5nIGFuIFwiaW5cIlxuICAgIC8vIHByZWZpeC4gRWFjaCBsYW5ndWFnZSBjYW4gbGlzdCBpdHMgbWFya2VyKHMpIGV4cGxpY2l0bHkgdW5kZXIgdGhlXG4gICAgLy8gXCJsYXRlclwiIGtleSAoZS5nLiBDaGluZXNlIFwi5b6MfOWQjlwiIGZvciBib3RoIHNjcmlwdHMpOyB0aGlzIGtleSBpcyBuZXZlclxuICAgIC8vIHVzZWQgZm9yIGRpc3BsYXkvaW50ZXJwb2xhdGlvbiwgb25seSBmb3IgdGhpcyBtYXRjaGluZywgc28gaXQncyBzYWZlIHRvXG4gICAgLy8gbGlzdCBtdWx0aXBsZSBzY3JpcHQgdmFyaWFudHMgd2l0aCBcInxcIiB0aGUgc2FtZSB3YXkgd2Vla2RheS9wcmVmaXggd29yZHNcbiAgICAvLyBkby4gVGhlIFwiaW5kYXlzXCIgdGVtcGxhdGUgaXRzZWxmIG11c3Qgc3RheSBhIHNpbmdsZSBmb3JtIHNpbmNlIGl0J3NcbiAgICAvLyBhbHNvIHVzZWQgdmVyYmF0aW0gaW4gYXV0b3N1Z2dlc3QgbGFiZWxzLCBhbmQgdGVtcGxhdGVzIHdpdGhcbiAgICAvLyAle3RpbWVEZWx0YX0gZG9uJ3QgZ2V0IHNwbGl0IG9uIFwifFwiIGxpa2UgcGxhaW4gd29yZCBsaXN0cyBkby5cbiAgICAvL1xuICAgIC8vIExhbmd1YWdlcyB0aGF0IGRvbid0IGRlZmluZSBcImxhdGVyXCIgZmFsbCBiYWNrIHRvIGluZmVycmluZyB0aGUgbWFya2VyXG4gICAgLy8gZnJvbSB0aGVpciBcImluZGF5c1wiIHRlbXBsYXRlIChlLmcuIFwiJXt0aW1lRGVsdGF95aSp5b6MXCIgLT4gbWFya2VyIFwi5b6MXCIpLFxuICAgIC8vIHNvIHRoaXMgc3RpbGwgd29ya3MgZm9yIGFueSBsYW5ndWFnZSBhdXRob3JlZCB3aXRob3V0IHRoZSBleHRyYSBrZXkuXG4gICAgY29uc3Qgc3VmZml4TWFya2VycyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgbGF0ZXJXb3JkID0gdGhpcy50Yy50cmFuc2xhdGUoJ2xhdGVyJywgbGFuZyk7XG4gICAgICBpZiAobGF0ZXJXb3JkICYmIGxhdGVyV29yZCAhPT0gJ05PVEZPVU5EJykge1xuICAgICAgICBmb3IgKGNvbnN0IG1hcmtlciBvZiBsYXRlcldvcmQuc3BsaXQoJ3wnKS5tYXAodyA9PiB3LnRyaW0oKSkuZmlsdGVyKHcgPT4gdykpIHtcbiAgICAgICAgICBzdWZmaXhNYXJrZXJzLmFkZChtYXJrZXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudGMudHJhbnNsYXRlKCdpbmRheXMnLCBsYW5nKTtcbiAgICAgIGlmICghdGVtcGxhdGUgfHwgdGVtcGxhdGUgPT09ICdOT1RGT1VORCcgfHwgdGVtcGxhdGUuaW5kZXhPZignJXt0aW1lRGVsdGF9JykgIT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZW1haW5kZXIgPSB0ZW1wbGF0ZS5zbGljZSgnJXt0aW1lRGVsdGF9Jy5sZW5ndGgpO1xuICAgICAgY29uc3QgZGF5V29yZCA9IHRoaXMudGMudHJhbnNsYXRlKCdkYXknLCBsYW5nKTtcbiAgICAgIGlmICghZGF5V29yZCB8fCBkYXlXb3JkID09PSAnTk9URk9VTkQnKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHVuaXRVc2VkID0gZGF5V29yZC5zcGxpdCgnfCcpLm1hcCh3ID0+IHcudHJpbSgpKS5maWx0ZXIodyA9PiB3KS5maW5kKHYgPT4gcmVtYWluZGVyLnN0YXJ0c1dpdGgodikpO1xuICAgICAgaWYgKCF1bml0VXNlZCkgY29udGludWU7XG4gICAgICBjb25zdCBtYXJrZXIgPSByZW1haW5kZXIuc2xpY2UodW5pdFVzZWQubGVuZ3RoKS50cmltKCk7XG4gICAgICBpZiAobWFya2VyKSBzdWZmaXhNYXJrZXJzLmFkZChtYXJrZXIpO1xuICAgIH1cblxuICAgIGlmIChzdWZmaXhNYXJrZXJzLnNpemUgPiAwKSB7XG4gICAgICBjb25zdCBzdWZmaXhQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKEFycmF5LmZyb20oc3VmZml4TWFya2VycykpO1xuICAgICAgdGhpcy5yZWdleFJlbGF0aXZlU3VmZml4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgYF5cXFxccyooXFxcXGQrKVxcXFxzKigke3RpbWVVbml0UGF0dGVybn0pXFxcXHMqKD86JHtzdWZmaXhQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICAgJ2knXG4gICAgICApO1xuICAgICAgdGhpcy5yZWdleFJlbGF0aXZlQ29tYmluZWRTdWZmaXggPSBuZXcgUmVnRXhwKFxuICAgICAgICBgXlxcXFxzKihcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccyooPzoke2FuZFBhdHRlcm59KVxcXFxzKihcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccyooPzoke3N1ZmZpeFBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgICAnaSdcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVnZXhSZWxhdGl2ZVN1ZmZpeCA9IG51bGw7XG4gICAgICB0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZFN1ZmZpeCA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU3VmZml4LXN0eWxlIFBBU1QgbGFuZ3VhZ2VzIChlLmcuIFBvcnR1Z3Vlc2UgXCIzIGRpYXMgYXRyw6FzXCIgPSBcIjMgZGF5c1wiXG4gICAgLy8gKyBcImF0csOhc1wiID0gXCJhZ29cIiksIHRoZSBwYXN0LWRpcmVjdGlvbiBtaXJyb3Igb2YgdGhlIFwibGF0ZXJcIiBtZWNoYW5pc21cbiAgICAvLyBhYm92ZS4gVW5saWtlIFwibGF0ZXJcIiwgdGhlcmUncyBubyB0ZW1wbGF0ZSB0byBpbmZlciB0aGlzIG1hcmtlciBmcm9tXG4gICAgLy8gKHRoZSBkYXlzYWdvIHRlbXBsYXRlIGFscmVhZHkgaGFzIGl0cyBvd24gJXt0aW1lRGVsdGF9LXByZWZpeCBmb3JtLCBcImjDoVxuICAgIC8vICV7dGltZURlbHRhfSBkaWFzXCIsIHdoaWNoIGRvZXNuJ3QgaW1wbHkgYSBzdWZmaXggdmFyaWFudCBhbHNvIGV4aXN0cyksXG4gICAgLy8gc28gbGFuZ3VhZ2VzIG11c3Qgb3B0IGluIGV4cGxpY2l0bHkgdmlhIHRoZSBcImFnb3N1ZmZpeFwiIGtleS5cbiAgICBjb25zdCBhZ29TdWZmaXhNYXJrZXJzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBsYW5nIG9mIHRoaXMubGFuZ3VhZ2VzKSB7XG4gICAgICBjb25zdCBhZ29TdWZmaXhXb3JkID0gdGhpcy50Yy50cmFuc2xhdGUoJ2Fnb3N1ZmZpeCcsIGxhbmcpO1xuICAgICAgaWYgKGFnb1N1ZmZpeFdvcmQgJiYgYWdvU3VmZml4V29yZCAhPT0gJ05PVEZPVU5EJykge1xuICAgICAgICBmb3IgKGNvbnN0IG1hcmtlciBvZiBhZ29TdWZmaXhXb3JkLnNwbGl0KCd8JykubWFwKHcgPT4gdy50cmltKCkpLmZpbHRlcih3ID0+IHcpKSB7XG4gICAgICAgICAgYWdvU3VmZml4TWFya2Vycy5hZGQobWFya2VyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhZ29TdWZmaXhNYXJrZXJzLnNpemUgPiAwKSB7XG4gICAgICBjb25zdCBhZ29TdWZmaXhQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKEFycmF5LmZyb20oYWdvU3VmZml4TWFya2VycykpO1xuICAgICAgdGhpcy5yZWdleEFnb1N1ZmZpeCA9IG5ldyBSZWdFeHAoXG4gICAgICAgIGBeXFxcXHMqKFxcXFxkKylcXFxccyooJHt0aW1lVW5pdFBhdHRlcm59KVxcXFxzKig/OiR7YWdvU3VmZml4UGF0dGVybn0pXFxcXHMqJGAsXG4gICAgICAgICdpJ1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWdleEFnb1N1ZmZpeCA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gUGVyaW9kLWdyYW51bGFyaXR5IHNob3J0Y3V0czogXCJ0aGlzL25leHQvbGFzdCB3ZWVrfG1vbnRofHF1YXJ0ZXJ8eWVhclwiLFxuICAgIC8vIGUuZy4gXCJuZXh0IHF1YXJ0ZXJcIiwgXCJjZXR0ZSBzZW1haW5lXCIsIFwi5p2l5pyIXCIsIFwi64uk7J2MIOu2hOq4sFwiLiBCb3RoIHdvcmRcbiAgICAvLyBvcmRlcnMgYXJlIG5lZWRlZCAtLSBtb3N0IGxhbmd1YWdlcyBwdXQgdGhlIHByZWZpeCBmaXJzdCAoXCJuZXh0XG4gICAgLy8gcXVhcnRlclwiKSwgYnV0IEZyZW5jaCBwb3N0cG9zZXMgXCJwcm9jaGFpblwiL1wiZGVybmllclwiIGFmdGVyIHRoZSBub3VuXG4gICAgLy8gKFwibGUgdHJpbWVzdHJlIHByb2NoYWluXCIsIFwibCdhbm7DqWUgcHJvY2hhaW5lXCIsIG5ldmVyIFwicHJvY2hhaW5cbiAgICAvLyB0cmltZXN0cmVcIiksIHRoZSBzYW1lIGludmVyc2lvbiB0aGUgb3JkaW5hbC1vZi1tb250aC9uZXh0LXdlZWstcmFuZ2VcbiAgICAvLyBwYXR0ZXJucyBlbHNld2hlcmUgaW4gdGhpcyBmaWxlIGFscmVhZHkgYWNjb3VudCBmb3IuIFZlcmlmaWVkXG4gICAgLy8gZW1waXJpY2FsbHkgcGVyIGxhbmd1YWdlIGluIHRlc3RzL3BhcnNlci50ZXN0LnRzLlxuICAgIGNvbnN0IHBlcmlvZE9ubHlLZXlzID0gWyd3ZWVrJywgJ21vbnRoJywgJ3llYXInXTtcbiAgICBjb25zdCBwZXJpb2RPbmx5V29yZHMgPSBwZXJpb2RPbmx5S2V5cy5mbGF0TWFwKGtleSA9PiB0aGlzLnRjLmNvbGxlY3RXb3JkcyhrZXkpKTtcbiAgICBjb25zdCBxdWFydGVyV29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcInF1YXJ0ZXJcIik7XG4gICAgY29uc3QgcGVyaW9kUGF0dGVybldpdGhRdWFydGVyID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKFsuLi5wZXJpb2RPbmx5V29yZHMsIC4uLnF1YXJ0ZXJXb3Jkc10pO1xuICAgIHRoaXMucmVnZXhQZXJpb2RQcmVmaXggPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooJHtwcmVmaXhQYXR0ZXJufSlcXFxccyooJHtwZXJpb2RQYXR0ZXJuV2l0aFF1YXJ0ZXJ9KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcbiAgICB0aGlzLnJlZ2V4UGVyaW9kU3VmZml4ID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeXFxcXHMqKCR7cGVyaW9kUGF0dGVybldpdGhRdWFydGVyfSlcXFxccyooJHtwcmVmaXhQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBMYW5ndWFnZS1uZXV0cmFsIGV4cGxpY2l0IGZvcm1zIC0tIFwiUTNcIi9cInEzXCIgd29ya3MgcmVnYXJkbGVzcyBvZiBhY3RpdmVcbiAgICAvLyBsYW5ndWFnZSwgdGhlIHNhbWUgd2F5IGEgYmFyZSBJU08gZGF0ZSBzdHJpbmcgZG9lcy5cbiAgICB0aGlzLnJlZ2V4UXVhcnRlckV4cGxpY2l0ID0gL15cXHMqcVxccyooWzEtNF0pKD86XFxzKyhcXGR7NH0pKT9cXHMqJC9pO1xuICAgIHRoaXMucmVnZXhRdWFydGVyRXhwbGljaXRZZWFyRmlyc3QgPSAvXlxccyooXFxkezR9KVxccypbLVxcc11cXHMqcVxccyooWzEtNF0pXFxzKiQvaTtcbiAgICB0aGlzLnJlZ2V4V2Vla0V4cGxpY2l0ID0gL15cXHMqKFxcZHs0fSktdyhcXGR7MSwyfSlcXHMqJC9pO1xuICB9XG5cbiAgLy8gSW5pdGlhbGl6ZXMga2V5d29yZHMgZm9yIGZhc3QgZGV0ZWN0aW9uXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUtleXdvcmRzKCk6IHZvaWQge1xuICAgIHRoaXMuaW1tZWRpYXRlS2V5d29yZHMgPSBuZXcgU2V0KFxuICAgICAgWydub3cnLCAndG9kYXknLCAndG9tb3Jyb3cnLCAneWVzdGVyZGF5J10uZmxhdE1hcChrZXkgPT4gdGhpcy50Yy5jb2xsZWN0V29yZHMoa2V5LCB7IGxvd2VyY2FzZTogdHJ1ZSB9KSlcbiAgICApO1xuICAgIHRoaXMucHJlZml4S2V5d29yZHMgPSB7XG4gICAgICB0aGlzOiBuZXcgU2V0KHRoaXMudGMuY29sbGVjdFdvcmRzKFwidGhpc1wiLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KSksXG4gICAgICBuZXh0OiBuZXcgU2V0KHRoaXMudGMuY29sbGVjdFdvcmRzKFwibmV4dFwiLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KSksXG4gICAgICBsYXN0OiBuZXcgU2V0KHRoaXMudGMuY29sbGVjdFdvcmRzKFwibGFzdFwiLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KSksXG4gICAgfTtcblxuICAgIC8vIFRpbWUgdW5pdHMgd2l0aCBtYXBwaW5nIHRvIE1vbWVudC5qcyB1bml0c1xuICAgIGNvbnN0IHVuaXRNYXBwaW5nczogeyBrZXk6IHN0cmluZzsgbW9tZW50VW5pdDogVGltZVVuaXQgfVtdID0gW1xuICAgICAgeyBrZXk6ICdtaW51dGUnLCBtb21lbnRVbml0OiAnbWludXRlcycgfSxcbiAgICAgIHsga2V5OiAnaG91cicsIG1vbWVudFVuaXQ6ICdob3VycycgfSxcbiAgICAgIHsga2V5OiAnZGF5JywgbW9tZW50VW5pdDogJ2RheXMnIH0sXG4gICAgICB7IGtleTogJ3dlZWsnLCBtb21lbnRVbml0OiAnd2Vla3MnIH0sXG4gICAgICB7IGtleTogJ21vbnRoJywgbW9tZW50VW5pdDogJ21vbnRocycgfSxcbiAgICAgIHsga2V5OiAneWVhcicsIG1vbWVudFVuaXQ6ICd5ZWFycycgfSxcbiAgICBdO1xuICAgIHRoaXMudGltZVVuaXRNYXAgPSBuZXcgTWFwKCk7XG4gICAgZm9yIChjb25zdCBtYXBwaW5nIG9mIHVuaXRNYXBwaW5ncykge1xuICAgICAgZm9yIChjb25zdCB3b3JkIG9mIHRoaXMudGMuY29sbGVjdFdvcmRzKG1hcHBpbmcua2V5LCB7IGxvd2VyY2FzZTogdHJ1ZSB9KSkge1xuICAgICAgICB0aGlzLnRpbWVVbml0TWFwLnNldCh3b3JkLCBtYXBwaW5nLm1vbWVudFVuaXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucGVyaW9kV29yZHMgPSB7XG4gICAgICB3ZWVrOiBuZXcgU2V0KHRoaXMudGMuY29sbGVjdFdvcmRzKFwid2Vla1wiLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KSksXG4gICAgICBtb250aDogbmV3IFNldCh0aGlzLnRjLmNvbGxlY3RXb3JkcyhcIm1vbnRoXCIsIHsgbG93ZXJjYXNlOiB0cnVlIH0pKSxcbiAgICAgIHF1YXJ0ZXI6IG5ldyBTZXQodGhpcy50Yy5jb2xsZWN0V29yZHMoXCJxdWFydGVyXCIsIHsgbG93ZXJjYXNlOiB0cnVlIH0pKSxcbiAgICAgIHllYXI6IG5ldyBTZXQodGhpcy50Yy5jb2xsZWN0V29yZHMoXCJ5ZWFyXCIsIHsgbG93ZXJjYXNlOiB0cnVlIH0pKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gLS0tIFVUSUxJVFkgRlVOQ1RJT046IERBWSBOQU1FIOKGkiBOVU1FUklDIElOREVYIENPTlZFUlNJT04gLS0tXG4gIC8vIENvbnZlcnRzIGRheSBuYW1lcyBmcm9tIGFsbCBsYW5ndWFnZXMgdG8gbnVtZXJpYyBpbmRpY2VzICgwLTYpXG4gIC8vIE1vbWVudC5qcyB1c2VzOiAwPVN1bmRheSwgMT1Nb25kYXksIDI9VHVlc2RheSwgMz1XZWRuZXNkYXksIDQ9VGh1cnNkYXksIDU9RnJpZGF5LCA2PVNhdHVyZGF5XG4gIHByaXZhdGUgZ2V0RGF5T2ZXZWVrSW5kZXgoZGF5TmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gZGF5TmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRW5nbGlzaCBkYXkgbmFtZXMvYWJicmV2aWF0aW9ucywgYWx3YXlzIGF2YWlsYWJsZSByZWdhcmRsZXNzIG9mIGFjdGl2ZSBsYW5ndWFnZXNcbiAgICBjb25zdCBkYXlNYXA6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7XG4gICAgICAnc3VuZGF5JzogMCwgJ3N1bic6IDAsXG4gICAgICAnbW9uZGF5JzogMSwgJ21vbic6IDEsXG4gICAgICAndHVlc2RheSc6IDIsICd0dWUnOiAyLCAndHVlcyc6IDIsXG4gICAgICAnd2VkbmVzZGF5JzogMywgJ3dlZCc6IDMsXG4gICAgICAndGh1cnNkYXknOiA0LCAndGh1JzogNCwgJ3RodXInOiA0LCAndGh1cnMnOiA0LFxuICAgICAgJ2ZyaWRheSc6IDUsICdmcmknOiA1LFxuICAgICAgJ3NhdHVyZGF5JzogNiwgJ3NhdCc6IDYsXG4gICAgfTtcblxuICAgIC8vIEFkZCBkYXlzIGZyb20gYWxsIGVuYWJsZWQgbGFuZ3VhZ2VzXG4gICAgY29uc3QgZGF5S2V5cyA9IFsnc3VuZGF5JywgJ21vbmRheScsICd0dWVzZGF5JywgJ3dlZG5lc2RheScsICd0aHVyc2RheScsICdmcmlkYXknLCAnc2F0dXJkYXknXTtcbiAgICBkYXlLZXlzLmZvckVhY2goKGtleSwgaSkgPT4ge1xuICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIHRoaXMudGMuY29sbGVjdFdvcmRzKGtleSwgeyBsb3dlcmNhc2U6IHRydWUgfSkpIHtcbiAgICAgICAgZGF5TWFwW3ZhcmlhbnRdID0gaTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkYXlNYXBbbm9ybWFsaXplZF0gPz8gMDsgLy8gRGVmYXVsdCB0byBTdW5kYXkgaWYgbm90IHJlY29nbml6ZWRcbiAgfVxuXG4gIC8vIC0tLSBDQUNIRSBVVElMSVRJRVMgLS0tXG4gIC8vIEdldCBkYXkgb2YgeWVhciAoMS0zNjUvMzY2KSBmb3IgY2FjaGUgaW52YWxpZGF0aW9uXG4gIHByaXZhdGUgZ2V0RGF5T2ZZZWFyKCk6IG51bWJlciB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCAwLCAwKTtcbiAgICBjb25zdCBkaWZmID0gbm93LmdldFRpbWUoKSAtIHN0YXJ0LmdldFRpbWUoKTtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihkaWZmIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpKTtcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIGNhY2hlIGtleSBmcm9tIHNlbGVjdGVkVGV4dCwgd2Vla1N0YXJ0UHJlZmVyZW5jZSwgYW5kIGN1cnJlbnQgZGF5XG4gIHByaXZhdGUgZ2VuZXJhdGVDYWNoZUtleShzZWxlY3RlZFRleHQ6IHN0cmluZywgd2Vla1N0YXJ0UHJlZmVyZW5jZTogRGF5T2ZXZWVrKTogc3RyaW5nIHtcbiAgICBjb25zdCBjdXJyZW50RGF5ID0gdGhpcy5nZXREYXlPZlllYXIoKTtcbiAgICAvLyBJbmNsdWRlIGRheSBpbiBrZXkgdG8gYXV0b21hdGljYWxseSBpbnZhbGlkYXRlIGNhY2hlIHdoZW4gZGF5IGNoYW5nZXNcbiAgICByZXR1cm4gYCR7c2VsZWN0ZWRUZXh0LnRyaW0oKX18JHt3ZWVrU3RhcnRQcmVmZXJlbmNlfXwke2N1cnJlbnREYXl9YDtcbiAgfVxuXG4gIC8vIFN0b3JlIHJlc3VsdCBpbiBjYWNoZSBhbmQgcmV0dXJuIGl0XG4gIHByaXZhdGUgY2FjaGVBbmRSZXR1cm4oY2FjaGVLZXk6IHN0cmluZywgcmVzdWx0OiBEYXRlKTogRGF0ZSB7XG4gICAgLy8gQ3LDqWVyIHVuZSBub3V2ZWxsZSBpbnN0YW5jZSBkZSBEYXRlIHBvdXIgw6l2aXRlciBsZXMgcsOpZsOpcmVuY2VzIHBhcnRhZ8OpZXNcbiAgICBjb25zdCBjYWNoZWREYXRlID0gbmV3IERhdGUocmVzdWx0LmdldFRpbWUoKSk7XG4gICAgdGhpcy5jYWNoZS5zZXQoY2FjaGVLZXksIGNhY2hlZERhdGUpO1xuICAgIHJldHVybiBuZXcgRGF0ZShyZXN1bHQuZ2V0VGltZSgpKTtcbiAgfVxuXG4gIC8vIC0tLSBNQUlOIEVOR0lORSAtLS1cbiAgLyoqXG4gICAqIFBhcnNlcyBhIG5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSBzdHJpbmcgYW5kIHJldHVybnMgYSBEYXRlIG9iamVjdC5cbiAgICogXG4gICAqIFN1cHBvcnRzIG11bHRpcGxlIGxhbmd1YWdlcyBhbmQgdmFyaW91cyBkYXRlIGV4cHJlc3Npb25zOlxuICAgKiAtIEltbWVkaWF0ZSBkYXRlczogXCJ0b2RheVwiLCBcInRvbW9ycm93XCIsIFwieWVzdGVyZGF5XCIsIFwibm93XCJcbiAgICogLSBSZWxhdGl2ZSBkYXRlczogXCJpbiAyIGRheXNcIiwgXCJpbiAzIHdlZWtzXCIsIFwiaW4gMSBtb250aFwiXG4gICAqIC0gQ29tYmluZWQgZHVyYXRpb25zOiBcImluIDIgd2Vla3MgYW5kIDMgZGF5c1wiXG4gICAqIC0gV2Vla2RheXM6IFwibmV4dCBNb25kYXlcIiwgXCJsYXN0IEZyaWRheVwiLCBcInRoaXMgV2VkbmVzZGF5XCJcbiAgICogLSBXZWVrZGF5cyB3aXRoIHRpbWU6IFwibmV4dCBNb25kYXkgYXQgM3BtXCJcbiAgICogLSBQZXJpb2RzOiBcIm5leHQgd2Vla1wiLCBcIm5leHQgbW9udGhcIiwgXCJuZXh0IHllYXJcIlxuICAgKiBcbiAgICogQHBhcmFtIHNlbGVjdGVkVGV4dCAtIE5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSBzdHJpbmcgdG8gcGFyc2UgKGUuZy4sIFwidG9tb3Jyb3dcIiwgXCJpbiAyIGRheXNcIiwgXCJuZXh0IE1vbmRheVwiKVxuICAgKiBAcGFyYW0gd2Vla1N0YXJ0UHJlZmVyZW5jZSAtIERheSBvZiB3ZWVrIHRvIGNvbnNpZGVyIGFzIHdlZWsgc3RhcnQgKGFmZmVjdHMgXCJuZXh0IHdlZWtcIiBjYWxjdWxhdGlvbnMpXG4gICAqIEByZXR1cm5zIFBhcnNlZCBEYXRlIG9iamVjdCwgb3IgY3VycmVudCBkYXRlIGlmIHBhcnNpbmcgZmFpbHNcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcGFyc2VyID0gbmV3IE5MRFBhcnNlcihbJ2VuJywgJ2ZyJ10pO1xuICAgKiBjb25zdCBkYXRlID0gcGFyc2VyLmdldFBhcnNlZERhdGUoXCJ0b21vcnJvd1wiLCBcIm1vbmRheVwiKTtcbiAgICogY29uc29sZS5sb2coZGF0ZSk7IC8vIERhdGUgb2JqZWN0IGZvciB0b21vcnJvd1xuICAgKiBgYGBcbiAgICovXG4gIGdldFBhcnNlZERhdGUoc2VsZWN0ZWRUZXh0OiBzdHJpbmcsIHdlZWtTdGFydFByZWZlcmVuY2U6IERheU9mV2Vlayk6IERhdGUge1xuICAgIC8vIE5ldHRveWVyIGxlcyBjYXJhY3TDqHJlcyBzcMOpY2lhdXggZW4gZmluIGRlIGNoYcOubmUgKGV4OiBcInRvbW9ycm93ISEhXCIpXG4gICAgY29uc3QgY2xlYW5lZFRleHQgPSBzZWxlY3RlZFRleHQudHJpbSgpLnJlcGxhY2UoL1shPy5dKyQvLCAnJyk7XG4gICAgY29uc3QgdGV4dCA9IGNsZWFuZWRUZXh0LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBcIm5vd1wiL1widG9kYXlcIiwgXCJYIGFnb1wiLCBhbmQgXCJpbiBYIHVuaXRzXCIgYWxsIHJlc29sdmUgcmVsYXRpdmUgdG8gdGhlXG4gICAgLy8gZXhhY3QgY3VycmVudCBpbnN0YW50IChub3QganVzdCB0aGUgY3VycmVudCBkYXkpLCBzbyBjYWNoaW5nIHRoZW0gYXRcbiAgICAvLyB0aGUgY2FjaGUncyBkYXktc2l6ZWQgZ3JhbnVsYXJpdHkgd291bGQgcmV0dXJuIGEgc3RhbGUgdGltZSBvbiBldmVyeVxuICAgIC8vIGNhbGwgYWZ0ZXIgdGhlIGZpcnN0IHdpdGhpbiB0aGF0IGRheSAoZS5nLiBcImluIDIwIG1pbnV0ZXNcIiBvciBcIm5vd1wiXG4gICAgLy8gYWx3YXlzIHJldHVybmluZyB0aGUgZmlyc3QgcmVzdWx0IHRoZXkgZXZlciBwcm9kdWNlZCB0aGF0IGRheSkuXG4gICAgLy8gQWx3YXlzIGNvbXB1dGUgdGhlc2UgZnJlc2gsIGJ5cGFzc2luZyB0aGUgY2FjaGUgZW50aXJlbHkuXG4gICAgLy8gXCJ0b21vcnJvd1wiL1wieWVzdGVyZGF5XCIgcmVzb2x2ZSB0byBhIHNwZWNpZmljIGNhbGVuZGFyIGRheSBsaWtlIHRoZVxuICAgIC8vIG90aGVyIGNhY2hlZCBleHByZXNzaW9ucyBiZWxvdywgc28gdGhleSBzdGF5IG9uIHRoZSBjYWNoZWQgcGF0aFxuICAgIC8vIChoYW5kbGVkIGJ5IHRyeUltbWVkaWF0ZUtleXdvcmRzIGZ1cnRoZXIgZG93bikuXG4gICAgY29uc3Qgbm93V29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3Jkcygnbm93JywgeyBsb3dlcmNhc2U6IHRydWUgfSk7XG4gICAgY29uc3QgdG9kYXlXb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKCd0b2RheScsIHsgbG93ZXJjYXNlOiB0cnVlIH0pO1xuICAgIGNvbnN0IHZvbGF0aWxlUmVzdWx0ID1cbiAgICAgIChub3dXb3Jkcy5pbmNsdWRlcyh0ZXh0KSB8fCB0b2RheVdvcmRzLmluY2x1ZGVzKHRleHQpID8gbmV3IERhdGUoKSA6IG51bGwpID8/XG4gICAgICB0aGlzLnRyeVBhc3RFeHByZXNzaW9ucyh0ZXh0LCBjbGVhbmVkVGV4dCkgPz9cbiAgICAgIHRoaXMudHJ5UmVsYXRpdmVDYWxjdWxhdGlvbihjbGVhbmVkVGV4dCk7XG4gICAgaWYgKHZvbGF0aWxlUmVzdWx0KSByZXR1cm4gdm9sYXRpbGVSZXN1bHQ7XG5cbiAgICAvLyBWw6lyaWZpZXIgc2kgbGUgam91ciBhIGNoYW5nw6kgcG91ciBpbnZhbGlkZXIgbGUgY2FjaGVcbiAgICBjb25zdCBjdXJyZW50RGF5ID0gdGhpcy5nZXREYXlPZlllYXIoKTtcbiAgICBpZiAoY3VycmVudERheSAhPT0gdGhpcy5jYWNoZURheSkge1xuICAgICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgICAgdGhpcy5jYWNoZURheSA9IGN1cnJlbnREYXk7XG4gICAgfVxuXG4gICAgLy8gR8OpbsOpcmVyIGxhIGNsw6kgZHUgY2FjaGUgYXZlYyBsZSB0ZXh0ZSBuZXR0b3nDqSBwb3VyIHF1ZSBcInRvbW9ycm93XCIgZXQgXCJ0b21vcnJvdyEhIVwiIHV0aWxpc2VudCBsYSBtw6ptZSBjbMOpXG4gICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmdlbmVyYXRlQ2FjaGVLZXkoY2xlYW5lZFRleHQsIHdlZWtTdGFydFByZWZlcmVuY2UpO1xuXG4gICAgLy8gVsOpcmlmaWVyIGxlIGNhY2hlIGF2YW50IGRlIHBhcnNlclxuICAgIGNvbnN0IGNhY2hlZERhdGUgPSB0aGlzLmNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKGNhY2hlZERhdGUpIHtcbiAgICAgIC8vIENyw6llciB1bmUgbm91dmVsbGUgaW5zdGFuY2UgZGUgRGF0ZSBwb3VyIMOpdml0ZXIgbGVzIHLDqWbDqXJlbmNlcyBwYXJ0YWfDqWVzXG4gICAgICByZXR1cm4gbmV3IERhdGUoY2FjaGVkRGF0ZS5nZXRUaW1lKCkpO1xuICAgIH1cblxuICAgIC8vIEVhY2ggdHJ5KigpIG1ldGhvZCBiZWxvdyByZXR1cm5zIG51bGwgd2hlbiBpdCBkb2Vzbid0IHJlY29nbml6ZSB0aGVcbiAgICAvLyBpbnB1dCwgbGV0dGluZyB0aGUgbmV4dCBsZXZlbCBoYXZlIGEgc2hvdCAtLSBzYW1lIExFVkVMIDEtNCBvcmRlciB0aGlzXG4gICAgLy8gZmlsZSBoYXMgYWx3YXlzIHVzZWQsIGp1c3Qgc3BsaXQgaW50byBuYW1lZCwgaW5kZXBlbmRlbnRseSByZWFkYWJsZVxuICAgIC8vIG1ldGhvZHMgaW5zdGVhZCBvZiBvbmUgZnVuY3Rpb24gdGhhdCB1c2VkIHRvIHJ1biB+NTcwIGxpbmVzLlxuICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICB0aGlzLnRyeUltbWVkaWF0ZUtleXdvcmRzKHRleHQpID8/XG4gICAgICB0aGlzLnRyeURhdGVSYW5nZVNob3J0Y3V0KGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlXZWVrZGF5cyhjbGVhbmVkVGV4dCkgPz9cbiAgICAgIHRoaXMudHJ5T3JkaW5hbE9mTW9udGgoY2xlYW5lZFRleHQpID8/XG4gICAgICB0aGlzLnRyeUxhc3REYXlPZk1vbnRoKGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlXZWVrZGF5T2ZNb250aChjbGVhbmVkVGV4dCkgPz9cbiAgICAgIHRoaXMudHJ5TmV4dFBlcmlvZFNob3J0Y3V0KGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy5jaHJvbm9GYWxsYmFjayhzZWxlY3RlZFRleHQsIHdlZWtTdGFydFByZWZlcmVuY2UpO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGVBbmRSZXR1cm4oY2FjaGVLZXksIHJlc3VsdCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVWRUwgMTogSU1NRURJQVRFIEtFWVdPUkRTIChTcGVlZCBhbmQgUHJlY2lzaW9uKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSB0cnlJbW1lZGlhdGVLZXl3b3Jkcyh0ZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmltbWVkaWF0ZUtleXdvcmRzLmhhcyh0ZXh0KSkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ25vdycsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHRleHQpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGMuY29sbGVjdFdvcmRzKCd0b2RheScsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHRleHQpKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGMuY29sbGVjdFdvcmRzKCd0b21vcnJvdycsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHRleHQpKSB7XG4gICAgICByZXR1cm4gbW9tZW50KCkuYWRkKDEsICdkYXlzJykudG9EYXRlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRjLmNvbGxlY3RXb3JkcygneWVzdGVyZGF5JywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXModGV4dCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQoKS5zdWJ0cmFjdCgxLCAnZGF5cycpLnRvRGF0ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAxLjU6IFBBU1QgRVhQUkVTU0lPTlMgKDIgZGF5cyBhZ28sIGlsIHkgYSAzIG1pbilcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHByaXZhdGUgdHJ5UGFzdEV4cHJlc3Npb25zKHRleHQ6IHN0cmluZywgY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICAvLyBDaGVjayBmb3IgXCJhZ29cIiBleHByZXNzaW9ucyBpbiBFbmdsaXNoIChlLmcuLCBcIjIgZGF5cyBhZ29cIikuIFVubGlrZVxuICAgIC8vIGV2ZXJ5IG90aGVyIHVuaXQtY2FwdHVyaW5nIHJlZ2V4IGluIHRoaXMgZmlsZSwgdGhpcyBvbmUgY2FwdHVyZXMgdGhlXG4gICAgLy8gdW5pdCBnZW5lcmljYWxseSAoXFx3Kywgbm90IHJlc3RyaWN0ZWQgdG8ga25vd24gdHJhbnNsYXRlZCB3b3JkcyksIHNvXG4gICAgLy8gZ3Vlc3NVbml0KCkncyBhYmJyZXZpYXRpb24tZ3Vlc3NpbmcgZmFsbGJhY2sgaXMgZ2VudWluZWx5IHJlYWNoYWJsZVxuICAgIC8vIGhlcmUgZm9yIHVuaXRzIG5vIGVuYWJsZWQgbGFuZ3VhZ2UncyBkaWN0aW9uYXJ5IHJlY29nbml6ZXMuXG4gICAgY29uc3QgYWdvTWF0Y2ggPSB0ZXh0Lm1hdGNoKC9eKFxcZCspXFxzKyhcXHcrKVxccythZ28kL2kpO1xuICAgIGlmIChhZ29NYXRjaCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChhZ29NYXRjaFsxXSk7XG4gICAgICBjb25zdCB1bml0U3RyID0gYWdvTWF0Y2hbMl0udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICBjb25zdCB1bml0ID0gdGhpcy5ndWVzc1VuaXQodW5pdFN0cik7XG4gICAgICByZXR1cm4gbW9tZW50KCkuc3VidHJhY3QodmFsdWUsIHVuaXQpLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBwYXN0IGV4cHJlc3Npb25zIGluIGFsbCBsYW5ndWFnZXMgKGUuZy4sIFwiaWwgeSBhIDMgbWludXRlc1wiLCBcInZvciAyIFN0dW5kZW5cIiwgZXRjLilcbiAgICBmb3IgKGNvbnN0IGxhbmcgb2YgdGhpcy5sYW5ndWFnZXMpIHtcbiAgICAgIGNvbnN0IG1pbnV0ZXNBZ29QYXR0ZXJuID0gdGhpcy50Yy50cmFuc2xhdGUoXCJtaW51dGVzYWdvXCIsIGxhbmcpO1xuICAgICAgY29uc3QgaG91cnNBZ29QYXR0ZXJuID0gdGhpcy50Yy50cmFuc2xhdGUoXCJob3Vyc2Fnb1wiLCBsYW5nKTtcbiAgICAgIGNvbnN0IGRheXNBZ29QYXR0ZXJuID0gdGhpcy50Yy50cmFuc2xhdGUoXCJkYXlzYWdvXCIsIGxhbmcpO1xuICAgICAgY29uc3Qgd2Vla3NBZ29QYXR0ZXJuID0gdGhpcy50Yy50cmFuc2xhdGUoXCJ3ZWVrc2Fnb1wiLCBsYW5nKTtcbiAgICAgIGNvbnN0IG1vbnRoc0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcIm1vbnRoc2Fnb1wiLCBsYW5nKTtcblxuICAgICAgY29uc3QgcGF0dGVybnMgPSBbXG4gICAgICAgIHsgcGF0dGVybjogbWludXRlc0Fnb1BhdHRlcm4sIHVuaXQ6ICdtaW51dGVzJyBhcyBjb25zdCB9LFxuICAgICAgICB7IHBhdHRlcm46IGhvdXJzQWdvUGF0dGVybiwgdW5pdDogJ2hvdXJzJyBhcyBjb25zdCB9LFxuICAgICAgICB7IHBhdHRlcm46IGRheXNBZ29QYXR0ZXJuLCB1bml0OiAnZGF5cycgYXMgY29uc3QgfSxcbiAgICAgICAgeyBwYXR0ZXJuOiB3ZWVrc0Fnb1BhdHRlcm4sIHVuaXQ6ICd3ZWVrcycgYXMgY29uc3QgfSxcbiAgICAgICAgeyBwYXR0ZXJuOiBtb250aHNBZ29QYXR0ZXJuLCB1bml0OiAnbW9udGhzJyBhcyBjb25zdCB9LFxuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCB7IHBhdHRlcm4sIHVuaXQgfSBvZiBwYXR0ZXJucykge1xuICAgICAgICBjb25zdCByZWdleCA9IHRoaXMuYnVpbGRBZ29SZWdleChwYXR0ZXJuKTtcbiAgICAgICAgaWYgKHJlZ2V4KSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSBjbGVhbmVkVGV4dC5tYXRjaChyZWdleCk7XG4gICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KG1hdGNoWzFdKTtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoKS5zdWJ0cmFjdCh2YWx1ZSwgdW5pdCkudG9EYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3VmZml4LXN0eWxlIHBhc3QgZXhwcmVzc2lvbnMsIGUuZy4gUG9ydHVndWVzZSBcIjMgZGlhcyBhdHLDoXNcIiAoMyBkYXlzIGFnbylcbiAgICBjb25zdCBhZ29TdWZmaXhNYXRjaCA9IHRoaXMucmVnZXhBZ29TdWZmaXggPyBjbGVhbmVkVGV4dC5tYXRjaCh0aGlzLnJlZ2V4QWdvU3VmZml4KSA6IG51bGw7XG4gICAgaWYgKGFnb1N1ZmZpeE1hdGNoKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGFnb1N1ZmZpeE1hdGNoWzFdKTtcbiAgICAgIGNvbnN0IHVuaXRTdHIgPSBhZ29TdWZmaXhNYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHVuaXQgPSB0aGlzLmd1ZXNzVW5pdCh1bml0U3RyKTtcbiAgICAgIHJldHVybiBtb21lbnQoKS5zdWJ0cmFjdCh2YWx1ZSwgdW5pdCkudG9EYXRlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDb252ZXJ0cyBhbiBcIlggYWdvXCIgdHJhbnNsYXRpb24gdGVtcGxhdGUgaW50byBhIG1hdGNoaW5nIHJlZ2V4LlxuICAvLyBFeGFtcGxlOiBcImlsIHkgYSAle3RpbWVEZWx0YX0gbWludXRlc1wiIC0+IFwiaWwgeSBhIChcXGQrKSBtaW51dGVzXCJcbiAgLy8gRXhhbXBsZTogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDQvNC40L3Rg9GCfNC80LjQvdGD0YLRg3zQvNC40L3Rg9GC0Ysg0L3QsNC30LDQtFwiIChSdXNzaWFuXG4gIC8vIGdyYW1tYXRpY2FsIGZvcm1zKSAtPiBcItGH0LXRgNC10LcgKFxcZCspICg/OtC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRiykg0L3QsNC30LDQtFwiXG4gIC8vIEV4YW1wbGU6IFwiJXt0aW1lRGVsdGF95aSp5YmNXCIgKENoaW5lc2UsIG5vIHNwYWNlcykgLT4gXCIoXFxkKynlpKnliY1cIlxuICBwcml2YXRlIGJ1aWxkQWdvUmVnZXgocGF0dGVybjogc3RyaW5nKTogUmVnRXhwIHwgbnVsbCB7XG4gICAgaWYgKCFwYXR0ZXJuIHx8IHBhdHRlcm4gPT09IFwiTk9URk9VTkRcIikgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBlc2NhcGVSZWdleCA9IChzdHI6IHN0cmluZykgPT4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XG4gICAgLy8gUGxhY2Vob2xkZXIgc3dhcHBlZCBpbiBiZWZvcmUgZXNjYXBpbmcgYW5kIGJhY2sgb3V0IGFmdGVyd2FyZHMsIHNvXG4gICAgLy8gJXt0aW1lRGVsdGF9IGJlY29tZXMgYSByZWFsIGNhcHR1cmUgZ3JvdXAgaW5zdGVhZCBvZiBiZWluZyBtYW5nbGVkIGJ5XG4gICAgLy8gZXNjYXBpbmcgaXRzIG93biBpbnNlcnRlZCBcIihcXGQrKVwiLCBhbmQgc28gaXQgc3RpbGwgd29ya3Mgd2hlbiBlbWJlZGRlZFxuICAgIC8vIGluIGEgdG9rZW4gd2l0aCBubyBzdXJyb3VuZGluZyB3aGl0ZXNwYWNlIChlLmcuIENoaW5lc2UgXCIle3RpbWVEZWx0YX3lpKnliY1cIikuXG4gICAgY29uc3QgUExBQ0VIT0xERVIgPSAnXFx1MDAwMFRJTUVERUxUQVxcdTAwMDAnO1xuXG4gICAgY29uc3QgcmVnZXhTdHIgPSBwYXR0ZXJuXG4gICAgICAuc3BsaXQoL1xccysvKVxuICAgICAgLm1hcCh0b2tlbiA9PiB7XG4gICAgICAgIGNvbnN0IHdpdGhQbGFjZWhvbGRlciA9IHRva2VuLnJlcGxhY2UoLyVcXHt0aW1lRGVsdGFcXH0vZywgUExBQ0VIT0xERVIpO1xuICAgICAgICAvLyBcInxcIiBpbnNpZGUgYSB0b2tlbiBtZWFucyBtdWx0aXBsZSBncmFtbWF0aWNhbCBmb3JtcyBvZiB0aGUgc2FtZVxuICAgICAgICAvLyB3b3JkIChlLmcuIFJ1c3NpYW4gXCLQvNC40L3Rg9GCfNC80LjQvdGD0YLRg3zQvNC40L3Rg9GC0YtcIik6IHR1cm4gaXQgaW50byBhblxuICAgICAgICAvLyBhbHRlcm5hdGlvbiBpbnN0ZWFkIG9mIGVzY2FwaW5nIGl0IGludG8gYSBsaXRlcmFsIHBpcGUuXG4gICAgICAgIGlmICh3aXRoUGxhY2Vob2xkZXIuaW5jbHVkZXMoJ3wnKSkge1xuICAgICAgICAgIGNvbnN0IGFsdGVybmF0aXZlcyA9IHdpdGhQbGFjZWhvbGRlclxuICAgICAgICAgICAgLnNwbGl0KCd8JylcbiAgICAgICAgICAgIC5tYXAoYWx0ID0+IGVzY2FwZVJlZ2V4KGFsdCkuc3BsaXQoUExBQ0VIT0xERVIpLmpvaW4oJyhcXFxcZCspJykpO1xuICAgICAgICAgIHJldHVybiBgKD86JHthbHRlcm5hdGl2ZXMuam9pbignfCcpfSlgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlc2NhcGVSZWdleCh3aXRoUGxhY2Vob2xkZXIpLnNwbGl0KFBMQUNFSE9MREVSKS5qb2luKCcoXFxcXGQrKScpO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCdcXFxccysnKTtcblxuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeJHtyZWdleFN0cn0kYCwgJ2knKTtcbiAgfVxuXG4gIC8vIFNoYXJlZCBhYmJyZXZpYXRpb24tZ3Vlc3NpbmcgZmFsbGJhY2sgZm9yIHVuaXQgd29yZHMgdGhhdCBhcmVuJ3QgaW4gYW55XG4gIC8vIGVuYWJsZWQgbGFuZ3VhZ2UncyBkaWN0aW9uYXJ5LiBPbmx5IHJlYWNoYWJsZSBmcm9tIGNhbGxlcnMgd2hvc2UgcmVnZXhcbiAgLy8gY2FwdHVyZXMgdGhlIHVuaXQgZ2VuZXJpY2FsbHkgKHRoZSBoYXJkY29kZWQgRW5nbGlzaCBcImFnb1wiIHJlZ2V4IGFib3ZlLFxuICAvLyBhbmQgdGhlIG11bHRpLXVuaXQgXCJpbiBYIGFuZCBZXCIgc3BsaXQgYmVsb3cpIC0tIHJlZ2V4UmVsYXRpdmUgYW5kIHRoZVxuICAvLyBzdWZmaXggcmVnZXhlcyByZXN0cmljdCB0aGVpciBjYXB0dXJlIGdyb3VwIHRvIGFscmVhZHkta25vd24gd29yZHMsIHNvXG4gIC8vIHRoaXMgZmFsbGJhY2sgY2FuIG5ldmVyIGZpcmUgZm9yIHRoZW0gKHZlcmlmaWVkIGVtcGlyaWNhbGx5IGJlZm9yZSB0aGVcbiAgLy8gZGVhZCBicmFuY2hlcyB0aGF0IHVzZWQgdG8gc2l0IGluIHRob3NlIHBhdGhzIHdlcmUgcmVtb3ZlZCkuXG4gIHByaXZhdGUgZ3Vlc3NVbml0KHVuaXRTdHI6IHN0cmluZyk6IFRpbWVVbml0IHtcbiAgICBjb25zdCBtYXBwZWQgPSB0aGlzLnRpbWVVbml0TWFwLmdldCh1bml0U3RyKTtcbiAgICBpZiAobWFwcGVkKSB7XG4gICAgICByZXR1cm4gbWFwcGVkO1xuICAgIH1cbiAgICBpZiAodW5pdFN0ci5zdGFydHNXaXRoKCdoJykpIHJldHVybiAnaG91cnMnO1xuICAgIGVsc2UgaWYgKHVuaXRTdHIuc3RhcnRzV2l0aCgnZCcpIHx8IHVuaXRTdHIuc3RhcnRzV2l0aCgnaicpKSByZXR1cm4gJ2RheXMnO1xuICAgIGVsc2UgaWYgKHVuaXRTdHIuc3RhcnRzV2l0aCgndycpIHx8IHVuaXRTdHIuc3RhcnRzV2l0aCgncycpKSByZXR1cm4gJ3dlZWtzJztcbiAgICBlbHNlIGlmICh1bml0U3RyID09PSAnbScgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdtaW4nKSkgcmV0dXJuICdtaW51dGVzJztcbiAgICBlbHNlIGlmICh1bml0U3RyLnN0YXJ0c1dpdGgoJ21vJykgfHwgdW5pdFN0ciA9PT0gJ00nIHx8IHVuaXRTdHIuc3RhcnRzV2l0aCgnbW9pcycpKSByZXR1cm4gJ21vbnRocyc7XG4gICAgZWxzZSBpZiAodW5pdFN0ci5zdGFydHNXaXRoKCd5JykgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdhJykpIHJldHVybiAneWVhcnMnO1xuICAgIHJldHVybiAnZGF5cyc7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVWRUwgMjogUkVMQVRJVkUgQ0FMQ1VMQVRJT04gKGluIDIgbWludXRlcywgaW4gMSB5ZWFyLi4uKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSB0cnlSZWxhdGl2ZUNhbGN1bGF0aW9uKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgLy8gRmlyc3QgY2hlY2sgY29tYmluYXRpb25zIFwiaW4gMiB3ZWVrcyBhbmQgMyBkYXlzXCIgb3IgbXVsdGlwbGUgY29tYmluYXRpb25zXG4gICAgLy8gVHJ5IHRvIHBhcnNlIG11bHRpcGxlIGNvbWJpbmF0aW9ucyBsaWtlIFwiaW4gMSB5ZWFyIGFuZCAyIG1vbnRocyBhbmQgMyB3ZWVrcyBhbmQgNCBkYXlzXCJcbiAgICBsZXQgaGFzTXVsdGlVbml0cyA9IGZhbHNlO1xuICAgIGNvbnN0IHRvdGFsTW9tZW50ID0gbW9tZW50KCk7XG5cbiAgICAvLyBUcnkgdG8gbWF0Y2ggYWxsIFwiWCB1bml0XCIgcGF0dGVybnMgYWZ0ZXIgXCJpblwiXG4gICAgY29uc3QgaW5QYXR0ZXJucyA9IEFycmF5LmZyb20obmV3IFNldCh0aGlzLmxhbmd1YWdlcy5tYXAobCA9PiB0aGlzLnRjLnRyYW5zbGF0ZShcImluXCIsIGwpKS5maWx0ZXIodiA9PiB2ICE9PSBcIk5PVEZPVU5EXCIpLmZsYXRNYXAodiA9PiB2LnNwbGl0KFwifFwiKSkpKTtcbiAgICBjb25zdCBhbmRQYXR0ZXJucyA9IEFycmF5LmZyb20obmV3IFNldCh0aGlzLmxhbmd1YWdlcy5tYXAobCA9PiB0aGlzLnRjLnRyYW5zbGF0ZShcImFuZFwiLCBsKSkuZmlsdGVyKHYgPT4gdiAhPT0gXCJOT1RGT1VORFwiKS5mbGF0TWFwKHYgPT4gdi5zcGxpdChcInxcIikpKSk7XG5cbiAgICBjb25zdCBpblJlZ2V4ID0gbmV3IFJlZ0V4cChgXigke3RoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihpblBhdHRlcm5zKX0pXFxcXHMrYCwgJ2knKTtcbiAgICBjb25zdCBhbmRSZWdleCA9IG5ldyBSZWdFeHAoYFxcXFxzKygke3RoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihhbmRQYXR0ZXJucyl9KVxcXFxzK2AsICdnaScpO1xuXG4gICAgaWYgKGNsZWFuZWRUZXh0Lm1hdGNoKGluUmVnZXgpKSB7XG4gICAgICBjb25zdCB3aXRob3V0SW4gPSBjbGVhbmVkVGV4dC5yZXBsYWNlKGluUmVnZXgsICcnKTtcbiAgICAgIGNvbnN0IHBhcnRzID0gd2l0aG91dEluLnNwbGl0KGFuZFJlZ2V4KS5maWx0ZXIocCA9PiBwICYmICFhbmRQYXR0ZXJucy5zb21lKGEgPT4gYS50b0xvd2VyQ2FzZSgpID09PSBwLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gMikge1xuICAgICAgICAvLyBNdWx0aXBsZSB1bml0cyBkZXRlY3RlZCAoMiBvciBtb3JlKVxuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgICAgICBjb25zdCB1bml0TWF0Y2ggPSBwYXJ0LnRyaW0oKS5tYXRjaCgvXihcXGQrKVxccysoW15cXHNdKykkL2kpO1xuICAgICAgICAgIGlmICh1bml0TWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQodW5pdE1hdGNoWzFdKTtcbiAgICAgICAgICAgIGNvbnN0IHVuaXRTdHIgPSB1bml0TWF0Y2hbMl0udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgICAgICB0b3RhbE1vbWVudC5hZGQodmFsdWUsIHRoaXMuZ3Vlc3NVbml0KHVuaXRTdHIpKTtcbiAgICAgICAgICAgIGhhc011bHRpVW5pdHMgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzTXVsdGlVbml0cykge1xuICAgICAgICAgIHJldHVybiB0b3RhbE1vbWVudC50b0RhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1ZmZpeC1zdHlsZSBjb21iaW5hdGlvbnMsIGUuZy4gQ2hpbmVzZSBcIjLpgLHlkowz5aSp5b6MXCIgKDIgd2Vla3MgYW5kIDMgZGF5cyBsYXRlcilcbiAgICBjb25zdCByZWxDb21iaW5lZFN1ZmZpeE1hdGNoID0gdGhpcy5yZWdleFJlbGF0aXZlQ29tYmluZWRTdWZmaXggPyBjbGVhbmVkVGV4dC5tYXRjaCh0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZFN1ZmZpeCkgOiBudWxsO1xuICAgIGlmIChyZWxDb21iaW5lZFN1ZmZpeE1hdGNoKSB7XG4gICAgICBjb25zdCB2YWx1ZTEgPSBwYXJzZUludChyZWxDb21iaW5lZFN1ZmZpeE1hdGNoWzFdKTtcbiAgICAgIGNvbnN0IHVuaXRTdHIxID0gcmVsQ29tYmluZWRTdWZmaXhNYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHZhbHVlMiA9IHBhcnNlSW50KHJlbENvbWJpbmVkU3VmZml4TWF0Y2hbM10pO1xuICAgICAgY29uc3QgdW5pdFN0cjIgPSByZWxDb21iaW5lZFN1ZmZpeE1hdGNoWzRdLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgICBjb25zdCB1bml0MSA9IHRoaXMuZ3Vlc3NVbml0KHVuaXRTdHIxKTtcbiAgICAgIGNvbnN0IHVuaXQyID0gdGhpcy5ndWVzc1VuaXQodW5pdFN0cjIpO1xuXG4gICAgICByZXR1cm4gbW9tZW50KCkuYWRkKHZhbHVlMSwgdW5pdDEpLmFkZCh2YWx1ZTIsIHVuaXQyKS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBUaGVuIGNoZWNrIHNpbXBsZSBleHByZXNzaW9ucyBcImluIDIgbWludXRlc1wiXG4gICAgY29uc3QgcmVsTWF0Y2ggPSBjbGVhbmVkVGV4dC5tYXRjaCh0aGlzLnJlZ2V4UmVsYXRpdmUpO1xuICAgIGlmIChyZWxNYXRjaCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChyZWxNYXRjaFsxXSk7XG4gICAgICBjb25zdCB1bml0U3RyID0gcmVsTWF0Y2hbMl0udG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgIC8vIHVuaXRTdHIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHJlZ2lzdGVyZWQga2V5IGhlcmU6IHJlZ2V4UmVsYXRpdmUnc1xuICAgICAgLy8gdW5pdCBjYXB0dXJlIGdyb3VwIGlzIGJ1aWx0IGZyb20gdGhpcy50Yy5jb2xsZWN0V29yZHMoKSBmb3IgdGhlIHNhbWVcbiAgICAgIC8vIHNpeCBrZXlzIHRoYXQgcG9wdWxhdGUgdGltZVVuaXRNYXAsIHNvIGEgc3VjY2Vzc2Z1bCByZWdleCBtYXRjaFxuICAgICAgLy8gYWxyZWFkeSBpbXBsaWVzIGEgaGl0IC0tIHRoZSBmYWxsYmFjayBiZWxvdyBpcyB1bnJlYWNoYWJsZS5cbiAgICAgIGNvbnN0IHVuaXQgPSB0aGlzLnRpbWVVbml0TWFwLmdldCh1bml0U3RyKSA/PyB0aGlzLmd1ZXNzVW5pdCh1bml0U3RyKTtcblxuICAgICAgLy8gTW9tZW50SlMgaGFuZGxlcyB5ZWFyIHRyYW5zaXRpb25zIHBlcmZlY3RseVxuICAgICAgcmV0dXJuIG1vbWVudCgpLmFkZCh2YWx1ZSwgdW5pdCkudG9EYXRlKCk7XG4gICAgfVxuXG4gICAgLy8gU3VmZml4LXN0eWxlIHNpbXBsZSBleHByZXNzaW9ucywgZS5nLiBDaGluZXNlIFwiMuWkqeW+jFwiICgyIGRheXMgbGF0ZXIpXG4gICAgY29uc3QgcmVsU3VmZml4TWF0Y2ggPSB0aGlzLnJlZ2V4UmVsYXRpdmVTdWZmaXggPyBjbGVhbmVkVGV4dC5tYXRjaCh0aGlzLnJlZ2V4UmVsYXRpdmVTdWZmaXgpIDogbnVsbDtcbiAgICBpZiAocmVsU3VmZml4TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQocmVsU3VmZml4TWF0Y2hbMV0pO1xuICAgICAgY29uc3QgdW5pdFN0ciA9IHJlbFN1ZmZpeE1hdGNoWzJdLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgY29uc3QgdW5pdCA9IHRoaXMuZ3Vlc3NVbml0KHVuaXRTdHIpO1xuICAgICAgcmV0dXJuIG1vbWVudCgpLmFkZCh2YWx1ZSwgdW5pdCkudG9EYXRlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVWRUwgMi41OiBEQVRFIFJBTkdFUyAoZnJvbSBNb25kYXkgdG8gRnJpZGF5KVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUmV0dXJucyBqdXN0IHRoZSBzdGFydCBkYXRlLCBmb3IgZ2V0UGFyc2VkRGF0ZSgpJ3Mgc2luZ2xlLURhdGUgY29udHJhY3RcbiAgLy8gLS0gc2VlIGdldFBhcnNlZERhdGVSYW5nZSgpIGZvciB0aGUgZnVsbCByYW5nZSB3aXRoIGEgZGF0ZSBsaXN0LlxuICBwcml2YXRlIHRyeURhdGVSYW5nZVNob3J0Y3V0KGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3QgcmFuZ2VNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhEYXRlUmFuZ2UpO1xuICAgIGlmICghcmFuZ2VNYXRjaCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBzdGFydERheU5hbWUgPSByYW5nZU1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbSA9IG1vbWVudCgpO1xuICAgIGNvbnN0IHN0YXJ0RGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KHN0YXJ0RGF5TmFtZSk7XG5cbiAgICBjb25zdCBzdGFydE1vbWVudCA9IG1vbWVudCgpLmRheShzdGFydERheUluZGV4KTtcbiAgICBpZiAoc3RhcnRNb21lbnQuaXNCZWZvcmUobSwgJ2RheScpKSB7XG4gICAgICBzdGFydE1vbWVudC5hZGQoMSwgJ3dlZWsnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhcnRNb21lbnQudG9EYXRlKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVWRUwgMzogV0VFS0RBWVMgKG5leHQgZnJpZGF5Li4uKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSB0cnlXZWVrZGF5cyhjbGVhbmVkVGV4dDogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIC8vIEZpcnN0IGNoZWNrIFwibmV4dCBNb25kYXkgYXQgM3BtXCJcbiAgICBjb25zdCB3ZWVrV2l0aFRpbWVNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhXZWVrZGF5V2l0aFRpbWUpO1xuICAgIGlmICh3ZWVrV2l0aFRpbWVNYXRjaCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gd2Vla1dpdGhUaW1lTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGRheU5hbWUgPSB3ZWVrV2l0aFRpbWVNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgdGltZVBhcnQgPSB3ZWVrV2l0aFRpbWVNYXRjaFszXS50cmltKCk7XG5cbiAgICAgIGNvbnN0IG0gPSBtb21lbnQoKTtcbiAgICAgIGNvbnN0IGRheUluZGV4ID0gdGhpcy5nZXREYXlPZldlZWtJbmRleChkYXlOYW1lKTtcblxuICAgICAgaWYgKHRoaXMucHJlZml4S2V5d29yZHMudGhpcy5oYXMocHJlZml4KSkge1xuICAgICAgICBtLmRheShkYXlJbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJlZml4S2V5d29yZHMubmV4dC5oYXMocHJlZml4KSkge1xuICAgICAgICBtLmFkZCgxLCAnd2Vla3MnKS5kYXkoZGF5SW5kZXgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByZWZpeEtleXdvcmRzLmxhc3QuaGFzKHByZWZpeCkpIHtcbiAgICAgICAgLy8gUG91ciBcImxhc3QvZGVybmllciA8am91cj5cIiwgb24gY2libGUgdG91am91cnMgbGEgc2VtYWluZSBwcsOpY8OpZGVudGVcbiAgICAgICAgbS5kYXkoZGF5SW5kZXgpLnN1YnRyYWN0KDEsICd3ZWVrJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFBhcnNlIHRpbWUgd2l0aCBjaHJvbm8tbm9kZS4gZ2V0UGFyc2VkRGF0ZVJlc3VsdCByZXR1cm5zIG51bGxcbiAgICAgIC8vIChyYXRoZXIgdGhhbiBhIFwibm93XCIgcGxhY2Vob2xkZXIpIHdoZW4gbm90aGluZyBtYXRjaGVkLCBzbyBhIHRpbWVcbiAgICAgIC8vIHBhcnQgY2hyb25vLW5vZGUgY2FuJ3QgcGFyc2UgKGUuZy4gXCJuZXh0IE1vbmRheSBhdCB6enFxeHhcIikgZmFsbHNcbiAgICAgIC8vIGJhY2sgdG8gdGhlIGFscmVhZHktY29tcHV0ZWQgd2Vla2RheSBkYXRlIGJlbG93LCBpbnN0ZWFkIG9mXG4gICAgICAvLyBzaWxlbnRseSBkaXNjYXJkaW5nIGl0IGluIGZhdm9yIG9mIHRoZSBhY3R1YWwgY3VycmVudCBkYXRlL3RpbWUuXG4gICAgICBjb25zdCB0aW1lUmVzdWx0ID0gdGhpcy5nZXRQYXJzZWREYXRlUmVzdWx0KHRpbWVQYXJ0LCBtLnRvRGF0ZSgpKTtcbiAgICAgIGlmICh0aW1lUmVzdWx0KSB7XG4gICAgICAgIHJldHVybiB0aW1lUmVzdWx0O1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aW1lIHBhcnNpbmcgZmFpbHMsIHJldHVybiBqdXN0IHRoZSBkYXRlXG4gICAgICByZXR1cm4gbS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBUaGVuIGNoZWNrIHNpbXBsZSBleHByZXNzaW9ucyBcIm5leHQgTW9uZGF5XCJcbiAgICBjb25zdCB3ZWVrTWF0Y2ggPSBjbGVhbmVkVGV4dC5tYXRjaCh0aGlzLnJlZ2V4V2Vla2RheSk7XG4gICAgaWYgKHdlZWtNYXRjaCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gd2Vla01hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBkYXlOYW1lID0gd2Vla01hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGNvbnN0IG0gPSBtb21lbnQoKTtcbiAgICAgIGNvbnN0IGRheUluZGV4ID0gdGhpcy5nZXREYXlPZldlZWtJbmRleChkYXlOYW1lKTtcblxuICAgICAgaWYgKHRoaXMucHJlZml4S2V5d29yZHMudGhpcy5oYXMocHJlZml4KSkge1xuICAgICAgICBtLmRheShkYXlJbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJlZml4S2V5d29yZHMubmV4dC5oYXMocHJlZml4KSkge1xuICAgICAgICBtLmFkZCgxLCAnd2Vla3MnKS5kYXkoZGF5SW5kZXgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByZWZpeEtleXdvcmRzLmxhc3QuaGFzKHByZWZpeCkpIHtcbiAgICAgICAgLy8gUG91ciBcImxhc3QvZGVybmllciA8am91cj5cIiwgb24gY2libGUgdG91am91cnMgbGEgc2VtYWluZSBwcsOpY8OpZGVudGVcbiAgICAgICAgbS5kYXkoZGF5SW5kZXgpLnN1YnRyYWN0KDEsICd3ZWVrJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3Igd2Vla2RheSB3aXRob3V0IHByZWZpeCAoZS5nLiwgXCJ3ZWRuZXNkYXlcIiwgXCJmcmlkYXlcIilcbiAgICAvLyBUaGlzIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBcIm5leHQgW2RheV1cIiBvciBcInRoaXMgW2RheV1cIiBpZiB0b2RheVxuICAgIGNvbnN0IHdlZWtPbmx5TWF0Y2ggPSBjbGVhbmVkVGV4dC5tYXRjaCh0aGlzLnJlZ2V4V2Vla2RheU9ubHkpO1xuICAgIGlmICh3ZWVrT25seU1hdGNoKSB7XG4gICAgICBjb25zdCBkYXlOYW1lID0gd2Vla09ubHlNYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgbSA9IG1vbWVudCgpO1xuICAgICAgY29uc3QgZGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGRheU5hbWUpO1xuXG4gICAgICBtLmRheShkYXlJbmRleCk7XG4gICAgICAvLyBJZiB0aGUgZGF5IGlzIGluIHRoZSBwYXN0IChiZWZvcmUgdG9kYXkpLCBtb3ZlIHRvIG5leHQgd2Vla1xuICAgICAgaWYgKG0uaXNCZWZvcmUobW9tZW50KCksICdkYXknKSkge1xuICAgICAgICBtLmFkZCgxLCAnd2VlaycpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG0udG9EYXRlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVWRUwgMy41YTogXCJ0aGUgWHRoIG9mIG5leHQgbW9udGhcIiAvIFwidGhlIE50aCBvZiBuZXh0IHllYXJcIlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSB0cnlPcmRpbmFsT2ZNb250aChjbGVhbmVkVGV4dDogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIGNvbnN0IG9yZGluYWxPZk1vbnRoTWF0Y2ggPSBjbGVhbmVkVGV4dC5tYXRjaCh0aGlzLnJlZ2V4T3JkaW5hbE9mTW9udGgpO1xuICAgIGlmICghb3JkaW5hbE9mTW9udGhNYXRjaCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBvcmRpbmFsU3RyID0gb3JkaW5hbE9mTW9udGhNYXRjaFsxXS50cmltKCk7XG4gICAgLy8gR3JvdXBzOiBbMV09b3JkaW5hbCwgWzJdPXByZWZpeCBiZWZvcmUgbW9udGggKG9wdGlvbmFsKSwgWzNdPW1vbnRoLCBbNF09cHJlZml4IGFmdGVyIG1vbnRoIChvcHRpb25hbCwgZm9yIEZyZW5jaClcbiAgICBjb25zdCBwcmVmaXhCZWZvcmUgPSBvcmRpbmFsT2ZNb250aE1hdGNoWzJdPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgIGNvbnN0IHBlcmlvZFN0ciA9IG9yZGluYWxPZk1vbnRoTWF0Y2hbM10/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgY29uc3QgcHJlZml4QWZ0ZXIgPSBvcmRpbmFsT2ZNb250aE1hdGNoWzRdPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuXG4gICAgLy8gVXNlIHByZWZpeCBhZnRlciBtb250aCBpZiBwcmVzZW50IChGcmVuY2ggaW52ZXJzaW9uKSwgb3RoZXJ3aXNlIHByZWZpeCBiZWZvcmVcbiAgICBjb25zdCBwcmVmaXggPSBwcmVmaXhBZnRlciB8fCBwcmVmaXhCZWZvcmU7XG5cbiAgICAvLyBQYXJzZSBvcmRpbmFsIG51bWJlciAoZS5nLiwgXCIxNXRoXCIgLT4gMTUsIFwiZmlyc3RcIiAtPiAxKVxuICAgIGNvbnN0IGRheU51bWJlciA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4ob3JkaW5hbFN0cik7XG5cbiAgICAvLyBEZXRlcm1pbmUgd2hpY2ggcGVyaW9kIChtb250aC95ZWFyKSB0byB0YXJnZXRcbiAgICBjb25zdCB0YXJnZXRNb21lbnQgPSBtb21lbnQoKTtcbiAgICBjb25zdCBpc01vbnRoID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoJ21vbnRoJywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocGVyaW9kU3RyKTtcbiAgICBjb25zdCBpc1llYXIgPSAhaXNNb250aCAmJiB0aGlzLnRjLmNvbGxlY3RXb3JkcygneWVhcicsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZFN0cik7XG5cbiAgICBpZiAoaXNNb250aCkge1xuICAgICAgaWYgKHByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLm5leHQuaGFzKHByZWZpeCkpIHtcbiAgICAgICAgdGFyZ2V0TW9tZW50LmFkZCgxLCAnbW9udGhzJykuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSBpZiAocHJlZml4ICYmIHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3VidHJhY3QoMSwgJ21vbnRocycpLnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBcInRoaXNcIi9ubyBwcmVmaXggYm90aCBtZWFuIFwidGhpcyBtb250aFwiXG4gICAgICAgIHRhcmdldE1vbWVudC5zdGFydE9mKCdtb250aCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgdGhlIGRheSBvZiBtb250aCAoY2xhbXAgdG8gdmFsaWQgcmFuZ2UpXG4gICAgICBjb25zdCBkYXlzSW5Nb250aCA9IHRhcmdldE1vbWVudC5kYXlzSW5Nb250aCgpO1xuICAgICAgY29uc3QgdGFyZ2V0RGF5ID0gTWF0aC5taW4oZGF5TnVtYmVyLCBkYXlzSW5Nb250aCk7XG4gICAgICB0YXJnZXRNb21lbnQuZGF0ZSh0YXJnZXREYXkpO1xuICAgIH0gZWxzZSBpZiAoaXNZZWFyKSB7XG4gICAgICBpZiAocHJlZml4ICYmIHRoaXMucHJlZml4S2V5d29yZHMubmV4dC5oYXMocHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICd5ZWFycycpLnN0YXJ0T2YoJ3llYXInKTtcbiAgICAgIH0gZWxzZSBpZiAocHJlZml4ICYmIHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3VidHJhY3QoMSwgJ3llYXJzJykuc3RhcnRPZigneWVhcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN0YXJ0T2YoJ3llYXInKTtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIHllYXIsIGludGVycHJldCBhcyBkYXkgb2YgeWVhciAoMS0zNjUvMzY2KVxuICAgICAgY29uc3QgZGF5c0luWWVhciA9IHRhcmdldE1vbWVudC5pc0xlYXBZZWFyKCkgPyAzNjYgOiAzNjU7XG4gICAgICBjb25zdCB0YXJnZXREYXlPZlllYXIgPSBNYXRoLm1pbihkYXlOdW1iZXIsIGRheXNJblllYXIpO1xuICAgICAgdGFyZ2V0TW9tZW50LmRheU9mWWVhcih0YXJnZXREYXlPZlllYXIpO1xuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRNb21lbnQudG9EYXRlKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVWRUwgMy41YjogXCJsYXN0IGRheSBvZiBtb250aFwiIC8gXCJkZXJuaWVyIGpvdXIgZHUgbW9pc1wiXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeUxhc3REYXlPZk1vbnRoKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3QgbGFzdERheU9mTW9udGhNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhMYXN0RGF5T2ZNb250aCk7XG4gICAgaWYgKCFsYXN0RGF5T2ZNb250aE1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIEdyb3VwczogWzFdPXByZWZpeCBiZWZvcmUgXCJsYXN0XCIgKG9wdGlvbmFsKSwgWzJdPVwibGFzdFwiLCBbM109ZGF5LCBbNF09cHJlZml4IGJlZm9yZSBtb250aCAob3B0aW9uYWwpLCBbNV09bW9udGgsIFs2XT1wcmVmaXggYWZ0ZXIgbW9udGggKG9wdGlvbmFsLCBmb3IgRnJlbmNoKVxuICAgIGNvbnN0IHByZWZpeEJlZm9yZSA9IGxhc3REYXlPZk1vbnRoTWF0Y2hbMV0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgY29uc3QgcGVyaW9kU3RyID0gbGFzdERheU9mTW9udGhNYXRjaFs1XT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwcmVmaXhBZnRlciA9IGxhc3REYXlPZk1vbnRoTWF0Y2hbNl0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgY29uc3QgcHJlZml4QmVmb3JlTW9udGggPSBsYXN0RGF5T2ZNb250aE1hdGNoWzRdPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuXG4gICAgLy8gVXNlIHByZWZpeCBhZnRlciBtb250aCBpZiBwcmVzZW50IChGcmVuY2ggaW52ZXJzaW9uKSwgb3RoZXJ3aXNlIHByZWZpeCBiZWZvcmUgbW9udGgsIG90aGVyd2lzZSBwcmVmaXggYmVmb3JlIFwibGFzdFwiXG4gICAgY29uc3QgcHJlZml4ID0gcHJlZml4QWZ0ZXIgfHwgcHJlZml4QmVmb3JlTW9udGggfHwgcHJlZml4QmVmb3JlO1xuXG4gICAgY29uc3QgdGFyZ2V0TW9tZW50ID0gbW9tZW50KCk7XG4gICAgY29uc3QgaXNNb250aCA9IHRoaXMudGMuY29sbGVjdFdvcmRzKCdtb250aCcsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZFN0cik7XG4gICAgaWYgKCFpc01vbnRoKSByZXR1cm4gbnVsbDtcblxuICAgIGlmIChwcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpKSB7XG4gICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICdtb250aHMnKS5lbmRPZignbW9udGgnKTtcbiAgICB9IGVsc2UgaWYgKHByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLmxhc3QuaGFzKHByZWZpeCkpIHtcbiAgICAgIHRhcmdldE1vbWVudC5zdWJ0cmFjdCgxLCAnbW9udGhzJykuZW5kT2YoJ21vbnRoJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFwidGhpc1wiL25vIHByZWZpeCBib3RoIG1lYW4gXCJ0aGlzIG1vbnRoXCJcbiAgICAgIHRhcmdldE1vbWVudC5lbmRPZignbW9udGgnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0TW9tZW50LnRvRGF0ZSgpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExFVkVMIDMuNWM6IFwiZmlyc3QgTW9uZGF5IG9mIG1vbnRoXCIgLyBcImxhc3QgRnJpZGF5IG9mIG5leHQgbW9udGhcIlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSB0cnlXZWVrZGF5T2ZNb250aChjbGVhbmVkVGV4dDogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIGNvbnN0IHdlZWtkYXlPZk1vbnRoTWF0Y2ggPSBjbGVhbmVkVGV4dC5tYXRjaCh0aGlzLnJlZ2V4V2Vla2RheU9mTW9udGgpO1xuICAgIGlmICghd2Vla2RheU9mTW9udGhNYXRjaCkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBHcm91cHM6IFsxXT1maXJzdC9wcmVmaXgsIFsyXT13ZWVrZGF5LCBbM109cHJlZml4IGJlZm9yZSBtb250aCAob3B0aW9uYWwpLCBbNF09bW9udGgsIFs1XT1wcmVmaXggYWZ0ZXIgbW9udGggKG9wdGlvbmFsLCBmb3IgRnJlbmNoKVxuICAgIGNvbnN0IHByZWZpeE9yRmlyc3QgPSB3ZWVrZGF5T2ZNb250aE1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZGF5TmFtZSA9IHdlZWtkYXlPZk1vbnRoTWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBwcmVmaXhCZWZvcmVNb250aCA9IHdlZWtkYXlPZk1vbnRoTWF0Y2hbM10/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgY29uc3QgcGVyaW9kU3RyID0gd2Vla2RheU9mTW9udGhNYXRjaFs0XT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwcmVmaXhBZnRlciA9IHdlZWtkYXlPZk1vbnRoTWF0Y2hbNV0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgICAvLyBVc2UgcHJlZml4IGFmdGVyIG1vbnRoIGlmIHByZXNlbnQgKEZyZW5jaCBpbnZlcnNpb24pLCBvdGhlcndpc2UgcHJlZml4IGJlZm9yZSBtb250aCwgb3RoZXJ3aXNlIHByZWZpeE9yRmlyc3RcbiAgICBjb25zdCBtb250aFByZWZpeCA9IHByZWZpeEFmdGVyIHx8IHByZWZpeEJlZm9yZU1vbnRoO1xuXG4gICAgY29uc3QgZGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGRheU5hbWUpO1xuICAgIGNvbnN0IGlzRmlyc3QgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImZpcnN0XCIsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHByZWZpeE9yRmlyc3QpO1xuICAgIGNvbnN0IGlzTW9udGggPSB0aGlzLnRjLmNvbGxlY3RXb3JkcygnbW9udGgnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyhwZXJpb2RTdHIpO1xuICAgIGlmICghaXNNb250aCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBpc0xhc3QgPSAhaXNGaXJzdCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLmxhc3QuaGFzKHByZWZpeE9yRmlyc3QpO1xuICAgIGxldCB0YXJnZXRNb21lbnQgPSBtb21lbnQoKTtcblxuICAgIGlmIChpc0ZpcnN0KSB7XG4gICAgICAvLyBGaXJzdCB3ZWVrZGF5IG9mIG1vbnRoXG4gICAgICBpZiAobW9udGhQcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0Lmhhcyhtb250aFByZWZpeCkpIHtcbiAgICAgICAgdGFyZ2V0TW9tZW50LmFkZCgxLCAnbW9udGhzJykuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSBpZiAobW9udGhQcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0Lmhhcyhtb250aFByZWZpeCkpIHtcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN1YnRyYWN0KDEsICdtb250aHMnKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHdlZWtkYXkgaW4gdGhlIHRhcmdldCBtb250aFxuICAgICAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gdGFyZ2V0TW9tZW50LmNsb25lKCkuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIGNvbnN0IGZpcnN0V2Vla2RheUluZGV4ID0gZmlyc3REYXlPZk1vbnRoLmRheSgpO1xuICAgICAgY29uc3QgZGF5c1RvQWRkID0gKGRheUluZGV4IC0gZmlyc3RXZWVrZGF5SW5kZXggKyA3KSAlIDc7XG4gICAgICB0YXJnZXRNb21lbnQgPSBmaXJzdERheU9mTW9udGguYWRkKGRheXNUb0FkZCwgJ2RheXMnKTtcbiAgICB9IGVsc2UgaWYgKGlzTGFzdCkge1xuICAgICAgLy8gTGFzdCB3ZWVrZGF5IG9mIG1vbnRoXG4gICAgICBpZiAobW9udGhQcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0Lmhhcyhtb250aFByZWZpeCkpIHtcbiAgICAgICAgdGFyZ2V0TW9tZW50LmFkZCgxLCAnbW9udGhzJykuZW5kT2YoJ21vbnRoJyk7XG4gICAgICB9IGVsc2UgaWYgKG1vbnRoUHJlZml4ICYmIHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMobW9udGhQcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5zdWJ0cmFjdCgxLCAnbW9udGhzJykuZW5kT2YoJ21vbnRoJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBcInRoaXNcIi9ubyBwcmVmaXggYm90aCBtZWFuIFwidGhpcyBtb250aFwiXG4gICAgICAgIHRhcmdldE1vbWVudC5lbmRPZignbW9udGgnKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmluZCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSB3ZWVrZGF5IGJ5IGdvaW5nIHRvIGVuZCBvZiBtb250aCBhbmQgd29ya2luZyBiYWNrd2FyZHNcbiAgICAgIGNvbnN0IGxhc3REYXlPZk1vbnRoID0gdGFyZ2V0TW9tZW50LmNsb25lKCkuZW5kT2YoJ21vbnRoJyk7XG4gICAgICBjb25zdCBsYXN0V2Vla2RheUluZGV4ID0gbGFzdERheU9mTW9udGguZGF5KCk7XG4gICAgICBjb25zdCBkYXlzVG9TdWJ0cmFjdCA9IChsYXN0V2Vla2RheUluZGV4IC0gZGF5SW5kZXggKyA3KSAlIDc7XG4gICAgICB0YXJnZXRNb21lbnQgPSBsYXN0RGF5T2ZNb250aC5zdWJ0cmFjdChkYXlzVG9TdWJ0cmFjdCwgJ2RheXMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUHJlZml4LWJhc2VkIChuZXh0L3RoaXMpIC0gZGVmYXVsdCB0byBmaXJzdFxuICAgICAgaWYgKG1vbnRoUHJlZml4ICYmIHRoaXMucHJlZml4S2V5d29yZHMubmV4dC5oYXMobW9udGhQcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5hZGQoMSwgJ21vbnRocycpLnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBcInRoaXNcIi9ubyBwcmVmaXggYm90aCBtZWFuIFwidGhpcyBtb250aFwiXG4gICAgICAgIHRhcmdldE1vbWVudC5zdGFydE9mKCdtb250aCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSB3ZWVrZGF5IGluIHRoZSB0YXJnZXQgbW9udGhcbiAgICAgIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IHRhcmdldE1vbWVudC5jbG9uZSgpLnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICBjb25zdCBmaXJzdFdlZWtkYXlJbmRleCA9IGZpcnN0RGF5T2ZNb250aC5kYXkoKTtcbiAgICAgIGNvbnN0IGRheXNUb0FkZCA9IChkYXlJbmRleCAtIGZpcnN0V2Vla2RheUluZGV4ICsgNykgJSA3O1xuICAgICAgdGFyZ2V0TW9tZW50ID0gZmlyc3REYXlPZk1vbnRoLmFkZChkYXlzVG9BZGQsICdkYXlzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldE1vbWVudC50b0RhdGUoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCA0YTogXCJuZXh0IG1vbnRoXCIgLyBcIm5leHQgeWVhclwiIHNob3J0Y3V0IChiZWZvcmUgZmFsbGluZyB0byBjaHJvbm8tbm9kZSlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE5vdGU6IFwibmV4dCB3ZWVrXCIgaXMgaW50ZW50aW9uYWxseSBOT1QgaGFuZGxlZCBoZXJlIC0tIGl0J3MgbGVmdCB0b1xuICAvLyBnZXRQYXJzZWREYXRlUmFuZ2UoKSB0byBnZW5lcmF0ZSBhIGZ1bGwgZGF0ZSBsaXN0LCBzbyB0aGF0IGNhc2UgZmFsbHNcbiAgLy8gdGhyb3VnaCB0byB0aGUgY2hyb25vLW5vZGUgZmFsbGJhY2sgaW5zdGVhZC5cbiAgcHJpdmF0ZSB0cnlOZXh0UGVyaW9kU2hvcnRjdXQoY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICAvLyBVc2VzIFxccyogKG5vdCBcXHMrKSBzbyB0aGlzIGFsc28gbWF0Y2hlcyBsYW5ndWFnZXMgd2l0aG91dCBzcGFjZXMgYmV0d2VlblxuICAgIC8vIHdvcmRzIChlLmcuIENoaW5lc2UgXCLkuIvkuIDlgIvmmJ/mnJ9cIikuIFRoZSBwZXJpb2QgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBrbm93blxuICAgIC8vIHdlZWsvbW9udGgveWVhciB3b3JkcyBkaXJlY3RseSAobm90IGEgZ2VuZXJpYyBcXFMrL1xcdysgY2FwdHVyZSk6IG90aGVyd2lzZSBhXG4gICAgLy8gc2hvcnRlciB3b3JkIHRoYXQgaXMgYSBwcmVmaXggb2YgYSBsb25nZXIgb25lIChlLmcuIEZyZW5jaCBcInByb2NoYWluXCIgdnNcbiAgICAvLyBcInByb2NoYWluZVwiKSBjYW4gbWF0Y2ggZmlyc3QgYW5kIGxlYXZlIHRoZSByZW1haW5pbmcgbGV0dGVycyB0byBiZVxuICAgIC8vIG1pcy1jYXB0dXJlZCBhcyB0aGUgcGVyaW9kLlxuICAgIGNvbnN0IG5leHRQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKEFycmF5LmZyb20odGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0KSk7XG4gICAgY29uc3QgcGVyaW9kV29yZHNBbGwgPSBbJ3dlZWsnLCAnbW9udGgnLCAneWVhciddLmZsYXRNYXAoa2V5ID0+IHRoaXMudGMuY29sbGVjdFdvcmRzKGtleSkpO1xuICAgIGNvbnN0IHBlcmlvZFBhdHRlcm5BbGwgPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24ocGVyaW9kV29yZHNBbGwpO1xuICAgIGNvbnN0IG5leHREYXRlTWF0Y2ggPSBjbGVhbmVkVGV4dC5tYXRjaChuZXcgUmVnRXhwKGAoJHtuZXh0UGF0dGVybn0pXFxcXHMqKCR7cGVyaW9kUGF0dGVybkFsbH0pYCwgJ2knKSk7XG4gICAgaWYgKCFuZXh0RGF0ZU1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHBlcmlvZCA9IG5leHREYXRlTWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBpc05leHRXZWVrID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoJ3dlZWsnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyhwZXJpb2QpO1xuICAgIGlmIChpc05leHRXZWVrKSByZXR1cm4gbnVsbDtcblxuICAgIGlmICh0aGlzLnRjLmNvbGxlY3RXb3JkcygnbW9udGgnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyhwZXJpb2QpKSB7XG4gICAgICByZXR1cm4gbW9tZW50KCkuYWRkKDEsICdtb250aHMnKS5zdGFydE9mKCdtb250aCcpLnRvRGF0ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ3llYXInLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyhwZXJpb2QpKSB7XG4gICAgICByZXR1cm4gbW9tZW50KCkuYWRkKDEsICd5ZWFycycpLnN0YXJ0T2YoJ3llYXInKS50b0RhdGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVWRUwgNGI6IFRIRSBSRVNUIChjaHJvbm8tbm9kZSBsaWJyYXJ5LCBmaW5hbCBmYWxsYmFjaylcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHByaXZhdGUgY2hyb25vRmFsbGJhY2soc2VsZWN0ZWRUZXh0OiBzdHJpbmcsIHdlZWtTdGFydFByZWZlcmVuY2U6IERheU9mV2Vlayk6IERhdGUge1xuICAgIGlmICghdGhpcy5jaHJvbm9zIHx8IHRoaXMuY2hyb25vcy5sZW5ndGggPT09IDApIHJldHVybiBuZXcgRGF0ZSgpO1xuXG4gICAgLy8gV2UgdXNlIHRoZSBcIkJlc3QgU2NvcmVcIiB0ZWNobmlxdWUgdG8gY2hvb3NlIGJldHdlZW4gRU4gYW5kIEZSXG4gICAgY29uc3Qgd2Vla1N0YXJ0ID0gd2Vla1N0YXJ0UHJlZmVyZW5jZSA9PT0gXCJsb2NhbGUtZGVmYXVsdFwiID8gZ2V0TG9jYWxlV2Vla1N0YXJ0KCkgOiB3ZWVrU3RhcnRQcmVmZXJlbmNlO1xuICAgIGNvbnN0IGxvY2FsZSA9IHsgd2Vla1N0YXJ0OiBnZXRXZWVrTnVtYmVyKHdlZWtTdGFydCkgfTtcbiAgICBjb25zdCByZWZlcmVuY2VEYXRlID0gbmV3IERhdGUoKTtcblxuICAgIC8vIFN0YW5kYXJkIGxpYnJhcnkgY2FsbCB3aXRoIGZvcmNlZCBmb3J3YXJkRGF0ZVxuICAgIGNvbnN0IGNocm9ub1Jlc3VsdCA9IHRoaXMuZ2V0UGFyc2VkRGF0ZVJlc3VsdChzZWxlY3RlZFRleHQsIHJlZmVyZW5jZURhdGUsIHtcbiAgICAgIGxvY2FsZSxcbiAgICAgIGZvcndhcmREYXRlOiB0cnVlXG4gICAgfSBhcyBQYXJzaW5nT3B0aW9uKTtcbiAgICAvLyBOb3RoaW5nIG1hdGNoZWQgYW55d2hlcmU6IHRoaXMgaXMgdGhlIGZpbmFsIGZhbGxiYWNrIGxldmVsLCBzbyAocGVyXG4gICAgLy8gdGhpcyBtZXRob2QncyBkb2N1bWVudGVkIGNvbnRyYWN0KSBmYWxsIGJhY2sgdG8gdGhlIGN1cnJlbnQgZGF0ZS5cbiAgICByZXR1cm4gY2hyb25vUmVzdWx0ID8/IG5ldyBEYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIGEgbmF0dXJhbCBsYW5ndWFnZSBkYXRlIHJhbmdlIHN0cmluZyBhbmQgcmV0dXJucyBhIHJhbmdlIHJlc3VsdC5cbiAgICogXG4gICAqIFN1cHBvcnRzIHZhcmlvdXMgcmFuZ2UgZXhwcmVzc2lvbnM6XG4gICAqIC0gV2Vla2RheSByYW5nZXM6IFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCJcbiAgICogLSBXZWVrIHJhbmdlczogXCJuZXh0IHdlZWtcIiAocmV0dXJucyBhbGwgZGF5cyBvZiBuZXh0IHdlZWspXG4gICAqIC0gV29ya3MgaW4gYWxsIGVuYWJsZWQgbGFuZ3VhZ2VzIHdpdGggbmF0aXZlIHRyYW5zbGF0aW9uc1xuICAgKiBcbiAgICogQHBhcmFtIHNlbGVjdGVkVGV4dCAtIE5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSByYW5nZSBzdHJpbmcgKGUuZy4sIFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCIsIFwibmV4dCB3ZWVrXCIpXG4gICAqIEBwYXJhbSB3ZWVrU3RhcnRQcmVmZXJlbmNlIC0gRGF5IG9mIHdlZWsgdG8gY29uc2lkZXIgYXMgd2VlayBzdGFydFxuICAgKiBAcmV0dXJucyBOTERSYW5nZVJlc3VsdCBvYmplY3Qgd2l0aCBzdGFydC9lbmQgZGF0ZXMgYW5kIGRhdGUgbGlzdCwgb3IgbnVsbCBpZiBub3QgYSByYW5nZVxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBwYXJzZXIgPSBuZXcgTkxEUGFyc2VyKFsnZW4nLCAnZnInXSk7XG4gICAqIGNvbnN0IHJhbmdlID0gcGFyc2VyLmdldFBhcnNlZERhdGVSYW5nZShcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiLCBcIm1vbmRheVwiKTtcbiAgICogaWYgKHJhbmdlKSB7XG4gICAqICAgY29uc29sZS5sb2cocmFuZ2UuZGF0ZUxpc3Q/Lmxlbmd0aCk7IC8vIDUgKE1vbmRheSB0aHJvdWdoIEZyaWRheSlcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGdldFBhcnNlZERhdGVSYW5nZShzZWxlY3RlZFRleHQ6IHN0cmluZywgd2Vla1N0YXJ0UHJlZmVyZW5jZTogRGF5T2ZXZWVrKTogTkxEUmFuZ2VSZXN1bHQgfCBudWxsIHtcbiAgICAvLyBDaGVjayBcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiXG4gICAgY29uc3QgcmFuZ2VNYXRjaCA9IHNlbGVjdGVkVGV4dC5tYXRjaCh0aGlzLnJlZ2V4RGF0ZVJhbmdlKTtcbiAgICBpZiAocmFuZ2VNYXRjaCkge1xuICAgICAgY29uc3Qgc3RhcnREYXlOYW1lID0gcmFuZ2VNYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgZW5kRGF5TmFtZSA9IHJhbmdlTWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcbiAgICAgIFxuICAgICAgY29uc3QgbSA9IG1vbWVudCgpO1xuICAgICAgY29uc3Qgc3RhcnREYXlJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoc3RhcnREYXlOYW1lKTtcbiAgICAgIGNvbnN0IGVuZERheUluZGV4ID0gdGhpcy5nZXREYXlPZldlZWtJbmRleChlbmREYXlOYW1lKTtcbiAgICAgIFxuICAgICAgLy8gRmluZCBuZXh0IHN0YXJ0IGRheVxuICAgICAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQoKS5kYXkoc3RhcnREYXlJbmRleCk7XG4gICAgICBpZiAoc3RhcnRNb21lbnQuaXNCZWZvcmUobSwgJ2RheScpKSB7XG4gICAgICAgIHN0YXJ0TW9tZW50LmFkZCgxLCAnd2VlaycpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBGaW5kIG5leHQgZW5kIGRheSAobXVzdCBiZSBhZnRlciBvciBlcXVhbCB0byBzdGFydCBkYXkpXG4gICAgICBsZXQgZW5kTW9tZW50ID0gbW9tZW50KCkuZGF5KGVuZERheUluZGV4KTtcbiAgICAgIC8vIElmIGVuZCBkYXkgaXMgYmVmb3JlIHN0YXJ0IGRheSwgdGFrZSB0aGUgb25lIGZyb20gbmV4dCB3ZWVrXG4gICAgICBpZiAoZW5kTW9tZW50LmlzQmVmb3JlKHN0YXJ0TW9tZW50LCAnZGF5JykpIHtcbiAgICAgICAgZW5kTW9tZW50LmFkZCgxLCAnd2VlaycpO1xuICAgICAgfVxuICAgICAgLy8gRW5zdXJlIGVuZE1vbWVudCBpcyBhbHdheXMgYWZ0ZXIgb3IgZXF1YWwgdG8gc3RhcnRNb21lbnRcbiAgICAgIGlmIChlbmRNb21lbnQuaXNCZWZvcmUoc3RhcnRNb21lbnQsICdkYXknKSkge1xuICAgICAgICBlbmRNb21lbnQgPSBzdGFydE1vbWVudC5jbG9uZSgpLmFkZCgxLCAnd2VlaycpLmRheShlbmREYXlJbmRleCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGZvcm1hdCA9IFwiWVlZWS1NTS1ERFwiO1xuICAgICAgY29uc3Qgc3RhcnRGb3JtYXR0ZWQgPSBzdGFydE1vbWVudC5mb3JtYXQoZm9ybWF0KTtcbiAgICAgIGNvbnN0IGVuZEZvcm1hdHRlZCA9IGVuZE1vbWVudC5mb3JtYXQoZm9ybWF0KTtcbiAgICAgIFxuICAgICAgLy8gR2VuZXJhdGUgbGlzdCBvZiBhbGwgZGF0ZXMgaW4gcmFuZ2VcbiAgICAgIGNvbnN0IGRhdGVMaXN0OiBNb21lbnRbXSA9IFtdO1xuICAgICAgY29uc3QgY3VycmVudE1vbWVudCA9IHN0YXJ0TW9tZW50LmNsb25lKCk7XG4gICAgICB3aGlsZSAoY3VycmVudE1vbWVudC5pc1NhbWVPckJlZm9yZShlbmRNb21lbnQsICdkYXknKSkge1xuICAgICAgICBkYXRlTGlzdC5wdXNoKGN1cnJlbnRNb21lbnQuY2xvbmUoKSk7XG4gICAgICAgIGN1cnJlbnRNb21lbnQuYWRkKDEsICdkYXknKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0OiBOTERSYW5nZVJlc3VsdCA9IHtcbiAgICAgICAgZm9ybWF0dGVkU3RyaW5nOiBgJHtzdGFydEZvcm1hdHRlZH0gdG8gJHtlbmRGb3JtYXR0ZWR9YCxcbiAgICAgICAgc3RhcnREYXRlOiBzdGFydE1vbWVudC50b0RhdGUoKSxcbiAgICAgICAgZW5kRGF0ZTogZW5kTW9tZW50LnRvRGF0ZSgpLFxuICAgICAgICBzdGFydE1vbWVudDogc3RhcnRNb21lbnQuY2xvbmUoKSxcbiAgICAgICAgZW5kTW9tZW50OiBlbmRNb21lbnQuY2xvbmUoKSxcbiAgICAgICAgaXNSYW5nZTogdHJ1ZSBhcyBjb25zdCxcbiAgICAgICAgZGF0ZUxpc3Q6IGRhdGVMaXN0LFxuICAgICAgfTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIFwibmV4dCB3ZWVrXCIgYXMgcmFuZ2UgKGJvdGggXCJuZXh0IHdlZWtcIiBhbmQgXCJ3ZWVrIG5leHRcIiBmb3IgbGFuZ3VhZ2VzIGxpa2UgRnJlbmNoKVxuICAgIC8vIFVzZXMgXFxzKiAobm90IFxccyspIHNvIHRoaXMgYWxzbyBtYXRjaGVzIGxhbmd1YWdlcyB3aXRob3V0IHNwYWNlcyBiZXR3ZWVuXG4gICAgLy8gd29yZHMgKGUuZy4gQ2hpbmVzZSBcIuS4i+S4gOWAi+aYn+acn1wiKS4gVGhlIHBlcmlvZCBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIGtub3duXG4gICAgLy8gXCJ3ZWVrXCIgd29yZHMgZGlyZWN0bHkgKG5vdCBhIGdlbmVyaWMgXFxTKy9cXHcrIGNhcHR1cmUpOiBvdGhlcndpc2UgYSBzaG9ydGVyXG4gICAgLy8gd29yZCB0aGF0IGlzIGEgcHJlZml4IG9mIGEgbG9uZ2VyIG9uZSAoZS5nLiBGcmVuY2ggXCJwcm9jaGFpblwiIHZzIFwicHJvY2hhaW5lXCIpXG4gICAgLy8gY2FuIG1hdGNoIGZpcnN0IGFuZCBsZWF2ZSB0aGUgcmVtYWluaW5nIGxldHRlcnMgdG8gYmUgbWlzLWNhcHR1cmVkIGFzIHRoZSBwZXJpb2QuXG4gICAgY29uc3QgbmV4dFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oQXJyYXkuZnJvbSh0aGlzLnByZWZpeEtleXdvcmRzLm5leHQpKTtcbiAgICBjb25zdCB3ZWVrUGF0dGVybkFsbCA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbkZvcignd2VlaycpO1xuICAgIC8vIEZpcnN0IHRyeSBcIm5leHQgd2Vla1wiIHBhdHRlcm5cbiAgICBsZXQgbmV4dFdlZWtNYXRjaCA9IHNlbGVjdGVkVGV4dC5tYXRjaChuZXcgUmVnRXhwKGAoJHtuZXh0UGF0dGVybn0pXFxcXHMqKCR7d2Vla1BhdHRlcm5BbGx9KWAsICdpJykpO1xuICAgIGxldCBwZXJpb2RJbmRleCA9IDI7IC8vIEluZGV4IG9mIHBlcmlvZCBpbiBtYXRjaCBhcnJheVxuICAgIGlmICghbmV4dFdlZWtNYXRjaCkge1xuICAgICAgLy8gVHJ5IHJldmVyc2UgcGF0dGVybiBcIndlZWsgbmV4dFwiIGZvciBsYW5ndWFnZXMgbGlrZSBGcmVuY2hcbiAgICAgIG5leHRXZWVrTWF0Y2ggPSBzZWxlY3RlZFRleHQubWF0Y2gobmV3IFJlZ0V4cChgKCR7d2Vla1BhdHRlcm5BbGx9KVxcXFxzKigke25leHRQYXR0ZXJufSlgLCAnaScpKTtcbiAgICAgIGlmIChuZXh0V2Vla01hdGNoKSB7XG4gICAgICAgIHBlcmlvZEluZGV4ID0gMTsgLy8gUGVyaW9kIGlzIG5vdyBhdCBpbmRleCAxXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChuZXh0V2Vla01hdGNoKSB7XG4gICAgICBjb25zdCBwZXJpb2QgPSBuZXh0V2Vla01hdGNoW3BlcmlvZEluZGV4XS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHRoaXMudGMuY29sbGVjdFdvcmRzKCd3ZWVrJywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocGVyaW9kKSkge1xuICAgICAgICAvLyBOZXh0IHdlZWsgLT4gcmV0dXJuIGZyb20gTW9uZGF5IHRvIFN1bmRheSBvZiBuZXh0IHdlZWtcbiAgICAgICAgY29uc3Qgd2Vla1N0YXJ0ID0gd2Vla1N0YXJ0UHJlZmVyZW5jZSA9PT0gXCJsb2NhbGUtZGVmYXVsdFwiID8gZ2V0TG9jYWxlV2Vla1N0YXJ0KCkgOiB3ZWVrU3RhcnRQcmVmZXJlbmNlO1xuICAgICAgICBjb25zdCB3ZWVrU3RhcnRJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoU3RyaW5nKHdlZWtTdGFydCkpO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gbW9tZW50KCkuYWRkKDEsICd3ZWVrcycpLmRheSh3ZWVrU3RhcnRJbmRleCk7XG4gICAgICAgIGNvbnN0IGVuZE1vbWVudCA9IHN0YXJ0TW9tZW50LmNsb25lKCkuYWRkKDYsICdkYXlzJyk7XG5cbiAgICAgICAgY29uc3QgZm9ybWF0ID0gXCJZWVlZLU1NLUREXCI7XG4gICAgICAgIGNvbnN0IHN0YXJ0Rm9ybWF0dGVkID0gc3RhcnRNb21lbnQuZm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIGNvbnN0IGVuZEZvcm1hdHRlZCA9IGVuZE1vbWVudC5mb3JtYXQoZm9ybWF0KTtcblxuICAgICAgICAvLyBHZW5lcmF0ZSBsaXN0IG9mIGFsbCBkYXRlcyBpbiByYW5nZVxuICAgICAgICBjb25zdCBkYXRlTGlzdDogTW9tZW50W10gPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudE1vbWVudCA9IHN0YXJ0TW9tZW50LmNsb25lKCk7XG4gICAgICAgIHdoaWxlIChjdXJyZW50TW9tZW50LmlzU2FtZU9yQmVmb3JlKGVuZE1vbWVudCwgJ2RheScpKSB7XG4gICAgICAgICAgZGF0ZUxpc3QucHVzaChjdXJyZW50TW9tZW50LmNsb25lKCkpO1xuICAgICAgICAgIGN1cnJlbnRNb21lbnQuYWRkKDEsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogTkxEUmFuZ2VSZXN1bHQgPSB7XG4gICAgICAgICAgZm9ybWF0dGVkU3RyaW5nOiBgJHtzdGFydEZvcm1hdHRlZH0gdG8gJHtlbmRGb3JtYXR0ZWR9YCxcbiAgICAgICAgICBzdGFydERhdGU6IHN0YXJ0TW9tZW50LnRvRGF0ZSgpLFxuICAgICAgICAgIGVuZERhdGU6IGVuZE1vbWVudC50b0RhdGUoKSxcbiAgICAgICAgICBzdGFydE1vbWVudDogc3RhcnRNb21lbnQuY2xvbmUoKSxcbiAgICAgICAgICBlbmRNb21lbnQ6IGVuZE1vbWVudC5jbG9uZSgpLFxuICAgICAgICAgIGlzUmFuZ2U6IHRydWUgYXMgY29uc3QsXG4gICAgICAgICAgZGF0ZUxpc3Q6IGRhdGVMaXN0LFxuICAgICAgICAgIGdyYW51bGFyaXR5OiBcIndlZWtcIixcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQRVJJT0QgR1JBTlVMQVJJVFk6IFwidGhpcy9uZXh0L2xhc3Qgd2Vla3xtb250aHxxdWFydGVyfHllYXJcIiwgZXhwbGljaXRcbiAgLy8gXCJRM1wiL1wiMjAyNi1RM1wiL1wiMjAyNi1XMDJcIiAtLSByZXNvbHZlcyB0byBhIHJlcHJlc2VudGF0aXZlIGRhdGUgd2l0aGluIHRoZVxuICAvLyBwZXJpb2QsIGZvciBjYWxsZXJzIHRoYXQgd2FudCB0byBmb3JtYXQgdGhlIHdob2xlIHBlcmlvZCAoZS5nLiBhXG4gIC8vIFBlcmlvZGljLU5vdGVzLXN0eWxlIHdlZWtseS9tb250aGx5L3F1YXJ0ZXJseS95ZWFybHkgbm90ZSBsaW5rKSBpbnN0ZWFkXG4gIC8vIG9mIGEgc2luZ2xlIGRheS5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHByaXZhdGUgdHJ5UGVyaW9kKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiB7IGRhdGU6IE1vbWVudDsgZ3JhbnVsYXJpdHk6IERhdGVHcmFudWxhcml0eSB9IHwgbnVsbCB7XG4gICAgLy8gRXhwbGljaXQgcXVhcnRlcjogXCJRM1wiLCBcIlEzIDIwMjZcIiwgXCIyMDI2IFEzXCIsIFwiMjAyNi1RM1wiLlxuICAgIGNvbnN0IHF1YXJ0ZXJNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhRdWFydGVyRXhwbGljaXQpID8/IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhRdWFydGVyRXhwbGljaXRZZWFyRmlyc3QpO1xuICAgIGlmIChxdWFydGVyTWF0Y2gpIHtcbiAgICAgIC8vIHJlZ2V4UXVhcnRlckV4cGxpY2l0IGNhcHR1cmVzIFtxdWFydGVyLCB5ZWFyP107IHJlZ2V4UXVhcnRlckV4cGxpY2l0WWVhckZpcnN0XG4gICAgICAvLyBjYXB0dXJlcyBbeWVhciwgcXVhcnRlcl0gLS0gdGVsbCB0aGVtIGFwYXJ0IGJ5IHdoaWNoIGdyb3VwIGlzIDEtNCBkaWdpdHMgbG9uZy5cbiAgICAgIGNvbnN0IFtnMSwgZzJdID0gW3F1YXJ0ZXJNYXRjaFsxXSwgcXVhcnRlck1hdGNoWzJdXTtcbiAgICAgIGNvbnN0IGlzWWVhckZpcnN0ID0gZzEubGVuZ3RoID09PSA0O1xuICAgICAgY29uc3QgcXVhcnRlck51bSA9IHBhcnNlSW50KGlzWWVhckZpcnN0ID8gZzIgOiBnMSwgMTApO1xuICAgICAgY29uc3QgeWVhciA9IGlzWWVhckZpcnN0ID8gcGFyc2VJbnQoZzEsIDEwKSA6IChnMiA/IHBhcnNlSW50KGcyLCAxMCkgOiBtb21lbnQoKS55ZWFyKCkpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gbW9tZW50KCkueWVhcih5ZWFyKS5xdWFydGVyKHF1YXJ0ZXJOdW0pLnN0YXJ0T2YoJ3F1YXJ0ZXInKTtcbiAgICAgIHJldHVybiB7IGRhdGU6IHRhcmdldCwgZ3JhbnVsYXJpdHk6ICdxdWFydGVyJyB9O1xuICAgIH1cblxuICAgIC8vIEV4cGxpY2l0IElTTyB3ZWVrOiBcIjIwMjYtVzAyXCIuXG4gICAgY29uc3Qgd2Vla01hdGNoID0gY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleFdlZWtFeHBsaWNpdCk7XG4gICAgaWYgKHdlZWtNYXRjaCkge1xuICAgICAgY29uc3QgeWVhciA9IHBhcnNlSW50KHdlZWtNYXRjaFsxXSwgMTApO1xuICAgICAgY29uc3Qgd2VlayA9IHBhcnNlSW50KHdlZWtNYXRjaFsyXSwgMTApO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gbW9tZW50KCkuaXNvV2Vla1llYXIoeWVhcikuaXNvV2Vlayh3ZWVrKS5zdGFydE9mKCdpc29XZWVrJyk7XG4gICAgICByZXR1cm4geyBkYXRlOiB0YXJnZXQsIGdyYW51bGFyaXR5OiAnd2VlaycgfTtcbiAgICB9XG5cbiAgICAvLyBcInRoaXMvbmV4dC9sYXN0IHdlZWt8bW9udGh8cXVhcnRlcnx5ZWFyXCIgKG1vc3QgbGFuZ3VhZ2VzKSwgb3IgdGhlXG4gICAgLy8gcG9zdHBvc2VkIG9yZGVyIFwid2Vla3xtb250aHxxdWFydGVyfHllYXIgdGhpcy9uZXh0L2xhc3RcIiAoRnJlbmNoKS5cbiAgICBjb25zdCBwcmVmaXhNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhQZXJpb2RQcmVmaXgpO1xuICAgIGNvbnN0IHN1ZmZpeE1hdGNoID0gcHJlZml4TWF0Y2ggPyBudWxsIDogY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleFBlcmlvZFN1ZmZpeCk7XG4gICAgY29uc3QgcGVyaW9kTWF0Y2ggPSBwcmVmaXhNYXRjaFxuICAgICAgPyB7IHByZWZpeDogcHJlZml4TWF0Y2hbMV0sIHBlcmlvZDogcHJlZml4TWF0Y2hbMl0gfVxuICAgICAgOiBzdWZmaXhNYXRjaFxuICAgICAgICA/IHsgcHJlZml4OiBzdWZmaXhNYXRjaFsyXSwgcGVyaW9kOiBzdWZmaXhNYXRjaFsxXSB9XG4gICAgICAgIDogbnVsbDtcbiAgICBpZiAocGVyaW9kTWF0Y2gpIHtcbiAgICAgIGNvbnN0IHByZWZpeCA9IHBlcmlvZE1hdGNoLnByZWZpeC50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgcGVyaW9kID0gcGVyaW9kTWF0Y2gucGVyaW9kLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGNvbnN0IGRpcmVjdGlvbjogJ25leHQnIHwgJ2xhc3QnIHwgJ3RoaXMnID1cbiAgICAgICAgdGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpID8gJ25leHQnIDpcbiAgICAgICAgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0LmhhcyhwcmVmaXgpID8gJ2xhc3QnIDpcbiAgICAgICAgJ3RoaXMnO1xuXG4gICAgICAvLyBEdXJhdGlvbiB1bml0cyAoXCJ3ZWVrXCIgaXMgZmluZSBoZXJlIC0tIGEgd2VlayBpcyA3IGRheXMgcmVnYXJkbGVzc1xuICAgICAgLy8gb2YgSVNPLW5lc3MsIHRoaXMgb25seSBhZmZlY3RzIGFyaXRobWV0aWMsIG5vdCBkYXktb2Ytd2VlayBhbmNob3JpbmcpLlxuICAgICAgY29uc3QgYWRkVW5pdEJ5R3JhbnVsYXJpdHk6IFJlY29yZDxFeGNsdWRlPERhdGVHcmFudWxhcml0eSwgJ2RheSc+LCBtb21lbnQudW5pdE9mVGltZS5EdXJhdGlvbkNvbnN0cnVjdG9yPiA9IHtcbiAgICAgICAgd2VlazogJ3dlZWsnLFxuICAgICAgICBtb250aDogJ21vbnRoJyxcbiAgICAgICAgcXVhcnRlcjogJ3F1YXJ0ZXInLFxuICAgICAgICB5ZWFyOiAneWVhcicsXG4gICAgICB9O1xuICAgICAgLy8gc3RhcnRPZigpIHVuaXRzOiBcImlzb1dlZWtcIiAobm90IFwid2Vla1wiKSBmb3Igd2VlayBncmFudWxhcml0eSAtLVxuICAgICAgLy8gc3RhcnRPZignd2VlaycpIHVzZXMgdGhlIGxvY2FsZSB3ZWVrIHN0YXJ0IChTdW5kYXkgYnkgZGVmYXVsdCksXG4gICAgICAvLyB3aGljaCBjYW4gbGFuZCBvbiB0aGUgd3Jvbmcgc2lkZSBvZiBhbiBJU08gd2VlayBib3VuZGFyeSBuZWFyIHRoZVxuICAgICAgLy8gZWRnZXMgb2YgYSB3ZWVrLCBtaXNtYXRjaGluZyB0aGUgSVNPIEdHR0ctV1cgZm9ybWF0IGNhbGxlcnMgdXNlIGZvclxuICAgICAgLy8gd2Vlay1mb3JtYXQgb3V0cHV0LlxuICAgICAgY29uc3Qgc3RhcnRPZlVuaXRCeUdyYW51bGFyaXR5OiBSZWNvcmQ8RXhjbHVkZTxEYXRlR3JhbnVsYXJpdHksICdkYXknPiwgbW9tZW50LnVuaXRPZlRpbWUuU3RhcnRPZj4gPSB7XG4gICAgICAgIHdlZWs6ICdpc29XZWVrJyxcbiAgICAgICAgbW9udGg6ICdtb250aCcsXG4gICAgICAgIHF1YXJ0ZXI6ICdxdWFydGVyJyxcbiAgICAgICAgeWVhcjogJ3llYXInLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZ3JhbnVsYXJpdHk6IERhdGVHcmFudWxhcml0eSB8IG51bGwgPVxuICAgICAgICB0aGlzLnBlcmlvZFdvcmRzLndlZWsuaGFzKHBlcmlvZCkgPyAnd2VlaycgOlxuICAgICAgICB0aGlzLnBlcmlvZFdvcmRzLm1vbnRoLmhhcyhwZXJpb2QpID8gJ21vbnRoJyA6XG4gICAgICAgIHRoaXMucGVyaW9kV29yZHMucXVhcnRlci5oYXMocGVyaW9kKSA/ICdxdWFydGVyJyA6XG4gICAgICAgIHRoaXMucGVyaW9kV29yZHMueWVhci5oYXMocGVyaW9kKSA/ICd5ZWFyJyA6XG4gICAgICAgIG51bGw7XG4gICAgICBpZiAoIWdyYW51bGFyaXR5KSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3QgYWRkVW5pdCA9IGFkZFVuaXRCeUdyYW51bGFyaXR5W2dyYW51bGFyaXR5XTtcbiAgICAgIGNvbnN0IHN0YXJ0T2ZVbml0ID0gc3RhcnRPZlVuaXRCeUdyYW51bGFyaXR5W2dyYW51bGFyaXR5XTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IG1vbWVudCgpO1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ25leHQnKSB7XG4gICAgICAgIHRhcmdldC5hZGQoMSwgYWRkVW5pdCkuc3RhcnRPZihzdGFydE9mVW5pdCk7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2xhc3QnKSB7XG4gICAgICAgIHRhcmdldC5zdWJ0cmFjdCgxLCBhZGRVbml0KS5zdGFydE9mKHN0YXJ0T2ZVbml0KTtcbiAgICAgIH0gZWxzZSBpZiAoZ3JhbnVsYXJpdHkgIT09ICd3ZWVrJykge1xuICAgICAgICAvLyBcInRoaXMgd2Vla1wiIHN0YXlzIG9uIHRvZGF5IChhbnkgZGF5IHdpdGhpbiB0aGUgY3VycmVudCB3ZWVrIGlzXG4gICAgICAgIC8vIGZpbmUgZm9yIHdlZWstZm9ybWF0IG91dHB1dCk7IFwidGhpcyBtb250aC9xdWFydGVyL3llYXJcIiBub3JtYWxpemVzXG4gICAgICAgIC8vIHRvIHRoZSBzdGFydCBvZiB0aGUgcGVyaW9kIGZvciBjb25zaXN0ZW5jeSB3aXRoIG5leHQvbGFzdC5cbiAgICAgICAgdGFyZ2V0LnN0YXJ0T2Yoc3RhcnRPZlVuaXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBkYXRlOiB0YXJnZXQsIGdyYW51bGFyaXR5IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIGEgbmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZywgYWRkaXRpb25hbGx5IHJlcG9ydGluZyB0aGVcbiAgICogY2FsZW5kYXIgZ3JhbnVsYXJpdHkgdGhlIGV4cHJlc3Npb24gcmVmZXJyZWQgdG8gKGRheS93ZWVrL21vbnRoL3F1YXJ0ZXIveWVhcikuXG4gICAqXG4gICAqIEZhbGxzIGJhY2sgdG8ge0BsaW5rIGdldFBhcnNlZERhdGV9IChncmFudWxhcml0eSBcImRheVwiKSBmb3IgYW55dGhpbmdcbiAgICogdGhhdCBpc24ndCBhIHdob2xlLXBlcmlvZCByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBzZWxlY3RlZFRleHQgLSBOYXR1cmFsIGxhbmd1YWdlIGRhdGUgc3RyaW5nIChlLmcuLCBcIm5leHQgcXVhcnRlclwiLCBcIlEzIDIwMjZcIiwgXCJ0b21vcnJvd1wiKVxuICAgKiBAcGFyYW0gd2Vla1N0YXJ0UHJlZmVyZW5jZSAtIERheSBvZiB3ZWVrIHRvIGNvbnNpZGVyIGFzIHdlZWsgc3RhcnRcbiAgICogQHJldHVybnMgVGhlIHJlc29sdmVkIGRhdGUgcGx1cyBpdHMgZ3JhbnVsYXJpdHlcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBwYXJzZXIgPSBuZXcgTkxEUGFyc2VyKFsnZW4nXSk7XG4gICAqIGNvbnN0IHsgZGF0ZSwgZ3JhbnVsYXJpdHkgfSA9IHBhcnNlci5nZXRQYXJzZWRQZXJpb2QoXCJuZXh0IHF1YXJ0ZXJcIiwgXCJtb25kYXlcIik7XG4gICAqIGNvbnNvbGUubG9nKGdyYW51bGFyaXR5KTsgLy8gXCJxdWFydGVyXCJcbiAgICogYGBgXG4gICAqL1xuICBnZXRQYXJzZWRQZXJpb2Qoc2VsZWN0ZWRUZXh0OiBzdHJpbmcsIHdlZWtTdGFydFByZWZlcmVuY2U6IERheU9mV2Vlayk6IE5MRFBlcmlvZFJlc3VsdCB7XG4gICAgY29uc3QgY2xlYW5lZFRleHQgPSBzZWxlY3RlZFRleHQudHJpbSgpLnJlcGxhY2UoL1shPy5dKyQvLCAnJyk7XG4gICAgY29uc3QgcGVyaW9kUmVzdWx0ID0gdGhpcy50cnlQZXJpb2QoY2xlYW5lZFRleHQpO1xuICAgIGlmIChwZXJpb2RSZXN1bHQpIHtcbiAgICAgIHJldHVybiB7IGRhdGU6IHBlcmlvZFJlc3VsdC5kYXRlLnRvRGF0ZSgpLCBncmFudWxhcml0eTogcGVyaW9kUmVzdWx0LmdyYW51bGFyaXR5IH07XG4gICAgfVxuICAgIHJldHVybiB7IGRhdGU6IHRoaXMuZ2V0UGFyc2VkRGF0ZShzZWxlY3RlZFRleHQsIHdlZWtTdGFydFByZWZlcmVuY2UpLCBncmFudWxhcml0eTogJ2RheScgfTtcbiAgfVxuXG4gIC8vIC0tLSBVVElMSVRZIEZVTkNUSU9OOiBXSE8gSEFTIFRIRSBCRVNUIFNDT1JFPyAtLS1cbiAgLy8gUmV0dXJucyBudWxsIChyYXRoZXIgdGhhbiBhIFwibm93XCIgcGxhY2Vob2xkZXIpIHdoZW4gY2hyb25vLW5vZGUgZm91bmQgbm9cbiAgLy8gbWF0Y2gsIHNvIGNhbGxlcnMgY2FuIHRlbGwgXCJub3RoaW5nIHBhcnNlZFwiIGFwYXJ0IGZyb20gXCJwYXJzZWQgdG8gcmlnaHRcbiAgLy8gbm93XCIgYW5kIGZhbGwgYmFjayBhY2NvcmRpbmdseSBpbnN0ZWFkIG9mIHNpbGVudGx5IGFjY2VwdGluZyBhIGJvZ3VzXG4gIC8vIGN1cnJlbnQtZGF0ZS90aW1lIHJlc3VsdC5cbiAgZ2V0UGFyc2VkRGF0ZVJlc3VsdCh0ZXh0OiBzdHJpbmcsIHJlZmVyZW5jZURhdGU/OiBEYXRlLCBvcHRpb24/OiBQYXJzaW5nT3B0aW9uKTogRGF0ZSB8IG51bGwge1xuICAgIGlmICghdGhpcy5jaHJvbm9zIHx8IHRoaXMuY2hyb25vcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIGxldCBiZXN0UmVzdWx0OiBQYXJzZWRSZXN1bHQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgYmVzdFNjb3JlID0gMDtcblxuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNocm9ub3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBjLnBhcnNlKHRleHQsIHJlZmVyZW5jZURhdGUsIG9wdGlvbik7XG4gICAgICAgIC8vIGNocm9ubyBjYW4gcmV0dXJuIHNldmVyYWwgZGlzam9pbnQgbWF0Y2hlcyBmb3Igb25lIHN0cmluZyAoZS5nLlxuICAgICAgICAvLyBcInRvZGF5IGluIDMgbWludXRlc1wiIC0+IFtcInRvZGF5XCIsIFwiaW4gMyBtaW51dGVzXCJdLCBwYXJzZWQgYXMgdHdvXG4gICAgICAgIC8vIGluZGVwZW5kZW50IGNhbmRpZGF0ZXMsIG5laXRoZXIgY29udGFpbmluZyB0aGUgb3RoZXIpLiBDb21wYXJpbmdcbiAgICAgICAgLy8gZXZlcnkgY2FuZGlkYXRlJ3Mgc2NvcmUgLS0gbm90IGp1c3QgcmVzdWx0c1swXSAtLSBtZWFucyB0aGUgbW9yZVxuICAgICAgICAvLyBzcGVjaWZpYy9pbmZvcm1hdGl2ZSBvbmUgd2lucyBpbnN0ZWFkIG9mIGFsd2F5cyBwaWNraW5nIHdoaWNoZXZlclxuICAgICAgICAvLyBjaHJvbm8gaGFwcGVuZWQgdG8gbGlzdCBmaXJzdCwgd2hpY2ggc2lsZW50bHkgZGlzY2FyZGVkIFwiaW4gM1xuICAgICAgICAvLyBtaW51dGVzXCIgYW5kIHJldHVybmVkIHRoZSBjdXJyZW50IHRpbWUgdW5tb2RpZmllZC5cbiAgICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiByZXN1bHRzIHx8IFtdKSB7XG4gICAgICAgICAgaWYgKG1hdGNoLnRleHQubGVuZ3RoID4gYmVzdFNjb3JlKSB7XG4gICAgICAgICAgICBiZXN0U2NvcmUgPSBtYXRjaC50ZXh0Lmxlbmd0aDtcbiAgICAgICAgICAgIGJlc3RSZXN1bHQgPSBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0Nocm9ubyBwYXJzaW5nIGVycm9yIGluIGdldFBhcnNlZERhdGVSZXN1bHQnLCB7XG4gICAgICAgICAgdGV4dCxcbiAgICAgICAgICBlcnJvcjogZGVzY3JpYmVFcnJvcihlKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiZXN0UmVzdWx0ID8gYmVzdFJlc3VsdC5zdGFydC5kYXRlKCkgOiBudWxsO1xuICB9XG5cbiAgZ2V0UGFyc2VkUmVzdWx0KHRleHQ6IHN0cmluZyk6IFBhcnNlZFJlc3VsdFtdIHtcbiAgICBpZiAoIXRoaXMuY2hyb25vcykgcmV0dXJuIFtdO1xuICAgIGxldCBiZXN0UmVzdWx0czogUGFyc2VkUmVzdWx0W10gPSBbXTtcbiAgICBsZXQgYmVzdFNjb3JlID0gMDtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaHJvbm9zKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYy5wYXJzZSh0ZXh0KTtcbiAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdHNbMF0udGV4dC5sZW5ndGggPiBiZXN0U2NvcmUpIHtcbiAgICAgICAgICAgIGJlc3RTY29yZSA9IHJlc3VsdHNbMF0udGV4dC5sZW5ndGg7XG4gICAgICAgICAgICBiZXN0UmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdDaHJvbm8gcGFyc2luZyBlcnJvciBpbiBnZXRQYXJzZWRSZXN1bHQnLCB7XG4gICAgICAgICAgdGV4dCxcbiAgICAgICAgICBlcnJvcjogZGVzY3JpYmVFcnJvcihlKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiZXN0UmVzdWx0cztcbiAgfVxuXG4gIC8vIC0tLSBUSU1FIERFVEVDVElPTiAoRk9SIERJU1BMQVkpIC0tLVxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgdGV4dCBzdHJpbmcgY29udGFpbnMgYSB0aW1lIGNvbXBvbmVudC5cbiAgICogXG4gICAqIERldGVjdHMgdmFyaW91cyB0aW1lIGV4cHJlc3Npb25zOlxuICAgKiAtIEV4cGxpY2l0IHRpbWVzOiBcImF0IDNwbVwiLCBcImF0IDE1OjAwXCIsIFwiw6AgMTVoXCJcbiAgICogLSBUaW1lIGluIHJlbGF0aXZlIGV4cHJlc3Npb25zOiBcImluIDIgaG91cnNcIiwgXCJkYW5zIDIgaGV1cmVzXCJcbiAgICogLSBXb3JrcyB3aXRoIGFsbCBlbmFibGVkIGxhbmd1YWdlc1xuICAgKiBcbiAgICogQHBhcmFtIHRleHQgLSBUZXh0IHN0cmluZyB0byBjaGVjayBmb3IgdGltZSBjb21wb25lbnRcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBhIHRpbWUgY29tcG9uZW50IGlzIGRldGVjdGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcGFyc2VyID0gbmV3IE5MRFBhcnNlcihbJ2VuJywgJ2ZyJ10pO1xuICAgKiBwYXJzZXIuaGFzVGltZUNvbXBvbmVudChcIm5leHQgTW9uZGF5IGF0IDNwbVwiKTsgLy8gdHJ1ZVxuICAgKiBwYXJzZXIuaGFzVGltZUNvbXBvbmVudChcInRvbW9ycm93XCIpOyAvLyBmYWxzZVxuICAgKiBwYXJzZXIuaGFzVGltZUNvbXBvbmVudChcImluIDIgaG91cnNcIik7IC8vIHRydWVcbiAgICogYGBgXG4gICAqL1xuICBoYXNUaW1lQ29tcG9uZW50KHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRpbWVEZXRlY3Rvci5oYXNUaW1lQ29tcG9uZW50KHRleHQpO1xuICB9XG5cbiAgLy8gLS0tIENBQ0hFIFNUQVRJU1RJQ1MgKEZPUiBNT05JVE9SSU5HKSAtLS1cbiAgLyoqXG4gICAqIFJldG91cm5lIGxlcyBzdGF0aXN0aXF1ZXMgZHUgY2FjaGUgZGUgcGFyc2luZ1xuICAgKi9cbiAgZ2V0Q2FjaGVTdGF0cygpOiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBzaXplOiB0aGlzLmNhY2hlLnNpemUsXG4gICAgICBtYXhTaXplOiB0aGlzLmNhY2hlLm1heFNpemVMaW1pdCxcbiAgICB9O1xuICB9XG59IiwiaW1wb3J0IHtcbiAgQXBwLFxuICBFZGl0b3IsXG4gIEVkaXRvclBvc2l0aW9uLFxuICBFZGl0b3JTdWdnZXN0LFxuICBFZGl0b3JTdWdnZXN0Q29udGV4dCxcbiAgRWRpdG9yU3VnZ2VzdFRyaWdnZXJJbmZvLFxuICBURmlsZSxcbn0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgdHlwZSBOYXR1cmFsTGFuZ3VhZ2VEYXRlcyBmcm9tIFwiLi4vbWFpblwiO1xuaW1wb3J0IHQgZnJvbSBcIi4uL2xhbmcvaGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZU1hcmtkb3duTGluaywgc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlLCBnZXRBY3RpdmVFZGl0b3IgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi9sb2dnZXJcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIi4uL3dpbmRvdy1tb21lbnRcIjtcblxuZnVuY3Rpb24gZXNjYXBlUmVnZXgoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XG59XG5cbi8vIE9wdGltYWwgU3RyaW5nIEFsaWdubWVudCAoT1NBKSBlZGl0IGRpc3RhbmNlOiBsaWtlIExldmVuc2h0ZWluLCBidXQgYWxzb1xuLy8gdHJlYXRzIHN3YXBwaW5nIHR3byBhZGphY2VudCBjaGFyYWN0ZXJzIGFzIGEgc2luZ2xlIGVkaXQgKGUuZy4gXCJoZWlyXCIgdnNcbi8vIFwiaGllclwiIGlzIGRpc3RhbmNlIDEsIG5vdCAyKSAtLSBhbiBhZGphY2VudC1sZXR0ZXIgdHJhbnNwb3NpdGlvbiBpcyBvbmUgb2Zcbi8vIHRoZSBtb3N0IGNvbW1vbiB0eXBpbmcgbWlzdGFrZXMsIGFuZCBwbGFpbiBMZXZlbnNodGVpbiB3b3VsZCBvdGhlcndpc2Vcbi8vIGNvdW50IGl0IGFzIHR3byBzdWJzdGl0dXRpb25zIGFuZCBwdXNoIGl0IHBhc3QgdGhlIHRocmVzaG9sZCBpblxuLy8gZnV6enlNYXRjaGVzUXVlcnkoKSBiZWxvdy4gU3BhY2UgaXMga2VwdCB0byB0aHJlZSByb2xsaW5nIHJvd3Mgb2YgbGVuZ3RoXG4vLyBiLmxlbmd0aCArIDEgKGluc3RlYWQgb2YgYSBmdWxsIChhLmxlbmd0aCsxKSB4IChiLmxlbmd0aCsxKSB0YWJsZSkgc2luY2Vcbi8vIHRoaXMgcnVucyBvbiBldmVyeSBrZXlzdHJva2UgYWdhaW5zdCBldmVyeSBjYW5kaWRhdGUuXG5mdW5jdGlvbiBlZGl0RGlzdGFuY2UoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBuID0gYi5sZW5ndGg7XG4gIGxldCB0d29Sb3dzQWdvID0gbmV3IEFycmF5PG51bWJlcj4obiArIDEpLmZpbGwoMCk7XG4gIGxldCBwcmV2Um93ID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogbiArIDEgfSwgKF8sIGopID0+IGopO1xuICBsZXQgY3VycmVudFJvdyA9IG5ldyBBcnJheTxudW1iZXI+KG4gKyAxKS5maWxsKDApO1xuXG4gIGZvciAobGV0IGkgPSAxOyBpIDw9IGEubGVuZ3RoOyBpKyspIHtcbiAgICBjdXJyZW50Um93WzBdID0gaTtcbiAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspIHtcbiAgICAgIGNvbnN0IGNvc3QgPSBhW2kgLSAxXSA9PT0gYltqIC0gMV0gPyAwIDogMTtcbiAgICAgIGxldCB2YWx1ZSA9IE1hdGgubWluKFxuICAgICAgICBwcmV2Um93W2pdICsgMSwgLy8gZGVsZXRpb25cbiAgICAgICAgY3VycmVudFJvd1tqIC0gMV0gKyAxLCAvLyBpbnNlcnRpb25cbiAgICAgICAgcHJldlJvd1tqIC0gMV0gKyBjb3N0IC8vIHN1YnN0aXR1dGlvblxuICAgICAgKTtcbiAgICAgIGlmIChpID4gMSAmJiBqID4gMSAmJiBhW2kgLSAxXSA9PT0gYltqIC0gMl0gJiYgYVtpIC0gMl0gPT09IGJbaiAtIDFdKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5taW4odmFsdWUsIHR3b1Jvd3NBZ29baiAtIDJdICsgMSk7IC8vIHRyYW5zcG9zaXRpb25cbiAgICAgIH1cbiAgICAgIGN1cnJlbnRSb3dbal0gPSB2YWx1ZTtcbiAgICB9XG4gICAgW3R3b1Jvd3NBZ28sIHByZXZSb3csIGN1cnJlbnRSb3ddID0gW3ByZXZSb3csIGN1cnJlbnRSb3csIHR3b1Jvd3NBZ29dO1xuICB9XG4gIHJldHVybiBwcmV2Um93W25dO1xufVxuXG4vLyBQcmVmaXggbWF0Y2ggaWYgcG9zc2libGUgKGZhc3QsIGV4YWN0LCBhbmQgdGhlIG9ubHkgYmVoYXZpb3IgZm9yIHF1ZXJpZXNcbi8vIHRvbyBzaG9ydCB0byBmdXp6eS1tYXRjaCByZWxpYWJseSk7IG90aGVyd2lzZSB0b2xlcmF0ZSBhIHNtYWxsIGVkaXRcbi8vIGRpc3RhbmNlIGJldHdlZW4gdGhlIHF1ZXJ5IGFuZCBjYW5kaWRhdGUgcHJlZml4ZXMgb2Ygc2ltaWxhciBsZW5ndGgsIHNvIGFcbi8vIHNpbmdsZSB3cm9uZy9taXNzaW5nL3RyYW5zcG9zZWQgbGV0dGVyIG5lYXIgdGhlIHN0YXJ0IG9mIHRoZSBxdWVyeSBzdGlsbFxuLy8gc3VyZmFjZXMgdGhlIGludGVuZGVkIHN1Z2dlc3Rpb24gaW5zdGVhZCBvZiBub25lIGF0IGFsbC4gQ2hlY2tzIGEgd2luZG93XG4vLyBvZiBwcmVmaXggbGVuZ3RocyBhcm91bmQgdGhlIHF1ZXJ5J3Mgb3duIGxlbmd0aCAocXVlcnkubGVuZ3RoIMKxIHRocmVzaG9sZClcbi8vIHJhdGhlciB0aGFuIGEgc2luZ2xlIGZpeGVkLWxlbmd0aCBzbGljZSAtLSBjb21wYXJpbmcgYWdhaW5zdCBhIHByZWZpeFxuLy8gdGhhdCdzIGZvcmNlZCB0byBiZSBsb25nZXIgdGhhbiB0aGUgcXVlcnkgYnkgbW9yZSB0aGFuIHRoZSB0aHJlc2hvbGQgd291bGRcbi8vIG90aGVyd2lzZSBtYWtlIHRoZSBlZGl0IGRpc3RhbmNlIGF0IGxlYXN0IHRoYXQgbGVuZ3RoIGRpZmZlcmVuY2UsIHdoaWNoXG4vLyBjYW4gZXhjZWVkIHRoZSB0aHJlc2hvbGQgZXZlbiBmb3IgYW4gZXhhY3QtcHJlZml4IG1hdGNoIChlLmcuIFwidG9tdXJcIlxuLy8gYWdhaW5zdCBhIGZpeGVkIDctY2hhcmFjdGVyIHNsaWNlIG9mIFwidG9tb3Jyb3dcIiBpcyBhbHJlYWR5IDIgZWRpdHMgYXdheVxuLy8gYmVmb3JlIGFjY291bnRpbmcgZm9yIHRoZSBhY3R1YWwgdHlwbykuIE9ubHkgdXNlZCBmb3Igc2hvcnQsIGZpeGVkXG4vLyBjYW5kaWRhdGUgbGlzdHMgKHRvZGF5L3RvbW9ycm93LCB3ZWVrZGF5cywgaGlzdG9yeS9jb250ZXh0KSAtLSB0aGVcbi8vIG11bHRpLXN0YWdlIHByb2dyZXNzaXZlLXR5cGluZyBzdWdnZXN0aW9uIGdlbmVyYXRvcnMgZWxzZXdoZXJlIGluIHRoaXNcbi8vIGZpbGUga2VlcCBzdHJpY3QgcHJlZml4IG1hdGNoaW5nLCBzaW5jZSBmdXp6eSBtYXRjaGluZyBpbnRlcmFjdHNcbi8vIHVucHJlZGljdGFibHkgd2l0aCB0aGVpciBwYXJ0aWFsLWNvbXBsZXRpb24gbG9naWMuXG5mdW5jdGlvbiBmdXp6eU1hdGNoZXNRdWVyeShjYW5kaWRhdGU6IHN0cmluZywgcXVlcnk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBjID0gY2FuZGlkYXRlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHEgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIXEgfHwgYy5zdGFydHNXaXRoKHEpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHEubGVuZ3RoIDw9IDIpIHJldHVybiBmYWxzZTsgLy8gdG9vIHNob3J0IHRvIGZ1enp5LW1hdGNoIHdpdGhvdXQgbm9pc2VcbiAgY29uc3QgdGhyZXNob2xkID0gcS5sZW5ndGggPD0gNSA/IDEgOiAyO1xuICBjb25zdCBtaW5MZW4gPSBNYXRoLm1heCgxLCBxLmxlbmd0aCAtIHRocmVzaG9sZCk7XG4gIGNvbnN0IG1heExlbiA9IE1hdGgubWluKGMubGVuZ3RoLCBxLmxlbmd0aCArIHRocmVzaG9sZCk7XG4gIGZvciAobGV0IGxlbiA9IG1pbkxlbjsgbGVuIDw9IG1heExlbjsgbGVuKyspIHtcbiAgICBpZiAoZWRpdERpc3RhbmNlKGMuc2xpY2UoMCwgbGVuKSwgcSkgPD0gdGhyZXNob2xkKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVTdWdnZXN0IGV4dGVuZHMgRWRpdG9yU3VnZ2VzdDxzdHJpbmc+IHtcbiAgcHJpdmF0ZSBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzO1xuXG4gIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzKSB7XG4gICAgc3VwZXIoYXBwKTtcbiAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblxuICAgIC8vIFR5cGUgYXNzZXJ0aW9uIG5lZWRlZDogT2JzaWRpYW4ncyBFZGl0b3JTdWdnZXN0IHNjb3BlIGRvZXNuJ3QgZXhwb3NlIHJlZ2lzdGVyIG1ldGhvZCBpbiB0eXBlcyxcbiAgICAvLyBidXQgaXQgZXhpc3RzIGF0IHJ1bnRpbWUuIFRoaXMgYWxsb3dzIHVzIHRvIHJlZ2lzdGVyIGN1c3RvbSBrZXlib2FyZCBzaG9ydGN1dHMuXG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLnNjb3BlIGFzIHR5cGVvZiB0aGlzLnNjb3BlICYge1xuICAgICAgcmVnaXN0ZXI6IChtb2RpZmllcnM6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgY2FsbGJhY2s6IChldnQ6IEtleWJvYXJkRXZlbnQpID0+IGJvb2xlYW4pID0+IHZvaWQ7XG4gICAgfTtcbiAgICBzY29wZS5yZWdpc3RlcihbXCJTaGlmdFwiXSwgXCJFbnRlclwiLCAoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAvLyBUeXBlIGFzc2VydGlvbiBuZWVkZWQ6IEVkaXRvclN1Z2dlc3QncyBpbnRlcm5hbCBzdWdnZXN0aW9ucyBBUEkgaXMgbm90IGZ1bGx5IHR5cGVkLlxuICAgICAgLy8gVGhpcyBhbGxvd3MgYWNjZXNzIHRvIHVzZVNlbGVjdGVkSXRlbSBtZXRob2Qgd2hpY2ggZXhpc3RzIGF0IHJ1bnRpbWUgZm9yIFNoaWZ0K0VudGVyIGZ1bmN0aW9uYWxpdHkuXG4gICAgICBjb25zdCBlZGl0b3JTdWdnZXN0ID0gdGhpcyBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgc3VnZ2VzdGlvbnM6IHsgdXNlU2VsZWN0ZWRJdGVtOiAoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkIH07XG4gICAgICB9O1xuICAgICAgZWRpdG9yU3VnZ2VzdC5zdWdnZXN0aW9ucy51c2VTZWxlY3RlZEl0ZW0oZXZ0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvc3VnZ2VzdFRvZ2dsZUxpbmspIHtcbiAgICAgIHRoaXMuc2V0SW5zdHJ1Y3Rpb25zKFt7IGNvbW1hbmQ6IFwiU2hpZnRcIiwgcHVycG9zZTogXCJLZWVwIHRleHQgYXMgYWxpYXNcIiB9XSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3VnZ2VzdGlvbnMoY29udGV4dDogRWRpdG9yU3VnZ2VzdENvbnRleHQpOiBzdHJpbmdbXSB7XG4gICAgLy8gaGFuZGxlIG5vIG1hdGNoZXNcbiAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuZ2V0RGF0ZVN1Z2dlc3Rpb25zKGNvbnRleHQpO1xuICAgIHJldHVybiBzdWdnZXN0aW9ucy5sZW5ndGggPyBzdWdnZXN0aW9ucyA6IFsgY29udGV4dC5xdWVyeSBdO1xuICB9XG5cbiAgZ2V0RGF0ZVN1Z2dlc3Rpb25zKGNvbnRleHQ6IEVkaXRvclN1Z2dlc3RDb250ZXh0KTogc3RyaW5nW10ge1xuICAgIC8vIFLDqWN1cMOpcmVyIGxlcyBzdWdnZXN0aW9ucyBzdGFuZGFyZFxuICAgIGNvbnN0IHN0YW5kYXJkU3VnZ2VzdGlvbnMgPSB0aGlzLnVuaXF1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXMuZmxhdE1hcChcbiAgICAgIGxhbmd1YWdlID0+IHtcbiAgICAgICAgbGV0IHN1Z2dlc3Rpb25zID0gdGhpcy5nZXRUaW1lU3VnZ2VzdGlvbnMoY29udGV4dC5xdWVyeSwgbGFuZ3VhZ2UpO1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zO1xuICAgICAgICBcbiAgICAgICAgc3VnZ2VzdGlvbnMgPSB0aGlzLmdldEltbWVkaWF0ZVN1Z2dlc3Rpb25zKGNvbnRleHQucXVlcnksIGxhbmd1YWdlKTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb25zKVxuICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9ucztcblxuICAgICAgICBzdWdnZXN0aW9ucyA9IHRoaXMuZ2V0UmVsYXRpdmVTdWdnZXN0aW9ucyhjb250ZXh0LnF1ZXJ5LCBsYW5ndWFnZSk7XG4gICAgICAgIGlmIChzdWdnZXN0aW9ucylcbiAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbnM7XG5cbiAgICAgICAgc3VnZ2VzdGlvbnMgPSB0aGlzLmdldFdlZWtkYXlTdWdnZXN0aW9ucyhjb250ZXh0LnF1ZXJ5LCBsYW5ndWFnZSk7XG4gICAgICAgIGlmIChzdWdnZXN0aW9ucylcbiAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbnM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFN1Z2dlc3Rpb25zKGNvbnRleHQucXVlcnksIGxhbmd1YWdlKTtcbiAgICAgIH1cbiAgICApKTtcblxuICAgIC8vIFNpIGxlcyBzdWdnZXN0aW9ucyBpbnRlbGxpZ2VudGVzIHNvbnQgZMOpc2FjdGl2w6llcywgcmV0b3VybmVyIGxlcyBzdWdnZXN0aW9ucyBzdGFuZGFyZFxuICAgIGlmICghdGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlU21hcnRTdWdnZXN0aW9ucykge1xuICAgICAgcmV0dXJuIHN0YW5kYXJkU3VnZ2VzdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gUsOpY3Vww6lyZXIgbGVzIHN1Z2dlc3Rpb25zIGludGVsbGlnZW50ZXMgKGhpc3RvcmlxdWUgKyBjb250ZXh0ZSlcbiAgICBjb25zdCBzbWFydFN1Z2dlc3Rpb25zID0gdGhpcy5nZXRTbWFydFN1Z2dlc3Rpb25zKGNvbnRleHQsIHN0YW5kYXJkU3VnZ2VzdGlvbnMpO1xuXG4gICAgLy8gRnVzaW9ubmVyIDogc3VnZ2VzdGlvbnMgaW50ZWxsaWdlbnRlcyBlbiBwcmlvcml0w6ksIHB1aXMgc3VnZ2VzdGlvbnMgc3RhbmRhcmRcbiAgICBjb25zdCBtZXJnZWQgPSBbLi4uc21hcnRTdWdnZXN0aW9uc107XG4gICAgZm9yIChjb25zdCBzdWdnZXN0aW9uIG9mIHN0YW5kYXJkU3VnZ2VzdGlvbnMpIHtcbiAgICAgIGlmICghbWVyZ2VkLmluY2x1ZGVzKHN1Z2dlc3Rpb24pKSB7XG4gICAgICAgIG1lcmdlZC5wdXNoKHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWQ7XG4gIH1cblxuICAvKipcbiAgICogUsOpY3Vww6hyZSBsZXMgc3VnZ2VzdGlvbnMgaW50ZWxsaWdlbnRlcyBiYXPDqWVzIHN1ciBsJ2hpc3RvcmlxdWUgZXQgbGUgY29udGV4dGVcbiAgICovXG4gIHByaXZhdGUgZ2V0U21hcnRTdWdnZXN0aW9ucyhjb250ZXh0OiBFZGl0b3JTdWdnZXN0Q29udGV4dCwgX3N0YW5kYXJkU3VnZ2VzdGlvbnM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNtYXJ0U3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcXVlcnkgPSBjb250ZXh0LnF1ZXJ5LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBTdWdnZXN0aW9ucyBiYXPDqWVzIHN1ciBsJ2hpc3RvcmlxdWVcbiAgICBpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSGlzdG9yeVN1Z2dlc3Rpb25zICYmIHRoaXMucGx1Z2luLmhpc3RvcnlNYW5hZ2VyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBoaXN0b3J5U3VnZ2VzdGlvbnMgPSB0aGlzLnBsdWdpbi5oaXN0b3J5TWFuYWdlci5nZXRUb3BTdWdnZXN0aW9uc1N5bmMoMTUpO1xuICAgICAgICBmb3IgKGNvbnN0IHN1Z2dlc3Rpb24gb2YgaGlzdG9yeVN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgLy8gVsOpcmlmaWVyIHF1ZSBsYSBzdWdnZXN0aW9uIGNvcnJlc3BvbmQgw6AgbGEgcmVxdcOqdGUgKHRvbMOocmUgdW5lIHBldGl0ZSBmYXV0ZSBkZSBmcmFwcGUpXG4gICAgICAgICAgaWYgKGZ1enp5TWF0Y2hlc1F1ZXJ5KHN1Z2dlc3Rpb24sIHF1ZXJ5KSAmJiAhc21hcnRTdWdnZXN0aW9ucy5pbmNsdWRlcyhzdWdnZXN0aW9uKSkge1xuICAgICAgICAgICAgc21hcnRTdWdnZXN0aW9ucy5wdXNoKHN1Z2dlc3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZXIgbGVzIGVycmV1cnMgc2lsZW5jaWV1c2VtZW50XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3VnZ2VzdGlvbnMgYmFzw6llcyBzdXIgbGUgY29udGV4dGVcbiAgICBpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlQ29udGV4dFN1Z2dlc3Rpb25zICYmIHRoaXMucGx1Z2luLmNvbnRleHRBbmFseXplciAmJiBjb250ZXh0LmVkaXRvcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udGV4dEluZm8gPSB0aGlzLnBsdWdpbi5jb250ZXh0QW5hbHl6ZXIuYW5hbHl6ZUNvbnRleHRTeW5jKFxuICAgICAgICAgIGNvbnRleHQuZWRpdG9yLFxuICAgICAgICAgIGNvbnRleHQuc3RhcnQubGluZVxuICAgICAgICApO1xuICAgICAgICBcbiAgICAgICAgLy8gQWpvdXRlciBsZXMgZGF0ZXMgdHJvdXbDqWVzIGRhbnMgbGUgY29udGV4dGUgKHRvbMOocmUgdW5lIHBldGl0ZSBmYXV0ZSBkZSBmcmFwcGUpXG4gICAgICAgIGZvciAoY29uc3QgZGF0ZVN0ciBvZiBjb250ZXh0SW5mby5kYXRlc0luQ29udGV4dCkge1xuICAgICAgICAgIGlmIChmdXp6eU1hdGNoZXNRdWVyeShkYXRlU3RyLCBxdWVyeSkgJiYgIXNtYXJ0U3VnZ2VzdGlvbnMuaW5jbHVkZXMoZGF0ZVN0cikpIHtcbiAgICAgICAgICAgIHNtYXJ0U3VnZ2VzdGlvbnMucHVzaChkYXRlU3RyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmVyIGxlcyBlcnJldXJzIHNpbGVuY2lldXNlbWVudFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzbWFydFN1Z2dlc3Rpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUaW1lU3VnZ2VzdGlvbnMoaW5wdXRTdHI6IHN0cmluZywgbGFuZzogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIC8vIE9ubHkgdGhlIGZpcnN0IHZhcmlhbnQgb2YgYSBwaXBlLXNlcGFyYXRlZCB0cmFuc2xhdGlvbiAoZS5nLiBDaGluZXNlXG4gICAgLy8gXCLmmYLplpN85pe26Ze0XCIpIGlzIHVzZWQgZm9yIGRpc3BsYXkvbWF0Y2hpbmcgLS0gZW1iZWRkaW5nIHRoZSByYXdcbiAgICAvLyBtdWx0aS12YXJpYW50IHN0cmluZyB3b3VsZCBib3RoIGdhcmJsZSB0aGUgc3VnZ2VzdGlvbiB0ZXh0IGFuZCwgc2luY2VcbiAgICAvLyBcInxcIiBpcyBhIHJlZ2V4IG1ldGFjaGFyYWN0ZXIsIHNpbGVudGx5IGJyZWFrIHRoZSBcIl5cIiBhbmNob3IgYmVsb3cuXG4gICAgY29uc3QgdGltZVdvcmQgPSB0KFwidGltZVwiLCBsYW5nKS5zcGxpdCgnfCcpWzBdO1xuICAgIGNvbnN0IG5vd1dvcmQgPSB0KFwibm93XCIsIGxhbmcpLnNwbGl0KCd8JylbMF07XG4gICAgaWYgKGlucHV0U3RyLm1hdGNoKG5ldyBSZWdFeHAoYF4ke2VzY2FwZVJlZ2V4KHRpbWVXb3JkKX1gLCBcImlcIikpKSB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtcbiAgICAgICAgbm93V29yZCxcbiAgICAgICAgdChcInBsdXNtaW51dGVzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBcIjE1XCIgfSksXG4gICAgICAgIHQoXCJwbHVzaG91clwiLCBsYW5nLCB7IHRpbWVEZWx0YTogXCIxXCIgfSksXG4gICAgICAgIHQoXCJtaW51c21pbnV0ZXNcIiwgbGFuZywgeyB0aW1lRGVsdGE6IFwiMTVcIiB9KSxcbiAgICAgICAgdChcIm1pbnVzaG91clwiLCBsYW5nLCB7IHRpbWVEZWx0YTogXCIxXCIgfSksXG4gICAgICBdXG4gICAgICAgIC5tYXAodmFsID0+IGAke3RpbWVXb3JkfToke3ZhbH1gKVxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoaW5wdXRTdHIudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyBzdWdnZXN0aW9ucyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEltbWVkaWF0ZVN1Z2dlc3Rpb25zKGlucHV0U3RyOiBzdHJpbmcsIGxhbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAvLyBFc2NhcGUgZWFjaCB0cmFuc2xhdGlvbidzIHZhcmlhbnRzIGluZGl2aWR1YWxseSBiZWZvcmUgam9pbmluZyBpbnRvXG4gICAgLy8gYW4gYWx0ZXJuYXRpb246IGEgbGFuZ3VhZ2UncyBvd24gXCJ8XCItc2VwYXJhdGVkIHZhcmlhbnRzIHN0YXlcbiAgICAvLyBtZWFuaW5nZnVsIGFsdGVybmF0aW9uLCBidXQgYW55IG90aGVyIHJlZ2V4IG1ldGFjaGFyYWN0ZXIgb25lIG1pZ2h0XG4gICAgLy8gY29udGFpbiBjYW4ndCBjb3JydXB0IHRoZSBwYXR0ZXJuLiBBbmNob3JlZCB3aXRoIFwiXlwiIGxpa2UgdGhlIG90aGVyXG4gICAgLy8gc3VnZ2VzdGlvbiBnZW5lcmF0b3JzIGluIHRoaXMgZmlsZSAtLSBvdGhlcndpc2UgYSBzaG9ydCwgY29tbW9uXG4gICAgLy8gc3Vic3RyaW5nIChlLmcuIENoaW5lc2UgXCJuZXh0XCI6IFwi5LiL5LiA5YCLfOS4i+S4gOS4qnzkuItcIiwgdGhlIGxhc3QgdmFyaWFudFxuICAgIC8vIGJlaW5nIGEgc2luZ2xlIGJhcmUgY2hhcmFjdGVyKSBjYW4gbWF0Y2ggaW4gdGhlIG1pZGRsZSBvZiB1bnJlbGF0ZWRcbiAgICAvLyBpbnB1dC5cbiAgICBjb25zdCBidWlsZFBhdHRlcm4gPSAodHJhbnNsYXRpb246IHN0cmluZykgPT5cbiAgICAgIHRyYW5zbGF0aW9uLnNwbGl0KCd8JykubWFwKHYgPT4gZXNjYXBlUmVnZXgodi50cmltKCkpKS5maWx0ZXIoQm9vbGVhbikuam9pbignfCcpO1xuICAgIGNvbnN0IHByZWZpeFBhdHRlcm4gPSBbdChcIm5leHRcIiwgbGFuZyksIHQoXCJsYXN0XCIsIGxhbmcpLCB0KFwidGhpc1wiLCBsYW5nKV1cbiAgICAgIC5tYXAoYnVpbGRQYXR0ZXJuKVxuICAgICAgLmpvaW4oJ3wnKTtcbiAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKGBeKCR7cHJlZml4UGF0dGVybn0pYCwgXCJpXCIpO1xuICAgIGNvbnN0IG1hdGNoID0gaW5wdXRTdHIubWF0Y2gocmVnZXhwKVxuICAgIGlmIChtYXRjaCkge1xuICAgICAgY29uc3QgcmVmZXJlbmNlID0gbWF0Y2hbMV1cbiAgICAgIC8vIFByZW5kcmUgc2V1bGVtZW50IGxhIHByZW1pw6hyZSB2YXJpYW50ZSAoYXZhbnQgbGUgfCkgcG91ciBsZXMgc3VnZ2VzdGlvbnNcbiAgICAgIGNvbnN0IGdldEZpcnN0VmFyaWFudCA9ICh2YWw6IHN0cmluZykgPT4gdmFsLnNwbGl0KCd8JylbMF07XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtcbiAgICAgICAgdChcIndlZWtcIiwgbGFuZyksXG4gICAgICAgIHQoXCJtb250aFwiLCBsYW5nKSxcbiAgICAgICAgdChcInllYXJcIiwgbGFuZyksXG4gICAgICAgIHQoXCJzdW5kYXlcIiwgbGFuZyksXG4gICAgICAgIHQoXCJtb25kYXlcIiwgbGFuZyksXG4gICAgICAgIHQoXCJ0dWVzZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwid2VkbmVzZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwidGh1cnNkYXlcIiwgbGFuZyksXG4gICAgICAgIHQoXCJmcmlkYXlcIiwgbGFuZyksXG4gICAgICAgIHQoXCJzYXR1cmRheVwiLCBsYW5nKSxcbiAgICAgIF1cbiAgICAgICAgLm1hcCh2YWwgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpcnN0VmFyaWFudCA9IGdldEZpcnN0VmFyaWFudCh2YWwpO1xuICAgICAgICAgIC8vIENhcGl0YWxpc2VyIGxhIHByZW1pw6hyZSBsZXR0cmUgcG91ciB1biBtZWlsbGV1ciBhZmZpY2hhZ2VcbiAgICAgICAgICByZXR1cm4gZmlyc3RWYXJpYW50LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZmlyc3RWYXJpYW50LnNsaWNlKDEpO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKHZhbCA9PiBgJHtyZWZlcmVuY2V9ICR7dmFsfWApXG4gICAgICAgIC5maWx0ZXIoaXRlbXMgPT4gaXRlbXMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGlucHV0U3RyLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9ucy5sZW5ndGggPiAwID8gc3VnZ2VzdGlvbnMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWxhdGl2ZVN1Z2dlc3Rpb25zKGlucHV0U3RyOiBzdHJpbmcsIGxhbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAvLyBWw6lyaWZpZXIgZCdhYm9yZCBsZXMgZXhwcmVzc2lvbnMgY29tYmluw6llcyBjb21tZSBcImluIDEgbW9udGggYW5kXCIgb3UgXCJkYW5zIDEgbW9pcyBldFwiXG4gICAgLy8gUGVybWV0dHJlIGxhIHNhaXNpZSBwcm9ncmVzc2l2ZSA6IFwiaW4gMSBtb250aCBhbmRcIiwgXCJpbiAxIG1vbnRoIGFuZCAzXCIsIFwiaW4gMyBtb250aCBhbmRcIiwgZXRjLlxuICAgIGNvbnN0IGFuZFBhdHRlcm4gPSB0KFwiYW5kXCIsIGxhbmcpLnNwbGl0KCd8JylbMF07IC8vIFByZW5kcmUgbGEgcHJlbWnDqHJlIHZhcmlhbnRlXG4gICAgLy8gUmVnZXggcGx1cyBmbGV4aWJsZSBxdWkgcGVybWV0IGxhIHNhaXNpZSBhcHLDqHMgXCJhbmRcIlxuICAgIGNvbnN0IGNvbWJpbmVkUmVnZXggPSBuZXcgUmVnRXhwKGBeKCR7dChcImluXCIsIGxhbmcpfSApPyhbKy1dP1xcXFxkKylcXFxccysoJHt0KFwibWludXRlXCIsIGxhbmcpfXwke3QoXCJob3VyXCIsIGxhbmcpfXwke3QoXCJkYXlcIiwgbGFuZyl9fCR7dChcIndlZWtcIiwgbGFuZyl9fCR7dChcIm1vbnRoXCIsIGxhbmcpfXwke3QoXCJ5ZWFyXCIsIGxhbmcpfSlcXFxccysoJHthbmRQYXR0ZXJufSkoXFxcXHMrLiopPyRgLCBcImlcIik7XG4gICAgY29uc3QgY29tYmluZWRNYXRjaCA9IGlucHV0U3RyLm1hdGNoKGNvbWJpbmVkUmVnZXgpO1xuICAgIGlmIChjb21iaW5lZE1hdGNoKSB7XG4gICAgICBjb25zdCBhZnRlckFuZCA9IGNvbWJpbmVkTWF0Y2hbNV0gPyBjb21iaW5lZE1hdGNoWzVdLnRyaW0oKSA6ICcnO1xuICAgICAgXG4gICAgICAvLyBFeHRyYWlyZSBsYSBwYXJ0aWUgYXZhbnQgXCJhbmRcIiBwb3VyIHJlY29uc3RydWlyZSBjb3JyZWN0ZW1lbnRcbiAgICAgIGNvbnN0IGJlZm9yZUFuZCA9IGlucHV0U3RyLnN1YnN0cmluZygwLCBpbnB1dFN0ci5pbmRleE9mKGNvbWJpbmVkTWF0Y2hbNF0pICsgY29tYmluZWRNYXRjaFs0XS5sZW5ndGgpLnRyaW1FbmQoKTtcbiAgICAgIFxuICAgICAgLy8gU2kgb24gYSBkw6lqw6AgY29tbWVuY8OpIMOgIHRhcGVyIGFwcsOocyBcImFuZFwiLCBleHRyYWlyZSBsZSBub21icmUgcydpbCB5IGVuIGEgdW5cbiAgICAgIGxldCBzdWdnZXN0ZWROdW1iZXIgPSBcIjFcIjtcbiAgICAgIGxldCBhZnRlckFuZFdpdGhvdXROdW1iZXIgPSBhZnRlckFuZDtcbiAgICAgIGlmIChhZnRlckFuZCkge1xuICAgICAgICBjb25zdCBudW1iZXJNYXRjaCA9IGFmdGVyQW5kLm1hdGNoKC9eKFxcZCspKC4qKSQvKTtcbiAgICAgICAgaWYgKG51bWJlck1hdGNoKSB7XG4gICAgICAgICAgc3VnZ2VzdGVkTnVtYmVyID0gbnVtYmVyTWF0Y2hbMV07XG4gICAgICAgICAgYWZ0ZXJBbmRXaXRob3V0TnVtYmVyID0gbnVtYmVyTWF0Y2hbMl0udHJpbSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gW1xuICAgICAgICB0KFwiaW5taW51dGVzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBzdWdnZXN0ZWROdW1iZXIgfSksXG4gICAgICAgIHQoXCJpbmhvdXJzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBzdWdnZXN0ZWROdW1iZXIgfSksXG4gICAgICAgIHQoXCJpbmRheXNcIiwgbGFuZywgeyB0aW1lRGVsdGE6IHN1Z2dlc3RlZE51bWJlciB9KSxcbiAgICAgICAgdChcImlud2Vla3NcIiwgbGFuZywgeyB0aW1lRGVsdGE6IHN1Z2dlc3RlZE51bWJlciB9KSxcbiAgICAgICAgdChcImlubW9udGhzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBzdWdnZXN0ZWROdW1iZXIgfSksXG4gICAgICBdXG4gICAgICAgIC5tYXAocyA9PiB7XG4gICAgICAgICAgY29uc3QgdW5pdFBhcnQgPSBzLnJlcGxhY2UoL15kYW5zIHxeaW4gL2ksICcnKTtcbiAgICAgICAgICAvLyB1bml0UGFydCBlc3QgY29tbWUgXCIzIGRheXNcIiBvdSBcIjUgbWludXRlc1wiXG4gICAgICAgICAgaWYgKGFmdGVyQW5kKSB7XG4gICAgICAgICAgICAvLyBTaSBvbiBhIGTDqWrDoCBjb21tZW5jw6kgw6AgdGFwZXIsIGNvbXBsw6l0ZXIgaW50ZWxsaWdlbW1lbnRcbiAgICAgICAgICAgIC8vIHVuaXRQYXJ0IGNvbW1lbmNlIHBhciBsZSBub21icmUgKGV4OiBcIjMgZGF5c1wiKVxuICAgICAgICAgICAgY29uc3QgdW5pdFdvcmRzID0gdW5pdFBhcnQuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgIGlmICh1bml0V29yZHMubGVuZ3RoID4gMSAmJiB1bml0V29yZHNbMF0gPT09IHN1Z2dlc3RlZE51bWJlcikge1xuICAgICAgICAgICAgICAvLyBMZSBub21icmUgY29ycmVzcG9uZCwgb24gcGV1dCBzdWdnw6lyZXIgbGUgcmVzdGUgKGV4OiBcImRheXNcIilcbiAgICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nID0gdW5pdFBhcnQuc3Vic3RyaW5nKHN1Z2dlc3RlZE51bWJlci5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgICAgICAgaWYgKGFmdGVyQW5kV2l0aG91dE51bWJlcikge1xuICAgICAgICAgICAgICAgIC8vIFNpIG9uIGEgdGFww6kgcXVlbHF1ZSBjaG9zZSBhcHLDqHMgbGUgbm9tYnJlLCB2w6lyaWZpZXIgc2kgw6dhIGNvcnJlc3BvbmRcbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBrbm93biByb3VnaCBlZGdlIC0tIHRoaXMgZHJvcHMgdGhlIHNwYWNlIGJldHdlZW4gdGhlXG4gICAgICAgICAgICAgICAgLy8gbnVtYmVyIGFuZCB1bml0IChlLmcuIHR5cGluZyBcIjMgZGF5XCIgYWZ0ZXIgXCJhbmRcIiBwcm9kdWNlc1xuICAgICAgICAgICAgICAgIC8vIFwiLi4uYW5kIDNzXCIgaW5zdGVhZCBvZiBcIi4uLmFuZCAzIGRheXNcIiksIHNvIHRoZSByZWJ1aWx0XG4gICAgICAgICAgICAgICAgLy8gY2FuZGlkYXRlIHRoZW4gZmFpbHMgdGhlIG91dGVyIHByZWZpeCBmaWx0ZXIgYmVsb3cgYW5kIHRoaXNcbiAgICAgICAgICAgICAgICAvLyB3aG9sZSBicmFuY2ggc2lsZW50bHkgY29udHJpYnV0ZXMgbm8gc3VnZ2VzdGlvbi4gVmVyaWZpZWRcbiAgICAgICAgICAgICAgICAvLyBhcyB0aGUgYWN0dWFsIGN1cnJlbnQgYmVoYXZpb3I7IGxlZnQgYWxvbmUgYXMgYSBuYXJyb3dcbiAgICAgICAgICAgICAgICAvLyBhdXRvc3VnZ2VzdC10ZXh0IHBvbGlzaCBpc3N1ZSByYXRoZXIgdGhhbiBmaXhlZCBoZXJlLlxuICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmcudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGFmdGVyQW5kV2l0aG91dE51bWJlci50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2JlZm9yZUFuZH0gJHtzdWdnZXN0ZWROdW1iZXJ9JHtyZW1haW5pbmcuc3Vic3RyaW5nKGFmdGVyQW5kV2l0aG91dE51bWJlci5sZW5ndGgpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE9uIGEganVzdGUgdGFww6kgbGUgbm9tYnJlLCBzdWdnw6lyZXIgbGUgcmVzdGVcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7YmVmb3JlQW5kfSAke3VuaXRQYXJ0fWA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlYWNoZWQgZm9yIGxhbmd1YWdlcyB0aGF0IGRvbid0IHNlcGFyYXRlIHRoZSBudW1iZXIgYW5kIHVuaXRcbiAgICAgICAgICAgIC8vIHdpdGggYSBzcGFjZSAoZS5nLiBDaGluZXNlIFwiM+WkqeW+jFwiLCBKYXBhbmVzZSBcIjPml6XlvoxcIik6IHVuaXRQYXJ0XG4gICAgICAgICAgICAvLyB0aGVuIGhhcyBubyBzcGFjZSBhdCBhbGwsIHNvIHVuaXRXb3Jkcy5sZW5ndGggPiAxIGFib3ZlIGlzXG4gICAgICAgICAgICAvLyBmYWxzZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIG51bWJlciBtYXRjaGVzLiBOb3RlIHRoaXMgaGFzXG4gICAgICAgICAgICAvLyBpdHMgb3duIHJvdWdoIGVkZ2Ugc3ltbWV0cmljIHRvIHRoZSBvbmUgYWJvdmUgLS0gc2luY2VcbiAgICAgICAgICAgIC8vIHVuaXRQYXJ0IGhhcyBubyBzcGFjZSwgdW5pdFBhcnQuaW5kZXhPZignICcpIGlzIC0xIGFuZFxuICAgICAgICAgICAgLy8gdW5pdFdpdGhvdXROdW1iZXIgZW5kcyB1cCBiZWluZyB0aGUgKndob2xlKiB1bml0UGFydFxuICAgICAgICAgICAgLy8gKGluY2x1ZGluZyBpdHMgb3duIGxlYWRpbmcgbnVtYmVyKSwgc28gdGhlIHJldHVybmVkIHN1Z2dlc3Rpb25cbiAgICAgICAgICAgIC8vIGR1cGxpY2F0ZXMgdGhlIG51bWJlciAoZS5nLiBcIuWcqCAzIOWkqSDlkowgNCA05YiG6ZCY5b6MXCIgaW5zdGVhZCBvZlxuICAgICAgICAgICAgLy8gXCIuLi7lkowgNOWIhumQmOW+jFwiKS4gVmVyaWZpZWQgYXMgdGhlIGFjdHVhbCBjdXJyZW50IGJlaGF2aW9yO1xuICAgICAgICAgICAgLy8gbGVmdCBhbG9uZSBhcyB0aGUgc2FtZSBraW5kIG9mIG5hcnJvdyBhdXRvc3VnZ2VzdC10ZXh0IHBvbGlzaFxuICAgICAgICAgICAgLy8gaXNzdWUgYXMgdGhlIG9uZSBkb2N1bWVudGVkIGFib3ZlLCBub3QgZml4ZWQgaGVyZS5cbiAgICAgICAgICAgIGNvbnN0IHVuaXRXaXRob3V0TnVtYmVyID0gdW5pdFBhcnQuc3Vic3RyaW5nKHVuaXRQYXJ0LmluZGV4T2YoJyAnKSArIDEpO1xuICAgICAgICAgICAgaWYgKHVuaXRXaXRob3V0TnVtYmVyLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChhZnRlckFuZC50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgICByZXR1cm4gYCR7YmVmb3JlQW5kfSAke3N1Z2dlc3RlZE51bWJlcn0gJHt1bml0V2l0aG91dE51bWJlcn1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBgJHtiZWZvcmVBbmR9ICR7dW5pdFBhcnR9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+IGl0ZW0gIT09IG51bGwpXG4gICAgICAgIC5maWx0ZXIoaXRlbXMgPT4gaXRlbXMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGlucHV0U3RyLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9ucy5sZW5ndGggPiAwID8gc3VnZ2VzdGlvbnMgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gVsOpcmlmaWVyIGxlcyBwbGFnZXMgZGUgZGF0ZXMgcGFydGllbGxlcyBjb21tZSBcImRlIGx1bmRpIMOgXCIgb3UgXCJmcm9tIG1vbmRheSB0b1wiXG4gICAgLy8gUGVybWV0dHJlIGxhIHNhaXNpZSBwcm9ncmVzc2l2ZSA6IFwiZGUgbHVuZGkgYVwiLCBcImRlIGx1bmRpIGEgdlwiLCBcImRlIGx1bmRpIGEgdmVcIiwgZXRjLlxuICAgIGNvbnN0IGZyb21QYXR0ZXJuID0gdChcImZyb21cIiwgbGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICBjb25zdCB0b1BhdHRlcm4gPSB0KFwidG9cIiwgbGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICAvLyBSZWdleCBwbHVzIGZsZXhpYmxlIHF1aSBwZXJtZXQgbGEgc2Fpc2llIHByb2dyZXNzaXZlIGFwcsOocyBcIsOgXCIgb3UgXCJhXCJcbiAgICBjb25zdCByYW5nZVBhcnRpYWxSZWdleCA9IG5ldyBSZWdFeHAoYF4oJHtmcm9tUGF0dGVybn18ZGV8ZHUpXFxcXHMrKCR7dChcInN1bmRheVwiLCBsYW5nKX18JHt0KFwibW9uZGF5XCIsIGxhbmcpfXwke3QoXCJ0dWVzZGF5XCIsIGxhbmcpfXwke3QoXCJ3ZWRuZXNkYXlcIiwgbGFuZyl9fCR7dChcInRodXJzZGF5XCIsIGxhbmcpfXwke3QoXCJmcmlkYXlcIiwgbGFuZyl9fCR7dChcInNhdHVyZGF5XCIsIGxhbmcpfSlcXFxccysoJHt0b1BhdHRlcm59fMOgfGEpKFxcXFxzKy4qKT8kYCwgXCJpXCIpO1xuICAgIGNvbnN0IHJhbmdlUGFydGlhbE1hdGNoID0gaW5wdXRTdHIubWF0Y2gocmFuZ2VQYXJ0aWFsUmVnZXgpO1xuICAgIGlmIChyYW5nZVBhcnRpYWxNYXRjaCkge1xuICAgICAgY29uc3QgYWZ0ZXJUbyA9IHJhbmdlUGFydGlhbE1hdGNoWzRdID8gcmFuZ2VQYXJ0aWFsTWF0Y2hbNF0udHJpbSgpIDogJyc7XG4gICAgICAvLyBFeHRyYWlyZSBsYSBwYXJ0aWUgYXZhbnQgXCLDoFwiIG91IFwiYVwiIHBvdXIgcmVjb25zdHJ1aXJlIGNvcnJlY3RlbWVudFxuICAgICAgY29uc3QgYmVmb3JlVG8gPSBpbnB1dFN0ci5zdWJzdHJpbmcoMCwgaW5wdXRTdHIuaW5kZXhPZihyYW5nZVBhcnRpYWxNYXRjaFszXSkgKyByYW5nZVBhcnRpYWxNYXRjaFszXS5sZW5ndGgpLnRyaW1FbmQoKTtcbiAgICAgIFxuICAgICAgLy8gR8OpbsOpcmVyIGRlcyBzdWdnZXN0aW9ucyBwb3VyIGxlcyBqb3VycyBkZSBmaW4gcG9zc2libGVzXG4gICAgICBjb25zdCBhbGxEYXlzID0gW1xuICAgICAgICB0KFwic3VuZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwibW9uZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwidHVlc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcIndlZG5lc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcInRodXJzZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwiZnJpZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwic2F0dXJkYXlcIiwgbGFuZyksXG4gICAgICBdO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBhbGxEYXlzXG4gICAgICAgIC5tYXAoZGF5ID0+IHtcbiAgICAgICAgICBpZiAoYWZ0ZXJUbykge1xuICAgICAgICAgICAgLy8gU2kgb24gYSBkw6lqw6AgY29tbWVuY8OpIMOgIHRhcGVyLCBmaWx0cmVyIGxlcyBqb3VycyBxdWkgY29tbWVuY2VudCBwYXIgY2UgdGV4dGVcbiAgICAgICAgICAgIGlmIChkYXkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGFmdGVyVG8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgLy8gUmVtcGxhY2VyIFwiYWZ0ZXJUb1wiIHBhciBsZSBqb3VyIGNvbXBsZXRcbiAgICAgICAgICAgICAgcmV0dXJuIGAke2JlZm9yZVRvfSAke2RheX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBgJHtiZWZvcmVUb30gJHtkYXl9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+IGl0ZW0gIT09IG51bGwpXG4gICAgICAgIC5maWx0ZXIoaXRlbXMgPT4gaXRlbXMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGlucHV0U3RyLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9ucy5sZW5ndGggPiAwID8gc3VnZ2VzdGlvbnMgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gUGF0dGVybiBzdGFuZGFyZCBwb3VyIGxlcyBkYXRlcyByZWxhdGl2ZXMgc2ltcGxlc1xuICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoYF4oJHt0KFwiaW5cIiwgbGFuZyl9ICk/KFsrLV0/XFxcXGQrKWAsIFwiaVwiKVxuICAgIGNvbnN0IHJlbGF0aXZlRGF0ZSA9IGlucHV0U3RyLm1hdGNoKHJlZ2V4cCk7XG4gICAgaWYgKHJlbGF0aXZlRGF0ZSkge1xuICAgICAgY29uc3QgdGltZURlbHRhID0gcmVsYXRpdmVEYXRlW3JlbGF0aXZlRGF0ZS5sZW5ndGggLSAxXTtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gW1xuICAgICAgICB0KFwiaW5taW51dGVzXCIsIGxhbmcsIHsgdGltZURlbHRhIH0pLFxuICAgICAgICB0KFwiaW5ob3Vyc1wiLCBsYW5nLCB7IHRpbWVEZWx0YSB9KSxcbiAgICAgICAgdChcImluZGF5c1wiLCBsYW5nLCB7IHRpbWVEZWx0YSB9KSxcbiAgICAgICAgdChcImlud2Vla3NcIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJpbm1vbnRoc1wiLCBsYW5nLCB7IHRpbWVEZWx0YSB9KSxcbiAgICAgICAgdChcIm1pbnV0ZXNhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJob3Vyc2Fnb1wiLCBsYW5nLCB7IHRpbWVEZWx0YSB9KSxcbiAgICAgICAgdChcImRheXNhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJ3ZWVrc2Fnb1wiLCBsYW5nLCB7IHRpbWVEZWx0YSB9KSxcbiAgICAgICAgdChcIm1vbnRoc2Fnb1wiLCBsYW5nLCB7IHRpbWVEZWx0YSB9KSxcbiAgICAgIF0uZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICAvLyBEb24ndCByZXR1cm4gYW4gZW1wdHkgYXJyYXkgaGVyZTogYW55IGRpZ2l0LWxlZCBpbnB1dCAoaW5jbHVkaW5nXG4gICAgICAvLyBzdWZmaXgtc3R5bGUgXCIzIGRpYXMgYXRyw6FzXCIpIG1hdGNoZXMgdGhpcyByZWdleHAgdG9vLCBzaW5jZSBpdHNcbiAgICAgIC8vIHByZWZpeCBncm91cCBpcyBvcHRpb25hbCAtLSByZXR1cm5pbmcgdW5jb25kaXRpb25hbGx5IHdvdWxkIG1ha2VcbiAgICAgIC8vIHRoZSBzdWZmaXgtcGF0dGVybiBjaGVjayBiZWxvdyB1bnJlYWNoYWJsZSBkZWFkIGNvZGUgZm9yIGV2ZXJ5XG4gICAgICAvLyBzdWZmaXgtb25seSBsYW5ndWFnZS5cbiAgICAgIGlmIChzdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBzdWdnZXN0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdWZmaXgtc3R5bGUgcGFzdCBleHByZXNzaW9ucywgZS5nLiBQb3J0dWd1ZXNlL1NwYW5pc2ggXCIzIGRpYXMgYXRyw6FzXCJcbiAgICAvLyAoWCB1bml0ICsgYWdvc3VmZml4IG1hcmtlciksIHRoZSBwYXN0LXRlbnNlIG1pcnJvciBvZiB0aGUgcHJlZml4XG4gICAgLy8gc3VnZ2VzdGlvbnMgYWJvdmUuXG4gICAgY29uc3QgYWdvU3VmZml4ID0gdChcImFnb3N1ZmZpeFwiLCBsYW5nKTtcbiAgICBpZiAoYWdvU3VmZml4ICYmIGFnb1N1ZmZpeCAhPT0gXCJOT1RGT1VORFwiKSB7XG4gICAgICBjb25zdCBzdWZmaXhNYXRjaCA9IGlucHV0U3RyLm1hdGNoKC9eKFxcZCspXFxzKyhcXHcqKS9pKTtcbiAgICAgIGlmIChzdWZmaXhNYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lRGVsdGEgPSBzdWZmaXhNYXRjaFsxXTtcbiAgICAgICAgY29uc3Qgc3VmZml4VmFyaWFudCA9IGFnb1N1ZmZpeC5zcGxpdCgnfCcpWzBdO1xuXG4gICAgICAgIGNvbnN0IHVuaXRUeXBlcyA9IFsnbWludXRlJywgJ2hvdXInLCAnZGF5JywgJ3dlZWsnLCAnbW9udGgnLCAneWVhciddO1xuICAgICAgICBjb25zdCBzdWdnZXN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB1bml0VHlwZSBvZiB1bml0VHlwZXMpIHtcbiAgICAgICAgICBjb25zdCB3b3JkcyA9IHQodW5pdFR5cGUsIGxhbmcpLnNwbGl0KCd8JykubWFwKHcgPT4gdy50cmltKCkpLnNsaWNlKDAsIDIpO1xuICAgICAgICAgIGZvciAoY29uc3Qgd29yZCBvZiB3b3Jkcykge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChgJHt0aW1lRGVsdGF9ICR7d29yZH0gJHtzdWZmaXhWYXJpYW50fWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gc3VnZ2VzdGlvbnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoaW5wdXRTdHIudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgICBpZiAoZmlsdGVyZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0V2Vla2RheVN1Z2dlc3Rpb25zKGlucHV0U3RyOiBzdHJpbmcsIGxhbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAvLyBMZSBwYXJzZXIgcGV1dCBnw6lyZXIgbGVzIGFicsOpdmlhdGlvbnMgKHRodSwgbW9uLCBzYXQsIGV0Yy4pLCBkb25jIG9uIGRvaXQgbGVzIHByb3Bvc2VyIGF1c3NpXG4gICAgY29uc3Qgd2Vla2RheXMgPSBbXG4gICAgICB7IGtleTogJ3N1bmRheScsIGFiYnI6IFsnc3VuJ10gfSxcbiAgICAgIHsga2V5OiAnbW9uZGF5JywgYWJicjogWydtb24nXSB9LFxuICAgICAgeyBrZXk6ICd0dWVzZGF5JywgYWJicjogWyd0dWUnLCAndHVlcyddIH0sXG4gICAgICB7IGtleTogJ3dlZG5lc2RheScsIGFiYnI6IFsnd2VkJ10gfSxcbiAgICAgIHsga2V5OiAndGh1cnNkYXknLCBhYmJyOiBbJ3RodScsICd0aHVyJywgJ3RodXJzJ10gfSxcbiAgICAgIHsga2V5OiAnZnJpZGF5JywgYWJicjogWydmcmknXSB9LFxuICAgICAgeyBrZXk6ICdzYXR1cmRheScsIGFiYnI6IFsnc2F0J10gfSxcbiAgICBdO1xuXG4gICAgY29uc3QgaW5wdXRMb3dlciA9IGlucHV0U3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3Qgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGRheSBvZiB3ZWVrZGF5cykge1xuICAgICAgLy8gdCgpIGFsd2F5cyBmYWxscyBiYWNrIHRvIEVuZ2xpc2gsIGFuZCBlbi50cyBhbHdheXMgZGVmaW5lcyBhbGxcbiAgICAgIC8vIHNldmVuIHdlZWtkYXlzLCBzbyB0aGlzIGd1YXJkIGNhbid0IGFjdHVhbGx5IGJlIGZhbHNlLlxuICAgICAgY29uc3QgZGF5TmFtZSA9IHQoZGF5LmtleSwgbGFuZyk7XG4gICAgICBpZiAoIWRheU5hbWUgfHwgZGF5TmFtZSA9PT0gXCJOT1RGT1VORFwiKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgZmlyc3RWYXJpYW50ID0gZGF5TmFtZS5zcGxpdCgnfCcpWzBdLnRyaW0oKTtcbiAgICAgIGNvbnN0IGRheU5hbWVMb3dlciA9IGZpcnN0VmFyaWFudC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAvLyBWw6lyaWZpZXIgc2kgbGUgbm9tIGNvbXBsZXQgY29tbWVuY2UgcGFyIGwnaW5wdXQgKHRvbMOocmUgdW5lIHBldGl0ZSBmYXV0ZSBkZSBmcmFwcGUpXG4gICAgICBpZiAoZnV6enlNYXRjaGVzUXVlcnkoZGF5TmFtZUxvd2VyLCBpbnB1dExvd2VyKSkge1xuICAgICAgICBjb25zdCBjYXBpdGFsaXplZCA9IGZpcnN0VmFyaWFudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGZpcnN0VmFyaWFudC5zbGljZSgxKTtcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9ucy5pbmNsdWRlcyhjYXBpdGFsaXplZCkpIHtcbiAgICAgICAgICBzdWdnZXN0aW9ucy5wdXNoKGNhcGl0YWxpemVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBWw6lyaWZpZXIgc2kgdW5lIGFicsOpdmlhdGlvbiBjb3JyZXNwb25kIC0tIHRoZSBhYmJyZXZpYXRpb25zIGJlbG93IGFyZVxuICAgICAgLy8gRW5nbGlzaC1vbmx5IChlLmcuIFwibW9uXCIpLCBidXQgZGF5TmFtZS9maXJzdFZhcmlhbnQgaXMgdHJhbnNsYXRlZFxuICAgICAgLy8gKGUuZy4gRnJlbmNoIFwibHVuZGlcIiksIHNvIGZvciBhbnkgbm9uLUVuZ2xpc2ggbGFuZ3VhZ2UgdGhlIGZ1bGwtbmFtZVxuICAgICAgLy8gY2hlY2sgYWJvdmUgbmV2ZXIgbWF0Y2hlcyB3aGlsZSB0aGlzIGFiYnJldmlhdGlvbiBjaGVjayBzdGlsbCBkb2VzLlxuICAgICAgLy8gVGhpcyBpcyB3aGF0IGxldHMgRW5nbGlzaCB3ZWVrZGF5IGFiYnJldmlhdGlvbnMgd29yayBhcyBhIHNob3J0Y3V0XG4gICAgICAvLyByZWdhcmRsZXNzIG9mIHdoaWNoIGxhbmd1YWdlIGlzIGFjdGl2ZSAodmVyaWZpZWQ6IHR5cGluZyBcIm1vblwiIHdpdGhcbiAgICAgIC8vIG9ubHkgRnJlbmNoIGVuYWJsZWQgY29ycmVjdGx5IHN1Z2dlc3RzIFwiTHVuZGlcIikuXG4gICAgICBmb3IgKGNvbnN0IGFiYnIgb2YgZGF5LmFiYnIpIHtcbiAgICAgICAgaWYgKGFiYnIuc3RhcnRzV2l0aChpbnB1dExvd2VyKSkge1xuICAgICAgICAgIGNvbnN0IGNhcGl0YWxpemVkID0gZmlyc3RWYXJpYW50LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZmlyc3RWYXJpYW50LnNsaWNlKDEpO1xuICAgICAgICAgIGlmICghc3VnZ2VzdGlvbnMuaW5jbHVkZXMoY2FwaXRhbGl6ZWQpKSB7XG4gICAgICAgICAgICBzdWdnZXN0aW9ucy5wdXNoKGNhcGl0YWxpemVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0U3VnZ2VzdGlvbnMoaW5wdXRTdHI6IHN0cmluZywgbGFuZzogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICB0KFwidG9kYXlcIiwgbGFuZyksXG4gICAgICB0KFwieWVzdGVyZGF5XCIsIGxhbmcpLFxuICAgICAgdChcInRvbW9ycm93XCIsIGxhbmcpLFxuICAgIF0uZmlsdGVyKGl0ZW0gPT4gZnV6enlNYXRjaGVzUXVlcnkoaXRlbSwgaW5wdXRTdHIpKTtcbiAgfVxuXG4gIHJlbmRlclN1Z2dlc3Rpb24oc3VnZ2VzdGlvbjogc3RyaW5nLCBlbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2aWV3ID0gdGhpcy5yZXNvbHZlUHJldmlld1RleHQoc3VnZ2VzdGlvbik7XG4gICAgaWYgKCFwcmV2aWV3IHx8IHByZXZpZXcgPT09IHN1Z2dlc3Rpb24pIHtcbiAgICAgIGVsLnNldFRleHQoc3VnZ2VzdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIE9ic2lkaWFuIHJlY3ljbGVzIHN1Z2dlc3Rpb24tcm93IGVsZW1lbnRzIGFjcm9zcyByZW5kZXJzICh2aXJ0dWFsaXplZFxuICAgIC8vIGxpc3QpLCBzbyBhIHN0YWxlIHByZXZpb3VzIHJlbmRlcidzIGNvbnRlbnQgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZVxuICAgIC8vIGFwcGVuZGluZyBuZXcgc3BhbnMgLS0gb3RoZXJ3aXNlIG9sZCB0ZXh0L3NwYW5zIHN0YWNrIHVwIG9uIHRvcCBvZlxuICAgIC8vIGVhY2ggb3RoZXIgb24gdGhlIHJldXNlZCBlbGVtZW50LlxuICAgIGVsLmVtcHR5KCk7XG4gICAgZWwuYWRkQ2xhc3MoXCJubGQtc3VnZ2VzdGlvbi1pdGVtXCIpO1xuICAgIGVsLmNyZWF0ZVNwYW4oeyBjbHM6IFwibmxkLXN1Z2dlc3Rpb24tdGV4dFwiLCB0ZXh0OiBzdWdnZXN0aW9uIH0pO1xuICAgIGVsLmNyZWF0ZVNwYW4oeyBjbHM6IFwibmxkLXN1Z2dlc3Rpb24tcHJldmlld1wiLCB0ZXh0OiBwcmV2aWV3IH0pO1xuICB9XG5cbiAgLy8gUmVzb2x2ZXMgYSBzdWdnZXN0aW9uIHRvIHRoZSBwbGFpbi10ZXh0IGRhdGUvdGltZSBpdCB3b3VsZCBhY3R1YWxseVxuICAvLyBpbnNlcnQgKG5vIFtbbGlua3NdXSwgbm8gYWxpYXMpIC0tIHNob3duIG5leHQgdG8gdGhlIHN1Z2dlc3Rpb24gaW4gdGhlXG4gIC8vIGRyb3Bkb3duIHNvIHRoZSB1c2VyIGNhbiBzZWUgdGhlIHJlc29sdmVkIHZhbHVlIGJlZm9yZSBwaWNraW5nIG9uZS5cbiAgLy8gRGVsaWJlcmF0ZWx5IG1pcnJvcnMgc2VsZWN0U3VnZ2VzdGlvbigpJ3Mgb3duIGRhdGUvdGltZSByZXNvbHV0aW9uXG4gIC8vICh0aW1lLXN1Z2dlc3Rpb24gLyBkYXRlLXJhbmdlIC8gaHlicmlkLWRhdGUtdGltZSBicmFuY2hlcykgc28gdGhlXG4gIC8vIHByZXZpZXcgY2FuIG5ldmVyIHNob3cgc29tZXRoaW5nIGRpZmZlcmVudCBmcm9tIHdoYXQgc2VsZWN0aW5nIHRoZVxuICAvLyBzdWdnZXN0aW9uIGFjdHVhbGx5IHByb2R1Y2VzIC0tIGFuZCwgdW5saWtlIHNlbGVjdFN1Z2dlc3Rpb24oKSwgbmV2ZXJcbiAgLy8gdG91Y2hlcyB0aGUgZWRpdG9yIG9yIGhpc3RvcnkgYW5kIGNhbid0IHRocm93OiBhIHBhcnNpbmcgZmFpbHVyZSBoZXJlXG4gIC8vIGp1c3QgbWVhbnMgbm8gcHJldmlldyBpcyBzaG93biwgbm90IGEgYnJva2VuIHN1Z2dlc3Rpb24gbGlzdC5cbiAgcHJpdmF0ZSByZXNvbHZlUHJldmlld1RleHQoc3VnZ2VzdGlvbjogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25Jc1RpbWUoc3VnZ2VzdGlvbikpIHtcbiAgICAgICAgY29uc3QgdGltZVBhcnQgPSBzdWdnZXN0aW9uLnN1YnN0cmluZyh0aGlzLmdldFRpbWVQcmVmaXhMZW5ndGgoc3VnZ2VzdGlvbikpO1xuICAgICAgICBjb25zdCBwYXJzZWRUaW1lID0gdGhpcy5wbHVnaW4ucGFyc2VUaW1lKHRpbWVQYXJ0KTtcbiAgICAgICAgLy8gcGFyc2VEYXRlKCkvcGFyc2VUaW1lKCkgbmV2ZXIgdGhyb3cgLS0gb24gdW5wYXJzZWFibGUgaW5wdXQgdGhleVxuICAgICAgICAvLyByZXR1cm4gYW4gTkxEUmVzdWx0IHdpdGggZm9ybWF0dGVkU3RyaW5nIFwiSW52YWxpZCBkYXRlXCIgYW5kIGFuXG4gICAgICAgIC8vIGludmFsaWQgbW9tZW50LCBub3QgYW4gZXhjZXB0aW9uLiBDaGVja2luZyBpc1ZhbGlkKCkgZXhwbGljaXRseSBpc1xuICAgICAgICAvLyB3aGF0IGFjdHVhbGx5IGNhdGNoZXMgdGhhdCBjYXNlICh0aGUgdHJ5L2NhdGNoIGJlbG93IGlzIG9ubHkgYVxuICAgICAgICAvLyBzYWZldHkgbmV0IGZvciBnZW51aW5lbHkgdW5leHBlY3RlZCBlcnJvcnMgZWxzZXdoZXJlIGluIHRoaXMgbWV0aG9kKS5cbiAgICAgICAgaWYgKCFwYXJzZWRUaW1lLm1vbWVudC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkVGltZS5mb3JtYXR0ZWRTdHJpbmc7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGVSYW5nZSA9IHRoaXMucGx1Z2luLnBhcnNlRGF0ZVJhbmdlKHN1Z2dlc3Rpb24pO1xuICAgICAgaWYgKGRhdGVSYW5nZSkge1xuICAgICAgICBpZiAoZGF0ZVJhbmdlLmRhdGVMaXN0ICYmIGRhdGVSYW5nZS5kYXRlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGVSYW5nZS5kYXRlTGlzdC5tYXAobSA9PiBtLmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpKS5qb2luKCcsICcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0Rm9ybWF0dGVkID0gZGF0ZVJhbmdlLnN0YXJ0TW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICBjb25zdCBlbmRGb3JtYXR0ZWQgPSBkYXRlUmFuZ2UuZW5kTW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICBjb25zdCBwcmltYXJ5TGFuZyA9IHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlc1swXSB8fCAnZW4nO1xuICAgICAgICBjb25zdCB0b1RyYW5zbGF0aW9uID0gdChcInRvXCIsIHByaW1hcnlMYW5nKS5zcGxpdCgnfCcpWzBdO1xuICAgICAgICByZXR1cm4gYCR7c3RhcnRGb3JtYXR0ZWR9ICR7dG9UcmFuc2xhdGlvbn0gJHtlbmRGb3JtYXR0ZWR9YDtcbiAgICAgIH1cblxuICAgICAgbGV0IGhhc1RpbWUgPSB0aGlzLnBsdWdpbi5oYXNUaW1lQ29tcG9uZW50KHN1Z2dlc3Rpb24pO1xuICAgICAgaWYgKCFoYXNUaW1lKSB7XG4gICAgICAgIGNvbnN0IGV4cGxpY2l0VGltZVJlZ2V4ID0gL1xcZCtcXHMqKG1pbnxtaW5zfG1pbnV0ZXxtaW51dGVzfGh8aG91cnxob3Vyc3xoZXVyZXxoZXVyZXN8c2VjfHNlY29uZHxzZWNvbmRzKSg/IVthLXpdKS9pO1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbi5tYXRjaChleHBsaWNpdFRpbWVSZWdleCkpIHtcbiAgICAgICAgICBoYXNUaW1lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJzZWRSZXN1bHQgPSB0aGlzLnBsdWdpbi5wYXJzZURhdGUoc3VnZ2VzdGlvbik7XG4gICAgICBpZiAoIXBhcnNlZFJlc3VsdC5tb21lbnQuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGhhc1RpbWUpIHtcbiAgICAgICAgY29uc3QgaXNUb2RheSA9IHBhcnNlZFJlc3VsdC5tb21lbnQuaXNTYW1lKG1vbWVudCgpLCAnZGF5Jyk7XG4gICAgICAgIGNvbnN0IGlzUmVsYXRpdmVTaG9ydFRlcm0gPSBzaG91bGRPbWl0RGF0ZUZvclNob3J0UmVsYXRpdmUoc3VnZ2VzdGlvbiwgdGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzKTtcbiAgICAgICAgY29uc3Qgc2hvdWxkT21pdERhdGUgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5vbWl0RGF0ZUZvclNob3J0UmVsYXRpdmUgJiYgaXNUb2RheSAmJiBpc1JlbGF0aXZlU2hvcnRUZXJtO1xuICAgICAgICBjb25zdCB0aW1lUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQgfHwgXCJISDptbVwiKTtcbiAgICAgICAgaWYgKHNob3VsZE9taXREYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHRpbWVQYXJ0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGVQYXJ0ID0gcGFyc2VkUmVzdWx0Lm1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgcmV0dXJuIGAke2RhdGVQYXJ0fSAke3RpbWVQYXJ0fWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyc2VkUmVzdWx0LmZvcm1hdHRlZFN0cmluZztcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ0RhdGVTdWdnZXN0OiBmYWlsZWQgdG8gcmVzb2x2ZSBhdXRvc3VnZ2VzdCBwcmV2aWV3JywgeyBzdWdnZXN0aW9uLCBlcnJvciB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFN1Z2dlc3Rpb24oc3VnZ2VzdGlvbjogc3RyaW5nLCBldmVudDogS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBVdGlsaXNlciBsJ8OpZGl0ZXVyIGR1IGNvbnRleHRlIHNpIGRpc3BvbmlibGUsIHNpbm9uIGNoZXJjaGVyIGwnw6lkaXRldXIgYWN0aWZcbiAgICBsZXQgZWRpdG9yOiBFZGl0b3IgfCBudWxsID0gbnVsbDtcbiAgICBpZiAodGhpcy5jb250ZXh0Py5lZGl0b3IpIHtcbiAgICAgIGVkaXRvciA9IHRoaXMuY29udGV4dC5lZGl0b3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcih0aGlzLmFwcC53b3Jrc3BhY2UpO1xuICAgIH1cblxuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5jbHVkZUFsaWFzID0gZXZlbnQuc2hpZnRLZXk7XG4gICAgLy8gV2hlbiBrZWVwaW5nIHRoZSB0eXBlZCB0ZXh0IGFzIGFsaWFzIChTaGlmdCksIHByZWZlciB3aGF0IHRoZSB1c2VyXG4gICAgLy8gYWN0dWFsbHkgdHlwZWQgb3ZlciB0aGUgc3VnZ2VzdGlvbidzIGNhbm9uaWNhbCBkaWN0aW9uYXJ5IGNhc2luZ1xuICAgIC8vIChlLmcuIEZyZW5jaCBcImRlbWFpblwiIHZzIHRoZSBkaWN0aW9uYXJ5J3MgXCJEZW1haW5cIikgLS0gYnV0IG9ubHkgd2hlblxuICAgIC8vIHRoZXkgdHlwZWQgdGhlIGNvbXBsZXRlIHdvcmQvcGhyYXNlLCBqdXN0IGluIGEgZGlmZmVyZW50IGNhc2luZzsgYVxuICAgIC8vIHBhcnRpYWwgcXVlcnkgKFwiZGVtYWlcIikgd291bGQgbWFrZSBmb3IgYSBicm9rZW4tbG9va2luZyBhbGlhcywgc29cbiAgICAvLyBmYWxsIGJhY2sgdG8gdGhlIGZ1bGwgc3VnZ2VzdGlvbiB0ZXh0IGluIHRoYXQgY2FzZS4gTGFuZ3VhZ2UtYWdub3N0aWM6XG4gICAgLy8gdGhpcyBvbmx5IGNvbXBhcmVzIHRoZSB0eXBlZCB0ZXh0IHRvIHRoZSBzdWdnZXN0aW9uIHRleHQuXG4gICAgY29uc3QgdHlwZWRRdWVyeSA9IHRoaXMuY29udGV4dD8ucXVlcnk7XG4gICAgY29uc3QgYWxpYXNUZXh0ID0gKHR5cGVkUXVlcnkgJiYgdHlwZWRRdWVyeS50b0xvd2VyQ2FzZSgpID09PSBzdWdnZXN0aW9uLnRvTG93ZXJDYXNlKCkpXG4gICAgICA/IHR5cGVkUXVlcnlcbiAgICAgIDogc3VnZ2VzdGlvbjtcbiAgICBsZXQgZGF0ZVN0ciA9IFwiXCI7XG4gICAgbGV0IG1ha2VJbnRvTGluayA9IHRoaXMucGx1Z2luLnNldHRpbmdzLmF1dG9zdWdnZXN0VG9nZ2xlTGluaztcblxuICAgIC8vIFdlIGNoZWNrIGlmIHRoZSBpbnB1dCBjb250YWlucyBhIHRpbWUgY29tcG9uZW50IHVzaW5nIHRoZSBwYXJzZXIgbG9naWMuXG4gICAgbGV0IGhhc1RpbWUgPSB0aGlzLnBsdWdpbi5oYXNUaW1lQ29tcG9uZW50KHN1Z2dlc3Rpb24pO1xuXG4gICAgLy8gLS0tIENPUlJFQ1RJT04gTVVMVElMQU5HVUUgLS0tXG4gICAgLy8gU2kgbGUgcGFyc2VyIG4nYSBwYXMgZMOpdGVjdMOpIGwnaGV1cmUgKHNvdXZlbnQgbGUgY2FzIGVuIGFuZ2xhaXMgcG91ciBcImluIDIgbWludXRlc1wiKSxcbiAgICAvLyBvbiBmb3JjZSBsYSBkw6l0ZWN0aW9uIHNpIG9uIHZvaXQgZGVzIG1vdHMgY2zDqXMgZXhwbGljaXRlcyAobWluLCBob3VyLCBldGMpLlxuICAgIC8vIElNUE9SVEFOVDogTmUgcGFzIG1hdGNoZXIgXCJtXCIgZGFucyBcIm1vbnRoXCIgLSB2w6lyaWZpZXIgcXVlIGMnZXN0IGJpZW4gdW4gbW90IGRlIHRlbXBzXG4gICAgaWYgKCFoYXNUaW1lKSB7XG4gICAgICAvLyBSZWdleCBwb3VyIGTDqXRlY3RlciB1biBjaGlmZnJlIHN1aXZpIGRlIG1pbi9ob3VyL2hldXJlL2ggKG1haXMgcGFzIFwibVwiIHNldWwgcXVpIHBvdXJyYWl0IMOqdHJlIFwibW9udGhcIilcbiAgICAgIC8vIE9uIHbDqXJpZmllIHF1ZSBcIm1cIiBlc3Qgc3VpdmkgZGUgXCJpblwiLCBcImluc1wiLCBvdSBlc3QgZW4gZmluIGRlIG1vdCwgZXQgcGFzIFwib250aFwiIChtb250aClcbiAgICAgIGNvbnN0IGV4cGxpY2l0VGltZVJlZ2V4ID0gL1xcZCtcXHMqKG1pbnxtaW5zfG1pbnV0ZXxtaW51dGVzfGh8aG91cnxob3Vyc3xoZXVyZXxoZXVyZXN8c2VjfHNlY29uZHxzZWNvbmRzKSg/IVthLXpdKS9pO1xuICAgICAgaWYgKHN1Z2dlc3Rpb24ubWF0Y2goZXhwbGljaXRUaW1lUmVnZXgpKSB7XG4gICAgICAgIGhhc1RpbWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbklzVGltZShzdWdnZXN0aW9uKSkge1xuICAgICAgY29uc3QgdGltZVBhcnQgPSBzdWdnZXN0aW9uLnN1YnN0cmluZyh0aGlzLmdldFRpbWVQcmVmaXhMZW5ndGgoc3VnZ2VzdGlvbikpO1xuICAgICAgZGF0ZVN0ciA9IHRoaXMucGx1Z2luLnBhcnNlVGltZSh0aW1lUGFydCkuZm9ybWF0dGVkU3RyaW5nO1xuICAgICAgbWFrZUludG9MaW5rID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFbDqXJpZmllciBkJ2Fib3JkIHNpIGMnZXN0IHVuZSBwbGFnZSBkZSBkYXRlc1xuICAgICAgY29uc3QgZGF0ZVJhbmdlID0gdGhpcy5wbHVnaW4ucGFyc2VEYXRlUmFuZ2Uoc3VnZ2VzdGlvbik7XG4gICAgICBcbiAgICAgIGlmIChkYXRlUmFuZ2UpIHtcbiAgICAgICAgLy8gQydlc3QgdW5lIHBsYWdlIGRlIGRhdGVzXG4gICAgICAgIC8vIFNpIG9uIGEgdW5lIGxpc3RlIGRlIGRhdGVzLCBnw6luw6lyZXIgdW5lIGxpc3RlIGRlIGxpZW5zIGF1IGxpZXUgZCd1bmUgcGxhZ2VcbiAgICAgICAgaWYgKGRhdGVSYW5nZS5kYXRlTGlzdCAmJiBkYXRlUmFuZ2UuZGF0ZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGRhdGVMaW5rcyA9IGRhdGVSYW5nZS5kYXRlTGlzdC5tYXAobSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBtLmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgICAgcmV0dXJuIG1ha2VJbnRvTGluayBcbiAgICAgICAgICAgICAgPyBnZW5lcmF0ZU1hcmtkb3duTGluayh0aGlzLmFwcCwgZm9ybWF0dGVkKVxuICAgICAgICAgICAgICA6IGZvcm1hdHRlZDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkYXRlU3RyID0gZGF0ZUxpbmtzLmpvaW4oJywgJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRmFsbGJhY2sgdmVycyBsJ2FuY2llbiBjb21wb3J0ZW1lbnQgKHBsYWdlKVxuICAgICAgICAgIGNvbnN0IHN0YXJ0Rm9ybWF0dGVkID0gZGF0ZVJhbmdlLnN0YXJ0TW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgIGNvbnN0IGVuZEZvcm1hdHRlZCA9IGRhdGVSYW5nZS5lbmRNb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gT2J0ZW5pciBsYSB0cmFkdWN0aW9uIGRlIFwidG9cIiBzZWxvbiBsYSBsYW5ndWUgcHJpbmNpcGFsZVxuICAgICAgICAgIGNvbnN0IHByaW1hcnlMYW5nID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzWzBdIHx8ICdlbic7XG4gICAgICAgICAgY29uc3QgdG9UcmFuc2xhdGlvbiA9IHQoXCJ0b1wiLCBwcmltYXJ5TGFuZykuc3BsaXQoJ3wnKVswXTsgLy8gUHJlbmRyZSBsYSBwcmVtacOocmUgdmFyaWFudGVcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAobWFrZUludG9MaW5rKSB7XG4gICAgICAgICAgICBkYXRlU3RyID0gZ2VuZXJhdGVNYXJrZG93bkxpbmsoXG4gICAgICAgICAgICAgIHRoaXMuYXBwLFxuICAgICAgICAgICAgICBzdGFydEZvcm1hdHRlZCxcbiAgICAgICAgICAgICAgaW5jbHVkZUFsaWFzID8gYWxpYXNUZXh0IDogdW5kZWZpbmVkXG4gICAgICAgICAgICApICsgYCAke3RvVHJhbnNsYXRpb259IGAgKyBnZW5lcmF0ZU1hcmtkb3duTGluayhcbiAgICAgICAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgICAgICAgIGVuZEZvcm1hdHRlZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZVN0ciA9IGAke3N0YXJ0Rm9ybWF0dGVkfSAke3RvVHJhbnNsYXRpb259ICR7ZW5kRm9ybWF0dGVkfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG1ha2VJbnRvTGluayA9IGZhbHNlOyAvLyBEw6lqw6AgZ8OpcsOpIGNpLWRlc3N1c1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGFyc2VkUmVzdWx0ID0gdGhpcy5wbHVnaW4ucGFyc2VEYXRlKHN1Z2dlc3Rpb24pO1xuXG4gICAgICAgIC8vIC0tLSBPUFRJTUlTQVRJT04gOiBPbWV0dHJlIGxhIGRhdGUgcG91ciBleHByZXNzaW9ucyByZWxhdGl2ZXMgY291cnRlcyBhdWpvdXJkJ2h1aSAtLS1cbiAgICAgICAgY29uc3QgaXNUb2RheSA9IHBhcnNlZFJlc3VsdC5tb21lbnQuaXNTYW1lKG1vbWVudCgpLCAnZGF5Jyk7XG4gICAgICAgIGNvbnN0IGlzUmVsYXRpdmVTaG9ydFRlcm0gPSBzaG91bGRPbWl0RGF0ZUZvclNob3J0UmVsYXRpdmUoc3VnZ2VzdGlvbiwgdGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzKTtcbiAgICAgICAgY29uc3Qgc2hvdWxkT21pdERhdGUgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5vbWl0RGF0ZUZvclNob3J0UmVsYXRpdmUgJiYgaXNUb2RheSAmJiBpc1JlbGF0aXZlU2hvcnRUZXJtICYmIGhhc1RpbWU7XG5cbiAgICAgICAgLy8gLS0tIEhZQlJJRCBMSU5LIExPR0lDIFNUQVJUIC0tLVxuICAgICAgICAvLyBJZiBhIHRpbWUgaXMgZGV0ZWN0ZWQgQU5EIGxpbmtpbmcgaXMgZW5hYmxlZCwgd2Ugc3BsaXQgdGhlIGxpbmsuXG4gICAgICAgIC8vIEV4cGVjdGVkIHJlc3VsdDogW1tZWVlZLU1NLUREXV0gSEg6bW1cbiAgICAgICAgaWYgKGhhc1RpbWUgJiYgbWFrZUludG9MaW5rKSB7XG4gICAgICAgICAgaWYgKHNob3VsZE9taXREYXRlKSB7XG4gICAgICAgICAgICAvLyBDQVMgT1BUSU1JU8OJIDogSnVzdGUgbCdoZXVyZSBwb3VyIFwiZGFucyBYIG1pbi9oZXVyZXNcIiBhdWpvdXJkJ2h1aVxuICAgICAgICAgICAgY29uc3QgdGltZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBkYXRlU3RyID0gdGltZVBhcnQ7XG4gICAgICAgICAgICBtYWtlSW50b0xpbmsgPSBmYWxzZTsgLy8gUGFzIGRlIGxpZW4gbsOpY2Vzc2FpcmVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gMS4gRm9ybWF0IHRoZSBkYXRlIHBhcnRcbiAgICAgICAgICAgIGNvbnN0IGRhdGVQYXJ0ID0gcGFyc2VkUmVzdWx0Lm1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gMi4gRm9ybWF0IHRoZSB0aW1lIHBhcnQgKGZhbGxiYWNrIHRvIEhIOm1tIGlmIG5vdCBzZXQpXG4gICAgICAgICAgICBjb25zdCB0aW1lUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQgfHwgXCJISDptbVwiKTtcblxuICAgICAgICAgICAgLy8gMy4gR2VuZXJhdGUgdGhlIG1hcmtkb3duIGxpbmsgT05MWSBmb3IgdGhlIGRhdGUgcGFydFxuICAgICAgICAgICAgZGF0ZVN0ciA9IGdlbmVyYXRlTWFya2Rvd25MaW5rKFxuICAgICAgICAgICAgICB0aGlzLmFwcCxcbiAgICAgICAgICAgICAgZGF0ZVBhcnQsXG4gICAgICAgICAgICAgIGluY2x1ZGVBbGlhcyA/IGFsaWFzVGV4dCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgKSArIFwiIFwiICsgdGltZVBhcnQ7IC8vIEFwcGVuZCB0aW1lIGFzIHBsYWluIHRleHRcblxuICAgICAgICAgICAgLy8gNC4gRGlzYWJsZSBzdGFuZGFyZCBsaW5raW5nIHNpbmNlIHdlIGNvbnN0cnVjdGVkIGl0IG1hbnVhbGx5IGFib3ZlXG4gICAgICAgICAgICBtYWtlSW50b0xpbmsgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaGFzVGltZSAmJiAhbWFrZUludG9MaW5rKSB7XG4gICAgICAgICAgLy8gTcOqbWUgbG9naXF1ZSBzaSBwYXMgZGUgbGllbiBtYWlzIGF2ZWMgaGV1cmVcbiAgICAgICAgICBpZiAoc2hvdWxkT21pdERhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gcGFyc2VkUmVzdWx0Lm1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZUZvcm1hdCB8fCBcIkhIOm1tXCIpO1xuICAgICAgICAgICAgZGF0ZVN0ciA9IHRpbWVQYXJ0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgICAgICBjb25zdCB0aW1lUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQgfHwgXCJISDptbVwiKTtcbiAgICAgICAgICAgIGRhdGVTdHIgPSBgJHtkYXRlUGFydH0gJHt0aW1lUGFydH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTdGFuZGFyZCBiZWhhdmlvciBmb3IgZGF0ZXMgd2l0aG91dCB0aW1lIChlLmcuLCBAdG9tb3Jyb3cpXG4gICAgICAgICAgZGF0ZVN0ciA9IHBhcnNlZFJlc3VsdC5mb3JtYXR0ZWRTdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gLS0tIEhZQlJJRCBMSU5LIExPR0lDIEVORCAtLS1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWFrZUludG9MaW5rKSB7XG4gICAgICBkYXRlU3RyID0gZ2VuZXJhdGVNYXJrZG93bkxpbmsoXG4gICAgICAgIHRoaXMuYXBwLFxuICAgICAgICBkYXRlU3RyLFxuICAgICAgICBpbmNsdWRlQWxpYXMgPyBhbGlhc1RleHQgOiB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRGF0ZVN1Z2dlc3Q6IGNvbnRleHQgaXMgdW5kZWZpbmVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGVkaXRvci5yZXBsYWNlUmFuZ2UoZGF0ZVN0ciwgdGhpcy5jb250ZXh0LnN0YXJ0LCB0aGlzLmNvbnRleHQuZW5kKTtcblxuICAgIC8vIEVucmVnaXN0cmVyIGxhIHPDqWxlY3Rpb24gZGFucyBsJ2hpc3RvcmlxdWUgKGRlIG1hbmnDqHJlIGFzeW5jaHJvbmUpXG4gICAgaWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZVNtYXJ0U3VnZ2VzdGlvbnMgJiYgXG4gICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUhpc3RvcnlTdWdnZXN0aW9ucyAmJiBcbiAgICAgICAgdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIpIHtcbiAgICAgIHRoaXMucGx1Z2luLmhpc3RvcnlNYW5hZ2VyLnJlY29yZFNlbGVjdGlvbihzdWdnZXN0aW9uKS5jYXRjaChfZXJyID0+IHtcbiAgICAgICAgLy8gSWdub3JlciBsZXMgZXJyZXVycyBzaWxlbmNpZXVzZW1lbnRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uVHJpZ2dlcihcbiAgICBjdXJzb3I6IEVkaXRvclBvc2l0aW9uLFxuICAgIGVkaXRvcjogRWRpdG9yLFxuICAgIF9maWxlOiBURmlsZVxuICApOiBFZGl0b3JTdWdnZXN0VHJpZ2dlckluZm8ge1xuICAgIGlmICghdGhpcy5wbHVnaW4uc2V0dGluZ3MuaXNBdXRvc3VnZ2VzdEVuYWJsZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWdnZXJQaHJhc2UgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvY29tcGxldGVUcmlnZ2VyUGhyYXNlO1xuICAgIGNvbnN0IHN0YXJ0UG9zID0gdGhpcy5jb250ZXh0Py5zdGFydCB8fCB7XG4gICAgICBsaW5lOiBjdXJzb3IubGluZSxcbiAgICAgIGNoOiBjdXJzb3IuY2ggLSB0cmlnZ2VyUGhyYXNlLmxlbmd0aCxcbiAgICB9O1xuXG4gICAgY29uc3QgcXVlcnkgPSBlZGl0b3IuZ2V0UmFuZ2Uoc3RhcnRQb3MsIGN1cnNvcik7XG5cbiAgICBpZiAoIXF1ZXJ5LnN0YXJ0c1dpdGgodHJpZ2dlclBocmFzZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHByZWNlZGluZ0NoYXIgPSBlZGl0b3IuZ2V0UmFuZ2UoXG4gICAgICB7XG4gICAgICAgIGxpbmU6IHN0YXJ0UG9zLmxpbmUsXG4gICAgICAgIGNoOiBzdGFydFBvcy5jaCAtIDEsXG4gICAgICB9LFxuICAgICAgc3RhcnRQb3NcbiAgICApO1xuXG4gICAgLy8gU2hvcnQtY2lyY3VpdCBpZiBgQGAgYXMgYSBwYXJ0IG9mIGEgd29yZCAoZS5nLiBwYXJ0IG9mIGFuIGVtYWlsIGFkZHJlc3MpXG4gICAgaWYgKHByZWNlZGluZ0NoYXIgJiYgL1tgYS16QS1aMC05XS8udGVzdChwcmVjZWRpbmdDaGFyKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBzdGFydFBvcyxcbiAgICAgIGVuZDogY3Vyc29yLFxuICAgICAgcXVlcnk6IGVkaXRvci5nZXRSYW5nZShzdGFydFBvcywgY3Vyc29yKS5zdWJzdHJpbmcodHJpZ2dlclBocmFzZS5sZW5ndGgpLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgc3VnZ2VzdGlvbklzVGltZShzdWdnZXN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzLnNvbWUobGFuZyA9PiB7XG4gICAgICBjb25zdCB0aW1lV29yZCA9IHQoXCJ0aW1lXCIsIGxhbmcpLnNwbGl0KCd8JylbMF07XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbi5zdGFydHNXaXRoKGAke3RpbWVXb3JkfTpgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIExlbmd0aCBvZiB0aGUgXCI8VGltZVdvcmQ+OlwiIHByZWZpeCB0aGF0IGdldFRpbWVTdWdnZXN0aW9ucygpIGJ1aWxkcyBpdHNcbiAgLy8gc3VnZ2VzdGlvbnMgd2l0aCwgc28gY2FsbGVycyBjYW4gc3RyaXAgZXhhY3RseSB0aGF0IG1hbnkgY2hhcmFjdGVyc1xuICAvLyBpbnN0ZWFkIG9mIGEgaGFyZGNvZGVkIGxlbmd0aCAtLSBcIlRpbWU6XCIgaXMgNSBjaGFycyBvbmx5IGluIEVuZ2xpc2ggYW5kXG4gIC8vIGEgZmV3IG90aGVycyBieSBjb2luY2lkZW5jZSAoZS5nLiBGcmVuY2ggXCJoZXVyZTpcIiBpcyA2LCBJdGFsaWFuIFwib3JhOlwiXG4gIC8vIGlzIDQsIENoaW5lc2UgXCLmmYLplpM6XCIgaXMgMyBVVEYtMTYgY29kZSB1bml0cykuXG4gIHByb3RlY3RlZCBnZXRUaW1lUHJlZml4TGVuZ3RoKHN1Z2dlc3Rpb246IHN0cmluZyk6IG51bWJlciB7XG4gICAgZm9yIChjb25zdCBsYW5nIG9mIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgdGltZVdvcmQgPSB0KFwidGltZVwiLCBsYW5nKS5zcGxpdCgnfCcpWzBdO1xuICAgICAgY29uc3QgcHJlZml4ID0gYCR7dGltZVdvcmR9OmA7XG4gICAgICBpZiAoc3VnZ2VzdGlvbi5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgICAgcmV0dXJuIHByZWZpeC5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVuaXF1ZShzdWdnZXN0aW9uczogc3RyaW5nW10pIDogc3RyaW5nW10ge1xuICAgIHJldHVybiBzdWdnZXN0aW9ucy5maWx0ZXIoZnVuY3Rpb24oaXRlbSwgcG9zKSB7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnMuaW5kZXhPZihpdGVtKSA9PSBwb3M7XG4gICAgfSlcbiAgfVxufSIsImltcG9ydCB7IGFkanVzdEN1cnNvciwgZ2V0U2VsZWN0ZWRUZXh0LCBzaG91bGRPbWl0RGF0ZUZvclNob3J0UmVsYXRpdmUsIGdldEFjdGl2ZUVkaXRvciB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgTmF0dXJhbExhbmd1YWdlRGF0ZXMgZnJvbSBcIi4vbWFpblwiO1xuaW1wb3J0IHQgZnJvbSBcIi4vbGFuZy9oZWxwZXJcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIi4vd2luZG93LW1vbWVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyc2VDb21tYW5kKHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMsIG1vZGU6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCB7IHdvcmtzcGFjZSB9ID0gcGx1Z2luLmFwcDtcbiAgY29uc3QgZWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKHdvcmtzcGFjZSk7XG5cbiAgLy8gTCfDqWRpdGV1ciBwb3VycmFpdCBuZSBwYXMgw6p0cmUgZGlzcG9uaWJsZSAocGFyIGV4ZW1wbGUgZGFucyB1bmUgdnVlIG5vbi1tYXJrZG93bilcbiAgaWYgKCFlZGl0b3IpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gZ2V0U2VsZWN0ZWRUZXh0KGVkaXRvcik7XG4gIC8vIENhcHR1cmVkIGFmdGVyIGdldFNlbGVjdGVkVGV4dCgpOiB3aGVuIG5vdGhpbmcgd2FzIHNlbGVjdGVkLCB0aGF0IGNhbGxcbiAgLy8gZXhwYW5kcyB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3b3JkIGF0IHRoZSBjdXJzb3IsIHdoaWNoIG1vdmVzIHdoZXJlIHRoZVxuICAvLyBzZWxlY3Rpb24gYWN0dWFsbHkgZW5kcy4gQ2FwdHVyaW5nIHRoZSBjdXJzb3IgYmVmb3JlaGFuZCB3b3VsZCBhbmNob3JcbiAgLy8gYWRqdXN0Q3Vyc29yKCkncyBvZmZzZXQgbWF0aCB0byB0aGUgcHJlLWV4cGFuc2lvbiBwb3NpdGlvbiBpbnN0ZWFkIG9mXG4gIC8vIHRoZSBlZGdlIG9mIHRoZSB0ZXh0IHRoYXQncyBhYm91dCB0byBiZSByZXBsYWNlZC5cbiAgY29uc3QgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvcihcInRvXCIpO1xuXG4gIC8vIFbDqXJpZmllciBkJ2Fib3JkIHNpIGMnZXN0IHVuZSBwbGFnZSBkZSBkYXRlcy4gQSBcIm5leHQgd2Vla1wiLXN0eWxlIHBlcmlvZFxuICAvLyByZWZlcmVuY2UgKGRhdGVSYW5nZS5ncmFudWxhcml0eSA9PT0gXCJ3ZWVrXCIpIGlzIHNraXBwZWQgaGVyZSB3aGVuIGEgd2Vla1xuICAvLyBwZXJpb2RpYy1ub3RlIGZvcm1hdCBpcyBjb25maWd1cmVkIC0tIGl0IGZhbGxzIHRocm91Z2ggdG8gcGx1Z2luLnBhcnNlRGF0ZSgpXG4gIC8vIGJlbG93IGluc3RlYWQsIHdoaWNoIHJlc29sdmVzIGl0IHRvIGEgc2luZ2xlIHdlZWstZm9ybWF0IHZhbHVlIChlLmcuXG4gIC8vIFwiMjAyNi1XMDNcIikgcmF0aGVyIHRoYW4gYSA3LWRheSBsaW5rIGxpc3QuIEFuIGV4cGxpY2l0IHdlZWtkYXktdG8td2Vla2RheVxuICAvLyByYW5nZSAoZS5nLiBcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiLCBubyBncmFudWxhcml0eSB0YWcpIGFsd2F5cyBrZWVwcyB0aGVcbiAgLy8gbGlzdCBiZWhhdmlvciByZWdhcmRsZXNzIG9mIHRoYXQgc2V0dGluZy5cbiAgY29uc3QgZGF0ZVJhbmdlID0gcGx1Z2luLnBhcnNlRGF0ZVJhbmdlKHNlbGVjdGVkVGV4dCk7XG4gIGlmIChkYXRlUmFuZ2UgJiYgIShkYXRlUmFuZ2UuZ3JhbnVsYXJpdHkgPT09IFwid2Vla1wiICYmIHBsdWdpbi5zZXR0aW5ncy53ZWVrRm9ybWF0KSkge1xuICAgIC8vIEMnZXN0IHVuZSBwbGFnZSBkZSBkYXRlc1xuICAgIGxldCBuZXdTdHIgPSBcIlwiO1xuICAgIFxuICAgIC8vIFNpIG9uIGEgdW5lIGxpc3RlIGRlIGRhdGVzLCBnw6luw6lyZXIgdW5lIGxpc3RlIGRlIGxpZW5zIGF1IGxpZXUgZCd1bmUgcGxhZ2VcbiAgICBpZiAoZGF0ZVJhbmdlLmRhdGVMaXN0ICYmIGRhdGVSYW5nZS5kYXRlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBkYXRlTGlua3MgPSBkYXRlUmFuZ2UuZGF0ZUxpc3QubWFwKG0gPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBtLmZvcm1hdChwbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgaWYgKG1vZGUgPT0gXCJyZXBsYWNlXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFtbJHtmb3JtYXR0ZWR9XV1gO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gXCJsaW5rXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFske2Zvcm1hdHRlZH1dKCR7Zm9ybWF0dGVkfSlgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFwiY2xlYW5cIiBhbmQgXCJ0aW1lXCIgYm90aCByZXNvbHZlIHRvIHRoZSBwbGFpbiBmb3JtYXR0ZWQgZGF0ZSBoZXJlOlxuICAgICAgICAgIC8vIGVhY2ggZGF0ZUxpc3QgZW50cnkgaXMgYSB3aG9sZSBjYWxlbmRhciBkYXkgd2l0aCBubyBwYXJzZWQgdGltZVxuICAgICAgICAgIC8vIGNvbXBvbmVudCwgc28gXCJ0aW1lXCIgZm9yIGEgcmFuZ2UgbWVhbnMgdGhlIHNhbWUgYXMgXCJjbGVhblwiIChzZWVcbiAgICAgICAgICAvLyB0aGUgaWRlbnRpY2FsIG1vZGUgPT0gXCJ0aW1lXCIgY2FzZSBpbiB0aGUgbm9uLWxpc3QgYnJhbmNoIGJlbG93KS5cbiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG5ld1N0ciA9IGRhdGVMaW5rcy5qb2luKCcsICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjayB2ZXJzIGwnYW5jaWVuIGNvbXBvcnRlbWVudCAocGxhZ2UpXG4gICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IGRhdGVSYW5nZS5zdGFydE1vbWVudC5mb3JtYXQocGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICBjb25zdCBlbmRGb3JtYXR0ZWQgPSBkYXRlUmFuZ2UuZW5kTW9tZW50LmZvcm1hdChwbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgIFxuICAgICAgLy8gT2J0ZW5pciBsYSB0cmFkdWN0aW9uIGRlIFwidG9cIiBzZWxvbiBsYSBsYW5ndWUgcHJpbmNpcGFsZVxuICAgICAgY29uc3QgcHJpbWFyeUxhbmcgPSBwbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzWzBdIHx8ICdlbic7XG4gICAgICBjb25zdCB0b1RyYW5zbGF0aW9uID0gdChcInRvXCIsIHByaW1hcnlMYW5nKS5zcGxpdCgnfCcpWzBdOyAvLyBQcmVuZHJlIGxhIHByZW1pw6hyZSB2YXJpYW50ZVxuICAgICAgXG4gICAgICBpZiAobW9kZSA9PSBcInJlcGxhY2VcIikge1xuICAgICAgICAvLyBHw6luw6lyZXIgZGVzIGxpZW5zIHBvdXIgbGEgcGxhZ2UgOiBbW3N0YXJ0XV0gdG8gW1tlbmRdXVxuICAgICAgICBuZXdTdHIgPSBgW1ske3N0YXJ0Rm9ybWF0dGVkfV1dICR7dG9UcmFuc2xhdGlvbn0gW1ske2VuZEZvcm1hdHRlZH1dXWA7XG4gICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gXCJsaW5rXCIpIHtcbiAgICAgICAgLy8gTGllbiBNYXJrZG93biBzdGFuZGFyZFxuICAgICAgICBuZXdTdHIgPSBgWyR7c2VsZWN0ZWRUZXh0fV0oJHtkYXRlUmFuZ2UuZm9ybWF0dGVkU3RyaW5nfSlgO1xuICAgICAgfSBlbHNlIGlmIChtb2RlID09IFwiY2xlYW5cIikge1xuICAgICAgICAvLyBUZXh0ZSBicnV0IHNhbnMgbGllblxuICAgICAgICBuZXdTdHIgPSBgJHtzdGFydEZvcm1hdHRlZH0gJHt0b1RyYW5zbGF0aW9ufSAke2VuZEZvcm1hdHRlZH1gO1xuICAgICAgfSBlbHNlIGlmIChtb2RlID09IFwidGltZVwiKSB7XG4gICAgICAgIC8vIFBhcyBkJ2hldXJlIHBvdXIgbGVzIHBsYWdlc1xuICAgICAgICBuZXdTdHIgPSBgJHtzdGFydEZvcm1hdHRlZH0gJHt0b1RyYW5zbGF0aW9ufSAke2VuZEZvcm1hdHRlZH1gO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihuZXdTdHIpO1xuICAgIGFkanVzdEN1cnNvcihlZGl0b3IsIGN1cnNvciwgbmV3U3RyLCBzZWxlY3RlZFRleHQpO1xuICAgIGVkaXRvci5mb2N1cygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNpbm9uLCB0cmFpdGVyIGNvbW1lIHVuZSBkYXRlIG5vcm1hbGVcbiAgY29uc3QgZGF0ZSA9IHBsdWdpbi5wYXJzZURhdGUoc2VsZWN0ZWRUZXh0KTtcblxuICBpZiAoIWRhdGUubW9tZW50LmlzVmFsaWQoKSkge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgICBlZGl0b3Iuc2V0Q3Vyc29yKHtcbiAgICAgIGxpbmU6IGN1cnNvci5saW5lLFxuICAgICAgY2g6IGN1cnNvci5jaCxcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyAtLS0gTU9ESUZJQ0FUSU9OIElOVEVMTElHRU5URSBWMC45IC0tLVxuICAvLyBPbiB2w6lyaWZpZSBzaSB1bmUgaGV1cmUgZXN0IHByw6lzZW50ZSBkYW5zIGxlIHRleHRlIHPDqWxlY3Rpb25uw6lcbiAgY29uc3QgaGFzVGltZSA9IHBsdWdpbi5oYXNUaW1lQ29tcG9uZW50KHNlbGVjdGVkVGV4dCk7XG5cbiAgLy8gLS0tIE9QVElNSVNBVElPTiA6IE9tZXR0cmUgbGEgZGF0ZSBwb3VyIGV4cHJlc3Npb25zIHJlbGF0aXZlcyBjb3VydGVzIGF1am91cmQnaHVpIC0tLVxuICBjb25zdCBpc1RvZGF5ID0gZGF0ZS5tb21lbnQuaXNTYW1lKG1vbWVudCgpLCAnZGF5Jyk7XG4gIGNvbnN0IGlzUmVsYXRpdmVTaG9ydFRlcm0gPSBzaG91bGRPbWl0RGF0ZUZvclNob3J0UmVsYXRpdmUoc2VsZWN0ZWRUZXh0LCBwbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzKTtcbiAgY29uc3Qgc2hvdWxkT21pdERhdGUgPSBwbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlICYmIGlzVG9kYXkgJiYgaXNSZWxhdGl2ZVNob3J0VGVybSAmJiBoYXNUaW1lO1xuXG4gIGxldCBuZXdTdHIgPSBcIlwiO1xuXG4gIGlmIChtb2RlID09IFwicmVwbGFjZVwiKSB7XG4gICAgLy8gQydlc3QgbGUgbW9kZSBwYXIgZMOpZmF1dCAoQ3JlYXRlIExpbmspXG4gICAgaWYgKGhhc1RpbWUpIHtcbiAgICAgICAgaWYgKHNob3VsZE9taXREYXRlKSB7XG4gICAgICAgICAgICAvLyBDQVMgT1BUSU1JU8OJIDogSnVzdGUgbCdoZXVyZSBwb3VyIFwiZGFucyBYIG1pbi9oZXVyZXNcIiBhdWpvdXJkJ2h1aVxuICAgICAgICAgICAgY29uc3QgdGltZVBhcnQgPSBkYXRlLm1vbWVudC5mb3JtYXQocGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQgfHwgXCJISDptbVwiKTtcbiAgICAgICAgICAgIG5ld1N0ciA9IHRpbWVQYXJ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ0FTIEhZQlJJREUgOiBbW0RhdGVdXSBIZXVyZVxuICAgICAgICAgICAgY29uc3QgZGF0ZVBhcnQgPSBkYXRlLm1vbWVudC5mb3JtYXQocGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgICAgICAvLyBTaSBsJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgbWlzIGRlIGZvcm1hdCBkJ2hldXJlLCBvbiBmb3JjZSBISDptbSBwYXIgc8OpY3VyaXTDqVxuICAgICAgICAgICAgY29uc3QgdGltZVBhcnQgPSBkYXRlLm1vbWVudC5mb3JtYXQocGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQgfHwgXCJISDptbVwiKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbmV3U3RyID0gYFtbJHtkYXRlUGFydH1dXSAke3RpbWVQYXJ0fWA7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDQVMgQ0xBU1NJUVVFIDogW1tEYXRlXV1cbiAgICAgICAgbmV3U3RyID0gYFtbJHtkYXRlLmZvcm1hdHRlZFN0cmluZ31dXWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKG1vZGUgPT0gXCJsaW5rXCIpIHtcbiAgICAvLyBMaWVuIE1hcmtkb3duIHN0YW5kYXJkIFt0ZXh0ZV0oZGF0ZSlcbiAgICBuZXdTdHIgPSBgWyR7c2VsZWN0ZWRUZXh0fV0oJHtkYXRlLmZvcm1hdHRlZFN0cmluZ30pYDtcbiAgfSBlbHNlIGlmIChtb2RlID09IFwiY2xlYW5cIikge1xuICAgIC8vIFRleHRlIGJydXQgc2FucyBsaWVuXG4gICAgbmV3U3RyID0gYCR7ZGF0ZS5mb3JtYXR0ZWRTdHJpbmd9YDtcbiAgfSBlbHNlIGlmIChtb2RlID09IFwidGltZVwiKSB7XG4gICAgLy8gSnVzdGUgbCdoZXVyZVxuICAgIGNvbnN0IHRpbWUgPSBwbHVnaW4ucGFyc2VUaW1lKHNlbGVjdGVkVGV4dCk7XG4gICAgbmV3U3RyID0gYCR7dGltZS5mb3JtYXR0ZWRTdHJpbmd9YDtcbiAgfVxuXG4gIGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKG5ld1N0cik7XG4gIGFkanVzdEN1cnNvcihlZGl0b3IsIGN1cnNvciwgbmV3U3RyLCBzZWxlY3RlZFRleHQpO1xuICBlZGl0b3IuZm9jdXMoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydE1vbWVudENvbW1hbmQoXG4gIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMsXG4gIGRhdGU6IERhdGUsXG4gIGZvcm1hdDogc3RyaW5nXG4pIHtcbiAgY29uc3QgeyB3b3Jrc3BhY2UgfSA9IHBsdWdpbi5hcHA7XG4gIGNvbnN0IGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcih3b3Jrc3BhY2UpO1xuXG4gIGlmIChlZGl0b3IpIHtcbiAgICBlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihtb21lbnQoZGF0ZSkuZm9ybWF0KGZvcm1hdCkpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROb3dDb21tYW5kKHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpOiB2b2lkIHtcbiAgY29uc3QgZm9ybWF0ID0gYCR7cGx1Z2luLnNldHRpbmdzLmZvcm1hdH0ke3BsdWdpbi5zZXR0aW5ncy5zZXBhcmF0b3J9JHtwbHVnaW4uc2V0dGluZ3MudGltZUZvcm1hdH1gO1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgaW5zZXJ0TW9tZW50Q29tbWFuZChwbHVnaW4sIGRhdGUsIGZvcm1hdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50RGF0ZUNvbW1hbmQocGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcyk6IHZvaWQge1xuICBjb25zdCBmb3JtYXQgPSBwbHVnaW4uc2V0dGluZ3MuZm9ybWF0O1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgaW5zZXJ0TW9tZW50Q29tbWFuZChwbHVnaW4sIGRhdGUsIGZvcm1hdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50VGltZUNvbW1hbmQocGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcyk6IHZvaWQge1xuICBjb25zdCBmb3JtYXQgPSBwbHVnaW4uc2V0dGluZ3MudGltZUZvcm1hdDtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGluc2VydE1vbWVudENvbW1hbmQocGx1Z2luLCBkYXRlLCBmb3JtYXQpO1xufSIsImltcG9ydCB7IFBsdWdpbiwgbm9ybWFsaXplUGF0aCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2VyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUVudHJ5IHtcbiAgY291bnQ6IG51bWJlcjsgLy8gTm9tYnJlIGRlIGZvaXMgcXVlIGNldHRlIHN1Z2dlc3Rpb24gYSDDqXTDqSBzw6lsZWN0aW9ubsOpZVxuICBsYXN0VXNlZDogbnVtYmVyOyAvLyBEYXRlLm5vdygpIGRlIGxhIGRlcm5pw6hyZSBzw6lsZWN0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uSGlzdG9yeSB7XG4gIFtzdWdnZXN0aW9uOiBzdHJpbmddOiBIaXN0b3J5RW50cnk7XG59XG5cbmNvbnN0IE1BWF9ISVNUT1JZX1NJWkUgPSAxMDA7IC8vIExpbWl0ZSBkdSBub21icmUgZCdlbnRyw6llcyBkYW5zIGwnaGlzdG9yaXF1ZVxuY29uc3QgSElTVE9SWV9GSUxFID0gXCJwbHVnaW5zL25sZGF0ZXMtcmV2aXZlZC9oaXN0b3J5Lmpzb25cIjtcbmNvbnN0IENMRUFOVVBfSU5URVJWQUwgPSAzMDAwMDA7IC8vIE5ldHRveWFnZSBww6lyaW9kaXF1ZSB0b3V0ZXMgbGVzIDUgbWludXRlc1xuXG4vLyBBIHN1Z2dlc3Rpb24ncyByYW5rIGlzIGZyZXF1ZW5jeSB3ZWlnaHRlZCBieSByZWNlbmN5LCBub3QgcmF3IGxpZmV0aW1lXG4vLyBjb3VudDogd2l0aG91dCBkZWNheSwgc29tZXRoaW5nIHNlbGVjdGVkIDUwIHRpbWVzIHNpeCBtb250aHMgYWdvIHdvdWxkXG4vLyBwZXJtYW5lbnRseSBvdXRyYW5rIHNvbWV0aGluZyBzZWxlY3RlZCAzIHRpbWVzIHRoaXMgd2VlaywgZXZlbiB0aG91Z2hcbi8vIHRoZSBsYXR0ZXIgaXMgY2xlYXJseSBtb3JlIHJlbGV2YW50ICpub3cqLiBIYWx2aW5nIHRoZSB3ZWlnaHQgZXZlcnlcbi8vIEhBTEZfTElGRV9NUyBvZiBpbmFjdGl2aXR5IG1lYW5zIGV2ZXJ5IHJldXNlIFwicmVmcmVzaGVzXCIgYW4gZW50cnksIHdoaWxlXG4vLyBnZW51aW5lbHkgc3RhbGUgZW50cmllcyBmYWRlIG91dCBpbnN0ZWFkIG9mIGNhbXBpbmcgdGhlIHRvcCBvZiB0aGUgbGlzdFxuLy8gZm9yZXZlci5cbmNvbnN0IEhBTEZfTElGRV9NUyA9IDMwICogMjQgKiA2MCAqIDYwICogMTAwMDsgLy8gMzAgam91cnNcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGlzdG9yeU1hbmFnZXIge1xuICBwcml2YXRlIHBsdWdpbjogUGx1Z2luO1xuICBwcml2YXRlIGhpc3Rvcnk6IFNlbGVjdGlvbkhpc3RvcnkgPSB7fTtcbiAgcHJpdmF0ZSBoaXN0b3J5TG9hZGVkID0gZmFsc2U7XG4gIHByaXZhdGUgY2FjaGVkVG9wU3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgY2FjaGVWYWxpZCA9IGZhbHNlO1xuICBwcml2YXRlIGNsZWFudXBJbnRlcnZhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7IC8vIElEIGRlIGwnaW50ZXJ2YWxsZSBkZSBuZXR0b3lhZ2VcblxuICBjb25zdHJ1Y3RvcihwbHVnaW46IFBsdWdpbikge1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgIHRoaXMuc3RhcnRQZXJpb2RpY0NsZWFudXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEw6ltYXJyZSBsZSBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgZGUgbCdoaXN0b3JpcXVlXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0UGVyaW9kaWNDbGVhbnVwKCk6IHZvaWQge1xuICAgIC8vIE5ldHRveWVyIHRvdXRlcyBsZXMgNSBtaW51dGVzXG4gICAgdGhpcy5jbGVhbnVwSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5wZXJmb3JtUGVyaW9kaWNDbGVhbnVwKCk7XG4gICAgfSwgQ0xFQU5VUF9JTlRFUlZBTCk7XG4gIH1cblxuICAvKipcbiAgICogQXJyw6p0ZSBsZSBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgKMOgIGFwcGVsZXIgbG9ycyBkZSBsYSBkZXN0cnVjdGlvbilcbiAgICovXG4gIHN0b3BQZXJpb2RpY0NsZWFudXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xlYW51cEludGVydmFsICE9PSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmNsZWFudXBJbnRlcnZhbCk7XG4gICAgICB0aGlzLmNsZWFudXBJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVmZmVjdHVlIHVuIG5ldHRveWFnZSBww6lyaW9kaXF1ZSBkZSBsJ2hpc3RvcmlxdWVcbiAgICogUsOpZHVpdCBsYSB0YWlsbGUgc2kgbsOpY2Vzc2FpcmUgZXQgbmV0dG9pZSBsZXMgZW50csOpZXMgcGV1IHV0aWxpc8OpZXNcbiAgICovXG4gIHByaXZhdGUgcGVyZm9ybVBlcmlvZGljQ2xlYW51cCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGlzdG9yeUxvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRTaXplID0gT2JqZWN0LmtleXModGhpcy5oaXN0b3J5KS5sZW5ndGg7XG4gICAgXG4gICAgLy8gU2kgbCdoaXN0b3JpcXVlIGTDqXBhc3NlIGxhIGxpbWl0ZSwgbGUgcsOpZHVpcmVcbiAgICBpZiAoY3VycmVudFNpemUgPiBNQVhfSElTVE9SWV9TSVpFKSB7XG4gICAgICB0aGlzLnRyaW1IaXN0b3J5KCk7XG4gICAgICBsb2dnZXIuZGVidWcoYE5ldHRveWFnZSBww6lyaW9kaXF1ZSBkZSBsJ2hpc3RvcmlxdWU6IHLDqWR1aXQgZGUgJHtjdXJyZW50U2l6ZX0gw6AgJHtPYmplY3Qua2V5cyh0aGlzLmhpc3RvcnkpLmxlbmd0aH0gZW50csOpZXNgKTtcbiAgICB9XG5cbiAgICAvLyBNZXR0cmUgw6Agam91ciBsZSBjYWNoZSBkZXMgc3VnZ2VzdGlvbnNcbiAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydGl0IHVuIGhpc3RvcmlxdWUgY2hhcmfDqSBkZXB1aXMgbGUgZGlzcXVlIHZlcnMgbGUgZm9ybWF0IGFjdHVlbC5cbiAgICogTGVzIGZpY2hpZXJzIMOpY3JpdHMgcGFyIHVuZSB2ZXJzaW9uIGFudMOpcmlldXJlIGR1IHBsdWdpbiBzdG9ja2VudCB1blxuICAgKiBzaW1wbGUgY29tcHRldXIgKGB7IFtzdWdnZXN0aW9uXTogbnVtYmVyIH1gKSBhdSBsaWV1IGRlXG4gICAqIGB7IFtzdWdnZXN0aW9uXTogSGlzdG9yeUVudHJ5IH1gIC0tIG9uIGRvbm5lIMOgIGNlcyBlbnRyw6llcyB1blxuICAgKiBsYXN0VXNlZCBkZSBcIm1haW50ZW5hbnRcIiBwb3VyIG5lIHBhcyBsZXMgZmFpcmUgZGlzcGFyYcOudHJlXG4gICAqIGltbcOpZGlhdGVtZW50IGR1IGNsYXNzZW1lbnQgbGUgdGVtcHMgcXUndW4gbm91dmVsIHVzYWdlIGxlcyByYWZyYcOuY2hpc3NlLlxuICAgKi9cbiAgcHJpdmF0ZSBtaWdyYXRlSGlzdG9yeShyYXc6IHVua25vd24pOiBTZWxlY3Rpb25IaXN0b3J5IHtcbiAgICBjb25zdCBtaWdyYXRlZDogU2VsZWN0aW9uSGlzdG9yeSA9IHt9O1xuICAgIC8vIHR5cGVvZiBbXSA9PT0gXCJvYmplY3RcIiwgc28gYSB0b3AtbGV2ZWwgSlNPTiBhcnJheSAoY29ycnVwdGVkIGZpbGUsXG4gICAgLy8gc3RyYXkgbWFudWFsIGVkaXQpIHdvdWxkIG90aGVyd2lzZSBzYWlsIHRocm91Z2ggdGhlIGNhbGxlcidzXG4gICAgLy8gYHR5cGVvZiBwYXJzZWQgPT09IFwib2JqZWN0XCJgIGNoZWNrIGFuZCBnZXQgd2Fsa2VkIGhlcmU6IE9iamVjdC5lbnRyaWVzKClcbiAgICAvLyBvbiBhbiBhcnJheSB5aWVsZHMgbnVtZXJpYy1zdHJpbmcga2V5cyAoXCIwXCIsIFwiMVwiLCAuLi4pIHRoYXQgd291bGQgYmVcbiAgICAvLyBtaWdyYXRlZCBpbnRvIGJvZ3VzIGhpc3RvcnkgZW50cmllcy5cbiAgICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocmF3KSkge1xuICAgICAgcmV0dXJuIG1pZ3JhdGVkO1xuICAgIH1cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgbWlncmF0ZWRba2V5XSA9IHsgY291bnQ6IHZhbHVlLCBsYXN0VXNlZDogbm93IH07XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB2YWx1ZSAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgdHlwZW9mICh2YWx1ZSBhcyBIaXN0b3J5RW50cnkpLmNvdW50ID09PSBcIm51bWJlclwiICYmXG4gICAgICAgIHR5cGVvZiAodmFsdWUgYXMgSGlzdG9yeUVudHJ5KS5sYXN0VXNlZCA9PT0gXCJudW1iZXJcIlxuICAgICAgKSB7XG4gICAgICAgIC8vIENvcHkgb25seSB0aGUgdHdvIGV4cGVjdGVkIGZpZWxkcyByYXRoZXIgdGhhbiBrZWVwaW5nIHRoZSB3aG9sZVxuICAgICAgICAvLyBwYXJzZWQgb2JqZWN0IHJlZmVyZW5jZSwgc28gdW5leHBlY3RlZCBleHRyYSBwcm9wZXJ0aWVzIG9uIGFcbiAgICAgICAgLy8gbWFsZm9ybWVkIGVudHJ5IGFyZW4ndCBzaWxlbnRseSBjYXJyaWVkIGZvcndhcmQgYW5kIHJlLXBlcnNpc3RlZC5cbiAgICAgICAgbWlncmF0ZWRba2V5XSA9IHtcbiAgICAgICAgICBjb3VudDogKHZhbHVlIGFzIEhpc3RvcnlFbnRyeSkuY291bnQsXG4gICAgICAgICAgbGFzdFVzZWQ6ICh2YWx1ZSBhcyBIaXN0b3J5RW50cnkpLmxhc3RVc2VkLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgLy8gQW55dGhpbmcgZWxzZSAobWFsZm9ybWVkIGVudHJ5KSBpcyBzaWxlbnRseSBkcm9wcGVkIHJhdGhlciB0aGFuXG4gICAgICAvLyBjYXJyaWVkIGZvcndhcmQgLS0gYSBzaW5nbGUgYmFkIGVudHJ5IHNob3VsZG4ndCBwb2lzb24gdGhlIHJlc3QuXG4gICAgfVxuICAgIHJldHVybiBtaWdyYXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY29yZSBkJ3VuZSBlbnRyw6llIDogZnLDqXF1ZW5jZSBwb25kw6lyw6llIHBhciBsYSBmcmHDrmNoZXVyIGQndXRpbGlzYXRpb25cbiAgICogKHZvaXIgSEFMRl9MSUZFX01TKS4gVXRpbGlzw6kgcG91ciB0cmllci90cmltbWVyIGwnaGlzdG9yaXF1ZS5cbiAgICovXG4gIHByaXZhdGUgY29tcHV0ZVNjb3JlKGVudHJ5OiBIaXN0b3J5RW50cnksIG5vdzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBhZ2VNcyA9IE1hdGgubWF4KDAsIG5vdyAtIGVudHJ5Lmxhc3RVc2VkKTtcbiAgICBjb25zdCBkZWNheSA9IE1hdGgucG93KDAuNSwgYWdlTXMgLyBIQUxGX0xJRkVfTVMpO1xuICAgIHJldHVybiBlbnRyeS5jb3VudCAqIGRlY2F5O1xuICB9XG5cbiAgLyoqXG4gICAqIENoYXJnZSBsJ2hpc3RvcmlxdWUgZGVwdWlzIGxlIHN0b2NrYWdlXG4gICAqL1xuICBhc3luYyBsb2FkSGlzdG9yeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5oaXN0b3J5TG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZ0RpciA9IHRoaXMucGx1Z2luLmFwcC52YXVsdC5jb25maWdEaXI7XG4gICAgICBjb25zdCBwYXRoID0gbm9ybWFsaXplUGF0aChgJHtjb25maWdEaXJ9LyR7SElTVE9SWV9GSUxFfWApO1xuICAgICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5wbHVnaW4uYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKHBhdGgpO1xuICAgICAgaWYgKGV4aXN0cykge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5wbHVnaW4uYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChwYXRoKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQ6IHVua25vd24gPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgIGlmIChwYXJzZWQgJiYgdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5ID0gdGhpcy5taWdyYXRlSGlzdG9yeShwYXJzZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBUaGUgZXhpc3RzKCkvcmVhZCgpIGNhbGxzIGFib3ZlIGFscmVhZHkgaGFuZGxlIHRoZSBcImZpbGUgZG9lc24ndFxuICAgICAgLy8gZXhpc3QgeWV0XCIgY2FzZSBleHBsaWNpdGx5ICh0aGUgYGlmIChleGlzdHMpYCBndWFyZCkgLS0gcmVhY2hpbmdcbiAgICAgIC8vIHRoaXMgY2F0Y2ggbWVhbnMgYW4gYWN0dWFsIGFub21hbHkgKGNvcnJ1cHRlZCBKU09OIGZyb20gYW5cbiAgICAgIC8vIGludGVycnVwdGVkIHdyaXRlLCBhIHN5bmMgY29uZmxpY3QsIGV0Yy4pLCBzbyBsb2cgaXQgaW5zdGVhZCBvZlxuICAgICAgLy8gc2lsZW50bHkgZGlzY2FyZGluZyB0aGUgdXNlcidzIGhpc3Rvcnkgd2l0aCBubyBkaWFnbm9zdGljIHRyYWlsLlxuICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3IgbG9hZGluZyBoaXN0b3J5OlwiLCB7IGVycm9yIH0pO1xuICAgICAgdGhpcy5oaXN0b3J5ID0ge307XG4gICAgfVxuICAgIHRoaXMuaGlzdG9yeUxvYWRlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRW5yZWdpc3RyZSBsJ2hpc3RvcmlxdWUgZGFucyBsZSBzdG9ja2FnZVxuICAgKi9cbiAgYXN5bmMgc2F2ZUhpc3RvcnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZ0RpciA9IHRoaXMucGx1Z2luLmFwcC52YXVsdC5jb25maWdEaXI7XG4gICAgICBjb25zdCBwYXRoID0gbm9ybWFsaXplUGF0aChgJHtjb25maWdEaXJ9LyR7SElTVE9SWV9GSUxFfWApO1xuICAgICAgY29uc3QgZGlyID0gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuICAgICAgXG4gICAgICAvLyBDcsOpZXIgbGUgZG9zc2llciBzaSBuw6ljZXNzYWlyZVxuICAgICAgY29uc3QgZGlyRXhpc3RzID0gYXdhaXQgdGhpcy5wbHVnaW4uYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKGRpcik7XG4gICAgICBpZiAoIWRpckV4aXN0cykge1xuICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5hcHAudmF1bHQuYWRhcHRlci5ta2RpcihkaXIpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBhd2FpdCB0aGlzLnBsdWdpbi5hcHAudmF1bHQuYWRhcHRlci53cml0ZShwYXRoLCBKU09OLnN0cmluZ2lmeSh0aGlzLmhpc3RvcnksIG51bGwsIDIpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3Igc2F2aW5nIGhpc3Rvcnk6XCIsIHsgZXJyb3IgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGlzZSB1bmUgc3VnZ2VzdGlvbiBlbiBjYXBpdGFsaXNhbnQgbGEgcHJlbWnDqHJlIGxldHRyZVxuICAgKiBFeGVtcGxlOiBcImRlbWFpblwiIC0+IFwiRGVtYWluXCIsIFwibHVuZGkgcHJvY2hhaW5cIiAtPiBcIkx1bmRpIHByb2NoYWluXCJcbiAgICovXG4gIHByaXZhdGUgbm9ybWFsaXplU3VnZ2VzdGlvbihzdWdnZXN0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghc3VnZ2VzdGlvbiB8fCBzdWdnZXN0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb247XG4gICAgfVxuXG4gICAgY29uc3QgdHJpbW1lZCA9IHN1Z2dlc3Rpb24udHJpbSgpO1xuICAgIGlmICh0cmltbWVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRyaW1tZWQ7XG4gICAgfVxuXG4gICAgLy8gQ2FwaXRhbGl6ZSBlYWNoIHdvcmQgaW5kaXZpZHVhbGx5LCBub3QganVzdCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mXG4gICAgLy8gdGhlIHdob2xlIHN0cmluZzogaGlzdG9yeSBrZXlzIGFyZSBzdG9yZWQgZnVsbHkgbG93ZXJjYXNlIChzZWVcbiAgICAvLyByZWNvcmRTZWxlY3Rpb24oKSksIHNvIGEgbXVsdGktd29yZCBzdWdnZXN0aW9uIGxpa2UgXCJuZXh0IGZyaWRheVwiXG4gICAgLy8gd291bGQgb3RoZXJ3aXNlIGRpc3BsYXkgYXMgXCJOZXh0IGZyaWRheVwiIC0tIG9ubHkgdGhlIHZlcnkgZmlyc3RcbiAgICAvLyBsZXR0ZXIgY2FwaXRhbGl6ZWQgLS0gaW5jb25zaXN0ZW50IHdpdGggdGhlIFwiTmV4dCBGcmlkYXlcIiB0aGF0IG90aGVyXG4gICAgLy8gc3VnZ2VzdGlvbiBzb3VyY2VzIChlLmcuIGRhdGUtc3VnZ2VzdC50cydzIGdldEltbWVkaWF0ZVN1Z2dlc3Rpb25zKVxuICAgIC8vIHNob3cgZm9yIHRoZSBleGFjdCBzYW1lIHBocmFzZSBpbiB0aGUgc2FtZSBkcm9wZG93bi5cbiAgICByZXR1cm4gdHJpbW1lZFxuICAgICAgLnNwbGl0KC9cXHMrLylcbiAgICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnJlZ2lzdHJlIHVuZSBzw6lsZWN0aW9uIGRhbnMgbCdoaXN0b3JpcXVlXG4gICAqL1xuICBhc3luYyByZWNvcmRTZWxlY3Rpb24oc3VnZ2VzdGlvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkSGlzdG9yeSgpO1xuXG4gICAgLy8gTm9ybWFsaXNlciBsYSBzdWdnZXN0aW9uIChlbiBtaW51c2N1bGVzIHBvdXIgbGEgY2zDqSwgw6l2aXRlIGxlcyBkb3VibG9ucylcbiAgICBjb25zdCBub3JtYWxpemVkID0gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgIGlmICghbm9ybWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluY3LDqW1lbnRlciBsZSBjb21wdGV1ciBldCByYWZyYcOuY2hpciBsYSBkYXRlIGQndXRpbGlzYXRpb24gKHV0aWxpc2VyIGxhIGNsw6kgZW4gbWludXNjdWxlcylcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuaGlzdG9yeVtub3JtYWxpemVkXTtcbiAgICB0aGlzLmhpc3Rvcnlbbm9ybWFsaXplZF0gPSB7XG4gICAgICBjb3VudDogKGV4aXN0aW5nPy5jb3VudCB8fCAwKSArIDEsXG4gICAgICBsYXN0VXNlZDogRGF0ZS5ub3coKSxcbiAgICB9O1xuXG4gICAgLy8gTGltaXRlciBsYSB0YWlsbGUgZGUgbCdoaXN0b3JpcXVlIHNpIG7DqWNlc3NhaXJlXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuaGlzdG9yeSkubGVuZ3RoID4gTUFYX0hJU1RPUllfU0laRSkge1xuICAgICAgdGhpcy50cmltSGlzdG9yeSgpO1xuICAgIH1cblxuICAgIC8vIE1ldHRyZSDDoCBqb3VyIGxlIGNhY2hlXG4gICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuXG4gICAgLy8gU2F2ZSAoYXN5bmNocm9ub3VzbHksIGRvbid0IGJsb2NrKVxuICAgIHRoaXMuc2F2ZUhpc3RvcnkoKS5jYXRjaCgoZXJyOiB1bmtub3duKSA9PiB7XG4gICAgICBsb2dnZXIuZXJyb3IoXCJFcnJvciBzYXZpbmcgaGlzdG9yeTpcIiwgeyBlcnJvcjogZXJyIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWR1aXQgbGEgdGFpbGxlIGRlIGwnaGlzdG9yaXF1ZSBlbiBnYXJkYW50IGxlcyBlbnRyw6llcyBsZXMgcGx1cyBwZXJ0aW5lbnRlc1xuICAgKiAoZnLDqXF1ZW5jZSBwb25kw6lyw6llIHBhciBsYSBmcmHDrmNoZXVyLCB2b2lyIGNvbXB1dGVTY29yZSgpKVxuICAgKi9cbiAgcHJpdmF0ZSB0cmltSGlzdG9yeSgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLmhpc3RvcnkpO1xuXG4gICAgLy8gVHJpZXIgcGFyIHNjb3JlIChkw6ljcm9pc3NhbnQpXG4gICAgZW50cmllcy5zb3J0KChhLCBiKSA9PiB0aGlzLmNvbXB1dGVTY29yZShiWzFdLCBub3cpIC0gdGhpcy5jb21wdXRlU2NvcmUoYVsxXSwgbm93KSk7XG5cbiAgICAvLyBHYXJkZXIgdW5pcXVlbWVudCBsZXMgTUFYX0hJU1RPUllfU0laRSBlbnRyw6llcyBsZXMgcGx1cyBwZXJ0aW5lbnRlc1xuICAgIGNvbnN0IHRyaW1tZWQgPSBlbnRyaWVzLnNsaWNlKDAsIE1BWF9ISVNUT1JZX1NJWkUpO1xuXG4gICAgdGhpcy5oaXN0b3J5ID0gT2JqZWN0LmZyb21FbnRyaWVzKHRyaW1tZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYXJnZSBsJ2hpc3RvcmlxdWUgZXQgbWV0IMOgIGpvdXIgbGUgY2FjaGUgKMOgIGFwcGVsZXIgYXUgZMOpbWFycmFnZSlcbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkSGlzdG9yeSgpO1xuICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXQgw6Agam91ciBsZSBjYWNoZSBkZXMgc3VnZ2VzdGlvbnMgbGVzIHBsdXMgcGVydGluZW50ZXNcbiAgICogKGZyw6lxdWVuY2UgcG9uZMOpcsOpZSBwYXIgbGEgZnJhw65jaGV1ciwgdm9pciBjb21wdXRlU2NvcmUoKSlcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlQ2FjaGUoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModGhpcy5oaXN0b3J5KTtcblxuICAgIC8vIFRyaWVyIHBhciBzY29yZSAoZMOpY3JvaXNzYW50KVxuICAgIGVudHJpZXMuc29ydCgoYSwgYikgPT4gdGhpcy5jb21wdXRlU2NvcmUoYlsxXSwgbm93KSAtIHRoaXMuY29tcHV0ZVNjb3JlKGFbMV0sIG5vdykpO1xuXG4gICAgLy8gTWV0dHJlIGVuIGNhY2hlIGxlcyB0b3Agc3VnZ2VzdGlvbnMgYXZlYyBsYSBwcmVtacOocmUgbGV0dHJlIGNhcGl0YWxpc8OpZVxuICAgIHRoaXMuY2FjaGVkVG9wU3VnZ2VzdGlvbnMgPSBlbnRyaWVzLnNsaWNlKDAsIDUwKS5tYXAoKFtzdWdnZXN0aW9uXSkgPT5cbiAgICAgIHRoaXMubm9ybWFsaXplU3VnZ2VzdGlvbihzdWdnZXN0aW9uKVxuICAgICk7XG4gICAgdGhpcy5jYWNoZVZhbGlkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSw6ljdXDDqHJlIGxlcyBzdWdnZXN0aW9ucyBsZXMgcGx1cyBmcsOpcXVlbnRlcyBkZSBtYW5pw6hyZSBzeW5jaHJvbmUgKHV0aWxpc2UgbGUgY2FjaGUpXG4gICAqIEBwYXJhbSBsaW1pdCBOb21icmUgbWF4aW11bSBkZSBzdWdnZXN0aW9ucyDDoCByZXRvdXJuZXJcbiAgICovXG4gIGdldFRvcFN1Z2dlc3Rpb25zU3luYyhsaW1pdCA9IDEwKTogc3RyaW5nW10ge1xuICAgIGlmICghdGhpcy5jYWNoZVZhbGlkKSB7XG4gICAgICAvLyBTaSBsZSBjYWNoZSBuJ2VzdCBwYXMgdmFsaWRlLCByZXRvdXJuZXIgdW4gdGFibGVhdSB2aWRlXG4gICAgICAvLyBMZSBjYWNoZSBzZXJhIG1pcyDDoCBqb3VyIGxvcnMgZGUgbCdpbml0aWFsaXNhdGlvblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jYWNoZWRUb3BTdWdnZXN0aW9ucy5zbGljZSgwLCBsaW1pdCk7XG4gIH1cblxuICAvKipcbiAgICogUsOpY3Vww6hyZSBsZXMgc3VnZ2VzdGlvbnMgbGVzIHBsdXMgZnLDqXF1ZW50ZXMsIHRyacOpZXMgcGFyIGZyw6lxdWVuY2UgKGFzeW5jLCBtZXQgw6Agam91ciBsZSBjYWNoZSlcbiAgICogQHBhcmFtIGxpbWl0IE5vbWJyZSBtYXhpbXVtIGRlIHN1Z2dlc3Rpb25zIMOgIHJldG91cm5lclxuICAgKi9cbiAgYXN5bmMgZ2V0VG9wU3VnZ2VzdGlvbnMobGltaXQgPSAxMCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRIaXN0b3J5KCk7XG4gICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlZFRvcFN1Z2dlc3Rpb25zLnNsaWNlKDAsIGxpbWl0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSw6lpbml0aWFsaXNlIGwnaGlzdG9yaXF1ZVxuICAgKi9cbiAgYXN5bmMgY2xlYXJIaXN0b3J5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaGlzdG9yeSA9IHt9O1xuICAgIHRoaXMuY2FjaGVkVG9wU3VnZ2VzdGlvbnMgPSBbXTtcbiAgICB0aGlzLmNhY2hlVmFsaWQgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMuc2F2ZUhpc3RvcnkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdXBwcmltZSB1bmUgc2V1bGUgZW50csOpZSBkZSBsJ2hpc3RvcmlxdWUgKGdlc3Rpb24gZmluZSwgcGFyIG9wcG9zaXRpb25cbiAgICogw6AgY2xlYXJIaXN0b3J5KCkgcXVpIHZpZGUgdG91dCkuIGBzdWdnZXN0aW9uYCBwZXV0IMOqdHJlIGxhIGZvcm1lIG5vcm1hbGlzw6llXG4gICAqIGFmZmljaMOpZSDDoCBsJ3V0aWxpc2F0ZXVyIChleDogXCJOZXh0IEZyaWRheVwiKSBvdSBsYSBjbMOpIGJydXRlIHN0b2Nrw6llIGVuXG4gICAqIGludGVybmUgKGV4OiBcIm5leHQgZnJpZGF5XCIpIC0tIGxlcyBkZXV4IHNvbnQgYWNjZXB0w6llcyBwdWlzcXVlXG4gICAqIGwndXRpbGlzYXRldXIgbmUgdm9pdCBqYW1haXMgbGEgY2zDqSBicnV0ZSwgc2V1bGVtZW50IGxhIHZlcnNpb24gYWZmaWNow6llLlxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlRW50cnkoc3VnZ2VzdGlvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkSGlzdG9yeSgpO1xuXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgaWYgKCEobm9ybWFsaXplZCBpbiB0aGlzLmhpc3RvcnkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGVsZXRlIHRoaXMuaGlzdG9yeVtub3JtYWxpemVkXTtcbiAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG5cbiAgICBhd2FpdCB0aGlzLnNhdmVIaXN0b3J5KCk7XG4gIH1cblxuICAvKipcbiAgICogUsOpY3Vww6hyZSB0b3V0ZXMgbGVzIGVudHLDqWVzIGRlIGwnaGlzdG9yaXF1ZSwgdHJpw6llcyBwYXIgcGVydGluZW5jZVxuICAgKiAodm9pciBjb21wdXRlU2NvcmUoKSksIGF2ZWMgbGV1cnMgbcOpdGFkb25uw6llcyAtLSB1dGlsaXPDqSBwYXIgbCdpbnRlcmZhY2VcbiAgICogZGUgZ2VzdGlvbiBmaW5lIGRlIGwnaGlzdG9yaXF1ZSAoYWZmaWNoYWdlICsgc3VwcHJlc3Npb24gaW5kaXZpZHVlbGxlKS5cbiAgICogQ29udHJhaXJlbWVudCDDoCBnZXRUb3BTdWdnZXN0aW9uc1N5bmMoKS9nZXRUb3BTdWdnZXN0aW9ucygpLCBxdWkgbmVcbiAgICogcmVudm9pZW50IHF1ZSBsZSB0ZXh0ZSBhZmZpY2jDqSwgY2VjaSByZW52b2llIGF1c3NpIGxhIGNsw6kgYnJ1dGUgKHBvdXJcbiAgICogcmVtb3ZlRW50cnkoKSkgZXQgbGVzIG3DqXRhZG9ubsOpZXMgY291bnQvbGFzdFVzZWQgKHBvdXIgbCdhZmZpY2hhZ2UpLlxuICAgKi9cbiAgYXN5bmMgZ2V0RW50cmllc0Zvck1hbmFnZW1lbnQoKTogUHJvbWlzZTxBcnJheTx7IGtleTogc3RyaW5nOyBkaXNwbGF5OiBzdHJpbmc7IGNvdW50OiBudW1iZXI7IGxhc3RVc2VkOiBudW1iZXIgfT4+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRIaXN0b3J5KCk7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLmhpc3RvcnkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gdGhpcy5jb21wdXRlU2NvcmUoYlsxXSwgbm93KSAtIHRoaXMuY29tcHV0ZVNjb3JlKGFbMV0sIG5vdykpXG4gICAgICAubWFwKChba2V5LCBlbnRyeV0pID0+ICh7XG4gICAgICAgIGtleSxcbiAgICAgICAgZGlzcGxheTogdGhpcy5ub3JtYWxpemVTdWdnZXN0aW9uKGtleSksXG4gICAgICAgIGNvdW50OiBlbnRyeS5jb3VudCxcbiAgICAgICAgbGFzdFVzZWQ6IGVudHJ5Lmxhc3RVc2VkLFxuICAgICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5ldHRvaWUgbGVzIHJlc3NvdXJjZXMgbG9ycyBkZSBsYSBkZXN0cnVjdGlvbiBkZSBsJ2luc3RhbmNlXG4gICAqL1xuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFBlcmlvZGljQ2xlYW51cCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWN1cMOocmUgbCdoaXN0b3JpcXVlIGNvbXBsZXQgKHBvdXIgZGVidWcpXG4gICAqL1xuICBhc3luYyBnZXRIaXN0b3J5KCk6IFByb21pc2U8U2VsZWN0aW9uSGlzdG9yeT4ge1xuICAgIGF3YWl0IHRoaXMubG9hZEhpc3RvcnkoKTtcbiAgICByZXR1cm4geyAuLi50aGlzLmhpc3RvcnkgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQXBwLCBNYXJrZG93blZpZXcsIEVkaXRvciB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHR5cGUgTmF0dXJhbExhbmd1YWdlRGF0ZXMgZnJvbSBcIi4vbWFpblwiO1xuaW1wb3J0IHsgTFJVQ2FjaGUgfSBmcm9tIFwiLi9scnUtY2FjaGVcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dlclwiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25Db2xsZWN0b3IgfSBmcm9tIFwiLi90cmFuc2xhdGlvbi1jb2xsZWN0b3JcIjtcblxuLy8gQ2hlYXAsIG5vbi1jcnlwdG9ncmFwaGljIHN0cmluZyBoYXNoIChkamIyIHZhcmlhbnQpIHVzZWQgdG8gZmluZ2VycHJpbnRcbi8vIHRoZSBzY2FubmVkIGNvbnRleHQgd2luZG93IGZvciBjYWNoZSBrZXlzIC0tIGZhc3QgZW5vdWdoIHRvIHJ1biBvbiBldmVyeVxuLy8ga2V5c3Ryb2tlIHdoaWxlIHN0aWxsIGRpc3Rpbmd1aXNoaW5nIGRpZmZlcmVudCBjb250ZW50IHJlbGlhYmx5LlxuZnVuY3Rpb24gc2ltcGxlSGFzaChzdHI6IHN0cmluZyk6IG51bWJlciB7XG4gIGxldCBoYXNoID0gNTM4MTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBoYXNoID0gKChoYXNoIDw8IDUpICsgaGFzaCArIHN0ci5jaGFyQ29kZUF0KGkpKSB8IDA7XG4gIH1cbiAgcmV0dXJuIGhhc2g7XG59XG5cbmNvbnN0IENPTlRFWFRfTElORVMgPSAxMDsgLy8gTm9tYnJlIGRlIGxpZ25lcyDDoCBhbmFseXNlciBhdmFudCBldCBhcHLDqHMgbGUgY3Vyc2V1clxuY29uc3QgTUFYX0RBVEVTX1RPX0VYVFJBQ1QgPSAxMDsgLy8gTm9tYnJlIG1heGltdW0gZGUgZGF0ZXMgw6AgZXh0cmFpcmUgZHUgY29udGV4dGVcbmNvbnN0IE1BWF9DQUNIRV9TSVpFID0gMjAwOyAvLyBMaW1pdGUgZGUgdGFpbGxlIGR1IGNhY2hlIGRlIGNvbnRleHRlXG5jb25zdCBDQUNIRV9USU1FT1VUID0gNTAwMDsgLy8gNSBzZWNvbmRlcyBkZSBjYWNoZVxuY29uc3QgQ0xFQU5VUF9JTlRFUlZBTCA9IDMwMDAwOyAvLyBOZXR0b3lhZ2UgcMOpcmlvZGlxdWUgdG91dGVzIGxlcyAzMCBzZWNvbmRlc1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHRJbmZvIHtcbiAgZGF0ZXNJbkNvbnRleHQ6IHN0cmluZ1tdOyAvLyBEYXRlcyB0cm91dsOpZXMgZGFucyBsZSBjb250ZXh0ZSAoZm9ybWF0cyBuYXR1cmVscyBkw6l0ZWN0w6lzKVxuICB0aXRsZT86IHN0cmluZzsgLy8gVGl0cmUgZGUgbGEgbm90ZVxuICB0YWdzOiBzdHJpbmdbXTsgLy8gVGFncyBkZSBsYSBub3RlXG4gIHRpbWVzdGFtcDogbnVtYmVyOyAvLyBUaW1lc3RhbXAgZGUgY3LDqWF0aW9uIHBvdXIgbGUgbmV0dG95YWdlXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRleHRBbmFseXplciB7XG4gIHByaXZhdGUgYXBwOiBBcHA7XG4gIHByaXZhdGUgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcztcbiAgcHJpdmF0ZSBjYWNoZTogTFJVQ2FjaGU8c3RyaW5nLCBDb250ZXh0SW5mbz47IC8vIENhY2hlIHRlbXBvcmFpcmUgcGFyIGZpY2hpZXIgYXZlYyBsaW1pdGUgZGUgdGFpbGxlXG4gIHByaXZhdGUgY2xlYW51cEludGVydmFsOiBudW1iZXIgfCBudWxsID0gbnVsbDsgLy8gSUQgZGUgbCdpbnRlcnZhbGxlIGRlIG5ldHRveWFnZVxuICBcbiAgLy8gUGF0dGVybnMgcmVnZXggcG91ciBsYSBkw6l0ZWN0aW9uIGRlIGRhdGVzIChnw6luw6lyw6lzIGR5bmFtaXF1ZW1lbnQpXG4gIHByaXZhdGUgZGF0ZVBhdHRlcm5zOiBSZWdFeHBbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzKSB7XG4gICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gICAgdGhpcy5jYWNoZSA9IG5ldyBMUlVDYWNoZTxzdHJpbmcsIENvbnRleHRJbmZvPihNQVhfQ0FDSEVfU0laRSk7XG4gICAgdGhpcy5pbml0aWFsaXplRGF0ZVBhdHRlcm5zKCk7XG4gICAgdGhpcy5zdGFydFBlcmlvZGljQ2xlYW51cCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIETDqW1hcnJlIGxlIG5ldHRveWFnZSBww6lyaW9kaXF1ZSBkdSBjYWNoZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydFBlcmlvZGljQ2xlYW51cCgpOiB2b2lkIHtcbiAgICAvLyBOZXR0b3llciB0b3V0ZXMgbGVzIDMwIHNlY29uZGVzXG4gICAgdGhpcy5jbGVhbnVwSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5jbGVhbnVwRXhwaXJlZEVudHJpZXMoKTtcbiAgICB9LCBDTEVBTlVQX0lOVEVSVkFMKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcnLDqnRlIGxlIG5ldHRveWFnZSBww6lyaW9kaXF1ZSAow6AgYXBwZWxlciBsb3JzIGRlIGxhIGRlc3RydWN0aW9uKVxuICAgKi9cbiAgc3RvcFBlcmlvZGljQ2xlYW51cCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jbGVhbnVwSW50ZXJ2YWwgIT09IG51bGwpIHtcbiAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuY2xlYW51cEludGVydmFsKTtcbiAgICAgIHRoaXMuY2xlYW51cEludGVydmFsID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTmV0dG9pZSBsZXMgZW50csOpZXMgZXhwaXLDqWVzIGR1IGNhY2hlXG4gICAqL1xuICBwcml2YXRlIGNsZWFudXBFeHBpcmVkRW50cmllcygpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGtleXNUb0RlbGV0ZTogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIFBhcmNvdXJpciB0b3V0ZXMgbGVzIGVudHLDqWVzIGR1IGNhY2hlXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5jYWNoZS5lbnRyaWVzKCkpIHtcbiAgICAgIGlmICh2YWx1ZS50aW1lc3RhbXAgJiYgKG5vdyAtIHZhbHVlLnRpbWVzdGFtcCkgPiBDQUNIRV9USU1FT1VUKSB7XG4gICAgICAgIGtleXNUb0RlbGV0ZS5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3VwcHJpbWVyIGxlcyBlbnRyw6llcyBleHBpcsOpZXNcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzVG9EZWxldGUpIHtcbiAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7XG4gICAgfVxuXG4gICAgaWYgKGtleXNUb0RlbGV0ZS5sZW5ndGggPiAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYE5ldHRveWFnZSBkdSBjYWNoZSBkZSBjb250ZXh0ZTogJHtrZXlzVG9EZWxldGUubGVuZ3RofSBlbnRyw6llcyBzdXBwcmltw6llc2ApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXNlIGxlcyBwYXR0ZXJucyByZWdleCBwb3VyIGxhIGTDqXRlY3Rpb24gZGUgZGF0ZXMgZGFucyB0b3V0ZXMgbGVzIGxhbmd1ZXMgYWN0aXbDqWVzXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVEYXRlUGF0dGVybnMoKTogdm9pZCB7XG4gICAgY29uc3QgdGMgPSBuZXcgVHJhbnNsYXRpb25Db2xsZWN0b3IodGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzKTtcblxuICAgIGNvbnN0IHdlZWtkYXlLZXlzID0gWydzdW5kYXknLCAnbW9uZGF5JywgJ3R1ZXNkYXknLCAnd2VkbmVzZGF5JywgJ3RodXJzZGF5JywgJ2ZyaWRheScsICdzYXR1cmRheSddO1xuICAgIGNvbnN0IHdlZWtkYXlQYXR0ZXJuID0gdGMuYnVpbGRBbHRlcm5hdGlvbih3ZWVrZGF5S2V5cy5mbGF0TWFwKGtleSA9PiB0Yy5jb2xsZWN0V29yZHMoa2V5KSkpO1xuICAgIGNvbnN0IHRpbWVXb3JkUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb24oWyd0b2RheScsICd0b21vcnJvdycsICd5ZXN0ZXJkYXknXS5mbGF0TWFwKGtleSA9PiB0Yy5jb2xsZWN0V29yZHMoa2V5KSkpO1xuICAgIGNvbnN0IHRpbWVVbml0S2V5cyA9IFsnbWludXRlJywgJ2hvdXInLCAnZGF5JywgJ3dlZWsnLCAnbW9udGgnLCAneWVhciddO1xuICAgIGNvbnN0IHRpbWVVbml0UGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb24odGltZVVuaXRLZXlzLmZsYXRNYXAoa2V5ID0+IHRjLmNvbGxlY3RXb3JkcyhrZXkpKSk7XG4gICAgY29uc3QgaW5QYXR0ZXJuID0gdGMuYnVpbGRBbHRlcm5hdGlvbkZvcignaW4nKTtcbiAgICBjb25zdCBwcmVmaXhQYXR0ZXJuID0gdGMuYnVpbGRBbHRlcm5hdGlvbihbLi4udGMuY29sbGVjdFdvcmRzKCduZXh0JyksIC4uLnRjLmNvbGxlY3RXb3JkcygnbGFzdCcpXSk7XG5cbiAgICB0aGlzLmRhdGVQYXR0ZXJucyA9IFtdO1xuXG4gICAgLy8gXFxiIGlzIGRlZmluZWQgaW4gdGVybXMgb2YgXFx3LCB3aGljaCBpcyBBU0NJSS1vbmx5OiBpdCBuZXZlciBtYXRjaGVzXG4gICAgLy8gYXJvdW5kIENKSyBjaGFyYWN0ZXJzIChubyBib3VuZGFyeSBleGlzdHMgYmV0d2VlbiB0d28gQ2hpbmVzZVxuICAgIC8vIGNoYXJhY3RlcnMgYXMgZmFyIGFzIFxcYiBpcyBjb25jZXJuZWQpLCBzbyBpdCBzaWxlbnRseSBkcm9wcyBldmVyeSBDSktcbiAgICAvLyBtYXRjaC4gVXNpbmcgZXhwbGljaXQgbG9va2Fyb3VuZCBhZ2FpbnN0IExhdGluIGFscGhhbnVtZXJpY3MgaW5zdGVhZFxuICAgIC8vIHN0aWxsIGJsb2NrcyBwYXJ0aWFsLXdvcmQgbWF0Y2hlcyBmb3IgTGF0aW4gc2NyaXB0cyAoZS5nLiBcIk1vbmRheVwiXG4gICAgLy8gaW5zaWRlIFwiTW9uZGF5aXNoXCIpIHdoaWxlIGltcG9zaW5nIG5vIGJvdW5kYXJ5IGF0IGFsbCBuZXh0IHRvIENKS1xuICAgIC8vIGNoYXJhY3RlcnMsIHdoaWNoIGRvbid0IGhhdmUgd29yZCBzZXBhcmF0b3JzIHRvIGNoZWNrIGFnYWluc3QgYW55d2F5LlxuICAgIC8vXG4gICAgLy8gVGhlIGxlYWRpbmcgYm91bmRhcnkgY2FuJ3QgYmUgYSBsb29rYmVoaW5kIChcIig/PCEuLi4pXCIpOiB0aGF0IHN5bnRheFxuICAgIC8vIGlzbid0IHN1cHBvcnRlZCBvbiBpT1MvU2FmYXJpIGJlZm9yZSAxNi40IGFuZCB0aHJvd3MgYXQgUmVnRXhwXG4gICAgLy8gY29uc3RydWN0aW9uIHRpbWUsIGJyZWFraW5nIGV2ZXJ5IG9uZSBvZiB0aGVzZSBwYXR0ZXJucyBvbiBvbGRlclxuICAgIC8vIGRldmljZXMuIFVzaW5nIGEgY29uc3VtaW5nIGFsdGVybmF0aW9uIChcInN0YXJ0LW9mLXN0cmluZyBvciBhIHNpbmdsZVxuICAgIC8vIG5vbi13b3JkIGNoYXJhY3RlclwiKSBpbnN0ZWFkIHdvcmtzIHRoZSBzYW1lIHdheSBidXQgYWN0dWFsbHkgY29uc3VtZXNcbiAgICAvLyB0aGF0IGxlYWRpbmcgY2hhcmFjdGVyLCBzbyB0aGUgY29udGVudCB0byBleHRyYWN0IGlzIHdyYXBwZWQgaW4gaXRzXG4gICAgLy8gb3duIGNhcHR1cmluZyBncm91cCBiZWxvdyByYXRoZXIgdGhhbiByZWFkIG9mZiB0aGUgd2hvbGUgbWF0Y2guXG4gICAgLy8gTG9va2FoZWFkIChcIig/IS4uLilcIikgaGFzIG5vIHN1Y2ggY29tcGF0aWJpbGl0eSBpc3N1ZSBhbmQgY2FuIHN0YXkuXG4gICAgY29uc3Qgd29yZEJvdW5kYXJ5QmVmb3JlID0gJyg/Ol58W15hLXpBLVowLTlfXSknO1xuICAgIGNvbnN0IHdvcmRCb3VuZGFyeUFmdGVyID0gJyg/IVthLXpBLVowLTlfXSknO1xuXG4gICAgLy8gUGF0dGVybiAxOiBKb3VycyBkZSBsYSBzZW1haW5lXG4gICAgaWYgKHdlZWtkYXlQYXR0ZXJuKSB7XG4gICAgICB0aGlzLmRhdGVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYCR7d29yZEJvdW5kYXJ5QmVmb3JlfSgke3dlZWtkYXlQYXR0ZXJufSkke3dvcmRCb3VuZGFyeUFmdGVyfWAsICdnaScpKTtcbiAgICB9XG5cbiAgICAvLyBQYXR0ZXJuIDI6IE1vdHMgdGVtcG9yZWxzIGNvdXJhbnRzICh0b2RheSwgdG9tb3Jyb3csIHllc3RlcmRheSlcbiAgICBpZiAodGltZVdvcmRQYXR0ZXJuKSB7XG4gICAgICB0aGlzLmRhdGVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYCR7d29yZEJvdW5kYXJ5QmVmb3JlfSgke3RpbWVXb3JkUGF0dGVybn0pJHt3b3JkQm91bmRhcnlBZnRlcn1gLCAnZ2knKSk7XG4gICAgfVxuXG4gICAgLy8gUGF0dGVybiAzOiBFeHByZXNzaW9ucyByZWxhdGl2ZXMgXCJkYW5zIFggam91cnMvc2VtYWluZXMvbW9pc1wiXG4gICAgaWYgKGluUGF0dGVybiAmJiB0aW1lVW5pdFBhdHRlcm4pIHtcbiAgICAgIHRoaXMuZGF0ZVBhdHRlcm5zLnB1c2gobmV3IFJlZ0V4cChgJHt3b3JkQm91bmRhcnlCZWZvcmV9KCg/OiR7aW5QYXR0ZXJufSlcXFxccypcXFxcZCtcXFxccyooPzoke3RpbWVVbml0UGF0dGVybn0pKSR7d29yZEJvdW5kYXJ5QWZ0ZXJ9YCwgJ2dpJykpO1xuICAgIH1cblxuICAgIC8vIFBhdHRlcm4gNDogRXhwcmVzc2lvbnMgXCJuZXh0L2xhc3Qgd2Vla2RheS93ZWVrL21vbnRoL3llYXJcIlxuICAgIC8vIEV2ZXJ5IG9uZSBvZiB0aGUgMTEgc3VwcG9ydGVkIGxhbmd1YWdlcyBkZWZpbmVzIHdlZWtkYXlzIGFuZCB0aW1lXG4gICAgLy8gdW5pdHMgdG9nZXRoZXIgd2l0aCBuZXh0L2xhc3QsIHNvIHRoZSBuZXN0ZWQgY2hlY2tzIGJlbG93IGNhbid0XG4gICAgLy8gYWN0dWFsbHkgYmUgZmFsc2Ugd2hpbGUgcHJlZml4UGF0dGVybiBpcyB0cnVlIC0tIGtlcHQgYXMgYSBndWFyZCBpblxuICAgIC8vIGNhc2UgYSBmdXR1cmUgbGFuZ3VhZ2UgbW9kdWxlIGlzIGF1dGhvcmVkIGluY29tcGxldGVseS5cbiAgICBpZiAocHJlZml4UGF0dGVybikge1xuICAgICAgaWYgKHdlZWtkYXlQYXR0ZXJuKSB7XG4gICAgICAgIHRoaXMuZGF0ZVBhdHRlcm5zLnB1c2gobmV3IFJlZ0V4cChgJHt3b3JkQm91bmRhcnlCZWZvcmV9KCg/OiR7cHJlZml4UGF0dGVybn0pXFxcXHMqKD86JHt3ZWVrZGF5UGF0dGVybn0pKSR7d29yZEJvdW5kYXJ5QWZ0ZXJ9YCwgJ2dpJykpO1xuICAgICAgfVxuICAgICAgaWYgKHRpbWVVbml0UGF0dGVybikge1xuICAgICAgICB0aGlzLmRhdGVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYCR7d29yZEJvdW5kYXJ5QmVmb3JlfSgoPzoke3ByZWZpeFBhdHRlcm59KVxcXFxzKig/OiR7dGltZVVuaXRQYXR0ZXJufSkpJHt3b3JkQm91bmRhcnlBZnRlcn1gLCAnZ2knKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFLDqWluaXRpYWxpc2UgbGVzIHBhdHRlcm5zICjDoCBhcHBlbGVyIHF1YW5kIGxlcyBsYW5ndWVzIGNoYW5nZW50KVxuICAgKi9cbiAgcmVzZXRQYXR0ZXJucygpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVEYXRlUGF0dGVybnMoKTtcbiAgICB0aGlzLmNsZWFyQ2FjaGUoKTsgLy8gVmlkZXIgbGUgY2FjaGUgY2FyIGxlcyBwYXR0ZXJucyBvbnQgY2hhbmfDqVxuICB9XG5cbiAgLyoqXG4gICAqIE5ldHRvaWUgbGUgY2FjaGUgbG9ycyBkZSBsYSBkZXN0cnVjdGlvbiBkZSBsJ2luc3RhbmNlXG4gICAqL1xuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFBlcmlvZGljQ2xlYW51cCgpO1xuICAgIHRoaXMuY2xlYXJDYWNoZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuYWx5c2UgbGUgY29udGV4dGUgYXV0b3VyIGR1IGN1cnNldXIgZGUgbWFuacOocmUgc3luY2hyb25lICh1dGlsaXNlIGxlIGNhY2hlKVxuICAgKi9cbiAgYW5hbHl6ZUNvbnRleHRTeW5jKGVkaXRvcjogRWRpdG9yLCBjdXJzb3JMaW5lOiBudW1iZXIpOiBDb250ZXh0SW5mbyB7XG4gICAgY29uc3QgYWN0aXZlVmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XG4gICAgaWYgKCFhY3RpdmVWaWV3KSB7XG4gICAgICByZXR1cm4geyBkYXRlc0luQ29udGV4dDogW10sIHRhZ3M6IFtdLCB0aW1lc3RhbXA6IERhdGUubm93KCkgfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlID0gYWN0aXZlVmlldy5maWxlO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIHsgZGF0ZXNJbkNvbnRleHQ6IFtdLCB0YWdzOiBbXSwgdGltZXN0YW1wOiBEYXRlLm5vdygpIH07XG4gICAgfVxuXG4gICAgY29uc3QgY29udGV4dDogQ29udGV4dEluZm8gPSB7XG4gICAgICBkYXRlc0luQ29udGV4dDogW10sXG4gICAgICB0YWdzOiBbXSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEFuYWx5c2VyIGxlIGNvbnRleHRlIGF1dG91ciBkdSBjdXJzZXVyXG4gICAgICBjb25zdCBjb250ZW50ID0gZWRpdG9yLmdldFZhbHVlKCk7XG4gICAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XG5cbiAgICAgIGNvbnN0IHN0YXJ0TGluZSA9IE1hdGgubWF4KDAsIGN1cnNvckxpbmUgLSBDT05URVhUX0xJTkVTKTtcbiAgICAgIGNvbnN0IGVuZExpbmUgPSBNYXRoLm1pbihsaW5lcy5sZW5ndGggLSAxLCBjdXJzb3JMaW5lICsgQ09OVEVYVF9MSU5FUyk7XG5cbiAgICAgIGNvbnN0IGNvbnRleHRMaW5lcyA9IGxpbmVzLnNsaWNlKHN0YXJ0TGluZSwgZW5kTGluZSArIDEpO1xuICAgICAgY29uc3QgY29udGV4dFRleHQgPSBjb250ZXh0TGluZXMuam9pbihcIlxcblwiKTtcblxuICAgICAgLy8gVsOpcmlmaWVyIGxlIGNhY2hlIChhdmVjIHRpbWVvdXQpLiBUaGUga2V5IGluY2x1ZGVzIGEgY2hlYXAgaGFzaCBvZlxuICAgICAgLy8gdGhlIGFjdHVhbCBzY2FubmVkIHdpbmRvdywgbm90IGp1c3QgZmlsZStsaW5lOiB3aXRob3V0IGl0LCBlZGl0aW5nXG4gICAgICAvLyBjb250ZW50IHdpdGhpbiB0aGUgwrFDT05URVhUX0xJTkVTIHdpbmRvdyAod2l0aG91dCBtb3ZpbmcgdGhlIGN1cnNvclxuICAgICAgLy8gdG8gYSBkaWZmZXJlbnQgbGluZSkgd291bGQga2VlcCBzZXJ2aW5nIGEgc3RhbGUgY2FjaGVkIHJlc3VsdCB1bnRpbFxuICAgICAgLy8gQ0FDSEVfVElNRU9VVCBleHBpcmVzLCBzaW5jZSBmaWxlK2xpbmUgYWxvbmUgZG9lc24ndCBjaGFuZ2Ugd2hlblxuICAgICAgLy8gbmVhcmJ5IGNvbnRlbnQgZG9lcy5cbiAgICAgIGNvbnN0IGNhY2hlS2V5ID0gYCR7ZmlsZS5wYXRofS0ke2N1cnNvckxpbmV9LSR7c2ltcGxlSGFzaChjb250ZXh0VGV4dCl9YDtcbiAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuY2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgLy8gVsOpcmlmaWVyIHNpIGwnZW50csOpZSBuJ2VzdCBwYXMgZXhwaXLDqWVcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKGNhY2hlZC50aW1lc3RhbXAgJiYgKG5vdyAtIGNhY2hlZC50aW1lc3RhbXApIDw9IENBQ0hFX1RJTUVPVVQpIHtcbiAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEVudHLDqWUgZXhwaXLDqWUsIGxhIHN1cHByaW1lclxuICAgICAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGNhY2hlS2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBFeHRyYWlyZSBsZXMgdGFncyBkZXB1aXMgbGVzIG3DqXRhZG9ubsOpZXNcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5hcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk7XG4gICAgICBpZiAobWV0YWRhdGEpIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLnRhZ3MpIHtcbiAgICAgICAgICBjb250ZXh0LnRhZ3MgPSBtZXRhZGF0YS50YWdzLm1hcCh0YWcgPT4gdGFnLnRhZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeHRyYWlyZSBsZSB0aXRyZSBkZXB1aXMgbGVzIGZyb250bWF0dGVyIG91IGxlIHByZW1pZXIgdGl0cmVcbiAgICAgICAgLy8gRnJvbnRtYXR0ZXIgdmFsdWVzIGFyZSB1c2VyLWF1dGhvcmVkIFlBTUwsIHNvIFwidGl0bGVcIiBpc24ndFxuICAgICAgICAvLyBndWFyYW50ZWVkIHRvIGFjdHVhbGx5IGJlIGEgc3RyaW5nIChlLmcuIGB0aXRsZTogNDJgKS5cbiAgICAgICAgaWYgKHR5cGVvZiBtZXRhZGF0YS5mcm9udG1hdHRlcj8udGl0bGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBjb250ZXh0LnRpdGxlID0gbWV0YWRhdGEuZnJvbnRtYXR0ZXIudGl0bGU7XG4gICAgICAgIH0gZWxzZSBpZiAobWV0YWRhdGEuaGVhZGluZ3MgJiYgbWV0YWRhdGEuaGVhZGluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnRleHQudGl0bGUgPSBtZXRhZGF0YS5oZWFkaW5nc1swXS5oZWFkaW5nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEV4dHJhaXJlIGxlcyBkYXRlcyBkdSBjb250ZXh0ZVxuICAgICAgY29udGV4dC5kYXRlc0luQ29udGV4dCA9IHRoaXMuZXh0cmFjdERhdGVzRnJvbUNvbnRleHQoY29udGV4dFRleHQpO1xuXG4gICAgICAvLyBNZXR0cmUgZW4gY2FjaGUgKGxlIExSVSBjYWNoZSBnw6hyZSBhdXRvbWF0aXF1ZW1lbnQgbGEgbGltaXRlIGRlIHRhaWxsZSlcbiAgICAgIHRoaXMuY2FjaGUuc2V0KGNhY2hlS2V5LCBjb250ZXh0KTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXCJFcnJvciBhbmFseXppbmcgY29udGV4dDpcIiwgeyBlcnJvciB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmFseXNlIGxlIGNvbnRleHRlIGF1dG91ciBkdSBjdXJzZXVyIGRhbnMgbGUgZG9jdW1lbnQgYWN0dWVsIChhc3luYywgcG91ciBjb21wYXRpYmlsaXTDqSlcbiAgICovXG4gIGFuYWx5emVDb250ZXh0KGVkaXRvcjogRWRpdG9yLCBjdXJzb3JMaW5lOiBudW1iZXIpOiBQcm9taXNlPENvbnRleHRJbmZvPiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmFuYWx5emVDb250ZXh0U3luYyhlZGl0b3IsIGN1cnNvckxpbmUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpc2UgdW5lIGRhdGUgZXh0cmFpdGUgZW4gY2FwaXRhbGlzYW50IGxhIHByZW1pw6hyZSBsZXR0cmVcbiAgICogRXhlbXBsZTogXCJkZW1haW5cIiAtPiBcIkRlbWFpblwiLCBcImx1bmRpIHByb2NoYWluXCIgLT4gXCJMdW5kaSBwcm9jaGFpblwiXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZURhdGUoZGF0ZVN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWRhdGVTdHIgfHwgZGF0ZVN0ci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBkYXRlU3RyO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWQgPSBkYXRlU3RyLnRyaW0oKTtcbiAgICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cmltbWVkO1xuICAgIH1cblxuICAgIC8vIENhcGl0YWxpemUgZWFjaCB3b3JkIGluZGl2aWR1YWxseSwgbm90IGp1c3QgdGhlIGZpcnN0IGNoYXJhY3RlciBvZlxuICAgIC8vIHRoZSB3aG9sZSBzdHJpbmc6IG11bHRpLXdvcmQgbWF0Y2hlcyBmcm9tIHRoZSBwcmVmaXgrd2Vla2RheS9wcmVmaXgrXG4gICAgLy8gdW5pdCBwYXR0ZXJucyAoZS5nLiBcIm5leHQgRnJpZGF5XCIpIHdvdWxkIG90aGVyd2lzZSBoYXZlIHRoZWlyIHNlY29uZFxuICAgIC8vIHdvcmQgZm9yY2VkIHRvIGxvd2VyY2FzZSAoXCJOZXh0IGZyaWRheVwiKSwgaW5jb3JyZWN0bHkgbWFuZ2xpbmdcbiAgICAvLyBjYXBpdGFsaXplZCB3ZWVrZGF5L21vbnRoIG5hbWVzIHRoZSB1c2VyIGFjdHVhbGx5IHR5cGVkLlxuICAgIHJldHVybiB0cmltbWVkXG4gICAgICAuc3BsaXQoL1xccysvKVxuICAgICAgLm1hcCh3b3JkID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCkpXG4gICAgICAuam9pbignICcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhaXQgbGVzIGV4cHJlc3Npb25zIGRlIGRhdGVzIHBvdGVudGllbGxlcyBkdSB0ZXh0ZVxuICAgKiBVdGlsaXNlIGRlcyBwYXR0ZXJucyBkeW5hbWlxdWVzIG11bHRpLWxhbmd1ZSBwb3VyIGTDqXRlY3RlciBsZXMgZGF0ZXMgbmF0dXJlbGxlc1xuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0RGF0ZXNGcm9tQ29udGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZGF0ZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgLy8gVXRpbGlzZXIgbGVzIHBhdHRlcm5zIGR5bmFtaXF1ZXMgZ8OpbsOpcsOpcyBwb3VyIHRvdXRlcyBsZXMgbGFuZ3VlcyBhY3RpdsOpZXNcbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgdGhpcy5kYXRlUGF0dGVybnMpIHtcbiAgICAgIC8vIFRoZSBsZWFkaW5nIGJvdW5kYXJ5IGNvbnN1bWVzIGEgY2hhcmFjdGVyIGluc3RlYWQgb2YgdXNpbmcgYVxuICAgICAgLy8gemVyby13aWR0aCBsb29rYmVoaW5kIChzZWUgaW5pdGlhbGl6ZURhdGVQYXR0ZXJucyksIHNvIHRoZSB0ZXh0IHRvXG4gICAgICAvLyBleHRyYWN0IGlzIHJlYWQgZnJvbSBjYXB0dXJlIGdyb3VwIDEsIG5vdCB0aGUgd2hvbGUgbWF0Y2guXG4gICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIHRleHQubWF0Y2hBbGwocGF0dGVybikpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IG1hdGNoWzFdO1xuICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgIC8vIFBvdXIgbGVzIGxhbmd1ZXMgc2FucyBjYXNzZSAoY29tbWUgbGUgamFwb25haXMpLCB0b0xvd2VyQ2FzZSgpIG5lIGNoYW5nZSByaWVuXG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGNvbnRlbnQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgICAgaWYgKCFzZWVuLmhhcyhub3JtYWxpemVkKSAmJiBkYXRlcy5sZW5ndGggPCBNQVhfREFURVNfVE9fRVhUUkFDVCkge1xuICAgICAgICAgICAgc2Vlbi5hZGQobm9ybWFsaXplZCk7XG4gICAgICAgICAgICAvLyBOb3JtYWxpc2VyIGF2ZWMgbGEgcHJlbWnDqHJlIGxldHRyZSBlbiBtYWp1c2N1bGUgKG91IGxhaXNzZXIgdGVsIHF1ZWwgcG91ciBsZSBqYXBvbmFpcylcbiAgICAgICAgICAgIGRhdGVzLnB1c2godGhpcy5ub3JtYWxpemVEYXRlKGNvbnRlbnQudHJpbSgpKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIE5ldHRvaWUgbGUgY2FjaGUgKHBldXQgw6p0cmUgYXBwZWzDqSBww6lyaW9kaXF1ZW1lbnQpXG4gICAqL1xuICBjbGVhckNhY2hlKCk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRvdXJuZSBsZXMgc3RhdGlzdGlxdWVzIGR1IGNhY2hlIGRlIGNvbnRleHRlXG4gICAqL1xuICBnZXRDYWNoZVN0YXRzKCk6IHsgc2l6ZTogbnVtYmVyOyBtYXhTaXplOiBudW1iZXIgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNpemU6IHRoaXMuY2FjaGUuc2l6ZSxcbiAgICAgIG1heFNpemU6IHRoaXMuY2FjaGUubWF4U2l6ZUxpbWl0LFxuICAgIH07XG4gIH1cbn1cbiIsIi8qKlxuICogQ2xhc3NlIGQnZXJyZXVyIHBlcnNvbm5hbGlzw6llIHBvdXIgTmF0dXJhbCBMYW5ndWFnZSBEYXRlc1xuICovXG5leHBvcnQgY2xhc3MgTkxEUGFyc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRleHQ/OiB1bmtub3duO1xuICBwdWJsaWMgcmVhZG9ubHkgc2V2ZXJpdHk6ICdkZWJ1ZycgfCAnd2FybicgfCAnZXJyb3InO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBjb2RlOiBzdHJpbmcsXG4gICAgc2V2ZXJpdHk6ICdkZWJ1ZycgfCAnd2FybicgfCAnZXJyb3InID0gJ2Vycm9yJyxcbiAgICBjb250ZXh0PzogdW5rbm93blxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnTkxEUGFyc2VFcnJvcic7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICB0aGlzLnNldmVyaXR5ID0gc2V2ZXJpdHk7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcblxuICAgIC8vIE1haW50aWVudCBsYSBzdGFjayB0cmFjZSBwb3VyIGxlIGTDqWJvZ2FnZSAoVjggb25seSlcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIE5MRFBhcnNlRXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvZGVzIGQnZXJyZXVyIGNvbnN0YW50c1xuICovXG5leHBvcnQgY29uc3QgRXJyb3JDb2RlcyA9IHtcbiAgLy8gSW5pdGlhbGlzYXRpb25cbiAgUEFSU0VSX0lOSVRfRkFJTEVEOiAnUEFSU0VSX0lOSVRfRkFJTEVEJyxcbiAgQ0hST05PX0lOSVRfRkFJTEVEOiAnQ0hST05PX0lOSVRfRkFJTEVEJyxcbiAgXG4gIC8vIFBhcnNpbmdcbiAgUEFSU0VfRkFJTEVEOiAnUEFSU0VfRkFJTEVEJyxcbiAgQ0hST05PX1BBUlNFX0VSUk9SOiAnQ0hST05PX1BBUlNFX0VSUk9SJyxcbiAgXG4gIC8vIENvbmZpZ3VyYXRpb25cbiAgU0VUVElOR1NfTE9BRF9GQUlMRUQ6ICdTRVRUSU5HU19MT0FEX0ZBSUxFRCcsXG4gIElOVkFMSURfTEFOR1VBR0U6ICdJTlZBTElEX0xBTkdVQUdFJyxcbn0gYXMgY29uc3Q7XG5cbiIsImltcG9ydCB7IE5vdGljZSwgT2JzaWRpYW5Qcm90b2NvbERhdGEsIFBsdWdpbiB9IGZyb20gXCJvYnNpZGlhblwiO1xuXG5pbXBvcnQgRGF0ZVBpY2tlck1vZGFsIGZyb20gXCIuL21vZGFscy9kYXRlLXBpY2tlclwiO1xuaW1wb3J0IE5MRFBhcnNlciwgeyBOTERSZXN1bHQgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7IE5MRFNldHRpbmdzVGFiLCBOTERTZXR0aW5ncywgREVGQVVMVF9TRVRUSU5HUyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgRGF0ZVN1Z2dlc3QgZnJvbSBcIi4vc3VnZ2VzdC9kYXRlLXN1Z2dlc3RcIjtcbmltcG9ydCB7XG4gIGdldFBhcnNlQ29tbWFuZCxcbiAgZ2V0Q3VycmVudERhdGVDb21tYW5kLFxuICBnZXRDdXJyZW50VGltZUNvbW1hbmQsXG4gIGdldE5vd0NvbW1hbmQsXG59IGZyb20gXCIuL2NvbW1hbmRzXCI7XG5pbXBvcnQgeyBnZXRPckNyZWF0ZURhaWx5Tm90ZSwgcGFyc2VUcnV0aHksIHZhbGlkYXRlVXJpUGFyYW0sIHZhbGlkYXRlTW9tZW50Rm9ybWF0LCBnZXRBY3RpdmVFZGl0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgRGF0ZUZvcm1hdHRlciB9IGZyb20gXCIuL2RhdGUtZm9ybWF0dGVyXCI7XG5pbXBvcnQgSGlzdG9yeU1hbmFnZXIgZnJvbSBcIi4vaGlzdG9yeS1tYW5hZ2VyXCI7XG5pbXBvcnQgQ29udGV4dEFuYWx5emVyIGZyb20gXCIuL2NvbnRleHQtYW5hbHl6ZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dlclwiO1xuaW1wb3J0IHsgTkxEUGFyc2VFcnJvciwgRXJyb3JDb2RlcyB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hdHVyYWxMYW5ndWFnZURhdGVzIGV4dGVuZHMgUGx1Z2luIHtcbiAgcHVibGljIHBhcnNlcjogTkxEUGFyc2VyO1xuICBwdWJsaWMgc2V0dGluZ3M6IE5MRFNldHRpbmdzO1xuICBwdWJsaWMgaGlzdG9yeU1hbmFnZXI6IEhpc3RvcnlNYW5hZ2VyO1xuICBwdWJsaWMgY29udGV4dEFuYWx5emVyOiBDb250ZXh0QW5hbHl6ZXI7XG4gIHByaXZhdGUgbWVtb3J5TW9uaXRvcmluZ0ludGVydmFsOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBNRU1PUllfTU9OSVRPUklOR19JTlRFUlZBTCA9IDYwMDAwMDsgLy8gVG91dGVzIGxlcyAxMCBtaW51dGVzXG5cbiAgYXN5bmMgb25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBwYXJzZXIgaW1tZWRpYXRlbHkgKG5vIG5lZWQgdG8gd2FpdCBmb3Igb25MYXlvdXRSZWFkeSlcbiAgICB0aGlzLnJlc2V0UGFyc2VyKCk7XG5cbiAgICAvLyBJbml0aWFsaXplIHNtYXJ0IHN1Z2dlc3Rpb24gbWFuYWdlcnNcbiAgICB0aGlzLmhpc3RvcnlNYW5hZ2VyID0gbmV3IEhpc3RvcnlNYW5hZ2VyKHRoaXMpO1xuICAgIHRoaXMuY29udGV4dEFuYWx5emVyID0gbmV3IENvbnRleHRBbmFseXplcih0aGlzLmFwcCwgdGhpcyk7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBoaXN0b3J5IGFzeW5jaHJvbm91c2x5XG4gICAgdGhpcy5oaXN0b3J5TWFuYWdlci5pbml0aWFsaXplKCkuY2F0Y2goKGVycjogdW5rbm93bikgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3IgaW5pdGlhbGl6aW5nIGhpc3RvcnlcIiwgeyBlcnJvcjogZXJyIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcbiAgICAgIGlkOiBcIm5scC1kYXRlc1wiLFxuICAgICAgbmFtZTogXCJQYXJzZSBuYXR1cmFsIGxhbmd1YWdlIGRhdGVcIixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBnZXRQYXJzZUNvbW1hbmQodGhpcywgXCJyZXBsYWNlXCIpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcbiAgICAgIGlkOiBcIm5scC1kYXRlcy1saW5rXCIsXG4gICAgICBuYW1lOiBcIlBhcnNlIG5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSAoYXMgbGluaylcIixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBnZXRQYXJzZUNvbW1hbmQodGhpcywgXCJsaW5rXCIpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcbiAgICAgIGlkOiBcIm5scC1kYXRlLWNsZWFuXCIsXG4gICAgICBuYW1lOiBcIlBhcnNlIG5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSAoYXMgcGxhaW4gdGV4dClcIixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBnZXRQYXJzZUNvbW1hbmQodGhpcywgXCJjbGVhblwiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtcGFyc2UtdGltZVwiLFxuICAgICAgbmFtZTogXCJQYXJzZSBuYXR1cmFsIGxhbmd1YWdlIHRpbWVcIixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBnZXRQYXJzZUNvbW1hbmQodGhpcywgXCJ0aW1lXCIpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcbiAgICAgIGlkOiBcIm5scC1ub3dcIixcbiAgICAgIG5hbWU6IFwiSW5zZXJ0IHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWVcIixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBnZXROb3dDb21tYW5kKHRoaXMpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcbiAgICAgIGlkOiBcIm5scC10b2RheVwiLFxuICAgICAgbmFtZTogXCJJbnNlcnQgdGhlIGN1cnJlbnQgZGF0ZVwiLFxuICAgICAgY2FsbGJhY2s6ICgpID0+IGdldEN1cnJlbnREYXRlQ29tbWFuZCh0aGlzKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtdGltZVwiLFxuICAgICAgbmFtZTogXCJJbnNlcnQgdGhlIGN1cnJlbnQgdGltZVwiLFxuICAgICAgY2FsbGJhY2s6ICgpID0+IGdldEN1cnJlbnRUaW1lQ29tbWFuZCh0aGlzKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtcGlja2VyXCIsXG4gICAgICBuYW1lOiBcIkRhdGUgcGlja2VyXCIsXG4gICAgICBjaGVja0NhbGxiYWNrOiAoY2hlY2tpbmc6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKGNoZWNraW5nKSB7XG4gICAgICAgICAgcmV0dXJuICEhZ2V0QWN0aXZlRWRpdG9yKHRoaXMuYXBwLndvcmtzcGFjZSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3IERhdGVQaWNrZXJNb2RhbCh0aGlzLmFwcCwgdGhpcykub3BlbigpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgTkxEU2V0dGluZ3NUYWIodGhpcy5hcHAsIHRoaXMpKTtcbiAgICB0aGlzLnJlZ2lzdGVyT2JzaWRpYW5Qcm90b2NvbEhhbmRsZXIoXCJubGRhdGVzXCIsIHBhcmFtcyA9PiB0aGlzLmFjdGlvbkhhbmRsZXIocGFyYW1zKSk7XG4gICAgdGhpcy5yZWdpc3RlckVkaXRvclN1Z2dlc3QobmV3IERhdGVTdWdnZXN0KHRoaXMuYXBwLCB0aGlzKSk7XG5cbiAgICAvLyBEw6ltYXJyZXIgbGUgbW9uaXRvcmluZyBkZSBsYSBtw6ltb2lyZVxuICAgIHRoaXMuc3RhcnRNZW1vcnlNb25pdG9yaW5nKCk7XG4gIH1cblxuICByZXNldFBhcnNlcigpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5wYXJzZXIgPSBuZXcgTkxEUGFyc2VyKHRoaXMuc2V0dGluZ3MubGFuZ3VhZ2VzKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIlBhcnNlciBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHlcIiwgeyBsYW5ndWFnZXM6IHRoaXMuc2V0dGluZ3MubGFuZ3VhZ2VzIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBwYXJzZUVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBOTERQYXJzZUVycm9yIFxuICAgICAgICA/IGVycm9yIFxuICAgICAgICA6IG5ldyBOTERQYXJzZUVycm9yKFxuICAgICAgICAgICAgJ0ZhaWxlZCB0byBpbml0aWFsaXplIHBhcnNlcicsXG4gICAgICAgICAgICBFcnJvckNvZGVzLlBBUlNFUl9JTklUX0ZBSUxFRCxcbiAgICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgICB7IG9yaWdpbmFsRXJyb3I6IGVycm9yLCBsYW5ndWFnZXM6IHRoaXMuc2V0dGluZ3MubGFuZ3VhZ2VzIH1cbiAgICAgICAgICApO1xuICAgICAgXG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIHBhcnNlcicsIHtcbiAgICAgICAgY29kZTogcGFyc2VFcnJvci5jb2RlLFxuICAgICAgICBlcnJvcjogcGFyc2VFcnJvci5tZXNzYWdlLFxuICAgICAgICBjb250ZXh0OiBwYXJzZUVycm9yLmNvbnRleHQsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIHBhcnNlciB3aXRoIEVuZ2xpc2ggYXMgZGVmYXVsdCBpbiBjYXNlIG9mIGVycm9yIHRvIHByZXZlbnQgcGx1Z2luIGZyb20gY3Jhc2hpbmcgY29tcGxldGVseVxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5wYXJzZXIgPSBuZXcgTkxEUGFyc2VyKFsnZW4nXSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdQYXJzZXIgaW5pdGlhbGl6ZWQgd2l0aCBFbmdsaXNoIGZhbGxiYWNrJyk7XG4gICAgICAgIFxuICAgICAgICAvLyBOb3RpZmllciBsJ3V0aWxpc2F0ZXVyIHVuaXF1ZW1lbnQgcG91ciBsZXMgZXJyZXVycyBjcml0aXF1ZXNcbiAgICAgICAgbmV3IE5vdGljZShcbiAgICAgICAgICAnTmF0dXJhbCBMYW5ndWFnZSBEYXRlczogRmFpbGVkIHRvIGluaXRpYWxpemUgd2l0aCBzZWxlY3RlZCBsYW5ndWFnZXMuIFVzaW5nIEVuZ2xpc2ggYXMgZmFsbGJhY2suJyxcbiAgICAgICAgICA1MDAwXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChmYWxsYmFja0Vycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGluaXRpYWxpemUgcGFyc2VyIGV2ZW4gd2l0aCBFbmdsaXNoIGZhbGxiYWNrJywgeyBlcnJvcjogZmFsbGJhY2tFcnJvciB9KTtcbiAgICAgICAgbmV3IE5vdGljZShcbiAgICAgICAgICAnTmF0dXJhbCBMYW5ndWFnZSBEYXRlczogQ3JpdGljYWwgZXJyb3IgLSBwYXJzZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBQbGVhc2UgcmVzdGFydCBPYnNpZGlhbi4nLFxuICAgICAgICAgIDEwMDAwXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFJlc2V0IGNvbnRleHQgcGF0dGVybnMgd2hlbiBsYW5ndWFnZXMgY2hhbmdlXG4gICAgaWYgKHRoaXMuY29udGV4dEFuYWx5emVyKSB7XG4gICAgICB0aGlzLmNvbnRleHRBbmFseXplci5yZXNldFBhdHRlcm5zKCk7XG4gICAgfVxuICB9XG5cbiAgb251bmxvYWQoKTogdm9pZCB7XG4gICAgLy8gQXJyw6p0ZXIgbGUgbW9uaXRvcmluZyBkZSBsYSBtw6ltb2lyZVxuICAgIHRoaXMuc3RvcE1lbW9yeU1vbml0b3JpbmcoKTtcbiAgICBcbiAgICAvLyBOZXR0b3llciBsZXMgcmVzc291cmNlc1xuICAgIGlmICh0aGlzLmNvbnRleHRBbmFseXplcikge1xuICAgICAgdGhpcy5jb250ZXh0QW5hbHl6ZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oaXN0b3J5TWFuYWdlcikge1xuICAgICAgdGhpcy5oaXN0b3J5TWFuYWdlci5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIETDqW1hcnJlIGxlIG1vbml0b3JpbmcgcMOpcmlvZGlxdWUgZGUgbCd1dGlsaXNhdGlvbiBtw6ltb2lyZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydE1lbW9yeU1vbml0b3JpbmcoKTogdm9pZCB7XG4gICAgLy8gTG9nZ2VyIGxlcyBzdGF0aXN0aXF1ZXMgdG91dGVzIGxlcyAxMCBtaW51dGVzXG4gICAgdGhpcy5tZW1vcnlNb25pdG9yaW5nSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5sb2dNZW1vcnlVc2FnZSgpO1xuICAgIH0sIHRoaXMuTUVNT1JZX01PTklUT1JJTkdfSU5URVJWQUwpO1xuICAgIFxuICAgIC8vIExvZ2dlciBpbW3DqWRpYXRlbWVudCBhdSBkw6ltYXJyYWdlXG4gICAgdGhpcy5sb2dNZW1vcnlVc2FnZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFycsOqdGUgbGUgbW9uaXRvcmluZyBkZSBsYSBtw6ltb2lyZVxuICAgKi9cbiAgcHJpdmF0ZSBzdG9wTWVtb3J5TW9uaXRvcmluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tZW1vcnlNb25pdG9yaW5nSW50ZXJ2YWwgIT09IG51bGwpIHtcbiAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMubWVtb3J5TW9uaXRvcmluZ0ludGVydmFsKTtcbiAgICAgIHRoaXMubWVtb3J5TW9uaXRvcmluZ0ludGVydmFsID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9nIGxlcyBzdGF0aXN0aXF1ZXMgZCd1dGlsaXNhdGlvbiBtw6ltb2lyZSBkZXMgY2FjaGVzXG4gICAqL1xuICBwcml2YXRlIGxvZ01lbW9yeVVzYWdlKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0czoge1xuICAgICAgICBwYXJzaW5nQ2FjaGU/OiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH07XG4gICAgICAgIGNvbnRleHRDYWNoZT86IHsgc2l6ZTogbnVtYmVyOyBtYXhTaXplOiBudW1iZXIgfTtcbiAgICAgICAgaGlzdG9yeT86IHsgc2l6ZTogbnVtYmVyOyBtYXhTaXplOiBudW1iZXIgfTtcbiAgICAgIH0gPSB7fTtcblxuICAgICAgLy8gU3RhdGlzdGlxdWVzIGR1IGNhY2hlIGRlIHBhcnNpbmdcbiAgICAgIGlmICh0aGlzLnBhcnNlcikge1xuICAgICAgICBzdGF0cy5wYXJzaW5nQ2FjaGUgPSB0aGlzLnBhcnNlci5nZXRDYWNoZVN0YXRzKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0YXRpc3RpcXVlcyBkdSBjYWNoZSBkZSBjb250ZXh0ZVxuICAgICAgaWYgKHRoaXMuY29udGV4dEFuYWx5emVyKSB7XG4gICAgICAgIHN0YXRzLmNvbnRleHRDYWNoZSA9IHRoaXMuY29udGV4dEFuYWx5emVyLmdldENhY2hlU3RhdHMoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RhdGlzdGlxdWVzIGRlIGwnaGlzdG9yaXF1ZVxuICAgICAgaWYgKHRoaXMuaGlzdG9yeU1hbmFnZXIpIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5TWFuYWdlci5nZXRIaXN0b3J5KCkudGhlbihoaXN0b3J5ID0+IHtcbiAgICAgICAgICBzdGF0cy5oaXN0b3J5ID0ge1xuICAgICAgICAgICAgc2l6ZTogT2JqZWN0LmtleXMoaGlzdG9yeSkubGVuZ3RoLFxuICAgICAgICAgICAgbWF4U2l6ZTogMTAwLCAvLyBNQVhfSElTVE9SWV9TSVpFXG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgICBsb2dnZXIuZGVidWcoXCJVdGlsaXNhdGlvbiBtw6ltb2lyZSBkZXMgY2FjaGVzXCIsIHN0YXRzKTtcbiAgICAgICAgfSkuY2F0Y2goKGVycjogdW5rbm93bikgPT4ge1xuICAgICAgICAgIGxvZ2dlci53YXJuKFwiSW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciBsZXMgc3RhdGlzdGlxdWVzIGRlIGwnaGlzdG9yaXF1ZVwiLCB7IGVycm9yOiBlcnIgfSk7XG4gICAgICAgICAgLy8gTG9nZ2VyIHF1YW5kIG3Dqm1lIGxlcyBhdXRyZXMgc3RhdGlzdGlxdWVzXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHN0YXRzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoXCJVdGlsaXNhdGlvbiBtw6ltb2lyZSBkZXMgY2FjaGVzXCIsIHN0YXRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHN0YXRzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKFwiVXRpbGlzYXRpb24gbcOpbW9pcmUgZGVzIGNhY2hlc1wiLCBzdGF0cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oXCJFcnJldXIgbG9ycyBkdSBtb25pdG9yaW5nIGRlIGxhIG3DqW1vaXJlXCIsIHsgZXJyb3IgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZFNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGxvYWRlZERhdGEgPSBhd2FpdCB0aGlzLmxvYWREYXRhKCkgYXMgUGFydGlhbDxOTERTZXR0aW5ncz4gfCBudWxsO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1NFVFRJTkdTLCBsb2FkZWREYXRhKTtcbiAgICBcbiAgICAvLyBFbnN1cmUgbGFuZ3VhZ2VzIGlzIG5vdCBlbXB0eSAodXNlIGRlZmF1bHQgdmFsdWVzIGlmIG5lY2Vzc2FyeSlcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3MubGFuZ3VhZ2VzIHx8IHRoaXMuc2V0dGluZ3MubGFuZ3VhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zZXR0aW5ncy5sYW5ndWFnZXMgPSBbLi4uREVGQVVMVF9TRVRUSU5HUy5sYW5ndWFnZXNdO1xuICAgIH1cbiAgICBcbiAgICAvLyBTeW5jaHJvbml6ZSBmbGFncyB3aXRoIGxhbmd1YWdlcyBhcnJheSBpZiBuZWNlc3NhcnlcbiAgICB0aGlzLnN5bmNMYW5ndWFnZUZsYWdzKCk7XG4gIH1cblxuICAvLyBTeW5jaHJvbml6ZXMgbGFuZ3VhZ2UgZmxhZ3MgKGVuZ2xpc2gsIGZyZW5jaCwgZXRjLikgd2l0aCBsYW5ndWFnZXMgYXJyYXlcbiAgcHJpdmF0ZSBzeW5jTGFuZ3VhZ2VGbGFncygpOiB2b2lkIHtcbiAgICBjb25zdCBsYW5ndWFnZU1hcDogeyBba2V5OiBzdHJpbmddOiBrZXlvZiBOTERTZXR0aW5ncyB9ID0ge1xuICAgICAgJ2VuJzogJ2VuZ2xpc2gnLFxuICAgICAgJ2phJzogJ2phcGFuZXNlJyxcbiAgICAgICdmcic6ICdmcmVuY2gnLFxuICAgICAgJ2RlJzogJ2dlcm1hbicsXG4gICAgICAncHQnOiAncG9ydHVndWVzZScsXG4gICAgICAnbmwnOiAnZHV0Y2gnLFxuICAgICAgJ2VzJzogJ3NwYW5pc2gnLFxuICAgICAgJ2l0JzogJ2l0YWxpYW4nLFxuICAgICAgJ3J1JzogJ3J1c3NpYW4nLFxuICAgICAgJ3VrJzogJ3VrcmFpbmlhbicsXG4gICAgICAnemguaGFudCc6ICdjaGluZXNlJyxcbiAgICB9O1xuICAgIFxuICAgIC8vIFJlc2V0IGFsbCBmbGFnc1xuICAgIHRoaXMuc2V0dGluZ3MuZW5nbGlzaCA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MuamFwYW5lc2UgPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLmZyZW5jaCA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MuZ2VybWFuID0gZmFsc2U7XG4gICAgdGhpcy5zZXR0aW5ncy5wb3J0dWd1ZXNlID0gZmFsc2U7XG4gICAgdGhpcy5zZXR0aW5ncy5kdXRjaCA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3Muc3BhbmlzaCA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MuaXRhbGlhbiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MucnVzc2lhbiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MudWtyYWluaWFuID0gZmFsc2U7XG4gICAgdGhpcy5zZXR0aW5ncy5jaGluZXNlID0gZmFsc2U7XG4gICAgXG4gICAgLy8gRW5hYmxlIGZsYWdzIGNvcnJlc3BvbmRpbmcgdG8gbGFuZ3VhZ2VzIGluIGFycmF5XG4gICAgZm9yIChjb25zdCBsYW5nIG9mIHRoaXMuc2V0dGluZ3MubGFuZ3VhZ2VzKSB7XG4gICAgICBjb25zdCBmbGFnS2V5ID0gbGFuZ3VhZ2VNYXBbbGFuZ107XG4gICAgICBpZiAoZmxhZ0tleSkge1xuICAgICAgICAodGhpcy5zZXR0aW5nc1tmbGFnS2V5XSBhcyBib29sZWFuKSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZVNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIGEgbmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZyBhbmQgZm9ybWF0cyBpdCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQuXG4gICAqIFxuICAgKiBUaGlzIGlzIHRoZSBjb3JlIHBhcnNpbmcgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIGN1c3RvbSBmb3JtYXQgc3RyaW5nLlxuICAgKiBUaGUgaW5wdXQgaXMgdmFsaWRhdGVkIGFuZCBzYW5pdGl6ZWQgYmVmb3JlIHBhcnNpbmcuXG4gICAqIFxuICAgKiBAcGFyYW0gZGF0ZVN0cmluZyAtIE5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSBzdHJpbmcgKGUuZy4sIFwidG9kYXlcIiwgXCJ0b21vcnJvd1wiLCBcImluIDIgZGF5c1wiLCBcIm5leHQgTW9uZGF5XCIpXG4gICAqIEBwYXJhbSBmb3JtYXQgLSBNb21lbnQuanMgZm9ybWF0IHN0cmluZyAoZS5nLiwgXCJZWVlZLU1NLUREXCIsIFwiREQvTU0vWVlZWVwiLCBcIk1NTU0gRG8sIFlZWVlcIilcbiAgICogQHJldHVybnMgTkxEUmVzdWx0IG9iamVjdCBjb250YWluaW5nIHRoZSBmb3JtYXR0ZWQgc3RyaW5nLCBEYXRlIG9iamVjdCwgYW5kIE1vbWVudCBvYmplY3RcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzdWx0ID0gcGx1Z2luLnBhcnNlKFwidG9tb3Jyb3dcIiwgXCJZWVlZLU1NLUREXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9ybWF0dGVkU3RyaW5nKTsgLy8gXCIyMDI1LTAxLTA2XCJcbiAgICogXG4gICAqIGNvbnN0IHJlc3VsdDIgPSBwbHVnaW4ucGFyc2UoXCJuZXh0IE1vbmRheVwiLCBcImRkZGQsIE1NTU0gRG9cIik7XG4gICAqIGNvbnNvbGUubG9nKHJlc3VsdDIuZm9ybWF0dGVkU3RyaW5nKTsgLy8gXCJNb25kYXksIEphbnVhcnkgNnRoXCJcbiAgICogYGBgXG4gICAqL1xuICBwYXJzZShkYXRlU3RyaW5nOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nKTogTkxEUmVzdWx0IHtcbiAgICBpZiAoIXRoaXMucGFyc2VyKSB7XG4gICAgICAvLyBQYXJzZXIgbm90IHlldCBpbml0aWFsaXplZCwgaW5pdGlhbGl6ZSBpdCBub3dcbiAgICAgIHRoaXMucmVzZXRQYXJzZXIoKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGVyIGxlIGZvcm1hdCBhdmFudCB1dGlsaXNhdGlvblxuICAgIGNvbnN0IGZvcm1hdFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdChmb3JtYXQpO1xuICAgIGlmICghZm9ybWF0VmFsaWRhdGlvbi52YWxpZCkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJJbnZhbGlkIGZvcm1hdCBpbiBwYXJzZSgpXCIsIHsgZm9ybWF0LCBlcnJvcjogZm9ybWF0VmFsaWRhdGlvbi5lcnJvciB9KTtcbiAgICAgIC8vIFV0aWxpc2VyIGxlIGZvcm1hdCBwYXIgZMOpZmF1dCBlbiBjYXMgZCdlcnJldXJcbiAgICAgIGZvcm1hdCA9IERFRkFVTFRfU0VUVElOR1MuZm9ybWF0O1xuICAgIH1cblxuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGwnZW50csOpZSB1dGlsaXNhdGV1clxuICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gdmFsaWRhdGVVcmlQYXJhbShkYXRlU3RyaW5nLCAyMDApO1xuICAgIGlmICghc2FuaXRpemVkSW5wdXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBpbnB1dCBpbiBwYXJzZSgpXCIsIHsgZGF0ZVN0cmluZyB9KTtcbiAgICAgIC8vIFJldG91cm5lciB1bmUgZGF0ZSBpbnZhbGlkZSBwbHV0w7R0IHF1ZSBkZSBwbGFudGVyXG4gICAgICBjb25zdCBpbnZhbGlkRGF0ZSA9IG5ldyBEYXRlKE5hTik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IFwiSW52YWxpZCBkYXRlXCIsXG4gICAgICAgIGRhdGU6IGludmFsaWREYXRlLFxuICAgICAgICBtb21lbnQ6IG1vbWVudChpbnZhbGlkRGF0ZSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGUgPSB0aGlzLnBhcnNlci5nZXRQYXJzZWREYXRlKHNhbml0aXplZElucHV0LCB0aGlzLnNldHRpbmdzLndlZWtTdGFydCk7XG4gICAgY29uc3QgZm9ybWF0dGVkU3RyaW5nID0gRGF0ZUZvcm1hdHRlci5mb3JtYXQoZGF0ZSwgZm9ybWF0KTtcbiAgICBpZiAoZm9ybWF0dGVkU3RyaW5nID09PSBcIkludmFsaWQgZGF0ZVwiKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJJbnB1dCBkYXRlIGNhbid0IGJlIHBhcnNlZCBieSBubGRhdGVzXCIsIHsgZGF0ZVN0cmluZzogc2FuaXRpemVkSW5wdXQgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1hdHRlZFN0cmluZyxcbiAgICAgIGRhdGUsXG4gICAgICBtb21lbnQ6IG1vbWVudChkYXRlKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIG5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSBzdHJpbmcgdXNpbmcgdGhlIHBsdWdpbidzIGNvbmZpZ3VyZWQgZGF0ZSBmb3JtYXQuXG4gICAqIFxuICAgKiBBdXRvbWF0aWNhbGx5IGRldGVjdHMgaWYgdGhlIGlucHV0IGNvbnRhaW5zIGEgdGltZSBjb21wb25lbnQgYW5kIGluY2x1ZGVzIGl0IGluIHRoZSBvdXRwdXQuXG4gICAqIFVzZXMgdGhlIGZvcm1hdCBmcm9tIHBsdWdpbiBzZXR0aW5ncyAoZGVmYXVsdDogXCJZWVlZLU1NLUREXCIpLlxuICAgKiBcbiAgICogQHBhcmFtIGRhdGVTdHJpbmcgLSBOYXR1cmFsIGxhbmd1YWdlIGRhdGUgc3RyaW5nIChlLmcuLCBcInRvZGF5XCIsIFwidG9tb3Jyb3dcIiwgXCJuZXh0IE1vbmRheSBhdCAzcG1cIilcbiAgICogQHJldHVybnMgTkxEUmVzdWx0IG9iamVjdCB3aXRoIGZvcm1hdHRlZCBzdHJpbmcgdXNpbmcgY29uZmlndXJlZCBmb3JtYXRcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gSWYgc2V0dGluZ3MuZm9ybWF0IGlzIFwiWVlZWS1NTS1ERFwiIGFuZCBzZXR0aW5ncy50aW1lRm9ybWF0IGlzIFwiSEg6bW1cIlxuICAgKiBjb25zdCByZXN1bHQgPSBwbHVnaW4ucGFyc2VEYXRlKFwidG9tb3Jyb3dcIik7XG4gICAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb3JtYXR0ZWRTdHJpbmcpOyAvLyBcIjIwMjUtMDEtMDZcIlxuICAgKiBcbiAgICogY29uc3QgcmVzdWx0MiA9IHBsdWdpbi5wYXJzZURhdGUoXCJuZXh0IE1vbmRheSBhdCAzcG1cIik7XG4gICAqIGNvbnNvbGUubG9nKHJlc3VsdDIuZm9ybWF0dGVkU3RyaW5nKTsgLy8gXCIyMDI1LTAxLTA2IDE1OjAwXCJcbiAgICogYGBgXG4gICAqL1xuICBwYXJzZURhdGUoZGF0ZVN0cmluZzogc3RyaW5nKTogTkxEUmVzdWx0IHtcbiAgICAvLyBWYWxpZGVyIGV0IHNhbml0aXplciBsJ2VudHLDqWUgdXRpbGlzYXRldXJcbiAgICBjb25zdCBzYW5pdGl6ZWRJbnB1dCA9IHZhbGlkYXRlVXJpUGFyYW0oZGF0ZVN0cmluZywgMjAwKTtcbiAgICBpZiAoIXNhbml0aXplZElucHV0KSB7XG4gICAgICBsb2dnZXIud2FybihcIkludmFsaWQgaW5wdXQgaW4gcGFyc2VEYXRlKClcIiwgeyBkYXRlU3RyaW5nIH0pO1xuICAgICAgY29uc3QgaW52YWxpZERhdGUgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9ybWF0dGVkU3RyaW5nOiBcIkludmFsaWQgZGF0ZVwiLFxuICAgICAgICBkYXRlOiBpbnZhbGlkRGF0ZSxcbiAgICAgICAgbW9tZW50OiBtb21lbnQoaW52YWxpZERhdGUpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucGFyc2VyKSB7XG4gICAgICB0aGlzLnJlc2V0UGFyc2VyKCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBleHByZXNzaW9uIHJlc29sdmVzIHRvIGEgd2hvbGUgd2Vlay9tb250aC9xdWFydGVyL3llYXIgKGUuZy5cbiAgICAvLyBcIm5leHQgcXVhcnRlclwiLCBcIlEzIDIwMjZcIikgYW5kIGEgcGVyaW9kaWMtbm90ZSBmb3JtYXQgaXMgY29uZmlndXJlZCBmb3JcbiAgICAvLyB0aGF0IGdyYW51bGFyaXR5LCB1c2UgaXQgaW4gcGxhY2Ugb2YgdGhlIGRhaWx5IGZvcm1hdCAtLSBza2lwIHRoZVxuICAgIC8vIFwiQXNrIHRoZSBwYXJzZXIgaWYgdGltZSBpcyBkZXRlY3RlZFwiIGRhbmNlIGVudGlyZWx5IGJlbG93LCBzaW5jZSBhXG4gICAgLy8gcGVyaW9kIHJlZmVyZW5jZSBoYXMgbm8gdGltZS1vZi1kYXkgdG8gY2FycnkuXG4gICAgY29uc3QgeyBkYXRlOiBwZXJpb2REYXRlLCBncmFudWxhcml0eSB9ID0gdGhpcy5wYXJzZXIuZ2V0UGFyc2VkUGVyaW9kKHNhbml0aXplZElucHV0LCB0aGlzLnNldHRpbmdzLndlZWtTdGFydCk7XG4gICAgY29uc3QgZ3JhbnVsYXJpdHlGb3JtYXQgPSB0aGlzLmdldFBlcmlvZGljRm9ybWF0KGdyYW51bGFyaXR5KTtcbiAgICBpZiAoZ3JhbnVsYXJpdHlGb3JtYXQpIHtcbiAgICAgIGNvbnN0IGdyYW51bGFyaXR5Rm9ybWF0VmFsaWRhdGlvbiA9IHZhbGlkYXRlTW9tZW50Rm9ybWF0KGdyYW51bGFyaXR5Rm9ybWF0KTtcbiAgICAgIGNvbnN0IGZvcm1hdFRvVXNlID0gZ3JhbnVsYXJpdHlGb3JtYXRWYWxpZGF0aW9uLnZhbGlkID8gZ3JhbnVsYXJpdHlGb3JtYXQgOiB0aGlzLnNldHRpbmdzLmZvcm1hdDtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZFN0cmluZyA9IERhdGVGb3JtYXR0ZXIuZm9ybWF0KHBlcmlvZERhdGUsIGZvcm1hdFRvVXNlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvcm1hdHRlZFN0cmluZyxcbiAgICAgICAgZGF0ZTogcGVyaW9kRGF0ZSxcbiAgICAgICAgbW9tZW50OiBtb21lbnQocGVyaW9kRGF0ZSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFZhbGlkZXIgbGUgZm9ybWF0IGRlIGRhdGVcbiAgICBjb25zdCBkYXRlRm9ybWF0VmFsaWRhdGlvbiA9IHZhbGlkYXRlTW9tZW50Rm9ybWF0KHRoaXMuc2V0dGluZ3MuZm9ybWF0KTtcbiAgICBpZiAoIWRhdGVGb3JtYXRWYWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICBsb2dnZXIud2FybihcIkludmFsaWQgZGF0ZSBmb3JtYXQgaW4gc2V0dGluZ3NcIiwgeyBmb3JtYXQ6IHRoaXMuc2V0dGluZ3MuZm9ybWF0LCBlcnJvcjogZGF0ZUZvcm1hdFZhbGlkYXRpb24uZXJyb3IgfSk7XG4gICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXRcbiAgICAgIHRoaXMuc2V0dGluZ3MuZm9ybWF0ID0gREVGQVVMVF9TRVRUSU5HUy5mb3JtYXQ7XG4gICAgfVxuXG4gICAgLy8gMS4gQXNrIHRoZSBwYXJzZXIgaWYgdGltZSBpcyBkZXRlY3RlZFxuICAgIGNvbnN0IGhhc1RpbWUgPSB0aGlzLnBhcnNlci5oYXNUaW1lQ29tcG9uZW50KHNhbml0aXplZElucHV0KTtcbiAgICBsZXQgZm9ybWF0VG9Vc2UgPSB0aGlzLnNldHRpbmdzLmZvcm1hdDtcblxuICAgIC8vIDIuIElmIHRpbWUgaXMgZGV0ZWN0ZWQuLi5cbiAgICBpZiAoaGFzVGltZSkge1xuICAgICAgY29uc3QgdGltZUZvcm1hdCA9IHRoaXMuc2V0dGluZ3MudGltZUZvcm1hdCB8fCBcIkhIOm1tXCI7XG5cbiAgICAgIC8vIFZhbGlkZXIgbGUgZm9ybWF0IGRlIHRlbXBzXG4gICAgICBjb25zdCB0aW1lRm9ybWF0VmFsaWRhdGlvbiA9IHZhbGlkYXRlTW9tZW50Rm9ybWF0KHRpbWVGb3JtYXQpO1xuICAgICAgaWYgKCF0aW1lRm9ybWF0VmFsaWRhdGlvbi52YWxpZCkge1xuICAgICAgICBsb2dnZXIud2FybihcIkludmFsaWQgdGltZSBmb3JtYXQgaW4gc2V0dGluZ3NcIiwgeyBmb3JtYXQ6IHRpbWVGb3JtYXQsIGVycm9yOiB0aW1lRm9ybWF0VmFsaWRhdGlvbi5lcnJvciB9KTtcbiAgICAgICAgLy8gVXRpbGlzZXIgbGUgZm9ybWF0IHBhciBkw6lmYXV0XG4gICAgICAgIGZvcm1hdFRvVXNlID0gYCR7dGhpcy5zZXR0aW5ncy5mb3JtYXR9ICR7REVGQVVMVF9TRVRUSU5HUy50aW1lRm9ybWF0fWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUSVA6IEhlcmUgd2UgZm9ybWF0IFwiRGF0ZSBUSU1FLlwiXG4gICAgICAgIC8vIEJ1dCBCRVdBUkU6IGl0IGlzIHRoZSBcImRhdGUtc3VnZ2VzdC50c1wiIGZpbGUgdGhhdCB3aWxsIGFkZCB0aGUgW1sgXV0uXG4gICAgICAgIC8vIElmIHdlIGRvbid0IHRvdWNoIGRhdGUtc3VnZ2VzdCwgaXQgd2lsbCBtYWtlIFtbRGF0ZSBUaW1lXV0uXG4gICAgICAgIC8vIFRvIG1ha2UgW1tEYXRlXV0gVGltZSwgd2UgaGF2ZSB0byBiZSBjbGV2ZXIuXG5cbiAgICAgICAgZm9ybWF0VG9Vc2UgPSBgJHtmb3JtYXRUb1VzZX0gJHt0aW1lRm9ybWF0fWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wYXJzZShzYW5pdGl6ZWRJbnB1dCwgZm9ybWF0VG9Vc2UpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29uZmlndXJlZCBwZXJpb2RpYy1ub3RlIGZvcm1hdCBmb3IgYSBnaXZlbiBncmFudWxhcml0eVxuICAgKiAod2Vlay9tb250aC9xdWFydGVyL3llYXIpLCBvciBcIlwiIGlmIHVuc2V0IG9yIHRoZSBncmFudWxhcml0eSBpcyBcImRheVwiLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQZXJpb2RpY0Zvcm1hdChncmFudWxhcml0eTogXCJkYXlcIiB8IFwid2Vla1wiIHwgXCJtb250aFwiIHwgXCJxdWFydGVyXCIgfCBcInllYXJcIik6IHN0cmluZyB7XG4gICAgc3dpdGNoIChncmFudWxhcml0eSkge1xuICAgICAgY2FzZSBcIndlZWtcIjogcmV0dXJuIHRoaXMuc2V0dGluZ3Mud2Vla0Zvcm1hdDtcbiAgICAgIGNhc2UgXCJtb250aFwiOiByZXR1cm4gdGhpcy5zZXR0aW5ncy5tb250aEZvcm1hdDtcbiAgICAgIGNhc2UgXCJxdWFydGVyXCI6IHJldHVybiB0aGlzLnNldHRpbmdzLnF1YXJ0ZXJGb3JtYXQ7XG4gICAgICBjYXNlIFwieWVhclwiOiByZXR1cm4gdGhpcy5zZXR0aW5ncy55ZWFyRm9ybWF0O1xuICAgICAgZGVmYXVsdDogcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIG5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSByYW5nZSBzdHJpbmcuXG4gICAqIFxuICAgKiBTdXBwb3J0cyB2YXJpb3VzIHJhbmdlIGV4cHJlc3Npb25zOlxuICAgKiAtIFdlZWtkYXkgcmFuZ2VzOiBcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiIC8gXCJkZSBsdW5kaSDDoCB2ZW5kcmVkaVwiXG4gICAqIC0gV2VlayByYW5nZXM6IFwibmV4dCB3ZWVrXCIgLyBcInNlbWFpbmUgcHJvY2hhaW5lXCIgKHJldHVybnMgYWxsIGRheXMgb2YgdGhlIHdlZWspXG4gICAqIFxuICAgKiBUaGUgcmVzdWx0IGluY2x1ZGVzIGEgbGlzdCBvZiBhbGwgZGF0ZXMgaW4gdGhlIHJhbmdlIGZvciBlYXN5IGl0ZXJhdGlvbi5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHJhbmdlIHN0cmluZ1xuICAgKiBAcmV0dXJucyBOTERSYW5nZVJlc3VsdCBvYmplY3Qgd2l0aCBzdGFydC9lbmQgZGF0ZXMgYW5kIGRhdGUgbGlzdCwgb3IgbnVsbCBpZiBub3QgYSByYW5nZVxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByYW5nZSA9IHBsdWdpbi5wYXJzZURhdGVSYW5nZShcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiKTtcbiAgICogaWYgKHJhbmdlKSB7XG4gICAqICAgY29uc29sZS5sb2cocmFuZ2Uuc3RhcnREYXRlKTsgLy8gRGF0ZSBmb3IgTW9uZGF5XG4gICAqICAgY29uc29sZS5sb2cocmFuZ2UuZW5kRGF0ZSk7IC8vIERhdGUgZm9yIEZyaWRheVxuICAgKiAgIGNvbnNvbGUubG9nKHJhbmdlLmRhdGVMaXN0Py5sZW5ndGgpOyAvLyA1XG4gICAqICAgXG4gICAqICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBkYXRlcyBpbiByYW5nZVxuICAgKiAgIHJhbmdlLmRhdGVMaXN0Py5mb3JFYWNoKGRhdGUgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2coZGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpKTtcbiAgICogICB9KTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHBhcnNlRGF0ZVJhbmdlKGRhdGVTdHJpbmc6IHN0cmluZyk6IGltcG9ydChcIi4vcGFyc2VyXCIpLk5MRFJhbmdlUmVzdWx0IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgdGhpcy5yZXNldFBhcnNlcigpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGwnZW50csOpZSB1dGlsaXNhdGV1clxuICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gdmFsaWRhdGVVcmlQYXJhbShkYXRlU3RyaW5nLCAyMDApO1xuICAgIGlmICghc2FuaXRpemVkSW5wdXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBpbnB1dCBpbiBwYXJzZURhdGVSYW5nZSgpXCIsIHsgZGF0ZVN0cmluZyB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBhcnNlci5nZXRQYXJzZWREYXRlUmFuZ2Uoc2FuaXRpemVkSW5wdXQsIHRoaXMuc2V0dGluZ3Mud2Vla1N0YXJ0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBuYXR1cmFsIGxhbmd1YWdlIHRpbWUgc3RyaW5nIHVzaW5nIHRoZSBwbHVnaW4ncyBjb25maWd1cmVkIHRpbWUgZm9ybWF0LlxuICAgKiBcbiAgICogRXh0cmFjdHMgb25seSB0aGUgdGltZSBjb21wb25lbnQgZnJvbSB0aGUgaW5wdXQgYW5kIGZvcm1hdHMgaXQgYWNjb3JkaW5nIHRvIHNldHRpbmdzLlxuICAgKiBVc2VzIHRoZSB0aW1lIGZvcm1hdCBmcm9tIHBsdWdpbiBzZXR0aW5ncyAoZGVmYXVsdDogXCJISDptbVwiKS5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSB0aW1lIHN0cmluZyAoZS5nLiwgXCJub3dcIiwgXCJpbiAyIGhvdXJzXCIsIFwiYXQgM3BtXCIpXG4gICAqIEByZXR1cm5zIE5MRFJlc3VsdCBvYmplY3Qgd2l0aCBmb3JtYXR0ZWQgdGltZSBzdHJpbmdcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gSWYgc2V0dGluZ3MudGltZUZvcm1hdCBpcyBcIkhIOm1tXCJcbiAgICogY29uc3QgcmVzdWx0ID0gcGx1Z2luLnBhcnNlVGltZShcImluIDIgaG91cnNcIik7XG4gICAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb3JtYXR0ZWRTdHJpbmcpOyAvLyBcIjE3OjMwXCIgKGlmIGN1cnJlbnQgdGltZSBpcyAxNTozMClcbiAgICogXG4gICAqIGNvbnN0IHJlc3VsdDIgPSBwbHVnaW4ucGFyc2VUaW1lKFwiYXQgM3BtXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiMTU6MDBcIlxuICAgKiBgYGBcbiAgICovXG4gIHBhcnNlVGltZShkYXRlU3RyaW5nOiBzdHJpbmcpOiBOTERSZXN1bHQge1xuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGwnZW50csOpZSB1dGlsaXNhdGV1clxuICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gdmFsaWRhdGVVcmlQYXJhbShkYXRlU3RyaW5nLCAyMDApO1xuICAgIGlmICghc2FuaXRpemVkSW5wdXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBpbnB1dCBpbiBwYXJzZVRpbWUoKVwiLCB7IGRhdGVTdHJpbmcgfSk7XG4gICAgICBjb25zdCBpbnZhbGlkRGF0ZSA9IG5ldyBEYXRlKE5hTik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IFwiSW52YWxpZCBkYXRlXCIsXG4gICAgICAgIGRhdGU6IGludmFsaWREYXRlLFxuICAgICAgICBtb21lbnQ6IG1vbWVudChpbnZhbGlkRGF0ZSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFZhbGlkZXIgbGUgZm9ybWF0IGRlIHRlbXBzXG4gICAgY29uc3QgdGltZUZvcm1hdFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh0aGlzLnNldHRpbmdzLnRpbWVGb3JtYXQpO1xuICAgIGlmICghdGltZUZvcm1hdFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCB0aW1lIGZvcm1hdCBpbiBzZXR0aW5nc1wiLCB7IGZvcm1hdDogdGhpcy5zZXR0aW5ncy50aW1lRm9ybWF0LCBlcnJvcjogdGltZUZvcm1hdFZhbGlkYXRpb24uZXJyb3IgfSk7XG4gICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXRcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlKHNhbml0aXplZElucHV0LCBERUZBVUxUX1NFVFRJTkdTLnRpbWVGb3JtYXQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBhcnNlKHNhbml0aXplZElucHV0LCB0aGlzLnNldHRpbmdzLnRpbWVGb3JtYXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHRleHQgc3RyaW5nIGNvbnRhaW5zIGEgdGltZSBjb21wb25lbnQuXG4gICAqIFxuICAgKiBVc2VmdWwgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdG8gaW5jbHVkZSB0aW1lIGZvcm1hdHRpbmcgaW4gdGhlIG91dHB1dC5cbiAgICogRGV0ZWN0cyB2YXJpb3VzIHRpbWUgZXhwcmVzc2lvbnMgaW4gYWxsIGVuYWJsZWQgbGFuZ3VhZ2VzLlxuICAgKiBcbiAgICogQHBhcmFtIHRleHQgLSBUZXh0IHN0cmluZyB0byBjaGVjayBmb3IgdGltZSBjb21wb25lbnRcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBhIHRpbWUgY29tcG9uZW50IGlzIGRldGVjdGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJuZXh0IE1vbmRheSBhdCAzcG1cIik7IC8vIHRydWVcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJ0b21vcnJvd1wiKTsgLy8gZmFsc2VcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJpbiAyIGhvdXJzXCIpOyAvLyB0cnVlXG4gICAqIHBsdWdpbi5oYXNUaW1lQ29tcG9uZW50KFwiZGFucyAyIGhldXJlc1wiKTsgLy8gdHJ1ZSAoRnJlbmNoKVxuICAgKiBgYGBcbiAgICovXG4gIGhhc1RpbWVDb21wb25lbnQodGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgdGhpcy5yZXNldFBhcnNlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuaGFzVGltZUNvbXBvbmVudCh0ZXh0KTtcbiAgfVxuXG4gIGFzeW5jIGFjdGlvbkhhbmRsZXIocGFyYW1zOiBPYnNpZGlhblByb3RvY29sRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgd29ya3NwYWNlIH0gPSB0aGlzLmFwcDtcblxuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGxlcyBwYXJhbcOodHJlcyBVUkkgcG91ciDDqXZpdGVyIGxlcyBpbmplY3Rpb25zXG4gICAgY29uc3QgZGF5ID0gdmFsaWRhdGVVcmlQYXJhbShwYXJhbXMuZGF5LCAxMDApO1xuICAgIGlmICghZGF5KSB7XG4gICAgICBsb2dnZXIud2FybihcIkludmFsaWQgZGF5IHBhcmFtZXRlciBpbiBVUklcIiwgeyBkYXk6IHBhcmFtcy5kYXkgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZSA9IHRoaXMucGFyc2VEYXRlKGRheSk7XG4gICAgY29uc3QgbmV3UGFuZSA9IHBhcnNlVHJ1dGh5KHBhcmFtcy5uZXdQYW5lIHx8IFwieWVzXCIpO1xuXG4gICAgaWYgKGRhdGUubW9tZW50LmlzVmFsaWQoKSkge1xuICAgICAgY29uc3QgZGFpbHlOb3RlID0gYXdhaXQgZ2V0T3JDcmVhdGVEYWlseU5vdGUoZGF0ZS5tb21lbnQpO1xuICAgICAgYXdhaXQgd29ya3NwYWNlLmdldExlYWYobmV3UGFuZSkub3BlbkZpbGUoZGFpbHlOb3RlKTtcbiAgICB9XG4gIH1cbn0iXSwibmFtZXMiOlsicmVxdWlyZSQkMCIsInRoaXMiLCJkaWN0IiwiZW4iLCJqYSIsImZyIiwicHQiLCJkZSIsIm5sIiwiZXMiLCJpdCIsInJ1IiwidWsiLCJ6aCIsImtvIiwibm9ybWFsaXplUGF0aCIsImdldERhaWx5Tm90ZSIsImdldEFsbERhaWx5Tm90ZXMiLCJjcmVhdGVEYWlseU5vdGUiLCJleHRyYWN0VGVybXMiLCJtYXRjaEFueVBhdHRlcm4iLCJPUkRJTkFMX1dPUkRfRElDVElPTkFSWSIsIk9SRElOQUxfTlVNQkVSX1BBVFRFUk4iLCJwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuIiwiTWFya2Rvd25WaWV3IiwiTW9kYWwiLCJTZXR0aW5nIiwiUGx1Z2luU2V0dGluZ1RhYiIsIldFRUtEQVlfRElDVElPTkFSWSIsIkZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZIiwiTU9OVEhfRElDVElPTkFSWSIsIklOVEVHRVJfV09SRF9ESUNUSU9OQVJZIiwiVElNRV9VTklUX0RJQ1RJT05BUlkiLCJOVU1CRVJfUEFUVEVSTiIsInBhcnNlTnVtYmVyUGF0dGVybiIsIllFQVJfUEFUVEVSTiIsInBhcnNlWWVhciIsIlNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiIsIlNJTkdMRV9USU1FX1VOSVRfUkVHRVgiLCJTSU5HTEVfVElNRV9VTklUX05PX0FCQlJfUEFUVEVSTiIsIlRJTUVfVU5JVFNfUEFUVEVSTiIsIlRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOIiwicGFyc2VEdXJhdGlvbiIsImNvbGxlY3REYXRlVGltZUZyYWdtZW50IiwiUEFUVEVSTl9XSVRIX1BSRUZJWCIsIkVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIiLCJQQVRURVJOIiwiREFURV9HUk9VUCIsIkRBVEVfVE9fR1JPVVAiLCJNT05USF9OQU1FX0dST1VQIiwiWUVBUl9HUk9VUCIsIkVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIiwiRU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIiLCJQUkVGSVhfR1JPVVAiLCJFTk1vbnRoTmFtZVBhcnNlciIsIllFQVJfTlVNQkVSX0dST1VQIiwiTU9OVEhfTlVNQkVSX0dST1VQIiwiREFURV9OVU1CRVJfR1JPVVAiLCJNT05USF9HUk9VUCIsIkVOU2xhc2hNb250aEZvcm1hdFBhcnNlciIsIkhPVVJfR1JPVVAiLCJNSU5VVEVfR1JPVVAiLCJTRUNPTkRfR1JPVVAiLCJBTV9QTV9IT1VSX0dST1VQIiwiRU5UaW1lRXhwcmVzc2lvblBhcnNlciIsIlNUUklDVF9QQVRURVJOIiwiRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciIsIkdST1VQX05VTV9USU1FVU5JVFMiLCJFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIiLCJFTk1lcmdlRGF0ZVJhbmdlUmVmaW5lciIsIkVOTWVyZ2VEYXRlVGltZVJlZmluZXIiLCJkYXRlcy5pbXBseVNpbWlsYXJEYXRlIiwicmVmZXJlbmNlcy5ub3ciLCJyZWZlcmVuY2VzLnRvZGF5IiwicmVmZXJlbmNlcy55ZXN0ZXJkYXkiLCJyZWZlcmVuY2VzLnRvbW9ycm93IiwicmVmZXJlbmNlcy50b25pZ2h0IiwicmVmZXJlbmNlcy50aGVEYXlBZnRlciIsImNhc3VhbFJlZmVyZW5jZXMuYWZ0ZXJub29uIiwiY2FzdWFsUmVmZXJlbmNlcy5ldmVuaW5nIiwiY2FzdWFsUmVmZXJlbmNlcy5taWRuaWdodCIsImNhc3VhbFJlZmVyZW5jZXMubW9ybmluZyIsImNhc3VhbFJlZmVyZW5jZXMubm9vbiIsIldFRUtEQVlfR1JPVVAiLCJQT1NURklYX0dST1VQIiwiTU9ESUZJRVJfV09SRF9HUk9VUCIsIlJFTEFUSVZFX1dPUkRfR1JPVVAiLCJQQVRURVJOX05PX0FCQlIiLCJFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIiLCJoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUiLCJoYXNJbXBsaWVkTGF0ZXJSZWZlcmVuY2VEYXRlIiwiY2FzdWFsIiwic3RyaWN0IiwiR0IiLCJwYXJzZSIsInBhcnNlRGF0ZSIsIlNVRkZJWF9HUk9VUCIsIkZJUlNUX1JFR19QQVRURVJOIiwiU0VDT05EX1JFR19QQVRURVJOIiwiVElNRV9HUk9VUCIsImNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24iLCJjcmVhdGVDb25maWd1cmF0aW9uIiwiREVUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyIiwiRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciIsIkZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlciIsIk5VTUJFUiIsIldFRUtEQVlfT0ZGU0VUIiwiREFZX0dST1VQIiwiemhTdHJpbmdUb051bWJlciIsInpoU3RyaW5nVG9ZZWFyIiwiTlVNQkVSX0dST1VQIiwiVU5JVF9HUk9VUCIsIkRBWV9HUk9VUF8xIiwiWkhfQU1fUE1fSE9VUl9HUk9VUF8xIiwiWkhfQU1fUE1fSE9VUl9HUk9VUF8yIiwiREFZX0dST1VQXzMiLCJaSF9BTV9QTV9IT1VSX0dST1VQXzMiLCJOT1dfR1JPVVAiLCJUSU1FX0dST1VQXzEiLCJUSU1FX0dST1VQXzIiLCJUSU1FX0dST1VQXzMiLCJSRUdFWF9QQVJUUyIsInllYXIiLCJBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyIsIkFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmciLCJyZWZlcmVuY2VzLnRoZURheUJlZm9yZSIsInJlZmVyZW5jZXMuZXZlbmluZyIsInJlZmVyZW5jZXMubW9ybmluZyIsInJlZmVyZW5jZXMubm9vbiIsInJlZmVyZW5jZXMubGFzdE5pZ2h0IiwicmVmZXJlbmNlcy55ZXN0ZXJkYXlFdmVuaW5nIiwicmVmZXJlbmNlcy5taWRuaWdodCIsIkVOQ2FzdWFsRGF0ZVBhcnNlciIsIkVOQ2FzdWFsVGltZVBhcnNlciIsIkVOV2Vla2RheVBhcnNlciIsIlRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkiLCJlbi5zdHJpY3QiLCJlbi5jYXN1YWwiLCJjaHJvbm8uZW4iLCJFZGl0b3JTdWdnZXN0IiwiQ0xFQU5VUF9JTlRFUlZBTCIsIlBsdWdpbiIsIk5vdGljZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUQ7QUFDQSxJQUFJLFFBQVEsR0FBR0EsOEJBQW1CLENBQUM7QUFDbkM7QUFDQSxNQUFNLHlCQUF5QixHQUFHLFlBQVksQ0FBQztBQUMvQyxNQUFNLDBCQUEwQixHQUFHLFlBQVksQ0FBQztBQUNoRCxNQUFNLDJCQUEyQixHQUFHLFNBQVMsQ0FBQztBQUM5QyxNQUFNLDZCQUE2QixHQUFHLFdBQVcsQ0FBQztBQUNsRCxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUMxQztBQUNBLFNBQVMsOEJBQThCLENBQUMsV0FBVyxFQUFFO0FBQ3JEO0FBQ0EsSUFBSSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMs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ZCxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQ2QsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQ2QsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxLQUFLLEVBQUUsR0FBRztBQUNkLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxLQUFLLEVBQUUsR0FBRztBQUNkLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksS0FBSyxFQUFFLEdBQUc7QUFDZCxJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQ2QsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxFQUFFO0FBQ1gsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksRUFBRSxFQUFFO0FBQ1IsUUFBUSx1QkFBdUIsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFO0FBQ3hDLFFBQVEsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRTtBQUNyQyxRQUFRLFFBQVEsRUFBRSxDQUFDLElBQUksS0FBSyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekYsUUFBUSxNQUFNLEVBQUUsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFGLEtBQUs7QUFDTCxJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksS0FBSyxFQUFFLEdBQUc7QUFDZCxJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxLQUFLLEVBQUUsR0FBRztBQUNkLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEtBQUssRUFBRSxHQUFHO0FBQ2QsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxFQUFFLEVBQUU7QUFDUixRQUFRLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDeEMsUUFBUSxvQkFBb0IsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFO0FBQ3JDLFFBQVEsUUFBUSxFQUFFLENBQUMsSUFBSSxLQUFLLG9CQUFvQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RixRQUFRLE1BQU0sRUFBRSxDQUFDLElBQUksS0FBSyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUYsS0FBSztBQUNMLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRztBQUNkLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEtBQUssRUFBRSxHQUFHO0FBQ2QsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUNYLElBQUksSUFBSSxFQUFFLEVBQUU7QUFDWixJQUFJLElBQUksRUFBRSxFQUFFO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQ2QsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksRUFBRSxFQUFFLENBQUM7QUFDVCxJQUFJLEtBQUssRUFBRSxHQUFHO0FBQ2QsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEtBQUssRUFBRSxHQUFHO0FBQ2QsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLENBQUMsQ0FBQztBQUNLLFNBQVMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUU7QUFDeEUsSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNsQixRQUFRLFVBQVUsRUFBRSxDQUFDO0FBQ3JCLFFBQVEsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDM0QsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxPQUFPO0FBQ3JDLFlBQVksQ0FBQyxFQUFFLENBQUM7QUFDaEIsS0FBSztBQUNMLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUNNLFNBQVMscUJBQXFCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRTtBQUN0RSxJQUFJLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQzFELElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN0RCxJQUFJLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzFFLElBQUksSUFBSSxPQUFPLENBQUM7QUFDaEIsSUFBSSxJQUFJLHFCQUFxQixLQUFLLGlCQUFpQjtBQUNuRCxRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDcEIsU0FBUyxJQUFJLHFCQUFxQixHQUFHLGlCQUFpQjtBQUN0RCxRQUFRLE9BQU8sR0FBRyxDQUFDLEdBQUcscUJBQXFCLEdBQUcsaUJBQWlCLENBQUM7QUFDaEU7QUFDQSxRQUFRLE9BQU8sR0FBRyxxQkFBcUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM1RCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUNNLFNBQVMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxpQkFBaUIsR0FBRyxFQUFFLEVBQUU7QUFDOUUsSUFBSSxJQUFJLGFBQWEsSUFBSSxJQUFJLEVBQUU7QUFDL0IsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixLQUFLO0FBQ0wsSUFBSSxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsRUFBRTtBQUMzQyxRQUFRLE9BQU8sYUFBYSxDQUFDO0FBQzdCLEtBQUs7QUFDTCxJQUFJLE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2pHLElBQUksSUFBSSxlQUFlLElBQUksSUFBSSxFQUFFO0FBQ2pDLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMLElBQUksSUFBSSxPQUFPLGVBQWUsSUFBSSxRQUFRLEVBQUU7QUFDNUMsUUFBUSxPQUFPLGVBQWUsQ0FBQztBQUMvQixLQUFLO0FBQ0wsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixLQUFLO0FBQ0wsSUFBSSxJQUFJLElBQUksR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNySCxRQUFRLE9BQU8sZUFBZSxDQUFDLHVCQUF1QixDQUFDO0FBQ3ZELEtBQUs7QUFDTCxJQUFJLE9BQU8sZUFBZSxDQUFDLG9CQUFvQixDQUFDO0FBQ2hEOztBQzNRTyxNQUFNLGFBQWEsR0FBRztBQUM3QixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBQ0ssU0FBUyxXQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRTtBQUMzQyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEIsUUFBUSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLFFBQVEsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEIsUUFBUSxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pELFFBQVEsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsS0FBSztBQUNMLElBQUksSUFBSSxNQUFNLElBQUksUUFBUSxFQUFFO0FBQzVCLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNuRCxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3JELFFBQVEsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzNELFFBQVEsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLEVBQUU7QUFDbkMsWUFBWSxRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ2xELFlBQVksUUFBUSxDQUFDLEtBQUssSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFDckQsU0FBUztBQUNULEtBQUs7QUFDTCxJQUFJLElBQUksU0FBUyxJQUFJLFFBQVEsRUFBRTtBQUMvQixRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkQsS0FBSztBQUNMLElBQUksSUFBSSxPQUFPLElBQUksUUFBUSxFQUFFO0FBQzdCLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNwRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQy9DLFFBQVEsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzVELFFBQVEsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLEVBQUU7QUFDbkMsWUFBWSxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ2hELFlBQVksUUFBUSxDQUFDLElBQUksSUFBSSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDbkQsU0FBUztBQUNULEtBQUs7QUFDTCxJQUFJLElBQUksTUFBTSxJQUFJLFFBQVEsRUFBRTtBQUM1QixRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDbkQsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsUUFBUSxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDM0QsUUFBUSxJQUFJLGlCQUFpQixHQUFHLENBQUMsRUFBRTtBQUNuQyxZQUFZLFFBQVEsQ0FBQyxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDOUMsWUFBWSxRQUFRLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUQsU0FBUztBQUNULEtBQUs7QUFDTCxJQUFJLElBQUksS0FBSyxJQUFJLFFBQVEsRUFBRTtBQUMzQixRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEQsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUM3QyxRQUFRLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMxRCxRQUFRLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxFQUFFO0FBQ25DLFlBQVksUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNoRCxZQUFZLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNoRSxTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksSUFBSSxNQUFNLElBQUksUUFBUSxFQUFFO0FBQzVCLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNuRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQy9DLFFBQVEsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzNELFFBQVEsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLEVBQUU7QUFDbkMsWUFBWSxRQUFRLENBQUMsTUFBTSxHQUFHLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3BELFlBQVksUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxJQUFJLFFBQVEsSUFBSSxRQUFRLEVBQUU7QUFDOUIsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3JELFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDbkQsUUFBUSxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDN0QsUUFBUSxJQUFJLGlCQUFpQixHQUFHLENBQUMsRUFBRTtBQUNuQyxZQUFZLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDcEQsWUFBWSxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDbEUsU0FBUztBQUNULEtBQUs7QUFDTCxJQUFJLElBQUksUUFBUSxJQUFJLFFBQVEsRUFBRTtBQUM5QixRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDckQsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNuRCxRQUFRLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM3RCxRQUFRLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxFQUFFO0FBQ25DLFlBQVksUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLEVBQUUsV0FBVyxJQUFJLENBQUMsQ0FBQztBQUM5RCxZQUFZLFFBQVEsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN6RSxTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksSUFBSSxhQUFhLElBQUksUUFBUSxFQUFFO0FBQ25DLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUMxRCxRQUFRLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzdELEtBQUs7QUFDTCxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFDTSxTQUFTLGVBQWUsQ0FBQyxRQUFRLEVBQUU7QUFDMUMsSUFBSSxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDeEIsSUFBSSxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRTtBQUNoQyxRQUFRLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxLQUFLO0FBQ0wsSUFBSSxPQUFPLFFBQVEsQ0FBQztBQUNwQjs7QUN2SE8sTUFBTSxxQkFBcUIsQ0FBQztBQUNuQyxJQUFJLE9BQU8sQ0FBQztBQUNaLElBQUksY0FBYyxDQUFDO0FBQ25CLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUU7QUFDekMsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzdDLFFBQVEsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLElBQUksSUFBSSxDQUFDO0FBQ3JELEtBQUs7QUFDTCxJQUFJLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRTtBQUMxQixRQUFRLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyxLQUFLO0FBQ0wsSUFBSSxPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7QUFDL0MsUUFBUSxJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUU7QUFDbkMsWUFBWSxPQUFPLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6RCxTQUFTO0FBQ1QsUUFBUSxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsT0FBTyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7QUFDckQsUUFBUSxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQzdGLFFBQVEsT0FBTyxJQUFJLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNsRSxLQUFLO0FBQ0wsSUFBSSwyQkFBMkIsR0FBRztBQUNsQyxRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM1QyxRQUFRLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLEVBQUU7QUFDMUMsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDdEcsU0FBUztBQUNULFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMLElBQUksaUNBQWlDLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFO0FBQ3BFLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtBQUNuQixZQUFZLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzlCLFNBQVM7QUFDVCxRQUFRLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUNoRSxRQUFRLE1BQU0sb0JBQW9CLEdBQUcsc0JBQXNCLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxxQkFBcUIsQ0FBQztBQUM1RyxRQUFRLE9BQU8scUJBQXFCLEdBQUcsb0JBQW9CLENBQUM7QUFDNUQsS0FBSztBQUNMLElBQUksaUJBQWlCLEdBQUc7QUFDeEIsUUFBUSxPQUFPLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7QUFDeEUsS0FBSztBQUNMLENBQUM7QUFDTSxNQUFNLGlCQUFpQixDQUFDO0FBQy9CLElBQUksV0FBVyxDQUFDO0FBQ2hCLElBQUksYUFBYSxDQUFDO0FBQ2xCLElBQUksU0FBUyxDQUFDO0FBQ2QsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN0QixJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFO0FBQzVDLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLFFBQVEsSUFBSSxlQUFlLEVBQUU7QUFDN0IsWUFBWSxLQUFLLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRTtBQUMvQyxnQkFBZ0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0QsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQywyQkFBMkIsRUFBRSxDQUFDO0FBQzdELFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDMUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUMvQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLEtBQUs7QUFDTCxJQUFJLE9BQU8sMkJBQTJCLENBQUMsU0FBUyxFQUFFLFFBQVEsR0FBRyxhQUFhLEVBQUU7QUFDNUUsUUFBUSxJQUFJLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbEYsUUFBUSxNQUFNLFVBQVUsR0FBRyxJQUFJLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVELFFBQVEsVUFBVSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsSUFBSSxNQUFNLElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxhQUFhLElBQUksUUFBUSxFQUFFO0FBQzdHLFlBQVksVUFBVSxDQUFDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQzVELFlBQVksaUJBQWlCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hELFlBQVksaUJBQWlCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hELFlBQVksVUFBVSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0FBQy9FLFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0MsWUFBWSxVQUFVLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7QUFDOUUsWUFBWSxJQUFJLEtBQUssSUFBSSxRQUFRLEVBQUU7QUFDbkMsZ0JBQWdCLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEUsZ0JBQWdCLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzlELGdCQUFnQixVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUM1RCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksTUFBTSxJQUFJLFFBQVEsRUFBRTtBQUN6QyxnQkFBZ0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRSxnQkFBZ0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsZ0JBQWdCLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzNELGFBQWE7QUFDYixpQkFBaUI7QUFDakIsZ0JBQWdCLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3hELGdCQUFnQixJQUFJLE9BQU8sSUFBSSxRQUFRLEVBQUU7QUFDekMsb0JBQW9CLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwRSxvQkFBb0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDbEUsaUJBQWlCO0FBQ2pCLHFCQUFxQjtBQUNyQixvQkFBb0IsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25FLG9CQUFvQixJQUFJLE1BQU0sSUFBSSxRQUFRLEVBQUU7QUFDNUMsd0JBQXdCLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLHFCQUFxQjtBQUNyQix5QkFBeUI7QUFDekIsd0JBQXdCLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ3JFLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCLEtBQUs7QUFDTCxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUU7QUFDbkIsUUFBUSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQzNDLFlBQVksT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9DLFNBQVM7QUFDVCxRQUFRLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7QUFDN0MsWUFBWSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDakQsU0FBUztBQUNULFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRTtBQUN6QixRQUFRLE9BQU8sU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDN0MsS0FBSztBQUNMLElBQUksb0JBQW9CLEdBQUc7QUFDM0IsUUFBUSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzdDLEtBQUs7QUFDTCxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFO0FBQzVCLFFBQVEsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUMzQyxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzlDLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUU7QUFDN0IsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM1QyxRQUFRLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QyxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxJQUFJLG9CQUFvQixDQUFDLFFBQVEsRUFBRTtBQUNuQyxRQUFRLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0FBQ2pFLFFBQVEsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN4RCxRQUFRLElBQUksS0FBSyxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksUUFBUSxJQUFJLE9BQU8sSUFBSSxRQUFRLElBQUksTUFBTSxJQUFJLFFBQVEsRUFBRTtBQUNsRyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzdELFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDOUMsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNqRCxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRCxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELFNBQVM7QUFDVCxRQUFRLElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLE1BQU0sSUFBSSxRQUFRLEVBQUU7QUFDaEYsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3RELFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDcEQsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUNwRCxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELFNBQVM7QUFDVCxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUU7QUFDdkIsUUFBUSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRTtBQUM1QyxZQUFZLFVBQVUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3RDLFNBQVM7QUFDVCxRQUFRLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFO0FBQzVDLFlBQVksT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9DLFlBQVksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pELFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxLQUFLLEdBQUc7QUFDWixRQUFRLE1BQU0sU0FBUyxHQUFHLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2hFLFFBQVEsU0FBUyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDbkMsUUFBUSxTQUFTLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUNyQyxRQUFRLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUM1QyxZQUFZLFNBQVMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvRCxTQUFTO0FBQ1QsUUFBUSxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7QUFDOUMsWUFBWSxTQUFTLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkUsU0FBUztBQUNULFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsS0FBSztBQUNMLElBQUksVUFBVSxHQUFHO0FBQ2pCLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqRyxLQUFLO0FBQ0wsSUFBSSxVQUFVLEdBQUc7QUFDakIsUUFBUSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUM3SCxLQUFLO0FBQ0wsSUFBSSxzQkFBc0IsR0FBRztBQUM3QixRQUFRLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9GLEtBQUs7QUFDTCxJQUFJLHFCQUFxQixHQUFHO0FBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRSxLQUFLO0FBQ0wsSUFBSSxXQUFXLEdBQUc7QUFDbEIsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztBQUMxRCxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQ25ELFlBQVksT0FBTyxLQUFLLENBQUM7QUFDekIsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDckQsWUFBWSxPQUFPLEtBQUssQ0FBQztBQUN6QixRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQzlDLFlBQVksT0FBTyxLQUFLLENBQUM7QUFDekIsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUMzRSxZQUFZLE9BQU8sS0FBSyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7QUFDakYsWUFBWSxPQUFPLEtBQUssQ0FBQztBQUN6QixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxJQUFJLFFBQVEsR0FBRztBQUNmLFFBQVEsT0FBTyxDQUFDO0FBQ2hCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNsRSx5QkFBeUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM1RCwyQkFBMkIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNoRSx1QkFBdUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxLQUFLO0FBQ0wsSUFBSSxJQUFJLEdBQUc7QUFDWCxRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0FBQzFELFFBQVEsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGlDQUFpQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUN0SCxRQUFRLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3JFLEtBQUs7QUFDTCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUU7QUFDaEIsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDbEIsUUFBUSxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtBQUNoQyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLFNBQVM7QUFDVCxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxJQUFJLElBQUksR0FBRztBQUNYLFFBQVEsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsS0FBSztBQUNMLElBQUksNkJBQTZCLEdBQUc7QUFDcEMsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQzNLLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDM0MsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixLQUFLO0FBQ0wsQ0FBQztBQUNNLE1BQU0sYUFBYSxDQUFDO0FBQzNCLElBQUksT0FBTyxDQUFDO0FBQ1osSUFBSSxLQUFLLENBQUM7QUFDVixJQUFJLElBQUksQ0FBQztBQUNULElBQUksU0FBUyxDQUFDO0FBQ2QsSUFBSSxLQUFLLENBQUM7QUFDVixJQUFJLEdBQUcsQ0FBQztBQUNSLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDcEQsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztBQUN6QyxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssSUFBSSxJQUFJLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9ELFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksS0FBSyxHQUFHO0FBQ1osUUFBUSxNQUFNLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hGLFFBQVEsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzlELFFBQVEsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hELFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEIsS0FBSztBQUNMLElBQUksSUFBSSxHQUFHO0FBQ1gsUUFBUSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDakMsS0FBSztBQUNMLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRTtBQUNoQixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ3RCLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsU0FBUztBQUNULFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMLElBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNsQixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ3RCLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsU0FBUztBQUNULFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMLElBQUksSUFBSSxHQUFHO0FBQ1gsUUFBUSxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDeEQsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDdEIsWUFBWSxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7QUFDL0MsZ0JBQWdCLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLE9BQU8sWUFBWSxDQUFDO0FBQzVCLEtBQUs7QUFDTCxJQUFJLFFBQVEsR0FBRztBQUNmLFFBQVEsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwRCxRQUFRLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pILEtBQUs7QUFDTDs7QUN6Uk8sU0FBUyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEdBQUcsb0JBQW9CLEVBQUU7QUFDaEgsSUFBSSxNQUFNLDhCQUE4QixHQUFHLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0YsSUFBSSxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSw4QkFBOEIsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0SCxDQUFDO0FBQ00sU0FBUyxZQUFZLENBQUMsVUFBVSxFQUFFO0FBQ3pDLElBQUksSUFBSSxJQUFJLENBQUM7QUFDYixJQUFJLElBQUksVUFBVSxZQUFZLEtBQUssRUFBRTtBQUNyQyxRQUFRLElBQUksR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDL0IsS0FBSztBQUNMLFNBQVMsSUFBSSxVQUFVLFlBQVksR0FBRyxFQUFFO0FBQ3hDLFFBQVEsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDN0MsS0FBSztBQUNMLFNBQVM7QUFDVCxRQUFRLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZDLEtBQUs7QUFDTCxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFDTSxTQUFTLGVBQWUsQ0FBQyxVQUFVLEVBQUU7QUFDNUMsSUFBSSxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO0FBQ2hELFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDNUMsU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xCLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQixJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDOztBQ3RCTyxTQUFTLG9CQUFvQixDQUFDLFVBQVUsRUFBRTtBQUNqRCxJQUFJLElBQUksVUFBVSxHQUFHLEdBQUcsRUFBRTtBQUMxQixRQUFRLElBQUksVUFBVSxHQUFHLEVBQUUsRUFBRTtBQUM3QixZQUFZLFVBQVUsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzNDLFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxVQUFVLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQztBQUMzQyxTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQztBQUNNLFNBQVMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDMUQsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixJQUFJLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RCxJQUFJLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtBQUN6RyxRQUFRLElBQUksR0FBRyxRQUFRLENBQUM7QUFDeEIsS0FBSztBQUNMLFNBQVMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtBQUM5RyxRQUFRLElBQUksR0FBRyxRQUFRLENBQUM7QUFDeEIsS0FBSztBQUNMLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDOUI7O0FDdkJPLE1BQU1FLG9CQUFrQixHQUFHO0FBQ2xDLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBQ0ssTUFBTUMsNEJBQTBCLEdBQUc7QUFDMUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksT0FBTyxFQUFFLEVBQUU7QUFDZixJQUFJLFFBQVEsRUFBRSxFQUFFO0FBQ2hCLElBQUksUUFBUSxFQUFFLEVBQUU7QUFDaEIsQ0FBQyxDQUFDO0FBQ0ssTUFBTUMsa0JBQWdCLEdBQUc7QUFDaEMsSUFBSSxHQUFHRCw0QkFBMEI7QUFDakMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUNYLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLEdBQUcsRUFBRSxFQUFFO0FBQ1gsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDWCxJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsQ0FBQyxDQUFDO0FBQ0ssTUFBTUUseUJBQXVCLEdBQUc7QUFDdkMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUNYLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsQ0FBQyxDQUFDO0FBQ0ssTUFBTVYseUJBQXVCLEdBQUc7QUFDdkMsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUNiLElBQUksUUFBUSxFQUFFLEVBQUU7QUFDaEIsSUFBSSxPQUFPLEVBQUUsRUFBRTtBQUNmLElBQUksVUFBVSxFQUFFLEVBQUU7QUFDbEIsSUFBSSxVQUFVLEVBQUUsRUFBRTtBQUNsQixJQUFJLFNBQVMsRUFBRSxFQUFFO0FBQ2pCLElBQUksU0FBUyxFQUFFLEVBQUU7QUFDakIsSUFBSSxXQUFXLEVBQUUsRUFBRTtBQUNuQixJQUFJLFVBQVUsRUFBRSxFQUFFO0FBQ2xCLElBQUksVUFBVSxFQUFFLEVBQUU7QUFDbEIsSUFBSSxTQUFTLEVBQUUsRUFBRTtBQUNqQixJQUFJLGNBQWMsRUFBRSxFQUFFO0FBQ3RCLElBQUksY0FBYyxFQUFFLEVBQUU7QUFDdEIsSUFBSSxlQUFlLEVBQUUsRUFBRTtBQUN2QixJQUFJLGVBQWUsRUFBRSxFQUFFO0FBQ3ZCLElBQUksY0FBYyxFQUFFLEVBQUU7QUFDdEIsSUFBSSxjQUFjLEVBQUUsRUFBRTtBQUN0QixJQUFJLGVBQWUsRUFBRSxFQUFFO0FBQ3ZCLElBQUksZUFBZSxFQUFFLEVBQUU7QUFDdkIsSUFBSSxjQUFjLEVBQUUsRUFBRTtBQUN0QixJQUFJLGNBQWMsRUFBRSxFQUFFO0FBQ3RCLElBQUksY0FBYyxFQUFFLEVBQUU7QUFDdEIsSUFBSSxjQUFjLEVBQUUsRUFBRTtBQUN0QixJQUFJLGdCQUFnQixFQUFFLEVBQUU7QUFDeEIsSUFBSSxnQkFBZ0IsRUFBRSxFQUFFO0FBQ3hCLElBQUksZUFBZSxFQUFFLEVBQUU7QUFDdkIsSUFBSSxlQUFlLEVBQUUsRUFBRTtBQUN2QixJQUFJLGNBQWMsRUFBRSxFQUFFO0FBQ3RCLElBQUksY0FBYyxFQUFFLEVBQUU7QUFDdEIsSUFBSSxXQUFXLEVBQUUsRUFBRTtBQUNuQixJQUFJLGNBQWMsRUFBRSxFQUFFO0FBQ3RCLElBQUksY0FBYyxFQUFFLEVBQUU7QUFDdEIsQ0FBQyxDQUFDO0FBQ0ssTUFBTSw0QkFBNEIsR0FBRztBQUM1QyxJQUFJLE1BQU0sRUFBRSxRQUFRO0FBQ3BCLElBQUksT0FBTyxFQUFFLFFBQVE7QUFDckIsSUFBSSxNQUFNLEVBQUUsUUFBUTtBQUNwQixJQUFJLE9BQU8sRUFBRSxRQUFRO0FBQ3JCLElBQUksSUFBSSxFQUFFLE1BQU07QUFDaEIsSUFBSSxLQUFLLEVBQUUsTUFBTTtBQUNqQixJQUFJLEdBQUcsRUFBRSxLQUFLO0FBQ2QsSUFBSSxJQUFJLEVBQUUsS0FBSztBQUNmLElBQUksSUFBSSxFQUFFLE1BQU07QUFDaEIsSUFBSSxLQUFLLEVBQUUsTUFBTTtBQUNqQixJQUFJLEtBQUssRUFBRSxPQUFPO0FBQ2xCLElBQUksTUFBTSxFQUFFLE9BQU87QUFDbkIsSUFBSSxPQUFPLEVBQUUsU0FBUztBQUN0QixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksSUFBSSxFQUFFLE1BQU07QUFDaEIsSUFBSSxLQUFLLEVBQUUsTUFBTTtBQUNqQixDQUFDLENBQUM7QUFDSyxNQUFNVyxzQkFBb0IsR0FBRztBQUNwQyxJQUFJLENBQUMsRUFBRSxRQUFRO0FBQ2YsSUFBSSxHQUFHLEVBQUUsUUFBUTtBQUNqQixJQUFJLE1BQU0sRUFBRSxRQUFRO0FBQ3BCLElBQUksT0FBTyxFQUFFLFFBQVE7QUFDckIsSUFBSSxDQUFDLEVBQUUsUUFBUTtBQUNmLElBQUksR0FBRyxFQUFFLFFBQVE7QUFDakIsSUFBSSxJQUFJLEVBQUUsUUFBUTtBQUNsQixJQUFJLE1BQU0sRUFBRSxRQUFRO0FBQ3BCLElBQUksT0FBTyxFQUFFLFFBQVE7QUFDckIsSUFBSSxDQUFDLEVBQUUsTUFBTTtBQUNiLElBQUksRUFBRSxFQUFFLE1BQU07QUFDZCxJQUFJLEdBQUcsRUFBRSxNQUFNO0FBQ2YsSUFBSSxJQUFJLEVBQUUsTUFBTTtBQUNoQixJQUFJLEtBQUssRUFBRSxNQUFNO0FBQ2pCLElBQUksQ0FBQyxFQUFFLEtBQUs7QUFDWixJQUFJLEdBQUcsRUFBRSxLQUFLO0FBQ2QsSUFBSSxJQUFJLEVBQUUsS0FBSztBQUNmLElBQUksQ0FBQyxFQUFFLE1BQU07QUFDYixJQUFJLElBQUksRUFBRSxNQUFNO0FBQ2hCLElBQUksS0FBSyxFQUFFLE1BQU07QUFDakIsSUFBSSxFQUFFLEVBQUUsT0FBTztBQUNmLElBQUksR0FBRyxFQUFFLE9BQU87QUFDaEIsSUFBSSxHQUFHLEVBQUUsT0FBTztBQUNoQixJQUFJLEtBQUssRUFBRSxPQUFPO0FBQ2xCLElBQUksTUFBTSxFQUFFLE9BQU87QUFDbkIsSUFBSSxHQUFHLEVBQUUsU0FBUztBQUNsQixJQUFJLE9BQU8sRUFBRSxTQUFTO0FBQ3RCLElBQUksUUFBUSxFQUFFLFNBQVM7QUFDdkIsSUFBSSxDQUFDLEVBQUUsTUFBTTtBQUNiLElBQUksRUFBRSxFQUFFLE1BQU07QUFDZCxJQUFJLElBQUksRUFBRSxNQUFNO0FBQ2hCLElBQUksS0FBSyxFQUFFLE1BQU07QUFDakIsSUFBSSxHQUFHLDRCQUE0QjtBQUNuQyxDQUFDLENBQUM7QUFDSyxNQUFNQyxnQkFBYyxHQUFHLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQ0YseUJBQXVCLENBQUMsQ0FBQyxvSEFBb0gsQ0FBQyxDQUFDO0FBQzVMLFNBQVNHLG9CQUFrQixDQUFDLEtBQUssRUFBRTtBQUMxQyxJQUFJLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNwQyxJQUFJLElBQUlILHlCQUF1QixDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwRCxRQUFRLE9BQU9BLHlCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLEtBQUs7QUFDTCxTQUFTLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUU7QUFDMUQsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0wsU0FBUyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDL0IsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0wsU0FBUyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDaEMsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQixLQUFLO0FBQ0wsU0FBUyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDbEMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0wsU0FBUyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDbkMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0wsSUFBSSxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBQ00sTUFBTVQsd0JBQXNCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDRCx5QkFBdUIsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFDNUcsU0FBU0UsMkJBQXlCLENBQUMsS0FBSyxFQUFFO0FBQ2pELElBQUksSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xDLElBQUksSUFBSUYseUJBQXVCLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3BELFFBQVEsT0FBT0EseUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUMsS0FBSztBQUNMLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0MsSUFBSSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBQ00sTUFBTWMsY0FBWSxHQUFHLENBQUMsOEVBQThFLENBQUMsQ0FBQztBQUN0RyxTQUFTQyxXQUFTLENBQUMsS0FBSyxFQUFFO0FBQ2pDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzNCLFFBQVEsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLEtBQUs7QUFDTCxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUM3QixRQUFRLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzQyxRQUFRLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEMsS0FBSztBQUNMLElBQUksSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2hDLFFBQVEsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLFFBQVEsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0IsS0FBSztBQUNMLElBQUksTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFDLElBQUksT0FBTyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBQ0QsTUFBTUMsMEJBQXdCLEdBQUcsQ0FBQyxDQUFDLEVBQUVKLGdCQUFjLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQ0Qsc0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RyxNQUFNTSx3QkFBc0IsR0FBRyxJQUFJLE1BQU0sQ0FBQ0QsMEJBQXdCLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekUsTUFBTUUsa0NBQWdDLEdBQUcsQ0FBQyxDQUFDLEVBQUVOLGdCQUFjLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pILE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0FBQzlELE1BQU1PLG9CQUFrQixHQUFHLHVCQUF1QixDQUFDLENBQUMsNkJBQTZCLENBQUMsRUFBRUgsMEJBQXdCLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztBQUMzSSxNQUFNSSw0QkFBMEIsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLEVBQUVGLGtDQUFnQyxFQUFFLDJCQUEyQixDQUFDLENBQUM7QUFDM0osU0FBU0csZUFBYSxDQUFDLFlBQVksRUFBRTtBQUM1QyxJQUFJLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUN6QixJQUFJLElBQUksYUFBYSxHQUFHLFlBQVksQ0FBQztBQUNyQyxJQUFJLElBQUksS0FBSyxHQUFHSix3QkFBc0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDM0QsSUFBSSxPQUFPLEtBQUssRUFBRTtBQUNsQixRQUFRSyx5QkFBdUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEQsUUFBUSxhQUFhLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEUsUUFBUSxLQUFLLEdBQUdMLHdCQUFzQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzRCxLQUFLO0FBQ0wsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtBQUM1QyxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFDRCxTQUFTSyx5QkFBdUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFO0FBQ25ELElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFO0FBQ3ZDLFFBQVEsT0FBTztBQUNmLEtBQUs7QUFDTCxJQUFJLE1BQU0sR0FBRyxHQUFHVCxvQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxJQUFJLE1BQU0sSUFBSSxHQUFHRixzQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUM5RCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUI7O0FDaFFPLE1BQU0sc0NBQXNDLENBQUM7QUFDcEQsSUFBSSxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUU7QUFDeEQsUUFBUSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssbUJBQW1CLENBQUM7QUFDbEUsS0FBSztBQUNMLElBQUksbUJBQW1CLEdBQUc7QUFDMUIsUUFBUSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekIsS0FBSztBQUNMLElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQzlCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztBQUN6QixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7QUFDckIsUUFBUSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtBQUNyQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO0FBQy9FLGdCQUFnQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDMUMsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdELFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekksUUFBUSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDbEMsS0FBSztBQUNMLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDNUIsUUFBUSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3RDLFFBQVEsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDbEQsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckQsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQyxZQUFZLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFNBQVM7QUFDVCxRQUFRLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDakQsS0FBSztBQUNMOztBQ3pCQSxNQUFNLDRCQUE0QixHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsMEJBQTBCLENBQUM7QUFDNUUsSUFBSSxDQUFDLCtEQUErRCxFQUFFUSxvQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRyxNQUFNSSxxQkFBbUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLHFCQUFxQixDQUFDO0FBQzlELElBQUksQ0FBQywrREFBK0QsRUFBRUosb0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0csTUFBTSwwQkFBMEIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLHFCQUFxQixDQUFDO0FBQ3JFLElBQUksQ0FBQywrREFBK0QsRUFBRUMsNEJBQTBCLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEcsTUFBTUksOEJBQTRCLFNBQVMsc0NBQXNDLENBQUM7QUFDakcsSUFBSSxVQUFVLENBQUM7QUFDZixJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDNUIsUUFBUSxLQUFLLEVBQUUsQ0FBQztBQUNoQixRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ3JDLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDMUIsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDN0IsWUFBWSxPQUFPLDBCQUEwQixDQUFDO0FBQzlDLFNBQVM7QUFDVCxRQUFRLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsNEJBQTRCLEdBQUdELHFCQUFtQixDQUFDO0FBQy9GLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7QUFDaEQsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxNQUFNLFNBQVMsR0FBR0YsZUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUN4QixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzRixLQUFLO0FBQ0w7O0FDekJBLE1BQU1JLFVBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLGVBQWUsQ0FBQztBQUM1QyxJQUFJLENBQUMsQ0FBQyxFQUFFeEIsd0JBQXNCLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDVCxJQUFJLENBQUMsa0RBQWtELENBQUM7QUFDeEQsSUFBSSxDQUFDLENBQUMsRUFBRUEsd0JBQXNCLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLElBQUksSUFBSTtBQUNSLElBQUksQ0FBQywrQkFBK0IsQ0FBQztBQUNyQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQ1Esa0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsSUFBSSxLQUFLO0FBQ1QsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLEVBQUVLLGNBQVksQ0FBQyxRQUFRLENBQUM7QUFDOUIsSUFBSSxJQUFJO0FBQ1IsSUFBSSxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTVksWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNQyxlQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU1DLGtCQUFnQixHQUFHLENBQUMsQ0FBQztBQUMzQixNQUFNQyxZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ04sTUFBTUMsK0JBQTZCLFNBQVMsc0NBQXNDLENBQUM7QUFDbEcsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPTCxVQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxRQUFRLE1BQU0sS0FBSyxHQUFHaEIsa0JBQWdCLENBQUMsS0FBSyxDQUFDbUIsa0JBQWdCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLFFBQVEsTUFBTSxHQUFHLEdBQUcxQiwyQkFBeUIsQ0FBQyxLQUFLLENBQUN3QixZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLFFBQVEsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFO0FBQ3RCLFlBQVksS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQ0EsWUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2pFLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxLQUFLLENBQUNHLFlBQVUsQ0FBQyxFQUFFO0FBQy9CLFlBQVksTUFBTSxVQUFVLEdBQUdkLFdBQVMsQ0FBQyxLQUFLLENBQUNjLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDcEQsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNFLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLFNBQVM7QUFDVCxRQUFRLElBQUksS0FBSyxDQUFDRixlQUFhLENBQUMsRUFBRTtBQUNsQyxZQUFZLE1BQU0sT0FBTyxHQUFHekIsMkJBQXlCLENBQUMsS0FBSyxDQUFDeUIsZUFBYSxDQUFDLENBQUMsQ0FBQztBQUM1RSxZQUFZLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM5QyxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM5QyxTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLO0FBQ0w7O0FDOUNBLE1BQU1GLFVBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUNoQixrQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRSxJQUFJLG9CQUFvQjtBQUN4QixJQUFJLENBQUMsQ0FBQyxFQUFFUix3QkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQztBQUN0RCxJQUFJLEtBQUs7QUFDVCxJQUFJLGdCQUFnQjtBQUNwQixJQUFJLENBQUMsQ0FBQyxFQUFFQSx3QkFBc0IsQ0FBQyxLQUFLLENBQUM7QUFDckMsSUFBSSxJQUFJO0FBQ1IsSUFBSSxLQUFLO0FBQ1QsSUFBSSxDQUFDLHNCQUFzQixDQUFDO0FBQzVCLElBQUksQ0FBQyxDQUFDLEVBQUVhLGNBQVksQ0FBQyxDQUFDLENBQUM7QUFDdkIsSUFBSSxJQUFJO0FBQ1IsSUFBSSxxQkFBcUIsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoQyxNQUFNYyxrQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTUYsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNQyxlQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU1FLFlBQVUsR0FBRyxDQUFDLENBQUM7QUFDTixNQUFNRSwrQkFBNkIsU0FBUyxzQ0FBc0MsQ0FBQztBQUNsRyxJQUFJLHNCQUFzQixDQUFDO0FBQzNCLElBQUksV0FBVyxDQUFDLHNCQUFzQixFQUFFO0FBQ3hDLFFBQVEsS0FBSyxFQUFFLENBQUM7QUFDaEIsUUFBUSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7QUFDN0QsS0FBSztBQUNMLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBT04sVUFBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxLQUFLLEdBQUdoQixrQkFBZ0IsQ0FBQyxLQUFLLENBQUNtQixrQkFBZ0IsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUUsUUFBUSxNQUFNLEdBQUcsR0FBRzFCLDJCQUF5QixDQUFDLEtBQUssQ0FBQ3dCLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDakUsUUFBUSxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUU7QUFDdEIsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtBQUN6QyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUNDLGVBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDRSxZQUFVLENBQUMsSUFBSSxLQUFLLENBQUNILFlBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUNwRyxnQkFBZ0IsT0FBTyxJQUFJLENBQUM7QUFDNUIsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLE1BQU0sVUFBVSxHQUFHLE9BQU87QUFDbEMsYUFBYSx1QkFBdUIsQ0FBQztBQUNyQyxZQUFZLEdBQUcsRUFBRSxHQUFHO0FBQ3BCLFlBQVksS0FBSyxFQUFFLEtBQUs7QUFDeEIsU0FBUyxDQUFDO0FBQ1YsYUFBYSxNQUFNLENBQUMsc0NBQXNDLENBQUMsQ0FBQztBQUM1RCxRQUFRLElBQUksS0FBSyxDQUFDRyxZQUFVLENBQUMsRUFBRTtBQUMvQixZQUFZLE1BQU0sSUFBSSxHQUFHZCxXQUFTLENBQUMsS0FBSyxDQUFDYyxZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RELFlBQVksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUMsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNFLFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsU0FBUztBQUNULFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQ0YsZUFBYSxDQUFDLEVBQUU7QUFDbkMsWUFBWSxPQUFPLFVBQVUsQ0FBQztBQUM5QixTQUFTO0FBQ1QsUUFBUSxNQUFNLE9BQU8sR0FBR3pCLDJCQUF5QixDQUFDLEtBQUssQ0FBQ3lCLGVBQWEsQ0FBQyxDQUFDLENBQUM7QUFDeEUsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxRQUFRLE1BQU0sQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDO0FBQ2xDLFFBQVEsTUFBTSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEMsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDMUMsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLO0FBQ0w7O0FDN0RBLE1BQU1GLFVBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLGFBQWEsQ0FBQztBQUMxQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQ2hCLGtCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDVixJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ1QsSUFBSSxDQUFDLGdCQUFnQixFQUFFSyxjQUFZLENBQUMsRUFBRSxDQUFDO0FBQ3ZDLElBQUksSUFBSTtBQUNSLElBQUksa0NBQWtDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDN0MsTUFBTWtCLGNBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTUosa0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU1DLFlBQVUsR0FBRyxDQUFDLENBQUM7QUFDTixNQUFNSSxtQkFBaUIsU0FBUyxzQ0FBc0MsQ0FBQztBQUN0RixJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU9SLFVBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQ0csa0JBQWdCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNoRSxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQ3BCLDRCQUEwQixDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQzVFLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUN3QixjQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUN4RCxRQUFRLE1BQU0sS0FBSyxHQUFHdkIsa0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbEQsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUMsUUFBUSxJQUFJLEtBQUssQ0FBQ29CLFlBQVUsQ0FBQyxFQUFFO0FBQy9CLFlBQVksTUFBTSxJQUFJLEdBQUdkLFdBQVMsQ0FBQyxLQUFLLENBQUNjLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDdEQsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUMsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pFLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLFNBQVM7QUFDVCxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDs7QUNwQ0EsTUFBTUosVUFBTyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsc0JBQXNCLENBQUM7QUFDbkQsSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUNoQixrQkFBZ0IsQ0FBQyxDQUFDLDJCQUEyQixDQUFDO0FBQ3pFLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDbEIsSUFBSSxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTXlCLG1CQUFpQixHQUFHLENBQUMsQ0FBQztBQUM1QixNQUFNTixrQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTU8sb0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLE1BQU1DLG1CQUFpQixHQUFHLENBQUMsQ0FBQztBQUNiLE1BQU0sb0JBQW9CLFNBQVMsc0NBQXNDLENBQUM7QUFDekYsSUFBSSxvQkFBb0IsQ0FBQztBQUN6QixJQUFJLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRTtBQUN0QyxRQUFRLEtBQUssRUFBRSxDQUFDO0FBQ2hCLFFBQVEsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0FBQ3pELEtBQUs7QUFDTCxJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU9YLFVBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUNTLG1CQUFpQixDQUFDLENBQUMsQ0FBQztBQUN4RCxRQUFRLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUNFLG1CQUFpQixDQUFDLENBQUMsQ0FBQztBQUNyRCxRQUFRLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQ0Qsb0JBQWtCLENBQUM7QUFDN0MsY0FBYyxRQUFRLENBQUMsS0FBSyxDQUFDQSxvQkFBa0IsQ0FBQyxDQUFDO0FBQ2pELGNBQWMxQixrQkFBZ0IsQ0FBQyxLQUFLLENBQUNtQixrQkFBZ0IsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDdEUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRTtBQUNyQyxZQUFZLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO0FBQzNDLGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixhQUFhO0FBQ2IsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsRUFBRTtBQUN2QyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUMsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFO0FBQ2pDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsT0FBTztBQUNmLFlBQVksR0FBRyxFQUFFLEdBQUc7QUFDcEIsWUFBWSxLQUFLLEVBQUUsS0FBSztBQUN4QixZQUFZLElBQUksRUFBRSxJQUFJO0FBQ3RCLFNBQVMsQ0FBQztBQUNWLEtBQUs7QUFDTDs7QUMxQ0EsTUFBTUgsVUFBTyxHQUFHLElBQUksTUFBTSxDQUFDLGtDQUFrQyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6RSxNQUFNWSxhQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU1SLFlBQVUsR0FBRyxDQUFDLENBQUM7QUFDTixNQUFNUywwQkFBd0IsU0FBUyxzQ0FBc0MsQ0FBQztBQUM3RixJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU9iLFVBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUNJLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDakQsUUFBUSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDUSxhQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ25ELFFBQVEsT0FBTyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3RyxLQUFLO0FBQ0w7O0FDWkEsU0FBUyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUU7QUFDL0UsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN2QyxRQUFRLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUMxQixRQUFRLENBQUMsVUFBVSxDQUFDO0FBQ3BCLFFBQVEsQ0FBQyxHQUFHLENBQUM7QUFDYixRQUFRLENBQUMsV0FBVyxDQUFDO0FBQ3JCLFFBQVEsQ0FBQyxVQUFVLENBQUM7QUFDcEIsUUFBUSxDQUFDLEdBQUcsQ0FBQztBQUNiLFFBQVEsQ0FBQyxPQUFPLENBQUM7QUFDakIsUUFBUSxDQUFDLFFBQVEsQ0FBQztBQUNsQixRQUFRLENBQUMsa0JBQWtCLENBQUM7QUFDNUIsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNaLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDWixRQUFRLENBQUMsb0NBQW9DLENBQUM7QUFDOUMsUUFBUSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBQ0QsU0FBUyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsZUFBZSxFQUFFO0FBQzlELElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQzVDLFFBQVEsQ0FBQyxVQUFVLENBQUM7QUFDcEIsUUFBUSxDQUFDLEdBQUcsQ0FBQztBQUNiLFFBQVEsQ0FBQyxlQUFlLENBQUM7QUFDekIsUUFBUSxDQUFDLFVBQVUsQ0FBQztBQUNwQixRQUFRLENBQUMsR0FBRyxDQUFDO0FBQ2IsUUFBUSxDQUFDLGVBQWUsQ0FBQztBQUN6QixRQUFRLENBQUMsNEJBQTRCLENBQUM7QUFDdEMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNaLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDWixRQUFRLENBQUMsb0NBQW9DLENBQUM7QUFDOUMsUUFBUSxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBQ0QsTUFBTUUsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNQyxjQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU1DLGNBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFDN0IsTUFBTUMsa0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sNEJBQTRCLENBQUM7QUFDMUMsSUFBSSxVQUFVLENBQUM7QUFDZixJQUFJLFdBQVcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxFQUFFO0FBQ3BDLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDckMsS0FBSztBQUNMLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDbkIsS0FBSztBQUNMLElBQUksMEJBQTBCLEdBQUc7QUFDakMsUUFBUSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDL0IsS0FBSztBQUNMLElBQUksYUFBYSxHQUFHO0FBQ3BCLFFBQVEsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ2hDLEtBQUs7QUFDTCxJQUFJLGVBQWUsR0FBRztBQUN0QixRQUFRLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNoQyxLQUFLO0FBQ0wsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO0FBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsaUNBQWlDLEVBQUUsQ0FBQztBQUN4RCxLQUFLO0FBQ0wsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUM1QixRQUFRLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEYsUUFBUSxJQUFJLENBQUMsZUFBZSxFQUFFO0FBQzlCLFlBQVksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQzFDLGdCQUFnQixLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNqQyxnQkFBZ0IsT0FBTyxJQUFJLENBQUM7QUFDNUIsYUFBYTtBQUNiLFlBQVksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzNDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3BELFFBQVEsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekQsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztBQUNqRixRQUFRLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN2QyxRQUFRLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsRSxRQUFRLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1DQUFtQyxFQUFFLENBQUM7QUFDNUUsUUFBUSxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDcEUsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksY0FBYyxFQUFFO0FBQ3RELFlBQVksSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLEVBQUU7QUFDbEUsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDO0FBQzVCLGFBQWE7QUFDYixZQUFZLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxFQUFFO0FBQ3RFLGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsSUFBSSxDQUFDLGNBQWM7QUFDM0IsWUFBWSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLEVBQUU7QUFDOUQsWUFBWSxPQUFPLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RSxTQUFTO0FBQ1QsUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFGLFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFO0FBQ3hCLFlBQVksTUFBTSxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsU0FBUztBQUNULFFBQVEsT0FBTyxJQUFJLENBQUMsa0NBQWtDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0QsS0FBSztBQUNMLElBQUksNEJBQTRCLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsS0FBSyxFQUFFO0FBQ2pFLFFBQVEsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDN0QsUUFBUSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdkIsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDNUIsUUFBUSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDSCxZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFFBQVEsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFO0FBQ3hCLFlBQVksSUFBSSxLQUFLLENBQUNBLFlBQVUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDQyxjQUFZLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUNFLGtCQUFnQixDQUFDLEVBQUU7QUFDMUcsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDO0FBQzVCLGFBQWE7QUFDYixZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUNGLGNBQVksQ0FBQyxJQUFJLElBQUksRUFBRTtBQUNoRSxnQkFBZ0IsT0FBTyxJQUFJLENBQUM7QUFDNUIsYUFBYTtBQUNiLFlBQVksTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7QUFDaEMsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDMUMsU0FBUztBQUNULFFBQVEsSUFBSSxJQUFJLEdBQUcsRUFBRSxFQUFFO0FBQ3ZCLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsSUFBSSxLQUFLLENBQUNBLGNBQVksQ0FBQyxJQUFJLElBQUksRUFBRTtBQUN6QyxZQUFZLElBQUksS0FBSyxDQUFDQSxjQUFZLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDRSxrQkFBZ0IsQ0FBQyxFQUFFO0FBQzdFLGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixhQUFhO0FBQ2IsWUFBWSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQ0YsY0FBWSxDQUFDLENBQUMsQ0FBQztBQUNuRCxTQUFTO0FBQ1QsUUFBUSxJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUU7QUFDMUIsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDdkIsWUFBWSxRQUFRLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNuQyxTQUFTO0FBQ1QsUUFBUSxJQUFJLEtBQUssQ0FBQ0Usa0JBQWdCLENBQUMsSUFBSSxJQUFJLEVBQUU7QUFDN0MsWUFBWSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ3pCLGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixZQUFZLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQ0Esa0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsRSxZQUFZLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUM3QixnQkFBZ0IsUUFBUSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDdkMsZ0JBQWdCLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRTtBQUNoQyxvQkFBb0IsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM3QixpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFlBQVksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQzdCLGdCQUFnQixRQUFRLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUN2QyxnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO0FBQ2hDLG9CQUFvQixJQUFJLElBQUksRUFBRSxDQUFDO0FBQy9CLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEMsUUFBUSxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1QyxRQUFRLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtBQUMvQixZQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3BELFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDM0IsZ0JBQWdCLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxRCxhQUFhO0FBQ2IsaUJBQWlCO0FBQ2pCLGdCQUFnQixVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUQsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxFQUFFO0FBQy9DLFlBQVksTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRixZQUFZLElBQUksV0FBVyxJQUFJLElBQUk7QUFDbkMsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDO0FBQzVCLFlBQVksVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDMUQsU0FBUztBQUNULFFBQVEsSUFBSSxLQUFLLENBQUNELGNBQVksQ0FBQyxJQUFJLElBQUksRUFBRTtBQUN6QyxZQUFZLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUNBLGNBQVksQ0FBQyxDQUFDLENBQUM7QUFDekQsWUFBWSxJQUFJLE1BQU0sSUFBSSxFQUFFO0FBQzVCLGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixZQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELFNBQVM7QUFDVCxRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCLEtBQUs7QUFDTCxJQUFJLDhCQUE4QixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQzNELFFBQVEsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDN0QsUUFBUSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksRUFBRTtBQUMvQyxZQUFZLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEYsWUFBWSxJQUFJLFdBQVcsSUFBSSxJQUFJO0FBQ25DLGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixZQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzFELFNBQVM7QUFDVCxRQUFRLElBQUksS0FBSyxDQUFDQSxjQUFZLENBQUMsSUFBSSxJQUFJLEVBQUU7QUFDekMsWUFBWSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDQSxjQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ3pELFlBQVksSUFBSSxNQUFNLElBQUksRUFBRTtBQUM1QixnQkFBZ0IsT0FBTyxJQUFJLENBQUM7QUFDNUIsWUFBWSxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNoRCxTQUFTO0FBQ1QsUUFBUSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDRixZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBUSxJQUFJLEtBQUssQ0FBQ0MsY0FBWSxDQUFDLElBQUksSUFBSSxFQUFFO0FBQ3pDLFlBQVksTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUNBLGNBQVksQ0FBQyxDQUFDLENBQUM7QUFDbkQsU0FBUztBQUNULGFBQWEsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFO0FBQzdCLFlBQVksTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7QUFDaEMsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDMUMsU0FBUztBQUNULFFBQVEsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDdkMsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUU7QUFDeEIsWUFBWSxRQUFRLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNuQyxTQUFTO0FBQ1QsUUFBUSxJQUFJLEtBQUssQ0FBQ0Usa0JBQWdCLENBQUMsSUFBSSxJQUFJLEVBQUU7QUFDN0MsWUFBWSxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDM0IsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDO0FBQzVCLGFBQWE7QUFDYixZQUFZLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQ0Esa0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsRSxZQUFZLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUM3QixnQkFBZ0IsUUFBUSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDdkMsZ0JBQWdCLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRTtBQUNoQyxvQkFBb0IsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM3QixvQkFBb0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDdEQsd0JBQXdCLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0UscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsWUFBWSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDN0IsZ0JBQWdCLFFBQVEsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ3ZDLGdCQUFnQixJQUFJLElBQUksSUFBSSxFQUFFO0FBQzlCLG9CQUFvQixJQUFJLElBQUksRUFBRSxDQUFDO0FBQy9CLGFBQWE7QUFDYixZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUNyRCxnQkFBZ0IsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLEVBQUUsRUFBRTtBQUM3QyxvQkFBb0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRSxvQkFBb0IsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUU7QUFDeEQsd0JBQXdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RCxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCLHFCQUFxQjtBQUNyQixvQkFBb0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRSxvQkFBb0IsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUU7QUFDeEQsd0JBQXdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNuRixxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QyxRQUFRLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLFFBQVEsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQzNCLFlBQVksVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDcEQsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsRyxZQUFZLElBQUksU0FBUyxFQUFFO0FBQzNCLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUU7QUFDMUQsb0JBQW9CLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RCxpQkFBaUI7QUFDakIscUJBQXFCLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRTtBQUNyQyxvQkFBb0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELG9CQUFvQixVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0QsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLEdBQUcsRUFBRSxFQUFFO0FBQ2hDLGdCQUFnQixVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUQsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxFQUFFLEVBQUU7QUFDakMsZ0JBQWdCLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxRCxhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtBQUN6RSxZQUFZLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsU0FBUztBQUNULFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDMUIsS0FBSztBQUNMLElBQUkscUNBQXFDLENBQUMsTUFBTSxFQUFFO0FBQ2xELFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUN2QyxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDNUMsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFO0FBQzVDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQzFFLFFBQVEsSUFBSSxpQkFBaUIsRUFBRTtBQUMvQixZQUFZLE1BQU0sYUFBYSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2pDLGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixhQUFhO0FBQ2IsWUFBWSxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFO0FBQ3RGLGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixhQUFhO0FBQ2IsWUFBWSxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDNUQsWUFBWSxJQUFJLGVBQWUsR0FBRyxFQUFFLEVBQUU7QUFDdEMsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDO0FBQzVCLGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLO0FBQ0wsSUFBSSxrQ0FBa0MsQ0FBQyxNQUFNLEVBQUU7QUFDL0MsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFO0FBQzVDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0FBQzNGLFFBQVEsSUFBSSxpQkFBaUIsRUFBRTtBQUMvQixZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNqQyxnQkFBZ0IsT0FBTyxJQUFJLENBQUM7QUFDNUIsYUFBYTtBQUNiLFlBQVksTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsWUFBWSxNQUFNLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxZQUFZLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUU7QUFDdEYsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDO0FBQzVCLGFBQWE7QUFDYixZQUFZLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM1RCxZQUFZLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ2hFLFlBQVksSUFBSSxlQUFlLEdBQUcsRUFBRSxJQUFJLGlCQUFpQixHQUFHLEVBQUUsRUFBRTtBQUNoRSxnQkFBZ0IsT0FBTyxJQUFJLENBQUM7QUFDNUIsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTCxJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUMvQixJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUMvQixJQUFJLHdCQUF3QixHQUFHLElBQUksQ0FBQztBQUNwQyxJQUFJLGlDQUFpQyxHQUFHO0FBQ3hDLFFBQVEsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQ25ELFFBQVEsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQ25ELFFBQVEsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEtBQUssYUFBYSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxhQUFhLEVBQUU7QUFDdEcsWUFBWSxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztBQUNqRCxTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztBQUNqSixRQUFRLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxhQUFhLENBQUM7QUFDakQsUUFBUSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsYUFBYSxDQUFDO0FBQ2pELFFBQVEsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUM7QUFDN0MsS0FBSztBQUNMLElBQUksb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLElBQUkseUJBQXlCLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLElBQUksbUNBQW1DLEdBQUc7QUFDMUMsUUFBUSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDckQsUUFBUSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDdkQsUUFBUSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxjQUFjLElBQUksSUFBSSxDQUFDLHFCQUFxQixLQUFLLGVBQWUsRUFBRTtBQUM1RyxZQUFZLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDO0FBQ2xELFNBQVM7QUFDVCxRQUFRLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDOUYsUUFBUSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsY0FBYyxDQUFDO0FBQ25ELFFBQVEsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGVBQWUsQ0FBQztBQUNyRCxRQUFRLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDO0FBQzlDLEtBQUs7QUFDTDs7QUMzVWUsTUFBTUMsd0JBQXNCLFNBQVMsNEJBQTRCLENBQUM7QUFDakYsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzVCLFFBQVEsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFCLEtBQUs7QUFDTCxJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8sdURBQXVELENBQUM7QUFDdkUsS0FBSztBQUNMLElBQUksYUFBYSxHQUFHO0FBQ3BCLFFBQVEsT0FBTyx1QkFBdUIsQ0FBQztBQUN2QyxLQUFLO0FBQ0wsSUFBSSxhQUFhLEdBQUc7QUFDcEIsUUFBUSxPQUFPLHNGQUFzRixDQUFDO0FBQ3RHLEtBQUs7QUFDTCxJQUFJLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakQsUUFBUSxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsNEJBQTRCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlFLFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUN6QixZQUFZLE9BQU8sVUFBVSxDQUFDO0FBQzlCLFNBQVM7QUFDVCxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUN4QyxZQUFZLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQsWUFBWSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUN4QyxnQkFBZ0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN2RSxnQkFBZ0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO0FBQy9CLGdCQUFnQixVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0QsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtBQUM1QyxZQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RCxZQUFZLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQsWUFBWSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRTtBQUN4QyxnQkFBZ0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN2RSxhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQzFDLFlBQVksVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELFlBQVksTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRCxZQUFZLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUMzQixnQkFBZ0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsK0JBQStCLENBQUMsQ0FBQztBQUNsRSxLQUFLO0FBQ0wsSUFBSSw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUMzRCxRQUFRLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLDhCQUE4QixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakcsUUFBUSxJQUFJLG1CQUFtQixFQUFFO0FBQ2pDLFlBQVksbUJBQW1CLENBQUMsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUM7QUFDeEUsU0FBUztBQUNULFFBQVEsT0FBTyxtQkFBbUIsQ0FBQztBQUNuQyxLQUFLO0FBQ0w7O0FDakRBLE1BQU1sQixVQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVOLG9CQUFrQixDQUFDLHdDQUF3QyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEcsTUFBTXlCLGdCQUFjLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUV4Qiw0QkFBMEIsQ0FBQyx3Q0FBd0MsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xHLE1BQU15QiwyQkFBeUIsU0FBUyxzQ0FBc0MsQ0FBQztBQUM5RixJQUFJLFVBQVUsQ0FBQztBQUNmLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRTtBQUM1QixRQUFRLEtBQUssRUFBRSxDQUFDO0FBQ2hCLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDckMsS0FBSztBQUNMLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBTyxJQUFJLENBQUMsVUFBVSxHQUFHRCxnQkFBYyxHQUFHbkIsVUFBTyxDQUFDO0FBQzFELEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxRQUFRLEdBQUdKLGVBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDdkIsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxPQUFPLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDM0csS0FBSztBQUNMOztBQ25CQSxNQUFNSSxVQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVOLG9CQUFrQixDQUFDLHdEQUF3RCxDQUFDLEdBQUcsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BJLE1BQU15QixnQkFBYyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFeEIsNEJBQTBCLENBQUMsd0NBQXdDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqSCxNQUFNMEIscUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsTUFBTUMsNkJBQTJCLFNBQVMsc0NBQXNDLENBQUM7QUFDaEcsSUFBSSxVQUFVLENBQUM7QUFDZixJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDNUIsUUFBUSxLQUFLLEVBQUUsQ0FBQztBQUNoQixRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ3JDLEtBQUs7QUFDTCxJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU8sSUFBSSxDQUFDLFVBQVUsR0FBR0gsZ0JBQWMsR0FBR25CLFVBQU8sQ0FBQztBQUMxRCxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sU0FBUyxHQUFHSixlQUFhLENBQUMsS0FBSyxDQUFDeUIscUJBQW1CLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUN4QixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzRixLQUFLO0FBQ0w7O0FDdEJPLE1BQU0sTUFBTSxDQUFDO0FBQ3BCLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDN0IsUUFBUSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRCxLQUFLO0FBQ0wsQ0FBQztBQUNNLE1BQU0sY0FBYyxDQUFDO0FBQzVCLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDN0IsUUFBUSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2hDLFlBQVksT0FBTyxPQUFPLENBQUM7QUFDM0IsU0FBUztBQUNULFFBQVEsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLFFBQVEsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakQsWUFBWSxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFlBQVksTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEgsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZGLGdCQUFnQixhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzlDLGdCQUFnQixTQUFTLEdBQUcsVUFBVSxDQUFDO0FBQ3ZDLGFBQWE7QUFDYixpQkFBaUI7QUFDakIsZ0JBQWdCLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUN2QyxnQkFBZ0IsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDO0FBQ3pDLGdCQUFnQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzFGLGdCQUFnQixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDcEMsb0JBQW9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdHLGlCQUFpQixDQUFDLENBQUM7QUFDbkIsZ0JBQWdCLFNBQVMsR0FBRyxZQUFZLENBQUM7QUFDekMsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLElBQUksU0FBUyxJQUFJLElBQUksRUFBRTtBQUMvQixZQUFZLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUMsU0FBUztBQUNULFFBQVEsT0FBTyxhQUFhLENBQUM7QUFDN0IsS0FBSztBQUNMOztBQ2pDZSxNQUFNLDZCQUE2QixTQUFTLGNBQWMsQ0FBQztBQUMxRSxJQUFJLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFO0FBQy9ELFFBQVEsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3pHLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRTtBQUNwRCxRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEVBQUU7QUFDcEcsWUFBWSxRQUFRLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLO0FBQ25FLGdCQUFnQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdEQsb0JBQW9CLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLGlCQUFpQjtBQUNqQixhQUFhLENBQUMsQ0FBQztBQUNmLFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSztBQUNyRSxnQkFBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3BELG9CQUFvQixRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6RSxpQkFBaUI7QUFDakIsYUFBYSxDQUFDLENBQUM7QUFDZixTQUFTO0FBQ1QsUUFBUSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxZQUFZLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkQsWUFBWSxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9DLFlBQVksSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRTtBQUN2RyxnQkFBZ0IsTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzlELGdCQUFnQixRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLGdCQUFnQixRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDbkUsYUFBYTtBQUNiLGlCQUFpQixJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUU7QUFDL0csZ0JBQWdCLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RCxnQkFBZ0IsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLGdCQUFnQixVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLGdCQUFnQixVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDdkUsYUFBYTtBQUNiLGlCQUFpQixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFO0FBQzVHLGdCQUFnQixNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFELGdCQUFnQixRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDbkUsYUFBYTtBQUNiLGlCQUFpQixJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUU7QUFDL0csZ0JBQWdCLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvRCxnQkFBZ0IsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZFLGFBQWE7QUFDYixpQkFBaUI7QUFDakIsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hFLGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUMsUUFBUSxNQUFNLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7QUFDeEMsUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDcEMsUUFBUSxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEUsUUFBUSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRTtBQUMvQyxZQUFZLE1BQU0sQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksR0FBRyxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztBQUN4RSxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ3hFLFNBQVM7QUFDVCxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDs7QUN6RGUsTUFBTUUseUJBQXVCLFNBQVMsNkJBQTZCLENBQUM7QUFDbkYsSUFBSSxjQUFjLEdBQUc7QUFDckIsUUFBUSxPQUFPLHNDQUFzQyxDQUFDO0FBQ3RELEtBQUs7QUFDTDs7QUNITyxTQUFTLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDNUQsSUFBSSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEMsSUFBSSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO0FBQ3ZDLElBQUksTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztBQUN2QyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2hFLElBQUksSUFBSSxVQUFVLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxVQUFVLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRTtBQUMxRCxRQUFRLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQztBQUNuRixRQUFRLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQztBQUNuRixRQUFRLE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyRSxRQUFRLElBQUksVUFBVSxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDcEcsWUFBWSxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNuRSxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25ELFlBQVksSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzlDLGdCQUFnQixpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEQsYUFBYTtBQUNiLGlCQUFpQjtBQUNqQixnQkFBZ0IsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZELGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztBQUNqQyxLQUFLO0FBQ0wsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBQ00sU0FBUyxzQkFBc0IsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFO0FBQ3JFLElBQUksTUFBTSxpQkFBaUIsR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEQsSUFBSSxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDekMsUUFBUSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNwRSxRQUFRLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQy9DLFlBQVksaUJBQWlCLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDNUUsWUFBWSxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUU7QUFDeEQsZ0JBQWdCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQzFGLGFBQWE7QUFDYixpQkFBaUI7QUFDakIsZ0JBQWdCLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLGFBQWE7QUFDYixTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksaUJBQWlCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDM0UsWUFBWSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUNyRixTQUFTO0FBQ1QsS0FBSztBQUNMLFNBQVM7QUFDVCxRQUFRLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ25FLFFBQVEsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDdkUsUUFBUSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN2RSxRQUFRLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLEtBQUs7QUFDTCxJQUFJLElBQUksYUFBYSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO0FBQ25ELFFBQVEsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLEtBQUs7QUFDTCxJQUFJLE1BQU0seUJBQXlCLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJO0FBQzNFLFNBQVMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7QUFDNUMsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVGLElBQUksSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQzdDLFFBQVEsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUUsS0FBSztBQUNMLFNBQVMsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFO0FBQ2xGLFFBQVEsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDM0UsS0FBSztBQUNMLElBQUksSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksUUFBUSxDQUFDLEVBQUUsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQ2hHLFFBQVEsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzdDLFlBQVksaUJBQWlCLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDakYsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2hGLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDcEQsSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDcEQsSUFBSSxPQUFPLGlCQUFpQixDQUFDO0FBQzdCOztBQ3ZFZSxNQUFNLDRCQUE0QixTQUFTLGNBQWMsQ0FBQztBQUN6RSxJQUFJLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFO0FBQy9ELFFBQVEsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRTtBQUNuRixhQUFhLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUMvRSxZQUFZLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFO0FBQzlELEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRTtBQUN6RCxRQUFRLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFO0FBQ3ZELGNBQWMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQztBQUM1RCxjQUFjLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUM3RCxRQUFRLE1BQU0sQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQztBQUMzQyxRQUFRLE1BQU0sQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksR0FBRyxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztBQUN6RSxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDs7QUNmZSxNQUFNQyx3QkFBc0IsU0FBUyw0QkFBNEIsQ0FBQztBQUNqRixJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8sSUFBSSxNQUFNLENBQUMsa0RBQWtELENBQUMsQ0FBQztBQUM5RSxLQUFLO0FBQ0w7O0FDSkEsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLE1BQU0sQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hELElBQUksaUJBQWlCLENBQUM7QUFDdEIsSUFBSSxXQUFXLENBQUMsaUJBQWlCLEVBQUU7QUFDbkMsUUFBUSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFDbkQsS0FBSztBQUNMLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDN0IsUUFBUSxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztBQUNqRSxRQUFRLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUs7QUFDcEMsWUFBWSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckYsWUFBWSxNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0QsWUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3hCLGdCQUFnQixPQUFPO0FBQ3ZCLGFBQWE7QUFDYixZQUFZLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN4RCxZQUFZLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ2hGLFlBQVksTUFBTSxXQUFXLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLGlCQUFpQixFQUFFLENBQUM7QUFDcEYsWUFBWSxNQUFNLHVCQUF1QixHQUFHLGdCQUFnQixDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDakcsWUFBWSxJQUFJLHVCQUF1QixJQUFJLElBQUksRUFBRTtBQUNqRCxnQkFBZ0IsT0FBTztBQUN2QixhQUFhO0FBQ2IsWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDaEMsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVILGFBQWEsQ0FBQyxDQUFDO0FBQ2YsWUFBWSxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDN0UsWUFBWSxJQUFJLHFCQUFxQixLQUFLLElBQUksSUFBSSx1QkFBdUIsSUFBSSxxQkFBcUIsRUFBRTtBQUNwRyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO0FBQzlELG9CQUFvQixPQUFPO0FBQzNCLGlCQUFpQjtBQUNqQixnQkFBZ0IsSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzlDLG9CQUFvQixPQUFPO0FBQzNCLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsWUFBWSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQUU7QUFDM0MsZ0JBQWdCLElBQUksWUFBWSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM5QyxvQkFBb0IsT0FBTztBQUMzQixpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFlBQVksTUFBTSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtBQUMzRCxnQkFBZ0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztBQUMvRSxhQUFhO0FBQ2IsWUFBWSxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtBQUMvRSxnQkFBZ0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztBQUM3RSxhQUFhO0FBQ2IsU0FBUyxDQUFDLENBQUM7QUFDWCxRQUFRLE9BQU8sT0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTDs7QUNqREEsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwSCxNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQztBQUNyQyxNQUFNLGlDQUFpQyxHQUFHLENBQUMsQ0FBQztBQUM1QyxNQUFNLG1DQUFtQyxHQUFHLENBQUMsQ0FBQztBQUMvQixNQUFNLDRCQUE0QixDQUFDO0FBQ2xELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDN0IsUUFBUSxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFO0FBQzFDLFlBQVksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO0FBQzFELGdCQUFnQixPQUFPO0FBQ3ZCLGFBQWE7QUFDYixZQUFZLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyRixZQUFZLE1BQU0sS0FBSyxHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvRCxZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDeEIsZ0JBQWdCLE9BQU87QUFDdkIsYUFBYTtBQUNiLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQ2hDLGdCQUFnQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkYsYUFBYSxDQUFDLENBQUM7QUFDZixZQUFZLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLFlBQVksTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzdGLFlBQVksSUFBSSxjQUFjLEdBQUcsVUFBVSxHQUFHLEVBQUUsR0FBRyxZQUFZLENBQUM7QUFDaEUsWUFBWSxJQUFJLGNBQWMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO0FBQzFDLGdCQUFnQixPQUFPO0FBQ3ZCLGFBQWE7QUFDYixZQUFZLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLEtBQUssR0FBRyxFQUFFO0FBQzNELGdCQUFnQixjQUFjLEdBQUcsQ0FBQyxjQUFjLENBQUM7QUFDakQsYUFBYTtBQUNiLFlBQVksSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRTtBQUNwQyxnQkFBZ0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDcEUsYUFBYTtBQUNiLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDbEUsWUFBWSxNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxTQUFTLENBQUMsQ0FBQztBQUNYLFFBQVEsT0FBTyxPQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMOztBQ25DZSxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDN0IsUUFBUSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2hDLFlBQVksT0FBTyxPQUFPLENBQUM7QUFDM0IsU0FBUztBQUNULFFBQVEsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQ25DLFFBQVEsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakQsWUFBWSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsWUFBWSxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUMzRSxnQkFBZ0IsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNqRCxnQkFBZ0IsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUNwQyxnQkFBZ0IsU0FBUztBQUN6QixhQUFhO0FBQ2IsWUFBWSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDNUIsWUFBWSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDL0IsWUFBWSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzdELGdCQUFnQixJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQzlCLGdCQUFnQixPQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JDLGFBQWE7QUFDYixpQkFBaUI7QUFDakIsZ0JBQWdCLElBQUksR0FBRyxVQUFVLENBQUM7QUFDbEMsZ0JBQWdCLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDakMsYUFBYTtBQUNiLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQ2hDLGdCQUFnQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckYsYUFBYSxDQUFDLENBQUM7QUFDZixZQUFZLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDOUIsU0FBUztBQUNULFFBQVEsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO0FBQ2hDLFlBQVksZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM3QyxTQUFTO0FBQ1QsUUFBUSxPQUFPLGVBQWUsQ0FBQztBQUMvQixLQUFLO0FBQ0w7O0FDaENPLFNBQVMsZ0NBQWdDLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7QUFDL0UsSUFBSSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztBQUM1RCxJQUFJLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdkUsSUFBSSxJQUFJLFVBQVUsR0FBRyxJQUFJLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RELElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDMUMsSUFBSSxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDO0FBQ00sU0FBUyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtBQUM3RCxJQUFJLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN4QyxJQUFJLFFBQVEsUUFBUTtBQUNwQixRQUFRLEtBQUssTUFBTTtBQUNuQixZQUFZLE9BQU8sdUJBQXVCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzdELFFBQVEsS0FBSyxNQUFNO0FBQ25CLFlBQVksT0FBTyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDOUQsUUFBUSxLQUFLLE1BQU07QUFDbkIsWUFBWSxJQUFJLFVBQVUsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQzlDLGdCQUFnQixPQUFPLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDL0QsYUFBYTtBQUNiLFlBQVksSUFBSSxVQUFVLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtBQUNoRCxnQkFBZ0IsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVE7QUFDL0Msb0JBQW9CLE9BQU8sQ0FBQyxDQUFDO0FBQzdCLGdCQUFnQixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTTtBQUM3QyxvQkFBb0IsT0FBTyxDQUFDLENBQUM7QUFDN0IsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNuQyxhQUFhO0FBQ2IsWUFBWSxJQUFJLE9BQU8sR0FBRyxVQUFVLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDbkUsZ0JBQWdCLE9BQU8sdUJBQXVCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pFLGFBQWE7QUFDYixpQkFBaUI7QUFDakIsZ0JBQWdCLE9BQU8sdUJBQXVCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyRSxhQUFhO0FBQ2IsS0FBSztBQUNMLElBQUksT0FBTyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUNNLFNBQVMsdUJBQXVCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUMxRCxJQUFJLE1BQU0sUUFBUSxHQUFHLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRSxJQUFJLE1BQU0sT0FBTyxHQUFHLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM5RCxJQUFJLE9BQU8sT0FBTyxHQUFHLENBQUMsUUFBUSxHQUFHLE9BQU8sR0FBRyxRQUFRLENBQUM7QUFDcEQsQ0FBQztBQUNNLFNBQVMsdUJBQXVCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUMxRCxJQUFJLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN4QyxJQUFJLElBQUksWUFBWSxHQUFHLE9BQU8sR0FBRyxVQUFVLENBQUM7QUFDNUMsSUFBSSxJQUFJLFlBQVksR0FBRyxDQUFDLEVBQUU7QUFDMUIsUUFBUSxZQUFZLElBQUksQ0FBQyxDQUFDO0FBQzFCLEtBQUs7QUFDTCxJQUFJLE9BQU8sWUFBWSxDQUFDO0FBQ3hCLENBQUM7QUFDTSxTQUFTLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDM0QsSUFBSSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDeEMsSUFBSSxJQUFJLGFBQWEsR0FBRyxPQUFPLEdBQUcsVUFBVSxDQUFDO0FBQzdDLElBQUksSUFBSSxhQUFhLElBQUksQ0FBQyxFQUFFO0FBQzVCLFFBQVEsYUFBYSxJQUFJLENBQUMsQ0FBQztBQUMzQixLQUFLO0FBQ0wsSUFBSSxPQUFPLGFBQWEsQ0FBQztBQUN6Qjs7QUNyRGUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQzdCLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO0FBQ3pDLFlBQVksT0FBTyxPQUFPLENBQUM7QUFDM0IsU0FBUztBQUNULFFBQVEsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSztBQUNwQyxZQUFZLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztBQUMxRSxZQUFZLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFO0FBQzlGLGdCQUFnQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLDJCQUEyQixFQUFFLENBQUM7QUFDaEYsZ0JBQWdCLE1BQU0sZUFBZSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzFELGdCQUFnQixlQUFlLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RSxnQkFBZ0JDLGdCQUFzQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDdEUsZ0JBQWdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUNwQyxvQkFBb0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxPQUFPLENBQUMsd0JBQXdCLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0osaUJBQWlCLENBQUMsQ0FBQztBQUNuQixnQkFBZ0IsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUU7QUFDM0Qsb0JBQW9CQSxnQkFBc0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ3hFLG9CQUFvQixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUNqRSx3QkFBd0IsZUFBZSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0Usd0JBQXdCQSxnQkFBc0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzVFLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFlBQVksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUU7QUFDeEYsZ0JBQWdCLElBQUksU0FBUyxHQUFHLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRyxnQkFBZ0IsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDbEYsZ0JBQWdCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNqRSxnQkFBZ0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQ3BDLG9CQUFvQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekcsaUJBQWlCLENBQUMsQ0FBQztBQUNuQixnQkFBZ0IsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUMzRSxvQkFBb0IsSUFBSSxTQUFTLEdBQUcsdUJBQXVCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZHLG9CQUFvQixNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUN0RixvQkFBb0IsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ25FLG9CQUFvQixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDeEMsd0JBQXdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3ZCLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsWUFBWSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUN2RixnQkFBZ0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3RSxvQkFBb0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdFLG9CQUFvQixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDeEMsd0JBQXdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3ZCLG9CQUFvQixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNyRSx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdFLHdCQUF3QixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDNUMsNEJBQTRCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRyx5QkFBeUIsQ0FBQyxDQUFDO0FBQzNCLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsUUFBUSxPQUFPLE9BQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0w7O0FDM0RlLE1BQU0sb0JBQW9CLFNBQVMsTUFBTSxDQUFDO0FBQ3pELElBQUksVUFBVSxDQUFDO0FBQ2YsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzVCLFFBQVEsS0FBSyxFQUFFLENBQUM7QUFDaEIsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUNyQyxLQUFLO0FBQ0wsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUM3QixRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRTtBQUNqRSxZQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUNoQyxnQkFBZ0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLDBCQUEwQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RSxhQUFhLENBQUMsQ0FBQztBQUNmLFlBQVksT0FBTyxLQUFLLENBQUM7QUFDekIsU0FBUztBQUNULFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUU7QUFDekMsWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDaEMsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyx5QkFBeUIsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRixhQUFhLENBQUMsQ0FBQztBQUNmLFlBQVksT0FBTyxLQUFLLENBQUM7QUFDekIsU0FBUztBQUNULFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRTtBQUNyRCxZQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUNoQyxnQkFBZ0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLHlCQUF5QixFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLGFBQWEsQ0FBQyxDQUFDO0FBQ2YsWUFBWSxPQUFPLEtBQUssQ0FBQztBQUN6QixTQUFTO0FBQ1QsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDN0IsWUFBWSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0QsU0FBUztBQUNULFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMLElBQUksaUJBQWlCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUN2QyxRQUFRLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxFQUFFO0FBQ25ELFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQ2hDLGdCQUFnQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsMENBQTBDLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkcsYUFBYSxDQUFDLENBQUM7QUFDZixZQUFZLE9BQU8sS0FBSyxDQUFDO0FBQ3pCLFNBQVM7QUFDVCxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDs7QUN2Q0EsTUFBTXpCLFVBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQywwQ0FBMEM7QUFDckUsSUFBSSxNQUFNO0FBQ1YsSUFBSSwyQkFBMkI7QUFDL0IsSUFBSSxLQUFLO0FBQ1QsSUFBSSxpQ0FBaUM7QUFDckMsSUFBSSxJQUFJO0FBQ1IsSUFBSSxHQUFHO0FBQ1AsSUFBSSwyQkFBMkI7QUFDL0IsSUFBSSxJQUFJO0FBQ1IsSUFBSSxJQUFJO0FBQ1IsSUFBSSxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTVMsbUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLE1BQU1DLG9CQUFrQixHQUFHLENBQUMsQ0FBQztBQUM3QixNQUFNQyxtQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDNUIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDNUIsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDOUIsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDOUIsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7QUFDbkMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLE1BQU0sZUFBZSxTQUFTLHNDQUFzQyxDQUFDO0FBQ3BGLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBT1gsVUFBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDO0FBQzNELFlBQVksTUFBTSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUNTLG1CQUFpQixDQUFDLENBQUM7QUFDdEQsWUFBWSxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQ0Msb0JBQWtCLENBQUMsQ0FBQztBQUN4RCxZQUFZLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDQyxtQkFBaUIsQ0FBQyxDQUFDO0FBQ3JELFNBQVMsQ0FBQyxDQUFDO0FBQ1gsUUFBUSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLElBQUksRUFBRTtBQUM5QyxZQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsWUFBWSxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLFlBQVksSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxJQUFJLEVBQUU7QUFDcEQsZ0JBQWdCLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEYsYUFBYTtBQUNiLFlBQVksSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsSUFBSSxJQUFJLEVBQUU7QUFDekQsZ0JBQWdCLFVBQVUsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUYsYUFBYTtBQUNiLFlBQVksSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxFQUFFO0FBQzFDLGdCQUFnQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDL0IsZ0JBQWdCLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLEVBQUU7QUFDbEQsb0JBQW9CLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO0FBQzlFLG9CQUFvQixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDekMsb0JBQW9CLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLElBQUksSUFBSSxFQUFFO0FBQ2hFLHdCQUF3QixZQUFZLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7QUFDaEYscUJBQXFCO0FBQ3JCLG9CQUFvQixNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUM3QyxvQkFBb0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3BDLHdCQUF3QixNQUFNLElBQUksWUFBWSxDQUFDO0FBQy9DLHFCQUFxQjtBQUNyQix5QkFBeUI7QUFDekIsd0JBQXdCLE1BQU0sSUFBSSxZQUFZLENBQUM7QUFDL0MscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQixnQkFBZ0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1RCxhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDM0QsS0FBSztBQUNMOztBQzdEZSxNQUFNLDRCQUE0QixTQUFTLGNBQWMsQ0FBQztBQUN6RSxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRTtBQUN6RCxRQUFRLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QyxRQUFRLFNBQVMsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQztBQUM5QyxRQUFRLFNBQVMsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztBQUMzRSxRQUFRLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQzlFLFFBQVEsSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFO0FBQzNCLFlBQVksU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDaEYsU0FBUztBQUNULFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsS0FBSztBQUNMLElBQUksa0JBQWtCLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUU7QUFDL0QsUUFBUSxNQUFNLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUU7QUFDbEYsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUNsRCxZQUFZLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlDLFFBQVEsT0FBTyxxQkFBcUIsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUM3RSxLQUFLO0FBQ0w7O0FDWE8sU0FBUywwQkFBMEIsQ0FBQyxhQUFhLEVBQUUsVUFBVSxHQUFHLEtBQUssRUFBRTtBQUM5RSxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksZUFBZSxFQUFFLENBQUMsQ0FBQztBQUN6RCxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksNEJBQTRCLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZFLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSw0QkFBNEIsRUFBRSxDQUFDLENBQUM7QUFDdkUsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLHFCQUFxQixFQUFFLENBQUMsQ0FBQztBQUNoRSxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7QUFDN0QsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFrQixFQUFFLENBQUMsQ0FBQztBQUMxRCxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUN0RSxJQUFJLE9BQU8sYUFBYSxDQUFDO0FBQ3pCOztBQ2RPLFNBQVMsR0FBRyxDQUFDLFNBQVMsRUFBRTtBQUMvQixJQUFJLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQywyQkFBMkIsRUFBRSxDQUFDO0FBQy9ELElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDM0QsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDN0MsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDN0MsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7QUFDdEUsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDNUMsSUFBSSxPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDO0FBQ00sU0FBUyxLQUFLLENBQUMsU0FBUyxFQUFFO0FBQ2pDLElBQUksTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLDJCQUEyQixFQUFFLENBQUM7QUFDL0QsSUFBSSxNQUFNLFNBQVMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzRCxJQUFJLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM3QyxJQUFJLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM1QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDakMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDOUMsSUFBSSxPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDO0FBQ00sU0FBUyxTQUFTLENBQUMsU0FBUyxFQUFFO0FBQ3JDLElBQUksT0FBTyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFDTSxTQUFTLFFBQVEsQ0FBQyxTQUFTLEVBQUU7QUFDcEMsSUFBSSxPQUFPLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUNNLFNBQVMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUU7QUFDaEQsSUFBSSxPQUFPLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBQ00sU0FBUyxXQUFXLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRTtBQUM5QyxJQUFJLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQywyQkFBMkIsRUFBRSxDQUFDO0FBQy9ELElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDM0QsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNuRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQy9DLElBQUksaUJBQWlCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzFDLElBQUksZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNqQyxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFDTSxTQUFTLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxHQUFHLEVBQUUsRUFBRTtBQUNuRCxJQUFJLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQywyQkFBMkIsRUFBRSxDQUFDO0FBQy9ELElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDM0QsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDN0MsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2QyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUNoRCxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFDTSxTQUFTLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxHQUFHLENBQUMsRUFBRTtBQUNwRCxJQUFJLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQywyQkFBMkIsRUFBRSxDQUFDO0FBQzdELElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDM0QsSUFBSSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDbkMsUUFBUSxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzFFLEtBQUs7QUFDTCxJQUFJLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM3QyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZDLElBQUksT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUNNLFNBQVMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLEdBQUcsRUFBRSxFQUFFO0FBQ25ELElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDM0QsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0MsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUNoRCxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFDTSxTQUFTLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxTQUFTLEdBQUcsRUFBRSxFQUFFO0FBQzVELElBQUksSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDLDJCQUEyQixFQUFFLENBQUM7QUFDN0QsSUFBSSxNQUFNLFNBQVMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzRCxJQUFJLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDdEUsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDN0MsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2QyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUNsRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUNoRCxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFDTSxTQUFTLFFBQVEsQ0FBQyxTQUFTLEVBQUU7QUFDcEMsSUFBSSxNQUFNLFNBQVMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzRCxJQUFJLElBQUksU0FBUyxDQUFDLDJCQUEyQixFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ2hFLFFBQVEsU0FBUyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkQsS0FBSztBQUNMLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDakQsSUFBSSxPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDO0FBQ00sU0FBUyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsR0FBRyxDQUFDLEVBQUU7QUFDbEQsSUFBSSxNQUFNLFNBQVMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzRCxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQ2hELElBQUksT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUNNLFNBQVMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLEdBQUcsRUFBRSxFQUFFO0FBQ3JELElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDM0QsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0MsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2QyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUNsRCxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFDTSxTQUFTLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDaEMsSUFBSSxNQUFNLFNBQVMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzRCxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQzdDLElBQUksT0FBTyxTQUFTLENBQUM7QUFDckI7O0FDbkhBLE1BQU1YLFVBQU8sR0FBRyxrRkFBa0YsQ0FBQztBQUNwRixNQUFNLGtCQUFrQixTQUFTLHNDQUFzQyxDQUFDO0FBQ3ZGLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUMxQixRQUFRLE9BQU9BLFVBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDekMsUUFBUSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQsUUFBUSxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztBQUMxRCxRQUFRLFFBQVEsU0FBUztBQUN6QixZQUFZLEtBQUssS0FBSztBQUN0QixnQkFBZ0IsU0FBUyxHQUFHMEIsR0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssT0FBTztBQUN4QixnQkFBZ0IsU0FBUyxHQUFHQyxLQUFnQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNoRSxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssV0FBVztBQUM1QixnQkFBZ0IsU0FBUyxHQUFHQyxTQUFvQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNwRSxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssVUFBVSxDQUFDO0FBQzVCLFlBQVksS0FBSyxLQUFLLENBQUM7QUFDdkIsWUFBWSxLQUFLLE1BQU07QUFDdkIsZ0JBQWdCLFNBQVMsR0FBR0MsUUFBbUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbkUsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLFNBQVM7QUFDMUIsZ0JBQWdCLFNBQVMsR0FBR0MsT0FBa0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbEUsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLFlBQVk7QUFDN0IsZ0JBQWdCLFNBQVMsR0FBR0MsV0FBc0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLGdCQUFnQixNQUFNO0FBQ3RCLFlBQVk7QUFDWixnQkFBZ0IsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFO0FBQ3JELG9CQUFvQixJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDbkQsd0JBQXdCLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzNFLHdCQUF3QixXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RSx3QkFBd0IsVUFBVSxHQUFHLFdBQVcsQ0FBQztBQUNqRCxxQkFBcUI7QUFDckIsb0JBQW9CLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM3RCxvQkFBb0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0MsaUJBQWlCO0FBQ2pCLGdCQUFnQixNQUFNO0FBQ3RCLFNBQVM7QUFDVCxRQUFRLFNBQVMsQ0FBQyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUN0RCxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDs7QUM5Q0EsTUFBTS9CLFVBQU8sR0FBRyxpRkFBaUYsQ0FBQztBQUNuRixNQUFNLGtCQUFrQixTQUFTLHNDQUFzQyxDQUFDO0FBQ3ZGLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBT0EsVUFBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzdCLFFBQVEsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO0FBQ3RDLFlBQVksS0FBSyxXQUFXO0FBQzVCLGdCQUFnQixTQUFTLEdBQUdnQyxTQUEwQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMxRSxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssU0FBUyxDQUFDO0FBQzNCLFlBQVksS0FBSyxPQUFPO0FBQ3hCLGdCQUFnQixTQUFTLEdBQUdDLE9BQXdCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hFLGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxVQUFVO0FBQzNCLGdCQUFnQixTQUFTLEdBQUdDLFFBQXlCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pFLGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxTQUFTO0FBQzFCLGdCQUFnQixTQUFTLEdBQUdDLE9BQXdCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hFLGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxNQUFNLENBQUM7QUFDeEIsWUFBWSxLQUFLLFFBQVE7QUFDekIsZ0JBQWdCLFNBQVMsR0FBR0MsSUFBcUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckUsZ0JBQWdCLE1BQU07QUFDdEIsU0FBUztBQUNULFFBQVEsSUFBSSxTQUFTLEVBQUU7QUFDdkIsWUFBWSxTQUFTLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFDMUQsU0FBUztBQUNULFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsS0FBSztBQUNMOztBQzVCQSxNQUFNcEMsVUFBTyxHQUFHLElBQUksTUFBTSxDQUFDLDBCQUEwQjtBQUNyRCxJQUFJLGNBQWM7QUFDbEIsSUFBSSxnQ0FBZ0M7QUFDcEMsSUFBSSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUNsQixvQkFBa0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0FBQzlELElBQUksMEJBQTBCO0FBQzlCLElBQUksbURBQW1EO0FBQ3ZELElBQUksV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU15QixjQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU04QixlQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU1DLGVBQWEsR0FBRyxDQUFDLENBQUM7QUFDVCxNQUFNLGVBQWUsU0FBUyxzQ0FBc0MsQ0FBQztBQUNwRixJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU90QyxVQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUNPLGNBQVksQ0FBQyxDQUFDO0FBQzNDLFFBQVEsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDK0IsZUFBYSxDQUFDLENBQUM7QUFDN0MsUUFBUSxJQUFJLFlBQVksR0FBRyxNQUFNLElBQUksT0FBTyxDQUFDO0FBQzdDLFFBQVEsWUFBWSxHQUFHLFlBQVksSUFBSSxFQUFFLENBQUM7QUFDMUMsUUFBUSxZQUFZLEdBQUcsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xELFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFFBQVEsSUFBSSxZQUFZLElBQUksTUFBTSxJQUFJLFlBQVksSUFBSSxNQUFNLEVBQUU7QUFDOUQsWUFBWSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQzlCLFNBQVM7QUFDVCxhQUFhLElBQUksWUFBWSxJQUFJLE1BQU0sRUFBRTtBQUN6QyxZQUFZLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDOUIsU0FBUztBQUNULGFBQWEsSUFBSSxZQUFZLElBQUksTUFBTSxFQUFFO0FBQ3pDLFlBQVksUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUM5QixTQUFTO0FBQ1QsUUFBUSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUNELGVBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2hFLFFBQVEsSUFBSSxPQUFPLENBQUM7QUFDcEIsUUFBUSxJQUFJdkQsb0JBQWtCLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQzVELFlBQVksT0FBTyxHQUFHQSxvQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN2RCxTQUFTO0FBQ1QsYUFBYSxJQUFJLFlBQVksSUFBSSxTQUFTLEVBQUU7QUFDNUMsWUFBWSxPQUFPLEdBQUcsUUFBUSxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDN0UsU0FBUztBQUNULGFBQWEsSUFBSSxZQUFZLElBQUksU0FBUyxFQUFFO0FBQzVDLFlBQVksTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3hGLFlBQVksSUFBSSxVQUFVLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxVQUFVLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtBQUNoRixnQkFBZ0IsT0FBTyxHQUFHLFFBQVEsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQy9FLGFBQWE7QUFDYixpQkFBaUI7QUFDakIsZ0JBQWdCLE9BQU8sR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLGdCQUFnQixPQUFPLEdBQUcsUUFBUSxJQUFJLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDekUsZ0JBQWdCLE9BQU8sR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVDLGFBQWE7QUFDYixTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsT0FBTyxnQ0FBZ0MsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN0RixLQUFLO0FBQ0w7O0FDdkRBLE1BQU1rQixVQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyx3Q0FBd0MsRUFBRSxlQUFlLENBQUNkLHNCQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNJLE1BQU1xRCxxQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDOUIsTUFBTUMscUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsTUFBTSwwQkFBMEIsU0FBUyxzQ0FBc0MsQ0FBQztBQUMvRixJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU94QyxVQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUN1QyxxQkFBbUIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xFLFFBQVEsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDQyxxQkFBbUIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xFLFFBQVEsTUFBTSxRQUFRLEdBQUd0RCxzQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4RCxRQUFRLElBQUksUUFBUSxJQUFJLE1BQU0sSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2hFLFlBQVksTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLFlBQVksU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxZQUFZLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMvRixTQUFTO0FBQ1QsUUFBUSxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRTtBQUN0RCxZQUFZLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxZQUFZLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQyxZQUFZLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMvRixTQUFTO0FBQ1QsUUFBUSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztBQUM3RCxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDakUsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDckMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUN6RCxZQUFZLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDekQsU0FBUztBQUNULGFBQWEsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQzNDLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixZQUFZLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFlBQVksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDMUQsWUFBWSxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUQsU0FBUztBQUNULGFBQWEsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQzFDLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsWUFBWSxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNwRCxZQUFZLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxZQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzFELFNBQVM7QUFDVCxRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCLEtBQUs7QUFDTDs7QUMvQ0EsTUFBTWMsU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLFlBQVk7QUFDdkMsSUFBSSxxREFBcUQ7QUFDekQsSUFBSSxxQ0FBcUM7QUFDekMsSUFBSSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUMvQixNQUFNSSxZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ04sTUFBTSxxQkFBcUIsQ0FBQztBQUMzQyxJQUFJLGdCQUFnQixDQUFDO0FBQ3JCLElBQUksY0FBYyxDQUFDO0FBQ25CLElBQUksV0FBVyxDQUFDLFlBQVksRUFBRTtBQUM5QixRQUFRLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZLEdBQUcsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUM7QUFDMUYsUUFBUSxJQUFJLENBQUMsY0FBYyxHQUFHLFlBQVksR0FBRyxtQkFBbUIsR0FBRyxvQkFBb0IsQ0FBQztBQUN4RixLQUFLO0FBQ0wsSUFBSSxPQUFPLEdBQUc7QUFDZCxRQUFRLE9BQU9KLFNBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUM1QixRQUFRLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNoRSxRQUFRLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3BGLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCLFlBQVksTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLFlBQVksSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQzVDLGdCQUFnQixPQUFPO0FBQ3ZCLGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM1QyxZQUFZLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELFlBQVksSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQzNDLGdCQUFnQixPQUFPO0FBQ3ZCLGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDN0QsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxFQUFFO0FBQy9FLFlBQVksT0FBTztBQUNuQixTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDSSxZQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN6RCxZQUFZLE9BQU87QUFDbkIsU0FBUztBQUNULFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoRSxRQUFRLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUMzRCxRQUFRLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRTtBQUNyQyxZQUFZLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRTtBQUM1QixnQkFBZ0IsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksS0FBSyxJQUFJLEVBQUUsRUFBRTtBQUMxRCxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEQsaUJBQWlCO0FBQ2pCLHFCQUFxQjtBQUNyQixvQkFBb0IsT0FBTyxJQUFJLENBQUM7QUFDaEMsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsRUFBRTtBQUNqQyxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QyxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1QyxRQUFRLElBQUksS0FBSyxDQUFDQSxZQUFVLENBQUMsRUFBRTtBQUMvQixZQUFZLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUNBLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDOUQsWUFBWSxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM3RCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM5QyxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0UsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsU0FBUztBQUNULFFBQVEsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFDN0QsS0FBSztBQUNMOztBQ25FQSxNQUFNSixTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxzQ0FBc0MsRUFBRU4sb0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekcsTUFBTStDLGlCQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxzQ0FBc0MsRUFBRTlDLDRCQUEwQixDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFHLE1BQU0rQyxzQ0FBb0MsU0FBUyxzQ0FBc0MsQ0FBQztBQUN6RyxJQUFJLGtCQUFrQixDQUFDO0FBQ3ZCLElBQUksV0FBVyxDQUFDLGtCQUFrQixHQUFHLElBQUksRUFBRTtBQUMzQyxRQUFRLEtBQUssRUFBRSxDQUFDO0FBQ2hCLFFBQVEsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQ3JELEtBQUs7QUFDTCxJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixHQUFHMUMsU0FBTyxHQUFHeUMsaUJBQWUsQ0FBQztBQUNuRSxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM5QyxRQUFRLElBQUksUUFBUSxHQUFHN0MsZUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUN2QixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLFFBQVEsTUFBTTtBQUN0QixZQUFZLEtBQUssTUFBTSxDQUFDO0FBQ3hCLFlBQVksS0FBSyxNQUFNLENBQUM7QUFDeEIsWUFBWSxLQUFLLEdBQUc7QUFDcEIsZ0JBQWdCLFFBQVEsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDckQsZ0JBQWdCLE1BQU07QUFDdEIsU0FBUztBQUNULFFBQVEsT0FBTyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzFGLEtBQUs7QUFDTDs7QUMxQkEsU0FBUyw0QkFBNEIsQ0FBQyxNQUFNLEVBQUU7QUFDOUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUMvQyxDQUFDO0FBQ0QsU0FBUyw0QkFBNEIsQ0FBQyxNQUFNLEVBQUU7QUFDOUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztBQUM1QyxDQUFDO0FBQ2MsTUFBTSwrQkFBK0IsU0FBUyxjQUFjLENBQUM7QUFDNUUsSUFBSSxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRTtBQUMvRCxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQzFDLFlBQVksT0FBTyxLQUFLLENBQUM7QUFDekIsU0FBUztBQUNULFFBQVEsT0FBTyw0QkFBNEIsQ0FBQyxVQUFVLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwRyxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFO0FBQ2xFLFFBQVEsSUFBSSxTQUFTLEdBQUdBLGVBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsUUFBUSxJQUFJLDRCQUE0QixDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ3RELFlBQVksU0FBUyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuRCxTQUFTO0FBQ1QsUUFBUSxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2hKLFFBQVEsT0FBTyxJQUFJLGFBQWEsQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNwSixLQUFLO0FBQ0w7O0FDckJBLFNBQVMrQyxnQ0FBOEIsQ0FBQyxNQUFNLEVBQUU7QUFDaEQsSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksSUFBSSxDQUFDO0FBQzNELENBQUM7QUFDRCxTQUFTQyw4QkFBNEIsQ0FBQyxNQUFNLEVBQUU7QUFDOUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksSUFBSSxDQUFDO0FBQzNELENBQUM7QUFDYyxNQUFNLGtDQUFrQyxTQUFTLGNBQWMsQ0FBQztBQUMvRSxJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8sUUFBUSxDQUFDO0FBQ3hCLEtBQUs7QUFDTCxJQUFJLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFO0FBQy9ELFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUU7QUFDdkQsWUFBWSxPQUFPLEtBQUssQ0FBQztBQUN6QixTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUNELGdDQUE4QixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUNDLDhCQUE0QixDQUFDLGFBQWEsQ0FBQyxFQUFFO0FBQzVHLFlBQVksT0FBTyxLQUFLLENBQUM7QUFDekIsU0FBUztBQUNULFFBQVEsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsSCxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUU7QUFDekQsUUFBUSxJQUFJLFFBQVEsR0FBR2hELGVBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekQsUUFBUSxJQUFJK0MsZ0NBQThCLENBQUMsYUFBYSxDQUFDLEVBQUU7QUFDM0QsWUFBWSxRQUFRLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pELFNBQVM7QUFDVCxRQUFRLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDNUksUUFBUSxPQUFPLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2pKLEtBQUs7QUFDTDs7QUM5QkEsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRXRELGNBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0RSxNQUFNZSxZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ04sTUFBTSwwQkFBMEIsQ0FBQztBQUNoRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQzdCLFFBQVEsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRTtBQUMxQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEVBQUU7QUFDdkQsZ0JBQWdCLE9BQU87QUFDdkIsYUFBYTtBQUNiLFlBQVksTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JGLFlBQVksTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNELFlBQVksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUN4QixnQkFBZ0IsT0FBTztBQUN2QixhQUFhO0FBQ2IsWUFBWSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQzdDLGdCQUFnQixPQUFPO0FBQ3ZCLGFBQWE7QUFDYixZQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUNoQyxnQkFBZ0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9FLGFBQWEsQ0FBQyxDQUFDO0FBQ2YsWUFBWSxNQUFNLElBQUksR0FBR2QsV0FBUyxDQUFDLEtBQUssQ0FBQ2MsWUFBVSxDQUFDLENBQUMsQ0FBQztBQUN0RCxZQUFZLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUU7QUFDcEMsZ0JBQWdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoRCxhQUFhO0FBQ2IsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUMsWUFBWSxNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxTQUFTLENBQUMsQ0FBQztBQUNYLFFBQVEsT0FBTyxPQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMOztBQzVCZSxNQUFNLHNCQUFzQixTQUFTLE1BQU0sQ0FBQztBQUMzRCxJQUFJLFdBQVcsR0FBRztBQUNsQixRQUFRLEtBQUssRUFBRSxDQUFDO0FBQ2hCLEtBQUs7QUFDTCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQzdCLFFBQVEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4QyxRQUFRLElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUU7QUFDMUMsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLEVBQUU7QUFDMUMsWUFBWSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzlFLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDL0MsZ0JBQWdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUNwQyxvQkFBb0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLDBCQUEwQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RSxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixPQUFPLEtBQUssQ0FBQztBQUM3QixhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO0FBQ3ZELFlBQVksTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9GLFlBQVksSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUN0QyxnQkFBZ0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQ3BDLG9CQUFvQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsMEJBQTBCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLGlCQUFpQixDQUFDLENBQUM7QUFDbkIsYUFBYTtBQUNiLFlBQVksT0FBTyxLQUFLLENBQUM7QUFDekIsU0FBUztBQUNULFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMOztBQ1BlLE1BQU0sc0JBQXNCLENBQUM7QUFDNUMsSUFBSSx5QkFBeUIsQ0FBQyxZQUFZLEdBQUcsS0FBSyxFQUFFO0FBQ3BELFFBQVEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNyRSxRQUFRLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELFFBQVEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDdEQsUUFBUSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJSSxtQkFBaUIsRUFBRSxDQUFDLENBQUM7QUFDckQsUUFBUSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLDBCQUEwQixFQUFFLENBQUMsQ0FBQztBQUM5RCxRQUFRLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUlrQyxzQ0FBb0MsRUFBRSxDQUFDLENBQUM7QUFDeEUsUUFBUSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLHNCQUFzQixFQUFFLENBQUMsQ0FBQztBQUMzRCxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTCxJQUFJLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxJQUFJLEVBQUUsWUFBWSxHQUFHLEtBQUssRUFBRTtBQUNqRSxRQUFRLE1BQU0sT0FBTyxHQUFHLDBCQUEwQixDQUFDO0FBQ25ELFlBQVksT0FBTyxFQUFFO0FBQ3JCLGdCQUFnQixJQUFJLHFCQUFxQixDQUFDLFlBQVksQ0FBQztBQUN2RCxnQkFBZ0IsSUFBSTNDLDhCQUE0QixDQUFDLFVBQVUsQ0FBQztBQUM1RCxnQkFBZ0IsSUFBSU0sK0JBQTZCLEVBQUU7QUFDbkQsZ0JBQWdCLElBQUlDLCtCQUE2QixDQUFDLFlBQVksQ0FBQztBQUMvRCxnQkFBZ0IsSUFBSSxlQUFlLEVBQUU7QUFDckMsZ0JBQWdCLElBQUlPLDBCQUF3QixFQUFFO0FBQzlDLGdCQUFnQixJQUFJSyx3QkFBc0IsQ0FBQyxVQUFVLENBQUM7QUFDdEQsZ0JBQWdCLElBQUlFLDJCQUF5QixDQUFDLFVBQVUsQ0FBQztBQUN6RCxnQkFBZ0IsSUFBSUUsNkJBQTJCLENBQUMsVUFBVSxDQUFDO0FBQzNELGFBQWE7QUFDYixZQUFZLFFBQVEsRUFBRSxDQUFDLElBQUlFLHdCQUFzQixFQUFFLENBQUM7QUFDcEQsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLFFBQVEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxrQ0FBa0MsRUFBRSxDQUFDLENBQUM7QUFDM0UsUUFBUSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLCtCQUErQixFQUFFLENBQUMsQ0FBQztBQUN4RSxRQUFRLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUkscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO0FBQzlELFFBQVEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSUEsd0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0FBQzVELFFBQVEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSwwQkFBMEIsRUFBRSxDQUFDLENBQUM7QUFDaEUsUUFBUSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJRCx5QkFBdUIsRUFBRSxDQUFDLENBQUM7QUFDN0QsUUFBUSxPQUFPLE9BQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0w7O0FDeERPLE1BQU0sTUFBTSxDQUFDO0FBQ3BCLElBQUksT0FBTyxDQUFDO0FBQ1osSUFBSSxRQUFRLENBQUM7QUFDYixJQUFJLGFBQWEsR0FBRyxJQUFJLHNCQUFzQixFQUFFLENBQUM7QUFDakQsSUFBSSxXQUFXLENBQUMsYUFBYSxFQUFFO0FBQy9CLFFBQVEsYUFBYSxHQUFHLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLHlCQUF5QixFQUFFLENBQUM7QUFDeEYsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEQsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEQsS0FBSztBQUNMLElBQUksS0FBSyxHQUFHO0FBQ1osUUFBUSxPQUFPLElBQUksTUFBTSxDQUFDO0FBQzFCLFlBQVksT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3RDLFlBQVksUUFBUSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3hDLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsS0FBSztBQUNMLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFO0FBQzNDLFFBQVEsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hFLFFBQVEsT0FBTyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUNuRSxLQUFLO0FBQ0wsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUU7QUFDdkMsUUFBUSxNQUFNLE9BQU8sR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUs7QUFDekMsWUFBWSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN4RSxZQUFZLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3BELFNBQVMsQ0FBQyxDQUFDO0FBQ1gsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSztBQUMvQixZQUFZLE9BQU8sQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3JDLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRTtBQUNqRCxZQUFZLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2RCxTQUFTLENBQUMsQ0FBQztBQUNYLFFBQVEsT0FBTyxPQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksT0FBTyxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUMxQyxRQUFRLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUMzQixRQUFRLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEQsUUFBUSxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQzFDLFFBQVEsSUFBSSxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN6QyxRQUFRLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDaEQsUUFBUSxPQUFPLEtBQUssRUFBRTtBQUN0QixZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0FBQ25GLFlBQVksS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDaEMsWUFBWSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxRCxZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDekIsZ0JBQWdCLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEUsZ0JBQWdCLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3BELGdCQUFnQixTQUFTO0FBQ3pCLGFBQWE7QUFDYixZQUFZLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQztBQUNwQyxZQUFZLElBQUksTUFBTSxZQUFZLGFBQWEsRUFBRTtBQUNqRCxnQkFBZ0IsWUFBWSxHQUFHLE1BQU0sQ0FBQztBQUN0QyxhQUFhO0FBQ2IsaUJBQWlCLElBQUksTUFBTSxZQUFZLGlCQUFpQixFQUFFO0FBQzFELGdCQUFnQixZQUFZLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEYsZ0JBQWdCLFlBQVksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzVDLGFBQWE7QUFDYixpQkFBaUI7QUFDakIsZ0JBQWdCLFlBQVksR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDMUYsYUFBYTtBQUNiLFlBQVksTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztBQUNuRCxZQUFZLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7QUFDakQsWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ILFlBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN2QyxZQUFZLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEYsWUFBWSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNoRCxTQUFTO0FBQ1QsUUFBUSxPQUFPLE9BQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsQ0FBQztBQUNNLE1BQU0sY0FBYyxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDO0FBQ1QsSUFBSSxNQUFNLENBQUM7QUFDWCxJQUFJLFNBQVMsQ0FBQztBQUNkLElBQUksT0FBTyxDQUFDO0FBQ1osSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDdkMsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pGLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztBQUM5QyxLQUFLO0FBQ0wsSUFBSSx1QkFBdUIsQ0FBQyxVQUFVLEVBQUU7QUFDeEMsUUFBUSxJQUFJLFVBQVUsWUFBWSxpQkFBaUIsRUFBRTtBQUNyRCxZQUFZLE9BQU8sVUFBVSxDQUFDO0FBQzlCLFNBQVM7QUFDVCxRQUFRLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2pFLEtBQUs7QUFDTCxJQUFJLG1CQUFtQixDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRTtBQUMvRSxRQUFRLE1BQU0sSUFBSSxHQUFHLE9BQU8sY0FBYyxLQUFLLFFBQVEsR0FBRyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ3RILFFBQVEsTUFBTSxLQUFLLEdBQUcsZUFBZSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0YsUUFBUSxNQUFNLEdBQUcsR0FBRyxhQUFhLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2RixRQUFRLE9BQU8sSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxRSxLQUFLO0FBQ0wsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQ2pCLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtBQUMvQixZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFlBQVksUUFBUSxFQUFFO0FBQ3ZELGdCQUFnQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QyxhQUFhO0FBQ2IsaUJBQWlCO0FBQ2pCLGdCQUFnQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNsRCxnQkFBZ0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQyxhQUFhO0FBQ2IsU0FBUztBQUNULEtBQUs7QUFDTDs7QUNwR08sTUFBTSxhQUFhLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0FBQ25ELE1BQU1zQixRQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDMUUsTUFBTUMsUUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMxRSxNQUFNQyxJQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckUsU0FBU0MsT0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQ3pDLElBQUksT0FBT0gsUUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFDTSxTQUFTSSxXQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDN0MsSUFBSSxPQUFPSixRQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0M7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2RlLE1BQU0sc0JBQXNCLFNBQVMsNEJBQTRCLENBQUM7QUFDakYsSUFBSSxhQUFhLEdBQUc7QUFDcEIsUUFBUSxPQUFPLHFCQUFxQixDQUFDO0FBQ3JDLEtBQUs7QUFDTCxJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8saUNBQWlDLENBQUM7QUFDakQsS0FBSztBQUNMLElBQUksNEJBQTRCLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqRCxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRTtBQUM3QyxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRSxLQUFLO0FBQ0w7O0FDWk8sTUFBTS9ELG9CQUFrQixHQUFHO0FBQ2xDLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUNqQixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUNqQixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxZQUFZLEVBQUUsQ0FBQztBQUNuQixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsQ0FBQyxDQUFDO0FBQ0ssTUFBTUUsa0JBQWdCLEdBQUc7QUFDaEMsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ2xCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLFNBQVMsRUFBRSxFQUFFO0FBQ2pCLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDYixJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsSUFBSSxVQUFVLEVBQUUsRUFBRTtBQUNsQixJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ2IsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLElBQUksVUFBVSxFQUFFLEVBQUU7QUFDbEIsSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUNiLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxDQUFDLENBQUM7QUFDSyxNQUFNQyx5QkFBdUIsR0FBRztBQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ2IsSUFBSSxPQUFPLEVBQUUsRUFBRTtBQUNmLElBQUksUUFBUSxFQUFFLEVBQUU7QUFDaEIsQ0FBQyxDQUFDO0FBQ0ssTUFBTUMsc0JBQW9CLEdBQUc7QUFDcEMsSUFBSSxHQUFHLEVBQUUsUUFBUTtBQUNqQixJQUFJLE9BQU8sRUFBRSxRQUFRO0FBQ3JCLElBQUksUUFBUSxFQUFFLFFBQVE7QUFDdEIsSUFBSSxHQUFHLEVBQUUsUUFBUTtBQUNqQixJQUFJLE1BQU0sRUFBRSxRQUFRO0FBQ3BCLElBQUksT0FBTyxFQUFFLFFBQVE7QUFDckIsSUFBSSxDQUFDLEVBQUUsTUFBTTtBQUNiLElBQUksR0FBRyxFQUFFLE1BQU07QUFDZixJQUFJLE1BQU0sRUFBRSxNQUFNO0FBQ2xCLElBQUksT0FBTyxFQUFFLE1BQU07QUFDbkIsSUFBSSxHQUFHLEVBQUUsS0FBSztBQUNkLElBQUksSUFBSSxFQUFFLEtBQUs7QUFDZixJQUFJLEtBQUssRUFBRSxLQUFLO0FBQ2hCLElBQUksS0FBSyxFQUFFLE1BQU07QUFDakIsSUFBSSxNQUFNLEVBQUUsTUFBTTtBQUNsQixJQUFJLEtBQUssRUFBRSxPQUFPO0FBQ2xCLElBQUksTUFBTSxFQUFFLE9BQU87QUFDbkIsSUFBSSxPQUFPLEVBQUUsT0FBTztBQUNwQixJQUFJLE1BQU0sRUFBRSxPQUFPO0FBQ25CLElBQUksT0FBTyxFQUFFLFNBQVM7QUFDdEIsSUFBSSxRQUFRLEVBQUUsU0FBUztBQUN2QixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksU0FBUyxFQUFFLFNBQVM7QUFDeEIsSUFBSSxDQUFDLEVBQUUsTUFBTTtBQUNiLElBQUksQ0FBQyxFQUFFLE1BQU07QUFDYixJQUFJLEVBQUUsRUFBRSxNQUFNO0FBQ2QsSUFBSSxJQUFJLEVBQUUsTUFBTTtBQUNoQixJQUFJLEtBQUssRUFBRSxNQUFNO0FBQ2pCLElBQUksTUFBTSxFQUFFLE1BQU07QUFDbEIsSUFBSSxNQUFNLEVBQUUsTUFBTTtBQUNsQixDQUFDLENBQUM7QUFDSyxNQUFNQyxnQkFBYyxHQUFHLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQ0YseUJBQXVCLENBQUMsQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO0FBQ3pJLFNBQVNHLG9CQUFrQixDQUFDLEtBQUssRUFBRTtBQUMxQyxJQUFJLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNwQyxJQUFJLElBQUlILHlCQUF1QixDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwRCxRQUFRLE9BQU9BLHlCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLEtBQUs7QUFDTCxTQUFTLElBQUksR0FBRyxLQUFLLEtBQUssSUFBSSxHQUFHLEtBQUssT0FBTyxJQUFJLEdBQUcsS0FBSyxPQUFPLElBQUksR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLEtBQUssTUFBTSxFQUFFO0FBQ3ZHLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakIsS0FBSztBQUNMLFNBQVMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQ25DLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakIsS0FBSztBQUNMLFNBQVMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDdkQsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQixLQUFLO0FBQ0wsU0FBUyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDbkMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0wsU0FBUyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDcEMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0wsSUFBSSxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBQ00sTUFBTUksY0FBWSxHQUFHLENBQUMsaUlBQWlJLENBQUMsQ0FBQztBQUN6SixTQUFTQyxXQUFTLENBQUMsS0FBSyxFQUFFO0FBQ2pDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzFCLFFBQVEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pELEtBQUs7QUFDTCxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMxQixRQUFRLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEQsS0FBSztBQUNMLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzFCLFFBQVEsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4RCxLQUFLO0FBQ0wsSUFBSSxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUMsSUFBSSxPQUFPLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFDRCxNQUFNQywwQkFBd0IsR0FBRyxDQUFDLENBQUMsRUFBRUosZ0JBQWMsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDRCxzQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pILE1BQU1NLHdCQUFzQixHQUFHLElBQUksTUFBTSxDQUFDRCwwQkFBd0IsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRSxNQUFNRyxvQkFBa0IsR0FBRyx1QkFBdUIsQ0FBQyxFQUFFLEVBQUVILDBCQUF3QixDQUFDLENBQUM7QUFDakYsU0FBU0ssZUFBYSxDQUFDLFlBQVksRUFBRTtBQUM1QyxJQUFJLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUN6QixJQUFJLElBQUksYUFBYSxHQUFHLFlBQVksQ0FBQztBQUNyQyxJQUFJLElBQUksS0FBSyxHQUFHSix3QkFBc0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDM0QsSUFBSSxPQUFPLEtBQUssRUFBRTtBQUNsQixRQUFRSyx5QkFBdUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEQsUUFBUSxhQUFhLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakUsUUFBUSxLQUFLLEdBQUdMLHdCQUFzQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzRCxLQUFLO0FBQ0wsSUFBSSxPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDO0FBQ0QsU0FBU0sseUJBQXVCLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRTtBQUNuRCxJQUFJLE1BQU0sR0FBRyxHQUFHVCxvQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxJQUFJLE1BQU0sSUFBSSxHQUFHRixzQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUM5RCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUI7O0FDcktBLE1BQU1jLFNBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQywwQkFBMEI7QUFDckQsSUFBSSxpQkFBaUI7QUFDckIsSUFBSSxvREFBb0Q7QUFDeEQsSUFBSSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUNsQixvQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxJQUFJLDBCQUEwQjtBQUM5QixJQUFJLGlEQUFpRDtBQUNyRCxJQUFJLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNeUIsY0FBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNMkMsY0FBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNYixlQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ1QsTUFBTSxlQUFlLFNBQVMsc0NBQXNDLENBQUM7QUFDcEYsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPckMsU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDcUMsZUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDN0QsUUFBUSxNQUFNLE1BQU0sR0FBR3ZELG9CQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JELFFBQVEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDeUIsY0FBWSxDQUFDLENBQUM7QUFDM0MsUUFBUSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMyQyxjQUFZLENBQUMsQ0FBQztBQUM1QyxRQUFRLElBQUksWUFBWSxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQUM7QUFDN0MsUUFBUSxZQUFZLEdBQUcsWUFBWSxJQUFJLEVBQUUsQ0FBQztBQUMxQyxRQUFRLFlBQVksR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbEQsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDNUIsUUFBUSxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDMUMsWUFBWSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQzlCLFNBQVM7QUFDVCxhQUFhLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUM5QyxZQUFZLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDOUIsU0FBUztBQUNULGFBQWEsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQzlDLFlBQVksUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUM5QixTQUFTO0FBQ1QsUUFBUSxPQUFPLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3JGLEtBQUs7QUFDTDs7QUNyQ0EsTUFBTUMsbUJBQWlCLEdBQUcsSUFBSSxNQUFNLENBQUMsV0FBVztBQUNoRCxJQUFJLHFCQUFxQjtBQUN6QixJQUFJLG9CQUFvQjtBQUN4QixJQUFJLHlCQUF5QjtBQUM3QixJQUFJLHVCQUF1QjtBQUMzQixJQUFJLGNBQWM7QUFDbEIsSUFBSSx3SEFBd0g7QUFDNUgsSUFBSSxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTUMsb0JBQWtCLEdBQUcsSUFBSSxNQUFNLENBQUMsK0NBQStDO0FBQ3JGLElBQUksb0JBQW9CO0FBQ3hCLElBQUkseUJBQXlCO0FBQzdCLElBQUksdUJBQXVCO0FBQzNCLElBQUksY0FBYztBQUNsQixJQUFJLHdIQUF3SDtBQUM1SCxJQUFJLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNdEMsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNQyxjQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU1DLGNBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTUMsa0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQ1osTUFBTSw4QkFBOEIsQ0FBQztBQUNwRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7QUFDckIsUUFBUSxPQUFPa0MsbUJBQWlCLENBQUM7QUFDakMsS0FBSztBQUNMLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDNUIsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdkgsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQzFDLFlBQVksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzNDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxDQUFDLEtBQUssR0FBRyw4QkFBOEIsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hHLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7QUFDM0IsWUFBWSxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDM0MsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRixRQUFRLE1BQU0sV0FBVyxHQUFHQyxvQkFBa0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDbkUsUUFBUSxJQUFJLFdBQVcsRUFBRTtBQUN6QixZQUFZLE1BQU0sQ0FBQyxHQUFHLEdBQUcsOEJBQThCLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNoSCxZQUFZLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRTtBQUM1QixnQkFBZ0IsTUFBTSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTCxJQUFJLE9BQU8sb0JBQW9CLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxFQUFFO0FBQzdELFFBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFFBQVEsSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUN0QyxZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsSUFBSSxLQUFLLENBQUNDLGNBQVksQ0FBQyxJQUFJLElBQUksRUFBRTtBQUN6QyxZQUFZLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDQSxjQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ25ELFNBQVM7QUFDVCxRQUFRLElBQUksTUFBTSxJQUFJLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxFQUFFO0FBQ3ZDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO0FBQ3hCLFlBQVksUUFBUSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDbkMsU0FBUztBQUNULFFBQVEsSUFBSSxLQUFLLENBQUNFLGtCQUFnQixDQUFDLElBQUksSUFBSSxFQUFFO0FBQzdDLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUN6QixnQkFBZ0IsT0FBTyxJQUFJLENBQUM7QUFDNUIsWUFBWSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUNBLGtCQUFnQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDL0QsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFBRTtBQUNoRCxnQkFBZ0IsUUFBUSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDdkMsZ0JBQWdCLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRTtBQUNoQyxvQkFBb0IsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM3QixpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7QUFDaEQsZ0JBQWdCLFFBQVEsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ3ZDLGdCQUFnQixJQUFJLElBQUksSUFBSSxFQUFFLEVBQUU7QUFDaEMsb0JBQW9CLElBQUksSUFBSSxFQUFFLENBQUM7QUFDL0IsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNyQyxnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO0FBQ2hDLG9CQUFvQixRQUFRLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUMzQyxvQkFBb0IsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM3QixpQkFBaUI7QUFDakIscUJBQXFCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtBQUNuQyxvQkFBb0IsUUFBUSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDM0MsaUJBQWlCO0FBQ2pCLHFCQUFxQjtBQUNyQixvQkFBb0IsUUFBUSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDM0Msb0JBQW9CLElBQUksSUFBSSxFQUFFLENBQUM7QUFDL0IsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xELFFBQVEsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0RCxRQUFRLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtBQUMvQixZQUFZLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDOUQsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUMzQixnQkFBZ0Isb0JBQW9CLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEUsYUFBYTtBQUNiLGlCQUFpQjtBQUNqQixnQkFBZ0Isb0JBQW9CLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEUsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLElBQUksS0FBSyxDQUFDRCxjQUFZLENBQUMsSUFBSSxJQUFJLEVBQUU7QUFDekMsWUFBWSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDQSxjQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ3pELFlBQVksSUFBSSxNQUFNLElBQUksRUFBRTtBQUM1QixnQkFBZ0IsT0FBTyxJQUFJLENBQUM7QUFDNUIsWUFBWSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFELFNBQVM7QUFDVCxRQUFRLE9BQU8sb0JBQW9CLENBQUM7QUFDcEMsS0FBSztBQUNMOztBQzdHZSxNQUFNLHVCQUF1QixTQUFTLDZCQUE2QixDQUFDO0FBQ25GLElBQUksY0FBYyxHQUFHO0FBQ3JCLFFBQVEsT0FBTyxvQ0FBb0MsQ0FBQztBQUNwRCxLQUFLO0FBQ0w7O0FDSmUsTUFBTSxzQkFBc0IsU0FBUyw0QkFBNEIsQ0FBQztBQUNqRixJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8sSUFBSSxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUN0RCxLQUFLO0FBQ0w7O0FDRmUsTUFBTSxrQkFBa0IsU0FBUyxzQ0FBc0MsQ0FBQztBQUN2RixJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDMUIsUUFBUSxPQUFPLHFGQUFxRixDQUFDO0FBQ3JHLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUMzQyxRQUFRLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzFELFFBQVEsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDNUQsUUFBUSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDaEQsUUFBUSxPQUFPLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3ZGLEtBQUs7QUFDTCxJQUFJLE9BQU8scUJBQXFCLENBQUMsU0FBUyxFQUFFLGtCQUFrQixFQUFFO0FBQ2hFLFFBQVEsUUFBUSxrQkFBa0I7QUFDbEMsWUFBWSxLQUFLLFFBQVE7QUFDekIsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssV0FBVztBQUM1QixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxRQUFRLENBQUM7QUFDMUIsWUFBWSxLQUFLLFNBQVM7QUFDMUIsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssWUFBWTtBQUM3QixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxPQUFPO0FBQ3hCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFL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QUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssY0FBYztBQUMvQixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxVQUFVO0FBQzNCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLGNBQWM7QUFDL0IsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxD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QyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLFdBQVc7QUFDNUIsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxZQUFZO0FBQzdCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssVUFBVTtBQUMzQixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLGVBQWU7QUFDaEMsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxD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QUE7UUFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7OztBQUkzQyxRQUFBLE1BQU0sV0FBVyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbkcsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2pDLFlBQUEsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FB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 diff --git a/src/commands.ts b/src/commands.ts index 95b37be..0df763b 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -19,9 +19,15 @@ export function getParseCommand(plugin: NaturalLanguageDates, mode: string): voi // the edge of the text that's about to be replaced. const cursor = editor.getCursor("to"); - // Vérifier d'abord si c'est une plage de dates + // Vérifier d'abord si c'est une plage de dates. A "next week"-style period + // reference (dateRange.granularity === "week") is skipped here when a week + // periodic-note format is configured -- it falls through to plugin.parseDate() + // below instead, which resolves it to a single week-format value (e.g. + // "2026-W03") rather than a 7-day link list. An explicit weekday-to-weekday + // range (e.g. "from Monday to Friday", no granularity tag) always keeps the + // list behavior regardless of that setting. const dateRange = plugin.parseDateRange(selectedText); - if (dateRange) { + if (dateRange && !(dateRange.granularity === "week" && plugin.settings.weekFormat)) { // C'est une plage de dates let newStr = ""; diff --git a/src/lang/de.ts b/src/lang/de.ts index bac6b64..951cf88 100644 --- a/src/lang/de.ts +++ b/src/lang/de.ts @@ -35,6 +35,7 @@ const dict = { week: "Woche|Wochen|w", month: "Monat|Monate|Monats|M|mo", year: "Jahr|Jahre|j|y", + quarter: "Quartal|Quartale|Quartals", and: "und", at: "um", from: "von|ab", diff --git a/src/lang/en.ts b/src/lang/en.ts index 3d9d463..6f173db 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -35,6 +35,7 @@ const dict = { week: "Week|Weeks|w", month: "Month|Months|M|mo", year: "Year|Years|y|yr|yrs", + quarter: "Quarter|Quarters|Q|qtr", and: "And", at: "At", from: "From", diff --git a/src/lang/es.ts b/src/lang/es.ts index d51ad01..615667d 100644 --- a/src/lang/es.ts +++ b/src/lang/es.ts @@ -36,6 +36,7 @@ const dict = { week: "semana|semanas|s|w", month: "mes|meses|M|mo", year: "año|años|a|y", + quarter: "trimestre|trimestres", and: "y", at: "a las|a la|a|en", from: "de|desde", diff --git a/src/lang/fr.ts b/src/lang/fr.ts index 678e5d6..0e49980 100644 --- a/src/lang/fr.ts +++ b/src/lang/fr.ts @@ -35,6 +35,7 @@ const dict = { week: "semaine|semaines|s|w", month: "mois|M|mo", year: "année|années|an|ans|a|y", + quarter: "trimestre|trimestres", and: "et", at: "à|a", from: "de|depuis|du", diff --git a/src/lang/it.ts b/src/lang/it.ts index 09254f3..39a1a1b 100644 --- a/src/lang/it.ts +++ b/src/lang/it.ts @@ -35,6 +35,7 @@ const dict = { week: "settimana|settimane|s|w", month: "mese|mesi|M|mo", year: "anno|anni|a|y", + quarter: "trimestre|trimestri", and: "e", at: "alle|alla|a", from: "da|dal|dalla", diff --git a/src/lang/ja.ts b/src/lang/ja.ts index 5063071..3737010 100644 --- a/src/lang/ja.ts +++ b/src/lang/ja.ts @@ -35,6 +35,7 @@ const dict = { week: "週|週間|しゅう|しゅうかん", month: "月|ヶ月|かげつ|がつ", year: "年|ねん", + quarter: "四半期", of: "の", first: "最初|第一|初|最初の", and: "と|および", diff --git a/src/lang/ko.ts b/src/lang/ko.ts index 8a3cf8c..90c873e 100644 --- a/src/lang/ko.ts +++ b/src/lang/ko.ts @@ -63,6 +63,7 @@ const dict = { week: "주", month: "개월|달", year: "년", + quarter: "분기", and: "그리고", at: "에", from: "부터", diff --git a/src/lang/nl.ts b/src/lang/nl.ts index a72a9cb..add120a 100644 --- a/src/lang/nl.ts +++ b/src/lang/nl.ts @@ -2,8 +2,11 @@ const dict = { today: "Vandaag", tomorrow: "Morgen", yesterday: "Gisteren", - next: "volgende", - last: "vorige|laatste", + // "volgende"/"vorige" agree with common-gender ("de") nouns like "week"/"maand"; + // neuter ("het") nouns like "jaar"/"kwartaal" drop the final "-e" ("volgend jaar", not + // "volgende jaar"), so both forms are listed here. + next: "volgende|volgend", + last: "vorige|vorig|laatste", this: "deze|dit", in: "over", sunday: "zondag", @@ -35,6 +38,7 @@ const dict = { week: "week|weken|w", month: "maand|maanden|M|mo", year: "jaar|jaren|j|y", + quarter: "kwartaal|kwartalen", and: "en", at: "om", from: "van|vanaf", diff --git a/src/lang/pt.ts b/src/lang/pt.ts index 92b2c80..468f40f 100644 --- a/src/lang/pt.ts +++ b/src/lang/pt.ts @@ -36,6 +36,7 @@ const dict = { week: "semana|semanas|s|w", month: "mês|meses|M|mo", year: "ano|anos|a|y", + quarter: "trimestre|trimestres", and: "e", at: "às|as|à|a", from: "de|desde", diff --git a/src/lang/ru.ts b/src/lang/ru.ts index a27fcc0..18393eb 100644 --- a/src/lang/ru.ts +++ b/src/lang/ru.ts @@ -35,6 +35,7 @@ const dict = { week: "неделя|недели|недель|н|нед", month: "месяц|месяца|месяцев|мес|м", year: "год|года|лет|г|л", + quarter: "квартал|квартала|кварталов|кв", and: "и", at: "в", from: "с|от", diff --git a/src/lang/uk.ts b/src/lang/uk.ts index 4b91936..2157e09 100644 --- a/src/lang/uk.ts +++ b/src/lang/uk.ts @@ -35,6 +35,7 @@ const dict = { week: "тиждень|тижні|тижнів|т|тиж", month: "місяць|місяці|місяців|міс|м", year: "рік|роки|років|р", + quarter: "квартал|кварталу|кварталів|кв", and: "і", at: "о", from: "з|від", diff --git a/src/lang/zh.ts b/src/lang/zh.ts index 6d77e6a..b3fd759 100644 --- a/src/lang/zh.ts +++ b/src/lang/zh.ts @@ -49,6 +49,7 @@ const dict = { week: "週|周|星期|個星期|个星期|禮拜|礼拜|個禮拜|个礼拜", month: "月|個月|个月", year: "年", + quarter: "季度|個季度|个季度", and: "和", at: "在", from: "從|从|自", diff --git a/src/main.ts b/src/main.ts index 1447871..d2cbc53 100644 --- a/src/main.ts +++ b/src/main.ts @@ -376,6 +376,28 @@ export default class NaturalLanguageDates extends Plugin { }; } + if (!this.parser) { + this.resetParser(); + } + + // If this expression resolves to a whole week/month/quarter/year (e.g. + // "next quarter", "Q3 2026") and a periodic-note format is configured for + // that granularity, use it in place of the daily format -- skip the + // "Ask the parser if time is detected" dance entirely below, since a + // period reference has no time-of-day to carry. + const { date: periodDate, granularity } = this.parser.getParsedPeriod(sanitizedInput, this.settings.weekStart); + const granularityFormat = this.getPeriodicFormat(granularity); + if (granularityFormat) { + const granularityFormatValidation = validateMomentFormat(granularityFormat); + const formatToUse = granularityFormatValidation.valid ? granularityFormat : this.settings.format; + const formattedString = DateFormatter.format(periodDate, formatToUse); + return { + formattedString, + date: periodDate, + moment: moment(periodDate), + }; + } + // Valider le format de date const dateFormatValidation = validateMomentFormat(this.settings.format); if (!dateFormatValidation.valid) { @@ -391,7 +413,7 @@ export default class NaturalLanguageDates extends Plugin { // 2. If time is detected... if (hasTime) { const timeFormat = this.settings.timeFormat || "HH:mm"; - + // Valider le format de temps const timeFormatValidation = validateMomentFormat(timeFormat); if (!timeFormatValidation.valid) { @@ -403,7 +425,7 @@ export default class NaturalLanguageDates extends Plugin { // But BEWARE: it is the "date-suggest.ts" file that will add the [[ ]]. // If we don't touch date-suggest, it will make [[Date Time]]. // To make [[Date]] Time, we have to be clever. - + formatToUse = `${formatToUse} ${timeFormat}`; } } @@ -412,6 +434,20 @@ export default class NaturalLanguageDates extends Plugin { return result; } + /** + * Returns the configured periodic-note format for a given granularity + * (week/month/quarter/year), or "" if unset or the granularity is "day". + */ + private getPeriodicFormat(granularity: "day" | "week" | "month" | "quarter" | "year"): string { + switch (granularity) { + case "week": return this.settings.weekFormat; + case "month": return this.settings.monthFormat; + case "quarter": return this.settings.quarterFormat; + case "year": return this.settings.yearFormat; + default: return ""; + } + } + /** * Parses a natural language date range string. * diff --git a/src/parser.ts b/src/parser.ts index c098a0e..64da867 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -73,6 +73,32 @@ export interface NLDRangeResult { isRange: true; /** Optional list of all dates in the range as Moment objects */ dateList?: Moment[]; + /** + * Set to "week" when this range represents a whole-week period reference + * (e.g. "next week"), as opposed to an explicit weekday-to-weekday range + * (e.g. "from Monday to Friday"). Callers that offer a periodic-note-style + * week format use this to tell the two apart -- an explicit range should + * never collapse into a single week-note link, but a period reference can. + */ + granularity?: "week"; +} + +/** + * The calendar granularity a parsed expression resolves to. "day" is the + * default for anything that isn't a whole-period reference (a single date, + * a weekday, a time, etc). + */ +export type DateGranularity = "day" | "week" | "month" | "quarter" | "year"; + +/** + * Result of {@link NLDParser.getParsedPeriod}: a resolved date plus the + * calendar granularity the input expression referred to. + */ +export interface NLDPeriodResult { + /** A date that falls within the resolved period (e.g. any day of the target week). */ + date: Date; + /** The calendar granularity detected from the input text. */ + granularity: DateGranularity; } export default class NLDParser { @@ -96,11 +122,25 @@ export default class NLDParser { // Mirror of regexRelativeSuffix for the PAST direction (e.g. Portuguese // "3 dias atrás" = "3 days" + "atrás" = "ago"). regexAgoSuffix: RegExp | null; - + + // For "this/next/last week|month|quarter|year" (period-granularity shortcuts). + regexPeriodPrefix: RegExp; + // Mirror of regexPeriodPrefix for languages that postpose the prefix + // (e.g. French "le trimestre prochain", noun before "prochain"). + regexPeriodSuffix: RegExp; + // Language-neutral explicit forms: "Q3", "Q3 2026", "2026 Q3", "2026-Q3". + regexQuarterExplicit: RegExp; + regexQuarterExplicitYearFirst: RegExp; + // Language-neutral explicit ISO week: "2026-W02". + regexWeekExplicit: RegExp; + // Keywords for all languages immediateKeywords: Set; prefixKeywords: { this: Set; next: Set; last: Set }; timeUnitMap: Map; + // Per-language word sets for period-granularity detection (week/month/quarter/year), + // separate from timeUnitMap since "in 2 quarters"-style relative durations aren't supported. + periodWords: { week: Set; month: Set; quarter: Set; year: Set }; // Cache for parsed dates (LRU avec limite de 500 entrées) private cache: LRUCache; @@ -315,6 +355,33 @@ export default class NLDParser { } else { this.regexAgoSuffix = null; } + + // Period-granularity shortcuts: "this/next/last week|month|quarter|year", + // e.g. "next quarter", "cette semaine", "来月", "다음 분기". Both word + // orders are needed -- most languages put the prefix first ("next + // quarter"), but French postposes "prochain"/"dernier" after the noun + // ("le trimestre prochain", "l'année prochaine", never "prochain + // trimestre"), the same inversion the ordinal-of-month/next-week-range + // patterns elsewhere in this file already account for. Verified + // empirically per language in tests/parser.test.ts. + const periodOnlyKeys = ['week', 'month', 'year']; + const periodOnlyWords = periodOnlyKeys.flatMap(key => this.tc.collectWords(key)); + const quarterWords = this.tc.collectWords("quarter"); + const periodPatternWithQuarter = this.tc.buildAlternation([...periodOnlyWords, ...quarterWords]); + this.regexPeriodPrefix = new RegExp( + `^\\s*(${prefixPattern})\\s*(${periodPatternWithQuarter})\\s*$`, + 'i' + ); + this.regexPeriodSuffix = new RegExp( + `^\\s*(${periodPatternWithQuarter})\\s*(${prefixPattern})\\s*$`, + 'i' + ); + + // Language-neutral explicit forms -- "Q3"/"q3" works regardless of active + // language, the same way a bare ISO date string does. + this.regexQuarterExplicit = /^\s*q\s*([1-4])(?:\s+(\d{4}))?\s*$/i; + this.regexQuarterExplicitYearFirst = /^\s*(\d{4})\s*[-\s]\s*q\s*([1-4])\s*$/i; + this.regexWeekExplicit = /^\s*(\d{4})-w(\d{1,2})\s*$/i; } // Initializes keywords for fast detection @@ -343,6 +410,13 @@ export default class NLDParser { this.timeUnitMap.set(word, mapping.momentUnit); } } + + this.periodWords = { + week: new Set(this.tc.collectWords("week", { lowercase: true })), + month: new Set(this.tc.collectWords("month", { lowercase: true })), + quarter: new Set(this.tc.collectWords("quarter", { lowercase: true })), + year: new Set(this.tc.collectWords("year", { lowercase: true })), + }; } // --- UTILITY FUNCTION: DAY NAME → NUMERIC INDEX CONVERSION --- @@ -1123,6 +1197,7 @@ export default class NLDParser { endMoment: endMoment.clone(), isRange: true as const, dateList: dateList, + granularity: "week", }; return result; } @@ -1131,6 +1206,129 @@ export default class NLDParser { return null; } + // ============================================================ + // PERIOD GRANULARITY: "this/next/last week|month|quarter|year", explicit + // "Q3"/"2026-Q3"/"2026-W02" -- resolves to a representative date within the + // period, for callers that want to format the whole period (e.g. a + // Periodic-Notes-style weekly/monthly/quarterly/yearly note link) instead + // of a single day. + // ============================================================ + private tryPeriod(cleanedText: string): { date: Moment; granularity: DateGranularity } | null { + // Explicit quarter: "Q3", "Q3 2026", "2026 Q3", "2026-Q3". + const quarterMatch = cleanedText.match(this.regexQuarterExplicit) ?? cleanedText.match(this.regexQuarterExplicitYearFirst); + if (quarterMatch) { + // regexQuarterExplicit captures [quarter, year?]; regexQuarterExplicitYearFirst + // captures [year, quarter] -- tell them apart by which group is 1-4 digits long. + const [g1, g2] = [quarterMatch[1], quarterMatch[2]]; + const isYearFirst = g1.length === 4; + const quarterNum = parseInt(isYearFirst ? g2 : g1, 10); + const year = isYearFirst ? parseInt(g1, 10) : (g2 ? parseInt(g2, 10) : moment().year()); + const target = moment().year(year).quarter(quarterNum).startOf('quarter'); + return { date: target, granularity: 'quarter' }; + } + + // Explicit ISO week: "2026-W02". + const weekMatch = cleanedText.match(this.regexWeekExplicit); + if (weekMatch) { + const year = parseInt(weekMatch[1], 10); + const week = parseInt(weekMatch[2], 10); + const target = moment().isoWeekYear(year).isoWeek(week).startOf('isoWeek'); + return { date: target, granularity: 'week' }; + } + + // "this/next/last week|month|quarter|year" (most languages), or the + // postposed order "week|month|quarter|year this/next/last" (French). + const prefixMatch = cleanedText.match(this.regexPeriodPrefix); + const suffixMatch = prefixMatch ? null : cleanedText.match(this.regexPeriodSuffix); + const periodMatch = prefixMatch + ? { prefix: prefixMatch[1], period: prefixMatch[2] } + : suffixMatch + ? { prefix: suffixMatch[2], period: suffixMatch[1] } + : null; + if (periodMatch) { + const prefix = periodMatch.prefix.toLowerCase(); + const period = periodMatch.period.toLowerCase(); + + const direction: 'next' | 'last' | 'this' = + this.prefixKeywords.next.has(prefix) ? 'next' : + this.prefixKeywords.last.has(prefix) ? 'last' : + 'this'; + + // Duration units ("week" is fine here -- a week is 7 days regardless + // of ISO-ness, this only affects arithmetic, not day-of-week anchoring). + const addUnitByGranularity: Record, moment.unitOfTime.DurationConstructor> = { + week: 'week', + month: 'month', + quarter: 'quarter', + year: 'year', + }; + // startOf() units: "isoWeek" (not "week") for week granularity -- + // startOf('week') uses the locale week start (Sunday by default), + // which can land on the wrong side of an ISO week boundary near the + // edges of a week, mismatching the ISO GGGG-WW format callers use for + // week-format output. + const startOfUnitByGranularity: Record, moment.unitOfTime.StartOf> = { + week: 'isoWeek', + month: 'month', + quarter: 'quarter', + year: 'year', + }; + + const granularity: DateGranularity | null = + this.periodWords.week.has(period) ? 'week' : + this.periodWords.month.has(period) ? 'month' : + this.periodWords.quarter.has(period) ? 'quarter' : + this.periodWords.year.has(period) ? 'year' : + null; + if (!granularity) return null; + + const addUnit = addUnitByGranularity[granularity]; + const startOfUnit = startOfUnitByGranularity[granularity]; + const target = moment(); + if (direction === 'next') { + target.add(1, addUnit).startOf(startOfUnit); + } else if (direction === 'last') { + target.subtract(1, addUnit).startOf(startOfUnit); + } else if (granularity !== 'week') { + // "this week" stays on today (any day within the current week is + // fine for week-format output); "this month/quarter/year" normalizes + // to the start of the period for consistency with next/last. + target.startOf(startOfUnit); + } + + return { date: target, granularity }; + } + + return null; + } + + /** + * Parses a natural language date string, additionally reporting the + * calendar granularity the expression referred to (day/week/month/quarter/year). + * + * Falls back to {@link getParsedDate} (granularity "day") for anything + * that isn't a whole-period reference. + * + * @param selectedText - Natural language date string (e.g., "next quarter", "Q3 2026", "tomorrow") + * @param weekStartPreference - Day of week to consider as week start + * @returns The resolved date plus its granularity + * + * @example + * ```typescript + * const parser = new NLDParser(['en']); + * const { date, granularity } = parser.getParsedPeriod("next quarter", "monday"); + * console.log(granularity); // "quarter" + * ``` + */ + getParsedPeriod(selectedText: string, weekStartPreference: DayOfWeek): NLDPeriodResult { + const cleanedText = selectedText.trim().replace(/[!?.]+$/, ''); + const periodResult = this.tryPeriod(cleanedText); + if (periodResult) { + return { date: periodResult.date.toDate(), granularity: periodResult.granularity }; + } + return { date: this.getParsedDate(selectedText, weekStartPreference), granularity: 'day' }; + } + // --- UTILITY FUNCTION: WHO HAS THE BEST SCORE? --- // Returns null (rather than a "now" placeholder) when chrono-node found no // match, so callers can tell "nothing parsed" apart from "parsed to right diff --git a/src/settings.ts b/src/settings.ts index 16c9dfb..e6eb2f3 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -55,6 +55,18 @@ export interface NLDSettings { // for anything that actually needs a time. modalMomentFormat: string; + // Periodic-note formats (optional, all default to ""): when an expression + // resolves to a whole week/month/quarter/year (e.g. "next week", "Q3", + // "this quarter") instead of a single day, use this format instead of the + // daily "format" setting above -- for linking to Periodic Notes-style + // weekly/monthly/quarterly/yearly notes. Leave empty to keep using the + // daily format (and, for weeks specifically, the existing "next week" + // multi-day-link behavior) unchanged. + weekFormat: string; + monthFormat: string; + quarterFormat: string; + yearFormat: string; + // Smart suggestions enableSmartSuggestions: boolean; enableHistorySuggestions: boolean; @@ -91,6 +103,11 @@ export const DEFAULT_SETTINGS: NLDSettings = { modalToggleLink: false, modalMomentFormat: "YYYY-MM-DD", + weekFormat: "", + monthFormat: "", + quarterFormat: "", + yearFormat: "", + // Smart suggestions enableSmartSuggestions: true, enableHistorySuggestions: true, @@ -367,6 +384,59 @@ export class NLDSettingsTab extends PluginSettingTab { await this.plugin.saveSettings(); }) ); + + new Setting(containerEl).setHeading().setName("Periodic notes"); + + this.createPeriodicFormatSetting(containerEl, "Week format", "weekFormat", "GGGG-[W]WW", "next week"); + this.createPeriodicFormatSetting(containerEl, "Month format", "monthFormat", "YYYY-MM", "next month"); + this.createPeriodicFormatSetting(containerEl, "Quarter format", "quarterFormat", "YYYY-[Q]Q", "next quarter, Q3"); + this.createPeriodicFormatSetting(containerEl, "Year format", "yearFormat", "YYYY", "next year"); + } + + protected createPeriodicFormatSetting( + containerEl: HTMLElement, + name: string, + settingKey: "weekFormat" | "monthFormat" | "quarterFormat" | "yearFormat", + placeholder: string, + examples: string + ): Setting { + const baseDesc = `Used instead of the daily Date format when an expression resolves to a whole period (e.g. "${examples}"). Leave empty to keep using the daily Date format for these too.`; + + const setting = new Setting(containerEl) + .setName(name) + .setDesc(baseDesc) + .addMomentFormat((text) => + text + .setPlaceholder(placeholder) + .setValue(this.plugin.settings[settingKey]) + .onChange(async (value) => { + const trimmed = value.trim(); + if (!trimmed) { + this.plugin.settings[settingKey] = ""; + await this.plugin.saveSettings(); + setting.setDesc(baseDesc); + return; + } + const validated = validateMomentFormat(trimmed); + if (validated.valid) { + this.plugin.settings[settingKey] = trimmed; + await this.plugin.saveSettings(); + setting.setDesc(`${baseDesc}${validated.preview ? ` (Preview: ${validated.preview})` : ""}`); + } else { + setting.setDesc(`${baseDesc} - ⚠️ ${validated.error || "Format invalide"}`); + text.setValue(this.plugin.settings[settingKey]); + } + }) + ); + + if (this.plugin.settings[settingKey]) { + const initialValidation = validateMomentFormat(this.plugin.settings[settingKey]); + if (initialValidation.valid && initialValidation.preview) { + setting.setDesc(`${baseDesc} (Preview: ${initialValidation.preview})`); + } + } + + return setting; } protected createLanguageSetting(containerEl: HTMLElement, text: string, settingKey: keyof NLDSettings, code: string, note?: string) : Setting { diff --git a/tests/commands.test.ts b/tests/commands.test.ts index 2725dc7..ff30f7d 100644 --- a/tests/commands.test.ts +++ b/tests/commands.test.ts @@ -189,6 +189,74 @@ describe('Commands Integration Tests', () => { expect(callArgs).toContain('2024-01-05'); }); + it("keeps the 7-day link list for 'next week' when weekFormat is not configured (default, unchanged)", () => { + mockEditor.getSelection.mockReturnValue('next week'); + plugin.settings.weekFormat = ''; + plugin.parseDateRange = vi.fn(() => ({ + formattedString: '2026-01-05 to 2026-01-11', + startDate: moment('2026-01-05').toDate(), + endDate: moment('2026-01-11').toDate(), + startMoment: moment('2026-01-05'), + endMoment: moment('2026-01-11'), + isRange: true, + dateList: [moment('2026-01-05'), moment('2026-01-06')], + granularity: 'week', + })); + + getParseCommand(plugin, 'replace'); + + const callArgs = mockEditor.replaceSelection.mock.calls[0][0]; + expect(callArgs).toBe('[[2026-01-05]], [[2026-01-06]]'); + expect(plugin.parseDate).not.toHaveBeenCalled(); + }); + + it("uses weekFormat via plugin.parseDate() for 'next week' instead of the 7-day link list, when weekFormat is configured", () => { + mockEditor.getSelection.mockReturnValue('next week'); + plugin.settings.weekFormat = 'GGGG-[W]WW'; + plugin.parseDateRange = vi.fn(() => ({ + formattedString: '2026-01-05 to 2026-01-11', + startDate: moment('2026-01-05').toDate(), + endDate: moment('2026-01-11').toDate(), + startMoment: moment('2026-01-05'), + endMoment: moment('2026-01-11'), + isRange: true, + dateList: [moment('2026-01-05'), moment('2026-01-06')], + granularity: 'week', + })); + plugin.parseDate = vi.fn(() => ({ + formattedString: '2026-W02', + date: moment('2026-01-05').toDate(), + moment: moment('2026-01-05'), + })); + + getParseCommand(plugin, 'replace'); + + expect(plugin.parseDate).toHaveBeenCalledWith('next week'); + const callArgs = mockEditor.replaceSelection.mock.calls[0][0]; + expect(callArgs).toBe('[[2026-W02]]'); + }); + + it("still uses the explicit weekday-to-weekday range list even when weekFormat is configured (no granularity tag)", () => { + mockEditor.getSelection.mockReturnValue('from Monday to Friday'); + plugin.settings.weekFormat = 'GGGG-[W]WW'; + plugin.parseDateRange = vi.fn(() => ({ + formattedString: '2024-01-01 to 2024-01-05', + startDate: moment('2024-01-01').toDate(), + endDate: moment('2024-01-05').toDate(), + startMoment: moment('2024-01-01'), + endMoment: moment('2024-01-05'), + isRange: true, + dateList: [moment('2024-01-01'), moment('2024-01-02')], + // No granularity tag: an explicit range, not a period reference. + })); + + getParseCommand(plugin, 'replace'); + + const callArgs = mockEditor.replaceSelection.mock.calls[0][0]; + expect(callArgs).toBe('[[2024-01-01]], [[2024-01-02]]'); + expect(plugin.parseDate).not.toHaveBeenCalled(); + }); + it('should do nothing if no active view', () => { mockApp.workspace.getActiveViewOfType.mockReturnValue(null); diff --git a/tests/main-parse-date-granularity.test.ts b/tests/main-parse-date-granularity.test.ts new file mode 100644 index 0000000..b9a5e45 --- /dev/null +++ b/tests/main-parse-date-granularity.test.ts @@ -0,0 +1,104 @@ +// IMPORTANT: This file MUST import setup.ts first to define window.moment +import './setup'; + +import { describe, it, expect, beforeEach } from 'vitest'; +import NaturalLanguageDates from '../src/main'; +import NLDParser from '../src/parser'; +import { DEFAULT_SETTINGS } from '../src/settings'; +import moment from 'moment'; + +// parseDate() is invoked against a real prototype-linked instance (not a +// mock) so we exercise the actual NLDParser.getParsedPeriod() integration, +// following the same "Object.create(prototype)" pattern used by +// main-reset-parser.test.ts to avoid mocking the entire Obsidian Plugin +// lifecycle for a method that only touches this.settings/this.parser. +describe('NaturalLanguageDates.parseDate: periodic-note granularity formats (weekFormat/monthFormat/quarterFormat/yearFormat)', () => { + let plugin: NaturalLanguageDates; + + beforeEach(() => { + plugin = Object.create(NaturalLanguageDates.prototype); + (plugin as any).settings = { ...DEFAULT_SETTINGS }; + (plugin as any).parser = new NLDParser(['en']); + }); + + describe('Default behavior (all granularity formats empty) is unchanged', () => { + it('formats a plain day expression with the daily format', () => { + const result = plugin.parseDate('tomorrow'); + expect(result.formattedString).toBe(moment().add(1, 'day').format('YYYY-MM-DD')); + }); + + it('formats "next month" with the daily format when monthFormat is not configured', () => { + const result = plugin.parseDate('next month'); + const expected = moment().add(1, 'months').startOf('month').format('YYYY-MM-DD'); + expect(result.formattedString).toBe(expected); + }); + + it('formats "next week" with the daily format when weekFormat is not configured (single-date path)', () => { + const result = plugin.parseDate('next week'); + // Day-granularity fallback path (this.parse -> getParsedDate), same as + // before this feature existed -- just needs to be a valid date next week. + expect(result.moment.isValid()).toBe(true); + expect(result.moment.isAfter(moment(), 'day')).toBe(true); + }); + }); + + describe('When a granularity format is configured', () => { + it('uses weekFormat for "next week"', () => { + plugin.settings.weekFormat = 'GGGG-[W]WW'; + const result = plugin.parseDate('next week'); + const expected = moment().add(1, 'week').format('GGGG-[W]WW'); + expect(result.formattedString).toBe(expected); + }); + + it('uses monthFormat for "next month"', () => { + plugin.settings.monthFormat = 'YYYY-MM'; + const result = plugin.parseDate('next month'); + const expected = moment().add(1, 'months').format('YYYY-MM'); + expect(result.formattedString).toBe(expected); + }); + + it('uses quarterFormat for "next quarter"', () => { + plugin.settings.quarterFormat = 'YYYY-[Q]Q'; + const result = plugin.parseDate('next quarter'); + const expected = moment().add(1, 'quarter').format('YYYY-[Q]Q'); + expect(result.formattedString).toBe(expected); + }); + + it('uses quarterFormat for the explicit "Q3" form', () => { + plugin.settings.quarterFormat = 'YYYY-[Q]Q'; + const result = plugin.parseDate('Q3'); + const expected = moment().quarter(3).format('YYYY-[Q]Q'); + expect(result.formattedString).toBe(expected); + }); + + it('uses yearFormat for "next year"', () => { + plugin.settings.yearFormat = 'YYYY'; + const result = plugin.parseDate('next year'); + const expected = moment().add(1, 'years').format('YYYY'); + expect(result.formattedString).toBe(expected); + }); + + it('does not use monthFormat for a plain day expression, even when configured', () => { + plugin.settings.monthFormat = 'YYYY-MM'; + const result = plugin.parseDate('tomorrow'); + expect(result.formattedString).toBe(moment().add(1, 'day').format('YYYY-MM-DD')); + }); + + it('falls back to the daily format when the configured quarterFormat is invalid', () => { + plugin.settings.quarterFormat = ''; + const result = plugin.parseDate('next quarter'); + const expected = moment().add(1, 'quarter').startOf('quarter').format(DEFAULT_SETTINGS.format); + expect(result.formattedString).toBe(expected); + }); + }); + + describe('Regression: this feature must not resurrect a time-of-day on period results', () => { + it('"next month" formatted with a format that includes time tokens still only shows the period, since periods carry no time', () => { + plugin.settings.monthFormat = 'YYYY-MM-DD HH:mm'; + const result = plugin.parseDate('next month'); + // startOf('month') zeroes the time -- verifies getParsedPeriod's date + // (not some other now()-based value) is what actually gets formatted. + expect(result.formattedString.endsWith('00:00')).toBe(true); + }); + }); +}); diff --git a/tests/parser.test.ts b/tests/parser.test.ts index c71cfcd..0432f6e 100644 --- a/tests/parser.test.ts +++ b/tests/parser.test.ts @@ -2024,5 +2024,115 @@ describe('NLDParser', () => { }); }); }); + + describe('Period granularity (getParsedPeriod: this/next/last week/month/quarter/year, explicit Q3/2026-Q3/2026-W02)', () => { + describe('Explicit language-neutral forms', () => { + it("parses 'Q3' as this year's Q3, granularity quarter", () => { + const result = parser.getParsedPeriod('Q3', weekStartPreference); + expect(result.granularity).toBe('quarter'); + const expected = moment().quarter(3).startOf('quarter'); + expectSameDate(result.date, expected, 'day'); + }); + + it("parses 'Q3 2026' with an explicit year, granularity quarter", () => { + const result = parser.getParsedPeriod('Q3 2026', weekStartPreference); + expect(result.granularity).toBe('quarter'); + const expected = moment().year(2026).quarter(3).startOf('quarter'); + expectSameDate(result.date, expected, 'day'); + }); + + it("parses '2026-Q3' (year-first), granularity quarter", () => { + const result = parser.getParsedPeriod('2026-Q3', weekStartPreference); + expect(result.granularity).toBe('quarter'); + const expected = moment().year(2026).quarter(3).startOf('quarter'); + expectSameDate(result.date, expected, 'day'); + }); + + it("parses '2026 Q3' (year-first, space), granularity quarter", () => { + const result = parser.getParsedPeriod('2026 Q3', weekStartPreference); + expect(result.granularity).toBe('quarter'); + const expected = moment().year(2026).quarter(3).startOf('quarter'); + expectSameDate(result.date, expected, 'day'); + }); + + it("parses '2026-W02' as an explicit ISO week, granularity week", () => { + const result = parser.getParsedPeriod('2026-W02', weekStartPreference); + expect(result.granularity).toBe('week'); + const expected = moment().isoWeekYear(2026).isoWeek(2).startOf('isoWeek'); + expectSameDate(result.date, expected, 'day'); + }); + + it("rejects an out-of-range quarter number ('Q5')", () => { + const result = parser.getParsedPeriod('Q5', weekStartPreference); + expect(result.granularity).toBe('day'); + }); + }); + + describe('getParsedDate (day-granularity path) is untouched by period detection', () => { + it("'next month' via getParsedDate still returns start of next month directly (no getParsedPeriod involved)", () => { + const result = parser.getParsedDate('next month', weekStartPreference); + const expected = moment().add(1, 'months').startOf('month'); + expectSameDate(result, expected, 'day'); + }); + }); + + // Per-language verification (this/next/last week/month/quarter/year), + // each using a single-language parser instance so a match can't be + // accidentally satisfied by some other active language's vocabulary -- + // required by this project's "verify empirically per language, not just + // combined" rule for anything touching parsing across the 12 supported + // languages. + const perLanguagePeriodPhrases: Record; last: Record<'week' | 'month' | 'quarter' | 'year', string> }> = { + en: { next: { week: 'next week', month: 'next month', quarter: 'next quarter', year: 'next year' }, last: { week: 'last week', month: 'last month', quarter: 'last quarter', year: 'last year' } }, + fr: { next: { week: 'semaine prochaine', month: 'mois prochain', quarter: 'trimestre prochain', year: 'année prochaine' }, last: { week: 'semaine dernière', month: 'mois dernier', quarter: 'trimestre dernier', year: 'année dernière' } }, + es: { next: { week: 'próxima semana', month: 'próximo mes', quarter: 'próximo trimestre', year: 'próximo año' }, last: { week: 'última semana', month: 'último mes', quarter: 'último trimestre', year: 'último año' } }, + it: { next: { week: 'prossima settimana', month: 'prossimo mese', quarter: 'prossimo trimestre', year: 'prossimo anno' }, last: { week: 'ultima settimana', month: 'ultimo mese', quarter: 'ultimo trimestre', year: 'ultimo anno' } }, + de: { next: { week: 'nächste Woche', month: 'nächster Monat', quarter: 'nächstes Quartal', year: 'nächstes Jahr' }, last: { week: 'letzte Woche', month: 'letzter Monat', quarter: 'letztes Quartal', year: 'letztes Jahr' } }, + pt: { next: { week: 'próxima semana', month: 'próximo mês', quarter: 'próximo trimestre', year: 'próximo ano' }, last: { week: 'última semana', month: 'último mês', quarter: 'último trimestre', year: 'último ano' } }, + ru: { next: { week: 'следующая неделя', month: 'следующий месяц', quarter: 'следующий квартал', year: 'следующий год' }, last: { week: 'последняя неделя', month: 'последний месяц', quarter: 'последний квартал', year: 'последний год' } }, + uk: { next: { week: 'наступний тиждень', month: 'наступний місяць', quarter: 'наступний квартал', year: 'наступний рік' }, last: { week: 'останній тиждень', month: 'останній місяць', quarter: 'останній квартал', year: 'останній рік' } }, + nl: { next: { week: 'volgende week', month: 'volgende maand', quarter: 'volgend kwartaal', year: 'volgend jaar' }, last: { week: 'vorige week', month: 'vorige maand', quarter: 'vorig kwartaal', year: 'vorig jaar' } }, + ja: { next: { week: '来週', month: '来月', quarter: '来四半期', year: '来年' }, last: { week: '先週', month: '先月', quarter: '先四半期', year: '去年' } }, + // Note: "下年"/"上年" here are the compositional short-prefix forms this + // dictionary already supports (see zh.ts's "下"/"上" short-prefix + // comments), not the more idiomatic standalone words "明年"/"去年" -- + // those aren't generic "next/last" + noun compositions and aren't in + // the dictionary as such. + 'zh.hant': { next: { week: '下週', month: '下個月', quarter: '下季度', year: '下年' }, last: { week: '上週', month: '上個月', quarter: '上季度', year: '上年' } }, + ko: { next: { week: '다음 주', month: '다음 달', quarter: '다음 분기', year: '다음 년' }, last: { week: '지난 주', month: '지난 달', quarter: '지난 분기', year: '지난 년' } }, + }; + + for (const [lang, phrases] of Object.entries(perLanguagePeriodPhrases)) { + describe(`Language: ${lang}`, () => { + const singleLangParser = new NLDParser([lang]); + + (['week', 'month', 'quarter', 'year'] as const).forEach((granularity) => { + it(`"${phrases.next[granularity]}" (next ${granularity}) resolves to granularity "${granularity}", in the future`, () => { + const result = singleLangParser.getParsedPeriod(phrases.next[granularity], weekStartPreference); + expect(result.granularity).toBe(granularity); + expectFutureDate(result.date, moment().subtract(1, 'day').toDate()); + }); + + it(`"${phrases.last[granularity]}" (last ${granularity}) resolves to granularity "${granularity}", in the past`, () => { + const result = singleLangParser.getParsedPeriod(phrases.last[granularity], weekStartPreference); + expect(result.granularity).toBe(granularity); + expectPastDate(result.date, moment().add(1, 'day').toDate()); + }); + }); + }); + } + + describe('getParsedDateRange tags "next week" with granularity: "week"', () => { + it("English 'next week'", () => { + const result = parser.getParsedDateRange('next week', weekStartPreference); + expect(result?.granularity).toBe('week'); + }); + + it("'from Monday to Friday' is not tagged (explicit range, not a period reference)", () => { + const result = parser.getParsedDateRange('from Monday to Friday', weekStartPreference); + expect(result?.granularity).toBeUndefined(); + }); + }); + }); }); diff --git a/tests/settings.test.ts b/tests/settings.test.ts index a33a038..86a7202 100644 --- a/tests/settings.test.ts +++ b/tests/settings.test.ts @@ -241,6 +241,55 @@ describe('NLDSettingsTab', () => { expect(openSpy).toHaveBeenCalledTimes(1); openSpy.mockRestore(); }); + + describe('Periodic notes formats (weekFormat/monthFormat/quarterFormat/yearFormat)', () => { + const cases: { label: string; settingsKey: 'weekFormat' | 'monthFormat' | 'quarterFormat' | 'yearFormat' }[] = [ + { label: 'Week format', settingsKey: 'weekFormat' }, + { label: 'Month format', settingsKey: 'monthFormat' }, + { label: 'Quarter format', settingsKey: 'quarterFormat' }, + { label: 'Year format', settingsKey: 'yearFormat' }, + ]; + + cases.forEach(({ label, settingsKey }) => { + it(`creates a "${label}" setting reflecting the current (empty by default) value`, () => { + tab.display(); + const setting = findSetting(label); + expect(setting.components[0].value).toBe(''); + }); + + it(`saves a valid new "${label}" value`, async () => { + tab.display(); + const setting = findSetting(label); + await setting.components[0].onChangeHandler('YYYY-MM'); + expect(plugin.settings[settingsKey]).toBe('YYYY-MM'); + expect(plugin.saveSettings).toHaveBeenCalled(); + }); + + it(`rejects an invalid "${label}" value and restores the previous one`, async () => { + tab.display(); + const setting = findSetting(label); + plugin.settings[settingsKey] = 'YYYY-MM'; + await setting.components[0].onChangeHandler('@@@'); + expect(plugin.settings[settingsKey]).toBe('YYYY-MM'); + expect(setting.components[0].value).toBe('YYYY-MM'); + }); + + it(`clears "${label}" (back to disabled) when emptied, without an error`, async () => { + tab.display(); + const setting = findSetting(label); + plugin.settings[settingsKey] = 'YYYY-MM'; + await setting.components[0].onChangeHandler(' '); + expect(plugin.settings[settingsKey]).toBe(''); + expect(plugin.saveSettings).toHaveBeenCalled(); + }); + + it(`shows no initial preview when "${label}" is left at its empty default`, () => { + tab.display(); + const setting = findSetting(label); + expect(setting.descText).not.toContain('Preview'); + }); + }); + }); }); describe('editLanguages (direct)', () => {